"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
+ "index": {
+ "input": "src/index.brand.html",
+ "output": "index.html"
+ },
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
+ },
+ {
+ "replace": "src/app/core/layouts/login-layout/login-layout.component.html",
+ "with": "src/app/core/layouts/login-layout/login-layout.component.brand.html"
+ },
+ {
+ "replace": "src/app/core/auth/login/login.component.html",
+ "with": "src/app/core/auth/login/login.component.brand.html"
+ },
+ {
+ "replace": "src/app/core/navigation/navigation/navigation.component.html",
+ "with": "src/app/core/navigation/navigation/navigation.component.brand.html"
+ },
+ {
+ "replace": "src/app/core/navigation/about/about.component.html",
+ "with": "src/app/core/navigation/about/about.component.brand.html"
}
]
},
--- /dev/null
+<div *ngIf="isLoginActive">
+ <h2 i18n>Login</h2>
+ <form name="loginForm"
+ (ngSubmit)="login()"
+ #loginForm="ngForm"
+ novalidate>
+
+ <!-- Username -->
+ <div class="form-group has-feedback">
+ <input name="username"
+ [(ngModel)]="model.username"
+ #username="ngModel"
+ type="text"
+ placeholder="Enter your username..."
+ class="form-control"
+ required
+ autofocus>
+ <div class="invalid-feedback"
+ *ngIf="(loginForm.submitted || username.dirty) && username.invalid"
+ i18n>Username is required</div>
+ </div>
+
+ <!-- Password -->
+ <div class="form-group has-feedback">
+ <div class="input-group">
+ <input id="password"
+ name="password"
+ [(ngModel)]="model.password"
+ #password="ngModel"
+ type="password"
+ placeholder="Enter your password..."
+ class="form-control"
+ required>
+ <span class="input-group-append">
+ <button type="button"
+ class="btn btn-outline-light btn-password"
+ cdPasswordButton="password">
+ </button>
+ </span>
+ </div>
+ <div class="invalid-feedback"
+ *ngIf="(loginForm.submitted || password.dirty) && password.invalid"
+ i18n>Password is required</div>
+ </div>
+
+ <input type="submit"
+ class="btn btn-primary btn-block"
+ [disabled]="loginForm.invalid"
+ value="Login"
+ i18n-value>
+ </form>
+</div>
--- /dev/null
+<div class="login-suse">
+ <header>
+ <nav class="navbar">
+ <a class="navbar-brand"><span>SUSE Enterprise Storage</span></a>
+ <div class="form-inline">
+ <cd-language-selector></cd-language-selector>
+ </div>
+ </nav>
+ </header>
+
+ <section>
+ <div class="container">
+ <div class="row full-height vertical-align">
+ <div class="col-sm-6 d-none d-md-block">
+ <h1 i18n>SUSE Enterprise Storage</h1>
+ <p i18n>
+ <span i18n
+ class="subheader">
+ AN INTELLIGENT SOFTWARE-DEFINED STORAGE SOLUTION, POWERED BY CEPH TECHNOLOGY,
+ WHICH ENABLES YOU TO TRANSFORM YOUR ENTERPRISE STORAGE INFRASTRUCTURE.
+ </span>
+ <ng-container i18n>
+ <span class="d-md-none d-lg-block">
+ Providing IT organizations with a simple to manage, agile infrastructure with increased speed of delivery,
+ durability and reliability. Accelerate innovation, reduce costs and alleviate proprietary hardware lock-in
+ by transforming your enterprise storage infrastructure with a truly open, and unified intelligent
+ software-defined storage solution.
+ </span>
+ </ng-container>
+ </p>
+ </div>
+
+ <div class="col-xs-12 col-md-5 col-sm-offset-1">
+ <router-outlet></router-outlet>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="col-sm-9">
+ <span>© 2020 Ceph contributors. Free software (LGPL 2.1)</span>
+ </div>
+ <div class="col-sm-3 text-right d-none d-sm-block">
+ <img alt="SUSE Logo"
+ src="assets/SUSE_Chameleon_L_White-neg_sRGB-250.png"
+ class="footer-logo">
+ </div>
+ </div>
+ </div>
+ </footer>
+</div>
--- /dev/null
+<div class="modal-header">
+ <button type="button"
+ class="close float-right"
+ aria-label="Close"
+ (click)="modalRef.hide()">
+ <span aria-hidden="true">×</span>
+ </button>
+</div>
+<div class="modal-body">
+ <img src="assets/SUSE_Logo-vert_L_Green-pos_sRGB-500.png"
+ class="suse-logo"
+ alt="SUSE Enterprise Storage">
+ <h2>
+ SUSE Enterprise Storage
+ </h2>
+ <div class="product-versions">
+ <strong>Version</strong>
+ <br>
+ {{ versionNumber }}
+ {{ versionHash }}
+ <br>
+ {{ versionName }}
+ </div>
+ <br>
+ <ul class="list-unstyled">
+ <li class="row">
+ <strong class="col-6 col-sm-4">Ceph Manager</strong>
+ <span class="col-4 col-sm-4">{{ hostAddr }}</span>
+ </li>
+ <li class="row">
+ <strong class="col-6 col-sm-4">User</strong>
+ <span class="col-4 col-sm-4">{{ modalVariables.user }}</span>
+ </li>
+ <li class="row">
+ <strong class="col-6 col-sm-4">User Role</strong>
+ <span class="col-4 col-sm-4">{{ modalVariables.role }}</span>
+ </li>
+ <li class="row">
+ <strong class="col-6 col-sm-4">Browser</strong>
+ <span class="col-4 col-sm-4">{{ modalVariables.browserName }}</span>
+ </li>
+ <li class="row">
+ <strong class="col-6 col-sm-4">Browser Version</strong>
+ <span class="col-4 col-sm-4">{{ modalVariables.browserVersion }}</span>
+ </li>
+ <li class="row">
+ <strong class="col-6 col-sm-4">Browser OS</strong>
+ <span class="col-4 col-sm-4">{{ modalVariables.browserOS }}</span>
+ </li>
+ </ul>
+</div>
+<div class="modal-footer">
+ <div class="text-left">
+ {{ copyright }}
+ {{ projectConstants.license }}
+ </div>
+</div>
+
+<div class="green-background-1"></div>
+<div class="green-background-2"></div>
--- /dev/null
+<cd-pwd-expiration-notification></cd-pwd-expiration-notification>
+<cd-telemetry-notification></cd-telemetry-notification>
+<cd-notifications-sidebar></cd-notifications-sidebar>
+
+<div class="cd-navbar-top">
+ <nav class="navbar fixed-top navbar-expand-md navbar-dark cd-navbar-brand">
+ <button class="btn btn-link py-0"
+ (click)="showMenuSidebar = !showMenuSidebar">
+ <i class="fa fa-bars fa-2x"
+ aria-hidden="true"></i>
+ </button>
+
+ <a class="navbar-brand ml-2"
+ href="#">
+ <img src="assets/SUSE_Logo-hor_L_White-neg_sRGB.svg"
+ alt="Ceph" />
+ </a>
+
+ <button type="button"
+ class="navbar-toggler"
+ (click)="isCollapsed = !isCollapsed">
+ <span i18n
+ class="sr-only">Toggle navigation</span>
+ <span class="">
+ <i class="fa fa-navicon fa-lg"></i>
+ </span>
+ </button>
+
+ <div class="collapse navbar-collapse"
+ [collapse]="isCollapsed">
+ <ul class="nav navbar-nav cd-navbar-utility my-2 my-md-0">
+ <ng-container *ngTemplateOutlet="cd_utilities"> </ng-container>
+ </ul>
+ </div>
+ </nav>
+</div>
+
+<div class="wrapper">
+ <!-- Content -->
+ <nav id="sidebar"
+ [ngClass]="{'active': !showMenuSidebar}">
+ <ngx-simplebar [options]="simplebar">
+ <ul class="list-unstyled components cd-navbar-primary">
+ <ng-container *ngTemplateOutlet="cd_menu"> </ng-container>
+ </ul>
+ </ngx-simplebar>
+ </nav>
+
+ <!-- Page Content -->
+ <div id="content"
+ [ngClass]="{'active': !showMenuSidebar}">
+ <ng-content></ng-content>
+ </div>
+</div>
+
+<ng-template #cd_utilities>
+ <li class="nav-item ">
+ <cd-language-selector class="cd-navbar"></cd-language-selector>
+ </li>
+ <li class="nav-item ">
+ <cd-notifications class="cd-navbar"></cd-notifications>
+ </li>
+ <li class="nav-item ">
+ <cd-dashboard-help class="cd-navbar"></cd-dashboard-help>
+ </li>
+ <li class="nav-item ">
+ <cd-administration class="cd-navbar"></cd-administration>
+ </li>
+ <li class="nav-item ">
+ <cd-identity class="cd-navbar"></cd-identity>
+ </li>
+</ng-template>
+
+<ng-template #cd_menu >
+ <ng-container *ngIf="enabledFeature$ | async as enabledFeature">
+ <!-- Dashboard -->
+ <li routerLinkActive="active"
+ class="nav-item tc_menuitem_dashboard">
+ <a routerLink="/dashboard"
+ class="nav-link">
+ <span i18n>Dashboard</span>
+ <i [ngClass]="[icons.health, summaryData?.health_status === 'HEALTH_OK' ? 'health-ok' : '']"
+ [ngStyle]="summaryData?.health_status | healthColor"></i>
+ </a>
+ </li>
+
+ <!-- Cluster -->
+ <li routerLinkActive="active"
+ class="nav-item tc_menuitem_cluster"
+ *ngIf="permissions.hosts.read || permissions.monitor.read ||
+ permissions.osd.read || permissions.configOpt.read ||
+ permissions.log.read || permissions.prometheus.read">
+ <a (click)="toggleSubMenu('cluster')"
+ class="nav-link dropdown-toggle"
+ [attr.aria-expanded]="displayedSubMenu == 'cluster'"
+ aria-controls="collapseBasic">
+ <ng-container i18n>Cluster</ng-container>
+ </a>
+ <ul class="list-unstyled"
+ [collapse]="displayedSubMenu !== 'cluster'"
+ [isAnimated]="true">
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_hosts"
+ *ngIf="permissions.hosts.read">
+ <a i18n
+ routerLink="/hosts">Hosts</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_cluster_inventory"
+ *ngIf="permissions.hosts.read">
+ <a i18n
+ routerLink="/inventory">Inventory</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_cluster_monitor"
+ *ngIf="permissions.monitor.read">
+ <a i18n
+ routerLink="/monitor/">Monitors</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_cluster_services"
+ *ngIf="permissions.hosts.read">
+ <a i18n
+ routerLink="/services/">Services</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_osds"
+ *ngIf="permissions.osd.read">
+ <a i18n
+ routerLink="/osd">OSDs</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_configuration"
+ *ngIf="permissions.configOpt.read">
+ <a i18n
+ routerLink="/configuration">Configuration</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_crush"
+ *ngIf="permissions.osd.read">
+ <a i18n
+ routerLink="/crush-map">CRUSH map</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_modules"
+ *ngIf="permissions.configOpt.read">
+ <a i18n
+ routerLink="/mgr-modules">Manager modules</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_log"
+ *ngIf="permissions.log.read">
+ <a i18n
+ routerLink="/logs">Logs</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_monitoring"
+ *ngIf="permissions.prometheus.read">
+ <a routerLink="/monitoring">
+ <ng-container i18n>Monitoring</ng-container>
+ <small *ngIf="prometheusAlertService.alerts.length > 0"
+ class="badge badge-danger">{{ prometheusAlertService.alerts.length }}</small>
+ </a>
+ </li>
+ </ul>
+ </li>
+
+ <!-- Pools -->
+ <li routerLinkActive="active"
+ class="nav-item tc_menuitem_pool"
+ *ngIf="permissions.pool.read">
+ <a class="nav-link"
+ i18n
+ routerLink="/pool">Pools</a>
+ </li>
+
+ <!-- Block -->
+ <li routerLinkActive="active"
+ class="nav-item tc_menuitem_block"
+ *ngIf="(permissions.rbdImage.read || permissions.rbdMirroring.read || permissions.iscsi.read) &&
+ (enabledFeature.rbd || enabledFeature.mirroring || enabledFeature.iscsi)">
+ <a class="nav-link dropdown-toggle"
+ (click)="toggleSubMenu('block')"
+ [attr.aria-expanded]="displayedSubMenu == 'block'"
+ aria-controls="collapseBasic"
+ [ngStyle]="blockHealthColor()">
+ <ng-container i18n>Block</ng-container>
+ </a>
+
+ <ul class="list-unstyled"
+ [collapse]="displayedSubMenu !== 'block'"
+ [isAnimated]="true">
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_block_images"
+ *ngIf="permissions.rbdImage.read && enabledFeature.rbd">
+ <a i18n
+ routerLink="/block/rbd">Images</a>
+ </li>
+
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_block_mirroring"
+ *ngIf="permissions.rbdMirroring.read && enabledFeature.mirroring">
+ <a routerLink="/block/mirroring">
+ <ng-container i18n>Mirroring</ng-container>
+ <small *ngIf="summaryData?.rbd_mirroring?.warnings !== 0"
+ class="badge badge-warning">{{ summaryData?.rbd_mirroring?.warnings }}</small>
+ <small *ngIf="summaryData?.rbd_mirroring?.errors !== 0"
+ class="badge badge-danger">{{ summaryData?.rbd_mirroring?.errors }}</small>
+ </a>
+ </li>
+
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_block_iscsi"
+ *ngIf="permissions.iscsi.read && enabledFeature.iscsi">
+ <a i18n
+ routerLink="/block/iscsi">iSCSI</a>
+ </li>
+ </ul>
+ </li>
+
+ <!-- NFS -->
+ <li routerLinkActive="active"
+ class="nav-item tc_menuitem_nfs"
+ *ngIf="permissions.nfs.read && enabledFeature.nfs">
+ <a i18n
+ class="nav-link"
+ routerLink="/nfs">NFS</a>
+ </li>
+
+ <!-- Filesystem -->
+ <li routerLinkActive="active"
+ class="nav-item tc_menuitem_cephfs"
+ *ngIf="permissions.cephfs.read && enabledFeature.cephfs">
+ <a i18n
+ class="nav-link"
+ routerLink="/cephfs">Filesystems</a>
+ </li>
+
+ <!-- Object Gateway -->
+ <li routerLinkActive="active"
+ class="nav-item tc_menuitem_rgw"
+ *ngIf="permissions.rgw.read && enabledFeature.rgw">
+ <a class="nav-link dropdown-toggle"
+ (click)="toggleSubMenu('rgw')"
+ [attr.aria-expanded]="displayedSubMenu == 'rgw'"
+ aria-controls="collapseBasic">
+ <ng-container i18n>Object Gateway</ng-container>
+ </a>
+ <ul class="list-unstyled"
+ [collapse]="displayedSubMenu !== 'rgw'"
+ [isAnimated]="true">
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_rgw_daemons">
+ <a i18n
+ routerLink="/rgw/daemon">Daemons</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_rgw_users">
+ <a i18n
+ routerLink="/rgw/user">Users</a>
+ </li>
+ <li routerLinkActive="active"
+ class="tc_submenuitem tc_submenuitem_rgw_buckets">
+ <a i18n
+ routerLink="/rgw/bucket">Buckets</a>
+ </li>
+ </ul>
+ </li>
+ </ng-container>
+</ng-template>
it('should return full URL', () => {
expect(service.urlGenerator('iscsi', 'foo')).toBe(
- 'https://docs.ceph.com/en/foo/mgr/dashboard/#enabling-iscsi-management'
+ 'https://documentation.suse.com/ses/foo/single-html/mgr/dashboard/#enabling-iscsi-management'
);
});
it('should return latest version URL for master', () => {
expect(service.urlGenerator('orch', 'master')).toBe(
- 'https://docs.ceph.com/en/latest/mgr/orchestrator'
+ 'https://documentation.suse.com/ses/master/single-html/mgr/orchestrator'
);
});
nextSummary('foo');
expect(result).toEqual(
- 'https://docs.ceph.com/en/foo/mgr/dashboard/#enabling-prometheus-alerting'
+ 'https://documentation.suse.com/ses/foo/single-html/mgr/dashboard/#enabling-prometheus-alerting'
);
expect(i).toBe(1);
expect(subscriber.closed).toBe(true);
});
}
- urlGenerator(section: string, release = 'master'): string {
- const docVersion = release === 'master' ? 'latest' : release;
- const domain = `https://docs.ceph.com/en/${docVersion}/`;
+ urlGenerator(section: string, release = '7'): string {
+ const domain = `https://documentation.suse.com/ses/${release}/single-html/`;
const domainCeph = `https://ceph.io/`;
const sections = {
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0"
+ y="0"
+ width="212"
+ height="40"
+ viewBox="0 0 212 40"
+ id="svg928"
+ sodipodi:docname="SUSE_Logo-hor_L_White-neg_sRGB-small.svg"
+ inkscape:version="0.92.2 5c3e80d, 2017-08-06">
+ <metadata
+ id="metadata934">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs932" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1377"
+ inkscape:window-height="788"
+ id="namedview930"
+ showgrid="false"
+ inkscape:zoom="3.928371"
+ inkscape:cx="88.575497"
+ inkscape:cy="8.0371231"
+ inkscape:window-x="2087"
+ inkscape:window-y="74"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg928" />
+ <g
+ id="Layer_1"
+ transform="matrix(0.99914855,0,0,0.99914855,-29.494278,-27.623314)">
+ <g
+ id="g925">
+ <path
+ d="m 224.908,59.781 c -3.285,0 -5.958,-2.672 -5.958,-5.957 V 36.165 c 0,-3.285 2.673,-5.959 5.958,-5.959 h 13.555 c 1.062,0 1.926,0.864 1.926,1.925 0,1.061 -0.864,1.924 -1.926,1.924 h -13.555 c -1.162,0 -2.107,0.947 -2.107,2.11 v 6.95 h 13.294 c 1.006,0 1.824,0.819 1.824,1.825 0,1.006 -0.818,1.824 -1.824,1.824 h -13.294 v 7.06 c 0,1.163 0.945,2.107 2.107,2.107 h 13.555 c 1.062,0 1.926,0.865 1.926,1.926 0,1.062 -0.864,1.924 -1.926,1.924 z m -60.782,0.389 c -3.909,0 -6.92,-0.992 -8.95,-2.95 -2.028,-1.954 -3.056,-4.894 -3.056,-8.739 V 32.053 c 0,-1.231 1,-2.232 2.23,-2.232 1.231,0 2.232,1.001 2.232,2.232 v 15.839 c 0,2.877 0.62,5.034 1.843,6.408 1.229,1.384 3.146,2.085 5.701,2.085 2.553,0 4.472,-0.701 5.701,-2.085 1.222,-1.375 1.841,-3.531 1.841,-6.408 V 32.053 c 0,-1.231 1.002,-2.232 2.233,-2.232 1.231,0 2.232,1.001 2.232,2.232 v 16.428 c 0,3.843 -1.03,6.783 -3.059,8.739 -2.03,1.958 -5.039,2.95 -8.948,2.95 m 33.526,0 c -5.033,0 -8.868,-1.43 -11.394,-4.25 -0.731,-0.816 -0.685,-2.075 0.106,-2.865 l 0.008,-0.009 0.008,-0.008 c 0.401,-0.398 0.933,-0.616 1.499,-0.616 0.599,0 1.163,0.255 1.55,0.703 0.704,0.813 1.509,1.475 2.396,1.966 1.547,0.859 3.493,1.294 5.783,1.294 2.173,0 3.907,-0.383 5.154,-1.14 1.284,-0.776 1.936,-1.895 1.936,-3.327 0,-1.158 -0.59,-2.103 -1.754,-2.805 -1.132,-0.681 -3.042,-1.266 -5.84,-1.791 -2.718,-0.507 -4.909,-1.141 -6.513,-1.885 -1.586,-0.734 -2.751,-1.651 -3.464,-2.731 -0.713,-1.072 -1.074,-2.403 -1.074,-3.956 0,-1.639 0.46,-3.153 1.367,-4.498 0.909,-1.348 2.242,-2.435 3.963,-3.229 1.73,-0.798 3.778,-1.202 6.088,-1.202 2.7,0 5.034,0.494 6.941,1.47 1.28,0.654 2.439,1.556 3.448,2.68 0.77,0.861 0.698,2.194 -0.163,2.971 -0.388,0.349 -0.889,0.541 -1.409,0.541 -0.659,0 -1.269,-0.3 -1.671,-0.821 -0.572,-0.744 -1.216,-1.35 -1.917,-1.8 -1.296,-0.833 -3.039,-1.255 -5.183,-1.255 -2.116,0 -3.787,0.432 -4.966,1.284 -1.199,0.867 -1.808,1.999 -1.808,3.362 0,1.279 0.596,2.306 1.773,3.052 1.143,0.727 3.122,1.337 6.049,1.863 2.656,0.477 4.792,1.089 6.35,1.816 1.54,0.717 2.677,1.621 3.377,2.686 0.697,1.061 1.05,2.399 1.05,3.977 0,1.696 -0.488,3.207 -1.45,4.491 -0.97,1.291 -2.348,2.295 -4.093,2.984 -1.762,0.695 -3.829,1.048 -6.147,1.048 m -66.83,0.008 c -5.035,0 -8.868,-1.431 -11.395,-4.251 -0.731,-0.815 -0.684,-2.074 0.106,-2.865 l 0.012,-0.012 c 0.402,-0.4 0.936,-0.62 1.504,-0.62 0.6,0 1.165,0.256 1.549,0.703 0.702,0.812 1.507,1.474 2.395,1.966 1.548,0.86 3.494,1.295 5.784,1.295 2.172,0 3.906,-0.383 5.155,-1.14 1.284,-0.776 1.935,-1.895 1.935,-3.326 0,-1.16 -0.591,-2.103 -1.754,-2.805 -1.133,-0.683 -3.044,-1.269 -5.841,-1.794 -2.717,-0.506 -4.908,-1.141 -6.513,-1.883 -1.585,-0.735 -2.752,-1.654 -3.464,-2.731 -0.712,-1.073 -1.073,-2.404 -1.073,-3.956 0,-1.64 0.46,-3.152 1.366,-4.497 0.909,-1.35 2.243,-2.436 3.964,-3.23 1.728,-0.797 3.776,-1.202 6.088,-1.202 2.7,0 5.036,0.495 6.94,1.47 1.282,0.655 2.441,1.557 3.447,2.68 0.772,0.861 0.698,2.192 -0.161,2.97 -0.388,0.349 -0.889,0.541 -1.41,0.541 -0.659,0 -1.268,-0.299 -1.67,-0.82 -0.569,-0.743 -1.216,-1.35 -1.917,-1.801 -1.297,-0.834 -3.04,-1.256 -5.183,-1.256 -2.117,0 -3.787,0.433 -4.968,1.285 -1.198,0.87 -1.806,2.001 -1.806,3.362 0,1.279 0.596,2.306 1.772,3.053 1.144,0.727 3.122,1.336 6.051,1.863 2.653,0.475 4.79,1.086 6.351,1.815 1.54,0.72 2.674,1.624 3.374,2.685 0.698,1.06 1.052,2.398 1.052,3.979 0,1.697 -0.488,3.207 -1.452,4.489 -0.97,1.292 -2.347,2.297 -4.094,2.986 -1.761,0.695 -3.828,1.047 -6.144,1.047"
+ id="path921"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff" />
+ <path
+ d="m 101.177,40.296 c -0.461,-0.475 -1.218,-0.475 -1.677,0 -0.516,0.515 -0.455,1.405 0.186,1.83 0.39,0.259 0.913,0.259 1.305,0 0.638,-0.425 0.701,-1.315 0.186,-1.83 m -1.554,-4.188 c -3.283,-0.768 -6.232,2.181 -5.463,5.463 0.392,1.672 1.72,2.999 3.392,3.392 3.284,0.772 6.236,-2.182 5.463,-5.465 -0.394,-1.672 -1.721,-3 -3.392,-3.39 M 44.808,66.576 C 40.913,66.577 37.028,65 34.667,62.465 c -2.913,-3.13 -4.671,-6.274 -4.436,-12.271 0.148,-3.779 2.246,-7.929 5.613,-11.099 4.855,-4.578 11.356,-7.891 18.303,-9.332 2.679,-0.553 5.453,-0.834 8.245,-0.834 1.385,0 2.789,0.07 4.172,0.208 3.862,0.384 7.493,1.097 10.795,2.12 1.791,0.556 3.51,1.211 5.11,1.947 0.225,0.103 0.461,0.207 0.703,0.315 1.327,0.588 2.828,1.254 3.769,2.212 l 0.363,0.37 -0.001,-0.519 c 0,-1.121 -0.022,-2.279 -0.044,-3.401 -0.018,-0.967 -0.036,-1.88 -0.036,-2.634 0,-0.393 0.329,-0.637 0.636,-0.637 0.09,0 0.178,0.019 0.261,0.059 0.766,0.356 1.868,0.873 3.135,1.466 2.722,1.277 6.11,2.865 8.67,4.035 2.206,1.008 3.681,2.715 4.505,5.217 0.719,2.178 0.862,4.637 0.955,7.175 0.003,0.084 0.006,0.164 -0.018,0.211 -0.012,0.026 -0.094,0.137 -0.674,0.137 -0.091,0 -0.179,-0.002 -0.257,-0.004 -0.065,-0.003 -0.125,-0.005 -0.174,-0.005 l -0.031,10e-4 c -0.154,0.001 -0.331,0.003 -0.517,0.004 -0.541,0.003 -1.155,0.006 -1.606,0.024 -0.46,0.021 -0.92,0.032 -1.406,0.032 -0.662,0 -1.369,-0.02 -2.161,-0.06 -1.995,-0.098 -4.127,-0.943 -5.703,-2.261 -0.138,-0.117 -0.394,-0.198 -0.62,-0.198 -0.206,0 -0.378,0.065 -0.496,0.189 -0.313,0.322 -0.224,0.822 -0.026,1.024 0.836,0.843 1.734,1.391 2.824,1.954 1.293,0.665 2.664,0.864 4.322,0.961 0.618,0.036 1.238,0.055 1.844,0.055 0.985,0 1.964,-0.049 2.908,-0.147 l 0.233,-0.024 c 0.208,-0.022 0.386,-0.04 0.526,-0.05 -0.124,0.105 -0.308,0.249 -0.552,0.43 -1.001,0.743 -2.254,1.372 -3.725,1.866 -1.815,0.618 -3.796,0.96 -5.889,1.019 -0.205,0.005 -0.413,0.007 -0.619,0.007 -0.994,0 -2.006,-0.065 -3.007,-0.194 -0.259,-0.033 -0.521,-0.072 -0.776,-0.11 -0.361,-0.053 -0.736,-0.109 -1.11,-0.148 -0.086,-0.008 -0.173,-0.019 -0.26,-0.029 -0.258,-0.029 -0.525,-0.059 -0.793,-0.059 -0.206,0 -0.391,0.018 -0.563,0.055 -0.531,0.116 -0.993,0.402 -1.304,0.805 -0.458,0.599 -0.582,2.118 -0.337,2.775 0.485,1.309 1.57,2.04 2.549,2.624 0.317,0.189 0.66,0.341 0.99,0.491 0.816,0.365 1.526,0.683 1.757,1.414 -0.304,0.079 -1.216,0.136 -2.226,0.136 h -0.122 -3.173 c -0.005,0 -0.113,0.002 -0.286,0.002 -0.956,0 -1.698,-0.07 -2.034,-0.191 l -0.011,-0.005 c -0.005,-0.002 -0.011,-0.006 -0.019,-0.009 -0.288,-0.155 -0.429,-0.579 -0.544,-0.92 l -0.005,-0.017 c -0.162,-0.479 -0.436,-0.983 -0.891,-1.635 -0.894,-1.275 -2.038,-2.262 -3.06,-2.64 -1.477,-0.547 -2.359,-0.647 -3.563,-0.647 -0.346,0 -0.717,0.008 -1.146,0.019 -0.324,0.006 -0.678,0.014 -1.071,0.02 -0.304,0.003 -0.561,0.005 -0.788,0.005 -0.525,0 -0.875,-0.009 -1.28,-0.019 -0.492,-0.011 -1.05,-0.026 -2.058,-0.026 -0.324,0 -0.564,0.348 -0.642,0.932 -0.146,1.077 0.291,2.858 2.09,3.353 0.163,0.046 0.328,0.088 0.493,0.13 0.875,0.225 1.779,0.456 2.412,1.104 0.207,0.211 0.266,0.396 0.24,0.455 -0.012,0.031 -0.103,0.089 -0.353,0.089 h -6.219 c -1.042,0 -1.832,-0.043 -2.494,-0.605 -1.115,-0.94 -1.66,-2.204 -2.237,-3.54 l -0.093,-0.217 c -0.741,-1.712 -1.415,-3.072 -2.118,-4.281 -1.827,-3.137 -4.04,-5.419 -6.578,-6.779 -2.001,-1.072 -4.492,-1.688 -6.833,-1.688 -2.825,0 -5.45,0.869 -7.59,2.514 -2.151,1.649 -3.351,4.054 -3.381,6.77 -0.034,3.034 1.429,6.113 3.819,8.036 1.519,1.221 3.538,1.895 5.688,1.895 0.204,0 0.412,-0.006 0.618,-0.019 2.403,-0.14 4.516,-1.169 5.793,-2.827 1.046,-1.357 1.433,-3.044 1.089,-4.749 -0.29,-1.436 -1.14,-2.691 -2.273,-3.357 -0.765,-0.448 -1.719,-0.677 -2.837,-0.678 h -0.018 c -1.294,0 -2.289,0.327 -2.957,0.973 -0.934,0.906 -1.086,2.509 -0.338,3.575 0.099,0.143 0.215,0.279 0.326,0.41 0.323,0.383 0.601,0.715 0.535,1.155 -0.055,0.369 -0.368,0.677 -0.779,0.768 -0.103,0.024 -0.208,0.036 -0.313,0.036 -0.651,0 -1.218,-0.444 -1.579,-0.817 -1.339,-1.38 -1.76,-3.583 -1.023,-5.359 1.016,-2.454 3.744,-3.552 5.996,-3.552 0.078,0 0.156,10e-4 0.233,0.003 3.275,0.112 6.403,2.248 7.782,5.316 1.34,2.982 0.977,6.704 -0.923,9.48 -1.881,2.748 -5.222,4.326 -9.165,4.326 m 57.07,-26.042 c 0,1.824 -1.476,3.301 -3.299,3.301 -1.824,0 -3.3,-1.477 -3.3,-3.301 0,-1.823 1.476,-3.3 3.3,-3.3 1.823,0 3.299,1.477 3.299,3.3"
+ id="path923"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff" />
+ </g>
+ </g>
+</svg>
--- /dev/null
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>SUSE Enterprise Storage</title>
+
+ <script>
+ document.write('<base href="' + document.location+ '" />');
+ </script>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+ <link rel="icon" type="image/png" href="assets/favicon.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="assets/favicon.png" sizes="96x96">
+ <link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon.png">
+</head>
+<body>
+<noscript>
+ <div class="noscript container"
+ ng-if="false">
+ <div class="jumbotron alert alert-danger">
+ <h2 i18n>JavaScript required!</h2>
+ <p i18n>A browser with JavaScript enabled is required in order to use this service.</p>
+ <p i18n>When using Internet Explorer, please check your security settings and add this address to your trusted sites.</p>
+ </div>
+ </div>
+</noscript>
+
+<cd-root></cd-root>
+</body>
+</html>
Custom styles, third-party libraries, frameworks, design systems, ...
*/
+@import 'variables';
+
+@font-face {
+ font-family: 'WorkSansLight';
+ src: url('assets/WorkSans-Light.ttf') format('truetype');
+}
+@font-face {
+ font-family: 'WorkSansMedium';
+ src: url('assets/WorkSans-Medium.ttf') format('truetype');
+}
+@font-face {
+ font-family: 'WorkSansRegular';
+ src: url('assets/WorkSans-Regular.ttf') format('truetype');
+}
+
+/* Body */
+body {
+ font-family: 'WorkSansRegular', 'Verdana', Helvetica, Arial, sans-serif;
+}
+
+/* Header */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: 'WorkSansMedium', 'Verdana', Helvetica, Arial, sans-serif;
+}
+.subheader {
+ font-family: 'WorkSansLight', 'Verdana', Helvetica, Arial, sans-serif;
+}
+
+/* Button */
+.btn-primary,
+.btn-secondary {
+ background-color: $color-primary !important;
+ border-color: $color-primary !important;
+}
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary,
+.btn-secondary:hover,
+.btn-secondary:focus,
+.btn-secondary:active,
+.btn-secondary.active,
+.open .dropdown-toggle.btn-secondary {
+ background-color: lighten($color-primary, 10) !important;
+ border-color: lighten($color-primary, 10) !important;
+}
+.btn-secondary:focus {
+ box-shadow: 0 0 0 0.2rem rgba($color-primary, 0.5) !important;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary,
+.btn-secondary:active,
+.btn-secondary.active,
+.open .dropdown-toggle.btn-secondary {
+ &:hover,
+ &:focus {
+ background-color: lighten($color-primary, 10) !important;
+ border-color: lighten($color-primary, 10) !important;
+ }
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active,
+.btn-secondary.disabled,
+.btn-secondary[disabled],
+fieldset[disabled] .btn-secondary,
+.btn-secondary.disabled:hover,
+.btn-secondary[disabled]:hover,
+fieldset[disabled] .btn-secondary:hover,
+.btn-secondary.disabled:focus,
+.btn-secondary[disabled]:focus,
+fieldset[disabled] .btn-secondary:focus,
+.btn-secondary.disabled:active,
+.btn-secondary[disabled]:active,
+fieldset[disabled] .btn-secondary:active,
+.btn-secondary.disabled.active,
+.btn-secondary[disabled].active,
+fieldset[disabled] .btn-secondary.active {
+ background-color: $color-primary !important;
+ border-color: $color-primary !important;
+}
+
+/* Icons */
+.ceph-icon {
+ background: {
+ image: url('assets/SUSE_Chameleon_L_Green-pos_sRGB-250.png');
+ clip: padding-box;
+ size: contain;
+ repeat: no-repeat;
+ }
+ padding: 15px;
+ margin-right: 1em;
+}
+
+/* Login */
+.login-suse {
+ font-family: 'WorkSansRegular', 'Verdana', Helvetica, Arial, sans-serif;
+ color: $color-soft-gray;
+ background-color: $color-login-background;
+ width: 100%;
+ margin: 0;
+
+ header {
+ margin-bottom: 30px;
+ background-color: $color-secondary;
+
+ .row {
+ margin: 0;
+
+ @media screen and (max-width: $screen-sm-max) {
+ margin-left: -15px;
+ }
+ }
+
+ .navbar {
+ border: 0;
+ margin: 0;
+ padding: 0 12px;
+
+ .navbar-brand {
+ font-size: 2rem;
+ line-height: 2.5rem;
+ height: 60px;
+ padding: 15px 15px;
+
+ span {
+ @media screen and (max-width: $screen-xs-max) {
+ display: none;
+ }
+ }
+ }
+
+ .form-inline {
+ .dropdown-toggle {
+ display: block;
+ border: 0;
+ padding: 21px 15px;
+
+ &:hover,
+ &:focus {
+ color: $color-black;
+ background-color: $color-primary;
+ text-decoration: none;
+ }
+
+ @media screen and (max-width: $screen-sm-max) {
+ margin-left: 15px;
+ }
+ }
+
+ .dropdown-menu {
+ @media screen and (max-width: $screen-sm-max) {
+ background-color: $color-white;
+ }
+ }
+ }
+ }
+
+ cd-language-selector .form-control {
+ background-color: transparent;
+ border: 0;
+ padding: 10px 0;
+ }
+ }
+
+ section {
+ display: inline-flex;
+ width: 100%;
+ min-height: 100vh;
+ margin: -90px auto -100px;
+
+ h1 {
+ margin-bottom: 3rem;
+ font-size: 4rem;
+ color: $color-primary;
+ }
+
+ p {
+ font-size: 1.2rem;
+ }
+
+ .subheader {
+ display: block;
+ margin-bottom: 1rem;
+ font-size: 1.4rem;
+ font-weight: bold;
+ }
+
+ h2 {
+ margin: 2.5rem 0;
+ font-size: 2.5rem;
+ }
+
+ .form-group {
+ border-left: 0;
+ background-color: $color-login-background;
+
+ &:focus-within {
+ border-left: 0;
+ }
+
+ input {
+ background-color: $color-white;
+ border-color: $color-white;
+ color: $body-color;
+ font-size: 13px;
+ height: 2.5rem;
+
+ &:focus {
+ border-color: rgba($color-primary, 0.8);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px 2px rgba($color-primary, 0.5);
+ outline: 0;
+ }
+ }
+ }
+
+ .btn-password {
+ color: $body-color;
+ border-left: 1px solid $body-color;
+ background-color: $color-white;
+
+ &:hover {
+ color: $color-white;
+ background-color: $color-secondary;
+ }
+
+ &:focus {
+ color: $body-color;
+ background-color: $color-white;
+ border-color: rgba($color-primary, 0.8);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px 2px rgba($color-primary, 0.5);
+ outline: 0;
+ }
+ }
+ }
+
+ footer {
+ margin-top: 30px;
+ height: 70px;
+ padding-top: 23px;
+ border-bottom: 16px solid $color-primary;
+
+ .footer-logo {
+ width: 50px;
+ margin-top: -16px;
+ }
+
+ .container {
+ padding-bottom: 10px;
+ }
+ }
+}
+
+/* About */
+.suse-logo {
+ width: 140px;
+ margin-bottom: 1.5rem;
+}
+
+.modal-content {
+ overflow: hidden;
+}
+
+.modal-header,
+.modal-body,
+.modal-footer {
+ z-index: 1;
+}
+
+.modal-footer {
+ position: relative;
+}
+
+.green-background-1,
+.green-background-2 {
+ width: 140%;
+ height: 400px;
+ left: -20%;
+ position: absolute;
+}
+
+.green-background-1 {
+ background-color: $color-green-contrast-1;
+ bottom: -240px;
+ transform: rotate(-11deg);
+}
+
+.green-background-2 {
+ background-color: $color-green-contrast-2;
+ bottom: -310px;
+ transform: rotate(-6deg);
+}
+
+// Dashboard
+
+.dashboard {
+ background-color: #ffffff !important;
+
+ .card {
+ background-color: #f5f5f5;
+ }
+}
+
+// Navigation
+@mixin suse-nav-link {
+ .nav-link,
+ a {
+ background-color: #f5f5f5 !important;
+ border-left: 5px solid transparent !important;
+ color: $body-color !important;
+ margin: 0 16px 0 0 !important;
+ padding: 8px 0 8px 21px !important;
+
+ &:hover {
+ background-color: transparent !important;
+ border-left: 5px solid $color-primary !important;
+ }
+ }
+}
+@mixin suse-nav-link-active {
+ background-color: $color-primary !important;
+ border-radius: 0 2px 2px 0;
+ color: #ffffff !important;
+
+ &:hover {
+ background-color: $color-primary !important;
+ border-left: 5px solid transparent !important;
+ }
+}
+
+nav#sidebar {
+ background-color: #f5f5f5 !important;
+ padding-top: 1.5rem;
+
+ .nav-item ul {
+ background-color: #f5f5f5 !important;
+
+ @include suse-nav-link;
+
+ a {
+ padding: 8px 0 8px 33px !important;
+ }
+
+ .active a {
+ @include suse-nav-link-active;
+ }
+ }
+
+ @include suse-nav-link;
+ .active .nav-link {
+ @include suse-nav-link-active;
+ }
+}
+
+.nav-item.active .fa-heartbeat.health-ok {
+ color: #ffffff !important;
+}
+
+// Logo
+
+.cd-navbar-top .cd-navbar-brand .navbar-brand > img {
+ height: 29px !important;
+}
)
);
*/
-@forward '../defaults/bootstrap-defaults';
+@import '../defaults/bootstrap-defaults';
+
+$body-color: #212529;
+
+$color-primary: #30ba78;
+$color-secondary: #0c322c;
+$color-accent: #ff6a52;
+
+$color-green-contrast-1: #e4f6ee;
+$color-green-contrast-2: #139448;
+
+$color-soft-gray: #f2f2f2;
+$color-white: #ffffff;
+
+$button-radius: 4px;
+
+$color-login-background: #0c322c;
+
+$breakpoint-mobile: 768px;
+$breakpoint-mobile-max: calc(#{$breakpoint-mobile} - 1px);