1<ng-template #loading><div class="spinner"></div></ng-template>
2<div class="page-wrap" *ngIf="!!(isAdminRootReady | async); else loading">
3  <!-- <div -->
4  <!--    ng-if="rbac.cluster.settings.read" -->
5  <!--    mn-launchpad -->
6  <!--    launchpad-source="adminCtl.launchpadSource" -->
7  <!--    launchpad-id="adminCtl.launchpadId"></div> -->
8  <!-- <div -->
9  <!--    ui-view="lostConnection"> -->
10  <!-- </div> -->
11
12  <div class="row">
13    <nav class="nav-header">
14      <a (click)="toggleProgressBar()"
15         class="activities"
16         *ngIf="(tasksReadPermission | async)">
17        Activity
18        <span
19           [hidden]="!(tasksToDisplay| async)?.length > 0"
20           class="label badge">
21          {{(tasksToDisplay| async)?.length}}
22        </span>
23      </a>
24      <div
25         class="relative inline"
26         *ngIf="(tasksReadPermission | async)">
27        <div
28           class="tasks-progress dialog-small"
29           mnDraggable
30           [@mnMinimize]
31           [baseCornerRight]="true"
32           *ngIf="!(isProgressBarClosed | async)">
33          <div class="close-tasks">
34            <span (click)="toggleProgressBar()">X</span>
35          </div>
36          <div class="panel-content">
37            <div
38               class="text-small margin-bottom-1"
39               [hidden]="(tasksToDisplay | async)?.length">
40              No active processes to display
41            </div>
42            <div *ngFor="let task of tasksToDisplay | async">
43              <div class="text-small text-left">
44                {{task | mnFormatProgressMessage}}
45                <span [hidden]="!task.progress">{{(task.progress | number: '1.0-1') + '%'}}</span>
46              </div>
47              <div
48                 class="bar-wrapper"
49                 [hidden]="task.type === 'loadingSampleBucket' || task.type === 'orphanBucket'">
50                <div
51                   class="bar positive"
52                   [ngStyle]="{'width': task.progress + '%'}">
53                  <div></div>
54                </div>
55                <div
56                   class="bar negative"
57                   [ngStyle]="{'width': (100 - task.progress) + '%'}">
58                  <div></div>
59                </div>
60              </div>
61            </div>
62          </div>
63        </div>
64      </div>
65      <a
66         (click)="runInternalSettingsDialog();"
67         [hidden]="!(enableInternalSettings | async)">
68        Edit internal settings
69      </a>
70      <a href="https://developer.couchbase.com/documentation/server/{{majorMinorVersion | async}}/introduction/whats-new.html" target="_blank">
71        Documentation
72      </a>
73      <a href="{{(isEnterprise | async) ? 'http://support.couchbase.com' : 'http://www.couchbase.com/communities/'}}" target="cbforums">
74        Support
75      </a>
76      <span
77         ngbDropdown
78         placement="bottom-right"
79         class="dropdown">
80        <a ngbDropdownToggle class="nowrap ellipsis max-width-3">
81          {{whomiId | async}}
82          <span class="has-menu">&nbsp;</span>
83        </a>
84        <div
85           ngbDropdownMenu
86           class="dropdown-menu-select-like"
87           [style.right]="'auto'">
88          <a
89             [hidden]="!(enableResetButton | async)"
90             (click)="showResetPasswordDialog()">
91            Reset password
92          </a>
93          <a
94             (click)="onLogout()"
95             class="ellipsis max-width-4">
96            Sign out {{whomiId | async}}
97          </a>
98        </div>
99      </span>
100    </nav>
101  </div>
102
103  <header>
104    <a uiSref="app.admin.overview" class="logobug-wrapper">
105      <img src="../cb_logo_bug_white_2.svg" width="48" height="48" alt="Couchbase Server" class="logobug">
106    </a>
107    <h1>
108      <a uiSref="app.admin.overview" class="resp-txt-xsml ellipsis">
109        {{clusterName | async}} <!-- the cluster name -->
110      </a>
111      <span class="resp-hide-xsml" [hidden]="!(clusterName | async)">
112        <span class="icon fa-angle-right"></span>
113      </span>
114      <span *ngIf="stateService.current.data.child">
115        <a
116           uiState="stateService.current.data.child"
117           uiStateParams="({} | lodash:'merge':stateService.params:stateService.current.data.childParams)">
118          {{stateService.get(stateService.current.data.child).data.title}} <!-- the back-to-parent page name -->
119        </a>
120      </span>
121      <span *ngIf="stateService.current.data.child" class="icon fa-angle-right"></span>
122      <span>
123        {{stateService.current.data.title}} <!-- the current page name -->
124      </span>
125    </h1>
126
127    <!-- Depots are the placeholders for page-specific controls/content -->
128
129
130
131    <div class="row flex-right">
132      <mn-element-depot name="header"></mn-element-depot>
133      <mn-element-depot name="actions"></mn-element-depot>
134
135      <span class="menu-icon" (click)="showRespMenu = !showRespMenu">
136        <span class="icon fa-navicon"></span>
137      </span>
138    </div>
139  </header>
140
141  <mn-element-depot name="subnav"></mn-element-depot>
142  <mn-element-depot name="alerts"></mn-element-depot>
143
144  <!-- <div -->
145  <!--    class="alert alert-warning" -->
146  <!--    ng-show="adminCtl.lostConnState.isActivated"> -->
147  <!--   <p>Difficulties communicating with the cluster. Displaying cached information.</p> -->
148  <!-- </div> -->
149
150  <!-- <div -->
151  <!--    ng-repeat="alert in adminCtl.alerts" -->
152  <!--    class="animate-alert alert enable-ng-animation" -->
153  <!--    ng-class="{ -->
154  <!--              'alert-error': alert.type !== 'success', -->
155  <!--              'alert-success': alert.type === 'success' -->
156  <!--              }"> -->
157  <!--   <p>{{alert.msg}}</p> -->
158  <!--   <a ng-click="adminCtl.closeAlert(alert)" class="close">X</a> -->
159  <!-- </div> -->
160
161  <main>
162    <!-- <nav -->
163    <!--    class="nav-sidebar" -->
164    <!--    ng-class="{'resp-show-menu' : showRespMenu}" -->
165    <!--    ng-click="showRespMenu = !showRespMenu" -->
166    <!--    mn-pluggable-ui-tabs -->
167    <!--    mn-tab-bar-name="adminTab"> -->
168    <nav
169       class="nav-sidebar">
170      <a
171         mn-tab="overview"
172         uiSref="app.admin.overview"
173         uiSrefActive="currentnav">Dashboard</a>
174      <a
175         mn-tab="servers"
176         uiSrefActive="currentnav"
177         uiSref="app.admin.servers">Servers</a>
178      <!-- <a -->
179      <!--    mn-tab="buckets" -->
180      <!--    ng-show="rbac.cluster.bucket['.'].settings.read" -->
181      <!--    ui-sref="app.admin.buckets" -->
182      <!--    ui-sref-active="currentnav">Buckets</a> -->
183      <!-- <a -->
184      <!--    mn-tab="indexes" -->
185      <!--    ng-class="{currentnav: ('app.admin.indexes' | includedByState)}" -->
186      <!--    ng-show="rbac.cluster.bucket['.'].views.read || rbac.cluster.indexes.read" -->
187      <!--    ui-sref="app.admin.indexes.gsi" -->
188      <!--    class="resp-hide-sml"> -->
189      <!--   <span -->
190      <!--      ui-sref="app.admin.indexes.gsi" -->
191      <!--      ng-show="rbac.cluster.indexes.read">Indexes</span> -->
192      <!--   <span -->
193      <!--      ui-sref="app.admin.indexes.views.list" -->
194      <!--      ng-show="rbac.cluster.indexes.read === false">Indexes</span> -->
195      <!-- </a> -->
196      <!-- <a -->
197      <!--    ng-show="rbac.cluster.tasks.read" -->
198      <!--    mn-tab="replications" -->
199      <!--    ui-sref-active="currentnav" -->
200      <!--    ui-sref="app.admin.replications" -->
201      <!--    class="margin-bottom-1">XDCR</a> -->
202
203      <!-- <a -->
204      <!--    mn-tab="security" -->
205      <!--    ng-class="{currentnav: ('app.admin.security' | includedByState)}" -->
206      <!--    ng-show="rbac.cluster.admin.security.read" -->
207      <!--    ui-sref="app.admin.security"> -->
208      <!--   Security -->
209      <!-- </a> -->
210      <!-- <a -->
211      <!--    mn-tab="settings" -->
212      <!--    ng-class="{currentnav: ('app.admin.settings' | includedByState)}" -->
213      <!--    ui-sref="app.admin.settings.cluster"> -->
214      <!--   <span -->
215      <!--      ng-show="adminCtl.updates.sendStats && !!adminCtl.updates.newVersion" -->
216      <!--      class="label neutral badge notify">i</span> -->
217      <!--   Settings -->
218      <!-- </a> -->
219      <!-- <a -->
220      <!--    mn-tab="logs" -->
221      <!--    ui-sref="app.admin.logs.list" -->
222      <!--    ng-class="{currentnav: ('app.admin.logs' | includedByState)}" -->
223      <!--    ng-show="rbac.cluster.logs.read">Logs</a> -->
224    </nav>
225
226    <!-- all page content goes here -->
227    <ui-view name="main"
228             autoscroll="false"
229             class="main-content min-width-zero"
230             opacity="true"></ui-view>
231  </main>
232</div>
233
234<footer *ngIf="!!(isAdminRootReady | async)">Copyright &copy; 2019 <a href="http://couchbase.com" target="_blank">Couchbase, Inc.</a> All rights reserved.</footer>
235