All files / app/page/settings/setup setup.component.html

27.27% Statements 39/143
18.91% Branches 7/37
0% Functions 0/9
43.28% Lines 29/67

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 1071x 2x 1x 1x 1x 1x   1x     1x   1x 1x 2x 1x   2x 1x   1x   2x     2x                       2x 1x                             1x     1x                   1x 2x                   1x   1x           1x   1x                           1x 1x        
<div class="row">
  <form class="form" [formGroup]="adminForm">
    <span><!-- Title --></span>
    <h2 i18n>Install Mods</h2>
    <span><!-- Description --></span>
    <p i18n>
      Quickly turn on and off mods bundled with this client.
      Visit the <a routerLink="../plugin">plugins</a> or
      <a routerLink="../template">templates</a> settings page to manage all
      plugins and templates.
    </p>
 
    <span><!-- Buttons --></span>
    <span class="buttons right">
      @if (store.view.modUpdates.size) {
        <button type="button" (click)="updateAll()" i18n>��️ Update All</button>
      }
      @if (selectAllToggle) {
        <button type="button" (click)="selectAll()" i18n>Select None</button>
      } @else {
        <button type="button" (click)="selectAll()" i18n>Select All</button>
      }
      <button type="button" (click)="install()" [disabled]="submitted && !adminForm.valid" i18n>Save</button>
    </span>
 
    @if (serverError.length || installMessages.length) {
      <span class="mobile-block"><!-- Log --></span>
      <div class="log mobile-block">
        @for (e of serverError; track e) {
          <div class="error">{{ e }}</div>
        }
        @for (i of installMessages; track $index) {
          <div>{{ i }}</div>
        }
      </div>
    }
 
    @for (group of modGroups | keyvalue; track group.key) {
      <label [style.text-transform]="'capitalize'" i18n>{{ group.key }}</label>
      <div formGroupName="mods" class="bubble">
        @for (e of group.value; track e[0]) {
          @let key = e[0];
          @let c = e[1];
          @if (experiments || !c.config?.experimental || installed(c)) {
            <div [title]="c.config?.description || ''" class="mod-row nowrap" [class.deleted]="disabled(c)">
              <input id="mod-{{ modLabel(e) }}" type="checkbox" [formControlName]="key">
              <label for="mod-{{ modLabel(e) }}" [title]="c.config?.description || ''">{{ c.config?.mod || c.name || c.tag || 'root' }}@if (hasCustomChanges(c)) {<span class="modified-indicator">*</span>}</label>
              @if (c.config?.experimental) {
                <span>�️</span>
              }
              @if (needsModUpdate(c) || canDiffMod(c)) {
                <span class="update">
                  @if (needsModUpdate(c)) {
                    <span class="fake-link no-select mod-update-link" (click)="updateMod(c)" i18n>��️ update</span>
                  }
                  @if (canDiffMod(c)) {
                    <span class="fake-link no-select mod-diff-link" (click)="diffMod(c)" i18n>�� diff</span>
                  }
                </span>
              }
            </div>
          }
        }
      </div>
    }
 
  </form>
  @if (serverError.length || installMessages.length) {
    <span class="log mobile-hide">
      @for (e of serverError; track $index) {
        <div class="error">{{ e }}</div>
      }
      @for (i of installMessages; track $index) {
        <div>{{ i }}</div>
      }
    </span>
  }
</div>
 
<ng-template #mergePopup>
  <div class="merge-popup">
    <div class="merge-popup-header">
      <label class="merge-title">{{ mergeState!.mod }}</label>
    </div>
    @if (mergeState!.conflict) {
      <div class="warning merge-warning" i18n>Unable to merge automatically. Review the mod diff or overwrite your local changes.</div>
    } @else {
      <div class="warning merge-warning" i18n>Review the merged mod before saving or overwrite your local changes.</div>
    }
    <app-diff #mergeDiff
              class="mod-merge-diff"
              [original]="mergeState!.diffBase"
              [modified]="mergeState!.proposed"
              [fullHeight]="true"
              [resizable]="false">
    </app-diff>
    <span><!-- Buttons --></span>
    <span class="buttons right merge-buttons">
      @if (mergeSaving) {
        <app-loading [inline]="true"></app-loading>
      }
      <button type="button" [disabled]="mergeSaving" (click)="applyMerge(mergeDiff.getModifiedContent())" i18n>save</button>
      <button type="button" [disabled]="mergeSaving" (click)="cancelMerge()" i18n>cancel</button>
    </span>
  </div>
</ng-template>