Merge pull request #1825 from ansible/auditPR

Fixes from UI audit with Taufique
This commit is contained in:
Leigh 2016-05-05 17:10:43 -04:00
commit 731563210a
56 changed files with 518 additions and 407 deletions

View File

@ -13,22 +13,22 @@
.ansi3 { font-weight: italic; }
.ansi4 { text-decoration: underline; }
.ansi9 { text-decoration: line-through; }
.ansi30 { color: #000316; }
.ansi31 { color: #ff5850; }
.ansi32 { color: #60D66F; }
.ansi33 { color: #AA5500; }
.ansi34 { color: #0000AA; }
.ansi35 { color: #E850A8; }
.ansi36 { color: #00AAAA; }
.ansi37 { color: #F5F1DE; }
.ansi40 { background-color: #000000; }
.ansi41 { background-color: #ff5850; }
.ansi42 { background-color: #60D66F; }
.ansi43 { background-color: #AA5500; }
.ansi44 { background-color: #0000AA; }
.ansi45 { background-color: #E850A8; }
.ansi46 { background-color: #00AAAA; }
.ansi47 { background-color: #F5F1DE; }
.ansi30 { color: #161b1f; }
.ansi31 { color: #d9534f; }
.ansi32 { color: #5cb85c; }
.ansi33 { color: #f0ad4e; }
.ansi34 { color: #337ab7; }
.ansi35 { color: #e1539e; }
.ansi36 { color: #2dbaba; }
.ansi37 { color: #ffffff; }
.ansi40 { background-color: #161b1f; }
.ansi41 { background-color: #d9534f; }
.ansi42 { background-color: #5cb85c; }
.ansi43 { background-color: #f0ad4e; }
.ansi44 { background-color: #337ab7; }
.ansi45 { background-color: #e1539e; }
.ansi46 { background-color: #2dbaba; }
.ansi47 { background-color: #ffffff; }
body.ansi_back pre {
font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
font-size: 12px;
@ -47,4 +47,4 @@ div.ansi_back.ansi_dark {
<pre>{{ body }}</pre>
</body>
</html>
{% endif %}
{% endif %}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -104,9 +104,9 @@ a:focus {
}
/* Old style TB default button with grey background */
.btn-grey {
color: #333;
background-color: #ccc;
border-color: #ccc;
color: @default-data-txt;
background-color: @d7grey;
border-color: @d7grey;
}
.btn-grey:hover {
@ -146,7 +146,7 @@ a:focus {
/* Bring primary (blue) buttons in line with link colors */
.btn-primary {
background-color: @blue-link;
background-color: @default-link;
}
.btn-primary:hover {
@ -217,7 +217,7 @@ i:active,
height: 46px;
padding-top: 10px;
text-align: right;
border-top: 1px solid #A6C9E2;
border-top: 1px solid @default-border;
margin-top: 5px;
a {
margin-right: 8px;
@ -230,16 +230,16 @@ i:active,
top: 0;
left: 0;
display: none;
border: 1px solid #e5e5e5;
border: 1px solid @default-border;
border-radius: 4px;
box-shadow: 3px 3px 6px 0 #666;
box-shadow: 3px 3px 6px 0 @default-dark;
padding: 0 10px 15px 8px;
background-color: @white;
z-index: 200;
}
#configure-schedules-title {
border-bottom: 1px solid #e5e5e5;
border-bottom: 1px solid @default-border;
padding-bottom: 8px;
margin-bottom: 10px;
margin-top: 0;
@ -321,7 +321,7 @@ i:active,
.success-badge {
color: @default-bg;
background-color: #5cb85c;
background-color: @default-succ;
}
.bold-text .checkbox-inline {
@ -345,7 +345,7 @@ textarea.allowresize {
width: 138px;
height: 50px;
text-align:center;
color: #eee;
color: @d7grey;
background-color: @black;
border: 1px solid @grey;
border-radius: 6px;
@ -410,11 +410,24 @@ textarea.allowresize {
.popover-title {
padding-top: 5px;
padding-bottom: 5px;
background-color: @default-interface-txt;
color: @default-bg;
font-weight: 600;
border-bottom: none;
text-transform: uppercase;
}
.popover {
z-index: 2000;
min-width: 200px;
max-width: 325px;
background-color: @default-interface-txt;
color: @default-bg; //white
}
.popover.right>.arrow:after {
border-right-color: @default-interface-txt;
}
.popover.left>.arrow:after {
border-left-color: @default-interface-txt;
}
.popover pre {
white-space: pre-wrap;
@ -442,7 +455,7 @@ textarea.allowresize {
}
hr {
border-color: #e3e3e3;
border-color: @default-border;
}
.help {
@ -494,13 +507,13 @@ td.actions {
}
.btn .caret {
border-top-color: #696969;
border-top-color: @default-icon;
}
.btn-light {
color: #333;
background-color: #ddd;
border-color: #ddd;
color: @default-data-txt;
background-color: @d7grey;
border-color: @d7grey;
}
.refresh-grp {
@ -517,9 +530,9 @@ td.actions {
}
.btn-light:hover {
color: #333;
background-color: #ccc;
border-color: #ccc;
color: @d7grey;
background-color: @default-icon;
border-color: @default-icon;
}
/* Make a div or any element behave like pre. Use in conjunction with .mono-space */
@ -549,7 +562,7 @@ dd {
#navbar-container, .main-menu {
width: 100%;
background-color: @black;
background-color: @default-dark;
}
.text-justify {
@ -568,7 +581,7 @@ dd {
.help-link:hover,
.ui-widget-content a.help-link:hover {
color: @black;
color: @default-icon;
text-decoration: none;
}
@ -627,7 +640,7 @@ dd {
/* Outline required fields in Red when there is an error */
.form-control.ng-dirty.ng-invalid, .form-control.ng-dirty.ng-invalid:focus {
border-color: rgba(255, 88, 80, 0.8);
border-color: @default-err;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 5px rgba(255, 88, 80, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 5px rgba(255, 88, 80, 0.6);
@ -635,7 +648,7 @@ dd {
.form-control.ng-dirty.ng-invalid + .select2 .select2-selection,
.form-control.ng-dirty.ng-invalid + .select2 .select2-selection:focus {
border-color: rgba(255, 88, 80, 0.8) !important;
border-color: @default-err !important;
outline: 0 !important;
box-shadow: none !important;
}
@ -737,7 +750,7 @@ legend {
background-color: @default-bg;
color: #428bca;
border-color: none;
border: 1px solid #428bca;
border: 1px solid @default-link;
}
}
@ -815,10 +828,10 @@ select.page-size {
margin-bottom: 15px;
font-size: 14px;
font-weight: bold;
background-color: #f5f5f5;
border: 1px solid #d8d8d8;
background-color: @default-no-items-bord;
border: 1px solid @d7grey;
border-radius: 6px;
box-shadow: 3px 3px 4px 0 #808080;
box-shadow: 3px 3px 4px 0 @default-icon;
.breadcrumb {
display: inline-block;
@ -994,11 +1007,11 @@ input[type="checkbox"].checkbox-no-label {
.table-summary thead > tr > td,
.table-summary tbody > tr > td,
.table-summary tfoot > tr > td {
border-top: 1px solid #ccc;
border-top: 1px solid @d7grey;
}
.table-summary thead > tr > th {
border-bottom: 1px solid #ccc;
border-bottom: 1px solid @d7grey;
}
/* Table without row borders */
@ -1047,7 +1060,7 @@ input[type="checkbox"].checkbox-no-label {
.active-failures-true a:active,
.job-failed,
.job-error {
color: #da4f49;
color: @default-err;
}
.icon-failures-true a:hover {
@ -1056,7 +1069,7 @@ input[type="checkbox"].checkbox-no-label {
.job-failures-true {
padding-top: 5px;
color: #da4f49;
color: @default-err;
}
.job-event-status,
@ -1285,11 +1298,11 @@ input[type="checkbox"].checkbox-no-label {
/* end */
.field-success {
color: #5bb75b;
color: @default-succ;
}
.field-success input {
border-color: #5bb75b;
border-color: @default-succ;
}
.field-failure {
@ -1361,8 +1374,8 @@ input[type="checkbox"].checkbox-no-label {
input[readonly],
textarea[readonly] {
background-color: #FBFBFB;
border: 1px solid #E0E0E0;
background-color: @default-border;
border: 1px solid @default-icon;
}
.fa-external-link {
@ -1376,8 +1389,8 @@ input[type="checkbox"].checkbox-no-label {
color: @white;
}
.free-button:hover {
background-color: #E64F48;
border: 1px solid #E64F48;
background-color: @default-err-hov;
border: 1px solid @default-err-hov;
color: @white;
}
}
@ -1439,8 +1452,8 @@ input[type="checkbox"].checkbox-no-label {
.active-row {
background-color: @white;
border-bottom: 1px solid #ddd;
border-right: 1px solid #ddd;
border-bottom: 1px solid @default-tertiary-bg;
border-right: 1px solid @default-tertiary-bg;
}
.node-toggle, .node-no-toggle {
@ -1564,7 +1577,7 @@ a.btn-disabled:hover {
}
.list-header .icon-sort {
color: #ccc;
color: @default-icon;
}
.list-header .icon-sort-down,
@ -1603,7 +1616,7 @@ tr td button i {
margin-top: 0;
margin-bottom: 10px;
font-weight: bold;
border-bottom: 1px solid #d8d8d8;
border-bottom: 1px solid @default-border;
}
.modal-backdrop,
@ -1620,8 +1633,8 @@ tr td button i {
.modal-header {
padding: 15px 10px;
color: #2078be;
border-bottom: 1px solid #eee;
color: @default-link;
border-bottom: 1px solid @default-border;
-webkit-border-top-right-radius: 3px;
-moz-border-top-right-radius: 3px;
border-top-right-radius: 3px;
@ -1887,10 +1900,16 @@ tr td button i {
padding-right: 15px;
}
.list-actions {
margin-bottom: 20px;
text-align: left;
}
}
.nvtooltip {
border-radius: 4px;
padding: 10px;
}
.nvtooltip td.value {
@ -1902,7 +1921,7 @@ tr td button i {
}
.stdout-panel-body {
background-color: #e9e9e9;
background-color: @default-list-header-bg;
}
.job-stdout-panel {
@ -2004,7 +2023,7 @@ tr td button i {
.form-control {
border-color: @d7grey;
background-color: #f6f6f6;
background-color: @default-no-items-bord;
color: @default-data-txt;
transition: border-color 0.3s;
box-shadow: none;
@ -2012,7 +2031,7 @@ tr td button i {
.form-control + .select2 .select2-selection {
border-color: @d7grey !important;
background-color: #f6f6f6 !important;
background-color: #fcfcfc !important;
color: @default-data-txt !important;
transition: border-color 0.3s !important;
box-shadow: none !important;
@ -2020,12 +2039,12 @@ tr td button i {
.form-control:active, .form-control:focus {
box-shadow: none;
border-color: #167ec4;
border-color: @default-link;
}
.form-control:active + .select2 .select2-selection, .form-control:focus + .select2 .select2-selection {
box-shadow: none !important;
border-color: #167ec4 !important;
border-color: @default-link !important;
}
.form-control.ng-dirty.ng-invalid, .form-control.ng-dirty.ng-invalid:focus {
@ -2036,7 +2055,6 @@ tr td button i {
box-shadow: none !important;
}
.error {
opacity: 1;
transition: opacity 0.2s;
@ -2050,10 +2068,6 @@ tr td button i {
opacity: 0;
}
.list-actions button, .list-actions .checkbox-inline {
margin-top: 10px;
}
/* Overwrite select2 base styles for single/multiple selects so that match up with other form elements. Also overwrite disabled styles. */
.select2-container--disabled,.select2-container--disabled .select2-selection--single,.select2-container--disabled .select2-selection--multiple {
cursor: not-allowed !important;
@ -2065,13 +2079,13 @@ tr td button i {
.select2-container--default .select2-selection--single {
background-color: @field-secondary-bg;
border: 1px solid #aaa;
border: 1px solid @d7grey;
border-radius: 4px;
}
.select2-container--default .select2-selection--multiple {
background-color: @field-secondary-bg;
border: 1px solid #aaa;
border: 1px solid @d7grey;
border-radius: 4px;
cursor: text;
}
@ -2091,7 +2105,7 @@ input[type=file]:focus, input[type=radio]:focus, input[type=checkbox]:focus {
}
.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
border-color: #5CB85C;
border-color: @default-succ;
}
a {
@ -2105,3 +2119,48 @@ a:hover {
.form-control:active, .form-control:focus {
border-color: @default-link;
}
.nv-axislabel {
font-weight: bold !important;
fill: @db-graph-axis-label !important;
font-family: 'Open Sans' !important;
}
.nv-axis text {
fill: @db-graph-axis-label !important; //rgb(169, 178, 189);
font-family: 'Open Sans' !important;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice {
cursor: default;
float: left;
margin-right: 5px;
margin-top: 5px;
padding-left: 0px;
border-left-width: 0px;
border-bottom-width: 0px;
border-top-width: 0px;
padding-right: 10px;
border-right-width: 0px;
background-color: @default-link;
color: @default-bg;
border-radius: 5px;
line-height: 21px;
font-size: 13px;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
cursor: pointer;
display: inline-block;
font-weight: bold;
margin-right: 8px !important;
padding: 0 6px;
color: @default-bg !important;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
background-color: @default-link;
}
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
background-color: @default-err;
}

View File

@ -129,13 +129,12 @@
.Form-tab.is-selected {
color: @btn-txt-sel;
background-color: @btn-bg-sel;
border-color: @btn-bord-sel;
background-color: @default-icon-hov;
border-color: @default-icon-hov;
}
.Form-tab--disabled {
opacity: 0.4;
cursor: not-allowed !important;
}
.Form-tab--disabled:hover {
@ -162,14 +161,21 @@
.Form-subForm {
width: 100%;
border-left: 5px solid @default-border;
margin-left: -20px;
padding-left: 15px;
margin-bottom: 15px;
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: flex-start;
position: relative;
}
.Form-formGroup {
float: left;
}
.Form-subForm:before {
content: '';
left: -20px;
position: absolute;
width: 5px;
background-color: @default-border;
height: 100%;
}
.Form-subForm--title {
@ -273,7 +279,7 @@
}
.select2-container--default .select2-results__option[aria-selected=true]{
background-color: @field-border !important;
background-color: @default-white-button-bord !important;
}
.select2-container--default .select2-selection--single .select2-selection__arrow b{
@ -464,7 +470,7 @@ input[type='radio']:checked:before {
}
.Form-formGroup--singleColumn {
width: 100%;
width: 100% !important;
padding-right: 0px;
}
@ -474,10 +480,15 @@ input[type='radio']:checked:before {
color: @default-interface-txt;
}
.Form-formGroup {
max-width: 33%;
}
@media only screen and (max-width: 650px) {
.Form-formGroup {
flex: 1 0 auto;
margin-bottom: 25px;
max-width: 100%;
width: 100%;
padding-right: 50px;
}
@ -487,6 +498,7 @@ input[type='radio']:checked:before {
.Form-formGroup {
flex: 1 0 auto;
margin-bottom: 25px;
max-width: 50%;
width: 50%;
padding-right: 50px;
}

View File

@ -8,6 +8,7 @@
*
*/
@import "awx/ui/client/src/shared/branding/colors.default.less";
table.ui-datepicker-calendar {
background-color: @well;
@ -173,7 +174,7 @@ table.ui-datepicker-calendar {
}
.dropdown-menu>li>a {
color: @black;
color: @default-interface-txt
}
.pagination .active {

View File

@ -47,6 +47,10 @@ table, tbody {
text-align: right;
}
.List-tableHeader:not([ng-click]) {
cursor: default !important;
}
.List-tableHeaderSort {
color: @list-header-icon;
}
@ -181,15 +185,10 @@ table, tbody {
.List-actionHolder {
justify-content: flex-end;
display: flex;
height: 34px;
}
.List-actions {
margin-top: -10px;
}
.List-auxAction + .List-actions {
margin-left: 10px;
margin-left: 20px;
}
.List-auxAction {
@ -313,7 +312,7 @@ table, tbody {
height: 200px;
border-radius: 5px;
border: 1px solid @list-no-items-bord;
background-color: @list-no-items-bg;
background-color: @default-no-items-bord;
color: @list-no-items-txt;
text-transform: uppercase;
}

View File

@ -90,8 +90,10 @@
font-weight: bold;
border-radius: 50%;
background-color: @default-list-header-bg;
padding: 2px 6px;
padding: 1px 8px;
margin-right: 10px;
width: 23px;
height: 23px;
}
.AddPermissions-separator {
@ -122,9 +124,7 @@
}
.AddPermissions-roleType {
border-radius: 5px;
padding: 0px 6px;
border: 1px solid @d7grey;
font-size: 10px;
color: @default-interface-txt;
text-transform: uppercase;
@ -143,7 +143,7 @@
.AddPermissions-roleRemove {
border-radius: 50%;
padding: 5px 3px;
padding: 3px 4.5px;
line-height: 11px;
color: @default-icon;
background-color: @default-tertiary-bg;
@ -187,11 +187,15 @@
.AddPermissions-keyPane {
margin: 20px 0;
border-radius: 5px;
font-size: 12px;
width: 100%;
padding: 15px;
padding-bottom: 0px;
border: 1px solid @d7grey;
color: @default-interface-txt;
padding-top: 10px;
margin-bottom: 15px;
border-radius: 4px;
border: 1px solid @login-notice-border;
background-color: @login-notice-bg;
color: @login-notice-text;
}
.AddPermissions-keyRow {

View File

@ -75,18 +75,19 @@ export default ['$rootScope', '$scope', 'GetBasePath', 'Rest', '$q', 'Wait', 'Pr
});
} else {
// selected, so add to the allSelected list
var getName = function(val) {
if (val.type === "user") {
return (val.first_name &&
val.last_name) ?
val.first_name + " " +
val.last_name :
val.username;
} else {
return val.name;
}
};
scope.allSelected.push({
name: function() {
if (val.type === "user") {
return (val.first_name &&
val.last_name) ?
val.first_name + " " +
val.last_name :
val.username;
} else {
return val .name;
}
},
name: getName(val),
type: val.type,
roles: [],
id: val.id

View File

@ -21,7 +21,7 @@
<div class="AddPermissions-body">
<div class="AddPermissions-directions">
<span class="AddPermissions-directionNumber">
1.
1
</span>
Please select Users / Teams from the lists below.
</div>
@ -55,7 +55,7 @@
<div class="AddPermissions-directions"
ng-show="allSelected && allSelected.length > 0">
<span class="AddPermissions-directionNumber">
2.
2
</span>
Please assign roles to the selected users/teams
<div class="AddPermissions-keyToggle"

View File

@ -5,6 +5,7 @@
display: flex;
flex-wrap: wrap;
align-items: flex-start;
padding-left: 15px;
}
.RoleList-tagContainer {
@ -16,11 +17,10 @@
border-radius: 5px;
padding: 2px 10px;
margin: 4px 0px;
border: 1px solid @d7grey;
font-size: 12px;
color: @default-interface-txt;
color: @default-bg;
text-transform: uppercase;
background-color: @default-bg;
background-color: @default-link;
margin-right: 5px;
max-width: 100%;
white-space: nowrap;
@ -30,21 +30,20 @@
.RoleList-tag--deletable {
margin-right: 0px;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
border-right: 0;
max-wdith: ~"calc(100% - 23px)";
margin-right: 5px;
}
.RoleList-deleteContainer {
border: 1px solid @d7grey;
border-left-color: @default-bg;
background-color: @default-bg;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
background-color: @default-link;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
color: @default-bg;
padding: 0 5px;
margin: 4px 0px;
margin-right: 5px;
align-items: center;
display: flex;
cursor: pointer;
@ -52,7 +51,7 @@
.RoleList-tagDelete {
font-size: 13px;
color: @default-icon;
color: @default-bg;
}
.RoleList-name {

View File

@ -1,13 +1,13 @@
<div class="RoleList-tagContainer"
ng-repeat="role in roles">
<div class="RoleList-tag"
ng-class="{'RoleList-tag--deletable': role.explicit}">
<span class="RoleList-name">{{ role.name }}</span>
</div>
<div class="RoleList-deleteContainer"
ng-if="role.explicit"
ng-click="deletePermission(permission.id, role.roleId, permission.username, role.name, role.resourceName)">
<i ng-if="role.explicit"
class="fa fa-times RoleList-tagDelete"></i>
</div>
<div class="RoleList-tag"
ng-class="{'RoleList-tag--deletable': role.explicit}">
<span class="RoleList-name">{{ role.name }}</span>
</div>
</div>

View File

@ -0,0 +1,9 @@
.ActivityStream-refreshButton{
height: 30px;
padding-top: 0px;
padding-bottom: 0px;
}
.ActivityStream-eventColumnHeader:hover{
cursor: auto;
}

View File

@ -25,9 +25,13 @@
margin-bottom: 5px;
}
.StreamDetail-actions{
word-break: break-all;
}
.StreamDetail-changes {
border: none;
background-color: @default-secondary-bg;
background-color: @default-no-items-bord;
margin-bottom: 0;
max-height: 200px;
overflow: scroll;

View File

@ -14,7 +14,7 @@
</div>
<div ng-show="operation" class="StreamDetail-inlineRow">
<div class="StreamDetail-rowTitle StreamDetail-inlineRowTitle">ACTION</div>
<div class="StreamDetail-inlineRowData" ng-bind="operation"></div>
<div class="StreamDetail-inlineRowData StreamDetail-actions" ng-bind="operation"></div>
</div>
<div ng-show="changes">
<div class="StreamDetail-rowTitle StreamDetail-changesRowTitle">CHANGES</div>
@ -22,7 +22,7 @@
</div>
</div>
<div class="Modal-footer">
<a href="#" data-target="#stream-detail-modal" data-dismiss="modal" id="action_cancel_btn" class="btn Modal-defaultButton Modal-footerButton StreamDetail-actionButton">OK</a>
<a href="#" data-target="#stream-detail-modal" data-dismiss="modal" id="action_cancel_btn" class="btn btn-primary StreamDetail-actionButton">OK</a>
</div>
</div>
</div>

View File

@ -55,7 +55,6 @@ import search from './search/main';
import {ProjectsList, ProjectsAdd, ProjectsEdit} from './controllers/Projects';
import OrganizationsList from './organizations/list/organizations-list.controller';
import OrganizationsAdd from './organizations/add/organizations-add.controller';
import {AdminsList} from './controllers/Admins';
import {UsersList, UsersAdd, UsersEdit} from './controllers/Users';
import {TeamsList, TeamsAdd, TeamsEdit} from './controllers/Teams';
@ -126,7 +125,6 @@ var tower = angular.module('Tower', [
'SearchHelper',
'PaginationHelpers',
'RefreshHelper',
'AdminListDefinition',
'AWDirectives',
'InventoriesListDefinition',
'InventoryFormDefinition',

View File

@ -1,46 +0,0 @@
/*************************************************
* Copyright (c) 2015 Ansible, Inc.
*
* All Rights Reserved
*************************************************/
/**
* @ngdoc overview
* @name controllers
* @description These are all the controllers that are used throughout the application
*
*/
/**
* @ngdoc function
* @name controllers.function:Admins
* @description This controller's for administrators
* Admins.js
*
* Controller functions for ading Admins to an Organization.
*
*/
export function AdminsList($scope, $rootScope, $location, $log, $stateParams, Rest, Alert, AdminList, GenerateList,
Prompt, SearchInit, PaginateInit, ReturnToCaller, GetBasePath, SelectionInit) {
var list = AdminList,
defaultUrl = GetBasePath('organizations') + $stateParams.organization_id + '/users/',
generator = GenerateList,
mode = 'select',
url = GetBasePath('organizations') + $stateParams.organization_id + '/admins/';
generator.inject(AdminList, { mode: mode, scope: $scope });
SelectionInit({ scope: $scope, list: list, url: url, returnToCaller: 1 });
SearchInit({ scope: $scope, set: 'admins', list: list, url: defaultUrl });
PaginateInit({ scope: $scope, list: list, url: defaultUrl });
$scope.search(list.iterator);
}
AdminsList.$inject = ['$scope', '$rootScope', '$location', '$log', '$stateParams', 'Rest', 'Alert', 'AdminList', 'generateList',
'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'GetBasePath', 'SelectionInit'
];

View File

@ -479,7 +479,7 @@ export function ProjectsAdd(Refresh, $scope, $rootScope, $compile, $location, $l
url: $scope.current_url
});
$state.go("^");
$state.go('projects.edit', {id: data.id}, {reload: true});
})
.error(function (data, status) {
Wait('stop');

View File

@ -28,20 +28,6 @@
transition: background-color 0.2s, border-color 0.2s;
}
@media only screen and (max-width: 710px) {
.DashboardCounts {
margin-bottom: -15px;
}
.DashboardCounts-buttonStyle {
margin-bottom: 15px;
width: 33%;
flex-basis: ~"calc(33% - 7px)";
max-width: ~"calc(33% - 7px)";
height: 96px;
}
}
.DashboardCounts-buttonStyle:hover {
background-color: @db-count-succ;
border-color: @db-count-succ;
@ -80,3 +66,23 @@
text-transform: uppercase;
transition: color 0.2s;
}
@media only screen and (max-width: 710px) {
.DashboardCounts {
margin-bottom: -15px;
}
.DashboardCounts-buttonStyle {
margin-bottom: 15px;
width: 33%;
flex-basis: ~"calc(33% - 7px)";
max-width: ~"calc(33% - 7px)";
height: 96px;
}
}
@media only screen and (max-width: 360px) {
.DashboardCounts-label {
font-size: 10px;
}
}

View File

@ -62,7 +62,7 @@ export default
{
url: "/#/projects/?status=failed",
number: scope.data.projects.failed,
label: "Projects Sync Failures",
label: "Project Sync Failures",
isFailureCount: true
}
], function(val) { return addFailureToCount(val); });

View File

@ -28,6 +28,8 @@
color: @default-interface-txt;
white-space: nowrap;
margin-right: auto;
margin-bottom: 20px;
margin-top: 5px;
}
.DashboardGraphs-graphSection {
@ -70,21 +72,11 @@
flex-direction: column;
}
.nv-axislabel {
font-weight: bold !important;
fill: @db-graph-axis-label !important;
font-family: 'Open Sans' !important;
}
.nv-axis text {
fill: @db-graph-axis-label !important; //rgb(169, 178, 189);
font-family: 'Open Sans' !important;
}
.DashboardGraphs-graphToolbar {
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin-right: 60px;
}
.DashboardGraphs-filterDropdownText,
@ -128,20 +120,14 @@
text-transform: uppercase;
}
.DashboardGraphs-periodDropdown{
.DashboardGraphs-periodDropdown,
.DashboardGraphs-jobTypeDropdown,
.DashboardGraphs-statusDropdown {
padding-top:5px;
}
.DashboardGraphs-jobTypeDropdown{
padding-top:5px;
}
.DashboardGraphs-filterDropdownItems--period {
margin-left: -42px;
}
.DashboardGraphs-filterDropdownItems--jobType {
margin-left: -84px;
.DashboardGraphs-filterDropdownItems {
min-width: 0;
}
.DashboardGraphs-statusFilters{
@ -178,3 +164,36 @@
.DashboardGraphs-statusFilterIcon{
padding-right: 5px;
}
.DashboardGraphs-filteringDropdowns {
display: inherit;
}
.DashboardGraphs-filterDropdownItems {
li > a {
color: @default-interface-txt;
}
}
@media only screen and (max-width: 800px) {
.DashboardGraphs-graphToolbar {
width: 100%;
margin-right: 0px;
}
.DashboardGraphs-filteringDropdowns {
float: left;
width: 100%;
margin-left: -10px;
}
.DashboardGraphs-filterLabel {
width: 50%;
float:left;
}
.DashboardGraphs-periodDropdown {
width: 50%;
float: left;
}
}

View File

@ -4,74 +4,83 @@
JOB STATUS
</h3>
<div class="DashboardGraphs-graphToolbar" ng-show="!hostStatusSelected">
<div class="DashboardGraphs-filterLabel">Period</div>
<div class="DashboardGraphs-periodDropdown">
<a id="period-dropdown" role="button"
data-toggle="dropdown"
data-target="#"
href="/page.html"
class="DashboardGraphs-filterDropdownText">
Past Month <i class="fa fa-chevron-down DashboardGraphs-filterIcon"></i>
</a>
<ul class="dropdown-menu DashboardGraphs-filterDropdownItems
DashboardGraphs-filterDropdownItems--period" role="menu" aria-labelledby="period-dropdown">
<li>
<a class="n" id="day" >Past 24 Hours </a>
</li>
<li>
<a class="n" id="week">Past Week</a>
</li>
<li>
<a class="n" id="month">Past Month</a>
</li>
</ul>
<div class="DashboardGraphs-filteringDropdowns">
<div class="DashboardGraphs-filterLabel">Period</div>
<div class="DashboardGraphs-periodDropdown">
<a id="period-dropdown" role="button"
data-toggle="dropdown"
data-target="#"
href="/page.html"
class="DashboardGraphs-filterDropdownText">
Past Month <i class="fa fa-chevron-down DashboardGraphs-filterIcon"></i>
</a>
<ul class="dropdown-menu DashboardGraphs-filterDropdownItems
DashboardGraphs-filterDropdownItems--period" role="menu" aria-labelledby="period-dropdown">
<li>
<a class="n" id="day" >Past 24 Hours </a>
</li>
<li>
<a class="n" id="week">Past Week</a>
</li>
<li>
<a class="n" id="month">Past Month</a>
</li>
</ul>
</div>
</div>
<div class="DashboardGraphs-filterLabel">Job Type</div>
<div class="DashboardGraphs-jobTypeDropdown">
<div class="DashboardGraphs-filteringDropdowns">
<div class="DashboardGraphs-filterLabel">Job Type</div>
<div class="DashboardGraphs-jobTypeDropdown">
<a id="type-dropdown" role="button" data-toggle="dropdown" data-target="#" class="DashboardGraphs-filterDropdownText"
href="/page.html">
All <i class="fa fa-chevron-down DashboardGraphs-filterIcon"></i>
<a id="type-dropdown" role="button" data-toggle="dropdown" data-target="#" class="DashboardGraphs-filterDropdownText"
href="/page.html">
All <i class="fa fa-chevron-down DashboardGraphs-filterIcon"></i>
</a>
<ul class="dropdown-menu DashboardGraphs-filterDropdownItems
DashboardGraphs-filterDropdownItems--jobType" role="menu" aria-labelledby="type-dropdown">
<li>
<a class="m" id="all">All</a>
</li>
<li>
<a class="m" id="inv_sync">Inventory Sync</a>
</li>
<li>
<a class="m" id="scm_update">SCM Update</a>
</li>
<li>
<a class="m" id="playbook_run">Playbook Run</a>
</li>
</ul>
</div>
</div>
<div class="DashboardGraphs-filteringDropdowns">
<div class="DashboardGraphs-filterLabel">View</div>
<div class="DashboardGraphs-statusDropdown">
<a id="status-dropdown" role="button"
data-toggle="dropdown"
data-target="#"
href="/page.html"
class="DashboardGraphs-filterDropdownText">
All
<i class="fa fa-chevron-down
DashboardGraphs-filterIcon">
</i>
</a>
<ul class="dropdown-menu DashboardGraphs-filterDropdownItems
DashboardGraphs-filterDropdownItems--jobType" role="menu" aria-labelledby="type-dropdown">
<li>
<a class="m" id="all">All</a>
</li>
<li>
<a class="m" id="inv_sync">Inventory Sync</a>
</li>
<li>
<a class="m" id="scm_update">SCM Update</a>
</li>
<li>
<a class="m" id="playbook_run">Playbook Run</a>
</li>
</ul>
</div>
<div class="DashboardGraphs-filterLabel">View</div>
<div class="DashboardGraphs-periodDropdown">
<a id="status-dropdown" role="button"
data-toggle="dropdown"
data-target="#"
href="/page.html"
class="DashboardGraphs-filterDropdownText">
All <i class="fa fa-chevron-down DashboardGraphs-filterIcon"></i>
</a>
<ul class="dropdown-menu DashboardGraphs-filterDropdownItems
DashboardGraphs-filterDropdownItems--period" role="menu" aria-labelledby="status-dropdown">
<li>
<a class="o" id="both" >All</a>
</li>
<li>
<a class="o" id="failed">Successful</a>
</li>
<li>
<a class="o" id="successful">Failed</a>
</li>
</ul>
<ul class="dropdown-menu DashboardGraphs-filterDropdownItems
DashboardGraphs-filterDropdownItems--status" role="menu" aria-labelledby="status-dropdown">
<li>
<a class="o" id="both" >All</a>
</li>
<li>
<a class="o" id="failed">Successful</a>
</li>
<li>
<a class="o" id="successful">Failed</a>
</li>
</ul>
</div>
</div>
</div>
</div>

View File

@ -124,7 +124,8 @@ function JobStatusGraph($rootScope, $compile , $location, $window, Wait, adjustG
// when the Period drop down filter is used, create a new graph based on the
$('.n').on("click", function(){
period = this.getAttribute("id");
$('#period-dropdown').replaceWith("<a id=\"period-dropdown\" class=\"DashboardGraphs-filterDropdownText\" role=\"button\" data-toggle=\"dropdown\" data-target=\"#\" href=\"/page.html\">"+this.text+
$('#period-dropdown')
.replaceWith("<a id=\"period-dropdown\" class=\"DashboardGraphs-filterDropdownText DashboardGraphs-filterDropdownItems--period\" role=\"button\" data-toggle=\"dropdown\" data-target=\"#\" href=\"/page.html\">"+this.text+
"<i class=\"fa fa-chevron-down DashboardGraphs-filterIcon\"></i>\n");
scope.$parent.isFailed = true;
scope.$parent.isSuccessful = true;
@ -134,7 +135,7 @@ function JobStatusGraph($rootScope, $compile , $location, $window, Wait, adjustG
//On click, update with new data
$('.m').on("click", function(){
job_type = this.getAttribute("id");
$('#type-dropdown').replaceWith("<a id=\"type-dropdown\" class=\"DashboardGraphs-filterDropdownText\" role=\"button\" data-toggle=\"dropdown\" data-target=\"#\" href=\"/page.html\">"+this.text+
$('#type-dropdown').replaceWith("<a id=\"type-dropdown\" class=\"DashboardGraphs-filterDropdownText DashboardGraphs-filterDropdownItems--jobType\" role=\"button\" data-toggle=\"dropdown\" data-target=\"#\" href=\"/page.html\">"+this.text+
"<i class=\"fa fa-chevron-down DashboardGraphs-filterIcon\"></i>\n");
scope.$parent.isFailed = true;
scope.$parent.isSuccessful = true;
@ -143,7 +144,7 @@ function JobStatusGraph($rootScope, $compile , $location, $window, Wait, adjustG
$('.o').on('click', function() {
var job_status = this.getAttribute('id');
$('#status-dropdown').replaceWith("<a id=\"status-dropdown\" class=\"DashboardGraphs-filterDropdownText\" role=\"button\" data-toggle=\"dropdown\" data-target=\"#\" href=\"/page.html\">"+this.text+
$('#status-dropdown').replaceWith("<a id=\"status-dropdown\" class=\"DashboardGraphs-filterDropdownText DashboardGraphs-filterDropdownText--status\" role=\"button\" data-toggle=\"dropdown\" data-target=\"#\" href=\"/page.html\">"+this.text+
"<i class=\"fa fa-chevron-down DashboardGraphs-filterIcon\"></i>\n");
scope.$broadcast("jobStatusChange", job_status);
});

View File

@ -57,7 +57,7 @@ export default function(){
default: '---',
awPopOver: "<p>Enter variables using either JSON or YAML syntax. Use the radio button to toggle between the two.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp;\"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n" +
'<p>View JSON examples at <a href="http://www.json.org" target="_blank">www.json.org</a></p>' +

View File

@ -15,7 +15,7 @@ export default function(){
index: false,
hover: true,
well: true,
emptyListText: 'NO ACTIVE FAILURES FOUND',
emptyListText: 'NO HOSTS FOUND',
fields: {
status: {
basePath: 'unified_jobs',

View File

@ -35,7 +35,7 @@
color: @btn-txt;
background-color: @btn-bg;
font-size: 12px;
border: 1px solid @btn-bord;
border: 1px solid @default-icon-hov;
border-radius: 5px;
margin-right: 15px;
margin-top: 10px;
@ -145,11 +145,32 @@
}
.DashboardList-actionButton--edit:hover {
background-color: #337AB7;
background-color: @default-link;
color: @default-bg;
border: 1px solid #337AB7;
border: 1px solid @default-link;
}
.DashboardList-noJobs {
color: @list-empty-txt;
}
@media only screen and (max-width: 360px) {
.DashboardList-headerText {
white-space: normal;
line-height: 22px;
padding-top: 10px;
}
.DashboardList-timeCell {
white-space: normal;
}
}
@media only screen and (max-width: 540px) {
.DashboardList-container {
th {
width: 25%;
white-space: nowrap;
}
}
}

View File

@ -10,10 +10,8 @@
<div class="DashboardList-container">
<table class="List-table">
<tr class="List-tableHeaderRow">
<th class="List-tableHeader DashboardList-tableHeader--name"
ng-click="sort('job_templates','name')">
<th class="List-tableHeader DashboardList-tableHeader--name">
Title
<i class="DashboardList-tableHeaderIcon fa fa-sort-up"></i>
</th>
<th class="List-tableHeader DashboardList-tableHeader--activity">
Activity
@ -53,7 +51,7 @@
</h3>
</div>
<div class="DashboardList-container">
<p class="DashboardList-noJobs">It doesn't seem like you have used any currently available job templates.<br />
<p class="DashboardList-noJobs">No job templates were recently used.<br />
You can create a job template <a href="#/job_templates/add">here</a>.</p>
</div>
</div>

View File

@ -10,7 +10,7 @@
<div class="DashboardList-container">
<table class="List-table">
<tr>
<th class="List-tableHeader DashboardList-tableHeader--name" ng-click="sort('job_templates','name')">Title <i class="DashboardList-tableHeaderIcon fa fa-sort-up"></i></th>
<th class="List-tableHeader DashboardList-tableHeader--name">Title</th>
<th class="List-tableHeader DashboardList-tableHeader--time">Time</th>
</tr>
<tr class="List-tableRow"
@ -38,10 +38,10 @@
<div class="DashboardList" ng-show="noJobs">
<div class="DashboardList-header">
<h3 class="DashboardList-headerText">
RECENT JOB RUNS
RECENTLY RUN JOBS
</h3>
</div>
<div class="DashboardList-container">
<p class="DashboardList-noJobs">It doesn't seem like you have any recent job runs.</p>
<p class="DashboardList-noJobs">No jobs were recently run.</p>
</div>
</div>

View File

@ -3,7 +3,7 @@
.Footer {
height: 40px;
background-color: @default-no-items-bord;
background-color: @default-secondary-bg;
color: @default-interface-txt;
width: 100%;
z-index: 1040;

View File

@ -49,7 +49,7 @@ export default
"<p>Enter variables using either JSON or YAML syntax. Use the " +
"radio button to toggle between the two.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp; \"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n" +
'<p>View JSON examples at <a href="http://www.json.org" target="_blank">www.json.org</a></p>' +
@ -171,7 +171,7 @@ export default
dataPlacement: 'right',
awPopOver: "<p>Provide key/value pairs using either YAML or JSON.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp;\"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n",
dataContainer: 'body'
@ -193,7 +193,7 @@ export default
"view ec2.ini in the Ansible github repo.</a></p>" +
"<p>Enter variables using either JSON or YAML syntax. Use the radio button to toggle between the two.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp;\"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n" +
'<p>View JSON examples at <a href="http://www.json.org" target="_blank">www.json.org</a></p>' +
@ -219,7 +219,7 @@ export default
"view vmware.ini in the Ansible github repo.</a></p>" +
"<p>Enter variables using either JSON or YAML syntax. Use the radio button to toggle between the two.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp;\"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n" +
'<p>View JSON examples at <a href="http://www.json.org" target="_blank">www.json.org</a></p>' +

View File

@ -64,7 +64,7 @@ export default
"default": "---",
awPopOver: "<p>Enter variables using either JSON or YAML syntax. Use the radio button to toggle between the two.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp;\"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n" +
'<p>View JSON examples at <a href="http://www.json.org" target="_blank">www.json.org</a></p>' +
@ -87,7 +87,7 @@ export default
},
cancel: {
ngClick: 'formCancel()',
ngDisabled: true
ngDisabled: true
}
},

View File

@ -55,7 +55,7 @@ export default
"default": "---",
awPopOver: "<p>Enter inventory variables using either JSON or YAML syntax. Use the radio button to toggle between the two.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp;\"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n" +
'<p>View JSON examples at <a href="http://www.json.org" target="_blank">www.json.org</a></p>' +

View File

@ -248,7 +248,7 @@ export default
awPopOver: "<p>Pass extra command line variables to the playbook. This is the -e or --extra-vars command line parameter " +
"for ansible-playbook. Provide key/value pairs using either YAML or JSON.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp;\"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n",
dataTitle: 'Extra Variables',

View File

@ -78,7 +78,7 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
},
base_dir: {
label: 'Project Base Path',
type: 'textarea',
type: 'text',
//"class": 'col-lg-6',
showonly: true,
ngShow: "scm_type.value == 'manual' " ,
@ -206,7 +206,7 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
type: 'number',
integer: true,
min: 0,
ngShow: "scm_update_on_launch",
ngShow: "scm_update_on_launch && projectSelected",
spinner: true,
"default": '0',
addRequired: false,

View File

@ -496,7 +496,7 @@ function($compile, Rest, GetBasePath, TextareaResize,CreateDialog, GenerateForm,
"<p>Extra variables are passed as command line variables to the playbook run. It is equivalent to the -e or --extra-vars " +
"command line parameter for ansible-playbook. Provide key/value pairs using either YAML or JSON.</p>" +
"JSON:<br />\n" +
"<blockquote>{<br />\"somevar\": \"somevalue\",<br />\"password\": \"magic\"<br /> }</blockquote>\n" +
"<blockquote>{<br />&emsp;\"somevar\": \"somevalue\",<br />&emsp;\"password\": \"magic\"<br /> }</blockquote>\n" +
"YAML:<br />\n" +
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n";

View File

@ -10,9 +10,19 @@
.License-container{
.OnePlusTwo-container;
}
.License-container--missing {
max-width: 800px;
margin: 0 auto;
padding: 0 20px;
}
.License-field--label{
.OnePlusTwo-left--detailsLabel;
}
.License-fileName{
padding-left: 20px;
}
.License-management .CodeMirror-scroll{
min-height: 140px;
}
@ -30,15 +40,28 @@
.License-submit--success.ng-hide{
opacity: 0;
}
.License-eula textarea{
.License-eulaNotice{
font-size: 12px;
width: 100%;
height: 200px;
max-height: 129px;
padding: 15px;
padding-top: 10px;
margin-bottom: 10px;
border-radius: 4px;
border: 1px solid @login-notice-border;
background-color: @login-notice-bg;
color: @login-notice-text;
overflow-y: scroll;
overflow-x: visible;
}
.License-field label{
width: 155px;
}
.License-field--content{
.OnePlusTwo-left--detailsContent;
text-transform: capitalize;
}
.License-field{
.OnePlusTwo-left--detailsRow;
@ -48,9 +71,11 @@
}
.License-greenText{
color: @submit-button-bg;
padding-right: 10px;
}
.License-redText{
color: #d9534f;
color: @default-err;
padding-right: 10px;
}
.License-fields{
.OnePlusTwo-left--details;
@ -68,14 +93,15 @@
height: auto;
}
.License-downloadLicenseButton{
background-color: @default-link !important;
margin-bottom: 10px;
color:@default-bg;
}
.License-downloadLicenseButton:hover{
background-color: @default-link-hov !important;
color:@default-bg !important;
}
.License-downloadLicenseButton:focus{
background-color: @default-link-hov !important;
color:@default-bg !important;
}
.License-submit--container{
@ -108,3 +134,7 @@
border-top-right-radius: 4px !important;
border-bottom-right-radius: 4px !important;
}
.License-detailsGroup {
margin-bottom: 20px;
}

View File

@ -73,7 +73,7 @@ export default
return moment().add(days, 'days').calendar();
};
var init = function(){
$scope.fileName = "Please choose a file...";
$scope.fileName = "No file selected.";
$scope.title = $rootScope.licenseMissing ? "Tower License" : "License Management";
Wait('start');
CheckLicense.get()

View File

@ -1,4 +1,5 @@
<div class="License-container">
<div class="License-container"
ng-class="{'License-container--missing': licenseMissing}">
<div class="License-details" ng-if="!licenseMissing">
<div class="Panel">
<div class="License-titleText">Details</div>
@ -6,32 +7,32 @@
<div class="License-field">
<div class="License-field--label">License</div>
<div class="License-field--content">
<span ng-show='valid'><i class="fa fa-circle License-greenText"></i> Valid</span>
<span ng-show='invalid'><i class="fa fa-circle License-redText"></i> Invalid</span>
<span ng-show='valid'><i class="fa fa-circle License-greenText"></i>Valid</span>
<span ng-show='invalid'><i class="fa fa-circle License-redText"></i>Invalid</span>
</div>
</div>
<div class="License-field">
<div class="License-field--label">Version</div>
<div class="License-field--content">
{{license.version || "No result found"}}
{{license.version}}
</div>
</div>
<div class="License-field">
<div class="License-field--label">License Type</div>
<div class="License-field--content">
{{license.license_info.license_type || "No result found"}}
{{license.license_info.license_type}}
</div>
</div>
<div class="License-field">
<div class="License-field--label">Subscription</div>
<div class="License-field--content">
{{license.license_info.subscription_name || "No result found"}}
{{license.license_info.subscription_name}}
</div>
</div>
<div class="License-field">
<div class="License-field--label">License Key</div>
<div class="License-field--content">
{{license.license_info.license_key || "No result found"}}
{{license.license_info.license_key}}
</div>
</div>
<div class="License-field">
@ -49,24 +50,24 @@
<div class="License-field">
<div class="License-field--label">Hosts Available</div>
<div class="License-field--content">
{{license.license_info.available_instances || "No result found"}}
{{license.license_info.available_instances}}
</div>
</div>
<div class="License-field">
<div class="License-field--label">Hosts Used</div>
<div class="License-field--content">
{{license.license_info.current_instances || "No result found"}}
{{license.license_info.current_instances}}
</div>
</div>
<div class="License-field License-greenText">
<div class="License-field--label">Hosts Remaining</div>
<div class="License-field--content">
{{license.license_info.free_instances || "No result found"}}
{{license.license_info.free_instances}}
</div>
</div>
</div>
<div class="License-upgradeText">If you are ready to upgrade, please contact us by clicking the button below</div>
<a href="https://www.ansible.com/renew" target="_blank"><button class="btn btn-default">Upgrade</button></a>
<a href="https://www.ansible.com/renew" target="_blank"><button class="btn btn-primary">Upgrade</button></a>
</div>
</div>
<div class="License-management" ng-class="{'License-management--missingLicense' : licenseMissing}">
@ -75,20 +76,20 @@
<div class="License-body">
<div class="AddPermissions-directions" ng-if="licenseMissing">
<span class="AddPermissions-directionNumber">
1.
1
</span>
<span class="License-helperText">
Please click the button below to visit Ansible's website to get a Tower license key.
</span>
</div>
<button class="License-downloadLicenseButton btn" ng-if="licenseMissing" ng-click="downloadLicense()">
<button class="License-downloadLicenseButton btn btn-primary" ng-if="licenseMissing" ng-click="downloadLicense()">
Request License
</button>
<div class="AddPermissions-directions">
<span class="AddPermissions-directionNumber" ng-if="licenseMissing">
2.
2
</span>
<span class="License-helperText">
Choose your license file, agree to the End User License Agreement, and click submit.
@ -98,18 +99,22 @@
<form id="License-form" name="license">
<div class="License-subTitleText prepend-asterisk"> License File</div>
<div class="input-group License-file--container">
<span class="btn btn-default input-group-addon" ng-click="fakeClick()">Browse...</span>
<input class="form-control License-input--fake" ng-disabled="true" placeholder="{{fileName}}" />
<span class="btn btn-primary" ng-click="fakeClick()">Browse</span>
<span class="License-fileName" ng-class="{'License-helperText' : fileName == 'No file selected.'}">{{fileName}}</span>
<input id="License-file" class="form-control" type="file" file-on-change="getKey"/>
</div>
<div class="License-subTitleText prepend-asterisk"> End User License Agreement</div>
<div class="form-group License-eula">
<textarea class="form-control">{{license.eula}}
</textarea>
<div class="License-subTitleText prepend-asterisk"> End User License Agreement
</div>
<div class="form-group">
<div id="eula_notice"
class="License-eulaNotice">
{{ license.eula }}
</div>
<div class="form-group License-detailsGroup">
<div class="checkbox">
<div class="License-details--label"><input type="checkbox" ng-model="newLicense.eula" required> I agree to the End User License Agreement</div>
<label class="License-details--label">
<input type="checkbox" ng-model="newLicense.eula" required>
I agree to the End User License Agreement
</label>
</div>
</div>
<div class="License-submit--container">

View File

@ -4,7 +4,6 @@
* All Rights Reserved
*************************************************/
import Admins from "./lists/Admins";
import CloudCredentials from "./lists/CloudCredentials";
import CompletedJobs from "./lists/CompletedJobs";
import AllJobs from "./lists/AllJobs";
@ -31,8 +30,7 @@ import Teams from "./lists/Teams";
import Users from "./lists/Users";
export
{ Admins,
CloudCredentials,
{ CloudCredentials,
CompletedJobs,
AllJobs,
Credentials,

View File

@ -1,37 +0,0 @@
/*************************************************
* Copyright (c) 2015 Ansible, Inc.
*
* All Rights Reserved
*************************************************/
export default
angular.module('AdminListDefinition', [])
.value('AdminList', {
name: 'admins',
iterator: 'admin',
selectTitle: 'Add Administrators',
editTitle: 'Admins',
selectInstructions: '<p>Select existing users by clicking each user or checking the related checkbox. When finished, click the blue ' +
'<em>Select</em> button, located bottom right.</p>',
base: 'users',
index: false,
hover: true,
fields: {
username: {
key: true,
label: 'Username'
},
first_name: {
label: 'First Name'
},
last_name: {
label: 'Last Name'
}
},
actions: {},
fieldActions: {}
});

View File

@ -12,6 +12,7 @@ export default
iterator: 'group',
editTitle: '{{ inventory.name }}',
listTitle: 'Groups',
searchSize: 'col-lg-12 col-md-12 col-sm-12 col-xs-12',
showTitle: false,
well: true,
index: false,
@ -31,7 +32,7 @@ export default
nosort: true,
label: '',
type: 'badgeCount',
ngHide: 'group.total_groups == 0',
ngHide: 'group.total_groups == 0',
},
source: {
label: 'Source',

View File

@ -12,6 +12,7 @@ export default
iterator: 'host',
editTitle: '{{ selected_group }}',
listTitle: 'Hosts',
searchSize: 'col-lg-12 col-md-12 col-sm-12 col-xs-12',
showTitle: false,
well: true,
index: false,

View File

@ -24,7 +24,7 @@ export default
fields: {
timestamp: {
label: 'Event Time',
label: 'Time',
key: true,
desc: true,
noLink: true,
@ -44,11 +44,11 @@ export default
columnClass: 'col-lg-3 col-md-3 col-sm-3 col-xs-3'
},
description: {
label: 'Action',
label: 'Event',
ngBindHtml: 'activity.description',
nosort: true,
searchable: false,
columnClass: 'col-lg-5 col-md-6 col-sm-4 col-xs-4'
columnClass: 'ActivityStream-eventColumnHeader col-lg-5 col-md-6 col-sm-4 col-xs-4'
},
actor: {
label: 'System event',
@ -263,7 +263,7 @@ export default
id: 'activity-stream-refresh-btn',
awToolTip: "Refresh the page",
ngClick: "refreshStream()",
actionClass: 'btn List-buttonDefault',
actionClass: 'btn List-buttonDefault ActivityStream-refreshButton',
buttonContent: 'REFRESH'
}
},

View File

@ -264,7 +264,8 @@
.MainMenu-item:hover,
.MainMenu-logo:hover,
.MainMenu-item.is-currentRoute {
color: @menu-link;
background-color: @default-tertiary-bg;
color: @default-icon;
}
// item on

View File

@ -9,7 +9,7 @@
}
.alert-success{
background-color: #5CB85C;
background-color: @default-succ;
color: @default-bg;
}

View File

@ -4,21 +4,27 @@ export default ['$scope', '$stateParams', '$state', 'Rest', 'UserList', 'Invento
var list = {};
if (mode === 'users') {
list = _.cloneDeep(UserList);
list.emptyListText = "Please add items to this list";
list.actions.add.buttonContent = '&#43; ADD user';
} else if (mode === 'inventories') {
list = _.cloneDeep(InventoryList);
list.emptyListText = "List is empty";
delete list.actions.add;
} else if (mode === 'job_templates') {
list = _.cloneDeep(JobTemplateList);
list.emptyListText = "List is empty";
delete list.actions.add;
} else if (mode === 'teams') {
list = _.cloneDeep(TeamList);
list.emptyListText = "List is empty";
delete list.actions.add;
} else if (mode === 'projects') {
list = _.cloneDeep(ProjectList);
list.emptyListText = "List is empty";
delete list.actions.add;
} else if (mode === 'admins') {
list = _.cloneDeep(UserList);
list.emptyListText = "Please add items to this list";
list.actions.add.buttonContent = '&#43; ADD administrator';
}
return list;

View File

@ -13,6 +13,13 @@ export function PortalModeJobsController($scope, $state, $rootScope, GetBasePath
defaultUrl = GetBasePath('jobs') + '?created_by=' + $rootScope.current_user.id,
pageSize = 12;
if ($rootScope.removeJobStatusChange) {
$rootScope.removeJobStatusChange();
}
$rootScope.removeJobStatusChange = $rootScope.$on('JobStatusChange-portal', function() {
$scope.search('portal_job'); //processEvent(event);
});
$scope.iterator = list.iterator;
$scope.activeFilter = 'user';

View File

@ -25,7 +25,7 @@
}
.ScheduleToggle.is-on {
border-color: #337AB7;
border-color: @default-link;
background-color: @default-bg;
}

View File

@ -10,7 +10,6 @@
span.ui-spinner.ui-widget.ui-widget-content.ui-corner-all {
flex: 1;
width: 100%;
}
.SchedulerTime-separator {

View File

@ -82,11 +82,11 @@
}
.TagSearch-dropdownItem:hover {
background-color: @default-tertiary-bg;
background-color: @default-no-items-bord;
}
.TagSearch-dropdownItem.is-selected {
background-color: @default-no-items-bord;
background-color: @default-white-button-bord;
}
.TagSearch-searchTermContainer {
@ -174,7 +174,6 @@
border-radius: 5px;
padding: 2px 10px;
margin: 4px 0px;
border: 1px solid @d7grey;
font-size: 12px;
color: @default-interface-txt;
text-transform: uppercase;
@ -188,21 +187,23 @@
.TagSearch-tag--deletable {
margin-right: 0px;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
border-right: 0;
max-wdith: ~"calc(100% - 23px)";
background-color: @default-link;
color: @default-bg;
margin-right: 5px;
}
.TagSearch-deleteContainer {
border: 1px solid @d7grey;
border-left-color: @default-bg;
background-color: @default-link!important;
color: white;
background-color: @default-bg;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
padding: 0 5px;
margin: 4px 0px;
margin-right: 5px;
align-items: center;
display: flex;
cursor: pointer;
@ -210,7 +211,6 @@
.TagSearch-tagDelete {
font-size: 13px;
color: @default-icon;
}
.TagSearch-name {
@ -224,7 +224,7 @@
.TagSearch-deleteContainer:hover, {
border-color: @default-err;
background-color: @default-err;
background-color: @default-err!important;
}
.TagSearch-deleteContainer:hover > .TagSearch-tagDelete {

View File

@ -63,15 +63,15 @@
<div class="TagSearch-flexContainer">
<div class="TagSearch-tagContainer"
ng-repeat="tag in currentSearchFilters track by $index">
<div class="TagSearch-deleteContainer"
ng-click="deleteTag(tag)">
<i class="fa fa-times TagSearch-tagDelete"></i>
</div>
<div class="TagSearch-tag TagSearch-tag--deletable"
<span class="TagSearch-name">
{{ tag.name }}
</span>
</div>
<div class="TagSearch-deleteContainer"
ng-click="deleteTag(tag)">
<i class="fa fa-times TagSearch-tagDelete"></i>
</div>
</div>
</div>
</div>

View File

@ -650,7 +650,6 @@ angular.module('Utilities', ['RestServices', 'Utilities', 'sanitizeFilter'])
}
if (addNew) {
$(element).prepend("<option></option>");
config.tags = true;
config.tokenSeparators = [];
}

View File

@ -13,7 +13,7 @@
@info-color: #3a87ad;
@unreachable: #FF0000;
@changed: #FF9900; // Ansible Changed
@skipped: #00aaaa; // Ansible Skipped
@skipped: #2dbaba; // Ansible Skipped
@warning: #FF9900;
@well: #f5f5f5; /* well background color */
@well-border: #e3e3e3;

View File

@ -1783,7 +1783,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
html += `
<div class=\"row\"
ng-show=\"${collection.hideSearchAndActions ? false : true}\">
<div class=\"col-lg-8\"
<div class=\"col-lg-8 col-md-8 col-sm-8 col-xs-12\"
ng-show=\"${collection.iterator}Loading == true ||
${collection.iterator}_active_search == true || (
${collection.iterator}Loading == false &&
@ -1793,7 +1793,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
>
${tagSearch}
</div>
<div class=\"col-lg-4\">
<div class=\"col-lg-4 col-md-4 col-sm-4 col-xs-12\">
<div class=\"list-actions\">
${actionButtons}
</div>

View File

@ -329,7 +329,7 @@ export default ['$location', '$compile', '$rootScope', 'SearchWidget', 'Paginate
html += "</div>";
}
html += "<div class=\"List-actions\">";
html += "<div class=\"list-actions\" ng-include=\"'" +
html += "<div ng-include=\"'" +
templateUrl('shared/list-generator/list-actions') +
"'\">\n";

View File

@ -37,12 +37,14 @@
height:20px;
font-size: 20px;
background-color:@default-bg;
color:@default-icon;
color:@default-icon-hov;
line-height:1;
opacity: 1;
}
.Modal-exit:hover{
color:@default-icon-hov;
color: @default-icon;
opacity: 1;
}
.Modal-body {
@ -96,6 +98,10 @@
color: @btn-txt-sel;
}
.Modal-errorButton:focus {
color: @btn-txt-sel;
}
.Modal-footerButton {
padding: 4px 8px;
}

View File

@ -35,6 +35,7 @@
text-align: left;
max-width: 250px;
padding: 10px;
line-height: 22px;
}
.SmartStatus-tooltip--success{