new version compass-web
Change-Id: I51065cd45e80b6bd1fc69ed7cc7d09f81fdb81c1
101
v2.5/Gruntfile.coffee
Normal file
@ -0,0 +1,101 @@
|
||||
module.exports = (grunt)->
|
||||
#config
|
||||
grunt.initConfig
|
||||
clean:
|
||||
main:
|
||||
src: 'target'
|
||||
|
||||
coffee:
|
||||
glob_to_multiple:
|
||||
expand: true
|
||||
flatten: false
|
||||
src: ["src/**/*.coffee"]
|
||||
dest: 'target'
|
||||
ext: ".js"
|
||||
|
||||
copy:
|
||||
static:
|
||||
files: [
|
||||
{
|
||||
src: 'index.html'
|
||||
dest: 'target/index.html'
|
||||
}
|
||||
]
|
||||
testServer:
|
||||
files: [
|
||||
src: 'src/app/server/appDev.js'
|
||||
dest: 'target/src/app/server/appDev.js'
|
||||
]
|
||||
vendor:
|
||||
files: [
|
||||
expand: true
|
||||
flatten: false
|
||||
src: 'vendor/**/*'
|
||||
dest: 'target/'
|
||||
]
|
||||
data:
|
||||
files: [
|
||||
expand: true
|
||||
flatten: true
|
||||
src: 'data/*.json'
|
||||
dest: 'target/data/'
|
||||
]
|
||||
assets:
|
||||
files: [
|
||||
expand: true
|
||||
src: ['assets/font/*','assets/img/**/*']
|
||||
dest: 'target/'
|
||||
]
|
||||
cssmin:
|
||||
options:
|
||||
rebase: false
|
||||
target:
|
||||
files:
|
||||
'target/assets/css/compass.min.css':['assets/css/ace.min.css',
|
||||
'assets/css/ace-skins.min.css',
|
||||
'assets/css/ace-fonts.css',
|
||||
'assets/css/style.css',
|
||||
'assets/css/chart.css',
|
||||
'assets/css/chosen.css',
|
||||
'assets/css/shelf.css']
|
||||
uglify:
|
||||
target:
|
||||
files: [
|
||||
expand: true
|
||||
cwd: 'target/src/app'
|
||||
src: '**/*.js'
|
||||
dest: 'target/src/app'
|
||||
]
|
||||
# files:
|
||||
# 'target/src/app/app.js': ['target/src/app/app.js']
|
||||
htmlmin:
|
||||
target:
|
||||
options:
|
||||
removeComments: true
|
||||
collapseWhitespace: true
|
||||
files: [
|
||||
expand: true
|
||||
src: 'src/app/partials/*'
|
||||
dest: 'target/'
|
||||
]
|
||||
watch:
|
||||
build:
|
||||
files: ["**/*.{css,coffee,html}"]
|
||||
tasks: ['build']
|
||||
options:
|
||||
spawn: false
|
||||
|
||||
#dependencis
|
||||
grunt.loadNpmTasks('grunt-contrib-clean')
|
||||
grunt.loadNpmTasks('grunt-contrib-copy')
|
||||
grunt.loadNpmTasks('grunt-contrib-coffee')
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify')
|
||||
grunt.loadNpmTasks('grunt-contrib-cssmin')
|
||||
grunt.loadNpmTasks('grunt-contrib-htmlmin')
|
||||
grunt.loadNpmTasks('grunt-contrib-watch')
|
||||
|
||||
#Alias tasks
|
||||
grunt.registerTask('build', ['copy','coffee','cssmin', 'htmlmin','uglify'])
|
||||
grunt.registerTask('watcher', ['watch'])
|
||||
grunt.registerTask('default',['clean', 'build','watcher'])
|
||||
|
13
v2.5/assets/css/ace-fonts.css
Normal file
@ -0,0 +1,13 @@
|
||||
/* included only when we don't want to use fonts from google server */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(../font/DXI1ORHCpsQm3Vp6mXoaTXhCUOGz7vYGh680lGh-uXM.woff) format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans'), local('OpenSans'), url(../font/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');
|
||||
}
|
2636
v2.5/assets/css/ace-skins.min.css
vendored
Normal file
15663
v2.5/assets/css/ace.min.css
vendored
Normal file
2
v2.5/assets/css/angular-ui-tree.min.css
vendored
Executable file
@ -0,0 +1,2 @@
|
||||
/* angular-ui-tree css file */
|
||||
.angular-ui-tree-empty{border:1px dashed #bbb;min-height:100px;background-color:#e5e5e5;background-image:-webkit-linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff),-webkit-linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff);background-image:-moz-linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff),-moz-linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff);background-image:linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff),linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff);background-size:60px 60px;background-position:0 0,30px 30px}.angular-ui-tree-nodes{display:block;position:relative;margin:0;padding:0;list-style:none}.angular-ui-tree-nodes .angular-ui-tree-nodes{padding-left:20px}.angular-ui-tree-node,.angular-ui-tree-placeholder{display:block;position:relative;margin:0;padding:0;min-height:20px;line-height:20px}.angular-ui-tree-hidden{display:none}.angular-ui-tree-placeholder{margin:5px 0;padding:0;min-height:30px}.angular-ui-tree-handle{cursor:move;text-decoration:none;font-weight:700;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;min-height:20px;line-height:20px}.angular-ui-tree-drag{position:absolute;pointer-events:none;z-index:999;opacity:.8}
|
170
v2.5/assets/css/chart.css
Normal file
@ -0,0 +1,170 @@
|
||||
/* circle packing */
|
||||
|
||||
text {
|
||||
font-size: 14px !important;
|
||||
font-family: "Arial, Helvetica, sans-serif";
|
||||
pointer-events: none;
|
||||
}
|
||||
text.parent {
|
||||
fill: #1f77b4;
|
||||
}
|
||||
circle {
|
||||
fill: #ccc;
|
||||
stroke: #999;
|
||||
fill-opacity: .8;
|
||||
pointer-events: all;
|
||||
}
|
||||
circle.parent {
|
||||
fill: #1f77b4;
|
||||
fill-opacity: .3;
|
||||
stroke: steelblue;
|
||||
}
|
||||
circle.parent:hover {
|
||||
stroke: #ff7f0e;
|
||||
stroke-width: 5px;
|
||||
}
|
||||
circle.child {
|
||||
pointer-events: none;
|
||||
}
|
||||
circlepacking circle.parent {
|
||||
fill-opacity: 1 !important;
|
||||
//stroke: none !important;
|
||||
fill: #E6F7FF!important;
|
||||
}
|
||||
circlepacking circle {
|
||||
fill-opacity: 1 !important;
|
||||
//stroke: none !important;
|
||||
}
|
||||
circle[depth='1'] {
|
||||
fill: #85D6FF !important;
|
||||
}
|
||||
circle[depth='2'] {
|
||||
fill: #70B8FF !important;
|
||||
}
|
||||
circle[depth='3'] {
|
||||
fill: #3399FF !important;
|
||||
}
|
||||
circle[depth='4'] {
|
||||
fill: #005CE6 !important;
|
||||
}
|
||||
circle.node {
|
||||
cursor: pointer;
|
||||
}
|
||||
circle.node:hover {
|
||||
stroke: #000;
|
||||
stroke-width: 1.5px;
|
||||
}
|
||||
circle.node--leaf {
|
||||
fill: white;
|
||||
}
|
||||
.chartLabel {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
text-anchor: middle;
|
||||
text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, -1px 0 0 #fff, 0 -1px 0 #fff;
|
||||
}
|
||||
.chartLabel-hover{
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
text-anchor: middle;
|
||||
text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, -1px 0 0 #fff, 0 -1px 0 #fff;
|
||||
font-size: 30px !important;
|
||||
}
|
||||
.chartLabel,
|
||||
.node--root,
|
||||
.node--leaf {
|
||||
pointer-events: none;
|
||||
}
|
||||
.red-border {
|
||||
border-color: red !important;
|
||||
}
|
||||
|
||||
/* tree chart*/
|
||||
|
||||
.node circle {
|
||||
cursor: pointer;
|
||||
fill: #fff;
|
||||
stroke: steelblue;
|
||||
stroke-width: 1.5px;
|
||||
}
|
||||
.node text {
|
||||
font-size: 11px;
|
||||
}
|
||||
path.link {
|
||||
fill: none;
|
||||
stroke: #ccc;
|
||||
stroke-width: 1.5px;
|
||||
}
|
||||
treechart rect {
|
||||
fill: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
treechart rect:hover {
|
||||
stroke: #222;
|
||||
stroke-width: 3px;
|
||||
}
|
||||
treechart rect[data-state='ok'] {
|
||||
fill: green;
|
||||
}
|
||||
treechart rect[data-state='warning'] {
|
||||
fill: yellow;
|
||||
}
|
||||
treechart rect[data-state='error'] {
|
||||
fill: red;
|
||||
}
|
||||
treechart text.info {
|
||||
background-color: #ffffff;
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
border: 2px dashed #dddddd;
|
||||
}
|
||||
treechart .tip {
|
||||
border: 2px dashed #aaaaaa;
|
||||
border-radius: 8px;
|
||||
opacity: 0.9;
|
||||
padding: 8px 10px;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
|
||||
/* gantt chart */
|
||||
|
||||
ganttchart .chart {
|
||||
font-family: Arial, sans-serif;
|
||||
font-size: 12px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
ganttchart text {
|
||||
font-family: "Lucida Grande","Lucida Sans Unicode",Helvetica,Arial,Verdana,sans-serif !important;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
ganttchart .axis path, ganttchart .axis line {
|
||||
fill: none;
|
||||
stroke: #000;
|
||||
shape-rendering: crispEdges;
|
||||
}
|
||||
|
||||
ganttchart .bar {
|
||||
fill: #B8B8B8; /*grey*/
|
||||
}
|
||||
|
||||
ganttchart .bar-failed {
|
||||
fill: #CC0000; /*red*/
|
||||
}
|
||||
|
||||
ganttchart .bar-warning {
|
||||
fill: #ffbb33; /*yellow*/
|
||||
}
|
||||
|
||||
ganttchart .bar-successful {
|
||||
fill: #669900; /*green*/
|
||||
}
|
||||
|
||||
ganttchart .bar-unknown {
|
||||
fill: #33b5e5; /*blue*/
|
||||
}
|
||||
|
||||
ganttchart .x text {
|
||||
text-anchor: end !important;
|
||||
transform: rotate(-65deg);
|
||||
}
|
430
v2.5/assets/css/chosen.css
Executable file
@ -0,0 +1,430 @@
|
||||
/* @group Base */
|
||||
.chosen-container {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
font-size: 13px;
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.chosen-container .chosen-drop {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: -9999px;
|
||||
z-index: 1010;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
border: 1px solid #aaa;
|
||||
border-top: 0;
|
||||
background: #fff;
|
||||
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.chosen-container.chosen-with-drop .chosen-drop {
|
||||
left: 0;
|
||||
}
|
||||
.chosen-container a {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
/* @group Single Chosen */
|
||||
.chosen-container-single .chosen-single {
|
||||
position: relative;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
padding: 0 0 0 8px;
|
||||
height: 23px;
|
||||
border: 1px solid #aaa;
|
||||
border-radius: 5px;
|
||||
background-color: #fff;
|
||||
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
|
||||
background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
|
||||
background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
|
||||
background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
|
||||
background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
|
||||
background-clip: padding-box;
|
||||
box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
|
||||
color: #444;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
line-height: 24px;
|
||||
}
|
||||
.chosen-container-single .chosen-default {
|
||||
color: #999;
|
||||
}
|
||||
.chosen-container-single .chosen-single span {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
margin-right: 26px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.chosen-container-single .chosen-single-with-deselect span {
|
||||
margin-right: 38px;
|
||||
}
|
||||
.chosen-container-single .chosen-single abbr {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 26px;
|
||||
display: block;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background: url('chosen-sprite.png') -42px 1px no-repeat;
|
||||
font-size: 1px;
|
||||
}
|
||||
.chosen-container-single .chosen-single abbr:hover {
|
||||
background-position: -42px -10px;
|
||||
}
|
||||
.chosen-container-single.chosen-disabled .chosen-single abbr:hover {
|
||||
background-position: -42px -10px;
|
||||
}
|
||||
.chosen-container-single .chosen-single div {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
display: block;
|
||||
width: 18px;
|
||||
height: 100%;
|
||||
}
|
||||
.chosen-container-single .chosen-single div b {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('chosen-sprite.png') no-repeat 0px 2px;
|
||||
}
|
||||
.chosen-container-single .chosen-search {
|
||||
position: relative;
|
||||
z-index: 1010;
|
||||
margin: 0;
|
||||
padding: 3px 4px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.chosen-container-single .chosen-search input[type="text"] {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
margin: 1px 0;
|
||||
padding: 4px 20px 4px 5px;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
outline: 0;
|
||||
border: 1px solid #aaa;
|
||||
background: white url('chosen-sprite.png') no-repeat 100% -20px;
|
||||
background: url('chosen-sprite.png') no-repeat 100% -20px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
|
||||
background: url('chosen-sprite.png') no-repeat 100% -20px, -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background: url('chosen-sprite.png') no-repeat 100% -20px, -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background: url('chosen-sprite.png') no-repeat 100% -20px, -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background: url('chosen-sprite.png') no-repeat 100% -20px, linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
font-size: 1em;
|
||||
font-family: sans-serif;
|
||||
line-height: normal;
|
||||
border-radius: 0;
|
||||
}
|
||||
.chosen-container-single .chosen-drop {
|
||||
margin-top: -1px;
|
||||
border-radius: 0 0 4px 4px;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
.chosen-container-single.chosen-container-single-nosearch .chosen-search {
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
/* @group Results */
|
||||
.chosen-container .chosen-results {
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
margin: 0 4px 4px 0;
|
||||
padding: 0 0 0 4px;
|
||||
max-height: 240px;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
.chosen-container .chosen-results li {
|
||||
display: none;
|
||||
margin: 0;
|
||||
padding: 5px 6px;
|
||||
list-style: none;
|
||||
line-height: 15px;
|
||||
}
|
||||
.chosen-container .chosen-results li.active-result {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
.chosen-container .chosen-results li.disabled-result {
|
||||
display: list-item;
|
||||
color: #ccc;
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-container .chosen-results li.highlighted {
|
||||
background-color: #3875d7;
|
||||
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
|
||||
background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
|
||||
background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
|
||||
background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
|
||||
background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
|
||||
color: #fff;
|
||||
}
|
||||
.chosen-container .chosen-results li.no-results {
|
||||
display: list-item;
|
||||
background: #f4f4f4;
|
||||
}
|
||||
.chosen-container .chosen-results li.group-result {
|
||||
display: list-item;
|
||||
font-weight: bold;
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-container .chosen-results li.group-option {
|
||||
padding-left: 15px;
|
||||
}
|
||||
.chosen-container .chosen-results li em {
|
||||
font-style: normal;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
/* @group Multi Chosen */
|
||||
.chosen-container-multi .chosen-choices {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: auto !important;
|
||||
height: 1%;
|
||||
border: 1px solid #aaa;
|
||||
background-color: #fff;
|
||||
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
|
||||
background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
cursor: text;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li {
|
||||
float: left;
|
||||
list-style: none;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-field {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-field input[type="text"] {
|
||||
margin: 1px 0;
|
||||
padding: 5px;
|
||||
height: 15px;
|
||||
outline: 0;
|
||||
border: 0 !important;
|
||||
background: transparent !important;
|
||||
box-shadow: none;
|
||||
color: #666;
|
||||
font-size: 100%;
|
||||
font-family: sans-serif;
|
||||
line-height: normal;
|
||||
border-radius: 0;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-field .default {
|
||||
color: #999;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice {
|
||||
position: relative;
|
||||
margin: 3px 0 3px 5px;
|
||||
padding: 3px 20px 3px 5px;
|
||||
border: 1px solid #aaa;
|
||||
border-radius: 3px;
|
||||
background-color: #e4e4e4;
|
||||
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
|
||||
background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-clip: padding-box;
|
||||
box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||
color: #333;
|
||||
line-height: 13px;
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
right: 3px;
|
||||
display: block;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background: url('chosen-sprite.png') -42px 1px no-repeat;
|
||||
font-size: 1px;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
|
||||
background-position: -42px -10px;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice-disabled {
|
||||
padding-right: 5px;
|
||||
border: 1px solid #ccc;
|
||||
background-color: #e4e4e4;
|
||||
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
|
||||
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
|
||||
color: #666;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice-focus {
|
||||
background: #d4d4d4;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
|
||||
background-position: -42px -10px;
|
||||
}
|
||||
.chosen-container-multi .chosen-results {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.chosen-container-multi .chosen-drop .result-selected {
|
||||
display: list-item;
|
||||
color: #ccc;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
/* @group Active */
|
||||
.chosen-container-active .chosen-single {
|
||||
border: 1px solid #5897fb;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
.chosen-container-active.chosen-with-drop .chosen-single {
|
||||
border: 1px solid #aaa;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
|
||||
background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
|
||||
background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
|
||||
background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
|
||||
background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
|
||||
box-shadow: 0 1px 0 #fff inset;
|
||||
}
|
||||
.chosen-container-active.chosen-with-drop .chosen-single div {
|
||||
border-left: none;
|
||||
background: transparent;
|
||||
}
|
||||
.chosen-container-active.chosen-with-drop .chosen-single div b {
|
||||
background-position: -18px 2px;
|
||||
}
|
||||
.chosen-container-active .chosen-choices {
|
||||
border: 1px solid #5897fb;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
.chosen-container-active .chosen-choices li.search-field input[type="text"] {
|
||||
color: #111 !important;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
/* @group Disabled Support */
|
||||
.chosen-disabled {
|
||||
opacity: 0.5 !important;
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-disabled .chosen-single {
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-disabled .chosen-choices .search-choice .search-choice-close {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
/* @group Right to Left */
|
||||
.chosen-rtl {
|
||||
text-align: right;
|
||||
}
|
||||
.chosen-rtl .chosen-single {
|
||||
overflow: visible;
|
||||
padding: 0 8px 0 0;
|
||||
}
|
||||
.chosen-rtl .chosen-single span {
|
||||
margin-right: 0;
|
||||
margin-left: 26px;
|
||||
direction: rtl;
|
||||
}
|
||||
.chosen-rtl .chosen-single-with-deselect span {
|
||||
margin-left: 38px;
|
||||
}
|
||||
.chosen-rtl .chosen-single div {
|
||||
right: auto;
|
||||
left: 3px;
|
||||
}
|
||||
.chosen-rtl .chosen-single abbr {
|
||||
right: auto;
|
||||
left: 26px;
|
||||
}
|
||||
.chosen-rtl .chosen-choices li {
|
||||
float: right;
|
||||
}
|
||||
.chosen-rtl .chosen-choices li.search-field input[type="text"] {
|
||||
direction: rtl;
|
||||
}
|
||||
.chosen-rtl .chosen-choices li.search-choice {
|
||||
margin: 3px 5px 3px 0;
|
||||
padding: 3px 5px 3px 19px;
|
||||
}
|
||||
.chosen-rtl .chosen-choices li.search-choice .search-choice-close {
|
||||
right: auto;
|
||||
left: 4px;
|
||||
}
|
||||
.chosen-rtl.chosen-container-single-nosearch .chosen-search,
|
||||
.chosen-rtl .chosen-drop {
|
||||
left: 9999px;
|
||||
}
|
||||
.chosen-rtl.chosen-container-single .chosen-results {
|
||||
margin: 0 0 4px 4px;
|
||||
padding: 0 4px 0 0;
|
||||
}
|
||||
.chosen-rtl .chosen-results li.group-option {
|
||||
padding-right: 15px;
|
||||
padding-left: 0;
|
||||
}
|
||||
.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
|
||||
border-right: none;
|
||||
}
|
||||
.chosen-rtl .chosen-search input[type="text"] {
|
||||
padding: 4px 5px 4px 20px;
|
||||
background: white url('chosen-sprite.png') no-repeat -30px -20px;
|
||||
background: url('chosen-sprite.png') no-repeat -30px -20px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
|
||||
background: url('chosen-sprite.png') no-repeat -30px -20px, -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background: url('chosen-sprite.png') no-repeat -30px -20px, -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background: url('chosen-sprite.png') no-repeat -30px -20px, -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
background: url('chosen-sprite.png') no-repeat -30px -20px, linear-gradient(#eeeeee 1%, #ffffff 15%);
|
||||
direction: rtl;
|
||||
}
|
||||
.chosen-rtl.chosen-container-single .chosen-single div b {
|
||||
background-position: 6px 2px;
|
||||
}
|
||||
.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
|
||||
background-position: -12px 2px;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
/* @group Retina compatibility */
|
||||
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
|
||||
.chosen-rtl .chosen-search input[type="text"],
|
||||
.chosen-container-single .chosen-single abbr,
|
||||
.chosen-container-single .chosen-single div b,
|
||||
.chosen-container-single .chosen-search input[type="text"],
|
||||
.chosen-container-multi .chosen-choices .search-choice .search-choice-close,
|
||||
.chosen-container .chosen-results-scroll-down span,
|
||||
.chosen-container .chosen-results-scroll-up span {
|
||||
background-image: url('chosen-sprite@2x.png') !important;
|
||||
background-size: 52px 37px !important;
|
||||
background-repeat: no-repeat !important;
|
||||
}
|
||||
}
|
||||
/* @end */
|
284
v2.5/assets/css/daterangepicker-bs3.css
Normal file
@ -0,0 +1,284 @@
|
||||
/*!
|
||||
* Stylesheet for the Date Range Picker, for use with Bootstrap 3.x
|
||||
*
|
||||
* Copyright 2013 Dan Grossman ( http://www.dangrossman.info )
|
||||
* Licensed under the Apache License v2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Built for http://www.improvely.com
|
||||
*/
|
||||
|
||||
.daterangepicker.dropdown-menu {
|
||||
max-width: none;
|
||||
z-index: 3000;
|
||||
}
|
||||
|
||||
.daterangepicker.opensleft .ranges, .daterangepicker.opensleft .calendar {
|
||||
float: left;
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
.daterangepicker.opensright .ranges, .daterangepicker.opensright .calendar {
|
||||
float: right;
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges {
|
||||
width: 160px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges .range_inputs>div {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges .range_inputs>div:nth-child(2) {
|
||||
padding-left: 11px;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar {
|
||||
display: none;
|
||||
max-width: 270px;
|
||||
}
|
||||
|
||||
.daterangepicker.show-calendar .calendar {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar.single .calendar-date {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar th, .daterangepicker .calendar td {
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
min-width: 32px;
|
||||
}
|
||||
|
||||
.daterangepicker .daterangepicker_start_input label,
|
||||
.daterangepicker .daterangepicker_end_input label {
|
||||
color: #333;
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
font-weight: normal;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
margin-bottom: 2px;
|
||||
text-shadow: #fff 1px 1px 0px;
|
||||
text-transform: uppercase;
|
||||
width: 74px;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges input {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges .input-mini {
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
color: #555;
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
vertical-align: middle;
|
||||
margin: 0 0 10px 0;
|
||||
padding: 0 6px;
|
||||
width: 74px;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges li {
|
||||
font-size: 13px;
|
||||
background: #f5f5f5;
|
||||
border: 1px solid #f5f5f5;
|
||||
color: #08c;
|
||||
padding: 3px 12px;
|
||||
margin-bottom: 8px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges li.active, .daterangepicker .ranges li:hover {
|
||||
background: #08c;
|
||||
border: 1px solid #08c;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-date {
|
||||
border: 1px solid #ddd;
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-time {
|
||||
text-align: center;
|
||||
margin: 8px auto 0 auto;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.daterangepicker {
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
top: 100px;
|
||||
left: 20px;
|
||||
padding: 4px;
|
||||
margin-top: 1px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.daterangepicker.opensleft:before {
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
right: 9px;
|
||||
display: inline-block;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-left: 7px solid transparent;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
content: '';
|
||||
}
|
||||
|
||||
.daterangepicker.opensleft:after {
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
right: 10px;
|
||||
display: inline-block;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #fff;
|
||||
border-left: 6px solid transparent;
|
||||
content: '';
|
||||
}
|
||||
|
||||
.daterangepicker.opensright:before {
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
left: 9px;
|
||||
display: inline-block;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-left: 7px solid transparent;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
content: '';
|
||||
}
|
||||
|
||||
.daterangepicker.opensright:after {
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 10px;
|
||||
display: inline-block;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #fff;
|
||||
border-left: 6px solid transparent;
|
||||
content: '';
|
||||
}
|
||||
|
||||
.daterangepicker table {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.daterangepicker td, .daterangepicker th {
|
||||
text-align: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.daterangepicker td.off {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.daterangepicker td.disabled {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.daterangepicker td.available:hover, .daterangepicker th.available:hover {
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
.daterangepicker td.in-range {
|
||||
background: #ebf4f8;
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.daterangepicker td.available + td.start-date {
|
||||
-webkit-border-radius: 4px 0 0 4px;
|
||||
-moz-border-radius: 4px 0 0 4px;
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
|
||||
.daterangepicker td.in-range + td.end-date{
|
||||
-webkit-border-radius: 0 4px 4px 0;
|
||||
-moz-border-radius: 0 4px 4px 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
|
||||
.daterangepicker td.start-date.end-date{
|
||||
-webkit-border-radius: 4px !important;
|
||||
-moz-border-radius: 4px !important;
|
||||
border-radius: 4px !important;
|
||||
}
|
||||
|
||||
.daterangepicker td.active, .daterangepicker td.active:hover {
|
||||
background-color: #357ebd;
|
||||
border-color: #3071a9;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.daterangepicker td.week, .daterangepicker th.week {
|
||||
font-size: 80%;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.daterangepicker select.monthselect, .daterangepicker select.yearselect {
|
||||
font-size: 12px;
|
||||
padding: 1px;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.daterangepicker select.monthselect {
|
||||
margin-right: 2%;
|
||||
width: 56%;
|
||||
}
|
||||
|
||||
.daterangepicker select.yearselect {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.ampmselect {
|
||||
width: 50px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.daterangepicker_start_input {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.daterangepicker_end_input {
|
||||
float: left;
|
||||
padding-left: 11px
|
||||
}
|
||||
|
||||
.daterangepicker th.month {
|
||||
width: auto;
|
||||
}
|
4
v2.5/assets/css/font-awesome.min.css
vendored
Normal file
1
v2.5/assets/css/nv.d3.min.css
vendored
Normal file
249
v2.5/assets/css/shelf.css
Normal file
@ -0,0 +1,249 @@
|
||||
footer.copyright {
|
||||
color: #777777;
|
||||
float: left;
|
||||
font-family: Open Sans, Helvetica,sans-serif;
|
||||
font-size: 80%;
|
||||
font-style: italic;
|
||||
margin: 1em;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
div .description {
|
||||
color: #777777;
|
||||
float: left;
|
||||
font-family: Open Sans, Helvetica,sans-serif;
|
||||
font-size: 80%;
|
||||
line-height: 1.3;
|
||||
margin: 1em;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
div.logo-nav .compass_logo {
|
||||
background: url("compass-logo.png") no-repeat scroll left bottom / contain rgba(0, 0, 0, 0);
|
||||
float: left;
|
||||
height: 3em;
|
||||
width: 12em;
|
||||
}
|
||||
div.container {
|
||||
margin: 2em auto;
|
||||
overflow: hidden;
|
||||
width: 880px;
|
||||
}
|
||||
div.logo-nav {
|
||||
margin: 0 10px;
|
||||
}
|
||||
div.logo-nav h1 {
|
||||
color: #777;
|
||||
font-family: Open Sans, verdana;
|
||||
font-size: 250%;
|
||||
font-weight: normal;
|
||||
}
|
||||
div.toc {
|
||||
float: left;
|
||||
}
|
||||
div.toc ul li {
|
||||
display: block;
|
||||
float: left;
|
||||
padding: 5px;
|
||||
height: 200px;
|
||||
overflow: hidden;
|
||||
width: 860px;
|
||||
}
|
||||
div.toc ul li a {
|
||||
background-color: rgb(18, 191, 119);
|
||||
background-position: 50% 60%;
|
||||
background-repeat: no-repeat;
|
||||
color: white;
|
||||
display: block;
|
||||
padding: 5px;
|
||||
float: left;
|
||||
font-family: Open Sans, Helvetica,sans-serif;
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
height: 100%;
|
||||
text-decoration: none;
|
||||
width: 100%;
|
||||
}
|
||||
div.toc ul li a em {
|
||||
font-size: 500%;
|
||||
}
|
||||
div.toc ul li:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
address, caption, cite, code, dfn, em, strong, th, var {
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
letter-spacing: -0.1em;
|
||||
opacity: 0.5;
|
||||
padding-right: 0.2em;
|
||||
}
|
||||
.toc .tiles li:nth-child(1) {
|
||||
width: 600px;
|
||||
}
|
||||
.toc .tiles li:nth-child(1) a {
|
||||
background-color: #6C9842;
|
||||
}
|
||||
.toc .tiles li:nth-child(2) {
|
||||
width: 200px;
|
||||
}
|
||||
.toc .tiles li:nth-child(2) a {
|
||||
background-color: #D6487E;
|
||||
}
|
||||
.toc .tiles li:nth-child(3) {
|
||||
height: 400px;
|
||||
width: 200px;
|
||||
}
|
||||
.toc .tiles li:nth-child(3) a {
|
||||
background-color: #FFB752;
|
||||
}
|
||||
.toc .tiles li:nth-child(4), .toc .tiles li:nth-child(5) {
|
||||
width: 300px;
|
||||
}
|
||||
.toc .tiles li:nth-child(4) a, .toc .tiles li:nth-child(5) a {
|
||||
background-color: #7B68AF;
|
||||
}
|
||||
.toc .tiles li:nth-child(6), .toc .tiles li:nth-child(7), .toc .tiles li:nth-child(8) {
|
||||
width: 200px;
|
||||
}
|
||||
.toc .tiles li:nth-child(6) a, .toc .tiles li:nth-child(7) a, .toc .tiles li:nth-child(8) a {
|
||||
background-color: #A0A0A0;
|
||||
}
|
||||
.toc .tiles li:nth-child(9), .toc .tiles li:nth-child(10), .toc .tiles li:nth-child(11), .toc .tiles li:nth-child(12) {
|
||||
width: 200px;
|
||||
}
|
||||
.toc .tiles li:nth-child(9) a, .toc .tiles li:nth-child(10) a, .toc .tiles li:nth-child(11) a, .toc .tiles li:nth-child(12) a {
|
||||
background-color: #6FB3E0;
|
||||
}
|
||||
@media (max-width: 915px) {
|
||||
div.container {
|
||||
max-width: 720px;
|
||||
}
|
||||
div.logo-nav {
|
||||
margin: 0 5px;
|
||||
}
|
||||
div.logo-nav h1 {
|
||||
font-size: 180%;
|
||||
}
|
||||
div.logo-nav .compass_logo {
|
||||
height: 2.2em;
|
||||
width: 9em;
|
||||
}
|
||||
div.toc {
|
||||
float: left;
|
||||
max-width: 720px;
|
||||
}
|
||||
div.toc ul li {
|
||||
height: 160px;
|
||||
overflow: hidden;
|
||||
padding: 8px;
|
||||
width: 704px;
|
||||
}
|
||||
div.toc ul li a {
|
||||
font-size: 110%;
|
||||
padding: 10px 8px;
|
||||
}
|
||||
.toc .tiles li:nth-child(1) {
|
||||
width: 704px;
|
||||
}
|
||||
.toc .tiles li:nth-child(2) {
|
||||
float: right;
|
||||
width: 464px;
|
||||
}
|
||||
.toc .tiles li:nth-child(3), .toc .tiles li:nth-child(4), .toc .tiles li:nth-child(5), .toc .tiles li:nth-child(6), .toc .tiles li:nth-child(7), .toc .tiles li:nth-child(8) {
|
||||
width: 224px;
|
||||
}
|
||||
.toc .tiles li:nth-child(9), .toc .tiles li:nth-child(10), .toc .tiles li:nth-child(11), .toc .tiles li:nth-child(12) {
|
||||
width: 164px;
|
||||
}
|
||||
.toc .tiles li:nth-child(3) {
|
||||
height: 335px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 755px) {
|
||||
div.container {
|
||||
max-width: 600px;
|
||||
}
|
||||
div.logo-nav h1 {
|
||||
font-size: 150%;
|
||||
}
|
||||
div.logo-nav .compass_logo {
|
||||
height: 2em;
|
||||
width: 8em;
|
||||
}
|
||||
div.toc ul li {
|
||||
height: 100px;
|
||||
overflow: hidden;
|
||||
padding: 7px;
|
||||
width: 586px;
|
||||
}
|
||||
div.toc ul li a {
|
||||
font-size: 100%;
|
||||
padding: 7px 6px;
|
||||
}
|
||||
div.toc ul li a em {
|
||||
font-size: 300%;
|
||||
}
|
||||
.toc .tiles li:nth-child(1) {
|
||||
width: 586px;
|
||||
}
|
||||
.toc .tiles li:nth-child(2) {
|
||||
width: 586px;
|
||||
}
|
||||
.toc .tiles li:nth-child(3), .toc .tiles li:nth-child(4), .toc .tiles li:nth-child(5) {
|
||||
width: 286px;
|
||||
}
|
||||
.toc .tiles li:nth-child(6), .toc .tiles li:nth-child(7), .toc .tiles li:nth-child(8) {
|
||||
width: 186px;
|
||||
}
|
||||
.toc .tiles li:nth-child(9), .toc .tiles li:nth-child(10), .toc .tiles li:nth-child(11), .toc .tiles li:nth-child(12) {
|
||||
width: 286px;
|
||||
}
|
||||
.toc .tiles li:nth-child(3) {
|
||||
height: 213px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 635px) {
|
||||
div.container {
|
||||
margin: 2em auto;
|
||||
max-width: 314px;
|
||||
}
|
||||
div.logo-nav .compass_logo {
|
||||
height: 2em;
|
||||
width: 15em;
|
||||
}
|
||||
div.toc ul li {
|
||||
height: 100px;
|
||||
overflow: hidden;
|
||||
padding: 3px;
|
||||
width: 308px;
|
||||
}
|
||||
div.toc ul li a {
|
||||
font-size: 80%;
|
||||
padding: 3px;
|
||||
}
|
||||
.toc .tiles li:nth-child(1) {
|
||||
width: 308px;
|
||||
}
|
||||
.toc .tiles li:nth-child(2) {
|
||||
width: 308px;
|
||||
}
|
||||
.toc .tiles li:nth-child(3), .toc .tiles li:nth-child(4), .toc .tiles li:nth-child(5) {
|
||||
width: 151px;
|
||||
}
|
||||
.toc .tiles li:nth-child(6), .toc .tiles li:nth-child(7), .toc .tiles li:nth-child(8) {
|
||||
width: 98.33px;
|
||||
}
|
||||
.toc .tiles li:nth-child(9), .toc .tiles li:nth-child(10), .toc .tiles li:nth-child(11), .toc .tiles li:nth-child(12) {
|
||||
width: 151px;
|
||||
}
|
||||
.toc .tiles li:nth-child(3) {
|
||||
height: 205px;
|
||||
}
|
||||
}
|
||||
.chosen-container-multi .chosen-choices{
|
||||
border-radius: 5px;
|
||||
}
|
||||
.chosen-container-active .chosen-choices{
|
||||
border: 1px solid orange;
|
||||
border-radius: 5px;
|
||||
}
|
1068
v2.5/assets/css/style.css
Normal file
BIN
v2.5/assets/img/README.md
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
v2.5/assets/img/bg.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
v2.5/assets/img/datacenter.jpg
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
v2.5/assets/img/datacenter1.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
v2.5/assets/img/datacenter2.jpg
Normal file
After Width: | Height: | Size: 313 KiB |
BIN
v2.5/assets/img/dialogue-bar.jpg
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
v2.5/assets/img/dialogue-bar.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
v2.5/assets/img/dialogue-bar1.jpg
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
v2.5/assets/img/fabric-texture.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
v2.5/assets/img/happy_face.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
v2.5/assets/img/header.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
v2.5/assets/img/logo-header.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
v2.5/assets/img/logo-pure.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
v2.5/assets/img/logo-text.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
v2.5/assets/img/logo.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
v2.5/assets/img/logo1.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
v2.5/assets/img/meh_face.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
v2.5/assets/img/moni/alert.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
v2.5/assets/img/moni/cluster_summary.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
v2.5/assets/img/moni/compute.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
v2.5/assets/img/moni/controller.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
v2.5/assets/img/moni/database.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
v2.5/assets/img/moni/image.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
v2.5/assets/img/moni/messagebus.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
v2.5/assets/img/moni/messagebus1.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
v2.5/assets/img/moni/monitoring.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
v2.5/assets/img/moni/network.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
v2.5/assets/img/moni/processes.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
v2.5/assets/img/moni/security.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
v2.5/assets/img/moni/store.png
Normal file
After Width: | Height: | Size: 706 B |
BIN
v2.5/assets/img/moni/users.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
v2.5/assets/img/network.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
v2.5/assets/img/network_mapping.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
v2.5/assets/img/os_global.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
v2.5/assets/img/package_config.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
v2.5/assets/img/partition.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
v2.5/assets/img/review.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
v2.5/assets/img/role_assign.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
v2.5/assets/img/router.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
v2.5/assets/img/server.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
v2.5/assets/img/server1.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
v2.5/assets/img/smile_face.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
v2.5/assets/img/sv_selection.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
v2.5/assets/img/switch.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
v2.5/assets/img/switch1.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
v2.5/assets/img/unhappy_face.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
148
v2.5/data/adapter_config
Normal file
@ -0,0 +1,148 @@
|
||||
{
|
||||
"os_config": {
|
||||
"centos" : {
|
||||
"global": {
|
||||
"general": {
|
||||
"_self": {
|
||||
"display": "General"
|
||||
},
|
||||
"http_proxy": {
|
||||
"display": "HTTP Proxy",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
},
|
||||
"local_repo": {
|
||||
"display": "Local Repo",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
},
|
||||
"ntp_proxy": {
|
||||
"display": "NTP Server",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
},
|
||||
"dns_servers": {
|
||||
"display": "DNS Servers",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
},
|
||||
"search_path": {
|
||||
"display": "Search Path",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
},
|
||||
"domain": {
|
||||
"display": "Domain",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
},
|
||||
"gateway": {
|
||||
"display": "Gateway",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
},
|
||||
"timezone": {
|
||||
"display": "Timezone",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
},
|
||||
"language": {
|
||||
"display": "Language",
|
||||
"ftype": "string",
|
||||
"description": "help text"
|
||||
}
|
||||
},
|
||||
"subnetwork": {
|
||||
"_self": {
|
||||
"display": "Subnetwork"
|
||||
}
|
||||
},
|
||||
"routing_table": {
|
||||
"_self": {
|
||||
"display": "Routing Table"
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": {
|
||||
"_self": {
|
||||
"display": "Server Credentials",
|
||||
"description": "The default administrator user name and password for each server",
|
||||
"type": "table"
|
||||
},
|
||||
"columns": {
|
||||
"1": {
|
||||
"name": "username",
|
||||
"display": "Username"
|
||||
},
|
||||
"2": {
|
||||
"name": "password",
|
||||
"display": "Password",
|
||||
"type": "password"
|
||||
}
|
||||
}
|
||||
},
|
||||
"partition": {
|
||||
|
||||
},
|
||||
"server_credentials": {
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
"adapter_config": {
|
||||
"security": {
|
||||
"_self": {
|
||||
"display": "Security"
|
||||
},
|
||||
"service_credentials": {
|
||||
"_self": {
|
||||
"display": "OpenStack Service Credentials",
|
||||
"description": "Username and password for all of the OpenStack services",
|
||||
"type": "table"
|
||||
},
|
||||
"fields": [{
|
||||
"name": "service",
|
||||
"display": "Service",
|
||||
"ftype": "string",
|
||||
"is_required": true
|
||||
}, {
|
||||
"name": "username",
|
||||
"display": "Username",
|
||||
"ftype": "string",
|
||||
"is_required": true
|
||||
}, {
|
||||
"name": "password",
|
||||
"display": "Password",
|
||||
"ftype": "password",
|
||||
"is_required": true
|
||||
}]
|
||||
},
|
||||
"management_console_credentials": {
|
||||
"_self": {
|
||||
"display": "OpenStack Management Console Credentials",
|
||||
"description": "Username and password for the OpenStack management console",
|
||||
"type": "table"
|
||||
},
|
||||
"fields": [{
|
||||
"name": "service",
|
||||
"display": "Service",
|
||||
"ftype": "string",
|
||||
"is_required": true
|
||||
}, {
|
||||
"name": "username",
|
||||
"display": "Username",
|
||||
"ftype": "string",
|
||||
"is_required": true
|
||||
}, {
|
||||
"name": "password",
|
||||
"display": "Password",
|
||||
"ftype": "password",
|
||||
"is_required": true
|
||||
}]
|
||||
}
|
||||
},
|
||||
"network_mapping": {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
474
v2.5/data/config.json
Normal file
@ -0,0 +1,474 @@
|
||||
{
|
||||
"openstack": {
|
||||
"cluster": {
|
||||
"id": 1,
|
||||
"name": "demo",
|
||||
"adapter_id": 1,
|
||||
"os_id": 1
|
||||
},
|
||||
"partition": {
|
||||
"/var": {
|
||||
"percentage": 30,
|
||||
"max_size": "10G"
|
||||
},
|
||||
"/usr": {
|
||||
"percentage": 30,
|
||||
"max_size": "20G"
|
||||
}
|
||||
},
|
||||
"interface": {
|
||||
"eth0": {
|
||||
"subnet_id": 1,
|
||||
"is_mgmt": true,
|
||||
"is_promiscuous": false
|
||||
},
|
||||
"eth1": {
|
||||
"subnet_id": 2,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": true
|
||||
},
|
||||
"eth2": {
|
||||
"subnet_id": 1,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": false
|
||||
},
|
||||
"eth3": {
|
||||
"subnet_id": 2,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": false
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"timezone": "America/Los_Angeles",
|
||||
"language": "en",
|
||||
"http_proxy": "",
|
||||
"https_proxy": "",
|
||||
"no_proxy": [""],
|
||||
"ntp_server": "",
|
||||
"dns_servers": [""],
|
||||
"search_path": ["ods.com"],
|
||||
"domain": "ods.com",
|
||||
"default_gateway": "10.145.88.1",
|
||||
"local_repo": ""
|
||||
},
|
||||
"server_credentials": {
|
||||
"username": "",
|
||||
"password": ""
|
||||
},
|
||||
"service_credentials": {
|
||||
"rabbitmq": {
|
||||
"username": "guest",
|
||||
"password": "guest"
|
||||
},
|
||||
"compute": {
|
||||
"username": "nova",
|
||||
"password": "nova"
|
||||
},
|
||||
"dashboard": {
|
||||
"username": "dashboard",
|
||||
"password": "dashboard"
|
||||
},
|
||||
"identity": {
|
||||
"username": "keystone",
|
||||
"password": "keystone"
|
||||
},
|
||||
"image": {
|
||||
"username": "glance",
|
||||
"password": "glance"
|
||||
},
|
||||
"metering": {
|
||||
"username": "ceilometer",
|
||||
"password": "ceilometer"
|
||||
},
|
||||
"mysql": {
|
||||
"username": "root",
|
||||
"password": "root"
|
||||
},
|
||||
"volume": {
|
||||
"username": "cinder",
|
||||
"password": "cinder"
|
||||
}
|
||||
},
|
||||
"console_credentials": {
|
||||
"admin": {
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
},
|
||||
"compute": {
|
||||
"username": "nova",
|
||||
"password": "nova"
|
||||
},
|
||||
"dashboard": {
|
||||
"username": "dashboard",
|
||||
"password": "dashboard"
|
||||
},
|
||||
"image": {
|
||||
"username": "glance",
|
||||
"password": "glance"
|
||||
},
|
||||
"metering": {
|
||||
"username": "ceilometer",
|
||||
"password": "ceilometer"
|
||||
},
|
||||
"network": {
|
||||
"username": "quantum",
|
||||
"password": "quantum"
|
||||
},
|
||||
"object-store": {
|
||||
"username": "swift",
|
||||
"password": "swift"
|
||||
},
|
||||
"volume": {
|
||||
"username": "cinder",
|
||||
"password": "cinder"
|
||||
}
|
||||
},
|
||||
"network_mapping": {
|
||||
"management": "",
|
||||
"tenant": "",
|
||||
"storage": "",
|
||||
"external": ""
|
||||
}
|
||||
},
|
||||
"openstack_ceph": {
|
||||
"cluster": {
|
||||
"id": 1,
|
||||
"name": "demo",
|
||||
"adapter_id": 1,
|
||||
"os_id": 1
|
||||
},
|
||||
"partition": {
|
||||
"/var": {
|
||||
"percentage": 30,
|
||||
"max_size": "10G"
|
||||
},
|
||||
"/usr": {
|
||||
"percentage": 30,
|
||||
"max_size": "20G"
|
||||
}
|
||||
},
|
||||
"interface": {
|
||||
"eth0": {
|
||||
"subnet_id": 1,
|
||||
"is_mgmt": true,
|
||||
"is_promiscuous": false
|
||||
},
|
||||
"eth1": {
|
||||
"subnet_id": 2,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": true
|
||||
},
|
||||
"eth2": {
|
||||
"subnet_id": 1,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": false
|
||||
},
|
||||
"eth3": {
|
||||
"subnet_id": 2,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": false
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"timezone": "America/Los_Angeles",
|
||||
"language": "en",
|
||||
"http_proxy": "",
|
||||
"https_proxy": "",
|
||||
"no_proxy": [""],
|
||||
"ntp_server": "",
|
||||
"dns_servers": [""],
|
||||
"search_path": ["ods.com"],
|
||||
"domain": "ods.com",
|
||||
"default_gateway": "10.145.88.1",
|
||||
"local_repo": ""
|
||||
},
|
||||
"server_credentials": {
|
||||
"username": "",
|
||||
"password": ""
|
||||
},
|
||||
"service_credentials": {
|
||||
"rabbitmq": {
|
||||
"username": "guest",
|
||||
"password": "guest"
|
||||
},
|
||||
"compute": {
|
||||
"username": "nova",
|
||||
"password": "nova"
|
||||
},
|
||||
"dashboard": {
|
||||
"username": "dashboard",
|
||||
"password": "dashboard"
|
||||
},
|
||||
"identity": {
|
||||
"username": "keystone",
|
||||
"password": "keystone"
|
||||
},
|
||||
"image": {
|
||||
"username": "glance",
|
||||
"password": "glance"
|
||||
},
|
||||
"metering": {
|
||||
"username": "ceilometer",
|
||||
"password": "ceilometer"
|
||||
},
|
||||
"mysql": {
|
||||
"username": "root",
|
||||
"password": "root"
|
||||
},
|
||||
"volume": {
|
||||
"username": "cinder",
|
||||
"password": "cinder"
|
||||
}
|
||||
},
|
||||
"console_credentials": {
|
||||
"admin": {
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
},
|
||||
"compute": {
|
||||
"username": "nova",
|
||||
"password": "nova"
|
||||
},
|
||||
"dashboard": {
|
||||
"username": "dashboard",
|
||||
"password": "dashboard"
|
||||
},
|
||||
"image": {
|
||||
"username": "glance",
|
||||
"password": "glance"
|
||||
},
|
||||
"metering": {
|
||||
"username": "ceilometer",
|
||||
"password": "ceilometer"
|
||||
},
|
||||
"network": {
|
||||
"username": "quantum",
|
||||
"password": "quantum"
|
||||
},
|
||||
"object-store": {
|
||||
"username": "swift",
|
||||
"password": "swift"
|
||||
},
|
||||
"volume": {
|
||||
"username": "cinder",
|
||||
"password": "cinder"
|
||||
}
|
||||
},
|
||||
"network_mapping": {
|
||||
"management": "",
|
||||
"tenant": "",
|
||||
"storage": "",
|
||||
"external": "",
|
||||
"public_network": "",
|
||||
"cluster_network": ""
|
||||
},
|
||||
"ceph_config": {
|
||||
"global_config": {
|
||||
"osd_pool_pg_num": "1024",
|
||||
"osd_pool_pgp_num": "1024",
|
||||
"osd_pool_size": "3"
|
||||
},
|
||||
"osd_config": {
|
||||
"journal_size": "10000",
|
||||
"op_threads": 10
|
||||
}
|
||||
}
|
||||
},
|
||||
"os_only": {
|
||||
"cluster": {
|
||||
"id": 1,
|
||||
"name": "demo",
|
||||
"adapter_id": 1,
|
||||
"os_id": 1
|
||||
},
|
||||
"partition": {
|
||||
"/var": {
|
||||
"percentage": 30,
|
||||
"max_size": "10G"
|
||||
},
|
||||
"/usr": {
|
||||
"percentage": 30,
|
||||
"max_size": "20G"
|
||||
}
|
||||
},
|
||||
"interface": {
|
||||
"eth0": {
|
||||
"subnet_id": 1,
|
||||
"is_mgmt": true,
|
||||
"is_promiscuous": false
|
||||
},
|
||||
"eth1": {
|
||||
"subnet_id": 2,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": true
|
||||
},
|
||||
"eth2": {
|
||||
"subnet_id": 1,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": false
|
||||
},
|
||||
"eth3": {
|
||||
"subnet_id": 2,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": false
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"timezone": "America/Los_Angeles",
|
||||
"language": "en",
|
||||
"http_proxy": "",
|
||||
"https_proxy": "",
|
||||
"no_proxy": [""],
|
||||
"ntp_server": "",
|
||||
"dns_servers": [""],
|
||||
"search_path": ["ods.com"],
|
||||
"domain": "ods.com",
|
||||
"default_gateway": "10.145.88.1",
|
||||
"local_repo": ""
|
||||
},
|
||||
"server_credentials": {
|
||||
"username": "",
|
||||
"password": ""
|
||||
}
|
||||
},
|
||||
"ceph_firefly": {
|
||||
"cluster": {
|
||||
"id": 1,
|
||||
"name": "demo",
|
||||
"adapter_id": 1,
|
||||
"os_id": 1
|
||||
},
|
||||
"partition": {
|
||||
"/var": {
|
||||
"percentage": 30,
|
||||
"max_size": "10G"
|
||||
},
|
||||
"/usr": {
|
||||
"percentage": 30,
|
||||
"max_size": "20G"
|
||||
}
|
||||
},
|
||||
"interface": {
|
||||
"eth0": {
|
||||
"subnet_id": 1,
|
||||
"is_mgmt": true,
|
||||
"is_promiscuous": false
|
||||
},
|
||||
"eth1": {
|
||||
"subnet_id": 2,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": true
|
||||
},
|
||||
"eth2": {
|
||||
"subnet_id": 1,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": false
|
||||
},
|
||||
"eth3": {
|
||||
"subnet_id": 2,
|
||||
"is_mgmt": false,
|
||||
"is_promiscuous": false
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"timezone": "America/Los_Angeles",
|
||||
"language": "en",
|
||||
"http_proxy": "",
|
||||
"https_proxy": "",
|
||||
"no_proxy": [""],
|
||||
"ntp_server": "",
|
||||
"dns_servers": [""],
|
||||
"search_path": ["ods.com"],
|
||||
"domain": "ods.com",
|
||||
"default_gateway": "10.145.88.1",
|
||||
"local_repo": ""
|
||||
},
|
||||
"server_credentials": {
|
||||
"username": "",
|
||||
"password": ""
|
||||
},
|
||||
"service_credentials": {
|
||||
"rabbitmq": {
|
||||
"username": "guest",
|
||||
"password": "guest"
|
||||
},
|
||||
"compute": {
|
||||
"username": "nova",
|
||||
"password": "nova"
|
||||
},
|
||||
"dashboard": {
|
||||
"username": "dashboard",
|
||||
"password": "dashboard"
|
||||
},
|
||||
"identity": {
|
||||
"username": "keystone",
|
||||
"password": "keystone"
|
||||
},
|
||||
"image": {
|
||||
"username": "glance",
|
||||
"password": "glance"
|
||||
},
|
||||
"metering": {
|
||||
"username": "ceilometer",
|
||||
"password": "ceilometer"
|
||||
},
|
||||
"mysql": {
|
||||
"username": "root",
|
||||
"password": "root"
|
||||
},
|
||||
"volume": {
|
||||
"username": "cinder",
|
||||
"password": "cinder"
|
||||
}
|
||||
},
|
||||
"console_credentials": {
|
||||
"admin": {
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
},
|
||||
"compute": {
|
||||
"username": "nova",
|
||||
"password": "nova"
|
||||
},
|
||||
"dashboard": {
|
||||
"username": "dashboard",
|
||||
"password": "dashboard"
|
||||
},
|
||||
"image": {
|
||||
"username": "glance",
|
||||
"password": "glance"
|
||||
},
|
||||
"metering": {
|
||||
"username": "ceilometer",
|
||||
"password": "ceilometer"
|
||||
},
|
||||
"network": {
|
||||
"username": "quantum",
|
||||
"password": "quantum"
|
||||
},
|
||||
"object-store": {
|
||||
"username": "swift",
|
||||
"password": "swift"
|
||||
},
|
||||
"volume": {
|
||||
"username": "cinder",
|
||||
"password": "cinder"
|
||||
}
|
||||
},
|
||||
"network_mapping": {
|
||||
"public_network": "",
|
||||
"cluster_network": ""
|
||||
},
|
||||
"ceph_config": {
|
||||
"global_config": {
|
||||
"osd_pool_pg_num": "1024",
|
||||
"osd_pool_pgp_num": "1024",
|
||||
"osd_pool_size": "3"
|
||||
},
|
||||
"osd_config": {
|
||||
"journal_size": "10000",
|
||||
"op_threads": 10
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
237
v2.5/data/machine_host_columns.json
Normal file
@ -0,0 +1,237 @@
|
||||
{
|
||||
"showall": [{
|
||||
"title": "Host MAC Addr",
|
||||
"field": "mac",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Switch IP",
|
||||
"field": "switch_ip",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Port",
|
||||
"field": "port",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "VLAN",
|
||||
"field": "vlan",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Hostname",
|
||||
"field": "hostname",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Clusters",
|
||||
"field": "clusters",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "OS",
|
||||
"field": "os_name",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "OS Reinstall",
|
||||
"field": "os_installed",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "State",
|
||||
"field": "state",
|
||||
"visible": true
|
||||
}],
|
||||
"showless": [{
|
||||
"title": "Host MAC Addr",
|
||||
"field": "mac",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Switch IP",
|
||||
"field": "switch_ip",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Port",
|
||||
"field": "port",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "VLAN",
|
||||
"field": "vlan",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Hostname",
|
||||
"field": "hostname",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Clusters",
|
||||
"field": "clusters",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "OS",
|
||||
"field": "os_name",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "State",
|
||||
"field": "state",
|
||||
"visible": false
|
||||
}],
|
||||
"review": [{
|
||||
"title": "Host MAC Addr",
|
||||
"field": "mac",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Switch IP",
|
||||
"field": "switch_ip",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Port",
|
||||
"field": "port",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "VLAN",
|
||||
"field": "vlan",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Hostname",
|
||||
"field": "hostname",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Clusters",
|
||||
"field": "clusters",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "OS",
|
||||
"field": "os_name",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "OS Reinstall",
|
||||
"field": "os_installed",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Roles",
|
||||
"field": "roles",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "State",
|
||||
"field": "state",
|
||||
"visible": false
|
||||
}],
|
||||
"progress": [{
|
||||
"title": "Host MAC Addr",
|
||||
"field": "mac",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Switch IP",
|
||||
"field": "switch_ip",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Port",
|
||||
"field": "port",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Mgmt IP",
|
||||
"field": "ip",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "VLAN",
|
||||
"field": "vlan",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Hostname",
|
||||
"field": "hostname",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Clusters",
|
||||
"field": "clusters",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "OS",
|
||||
"field": "os_name",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Roles",
|
||||
"field": "roles",
|
||||
"visible": false
|
||||
}],
|
||||
"machines_hosts": [{
|
||||
"title": "Host MAC Addr",
|
||||
"field": "mac",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Switch IP",
|
||||
"field": "switch_ip",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Port",
|
||||
"field": "port",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "VLAN",
|
||||
"field": "vlan",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Hostname",
|
||||
"field": "hostname",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Clusters",
|
||||
"field": "clusters",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "OS",
|
||||
"field": "os_name",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "State",
|
||||
"field": "state",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Date Created",
|
||||
"field": "created_at",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Date Updated",
|
||||
"field": "updated_at",
|
||||
"visible": true
|
||||
}],
|
||||
"machines": [{
|
||||
"title": "MAC Addr",
|
||||
"field": "mac",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Switch IP",
|
||||
"field": "switch_ip",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Port",
|
||||
"field": "port",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "VLAN",
|
||||
"field": "vlan",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Date Created",
|
||||
"field": "created_at",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Date Updated",
|
||||
"field": "updated_at",
|
||||
"visible": true
|
||||
}],
|
||||
"roles": [{
|
||||
"title": "MAC Addr",
|
||||
"field": "mac",
|
||||
"visible": false
|
||||
}, {
|
||||
"title": "Switch IP",
|
||||
"field": "switch_ip",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Port",
|
||||
"field": "port",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Hostname",
|
||||
"field": "hostname",
|
||||
"visible": true
|
||||
}, {
|
||||
"title": "Roles",
|
||||
"field": "roles",
|
||||
"visible": true
|
||||
}]
|
||||
}
|
31
v2.5/data/monitoring_nav.json
Normal file
@ -0,0 +1,31 @@
|
||||
[{
|
||||
"name": "cluster.monitoring.overview",
|
||||
"url": "/overview",
|
||||
"display": "Overview",
|
||||
"controller": "",
|
||||
"templateUrl": ""
|
||||
}, {
|
||||
"name": "cluster.monitoring.topology",
|
||||
"url": "/topology",
|
||||
"display": "Topologies",
|
||||
"controller": "",
|
||||
"templateUrl": ""
|
||||
}, {
|
||||
"name": "cluster.monitoring.alerts",
|
||||
"url": "/alerts",
|
||||
"display": "Alerts",
|
||||
"controller": "",
|
||||
"templateUrl": ""
|
||||
}, {
|
||||
"name": "cluster.monitoring.metrics",
|
||||
"url": "/metrics",
|
||||
"display": "Metrics",
|
||||
"controller": "",
|
||||
"templateUrl": ""
|
||||
}, {
|
||||
"name": "cluster.monitoring.charts",
|
||||
"url": "/charts",
|
||||
"display": "Dashboards",
|
||||
"controller": "",
|
||||
"templateUrl": ""
|
||||
}]
|
34
v2.5/data/timezone.json
Normal file
@ -0,0 +1,34 @@
|
||||
[{
|
||||
"value": "America/New_York",
|
||||
"timezone": "New York"
|
||||
}, {
|
||||
"value": "America/Chicago",
|
||||
"timezone": "Chicago"
|
||||
}, {
|
||||
"value": "America/Los_Angeles",
|
||||
"timezone": "Los Angeles"
|
||||
}, {
|
||||
"value": "Asia/Shanghai",
|
||||
"timezone": "Beijing, Guangdong, Shanghai"
|
||||
}, {
|
||||
"value": "Asia/Tokyo",
|
||||
"timezone": "Tokyo"
|
||||
}, {
|
||||
"value": "Europe/Paris",
|
||||
"timezone": "Paris"
|
||||
}, {
|
||||
"value": "Europe/London",
|
||||
"timezone": "London"
|
||||
}, {
|
||||
"value": "Europe/Moscow",
|
||||
"timezone": "Moscow"
|
||||
}, {
|
||||
"value": "Europe/Rome",
|
||||
"timezone": "Rome"
|
||||
}, {
|
||||
"value": "Europe/Madrid",
|
||||
"timezone": "Madrid"
|
||||
}, {
|
||||
"value": "Europe/Berlin",
|
||||
"timezone": "Berlin"
|
||||
}]
|
121
v2.5/data/wizard_steps.json
Normal file
@ -0,0 +1,121 @@
|
||||
{
|
||||
"os_and_ts": [{
|
||||
"id": 1,
|
||||
"name": "sv_selection",
|
||||
"title": "Server Selection",
|
||||
"state": "active",
|
||||
"template": "src/app/partials/server_selection.tpl.html",
|
||||
"description": "Select the servers you want to use for your target system(s)"
|
||||
}, {
|
||||
"id": 2,
|
||||
"name": "os_global",
|
||||
"title": "OS Global Config",
|
||||
"state": "",
|
||||
"template": "src/app/partials/global.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 3,
|
||||
"name": "network",
|
||||
"title": "Network",
|
||||
"state": "",
|
||||
"template": "src/app/partials/network.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 4,
|
||||
"name": "partition",
|
||||
"title": "Partition",
|
||||
"state": "",
|
||||
"template": "src/app/partials/partition.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 5,
|
||||
"name": "package_config",
|
||||
"title": "Target System Config",
|
||||
"state": "",
|
||||
"template": "src/app/partials/package_config.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 6,
|
||||
"name": "role_assign",
|
||||
"title": "Role Assignment",
|
||||
"state": "",
|
||||
"template": "src/app/partials/role_assignment.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 7,
|
||||
"name": "network_mapping",
|
||||
"title": "Network Mapping",
|
||||
"state": "",
|
||||
"template": "src/app/partials/network_mapping.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 8,
|
||||
"name": "review",
|
||||
"title": "Review",
|
||||
"state": "",
|
||||
"template": "src/app/partials/review.tpl.html",
|
||||
"description": "Click a section title to navigate back to that page."
|
||||
}],
|
||||
"os": [{
|
||||
"id": 1,
|
||||
"name": "sv_selection",
|
||||
"title": "Server Selection",
|
||||
"state": "active",
|
||||
"template": "src/app/partials/server_selection.tpl.html",
|
||||
"description": "Select the servers you want to use for your targer system(s)"
|
||||
}, {
|
||||
"id": 2,
|
||||
"name": "os_global",
|
||||
"title": "OS Global Config",
|
||||
"state": "",
|
||||
"template": "src/app/partials/global.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 3,
|
||||
"name": "network",
|
||||
"title": "Network",
|
||||
"state": "",
|
||||
"template": "src/app/partials/network.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 4,
|
||||
"name": "partition",
|
||||
"title": "Partition",
|
||||
"state": "",
|
||||
"template": "src/app/partials/partition.tpl.html",
|
||||
"description": ""
|
||||
}, {
|
||||
"id": 5,
|
||||
"name": "review",
|
||||
"title": "Review",
|
||||
"state": "",
|
||||
"template": "src/app/partials/review.tpl.html",
|
||||
"description": "Click a section title to navigate back to that page."
|
||||
}],
|
||||
"ts": [{
|
||||
"id": 1,
|
||||
"title": "Server Selection",
|
||||
"state": "active",
|
||||
"template": "templates/server_selection.html"
|
||||
}, {
|
||||
"id": 2,
|
||||
"title": "Security",
|
||||
"state": "",
|
||||
"template": "templates/security.html"
|
||||
}, {
|
||||
"id": 3,
|
||||
"title": "Role Assignment",
|
||||
"state": "",
|
||||
"template": "templates/role_assignment.html"
|
||||
}, {
|
||||
"id": 4,
|
||||
"title": "Network Mapping",
|
||||
"state": "",
|
||||
"template": "templates/network_mapping.html"
|
||||
}, {
|
||||
"id": 5,
|
||||
"title": "Review",
|
||||
"state": "",
|
||||
"template": "templates/review.html"
|
||||
}]
|
||||
}
|
42
v2.5/index.html
Normal file
@ -0,0 +1,42 @@
|
||||
<!doctype html>
|
||||
<html11>
|
||||
|
||||
<head>
|
||||
<title>Compass</title>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0" name="viewport">
|
||||
<link rel="stylesheet" type="text/css" href="vendor/bootstrap/css/bootstrap.css">
|
||||
<link rel="stylesheet" type="text/css" href="vendor/font-awesome/css/font-awesome.min.css" />
|
||||
<link rel="stylesheet" type="text/css" href="vendor/nvd3/nv.d3.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="vendor/angular-ui-tree/angular-ui-tree.min.css">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="assets/css/compass.min.css">
|
||||
<!-- <link rel="stylesheet" type="text/css" href="assets/css/ace.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="assets/css/ace-skins.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="assets/css/ace-fonts.css" />
|
||||
<link rel="stylesheet" type="text/css" href="assets/css/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="assets/css/chart.css">
|
||||
<link rel="stylesheet" type="text/css" href="assets/css/chosen.css">
|
||||
<link rel="stylesheet" type="text/css" href="assets/css/shelf.css"> -->
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="vendor/angular-daterangepicker/daterangepicker-bs3.css">
|
||||
|
||||
<script data-main="src/main.js" src="vendor/require.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body ng-controller="appController">
|
||||
<div ng-if="isAuthenticated">
|
||||
<div ng-controller="topnavCtrl">
|
||||
<div ng-include="'src/app/partials/topnav.tpl.html'"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-container no-skin">
|
||||
|
||||
<div ui-view></div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
23
v2.5/package.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "compass-web",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"coffee-script": "^1.8.0",
|
||||
"grunt": "^0.4.5",
|
||||
"grunt-coffeelint": "0.0.13",
|
||||
"grunt-contrib-clean": "^0.6.0",
|
||||
"grunt-contrib-coffee": "^0.12.0",
|
||||
"grunt-contrib-copy": "^0.7.0",
|
||||
"grunt-contrib-cssmin": "^0.12.1",
|
||||
"grunt-contrib-htmlmin": "^0.4.0",
|
||||
"grunt-contrib-uglify": "^0.7.0",
|
||||
"grunt-contrib-watch": "^0.6.1"
|
||||
}
|
||||
}
|
168
v2.5/src/app/app.coffee
Executable file
@ -0,0 +1,168 @@
|
||||
define(['angular'
|
||||
'uiRouter'
|
||||
'angularTable'
|
||||
'uiBootstrap'
|
||||
'angularDragDrop'
|
||||
'app/controllers/all'
|
||||
'app/services/all'
|
||||
# 'app/server/appDev'
|
||||
'app/factory/all'
|
||||
'app/directives/all'
|
||||
],
|
||||
(ng)->
|
||||
'use strict'
|
||||
ng.module "compass",['ui.router'
|
||||
'ngTable'
|
||||
'ui.bootstrap'
|
||||
'ngDragDrop'
|
||||
'compass.controllers'
|
||||
'compass.services'
|
||||
'compass.factories'
|
||||
'compass.directives'
|
||||
# 'compassAppDev'
|
||||
]
|
||||
.config ['$stateProvider','$urlRouterProvider', '$httpProvider', ($stateProvider, $urlRouterProvider, $httpProvider) ->
|
||||
$stateProvider
|
||||
.state 'login',
|
||||
url:'/login'
|
||||
controller: 'loginCtrl'
|
||||
templateUrl:'src/app/partials/login.tpl.html'
|
||||
requireAuthenticated: false
|
||||
.state 'clusterList',
|
||||
url:'/clusterList'
|
||||
controller: 'clustersListCtrl'
|
||||
templateUrl:'src/app/partials/cluster-all.tpl.html'
|
||||
requireAuthenticated: true
|
||||
resolve:
|
||||
allClusterData: ['$q', 'clusterService', ($q, clusterService) ->
|
||||
deferred = $q.defer()
|
||||
clusterService.getClusters().success (data) ->
|
||||
deferred.resolve(data)
|
||||
return deferred.promise
|
||||
]
|
||||
.state 'wizard',
|
||||
url: '/wizard/{id}?config'
|
||||
controller: 'wizardCtrl'
|
||||
templateUrl: 'src/app/partials/wizard.tpl.html'
|
||||
requireAuthenticated: true
|
||||
resolve:
|
||||
clusterData: ['$stateParams', '$q', 'wizardService', ($stateParams, $q, wizardService) ->
|
||||
clusterId = $stateParams.id
|
||||
deferred = $q.defer()
|
||||
wizardService.getClusterById(clusterId).success (data) ->
|
||||
deferred.resolve(data)
|
||||
|
||||
return deferred.promise;
|
||||
]
|
||||
|
||||
machinesHostsData: ['$q', 'wizardService', ($q, wizardService) ->
|
||||
deferred = $q.defer()
|
||||
wizardService.getAllMachineHosts().success (data) ->
|
||||
deferred.resolve(data)
|
||||
|
||||
return deferred.promise
|
||||
]
|
||||
wizardStepsData: ['$q', 'wizardService', ($q, wizardService) -> # get the create-cluster-wizard steps
|
||||
deferred = $q.defer()
|
||||
wizardService.getWizardSteps().success((data) ->
|
||||
deferred.resolve(data)
|
||||
);
|
||||
return deferred.promise
|
||||
]
|
||||
clusterConfigData: ['$stateParams', '$q', 'wizardService', ($stateParams, $q, wizardService) ->
|
||||
clusterId = $stateParams.id
|
||||
deferred = $q.defer()
|
||||
wizardService.getClusterConfig(clusterId).success((data) ->
|
||||
deferred.resolve(data)
|
||||
)
|
||||
return deferred.promise
|
||||
]
|
||||
adaptersData: ['$q', 'wizardService', ($q, wizardService) ->
|
||||
deferred = $q.defer();
|
||||
wizardService.getAdapters().success((data) ->
|
||||
deferred.resolve(data);
|
||||
)
|
||||
return deferred.promise;
|
||||
]
|
||||
.state 'cluster',
|
||||
url: '/cluster/{id}'
|
||||
templateUrl: 'src/app/partials/cluster.tpl.html'
|
||||
requireAuthenticated: true
|
||||
resolve:
|
||||
clusterhostsData: ['$stateParams', '$q', 'clusterService', ($stateParams, $q, clusterService) ->
|
||||
clusterId = $stateParams.id
|
||||
deferred = $q.defer()
|
||||
clusterService.getClusterHosts(clusterId).success (data) ->
|
||||
deferred.resolve(data)
|
||||
return deferred.promise
|
||||
]
|
||||
.state 'cluster.overview',
|
||||
url: '/overview'
|
||||
controller: 'clusterProgressCtrl'
|
||||
templateUrl: 'src/app/partials/cluster-overview.tpl.html'
|
||||
requireAuthenticated: true
|
||||
.state 'cluster.config',
|
||||
url: '/config'
|
||||
controller: 'configurationCtrl'
|
||||
templateUrl: 'src/app/partials/cluster-config.tpl.html'
|
||||
requireAuthenticated: true
|
||||
.state 'cluster.config.security',
|
||||
url: '/security'
|
||||
templateUrl: 'src/app/partials/cluster-security.tpl.html'
|
||||
requireAuthenticated: true
|
||||
.state 'cluster.config.network',
|
||||
url: '/network'
|
||||
templateUrl: 'src/app/partials/cluster-network.tpl.html'
|
||||
requireAuthenticated: true
|
||||
.state 'cluster.config.partition',
|
||||
url: '/partition'
|
||||
templateUrl: 'src/app/partials/cluster-partition.tpl.html'
|
||||
requireAuthenticated: true
|
||||
.state 'cluster.config.roles',
|
||||
url: '/roles'
|
||||
templateUrl: 'src/app/partials/cluster-roles.tpl.html'
|
||||
requireAuthenticated: true
|
||||
.state 'serverList',
|
||||
url: '/serverlist'
|
||||
controller: 'serverCtrl'
|
||||
templateUrl: 'src/app/partials/server-list.tpl.html'
|
||||
requireAuthenticated: true
|
||||
resolve:
|
||||
machinesHostsData: ['$q', 'dataService', ($q, dataService) ->
|
||||
deferred = $q.defer()
|
||||
dataService.getAllMachineHosts().success (data) ->
|
||||
deferred.resolve(data)
|
||||
return deferred.promise
|
||||
]
|
||||
.state 'userSetting',
|
||||
url: '/userSetting'
|
||||
controller: 'userSettingCtrl'
|
||||
templateUrl: 'src/app/partials/user-setting.html'
|
||||
requireAuthenticated: true
|
||||
resolve:
|
||||
userSettingData:['$q', 'userService', ($q, userService) ->
|
||||
deferred = $q.defer()
|
||||
userService.getUserSetting().success (data) ->
|
||||
deferred.resolve(data)
|
||||
return deferred.promise
|
||||
]
|
||||
|
||||
userLogData:['$q', 'userService', ($q, userService) ->
|
||||
deferred = $q.defer()
|
||||
userService.getUserLog().success (data) ->
|
||||
deferred.resolve(data)
|
||||
return deferred.promise
|
||||
]
|
||||
$urlRouterProvider.otherwise('/clusterList')
|
||||
$httpProvider.interceptors.push('errorhandlingInterceptor')
|
||||
]
|
||||
.run ['$rootScope', '$state', 'userFactory', 'authService', ($rootScope, $state, userFactory, authService) ->
|
||||
$rootScope.$on "$stateChangeStart", (event, toState, toParams, fromState, fromParams) ->
|
||||
if toState.requireAuthenticated and !userFactory.getAuthenticationStatus()
|
||||
if authService.getCookie("isAuthenticated")
|
||||
userFactory.login()
|
||||
else
|
||||
$state.transitionTo("login")
|
||||
event.preventDefault()
|
||||
]
|
||||
)
|
10
v2.5/src/app/controllers/all.coffee
Executable file
@ -0,0 +1,10 @@
|
||||
define([
|
||||
'./appController'
|
||||
'./loginController'
|
||||
'./clusterController'
|
||||
'./wizardController'
|
||||
'./topnavController'
|
||||
'./serverController'
|
||||
'./modalControllers'
|
||||
'./userController'
|
||||
])
|
26
v2.5/src/app/controllers/appController.coffee
Normal file
@ -0,0 +1,26 @@
|
||||
define(['./baseController'], ()->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.controllers')
|
||||
.controller 'appController', ['$scope', '$state', 'authService', 'userFactory',
|
||||
($scope, $state, authService, userFactory) ->
|
||||
|
||||
$scope.isAuthenticated = false
|
||||
|
||||
$scope.$watch( ->
|
||||
return userFactory.isAuthenticated
|
||||
,(val) ->
|
||||
$scope.isAuthenticated = userFactory.isAuthenticated
|
||||
)
|
||||
|
||||
$scope.logout = ->
|
||||
authService.logout().success (data) ->
|
||||
authService.setCookies("isAuthenticated", false, -30)
|
||||
userFactory.logout()
|
||||
$state.transitionTo("login")
|
||||
|
||||
# $scope.$on "newClusters", (event, data) ->
|
||||
# $scope.$broadcast('newClusters', data)
|
||||
|
||||
]
|
||||
);
|
12
v2.5/src/app/controllers/baseController.coffee
Executable file
@ -0,0 +1,12 @@
|
||||
define(['angular'
|
||||
'uiRouter'
|
||||
'angularTable'
|
||||
'uiBootstrap'
|
||||
'angularDragDrop'
|
||||
'ngSpinner'
|
||||
'ngBsDaterangepicker'
|
||||
], (ng)->
|
||||
'use strict';
|
||||
|
||||
ng.module('compass.controllers', ['ui.router','ngTable','ui.bootstrap','ngDragDrop', 'angularSpinner', 'ngBootstrap']);
|
||||
);
|
94
v2.5/src/app/controllers/clusterController.coffee
Normal file
@ -0,0 +1,94 @@
|
||||
define(['./baseController'], ()->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.controllers')
|
||||
.controller 'clustersListCtrl', ['$scope', 'clusterService', '$state', '$filter', 'ngTableParams', '$modal', 'allClusterData',
|
||||
($scope, clusterService, $state, $filter, ngTableParams, $modal, allClusterData) ->
|
||||
$scope.state = $state
|
||||
clusterService.getClustersProgress(allClusterData)
|
||||
$scope.clusters = allClusterData
|
||||
data = $scope.clusters
|
||||
|
||||
$scope.tableParams = new ngTableParams({
|
||||
page: 1
|
||||
count: 10
|
||||
},
|
||||
{
|
||||
total: data.length
|
||||
getData: ($defer, params) ->
|
||||
orderedData = if params.sorting() then $filter('orderBy')(data, params.orderBy()) else data;
|
||||
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
|
||||
}
|
||||
)
|
||||
|
||||
$scope.goToCluster = (id, state) -> clusterService.goToCluster(id, state)
|
||||
]
|
||||
|
||||
.controller 'createClusterCtrl', ['$scope','clusterService','$modal',
|
||||
($scope, clusterService, $modal)->
|
||||
clusterService.getAdapters($scope)
|
||||
|
||||
$scope.open = () ->
|
||||
$scope.cluster = {}
|
||||
|
||||
modalInstance = $modal.open(
|
||||
templateUrl: 'src/app/partials/modalClusterCreate.tpl.html'
|
||||
controller: 'newClusterModalCtrl'
|
||||
resolve:
|
||||
allAdapters: ->
|
||||
return $scope.allAdapters
|
||||
cluster: ->
|
||||
return $scope.cluster
|
||||
)
|
||||
|
||||
modalInstance.result.then( (cluster)->
|
||||
$scope.cluster = cluster
|
||||
postClusterData =
|
||||
"name": cluster.name
|
||||
"adapter_id": cluster.adapter.id
|
||||
"os_id": cluster.os.id
|
||||
postClusterData.flavor_id = cluster.flavor.id if cluster.flavor
|
||||
clusterService.createCluster($scope, postClusterData)
|
||||
->
|
||||
console.log("dismiss")
|
||||
)
|
||||
]
|
||||
.controller 'newClusterModalCtrl', ['$scope', '$log','$modalInstance','allAdapters','cluster',
|
||||
($scope, $log, $modalInstance, allAdapters, cluster)->
|
||||
$scope.allAdapters = allAdapters
|
||||
$scope.cluster = cluster
|
||||
|
||||
$scope.updateSelectedAdapter = ->
|
||||
for adapter in $scope.allAdapters
|
||||
if adapter.id == $scope.cluster.adapter.id
|
||||
$scope.supported_oses = adapter.supported_oses
|
||||
$scope.flavors = adapter.flavors
|
||||
|
||||
$scope.cancel = ->
|
||||
$modalInstance.dismiss('cancel')
|
||||
|
||||
$scope.ok = ->
|
||||
$scope.result = 'ok'
|
||||
$modalInstance.close($scope.cluster)
|
||||
]
|
||||
.controller 'clusterProgressCtrl', ['$scope','clusterService', '$stateParams', 'clusterhostsData',
|
||||
($scope, clusterService, $stateParams, clusterhostsData) ->
|
||||
clusterService.clusterProgressInit($scope, clusterhostsData, $stateParams)
|
||||
clusterService.displayDataInTable($scope, $scope.hosts)
|
||||
|
||||
$scope.selectAllServers = (flag) ->
|
||||
if flag
|
||||
sv.selected = true for sv in $scope.hosts
|
||||
else
|
||||
sv.selected = false for sv in $scope.hosts
|
||||
]
|
||||
.controller 'configurationCtrl', ['$scope','clusterService','$modal', '$stateParams', 'clusterhostsData',
|
||||
($scope, clusterService, $modal, $stateParams, clusterhostsData) ->
|
||||
clusterService.configurationInit($scope, $stateParams, clusterhostsData)
|
||||
clusterService.displayDataInTable($scope, $scope.hosts)
|
||||
# clusterService.getClusterConfig(clusterId).success (data) ->
|
||||
# console.log(data)
|
||||
]
|
||||
|
||||
|
||||
)
|
20
v2.5/src/app/controllers/loginController.coffee
Normal file
@ -0,0 +1,20 @@
|
||||
define(['./baseController'], ()->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.controllers')
|
||||
.controller 'loginCtrl', ['$scope', '$state', 'authService', 'userFactory',
|
||||
($scope, $state, authService, userFactory) ->
|
||||
$scope.alerts = []
|
||||
$scope.login = ->
|
||||
credentials =
|
||||
"email": $scope.email
|
||||
"password": $scope.password
|
||||
"remember": Boolean($scope.remember)
|
||||
authService.login(credentials).success (data) ->
|
||||
authService.setCookies("isAuthenticated", true,0.0833,Boolean($scope.remember))
|
||||
userFactory.login()
|
||||
$state.transitionTo("clusterList")
|
||||
.error (response) ->
|
||||
$scope.alerts.push(response)
|
||||
]
|
||||
)
|
67
v2.5/src/app/controllers/modalControllers.coffee
Normal file
@ -0,0 +1,67 @@
|
||||
define(['./baseController'], ()->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.controllers')
|
||||
.controller 'modifySwitchModalCtrl', ['$scope','$modalInstance','wizardService', 'targetSwitch', ($scope, $modalInstance, wizardService, targetSwitch) ->
|
||||
$scope.targetSwitch = angular.copy(targetSwitch)
|
||||
$scope.ok = ->
|
||||
$scope.alerts = []
|
||||
updatedSwitch =
|
||||
ip : $scope.targetSwitch.ip
|
||||
filters: $scope.targetSwitch.filters
|
||||
credentials: $scope.targetSwitch.credentials
|
||||
wizardService.putSwitches(targetSwitch.id, updatedSwitch).success (data) ->
|
||||
$modalInstance.close(data)
|
||||
.error (response)->
|
||||
$scope.alerts[0] = response
|
||||
|
||||
$scope.cancel = ->
|
||||
$modalInstance.dismiss('cancel')
|
||||
]
|
||||
.controller 'addSubnetModalInstanceCtrl',['$scope','$modalInstance','wizardService','subnets',
|
||||
($scope, $modalInstance, wizardService, subnets) ->
|
||||
$scope.subnetworks = angular.copy(subnets)
|
||||
$scope.subnetAllValid = true
|
||||
|
||||
subnet['valid'] = true for subnet in $scope.subnetworks
|
||||
|
||||
if $scope.subnetworks.length is 0
|
||||
$scope.subnetworks.push({valid:false})
|
||||
|
||||
$scope.addSubnetwork = ->
|
||||
$scope.subnetworks.push({valid:false})
|
||||
wizardService.validateAllSubnets($scope)
|
||||
|
||||
$scope.removeSubnetwork = (index) ->
|
||||
wizardService.deleteSubnet($scope, index, $scope.subnetworks[index].id)
|
||||
wizardService.validateAllSubnets($scope)
|
||||
|
||||
$scope.subnet_change = (index, subnet) ->
|
||||
subnetRegExp = /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}(\/){1}([0-9]|[0-2][0-9]|3[0-2])$/
|
||||
$scope.subnetworks[index]['valid'] = subnetRegExp.test(subnet)
|
||||
wizardService.validateAllSubnets($scope)
|
||||
|
||||
$scope.ok = ->
|
||||
wizardService.subnetCommit($scope, $modalInstance)
|
||||
|
||||
$scope.cancel = ->
|
||||
$modalInstance.dismiss('cancel')
|
||||
]
|
||||
.controller 'errorMessageCtrl', ['$scope','$modalInstance','title', 'content', ($scope, $modalInstance, title, content) ->
|
||||
$scope.title = title
|
||||
$scope.content = content
|
||||
|
||||
$scope.cancel = ->
|
||||
$modalInstance.dismiss('cancel')
|
||||
]
|
||||
.controller 'userModalCtrl', ['$scope', '$modalInstance','newUser', ($scope, $modalInstance, newUser) ->
|
||||
$scope.newUser = newUser
|
||||
|
||||
$scope.ok = ->
|
||||
$scope.result = 'ok'
|
||||
$modalInstance.close($scope.newUser)
|
||||
|
||||
$scope.cancel = ->
|
||||
$modalInstance.dismiss('cancel')
|
||||
]
|
||||
);
|
30
v2.5/src/app/controllers/serverController.coffee
Normal file
@ -0,0 +1,30 @@
|
||||
define(['./baseController'], ()->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.controllers')
|
||||
.controller 'serverCtrl', [ '$scope', 'dataService', '$filter', 'machinesHostsData', 'wizardService',
|
||||
($scope, dataService, $filter, machinesHostsData, wizardService) ->
|
||||
$scope.hideunselected = ''
|
||||
$scope.search = {}
|
||||
$scope.allservers = machinesHostsData
|
||||
wizardService.getServerColumns().success (data) ->
|
||||
$scope.server_columns = data.machines_hosts
|
||||
|
||||
wizardService.displayDataInTable($scope, $scope.allservers)
|
||||
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
|
||||
$scope.hideUnselected = ->
|
||||
if $scope.hideunselected then $scope.search.selected = true else delete $scope.search.selected
|
||||
|
||||
$scope.ifPreSelect = (server) ->
|
||||
server.disable = false
|
||||
if server.clusters
|
||||
server.disabled = true if server.clusters.length > 0
|
||||
for svCluster in server.clusters
|
||||
if svCluster.id == $scope.cluster.id
|
||||
server.selected = true
|
||||
server.disabled = false
|
||||
wizardService.watchAndAddNewServers($scope)
|
||||
]
|
||||
)
|
17
v2.5/src/app/controllers/topnavController.coffee
Normal file
@ -0,0 +1,17 @@
|
||||
define(['./baseController'], ()->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.controllers')
|
||||
.controller 'topnavCtrl', [ '$scope', '$state', '$http', 'dataService', '$rootScope', 'wizardFactory'
|
||||
($scope, $state, $http, dataService, $rootScope, wizardFactory) ->
|
||||
dataService.getClusters().success (data) ->
|
||||
$scope.clusters = data
|
||||
|
||||
$rootScope.$on 'newClusters', (event, data) ->
|
||||
$scope.clusters = data
|
||||
|
||||
$scope.gotoCluster = (id) ->
|
||||
dataService.getClusterProgress(id).success (data) ->
|
||||
if data.state == "UNINITIALIZED" then $state.go("wizard",{"id":id, "config": "true"}) else $state.go("cluster.overview",{"id": id})
|
||||
]
|
||||
)
|
47
v2.5/src/app/controllers/userController.coffee
Normal file
@ -0,0 +1,47 @@
|
||||
define(['./baseController'], ()->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.controllers')
|
||||
.controller 'userSettingCtrl', ['$scope', '$state', '$filter','$modal','clusterService','userService', 'userSettingData', 'userLogData'
|
||||
($scope, $state, $filter, $modal, clusterService, userService, userSettingData, userLogData) ->
|
||||
$scope.userSetting = userSettingData
|
||||
clusterService.displayDataInTable($scope, userSettingData)
|
||||
clusterService.displayDataInTable($scope, userLogData, 'userParams')
|
||||
$scope.newUser = {}
|
||||
|
||||
$scope.edit = ->
|
||||
alert("Edit User?")
|
||||
|
||||
$scope.delete = ->
|
||||
alert("Delete User?")
|
||||
|
||||
$scope.open = (size) ->
|
||||
modalInstance = $modal.open(
|
||||
templateUrl: 'src/app/partials/modalCreateUserSetting.html'
|
||||
controller: 'userModalCtrl'
|
||||
resolve:
|
||||
newUser: ->
|
||||
return $scope.newUser
|
||||
)
|
||||
modalInstance.result.then( (newUser) ->
|
||||
$scope.newUser = newUser
|
||||
userService.createUser(newUser).success (data, status) ->
|
||||
$scope.userSetting.push(newUser)
|
||||
$scope.tableParams.reload()
|
||||
|
||||
$scope.newUser = {}
|
||||
, ->
|
||||
console.log("dismiss")
|
||||
)
|
||||
]
|
||||
.filter 'timeStampFilter', ->
|
||||
return (items, dateRange) ->
|
||||
if items != undefined
|
||||
filtered = []
|
||||
startDate = dateRange.startDate
|
||||
endDate = dateRange.endDate
|
||||
for item in items
|
||||
standardTime = moment(item.timestamp)
|
||||
filtered.push(item) if moment(standardTime).isAfter(startDate) and moment(standardTime).isBefore(endDate)
|
||||
return filtered
|
||||
)
|
271
v2.5/src/app/controllers/wizardController.coffee
Normal file
@ -0,0 +1,271 @@
|
||||
define(['./baseController'], ()->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.controllers')
|
||||
.controller 'wizardCtrl',['$scope', 'wizardService', '$state', '$stateParams', 'clusterData', 'adaptersData', 'machinesHostsData', 'wizardStepsData', 'clusterConfigData',
|
||||
($scope, wizardService, $state, $stateParams, clusterData, adaptersData, machinesHostsData, wizardStepsData, clusterConfigData) ->
|
||||
|
||||
wizardService.wizardInit($scope, $stateParams.id, clusterData, adaptersData, wizardStepsData, machinesHostsData, clusterConfigData)
|
||||
|
||||
$scope.skipForward = (nextStepId) ->
|
||||
console.log("next", nextStepId)
|
||||
if $scope.currentStep != nextStepId
|
||||
$scope.pendingStep = nextStepId
|
||||
wizardService.triggerCommitByStepById($scope,$scope.currentStep ,nextStepId)
|
||||
|
||||
$scope.stepControl = (goToPrevious) ->
|
||||
wizardService.stepControl($scope, goToPrevious)
|
||||
|
||||
$scope.stepForward = ->
|
||||
$scope.pendingStep = $scope.currentStep + 1
|
||||
wizardService.triggerCommitByStepById($scope,$scope.currentStep ,$scope.pendingStep)
|
||||
|
||||
$scope.stepBackward = ->
|
||||
$scope.pendingStep = $scope.currentStep - 1
|
||||
wizardService.triggerCommitByStepById($scope,$scope.currentStep ,$scope.pendingStep)
|
||||
|
||||
$scope.deploy = ->
|
||||
wizardService.deploy($scope)
|
||||
|
||||
$scope.$on 'loading', (event, data) ->
|
||||
$scope.loading = data
|
||||
|
||||
wizardService.setSubnetworks()
|
||||
|
||||
wizardService.watchingCommittedStatus($scope)
|
||||
]
|
||||
.controller 'svSelectCtrl', ['$scope', 'wizardService', '$filter', 'ngTableParams'
|
||||
($scope, wizardService, $filter, ngTableParams) ->
|
||||
$scope.hideunselected = ''
|
||||
$scope.search = {}
|
||||
$scope.cluster = wizardService.getClusterInfo()
|
||||
$scope.allservers = wizardService.getAllMachinesHost()
|
||||
wizardService.getServerColumns().success (data) ->
|
||||
$scope.server_columns = data.showall
|
||||
|
||||
wizardService.displayDataInTable($scope, $scope.allservers)
|
||||
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
|
||||
$scope.hideUnselected = ->
|
||||
if $scope.hideunselected then $scope.search.selected = true else delete $scope.search.selected
|
||||
|
||||
$scope.ifPreSelect = (server) ->
|
||||
server.disable = false
|
||||
if server.clusters
|
||||
server.disabled = true if server.clusters.length > 0
|
||||
for svCluster in server.clusters
|
||||
if svCluster.id == $scope.cluster.id
|
||||
server.selected = true
|
||||
server.disabled = false
|
||||
$scope.selectAllServers = (flag) ->
|
||||
if flag
|
||||
sv.selected = true for sv in $scope.allservers when !sv.disabled
|
||||
else
|
||||
sv.selected = false for sv in $scope.allservers
|
||||
|
||||
#watch and add newly found servers to allservers array
|
||||
wizardService.watchAndAddNewServers($scope)
|
||||
|
||||
$scope.commit = (sendRequest) ->
|
||||
wizardService.svSelectonCommit($scope)
|
||||
]
|
||||
.controller 'globalCtrl', ['$scope', 'wizardService', '$q',
|
||||
($scope, wizardService, $q) ->
|
||||
|
||||
wizardService.globalConfigInit($scope)
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
|
||||
$scope.addValue = (key) ->
|
||||
$scope.general[key].push("")
|
||||
|
||||
$scope.commit = (sendRequest) ->
|
||||
wizardService.globalCommit($scope,sendRequest)
|
||||
]
|
||||
.controller 'networkCtrl', ['$scope', 'wizardService', 'ngTableParams', '$filter', '$modal',
|
||||
($scope, wizardService, ngTableParams, $filter, $modal) ->
|
||||
|
||||
wizardService.networkInit($scope)
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
|
||||
$scope.autoFillManage = ->
|
||||
$scope.autoFill = !$scope.autoFill;
|
||||
if $scope.autoFill then $scope.autoFillButtonDisplay = "Disable Autofill" else $scope.autoFillButtonDisplay = "Enable Autofill"
|
||||
|
||||
$scope.autofill = (alertFade) ->
|
||||
for key, value of $scope.interfaces
|
||||
ip_start = $("#" + key + "-ipstart").val()
|
||||
interval = parseInt($("#" + key + "-increase-num").val())
|
||||
wizardService.fillIPBySequence($scope, ip_start, interval, key)
|
||||
|
||||
hostname_rule = $("#hostname-rule").val()
|
||||
wizardService.fillHostname($scope, hostname_rule)
|
||||
|
||||
$scope.addInterface = (newInterface) ->
|
||||
wizardService.addInterface($scope, newInterface)
|
||||
|
||||
$scope.deleteInterface = (delInterface) ->
|
||||
delete $scope.interfaces[delInterface]
|
||||
delete sv.networks[delInterface] for sv in $scope.servers
|
||||
|
||||
$scope.openAddSubnetModal = ->
|
||||
modalInstance = $modal.open(
|
||||
templateUrl: "src/app/partials/modalAddSubnet.tpl.html"
|
||||
controller: "addSubnetModalInstanceCtrl"
|
||||
resolve:
|
||||
subnets: ->
|
||||
return $scope.subnetworks
|
||||
)
|
||||
|
||||
modalInstance.result.then( (subnets) ->
|
||||
$scope.subnetworks = subnets
|
||||
wizardService.setSubnetworks($scope.subnetworks)
|
||||
->
|
||||
console.log("modal dismissed")
|
||||
|
||||
)
|
||||
|
||||
$scope.commit = (sendRequest) ->
|
||||
wizardService.networkCommit($scope, sendRequest)
|
||||
|
||||
# display data in the table
|
||||
wizardService.getClusterHosts($scope.cluster.id).success (data) ->
|
||||
$scope.servers = data
|
||||
if $scope.servers[0].networks and Object.keys($scope.servers[0].networks).length != 0
|
||||
$scope.interfaces = $scope.servers[0].networks
|
||||
wizardService.setInterfaces($scope.interfaces)
|
||||
|
||||
wizardService.displayDataInTable($scope, $scope.servers)
|
||||
]
|
||||
.controller 'partitionCtrl', ['$scope', 'wizardService',
|
||||
($scope, wizardService) ->
|
||||
|
||||
wizardService.partitionInit($scope)
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
|
||||
$scope.addPartition = ->
|
||||
wizardService.addPartition($scope)
|
||||
|
||||
$scope.deletePartition = (index) ->
|
||||
wizardService.deletePartition($scope, index)
|
||||
|
||||
$scope.commit = (sendRequest) ->
|
||||
wizardService.partitionCommit($scope, sendRequest)
|
||||
|
||||
$scope.mount_point_change = (index, name) ->
|
||||
wizardService.mount_point_change($scope, index, name)
|
||||
|
||||
|
||||
$scope.$watch('partitionInforArray', ->
|
||||
$scope.partitionarray = []
|
||||
total = 0
|
||||
for partitionInfo in $scope.partitionInforArray
|
||||
total += parseFloat(partitionInfo.percentage)
|
||||
$scope.partitionarray.push(
|
||||
"name": partitionInfo.name
|
||||
"number": partitionInfo.percentage
|
||||
)
|
||||
$scope.partitionarray.push(
|
||||
"name": "others"
|
||||
"number": 100 - total
|
||||
)
|
||||
,true
|
||||
)
|
||||
]
|
||||
.controller 'packageConfigCtrl', ['$scope', 'wizardService',
|
||||
($scope, wizardService) ->
|
||||
wizardService.targetSystemConfigInit($scope)
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
$scope.mSave = ->
|
||||
$scope.originalMangementData = angular.copy($scope.console_credentials)
|
||||
$scope.sSave = ->
|
||||
$scope.originalServiceData = angular.copy($scope.service_credentials)
|
||||
|
||||
$scope.mSave()
|
||||
$scope.sSave()
|
||||
|
||||
console.log($scope.console_credentials)
|
||||
$scope.mEdit = (index) ->
|
||||
for em, i in $scope.editMgntMode
|
||||
if i != index
|
||||
$scope.editMgntMode[i] = false
|
||||
else
|
||||
$scope.editMgntMode[i] = true
|
||||
|
||||
|
||||
|
||||
$scope.mReset()
|
||||
$scope.mReset = ->
|
||||
$scope.console_credentials = angular.copy($scope.originalMangementData)
|
||||
|
||||
$scope.commit = (sendRequest) ->
|
||||
wizardService.targetSystemConfigCommit($scope, sendRequest)
|
||||
]
|
||||
.controller 'roleAssignCtrl', ['$scope', 'wizardService', '$filter', 'ngTableParams',
|
||||
($scope, wizardService, $filter, ngTableParams) ->
|
||||
wizardService.roleAssignInit($scope)
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
|
||||
$scope.selectAllServers = (flag) ->
|
||||
if flag
|
||||
sv.checked = true for sv in $scope.servers
|
||||
else
|
||||
sv.checked = false for sv in $scope.servers
|
||||
|
||||
$scope.assignRole = (role) ->
|
||||
wizardService.assignRole($scope, role)
|
||||
|
||||
$scope.removeRole = (server, role) ->
|
||||
|
||||
serverIndex = $scope.servers.indexOf(server)
|
||||
roleIndex = $scope.servers[serverIndex].roles.indexOf(role)
|
||||
$scope.servers[serverIndex].roles.splice(roleIndex, 1)
|
||||
$scope.existingRoles[serverIndex].splice(role_key, 1, role_key) for role_value, role_key in $scope.roles when role.name == $scope.roles[role_key].name
|
||||
$scope.servers[serverIndex].dropChannel = $scope.existingRoles[serverIndex].toString()
|
||||
|
||||
$scope.onDrop = ($event, server) ->
|
||||
$scope.dragKey = $scope.servers.indexOf(server)
|
||||
|
||||
$scope.dropSuccessHandler = ($event, role_value, key) ->
|
||||
roleExist = wizardService.checkRoleExist($scope.servers[$scope.dragKey].roles, role_value)
|
||||
if !roleExist
|
||||
$scope.servers[$scope.dragKey].roles.push(role_value)
|
||||
else
|
||||
console.log("role exists")
|
||||
wizardService.checkExistRolesDrag($scope)
|
||||
|
||||
$scope.autoAssignRoles = ->
|
||||
wizardService.autoAssignRoles($scope)
|
||||
|
||||
$scope.commit = (sendRequest)->
|
||||
wizardService.roleAssignCommit($scope, sendRequest)
|
||||
|
||||
|
||||
wizardService.displayDataInTable($scope, $scope.servers)
|
||||
]
|
||||
.controller 'networkMappingCtrl', ['$scope', 'wizardService',
|
||||
($scope, wizardService) ->
|
||||
wizardService.networkMappingInit($scope)
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
|
||||
$scope.onDrop = ($event, key) ->
|
||||
$scope.pendingInterface = key
|
||||
|
||||
$scope.dropSuccessHandler = ($event, key, dict) ->
|
||||
dict[key].mapping_interface = $scope.pendingInterface
|
||||
|
||||
$scope.commit = (sendRequest) ->
|
||||
wizardService.networkMappingCommit($scope, sendRequest)
|
||||
]
|
||||
.controller 'reviewCtrl', ['$scope', 'wizardService', 'ngTableParams', '$filter',
|
||||
($scope, wizardService, ngTableParams, $filter) ->
|
||||
wizardService.reviewInit($scope)
|
||||
wizardService.watchingTriggeredStep($scope)
|
||||
|
||||
$scope.commit = (sendRequest) ->
|
||||
wizardService.reviewCommit(sendRequest)
|
||||
|
||||
wizardService.displayDataInTable($scope, $scope.servers)
|
||||
]
|
||||
|
||||
)
|
7
v2.5/src/app/directives/all.coffee
Executable file
@ -0,0 +1,7 @@
|
||||
define([
|
||||
'./findServerDirective'
|
||||
'./clusterNavDirective'
|
||||
'./pieChartDirective'
|
||||
'./enterDirective'
|
||||
'./hostprogressbarDirective'
|
||||
])
|
7
v2.5/src/app/directives/baseDirective.coffee
Executable file
@ -0,0 +1,7 @@
|
||||
define(['angular'
|
||||
'd3'
|
||||
], (ng)->
|
||||
'use strict';
|
||||
|
||||
ng.module('compass.directives', []);
|
||||
);
|
23
v2.5/src/app/directives/clusterNavDirective.coffee
Normal file
@ -0,0 +1,23 @@
|
||||
define(['./baseDirective'], ->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.directives')
|
||||
.directive 'clusternav', ['$timeout',
|
||||
($timeout) ->
|
||||
return {
|
||||
restrict: 'EAC'
|
||||
templateUrl: "src/app/partials/cluster-nav.tpl.html"
|
||||
# link: (scope, element, attrs) ->
|
||||
# console.log("inside")
|
||||
# $timeout( ->
|
||||
# $('.nav-list ul a').on 'click touchend', (e) ->
|
||||
# el = $(this)
|
||||
# link = el.attr('href')
|
||||
# window.location = link
|
||||
# ,0)
|
||||
|
||||
# element.bind '$destroy', ->
|
||||
# $('.nav-list ul a').off('click touchend')
|
||||
}
|
||||
]
|
||||
)
|
10
v2.5/src/app/directives/enterDirective.coffee
Normal file
@ -0,0 +1,10 @@
|
||||
define ['./baseDirective'], ->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.directives')
|
||||
.directive 'ngEnter', ->
|
||||
return (scope, element, attrs) ->
|
||||
element.bind "keydown keypress", (event) ->
|
||||
if event.which is 13
|
||||
scope.$eval(attrs.ngEnter) if scope.email.trim() != "" and scope.password.trim() != ""
|
||||
event.preventDefault()
|
115
v2.5/src/app/directives/findServerDirective.coffee
Normal file
@ -0,0 +1,115 @@
|
||||
define(['./baseDirective'], ->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.directives')
|
||||
.directive 'findservers', ['wizardService','$modal', (wizardService, $modal) ->
|
||||
return {
|
||||
restrict: 'E'
|
||||
scope: {
|
||||
|
||||
newFoundServers: '=results'
|
||||
}
|
||||
templateUrl: "src/app/partials/find-new-servers.tpl.html"
|
||||
|
||||
link: (scope, element, attrs) ->
|
||||
scope.switches = []
|
||||
scope.newFoundServers = []
|
||||
scope.isFindingNewServers = false
|
||||
wizardService.getSwitches().success (data) ->
|
||||
scope.switches = data
|
||||
|
||||
scope.findServers = ->
|
||||
swSelection = false
|
||||
swSelection = true for sw in scope.switches when sw.selected
|
||||
triggerToFindServers = (sw) ->
|
||||
sw.result = ""
|
||||
sw.finished = false
|
||||
sw.polling = true
|
||||
|
||||
if !swSelection
|
||||
alert("Please select at least one switch") if !swSelection
|
||||
else
|
||||
scope.isFindingNewServers = true
|
||||
scope.newfoundServers = []
|
||||
triggerToFindServers sw for sw in scope.switches when sw.selected
|
||||
|
||||
scope.$watch('switches', (val) ->
|
||||
totalResultReady = true
|
||||
if scope.isFindingNewServers
|
||||
for sw in scope.switches
|
||||
if sw.selected and !sw.finished
|
||||
if sw.result is "success"
|
||||
scope.newFoundServers = scope.newFoundServers.concat(angular.copy(sw.machines))
|
||||
sw.finished = true
|
||||
else if sw.result == "error"
|
||||
sw.finished = true
|
||||
else
|
||||
totalResultReady = false
|
||||
scope.isFindingNewServers = false if totalResultReady
|
||||
,true)
|
||||
|
||||
scope.newswitch = {}
|
||||
scope.newswitch.credentials = {}
|
||||
scope.alerts = []
|
||||
|
||||
scope.addSwitch = ->
|
||||
wizardService.postSwitches(scope.newswitch).success (switchData) ->
|
||||
scope.switches.push(switchData)
|
||||
|
||||
scope.modifySwitchModal = (index) ->
|
||||
modalInstance = $modal.open(
|
||||
templateUrl: 'src/app/partials/modalModifySwitch.html'
|
||||
controller: 'modifySwitchModalCtrl'
|
||||
resolve:
|
||||
targetSwitch: ->
|
||||
return scope.switches[index]
|
||||
)
|
||||
modalInstance.result.then (targetSwitch) ->
|
||||
scope.switches[index] = targetSwitch
|
||||
, ->
|
||||
console.log("Modal dismissed")
|
||||
}
|
||||
]
|
||||
.directive 'switchrow', ['wizardService', '$timeout', (wizardService, $timeout) ->
|
||||
return {
|
||||
restrict: 'A'
|
||||
scope:
|
||||
polling: '='
|
||||
switchinfo: '='
|
||||
result: '='
|
||||
machines: '='
|
||||
link: (scope, element, attrs) ->
|
||||
checkSwitchCount = 0
|
||||
fireTimer = true
|
||||
getMachines = ->
|
||||
wizardService.getSwitchMachines(scope.switchinfo.id).success (data) ->
|
||||
scope.polling = false
|
||||
scope.result = "success"
|
||||
scope.machines = data
|
||||
.error (data)->
|
||||
scope.polling = false
|
||||
scope.result = "error"
|
||||
|
||||
checkSwitchState = ->
|
||||
checkSwitchCount++
|
||||
wizardService.getSwitchById(scope.switchinfo.id).success (data) ->
|
||||
if data.state is "under_monitoring"
|
||||
getMachines()
|
||||
else if data.state is "initialized" or data.state is "repolling"
|
||||
if fireTimer and checkSwitchCount < 15
|
||||
checkSwitchTimer = $timeout(checkSwitchState, 2000)
|
||||
else
|
||||
scope.polling = false
|
||||
scope.result = "error"
|
||||
|
||||
|
||||
scope.$watch 'polling', (newval, oldval) ->
|
||||
if newval is not oldval
|
||||
if newval is true
|
||||
checkSwitchCount = 0
|
||||
wizardService.postSwitchAction(scope.switchinfo.id, {"find_machines": null}).success (data) ->
|
||||
checkSwitchState()
|
||||
|
||||
}
|
||||
]
|
||||
)
|
45
v2.5/src/app/directives/hostprogressbarDirective.coffee
Normal file
@ -0,0 +1,45 @@
|
||||
define ['./baseDirective'], ->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.directives')
|
||||
.directive 'hostprogressbar', ['dataService','$timeout', (dataService, $timeout) ->
|
||||
return {
|
||||
restrict: 'E'
|
||||
scope:
|
||||
hostid: '='
|
||||
clusterid: '='
|
||||
clusterstate: '='
|
||||
progressdata: '@'
|
||||
templateUrl: "src/app/partials/progressbar.tpl.html"
|
||||
link: (scope, element, attrs) ->
|
||||
hostId = scope.hostid
|
||||
clusterId = scope.clusterid
|
||||
clusterState = scope.clusterstate
|
||||
progress = 0
|
||||
progressTimer = null
|
||||
fireTimer = true
|
||||
scope.progressdata = 0
|
||||
scope.progressSeverity = "INFO"
|
||||
num = 0
|
||||
|
||||
getProgress = ->
|
||||
dataService.getClusterHostProgress(clusterId, hostId).success (progressData)->
|
||||
progress = parseInt(eval(progressData.percentage * 100))
|
||||
scope.progressdata = progress
|
||||
if fireTimer and progress < 100 and num != 1
|
||||
progressTimer = $timeout(getProgress, 5000)
|
||||
scope.message = progressData.message
|
||||
scope.progressSeverity = progressData.severity
|
||||
|
||||
scope.$watch 'clusterstate', (val) ->
|
||||
if clusterState != "SUCCESSFUL" and clusterState != "ERROR"
|
||||
$timeout(getProgress, 1000)
|
||||
else
|
||||
num = 1
|
||||
getProgress()
|
||||
|
||||
element.bind '$destroy', ->
|
||||
fireTimer = false
|
||||
$timeout.cancel(progressTimer)
|
||||
}
|
||||
]
|
57
v2.5/src/app/directives/pieChartDirective.coffee
Normal file
@ -0,0 +1,57 @@
|
||||
define(['./baseDirective'], ->
|
||||
'use strict';
|
||||
|
||||
angular.module('compass.directives')
|
||||
.directive 'piechart', () ->
|
||||
return {
|
||||
restrict: 'E'
|
||||
scope:
|
||||
piedata: '='
|
||||
link: (scope, element, attrs) ->
|
||||
piedata = scope.piedata
|
||||
width = 300
|
||||
height = 250
|
||||
radius = Math.min(width, height) / 2
|
||||
color = d3.scale.ordinal().range ["#fee188", "#cb6fd7", "#9abc32", "#f79263", "#6fb3e0", "#d53f40", "#1F77B4"]
|
||||
svg = d3.select("piechart").append("svg")
|
||||
.attr("width", width)
|
||||
.attr("height",height)
|
||||
.append("g")
|
||||
.attr("transform","translate(" + width / 2 + "," + height / 2 + ")")
|
||||
arc = d3.svg.arc().outerRadius(radius - 10).innerRadius(0)
|
||||
|
||||
scope.$watch('piedata', (val) ->
|
||||
piedata = val
|
||||
svg.selectAll('g.arc').remove()
|
||||
pie = d3.layout.pie()
|
||||
.sort(null)
|
||||
.value (d) ->
|
||||
return d.number
|
||||
for d in piedata
|
||||
d.number = +d.number
|
||||
|
||||
g = svg.selectAll(".arc")
|
||||
.data(pie(piedata))
|
||||
.enter().append("g")
|
||||
.attr("class", "arc")
|
||||
|
||||
g.append("path")
|
||||
.attr("d", arc)
|
||||
.attr('stroke', '#fff')
|
||||
.attr('stroke-width', '3')
|
||||
.style("fill", (d) ->
|
||||
return color(d.data.name)
|
||||
)
|
||||
g.append("text")
|
||||
.attr("transform", (d) ->
|
||||
return "translate(" + arc.centroid(d) + ")"
|
||||
)
|
||||
.attr("dy", ".35em")
|
||||
.style("text-anchor", "middle")
|
||||
.text (d) ->
|
||||
return d.data.name
|
||||
,true
|
||||
|
||||
)
|
||||
}
|
||||
)
|
5
v2.5/src/app/factory/all.coffee
Executable file
@ -0,0 +1,5 @@
|
||||
define([
|
||||
'./wizardFactory'
|
||||
'./userFactory'
|
||||
'./errorHandlingFactory'
|
||||
])
|
6
v2.5/src/app/factory/baseFactory.coffee
Executable file
@ -0,0 +1,6 @@
|
||||
define(['angular'
|
||||
], (ng)->
|
||||
'use strict';
|
||||
|
||||
ng.module('compass.factories', [])
|
||||
);
|
19
v2.5/src/app/factory/errorHandlingFactory.coffee
Normal file
@ -0,0 +1,19 @@
|
||||
define(['./baseFactory'], ($q, $location, $injector) ->
|
||||
'use strict'
|
||||
angular.module('compass.factories').factory('errorhandlingInterceptor',[ '$q', '$location','$injector', ($q, $location, $injector) ->
|
||||
return {
|
||||
response: (response) ->
|
||||
return response
|
||||
responseError: (rejection) ->
|
||||
if rejection.status is 401
|
||||
console.log("Response Error 401", rejection)
|
||||
$location.path('/login')
|
||||
else
|
||||
if rejection.config.url and rejection.config.url != "/api/users/login"
|
||||
wizardService = $injector.get('wizardService')
|
||||
$modal = $injector.get('$modal')
|
||||
wizardService.showErrorMessage($modal, "ERROR " + rejection.status, rejection.data)
|
||||
return $q.reject(rejection)
|
||||
}
|
||||
])
|
||||
)
|
19
v2.5/src/app/factory/userFactory.coffee
Normal file
@ -0,0 +1,19 @@
|
||||
define(['./baseFactory'], () ->
|
||||
'use strict'
|
||||
class UserFactory
|
||||
constructor: () ->
|
||||
# @username = ""
|
||||
# @password = ""
|
||||
@isAuthenticated = false
|
||||
|
||||
login: ->
|
||||
@isAuthenticated = true
|
||||
|
||||
logout: ->
|
||||
@isAuthenticated = false
|
||||
|
||||
getAuthenticationStatus: ->
|
||||
return @isAuthenticated
|
||||
|
||||
angular.module('compass.factories').factory('userFactory',[ () -> new UserFactory()])
|
||||
)
|
133
v2.5/src/app/factory/wizardFactory.coffee
Normal file
@ -0,0 +1,133 @@
|
||||
define(['./baseFactory'], () ->
|
||||
'use strict'
|
||||
class WizardFactory
|
||||
constructor: () ->
|
||||
@cluster = {}
|
||||
@steps = []
|
||||
@commit = {}
|
||||
@servers = []
|
||||
@allServers = []
|
||||
@generalConfig = {}
|
||||
@subnetworks = []
|
||||
@routingtable = []
|
||||
@generalConfig = {}
|
||||
@interfaces = {}
|
||||
@partition = {}
|
||||
@server_credentials = {}
|
||||
@service_credentials = {}
|
||||
@console_credentials = {}
|
||||
@network_mapping = {}
|
||||
@ceph_config = {}
|
||||
|
||||
clean: ->
|
||||
@cluster = {}
|
||||
@steps = []
|
||||
@commit = {}
|
||||
@servers = []
|
||||
@allServers = []
|
||||
@generalConfig = {}
|
||||
@subnetworks = []
|
||||
@routingtable = []
|
||||
@generalConfig = {}
|
||||
@interfaces = {}
|
||||
@partition = {}
|
||||
@server_credentials = {}
|
||||
@service_credentials = {}
|
||||
@console_credentials = {}
|
||||
@network_mapping = {}
|
||||
@ceph_config = {}
|
||||
|
||||
|
||||
preConfig: (config) ->
|
||||
@setInterfaces(config.interface)
|
||||
@setGeneralConfig(config.general)
|
||||
@setPartition(config.partition)
|
||||
@setServerCredentials(config.server_credentials)
|
||||
@setServiceCredentials(config.service_credentials)
|
||||
@setConsoleCredentials(config.console_credentials)
|
||||
@setNetworkMapping(config.network_mapping)
|
||||
@setCephConfig(config.ceph_config) if config.ceph_config
|
||||
|
||||
setClusterInfo: (cluster) ->
|
||||
@cluster = cluster
|
||||
|
||||
setInterfaces: (interfaces) ->
|
||||
@interfaces = interfaces
|
||||
|
||||
setGeneralConfig: (config) ->
|
||||
@generalConfig = config
|
||||
|
||||
getGeneralConfig: ->
|
||||
return @generalConfig
|
||||
|
||||
setPartition: (partition) ->
|
||||
@partition = partition
|
||||
|
||||
setServerCredentials: (credentials) ->
|
||||
@server_credentials = credentials
|
||||
|
||||
getServerCredentials: ->
|
||||
return @server_credentials
|
||||
|
||||
setServiceCredentials: (credentials) ->
|
||||
@service_credentials = credentials
|
||||
|
||||
setConsoleCredentials: (credentials) ->
|
||||
@console_credentials = credentials
|
||||
|
||||
setNetworkMapping: (mapping) ->
|
||||
@network_mapping = mapping
|
||||
|
||||
setCephConfig: (cephConfig) ->
|
||||
@ceph_config = cephConfig
|
||||
|
||||
getClusterInfo: ->
|
||||
return @cluster
|
||||
|
||||
getAllMachinesHost: ->
|
||||
return @allServers
|
||||
|
||||
setAllMachinesHost: (server) ->
|
||||
@allServers = server
|
||||
|
||||
setSubnetworks: (subnetworks) ->
|
||||
@subnetworks = subnetworks
|
||||
|
||||
getSubnetworks: ->
|
||||
return @subnetworks
|
||||
|
||||
getInterfaces: ->
|
||||
return @interfaces
|
||||
|
||||
getPartition: ->
|
||||
return @partition
|
||||
|
||||
getServiceCredentials: ->
|
||||
return @service_credentials
|
||||
|
||||
getConsoleCredentials: ->
|
||||
return @console_credentials
|
||||
|
||||
getServers: ->
|
||||
return @servers
|
||||
|
||||
getNetworkMapping: ->
|
||||
return @network_mapping
|
||||
|
||||
getCephConfig: ->
|
||||
return @ceph_config
|
||||
|
||||
setCommitState: (commitState) ->
|
||||
@commit = commitState
|
||||
|
||||
getCommitState: ->
|
||||
return @commit
|
||||
setServers: (servers) ->
|
||||
return @servers = servers
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
angular.module('compass.factories').factory('wizardFactory',[ () -> new WizardFactory()])
|
||||
)
|
72
v2.5/src/app/partials/cluster-all-grid.tpl.html
Normal file
@ -0,0 +1,72 @@
|
||||
<div class="col-sm-12 no-padding">
|
||||
<!--div class="col-lg-3 col-md-4 col-sm-4 col-xs-6 no-padding" style="margin-top:10px" ng-repeat="cluster in clusters | filter:search"-->
|
||||
<div ng-repeat="cluster in clusters | filter:search" class="pull-left">
|
||||
<div class="infobox infobox-dark1 action" ng-mouseover="hoverView=true" ng-mouseleave="hoverView=false" ng-class="{'infobox-green': cluster.state == 'SUCCESSFUL', 'infobox-blue': cluster.state == 'INITIALIZED', 'infobox-red': cluster.state == 'ERROR', 'infobox-orange': cluster.state == 'INSTALLING', 'infobox-grey': cluster.state == 'UNINITIALIZED'}" ng-click="goToCluster(cluster.id, cluster.state)">
|
||||
<div class="infobox-icon pull-left">
|
||||
<i class="ace-icon fa" ng-class="{'fa-check': cluster.state == 'SUCCESSFUL', ' fa-times': cluster.state == 'ERROR', 'fa-spinner': cluster.state == 'INSTALLING', ' fa-circle-o': cluster.state == 'INITIALIZED', 'fa-gear': cluster.state == 'UNINITIALIZED'}"></i>
|
||||
</div>
|
||||
<div class="pull-left">
|
||||
<span style="font-size: 22px; padding-left: 20px; text-transform: uppercase;font-family:Impact,'Arial Black','Open-Sans', sans-serif; width:200px; overflow: hidden; display:block; white-space: nowrap" tooltip="{{cluster.name}}">{{cluster.name}}</span>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<div class="infobox-data">
|
||||
<span class="infobox-data-number"></span>
|
||||
<div class="infobox-content">
|
||||
<table ng-hide="hoverView">
|
||||
<tr>
|
||||
<td class="pull-right">State</td>
|
||||
<td class="padding-left-15">{{cluster.state}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">System</td>
|
||||
<td class="padding-left-15">{{cluster.distributed_system_name}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">OS</td>
|
||||
<td class="padding-left-15">{{cluster.os_name}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">Updated</td>
|
||||
<td class="padding-left-15">{{cluster.updated_at}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table ng-show="hoverView">
|
||||
<tr>
|
||||
<td class="pull-right">
|
||||
Total Hosts
|
||||
</td>
|
||||
<td class="padding-left-15">
|
||||
<span class="badge badge-info">{{cluster.progress.total_hosts}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">
|
||||
Installing Hosts
|
||||
</td>
|
||||
<td class="padding-left-15">
|
||||
<span class="badge badge-warning">{{cluster.progress.installing_hosts}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">
|
||||
Completed Hosts
|
||||
</td>
|
||||
<td class="padding-left-15">
|
||||
<span class="badge badge-success">{{cluster.progress.completed_hosts}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">
|
||||
Failed Hosts
|
||||
</td>
|
||||
<td class="padding-left-15">
|
||||
<span class="badge badge-danger">{{cluster.progress.failed_hosts}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
106
v2.5/src/app/partials/cluster-all-list.tpl.html
Normal file
@ -0,0 +1,106 @@
|
||||
<div class="table-responsive">
|
||||
<table ng-table="tableParams" class="ng-table table table-striped table-hover nowrap">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="sortable" ng-class="{
|
||||
'sort-asc': tableParams.isSortBy('name', 'asc'),
|
||||
'sort-desc': tableParams.isSortBy('name', 'desc')}" ng-click="tableParams.sorting({'name' : tableParams.isSortBy('name', 'asc') ? 'desc' : 'asc'})">
|
||||
<div>
|
||||
Cluster Name
|
||||
</div>
|
||||
</th>
|
||||
<!-- With icons doesn't make sense to have sorting
|
||||
class="sortable" ng-class="{
|
||||
'sort-asc': tableParams.isSortBy('state', 'asc'),
|
||||
'sort-desc': tableParams.isSortBy('state', 'desc')
|
||||
}" ng-click="tableParams.sorting({'state' : tableParams.isSortBy('state', 'asc') ? 'desc' : 'asc'})"
|
||||
-->
|
||||
<th>
|
||||
State
|
||||
</th>
|
||||
<th>
|
||||
Deployment Details
|
||||
</th>
|
||||
<th class="sortable" ng-class="{
|
||||
'sort-asc': tableParams.isSortBy('distributed_system_name', 'asc'),
|
||||
'sort-desc': tableParams.isSortBy('distributed_system_name', 'desc')
|
||||
}" ng-click="tableParams.sorting({'distributed_system_name' : tableParams.isSortBy('distributed_system_name', 'asc') ? 'desc' : 'asc'})">
|
||||
<div>
|
||||
Target System
|
||||
</div>
|
||||
</th>
|
||||
<th class="sortable" ng-class="{
|
||||
'sort-asc': tableParams.isSortBy('os_name', 'asc'),
|
||||
'sort-desc': tableParams.isSortBy('os_name', 'desc')
|
||||
}" ng-click="tableParams.sorting({'os_name' : tableParams.isSortBy('os_name', 'asc') ? 'desc' : 'asc'})">
|
||||
<div>
|
||||
OS
|
||||
</div>
|
||||
</th>
|
||||
<th class="sortable" ng-class="{
|
||||
'sort-asc': tableParams.isSortBy('updated_at', 'asc'),
|
||||
'sort-desc': tableParams.isSortBy('updated_at', 'desc')
|
||||
}" ng-click="tableParams.sorting({'updated_at' : tableParams.isSortBy('updated_at', 'asc') ? 'desc' : 'asc'})">
|
||||
<div>
|
||||
Date Modified
|
||||
</div>
|
||||
</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="cluster in $data | filter:search">
|
||||
<td sortable="'name'">
|
||||
<span ng-if="cluster.state=='UNINITIALIZED'">
|
||||
<a ui-sref="wizard({ id: cluster.id, config: true })">{{cluster.name}}</a>
|
||||
</span>
|
||||
<span ng-if="cluster.state!='UNINITIALIZED'">
|
||||
<a ui-sref="cluster.overview({ id: cluster.id })">{{cluster.name}}</a>
|
||||
</span>
|
||||
</td>
|
||||
<td sortable="'state'">
|
||||
<span ng-if="cluster.state == 'SUCCESSFUL'">
|
||||
<i class="ace-icon fa fa fa-check bigger-160 green"></i>
|
||||
</span>
|
||||
<span ng-if="cluster.state == 'ERROR'">
|
||||
<i class="ace-icon fa fa-times bigger-160 red"></i>
|
||||
</span>
|
||||
<span ng-if="cluster.state == 'INSTALLING'">
|
||||
<i class="ace-icon fa fa-spinner fa-spin bigger-160 orange"></i>
|
||||
</span>
|
||||
<span ng-if="cluster.state == 'INITIALIZED'">
|
||||
<i class="ace-icon fa fa-circle-o bigger-160 blue"></i>
|
||||
</span>
|
||||
<span ng-if="cluster.state == 'UNINITIALIZED'">
|
||||
<i class="ace-icon fa fa-gear bigger-160 grey"></i>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span ng-if="cluster.progress">
|
||||
<span>Total: {{cluster.progress.total_hosts}} </span>
|
||||
<span>Installing: {{cluster.progress.installing_hosts}} </span>
|
||||
<span>Completed: {{cluster.progress.completed_hosts}} </span>
|
||||
<span>Failed: {{cluster.progress.failed_hosts}}</span>
|
||||
</span>
|
||||
</td>
|
||||
<td sortable="'distributed_system_name'">
|
||||
{{cluster.distributed_system_name}}
|
||||
</td>
|
||||
<td sortable="'os_name'">
|
||||
{{cluster.os_name}}
|
||||
</td>
|
||||
<td sortable="'updated_at'">
|
||||
{{cluster.updated_at}}
|
||||
</td>
|
||||
<td>
|
||||
<button ng-click="export()" class="btn btn-xs btn-black-white btn-clte btn-export-hover border-radius-4">
|
||||
<i class="glyphicon glyphicon-export bigger-130"></i>
|
||||
</button>
|
||||
<button ng-click="alert()" class="btn btn-xs btn-black-white btn-trash-hover border-radius-4">
|
||||
<span class="glyphicon glyphicon-trash bigger-130"></span>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
55
v2.5/src/app/partials/cluster-all.tpl.html
Normal file
@ -0,0 +1,55 @@
|
||||
<div class="main-content">
|
||||
<div class="side-padding-40 top-padding-10">
|
||||
<div class="row margin-bottom-15">
|
||||
<div class="col-md-5 no-padding-left search-badge-adjustment">
|
||||
<h1 class="blue-header margin-right-7">
|
||||
My Clusters
|
||||
</h1>
|
||||
<div class="badge-adjustment">
|
||||
<span class="badge badge-yellow skinny-badge">{{clusters.length}}</span>
|
||||
<span class="no-border-search search-small">
|
||||
<span class="input-icon">
|
||||
<input class="no-border" type="text" placeholder="Search" ng-model="search.$">
|
||||
<i class="ace-icon fa fa-search"></i>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7 no-padding-right">
|
||||
<div class="pull-right">
|
||||
<span ng-controller="createClusterCtrl" class="pull-right">
|
||||
<button ng-click="open()" class="btn btn-app btn-sm btn-primary radius-4 btn-create">
|
||||
<i class="glyphicon glyphicon-plus"></i>
|
||||
New Cluster
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="pull-right clusters-view top-padding-5" ng-init="view = 'grid'">
|
||||
<span class="action grey" ng-click="view = 'grid'">
|
||||
<span class="glyphicon glyphicon-th-large" ng-class="{'blue': view == 'grid'}"></span>
|
||||
</span>
|
||||
<span class="action grey" ng-click="view = 'list'">
|
||||
<span class="glyphicon glyphicon-align-justify" ng-class="{'blue': view == 'list'}"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" ng-controller="createClusterCtrl">
|
||||
<div ng-if="clusters.length == 0" class="dashed-panel no-cluster-panel" ng-click="open()">
|
||||
<div class="top-padding-10 light-grey">
|
||||
<i class="ace-icon fa fa-sitemap bigger-300"></i>
|
||||
</div>
|
||||
<h4 class="top-padding-10 grey">
|
||||
No clusters yet. Please click <b class="">New Cluster</b> button to create a new cluster.
|
||||
</h4>
|
||||
</div>
|
||||
<div ng-if="clusters.length != 0">
|
||||
<div ng-show="view == 'grid'" ng-include="'src/app/partials/cluster-all-grid.tpl.html'"></div>
|
||||
<div ng-show="view == 'list'" ng-include="'src/app/partials/cluster-all-list.tpl.html'"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- <span ng-include="'src/app/partials/cluster-create.tpl.html'"></span> -->
|
||||
</div>
|
3
v2.5/src/app/partials/cluster-config.tpl.html
Executable file
@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<div ui-view></div>
|
||||
</div>
|
91
v2.5/src/app/partials/cluster-nav.tpl.html
Executable file
@ -0,0 +1,91 @@
|
||||
<ul class="nav nav-list">
|
||||
<li ng-class="{active:state.includes('cluster.overview')}">
|
||||
<a ui-sref="cluster.overview">
|
||||
<i class="menu-icon fa fa-tachometer"></i>
|
||||
<span class="menu-text">Overview</span>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li ng-class="{'active open':state.includes('cluster.monitoring')}">
|
||||
<a href ng-click="isMonitoringNavOpen = !isMonitoringNavOpen">
|
||||
<i class="menu-icon fa fa-bar-chart-o"></i>
|
||||
<span class="menu-text">Monitoring</span>
|
||||
<b class="arrow fa fa-angle-down"></b>
|
||||
</a>
|
||||
<ul class="submenu" ng-show="isMonitoringNavOpen" style="display: block">
|
||||
<li ng-class="{active:state.includes('cluster.monitoring.overview')}">
|
||||
<a ui-sref="cluster.monitoring.overview">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Overview
|
||||
</a>
|
||||
</li>
|
||||
<li ng-class="{active:state.includes('cluster.monitoring.topology')}">
|
||||
<a ui-sref="cluster.monitoring.topology">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Topology
|
||||
</a>
|
||||
</li>
|
||||
<li ng-class="{active:state.includes('cluster.monitoring.alerts')}">
|
||||
<a ui-sref="cluster.monitoring.alerts">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Alerts
|
||||
</a>
|
||||
</li>
|
||||
<li ng-class="{active:state.includes('cluster.monitoring.metrics')}">
|
||||
<a ui-sref="cluster.monitoring.metrics">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Metrics
|
||||
</a>
|
||||
</li>
|
||||
<li ng-class="{active:state.includes('cluster.monitoring.charts')}">
|
||||
<a ui-sref="cluster.monitoring.charts">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Dashboards
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li> -->
|
||||
<li ng-class="{'active open':state.includes('cluster.config')}">
|
||||
<a href ng-click="isConfigNavOpen = !isConfigNavOpen">
|
||||
<i class="menu-icon fa fa-cog"></i>
|
||||
<span class="menu-text">Configurations</span>
|
||||
<b class="arrow fa fa-angle-down"></b>
|
||||
</a>
|
||||
<ul class="submenu" ng-show="isConfigNavOpen" style="display: block">
|
||||
<li ng-class="{active:state.includes('cluster.config.security')}">
|
||||
<a ui-sref="cluster.config.security">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Security
|
||||
</a>
|
||||
</li>
|
||||
<li ng-class="{active:state.includes('cluster.config.network')}">
|
||||
<a ui-sref="cluster.config.network">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Network
|
||||
</a>
|
||||
</li>
|
||||
<li ng-class="{active:state.includes('cluster.config.partition')}">
|
||||
<a ui-sref="cluster.config.partition">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Partition
|
||||
</a>
|
||||
</li>
|
||||
<li ng-class="{active:state.includes('cluster.config.roles')}">
|
||||
<a ui-sref="cluster.config.roles">
|
||||
<i class="menu-icon fa fa-caret-right"></i>
|
||||
Roles
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li ng-class="{active:state.includes('cluster.log')}">
|
||||
<a ui-sref="cluster.log">
|
||||
<i class="menu-icon fa fa-list-alt"></i>
|
||||
<span class="menu-text">Log</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<div class="sidebar-toggle sidebar-collapse" ng-click="sidebarCollapse = !sidebarCollapse">
|
||||
<i class="ace-icon fa fa-angle-double-left" ng-class="{'fa-angle-double-right': sidebarCollapse}"></i>
|
||||
</div>
|
23
v2.5/src/app/partials/cluster-network.tpl.html
Executable file
@ -0,0 +1,23 @@
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
Network
|
||||
</h1>
|
||||
</div>
|
||||
<div class="row side-padding-10 padding-top-30">
|
||||
<div class="col-xs-12">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Network</th>
|
||||
<th>Interface</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="(key, value) in configuration.package_config.network_mapping">
|
||||
<td class="capitalize">{{key}} Network</td>
|
||||
<td>{{value}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
189
v2.5/src/app/partials/cluster-overview.tpl.html
Executable file
@ -0,0 +1,189 @@
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
{{clusterInfo.name}}
|
||||
<small>
|
||||
<span class="badge" ng-class="{'badge-info':clusterProgress.state==='INITIALIZED',
|
||||
'badge-warning':clusterProgress.state==='INSTALLING',
|
||||
'badge-danger':clusterProgress.state==='ERROR',
|
||||
'badge-success':clusterProgress.state==='SUCCESSFUL'}">
|
||||
{{clusterProgress.state}}
|
||||
</span>
|
||||
</small>
|
||||
</h1>
|
||||
<!--<i class="ace-icon fa fa-angle-double-right"></i>
|
||||
<a href="">OpenStack Dashboard Link</a>-->
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="row">
|
||||
<div class="pull-right align-right">
|
||||
<div class="cluster-progress">
|
||||
<table>
|
||||
<tr>
|
||||
<td class="pull-right">
|
||||
Total Hosts
|
||||
</td>
|
||||
<td class="padding-left-15">
|
||||
<span class="badge badge-info">{{clusterProgress.status.total_hosts}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">
|
||||
Installing Hosts
|
||||
</td>
|
||||
<td class="padding-left-15">
|
||||
<span class="badge badge-warning">{{clusterProgress.status.installing_hosts}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">
|
||||
Completed Hosts
|
||||
</td>
|
||||
<td class="padding-left-15">
|
||||
<span class="badge badge-success">{{clusterProgress.status.completed_hosts}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pull-right">
|
||||
Failed Hosts
|
||||
</td>
|
||||
<td class="padding-left-15">
|
||||
<span class="badge badge-danger">{{clusterProgress.status.failed_hosts}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div>
|
||||
<div class="pull-left">
|
||||
<span class="input-icon">
|
||||
<input type="text" placeholder="Search" ng-model="search">
|
||||
<i class="ace-icon fa fa-search blue"></i>
|
||||
</span>
|
||||
<div class="btn-group" dropdown>
|
||||
<button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle ng-disabled="disabled">
|
||||
Column Show / Hide
|
||||
<span class="ace-icon fa fa-caret-down icon-on-right"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" role="menu" dropdown>
|
||||
<li ng-repeat="column in server_columns" ng-click="column.visible=!column.visible">
|
||||
<a class="action">
|
||||
<span ng-class="{'opacity-zero': !column.visible}">
|
||||
<i class="ace-icon fa fa-check blue"></i>
|
||||
</span>
|
||||
{{column.title}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<div class="btn-group" dropdown>
|
||||
<button type="button" class="btn btn-info dropdown-toggle" ng-disabled="clusterProgress.state == 'INSTALLING'" dropdown-toggle>
|
||||
Actions
|
||||
<span class="ace-icon fa fa-caret-down icon-on-right"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-info dropdown-menu-right" role="menu" dropdown>
|
||||
<li>
|
||||
<a class="action">
|
||||
Add Hosts
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a class="action" ng-click="assignRole(role)">
|
||||
IPMI Power on
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="action" ng-click="assignRole(role)">
|
||||
IPMI Power off
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="action" ng-click="assignRole(role)">
|
||||
IPMI Reset
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<div class="space-6"></div>
|
||||
<div class="table-responsive">
|
||||
<table ng-table="tableParams" class="table table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<label>
|
||||
<input type="checkbox" ng-model="selectall" ng-change="selectAllServers(selectall)" class="ace">
|
||||
<span class="lbl"></span>
|
||||
</label>
|
||||
</th>
|
||||
<th ng-repeat="column in server_columns" ng-show="column.visible" class="sortable" ng-class="{'sort-asc': tableParams.isSortBy(column.field, 'asc'),
|
||||
'sort-desc': tableParams.isSortBy(column.field, 'desc')}" ng-click="tableParams.sorting(column.field, tableParams.isSortBy(column.field, 'asc') ? 'desc' : 'asc')">
|
||||
<div>{{column.title}}</div>
|
||||
</th>
|
||||
<th>Progress</th>
|
||||
<th class="align-right"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="host in $data | filter:search" ng-class="{'hightlight': host.selected}">
|
||||
<td>
|
||||
<label>
|
||||
<input type="checkbox" ng-model="host.selected" class="ace">
|
||||
<span class="lbl"></span>
|
||||
</label>
|
||||
</td>
|
||||
<td ng-repeat="column in server_columns" ng-show="column.visible" sortable="column.field">
|
||||
<span ng-switch on="column.field">
|
||||
<span ng-switch-when="clusters">
|
||||
<span ng-repeat="cluster in host.clusters">
|
||||
{{cluster.name}}
|
||||
</span>
|
||||
</span>
|
||||
<span ng-switch-when="roles">
|
||||
<span ng-repeat="role in host['roles']" class="badge">
|
||||
{{role.display_name}}
|
||||
</span>
|
||||
</span>
|
||||
<span ng-switch-default>
|
||||
{{host[column.field]}}
|
||||
</span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<hostprogressbar hostid="host.host_id" clusterid="clusterId" clusterstate="clusterProgress.state" progressdata="">
|
||||
</hostprogressbar>
|
||||
</td>
|
||||
<td class="align-right">
|
||||
<button class="btn border-radius-4 btn-xs" ng-click="openDeleteHostModal($index)" ng-disabled="clusterProgress.state == 'INSTALLING'">
|
||||
<i class="ace-icon fa fa-trash-o bigger-120"></i>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<script type="text/ng-template" id="deleteHostConfirm.html">
|
||||
<div class="modal-header ng-scope">
|
||||
<h3 class="modal-title">Create Cluster</h3>
|
||||
</div>
|
||||
<div class="modal-body" style="padding-top: 30px; padding-bottom: 20px;" >
|
||||
Are you sure to delete
|
||||
<strong>{{host.hostname}}</strong>?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-default" ng-click="cancel()">Cancel</button>
|
||||
<button class="btn btn-primary" ng-click="ok()">OK</button>
|
||||
</div>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
39
v2.5/src/app/partials/cluster-partition.tpl.html
Executable file
@ -0,0 +1,39 @@
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
Partition
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="row side-padding-10 padding-top-30">
|
||||
<div class="col-xs-12">
|
||||
|
||||
<div class="col-lg-8">
|
||||
<table class="table table-hover table-striped nowrap">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Mount Point</th>
|
||||
<th>Size Percentage (%)</th>
|
||||
<th>Max Size (G)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="(key, data) in configuration.os_config.partition">
|
||||
<td>
|
||||
<span>{{key}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span>{{data.percentage}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span>{{data.max_size}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-lg-4 text-center partition-chart">
|
||||
<piechart piedata="partitionarray"></piechart>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
50
v2.5/src/app/partials/cluster-roles.tpl.html
Executable file
@ -0,0 +1,50 @@
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
Roles
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="row side-padding-10 padding-top-30">
|
||||
<div class="col-xs-12">
|
||||
<div class="table-responsive">
|
||||
<table ng-table="tableParams" class="table table-hover table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<!--th>
|
||||
<label>
|
||||
<input type="checkbox" ng-model="selectall" ng-change="selectAllServers(selectall)" class="ace">
|
||||
<span class="lbl"></span>
|
||||
</label>
|
||||
</th-->
|
||||
<th ng-repeat="column in server_columns" ng-show="column.visible" class="sortable" ng-class="{'sort-asc': tableParams.isSortBy(column.field, 'asc'),
|
||||
'sort-desc': tableParams.isSortBy(column.field, 'desc')}" ng-click="tableParams.sorting(column.field, tableParams.isSortBy(column.field, 'asc') ? 'desc' : 'asc')">
|
||||
<div>{{column.title}}</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="host in $data | filter:search">
|
||||
<!--td>
|
||||
<label>
|
||||
<input type="checkbox" ng-model="host.selected" class="ace">
|
||||
<span class="lbl"></span>
|
||||
</label>
|
||||
</td-->
|
||||
<td ng-repeat="column in server_columns" ng-show="column.visible" sortable="column.field">
|
||||
<span ng-switch on="column.field">
|
||||
<span ng-switch-when="roles">
|
||||
<span ng-repeat="role in host['roles']" class="badge">
|
||||
{{role.display_name}}
|
||||
</span>
|
||||
</span>
|
||||
<span ng-switch-default>
|
||||
{{host[column.field]}}
|
||||
</span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|