diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000000..7a5b920bcc --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "awx/ui/static/lib" +} diff --git a/.gitignore b/.gitignore index e8fd62b1cc..1eb3946561 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,10 @@ awx/projects awx/job_status awx/public/media awx/public/static -awx/ui/static/js/awx-min.js +awx/ui/static/js/awx.min.js awx/ui/static/css/awx.min.css env/* +node_modules/** build deb-build dist diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000000..3d2aa16892 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,44 @@ +module.exports = function(grunt) { + + grunt.initConfig({ + + pkg: grunt.file.readJSON('./package.json'), + + jshint: { + options: { + jshintrc: '.jshintrc' + }, + uses_defaults: ['awx/ui/static/js/*','awx/ui/static/lib/ansible/*', '!awx/ui/static/js/awx-min.js'] + }, + + uglify: { + options: { + banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + + '<%= grunt.template.today("yyyy-mm-dd") %> */' + }, + my_target: { + files: { + 'awx/ui/static/js/awx-min.js': ['awx/ui/static/js/**/*.js', 'awx/ui/static/lib/ansible/*.js', + '!awx/ui/static/js/awx.min.js'] + } + } + }, + + less: { + production: { + options: { + cleancss: true + }, + files: { + "awx/ui/static/css/awx.min.css": "awx/ui/static/less/ansible-ui.less" + } + } + } + }); + + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-less'); + + grunt.registerTask('default', ['jshint', 'uglify', 'less']); +} diff --git a/awx/ui/static/css/bootstrap-theme.css b/awx/ui/static/css/bootstrap-theme.css deleted file mode 100644 index ad11735693..0000000000 --- a/awx/ui/static/css/bootstrap-theme.css +++ /dev/null @@ -1,384 +0,0 @@ -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn:active, -.btn.active { - background-image: none; -} - -.btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%); - background-repeat: repeat-x; - border-color: #e0e0e0; - border-color: #ccc; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); -} - -.btn-default:active, -.btn-default.active { - background-color: #e6e6e6; - border-color: #e0e0e0; -} - -.btn-primary { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); - background-repeat: repeat-x; - border-color: #2d6ca2; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); -} - -.btn-primary:active, -.btn-primary.active { - background-color: #3071a9; - border-color: #2d6ca2; -} - -.btn-success { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); - background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); - background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - background-repeat: repeat-x; - border-color: #419641; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); -} - -.btn-success:active, -.btn-success.active { - background-color: #449d44; - border-color: #419641; -} - -.btn-warning { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); - background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); - background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - background-repeat: repeat-x; - border-color: #eb9316; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); -} - -.btn-warning:active, -.btn-warning.active { - background-color: #ec971f; - border-color: #eb9316; -} - -.btn-danger { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); - background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); - background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - background-repeat: repeat-x; - border-color: #c12e2a; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); -} - -.btn-danger:active, -.btn-danger.active { - background-color: #c9302c; - border-color: #c12e2a; -} - -.btn-info { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); - background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); - background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - background-repeat: repeat-x; - border-color: #2aabd2; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); -} - -.btn-info:active, -.btn-info.active { - background-color: #31b0d5; - border-color: #2aabd2; -} - -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-color: #357ebd; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); -} - -.navbar { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8)); - background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); - background-repeat: repeat-x; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); -} - -.navbar .navbar-nav > .active > a { - background-color: #f8f8f8; -} - -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); -} - -.navbar-inverse { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222)); - background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%); - background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); -} - -.navbar-inverse .navbar-nav > .active > a { - background-color: #222222; -} - -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} - -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.alert-success { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc)); - background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%); - background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - background-repeat: repeat-x; - border-color: #b2dba1; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); -} - -.alert-info { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0)); - background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%); - background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - background-repeat: repeat-x; - border-color: #9acfea; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); -} - -.alert-warning { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0)); - background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%); - background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - background-repeat: repeat-x; - border-color: #f5e79e; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); -} - -.alert-danger { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3)); - background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%); - background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - background-repeat: repeat-x; - border-color: #dca7a7; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); -} - -.progress { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5)); - background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%); - background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); -} - -.progress-bar { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); -} - -.progress-bar-success { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); - background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); - background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); -} - -.progress-bar-info { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); - background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); - background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); -} - -.progress-bar-warning { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); - background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); - background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); -} - -.progress-bar-danger { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); - background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); - background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); -} - -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} - -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #3071a9; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); - background-repeat: repeat-x; - border-color: #3278b3; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); -} - -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.panel-default > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8)); - background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%); - background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); -} - -.panel-primary > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); -} - -.panel-success > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6)); - background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%); - background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); -} - -.panel-info > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3)); - background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%); - background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); -} - -.panel-warning > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc)); - background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%); - background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); -} - -.panel-danger > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc)); - background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%); - background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); -} - -.well { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5)); - background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%); - background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - background-repeat: repeat-x; - border-color: #dcdcdc; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); -} \ No newline at end of file diff --git a/awx/ui/static/css/bootstrap-theme.min.css b/awx/ui/static/css/bootstrap-theme.min.css deleted file mode 100644 index cad36b4e60..0000000000 --- a/awx/ui/static/css/bootstrap-theme.min.css +++ /dev/null @@ -1 +0,0 @@ -.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}.navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/awx/ui/static/css/bootstrap.css b/awx/ui/static/css/bootstrap.css deleted file mode 100644 index e34f1e1710..0000000000 --- a/awx/ui/static/css/bootstrap.css +++ /dev/null @@ -1,6805 +0,0 @@ -/*! - * Bootstrap v3.0.0 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */ - -/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ - -article, -aside,.table -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -audio, -canvas, -video { - display: inline-block; -} - -audio:not([controls]) { - display: none; - height: 0; -} - -[hidden] { - display: none; -} - -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -a:focus { - outline: thin dotted; -} - -a:active, -a:hover { - outline: 0; -} - -h1 { - margin: 0.67em 0; - font-size: 2em; -} - -abbr[title] { - border-bottom: 1px dotted; -} - -b, -strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -hr { - height: 0; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -mark { - color: #000; - background: #ff0; -} - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -pre { - white-space: pre-wrap; -} - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - border: 0; -} - -svg:not(:root) { - overflow: hidden; -} - -figure { - margin: 0; -} - -fieldset { - padding: 0.35em 0.625em 0.75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} - -legend { - padding: 0; - border: 0; -} - -button, -input, -select, -textarea { - margin: 0; - font-family: inherit; - font-size: 100%; -} - -button, -input { - line-height: normal; -} - -button, -select { - text-transform: none; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -button[disabled], -html input[disabled] { - cursor: default; -} - -input[type="checkbox"], -input[type="radio"] { - padding: 0; - box-sizing: border-box; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -@media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 2cm .5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .table td, - .table th { - background-color: #fff !important; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} - -*, -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -html { - font-size: 62.5%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.428571429; - color: #333333; - background-color: #ffffff; -} - -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input, -select[multiple], -textarea { - background-image: none; -} - -a { - color: #428bca; - text-decoration: none; -} - -a:hover, -a:focus { - color: #2a6496; - text-decoration: underline; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -img { - vertical-align: middle; -} - -.img-responsive { - display: block; - height: auto; - max-width: 100%; -} - -.img-rounded { - border-radius: 6px; -} - -.img-thumbnail { - display: inline-block; - height: auto; - max-width: 100%; - padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -.img-circle { - border-radius: 50%; -} - -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0 0 0 0); - border: 0; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 16.099999999999998px; - font-weight: 200; - line-height: 1.4; -} - -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} - -small { - font-size: 85%; -} - -cite { - font-style: normal; -} - -.text-muted { - color: #999999; -} - -.text-primary { - color: #428bca; -} - -.text-warning { - color: #c09853; -} - -.text-danger { - color: #b94a48; -} - -.text-success { - color: #468847; -} - -.text-info { - color: #3a87ad; -} - -.text-left { - text-align: left; -} - -.text-right { - text-align: right; -} - -.text-center { - text-align: center; -} - -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 500; - line-height: 1.1; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - margin-top: 20px; - margin-bottom: 10px; -} - -h4, -h5, -h6 { - margin-top: 10px; - margin-bottom: 10px; -} - -h1, -.h1 { - font-size: 36px; -} - -h2, -.h2 { - font-size: 30px; -} - -h3, -.h3 { - font-size: 24px; -} - -h4, -.h4 { - font-size: 18px; -} - -h5, -.h5 { - font-size: 14px; -} - -h6, -.h6 { - font-size: 12px; -} - -h1 small, -.h1 small { - font-size: 24px; -} - -h2 small, -.h2 small { - font-size: 18px; -} - -h3 small, -.h3 small, -h4 small, -.h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} - -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 1.428571429; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 0; -} - -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -blockquote p:last-child { - margin-bottom: 0; -} - -blockquote small { - display: block; - line-height: 1.428571429; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 1.428571429; -} - -code, -pre { - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} - -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - white-space: nowrap; - background-color: #f9f2f4; - border-radius: 4px; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.428571429; - color: #333333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -.container:before, -.container:after { - display: table; - content: " "; -} - -.container:after { - clear: both; -} - -.container:before, -.container:after { - display: table; - content: " "; -} - -.container:after { - clear: both; -} - -.row { - margin-right: -15px; - margin-left: -15px; -} - -.row:before, -.row:after { - display: table; - content: " "; -} - -.row:after { - clear: both; -} - -.row:before, -.row:after { - display: table; - content: " "; -} - -.row:after { - clear: both; -} - -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12, -.col-sm-1, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-md-1, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-10, -.col-md-11, -.col-md-12, -.col-lg-1, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-10, -.col-lg-11, -.col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} - -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11 { - float: left; -} - -.col-xs-1 { - width: 8.333333333333332%; -} - -.col-xs-2 { - width: 16.666666666666664%; -} - -.col-xs-3 { - width: 25%; -} - -.col-xs-4 { - width: 33.33333333333333%; -} - -.col-xs-5 { - width: 41.66666666666667%; -} - -.col-xs-6 { - width: 50%; -} - -.col-xs-7 { - width: 58.333333333333336%; -} - -.col-xs-8 { - width: 66.66666666666666%; -} - -.col-xs-9 { - width: 75%; -} - -.col-xs-10 { - width: 83.33333333333334%; -} - -.col-xs-11 { - width: 91.66666666666666%; -} - -.col-xs-12 { - width: 100%; -} - -@media (min-width: 768px) { - .container { - max-width: 750px; - } - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, - .col-sm-11 { - float: left; - } - .col-sm-1 { - width: 8.333333333333332%; - } - .col-sm-2 { - width: 16.666666666666664%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-4 { - width: 33.33333333333333%; - } - .col-sm-5 { - width: 41.66666666666667%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-7 { - width: 58.333333333333336%; - } - .col-sm-8 { - width: 66.66666666666666%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-10 { - width: 83.33333333333334%; - } - .col-sm-11 { - width: 91.66666666666666%; - } - .col-sm-12 { - width: 100%; - } - .col-sm-push-1 { - left: 8.333333333333332%; - } - .col-sm-push-2 { - left: 16.666666666666664%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-4 { - left: 33.33333333333333%; - } - .col-sm-push-5 { - left: 41.66666666666667%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-7 { - left: 58.333333333333336%; - } - .col-sm-push-8 { - left: 66.66666666666666%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-10 { - left: 83.33333333333334%; - } - .col-sm-push-11 { - left: 91.66666666666666%; - } - .col-sm-pull-1 { - right: 8.333333333333332%; - } - .col-sm-pull-2 { - right: 16.666666666666664%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-4 { - right: 33.33333333333333%; - } - .col-sm-pull-5 { - right: 41.66666666666667%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-7 { - right: 58.333333333333336%; - } - .col-sm-pull-8 { - right: 66.66666666666666%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-10 { - right: 83.33333333333334%; - } - .col-sm-pull-11 { - right: 91.66666666666666%; - } - .col-sm-offset-1 { - margin-left: 8.333333333333332%; - } - .col-sm-offset-2 { - margin-left: 16.666666666666664%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-4 { - margin-left: 33.33333333333333%; - } - .col-sm-offset-5 { - margin-left: 41.66666666666667%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-7 { - margin-left: 58.333333333333336%; - } - .col-sm-offset-8 { - margin-left: 66.66666666666666%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-10 { - margin-left: 83.33333333333334%; - } - .col-sm-offset-11 { - margin-left: 91.66666666666666%; - } -} - -@media (min-width: 992px) { - .container { - max-width: 970px; - } - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11 { - float: left; - } - .col-md-1 { - width: 8.333333333333332%; - } - .col-md-2 { - width: 16.666666666666664%; - } - .col-md-3 { - width: 25%; - } - .col-md-4 { - width: 33.33333333333333%; - } - .col-md-5 { - width: 41.66666666666667%; - } - .col-md-6 { - width: 50%; - } - .col-md-7 { - width: 58.333333333333336%; - } - .col-md-8 { - width: 66.66666666666666%; - } - .col-md-9 { - width: 75%; - } - .col-md-10 { - width: 83.33333333333334%; - } - .col-md-11 { - width: 91.66666666666666%; - } - .col-md-12 { - width: 100%; - } - .col-md-push-0 { - left: auto; - } - .col-md-push-1 { - left: 8.333333333333332%; - } - .col-md-push-2 { - left: 16.666666666666664%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-4 { - left: 33.33333333333333%; - } - .col-md-push-5 { - left: 41.66666666666667%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-7 { - left: 58.333333333333336%; - } - .col-md-push-8 { - left: 66.66666666666666%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-10 { - left: 83.33333333333334%; - } - .col-md-push-11 { - left: 91.66666666666666%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-pull-1 { - right: 8.333333333333332%; - } - .col-md-pull-2 { - right: 16.666666666666664%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-4 { - right: 33.33333333333333%; - } - .col-md-pull-5 { - right: 41.66666666666667%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-7 { - right: 58.333333333333336%; - } - .col-md-pull-8 { - right: 66.66666666666666%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-10 { - right: 83.33333333333334%; - } - .col-md-pull-11 { - right: 91.66666666666666%; - } - .col-md-offset-0 { - margin-left: 0; - } - .col-md-offset-1 { - margin-left: 8.333333333333332%; - } - .col-md-offset-2 { - margin-left: 16.666666666666664%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-4 { - margin-left: 33.33333333333333%; - } - .col-md-offset-5 { - margin-left: 41.66666666666667%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-7 { - margin-left: 58.333333333333336%; - } - .col-md-offset-8 { - margin-left: 66.66666666666666%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-10 { - margin-left: 83.33333333333334%; - } - .col-md-offset-11 { - margin-left: 91.66666666666666%; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1170px; - } - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, - .col-lg-11 { - float: left; - } - .col-lg-1 { - width: 8.333333333333332%; - } - .col-lg-2 { - width: 16.666666666666664%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-4 { - width: 33.33333333333333%; - } - .col-lg-5 { - width: 41.66666666666667%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-7 { - width: 58.333333333333336%; - } - .col-lg-8 { - width: 66.66666666666666%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-10 { - width: 83.33333333333334%; - } - .col-lg-11 { - width: 91.66666666666666%; - } - .col-lg-12 { - width: 100%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-push-1 { - left: 8.333333333333332%; - } - .col-lg-push-2 { - left: 16.666666666666664%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-4 { - left: 33.33333333333333%; - } - .col-lg-push-5 { - left: 41.66666666666667%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-7 { - left: 58.333333333333336%; - } - .col-lg-push-8 { - left: 66.66666666666666%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-10 { - left: 83.33333333333334%; - } - .col-lg-push-11 { - left: 91.66666666666666%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-pull-1 { - right: 8.333333333333332%; - } - .col-lg-pull-2 { - right: 16.666666666666664%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-4 { - right: 33.33333333333333%; - } - .col-lg-pull-5 { - right: 41.66666666666667%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-7 { - right: 58.333333333333336%; - } - .col-lg-pull-8 { - right: 66.66666666666666%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-10 { - right: 83.33333333333334%; - } - .col-lg-pull-11 { - right: 91.66666666666666%; - } - .col-lg-offset-0 { - margin-left: 0; - } - .col-lg-offset-1 { - margin-left: 8.333333333333332%; - } - .col-lg-offset-2 { - margin-left: 16.666666666666664%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-4 { - margin-left: 33.33333333333333%; - } - .col-lg-offset-5 { - margin-left: 41.66666666666667%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-7 { - margin-left: 58.333333333333336%; - } - .col-lg-offset-8 { - margin-left: 66.66666666666666%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-10 { - margin-left: 83.33333333333334%; - } - .col-lg-offset-11 { - margin-left: 91.66666666666666%; - } -} - -table { - max-width: 100%; - background-color: transparent; -} - -th { - text-align: left; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table thead > tr > th, -.table tbody > tr > th, -.table tfoot > tr > th, -.table thead > tr > td, -.table tbody > tr > td, -.table tfoot > tr > td { - padding: 8px; - line-height: 1.428571429; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} - -.table caption + thead tr:first-child th, -.table colgroup + thead tr:first-child th, -.table thead:first-child tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed thead > tr > th, -.table-condensed tbody > tr > th, -.table-condensed tfoot > tr > th, -.table-condensed thead > tr > td, -.table-condensed tbody > tr > td, -.table-condensed tfoot > tr > td { - padding: 5px; -} - -.table-bordered { - border: 1px solid #dddddd; -} - -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} - -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} - -.table-striped > tbody > tr:nth-child(odd) > td, -.table-striped > tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover > tbody > tr:hover > td, -.table-hover > tbody > tr:hover > th { - background-color: #f5f5f5; -} - -table col[class*="col-"] { - display: table-column; - float: none; -} - -table td[class*="col-"], -table th[class*="col-"] { - display: table-cell; - float: none; -} - -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} - -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td { - background-color: #d0e9c6; - border-color: #c9e2b3; -} - -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; - border-color: #eed3d7; -} - -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td { - background-color: #ebcccc; - border-color: #e6c1c7; -} - -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td { - background-color: #faf2cc; - border-color: #f8e5be; -} - -@media (max-width: 768px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - background-color: #fff; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > thead > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > thead > tr:last-child > td, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -label { - display: inline-block; - margin-bottom: 5px; - font-weight: bold; -} - -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; -} - -input[type="file"] { - display: block; -} - -select[multiple], -select[size] { - height: auto; -} - -select optgroup { - font-family: inherit; - font-size: inherit; - font-style: inherit; -} - -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -input[type="number"]::-webkit-outer-spin-button, -input[type="number"]::-webkit-inner-spin-button { - height: auto; -} - -.form-control:-moz-placeholder { - color: #999999; -} - -.form-control::-moz-placeholder { - color: #999999; -} - -.form-control:-ms-input-placeholder { - color: #999999; -} - -.form-control::-webkit-input-placeholder { - color: #999999; -} - -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - color: #555555; - vertical-align: middle; - background-color: #ffffff; - border: 1px solid #cccccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} - -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); -} - -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eeeeee; -} - -textarea.form-control { - height: auto; -} - -.form-group { - margin-bottom: 15px; -} - -.radio, -.checkbox { - display: block; - min-height: 20px; - padding-left: 20px; - margin-top: 10px; - margin-bottom: 10px; - vertical-align: middle; -} - -.radio label, -.checkbox label { - display: inline; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} - -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} - -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} - -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -.radio[disabled], -.radio-inline[disabled], -.checkbox[disabled], -.checkbox-inline[disabled], -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"], -fieldset[disabled] .radio, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} - -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -select.input-sm { - height: 30px; - line-height: 30px; -} - -textarea.input-sm { - height: auto; -} - -.input-lg { - height: 45px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -select.input-lg { - height: 45px; - line-height: 45px; -} - -textarea.input-lg { - height: auto; -} - -.has-warning .help-block, -.has-warning .control-label { - color: #c09853; -} - -.has-warning .form-control { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-warning .form-control:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.has-warning .input-group-addon { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.has-error .help-block, -.has-error .control-label { - color: #b94a48; -} - -.has-error .form-control { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-error .form-control:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.has-error .input-group-addon { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.has-success .help-block, -.has-success .control-label { - color: #468847; -} - -.has-success .form-control { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-success .form-control:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.has-success .input-group-addon { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.form-control-static { - padding-top: 7px; - margin-bottom: 0; -} - -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} - -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } -} - -.form-horizontal .control-label, -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} - -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; -} - -.form-horizontal .form-group:after { - clear: both; -} - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; -} - -.form-horizontal .form-group:after { - clear: both; -} - -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - } -} - -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.428571429; - text-align: center; - white-space: nowrap; - vertical-align: middle; - cursor: pointer; - border: 1px solid transparent; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; -} - -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - pointer-events: none; - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} - -.btn-default:hover, -.btn-default:focus, -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - color: #333333; - background-color: #ebebeb; - border-color: #adadad; -} - -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - background-image: none; -} - -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #ffffff; - border-color: #cccccc; -} - -.btn-primary { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; -} - -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - background-image: none; -} - -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; -} - -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; -} - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ed9c28; - border-color: #d58512; -} - -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - background-image: none; -} - -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} - -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; -} - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #d2322d; - border-color: #ac2925; -} - -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - background-image: none; -} - -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} - -.btn-success { - color: #ffffff; - background-color: #5cb85c; - border-color: #4cae4c; -} - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #47a447; - border-color: #398439; -} - -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - background-image: none; -} - -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} - -.btn-info { - color: #ffffff; - background-color: #5bc0de; - border-color: #46b8da; -} - -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #39b3d7; - border-color: #269abc; -} - -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - background-image: none; -} - -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} - -.btn-link { - font-weight: normal; - color: #428bca; - cursor: pointer; - border-radius: 0; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} - -.btn-link:hover, -.btn-link:focus { - color: #2a6496; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #999999; - text-decoration: none; -} - -.btn-lg { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -.btn-sm, -.btn-xs { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-xs { - padding: 1px 5px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - display: none; -} - -.collapse.in { - display: block; -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); -} - -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - -webkit-font-smoothing: antialiased; - font-style: normal; - font-weight: normal; - line-height: 1; -} - -.glyphicon-asterisk:before { - content: "\2a"; -} - -.glyphicon-plus:before { - content: "\2b"; -} - -.glyphicon-euro:before { - content: "\20ac"; -} - -.glyphicon-minus:before { - content: "\2212"; -} - -.glyphicon-cloud:before { - content: "\2601"; -} - -.glyphicon-envelope:before { - content: "\2709"; -} - -.glyphicon-pencil:before { - content: "\270f"; -} - -.glyphicon-glass:before { - content: "\e001"; -} - -.glyphicon-music:before { - content: "\e002"; -} - -.glyphicon-search:before { - content: "\e003"; -} - -.glyphicon-heart:before { - content: "\e005"; -} - -.glyphicon-star:before { - content: "\e006"; -} - -.glyphicon-star-empty:before { - content: "\e007"; -} - -.glyphicon-user:before { - content: "\e008"; -} - -.glyphicon-film:before { - content: "\e009"; -} - -.glyphicon-th-large:before { - content: "\e010"; -} - -.glyphicon-th:before { - content: "\e011"; -} - -.glyphicon-th-list:before { - content: "\e012"; -} - -.glyphicon-ok:before { - content: "\e013"; -} - -.glyphicon-remove:before { - content: "\e014"; -} - -.glyphicon-zoom-in:before { - content: "\e015"; -} - -.glyphicon-zoom-out:before { - content: "\e016"; -} - -.glyphicon-off:before { - content: "\e017"; -} - -.glyphicon-signal:before { - content: "\e018"; -} - -.glyphicon-cog:before { - content: "\e019"; -} - -.glyphicon-trash:before { - content: "\e020"; -} - -.glyphicon-home:before { - content: "\e021"; -} - -.glyphicon-file:before { - content: "\e022"; -} - -.glyphicon-time:before { - content: "\e023"; -} - -.glyphicon-road:before { - content: "\e024"; -} - -.glyphicon-download-alt:before { - content: "\e025"; -} - -.glyphicon-download:before { - content: "\e026"; -} - -.glyphicon-upload:before { - content: "\e027"; -} - -.glyphicon-inbox:before { - content: "\e028"; -} - -.glyphicon-play-circle:before { - content: "\e029"; -} - -.glyphicon-repeat:before { - content: "\e030"; -} - -.glyphicon-refresh:before { - content: "\e031"; -} - -.glyphicon-list-alt:before { - content: "\e032"; -} - -.glyphicon-flag:before { - content: "\e034"; -} - -.glyphicon-headphones:before { - content: "\e035"; -} - -.glyphicon-volume-off:before { - content: "\e036"; -} - -.glyphicon-volume-down:before { - content: "\e037"; -} - -.glyphicon-volume-up:before { - content: "\e038"; -} - -.glyphicon-qrcode:before { - content: "\e039"; -} - -.glyphicon-barcode:before { - content: "\e040"; -} - -.glyphicon-tag:before { - content: "\e041"; -} - -.glyphicon-tags:before { - content: "\e042"; -} - -.glyphicon-book:before { - content: "\e043"; -} - -.glyphicon-print:before { - content: "\e045"; -} - -.glyphicon-font:before { - content: "\e047"; -} - -.glyphicon-bold:before { - content: "\e048"; -} - -.glyphicon-italic:before { - content: "\e049"; -} - -.glyphicon-text-height:before { - content: "\e050"; -} - -.glyphicon-text-width:before { - content: "\e051"; -} - -.glyphicon-align-left:before { - content: "\e052"; -} - -.glyphicon-align-center:before { - content: "\e053"; -} - -.glyphicon-align-right:before { - content: "\e054"; -} - -.glyphicon-align-justify:before { - content: "\e055"; -} - -.glyphicon-list:before { - content: "\e056"; -} - -.glyphicon-indent-left:before { - content: "\e057"; -} - -.glyphicon-indent-right:before { - content: "\e058"; -} - -.glyphicon-facetime-video:before { - content: "\e059"; -} - -.glyphicon-picture:before { - content: "\e060"; -} - -.glyphicon-map-marker:before { - content: "\e062"; -} - -.glyphicon-adjust:before { - content: "\e063"; -} - -.glyphicon-tint:before { - content: "\e064"; -} - -.glyphicon-edit:before { - content: "\e065"; -} - -.glyphicon-share:before { - content: "\e066"; -} - -.glyphicon-check:before { - content: "\e067"; -} - -.glyphicon-move:before { - content: "\e068"; -} - -.glyphicon-step-backward:before { - content: "\e069"; -} - -.glyphicon-fast-backward:before { - content: "\e070"; -} - -.glyphicon-backward:before { - content: "\e071"; -} - -.glyphicon-play:before { - content: "\e072"; -} - -.glyphicon-pause:before { - content: "\e073"; -} - -.glyphicon-stop:before { - content: "\e074"; -} - -.glyphicon-forward:before { - content: "\e075"; -} - -.glyphicon-fast-forward:before { - content: "\e076"; -} - -.glyphicon-step-forward:before { - content: "\e077"; -} - -.glyphicon-eject:before { - content: "\e078"; -} - -.glyphicon-chevron-left:before { - content: "\e079"; -} - -.glyphicon-chevron-right:before { - content: "\e080"; -} - -.glyphicon-plus-sign:before { - content: "\e081"; -} - -.glyphicon-minus-sign:before { - content: "\e082"; -} - -.glyphicon-remove-sign:before { - content: "\e083"; -} - -.glyphicon-ok-sign:before { - content: "\e084"; -} - -.glyphicon-question-sign:before { - content: "\e085"; -} - -.glyphicon-info-sign:before { - content: "\e086"; -} - -.glyphicon-screenshot:before { - content: "\e087"; -} - -.glyphicon-remove-circle:before { - content: "\e088"; -} - -.glyphicon-ok-circle:before { - content: "\e089"; -} - -.glyphicon-ban-circle:before { - content: "\e090"; -} - -.glyphicon-arrow-left:before { - content: "\e091"; -} - -.glyphicon-arrow-right:before { - content: "\e092"; -} - -.glyphicon-arrow-up:before { - content: "\e093"; -} - -.glyphicon-arrow-down:before { - content: "\e094"; -} - -.glyphicon-share-alt:before { - content: "\e095"; -} - -.glyphicon-resize-full:before { - content: "\e096"; -} - -.glyphicon-resize-small:before { - content: "\e097"; -} - -.glyphicon-exclamation-sign:before { - content: "\e101"; -} - -.glyphicon-gift:before { - content: "\e102"; -} - -.glyphicon-leaf:before { - content: "\e103"; -} - -.glyphicon-eye-open:before { - content: "\e105"; -} - -.glyphicon-eye-close:before { - content: "\e106"; -} - -.glyphicon-warning-sign:before { - content: "\e107"; -} - -.glyphicon-plane:before { - content: "\e108"; -} - -.glyphicon-random:before { - content: "\e110"; -} - -.glyphicon-comment:before { - content: "\e111"; -} - -.glyphicon-magnet:before { - content: "\e112"; -} - -.glyphicon-chevron-up:before { - content: "\e113"; -} - -.glyphicon-chevron-down:before { - content: "\e114"; -} - -.glyphicon-retweet:before { - content: "\e115"; -} - -.glyphicon-shopping-cart:before { - content: "\e116"; -} - -.glyphicon-folder-close:before { - content: "\e117"; -} - -.glyphicon-folder-open:before { - content: "\e118"; -} - -.glyphicon-resize-vertical:before { - content: "\e119"; -} - -.glyphicon-resize-horizontal:before { - content: "\e120"; -} - -.glyphicon-hdd:before { - content: "\e121"; -} - -.glyphicon-bullhorn:before { - content: "\e122"; -} - -.glyphicon-certificate:before { - content: "\e124"; -} - -.glyphicon-thumbs-up:before { - content: "\e125"; -} - -.glyphicon-thumbs-down:before { - content: "\e126"; -} - -.glyphicon-hand-right:before { - content: "\e127"; -} - -.glyphicon-hand-left:before { - content: "\e128"; -} - -.glyphicon-hand-up:before { - content: "\e129"; -} - -.glyphicon-hand-down:before { - content: "\e130"; -} - -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} - -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} - -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} - -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} - -.glyphicon-globe:before { - content: "\e135"; -} - -.glyphicon-tasks:before { - content: "\e137"; -} - -.glyphicon-filter:before { - content: "\e138"; -} - -.glyphicon-fullscreen:before { - content: "\e140"; -} - -.glyphicon-dashboard:before { - content: "\e141"; -} - -.glyphicon-heart-empty:before { - content: "\e143"; -} - -.glyphicon-link:before { - content: "\e144"; -} - -.glyphicon-phone:before { - content: "\e145"; -} - -.glyphicon-usd:before { - content: "\e148"; -} - -.glyphicon-gbp:before { - content: "\e149"; -} - -.glyphicon-sort:before { - content: "\e150"; -} - -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} - -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} - -.glyphicon-sort-by-order:before { - content: "\e153"; -} - -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} - -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} - -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} - -.glyphicon-unchecked:before { - content: "\e157"; -} - -.glyphicon-expand:before { - content: "\e158"; -} - -.glyphicon-collapse-down:before { - content: "\e159"; -} - -.glyphicon-collapse-up:before { - content: "\e160"; -} - -.glyphicon-log-in:before { - content: "\e161"; -} - -.glyphicon-flash:before { - content: "\e162"; -} - -.glyphicon-log-out:before { - content: "\e163"; -} - -.glyphicon-new-window:before { - content: "\e164"; -} - -.glyphicon-record:before { - content: "\e165"; -} - -.glyphicon-save:before { - content: "\e166"; -} - -.glyphicon-open:before { - content: "\e167"; -} - -.glyphicon-saved:before { - content: "\e168"; -} - -.glyphicon-import:before { - content: "\e169"; -} - -.glyphicon-export:before { - content: "\e170"; -} - -.glyphicon-send:before { - content: "\e171"; -} - -.glyphicon-floppy-disk:before { - content: "\e172"; -} - -.glyphicon-floppy-saved:before { - content: "\e173"; -} - -.glyphicon-floppy-remove:before { - content: "\e174"; -} - -.glyphicon-floppy-save:before { - content: "\e175"; -} - -.glyphicon-floppy-open:before { - content: "\e176"; -} - -.glyphicon-credit-card:before { - content: "\e177"; -} - -.glyphicon-transfer:before { - content: "\e178"; -} - -.glyphicon-cutlery:before { - content: "\e179"; -} - -.glyphicon-header:before { - content: "\e180"; -} - -.glyphicon-compressed:before { - content: "\e181"; -} - -.glyphicon-earphone:before { - content: "\e182"; -} - -.glyphicon-phone-alt:before { - content: "\e183"; -} - -.glyphicon-tower:before { - content: "\e184"; -} - -.glyphicon-stats:before { - content: "\e185"; -} - -.glyphicon-sd-video:before { - content: "\e186"; -} - -.glyphicon-hd-video:before { - content: "\e187"; -} - -.glyphicon-subtitles:before { - content: "\e188"; -} - -.glyphicon-sound-stereo:before { - content: "\e189"; -} - -.glyphicon-sound-dolby:before { - content: "\e190"; -} - -.glyphicon-sound-5-1:before { - content: "\e191"; -} - -.glyphicon-sound-6-1:before { - content: "\e192"; -} - -.glyphicon-sound-7-1:before { - content: "\e193"; -} - -.glyphicon-copyright-mark:before { - content: "\e194"; -} - -.glyphicon-registration-mark:before { - content: "\e195"; -} - -.glyphicon-cloud-download:before { - content: "\e197"; -} - -.glyphicon-cloud-upload:before { - content: "\e198"; -} - -.glyphicon-tree-conifer:before { - content: "\e199"; -} - -.glyphicon-tree-deciduous:before { - content: "\e200"; -} - -.glyphicon-briefcase:before { - content: "\1f4bc"; -} - -.glyphicon-calendar:before { - content: "\1f4c5"; -} - -.glyphicon-pushpin:before { - content: "\1f4cc"; -} - -.glyphicon-paperclip:before { - content: "\1f4ce"; -} - -.glyphicon-camera:before { - content: "\1f4f7"; -} - -.glyphicon-lock:before { - content: "\1f512"; -} - -.glyphicon-bell:before { - content: "\1f514"; -} - -.glyphicon-bookmark:before { - content: "\1f516"; -} - -.glyphicon-fire:before { - content: "\1f525"; -} - -.glyphicon-wrench:before { - content: "\1f527"; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-bottom: 0 dotted; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown { - position: relative; -} - -.dropdown-toggle:focus { - outline: 0; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - list-style: none; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} - -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.428571429; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #428bca; -} - -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #428bca; - outline: 0; -} - -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} - -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open > .dropdown-menu { - display: block; -} - -.open > a { - outline: 0; -} - -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.428571429; - color: #999999; -} - -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0 dotted; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } -} - -.btn-default .caret { - border-top-color: #333333; -} - -.btn-primary .caret, -.btn-success .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret { - border-top-color: #fff; -} - -.dropup .btn-default .caret { - border-bottom-color: #333333; -} - -.dropup .btn-primary .caret, -.dropup .btn-success .caret, -.dropup .btn-warning .caret, -.dropup .btn-danger .caret, -.dropup .btn-info .caret { - border-bottom-color: #fff; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} - -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} - -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} - -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus { - outline: none; -} - -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar .btn-group { - float: left; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group, -.btn-toolbar > .btn-group + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} - -.btn-group > .btn:first-child { - margin-left: 0; -} - -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.btn-group > .btn-group { - float: left; -} - -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} - -.btn-group > .btn-group:first-child > .btn:last-child, -.btn-group > .btn-group:first-child > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn-group:last-child > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group-xs > .btn { - padding: 5px 10px; - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} - -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn .caret { - margin-left: 0; -} - -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} - -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} - -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { - display: block; - float: none; - width: 100%; - max-width: 100%; -} - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - -.btn-group-vertical > .btn-group > .btn { - float: none; -} - -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} - -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 0; -} - -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} - -.btn-group-vertical > .btn-group:first-child > .btn:last-child, -.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn-group:last-child > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.btn-group-justified { - display: table; - width: 100%; - border-collapse: separate; - table-layout: fixed; -} - -.btn-group-justified .btn { - display: table-cell; - float: none; - width: 1%; -} - -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; -} - -.input-group { - position: relative; - display: table; - border-collapse: separate; -} - -.input-group.col { - float: none; - padding-right: 0; - padding-left: 0; -} - -.input-group .form-control { - width: 100%; - margin-bottom: 0; -} - -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 45px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 45px; - line-height: 45px; -} - -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn { - height: auto; -} - -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} - -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn { - height: auto; -} - -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} - -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} - -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} - -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; - border-radius: 4px; -} - -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} - -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} - -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group-addon:first-child { - border-right: 0; -} - -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.input-group-addon:last-child { - border-left: 0; -} - -.input-group-btn { - position: relative; - white-space: nowrap; -} - -.input-group-btn > .btn { - position: relative; -} - -.input-group-btn > .btn + .btn { - margin-left: -4px; -} - -.input-group-btn > .btn:hover, -.input-group-btn > .btn:active { - z-index: 2; -} - -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav:before, -.nav:after { - display: table; - content: " "; -} - -.nav:after { - clear: both; -} - -.nav:before, -.nav:after { - display: table; - content: " "; -} - -.nav:after { - clear: both; -} - -.nav > li { - position: relative; - display: block; -} - -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} - -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li.disabled > a { - color: #999999; -} - -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #999999; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} - -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #428bca; -} - -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} - -.nav > li > a > img { - max-width: none; -} - -.nav-tabs { - border-bottom: 1px solid #dddddd; -} - -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} - -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.428571429; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; -} - -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} - -.nav-tabs.nav-justified > li { - float: none; -} - -.nav-tabs.nav-justified > li > a { - text-align: center; -} - -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } -} - -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-bottom: 1px solid #dddddd; -} - -.nav-tabs.nav-justified > .active > a { - border-bottom-color: #ffffff; -} - -.nav-pills > li { - float: left; -} - -.nav-pills > li > a { - border-radius: 5px; -} - -.nav-pills > li + li { - margin-left: 2px; -} - -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #428bca; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} - -.nav-justified { - width: 100%; -} - -.nav-justified > li { - float: none; -} - -.nav-justified > li > a { - text-align: center; -} - -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } -} - -.nav-tabs-justified { - border-bottom: 0; -} - -.nav-tabs-justified > li > a { - margin-right: 0; - border-bottom: 1px solid #dddddd; -} - -.nav-tabs-justified > .active > a { - border-bottom-color: #ffffff; -} - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; -} - -.tabbable:after { - clear: both; -} - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; -} - -.tabbable:after { - clear: both; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.nav .caret { - border-top-color: #428bca; - border-bottom-color: #428bca; -} - -.nav a:hover .caret { - border-top-color: #2a6496; - border-bottom-color: #2a6496; -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.navbar { - position: relative; - z-index: 1000; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} - -.navbar:before, -.navbar:after { - display: table; - content: " "; -} - -.navbar:after { - clear: both; -} - -.navbar:before, -.navbar:after { - display: table; - content: " "; -} - -.navbar:after { - clear: both; -} - -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; -} - -.navbar-header:after { - clear: both; -} - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; -} - -.navbar-header:after { - clear: both; -} - -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} - -.navbar-collapse { - max-height: 340px; - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; -} - -.navbar-collapse:after { - clear: both; -} - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; -} - -.navbar-collapse:after { - clear: both; -} - -.navbar-collapse.in { - overflow-y: auto; -} - -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-collapse .navbar-nav.navbar-left:first-child { - margin-left: -15px; - } - .navbar-collapse .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } - .navbar-collapse .navbar-text:last-child { - margin-right: 0; - } -} - -.container > .navbar-header, -.container > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} - -@media (min-width: 768px) { - .container > .navbar-header, - .container > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} - -.navbar-static-top { - border-width: 0 0 1px; -} - -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - border-width: 0 0 1px; -} - -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} - -.navbar-fixed-top { - top: 0; - z-index: 1030; -} - -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; -} - -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} - -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} - -@media (min-width: 768px) { - .navbar > .container .navbar-brand { - margin-left: -15px; - } -} - -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - border: 1px solid transparent; - border-radius: 4px; -} - -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} - -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} - -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} - -.navbar-nav { - margin: 7.5px -15px; -} - -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} - -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} - -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} - -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } -} - -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); -} - -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } -} - -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } -} - -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} - -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.navbar-nav.pull-right > li > .dropdown-menu, -.navbar-nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} - -.navbar-text { - float: left; - margin-top: 15px; - margin-bottom: 15px; -} - -@media (min-width: 768px) { - .navbar-text { - margin-right: 15px; - margin-left: 15px; - } -} - -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} - -.navbar-default .navbar-brand { - color: #777777; -} - -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} - -.navbar-default .navbar-text { - color: #777777; -} - -.navbar-default .navbar-nav > li > a { - color: #777777; -} - -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} - -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} - -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} - -.navbar-default .navbar-toggle { - border-color: #dddddd; -} - -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} - -.navbar-default .navbar-toggle .icon-bar { - background-color: #cccccc; -} - -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e6e6e6; -} - -.navbar-default .navbar-nav > .dropdown > a:hover .caret, -.navbar-default .navbar-nav > .dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} - -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555555; - background-color: #e7e7e7; -} - -.navbar-default .navbar-nav > .open > a .caret, -.navbar-default .navbar-nav > .open > a:hover .caret, -.navbar-default .navbar-nav > .open > a:focus .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar-default .navbar-nav > .dropdown > a .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} - -.navbar-default .navbar-link { - color: #777777; -} - -.navbar-default .navbar-link:hover { - color: #333333; -} - -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} - -.navbar-inverse .navbar-brand { - color: #999999; -} - -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .navbar-nav > li > a { - color: #999999; -} - -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} - -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} - -.navbar-inverse .navbar-toggle { - border-color: #333333; -} - -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} - -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} - -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} - -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #ffffff; - background-color: #080808; -} - -.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-nav > .dropdown > a .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .navbar-nav > .open > a .caret, -.navbar-inverse .navbar-nav > .open > a:hover .caret, -.navbar-inverse .navbar-nav > .open > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #999999; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} - -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; -} - -.breadcrumb > li + li:before { - padding: 0 5px; - color: #cccccc; - content: "/\00a0"; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} - -.pagination > li { - display: inline; -} - -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.428571429; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; -} - -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} - -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - background-color: #eeeeee; -} - -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 2; - color: #ffffff; - cursor: default; - background-color: #428bca; - border-color: #428bca; -} - -.pagination > .disabled > span, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #999999; - cursor: not-allowed; - background-color: #ffffff; - border-color: #dddddd; -} - -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; -} - -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} - -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} - -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; -} - -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} - -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} - -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} - -.pager:before, -.pager:after { - display: table; - content: " "; -} - -.pager:after { - clear: both; -} - -.pager:before, -.pager:after { - display: table; - content: " "; -} - -.pager:after { - clear: both; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} - -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.pager .next > a, -.pager .next > span { - float: right; -} - -.pager .previous > a, -.pager .previous > span { - float: left; -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - cursor: not-allowed; - background-color: #ffffff; -} - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} - -.label[href]:hover, -.label[href]:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label:empty { - display: none; -} - -.label-default { - background-color: #999999; -} - -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #808080; -} - -.label-primary { - background-color: #428bca; -} - -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #3071a9; -} - -.label-success { - background-color: #5cb85c; -} - -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} - -.label-info { - background-color: #5bc0de; -} - -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} - -.label-warning { - background-color: #f0ad4e; -} - -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} - -.label-danger { - background-color: #d9534f; -} - -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} - -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; - border-radius: 10px; -} - -.badge:empty { - display: none; -} - -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.btn .badge { - position: relative; - top: -1px; -} - -a.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #428bca; - background-color: #ffffff; -} - -.nav-pills > li > a > .badge { - margin-left: 3px; -} - -.jumbotron { - padding: 30px; - margin-bottom: 30px; - font-size: 21px; - font-weight: 200; - line-height: 2.1428571435; - color: inherit; - background-color: #eeeeee; -} - -.jumbotron h1 { - line-height: 1; - color: inherit; -} - -.jumbotron p { - line-height: 1.4; -} - -.container .jumbotron { - border-radius: 6px; -} - -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1 { - font-size: 63px; - } -} - -.thumbnail { - display: inline-block; - display: block; - height: auto; - max-width: 100%; - padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -.thumbnail > img { - display: block; - height: auto; - max-width: 100%; -} - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #428bca; -} - -.thumbnail > img { - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #333333; -} - -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} - -.alert h4 { - margin-top: 0; - color: inherit; -} - -.alert .alert-link { - font-weight: bold; -} - -.alert > p, -.alert > ul { - margin-bottom: 0; -} - -.alert > p + p { - margin-top: 5px; -} - -.alert-dismissable { - padding-right: 35px; -} - -.alert-dismissable .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success hr { - border-top-color: #c9e2b3; -} - -.alert-success .alert-link { - color: #356635; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info hr { - border-top-color: #a6e1ec; -} - -.alert-info .alert-link { - color: #2d6987; -} - -.alert-warning { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.alert-warning hr { - border-top-color: #f8e5be; -} - -.alert-warning .alert-link { - color: #a47e3c; -} - -.alert-danger { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger hr { - border-top-color: #e6c1c7; -} - -.alert-danger .alert-link { - color: #953b39; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - background-color: #428bca; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress-striped .progress-bar { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} - -.progress.active .progress-bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-bar-success { - background-color: #5cb85c; -} - -.progress-striped .progress-bar-success { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-info { - background-color: #5bc0de; -} - -.progress-striped .progress-bar-info { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-warning { - background-color: #f0ad4e; -} - -.progress-striped .progress-bar-warning { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-danger { - background-color: #d9534f; -} - -.progress-striped .progress-bar-danger { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.media, -.media-body { - overflow: hidden; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media > .pull-left { - margin-right: 10px; -} - -.media > .pull-right { - margin-left: 10px; -} - -.media-list { - padding-left: 0; - list-style: none; -} - -.list-group { - padding-left: 0; - margin-bottom: 20px; -} - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} - -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} - -.list-group-item > .badge { - float: right; -} - -.list-group-item > .badge + .badge { - margin-right: 5px; -} - -a.list-group-item { - color: #555555; -} - -a.list-group-item .list-group-item-heading { - color: #333333; -} - -a.list-group-item:hover, -a.list-group-item:focus { - text-decoration: none; - background-color: #f5f5f5; -} - -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} - -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading { - color: inherit; -} - -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #e1edf7; -} - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} - -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} - -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.panel-body { - padding: 15px; -} - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - -.panel > .list-group { - margin-bottom: 0; -} - -.panel > .list-group .list-group-item { - border-width: 1px 0; -} - -.panel > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.panel > .list-group .list-group-item:last-child { - border-bottom: 0; -} - -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} - -.panel > .table { - margin-bottom: 0; -} - -.panel > .panel-body + .table { - border-top: 1px solid #dddddd; -} - -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} - -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; -} - -.panel-title > a { - color: inherit; -} - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} - -.panel-group .panel { - margin-bottom: 0; - overflow: hidden; - border-radius: 4px; -} - -.panel-group .panel + .panel { - margin-top: 5px; -} - -.panel-group .panel-heading { - border-bottom: 0; -} - -.panel-group .panel-heading + .panel-collapse .panel-body { - border-top: 1px solid #dddddd; -} - -.panel-group .panel-footer { - border-top: 0; -} - -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} - -.panel-default { - border-color: #dddddd; -} - -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; -} - -.panel-default > .panel-heading + .panel-collapse .panel-body { - border-top-color: #dddddd; -} - -.panel-default > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #dddddd; -} - -.panel-primary { - border-color: #428bca; -} - -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} - -.panel-primary > .panel-heading + .panel-collapse .panel-body { - border-top-color: #428bca; -} - -.panel-primary > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #428bca; -} - -.panel-success { - border-color: #d6e9c6; -} - -.panel-success > .panel-heading { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.panel-success > .panel-heading + .panel-collapse .panel-body { - border-top-color: #d6e9c6; -} - -.panel-success > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #d6e9c6; -} - -.panel-warning { - border-color: #fbeed5; -} - -.panel-warning > .panel-heading { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.panel-warning > .panel-heading + .panel-collapse .panel-body { - border-top-color: #fbeed5; -} - -.panel-warning > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #fbeed5; -} - -.panel-danger { - border-color: #eed3d7; -} - -.panel-danger > .panel-heading { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.panel-danger > .panel-heading + .panel-collapse .panel-body { - border-top-color: #eed3d7; -} - -.panel-danger > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #eed3d7; -} - -.panel-info { - border-color: #bce8f1; -} - -.panel-info > .panel-heading { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.panel-info > .panel-heading + .panel-collapse .panel-body { - border-top-color: #bce8f1; -} - -.panel-info > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #bce8f1; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - -.well-lg { - padding: 24px; - border-radius: 6px; -} - -.well-sm { - padding: 9px; - border-radius: 3px; -} - -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.modal-open { - overflow: hidden; -} - -body.modal-open, -.modal-open .navbar-fixed-top, -.modal-open .navbar-fixed-bottom { - margin-right: 15px; -} - -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - display: none; - overflow: auto; - overflow-y: scroll; -} - -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} - -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); -} - -.modal-dialog { - z-index: 1050; - width: auto; - padding: 10px; - margin-right: auto; - margin-left: auto; -} - -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} - -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} - -.modal-header { - min-height: 16.428571429px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} - -.modal-header .close { - margin-top: -2px; -} - -.modal-title { - margin: 0; - line-height: 1.428571429; -} - -.modal-body { - position: relative; - padding: 20px; -} - -.modal-footer { - padding: 19px 20px 20px; - margin-top: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -@media screen and (min-width: 768px) { - .modal-dialog { - right: auto; - left: 50%; - width: 600px; - padding-top: 30px; - padding-bottom: 30px; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 12px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.top-left .tooltip-arrow { - bottom: 0; - left: 5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.top-right .tooltip-arrow { - right: 5px; - bottom: 0; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.tooltip.bottom-left .tooltip-arrow { - top: 0; - left: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.tooltip.bottom-right .tooltip-arrow { - top: 0; - right: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover .arrow { - border-width: 11px; -} - -.popover .arrow:after { - border-width: 10px; - content: ""; -} - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; - content: " "; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; - content: " "; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; - content: " "; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; - content: " "; -} - -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - height: auto; - max-width: 100%; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.left { - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} - -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} - -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - left: 50%; - z-index: 5; - display: inline-block; -} - -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - font-family: serif; -} - -.carousel-control .icon-prev:before { - content: '\2039'; -} - -.carousel-control .icon-next:before { - content: '\203a'; -} - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} - -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - border: 1px solid #ffffff; - border-radius: 10px; -} - -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #ffffff; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} - -.carousel-caption .btn { - text-shadow: none; -} - -@media screen and (min-width: 768px) { - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - margin-left: -15px; - font-size: 30px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} - -.clearfix:before, -.clearfix:after { - display: table; - content: " "; -} - -.clearfix:after { - clear: both; -} - -.pull-right { - float: right !important; -} - -.pull-left { - float: left !important; -} - -.hide { - display: none !important; -} - -.show { - display: block !important; -} - -.invisible { - visibility: hidden; -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.affix { - position: fixed; -} - -@-ms-viewport { - width: device-width; -} - -@media screen and (max-width: 400px) { - @-ms-viewport { - width: 320px; - } -} - -.hidden { - display: none !important; - visibility: hidden !important; -} - -.visible-xs { - display: none !important; -} - -tr.visible-xs { - display: none !important; -} - -th.visible-xs, -td.visible-xs { - display: none !important; -} - -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-xs.visible-sm { - display: block !important; - } - tr.visible-xs.visible-sm { - display: table-row !important; - } - th.visible-xs.visible-sm, - td.visible-xs.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-xs.visible-md { - display: block !important; - } - tr.visible-xs.visible-md { - display: table-row !important; - } - th.visible-xs.visible-md, - td.visible-xs.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-xs.visible-lg { - display: block !important; - } - tr.visible-xs.visible-lg { - display: table-row !important; - } - th.visible-xs.visible-lg, - td.visible-xs.visible-lg { - display: table-cell !important; - } -} - -.visible-sm { - display: none !important; -} - -tr.visible-sm { - display: none !important; -} - -th.visible-sm, -td.visible-sm { - display: none !important; -} - -@media (max-width: 767px) { - .visible-sm.visible-xs { - display: block !important; - } - tr.visible-sm.visible-xs { - display: table-row !important; - } - th.visible-sm.visible-xs, - td.visible-sm.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-sm.visible-md { - display: block !important; - } - tr.visible-sm.visible-md { - display: table-row !important; - } - th.visible-sm.visible-md, - td.visible-sm.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-sm.visible-lg { - display: block !important; - } - tr.visible-sm.visible-lg { - display: table-row !important; - } - th.visible-sm.visible-lg, - td.visible-sm.visible-lg { - display: table-cell !important; - } -} - -.visible-md { - display: none !important; -} - -tr.visible-md { - display: none !important; -} - -th.visible-md, -td.visible-md { - display: none !important; -} - -@media (max-width: 767px) { - .visible-md.visible-xs { - display: block !important; - } - tr.visible-md.visible-xs { - display: table-row !important; - } - th.visible-md.visible-xs, - td.visible-md.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-md.visible-sm { - display: block !important; - } - tr.visible-md.visible-sm { - display: table-row !important; - } - th.visible-md.visible-sm, - td.visible-md.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-md.visible-lg { - display: block !important; - } - tr.visible-md.visible-lg { - display: table-row !important; - } - th.visible-md.visible-lg, - td.visible-md.visible-lg { - display: table-cell !important; - } -} - -.visible-lg { - display: none !important; -} - -tr.visible-lg { - display: none !important; -} - -th.visible-lg, -td.visible-lg { - display: none !important; -} - -@media (max-width: 767px) { - .visible-lg.visible-xs { - display: block !important; - } - tr.visible-lg.visible-xs { - display: table-row !important; - } - th.visible-lg.visible-xs, - td.visible-lg.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-lg.visible-sm { - display: block !important; - } - tr.visible-lg.visible-sm { - display: table-row !important; - } - th.visible-lg.visible-sm, - td.visible-lg.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-lg.visible-md { - display: block !important; - } - tr.visible-lg.visible-md { - display: table-row !important; - } - th.visible-lg.visible-md, - td.visible-lg.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} - -.hidden-xs { - display: block !important; -} - -tr.hidden-xs { - display: table-row !important; -} - -th.hidden-xs, -td.hidden-xs { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } - tr.hidden-xs { - display: none !important; - } - th.hidden-xs, - td.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-xs.hidden-sm { - display: none !important; - } - tr.hidden-xs.hidden-sm { - display: none !important; - } - th.hidden-xs.hidden-sm, - td.hidden-xs.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-xs.hidden-md { - display: none !important; - } - tr.hidden-xs.hidden-md { - display: none !important; - } - th.hidden-xs.hidden-md, - td.hidden-xs.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-xs.hidden-lg { - display: none !important; - } - tr.hidden-xs.hidden-lg { - display: none !important; - } - th.hidden-xs.hidden-lg, - td.hidden-xs.hidden-lg { - display: none !important; - } -} - -.hidden-sm { - display: block !important; -} - -tr.hidden-sm { - display: table-row !important; -} - -th.hidden-sm, -td.hidden-sm { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-sm.hidden-xs { - display: none !important; - } - tr.hidden-sm.hidden-xs { - display: none !important; - } - th.hidden-sm.hidden-xs, - td.hidden-sm.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } - tr.hidden-sm { - display: none !important; - } - th.hidden-sm, - td.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-sm.hidden-md { - display: none !important; - } - tr.hidden-sm.hidden-md { - display: none !important; - } - th.hidden-sm.hidden-md, - td.hidden-sm.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-sm.hidden-lg { - display: none !important; - } - tr.hidden-sm.hidden-lg { - display: none !important; - } - th.hidden-sm.hidden-lg, - td.hidden-sm.hidden-lg { - display: none !important; - } -} - -.hidden-md { - display: block !important; -} - -tr.hidden-md { - display: table-row !important; -} - -th.hidden-md, -td.hidden-md { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-md.hidden-xs { - display: none !important; - } - tr.hidden-md.hidden-xs { - display: none !important; - } - th.hidden-md.hidden-xs, - td.hidden-md.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-md.hidden-sm { - display: none !important; - } - tr.hidden-md.hidden-sm { - display: none !important; - } - th.hidden-md.hidden-sm, - td.hidden-md.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } - tr.hidden-md { - display: none !important; - } - th.hidden-md, - td.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-md.hidden-lg { - display: none !important; - } - tr.hidden-md.hidden-lg { - display: none !important; - } - th.hidden-md.hidden-lg, - td.hidden-md.hidden-lg { - display: none !important; - } -} - -.hidden-lg { - display: block !important; -} - -tr.hidden-lg { - display: table-row !important; -} - -th.hidden-lg, -td.hidden-lg { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-lg.hidden-xs { - display: none !important; - } - tr.hidden-lg.hidden-xs { - display: none !important; - } - th.hidden-lg.hidden-xs, - td.hidden-lg.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-lg.hidden-sm { - display: none !important; - } - tr.hidden-lg.hidden-sm { - display: none !important; - } - th.hidden-lg.hidden-sm, - td.hidden-lg.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-lg.hidden-md { - display: none !important; - } - tr.hidden-lg.hidden-md { - display: none !important; - } - th.hidden-lg.hidden-md, - td.hidden-lg.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } - tr.hidden-lg { - display: none !important; - } - th.hidden-lg, - td.hidden-lg { - display: none !important; - } -} - -.visible-print { - display: none !important; -} - -tr.visible-print { - display: none !important; -} - -th.visible-print, -td.visible-print { - display: none !important; -} - -@media print { - .visible-print { - display: block !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } - .hidden-print { - display: none !important; - } - tr.hidden-print { - display: none !important; - } - th.hidden-print, - td.hidden-print { - display: none !important; - } -} \ No newline at end of file diff --git a/awx/ui/static/css/bootstrap.min.css b/awx/ui/static/css/bootstrap.min.css deleted file mode 100644 index a553c4f5e0..0000000000 --- a/awx/ui/static/css/bootstrap.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap v3.0.0 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/awx/ui/static/css/select2-bootstrap.css b/awx/ui/static/css/select2-bootstrap.css deleted file mode 100644 index 909971074c..0000000000 --- a/awx/ui/static/css/select2-bootstrap.css +++ /dev/null @@ -1,87 +0,0 @@ -.form-control .select2-choice { - border: 0; - border-radius: 2px; -} - -.form-control .select2-choice .select2-arrow { - border-radius: 0 2px 2px 0; -} - -.form-control.select2-container { - height: auto !important; - padding: 0px; -} - -.form-control.select2-container.select2-dropdown-open { - border-color: #5897FB; - border-radius: 3px 3px 0 0; -} - -.form-control .select2-container.select2-dropdown-open .select2-choices { - border-radius: 3px 3px 0 0; -} - -.form-control.select2-container .select2-choices { - border: 0 !important; - border-radius: 3px; -} - -.control-group.warning .select2-container .select2-choice, -.control-group.warning .select2-container .select2-choices, -.control-group.warning .select2-container-active .select2-choice, -.control-group.warning .select2-container-active .select2-choices, -.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice, -.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices, -.control-group.warning .select2-container-multi.select2-container-active .select2-choices { - border: 1px solid #C09853 !important; -} - -.control-group.warning .select2-container .select2-choice div { - border-left: 1px solid #C09853 !important; - background: #FCF8E3 !important; -} - -.control-group.error .select2-container .select2-choice, -.control-group.error .select2-container .select2-choices, -.control-group.error .select2-container-active .select2-choice, -.control-group.error .select2-container-active .select2-choices, -.control-group.error .select2-dropdown-open.select2-drop-above .select2-choice, -.control-group.error .select2-dropdown-open.select2-drop-above .select2-choices, -.control-group.error .select2-container-multi.select2-container-active .select2-choices { - border: 1px solid #B94A48 !important; -} - -.control-group.error .select2-container .select2-choice div { - border-left: 1px solid #B94A48 !important; - background: #F2DEDE !important; -} - -.control-group.info .select2-container .select2-choice, -.control-group.info .select2-container .select2-choices, -.control-group.info .select2-container-active .select2-choice, -.control-group.info .select2-container-active .select2-choices, -.control-group.info .select2-dropdown-open.select2-drop-above .select2-choice, -.control-group.info .select2-dropdown-open.select2-drop-above .select2-choices, -.control-group.info .select2-container-multi.select2-container-active .select2-choices { - border: 1px solid #3A87AD !important; -} - -.control-group.info .select2-container .select2-choice div { - border-left: 1px solid #3A87AD !important; - background: #D9EDF7 !important; -} - -.control-group.success .select2-container .select2-choice, -.control-group.success .select2-container .select2-choices, -.control-group.success .select2-container-active .select2-choice, -.control-group.success .select2-container-active .select2-choices, -.control-group.success .select2-dropdown-open.select2-drop-above .select2-choice, -.control-group.success .select2-dropdown-open.select2-drop-above .select2-choices, -.control-group.success .select2-container-multi.select2-container-active .select2-choices { - border: 1px solid #468847 !important; -} - -.control-group.success .select2-container .select2-choice div { - border-left: 1px solid #468847 !important; - background: #DFF0D8 !important; -} diff --git a/awx/ui/static/css/select2-spinner.gif b/awx/ui/static/css/select2-spinner.gif deleted file mode 100644 index 5b33f7e54f..0000000000 Binary files a/awx/ui/static/css/select2-spinner.gif and /dev/null differ diff --git a/awx/ui/static/css/select2.css b/awx/ui/static/css/select2.css deleted file mode 100644 index 2b32ed6f28..0000000000 --- a/awx/ui/static/css/select2.css +++ /dev/null @@ -1,615 +0,0 @@ -/* -Version: 3.4.5 Timestamp: Mon Nov 4 08:22:42 PST 2013 -*/ -.select2-container { - margin: 0; - position: relative; - display: inline-block; - /* inline-block for ie7 */ - zoom: 1; - *display: inline; - vertical-align: middle; -} - -.select2-container, -.select2-drop, -.select2-search, -.select2-search input { - /* - Force border-box so that % widths fit the parent - container without overlap because of margin/padding. - - More Info : http://www.quirksmode.org/css/box.html - */ - -webkit-box-sizing: border-box; /* webkit */ - -moz-box-sizing: border-box; /* firefox */ - box-sizing: border-box; /* css3 */ -} - -.select2-container .select2-choice { - display: block; - height: 26px; - padding: 0 0 0 8px; - overflow: hidden; - position: relative; - - border: 1px solid #aaa; - white-space: nowrap; - line-height: 26px; - color: #444; - text-decoration: none; - - border-radius: 4px; - - background-clip: padding-box; - - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - background-color: #fff; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff)); - background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%); - background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0); - background-image: linear-gradient(top, #fff 0%, #eee 50%); -} - -.select2-container.select2-drop-above .select2-choice { - border-bottom-color: #aaa; - - border-radius: 0 0 4px 4px; - - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff)); - background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%); - background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0); - background-image: linear-gradient(top, #eee 0%, #fff 90%); -} - -.select2-container.select2-allowclear .select2-choice .select2-chosen { - margin-right: 42px; -} - -.select2-container .select2-choice > .select2-chosen { - margin-right: 26px; - display: block; - overflow: hidden; - - white-space: nowrap; - - text-overflow: ellipsis; -} - -.select2-container .select2-choice abbr { - display: none; - width: 12px; - height: 12px; - position: absolute; - right: 24px; - top: 8px; - - font-size: 1px; - text-decoration: none; - - border: 0; - background: url('select2.png') right top no-repeat; - cursor: pointer; - outline: 0; -} - -.select2-container.select2-allowclear .select2-choice abbr { - display: inline-block; -} - -.select2-container .select2-choice abbr:hover { - background-position: right -11px; - cursor: pointer; -} - -.select2-drop-mask { - border: 0; - margin: 0; - padding: 0; - position: fixed; - left: 0; - top: 0; - min-height: 100%; - min-width: 100%; - height: auto; - width: auto; - opacity: 0; - z-index: 9998; - /* styles required for IE to work */ - background-color: #fff; - filter: alpha(opacity=0); -} - -.select2-drop { - width: 100%; - margin-top: -1px; - position: absolute; - z-index: 9999; - top: 100%; - - background: #fff; - color: #000; - border: 1px solid #aaa; - border-top: 0; - - border-radius: 0 0 4px 4px; - - -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); - box-shadow: 0 4px 5px rgba(0, 0, 0, .15); -} - -.select2-drop-auto-width { - border-top: 1px solid #aaa; - width: auto; -} - -.select2-drop-auto-width .select2-search { - padding-top: 4px; -} - -.select2-drop.select2-drop-above { - margin-top: 1px; - border-top: 1px solid #aaa; - border-bottom: 0; - - border-radius: 4px 4px 0 0; - - -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); - box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); -} - -.select2-drop-active { - border: 1px solid #5897fb; - border-top: none; -} - -.select2-drop.select2-drop-above.select2-drop-active { - border-top: 1px solid #5897fb; -} - -.select2-container .select2-choice .select2-arrow { - display: inline-block; - width: 18px; - height: 100%; - position: absolute; - right: 0; - top: 0; - - border-left: 1px solid #aaa; - border-radius: 0 4px 4px 0; - - background-clip: padding-box; - - background: #ccc; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); - background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); - background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0); - background-image: linear-gradient(top, #ccc 0%, #eee 60%); -} - -.select2-container .select2-choice .select2-arrow b { - display: block; - width: 100%; - height: 100%; - background: url('select2.png') no-repeat 0 1px; -} - -.select2-search { - display: inline-block; - width: 100%; - min-height: 26px; - margin: 0; - padding-left: 4px; - padding-right: 4px; - - position: relative; - z-index: 10000; - - white-space: nowrap; -} - -.select2-search input { - width: 100%; - height: auto !important; - min-height: 26px; - padding: 4px 20px 4px 5px; - margin: 0; - - outline: 0; - font-family: sans-serif; - font-size: 1em; - - border: 1px solid #aaa; - border-radius: 0; - - -webkit-box-shadow: none; - box-shadow: none; - - background: #fff url('select2.png') no-repeat 100% -22px; - background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); - background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #fff 85%, #eee 99%); -} - -.select2-drop.select2-drop-above .select2-search input { - margin-top: 4px; -} - -.select2-search input.select2-active { - background: #fff url('select2-spinner.gif') no-repeat 100%; - background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); - background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); - background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(top, #fff 85%, #eee 99%); -} - -.select2-container-active .select2-choice, -.select2-container-active .select2-choices { - border: 1px solid #5897fb; - outline: none; - - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); - box-shadow: 0 0 5px rgba(0, 0, 0, .3); -} - -.select2-dropdown-open .select2-choice { - border-bottom-color: transparent; - -webkit-box-shadow: 0 1px 0 #fff inset; - box-shadow: 0 1px 0 #fff inset; - - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - - background-color: #eee; - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee)); - background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%); - background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); - background-image: linear-gradient(top, #fff 0%, #eee 50%); -} - -.select2-dropdown-open.select2-drop-above .select2-choice, -.select2-dropdown-open.select2-drop-above .select2-choices { - border: 1px solid #5897fb; - border-top-color: transparent; - - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee)); - background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%); - background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); - background-image: linear-gradient(bottom, #fff 0%, #eee 50%); -} - -.select2-dropdown-open .select2-choice .select2-arrow { - background: transparent; - border-left: none; - filter: none; -} -.select2-dropdown-open .select2-choice .select2-arrow b { - background-position: -18px 1px; -} - -/* results */ -.select2-results { - max-height: 200px; - padding: 0 0 0 4px; - margin: 4px 4px 4px 0; - position: relative; - overflow-x: hidden; - overflow-y: auto; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -.select2-results ul.select2-result-sub { - margin: 0; - padding-left: 0; -} - -.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px } -.select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px } -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px } -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px } -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px } -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px } -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px } - -.select2-results li { - list-style: none; - display: list-item; - background-image: none; -} - -.select2-results li.select2-result-with-children > .select2-result-label { - font-weight: bold; -} - -.select2-results .select2-result-label { - padding: 3px 7px 4px; - margin: 0; - cursor: pointer; - - min-height: 1em; - - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.select2-results .select2-highlighted { - background: #3875d7; - color: #fff; -} - -.select2-results li em { - background: #feffde; - font-style: normal; -} - -.select2-results .select2-highlighted em { - background: transparent; -} - -.select2-results .select2-highlighted ul { - background: #fff; - color: #000; -} - - -.select2-results .select2-no-results, -.select2-results .select2-searching, -.select2-results .select2-selection-limit { - background: #f4f4f4; - display: list-item; -} - -/* -disabled look for disabled choices in the results dropdown -*/ -.select2-results .select2-disabled.select2-highlighted { - color: #666; - background: #f4f4f4; - display: list-item; - cursor: default; -} -.select2-results .select2-disabled { - background: #f4f4f4; - display: list-item; - cursor: default; -} - -.select2-results .select2-selected { - display: none; -} - -.select2-more-results.select2-active { - background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%; -} - -.select2-more-results { - background: #f4f4f4; - display: list-item; -} - -/* disabled styles */ - -.select2-container.select2-container-disabled .select2-choice { - background-color: #f4f4f4; - background-image: none; - border: 1px solid #ddd; - cursor: default; -} - -.select2-container.select2-container-disabled .select2-choice .select2-arrow { - background-color: #f4f4f4; - background-image: none; - border-left: 0; -} - -.select2-container.select2-container-disabled .select2-choice abbr { - display: none; -} - - -/* multiselect */ - -.select2-container-multi .select2-choices { - height: auto !important; - height: 1%; - margin: 0; - padding: 0; - position: relative; - - border: 1px solid #aaa; - cursor: text; - overflow: hidden; - - background-color: #fff; - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff)); - background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%); - background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%); - background-image: linear-gradient(top, #eee 1%, #fff 15%); -} - -.select2-locked { - padding: 3px 5px 3px 5px !important; -} - -.select2-container-multi .select2-choices { - min-height: 26px; -} - -.select2-container-multi.select2-container-active .select2-choices { - border: 1px solid #5897fb; - outline: none; - - -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); - box-shadow: 0 0 5px rgba(0, 0, 0, .3); -} -.select2-container-multi .select2-choices li { - float: left; - list-style: none; -} -.select2-container-multi .select2-choices .select2-search-field { - margin: 0; - padding: 0; - white-space: nowrap; -} - -.select2-container-multi .select2-choices .select2-search-field input { - padding: 5px; - margin: 1px 0; - - font-family: sans-serif; - font-size: 100%; - color: #666; - outline: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - background: transparent !important; -} - -.select2-container-multi .select2-choices .select2-search-field input.select2-active { - background: #fff url('select2-spinner.gif') no-repeat 100% !important; -} - -.select2-default { - color: #999 !important; -} - -.select2-container-multi .select2-choices .select2-search-choice { - padding: 3px 5px 3px 18px; - margin: 3px 0 3px 5px; - position: relative; - - line-height: 13px; - color: #333; - cursor: default; - border: 1px solid #aaaaaa; - - border-radius: 3px; - - -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); - box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); - - background-clip: padding-box; - - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - background-color: #e4e4e4; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0); - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); - background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); - background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); - background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); -} -.select2-container-multi .select2-choices .select2-search-choice .select2-chosen { - cursor: default; -} -.select2-container-multi .select2-choices .select2-search-choice-focus { - background: #d4d4d4; -} - -.select2-search-choice-close { - display: block; - width: 12px; - height: 13px; - position: absolute; - right: 3px; - top: 4px; - - font-size: 1px; - outline: none; - background: url('select2.png') right top no-repeat; -} - -.select2-container-multi .select2-search-choice-close { - left: 3px; -} - -.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover { - background-position: right -11px; -} -.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close { - background-position: right -11px; -} - -/* disabled styles */ -.select2-container-multi.select2-container-disabled .select2-choices { - background-color: #f4f4f4; - background-image: none; - border: 1px solid #ddd; - cursor: default; -} - -.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { - padding: 3px 5px 3px 5px; - border: 1px solid #ddd; - background-image: none; - background-color: #f4f4f4; -} - -.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none; - background: none; -} -/* end multiselect */ - - -.select2-result-selectable .select2-match, -.select2-result-unselectable .select2-match { - text-decoration: underline; -} - -.select2-offscreen, .select2-offscreen:focus { - clip: rect(0 0 0 0) !important; - width: 1px !important; - height: 1px !important; - border: 0 !important; - margin: 0 !important; - padding: 0 !important; - overflow: hidden !important; - position: absolute !important; - outline: 0 !important; - left: 0px !important; - top: 0px !important; -} - -.select2-display-none { - display: none; -} - -.select2-measure-scrollbar { - position: absolute; - top: -10000px; - left: -10000px; - width: 100px; - height: 100px; - overflow: scroll; -} -/* Retina-ize icons */ - -@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) { - .select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice .select2-arrow b { - background-image: url('select2x2.png') !important; - background-repeat: no-repeat !important; - background-size: 60px 40px !important; - } - .select2-search input { - background-position: 100% -21px !important; - } -} diff --git a/awx/ui/static/css/select2.png b/awx/ui/static/css/select2.png deleted file mode 100644 index 1d804ffb99..0000000000 Binary files a/awx/ui/static/css/select2.png and /dev/null differ diff --git a/awx/ui/static/css/select2x2.png b/awx/ui/static/css/select2x2.png deleted file mode 100644 index 4bdd5c961d..0000000000 Binary files a/awx/ui/static/css/select2x2.png and /dev/null differ diff --git a/awx/ui/static/js/app.js b/awx/ui/static/js/app.js index a95a888464..22de6ed5b7 100644 --- a/awx/ui/static/js/app.js +++ b/awx/ui/static/js/app.js @@ -4,23 +4,25 @@ * Our main application mdoule. Declare application routes and perform initialization chores. * */ - var urlPrefix = $basePath; angular.module('ansible', [ + 'ngRoute', + 'ngSanitize', + 'ngCookies', 'RestServices', 'AuthService', 'Utilities', - 'OrganizationFormDefinition', + 'OrganizationFormDefinition', 'UserFormDefinition', 'FormGenerator', 'OrganizationListDefinition', - 'UserListDefinition', + 'UserListDefinition', 'UserHelper', - 'ListGenerator', + 'ListGenerator', 'PromptDialog', - 'ApiLoader', - 'RelatedSearchHelper', + 'ApiLoader', + 'RelatedSearchHelper', 'SearchHelper', 'PaginationHelpers', 'RefreshHelper', @@ -58,6 +60,7 @@ angular.module('ansible', [ 'JobFormDefinition', 'JobEventsListDefinition', 'JobEventDataDefinition', + 'JobEventsFormDefinition', 'JobHostDefinition', 'JobSummaryDefinition', 'ParseHelper', @@ -75,9 +78,7 @@ angular.module('ansible', [ 'ObjectCountWidget', 'StreamWidget', 'JobsHelper', - 'InventoryStatusDefinition', 'InventoryGroupsHelpDefinition', - 'InventoryHostsHelpDefinition', 'InventoryTree', 'CredentialsHelper', 'TimerService', @@ -85,253 +86,368 @@ angular.module('ansible', [ 'HomeGroupListDefinition', 'HomeHostListDefinition', 'ActivityDetailDefinition' - ]) - .config(['$routeProvider', function($routeProvider) { - $routeProvider. - when('/jobs', - { templateUrl: urlPrefix + 'partials/jobs.html', controller: JobsListCtrl }). +]) + .config(['$routeProvider', + function ($routeProvider) { + $routeProvider. + when('/jobs', { + templateUrl: urlPrefix + 'partials/jobs.html', + controller: 'JobsListCtrl' + }). - when('/jobs/:id', - { templateUrl: urlPrefix + 'partials/jobs.html', controller: JobsEdit }). + when('/jobs/:id', { + templateUrl: urlPrefix + 'partials/jobs.html', + controller: 'JobsEdit' + }). - when('/jobs/:id/job_events', - { templateUrl: urlPrefix + 'partials/jobs.html', controller: JobEventsList }). + when('/jobs/:id/job_events', { + templateUrl: urlPrefix + 'partials/jobs.html', + controller: 'JobEventsList' + }). - when('/jobs/:id/job_host_summaries', - { templateUrl: urlPrefix + 'partials/jobs.html', controller: JobHostSummaryList }). - - when('/jobs/:job_id/job_events/:event_id', - { templateUrl: urlPrefix + 'partials/jobs.html', controller: JobEventsEdit }). + when('/jobs/:id/job_host_summaries', { + templateUrl: urlPrefix + 'partials/jobs.html', + controller: 'JobHostSummaryList' + }). - when('/job_templates', - { templateUrl: urlPrefix + 'partials/job_templates.html', controller: JobTemplatesList }). - - when('/job_templates/add', - { templateUrl: urlPrefix + 'partials/job_templates.html', controller: JobTemplatesAdd }). + when('/jobs/:job_id/job_events/:event_id', { + templateUrl: urlPrefix + 'partials/jobs.html', + controller: 'JobEventsEdit' + }). - when('/job_templates/:id', - { templateUrl: urlPrefix + 'partials/job_templates.html', controller: JobTemplatesEdit }). + when('/job_templates', { + templateUrl: urlPrefix + 'partials/job_templates.html', + controller: 'JobTemplatesList' + }). - when('/projects', - { templateUrl: urlPrefix + 'partials/projects.html', controller: ProjectsList }). + when('/job_templates/add', { + templateUrl: urlPrefix + 'partials/job_templates.html', + controller: 'JobTemplatesAdd' + }). - when('/projects/add', - { templateUrl: urlPrefix + 'partials/projects.html', controller: ProjectsAdd }). + when('/job_templates/:id', { + templateUrl: urlPrefix + 'partials/job_templates.html', + controller: 'JobTemplatesEdit' + }). - when('/projects/:id', - { templateUrl: urlPrefix + 'partials/projects.html', controller: ProjectsEdit }). + when('/projects', { + templateUrl: urlPrefix + 'partials/projects.html', + controller: 'ProjectsList' + }). - when('/projects/:project_id/organizations', - { templateUrl: urlPrefix + 'partials/projects.html', controller: OrganizationsList }). + when('/projects/add', { + templateUrl: urlPrefix + 'partials/projects.html', + controller: 'ProjectsAdd' + }). - when('/projects/:project_id/organizations/add', - { templateUrl: urlPrefix + 'partials/projects.html', controller: OrganizationsAdd }). + when('/projects/:id', { + templateUrl: urlPrefix + 'partials/projects.html', + controller: 'ProjectsEdit' + }). - when('/hosts/:id/job_host_summaries', - { templateUrl: urlPrefix + 'partials/jobs.html', controller: JobHostSummaryList }). + when('/projects/:project_id/organizations', { + templateUrl: urlPrefix + 'partials/projects.html', + controller: 'OrganizationsList' + }). - when('/inventories', - { templateUrl: urlPrefix + 'partials/inventories.html', controller: InventoriesList }). + when('/projects/:project_id/organizations/add', { + templateUrl: urlPrefix + 'partials/projects.html', + controller: 'OrganizationsAdd' + }). - when('/inventories/add', - { templateUrl: urlPrefix + 'partials/inventories.html', controller: InventoriesAdd }). + when('/hosts/:id/job_host_summaries', { + templateUrl: urlPrefix + 'partials/jobs.html', + controller: 'JobHostSummaryList' + }). - when('/inventories/:inventory_id', - { templateUrl: urlPrefix + 'partials/inventory-edit.html', controller: InventoriesEdit }). + when('/inventories', { + templateUrl: urlPrefix + 'partials/inventories.html', + controller: 'InventoriesList' + }). - when('/organizations', { templateUrl: urlPrefix + 'partials/organizations.html', - controller: OrganizationsList }). + when('/inventories/add', { + templateUrl: urlPrefix + 'partials/inventories.html', + controller: 'InventoriesAdd' + }). - when('/organizations/add', { templateUrl: urlPrefix + 'partials/organizations.html', - controller: OrganizationsAdd }). + when('/inventories/:inventory_id', { + templateUrl: urlPrefix + 'partials/inventory-edit.html', + controller: 'InventoriesEdit' + }). - when('/organizations/:organization_id', { templateUrl: urlPrefix + 'partials/organizations.html', - controller: OrganizationsEdit }). + when('/organizations', { + templateUrl: urlPrefix + 'partials/organizations.html', + controller: 'OrganizationsList' + }). - when('/organizations/:organization_id/admins', { templateUrl: urlPrefix + 'partials/organizations.html', - controller: AdminsList }). + when('/organizations/add', { + templateUrl: urlPrefix + 'partials/organizations.html', + controller: 'OrganizationsAdd' + }). - when('/organizations/:organization_id/users', { templateUrl: urlPrefix + 'partials/users.html', - controller: UsersList }). + when('/organizations/:organization_id', { + templateUrl: urlPrefix + 'partials/organizations.html', + controller: 'OrganizationsEdit' + }). - when('/organizations/:organization_id/users/add', { templateUrl: urlPrefix + 'partials/users.html', - controller: UsersAdd }). + when('/organizations/:organization_id/admins', { + templateUrl: urlPrefix + 'partials/organizations.html', + controller: 'AdminsList' + }). - when('/organizations/:organization_id/users/:user_id', { templateUrl: urlPrefix + 'partials/users.html', - controller: UsersEdit }). + when('/organizations/:organization_id/users', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'UsersList' + }). - when('/teams', { templateUrl: urlPrefix + 'partials/teams.html', - controller: TeamsList }). + when('/organizations/:organization_id/users/add', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'UsersAdd' + }). - when('/teams/add', { templateUrl: urlPrefix + 'partials/teams.html', - controller: TeamsAdd }). + when('/organizations/:organization_id/users/:user_id', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'UsersEdit' + }). - when('/teams/:team_id', { templateUrl: urlPrefix + 'partials/teams.html', - controller: TeamsEdit }). - - when('/teams/:team_id/permissions/add', { templateUrl: urlPrefix + 'partials/teams.html', - controller: PermissionsAdd }). + when('/teams', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'TeamsList' + }). - when('/teams/:team_id/permissions', { templateUrl: urlPrefix + 'partials/teams.html', - controller: PermissionsList }). + when('/teams/add', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'TeamsAdd' + }). - when('/teams/:team_id/permissions/:permission_id', { templateUrl: urlPrefix + 'partials/teams.html', - controller: PermissionsEdit }). + when('/teams/:team_id', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'TeamsEdit' + }). - when('/teams/:team_id/users', { templateUrl: urlPrefix + 'partials/teams.html', - controller: UsersList }). + when('/teams/:team_id/permissions/add', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'PermissionsAdd' + }). - when('/teams/:team_id/users/:user_id', { templateUrl: urlPrefix + 'partials/teams.html', - controller: UsersEdit }). + when('/teams/:team_id/permissions', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'PermissionsList' + }). - when('/teams/:team_id/projects', { templateUrl: urlPrefix + 'partials/teams.html', - controller: ProjectsList }). + when('/teams/:team_id/permissions/:permission_id', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'PermissionsEdit' + }). - when('/teams/:team_id/projects/add', { templateUrl: urlPrefix + 'partials/teams.html', - controller: ProjectsAdd }). + when('/teams/:team_id/users', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'UsersList' + }). - when('/teams/:team_id/projects/:project_id', { templateUrl: urlPrefix + 'partials/teams.html', - controller: ProjectsEdit }). - - when('/teams/:team_id/credentials', { templateUrl: urlPrefix + 'partials/teams.html', - controller: CredentialsList }). + when('/teams/:team_id/users/:user_id', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'UsersEdit' + }). - when('/teams/:team_id/credentials/add', { templateUrl: urlPrefix + 'partials/teams.html', - controller: CredentialsAdd }). + when('/teams/:team_id/projects', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'ProjectsList' + }). - when('/teams/:team_id/credentials/:credential_id', { templateUrl: urlPrefix + 'partials/teams.html', - controller: CredentialsEdit }). + when('/teams/:team_id/projects/add', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'ProjectsAdd' + }). - when('/credentials', { templateUrl: urlPrefix + 'partials/credentials.html', - controller: CredentialsList }). + when('/teams/:team_id/projects/:project_id', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'ProjectsEdit' + }). - when('/credentials/add', { templateUrl: urlPrefix + 'partials/credentials.html', - controller: CredentialsAdd }). + when('/teams/:team_id/credentials', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'CredentialsList' + }). - when('/credentials/:credential_id', { templateUrl: urlPrefix + 'partials/credentials.html', - controller: CredentialsEdit }). - - when('/users', { templateUrl: urlPrefix + 'partials/users.html', - controller: UsersList }). + when('/teams/:team_id/credentials/add', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'CredentialsAdd' + }). - when('/users/add', { templateUrl: urlPrefix + 'partials/users.html', - controller: UsersAdd }). + when('/teams/:team_id/credentials/:credential_id', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'CredentialsEdit' + }). - when('/users/:user_id', { templateUrl: urlPrefix + 'partials/users.html', - controller: UsersEdit }). + when('/credentials', { + templateUrl: urlPrefix + 'partials/credentials.html', + controller: 'CredentialsList' + }). - when('/users/:user_id/credentials', { templateUrl: urlPrefix + 'partials/users.html', - controller: CredentialsList }). + when('/credentials/add', { + templateUrl: urlPrefix + 'partials/credentials.html', + controller: 'CredentialsAdd' + }). - when('/users/:user_id/permissions/add', { templateUrl: urlPrefix + 'partials/users.html', - controller: PermissionsAdd }). + when('/credentials/:credential_id', { + templateUrl: urlPrefix + 'partials/credentials.html', + controller: 'CredentialsEdit' + }). - when('/users/:user_id/permissions', { templateUrl: urlPrefix + 'partials/users.html', - controller: PermissionsList }). + when('/users', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'UsersList' + }). - when('/users/:user_id/permissions/:permission_id', { templateUrl: urlPrefix + 'partials/users.html', - controller: PermissionsEdit }). + when('/users/add', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'UsersAdd' + }). - when('/users/:user_id/credentials/add', { templateUrl: urlPrefix + 'partials/teams.html', - controller: CredentialsAdd }). + when('/users/:user_id', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'UsersEdit' + }). - when('/teams/:user_id/credentials/:credential_id', { templateUrl: urlPrefix + 'partials/teams.html', - controller: CredentialsEdit }). + when('/users/:user_id/credentials', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'CredentialsList' + }). - when('/login', { templateUrl: urlPrefix + 'partials/home.html', controller: Authenticate }). + when('/users/:user_id/permissions/add', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'PermissionsAdd' + }). - when('/logout', { templateUrl: urlPrefix + 'partials/home.html', controller: Authenticate }). + when('/users/:user_id/permissions', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'PermissionsList' + }). - when('/home', { templateUrl: urlPrefix + 'partials/home.html', controller: Home }). + when('/users/:user_id/permissions/:permission_id', { + templateUrl: urlPrefix + 'partials/users.html', + controller: 'PermissionsEdit' + }). - when('/home/groups', { templateUrl: urlPrefix + 'partials/subhome.html', controller: HomeGroups }). + when('/users/:user_id/credentials/add', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'CredentialsAdd' + }). - when('/home/hosts', { templateUrl: urlPrefix + 'partials/subhome.html', controller: HomeHosts }). - - otherwise({redirectTo: '/home'}); - }]) - .run(['$cookieStore', '$rootScope', 'CheckLicense', '$location', 'Authorization','LoadBasePaths', 'ViewLicense', - 'Timer', 'ClearScope', 'HideStream', - function($cookieStore, $rootScope, CheckLicense, $location, Authorization, LoadBasePaths, ViewLicense, - Timer, ClearScope, HideStream) { - - LoadBasePaths(); - - $rootScope.breadcrumbs = new Array(); - $rootScope.crumbCache = new Array(); - $rootScope.sessionTimer = Timer.init(); + when('/teams/:user_id/credentials/:credential_id', { + templateUrl: urlPrefix + 'partials/teams.html', + controller: 'CredentialsEdit' + }). - $rootScope.$on("$routeChangeStart", function(event, next, current) { + when('/login', { + templateUrl: urlPrefix + 'partials/home.html', + controller: 'Authenticate' + }). - // Before navigating away from current tab, make sure the primary view is visible - if ($('#stream-container').is(':visible')) { - HideStream(); - } + when('/logout', { + templateUrl: urlPrefix + 'partials/home.html', + controller: 'Authenticate' + }). - // On each navigation request, check that the user is logged in - if ( !/^\/(login|logout)/.test($location.path()) ) { - // capture most recent URL, excluding login/logout - $rootScope.lastPath = $location.path(); - $cookieStore.put('lastPath', $location.path()); - } + when('/home', { + templateUrl: urlPrefix + 'partials/home.html', + controller: 'Home' + }). - if (Authorization.isUserLoggedIn() == false) { - if ( next.templateUrl != (urlPrefix + 'partials/login.html') ) { - $location.path('/login'); - } - } - else if ($rootScope.sessionTimer.isExpired()) { - if ( next.templateUrl != (urlPrefix + 'partials/login.html') ) { - $rootScope.sessionTimer.expireSession(); - $location.path('/login'); - } - } - else { - if ($rootScope.current_user == undefined || $rootScope.current_user == null) { - Authorization.restoreUserInfo(); //user must have hit browser refresh - } - CheckLicense(); - } - - // Make the correct tab active - var base = $location.path().replace(/^\//,'').split('/')[0]; - if (base == '') { - base = 'home'; - } - else { - base.replace(/\_/g,' '); - } - $('.nav-tabs a[href="#' + base + '"]').tab('show'); + when('/home/groups', { + templateUrl: urlPrefix + 'partials/subhome.html', + controller: 'HomeGroups' + }). + + when('/home/hosts', { + templateUrl: urlPrefix + 'partials/subhome.html', + controller: 'HomeHosts' + }). + + otherwise({ + redirectTo: '/home' + }); + } + ]) + .run(['$cookieStore', '$rootScope', 'CheckLicense', '$location', 'Authorization', 'LoadBasePaths', 'ViewLicense', + 'Timer', 'ClearScope', 'HideStream', + function ($cookieStore, $rootScope, CheckLicense, $location, Authorization, LoadBasePaths, ViewLicense, + Timer, ClearScope, HideStream) { + + LoadBasePaths(); + + $rootScope.breadcrumbs = []; + $rootScope.crumbCache = []; + $rootScope.sessionTimer = Timer.init(); + + $rootScope.$on("$routeChangeStart", function (event, next) { + + // Before navigating away from current tab, make sure the primary view is visible + if ($('#stream-container').is(':visible')) { + HideStream(); + } + + // On each navigation request, check that the user is logged in + if (!/^\/(login|logout)/.test($location.path())) { + // capture most recent URL, excluding login/logout + $rootScope.lastPath = $location.path(); + $cookieStore.put('lastPath', $location.path()); + } + + if (Authorization.isUserLoggedIn() === false) { + if (next.templateUrl !== (urlPrefix + 'partials/login.html')) { + $location.path('/login'); + } + } else if ($rootScope.sessionTimer.isExpired()) { + if (next.templateUrl !== (urlPrefix + 'partials/login.html')) { + $rootScope.sessionTimer.expireSession(); + $location.path('/login'); + } + } else { + if ($rootScope.current_user === undefined || $rootScope.current_user === null) { + Authorization.restoreUserInfo(); //user must have hit browser refresh + } + CheckLicense(); + } + + // Make the correct tab active + var base = $location.path().replace(/^\//, '').split('/')[0]; + if (base === '') { + base = 'home'; + } else { + base.replace(/\_/g, ' '); + } + $('.nav-tabs a[href="#' + base + '"]').tab('show'); }); - if (!Authorization.getToken()) { - // When the app first loads, redirect to login page - $rootScope.sessionExpired = false; - $cookieStore.put('sessionExpired', false); - $location.path('/login'); - } - else { - // If browser refresh, set the user_is_superuser value - $rootScope['user_is_superuser'] = Authorization.getUserInfo('is_superuser'); - } - - // If browser refresh, activate the correct tab - var base = ($location.path().replace(/^\//,'').split('/')[0]); - if (base == '') { - base = 'home'; - $location.path('/home'); - } - else { - base.replace(/\_/g,' '); - } - $('.nav-tabs a[href="#' + base + '"]').tab('show'); - - $rootScope.viewCurrentUser = function() { - $location.path('/users/' + $rootScope.current_user.id); + if (!Authorization.getToken()) { + // When the app first loads, redirect to login page + $rootScope.sessionExpired = false; + $cookieStore.put('sessionExpired', false); + $location.path('/login'); + } else { + // If browser refresh, set the user_is_superuser value + $rootScope.user_is_superuser = Authorization.getUserInfo('is_superuser'); } - $rootScope.viewLicense = function() { - //$location.path('/license'); - ViewLicense(); - } - }]); + // If browser refresh, activate the correct tab + var base = ($location.path().replace(/^\//, '').split('/')[0]); + if (base === '') { + base = 'home'; + $location.path('/home'); + } else { + base.replace(/\_/g, ' '); + } + $('.nav-tabs a[href="#' + base + '"]').tab('show'); + + $rootScope.viewCurrentUser = function () { + $location.path('/users/' + $rootScope.current_user.id); + }; + + $rootScope.viewLicense = function () { + //$location.path('/license'); + ViewLicense(); + }; + } + ]); \ No newline at end of file diff --git a/awx/ui/static/js/awx-min.js b/awx/ui/static/js/awx-min.js new file mode 100644 index 0000000000..a0861442c0 --- /dev/null +++ b/awx/ui/static/js/awx-min.js @@ -0,0 +1,50 @@ +/*! ansible-commander - v1.4.5 - 2014-02-12 */"use strict";function AdminsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q=h,r=o("organizations")+e.organization_id+"/users/",s=i,t="select",u=s.inject(h,{mode:t}),v=o("organizations")+e.organization_id+"/admins/";p({scope:u,list:q,url:v,returnToCaller:1}),l({scope:u,set:"admins",list:q,url:r}),m({scope:u,list:q,url:r}),u.search(q.iterator),j()}function Authenticate(a,b,c,d,e,f,g,h,i,j,k){var l,m,n,o;l=function(){$("#login-username").focus()},n=k(d.sessionExpired)?a.get("sessionExpired"):d.sessionExpired,m=function(){return k(d.lastPath)?a.get("lastPath"):d.lastPath},$AnsibleConfig.debug_mode&&console&&(console.log("User session expired: "+n),console.log("Last URL: "+m())),$(".modal[aria-hidden=false]").each(function(){"login-modal"!==$(this).attr("id")&&$(this).modal("hide")}),i("stop"),$("#login-modal").modal({show:!0,keyboard:!1,backdrop:"static"}),$("#login-modal").on("shown.bs.modal",function(){l()}),o=angular.element(document.getElementById("login-modal")).scope(),o.login_username=null,o.login_password=null,o.loginForm.login_username.$setPristine(),o.loginForm.login_password.$setPristine(),"/logout"===e.path()&&f.logout(),d.userLoggedIn=!1,a.put("userLoggedIn",!1),$("#login-password").bind("keypress",function(a){var b=a.keyCode?a.keyCode:a.which;13===b&&$("#login-button").click()}),o.reset=function(){$("#login-form input").each(function(){$(this).val("")})},o.systemLogin=function(a,b){$(".api-error").empty();var c;k(a)||k(b)?h("Error!","Please provide a username and password before attempting to login.","alert-danger",l):(i("start"),f.retrieveToken(a,b).success(function(a,b){$("#login-modal").modal("hide"),c=a.token,f.setToken(a.token,a.expires),d.sessionTimer=j.init(),f.getUser().success(function(a){f.setUserInfo(a),d.user_is_superuser=a.results[0].is_superuser,f.getLicense().success(function(a){f.setLicense(a.license_info),m()?e.path(m()):e.url("/home?login=true")}).error(function(){i("stop"),h("Error","Failed to access user information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){i("stop"),h("Error","Failed to access license information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){var c,d,e;if(i("stop"),a.non_field_errors&&0===a.non_field_errors.length)for(e in a)o[e+"Error"]=a[e][0];else a.non_field_errors&&a.non_field_errors.length>0?(c="Error",d=a.non_field_errors[0]):(c="Error",d="The login attempt failed with a status of: "+b),o.reset(),h(c,d,"alert-danger",l)}))}}function CredentialsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){o("htmlTemplate"),t("start");var v,w=h,x=q("credentials"),y=i,z=c.path().replace(/^\//,"").split("/")[0],A="credentials"===z?"edit":"select",B=y.inject(w,{mode:A});B.selected=[],B.credentialLoading=!0,v=q(z)+("users"===z?e.user_id+"/credentials/":e.team_id+"/credentials/"),r({scope:B,list:w,url:v,returnToCaller:1}),B.removePostRefresh&&B.removePostRefresh(),B.removePostRefresh=B.$on("PostRefresh",function(){var a,b;for(t("stop"),$("#prompt-modal").off(),w.fields.kind.searchOptions=B.credential_kind_options,a=0;a/g," ");for(x in z.fields.status.searchOptions)if(z.fields.status.searchOptions[x].value===b.status){B[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[x];break}}if(b.source){B[z.iterator+"SearchField"]="source",B[z.iterator+"SelectShow"]=!0,B[z.iterator+"SearchSelectOpts"]=z.fields.source.searchOptions,B[z.iterator+"SearchFieldLabel"]=z.fields.source.label.replace(//g," ");for(x in z.fields.source.searchOptions)if(z.fields.source.searchOptions[x].value===b.source){B[z.iterator+"SearchSelectValue"]=z.fields.source.searchOptions[x];break}b.status&&(B[z.iterator+"ExtraParms"]="&inventory_source__status__icontains="+b.status)}b.has_external_source&&(B[z.iterator+"SearchField"]="has_external_source",B[z.iterator+"SearchValue"]=z.fields.has_external_source.searchValue,B[z.iterator+"InputDisable"]=!0,B[z.iterator+"SearchType"]="in",B[z.iterator+"SearchFieldLabel"]=z.fields.has_external_source.label),B.search(z.iterator),f(),B.showActivity=function(){p({scope:B})},B.editGroup=function(a,b){q({scope:B,group_id:a,inventory_id:b,groups_reload:!1})},B.viewUpdateStatus=function(a){B.groups=B.home_groups,o({scope:B,tree_id:a})},B.updateGroup=function(a){var b=w({list:B.home_groups,key:"id",val:a});b&&(u(b.source)||("updating"===b.status?s("Update in Progress","The inventory update process is currently running for group "+b.name+". Use the Refresh button to monitor the status.","alert-info"):(r("start"),t.setUrl(b.related.inventory_source),t.get().success(function(a){v({scope:B,url:a.related.update,group_name:a.summary_fields.group.name,group_source:a.source,tree_id:b.id,group_id:b.id})}).error(function(a,c){e(B,a,c,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+b.related.inventory_source+" POST returned status: "+c})}))))},B.refresh=function(){B.search(z.iterator,null,!1,!0)}}function HomeHosts(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){h("htmlTemplate");var s=d,t=c,u=i("hosts"),v=s.inject(t,{mode:"edit"});v.removePostRefresh&&v.removePostRefresh(),v.removePostRefresh=v.$on("PostRefresh",function(){for(var a=0;a0?(z.inventories[a].failed_hosts_tip=z.inventories[a].hosts_with_active_failures+(1===z.inventories[a].hosts_with_active_failures?" host":" hosts")+" with job failures. Click to view details.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="true"):0===z.inventories[a].total_hosts?(z.inventories[a].failed_hosts_tip="No hosts defined. Click to add.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="na"):(z.inventories[a].failed_hosts_tip=z.inventories[a].total_hosts+(z.inventories[a].total_hosts>1?" hosts":" host")+" with no job failures. Click to view details.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="false"),z.inventories[a].status=z.inventories[a].inventory_sources_with_failures+" / "+z.inventories[a].total_inventory_sources,z.inventories[a].inventory_sources_with_failures>0?(z.inventories[a].status_tip=z.inventories[a].inventory_sources_with_failures+" cloud "+(1===z.inventories[a].inventory_sources_with_failures?"source":"sources")+" with failures. Click to view details.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="failed"):0===z.inventories[a].total_inventory_sources?(z.inventories[a].status_tip="Not synced with a cloud source. Click to edit.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="na"):(z.inventories[a].status_tip=z.inventories[a].total_inventory_sources+" cloud "+(z.inventories[a].total_inventory_sources>1?"sources":"source")+" with no failures. Click to view details.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="successful")}),z.removeRefreshInventories&&z.removeRefreshInventories(),z.removeRefreshInventories=z.$on("RefreshInventories",function(){z.search(u.iterator)}),z.showActivity=function(){s({scope:z})},z.editInventoryProperties=function(a){t({scope:z,inventory_id:a})},z.addInventory=function(){c.path(c.path()+"/add")},z.editInventory=function(a){c.path(c.path()+"/"+a)},z.deleteInventory=function(a,b){var c=function(){var b=v+a+"/";$("#prompt-modal").on("hidden.bs.modal",function(){r("start")}),$("#prompt-modal").modal("hide"),f.setUrl(b),f.destroy().success(function(){z.search(u.iterator)}).error(function(a,c){r("stop"),p(z,a,c,null,{hdr:"Error!",msg:"Call to "+b+" failed. DELETE returned status: "+c})})};k({hdr:"Delete",body:"Are you sure you want to delete "+b+"?",action:c})},z.lookupOrganization=function(a){f.setUrl(q("organizations")+a+"/"),f.get().success(function(a){return a.name})},z.viewJobs=function(a){c.url("/jobs/?inventory__int="+a)},z.viewFailedJobs=function(a){c.url("/jobs/?inventory__int="+a+"&status=failed")}}function InventoriesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){n("htmlTemplate");var w,x=t("inventory"),y=g,z=h;y.well=!0,y.formLabelSize=null,y.formFieldSize=null,w=z.inject(y,{mode:"add",related:!1}),w.inventoryParseType="yaml",z.reset(),l(),u(w,"inventory_variables","inventoryParseType"),s({scope:w,form:y,current_item:f.organization_id?f.organization_id:null,list:p,field:"organization"}),w.formSave=function(){z.clearApiErrors(),v("start");try{var a,b,c;if(b="json"===w.inventoryParseType?JSON.parse(w.inventory_variables):jsyaml.load(w.inventory_variables),"object"!=typeof b)throw"failed to return an object!";c={};for(a in y.fields)"inventory_variables"!==a&&(y.fields[a].realName?c[y.fields[a].realName]=w[a]:c[a]=w[a]);i.setUrl(x),i.post(c).success(function(a){var c=a.id;w.inventory_variables?(i.setUrl(a.related.variable_data),i.put(b).success(function(){v("stop"),d.path("/inventories/"+c+"/")}).error(function(a,b){v("stop"),k(w,a,b,null,{hdr:"Error!",msg:"Failed to add inventory varaibles. PUT returned status: "+b})})):(v("stop"),d.path("/inventories/"+c+"/"))}).error(function(a,b){v("stop"),k(w,a,b,y,{hdr:"Error!",msg:"Failed to add new inventory. Post returned status: "+b})})}catch(e){v("stop"),j("Error","Error parsing inventory variables. Parser returned: "+e)}},w.formReset=function(){z.reset()}}function InventoriesEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P){f("htmlTemplate");var Q=e,R=g;a.inventory_id=c.inventory_id,r({path:b.path(),title:"{{ inventory_name }}"}),a.removeGroupTreeLoaded&&a.removeGroupTreeLoaded(),a.removeGroupTreeLoaded=a.$on("GroupTreeLoaded",function(b,c,e){var f,g;f=angular.element(document.getElementById("breadcrumbs")),f.html(q({list:R,mode:"edit"})),d(f)(a),Q.inject(R,{mode:"edit",id:"groups-container",breadCrumbs:!1,searchSize:"col-lg-5 col-md-5 col-sm-5"}),a.groups=e,a.inventory_name=c,a.groups.length>0?(a.selected_tree_id=a.groups[0].id,a.selected_group_id=a.groups[0].group_id,a.groups[0].selected_class="selected",a.groups[0].active_class="active-row",a.selected_group_name=a.groups[0].name):(a.selected_tree_id=null,a.selected_group_id=null),a.show_failures=!1,l({scope:a,inventory_id:a.inventory_id,tree_id:a.selected_tree_id,group_id:a.selected_group_id}),setTimeout(function(){$("#groups_table .name-column").each(function(){var a,b,c,d,e;a=$(this).width(),b=$(this).find(".level").width(),c=parseInt($(this).find(".level").css("padding-left").replace(/px/,"")),d=b+c,e=100-Math.ceil(d/a*100)+"%",$(this).find(".group-name").css({width:e})}),L("#groups_table .group-name a"),L("#hosts_table .host-name a")},2500),M(),g=P("inventoryAutoHelp"),"off"!==g&&a.autoShowGroupHelp&&a.showGroupHelp({autoShow:!0})}),a.removeGroupTreeRefreshed&&a.removeGroupTreeRefreshed(),a.removeGroupTreeRefreshed=a.$on("GroupTreeRefreshed",function(){setTimeout(function(){L("#groups_table .group-name a")},2500),a.showHosts(a.selected_tree_id,a.selected_group_id,!1)}),a.removeGroupDeleteCompleted&&a.removeGroupDeleteCompleted(),a.removeGroupDeleteCompleted=a.$on("GroupDeleteCompleted",function(){a.selected_tree_id=1,a.selected_group_id=null,i({scope:a,inventory_id:a.inventory_id,refresh:!0})}),a.removeCopMoveGroup&&a.removeCopyMoveGroup(),a.removeCopyMoveGroup=a.$on("CopyMoveGroup",function(b,c,d){G({scope:a,target_tree_id:d,inbound_tree_id:c})}),a.removeCopMoveHost&&a.removeCopyMoveHost(),a.removeCopyMoveHost=a.$on("CopyMoveHost",function(b,c,d){H({scope:a,target_tree_id:c,host_id:d})}),a.showHosts=function(b,c,d){if(null!==b){j("start"),a.selected_tree_id=b,a.selected_group_id=c,a.hosts=[],a.show_failures=d;for(var e=0;e"+c.name+". Use the Refresh button to monitor the status.","alert-info"):(j("start"),t.setUrl(c.related.inventory_source),t.get().success(function(b){v({scope:a,url:b.related.update,group_name:b.summary_fields.group.name,group_source:b.source,tree_id:c.id,group_id:c.group_id})}).error(function(b,d){j("stop"),u(a,b,d,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+c.related.inventory_source+" POST returned status: "+d})}))))},a.cancelUpdate=function(b){z({scope:a,tree_id:b})},a.toggle=function(b){x({scope:a,list:R,id:b})},a.refreshGroups=function(b,c){b&&(a.selected_tree_id=b,a.selected_group_id=c),i({scope:a,inventory_id:a.inventory_id,refresh:!0})},a.viewUpdateStatus=function(b,c){y({scope:a,tree_id:b,group_id:c})},a.deleteGroup=function(b,c){p({scope:a,tree_id:b,group_id:c,inventory_id:a.inventory_id})},a.createHost=function(){B({scope:a})},a.editInventoryProperties=function(){C({scope:a,inventory_id:a.inventory_id})},a.editHost=function(b){D({scope:a,host_id:b,inventory_id:a.inventory_id})},a.deleteHost=function(b,c){E({scope:a,host_id:b,host_name:c})},a.toggleHostEnabled=function(b,c){F({scope:a,host_id:b,external_source:c})},a.showGroupActivity=function(){var b,c,d;a.selected_group_id?(d=A({list:a.groups,key:"id",val:a.selected_tree_id}),b=J("activity_stream")+"?group__id="+a.selected_group_id,c="Showing all activities for group "+d.name):(c="Showing all activities for all "+a.inventory_name+" groups",b=J("activity_stream")+"?group__inventory__id="+a.inventory_id),I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showHostActivity=function(){var b,c;c="Showing all activities for all "+a.inventory_name+" hosts",b=J("activity_stream")+"?host__inventory__id="+a.inventory_id,I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showJobSummary=function(a){K({job_id:a})},a.showGroupHelp=function(a){var b={defn:O};a&&(b.autoShow=a.autoShow||!1),N(b)},i({scope:a,inventory_id:a.inventory_id,refresh:!1})}function JobEventsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){function y(a){var b,c,d,e,f,g="",h=!1;if(a.res){if("string"==typeof a.res)c=a.res.match(/\n/g),d=c?c.length:1,d=d>10?10:d,h=!0,g+='
\n',g+="\n",g+='\n",g+="
\n";else for(e in a.res){if(("msg"===e||"stdout"===e||"stderr"===e)&&null!==a.res[e]&&""!==a.res[e]){switch(g+='
\n',g+="\n",c=a.res[e].match(/\n/g),d=c?c.length:1,d=d>10?10:d,g+='\n",g+="
\n",h=!0}if("results"===e&&Array.isArray(a.res[e])&&a.res[e].length>0){for(f="",b=0;b10?10:d,""!==f&&(g+='
\n',g+="\n",g+='\n",g+="
\n",h=!0)}"rc"===e&&""!==a.res[e]&&(g+='
\n',g+="\n",g+='\n',g+="
\n",h=!0)}g=h?'
\n'+g+"
\n":""}return g=a.hosts?''+a.host+"\n"+g:""===g?null:g}p("htmlTemplate");var z,A=i,B=r("jobs")+f.id+"/job_events/",C=j,D=C.inject(A,{mode:"edit"});A.base=d.path(),D.job_id=f.id,c.flashMessage=null,D.selected=[],D.expand=!0,D.parentNode="parent-event",D.childNode="child-event",D.removeSetHostLinks&&D.removeSetHostLinks(),D.removeSetHostLinks=D.$on("SetHostLinks",function(a,b){for(var c=0;c15?5:e,$('textarea[name="'+c+'"]').attr("rows",e)));break;case"module_name":case"module_args":a.event_data.res&&a.event_data.res.invocation&&(t[c]=a.event_data.res.invocation.fld) +}q("stop")}).error(function(a){k(t,a,status,null,{hdr:"Error!",msg:"Failed to retrieve host: "+f.event_id+". GET status: "+status})}),t.navigateBack=function(){var a="/jobs/"+f.job_id+"/job_events";f.page&&(a+="?page="+f.page),d.url(a)},t.rawView=function(){p({event_id:t.id})}}function JobHostSummaryList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){o("htmlTemplate");var u=h,v=c.path().replace(/^\//,"").split("/")[0],w=q(v)+e.id+"/job_host_summaries/",x=i,y=x.inject(u,{mode:"edit"});u.index="hosts"===v?!1:!0,y.selected=[],"hosts"===v?(y.job_id=null,y.host_id=e.id):(y.job_id=e.id,y.host_id=null),y.RemoveSetHostLink&&y.RemoveSetHostLink(),y.RemoveSetHostLink=y.$on("setHostLink",function(a,b){for(var c=0;c0?y.jobhosts[0].summary_fields.host.name:"Host"}),e.inventory&&y.$emit("setHostLink",e.inventory))}),l({scope:y,set:"jobhosts",list:u,url:w}),m({scope:y,list:u,url:w}),e.host_name&&(y[u.iterator+"SearchField"]="host",y[u.iterator+"SearchValue"]=e.host_name,y[u.iterator+"SearchFieldLabel"]=u.fields.host.label),y.search(u.iterator),y.showEvents=function(a,b){f.setUrl(b),f.get().success(function(b){j({path:"/jobs/"+b.id,title:b.name}),c.url("/jobs/"+b.id+"/job_events/?host="+encodeURI(a))}).error(function(a,c){p(y,a,c,null,{hdr:"Error!",msg:"Failed to lookup last job: "+b+". GET status: "+c})})},y.showJob=function(a){c.path("/jobs/"+a)},y.refresh=function(){null===y.host_id&&(y.jobSearchSpin=!0,y.jobLoading=!0,t("start"),r({scope:y,set:"jobhosts",iterator:"jobhost",url:y.current_url}))}}function JobTemplatesList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){o("htmlTemplate");var y=h,z=q("job_templates"),A=i,B=c.path().replace(/^\//,"").split("/")[0],C="job_templates"===B?"edit":"select",D=A.inject(y,{mode:C});b.flashMessage=null,D.removePostRefresh&&D.removePostRefresh(),D.removePostRefresh=D.$on("PostRefresh",function(){w("stop"),$("#prompt-modal").off()}),l({scope:D,set:"job_templates",list:y,url:z}),m({scope:D,list:y,url:z}),e.name&&(D[y.iterator+"SearchField"]="name",D[y.iterator+"SearchValue"]=e.name,D[y.iterator+"SearchFieldLabel"]=y.fields.name.label),D.search(y.iterator),j(),D.showActivity=function(){x({scope:D})},D.addJobTemplate=function(){c.path(c.path()+"/add")},D.editJobTemplate=function(a){c.path(c.path()+"/"+a)},D.deleteJobTemplate=function(a,b){var c=function(){$("#prompt-modal").on("hidden.bs.modal",function(){w("start")}),$("#prompt-modal").modal("hide");var b=z+a+"/";f.setUrl(b),f.destroy().success(function(){D.search(y.iterator)}).error(function(a){w("stop"),p(D,a,status,null,{hdr:"Error!",msg:"Call to "+b+" failed. DELETE returned status: "+status})})};k({hdr:"Delete",body:"Are you sure you want to delete "+b+"?",action:c})},D.submitJob=function(a){v({scope:D,id:a})}}function JobTemplatesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){n("htmlTemplate");var x,y,z=o("job_templates"),A=g,B=h,C=B.inject(A,{mode:"add",related:!1}),D={},E={};C.parseType="yaml",u(C),C.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],C.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],C.playbook_options=[],C.allow_callbacks="false",B.reset(),l(),t({scope:C,master:D,check_field:"allow_callbacks",default_val:!1}),s({scope:C,form:A,current_item:null,list:p,field:"inventory"}),jQuery.extend(!0,E,q),E.name="cloudcredentials",E.iterator="cloudcredential",s({url:o("credentials")+"?cloud=true",scope:C,form:A,current_item:null,list:E,field:"cloud_credential",hdr:"Select Cloud Credential"}),s({url:o("credentials")+"?kind=ssh",scope:C,form:A,current_item:null,list:q,field:"credential",hdr:"Select Machine Credential"}),x=function(a,b){var c;a!==b&&C.project&&(v("start"),c=o("projects")+C.project+"/playbooks/",i.setUrl(c),i.get().success(function(a){var b,c=[];for(b=0;b=2)for(var a in O)J.search(O[a].iterator)}),J.removeRelatedJobs&&J.removeRelatedJobs(),J.removeRelatedJobs=J.$on("relatedjobs",function(){var a,b;if(J.jobs&&J.jobs.length)for(a=0;a0)for(c=0;c/g," ");for(y in z.fields.status.searchOptions)if(z.fields.status.searchOptions[y].value===e.status){C[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[y];break}}C.search(z.iterator),j(),C.refresh=function(){x("start"),C.jobLoading=!1,u({scope:C,set:"jobs",iterator:"job",url:C.current_url})},C.refreshJob=C.refresh,C.editJob=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a)},C.viewEvents=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_events")},C.viewSummary=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_host_summaries")},C.deleteJob=function(a){f.setUrl(A+a+"/"),f.get().success(function(b){var c,d,e,g;"pending"===b.status||"running"===b.status||"waiting"===b.status?(d=b.related.cancel,e="cancel",g="Cancel Job"):(d=A+a+"/",e="delete",g="Delete Job"),c=function(){f.setUrl(d),"cancel"===e?f.post().success(function(){$("#prompt-modal").modal("hide"),C.search(z.iterator)}).error(function(a,b){$("#prompt-modal").modal("hide"),p(C,a,b,null,{hdr:"Error!",msg:"Call to "+d+" failed. POST returned status: "+b})}):f.destroy().success(function(){$("#prompt-modal").modal("hide"),C.search(z.iterator)}).error(function(a,b){$("#prompt-modal").modal("hide"),p(C,a,b,null,{hdr:"Error!",msg:"Call to "+d+" failed. DELETE returned status: "+b})})},k({hdr:g,body:"Are you sure you want to "+e+" job "+a+"?",action:c})}).error(function(a,b){p(C,a,b,null,{hdr:"Error!",msg:"Failed to get job details. GET returned status: "+b})})},C.submitJob=function(a,b){s({scope:C,id:a,template:b})}}function JobsEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z){function A(a){if(null!==a&&""!==a&&void 0!==a){var b=v("projects")+a+"/playbooks/";i.setUrl(b),i.get().success(function(a){F.playbook_options=[];for(var b=0;b15?15:c}p("htmlTemplate");var C=v("jobs"),D=h,E=g,F=D.inject(E,{mode:"edit",related:!0}),G={},H=f.id,I={},J=0;D.reset(),F.job_id=H,F.parseType="yaml",F.statusSearchSpin=!1,F.jobLoadedRemove&&F.jobLoadedRemove(),F.jobLoadedRemove=F.$on("jobLoaded",function(a,b){A(F.project),F[E.name+"ReadOnly"]="new"===F.status?!1:!0,$("#forks-slider").slider("option","value",F.forks),$("#forks-slider").slider("disable"),$('input[type="checkbox"]').attr("disabled","disabled"),$('input[type="radio"]').attr("disabled","disabled"),$("#host_config_key-gen-btn").attr("disabled","disabled"),$("textarea").attr("readonly","readonly"),i.setUrl(F.template_url),i.get().success(function(a){var b=a.host_config_key?"true":"false";F.host_config_key=a.host_config_key,w({scope:F,master:G,check_field:"allow_callbacks",default_val:b}),F.callback_url=a.related?a.related.callback:"<< Job template not found >>",F.$emit("jobTemplateLoadFinished")}).error(function(){z("stop"),F.callback_url="<< Job template not found >>"}),b?(i.setUrl(b),i.get().success(function(a){F.cloud_credential_name=a.name,F.$emit("jobTemplateLoadFinished")}).error(function(a,b){k(F,a,b,null,{hdr:"Error!",msg:"Failed to related cloud credential. GET returned status: "+b})})):F.$emit("jobTemplateLoadFinished")}),F.removeJobTemplateLoadFinished&&F.removeJobTemplateLoadFinished(),F.removeJobTemplateLoadFinished=F.$on("jobTemplateLoadFinished",function(){J++,J>=3&&z("stop")}),F.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],F.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],F.playbook_options=null,F.playbook=null,z("start"),i.setUrl(C+":id/"),i.get({params:{id:H}}).success(function(a){var b,c,d,e,f,g;l();for(d in E.fields){if("variables"!==d&&null!==a[d]&&void 0!==a[d]){if("select"===E.fields[d].type)if(F[d+"_options"]&&F[d+"_options"].length>0)for(b=0;b/g," ");for(a in A.fields.scm_type.searchOptions)if(A.fields.scm_type.searchOptions[a].value===e.scm_type){F[A.iterator+"SearchSelectValue"]=A.fields.scm_type.searchOptions[a];break}}else if(e.status){F[A.iterator+"SearchValue"]=e.status,F[A.iterator+"SearchField"]="status",F[A.iterator+"SelectShow"]=!0,F[A.iterator+"SearchFieldLabel"]=A.fields.status.label,F[A.iterator+"SearchSelectOpts"]=A.fields.status.searchOptions;for(a in A.fields.status.searchOptions)if(A.fields.status.searchOptions[a].value===e.status){F[A.iterator+"SearchSelectValue"]=A.fields.status.searchOptions[a];break}}F.search(A.iterator)}),F.removeChoicesReady&&F.removeChoicesReady(),F.removeChoicesReady=F.$on("choicesReadyProject",function(){H++,2===H&&F.$emit("choicesCompleteProject")}),y({scope:F,url:B,field:"status",variable:"project_status_options",callback:"choicesReadyProject"}),y({scope:F,url:B,field:"scm_type",variable:"project_scm_type_options",callback:"choicesReadyProject"}),j(),F.showActivity=function(){x({scope:F})},F.addProject=function(){c.path(c.path()+"/add")},F.editProject=function(a){c.path(c.path()+"/"+a)},F.showSCMStatus=function(a){var b,c=F.$on("PostRefresh",function(){var d; +for(b=0;bRefresh button to view the latest status.","alert-info")}).error(function(a,b){p(F,a,b,null,{hdr:"Error!",msg:"Call to "+c+" failed. GET status: "+b})})}),F.cancelUpdate=function(a,b){var c,d,e=!1;for(c=0;cRefresh button to view the latet status.","alert-info")},F.refresh=function(){w("start"),F.projectLoading=!1,v({scope:F,set:"projects",iterator:"project",url:F.current_url})},F.SCMUpdate=function(a){var b;for(b=0;bb;b++){for(d[b].match(/[A-Z]/g)?(""!==R&&R+1==b&&(y++,C++),R=b,o++):d[b].match(/[a-z]/g)?(""!==S&&S+1==b&&(z++,C++),S=b,p++):d[b].match(/[0-9]/g)?(b>0&&e-1>b&&s++,""!==T&&T+1==b&&(A++,C++),T=b,q++):d[b].match(/[^a-zA-Z0-9_]/g)&&(b>0&&e-1>b&&s++,""!==U&&U+1==b&&(B++,C++),U=b,r++),f=!1,g=0;e>g;g++)d[b]==d[g]&&b!=g&&(f=!0,x+=Math.abs(e/(g-b)));f&&(w++,v=e-w,x=Math.ceil(v?x/v:x))}for(h=0;23>h;h++)i=ib.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(D++,G++);for(h=0;8>h;h++)i=jb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(E++,G++);for(h=0;8>h;h++)i=kb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(F++,G++);o>0&&n>o&&(nScore=parseInt(nScore+2*(n-o)),V="+ "+parseInt(2*(n-o))),p>0&&n>p&&(nScore=parseInt(nScore+2*(n-p)),W="+ "+parseInt(2*(n-p))),q>0&&n>q&&(nScore=parseInt(nScore+q*P),X="+ "+parseInt(q*P)),r>0&&(nScore=parseInt(nScore+r*Q),Y="+ "+parseInt(r*Q)),s>0&&(nScore=parseInt(nScore+s*H),Z="+ "+parseInt(s*H)),(p>0||o>0)&&0===r&&0===q&&(nScore=parseInt(nScore-n),t=n,_="- "+n),0===p&&0===o&&0===r&&q>0&&(nScore=parseInt(nScore-n),u=n,ab="- "+n),w>0&&(nScore=parseInt(nScore-x),bb="- "+x),y>0&&(nScore=parseInt(nScore-y*I),cb="- "+parseInt(y*I)),z>0&&(nScore=parseInt(nScore-z*J),db="- "+parseInt(z*J)),A>0&&(nScore=parseInt(nScore-A*K),eb="- "+parseInt(A*K)),D>0&&(nScore=parseInt(nScore-D*L),fb="- "+parseInt(D*L)),E>0&&(nScore=parseInt(nScore-E*M),gb="- "+parseInt(E*M)),F>0&&(nScore=parseInt(nScore-F*N),hb="- "+parseInt(F*N)),nScore>100?nScore=100:0>nScore&&(nScore=0),k=$("#progbar"),l=$AnsibleConfig.password_strength,m=$AnsibleConfig.password_strength-15<0?0:$AnsibleConfig.password_strength-15,k.css("width",nScore+"%"),nScore>=0&&m>=nScore?(lb="Weak",k.addClass("progress-bar-danger"),k.removeClass("progress-bar-success progress-bar-warning")):nScore>m&&l>=nScore?(lb="Good",k.addClass("progress-bar-warning"),k.removeClass("progress-bar-success progress-bar-danger")):nScore>l&&(lb="Strong",k.addClass("progress-bar-success"),k.removeClass("progress-bar-warning progress-bar-danger"))}else k=$("#progbar"),k.css("width","0%"),k.removeClass("progress-bar-success progress-bar-warning");return nScore}function AdminsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q=h,r=o("organizations")+e.organization_id+"/users/",s=i,t="select",u=s.inject(h,{mode:t}),v=o("organizations")+e.organization_id+"/admins/";p({scope:u,list:q,url:v,returnToCaller:1}),l({scope:u,set:"admins",list:q,url:r}),m({scope:u,list:q,url:r}),u.search(q.iterator),j()}function Authenticate(a,b,c,d,e,f,g,h,i,j,k){var l,m,n,o;l=function(){$("#login-username").focus()},n=k(d.sessionExpired)?a.get("sessionExpired"):d.sessionExpired,m=function(){return k(d.lastPath)?a.get("lastPath"):d.lastPath},$AnsibleConfig.debug_mode&&console&&(console.log("User session expired: "+n),console.log("Last URL: "+m())),$(".modal[aria-hidden=false]").each(function(){"login-modal"!==$(this).attr("id")&&$(this).modal("hide")}),i("stop"),$("#login-modal").modal({show:!0,keyboard:!1,backdrop:"static"}),$("#login-modal").on("shown.bs.modal",function(){l()}),o=angular.element(document.getElementById("login-modal")).scope(),o.login_username=null,o.login_password=null,o.loginForm.login_username.$setPristine(),o.loginForm.login_password.$setPristine(),"/logout"===e.path()&&f.logout(),d.userLoggedIn=!1,a.put("userLoggedIn",!1),$("#login-password").bind("keypress",function(a){var b=a.keyCode?a.keyCode:a.which;13===b&&$("#login-button").click()}),o.reset=function(){$("#login-form input").each(function(){$(this).val("")})},o.systemLogin=function(a,b){$(".api-error").empty();var c;k(a)||k(b)?h("Error!","Please provide a username and password before attempting to login.","alert-danger",l):(i("start"),f.retrieveToken(a,b).success(function(a,b){$("#login-modal").modal("hide"),c=a.token,f.setToken(a.token,a.expires),d.sessionTimer=j.init(),f.getUser().success(function(a){f.setUserInfo(a),d.user_is_superuser=a.results[0].is_superuser,f.getLicense().success(function(a){f.setLicense(a.license_info),m()?e.path(m()):e.url("/home?login=true")}).error(function(){i("stop"),h("Error","Failed to access user information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){i("stop"),h("Error","Failed to access license information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){var c,d,e;if(i("stop"),a.non_field_errors&&0===a.non_field_errors.length)for(e in a)o[e+"Error"]=a[e][0];else a.non_field_errors&&a.non_field_errors.length>0?(c="Error",d=a.non_field_errors[0]):(c="Error",d="The login attempt failed with a status of: "+b),o.reset(),h(c,d,"alert-danger",l)}))}}function CredentialsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){o("htmlTemplate"),t("start");var v,w=h,x=q("credentials"),y=i,z=c.path().replace(/^\//,"").split("/")[0],A="credentials"===z?"edit":"select",B=y.inject(w,{mode:A});B.selected=[],B.credentialLoading=!0,v=q(z)+("users"===z?e.user_id+"/credentials/":e.team_id+"/credentials/"),r({scope:B,list:w,url:v,returnToCaller:1}),B.removePostRefresh&&B.removePostRefresh(),B.removePostRefresh=B.$on("PostRefresh",function(){var a,b;for(t("stop"),$("#prompt-modal").off(),w.fields.kind.searchOptions=B.credential_kind_options,a=0;a/g," ");for(x in z.fields.status.searchOptions)if(z.fields.status.searchOptions[x].value===b.status){B[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[x];break}}if(b.source){B[z.iterator+"SearchField"]="source",B[z.iterator+"SelectShow"]=!0,B[z.iterator+"SearchSelectOpts"]=z.fields.source.searchOptions,B[z.iterator+"SearchFieldLabel"]=z.fields.source.label.replace(//g," ");for(x in z.fields.source.searchOptions)if(z.fields.source.searchOptions[x].value===b.source){B[z.iterator+"SearchSelectValue"]=z.fields.source.searchOptions[x];break}b.status&&(B[z.iterator+"ExtraParms"]="&inventory_source__status__icontains="+b.status)}b.has_external_source&&(B[z.iterator+"SearchField"]="has_external_source",B[z.iterator+"SearchValue"]=z.fields.has_external_source.searchValue,B[z.iterator+"InputDisable"]=!0,B[z.iterator+"SearchType"]="in",B[z.iterator+"SearchFieldLabel"]=z.fields.has_external_source.label),B.search(z.iterator),f(),B.showActivity=function(){p({scope:B})},B.editGroup=function(a,b){q({scope:B,group_id:a,inventory_id:b,groups_reload:!1})},B.viewUpdateStatus=function(a){B.groups=B.home_groups,o({scope:B,tree_id:a})},B.updateGroup=function(a){var b=w({list:B.home_groups,key:"id",val:a});b&&(u(b.source)||("updating"===b.status?s("Update in Progress","The inventory update process is currently running for group "+b.name+". Use the Refresh button to monitor the status.","alert-info"):(r("start"),t.setUrl(b.related.inventory_source),t.get().success(function(a){v({scope:B,url:a.related.update,group_name:a.summary_fields.group.name,group_source:a.source,tree_id:b.id,group_id:b.id})}).error(function(a,c){e(B,a,c,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+b.related.inventory_source+" POST returned status: "+c})}))))},B.refresh=function(){B.search(z.iterator,null,!1,!0)}}function HomeHosts(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){h("htmlTemplate");var s=d,t=c,u=i("hosts"),v=s.inject(t,{mode:"edit"});v.removePostRefresh&&v.removePostRefresh(),v.removePostRefresh=v.$on("PostRefresh",function(){for(var a=0;a0?(z.inventories[a].failed_hosts_tip=z.inventories[a].hosts_with_active_failures+(1===z.inventories[a].hosts_with_active_failures?" host":" hosts")+" with job failures. Click to view details.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="true"):0===z.inventories[a].total_hosts?(z.inventories[a].failed_hosts_tip="No hosts defined. Click to add.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="na"):(z.inventories[a].failed_hosts_tip=z.inventories[a].total_hosts+(z.inventories[a].total_hosts>1?" hosts":" host")+" with no job failures. Click to view details.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="false"),z.inventories[a].status=z.inventories[a].inventory_sources_with_failures+" / "+z.inventories[a].total_inventory_sources,z.inventories[a].inventory_sources_with_failures>0?(z.inventories[a].status_tip=z.inventories[a].inventory_sources_with_failures+" cloud "+(1===z.inventories[a].inventory_sources_with_failures?"source":"sources")+" with failures. Click to view details.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="failed"):0===z.inventories[a].total_inventory_sources?(z.inventories[a].status_tip="Not synced with a cloud source. Click to edit.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="na"):(z.inventories[a].status_tip=z.inventories[a].total_inventory_sources+" cloud "+(z.inventories[a].total_inventory_sources>1?"sources":"source")+" with no failures. Click to view details.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="successful")}),z.removeRefreshInventories&&z.removeRefreshInventories(),z.removeRefreshInventories=z.$on("RefreshInventories",function(){z.search(u.iterator)}),z.showActivity=function(){s({scope:z})},z.editInventoryProperties=function(a){t({scope:z,inventory_id:a})},z.addInventory=function(){c.path(c.path()+"/add")},z.editInventory=function(a){c.path(c.path()+"/"+a)},z.deleteInventory=function(a,b){var c=function(){var b=v+a+"/";$("#prompt-modal").on("hidden.bs.modal",function(){r("start")}),$("#prompt-modal").modal("hide"),f.setUrl(b),f.destroy().success(function(){z.search(u.iterator)}).error(function(a,c){r("stop"),p(z,a,c,null,{hdr:"Error!",msg:"Call to "+b+" failed. DELETE returned status: "+c})})};k({hdr:"Delete",body:"Are you sure you want to delete "+b+"?",action:c})},z.lookupOrganization=function(a){f.setUrl(q("organizations")+a+"/"),f.get().success(function(a){return a.name})},z.viewJobs=function(a){c.url("/jobs/?inventory__int="+a)},z.viewFailedJobs=function(a){c.url("/jobs/?inventory__int="+a+"&status=failed")}}function InventoriesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){n("htmlTemplate");var w,x=t("inventory"),y=g,z=h;y.well=!0,y.formLabelSize=null,y.formFieldSize=null,w=z.inject(y,{mode:"add",related:!1}),w.inventoryParseType="yaml",z.reset(),l(),u(w,"inventory_variables","inventoryParseType"),s({scope:w,form:y,current_item:f.organization_id?f.organization_id:null,list:p,field:"organization"}),w.formSave=function(){z.clearApiErrors(),v("start");try{var a,b,c;if(b="json"===w.inventoryParseType?JSON.parse(w.inventory_variables):jsyaml.load(w.inventory_variables),"object"!=typeof b)throw"failed to return an object!";c={};for(a in y.fields)"inventory_variables"!==a&&(y.fields[a].realName?c[y.fields[a].realName]=w[a]:c[a]=w[a]);i.setUrl(x),i.post(c).success(function(a){var c=a.id;w.inventory_variables?(i.setUrl(a.related.variable_data),i.put(b).success(function(){v("stop"),d.path("/inventories/"+c+"/")}).error(function(a,b){v("stop"),k(w,a,b,null,{hdr:"Error!",msg:"Failed to add inventory varaibles. PUT returned status: "+b})})):(v("stop"),d.path("/inventories/"+c+"/"))}).error(function(a,b){v("stop"),k(w,a,b,y,{hdr:"Error!",msg:"Failed to add new inventory. Post returned status: "+b})})}catch(e){v("stop"),j("Error","Error parsing inventory variables. Parser returned: "+e)}},w.formReset=function(){z.reset()}}function InventoriesEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P){f("htmlTemplate");var Q=e,R=g;a.inventory_id=c.inventory_id,r({path:b.path(),title:"{{ inventory_name }}"}),a.removeGroupTreeLoaded&&a.removeGroupTreeLoaded(),a.removeGroupTreeLoaded=a.$on("GroupTreeLoaded",function(b,c,e){var f,g;f=angular.element(document.getElementById("breadcrumbs")),f.html(q({list:R,mode:"edit"})),d(f)(a),Q.inject(R,{mode:"edit",id:"groups-container",breadCrumbs:!1,searchSize:"col-lg-5 col-md-5 col-sm-5"}),a.groups=e,a.inventory_name=c,a.groups.length>0?(a.selected_tree_id=a.groups[0].id,a.selected_group_id=a.groups[0].group_id,a.groups[0].selected_class="selected",a.groups[0].active_class="active-row",a.selected_group_name=a.groups[0].name):(a.selected_tree_id=null,a.selected_group_id=null),a.show_failures=!1,l({scope:a,inventory_id:a.inventory_id,tree_id:a.selected_tree_id,group_id:a.selected_group_id}),setTimeout(function(){$("#groups_table .name-column").each(function(){var a,b,c,d,e;a=$(this).width(),b=$(this).find(".level").width(),c=parseInt($(this).find(".level").css("padding-left").replace(/px/,"")),d=b+c,e=100-Math.ceil(d/a*100)+"%",$(this).find(".group-name").css({width:e})}),L("#groups_table .group-name a"),L("#hosts_table .host-name a")},2500),M(),g=P("inventoryAutoHelp"),"off"!==g&&a.autoShowGroupHelp&&a.showGroupHelp({autoShow:!0})}),a.removeGroupTreeRefreshed&&a.removeGroupTreeRefreshed(),a.removeGroupTreeRefreshed=a.$on("GroupTreeRefreshed",function(){setTimeout(function(){L("#groups_table .group-name a")},2500),a.showHosts(a.selected_tree_id,a.selected_group_id,!1)}),a.removeGroupDeleteCompleted&&a.removeGroupDeleteCompleted(),a.removeGroupDeleteCompleted=a.$on("GroupDeleteCompleted",function(){a.selected_tree_id=1,a.selected_group_id=null,i({scope:a,inventory_id:a.inventory_id,refresh:!0})}),a.removeCopMoveGroup&&a.removeCopyMoveGroup(),a.removeCopyMoveGroup=a.$on("CopyMoveGroup",function(b,c,d){G({scope:a,target_tree_id:d,inbound_tree_id:c})}),a.removeCopMoveHost&&a.removeCopyMoveHost(),a.removeCopyMoveHost=a.$on("CopyMoveHost",function(b,c,d){H({scope:a,target_tree_id:c,host_id:d})}),a.showHosts=function(b,c,d){if(null!==b){j("start"),a.selected_tree_id=b,a.selected_group_id=c,a.hosts=[],a.show_failures=d;for(var e=0;e"+c.name+". Use the Refresh button to monitor the status.","alert-info"):(j("start"),t.setUrl(c.related.inventory_source),t.get().success(function(b){v({scope:a,url:b.related.update,group_name:b.summary_fields.group.name,group_source:b.source,tree_id:c.id,group_id:c.group_id})}).error(function(b,d){j("stop"),u(a,b,d,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+c.related.inventory_source+" POST returned status: "+d})}))))},a.cancelUpdate=function(b){z({scope:a,tree_id:b})},a.toggle=function(b){x({scope:a,list:R,id:b})},a.refreshGroups=function(b,c){b&&(a.selected_tree_id=b,a.selected_group_id=c),i({scope:a,inventory_id:a.inventory_id,refresh:!0})},a.viewUpdateStatus=function(b,c){y({scope:a,tree_id:b,group_id:c})},a.deleteGroup=function(b,c){p({scope:a,tree_id:b,group_id:c,inventory_id:a.inventory_id})},a.createHost=function(){B({scope:a})},a.editInventoryProperties=function(){C({scope:a,inventory_id:a.inventory_id})},a.editHost=function(b){D({scope:a,host_id:b,inventory_id:a.inventory_id})},a.deleteHost=function(b,c){E({scope:a,host_id:b,host_name:c})},a.toggleHostEnabled=function(b,c){F({scope:a,host_id:b,external_source:c})},a.showGroupActivity=function(){var b,c,d;a.selected_group_id?(d=A({list:a.groups,key:"id",val:a.selected_tree_id}),b=J("activity_stream")+"?group__id="+a.selected_group_id,c="Showing all activities for group "+d.name):(c="Showing all activities for all "+a.inventory_name+" groups",b=J("activity_stream")+"?group__inventory__id="+a.inventory_id),I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showHostActivity=function(){var b,c;c="Showing all activities for all "+a.inventory_name+" hosts",b=J("activity_stream")+"?host__inventory__id="+a.inventory_id,I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showJobSummary=function(a){K({job_id:a})},a.showGroupHelp=function(a){var b={defn:O};a&&(b.autoShow=a.autoShow||!1),N(b)},i({scope:a,inventory_id:a.inventory_id,refresh:!1})}function JobEventsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){function y(a){var b,c,d,e,f,g="",h=!1;if(a.res){if("string"==typeof a.res)c=a.res.match(/\n/g),d=c?c.length:1,d=d>10?10:d,h=!0,g+='
\n',g+="\n",g+='\n",g+="
\n";else for(e in a.res){if(("msg"===e||"stdout"===e||"stderr"===e)&&null!==a.res[e]&&""!==a.res[e]){switch(g+='
\n',g+="\n",c=a.res[e].match(/\n/g),d=c?c.length:1,d=d>10?10:d,g+='\n",g+="
\n",h=!0}if("results"===e&&Array.isArray(a.res[e])&&a.res[e].length>0){for(f="",b=0;b10?10:d,""!==f&&(g+='
\n',g+="\n",g+='\n",g+="
\n",h=!0)}"rc"===e&&""!==a.res[e]&&(g+='
\n',g+="\n",g+='\n',g+="
\n",h=!0)}g=h?'
\n'+g+"
\n":""}return g=a.hosts?''+a.host+"\n"+g:""===g?null:g}p("htmlTemplate");var z,A=i,B=r("jobs")+f.id+"/job_events/",C=j,D=C.inject(A,{mode:"edit"});A.base=d.path(),D.job_id=f.id,c.flashMessage=null,D.selected=[],D.expand=!0,D.parentNode="parent-event",D.childNode="child-event",D.removeSetHostLinks&&D.removeSetHostLinks(),D.removeSetHostLinks=D.$on("SetHostLinks",function(a,b){for(var c=0;c15?5:e,$('textarea[name="'+c+'"]').attr("rows",e)));break;case"module_name":case"module_args":a.event_data.res&&a.event_data.res.invocation&&(t[c]=a.event_data.res.invocation.fld)}q("stop")}).error(function(a){k(t,a,status,null,{hdr:"Error!",msg:"Failed to retrieve host: "+f.event_id+". GET status: "+status})}),t.navigateBack=function(){var a="/jobs/"+f.job_id+"/job_events";f.page&&(a+="?page="+f.page),d.url(a)},t.rawView=function(){p({event_id:t.id})}}function JobHostSummaryList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){o("htmlTemplate");var u=h,v=c.path().replace(/^\//,"").split("/")[0],w=q(v)+e.id+"/job_host_summaries/",x=i,y=x.inject(u,{mode:"edit"});u.index="hosts"===v?!1:!0,y.selected=[],"hosts"===v?(y.job_id=null,y.host_id=e.id):(y.job_id=e.id,y.host_id=null),y.RemoveSetHostLink&&y.RemoveSetHostLink(),y.RemoveSetHostLink=y.$on("setHostLink",function(a,b){for(var c=0;c0?y.jobhosts[0].summary_fields.host.name:"Host"}),e.inventory&&y.$emit("setHostLink",e.inventory))}),l({scope:y,set:"jobhosts",list:u,url:w}),m({scope:y,list:u,url:w}),e.host_name&&(y[u.iterator+"SearchField"]="host",y[u.iterator+"SearchValue"]=e.host_name,y[u.iterator+"SearchFieldLabel"]=u.fields.host.label),y.search(u.iterator),y.showEvents=function(a,b){f.setUrl(b),f.get().success(function(b){j({path:"/jobs/"+b.id,title:b.name}),c.url("/jobs/"+b.id+"/job_events/?host="+encodeURI(a))}).error(function(a,c){p(y,a,c,null,{hdr:"Error!",msg:"Failed to lookup last job: "+b+". GET status: "+c})})},y.showJob=function(a){c.path("/jobs/"+a)},y.refresh=function(){null===y.host_id&&(y.jobSearchSpin=!0,y.jobLoading=!0,t("start"),r({scope:y,set:"jobhosts",iterator:"jobhost",url:y.current_url}))}}function JobTemplatesList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){o("htmlTemplate");var y=h,z=q("job_templates"),A=i,B=c.path().replace(/^\//,"").split("/")[0],C="job_templates"===B?"edit":"select",D=A.inject(y,{mode:C});b.flashMessage=null,D.removePostRefresh&&D.removePostRefresh(),D.removePostRefresh=D.$on("PostRefresh",function(){w("stop"),$("#prompt-modal").off()}),l({scope:D,set:"job_templates",list:y,url:z}),m({scope:D,list:y,url:z}),e.name&&(D[y.iterator+"SearchField"]="name",D[y.iterator+"SearchValue"]=e.name,D[y.iterator+"SearchFieldLabel"]=y.fields.name.label),D.search(y.iterator),j(),D.showActivity=function(){x({scope:D})},D.addJobTemplate=function(){c.path(c.path()+"/add")},D.editJobTemplate=function(a){c.path(c.path()+"/"+a)},D.deleteJobTemplate=function(a,b){var c=function(){$("#prompt-modal").on("hidden.bs.modal",function(){w("start")}),$("#prompt-modal").modal("hide");var b=z+a+"/";f.setUrl(b),f.destroy().success(function(){D.search(y.iterator)}).error(function(a){w("stop"),p(D,a,status,null,{hdr:"Error!",msg:"Call to "+b+" failed. DELETE returned status: "+status})})};k({hdr:"Delete",body:"Are you sure you want to delete "+b+"?",action:c})},D.submitJob=function(a){v({scope:D,id:a})}}function JobTemplatesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){n("htmlTemplate");var x,y,z=o("job_templates"),A=g,B=h,C=B.inject(A,{mode:"add",related:!1}),D={},E={};C.parseType="yaml",u(C),C.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],C.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],C.playbook_options=[],C.allow_callbacks="false",B.reset(),l(),t({scope:C,master:D,check_field:"allow_callbacks",default_val:!1}),s({scope:C,form:A,current_item:null,list:p,field:"inventory"}),jQuery.extend(!0,E,q),E.name="cloudcredentials",E.iterator="cloudcredential",s({url:o("credentials")+"?cloud=true",scope:C,form:A,current_item:null,list:E,field:"cloud_credential",hdr:"Select Cloud Credential"}),s({url:o("credentials")+"?kind=ssh",scope:C,form:A,current_item:null,list:q,field:"credential",hdr:"Select Machine Credential"}),x=function(a,b){var c;a!==b&&C.project&&(v("start"),c=o("projects")+C.project+"/playbooks/",i.setUrl(c),i.get().success(function(a){var b,c=[];for(b=0;b=2)for(var a in O)J.search(O[a].iterator)}),J.removeRelatedJobs&&J.removeRelatedJobs(),J.removeRelatedJobs=J.$on("relatedjobs",function(){var a,b; +if(J.jobs&&J.jobs.length)for(a=0;a0)for(c=0;c/g," ");for(y in z.fields.status.searchOptions)if(z.fields.status.searchOptions[y].value===e.status){C[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[y];break}}C.search(z.iterator),j(),C.refresh=function(){x("start"),C.jobLoading=!1,u({scope:C,set:"jobs",iterator:"job",url:C.current_url})},C.refreshJob=C.refresh,C.editJob=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a)},C.viewEvents=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_events")},C.viewSummary=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_host_summaries")},C.deleteJob=function(a){f.setUrl(A+a+"/"),f.get().success(function(b){var c,d,e,g;"pending"===b.status||"running"===b.status||"waiting"===b.status?(d=b.related.cancel,e="cancel",g="Cancel Job"):(d=A+a+"/",e="delete",g="Delete Job"),c=function(){f.setUrl(d),"cancel"===e?f.post().success(function(){$("#prompt-modal").modal("hide"),C.search(z.iterator)}).error(function(a,b){$("#prompt-modal").modal("hide"),p(C,a,b,null,{hdr:"Error!",msg:"Call to "+d+" failed. POST returned status: "+b})}):f.destroy().success(function(){$("#prompt-modal").modal("hide"),C.search(z.iterator)}).error(function(a,b){$("#prompt-modal").modal("hide"),p(C,a,b,null,{hdr:"Error!",msg:"Call to "+d+" failed. DELETE returned status: "+b})})},k({hdr:g,body:"Are you sure you want to "+e+" job "+a+"?",action:c})}).error(function(a,b){p(C,a,b,null,{hdr:"Error!",msg:"Failed to get job details. GET returned status: "+b})})},C.submitJob=function(a,b){s({scope:C,id:a,template:b})}}function JobsEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z){function A(a){if(null!==a&&""!==a&&void 0!==a){var b=v("projects")+a+"/playbooks/";i.setUrl(b),i.get().success(function(a){F.playbook_options=[];for(var b=0;b15?15:c}p("htmlTemplate");var C=v("jobs"),D=h,E=g,F=D.inject(E,{mode:"edit",related:!0}),G={},H=f.id,I={},J=0;D.reset(),F.job_id=H,F.parseType="yaml",F.statusSearchSpin=!1,F.jobLoadedRemove&&F.jobLoadedRemove(),F.jobLoadedRemove=F.$on("jobLoaded",function(a,b){A(F.project),F[E.name+"ReadOnly"]="new"===F.status?!1:!0,$("#forks-slider").slider("option","value",F.forks),$("#forks-slider").slider("disable"),$('input[type="checkbox"]').attr("disabled","disabled"),$('input[type="radio"]').attr("disabled","disabled"),$("#host_config_key-gen-btn").attr("disabled","disabled"),$("textarea").attr("readonly","readonly"),i.setUrl(F.template_url),i.get().success(function(a){var b=a.host_config_key?"true":"false";F.host_config_key=a.host_config_key,w({scope:F,master:G,check_field:"allow_callbacks",default_val:b}),F.callback_url=a.related?a.related.callback:"<< Job template not found >>",F.$emit("jobTemplateLoadFinished")}).error(function(){z("stop"),F.callback_url="<< Job template not found >>"}),b?(i.setUrl(b),i.get().success(function(a){F.cloud_credential_name=a.name,F.$emit("jobTemplateLoadFinished")}).error(function(a,b){k(F,a,b,null,{hdr:"Error!",msg:"Failed to related cloud credential. GET returned status: "+b})})):F.$emit("jobTemplateLoadFinished")}),F.removeJobTemplateLoadFinished&&F.removeJobTemplateLoadFinished(),F.removeJobTemplateLoadFinished=F.$on("jobTemplateLoadFinished",function(){J++,J>=3&&z("stop")}),F.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],F.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],F.playbook_options=null,F.playbook=null,z("start"),i.setUrl(C+":id/"),i.get({params:{id:H}}).success(function(a){var b,c,d,e,f,g;l();for(d in E.fields){if("variables"!==d&&null!==a[d]&&void 0!==a[d]){if("select"===E.fields[d].type)if(F[d+"_options"]&&F[d+"_options"].length>0)for(b=0;b/g," ");for(a in A.fields.scm_type.searchOptions)if(A.fields.scm_type.searchOptions[a].value===e.scm_type){F[A.iterator+"SearchSelectValue"]=A.fields.scm_type.searchOptions[a];break}}else if(e.status){F[A.iterator+"SearchValue"]=e.status,F[A.iterator+"SearchField"]="status",F[A.iterator+"SelectShow"]=!0,F[A.iterator+"SearchFieldLabel"]=A.fields.status.label,F[A.iterator+"SearchSelectOpts"]=A.fields.status.searchOptions;for(a in A.fields.status.searchOptions)if(A.fields.status.searchOptions[a].value===e.status){F[A.iterator+"SearchSelectValue"]=A.fields.status.searchOptions[a];break}}F.search(A.iterator)}),F.removeChoicesReady&&F.removeChoicesReady(),F.removeChoicesReady=F.$on("choicesReadyProject",function(){H++,2===H&&F.$emit("choicesCompleteProject")}),y({scope:F,url:B,field:"status",variable:"project_status_options",callback:"choicesReadyProject"}),y({scope:F,url:B,field:"scm_type",variable:"project_scm_type_options",callback:"choicesReadyProject"}),j(),F.showActivity=function(){x({scope:F})},F.addProject=function(){c.path(c.path()+"/add")},F.editProject=function(a){c.path(c.path()+"/"+a)},F.showSCMStatus=function(a){var b,c=F.$on("PostRefresh",function(){var d;for(b=0;bRefresh button to view the latest status.","alert-info")}).error(function(a,b){p(F,a,b,null,{hdr:"Error!",msg:"Call to "+c+" failed. GET status: "+b})})}),F.cancelUpdate=function(a,b){var c,d,e=!1;for(c=0;cRefresh button to view the latet status.","alert-info")},F.refresh=function(){w("start"),F.projectLoading=!1,v({scope:F,set:"projects",iterator:"project",url:F.current_url})},F.SCMUpdate=function(a){var b;for(b=0;bb;b++){for(d[b].match(/[A-Z]/g)?(""!==R&&R+1==b&&(y++,C++),R=b,o++):d[b].match(/[a-z]/g)?(""!==S&&S+1==b&&(z++,C++),S=b,p++):d[b].match(/[0-9]/g)?(b>0&&e-1>b&&s++,""!==T&&T+1==b&&(A++,C++),T=b,q++):d[b].match(/[^a-zA-Z0-9_]/g)&&(b>0&&e-1>b&&s++,""!==U&&U+1==b&&(B++,C++),U=b,r++),f=!1,g=0;e>g;g++)d[b]==d[g]&&b!=g&&(f=!0,x+=Math.abs(e/(g-b)));f&&(w++,v=e-w,x=Math.ceil(v?x/v:x))}for(h=0;23>h;h++)i=ib.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(D++,G++);for(h=0;8>h;h++)i=jb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(E++,G++);for(h=0;8>h;h++)i=kb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(F++,G++);o>0&&n>o&&(nScore=parseInt(nScore+2*(n-o)),V="+ "+parseInt(2*(n-o))),p>0&&n>p&&(nScore=parseInt(nScore+2*(n-p)),W="+ "+parseInt(2*(n-p))),q>0&&n>q&&(nScore=parseInt(nScore+q*P),X="+ "+parseInt(q*P)),r>0&&(nScore=parseInt(nScore+r*Q),Y="+ "+parseInt(r*Q)),s>0&&(nScore=parseInt(nScore+s*H),Z="+ "+parseInt(s*H)),(p>0||o>0)&&0===r&&0===q&&(nScore=parseInt(nScore-n),t=n,_="- "+n),0===p&&0===o&&0===r&&q>0&&(nScore=parseInt(nScore-n),u=n,ab="- "+n),w>0&&(nScore=parseInt(nScore-x),bb="- "+x),y>0&&(nScore=parseInt(nScore-y*I),cb="- "+parseInt(y*I)),z>0&&(nScore=parseInt(nScore-z*J),db="- "+parseInt(z*J)),A>0&&(nScore=parseInt(nScore-A*K),eb="- "+parseInt(A*K)),D>0&&(nScore=parseInt(nScore-D*L),fb="- "+parseInt(D*L)),E>0&&(nScore=parseInt(nScore-E*M),gb="- "+parseInt(E*M)),F>0&&(nScore=parseInt(nScore-F*N),hb="- "+parseInt(F*N)),nScore>100?nScore=100:0>nScore&&(nScore=0),k=$("#progbar"),l=$AnsibleConfig.password_strength,m=$AnsibleConfig.password_strength-15<0?0:$AnsibleConfig.password_strength-15,k.css("width",nScore+"%"),nScore>=0&&m>=nScore?(lb="Weak",k.addClass("progress-bar-danger"),k.removeClass("progress-bar-success progress-bar-warning")):nScore>m&&l>=nScore?(lb="Good",k.addClass("progress-bar-warning"),k.removeClass("progress-bar-success progress-bar-danger")):nScore>l&&(lb="Strong",k.addClass("progress-bar-success"),k.removeClass("progress-bar-warning progress-bar-danger"))}else k=$("#progbar"),k.css("width","0%"),k.removeClass("progress-bar-success progress-bar-warning");return nScore}function AdminsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q=h,r=o("organizations")+e.organization_id+"/users/",s=i,t="select",u=s.inject(h,{mode:t}),v=o("organizations")+e.organization_id+"/admins/";p({scope:u,list:q,url:v,returnToCaller:1}),l({scope:u,set:"admins",list:q,url:r}),m({scope:u,list:q,url:r}),u.search(q.iterator),j()}function Authenticate(a,b,c,d,e,f,g,h,i,j,k){var l,m,n,o;l=function(){$("#login-username").focus()},n=k(d.sessionExpired)?a.get("sessionExpired"):d.sessionExpired,m=function(){return k(d.lastPath)?a.get("lastPath"):d.lastPath},$AnsibleConfig.debug_mode&&console&&(console.log("User session expired: "+n),console.log("Last URL: "+m())),$(".modal[aria-hidden=false]").each(function(){"login-modal"!==$(this).attr("id")&&$(this).modal("hide")}),i("stop"),$("#login-modal").modal({show:!0,keyboard:!1,backdrop:"static"}),$("#login-modal").on("shown.bs.modal",function(){l()}),o=angular.element(document.getElementById("login-modal")).scope(),o.login_username=null,o.login_password=null,o.loginForm.login_username.$setPristine(),o.loginForm.login_password.$setPristine(),"/logout"===e.path()&&f.logout(),d.userLoggedIn=!1,a.put("userLoggedIn",!1),$("#login-password").bind("keypress",function(a){var b=a.keyCode?a.keyCode:a.which;13===b&&$("#login-button").click()}),o.reset=function(){$("#login-form input").each(function(){$(this).val("")})},o.systemLogin=function(a,b){$(".api-error").empty();var c;k(a)||k(b)?h("Error!","Please provide a username and password before attempting to login.","alert-danger",l):(i("start"),f.retrieveToken(a,b).success(function(a,b){$("#login-modal").modal("hide"),c=a.token,f.setToken(a.token,a.expires),d.sessionTimer=j.init(),f.getUser().success(function(a){f.setUserInfo(a),d.user_is_superuser=a.results[0].is_superuser,f.getLicense().success(function(a){f.setLicense(a.license_info),m()?e.path(m()):e.url("/home?login=true")}).error(function(){i("stop"),h("Error","Failed to access user information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){i("stop"),h("Error","Failed to access license information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){var c,d,e;if(i("stop"),a.non_field_errors&&0===a.non_field_errors.length)for(e in a)o[e+"Error"]=a[e][0];else a.non_field_errors&&a.non_field_errors.length>0?(c="Error",d=a.non_field_errors[0]):(c="Error",d="The login attempt failed with a status of: "+b),o.reset(),h(c,d,"alert-danger",l)}))}}function CredentialsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){o("htmlTemplate"),t("start");var v,w=h,x=q("credentials"),y=i,z=c.path().replace(/^\//,"").split("/")[0],A="credentials"===z?"edit":"select",B=y.inject(w,{mode:A});B.selected=[],B.credentialLoading=!0,v=q(z)+("users"===z?e.user_id+"/credentials/":e.team_id+"/credentials/"),r({scope:B,list:w,url:v,returnToCaller:1}),B.removePostRefresh&&B.removePostRefresh(),B.removePostRefresh=B.$on("PostRefresh",function(){var a,b;for(t("stop"),$("#prompt-modal").off(),w.fields.kind.searchOptions=B.credential_kind_options,a=0;a/g," ");for(x in z.fields.status.searchOptions)if(z.fields.status.searchOptions[x].value===b.status){B[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[x];break}}if(b.source){B[z.iterator+"SearchField"]="source",B[z.iterator+"SelectShow"]=!0,B[z.iterator+"SearchSelectOpts"]=z.fields.source.searchOptions,B[z.iterator+"SearchFieldLabel"]=z.fields.source.label.replace(//g," ");for(x in z.fields.source.searchOptions)if(z.fields.source.searchOptions[x].value===b.source){B[z.iterator+"SearchSelectValue"]=z.fields.source.searchOptions[x];break}b.status&&(B[z.iterator+"ExtraParms"]="&inventory_source__status__icontains="+b.status)}b.has_external_source&&(B[z.iterator+"SearchField"]="has_external_source",B[z.iterator+"SearchValue"]=z.fields.has_external_source.searchValue,B[z.iterator+"InputDisable"]=!0,B[z.iterator+"SearchType"]="in",B[z.iterator+"SearchFieldLabel"]=z.fields.has_external_source.label),B.search(z.iterator),f(),B.showActivity=function(){p({scope:B})},B.editGroup=function(a,b){q({scope:B,group_id:a,inventory_id:b,groups_reload:!1})},B.viewUpdateStatus=function(a){B.groups=B.home_groups,o({scope:B,tree_id:a})},B.updateGroup=function(a){var b=w({list:B.home_groups,key:"id",val:a});b&&(u(b.source)||("updating"===b.status?s("Update in Progress","The inventory update process is currently running for group "+b.name+". Use the Refresh button to monitor the status.","alert-info"):(r("start"),t.setUrl(b.related.inventory_source),t.get().success(function(a){v({scope:B,url:a.related.update,group_name:a.summary_fields.group.name,group_source:a.source,tree_id:b.id,group_id:b.id})}).error(function(a,c){e(B,a,c,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+b.related.inventory_source+" POST returned status: "+c})}))))},B.refresh=function(){B.search(z.iterator,null,!1,!0)}}function HomeHosts(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){h("htmlTemplate");var s=d,t=c,u=i("hosts"),v=s.inject(t,{mode:"edit"});v.removePostRefresh&&v.removePostRefresh(),v.removePostRefresh=v.$on("PostRefresh",function(){for(var a=0;a0?(z.inventories[a].failed_hosts_tip=z.inventories[a].hosts_with_active_failures+(1===z.inventories[a].hosts_with_active_failures?" host":" hosts")+" with job failures. Click to view details.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="true"):0===z.inventories[a].total_hosts?(z.inventories[a].failed_hosts_tip="No hosts defined. Click to add.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="na"):(z.inventories[a].failed_hosts_tip=z.inventories[a].total_hosts+(z.inventories[a].total_hosts>1?" hosts":" host")+" with no job failures. Click to view details.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="false"),z.inventories[a].status=z.inventories[a].inventory_sources_with_failures+" / "+z.inventories[a].total_inventory_sources,z.inventories[a].inventory_sources_with_failures>0?(z.inventories[a].status_tip=z.inventories[a].inventory_sources_with_failures+" cloud "+(1===z.inventories[a].inventory_sources_with_failures?"source":"sources")+" with failures. Click to view details.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="failed"):0===z.inventories[a].total_inventory_sources?(z.inventories[a].status_tip="Not synced with a cloud source. Click to edit.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="na"):(z.inventories[a].status_tip=z.inventories[a].total_inventory_sources+" cloud "+(z.inventories[a].total_inventory_sources>1?"sources":"source")+" with no failures. Click to view details.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="successful") +}),z.removeRefreshInventories&&z.removeRefreshInventories(),z.removeRefreshInventories=z.$on("RefreshInventories",function(){z.search(u.iterator)}),z.showActivity=function(){s({scope:z})},z.editInventoryProperties=function(a){t({scope:z,inventory_id:a})},z.addInventory=function(){c.path(c.path()+"/add")},z.editInventory=function(a){c.path(c.path()+"/"+a)},z.deleteInventory=function(a,b){var c=function(){var b=v+a+"/";$("#prompt-modal").on("hidden.bs.modal",function(){r("start")}),$("#prompt-modal").modal("hide"),f.setUrl(b),f.destroy().success(function(){z.search(u.iterator)}).error(function(a,c){r("stop"),p(z,a,c,null,{hdr:"Error!",msg:"Call to "+b+" failed. DELETE returned status: "+c})})};k({hdr:"Delete",body:"Are you sure you want to delete "+b+"?",action:c})},z.lookupOrganization=function(a){f.setUrl(q("organizations")+a+"/"),f.get().success(function(a){return a.name})},z.viewJobs=function(a){c.url("/jobs/?inventory__int="+a)},z.viewFailedJobs=function(a){c.url("/jobs/?inventory__int="+a+"&status=failed")}}function InventoriesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){n("htmlTemplate");var w,x=t("inventory"),y=g,z=h;y.well=!0,y.formLabelSize=null,y.formFieldSize=null,w=z.inject(y,{mode:"add",related:!1}),w.inventoryParseType="yaml",z.reset(),l(),u(w,"inventory_variables","inventoryParseType"),s({scope:w,form:y,current_item:f.organization_id?f.organization_id:null,list:p,field:"organization"}),w.formSave=function(){z.clearApiErrors(),v("start");try{var a,b,c;if(b="json"===w.inventoryParseType?JSON.parse(w.inventory_variables):jsyaml.load(w.inventory_variables),"object"!=typeof b)throw"failed to return an object!";c={};for(a in y.fields)"inventory_variables"!==a&&(y.fields[a].realName?c[y.fields[a].realName]=w[a]:c[a]=w[a]);i.setUrl(x),i.post(c).success(function(a){var c=a.id;w.inventory_variables?(i.setUrl(a.related.variable_data),i.put(b).success(function(){v("stop"),d.path("/inventories/"+c+"/")}).error(function(a,b){v("stop"),k(w,a,b,null,{hdr:"Error!",msg:"Failed to add inventory varaibles. PUT returned status: "+b})})):(v("stop"),d.path("/inventories/"+c+"/"))}).error(function(a,b){v("stop"),k(w,a,b,y,{hdr:"Error!",msg:"Failed to add new inventory. Post returned status: "+b})})}catch(e){v("stop"),j("Error","Error parsing inventory variables. Parser returned: "+e)}},w.formReset=function(){z.reset()}}function InventoriesEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P){f("htmlTemplate");var Q=e,R=g;a.inventory_id=c.inventory_id,r({path:b.path(),title:"{{ inventory_name }}"}),a.removeGroupTreeLoaded&&a.removeGroupTreeLoaded(),a.removeGroupTreeLoaded=a.$on("GroupTreeLoaded",function(b,c,e){var f,g;f=angular.element(document.getElementById("breadcrumbs")),f.html(q({list:R,mode:"edit"})),d(f)(a),Q.inject(R,{mode:"edit",id:"groups-container",breadCrumbs:!1,searchSize:"col-lg-5 col-md-5 col-sm-5"}),a.groups=e,a.inventory_name=c,a.groups.length>0?(a.selected_tree_id=a.groups[0].id,a.selected_group_id=a.groups[0].group_id,a.groups[0].selected_class="selected",a.groups[0].active_class="active-row",a.selected_group_name=a.groups[0].name):(a.selected_tree_id=null,a.selected_group_id=null),a.show_failures=!1,l({scope:a,inventory_id:a.inventory_id,tree_id:a.selected_tree_id,group_id:a.selected_group_id}),setTimeout(function(){$("#groups_table .name-column").each(function(){var a,b,c,d,e;a=$(this).width(),b=$(this).find(".level").width(),c=parseInt($(this).find(".level").css("padding-left").replace(/px/,"")),d=b+c,e=100-Math.ceil(d/a*100)+"%",$(this).find(".group-name").css({width:e})}),L("#groups_table .group-name a"),L("#hosts_table .host-name a")},2500),M(),g=P("inventoryAutoHelp"),"off"!==g&&a.autoShowGroupHelp&&a.showGroupHelp({autoShow:!0})}),a.removeGroupTreeRefreshed&&a.removeGroupTreeRefreshed(),a.removeGroupTreeRefreshed=a.$on("GroupTreeRefreshed",function(){setTimeout(function(){L("#groups_table .group-name a")},2500),a.showHosts(a.selected_tree_id,a.selected_group_id,!1)}),a.removeGroupDeleteCompleted&&a.removeGroupDeleteCompleted(),a.removeGroupDeleteCompleted=a.$on("GroupDeleteCompleted",function(){a.selected_tree_id=1,a.selected_group_id=null,i({scope:a,inventory_id:a.inventory_id,refresh:!0})}),a.removeCopMoveGroup&&a.removeCopyMoveGroup(),a.removeCopyMoveGroup=a.$on("CopyMoveGroup",function(b,c,d){G({scope:a,target_tree_id:d,inbound_tree_id:c})}),a.removeCopMoveHost&&a.removeCopyMoveHost(),a.removeCopyMoveHost=a.$on("CopyMoveHost",function(b,c,d){H({scope:a,target_tree_id:c,host_id:d})}),a.showHosts=function(b,c,d){if(null!==b){j("start"),a.selected_tree_id=b,a.selected_group_id=c,a.hosts=[],a.show_failures=d;for(var e=0;e"+c.name+". Use the Refresh button to monitor the status.","alert-info"):(j("start"),t.setUrl(c.related.inventory_source),t.get().success(function(b){v({scope:a,url:b.related.update,group_name:b.summary_fields.group.name,group_source:b.source,tree_id:c.id,group_id:c.group_id})}).error(function(b,d){j("stop"),u(a,b,d,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+c.related.inventory_source+" POST returned status: "+d})}))))},a.cancelUpdate=function(b){z({scope:a,tree_id:b})},a.toggle=function(b){x({scope:a,list:R,id:b})},a.refreshGroups=function(b,c){b&&(a.selected_tree_id=b,a.selected_group_id=c),i({scope:a,inventory_id:a.inventory_id,refresh:!0})},a.viewUpdateStatus=function(b,c){y({scope:a,tree_id:b,group_id:c})},a.deleteGroup=function(b,c){p({scope:a,tree_id:b,group_id:c,inventory_id:a.inventory_id})},a.createHost=function(){B({scope:a})},a.editInventoryProperties=function(){C({scope:a,inventory_id:a.inventory_id})},a.editHost=function(b){D({scope:a,host_id:b,inventory_id:a.inventory_id})},a.deleteHost=function(b,c){E({scope:a,host_id:b,host_name:c})},a.toggleHostEnabled=function(b,c){F({scope:a,host_id:b,external_source:c})},a.showGroupActivity=function(){var b,c,d;a.selected_group_id?(d=A({list:a.groups,key:"id",val:a.selected_tree_id}),b=J("activity_stream")+"?group__id="+a.selected_group_id,c="Showing all activities for group "+d.name):(c="Showing all activities for all "+a.inventory_name+" groups",b=J("activity_stream")+"?group__inventory__id="+a.inventory_id),I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showHostActivity=function(){var b,c;c="Showing all activities for all "+a.inventory_name+" hosts",b=J("activity_stream")+"?host__inventory__id="+a.inventory_id,I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showJobSummary=function(a){K({job_id:a})},a.showGroupHelp=function(a){var b={defn:O};a&&(b.autoShow=a.autoShow||!1),N(b)},i({scope:a,inventory_id:a.inventory_id,refresh:!1})}function JobEventsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){function y(a){var b,c,d,e,f,g="",h=!1;if(a.res){if("string"==typeof a.res)c=a.res.match(/\n/g),d=c?c.length:1,d=d>10?10:d,h=!0,g+='
\n',g+="\n",g+='\n",g+="
\n";else for(e in a.res){if(("msg"===e||"stdout"===e||"stderr"===e)&&null!==a.res[e]&&""!==a.res[e]){switch(g+='
\n',g+="\n",c=a.res[e].match(/\n/g),d=c?c.length:1,d=d>10?10:d,g+='\n",g+="
\n",h=!0}if("results"===e&&Array.isArray(a.res[e])&&a.res[e].length>0){for(f="",b=0;b10?10:d,""!==f&&(g+='
\n',g+="\n",g+='\n",g+="
\n",h=!0)}"rc"===e&&""!==a.res[e]&&(g+='
\n',g+="\n",g+='\n',g+="
\n",h=!0)}g=h?'
\n'+g+"
\n":""}return g=a.hosts?''+a.host+"\n"+g:""===g?null:g}p("htmlTemplate");var z,A=i,B=r("jobs")+f.id+"/job_events/",C=j,D=C.inject(A,{mode:"edit"});A.base=d.path(),D.job_id=f.id,c.flashMessage=null,D.selected=[],D.expand=!0,D.parentNode="parent-event",D.childNode="child-event",D.removeSetHostLinks&&D.removeSetHostLinks(),D.removeSetHostLinks=D.$on("SetHostLinks",function(a,b){for(var c=0;c15?5:e,$('textarea[name="'+c+'"]').attr("rows",e)));break;case"module_name":case"module_args":a.event_data.res&&a.event_data.res.invocation&&(t[c]=a.event_data.res.invocation.fld)}q("stop")}).error(function(a){k(t,a,status,null,{hdr:"Error!",msg:"Failed to retrieve host: "+f.event_id+". GET status: "+status})}),t.navigateBack=function(){var a="/jobs/"+f.job_id+"/job_events";f.page&&(a+="?page="+f.page),d.url(a)},t.rawView=function(){p({event_id:t.id})}}function JobHostSummaryList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){o("htmlTemplate");var u=h,v=c.path().replace(/^\//,"").split("/")[0],w=q(v)+e.id+"/job_host_summaries/",x=i,y=x.inject(u,{mode:"edit"});u.index="hosts"===v?!1:!0,y.selected=[],"hosts"===v?(y.job_id=null,y.host_id=e.id):(y.job_id=e.id,y.host_id=null),y.RemoveSetHostLink&&y.RemoveSetHostLink(),y.RemoveSetHostLink=y.$on("setHostLink",function(a,b){for(var c=0;c0?y.jobhosts[0].summary_fields.host.name:"Host"}),e.inventory&&y.$emit("setHostLink",e.inventory))}),l({scope:y,set:"jobhosts",list:u,url:w}),m({scope:y,list:u,url:w}),e.host_name&&(y[u.iterator+"SearchField"]="host",y[u.iterator+"SearchValue"]=e.host_name,y[u.iterator+"SearchFieldLabel"]=u.fields.host.label),y.search(u.iterator),y.showEvents=function(a,b){f.setUrl(b),f.get().success(function(b){j({path:"/jobs/"+b.id,title:b.name}),c.url("/jobs/"+b.id+"/job_events/?host="+encodeURI(a))}).error(function(a,c){p(y,a,c,null,{hdr:"Error!",msg:"Failed to lookup last job: "+b+". GET status: "+c})})},y.showJob=function(a){c.path("/jobs/"+a)},y.refresh=function(){null===y.host_id&&(y.jobSearchSpin=!0,y.jobLoading=!0,t("start"),r({scope:y,set:"jobhosts",iterator:"jobhost",url:y.current_url}))}}function JobTemplatesList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){o("htmlTemplate");var y=h,z=q("job_templates"),A=i,B=c.path().replace(/^\//,"").split("/")[0],C="job_templates"===B?"edit":"select",D=A.inject(y,{mode:C});b.flashMessage=null,D.removePostRefresh&&D.removePostRefresh(),D.removePostRefresh=D.$on("PostRefresh",function(){w("stop"),$("#prompt-modal").off()}),l({scope:D,set:"job_templates",list:y,url:z}),m({scope:D,list:y,url:z}),e.name&&(D[y.iterator+"SearchField"]="name",D[y.iterator+"SearchValue"]=e.name,D[y.iterator+"SearchFieldLabel"]=y.fields.name.label),D.search(y.iterator),j(),D.showActivity=function(){x({scope:D})},D.addJobTemplate=function(){c.path(c.path()+"/add")},D.editJobTemplate=function(a){c.path(c.path()+"/"+a)},D.deleteJobTemplate=function(a,b){var c=function(){$("#prompt-modal").on("hidden.bs.modal",function(){w("start")}),$("#prompt-modal").modal("hide");var b=z+a+"/";f.setUrl(b),f.destroy().success(function(){D.search(y.iterator)}).error(function(a){w("stop"),p(D,a,status,null,{hdr:"Error!",msg:"Call to "+b+" failed. DELETE returned status: "+status})})};k({hdr:"Delete",body:"Are you sure you want to delete "+b+"?",action:c})},D.submitJob=function(a){v({scope:D,id:a})}}function JobTemplatesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){n("htmlTemplate");var x,y,z=o("job_templates"),A=g,B=h,C=B.inject(A,{mode:"add",related:!1}),D={},E={};C.parseType="yaml",u(C),C.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],C.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],C.playbook_options=[],C.allow_callbacks="false",B.reset(),l(),t({scope:C,master:D,check_field:"allow_callbacks",default_val:!1}),s({scope:C,form:A,current_item:null,list:p,field:"inventory"}),jQuery.extend(!0,E,q),E.name="cloudcredentials",E.iterator="cloudcredential",s({url:o("credentials")+"?cloud=true",scope:C,form:A,current_item:null,list:E,field:"cloud_credential",hdr:"Select Cloud Credential"}),s({url:o("credentials")+"?kind=ssh",scope:C,form:A,current_item:null,list:q,field:"credential",hdr:"Select Machine Credential"}),x=function(a,b){var c;a!==b&&C.project&&(v("start"),c=o("projects")+C.project+"/playbooks/",i.setUrl(c),i.get().success(function(a){var b,c=[];for(b=0;b=2)for(var a in O)J.search(O[a].iterator)}),J.removeRelatedJobs&&J.removeRelatedJobs(),J.removeRelatedJobs=J.$on("relatedjobs",function(){var a,b;if(J.jobs&&J.jobs.length)for(a=0;a0)for(c=0;c/g," ");for(y in z.fields.status.searchOptions)if(z.fields.status.searchOptions[y].value===e.status){C[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[y];break}}C.search(z.iterator),j(),C.refresh=function(){x("start"),C.jobLoading=!1,u({scope:C,set:"jobs",iterator:"job",url:C.current_url})},C.refreshJob=C.refresh,C.editJob=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a)},C.viewEvents=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_events")},C.viewSummary=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_host_summaries")},C.deleteJob=function(a){f.setUrl(A+a+"/"),f.get().success(function(b){var c,d,e,g;"pending"===b.status||"running"===b.status||"waiting"===b.status?(d=b.related.cancel,e="cancel",g="Cancel Job"):(d=A+a+"/",e="delete",g="Delete Job"),c=function(){f.setUrl(d),"cancel"===e?f.post().success(function(){$("#prompt-modal").modal("hide"),C.search(z.iterator)}).error(function(a,b){$("#prompt-modal").modal("hide"),p(C,a,b,null,{hdr:"Error!",msg:"Call to "+d+" failed. POST returned status: "+b})}):f.destroy().success(function(){$("#prompt-modal").modal("hide"),C.search(z.iterator)}).error(function(a,b){$("#prompt-modal").modal("hide"),p(C,a,b,null,{hdr:"Error!",msg:"Call to "+d+" failed. DELETE returned status: "+b})})},k({hdr:g,body:"Are you sure you want to "+e+" job "+a+"?",action:c})}).error(function(a,b){p(C,a,b,null,{hdr:"Error!",msg:"Failed to get job details. GET returned status: "+b})})},C.submitJob=function(a,b){s({scope:C,id:a,template:b})}}function JobsEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z){function A(a){if(null!==a&&""!==a&&void 0!==a){var b=v("projects")+a+"/playbooks/";i.setUrl(b),i.get().success(function(a){F.playbook_options=[];for(var b=0;b15?15:c}p("htmlTemplate");var C=v("jobs"),D=h,E=g,F=D.inject(E,{mode:"edit",related:!0}),G={},H=f.id,I={},J=0;D.reset(),F.job_id=H,F.parseType="yaml",F.statusSearchSpin=!1,F.jobLoadedRemove&&F.jobLoadedRemove(),F.jobLoadedRemove=F.$on("jobLoaded",function(a,b){A(F.project),F[E.name+"ReadOnly"]="new"===F.status?!1:!0,$("#forks-slider").slider("option","value",F.forks),$("#forks-slider").slider("disable"),$('input[type="checkbox"]').attr("disabled","disabled"),$('input[type="radio"]').attr("disabled","disabled"),$("#host_config_key-gen-btn").attr("disabled","disabled"),$("textarea").attr("readonly","readonly"),i.setUrl(F.template_url),i.get().success(function(a){var b=a.host_config_key?"true":"false";F.host_config_key=a.host_config_key,w({scope:F,master:G,check_field:"allow_callbacks",default_val:b}),F.callback_url=a.related?a.related.callback:"<< Job template not found >>",F.$emit("jobTemplateLoadFinished")}).error(function(){z("stop"),F.callback_url="<< Job template not found >>"}),b?(i.setUrl(b),i.get().success(function(a){F.cloud_credential_name=a.name,F.$emit("jobTemplateLoadFinished")}).error(function(a,b){k(F,a,b,null,{hdr:"Error!",msg:"Failed to related cloud credential. GET returned status: "+b})})):F.$emit("jobTemplateLoadFinished")}),F.removeJobTemplateLoadFinished&&F.removeJobTemplateLoadFinished(),F.removeJobTemplateLoadFinished=F.$on("jobTemplateLoadFinished",function(){J++,J>=3&&z("stop")}),F.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],F.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],F.playbook_options=null,F.playbook=null,z("start"),i.setUrl(C+":id/"),i.get({params:{id:H}}).success(function(a){var b,c,d,e,f,g;l();for(d in E.fields){if("variables"!==d&&null!==a[d]&&void 0!==a[d]){if("select"===E.fields[d].type)if(F[d+"_options"]&&F[d+"_options"].length>0)for(b=0;b/g," ");for(a in A.fields.scm_type.searchOptions)if(A.fields.scm_type.searchOptions[a].value===e.scm_type){F[A.iterator+"SearchSelectValue"]=A.fields.scm_type.searchOptions[a];break}}else if(e.status){F[A.iterator+"SearchValue"]=e.status,F[A.iterator+"SearchField"]="status",F[A.iterator+"SelectShow"]=!0,F[A.iterator+"SearchFieldLabel"]=A.fields.status.label,F[A.iterator+"SearchSelectOpts"]=A.fields.status.searchOptions;for(a in A.fields.status.searchOptions)if(A.fields.status.searchOptions[a].value===e.status){F[A.iterator+"SearchSelectValue"]=A.fields.status.searchOptions[a];break}}F.search(A.iterator)}),F.removeChoicesReady&&F.removeChoicesReady(),F.removeChoicesReady=F.$on("choicesReadyProject",function(){H++,2===H&&F.$emit("choicesCompleteProject")}),y({scope:F,url:B,field:"status",variable:"project_status_options",callback:"choicesReadyProject"}),y({scope:F,url:B,field:"scm_type",variable:"project_scm_type_options",callback:"choicesReadyProject"}),j(),F.showActivity=function(){x({scope:F})},F.addProject=function(){c.path(c.path()+"/add")},F.editProject=function(a){c.path(c.path()+"/"+a)},F.showSCMStatus=function(a){var b,c=F.$on("PostRefresh",function(){var d;for(b=0;bRefresh button to view the latest status.","alert-info")}).error(function(a,b){p(F,a,b,null,{hdr:"Error!",msg:"Call to "+c+" failed. GET status: "+b})})}),F.cancelUpdate=function(a,b){var c,d,e=!1;for(c=0;cRefresh button to view the latet status.","alert-info")},F.refresh=function(){w("start"),F.projectLoading=!1,v({scope:F,set:"projects",iterator:"project",url:F.current_url})},F.SCMUpdate=function(a){var b;for(b=0;bb;b++){for(d[b].match(/[A-Z]/g)?(""!==R&&R+1==b&&(y++,C++),R=b,o++):d[b].match(/[a-z]/g)?(""!==S&&S+1==b&&(z++,C++),S=b,p++):d[b].match(/[0-9]/g)?(b>0&&e-1>b&&s++,""!==T&&T+1==b&&(A++,C++),T=b,q++):d[b].match(/[^a-zA-Z0-9_]/g)&&(b>0&&e-1>b&&s++,""!==U&&U+1==b&&(B++,C++),U=b,r++),f=!1,g=0;e>g;g++)d[b]==d[g]&&b!=g&&(f=!0,x+=Math.abs(e/(g-b)));f&&(w++,v=e-w,x=Math.ceil(v?x/v:x))}for(h=0;23>h;h++)i=ib.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(D++,G++);for(h=0;8>h;h++)i=jb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(E++,G++);for(h=0;8>h;h++)i=kb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(F++,G++);o>0&&n>o&&(nScore=parseInt(nScore+2*(n-o)),V="+ "+parseInt(2*(n-o))),p>0&&n>p&&(nScore=parseInt(nScore+2*(n-p)),W="+ "+parseInt(2*(n-p))),q>0&&n>q&&(nScore=parseInt(nScore+q*P),X="+ "+parseInt(q*P)),r>0&&(nScore=parseInt(nScore+r*Q),Y="+ "+parseInt(r*Q)),s>0&&(nScore=parseInt(nScore+s*H),Z="+ "+parseInt(s*H)),(p>0||o>0)&&0===r&&0===q&&(nScore=parseInt(nScore-n),t=n,_="- "+n),0===p&&0===o&&0===r&&q>0&&(nScore=parseInt(nScore-n),u=n,ab="- "+n),w>0&&(nScore=parseInt(nScore-x),bb="- "+x),y>0&&(nScore=parseInt(nScore-y*I),cb="- "+parseInt(y*I)),z>0&&(nScore=parseInt(nScore-z*J),db="- "+parseInt(z*J)),A>0&&(nScore=parseInt(nScore-A*K),eb="- "+parseInt(A*K)),D>0&&(nScore=parseInt(nScore-D*L),fb="- "+parseInt(D*L)),E>0&&(nScore=parseInt(nScore-E*M),gb="- "+parseInt(E*M)),F>0&&(nScore=parseInt(nScore-F*N),hb="- "+parseInt(F*N)),nScore>100?nScore=100:0>nScore&&(nScore=0),k=$("#progbar"),l=$AnsibleConfig.password_strength,m=$AnsibleConfig.password_strength-15<0?0:$AnsibleConfig.password_strength-15,k.css("width",nScore+"%"),nScore>=0&&m>=nScore?(lb="Weak",k.addClass("progress-bar-danger"),k.removeClass("progress-bar-success progress-bar-warning")):nScore>m&&l>=nScore?(lb="Good",k.addClass("progress-bar-warning"),k.removeClass("progress-bar-success progress-bar-danger")):nScore>l&&(lb="Strong",k.addClass("progress-bar-success"),k.removeClass("progress-bar-warning progress-bar-danger"))}else k=$("#progbar"),k.css("width","0%"),k.removeClass("progress-bar-success progress-bar-warning");return nScore}function AdminsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q=h,r=o("organizations")+e.organization_id+"/users/",s=i,t="select",u=s.inject(h,{mode:t}),v=o("organizations")+e.organization_id+"/admins/";p({scope:u,list:q,url:v,returnToCaller:1}),l({scope:u,set:"admins",list:q,url:r}),m({scope:u,list:q,url:r}),u.search(q.iterator),j()}function Authenticate(a,b,c,d,e,f,g,h,i,j,k){var l,m,n,o;l=function(){$("#login-username").focus()},n=k(d.sessionExpired)?a.get("sessionExpired"):d.sessionExpired,m=function(){return k(d.lastPath)?a.get("lastPath"):d.lastPath},$AnsibleConfig.debug_mode&&console&&(console.log("User session expired: "+n),console.log("Last URL: "+m())),$(".modal[aria-hidden=false]").each(function(){"login-modal"!==$(this).attr("id")&&$(this).modal("hide")}),i("stop"),$("#login-modal").modal({show:!0,keyboard:!1,backdrop:"static"}),$("#login-modal").on("shown.bs.modal",function(){l()}),o=angular.element(document.getElementById("login-modal")).scope(),o.login_username=null,o.login_password=null,o.loginForm.login_username.$setPristine(),o.loginForm.login_password.$setPristine(),"/logout"===e.path()&&f.logout(),d.userLoggedIn=!1,a.put("userLoggedIn",!1),$("#login-password").bind("keypress",function(a){var b=a.keyCode?a.keyCode:a.which;13===b&&$("#login-button").click()}),o.reset=function(){$("#login-form input").each(function(){$(this).val("")})},o.systemLogin=function(a,b){$(".api-error").empty();var c;k(a)||k(b)?h("Error!","Please provide a username and password before attempting to login.","alert-danger",l):(i("start"),f.retrieveToken(a,b).success(function(a,b){$("#login-modal").modal("hide"),c=a.token,f.setToken(a.token,a.expires),d.sessionTimer=j.init(),f.getUser().success(function(a){f.setUserInfo(a),d.user_is_superuser=a.results[0].is_superuser,f.getLicense().success(function(a){f.setLicense(a.license_info),m()?e.path(m()):e.url("/home?login=true")}).error(function(){i("stop"),h("Error","Failed to access user information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){i("stop"),h("Error","Failed to access license information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){var c,d,e;if(i("stop"),a.non_field_errors&&0===a.non_field_errors.length)for(e in a)o[e+"Error"]=a[e][0];else a.non_field_errors&&a.non_field_errors.length>0?(c="Error",d=a.non_field_errors[0]):(c="Error",d="The login attempt failed with a status of: "+b),o.reset(),h(c,d,"alert-danger",l)}))}}function CredentialsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){o("htmlTemplate"),t("start");var v,w=h,x=q("credentials"),y=i,z=c.path().replace(/^\//,"").split("/")[0],A="credentials"===z?"edit":"select",B=y.inject(w,{mode:A});B.selected=[],B.credentialLoading=!0,v=q(z)+("users"===z?e.user_id+"/credentials/":e.team_id+"/credentials/"),r({scope:B,list:w,url:v,returnToCaller:1}),B.removePostRefresh&&B.removePostRefresh(),B.removePostRefresh=B.$on("PostRefresh",function(){var a,b;for(t("stop"),$("#prompt-modal").off(),w.fields.kind.searchOptions=B.credential_kind_options,a=0;a/g," ");for(x in z.fields.status.searchOptions)if(z.fields.status.searchOptions[x].value===b.status){B[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[x];break}}if(b.source){B[z.iterator+"SearchField"]="source",B[z.iterator+"SelectShow"]=!0,B[z.iterator+"SearchSelectOpts"]=z.fields.source.searchOptions,B[z.iterator+"SearchFieldLabel"]=z.fields.source.label.replace(//g," ");for(x in z.fields.source.searchOptions)if(z.fields.source.searchOptions[x].value===b.source){B[z.iterator+"SearchSelectValue"]=z.fields.source.searchOptions[x];break}b.status&&(B[z.iterator+"ExtraParms"]="&inventory_source__status__icontains="+b.status)}b.has_external_source&&(B[z.iterator+"SearchField"]="has_external_source",B[z.iterator+"SearchValue"]=z.fields.has_external_source.searchValue,B[z.iterator+"InputDisable"]=!0,B[z.iterator+"SearchType"]="in",B[z.iterator+"SearchFieldLabel"]=z.fields.has_external_source.label),B.search(z.iterator),f(),B.showActivity=function(){p({scope:B})},B.editGroup=function(a,b){q({scope:B,group_id:a,inventory_id:b,groups_reload:!1})},B.viewUpdateStatus=function(a){B.groups=B.home_groups,o({scope:B,tree_id:a})},B.updateGroup=function(a){var b=w({list:B.home_groups,key:"id",val:a});b&&(u(b.source)||("updating"===b.status?s("Update in Progress","The inventory update process is currently running for group "+b.name+". Use the Refresh button to monitor the status.","alert-info"):(r("start"),t.setUrl(b.related.inventory_source),t.get().success(function(a){v({scope:B,url:a.related.update,group_name:a.summary_fields.group.name,group_source:a.source,tree_id:b.id,group_id:b.id})}).error(function(a,c){e(B,a,c,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+b.related.inventory_source+" POST returned status: "+c})}))))},B.refresh=function(){B.search(z.iterator,null,!1,!0)}}function HomeHosts(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){h("htmlTemplate");var s=d,t=c,u=i("hosts"),v=s.inject(t,{mode:"edit"});v.removePostRefresh&&v.removePostRefresh(),v.removePostRefresh=v.$on("PostRefresh",function(){for(var a=0;a0?(z.inventories[a].failed_hosts_tip=z.inventories[a].hosts_with_active_failures+(1===z.inventories[a].hosts_with_active_failures?" host":" hosts")+" with job failures. Click to view details.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="true"):0===z.inventories[a].total_hosts?(z.inventories[a].failed_hosts_tip="No hosts defined. Click to add.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="na"):(z.inventories[a].failed_hosts_tip=z.inventories[a].total_hosts+(z.inventories[a].total_hosts>1?" hosts":" host")+" with no job failures. Click to view details.",z.inventories[a].failed_hosts_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].failed_hosts_class="false"),z.inventories[a].status=z.inventories[a].inventory_sources_with_failures+" / "+z.inventories[a].total_inventory_sources,z.inventories[a].inventory_sources_with_failures>0?(z.inventories[a].status_tip=z.inventories[a].inventory_sources_with_failures+" cloud "+(1===z.inventories[a].inventory_sources_with_failures?"source":"sources")+" with failures. Click to view details.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="failed"):0===z.inventories[a].total_inventory_sources?(z.inventories[a].status_tip="Not synced with a cloud source. Click to edit.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="na"):(z.inventories[a].status_tip=z.inventories[a].total_inventory_sources+" cloud "+(z.inventories[a].total_inventory_sources>1?"sources":"source")+" with no failures. Click to view details.",z.inventories[a].status_link="/#/inventories/"+z.inventories[a].id+"/",z.inventories[a].status_class="successful")}),z.removeRefreshInventories&&z.removeRefreshInventories(),z.removeRefreshInventories=z.$on("RefreshInventories",function(){z.search(u.iterator)}),z.showActivity=function(){s({scope:z})},z.editInventoryProperties=function(a){t({scope:z,inventory_id:a})},z.addInventory=function(){c.path(c.path()+"/add")},z.editInventory=function(a){c.path(c.path()+"/"+a)},z.deleteInventory=function(a,b){var c=function(){var b=v+a+"/";$("#prompt-modal").on("hidden.bs.modal",function(){r("start")}),$("#prompt-modal").modal("hide"),f.setUrl(b),f.destroy().success(function(){z.search(u.iterator)}).error(function(a,c){r("stop"),p(z,a,c,null,{hdr:"Error!",msg:"Call to "+b+" failed. DELETE returned status: "+c})})};k({hdr:"Delete",body:"Are you sure you want to delete "+b+"?",action:c})},z.lookupOrganization=function(a){f.setUrl(q("organizations")+a+"/"),f.get().success(function(a){return a.name})},z.viewJobs=function(a){c.url("/jobs/?inventory__int="+a)},z.viewFailedJobs=function(a){c.url("/jobs/?inventory__int="+a+"&status=failed")}}function InventoriesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){n("htmlTemplate");var w,x=t("inventory"),y=g,z=h;y.well=!0,y.formLabelSize=null,y.formFieldSize=null,w=z.inject(y,{mode:"add",related:!1}),w.inventoryParseType="yaml",z.reset(),l(),u(w,"inventory_variables","inventoryParseType"),s({scope:w,form:y,current_item:f.organization_id?f.organization_id:null,list:p,field:"organization"}),w.formSave=function(){z.clearApiErrors(),v("start");try{var a,b,c;if(b="json"===w.inventoryParseType?JSON.parse(w.inventory_variables):jsyaml.load(w.inventory_variables),"object"!=typeof b)throw"failed to return an object!";c={};for(a in y.fields)"inventory_variables"!==a&&(y.fields[a].realName?c[y.fields[a].realName]=w[a]:c[a]=w[a]);i.setUrl(x),i.post(c).success(function(a){var c=a.id;w.inventory_variables?(i.setUrl(a.related.variable_data),i.put(b).success(function(){v("stop"),d.path("/inventories/"+c+"/")}).error(function(a,b){v("stop"),k(w,a,b,null,{hdr:"Error!",msg:"Failed to add inventory varaibles. PUT returned status: "+b})})):(v("stop"),d.path("/inventories/"+c+"/"))}).error(function(a,b){v("stop"),k(w,a,b,y,{hdr:"Error!",msg:"Failed to add new inventory. Post returned status: "+b})})}catch(e){v("stop"),j("Error","Error parsing inventory variables. Parser returned: "+e)}},w.formReset=function(){z.reset()}}function InventoriesEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P){f("htmlTemplate");var Q=e,R=g;a.inventory_id=c.inventory_id,r({path:b.path(),title:"{{ inventory_name }}"}),a.removeGroupTreeLoaded&&a.removeGroupTreeLoaded(),a.removeGroupTreeLoaded=a.$on("GroupTreeLoaded",function(b,c,e){var f,g;f=angular.element(document.getElementById("breadcrumbs")),f.html(q({list:R,mode:"edit"})),d(f)(a),Q.inject(R,{mode:"edit",id:"groups-container",breadCrumbs:!1,searchSize:"col-lg-5 col-md-5 col-sm-5"}),a.groups=e,a.inventory_name=c,a.groups.length>0?(a.selected_tree_id=a.groups[0].id,a.selected_group_id=a.groups[0].group_id,a.groups[0].selected_class="selected",a.groups[0].active_class="active-row",a.selected_group_name=a.groups[0].name):(a.selected_tree_id=null,a.selected_group_id=null),a.show_failures=!1,l({scope:a,inventory_id:a.inventory_id,tree_id:a.selected_tree_id,group_id:a.selected_group_id}),setTimeout(function(){$("#groups_table .name-column").each(function(){var a,b,c,d,e;a=$(this).width(),b=$(this).find(".level").width(),c=parseInt($(this).find(".level").css("padding-left").replace(/px/,"")),d=b+c,e=100-Math.ceil(d/a*100)+"%",$(this).find(".group-name").css({width:e})}),L("#groups_table .group-name a"),L("#hosts_table .host-name a")},2500),M(),g=P("inventoryAutoHelp"),"off"!==g&&a.autoShowGroupHelp&&a.showGroupHelp({autoShow:!0})}),a.removeGroupTreeRefreshed&&a.removeGroupTreeRefreshed(),a.removeGroupTreeRefreshed=a.$on("GroupTreeRefreshed",function(){setTimeout(function(){L("#groups_table .group-name a")},2500),a.showHosts(a.selected_tree_id,a.selected_group_id,!1)}),a.removeGroupDeleteCompleted&&a.removeGroupDeleteCompleted(),a.removeGroupDeleteCompleted=a.$on("GroupDeleteCompleted",function(){a.selected_tree_id=1,a.selected_group_id=null,i({scope:a,inventory_id:a.inventory_id,refresh:!0})}),a.removeCopMoveGroup&&a.removeCopyMoveGroup(),a.removeCopyMoveGroup=a.$on("CopyMoveGroup",function(b,c,d){G({scope:a,target_tree_id:d,inbound_tree_id:c})}),a.removeCopMoveHost&&a.removeCopyMoveHost(),a.removeCopyMoveHost=a.$on("CopyMoveHost",function(b,c,d){H({scope:a,target_tree_id:c,host_id:d})}),a.showHosts=function(b,c,d){if(null!==b){j("start"),a.selected_tree_id=b,a.selected_group_id=c,a.hosts=[],a.show_failures=d;for(var e=0;e"+c.name+". Use the Refresh button to monitor the status.","alert-info"):(j("start"),t.setUrl(c.related.inventory_source),t.get().success(function(b){v({scope:a,url:b.related.update,group_name:b.summary_fields.group.name,group_source:b.source,tree_id:c.id,group_id:c.group_id})}).error(function(b,d){j("stop"),u(a,b,d,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+c.related.inventory_source+" POST returned status: "+d})}))))},a.cancelUpdate=function(b){z({scope:a,tree_id:b})},a.toggle=function(b){x({scope:a,list:R,id:b})},a.refreshGroups=function(b,c){b&&(a.selected_tree_id=b,a.selected_group_id=c),i({scope:a,inventory_id:a.inventory_id,refresh:!0})},a.viewUpdateStatus=function(b,c){y({scope:a,tree_id:b,group_id:c})},a.deleteGroup=function(b,c){p({scope:a,tree_id:b,group_id:c,inventory_id:a.inventory_id})},a.createHost=function(){B({scope:a})},a.editInventoryProperties=function(){C({scope:a,inventory_id:a.inventory_id})},a.editHost=function(b){D({scope:a,host_id:b,inventory_id:a.inventory_id})},a.deleteHost=function(b,c){E({scope:a,host_id:b,host_name:c})},a.toggleHostEnabled=function(b,c){F({scope:a,host_id:b,external_source:c})},a.showGroupActivity=function(){var b,c,d;a.selected_group_id?(d=A({list:a.groups,key:"id",val:a.selected_tree_id}),b=J("activity_stream")+"?group__id="+a.selected_group_id,c="Showing all activities for group "+d.name):(c="Showing all activities for all "+a.inventory_name+" groups",b=J("activity_stream")+"?group__inventory__id="+a.inventory_id),I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showHostActivity=function(){var b,c;c="Showing all activities for all "+a.inventory_name+" hosts",b=J("activity_stream")+"?host__inventory__id="+a.inventory_id,I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showJobSummary=function(a){K({job_id:a})},a.showGroupHelp=function(a){var b={defn:O};a&&(b.autoShow=a.autoShow||!1),N(b)},i({scope:a,inventory_id:a.inventory_id,refresh:!1})}function JobEventsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){function y(a){var b,c,d,e,f,g="",h=!1;if(a.res){if("string"==typeof a.res)c=a.res.match(/\n/g),d=c?c.length:1,d=d>10?10:d,h=!0,g+='
\n',g+="\n",g+='\n",g+="
\n";else for(e in a.res){if(("msg"===e||"stdout"===e||"stderr"===e)&&null!==a.res[e]&&""!==a.res[e]){switch(g+='
\n',g+="\n",c=a.res[e].match(/\n/g),d=c?c.length:1,d=d>10?10:d,g+='\n",g+="
\n",h=!0}if("results"===e&&Array.isArray(a.res[e])&&a.res[e].length>0){for(f="",b=0;b10?10:d,""!==f&&(g+='
\n',g+="\n",g+='\n",g+="
\n",h=!0)}"rc"===e&&""!==a.res[e]&&(g+='
\n',g+="\n",g+='\n',g+="
\n",h=!0)}g=h?'
\n'+g+"
\n":""}return g=a.hosts?''+a.host+"\n"+g:""===g?null:g}p("htmlTemplate");var z,A=i,B=r("jobs")+f.id+"/job_events/",C=j,D=C.inject(A,{mode:"edit"});A.base=d.path(),D.job_id=f.id,c.flashMessage=null,D.selected=[],D.expand=!0,D.parentNode="parent-event",D.childNode="child-event",D.removeSetHostLinks&&D.removeSetHostLinks(),D.removeSetHostLinks=D.$on("SetHostLinks",function(a,b){for(var c=0;c15?5:e,$('textarea[name="'+c+'"]').attr("rows",e)));break;case"module_name":case"module_args":a.event_data.res&&a.event_data.res.invocation&&(t[c]=a.event_data.res.invocation.fld)}q("stop")}).error(function(a){k(t,a,status,null,{hdr:"Error!",msg:"Failed to retrieve host: "+f.event_id+". GET status: "+status})}),t.navigateBack=function(){var a="/jobs/"+f.job_id+"/job_events";f.page&&(a+="?page="+f.page),d.url(a)},t.rawView=function(){p({event_id:t.id})}}function JobHostSummaryList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){o("htmlTemplate");var u=h,v=c.path().replace(/^\//,"").split("/")[0],w=q(v)+e.id+"/job_host_summaries/",x=i,y=x.inject(u,{mode:"edit"});u.index="hosts"===v?!1:!0,y.selected=[],"hosts"===v?(y.job_id=null,y.host_id=e.id):(y.job_id=e.id,y.host_id=null),y.RemoveSetHostLink&&y.RemoveSetHostLink(),y.RemoveSetHostLink=y.$on("setHostLink",function(a,b){for(var c=0;c0?y.jobhosts[0].summary_fields.host.name:"Host"}),e.inventory&&y.$emit("setHostLink",e.inventory))}),l({scope:y,set:"jobhosts",list:u,url:w}),m({scope:y,list:u,url:w}),e.host_name&&(y[u.iterator+"SearchField"]="host",y[u.iterator+"SearchValue"]=e.host_name,y[u.iterator+"SearchFieldLabel"]=u.fields.host.label),y.search(u.iterator),y.showEvents=function(a,b){f.setUrl(b),f.get().success(function(b){j({path:"/jobs/"+b.id,title:b.name}),c.url("/jobs/"+b.id+"/job_events/?host="+encodeURI(a))}).error(function(a,c){p(y,a,c,null,{hdr:"Error!",msg:"Failed to lookup last job: "+b+". GET status: "+c})})},y.showJob=function(a){c.path("/jobs/"+a)},y.refresh=function(){null===y.host_id&&(y.jobSearchSpin=!0,y.jobLoading=!0,t("start"),r({scope:y,set:"jobhosts",iterator:"jobhost",url:y.current_url}))}}function JobTemplatesList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){o("htmlTemplate");var y=h,z=q("job_templates"),A=i,B=c.path().replace(/^\//,"").split("/")[0],C="job_templates"===B?"edit":"select",D=A.inject(y,{mode:C});b.flashMessage=null,D.removePostRefresh&&D.removePostRefresh(),D.removePostRefresh=D.$on("PostRefresh",function(){w("stop"),$("#prompt-modal").off()}),l({scope:D,set:"job_templates",list:y,url:z}),m({scope:D,list:y,url:z}),e.name&&(D[y.iterator+"SearchField"]="name",D[y.iterator+"SearchValue"]=e.name,D[y.iterator+"SearchFieldLabel"]=y.fields.name.label),D.search(y.iterator),j(),D.showActivity=function(){x({scope:D})},D.addJobTemplate=function(){c.path(c.path()+"/add")},D.editJobTemplate=function(a){c.path(c.path()+"/"+a)},D.deleteJobTemplate=function(a,b){var c=function(){$("#prompt-modal").on("hidden.bs.modal",function(){w("start")}),$("#prompt-modal").modal("hide");var b=z+a+"/";f.setUrl(b),f.destroy().success(function(){D.search(y.iterator)}).error(function(a){w("stop"),p(D,a,status,null,{hdr:"Error!",msg:"Call to "+b+" failed. DELETE returned status: "+status})})};k({hdr:"Delete",body:"Are you sure you want to delete "+b+"?",action:c})},D.submitJob=function(a){v({scope:D,id:a})}}function JobTemplatesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){n("htmlTemplate");var x,y,z=o("job_templates"),A=g,B=h,C=B.inject(A,{mode:"add",related:!1}),D={},E={};C.parseType="yaml",u(C),C.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],C.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],C.playbook_options=[],C.allow_callbacks="false",B.reset(),l(),t({scope:C,master:D,check_field:"allow_callbacks",default_val:!1}),s({scope:C,form:A,current_item:null,list:p,field:"inventory"}),jQuery.extend(!0,E,q),E.name="cloudcredentials",E.iterator="cloudcredential",s({url:o("credentials")+"?cloud=true",scope:C,form:A,current_item:null,list:E,field:"cloud_credential",hdr:"Select Cloud Credential"}),s({url:o("credentials")+"?kind=ssh",scope:C,form:A,current_item:null,list:q,field:"credential",hdr:"Select Machine Credential"}),x=function(a,b){var c;a!==b&&C.project&&(v("start"),c=o("projects")+C.project+"/playbooks/",i.setUrl(c),i.get().success(function(a){var b,c=[];for(b=0;b=2)for(var a in O)J.search(O[a].iterator)}),J.removeRelatedJobs&&J.removeRelatedJobs(),J.removeRelatedJobs=J.$on("relatedjobs",function(){var a,b;if(J.jobs&&J.jobs.length)for(a=0;a0)for(c=0;c/g," ");for(y in z.fields.status.searchOptions)if(z.fields.status.searchOptions[y].value===e.status){C[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[y];break}}C.search(z.iterator),j(),C.refresh=function(){x("start"),C.jobLoading=!1,u({scope:C,set:"jobs",iterator:"job",url:C.current_url})},C.refreshJob=C.refresh,C.editJob=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a)},C.viewEvents=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_events")},C.viewSummary=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_host_summaries")},C.deleteJob=function(a){f.setUrl(A+a+"/"),f.get().success(function(b){var c,d,e,g;"pending"===b.status||"running"===b.status||"waiting"===b.status?(d=b.related.cancel,e="cancel",g="Cancel Job"):(d=A+a+"/",e="delete",g="Delete Job"),c=function(){f.setUrl(d),"cancel"===e?f.post().success(function(){$("#prompt-modal").modal("hide"),C.search(z.iterator)}).error(function(a,b){$("#prompt-modal").modal("hide"),p(C,a,b,null,{hdr:"Error!",msg:"Call to "+d+" failed. POST returned status: "+b})}):f.destroy().success(function(){$("#prompt-modal").modal("hide"),C.search(z.iterator)}).error(function(a,b){$("#prompt-modal").modal("hide"),p(C,a,b,null,{hdr:"Error!",msg:"Call to "+d+" failed. DELETE returned status: "+b})})},k({hdr:g,body:"Are you sure you want to "+e+" job "+a+"?",action:c})}).error(function(a,b){p(C,a,b,null,{hdr:"Error!",msg:"Failed to get job details. GET returned status: "+b})})},C.submitJob=function(a,b){s({scope:C,id:a,template:b})}}function JobsEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z){function A(a){if(null!==a&&""!==a&&void 0!==a){var b=v("projects")+a+"/playbooks/";i.setUrl(b),i.get().success(function(a){F.playbook_options=[];for(var b=0;b15?15:c}p("htmlTemplate");var C=v("jobs"),D=h,E=g,F=D.inject(E,{mode:"edit",related:!0}),G={},H=f.id,I={},J=0;D.reset(),F.job_id=H,F.parseType="yaml",F.statusSearchSpin=!1,F.jobLoadedRemove&&F.jobLoadedRemove(),F.jobLoadedRemove=F.$on("jobLoaded",function(a,b){A(F.project),F[E.name+"ReadOnly"]="new"===F.status?!1:!0,$("#forks-slider").slider("option","value",F.forks),$("#forks-slider").slider("disable"),$('input[type="checkbox"]').attr("disabled","disabled"),$('input[type="radio"]').attr("disabled","disabled"),$("#host_config_key-gen-btn").attr("disabled","disabled"),$("textarea").attr("readonly","readonly"),i.setUrl(F.template_url),i.get().success(function(a){var b=a.host_config_key?"true":"false";F.host_config_key=a.host_config_key,w({scope:F,master:G,check_field:"allow_callbacks",default_val:b}),F.callback_url=a.related?a.related.callback:"<< Job template not found >>",F.$emit("jobTemplateLoadFinished")}).error(function(){z("stop"),F.callback_url="<< Job template not found >>"}),b?(i.setUrl(b),i.get().success(function(a){F.cloud_credential_name=a.name,F.$emit("jobTemplateLoadFinished")}).error(function(a,b){k(F,a,b,null,{hdr:"Error!",msg:"Failed to related cloud credential. GET returned status: "+b})})):F.$emit("jobTemplateLoadFinished")}),F.removeJobTemplateLoadFinished&&F.removeJobTemplateLoadFinished(),F.removeJobTemplateLoadFinished=F.$on("jobTemplateLoadFinished",function(){J++,J>=3&&z("stop")}),F.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],F.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],F.playbook_options=null,F.playbook=null,z("start"),i.setUrl(C+":id/"),i.get({params:{id:H}}).success(function(a){var b,c,d,e,f,g;l();for(d in E.fields){if("variables"!==d&&null!==a[d]&&void 0!==a[d]){if("select"===E.fields[d].type)if(F[d+"_options"]&&F[d+"_options"].length>0)for(b=0;b/g," ");for(a in A.fields.scm_type.searchOptions)if(A.fields.scm_type.searchOptions[a].value===e.scm_type){F[A.iterator+"SearchSelectValue"]=A.fields.scm_type.searchOptions[a];break}}else if(e.status){F[A.iterator+"SearchValue"]=e.status,F[A.iterator+"SearchField"]="status",F[A.iterator+"SelectShow"]=!0,F[A.iterator+"SearchFieldLabel"]=A.fields.status.label,F[A.iterator+"SearchSelectOpts"]=A.fields.status.searchOptions;for(a in A.fields.status.searchOptions)if(A.fields.status.searchOptions[a].value===e.status){F[A.iterator+"SearchSelectValue"]=A.fields.status.searchOptions[a];break}}F.search(A.iterator)}),F.removeChoicesReady&&F.removeChoicesReady(),F.removeChoicesReady=F.$on("choicesReadyProject",function(){H++,2===H&&F.$emit("choicesCompleteProject")}),y({scope:F,url:B,field:"status",variable:"project_status_options",callback:"choicesReadyProject"}),y({scope:F,url:B,field:"scm_type",variable:"project_scm_type_options",callback:"choicesReadyProject"}),j(),F.showActivity=function(){x({scope:F})},F.addProject=function(){c.path(c.path()+"/add")},F.editProject=function(a){c.path(c.path()+"/"+a)},F.showSCMStatus=function(a){var b,c=F.$on("PostRefresh",function(){var d;for(b=0;bRefresh button to view the latest status.","alert-info")}).error(function(a,b){p(F,a,b,null,{hdr:"Error!",msg:"Call to "+c+" failed. GET status: "+b})})}),F.cancelUpdate=function(a,b){var c,d,e=!1;for(c=0;cRefresh button to view the latet status.","alert-info")},F.refresh=function(){w("start"),F.projectLoading=!1,v({scope:F,set:"projects",iterator:"project",url:F.current_url})},F.SCMUpdate=function(a){var b;for(b=0;bb;b++){for(d[b].match(/[A-Z]/g)?(""!==R&&R+1==b&&(y++,C++),R=b,o++):d[b].match(/[a-z]/g)?(""!==S&&S+1==b&&(z++,C++),S=b,p++):d[b].match(/[0-9]/g)?(b>0&&e-1>b&&s++,""!==T&&T+1==b&&(A++,C++),T=b,q++):d[b].match(/[^a-zA-Z0-9_]/g)&&(b>0&&e-1>b&&s++,""!==U&&U+1==b&&(B++,C++),U=b,r++),f=!1,g=0;e>g;g++)d[b]==d[g]&&b!=g&&(f=!0,x+=Math.abs(e/(g-b)));f&&(w++,v=e-w,x=Math.ceil(v?x/v:x))}for(h=0;23>h;h++)i=ib.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(D++,G++);for(h=0;8>h;h++)i=jb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(E++,G++);for(h=0;8>h;h++)i=kb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(F++,G++);o>0&&n>o&&(nScore=parseInt(nScore+2*(n-o)),V="+ "+parseInt(2*(n-o))),p>0&&n>p&&(nScore=parseInt(nScore+2*(n-p)),W="+ "+parseInt(2*(n-p))),q>0&&n>q&&(nScore=parseInt(nScore+q*P),X="+ "+parseInt(q*P)),r>0&&(nScore=parseInt(nScore+r*Q),Y="+ "+parseInt(r*Q)),s>0&&(nScore=parseInt(nScore+s*H),Z="+ "+parseInt(s*H)),(p>0||o>0)&&0===r&&0===q&&(nScore=parseInt(nScore-n),t=n,_="- "+n),0===p&&0===o&&0===r&&q>0&&(nScore=parseInt(nScore-n),u=n,ab="- "+n),w>0&&(nScore=parseInt(nScore-x),bb="- "+x),y>0&&(nScore=parseInt(nScore-y*I),cb="- "+parseInt(y*I)),z>0&&(nScore=parseInt(nScore-z*J),db="- "+parseInt(z*J)),A>0&&(nScore=parseInt(nScore-A*K),eb="- "+parseInt(A*K)),D>0&&(nScore=parseInt(nScore-D*L),fb="- "+parseInt(D*L)),E>0&&(nScore=parseInt(nScore-E*M),gb="- "+parseInt(E*M)),F>0&&(nScore=parseInt(nScore-F*N),hb="- "+parseInt(F*N)),nScore>100?nScore=100:0>nScore&&(nScore=0),k=$("#progbar"),l=$AnsibleConfig.password_strength,m=$AnsibleConfig.password_strength-15<0?0:$AnsibleConfig.password_strength-15,k.css("width",nScore+"%"),nScore>=0&&m>=nScore?(lb="Weak",k.addClass("progress-bar-danger"),k.removeClass("progress-bar-success progress-bar-warning")):nScore>m&&l>=nScore?(lb="Good",k.addClass("progress-bar-warning"),k.removeClass("progress-bar-success progress-bar-danger")):nScore>l&&(lb="Strong",k.addClass("progress-bar-success"),k.removeClass("progress-bar-warning progress-bar-danger"))}else k=$("#progbar"),k.css("width","0%"),k.removeClass("progress-bar-success progress-bar-warning");return nScore}function AdminsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q=h,r=o("organizations")+e.organization_id+"/users/",s=i,t="select",u=o("organizations")+e.organization_id+"/admins/";s.inject(h,{mode:t,scope:a}),p({scope:a,list:q,url:u,returnToCaller:1}),l({scope:a,set:"admins",list:q,url:r}),m({scope:a,list:q,url:r}),a.search(q.iterator),j()}function Authenticate(a,b,c,d,e,f,g,h,i,j,k){var l,m,n,o;l=function(){$("#login-username").focus()},n=k(d.sessionExpired)?a.get("sessionExpired"):d.sessionExpired,m=function(){return k(d.lastPath)?a.get("lastPath"):d.lastPath},$AnsibleConfig.debug_mode&&console&&(console.log("User session expired: "+n),console.log("Last URL: "+m())),$(".modal[aria-hidden=false]").each(function(){"login-modal"!==$(this).attr("id")&&$(this).modal("hide")}),i("stop"),$("#login-modal").modal({show:!0,keyboard:!1,backdrop:"static"}),$("#login-modal").on("shown.bs.modal",function(){l()}),o=angular.element(document.getElementById("login-modal")).scope(),o.login_username=null,o.login_password=null,o.loginForm.login_username.$setPristine(),o.loginForm.login_password.$setPristine(),"/logout"===e.path()&&f.logout(),d.userLoggedIn=!1,a.put("userLoggedIn",!1),$("#login-password").bind("keypress",function(a){var b=a.keyCode?a.keyCode:a.which;13===b&&$("#login-button").click()}),o.reset=function(){$("#login-form input").each(function(){$(this).val("")})},o.systemLogin=function(a,b){$(".api-error").empty();var c;k(a)||k(b)?h("Error!","Please provide a username and password before attempting to login.","alert-danger",l):(i("start"),f.retrieveToken(a,b).success(function(a,b){$("#login-modal").modal("hide"),c=a.token,f.setToken(a.token,a.expires),d.sessionTimer=j.init(),f.getUser().success(function(a){f.setUserInfo(a),d.user_is_superuser=a.results[0].is_superuser,f.getLicense().success(function(a){f.setLicense(a.license_info),m()?e.path(m()):e.url("/home?login=true")}).error(function(){i("stop"),h("Error","Failed to access user information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){i("stop"),h("Error","Failed to access license information. GET returned status: "+b,"alert-danger",l)})}).error(function(a,b){var c,d,e;if(i("stop"),a.non_field_errors&&0===a.non_field_errors.length)for(e in a)o[e+"Error"]=a[e][0];else a.non_field_errors&&a.non_field_errors.length>0?(c="Error",d=a.non_field_errors[0]):(c="Error",d="The login attempt failed with a status of: "+b),o.reset(),h(c,d,"alert-danger",l)}))}}function CredentialsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){o(),t("start");var v,w=h,x=q("credentials"),y=i,z=c.path().replace(/^\//,"").split("/")[0],A="credentials"===z?"edit":"select";y.inject(w,{mode:A,scope:a}),a.selected=[],a.credentialLoading=!0,v=q(z)+("users"===z?e.user_id+"/credentials/":e.team_id+"/credentials/"),"select"===A&&r({scope:a,list:w,url:v,returnToCaller:1}),a.removePostRefresh&&a.removePostRefresh(),a.removePostRefresh=a.$on("PostRefresh",function(){var b,c;for(t("stop"),$("#prompt-modal").off(),w.fields.kind.searchOptions=a.credential_kind_options,b=0;b/g," ");for(x in z.fields.status.searchOptions)if(z.fields.status.searchOptions[x].value===b.status){B[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[x];break}}if(b.source){B[z.iterator+"SearchField"]="source",B[z.iterator+"SelectShow"]=!0,B[z.iterator+"SearchSelectOpts"]=z.fields.source.searchOptions,B[z.iterator+"SearchFieldLabel"]=z.fields.source.label.replace(//g," ");for(x in z.fields.source.searchOptions)if(z.fields.source.searchOptions[x].value===b.source){B[z.iterator+"SearchSelectValue"]=z.fields.source.searchOptions[x];break}b.status&&(B[z.iterator+"ExtraParms"]="&inventory_source__status__icontains="+b.status)}b.has_external_source&&(B[z.iterator+"SearchField"]="has_external_source",B[z.iterator+"SearchValue"]=z.fields.has_external_source.searchValue,B[z.iterator+"InputDisable"]=!0,B[z.iterator+"SearchType"]="in",B[z.iterator+"SearchFieldLabel"]=z.fields.has_external_source.label),B.search(z.iterator),f(),B.showActivity=function(){p({scope:B})},B.editGroup=function(a,b){q({scope:B,group_id:a,inventory_id:b,groups_reload:!1})},B.viewUpdateStatus=function(a){B.groups=B.home_groups,o({scope:B,tree_id:a})},B.updateGroup=function(a){var b=w({list:B.home_groups,key:"id",val:a});b&&(u(b.source)||("updating"===b.status?s("Update in Progress","The inventory update process is currently running for group "+b.name+". Use the Refresh button to monitor the status.","alert-info"):(r("start"),t.setUrl(b.related.inventory_source),t.get().success(function(a){v({scope:B,url:a.related.update,group_name:a.summary_fields.group.name,group_source:a.source,tree_id:b.id,group_id:b.id})}).error(function(a,c){e(B,a,c,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+b.related.inventory_source+" POST returned status: "+c})}))))},B.refresh=function(){B.search(z.iterator,null,!1,!0)}}function HomeHosts(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){h("htmlTemplate");var s=d,t=c,u=i("hosts"),v=s.inject(t,{mode:"edit"});v.removePostRefresh&&v.removePostRefresh(),v.removePostRefresh=v.$on("PostRefresh",function(){for(var a=0;a0?(a.inventories[b].failed_hosts_tip=a.inventories[b].hosts_with_active_failures+(1===a.inventories[b].hosts_with_active_failures?" host":" hosts")+" with job failures. Click to view details.",a.inventories[b].failed_hosts_link="/#/inventories/"+a.inventories[b].id+"/",a.inventories[b].failed_hosts_class="true"):0===a.inventories[b].total_hosts?(a.inventories[b].failed_hosts_tip="No hosts defined. Click to add.",a.inventories[b].failed_hosts_link="/#/inventories/"+a.inventories[b].id+"/",a.inventories[b].failed_hosts_class="na"):(a.inventories[b].failed_hosts_tip=a.inventories[b].total_hosts+(a.inventories[b].total_hosts>1?" hosts":" host")+" with no job failures. Click to view details.",a.inventories[b].failed_hosts_link="/#/inventories/"+a.inventories[b].id+"/",a.inventories[b].failed_hosts_class="false"),a.inventories[b].status=a.inventories[b].inventory_sources_with_failures+" / "+a.inventories[b].total_inventory_sources,a.inventories[b].inventory_sources_with_failures>0?(a.inventories[b].status_tip=a.inventories[b].inventory_sources_with_failures+" cloud "+(1===a.inventories[b].inventory_sources_with_failures?"source":"sources")+" with failures. Click to view details.",a.inventories[b].status_link="/#/inventories/"+a.inventories[b].id+"/",a.inventories[b].status_class="failed"):0===a.inventories[b].total_inventory_sources?(a.inventories[b].status_tip="Not synced with a cloud source. Click to edit.",a.inventories[b].status_link="/#/inventories/"+a.inventories[b].id+"/",a.inventories[b].status_class="na"):(a.inventories[b].status_tip=a.inventories[b].total_inventory_sources+" cloud "+(a.inventories[b].total_inventory_sources>1?"sources":"source")+" with no failures. Click to view details.",a.inventories[b].status_link="/#/inventories/"+a.inventories[b].id+"/",a.inventories[b].status_class="successful")}),a.removeRefreshInventories&&a.removeRefreshInventories(),a.removeRefreshInventories=a.$on("RefreshInventories",function(){a.search(u.iterator)}),a.showActivity=function(){s({scope:a})},a.editInventoryProperties=function(b){t({scope:a,inventory_id:b})},a.addInventory=function(){c.path(c.path()+"/add")},a.editInventory=function(a){c.path(c.path()+"/"+a)},a.deleteInventory=function(b,c){var d=function(){var c=v+b+"/";$("#prompt-modal").on("hidden.bs.modal",function(){r("start")}),$("#prompt-modal").modal("hide"),f.setUrl(c),f.destroy().success(function(){a.search(u.iterator)}).error(function(b,d){r("stop"),p(a,b,d,null,{hdr:"Error!",msg:"Call to "+c+" failed. DELETE returned status: "+d})})};k({hdr:"Delete",body:"Are you sure you want to delete "+c+"?",action:d})},a.lookupOrganization=function(a){f.setUrl(q("organizations")+a+"/"),f.get().success(function(a){return a.name})},a.viewJobs=function(a){c.url("/jobs/?inventory__int="+a)},a.viewFailedJobs=function(a){c.url("/jobs/?inventory__int="+a+"&status=failed")}}function InventoriesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){n();var w=t("inventory"),x=g,y=h;x.well=!0,x.formLabelSize=null,x.formFieldSize=null,y.inject(x,{mode:"add",related:!1,scope:a}),a.inventoryParseType="yaml",y.reset(),l(),u(a,"inventory_variables","inventoryParseType"),s({scope:a,form:x,current_item:f.organization_id?f.organization_id:null,list:p,field:"organization"}),a.formSave=function(){y.clearApiErrors(),v("start");try{var b,c,e;if(c="json"===a.inventoryParseType?JSON.parse(a.inventory_variables):jsyaml.load(a.inventory_variables),"object"!=typeof c)throw"failed to return an object!";e={};for(b in x.fields)"inventory_variables"!==b&&(x.fields[b].realName?e[x.fields[b].realName]=a[b]:e[b]=a[b]);i.setUrl(w),i.post(e).success(function(b){var e=b.id;a.inventory_variables?(i.setUrl(b.related.variable_data),i.put(c).success(function(){v("stop"),d.path("/inventories/"+e+"/")}).error(function(b,c){k(a,b,c,null,{hdr:"Error!",msg:"Failed to add inventory varaibles. PUT returned status: "+c})})):(v("stop"),d.path("/inventories/"+e+"/"))}).error(function(b,c){k(a,b,c,x,{hdr:"Error!",msg:"Failed to add new inventory. Post returned status: "+c})})}catch(f){v("stop"),j("Error","Error parsing inventory variables. Parser returned: "+f)}},a.formReset=function(){y.reset()}}function InventoriesEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P){f();var Q=e,R=g;a.inventory_id=c.inventory_id,r({path:b.path(),title:"{{ inventory_name }}"}),a.removeGroupTreeLoaded&&a.removeGroupTreeLoaded(),a.removeGroupTreeLoaded=a.$on("GroupTreeLoaded",function(b,c,e){var f,g;f=angular.element(document.getElementById("breadcrumbs")),f.html(q({list:R,mode:"edit"})),d(f)(a),Q.inject(R,{mode:"edit",id:"groups-container",breadCrumbs:!1,searchSize:"col-lg-5 col-md-5 col-sm-5"}),a.groups=e,a.inventory_name=c,a.groups.length>0?(a.selected_tree_id=a.groups[0].id,a.selected_group_id=a.groups[0].group_id,a.groups[0].selected_class="selected",a.groups[0].active_class="active-row",a.selected_group_name=a.groups[0].name):(a.selected_tree_id=null,a.selected_group_id=null),a.show_failures=!1,l({scope:a,inventory_id:a.inventory_id,tree_id:a.selected_tree_id,group_id:a.selected_group_id}),setTimeout(function(){$("#groups_table .name-column").each(function(){var a,b,c,d,e;a=$(this).width(),b=$(this).find(".level").width(),c=parseInt($(this).find(".level").css("padding-left").replace(/px/,"")),d=b+c,e=100-Math.ceil(d/a*100)+"%",$(this).find(".group-name").css({width:e})}),L("#groups_table .group-name a"),L("#hosts_table .host-name a")},2500),M(),g=P("inventoryAutoHelp"),"off"!==g&&a.autoShowGroupHelp&&a.showGroupHelp({autoShow:!0})}),a.removeGroupTreeRefreshed&&a.removeGroupTreeRefreshed(),a.removeGroupTreeRefreshed=a.$on("GroupTreeRefreshed",function(){setTimeout(function(){L("#groups_table .group-name a")},2500),a.showHosts(a.selected_tree_id,a.selected_group_id,!1)}),a.removeGroupDeleteCompleted&&a.removeGroupDeleteCompleted(),a.removeGroupDeleteCompleted=a.$on("GroupDeleteCompleted",function(){a.selected_tree_id=1,a.selected_group_id=null,i({scope:a,inventory_id:a.inventory_id,refresh:!0})}),a.removeCopMoveGroup&&a.removeCopyMoveGroup(),a.removeCopyMoveGroup=a.$on("CopyMoveGroup",function(b,c,d){G({scope:a,target_tree_id:d,inbound_tree_id:c})}),a.removeCopMoveHost&&a.removeCopyMoveHost(),a.removeCopyMoveHost=a.$on("CopyMoveHost",function(b,c,d){H({scope:a,target_tree_id:c,host_id:d})}),a.showHosts=function(b,c,d){if(null!==b){j("start"),a.selected_tree_id=b,a.selected_group_id=c,a.hosts=[],a.show_failures=d;for(var e=0;e"+c.name+". Use the Refresh button to monitor the status.","alert-info"):(j("start"),t.setUrl(c.related.inventory_source),t.get().success(function(b){v({scope:a,url:b.related.update,group_name:b.summary_fields.group.name,group_source:b.source,tree_id:c.id,group_id:c.group_id})}).error(function(b,d){j("stop"),u(a,b,d,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+c.related.inventory_source+" POST returned status: "+d})}))))},a.cancelUpdate=function(b){z({scope:a,tree_id:b})},a.toggle=function(b){x({scope:a,list:R,id:b})},a.refreshGroups=function(b,c){b&&(a.selected_tree_id=b,a.selected_group_id=c),i({scope:a,inventory_id:a.inventory_id,refresh:!0})},a.viewUpdateStatus=function(b,c){y({scope:a,tree_id:b,group_id:c})},a.deleteGroup=function(b,c){p({scope:a,tree_id:b,group_id:c,inventory_id:a.inventory_id})},a.createHost=function(){B({scope:a})},a.editInventoryProperties=function(){C({scope:a,inventory_id:a.inventory_id})},a.editHost=function(b){D({scope:a,host_id:b,inventory_id:a.inventory_id})},a.deleteHost=function(b,c){E({scope:a,host_id:b,host_name:c})},a.toggleHostEnabled=function(b,c){F({scope:a,host_id:b,external_source:c})},a.showGroupActivity=function(){var b,c,d;a.selected_group_id?(d=A({list:a.groups,key:"id",val:a.selected_tree_id}),b=J("activity_stream")+"?group__id="+a.selected_group_id,c="Showing all activities for group "+d.name):(c="Showing all activities for all "+a.inventory_name+" groups",b=J("activity_stream")+"?group__inventory__id="+a.inventory_id),I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showHostActivity=function(){var b,c;c="Showing all activities for all "+a.inventory_name+" hosts",b=J("activity_stream")+"?host__inventory__id="+a.inventory_id,I({scope:a,inventory_name:a.inventory_name,url:b,title:c})},a.showJobSummary=function(a){K({job_id:a})},a.showGroupHelp=function(a){var b={defn:O};a&&(b.autoShow=a.autoShow||!1),N(b)},i({scope:a,inventory_id:a.inventory_id,refresh:!1})}function JobEventsList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){function y(a){var b,c,d,e,f,g="",h=!1;if(a.res){if("string"==typeof a.res)c=a.res.match(/\n/g),d=c?c.length:1,d=d>10?10:d,h=!0,g+='
\n',g+="\n",g+='\n",g+="
\n";else for(e in a.res){if(("msg"===e||"stdout"===e||"stderr"===e)&&null!==a.res[e]&&""!==a.res[e]){switch(g+='
\n',g+="\n",c=a.res[e].match(/\n/g),d=c?c.length:1,d=d>10?10:d,g+='\n",g+="
\n",h=!0}if("results"===e&&Array.isArray(a.res[e])&&a.res[e].length>0){for(f="",b=0;b10?10:d,""!==f&&(g+='
\n',g+="\n",g+='\n",g+="
\n",h=!0)}"rc"===e&&""!==a.res[e]&&(g+='
\n',g+="\n",g+='\n',g+="
\n",h=!0)}g=h?'
\n'+g+"
\n":""}return g=a.hosts?''+a.host+"\n"+g:""===g?null:g}p();var z,A=i,B=r("jobs")+f.id+"/job_events/",C=j;C.inject(A,{mode:"edit",scope:b}),A.base=d.path(),b.job_id=f.id,c.flashMessage=null,b.selected=[],b.expand=!0,b.parentNode="parent-event",b.childNode="child-event",b.removeSetHostLinks&&b.removeSetHostLinks(),b.removeSetHostLinks=b.$on("SetHostLinks",function(a,c){for(var d=0;d15?5:g,$('textarea[name="'+d+'"]').attr("rows",g)));break;case"module_name":case"module_args":b.event_data.res&&b.event_data.res.invocation&&(a[d]=b.event_data.res.invocation.fld)}q("stop")}).error(function(b){k(a,b,status,null,{hdr:"Error!",msg:"Failed to retrieve host: "+f.event_id+". GET status: "+status})}),a.navigateBack=function(){var a="/jobs/"+f.job_id+"/job_events";f.page&&(a+="?page="+f.page),d.url(a)},a.rawView=function(){p({event_id:a.id})}}function JobHostSummaryList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){o();var u=h,v=c.path().replace(/^\//,"").split("/")[0],w=q(v)+e.id+"/job_host_summaries/",x=i,y=x.inject(u,{mode:"edit"});u.index="hosts"===v?!1:!0,a.selected=[],"hosts"===v?(a.job_id=null,a.host_id=e.id):(a.job_id=e.id,a.host_id=null),a.RemoveSetHostLink&&a.RemoveSetHostLink(),a.RemoveSetHostLink=a.$on("setHostLink",function(b,c){for(var d=0;d0?a.jobhosts[0].summary_fields.host.name:"Host"}),e.inventory&&a.$emit("setHostLink",e.inventory))}),l({scope:y,set:"jobhosts",list:u,url:w}),m({scope:y,list:u,url:w}),e.host_name&&(y[u.iterator+"SearchField"]="host",y[u.iterator+"SearchValue"]=e.host_name,y[u.iterator+"SearchFieldLabel"]=u.fields.host.label),a.search(u.iterator),a.showEvents=function(a,b){f.setUrl(b),f.get().success(function(b){j({path:"/jobs/"+b.id,title:b.name}),c.url("/jobs/"+b.id+"/job_events/?host="+encodeURI(a))}).error(function(a,c){p(y,a,c,null,{hdr:"Error!",msg:"Failed to lookup last job: "+b+". GET status: "+c})})},a.showJob=function(a){c.path("/jobs/"+a)},a.refresh=function(){null===a.host_id&&(a.jobSearchSpin=!0,a.jobLoading=!0,t("start"),r({scope:y,set:"jobhosts",iterator:"jobhost",url:a.current_url}))}}function JobTemplatesList(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){o();var y=h,z=q("job_templates"),A=i,B=c.path().replace(/^\//,"").split("/")[0],C="job_templates"===B?"edit":"select";A.inject(y,{mode:C,scope:a}),b.flashMessage=null,a.removePostRefresh&&a.removePostRefresh(),a.removePostRefresh=a.$on("PostRefresh",function(){w("stop"),$("#prompt-modal").off()}),l({scope:a,set:"job_templates",list:y,url:z}),m({scope:a,list:y,url:z}),e.name&&(a[y.iterator+"SearchField"]="name",a[y.iterator+"SearchValue"]=e.name,a[y.iterator+"SearchFieldLabel"]=y.fields.name.label),a.search(y.iterator),j(),a.showActivity=function(){x({scope:a})},a.addJobTemplate=function(){c.path(c.path()+"/add")},a.editJobTemplate=function(a){c.path(c.path()+"/"+a)},a.deleteJobTemplate=function(b,c){var d=function(){$("#prompt-modal").on("hidden.bs.modal",function(){w("start")}),$("#prompt-modal").modal("hide");var c=z+b+"/";f.setUrl(c),f.destroy().success(function(){a.search(y.iterator)}).error(function(b){w("stop"),p(a,b,status,null,{hdr:"Error!",msg:"Call to "+c+" failed. DELETE returned status: "+status})})};k({hdr:"Delete",body:"Are you sure you want to delete "+c+"?",action:d})},a.submitJob=function(b){v({scope:a,id:b})}}function JobTemplatesAdd(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){n();var x,y,z=o("job_templates"),A=g,B=h,C={},D={};B.inject(A,{mode:"add",related:!1,scope:a}),a.parseType="yaml",u(a),a.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],a.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],a.playbook_options=[],a.allow_callbacks="false",B.reset(),l(),t({scope:a,master:C,check_field:"allow_callbacks",default_val:!1}),s({scope:a,form:A,current_item:null,list:p,field:"inventory"}),jQuery.extend(!0,D,q),D.name="cloudcredentials",D.iterator="cloudcredential",s({url:o("credentials")+"?cloud=true",scope:a,form:A,current_item:null,list:D,field:"cloud_credential",hdr:"Select Cloud Credential"}),s({url:o("credentials")+"?kind=ssh",scope:a,form:A,current_item:null,list:q,field:"credential",hdr:"Select Machine Credential"}),x=function(b,c){var d;b!==c&&a.project&&(v("start"),d=o("projects")+a.project+"/playbooks/",i.setUrl(d),i.get().success(function(b){var c,d=[];for(c=0;c=2)for(var b in N)a.search(N[b].iterator)}),a.removeRelatedJobs&&a.removeRelatedJobs(),a.removeRelatedJobs=a.$on("relatedjobs",function(){var b,c;if(a.jobs&&a.jobs.length)for(b=0;b0)for(d=0;d/g," ");for(y in z.fields.status.searchOptions)if(z.fields.status.searchOptions[y].value===e.status){a[z.iterator+"SearchSelectValue"]=z.fields.status.searchOptions[y];break}}a.search(z.iterator),j(),a.refresh=function(){x("start"),a.jobLoading=!1,u({scope:a,set:"jobs",iterator:"job",url:a.current_url})},a.refreshJob=a.refresh,a.editJob=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a)},a.viewEvents=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_events")},a.viewSummary=function(a,b){j({path:"/jobs/"+a,title:a+" - "+b}),c.path(c.path()+"/"+a+"/job_host_summaries")},a.deleteJob=function(b){f.setUrl(A+b+"/"),f.get().success(function(c){var d,e,g,h;"pending"===c.status||"running"===c.status||"waiting"===c.status?(e=c.related.cancel,g="cancel",h="Cancel Job"):(e=A+b+"/",g="delete",h="Delete Job"),d=function(){f.setUrl(e),"cancel"===g?f.post().success(function(){$("#prompt-modal").modal("hide"),a.search(z.iterator)}).error(function(b,c){$("#prompt-modal").modal("hide"),p(a,b,c,null,{hdr:"Error!",msg:"Call to "+e+" failed. POST returned status: "+c})}):f.destroy().success(function(){$("#prompt-modal").modal("hide"),a.search(z.iterator)}).error(function(b,c){$("#prompt-modal").modal("hide"),p(a,b,c,null,{hdr:"Error!",msg:"Call to "+e+" failed. DELETE returned status: "+c})})},k({hdr:h,body:"Are you sure you want to "+g+" job "+b+"?",action:d})}).error(function(b,c){p(a,b,c,null,{hdr:"Error!",msg:"Failed to get job details. GET returned status: "+c})})},a.submitJob=function(b,c){s({scope:a,id:b,template:c})}}function JobsEdit(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z){function A(b){if(null!==b&&""!==b&&void 0!==b){var c=v("projects")+b+"/playbooks/";i.setUrl(c),i.get().success(function(b){a.playbook_options=[];for(var c=0;c15?15:c}p();var C=v("jobs"),D=h,E=g,F={},G=f.id,H={},I=0;D.inject(E,{mode:"edit",related:!0,scope:a}),D.reset(),a.job_id=G,a.parseType="yaml",a.statusSearchSpin=!1,a.jobLoadedRemove&&a.jobLoadedRemove(),a.jobLoadedRemove=a.$on("jobLoaded",function(b,c){A(a.project),a[E.name+"ReadOnly"]="new"===a.status?!1:!0,$("#forks-slider").slider("option","value",a.forks),$("#forks-slider").slider("disable"),$('input[type="checkbox"]').attr("disabled","disabled"),$('input[type="radio"]').attr("disabled","disabled"),$("#host_config_key-gen-btn").attr("disabled","disabled"),$("textarea").attr("readonly","readonly"),i.setUrl(a.template_url),i.get().success(function(b){var c=b.host_config_key?"true":"false";a.host_config_key=b.host_config_key,w({scope:a,master:F,check_field:"allow_callbacks",default_val:c}),a.callback_url=b.related?b.related.callback:"<< Job template not found >>",a.$emit("jobTemplateLoadFinished")}).error(function(){z("stop"),a.callback_url="<< Job template not found >>"}),c?(i.setUrl(c),i.get().success(function(b){a.cloud_credential_name=b.name,a.$emit("jobTemplateLoadFinished")}).error(function(b,c){k(a,b,c,null,{hdr:"Error!",msg:"Failed to related cloud credential. GET returned status: "+c})})):a.$emit("jobTemplateLoadFinished")}),a.removeJobTemplateLoadFinished&&a.removeJobTemplateLoadFinished(),a.removeJobTemplateLoadFinished=a.$on("jobTemplateLoadFinished",function(){I++,I>=3&&z("stop")}),a.job_type_options=[{value:"run",label:"Run"},{value:"check",label:"Check"}],a.verbosity_options=[{value:"0",label:"Default"},{value:"1",label:"Verbose"},{value:"3",label:"Debug"}],a.playbook_options=null,a.playbook=null,z("start"),i.setUrl(C+":id/"),i.get({params:{id:G}}).success(function(b){var c,d,e,f,g,h;l();for(e in E.fields){if("variables"!==e&&null!==b[e]&&void 0!==b[e]){if("select"===E.fields[e].type)if(a[e+"_options"]&&a[e+"_options"].length>0)for(c=0;c/g," ");for(b in A.fields.scm_type.searchOptions)if(A.fields.scm_type.searchOptions[b].value===e.scm_type){a[A.iterator+"SearchSelectValue"]=A.fields.scm_type.searchOptions[b];break}}else if(e.status){a[A.iterator+"SearchValue"]=e.status,a[A.iterator+"SearchField"]="status",a[A.iterator+"SelectShow"]=!0,a[A.iterator+"SearchFieldLabel"]=A.fields.status.label,a[A.iterator+"SearchSelectOpts"]=A.fields.status.searchOptions;for(b in A.fields.status.searchOptions)if(A.fields.status.searchOptions[b].value===e.status){a[A.iterator+"SearchSelectValue"]=A.fields.status.searchOptions[b];break}}a.search(A.iterator)}),a.removeChoicesReady&&a.removeChoicesReady(),a.removeChoicesReady=a.$on("choicesReadyProject",function(){G++,2===G&&a.$emit("choicesCompleteProject")}),y({scope:a,url:B,field:"status",variable:"project_status_options",callback:"choicesReadyProject"}),y({scope:a,url:B,field:"scm_type",variable:"project_scm_type_options",callback:"choicesReadyProject"}),j(),a.showActivity=function(){x({scope:a})},a.addProject=function(){c.path(c.path()+"/add")},a.editProject=function(a){c.path(c.path()+"/"+a)},a.showSCMStatus=function(b){var c,d=a.$on("PostRefresh",function(){var e;for(c=0;cRefresh button to view the latest status.","alert-info")}).error(function(b,c){p(a,b,c,null,{hdr:"Error!",msg:"Call to "+d+" failed. GET status: "+c})})}),a.cancelUpdate=function(b,c){var d,e,h=!1;for(d=0;dRefresh button to view the latet status.","alert-info")},a.refresh=function(){w("start"),a.projectLoading=!1,v({scope:a,set:"projects",iterator:"project",url:a.current_url})},a.SCMUpdate=function(b){var c;for(c=0;cb;b++){for(d[b].match(/[A-Z]/g)?(""!==R&&R+1==b&&(y++,C++),R=b,o++):d[b].match(/[a-z]/g)?(""!==S&&S+1==b&&(z++,C++),S=b,p++):d[b].match(/[0-9]/g)?(b>0&&e-1>b&&s++,""!==T&&T+1==b&&(A++,C++),T=b,q++):d[b].match(/[^a-zA-Z0-9_]/g)&&(b>0&&e-1>b&&s++,""!==U&&U+1==b&&(B++,C++),U=b,r++),f=!1,g=0;e>g;g++)d[b]==d[g]&&b!=g&&(f=!0,x+=Math.abs(e/(g-b)));f&&(w++,v=e-w,x=Math.ceil(v?x/v:x))}for(h=0;23>h;h++)i=ib.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(D++,G++);for(h=0;8>h;h++)i=jb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(E++,G++);for(h=0;8>h;h++)i=kb.substring(h,parseInt(h+3)),j=i.strReverse(),(-1!=a.toLowerCase().indexOf(i)||-1!=a.toLowerCase().indexOf(j))&&(F++,G++);o>0&&n>o&&(nScore=parseInt(nScore+2*(n-o)),V="+ "+parseInt(2*(n-o))),p>0&&n>p&&(nScore=parseInt(nScore+2*(n-p)),W="+ "+parseInt(2*(n-p))),q>0&&n>q&&(nScore=parseInt(nScore+q*P),X="+ "+parseInt(q*P)),r>0&&(nScore=parseInt(nScore+r*Q),Y="+ "+parseInt(r*Q)),s>0&&(nScore=parseInt(nScore+s*H),Z="+ "+parseInt(s*H)),(p>0||o>0)&&0===r&&0===q&&(nScore=parseInt(nScore-n),t=n,_="- "+n),0===p&&0===o&&0===r&&q>0&&(nScore=parseInt(nScore-n),u=n,ab="- "+n),w>0&&(nScore=parseInt(nScore-x),bb="- "+x),y>0&&(nScore=parseInt(nScore-y*I),cb="- "+parseInt(y*I)),z>0&&(nScore=parseInt(nScore-z*J),db="- "+parseInt(z*J)),A>0&&(nScore=parseInt(nScore-A*K),eb="- "+parseInt(A*K)),D>0&&(nScore=parseInt(nScore-D*L),fb="- "+parseInt(D*L)),E>0&&(nScore=parseInt(nScore-E*M),gb="- "+parseInt(E*M)),F>0&&(nScore=parseInt(nScore-F*N),hb="- "+parseInt(F*N)),nScore>100?nScore=100:0>nScore&&(nScore=0),k=$("#progbar"),l=$AnsibleConfig.password_strength,m=$AnsibleConfig.password_strength-15<0?0:$AnsibleConfig.password_strength-15,k.css("width",nScore+"%"),nScore>=0&&m>=nScore?(lb="Weak",k.addClass("progress-bar-danger"),k.removeClass("progress-bar-success progress-bar-warning")):nScore>m&&l>=nScore?(lb="Good",k.addClass("progress-bar-warning"),k.removeClass("progress-bar-success progress-bar-danger")):nScore>l&&(lb="Strong",k.addClass("progress-bar-success"),k.removeClass("progress-bar-warning progress-bar-danger"))}else k=$("#progbar"),k.css("width","0%"),k.removeClass("progress-bar-success progress-bar-warning");return nScore}var urlPrefix=$basePath;angular.module("ansible",["ngRoute","ngSanitize","ngCookies","RestServices","AuthService","Utilities","OrganizationFormDefinition","UserFormDefinition","FormGenerator","OrganizationListDefinition","UserListDefinition","UserHelper","ListGenerator","PromptDialog","ApiLoader","RelatedSearchHelper","SearchHelper","PaginationHelpers","RefreshHelper","AdminListDefinition","AWDirectives","InventoriesListDefinition","InventoryFormDefinition","InventoryHelper","InventoryGroupsDefinition","InventoryHostsDefinition","HostsHelper","AWFilters","HostFormDefinition","HostListDefinition","GroupFormDefinition","GroupListDefinition","GroupsHelper","TeamsListDefinition","TeamFormDefinition","TeamHelper","CredentialsListDefinition","CredentialFormDefinition","LookUpHelper","JobTemplatesListDefinition","JobTemplateFormDefinition","JobSubmissionHelper","ProjectsListDefinition","ProjectFormDefinition","ProjectStatusDefinition","ProjectsHelper","PermissionFormDefinition","PermissionListDefinition","PermissionsHelper","JobsListDefinition","JobFormDefinition","JobEventsListDefinition","JobEventDataDefinition","JobEventsFormDefinition","JobHostDefinition","JobSummaryDefinition","ParseHelper","ChildrenHelper","EventsHelper","ProjectPathHelper","md5Helper","AccessHelper","SelectionHelper","License","HostGroupsFormDefinition","JobStatusWidget","InventorySyncStatusWidget","SCMSyncStatusWidget","ObjectCountWidget","StreamWidget","JobsHelper","InventoryGroupsHelpDefinition","InventoryTree","CredentialsHelper","TimerService","StreamListDefinition","HomeGroupListDefinition","HomeHostListDefinition","ActivityDetailDefinition"]).config(["$routeProvider",function(a){a.when("/jobs",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsListCtrl"}).when("/jobs/:id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsEdit"}).when("/jobs/:id/job_events",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsList"}).when("/jobs/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/jobs/:job_id/job_events/:event_id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsEdit"}).when("/job_templates",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesList"}).when("/job_templates/add",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesAdd"}).when("/job_templates/:id",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesEdit"}).when("/projects",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsList"}).when("/projects/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsAdd"}).when("/projects/:id",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsEdit"}).when("/projects/:project_id/organizations",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsList"}).when("/projects/:project_id/organizations/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsAdd"}).when("/hosts/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/inventories",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesList"}).when("/inventories/add",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesAdd"}).when("/inventories/:inventory_id",{templateUrl:urlPrefix+"partials/inventory-edit.html",controller:"InventoriesEdit"}).when("/organizations",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsList"}).when("/organizations/add",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsAdd"}).when("/organizations/:organization_id",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsEdit"}).when("/organizations/:organization_id/admins",{templateUrl:urlPrefix+"partials/organizations.html",controller:"AdminsList"}).when("/organizations/:organization_id/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/organizations/:organization_id/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/organizations/:organization_id/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/teams",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsList"}).when("/teams/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsAdd"}).when("/teams/:team_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsEdit"}).when("/teams/:team_id/permissions/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsAdd"}).when("/teams/:team_id/permissions",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsList"}).when("/teams/:team_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsEdit"}).when("/teams/:team_id/users",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersList"}).when("/teams/:team_id/users/:user_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersEdit"}).when("/teams/:team_id/projects",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsList"}).when("/teams/:team_id/projects/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsAdd"}).when("/teams/:team_id/projects/:project_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsEdit"}).when("/teams/:team_id/credentials",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsList"}).when("/teams/:team_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:team_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/credentials",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsList"}).when("/credentials/add",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsAdd"}).when("/credentials/:credential_id",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsEdit"}).when("/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/users/:user_id/credentials",{templateUrl:urlPrefix+"partials/users.html",controller:"CredentialsList"}).when("/users/:user_id/permissions/add",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsAdd"}).when("/users/:user_id/permissions",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsList"}).when("/users/:user_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsEdit"}).when("/users/:user_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:user_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/login",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/logout",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/home",{templateUrl:urlPrefix+"partials/home.html",controller:"Home"}).when("/home/groups",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeGroups"}).when("/home/hosts",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeHosts"}).otherwise({redirectTo:"/home"})}]).run(["$cookieStore","$rootScope","CheckLicense","$location","Authorization","LoadBasePaths","ViewLicense","Timer","ClearScope","HideStream",function(a,b,c,d,e,f,g,h,i,j){f(),b.breadcrumbs=[],b.crumbCache=[],b.sessionTimer=h.init(),b.$on("$routeChangeStart",function(f,g){$("#stream-container").is(":visible")&&j(),/^\/(login|logout)/.test(d.path())||(b.lastPath=d.path(),a.put("lastPath",d.path())),e.isUserLoggedIn()===!1?g.templateUrl!==urlPrefix+"partials/login.html"&&d.path("/login"):b.sessionTimer.isExpired()?g.templateUrl!==urlPrefix+"partials/login.html"&&(b.sessionTimer.expireSession(),d.path("/login")):((void 0===b.current_user||null===b.current_user)&&e.restoreUserInfo(),c());var h=d.path().replace(/^\//,"").split("/")[0];""===h?h="home":h.replace(/\_/g," "),$('.nav-tabs a[href="#'+h+'"]').tab("show")}),e.getToken()?b.user_is_superuser=e.getUserInfo("is_superuser"):(b.sessionExpired=!1,a.put("sessionExpired",!1),d.path("/login"));var k=d.path().replace(/^\//,"").split("/")[0];""===k?(k="home",d.path("/home")):k.replace(/\_/g," "),$('.nav-tabs a[href="#'+k+'"]').tab("show"),b.viewCurrentUser=function(){d.path("/users/"+b.current_user.id)},b.viewLicense=function(){g()}}]);var urlPrefix=$basePath;angular.module("ansible",["RestServices","AuthService","Utilities","OrganizationFormDefinition","UserFormDefinition","FormGenerator","OrganizationListDefinition","UserListDefinition","UserHelper","ListGenerator","PromptDialog","ApiLoader","RelatedSearchHelper","SearchHelper","PaginationHelpers","RefreshHelper","AdminListDefinition","AWDirectives","InventoriesListDefinition","InventoryFormDefinition","InventoryHelper","InventoryGroupsDefinition","InventoryHostsDefinition","HostsHelper","AWFilters","HostFormDefinition","HostListDefinition","GroupFormDefinition","GroupListDefinition","GroupsHelper","TeamsListDefinition","TeamFormDefinition","TeamHelper","CredentialsListDefinition","CredentialFormDefinition","LookUpHelper","JobTemplatesListDefinition","JobTemplateFormDefinition","JobSubmissionHelper","ProjectsListDefinition","ProjectFormDefinition","ProjectStatusDefinition","ProjectsHelper","PermissionFormDefinition","PermissionListDefinition","PermissionsHelper","JobsListDefinition","JobFormDefinition","JobEventsListDefinition","JobEventDataDefinition","JobEventsFormDefinition","JobHostDefinition","JobSummaryDefinition","ParseHelper","ChildrenHelper","EventsHelper","ProjectPathHelper","md5Helper","AccessHelper","SelectionHelper","License","HostGroupsFormDefinition","JobStatusWidget","InventorySyncStatusWidget","SCMSyncStatusWidget","ObjectCountWidget","StreamWidget","JobsHelper","InventoryGroupsHelpDefinition","InventoryTree","CredentialsHelper","TimerService","StreamListDefinition","HomeGroupListDefinition","HomeHostListDefinition","ActivityDetailDefinition"]).config(["$routeProvider",function(a){a.when("/jobs",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsListCtrl"}).when("/jobs/:id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsEdit"}).when("/jobs/:id/job_events",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsList"}).when("/jobs/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/jobs/:job_id/job_events/:event_id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsEdit"}).when("/job_templates",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesList"}).when("/job_templates/add",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesAdd"}).when("/job_templates/:id",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesEdit"}).when("/projects",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsList"}).when("/projects/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsAdd"}).when("/projects/:id",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsEdit"}).when("/projects/:project_id/organizations",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsList"}).when("/projects/:project_id/organizations/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsAdd"}).when("/hosts/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/inventories",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesList"}).when("/inventories/add",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesAdd"}).when("/inventories/:inventory_id",{templateUrl:urlPrefix+"partials/inventory-edit.html",controller:"InventoriesEdit"}).when("/organizations",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsList"}).when("/organizations/add",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsAdd"}).when("/organizations/:organization_id",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsEdit"}).when("/organizations/:organization_id/admins",{templateUrl:urlPrefix+"partials/organizations.html",controller:"AdminsList"}).when("/organizations/:organization_id/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/organizations/:organization_id/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/organizations/:organization_id/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/teams",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsList"}).when("/teams/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsAdd"}).when("/teams/:team_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsEdit"}).when("/teams/:team_id/permissions/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsAdd"}).when("/teams/:team_id/permissions",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsList"}).when("/teams/:team_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsEdit"}).when("/teams/:team_id/users",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersList"}).when("/teams/:team_id/users/:user_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersEdit"}).when("/teams/:team_id/projects",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsList"}).when("/teams/:team_id/projects/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsAdd"}).when("/teams/:team_id/projects/:project_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsEdit"}).when("/teams/:team_id/credentials",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsList"}).when("/teams/:team_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:team_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/credentials",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsList"}).when("/credentials/add",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsAdd"}).when("/credentials/:credential_id",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsEdit"}).when("/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/users/:user_id/credentials",{templateUrl:urlPrefix+"partials/users.html",controller:"CredentialsList"}).when("/users/:user_id/permissions/add",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsAdd"}).when("/users/:user_id/permissions",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsList"}).when("/users/:user_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsEdit"}).when("/users/:user_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:user_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/login",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/logout",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/home",{templateUrl:urlPrefix+"partials/home.html",controller:"Home"}).when("/home/groups",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeGroups"}).when("/home/hosts",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeHosts"}).otherwise({redirectTo:"/home"})}]).run(["$cookieStore","$rootScope","CheckLicense","$location","Authorization","LoadBasePaths","ViewLicense","Timer","ClearScope","HideStream",function(a,b,c,d,e,f,g,h,i,j){f(),b.breadcrumbs=[],b.crumbCache=[],b.sessionTimer=h.init(),b.$on("$routeChangeStart",function(f,g){$("#stream-container").is(":visible")&&j(),/^\/(login|logout)/.test(d.path())||(b.lastPath=d.path(),a.put("lastPath",d.path())),e.isUserLoggedIn()===!1?g.templateUrl!==urlPrefix+"partials/login.html"&&d.path("/login"):b.sessionTimer.isExpired()?g.templateUrl!==urlPrefix+"partials/login.html"&&(b.sessionTimer.expireSession(),d.path("/login")):((void 0===b.current_user||null===b.current_user)&&e.restoreUserInfo(),c());var h=d.path().replace(/^\//,"").split("/")[0];""===h?h="home":h.replace(/\_/g," "),$('.nav-tabs a[href="#'+h+'"]').tab("show")}),e.getToken()?b.user_is_superuser=e.getUserInfo("is_superuser"):(b.sessionExpired=!1,a.put("sessionExpired",!1),d.path("/login")); +var k=d.path().replace(/^\//,"").split("/")[0];""===k?(k="home",d.path("/home")):k.replace(/\_/g," "),$('.nav-tabs a[href="#'+k+'"]').tab("show"),b.viewCurrentUser=function(){d.path("/users/"+b.current_user.id)},b.viewLicense=function(){g()}}]);var urlPrefix=$basePath;angular.module("ansible",["RestServices","AuthService","Utilities","OrganizationFormDefinition","UserFormDefinition","FormGenerator","OrganizationListDefinition","UserListDefinition","UserHelper","ListGenerator","PromptDialog","ApiLoader","RelatedSearchHelper","SearchHelper","PaginationHelpers","RefreshHelper","AdminListDefinition","AWDirectives","InventoriesListDefinition","InventoryFormDefinition","InventoryHelper","InventoryGroupsDefinition","InventoryHostsDefinition","HostsHelper","AWFilters","HostFormDefinition","HostListDefinition","GroupFormDefinition","GroupListDefinition","GroupsHelper","TeamsListDefinition","TeamFormDefinition","TeamHelper","CredentialsListDefinition","CredentialFormDefinition","LookUpHelper","JobTemplatesListDefinition","JobTemplateFormDefinition","JobSubmissionHelper","ProjectsListDefinition","ProjectFormDefinition","ProjectStatusDefinition","ProjectsHelper","PermissionFormDefinition","PermissionListDefinition","PermissionsHelper","JobsListDefinition","JobFormDefinition","JobEventsListDefinition","JobEventDataDefinition","JobEventsFormDefinition","JobHostDefinition","JobSummaryDefinition","ParseHelper","ChildrenHelper","EventsHelper","ProjectPathHelper","md5Helper","AccessHelper","SelectionHelper","License","HostGroupsFormDefinition","JobStatusWidget","InventorySyncStatusWidget","SCMSyncStatusWidget","ObjectCountWidget","StreamWidget","JobsHelper","InventoryGroupsHelpDefinition","InventoryTree","CredentialsHelper","TimerService","StreamListDefinition","HomeGroupListDefinition","HomeHostListDefinition","ActivityDetailDefinition"]).config(["$routeProvider",function(a){a.when("/jobs",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsListCtrl"}).when("/jobs/:id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsEdit"}).when("/jobs/:id/job_events",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsList"}).when("/jobs/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/jobs/:job_id/job_events/:event_id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsEdit"}).when("/job_templates",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesList"}).when("/job_templates/add",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesAdd"}).when("/job_templates/:id",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesEdit"}).when("/projects",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsList"}).when("/projects/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsAdd"}).when("/projects/:id",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsEdit"}).when("/projects/:project_id/organizations",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsList"}).when("/projects/:project_id/organizations/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsAdd"}).when("/hosts/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/inventories",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesList"}).when("/inventories/add",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesAdd"}).when("/inventories/:inventory_id",{templateUrl:urlPrefix+"partials/inventory-edit.html",controller:"InventoriesEdit"}).when("/organizations",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsList"}).when("/organizations/add",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsAdd"}).when("/organizations/:organization_id",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsEdit"}).when("/organizations/:organization_id/admins",{templateUrl:urlPrefix+"partials/organizations.html",controller:"AdminsList"}).when("/organizations/:organization_id/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/organizations/:organization_id/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/organizations/:organization_id/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/teams",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsList"}).when("/teams/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsAdd"}).when("/teams/:team_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsEdit"}).when("/teams/:team_id/permissions/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsAdd"}).when("/teams/:team_id/permissions",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsList"}).when("/teams/:team_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsEdit"}).when("/teams/:team_id/users",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersList"}).when("/teams/:team_id/users/:user_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersEdit"}).when("/teams/:team_id/projects",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsList"}).when("/teams/:team_id/projects/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsAdd"}).when("/teams/:team_id/projects/:project_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsEdit"}).when("/teams/:team_id/credentials",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsList"}).when("/teams/:team_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:team_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/credentials",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsList"}).when("/credentials/add",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsAdd"}).when("/credentials/:credential_id",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsEdit"}).when("/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/users/:user_id/credentials",{templateUrl:urlPrefix+"partials/users.html",controller:"CredentialsList"}).when("/users/:user_id/permissions/add",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsAdd"}).when("/users/:user_id/permissions",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsList"}).when("/users/:user_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsEdit"}).when("/users/:user_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:user_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/login",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/logout",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/home",{templateUrl:urlPrefix+"partials/home.html",controller:"Home"}).when("/home/groups",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeGroups"}).when("/home/hosts",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeHosts"}).otherwise({redirectTo:"/home"})}]).run(["$cookieStore","$rootScope","CheckLicense","$location","Authorization","LoadBasePaths","ViewLicense","Timer","ClearScope","HideStream",function(a,b,c,d,e,f,g,h,i,j){f(),b.breadcrumbs=[],b.crumbCache=[],b.sessionTimer=h.init(),b.$on("$routeChangeStart",function(f,g){$("#stream-container").is(":visible")&&j(),/^\/(login|logout)/.test(d.path())||(b.lastPath=d.path(),a.put("lastPath",d.path())),e.isUserLoggedIn()===!1?g.templateUrl!==urlPrefix+"partials/login.html"&&d.path("/login"):b.sessionTimer.isExpired()?g.templateUrl!==urlPrefix+"partials/login.html"&&(b.sessionTimer.expireSession(),d.path("/login")):((void 0===b.current_user||null===b.current_user)&&e.restoreUserInfo(),c());var h=d.path().replace(/^\//,"").split("/")[0];""===h?h="home":h.replace(/\_/g," "),$('.nav-tabs a[href="#'+h+'"]').tab("show")}),e.getToken()?b.user_is_superuser=e.getUserInfo("is_superuser"):(b.sessionExpired=!1,a.put("sessionExpired",!1),d.path("/login"));var k=d.path().replace(/^\//,"").split("/")[0];""===k?(k="home",d.path("/home")):k.replace(/\_/g," "),$('.nav-tabs a[href="#'+k+'"]').tab("show"),b.viewCurrentUser=function(){d.path("/users/"+b.current_user.id)},b.viewLicense=function(){g()}}]);var urlPrefix=$basePath;angular.module("ansible",["RestServices","AuthService","Utilities","OrganizationFormDefinition","UserFormDefinition","FormGenerator","OrganizationListDefinition","UserListDefinition","UserHelper","ListGenerator","PromptDialog","ApiLoader","RelatedSearchHelper","SearchHelper","PaginationHelpers","RefreshHelper","AdminListDefinition","AWDirectives","InventoriesListDefinition","InventoryFormDefinition","InventoryHelper","InventoryGroupsDefinition","InventoryHostsDefinition","HostsHelper","AWFilters","HostFormDefinition","HostListDefinition","GroupFormDefinition","GroupListDefinition","GroupsHelper","TeamsListDefinition","TeamFormDefinition","TeamHelper","CredentialsListDefinition","CredentialFormDefinition","LookUpHelper","JobTemplatesListDefinition","JobTemplateFormDefinition","JobSubmissionHelper","ProjectsListDefinition","ProjectFormDefinition","ProjectStatusDefinition","ProjectsHelper","PermissionFormDefinition","PermissionListDefinition","PermissionsHelper","JobsListDefinition","JobFormDefinition","JobEventsListDefinition","JobEventDataDefinition","JobEventsFormDefinition","JobHostDefinition","JobSummaryDefinition","ParseHelper","ChildrenHelper","EventsHelper","ProjectPathHelper","md5Helper","AccessHelper","SelectionHelper","License","HostGroupsFormDefinition","JobStatusWidget","InventorySyncStatusWidget","SCMSyncStatusWidget","ObjectCountWidget","StreamWidget","JobsHelper","InventoryGroupsHelpDefinition","InventoryTree","CredentialsHelper","TimerService","StreamListDefinition","HomeGroupListDefinition","HomeHostListDefinition","ActivityDetailDefinition"]).config(["$routeProvider",function(a){a.when("/jobs",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsListCtrl"}).when("/jobs/:id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsEdit"}).when("/jobs/:id/job_events",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsList"}).when("/jobs/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/jobs/:job_id/job_events/:event_id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsEdit"}).when("/job_templates",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesList"}).when("/job_templates/add",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesAdd"}).when("/job_templates/:id",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesEdit"}).when("/projects",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsList"}).when("/projects/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsAdd"}).when("/projects/:id",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsEdit"}).when("/projects/:project_id/organizations",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsList"}).when("/projects/:project_id/organizations/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsAdd"}).when("/hosts/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/inventories",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesList"}).when("/inventories/add",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesAdd"}).when("/inventories/:inventory_id",{templateUrl:urlPrefix+"partials/inventory-edit.html",controller:"InventoriesEdit"}).when("/organizations",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsList"}).when("/organizations/add",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsAdd"}).when("/organizations/:organization_id",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsEdit"}).when("/organizations/:organization_id/admins",{templateUrl:urlPrefix+"partials/organizations.html",controller:"AdminsList"}).when("/organizations/:organization_id/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/organizations/:organization_id/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/organizations/:organization_id/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/teams",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsList"}).when("/teams/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsAdd"}).when("/teams/:team_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsEdit"}).when("/teams/:team_id/permissions/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsAdd"}).when("/teams/:team_id/permissions",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsList"}).when("/teams/:team_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsEdit"}).when("/teams/:team_id/users",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersList"}).when("/teams/:team_id/users/:user_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersEdit"}).when("/teams/:team_id/projects",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsList"}).when("/teams/:team_id/projects/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsAdd"}).when("/teams/:team_id/projects/:project_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsEdit"}).when("/teams/:team_id/credentials",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsList"}).when("/teams/:team_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:team_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/credentials",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsList"}).when("/credentials/add",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsAdd"}).when("/credentials/:credential_id",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsEdit"}).when("/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/users/:user_id/credentials",{templateUrl:urlPrefix+"partials/users.html",controller:"CredentialsList"}).when("/users/:user_id/permissions/add",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsAdd"}).when("/users/:user_id/permissions",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsList"}).when("/users/:user_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsEdit"}).when("/users/:user_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:user_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/login",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/logout",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/home",{templateUrl:urlPrefix+"partials/home.html",controller:"Home"}).when("/home/groups",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeGroups"}).when("/home/hosts",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeHosts"}).otherwise({redirectTo:"/home"})}]).run(["$cookieStore","$rootScope","CheckLicense","$location","Authorization","LoadBasePaths","ViewLicense","Timer","ClearScope","HideStream",function(a,b,c,d,e,f,g,h,i,j){f(),b.breadcrumbs=[],b.crumbCache=[],b.sessionTimer=h.init(),b.$on("$routeChangeStart",function(f,g){$("#stream-container").is(":visible")&&j(),/^\/(login|logout)/.test(d.path())||(b.lastPath=d.path(),a.put("lastPath",d.path())),e.isUserLoggedIn()===!1?g.templateUrl!==urlPrefix+"partials/login.html"&&d.path("/login"):b.sessionTimer.isExpired()?g.templateUrl!==urlPrefix+"partials/login.html"&&(b.sessionTimer.expireSession(),d.path("/login")):((void 0===b.current_user||null===b.current_user)&&e.restoreUserInfo(),c());var h=d.path().replace(/^\//,"").split("/")[0];""===h?h="home":h.replace(/\_/g," "),$('.nav-tabs a[href="#'+h+'"]').tab("show")}),e.getToken()?b.user_is_superuser=e.getUserInfo("is_superuser"):(b.sessionExpired=!1,a.put("sessionExpired",!1),d.path("/login"));var k=d.path().replace(/^\//,"").split("/")[0];""===k?(k="home",d.path("/home")):k.replace(/\_/g," "),$('.nav-tabs a[href="#'+k+'"]').tab("show"),b.viewCurrentUser=function(){d.path("/users/"+b.current_user.id)},b.viewLicense=function(){g()}}]);var urlPrefix=$basePath;angular.module("ansible",["RestServices","AuthService","Utilities","OrganizationFormDefinition","UserFormDefinition","FormGenerator","OrganizationListDefinition","UserListDefinition","UserHelper","ListGenerator","PromptDialog","ApiLoader","RelatedSearchHelper","SearchHelper","PaginationHelpers","RefreshHelper","AdminListDefinition","AWDirectives","InventoriesListDefinition","InventoryFormDefinition","InventoryHelper","InventoryGroupsDefinition","InventoryHostsDefinition","HostsHelper","AWFilters","HostFormDefinition","HostListDefinition","GroupFormDefinition","GroupListDefinition","GroupsHelper","TeamsListDefinition","TeamFormDefinition","TeamHelper","CredentialsListDefinition","CredentialFormDefinition","LookUpHelper","JobTemplatesListDefinition","JobTemplateFormDefinition","JobSubmissionHelper","ProjectsListDefinition","ProjectFormDefinition","ProjectStatusDefinition","ProjectsHelper","PermissionFormDefinition","PermissionListDefinition","PermissionsHelper","JobsListDefinition","JobFormDefinition","JobEventsListDefinition","JobEventDataDefinition","JobEventsFormDefinition","JobHostDefinition","JobSummaryDefinition","ParseHelper","ChildrenHelper","EventsHelper","ProjectPathHelper","md5Helper","AccessHelper","SelectionHelper","License","HostGroupsFormDefinition","JobStatusWidget","InventorySyncStatusWidget","SCMSyncStatusWidget","ObjectCountWidget","StreamWidget","JobsHelper","InventoryGroupsHelpDefinition","InventoryTree","CredentialsHelper","TimerService","StreamListDefinition","HomeGroupListDefinition","HomeHostListDefinition","ActivityDetailDefinition"]).config(["$routeProvider",function(a){a.when("/jobs",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsListCtrl"}).when("/jobs/:id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobsEdit"}).when("/jobs/:id/job_events",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsList"}).when("/jobs/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/jobs/:job_id/job_events/:event_id",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobEventsEdit"}).when("/job_templates",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesList"}).when("/job_templates/add",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesAdd"}).when("/job_templates/:id",{templateUrl:urlPrefix+"partials/job_templates.html",controller:"JobTemplatesEdit"}).when("/projects",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsList"}).when("/projects/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsAdd"}).when("/projects/:id",{templateUrl:urlPrefix+"partials/projects.html",controller:"ProjectsEdit"}).when("/projects/:project_id/organizations",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsList"}).when("/projects/:project_id/organizations/add",{templateUrl:urlPrefix+"partials/projects.html",controller:"OrganizationsAdd"}).when("/hosts/:id/job_host_summaries",{templateUrl:urlPrefix+"partials/jobs.html",controller:"JobHostSummaryList"}).when("/inventories",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesList"}).when("/inventories/add",{templateUrl:urlPrefix+"partials/inventories.html",controller:"InventoriesAdd"}).when("/inventories/:inventory_id",{templateUrl:urlPrefix+"partials/inventory-edit.html",controller:"InventoriesEdit"}).when("/organizations",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsList"}).when("/organizations/add",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsAdd"}).when("/organizations/:organization_id",{templateUrl:urlPrefix+"partials/organizations.html",controller:"OrganizationsEdit"}).when("/organizations/:organization_id/admins",{templateUrl:urlPrefix+"partials/organizations.html",controller:"AdminsList"}).when("/organizations/:organization_id/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/organizations/:organization_id/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/organizations/:organization_id/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/teams",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsList"}).when("/teams/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsAdd"}).when("/teams/:team_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"TeamsEdit"}).when("/teams/:team_id/permissions/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsAdd"}).when("/teams/:team_id/permissions",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsList"}).when("/teams/:team_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"PermissionsEdit"}).when("/teams/:team_id/users",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersList"}).when("/teams/:team_id/users/:user_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"UsersEdit"}).when("/teams/:team_id/projects",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsList"}).when("/teams/:team_id/projects/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsAdd"}).when("/teams/:team_id/projects/:project_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"ProjectsEdit"}).when("/teams/:team_id/credentials",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsList"}).when("/teams/:team_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:team_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/credentials",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsList"}).when("/credentials/add",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsAdd"}).when("/credentials/:credential_id",{templateUrl:urlPrefix+"partials/credentials.html",controller:"CredentialsEdit"}).when("/users",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersList"}).when("/users/add",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersAdd"}).when("/users/:user_id",{templateUrl:urlPrefix+"partials/users.html",controller:"UsersEdit"}).when("/users/:user_id/credentials",{templateUrl:urlPrefix+"partials/users.html",controller:"CredentialsList"}).when("/users/:user_id/permissions/add",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsAdd"}).when("/users/:user_id/permissions",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsList"}).when("/users/:user_id/permissions/:permission_id",{templateUrl:urlPrefix+"partials/users.html",controller:"PermissionsEdit"}).when("/users/:user_id/credentials/add",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsAdd"}).when("/teams/:user_id/credentials/:credential_id",{templateUrl:urlPrefix+"partials/teams.html",controller:"CredentialsEdit"}).when("/login",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/logout",{templateUrl:urlPrefix+"partials/home.html",controller:"Authenticate"}).when("/home",{templateUrl:urlPrefix+"partials/home.html",controller:"Home"}).when("/home/groups",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeGroups"}).when("/home/hosts",{templateUrl:urlPrefix+"partials/subhome.html",controller:"HomeHosts"}).otherwise({redirectTo:"/home"})}]).run(["$cookieStore","$rootScope","CheckLicense","$location","Authorization","LoadBasePaths","ViewLicense","Timer","ClearScope","HideStream",function(a,b,c,d,e,f,g,h,i,j){f(),b.breadcrumbs=[],b.crumbCache=[],b.sessionTimer=h.init(),b.$on("$routeChangeStart",function(f,g){$("#stream-container").is(":visible")&&j(),/^\/(login|logout)/.test(d.path())||(b.lastPath=d.path(),a.put("lastPath",d.path())),e.isUserLoggedIn()===!1?g.templateUrl!==urlPrefix+"partials/login.html"&&d.path("/login"):b.sessionTimer.isExpired()?g.templateUrl!==urlPrefix+"partials/login.html"&&(b.sessionTimer.expireSession(),d.path("/login")):((void 0===b.current_user||null===b.current_user)&&e.restoreUserInfo(),c());var h=d.path().replace(/^\//,"").split("/")[0];""===h?h="home":h.replace(/\_/g," "),$('.nav-tabs a[href="#'+h+'"]').tab("show")}),e.getToken()?b.user_is_superuser=e.getUserInfo("is_superuser"):(b.sessionExpired=!1,a.put("sessionExpired",!1),d.path("/login"));var k=d.path().replace(/^\//,"").split("/")[0];""===k?(k="home",d.path("/home")):k.replace(/\_/g," "),$('.nav-tabs a[href="#'+k+'"]').tab("show"),b.viewCurrentUser=function(){d.path("/users/"+b.current_user.id)},b.viewLicense=function(){g()}}]);var $AnsibleConfig={tooltip_delay:{show:500,hide:100},debug_mode:!0,password_strength:45,session_timeout:1800};AdminsList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","AdminList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","GetBasePath","SelectionInit"],Authenticate.$inject=["$cookieStore","$window","$scope","$rootScope","$location","Authorization","ToggleClass","Alert","Wait","Timer","Empty"],CredentialsList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","CredentialList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","SelectionInit","GetChoices","Wait","Stream"],CredentialsAdd.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","CredentialForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ReturnToCaller","ClearScope","GenerateList","SearchInit","PaginateInit","LookUpInit","UserList","TeamList","GetBasePath","GetChoices","Empty","KindChange","OwnerChange","FormSave"],CredentialsEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","CredentialForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","RelatedSearchInit","RelatedPaginateInit","ReturnToCaller","ClearScope","Prompt","GetBasePath","GetChoices","KindChange","UserList","TeamList","LookUpInit","Empty","OwnerChange","FormSave","Stream","Wait"],Home.$inject=["$scope","$compile","$routeParams","$rootScope","$location","Wait","ObjectCount","JobStatus","InventorySyncStatus","SCMSyncStatus","ClearScope","Stream","Rest","GetBasePath","ProcessErrors","Button"],HomeGroups.$inject=["$location","$routeParams","HomeGroupList","GenerateList","ProcessErrors","LoadBreadCrumbs","ReturnToCaller","ClearScope","GetBasePath","SearchInit","PaginateInit","FormatDate","GetHostsStatusMsg","GetSyncStatusMsg","ViewUpdateStatus","Stream","GroupsEdit","Wait","Alert","Rest","Empty","InventoryUpdate","Find"],HomeHosts.$inject=["$location","$routeParams","HomeHostList","GenerateList","ProcessErrors","LoadBreadCrumbs","ReturnToCaller","ClearScope","GetBasePath","SearchInit","PaginateInit","FormatDate","SetStatus","ToggleHostEnabled","HostsEdit","Stream","Find","ShowJobSummary"],InventoriesList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","InventoryList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","Wait","Stream","EditInventoryProperties"],InventoriesAdd.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","InventoryForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ReturnToCaller","ClearScope","GenerateList","OrganizationList","SearchInit","PaginateInit","LookUpInit","GetBasePath","ParseTypeChange","Wait"],InventoriesEdit.$inject=["$scope","$location","$routeParams","$compile","GenerateList","ClearScope","InventoryGroups","InventoryHosts","BuildTree","Wait","GetSyncStatusMsg","InjectHosts","HostsReload","GroupsAdd","GroupsEdit","GroupsDelete","Breadcrumbs","LoadBreadCrumbs","Empty","Rest","ProcessErrors","InventoryUpdate","Alert","ToggleChildren","ViewUpdateStatus","GroupsCancelUpdate","Find","HostsCreate","EditInventoryProperties","HostsEdit","HostsDelete","ToggleHostEnabled","CopyMoveGroup","CopyMoveHost","Stream","GetBasePath","ShowJobSummary","ApplyEllipsis","WatchInventoryWindowResize","HelpDialog","InventoryGroupsHelp","Store"],JobEventsList.$inject=["$filter","$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","JobEventList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","LookUpInit","ToggleChildren","FormatDate","EventView","Refresh","Wait"],JobEventsEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","JobEventsForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ClearScope","GetBasePath","FormatDate","EventView","Wait"],JobHostSummaryList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","JobHostList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","Refresh","JobStatusToolTip","Wait"],JobTemplatesList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","JobTemplateList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","PromptPasswords","JobTemplateForm","CredentialList","LookUpInit","SubmitJob","Wait","Stream"],JobTemplatesAdd.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","JobTemplateForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ReturnToCaller","ClearScope","GetBasePath","InventoryList","CredentialList","ProjectList","LookUpInit","md5Setup","ParseTypeChange","Wait","Empty"],JobTemplatesEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","JobTemplateForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","RelatedSearchInit","RelatedPaginateInit","ReturnToCaller","ClearScope","InventoryList","CredentialList","ProjectList","LookUpInit","PromptPasswords","GetBasePath","md5Setup","ParseTypeChange","JobStatusToolTip","FormatDate","Wait","Stream","Empty","Prompt"],JobsListCtrl.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","JobList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","LookUpInit","SubmitJob","FormatDate","Refresh","JobStatusToolTip","Empty","Wait"],JobsEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","JobForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","RelatedSearchInit","RelatedPaginateInit","ReturnToCaller","ClearScope","InventoryList","CredentialList","ProjectList","LookUpInit","PromptPasswords","GetBasePath","md5Setup","FormatDate","JobStatusToolTip","Wait"],OrganizationsList.$inject=["$routeParams","$scope","$rootScope","$location","$log","Rest","Alert","LoadBreadCrumbs","Prompt","GenerateList","OrganizationList","SearchInit","PaginateInit","ClearScope","ProcessErrors","GetBasePath","SelectionInit","Wait","Stream"],OrganizationsAdd.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","OrganizationForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ClearScope","GetBasePath","ReturnToCaller","Wait"],OrganizationsEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","OrganizationForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","RelatedSearchInit","RelatedPaginateInit","Prompt","ClearScope","GetBasePath","Wait","Stream"],PermissionsList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","PermissionList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","CheckAccess","Wait"],PermissionsAdd.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","PermissionsForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ClearScope","GetBasePath","ReturnToCaller","InventoryList","ProjectList","LookUpInit","CheckAccess","Wait","PermissionCategoryChange"],PermissionsEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","PermissionsForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ReturnToCaller","ClearScope","Prompt","GetBasePath","InventoryList","ProjectList","LookUpInit","CheckAccess","Wait","PermissionCategoryChange"],ProjectsList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","ProjectList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","SelectionInit","ProjectUpdate","ProjectStatus","FormatDate","Refresh","Wait","Stream","GetChoices","Empty"],ProjectsAdd.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","ProjectsForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ClearScope","GetBasePath","ReturnToCaller","GetProjectPath","LookUpInit","OrganizationList","CredentialList","GetChoices","DebugForm","Wait"],ProjectsEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","ProjectsForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","RelatedSearchInit","RelatedPaginateInit","Prompt","ClearScope","GetBasePath","ReturnToCaller","GetProjectPath","Authorization","CredentialList","LookUpInit","GetChoices","Empty","DebugForm","Wait","Stream"],TeamsList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","TeamList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","SetTeamListeners","GetBasePath","SelectionInit","Wait","Stream"],TeamsAdd.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","TeamForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ReturnToCaller","ClearScope","GenerateList","OrganizationList","SearchInit","PaginateInit","GetBasePath","LookUpInit","Wait"],TeamsEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","TeamForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","RelatedSearchInit","RelatedPaginateInit","ReturnToCaller","ClearScope","LookUpInit","Prompt","GetBasePath","CheckAccess","OrganizationList","Wait","Stream"],UsersList.$inject=["$scope","$rootScope","$location","$log","$routeParams","Rest","Alert","UserList","GenerateList","LoadBreadCrumbs","Prompt","SearchInit","PaginateInit","ReturnToCaller","ClearScope","ProcessErrors","GetBasePath","SelectionInit","Wait","Stream"],UsersAdd.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","UserForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","ReturnToCaller","ClearScope","GetBasePath","LookUpInit","OrganizationList","ResetForm","Wait"],UsersEdit.$inject=["$scope","$rootScope","$compile","$location","$log","$routeParams","UserForm","GenerateForm","Rest","Alert","ProcessErrors","LoadBreadCrumbs","RelatedSearchInit","RelatedPaginateInit","ReturnToCaller","ClearScope","GetBasePath","Prompt","CheckAccess","ResetForm","Wait","Stream"],angular.module("ActivityDetailDefinition",[]).value("ActivityDetailForm",{name:"activity",editTitle:"Activity Detail",well:!1,"class":"horizontal-narrow",formFieldSize:"col-lg-10",formLabelSize:"col-lg-2",fields:{user:{label:"Initiated by",type:"text",readonly:!0},operation:{label:"Action",type:"text",readonly:!0},changes:{label:"Changes",type:"textarea",ngHide:"!changes || changes =='' || changes == 'null'",readonly:!0}}}),angular.module("CredentialFormDefinition",[]).value("CredentialForm",{addTitle:"Create Credential",editTitle:"{{ name }}",name:"credential",well:!0,forceListeners:!0,actions:{stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"edit"}},fields:{name:{label:"Name",type:"text",addRequired:!0,editRequired:!0,autocomplete:!1},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1},owner:{label:"Does this credential belong to a team or user?",type:"radio_group",ngChange:"ownerChange()",options:[{label:"User",value:"user",selected:!0},{label:"Team",value:"team"}],awPopOver:"

A credential must be associated with either a user or a team. Choosing a user allows only the selected user access to the credential. Choosing a team shares the credential with all team members.

",dataTitle:"Owner",dataPlacement:"right",dataContainer:"body"},user:{label:"User that owns this credential",type:"lookup",sourceModel:"user",sourceField:"username",ngClick:"lookUpUser()",ngShow:"owner == 'user'",awRequiredWhen:{variable:"user_required",init:"false"}},team:{label:"Team that owns this credential",type:"lookup",sourceModel:"team",sourceField:"name",ngClick:"lookUpTeam()",ngShow:"owner == 'team'",awRequiredWhen:{variable:"team_required",init:"false"}},kind:{label:"Type",excludeModal:!0,type:"select",ngOptions:"kind.label for kind in credential_kind_options",ngChange:"kindChange()",addRequired:!0,editRequired:!0,helpCollapse:[{hdr:"Select a Credential Type",content:"
\n
AWS
\n
Access keys for Amazon Web Services used for inventory management or deployment.
\n
Machine
\n
Authentication for remote machine access. This can include SSH keys, usernames, passwords, and sudo information. Machine credentials are used when submitting jobs to run playbooks against remote hosts.
Rackspace
\n
Access information for Rackspace Cloud used for inventory management or deployment.
\n
SCM
\n
Used to check out and synchronize playbook repositories with a remote source control management system such as Git, Subversion (svn), or Mercurial (hg). These credentials are used on the Projects tab.
\n
\n"}]},access_key:{label:"Access Key",type:"text",ngShow:"kind.value == 'aws'",awRequiredWhen:{variable:"aws_required",init:!1},autocomplete:!1,apiField:"username"},secret_key:{label:"Secret Key",type:"password",ngShow:"kind.value == 'aws'",awRequiredWhen:{variable:"aws_required",init:!1},autocomplete:!1,ask:!1,clear:!1,apiField:"passwowrd"},username:{labelBind:"usernameLabel",type:"text",ngShow:"kind.value && kind.value !== 'aws'",awRequiredWhen:{variable:"rackspace_required",init:!1},autocomplete:!1},api_key:{label:"API Key",type:"password",ngShow:"kind.value == 'rax'",awRequiredWhen:{variable:"rackspace_required",init:!1},autocomplete:!1,ask:!1,clear:!1,apiField:"passwowrd"},password:{label:"Password",type:"password",ngShow:"kind.value == 'scm'",addRequired:!1,editRequired:!1,ngChange:"clearPWConfirm('password_confirm')",ask:!1,clear:!1,associated:"password_confirm",autocomplete:!1},password_confirm:{label:"Confirm Password",type:"password",ngShow:"kind.value == 'scm'",addRequired:!1,editRequired:!1,awPassMatch:!0,associated:"password",autocomplete:!1},ssh_password:{label:"SSH Password",type:"password",ngShow:"kind.value == 'ssh'",ngChange:"clearPWConfirm('ssh_password_confirm')",addRequired:!1,editRequired:!1,ask:!0,clear:!0,associated:"ssh_password_confirm",autocomplete:!1},ssh_password_confirm:{label:"Confirm SSH Password",type:"password",ngShow:"kind.value == 'ssh'",addRequired:!1,editRequired:!1,awPassMatch:!0,associated:"ssh_password",autocomplete:!1},ssh_key_data:{labelBind:"sshKeyDataLabel",type:"textarea",ngShow:"kind.value == 'ssh' || kind.value == 'scm'",addRequired:!1,editRequired:!1,"class":"ssh-key-field",rows:10},ssh_key_unlock:{label:"Key Password",type:"password",ngShow:"kind.value == 'ssh' || kind.value == 'scm'",addRequired:!1,editRequired:!1,ngChange:"clearPWConfirm('ssh_key_unlock_confirm')",associated:"ssh_key_unlock_confirm",ask:!0,askShow:"kind.value == 'ssh'",clear:!0},ssh_key_unlock_confirm:{label:"Confirm Key Password",type:"password",ngShow:"kind.value == 'ssh' || kind.value == 'scm'",addRequired:!1,editRequired:!1,awPassMatch:!0,associated:"ssh_key_unlock"},sudo_username:{label:"Sudo Username",type:"text",ngShow:"kind.value == 'ssh'",addRequired:!1,editRequired:!1,autocomplete:!1},sudo_password:{label:"Sudo Password",type:"password",ngShow:"kind.value == 'ssh'",addRequired:!1,editRequired:!1,ngChange:"clearPWConfirm('sudo_password_confirm')",ask:!0,clear:!0,associated:"sudo_password_confirm",autocomplete:!1},sudo_password_confirm:{label:"Confirm Sudo Password",type:"password",ngShow:"kind.value == 'ssh'",addRequired:!1,editRequired:!1,awPassMatch:!0,associated:"sudo_password",autocomplete:!1}},buttons:{save:{label:"Save",ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{}}),angular.module("GroupFormDefinition",[]).value("GroupForm",{addTitle:"Create Group",editTitle:"Edit Group",showTitle:!0,cancelButton:!1,name:"group",well:!0,formLabelSize:"col-lg-3",formFieldSize:"col-lg-9",tabs:[{name:"properties",label:"Properties"},{name:"source",label:"Source"}],fields:{name:{label:"Name",type:"text",addRequired:!0,editRequired:!0,tab:"properties"},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1,tab:"properties"},variables:{label:"Variables",type:"textarea",addRequired:!1,editRequird:!1,rows:6,"default":"---",dataTitle:"Group Variables",dataPlacement:"right",awPopOver:'

Variables defined here apply to all child groups and hosts.

Enter variables using either JSON or YAML syntax. Use the radio button to toggle between the two.

JSON:
\n
{
"somevar": "somevalue",
"password": "magic"
}
\nYAML:
\n
---
somevar: somevalue
password: magic
\n

View JSON examples at www.json.org

View YAML examples at docs.ansible.com

',dataContainer:"body",tab:"properties"},source:{label:"Source",type:"select",ngOptions:"source.label for source in source_type_options",ngChange:"sourceChange()",addRequired:!1,editRequired:!1,tab:"source"},source_path:{label:"Script Path",ngShow:"source && source.value == 'file'",type:"text",awRequiredWhen:{variable:"sourcePathRequired",init:"false"},tab:"source"},credential:{label:"Cloud Credential",type:"lookup",ngShow:"source && source.value !== ''",sourceModel:"credential",sourceField:"name",ngClick:"lookUpCredential()",addRequired:!1,editRequired:!1,tab:"source"},source_regions:{label:"Regions",type:"text",ngShow:"source && (source.value == 'rax' || source.value == 'ec2')",addRequired:!1,editRequired:!1,awMultiselect:"source_region_choices",dataTitle:"Source Regions",dataPlacement:"right",awPopOver:"

Click on the regions field to see a list of regions for your cloud provider. You can select multiple regions, or choose All to include all regions. Tower will only be updated with Hosts associated with the selected regions.

",dataContainer:"body",tab:"source"},source_vars:{label:"Source Variables",ngShow:"source && (source.value == 'file' || source.value == 'ec2')",type:"textarea",addRequired:!1,editRequird:!1,rows:6,"default":"---",parseTypeName:"envParseType",dataTitle:"Source Variables",dataPlacement:"right",awPopOver:'

Override variables found in ec2.ini and used by the inventory update script. For a detailed description of these variables view ec2.ini in the Ansible github repo.

Enter variables using either JSON or YAML syntax. Use the radio button to toggle between the two.

JSON:
\n
{
"somevar": "somevalue",
"password": "magic"
}
\nYAML:
\n
---
somevar: somevalue
password: magic
\n

View JSON examples at www.json.org

View YAML examples at docs.ansible.com

',dataContainer:"body",tab:"source"},checkbox_group:{label:"Update Options",type:"checkbox_group",ngShow:"source && (source.value !== '' && source.value !== null)",tab:"source",fields:[{name:"overwrite",label:"Overwrite",type:"checkbox",ngShow:"source.value !== '' && source.value !== null",addRequired:!1,editRequired:!1,awPopOver:"

When checked all child groups and hosts not found on the remote source will be deleted from the local inventory.

Unchecked any local child hosts and groups not found on the external source will remain untouched by the inventory update process.

",dataTitle:"Overwrite",dataContainer:"body",dataPlacement:"right",labelClass:"checkbox-options"},{name:"overwrite_vars",label:"Overwrite Variables",type:"checkbox",ngShow:"source.value !== '' && source.value !== null",addRequired:!1,editRequired:!1,awPopOver:"

If checked, all variables for child groups and hosts will be removed and replaced by those found on the external source.

When not checked a merge will be performed, combining local variables with those found on the external source.

",dataTitle:"Overwrite Variables",dataContainer:"body",dataPlacement:"right",labelClass:"checkbox-options"},{name:"update_on_launch",label:"Update on Launch",type:"checkbox",ngShow:"source.value !== '' && source.value !== null",addRequired:!1,editRequired:!1,awPopOver:"

Each time a job runs using this inventory, refresh the inventory from the selected source before executing job tasks.

",dataTitle:"Update on Launch",dataContainer:"body",dataPlacement:"right",labelClass:"checkbox-options"}]}},buttons:{labelClass:"col-lg-3",controlClass:"col-lg-5",save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{}}),angular.module("HostGroupsFormDefinition",[]).value("HostGroupsForm",{editTitle:"Host Groups",name:"host",well:!1,formLabelSize:"col-lg-3",formFieldSize:"col-lg-9",fields:{groups:{label:"Groups",type:"select",multiple:!0,ngOptions:"group.name for group in inventory_groups",addRequired:!0,editRequired:!0,awPopOver:"

Provide a host name, ip address, or ip address:port. Examples include:

myserver.domain.com
127.0.0.1
10.1.0.140:25
server.example.com:25
",dataTitle:"Host Name",dataPlacement:"right",dataContainer:"#form-modal .modal-content"}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{}}),angular.module("HostFormDefinition",[]).value("HostForm",{addTitle:"Create Host",editTitle:"{{ name }}",name:"host",well:!1,formLabelSize:"col-lg-3",formFieldSize:"col-lg-9",fields:{name:{label:"Host Name",type:"text",addRequired:!0,editRequired:!0,awPopOver:"

Provide a host name, ip address, or ip address:port. Examples include:

myserver.domain.com
127.0.0.1
10.1.0.140:25
server.example.com:25
",dataTitle:"Host Name",dataPlacement:"right",dataContainer:"#form-modal .modal-content"},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1},enabled:{label:"Enabled?",type:"checkbox",addRequired:!1,editRequired:!1,"default":!0,awPopOver:"

Indicates if a host is available and should be included in running jobs.

For hosts that are part of an external inventory, this flag cannot be changed. It will be set by the inventory sync process.

",dataTitle:"Host Enabled",dataPlacement:"right",dataContainer:"#form-modal .modal-content",ngDisabled:"has_inventory_sources == true"},variables:{label:"Variables",type:"textarea",addRequired:!1,editRequird:!1,rows:6,"class":"modal-input-xlarge","default":"---",awPopOver:'

Enter variables using either JSON or YAML syntax. Use the radio button to toggle between the two.

JSON:
\n
{
"somevar": "somevalue",
"password": "magic"
}
\nYAML:
\n
---
somevar: somevalue
password: magic
\n

View JSON examples at www.json.org

View YAML examples at docs.ansible.com

',dataTitle:"Host Variables",dataPlacement:"right",dataContainer:"#form-modal .modal-content"},inventory:{type:"hidden",includeOnEdit:!0,includeOnAdd:!0}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{}}),angular.module("InventoryFormDefinition",[]).value("InventoryForm",{addTitle:"Create Inventory",editTitle:"{{ inventory_name | capitalize }}",name:"inventory",well:!0,actions:{stream:{"class":"btn-primary btn-xs activity-btn",ngClick:"showActivity()",awToolTip:"View Activity Stream",dataPlacement:"top",icon:"icon-comments-alt",mode:"edit",iconSize:"large"}},fields:{inventory_name:{realName:"name",label:"Name",type:"text",addRequired:!0,editRequired:!0,capitalize:!1},inventory_description:{realName:"description",label:"Description",type:"text",addRequired:!1,editRequired:!1},organization:{label:"Organization",type:"lookup",sourceModel:"organization",sourceField:"name",ngClick:"lookUpOrganization()",awRequiredWhen:{variable:"organizationrequired",init:"true"}},inventory_variables:{realName:"variables",label:"Variables",type:"textarea","class":"span12",addRequired:!1,editRequird:!1,parseTypeName:"inventoryParseType",rows:6,"default":"---",awPopOver:'

Enter inventory variables using either JSON or YAML syntax. Use the radio button to toggle between the two.

JSON:
\n
{
"somevar": "somevalue",
"password": "magic"
}
\nYAML:
\n
---
somevar: somevalue
password: magic
\n

View JSON examples at www.json.org

View YAML examples at docs.ansible.com

',dataTitle:"Inventory Variables",dataPlacement:"right",dataContainer:"body"}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{}}),angular.module("JobEventDataDefinition",[]).value("JobEventDataForm",{editTitle:"{{ id }} - {{ event_display }}",name:"job_events",well:!1,"class":"horizontal-narrow",fields:{event_data:{label:!1,type:"textarea",readonly:!0,rows:18,"class":"modal-input-xxlarge"}}}),angular.module("JobEventsFormDefinition",[]).value("JobEventsForm",{name:"job_events",well:!1,forceListeners:!0,fields:{status:{labelClass:"job-{{ status }}",type:"custom",section:"Event",control:'
{{ status }}
'},id:{label:"ID",type:"text",readonly:!0,section:"Event","class":"span1"},created:{label:"Created On",type:"text",section:"Event",readonly:!0},host:{label:"Host",type:"text",readonly:!0,section:"Event",ngShow:"host !== ''"},play:{label:"Play",type:"text",readonly:!0,section:"Event",ngShow:"play !== ''"},task:{label:"Task",type:"text",readonly:!0,section:"Event",ngShow:"task !== ''"},rc:{label:"Return Code",type:"text",readonly:!0,section:"Results","class":"span1",ngShow:"rc !== ''"},msg:{label:"Msg",type:"textarea",readonly:!0,section:"Results","class":"nowrap",ngShow:"msg !== ''",rows:10},stdout:{label:"Std Out",type:"textarea",readonly:!0,section:"Results","class":"nowrap",ngShow:"stdout !== ''",rows:10},stderr:{label:"Std Err",type:"textarea",readonly:!0,section:"Results","class":"nowrap",ngShow:"stderr !== ''",rows:10},results:{label:"Results",type:"textarea",section:"Results",readonly:!0,"class":"nowrap",ngShow:"results !== ''",rows:10},start:{label:"Start",type:"text",readonly:!0,section:"Timing",ngShow:"start !== ''"},traceback:{label:!1,type:"textarea",readonly:!0,section:"Traceback","class":"nowrap",ngShow:"traceback !== ''",rows:10},end:{label:"End",type:"text",readonly:!0,section:"Timing",ngShow:"end !== ''"},delta:{label:"Elapsed",type:"text",readonly:!0,section:"Timing",ngShow:"delta !== ''"},module_name:{label:"Name",type:"text",readonly:!0,section:"Module",ngShow:"module_name !== ''"},module_args:{label:"Args",type:"text",readonly:!0,section:"Module",ngShow:"module_args !== ''"}}}),angular.module("JobSummaryDefinition",[]).value("JobSummary",{editTitle:"{{ id }} - {{ name }}",name:"jobs",well:!1,fields:{status:{type:"custom",control:'
Status {{ status }}
',readonly:!0},created:{label:"Created On",type:"text",readonly:!0},result_stdout:{label:"Standard Out",type:"textarea",readonly:!0,xtraWide:!0,rows:"{{ stdout_rows }}","class":"nowrap mono-space resizable",ngShow:'result_stdout != ""'},result_traceback:{label:"Traceback",type:"textarea",xtraWide:!0,readonly:!0,rows:"{{ traceback_rows }}","class":"nowrap mono-space resizable",ngShow:'result_traceback != ""'}}}),angular.module("JobTemplateFormDefinition",[]).value("JobTemplateForm",{addTitle:"Create Job Templates",editTitle:"{{ name }}",name:"job_templates",twoColumns:!0,well:!0,actions:{stream:{"class":"btn-primary btn-xs activity-btn",ngClick:"showActivity()",awToolTip:"View Activity Stream",dataPlacement:"top",icon:"icon-comments-alt",mode:"edit",iconSize:"large"}},fields:{name:{label:"Name",type:"text",addRequired:!0,editRequired:!0,column:1},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1,column:1},job_type:{label:"Job Type",type:"select",ngOptions:"type.label for type in job_type_options","default":0,addRequired:!0,editRequired:!0,column:1,awPopOver:"

When this template is submitted as a job, setting the type to run will execute the playbook, running tasks on the selected hosts.

Setting the type to check will not execute the playbook. Instead, ansible will check playbook syntax, test environment setup and report problems.

",dataTitle:"Job Type",dataPlacement:"right",dataContainer:"body"},inventory:{label:"Inventory",type:"lookup",sourceModel:"inventory",sourceField:"name",ngClick:"lookUpInventory()",awRequiredWhen:{variable:"inventoryrequired",init:"true"},column:1,awPopOver:"

Select the inventory containing the hosts you want this job to manage.

",dataTitle:"Inventory",dataPlacement:"right",dataContainer:"body"},project:{label:"Project",type:"lookup",sourceModel:"project",sourceField:"name",ngClick:"lookUpProject()",awRequiredWhen:{variable:"projectrequired",init:"true"},column:1,awPopOver:"

Select the project containing the playbook you want this job to execute.

",dataTitle:"Project",dataPlacement:"right",dataContainer:"body"},playbook:{label:"Playbook",type:"select",ngOptions:"book for book in playbook_options",id:"playbook-select",awRequiredWhen:{variable:"playbookrequired",init:"true"},column:1,awPopOver:"

Select the playbook to be executed by this job.

",dataTitle:"Playbook",dataPlacement:"right",dataContainer:"body"},credential:{label:"Machine Credential",type:"lookup",sourceModel:"credential",sourceField:"name",ngClick:"lookUpCredential()",addRequired:!1,editRequired:!1,column:1,awPopOver:"

Select the credential you want the job to use when accessing the remote hosts. Choose the credential containing the username and SSH key or password that Ansbile will need to log into the remote hosts.

",dataTitle:"Credential",dataPlacement:"right",dataContainer:"body"},cloud_credential:{label:"Cloud Credential",type:"lookup",sourceModel:"cloud_credential",sourceField:"name",ngClick:"lookUpCloudcredential()",addRequired:!1,editRequired:!1,column:1,awPopOver:"

Selecting an optional cloud credential in the job template will pass along the access credentials to the running playbook, allowing provisioning into the cloud without manually passing parameters to the included modules.

",dataTitle:"Cloud Credential",dataPlacement:"right",dataContainer:"body"},forks:{label:"Forks",id:"forks-number",type:"number",integer:!0,min:0,spinner:!0,"default":"0",addRequired:!1,editRequired:!1,"class":"input-small",column:1,awPopOver:'

The number of parallel or simultaneous processes to use while executing the playbook. 0 signifies the default value from the ansible configuration file.

',dataTitle:"Forks",dataPlacement:"right",dataContainer:"body"},limit:{label:"Limit",type:"text",addRequired:!1,editRequired:!1,column:1,awPopOver:'

Provide a host pattern to further constrain the list of hosts that will be managed or affected by the playbook. Multiple patterns can be separated by ; : or ,

For more information and examples see the Patters top at docs.ansible.com.

',dataTitle:"Limit",dataPlacement:"right",dataContainer:"body"},verbosity:{label:"Verbosity",type:"select",ngOptions:"v.label for v in verbosity_options","default":0,addRequired:!0,editRequired:!0,column:1,awPopOver:"

Control the level of output ansible will produce as the playbook executes.

",dataTitle:"Verbosity",dataPlacement:"right",dataContainer:"body"},variables:{label:"Extra Variables",type:"textarea",rows:6,"class":"span12",addRequired:!1,editRequired:!1,"default":"---",column:2,awPopOver:'

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.

JSON:
\n
{
"somevar": "somevalue",
"password": "magic"
}
\nYAML:
\n
---
somevar: somevalue
password: magic
\n',dataTitle:"Extra Variables",dataPlacement:"right",dataContainer:"body"},job_tags:{label:"Job Tags",type:"textarea",rows:1,addRequired:!1,editRequired:!1,"class":"span12",column:2,awPopOver:"

Provide a comma separated list of tags.

\n

Tags are useful when you have a large playbook, and you want to run a specific part of a play or task.

For example, you might have a task consisiting of a long list of actions. Tag values can be assigned to each action. Suppose the actions have been assigned tag values of "configuration", "packages" and "install".

If you just want to run the "configuration" and "packages" actions, you would enter the following here in the Job Tags field:

\n
configuration,packages
\n",dataTitle:"Job Tags",dataPlacement:"right",dataContainer:"body"},allow_callbacks:{label:"Allow Callbacks",type:"checkbox",addRequired:!1,editRequird:!1,trueValue:"true",falseValue:"false",ngChange:"toggleCallback('host_config_key')",column:2,awPopOver:'

Create a callback URL a host can use to contact Tower and request a configuration update using the job template. The URL will look like the following:

\n

http://your.server.com:999/api/v1/job_templates/1/callback/

The request from the host must be a POST. Here is an example using curl:

\n

curl --data "host_config_key=5a8ec154832b780b9bdef1061764ae5a" http://your.server.com:999/api/v1/job_templates/1/callback/

\n

Note the requesting host must be defined in your inventory. If ansible fails to locate the host either by name or IP address in one of your defined inventories, the request will be denied.

Successful requests will result in an entry on the Jobs tab, where the results and history can be viewed.

',dataPlacement:"right",dataTitle:"Callback URL",dataContainer:"body"},callback_url:{label:"Callback URL",type:"text",addRequired:!1,editRequired:!1,readonly:!0,column:2,required:!1,"class":"span12",awPopOver:'

Using this URL a host can contact Tower and request a configuration update using the job template. The request from the host must be a POST. Here is an example using curl:

\n

curl --data "host_config_key=5a8ec154832b780b9bdef1061764ae5a" http://your.server.com:999/api/v1/job_templates/1/callback/

\n

Note the requesting host must be defined in your inventory. If ansible fails to locate the host either by name or IP address in one of your defined inventories, the request will be denied.

Successful requests will result in an entry on the Jobs tab, where the results and history can be viewed.

',dataPlacement:"right",dataTitle:"Callback URL",dataContainer:"body"},host_config_key:{label:"Host Config Key",type:"text",ngShow:"allow_callbacks",genMD5:!0,column:2,awPopOver:'

When contacting the Tower server using the callback URL, the calling host must authenticate by including this key in the POST data of the request. Here\'s an example using curl:

\n

curl --data "host_config_key=5a8ec154832b780b9bdef1061764ae5a" http://your.server.com:999/api/v1/job_templates/1/callback/

\n',dataPlacement:"right",dataContainer:"body"}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{jobs:{type:"collection",title:"Jobs",iterator:"job",index:!1,open:!1,actions:{reset:{dataPlacement:"top",icon:"icon-undo",mode:"all","class":"btn-xs btn-primary",awToolTip:"Reset the search filter",ngClick:"resetSearch('job')",iconSize:"large"}},fields:{id:{label:"Job ID",key:!0,desc:!0,searchType:"int"},created:{label:"Date",link:!1,searchable:!1},status:{label:"Status","class":"job-{{ job.status }}",searchType:"select",linkTo:"{{}} job.statusLinkTo }}",searchOptions:[{name:"new",value:"new"},{name:"waiting",value:"waiting"},{name:"pending",value:"pending"},{name:"running",value:"running"},{name:"successful",value:"successful"},{name:"error",value:"error"},{name:"failed",value:"failed"},{name:"canceled",value:"canceled"}],badgeIcon:"fa icon-job-{{ job.status }}",badgePlacement:"left",badgeToolTip:"{{ job.statusBadgeToolTip }}",badgeTipPlacement:"top",badgeNgHref:"{{ job.statusLinkTo }}",awToolTip:"{{ job.statusBadgeToolTip }}",dataPlacement:"top"}},fieldActions:{edit:{label:"View",ngClick:"edit('jobs', job.id, job.name)",icon:"icon-zoom-in"}}}}}),angular.module("JobFormDefinition",[]).value("JobForm",{addTitle:"Create Job",editTitle:"{{ id }} - {{ name }}",name:"jobs",well:!0,collapse:!0,collapseMode:"edit",collapseTitle:"Job Template",twoColumns:!0,navigationLinks:{details:{href:"/#/jobs/{{ job_id }}",label:"Status",icon:"icon-zoom-in",active:!0,ngShow:"job_id !== null"},events:{href:"/#/jobs/{{ job_id }}/job_events",label:"Events",icon:"icon-list-ul"},hosts:{href:"/#/jobs/{{ job_id }}/job_host_summaries",label:"Host Summary",icon:"icon-laptop"}},fields:{name:{label:"Job Template",type:"text",addRequired:!1,editRequired:!1,readonly:!0,column:1},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1,column:1},job_type:{label:"Job Type",type:"select",ngOptions:"type.label for type in job_type_options","default":"run",addRequired:!0,editRequired:!0,awPopOver:"

When this template is submitted as a job, setting the type to run will execute the playbook, running tasks on the selected hosts.

Setting the type to check will not execute the playbook. Instead, ansible will check playbook syntax, test environment setup and report problems.

",dataTitle:"Job Type",dataPlacement:"right",dataContainer:"body",column:1},inventory:{label:"Inventory",type:"lookup",sourceModel:"inventory",sourceField:"name",addRequired:!0,editRequired:!0,ngClick:"lookUpInventory()",column:1,awPopOver:"

Select the inventory containing the hosts you want this job to manage.

",dataTitle:"Inventory",dataPlacement:"right",dataContainer:"body"},project:{label:"Project",type:"lookup",sourceModel:"project",sourceField:"name",addRequired:!0,editRequired:!0,ngClick:"lookUpProject()",column:1,awPopOver:"

Select the project containing the playbook you want this job to execute.

",dataTitle:"Project",dataPlacement:"right",dataContainer:"body"},playbook:{label:"Playbook",type:"select",ngOptions:"book for book in playbook_options",id:"playbook-select",addRequired:!0,editRequired:!0,column:1,awPopOver:"

Select the playbook to be executed by this job.

",dataTitle:"Playbook",dataPlacement:"right",dataContainer:"body"},credential:{label:"Credential",type:"lookup",sourceModel:"credential",sourceField:"name",ngClick:"lookUpCredential()",addRequired:!1,editRequired:!1,column:1,awPopOver:"

Select the credential you want the job to use when accessing the remote hosts. Choose the credential containing the username and SSH key or password that Ansbile will need to log into the remote hosts.

",dataTitle:"Credential",dataPlacement:"right",dataContainer:"body"},cloud_credential:{label:"Cloud Credential",type:"lookup",sourceModel:"cloud_credential",sourceField:"name",ngClick:"lookUpCredential()",addRequired:!1,editRequired:!1,column:1,awPopOver:"

Selecting an optional cloud credential in the job template will pass along the access credentials to the running playbook, allowing provisioning into the cloud without manually passing parameters to the included modules.

",dataTitle:"Cloud Credential",dataPlacement:"right",dataContainer:"body"},forks:{label:"Forks",id:"forks-number",type:"number",integer:!0,min:0,spinner:!0,"class":"input-small","default":"0",addRequired:!1,editRequired:!1,column:1,disabled:!0,awPopOver:"

The number of parallel or simultaneous processes to use while executing the playbook.

",dataContainer:"body",dataTitle:"Forks",dataPlacement:"right"},limit:{label:"Limit",type:"text",addRequired:!1,editRequired:!1,column:1,awPopOver:'

Provide a host pattern to further constrain the list of hosts that will be managed or affected by the playbook. Multiple patterns can be separated by ; : or ,

For more information and examples see the Selecting Targets section under Inventory and Patterns in the Ansible documentation.

',dataContainer:"body",dataTitle:"Limit",dataPlacement:"right"},verbosity:{label:"Verbosity",type:"select",ngOptions:"v.label for v in verbosity_options","default":0,addRequired:!0,editRequired:!0,column:1,awPopOver:"

Control the level of output ansible will produce as the playbook executes.

",dataTitle:"Verbosity",dataPlacement:"right",dataContainer:"body"},variables:{label:"Extra Variables",type:"textarea",rows:6,"class":"span12",addRequired:!1,editRequired:!1,column:2,awPopOver:'

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.

JSON:
\n
{
"somevar": "somevalue",
"password": "magic"
}
\nYAML:
\n
---
somevar: somevalue
password: magic
\n',dataTitle:"Extra Variables",dataContainer:"body",dataPlacement:"right"},job_tags:{label:"Job Tags",type:"textarea",rows:1,addRequired:!1,editRequired:!1,"class":"span12",column:2,awPopOver:"

Provide a comma separated list of tags.

\n

Tags are useful when you have a large playbook, and you want to run a specific part of a play or task.

For example, you might have a task consisiting of a long list of actions. Tag values can be assigned to each action. Suppose the actions have been assigned tag values of "configuration", "packages" and "install".

If you just want to run the "configuration" and "packages" actions, you would enter the following here in the Job Tags field:

\n
configuration,packages
\n",dataTitle:"Job Tags",dataContainer:"body",dataPlacement:"right"},allow_callbacks:{label:"Allow Callbacks",type:"checkbox",addRequired:!1,editRequird:!1,trueValue:"true",falseValue:"false",ngChange:"toggleCallback('host_config_key')","class":"span12",column:2,awPopOver:'

Create a callback URL a host can use to contact Tower and request a configuration update using the job template. The URL will look like the following:

\n

http://your.server.com:999/api/v1/job_templates/1/callback/

The request from the host must be a POST. Here is an example using curl:

\n

curl --data "host_config_key=5a8ec154832b780b9bdef1061764ae5a" http://your.server.com:999/api/v1/job_templates/1/callback/

\n

Note the requesting host must be defined in your inventory. If ansible fails to locate the host either by name or IP address in one of your defined inventories, the request will be denied.

Successful requests will result in an entry on the Jobs tab, where the results and history can be viewed.

',dataPlacement:"right",dataContainer:"body",dataTitle:"Callback URL"},callback_url:{label:"Callback URL",type:"text",addRequired:!1,editRequired:!1,readonly:!0,column:2,required:!1,"class":"span12",awPopOver:'

Using this URL a host can contact Tower and request a configuration update using the job template. The request from the host must be a POST. Here is an example using curl:

\n

curl --data "host_config_key=5a8ec154832b780b9bdef1061764ae5a" http://your.server.com:999/api/v1/job_templates/1/callback/

\n

Note the requesting host must be defined in your inventory. If ansible fails to locate the host either by name or IP address in one of your defined inventories, the request will be denied.

Successful requests will result in an entry on the Jobs tab, where the results and history can be viewed.

',dataPlacement:"right",dataContainer:"body",dataTitle:"Callback URL"},host_config_key:{label:"Host Config Key",type:"text",ngShow:"allow_callbacks",genMD5:!0,column:2,awPopOver:'

When contacting Tower using the callback URL, the calling host must authenticate by including this key in the POST data of the request. Here\'s an example using curl:

\n

curl --data "host_config_key=5a8ec154832b780b9bdef1061764ae5a" http://your.server.com:999/api/v1/job_templates/1/callback/

\n',dataPlacement:"right",dataContainer:"body"}},buttons:{save:{label:"Save",icon:"icon-ok","class":"btn-success",ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",label:"Reset",icon:"icon-undo","class":"btn btn-default",ngDisabled:!0}},statusFields:{status:{type:"custom",control:'
Status {{ status }}
',readonly:!0},created:{label:"Created On",type:"text",readonly:!0},result_stdout:{label:"Standard Out",type:"textarea",readonly:!0,xtraWide:!0,rows:"{{ stdout_rows }}","class":"nowrap mono-space",ngShow:"result_stdout != ''"},result_traceback:{label:"Traceback",type:"textarea",xtraWide:!0,readonly:!0,rows:"{{ traceback_rows }}","class":"nowrap mono-space",ngShow:"result_traceback != ''"}},statusActions:{refresh:{dataPlacement:"top",icon:"icon-refresh",iconSize:"large",mode:"all","class":"btn-xs btn-primary",awToolTip:"Refresh the page",ngClick:"refresh()"}}}),angular.module("LicenseFormDefinition",[]).value("LicenseForm",{name:"license",well:!1,forceListeners:!0,fields:{license_status:{type:"custom",control:'
{{ license_status }}
',readonly:!0,section:"License"},license_key:{label:"Key",type:"textarea","class":"modal-input-xlarge",readonly:!0,section:"License"},license_date:{label:"Expires On",type:"text",readonly:!0,section:"License"},time_remaining:{label:"Time Left",type:"text",readonly:!0,section:"License"},available_instances:{label:"Available",type:"text",readonly:!0,section:"Managed Hosts"},current_instances:{label:"Used",type:"text",readonly:!0,section:"Managed Hosts"},free_instances:{label:"Remaining",type:"text",readonly:!0,section:"Managed Hosts",controlNGClass:"free_instances_class",labelNGClass:"free_instances_class"},company_name:{label:"Company",type:"text",readonly:!0,section:"Contact Info"},contact_name:{label:"Contact",type:"text",readonly:!0,section:"Contact Info"},contact_email:{label:"Contact Email",type:"text",readonly:!0,section:"Contact Info"}}}),angular.module("OrganizationFormDefinition",[]).value("OrganizationForm",{addTitle:"Create Organization",editTitle:"{{ name }}",name:"organization",well:!0,actions:{stream:{"class":"btn-primary btn-xs activity-btn",ngClick:"showActivity()",awToolTip:"View Activity Stream",dataPlacement:"top",icon:"icon-comments-alt",mode:"edit",iconSize:"large"}},fields:{name:{label:"Name",type:"text",addRequired:!0,editRequired:!0,capitalize:!1},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{users:{type:"collection",title:"Users",iterator:"user",open:!1,actions:{add:{ngClick:"add('users')",label:"Add",icon:"icon-plus",awToolTip:"Add a new user"}},fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('users', user.id, user.username)",icon:"icon-edit","class":"btn-default",awToolTip:"Edit user"},"delete":{label:"Delete",ngClick:"delete('users', user.id, user.username, 'users')",icon:"icon-trash","class":"btn-danger",awToolTip:"Remove user"}}},admins:{type:"collection",title:"Administrators",iterator:"admin",open:!1,base:"/users",actions:{add:{ngClick:"add('admins')",icon:"icon-plus",label:"Add",awToolTip:"Add new administrator"}},fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('users', admin.id, admin.username)",icon:"icon-edit",awToolTip:"Edit administrator","class":"btn-default"},"delete":{label:"Delete",ngClick:"delete('admins', admin.id, admin.username, 'administrators')",icon:"icon-trash","class":"btn-danger",awToolTip:"Remove administrator"}}}}}),angular.module("PermissionFormDefinition",[]).value("PermissionsForm",{addTitle:"Add Permission",editTitle:"{{ name }}",name:"permission",well:!0,forceListeners:!0,stream:{"class":"btn-primary btn-xs activity-btn",ngClick:"showActivity()",awToolTip:"View Activity Stream",dataPlacement:"top",icon:"icon-comments-alt",mode:"edit",iconSize:"large"},fields:{category:{label:"Permission Type",labelClass:"prepend-asterisk",type:"radio_group",options:[{label:"Inventory",value:"Inventory",selected:!0},{label:"Deployment",value:"Deploy"}],ngChange:"selectCategory()"},name:{label:"Name",type:"text",addRequired:!0,editRequired:!0,capitalize:!1},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1},user:{label:"User",type:"hidden"},team:{label:"Team",type:"hidden"},project:{label:"Project",type:"lookup",sourceModel:"project",sourceField:"name",ngShow:"category == 'Deploy'",ngClick:"lookUpProject()",awRequiredWhen:{variable:"projectrequired",init:"false"}},inventory:{label:"Inventory",type:"lookup",sourceModel:"inventory",sourceField:"name",ngClick:"lookUpInventory()",awRequiredWhen:{variable:"inventoryrequired",init:"true"}},permission_type:{label:"Permission",labelClass:"prepend-asterisk",type:"radio_group",options:[{label:"Read",value:"read",ngShow:"category == 'Inventory'"},{label:"Write",value:"write",ngShow:"category == 'Inventory'"},{label:"Admin",value:"admin",ngShow:"category == 'Inventory'"},{label:"Run",value:"run",ngShow:"category == 'Deploy'"},{label:"Check",value:"check",ngShow:"category == 'Deploy'"}],helpCollapse:[{hdr:"Permission",ngBind:"permissionTypeHelp"}]}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{}}),angular.module("ProjectStatusDefinition",[]).value("ProjectStatusForm",{name:"project_update",editTitle:"SCM Status",well:!1,"class":"horizontal-narrow",fields:{created:{label:"Created",type:"text",readonly:!0},status:{label:"Status",type:"text",readonly:!0},result_stdout:{label:"Std Out",type:"textarea",ngShow:"result_stdout","class":"mono-space",readonly:!0,rows:15},result_traceback:{label:"Traceback",type:"textarea",ngShow:"result_traceback","class":"mono-space",readonly:!0,rows:15}}}),angular.module("ProjectFormDefinition",[]).value("ProjectsForm",{addTitle:"Create Project",editTitle:"{{ name }}",name:"project",well:!0,forceListeners:!0,actions:{stream:{"class":"btn-primary btn-xs activity-btn",ngClick:"showActivity()",awToolTip:"View Activity Stream",dataPlacement:"top",icon:"icon-comments-alt",mode:"edit",iconSize:"large"}},fields:{name:{label:"Name",type:"text",addRequired:!0,editRequired:!0,capitalize:!1},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1},organization:{label:"Organization",type:"lookup",sourceModel:"organization",sourceField:"name",addRequired:!0,editRequired:!1,excludeMode:"edit",ngClick:"lookUpOrganization()",awRequiredWhen:{variable:"organizationrequired",init:"true"},awPopOver:"

A project must have at least one organization. Pick one organization now to create the project, and then after the project is created you can add additional organizations.

Only super users and organization administrators are allowed to make changes to projects. Associating one or more organizations to a project determins which organizations admins have access to modify the project.",dataTitle:"Organization",dataContainer:"body",dataPlacement:"right"},scm_type:{label:"SCM Type",type:"select",ngOptions:"type.label for type in scm_type_options",ngChange:"scmChange()",addRequired:!0,editRequired:!0},missing_path_alert:{type:"alertblock","class":"alert-info",ngShow:"showMissingPlaybooksAlert && scm_type.value == ''",alertTxt:'

WARNING: There are no unassigned playbook directories in the base project path {{ base_dir }}. Either the projects directory is empty, or all of the contents are already assigned to other projects. New projects can be checked out from source control by changing the SCM type option rather than specifying checkout paths manually. To continue with manual setup, log into the Tower host and ensure content is present in a subdirectory under {{ base_dir }}. Run "chown -R awx" on the content directory to ensure Tower can read the playbooks.

',closeable:!1},base_dir:{label:"Project Base Path",type:"textarea",showonly:!0,ngShow:"scm_type.value == ''",awPopOver:"

Base path used for locating playbooks. Directories found inside this path will be listed in the playbook directory drop-down. Together the base path and selected playbook directory provide the full path used to locate playbooks.

Use PROJECTS_ROOT in your environment settings file to determine the base path value.

",dataTitle:"Project Base Path",dataContainer:"body",dataPlacement:"right"},local_path:{label:"Playbook Directory",type:"select",id:"local-path-select",ngOptions:"path.label for path in project_local_paths",awRequiredWhen:{variable:"pathRequired",init:!1},ngShow:"scm_type.value == '' && !showMissingPlaybooksAlert",awPopOver:"

Select from the list of directories found in the base path.Together the base path and the playbook directory provide the full path used to locate playbooks.

Use PROJECTS_ROOT in your environment settings file to determine the base path value.

",dataTitle:"Project Path",dataContainer:"body",dataPlacement:"right"},scm_url:{label:"SCM URL",type:"text",ngShow:"scm_type && scm_type.value !== ''",awRequiredWhen:{variable:"scmRequired",init:!1},helpCollapse:[{hdr:"GIT URLs",content:'

Example URLs for GIT SCM include:

  • https://github.com/ansible/ansible.git
  • git@github.com:ansible/ansible.git
  • git://servername.example.com/ansible.git

Note: If using SSH protocol for GitHub or Bitbucket, enter in the SSH key only, do not enter a username (other than git). Additionally, GitHub and Bitbucket do not support password authentication when using SSH protocol. GIT read only protocol (git://) does not use username or password information.',show:"scm_type.value == 'git'"},{hdr:"SVN URLs",content:'

Example URLs for Subversion SCM include:

  • https://github.com/ansible/ansible
  • svn://servername.example.com/path
  • svn+ssh://servername.example.com/path
',show:"scm_type.value == 'svn'"},{hdr:"Mercurial URLs",content:'

Example URLs for Mercurial SCM include:

  • https://bitbucket.org/username/project
  • ssh://hg@bitbucket.org/username/project
  • ssh://server.example.com/path

Note: Mercurial does not support password authentication for SSH. If applicable, add the username, password and key below. Do not put the username and key in the URL. If using Bitbucket and SSH, do not supply your Bitbucket username.',show:"scm_type.value == 'hg'"}]},scm_branch:{labelBind:"scmBranchLabel",type:"text",ngShow:"scm_type && scm_type.value !== ''",addRequired:!1,editRequired:!1},credential:{label:"SCM Credential",type:"lookup",ngShow:"scm_type && scm_type.value !== ''",sourceModel:"credential",sourceField:"name",ngClick:"lookUpCredential()",addRequired:!1,editRequired:!1},checkbox_group:{label:"SCM Update Options",type:"checkbox_group",ngShow:"scm_type && scm_type.value !== ''",fields:[{name:"scm_clean",label:"Clean",type:"checkbox",addRequired:!1,editRequired:!1,awPopOver:"

Remove any local modifications prior to performing an update.

",dataTitle:"SCM Clean",dataContainer:"body",dataPlacement:"right",labelClass:"checkbox-options"},{name:"scm_delete_on_update",label:"Delete on Update",type:"checkbox",addRequired:!1,editRequired:!1,awPopOver:"

Delete the local repository in its entirety prior to performing an update.

Depending on the size of the repository this may significantly increase the amount of time required to complete an update.

",dataTitle:"SCM Delete",dataContainer:"body",dataPlacement:"right",labelClass:"checkbox-options"},{name:"scm_update_on_launch",label:"Update on Launch",type:"checkbox",addRequired:!1,editRequired:!1,awPopOver:"

Each time a job runs using this project, perform an update to the local repository prior to starting the job.

",dataTitle:"SCM Update",dataContainer:"body",dataPlacement:"right",labelClass:"checkbox-options"}]}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{organizations:{type:"collection",title:"Organizations",iterator:"organization",open:!1,actions:{add:{ngClick:"add('organizations')",icon:"icon-plus",label:"Add",awToolTip:"Add an organization"}},fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('organizations', organization.id, organization.name)",icon:"icon-edit",awToolTip:"Edit the organization","class":"btn btn-default"},"delete":{label:"Delete",ngClick:"delete('organizations', organization.id, organization.name, 'organizations')",icon:"icon-trash","class":"btn-danger",awToolTip:"Delete the organization"}}}}}),angular.module("TeamFormDefinition",[]).value("TeamForm",{addTitle:"Create Team",editTitle:"{{ name }}",name:"team",well:!0,collapse:!0,collapseTitle:"Team Settings",collapseMode:"edit",collapseOpen:!0,actions:{stream:{"class":"btn-primary btn-xs activity-btn",ngClick:"showActivity()",awToolTip:"View Activity Stream",dataPlacement:"top",icon:"icon-comments-alt",mode:"edit",iconSize:"large"}},fields:{name:{label:"Name",type:"text",addRequired:!0,editRequired:!0,capitalize:!1},description:{label:"Description",type:"text",addRequired:!1,editRequired:!1},organization:{label:"Organization",type:"lookup",sourceModel:"organization",sourceField:"name",ngClick:"lookUpOrganization()",awRequiredWhen:{variable:"teamrequired",init:"true"}}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{credentials:{type:"collection",title:"Credentials",iterator:"credential",open:!1,actions:{add:{ngClick:"add('credentials')",icon:"icon-plus",label:"Add",add:"Add a new credential"}},fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('credentials', credential.id, credential.name)",icon:"icon-edit",awToolTip:"Modify the credential","class":"btn btn-default"},"delete":{label:"Delete",ngClick:"delete('credentials', credential.id, credential.name, 'credentials')",icon:"icon-trash","class":"btn-danger",awToolTip:"Remove the credential"}}},permissions:{type:"collection",title:"Permissions",iterator:"permission",open:!1,actions:{add:{ngClick:"add('permissions')",icon:"icon-plus",label:"Add",awToolTip:"Add a permission for this user",ngShow:"PermissionAddAllowed"}},fields:{name:{key:!0,label:"Name",ngClick:"edit('permissions', permission.id, permission.name)"},inventory:{label:"Inventory",sourceModel:"inventory",sourceField:"name",ngBind:"permission.summary_fields.inventory.name"},project:{label:"Project",sourceModel:"project",sourceField:"name",ngBind:"permission.summary_fields.project.name"},permission_type:{label:"Permission"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('permissions', permission.id, permission.name)",icon:"icon-edit",awToolTip:"Edit the permission","class":"btn btn-default"},"delete":{label:"Delete",ngClick:"delete('permissions', permission.id, permission.name, 'permissions')",icon:"icon-trash","class":"btn-danger",awToolTip:"Delete the permission",ngShow:"PermissionAddAllowed"}}},projects:{type:"collection",title:"Projects",iterator:"project",open:!1,actions:{add:{ngClick:"add('projects')",icon:"icon-plus",label:"Add"}},fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('projects', project.id, project.name)",icon:"icon-edit",awToolTip:"Modify the project","class":"btn btn-default"},"delete":{label:"Delete",ngClick:"delete('projects', project.id, project.name, 'projects')",icon:"icon-trash","class":"btn-danger",awToolTip:"Remove the project"}}},users:{type:"collection",title:"Users",iterator:"user",open:!1,actions:{add:{ngClick:"add('users')",icon:"icon-plus",label:"Add",awToolTip:"Add a user"}},fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('users', user.id, user.username)",icon:"icon-edit",awToolTip:"Edit user","class":"btn btn-default"},"delete":{label:"Delete",ngClick:"delete('users', user.id, user.username, 'users')",icon:"icon-terash","class":"btn-danger",awToolTip:"Remove user"}}}}}),angular.module("UserFormDefinition",[]).value("UserForm",{addTitle:"Create User",editTitle:"{{ username }}",name:"user",well:!0,forceListeners:!0,actions:{stream:{"class":"btn-primary btn-xs activity-btn",ngClick:"showActivity()",awToolTip:"View Activity Stream",dataPlacement:"top",icon:"icon-comments-alt",mode:"edit",iconSize:"large"}},fields:{first_name:{label:"First Name",type:"text",addRequired:!0,editRequired:!0,capitalize:!0},last_name:{label:"Last Name",type:"text",addRequired:!0,editRequired:!0,capitalize:!0},email:{label:"Email",type:"email",addRequired:!0,editRequired:!0,autocomplete:!1},organization:{label:"Organization",type:"lookup",sourceModel:"organization",sourceField:"name",ngClick:"lookUpOrganization()",excludeMode:"edit",awRequiredWhen:{variable:"orgrequired",init:!0}},username:{label:"Username",type:"text",awRequiredWhen:{variable:"not_ldap_user",init:!0},autocomplete:!1},password:{label:"Password",type:"password",ngShow:"ldap_user == false",addRequired:!0,editRequired:!1,ngChange:"clearPWConfirm('password_confirm')",autocomplete:!1,chkPass:!0},password_confirm:{label:"Confirm Password",type:"password",ngShow:"ldap_user == false",addRequired:!1,editRequired:!1,awPassMatch:!0,associated:"password",autocomplete:!1},is_superuser:{label:"Superuser (User has full system administration privileges.)",type:"checkbox",trueValue:"true",falseValue:"false","default":"false",ngShow:"current_user['is_superuser'] == true"},ldap_user:{label:"Created by LDAP",type:"checkbox",readonly:!0}},buttons:{save:{ngClick:"formSave()",ngDisabled:!0},reset:{ngClick:"formReset()",ngDisabled:!0}},related:{credentials:{type:"collection",title:"Credentials",iterator:"credential",open:!1,actions:{add:{ngClick:"add('credentials')",icon:"icon-plus",label:"Add",awToolTip:"Add a credential for this user"}},fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('credentials', credential.id, credential.name)",icon:"icon-edit",awToolTip:"Edit the credential","class":"btn btn-default"},"delete":{label:"Delete",ngClick:"delete('credentials', credential.id, credential.name, 'credentials')",icon:"icon-trash","class":"btn-danger",awToolTip:"Delete the credential"}}},permissions:{type:"collection",title:"Permissions",iterator:"permission",open:!1,actions:{add:{ngClick:"add('permissions')",icon:"icon-plus",label:"Add",awToolTip:"Add a permission for this user",ngShow:"PermissionAddAllowed"}},fields:{name:{key:!0,label:"Name",ngClick:"edit('permissions', permission.id, permission.name)"},inventory:{label:"Inventory",sourceModel:"inventory",sourceField:"name",ngBind:"permission.summary_fields.inventory.name"},project:{label:"Project",sourceModel:"project",sourceField:"name",ngBind:"permission.summary_fields.project.name"},permission_type:{label:"Permission"}},fieldActions:{edit:{label:"Edit",ngClick:"edit('permissions', permission.id, permission.name)",icon:"icon-edit",awToolTip:"Edit the permission","class":"btn btn-default"},"delete":{label:"Delete",ngClick:"delete('permissions', permission.id, permission.name, 'permissions')",icon:"icon-trash","class":"btn-danger",awToolTip:"Delete the permission",ngShow:"PermissionAddAllowed"}}},admin_of_organizations:{type:"collection",title:"Admin of Organizations",iterator:"adminof",open:!1,base:"/organizations",actions:{},fields:{name:{key:!0,label:"Name"},description:{label:"Description"}}},organizations:{type:"collection",title:"Organizations",iterator:"organization",open:!1,actions:{},fields:{name:{key:!0,label:"Name"},description:{label:"Description"}}},teams:{type:"collection",title:"Teams",iterator:"team",open:!1,actions:{},fields:{name:{key:!0,label:"Name"},description:{label:"Description"}}},projects:{type:"collection",title:"Projects",iterator:"project",open:!1,actions:{},fields:{name:{key:!0,label:"Name"},description:{label:"Description"}}}}}),angular.module("InventoryGroupsHelpDefinition",[]).value("InventoryGroupsHelp",{story:{hdr:"Building your inventory",width:510,height:560,steps:[{intro:"Start by creating a group:",img:{src:"groups001.png",maxWidth:338,maxHeight:222},box:'Click on the groups list (the left side of the page) to add a new group.',autoOffNotice:!0},{intro:"Enter group properties:",img:{src:"groups002.png",maxWidth:443,maxHeight:251},box:'Enter the group name, a description and any inventory variables. Variables can be entered using either JSON or YAML syntax. For more on inventory variables, see docs.ansible.com/intro_inventory.html'},{intro:"Cloud inventory: select cloud source",img:{src:"groups003.png",maxWidth:412,maxHeight:215},box:'For a cloud inventory, choose the cloud provider from the list and select your credentials. If you have not already setup credentials for the provider, you will need to do that first on the Credentials tab.'},{intro:"Cloud inventory: synchronize Tower with the cloud",img:{src:"groups004.png",maxWidth:261,maxHeight:221},box:'To pull the cloud inventory into Tower, initiate an inventory sync by clicking .'},{intro:"Groups can have subgroups:",img:{src:"groups005.png",maxWidth:430,maxHeight:206},box:'
First, select a group. Then click to create a new group. The new group will be added to the selected group.
'},{intro:"Copy or move groups:",img:{src:"groups006.png",maxWidth:263,maxHeight:211},box:'
Copy or move a group by dragging and dropping its name onto another group name. A dialog will appear asking if the group should be coppied or moved.
'},{intro:"Adding hosts:",img:{src:"groups007.png",maxWidth:466,maxHeight:178},box:'

First, select a Group. Then click on the hosts list (the right side of the page) to create a host. The new host will be part of the selected group.

Note hosts cannot be added to the All Hosts group.

'}]}}),angular.module("AccessHelper",["RestServices","Utilities","ngCookies"]).factory("CheckAccess",["$rootScope","Alert","Rest","GetBasePath","ProcessErrors",function(a,b,c,d,e){return function(b){var d=a.current_user,f=b.scope; +d.is_superuser?f.PermissionAddAllowed=!0:d.related.admin_of_organizations&&(c.setUrl(d.related.admin_of_organizations),c.get().success(function(a){f.PermissionAddAllowed=a.results.length>0?!0:!1}).error(function(a,b){e(f,a,b,null,{hdr:"Error!",msg:"Call to "+d.related.admin_of_organizations+" failed. DELETE returned status: "+b})}))}}]).factory("CheckLicense",["$rootScope","$cookieStore","Alert","$location","Authorization",function(a,b,c,d,e){return function(){var d,f,g="success",h=b.get("license"),i='

To purchase a license or extend an existing license visit the Ansible online store, or visit support.ansible.com for assistance.

';h&&!e.licenseTested()&&(h.tested=!0,b.remove("license"),b.put("license",h),a.license_tested=!0,void 0!==h.valid_key&&h.valid_key===!1?(g="alert-danger",d="License Error",f="

There is a problem with the /etc/awx/license file on your Tower server. Check to make sure Tower can access the file.

"+i,c(d,f,g,null,!1,!0)):void 0!==h.demo&&h.demo===!0&&(g="alert-info",d="Tower Demo",f="

Thank you for trying Ansible Tower. You can use this edition to manage up to 10 hosts free.

"+i,c(d,f,g)),void 0!==h.date_expired&&h.date_expired===!0?(g="alert-info",d="License Expired",f="

Your Ansible Tower License has expired and is no longer compliant. You can continue, but you will be unable to add any additional hosts.

"+i,c(d,f,g)):void 0!==h.date_warning&&h.date_warning===!0&&(g="alert-info",d="License Warning",f="

Your Ansible Tower license is about to expire!

"+i,c(d,f,g)),void 0!==h.free_instances&&parseInt(h.free_instances)<=0&&(g="alert-info",d="License Warning",f="

Your Ansible Tower license has reached capacity for the number of managed hosts allowed. You will not be able to add any additional hosts.

"+i,c(d,f,g,null,!0)))}}]),angular.module("ChildrenHelper",["RestServices","Utilities"]).factory("ToggleChildren",[function(){return function(a){function b(a){var b;for(i[a].ngicon="fa fa-minus-square-o node-toggle",b=a+1;b10?10:i,i=3>i?3:i,f.fields[h].rows=i);break;case"results":if(a.event_data&&a.event_data.res&&void 0===a.event_data.res[h])delete f.fields[h];else if(Array.isArray(a.event_data.res[h])&&0!==a.event_data.res[h].length){for(j="",c=0;c10?10:i,i=3>i?3:i,f.fields[h].rows=i)}else delete f.fields[h];break;case"module_name":case"module_args":a.event_data&&a.event_data.res&&(void 0===a.event_data.res.invocation||void 0===a.event_data.res.invocation[h])&&delete f.fields[h]}b=d.inject(f,{mode:"edit",modal:!0,related:!1}),d.reset(),b.formModalAction=function(){$("#form-modal").modal("hide")},b.formModalActionLabel="OK",b.formModalCancelShow=!1,b.formModalInfo="View JSON",$("#form-modal .btn-success").removeClass("btn-success").addClass("btn-none"),$("#form-modal").addClass("skinny-modal"),b.formModalHeader=a.event_display.replace(/^\u00a0*/g,""),b.formModalInfoAction=function(){var b=g,c=b.inject(l,{mode:"edit",modal:!0,related:!1,modal_selector:"#form-modal2",modal_body_id:"form-modal2-body",modal_title_id:"formModal2Header"});b.reset(),c.formModal2Header=a.event_display.replace(/^\u00a0*/g,""),c.event_data=JSON.stringify(a.event_data,null," "),c.formModal2ActionLabel="OK",c.formModal2CancelShow=!1,c.formModal2Info=!1,c.formModalInfo="View JSON",c.formModal2Action=function(){$("#form-modal2").modal("hide")},$("#form-modal2 .btn-success").removeClass("btn-success").addClass("btn-none")},"string"==typeof a.event_data.res&&(b.traceback=a.event_data.res);for(h in f.fields)switch(h){case"status":b.status=a.failed?"error":a.changed?"changed":"success";break;case"created":n=new Date(a.created),b.created=k(n);break;case"host":a.summary_fields&&a.summary_fields.host&&(b.host=a.summary_fields.host.name);break;case"id":case"task":case"play":b[h]=a[h];break;case"start":case"end":a.event_data&&a.event_data.res&&!m(a.event_data.res[h])&&(b[h]=a.event_data.res[h]);break;case"results":if(Array.isArray(a.event_data.res[h])&&a.event_data.res[h].length>0){for(j="",c=0;c button.',"alert-info"):(f("start"),a.setUrl(l.related.inventory_source),a.get().success(function(a){var b=a.related.current_update?a.related.current_update:a.related.last_update;d({group_name:a.summary_fields.group.name,last_update:b,license_error:a.summary_fields.last_update&&a.summary_fields.last_update.license_error?!0:!1,tree_id:j,group_id:k,parent_scope:i})}).error(function(a,c){f("stop"),b(i,a,c,null,{hdr:"Error!",msg:"Failed to retrieve inventory source: "+l.related.inventory_source+" POST returned status: "+c})})))}}]).factory("GetHostsStatusMsg",[function(){return function(a){var b,c,d,e=a.active_failures,f=a.total_hosts;return e>0?(b=f+(1===f?" host":" hosts")+". "+e+" with failed jobs.",d="true",c=!0):(c=!1,0===f?(b="Group contains 0 hosts.",d="na"):(b=f+(1===f?" host":" hosts")+". No job failures",d="false")),{tooltip:b,failures:c,"class":d}}}]).factory("GetSyncStatusMsg",[function(){return function(a){var b,c,d,e=a.status,f="",g="Start sync process";switch(b=e,c="icon-cloud-"+b,e){case"never updated":b="never",c="icon-cloud-na disabled",d='Sync not performed. Click to start it now.';break;case"none":case"":f="btn-disabled",b="n/a",c="icon-cloud-na disabled",d='Cloud source not configured. Click to update.',g=d;break;case"failed":d="Sync failed. Click to view log.";break;case"successful":d="Sync completed. Click to view log.";break;case"updating":d="Sync running"}return{"class":c,tooltip:d,status:b,launch_class:f,launch_tip:g}}}]).factory("SourceChange",["GetBasePath","CredentialList","LookUpInit","Empty",function(a,b,c,d){return function(e){var f,g,h=e.scope,i=e.form;d(h.source)||("file"===h.source.value?h.sourcePathRequired=!0:(h.sourcePathRequired=!1,h.source_path="",h[i.name+"_form"].source_path.$setValidity("required",!0)),"rax"===h.source.value?(h.source_region_choices=h.rax_regions,$("#s2id_group_source_regions").select2("data",[{id:"all",text:"All"}])):"ec2"===h.source.value&&(h.source_region_choices=h.ec2_regions,$("#s2id_group_source_regions").select2("data",[{id:"all",text:"All"}])),("rax"===h.source.value||"ec2"===h.source.value)&&(f="rax"===h.source.value?"rax":"aws",g=a("credentials")+"?cloud=true&kind="+f,c({url:g,scope:h,form:i,list:b,field:"credential"})))}}]).factory("GroupsCancelUpdate",["Rest","ProcessErrors","Alert","Wait","Find",function(a,b,c,d,e){return function(f){var g,h=f.scope,i=f.tree_id;h.removeCancelUpdate&&h.removeCancelUpdate(),h.removeCancelUpdate=h.$on("CancelUpdate",function(e,f){a.setUrl(f),a.post().success(function(){d("stop"),c("Inventory Sync Cancelled",'Your request to cancel the sync process was submitted to the task manger. Click the button to monitor the status.',"alert-info")}).error(function(a,c){d("stop"),b(h,a,c,null,{hdr:"Error!",msg:"Call to "+f+" failed. POST status: "+c})})}),h.removeCheckCancel&&h.removeCheckCancel(),h.removeCheckCancel=h.$on("CheckCancel",function(e,f,g){var i=g?g:f;i+="cancel/",a.setUrl(i),a.get().success(function(a){a.can_cancel?h.$emit("CancelUpdate",i):(d("stop"),c("Cancel Inventory Sync",'Either you do not have access or the sync process completed.
Click the button to view the latest status.',"alert-info"))}).error(function(a,c){d("stop"),b(h,a,c,null,{hdr:"Error!",msg:"Call to "+i+" failed. GET status: "+c})})}),g=e({list:h.groups,key:"id",val:i}),h.selected_tree_id=g.id,h.selected_group_id=g.group_id,!g||"updating"!==g.status&&"pending"!==g.status?c("Cancel Inventory Sync",'The sync process completed. Click the to view the latest status.',"alert-info"):(d("start"),a.setUrl(g.related.inventory_source),a.get().success(function(a){h.$emit("CheckCancel",a.related.last_update,a.related.current_update)}).error(function(a,c){d("stop"),b(h,a,c,null,{hdr:"Error!",msg:"Call to "+g.related.inventory_source+" failed. GET status: "+c})}))}}]).factory("GroupsAdd",["$rootScope","$location","$log","$routeParams","Rest","Alert","GroupForm","GenerateForm","Prompt","ProcessErrors","GetBasePath","ParseTypeChange","GroupsEdit","Wait","GetChoices","GetSourceTypeOptions","LookUpInit","BuildTree","SourceChange","WatchInventoryWindowResize",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){return function(b){var c,d=b.inventory_id,i=void 0!==b.group_id?b.group_id:null,m=b.scope,q=null!==i?k("groups")+i+"/children/":k("inventory")+d+"/groups/",u=g,v=h,w=v.inject(u,{mode:"add",modal:!0,related:!1,show_modal:!1});$("#form-modal .btn-none").removeClass("btn-none").addClass("btn-success"),w.formModalActionLabel="Save",w.formModalCancelShow=!0,w.parseType="yaml",w.source=null,l(w),v.reset(),w.removeAddTreeRefreshed&&w.removeAddTreeRefreshed(),w.removeAddTreeRefreshed=w.$on("GroupTreeRefreshed",function(){a.formModalHeader=null,a.formModalCancleShow=null,a.formModalActionLabel=null,n("stop"),$("#form-modal").modal("hide"),w.removeAddTreeRefreshed()}),w.removeSaveComplete&&w.removeSaveComplete(),w.removeSaveComplete=w.$on("SaveComplete",function(a,b,c){c||(w.searchCleanup&&w.searchCleanup(),w.formModalActionDisabled=!1,r({scope:m,inventory_id:d,refresh:!0,new_group_id:b}),t())}),w.removeFormSaveSuccess&&w.removeFormSaveSuccess(),w.removeFormSaveSuccess=w.$on("formSaveSuccess",function(a,b,c){var d,g,h,i,k=!1,l={};if(null!==w.source.value&&""!==w.source.value){for(l.group=b,l.source=w.source.value,l.source_path=w.source_path,l.credential=w.credential,l.overwrite=w.overwrite,l.overwrite_vars=w.overwrite_vars,l.update_on_launch=w.update_on_launch,d=$("#s2id_group_source_regions").select2("data"),g=[],h=0;h"+A.summary_fields.group.name+". Use the Refresh button to monitor the status.","alert-info"):o({scope:A,group_id:d,url:A.group_update_url,group_name:A.name,group_source:A.source.value})},A.sourceChange=function(){v({scope:A,form:g})}}}]).factory("GroupsDelete",["$rootScope","$location","$log","$routeParams","Rest","Alert","GroupForm","GenerateForm","Prompt","ProcessErrors","GetBasePath","Wait","BuildTree","Find",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return function(a){var b,c=a.scope,d=a.tree_id,f=a.inventory_id,g=n({list:c.groups,key:"id",val:d}),h=k("inventory")+f+"/groups/";b=function(){$("#prompt-modal").on("hidden.bs.modal",function(){l("start")}),$("#prompt-modal").modal("hide"),e.setUrl(h),e.post({id:g.group_id,disassociate:1}).success(function(){$("#prompt-modal").off(),c.$emit("GroupDeleteCompleted")}).error(function(a,b){l("stop"),j(c,a,b,null,{hdr:"Error!",msg:"Call to "+h+" failed. POST returned status: "+b})})},i({hdr:"Delete Group",body:"

Are you sure you want to delete group "+g.name+"?

",action:b,"class":"btn-danger"})}}]).factory("ShowUpdateStatus",["$rootScope","$location","$log","$routeParams","Rest","Alert","GenerateForm","Prompt","ProcessErrors","GetBasePath","FormatDate","InventoryStatusForm","Wait","Empty","WatchInventoryWindowResize",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return function(a){function b(a){var b,d;return b=a.match(/\n/g),d=b?b.length:1,d>c?c:d}var c,d,h,j,n,p,q,r=a.group_name,s=a.last_update,t=g,u=l,v=a.license_error;void 0===s||null===s||""===s?(m("stop"),f("Missing Configuration","The selected group is not configured for inventory sync. Edit the group and provide Source information.","alert-info")):(d='
\n
\n',$("#inventory-modal-container").empty().append(d),h=t.inject(u,{mode:"edit",id:"form-container",breadCrumbs:!1,related:!1}),j=$(document).width(),n=$("body").height(),j>1199?(p=675,q=750>n?n-20:750,c=18):1199>=j&&j>=768?(p=550,q=620>n?n-15:620,c=12):(p=j-20,q=500>n?n:500,c=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:p,height:q,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#inventory-modal-container").empty(),o()},open:function(){m("stop")}}),e.setUrl(s),e.get().success(function(a){for(var c in u.fields)a[c]&&(h[c]="created"===c?k(new Date(a[c])):a[c]);h.license_error=v,h.status_rows=b(a.status),h.stdout_rows=b(a.result_stdout),h.traceback_rows=b(a.result_traceback),$("#status-modal-dialog").dialog("open")}).error(function(a,b){$("#form-modal").modal("hide"),i(h,a,b,null,{hdr:"Error!",msg:"Failed to retrieve last update: "+s+". GET status: "+b})}))}}]),angular.module("HostsHelper",["RestServices","Utilities","ListGenerator","HostListDefinition","SearchHelper","PaginationHelpers","ListGenerator","AuthService","HostsHelper","InventoryHelper","RelatedSearchHelper","InventoryFormDefinition","SelectionHelper","HostGroupsFormDefinition"]).factory("SetEnabledMsg",[function(){return function(a){a.enabledToolTip=a.has_inventory_sources?a.enabled?"Host is available":"Host is not available":a.enabled?"Host is available. Click to toggle.":"Host is not available. Click to toggle."}}]).factory("SetHostStatus",["SetEnabledMsg",function(a){return function(b){b.activeFailuresLink="/#/hosts/"+b.id+"/job_host_summaries/?inventory="+b.inventory+"&host_name="+encodeURI(b.name),b.has_active_failures===!0?(b.badgeToolTip="Most recent job failed. Click to view jobs.",b.active_failures="failed"):b.has_active_failures===!1&&null===b.last_job?(b.has_active_failures="none",b.badgeToolTip="No job data available.",b.active_failures="n/a"):b.has_active_failures===!1&&null!==b.last_job&&(b.badgeToolTip="Most recent job successful. Click to view jobs.",b.active_failures="success"),b.enabled_flag=b.enabled,a(b)}}]).factory("SetStatus",["SetEnabledMsg","Empty",function(a,b){return function(c){function d(a){return a.length>25?a.substr(0,25)+"...":a}function e(a){var b,c,e;if(a.has_active_failures===!0||a.has_active_failures===!1&&null!==a.last_job)if(a.has_active_failures===!0?(a.badgeToolTip="Most recent job failed. Click to view jobs.",a.active_failures="failed"):(a.badgeToolTip="Most recent job successful. Click to view jobs.",a.active_failures="success"),a.summary_fields.recent_jobs.length>0){for(e=a.summary_fields.recent_jobs.sort(function(a,b){return-1*(a-b)}),h="Recent Jobs",g='\n',g+="\n",g+="\n",g+="\n",g+="\n",g+="\n",g+="\n",b=0;b\n",g+='\n",g+='\n',g+='\n',g+='\n",g+="\n";g+="\n",g+="
ID\n",g+='Status\n',g+="ViewName\n",g+="
'+c.id+"Events Hosts'+d(c.name)+"
\n"}else h="No job data",g="

No recent job data available for this host.

";else a.has_active_failures===!1&&null===a.last_job&&(a.has_active_failures="none",a.badgeToolTip="No job data available.",a.active_failures="n/a");a.job_status_html=g,a.job_status_title=h}var f,g,h,i=c.scope,j=c.host;if(b(j))for(f=0;fAre you sure you want to delete host "+j+" from group "+n.name+"?

":"

Are you sure you want to delete host "+j+"?

",g({hdr:"Delete Host",body:c,action:b,"class":"btn-danger"})}}]).factory("EditHostGroups",["$rootScope","$location","$log","$routeParams","Rest","Alert","GenerateForm","Prompt","ProcessErrors","GetBasePath","HostsReload","ParseTypeChange","Wait",function(a,b,c,d,e,f,g,h,i,j,k,l,m){return function(a){var b,c,d,f,h,l=a.host_id,n=a.inventory_id,o=g,p=[];for(c='
\n',c+='
\n',c+="\n",c+='\n',c+="
\n",c+='
\n',c+="\n",c+='\n',c+="
\n",c+="
\n",c+='
\n',c+='
\n',c+='\n',c+='\n',c+="

(move selected groups)

\n",c+="
\n",c+="
\n",d=j("hosts")+l+"/",f=o.inject(null,{mode:"edit",modal:!0,related:!1,html:c}),b=0;bGroups',f.formModalCancelShow=!0,f.formModalActionDisabled=!0,$("#form-modal .btn-none").removeClass("btn-none").addClass("btn-success"),f.hostGroupChangeRemove&&f.hostGroupChangeRemove(),f.hostGroupChangeRemove=f.$on("hostGroupChange",function(){p.pop(),0===p.length&&(h=function(){setTimeout(function(){m("stop")},500)},k({scope:f,inventory_id:n,group_id:f.group_id,action:h}))}),f.formModalAction=function(){var a,b,c;for($("#form-modal").modal("hide"),m("start"),a=0;a0?(f.assignedGroups=null,f.leftButtonDisabled=!0,f.rightButtonDisabled=!1):f.rightButtonDisabled=!0},f.rightChange=function(){null!==f.assignedGroups&&f.assignedGroups.length>0?(f.selectedGroups=null,f.leftButtonDisabled=!1,f.rightButtonDisabled=!0):f.leftButtonDisabled=!0},f.moveLeft=function(){var a,b,c,d;for(a=0;af.available_groups[b].name.toLowerCase()&&f.assignedGroups[a].name.toLowerCase()f.host_groups[b].name.toLowerCase()&&f.selectedGroups[a].name.toLowerCase()0){for(j("stop"),u+='
\n',u+=w?w:"",o=0;o\n',u+='\n",u+='
\n',u+='A value is required!\n',u+='\n',u+="
\n",u+="\n",n=l.associated,l=p.fields[l.associated],q[n]="",u+='
\n',u+='\n",u+='
\n',u+='A value is required!\n',l.awPassMatch&&(u+='Must match Password value\n'),u+='\n',u+="
\n",u+="
\n";u+="\n",m=angular.element(document.getElementById("password-body")),m.html(u),c(m.contents())(q),$("#password-modal").modal(),$("#password-modal").on("shown.bs.modal",function(){$("#password-body").find('input[type="password"]:first').focus()})}else q.startJob()}}]).factory("SubmitJob",["PromptPasswords","$compile","Rest","$location","GetBasePath","CredentialList","LookUpInit","CredentialForm","ProcessErrors","JobTemplateForm","Wait",function(a,b,c,d,e,f,g,h,i,j,k){return function(b){function l(b){var e,f,g;m.credentialWatchRemove&&m.credentialWatchRemove(),e=(new Date).toISOString(),f=b.related.jobs?b.related.jobs:b.related.job_template+"jobs/",g=o?o:b.name,k("start"),c.setUrl(f),c.post({name:g+" "+e,description:b.description,job_template:b.id,inventory:b.inventory,project:b.project,playbook:b.playbook,credential:b.credential,forks:b.forks,limit:b.limit,verbosity:b.verbosity,extra_vars:b.extra_vars}).success(function(b){m.job_id=b.id,b.passwords_needed_to_start.length>0?a({scope:m,passwords:b.passwords_needed_to_start,start_url:b.related.start,form:h}):(c.setUrl(b.related.start),c.post().success(function(){k("stop");var a=d.path().replace(/^\//,"").split("/")[0];"jobs"===a?m.refresh():d.path("/jobs")}).error(function(a,b){i(m,a,b,null,{hdr:"Error!",msg:"Failed to start job. POST returned status: "+b})}))}).error(function(a,b){k("stop"),i(m,a,b,null,{hdr:"Error!",msg:"Failed to create job. POST returned status: "+b})})}var m=b.scope,n=b.id,o=b.template?b.template:null,p=d.path().replace(/^\//,"").split("/")[0],q=e(p)+n+"/";k("start"),c.setUrl(q),c.get().success(function(a){m.credential="",""===a.credential||null===a.credential?(k("stop"),m.credentialWatchRemove&&m.credentialWatchRemove(),m.credentialWatchRemove=m.$watch("credential",function(b,c){b!==c&&""!==m.credential&&null!==m.credential&&void 0!==m.credential&&(a.credential=m.credential,l(a))}),g({scope:m,form:j,current_item:null,list:f,field:"credential",hdr:"Credential Required"}),m.lookUpCredential()):l(a)}).error(function(a,b){i(m,a,b,null,{hdr:"Error!",msg:"Failed to get job template details. GET returned status: "+b})})}}]).factory("ProjectUpdate",["PromptPasswords","$compile","Rest","$location","GetBasePath","ProcessErrors","Alert","ProjectsForm","Wait",function(a,b,c,d,e,f,g,h,i){return function(b){var d=b.scope,j=b.project_id,k=e("projects")+j+"/update/";d.removeUpdateSubmitted&&d.removeUpdateSubmitted(),d.removeUpdateSubmitted=d.$on("UpdateSubmitted",function(){i("stop"),g("Update Started","The request to start the SCM update process was submitted. To monitor the update status, refresh the page by clicking the Refresh button.","alert-info"),d.refresh()}),d.removeSCMSubmit&&d.removeSCMSubmit(),d.removeSCMSubmit=d.$on("SCMSubmit",function(b,c,e){a({scope:d,passwords:c,start_url:k,form:h,extra_html:e})}),i("start"),c.setUrl(k),c.get().success(function(a){var b,c;if(i("stop"),a.can_update){for(c="",b=0;b\n',c+='\n',c+='
\n',c+=' button.',"alert-info"),d.removeHostReloadComplete&&d.removeHostReloadComplete()}),d.removeUpdateSubmitted&&d.removeUpdateSubmitted(),d.removeUpdateSubmitted=d.$on("UpdateSubmitted",function(a,b){"started"===b&&(d.refreshGroups?(d.selected_tree_id=k,d.selected_group_id=i,d.refreshGroups()):d.refresh&&d.refresh(),d.$emit("HostReloadComplete"))}),d.removeInventorySubmit&&d.removeInventorySubmit(),d.removeInventorySubmit=d.$on("InventorySubmit",function(b,c,f){a({scope:d,passwords:c,start_url:e,form:h,extra_html:f})}),j("start"),c.setUrl(e),c.get().success(function(a){a.can_update?d.$emit("InventorySubmit",a.passwords_needed_to_update):(j("stop"),g("Permission Denied","You do not have access to run the update. Please contact your system administrator.","alert-danger"))}).error(function(a,b){j("stop"),f(d,a,b,null,{hdr:"Error!",msg:"Failed to get inventory_source details. "+e+"GET status: "+b})})}}]),angular.module("JobsHelper",["Utilities","FormGenerator","JobSummaryDefinition","InventoryHelper"]).factory("JobStatusToolTip",[function(){return function(a){var b;switch(a){case"successful":case"success":b="There were no failed tasks.";break;case"failed":b="Some tasks encountered errors.";break;case"canceled":b="Stopped by user request.";break;case"new":b="In queue, waiting on task manager.";break;case"waiting":b="SCM Update or Inventory Update is executing.";break;case"pending":b="Not in queue, waiting on task manager.";break;case"running":b="Playbook tasks executing."}return b}}]).factory("ShowJobSummary",["Rest","Wait","GetBasePath","FormatDate","ProcessErrors","GenerateForm","JobSummary","WatchInventoryWindowResize",function(a,b,c,d,e,f,g,h){return function(i){function j(a){var b=a.match(/\n/g),c=b?b.length:1;return c>p?20:c}var k,l,m,n,o,p,q,r,s=i.job_id,t=f,u=g;r='
\n',$("#inventory-modal-container").empty().append(r),k=t.inject(u,{mode:"edit",id:"form-container",breadCrumbs:!1,related:!1}),l=$(document).width(),m=$("body").height(),l>1199?(n=675,o=750>m?m-20:750,p=20):1199>=l&&l>=768?(n=550,o=620>m?m-15:620,p=15):(n=l-20,o=500>m?m:500,p=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:n,height:o,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#inventory-modal-container").empty(),h()},open:function(){b("stop")}}),b("start"),q=c("jobs")+s+"/",a.setUrl(q),a.get().success(function(a){var b;k.id=a.id,k.name=a.name,k.status=a.status,k.result_stdout=a.result_stdout,k.result_traceback=a.result_traceback,k.stdout_rows=j(k.result_stdout),k.traceback_rows=j(k.result_traceback),b=new Date(a.created),k.created=d(b),$("#status-modal-dialog").dialog("open")}).error(function(a,b){e(k,a,b,null,{hdr:"Error!",msg:"Attempt to load job failed. GET returned status: "+b})})}}]),angular.module("LookUpHelper",["RestServices","Utilities","SearchHelper","PaginationHelpers","ListGenerator","ApiLoader"]).factory("LookUpInit",["Alert","Rest","GenerateList","SearchInit","PaginateInit","GetBasePath","FormatDate","Empty",function(a,b,c,d,e,f,g,h){return function(b){var i,j,k,l,m=b.scope,n=b.form,o=b.list,p=b.field,q=b.postAction;i=b.url?b.url:f("inventories"===o.name?"inventory":o.name),j=o.iterator.charAt(0).toUpperCase()+o.iterator.substring(1),k=b.hdr?b.hdr:"Select "+j,l=/\/$/.test(i)?i+"?":i+"&",l+=n.fields[p].sourceField+"__iexact=:value",$('input[name="'+n.fields[p].sourceModel+"_"+n.fields[p].sourceField+'"]').attr("data-url",l),$('input[name="'+n.fields[p].sourceModel+"_"+n.fields[p].sourceField+'"]').attr("data-source",p),m["lookUp"+j]=function(){var b=c,f=b.inject(o,{mode:"lookup",hdr:k});$("#lookup-modal").on("hidden.bs.modal",function(){f.searchCleanup&&f.searchCleanup(),(""===m[p]||null===m[p])&&(m[n.fields[p].sourceModel+"_"+n.fields[p].sourceField]="",m.$$phase||m.$digest())}),f.selectAction=function(){var c,d=!1;for(c=0;c5?f[j+"_page"]-5:1,e=f[j+"_page"]<6?10<=f[j+"_num_pages"]?10:f[j+"_num_pages"]:f[j+"_page"]+4=c;c++)f[j+"_page_range"].push(c)}}]).factory("RelatedPaginateInit",["RefreshRelated","$cookieStore","Wait",function(a,b,c){return function(d){var e,f=d.scope,g=d.relatedSets,h=d.pageSize?d.pageSize:10;for(e in g)f[g[e].iterator+"_url"]=g[e].url,f[g[e].iterator+"_page"]=0,f[g[e].iterator+"_page_size"]=h;f.getPage=function(b,d,e){var g=f[e+"_url"].replace(/.page\=\d+/,""),h=/\/$/.test(g)?"?":"&";g+=h+"page="+b,g+=f[e+"SearchParams"]?"&"+f[e+"SearchParams"]+"&page_size="+f[e+"_page_size"]:"page_size="+f[e+"PageSize"],c("start"),a({scope:f,set:d,iterator:e,url:g})},f.pageIsActive=function(a,b){return a===f[b+"_page"]?"active":""},f.changePageSize=function(c,d){f[d+"_page"]=1;var e=f[d+"_url"];b.put(d+"_page_size",f[d+"_page_size"]),e=e.replace(/\/\?.*$/,"/"),e+=f[d+"SearchParams"]?"?"+f[d+"SearchParams"]+"&page_size="+f[d+"_page_size"]:"?page_size="+f[d+"_page_size"],a({scope:f,set:c,iterator:d,url:e})}}}]).factory("PaginateInit",["Refresh","$cookieStore","Wait",function(a,b,c){return function(b){var d=b.scope,e=b.list,f=b.iterator?b.iterator:e.iterator,g=b.mode?b.mode:null;d[f+"_page"]=b.page?b.page:1,d[f+"_url"]=b.url,d[f+"_mode"]=g,d[f+"_page_size"]=b.pageSize?b.pageSize:"lookup"===g?5:20,d.getPage=function(b,e,f){var g=d[f+"_url"].replace(/.page\=\d+/,""),h=/\/$/.test(g)?"?":"&";g+=h+"page="+b,g+=d[f+"SearchParams"]?"&"+d[f+"SearchParams"]+"&page_size="+d[f+"_page_size"]:"page_size="+d[f+"PageSize"],c("start"),a({scope:d,set:e,iterator:f,url:g})},d.pageIsActive=function(a,b){return a===d[b+"_page"]?"active":""},d.changePageSize=function(b,e){d[e+"_page"]=0;var f=d[e+"_url"].replace(/\?page_size\=\d+/,""),g=/\/$/.test(f)?"?":"&";f+=d[e+"SearchParams"]?g+d[e+"SearchParams"]+"&page_size="+d[e+"_page_size"]:g+"page_size="+d[e+"_page_size"],c("start"),a({scope:d,set:b,iterator:e,url:f})}}}]),angular.module("ParseHelper",[]).factory("ParseTypeChange",[function(){return function(a,b,c){var d=b?b:"variables",e=c?c:"parseType";a.blockParseTypeWatch=!1,a.blockVariableDataWatch=!1,a["remove"+d+"Watch"]&&a["remove"+d+"Watch"](),a["remove"+d+"Watch"]=a.$watch(e,function(b,c){var e;if(b!==c)if("json"===b)if(a[d]&&!/^---$/.test(a[d]))try{e=jsyaml.load(a[d]),a[d]=JSON.stringify(e,null," ")}catch(f){}else a[d]="{}";else if(a[d]&&!/^\{\}$/.test(a[d]))try{e=JSON.parse(a[d]),a[d]=jsyaml.safeDump(e)}catch(f){}else a[d]="---"})}}]),angular.module("PermissionsHelper",[]).factory("PermissionCategoryChange",[function(){return function(a){var b=a.scope,c=a.reset;"Inventory"===b.category?(b.projectrequired=!1,b.permissionTypeHelp="
\n
Read
\n
Only allow the user or team to view the inventory.
\n
Write
\n
Allow the user or team to modify hosts and groups contained in the inventory, add new hosts and groups, and perform inventory sync operations.\n
Admin
\n
Allow the user or team full access to the inventory. This includes reading, writing, deletion of the inventory and inventory sync operations.
\n
\n"):(b.projectrequired=!0,b.permissionTypeHelp="
\n
Run
\n
Allow the user or team to perform a live deployment of the project against the inventory. In Run mode modules will be executed, and changes to the inventory will occur.
\n
Check
\n
Only allow the user or team to deploy the project against the inventory as a dry-run operation. In Check mode, module operations will only be simulated. No changes will occur.
\n
\n"),c&&(b.permission_type="Inventory"===b.category?"read":"run")}}]),angular.module("ProjectPathHelper",["RestServices","Utilities"]).factory("GetProjectPath",["Alert","Rest","GetBasePath","ProcessErrors",function(a,b,c,d){return function(a){function e(a){var b,c,d=[],e=[];for(b=0;b
\n',$("#projects-modal-container").empty().append(b),c=q.inject(r,{mode:"edit",id:"form-container",related:!1,breadCrumbs:!1}),q.reset(),d=$(document).width(),f=$("body").height(),d>1199?(h=675,j=750>f?f-20:750,n=20):1199>=d&&d>=768?(h=550,j=620>f?f-15:620,n=15):(h=d-20,j=500>f?f:500,n=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:h,height:j,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#projects-modal-container").empty()},open:function(){m("stop")}}),e.setUrl(p),e.get().success(function(a){var b,d=a;for(b in r.fields)d[b]?c[b]="created"===b?k(new Date(d[b])):d[b]:d.summary_fields.project[b]&&(c[b]=d.summary_fields.project[b]);$("#status-modal-dialog").dialog({title:d.summary_fields.project.name+" Status"}).dialog("open")}).error(function(a,b){$("#form-modal").modal("hide"),i(c,a,b,r,{hdr:"Error!",msg:"Failed to retrieve status of project: "+o+". GET status: "+b})})}}]),angular.module("SelectionHelper",["Utilities","RestServices"]).factory("SelectionInit",["Rest","Alert","ProcessErrors","ReturnToCaller","Wait",function(a,b,c,d,e){return function(b){var f,g=b.scope,h=b.list,i=b.url,j=b.returnToCaller;f=void 0!==b.selected?b.selected:[],g.formModalActionDisabled=!0,g.disableSelectBtn=!0,g["toggle_"+h.iterator]=function(a,b){var c,d,e;for(c=0;c0?(g.formModalActionDisabled=!1,g.disableSelectBtn=!1):(g.formModalActionDisabled=!0,g.disableSelectBtn=!0)},g.finishSelection=function(){function b(){f=[],void 0!==j?d(j):($("#form-modal").modal("hide"),g.$emit("modalClosed"))}function k(b){a.post(b).success(function(a,b){m.push({result:"success",data:a,status:b}),g.$emit("callFinished")}).error(function(a,b,c){m.push({result:"error",data:a,status:b,headers:c}),g.$emit("callFinished")})}a.setUrl(i);var l,m=[];if(g.formModalActionDisabled=!0,g.disableSelectBtn=!0,e("start"),g.callFinishedRemove&&g.callFinishedRemove(),g.callFinishedRemove=g.$on("callFinished",function(){var a,d=0;if(m.length===f.length){for(e("stop"),a=0;a0)for(l=0;lh)h++,setTimeout(1e3,e());else if("success"===g.status)return d(a)}var f,g={},h=0;return null===c.apiDefaults||void 0===c.apiDefaults?(f="/api/v1/",b.setUrl(f),b.get().success(function(a){var b,d=a;for(b in d)switch(b){case"organizations":d[b].iterator="organization";break;case"jobs":d[b].iterator="job";break;case"users":d[b].iterator="user";break;case"teams":d[b].iterator="team";break;case"hosts":d[b].iterator="host";break;case"groups":d[b].iterator="group";break;case"projects":d[b].iterator="project";break;case"inventories":d[b].iterator="inventory"}c.apiDefaults=d,g={status:"success"}}).error(function(a,b){g={status:"error",msg:"Call to "+f+" failed. GET returned status: "+b}}),e()):d(a)}}]),angular.module("InventoryHelper",["RestServices","Utilities","OrganizationListDefinition","ListGenerator","AuthService","InventoryHelper","InventoryFormDefinition","ParseHelper","SearchHelper"]).factory("WatchInventoryWindowResize",["ApplyEllipsis",function(a){return function(){var b;$(window).resize(function(){clearTimeout(b),b=setTimeout(function(){$("#groups_table .name-column").each(function(){var a=$(this).width(),b=$(this).find(".level").width(),c=parseInt($(this).find(".level").css("padding-left").replace(/px/,"")),d=b+c,e=100-Math.ceil(d/a*100)+"%";$(this).find(".group-name").css({width:e})}),a("#groups_table .group-name a"),a("#hosts_table .host-name a")},100)})}}]).factory("SaveInventory",["InventoryForm","Rest","Alert","ProcessErrors","LookUpInit","OrganizationList","GetBasePath","ParseTypeChange","Wait",function(a,b,c,d,e,f,g,h,i){return function(e){var f,h,j,k=e.scope,l=a,m=g("inventory");i("start");try{if(h="json"===k.inventoryParseType?JSON.parse(k.inventory_variables):jsyaml.load(k.inventory_variables),"object"!=typeof h)throw"failed to return an object!";j={};for(f in l.fields)"inventory_variables"!==f&&(l.fields[f].realName?j[l.fields[f].realName]=k[f]:j[f]=k[f]);b.setUrl(m+k.inventory_id+"/"),b.put(j).success(function(a){k.inventory_variables?(b.setUrl(a.related.variable_data),b.put(h).success(function(){i("stop"),k.$emit("InventorySaved")}).error(function(a,b){d(k,a,b,l,{hdr:"Error!",msg:"Failed to update inventory varaibles. PUT returned status: "+b})})):k.$emit("InventorySaved")}).error(function(a,b){d(k,a,b,l,{hdr:"Error!",msg:"Failed to update inventory. POST returned status: "+b})})}catch(n){i("stop"),c("Error","Error parsing inventory variables. Parser returned: "+n)}}}]).factory("EditInventoryProperties",["InventoryForm","GenerateForm","Rest","Alert","ProcessErrors","LookUpInit","OrganizationList","GetBasePath","ParseTypeChange","SaveInventory","Wait","Store","SearchInit",function(a,b,c,d,e,f,g,h,i,j,k,l,m){return function(n){var o,p=n.scope,q=n.inventory_id,r=b,s=a,t={},u=l("CurrentSearchParams");s.well=!1,o=r.inject(s,{mode:"edit",modal:!0,related:!1,modal_show:!1}),s.well=!0,i(o,"inventory_variables","inventoryParseType"),o.inventoryParseType="yaml",o.formModalActionLabel="Save",o.formModalCancelShow=!0,o.formModalInfo=!1,o.formModalHeader="Inventory Properties",k("start"),c.setUrl(h("inventory")+q+"/"),c.get().success(function(a){var b,c;for(b in s.fields){if("inventory_variables"===b){if($.isEmptyObject(a.variables)||"{}"===a.variables||"null"===a.variables||""===a.variables)o.inventory_variables="---";else try{c=JSON.parse(a.variables),o.inventory_variables=jsyaml.safeDump(c)}catch(e){d("Variable Parse Error","Attempted to parse variables for inventory: "+q+". Parse returned: "+e),console&&(console.log(e),console.log("data:"),console.log(a.variables)),o.inventory_variables="---"}t.inventory_variables=o.variables}else"inventory_name"===b?(o[b]=a.name,t[b]=o[b]):"inventory_description"===b?(o[b]=a.description,t[b]=o[b]):a[b]&&(o[b]=a[b],t[b]=o[b]);s.fields[b].sourceModel&&a.summary_fields&&a.summary_fields[s.fields[b].sourceModel]&&(o[s.fields[b].sourceModel+"_"+s.fields[b].sourceField]=a.summary_fields[s.fields[b].sourceModel][s.fields[b].sourceField],t[s.fields[b].sourceModel+"_"+s.fields[b].sourceField]=a.summary_fields[s.fields[b].sourceModel][s.fields[b].sourceField])}f({scope:o,form:s,current_item:o.organization,list:g,field:"organization"}),k("stop"),$("#form-modal").modal("show")}).error(function(a,b){e(o,a,b,null,{hdr:"Error!",msg:"Failed to get inventory: "+q+". GET returned: "+b})}),o.removeInventorySaved&&o.removeInventorySaved(),o.removeInventorySaved=o.$on("InventorySaved",function(){$("#form-modal").modal("hide"),o.searchCleanp&&o.searchCleanup(),m({scope:p,set:u.set,list:u.list,url:u.defaultUrl,iterator:u.iterator,sort_order:u.sort_order,setWidgets:!1}),p.$emit("RefreshInventories")}),o.cancelModal=function(){o.searchCleanp&&o.searchCleanup(),m({scope:p,set:u.set,list:u.list,url:u.defaultUrl,iterator:u.iterator,sort_order:u.sort_order,setWidgets:!1})},o.formModalAction=function(){p.inventory_id=q,p.inventory_name=o.inventory_name,j({scope:o})}}}]),angular.module("md5Helper",["RestServices","Utilities"]).factory("md5Setup",[function(){return function(a){var b=a.scope,c=a.master,d=a.check_field,e=a.default_val;b[d]=e,c[d]=e,b.genMD5=function(a){var c=new Date;b[a]=$.md5("AnsibleWorks"+c.getTime())},b.toggleCallback=function(a){"false"===b.allow_callbacks&&(b[a]="")},b.selectAll=function(a){$('input[name="'+a+'"]').focus().select()}}}]),angular.module("RefreshRelatedHelper",["RestServices","Utilities","PaginationHelpers"]).factory("RefreshRelated",["ProcessErrors","Rest","Wait","PageRangeSetup",function(a,b,c,d){return function(e){var f=e.scope,g=e.set,h=e.iterator,i=e.url;b.setUrl(i),b.get().success(function(a){d({scope:f,count:a.count,next:a.next,previous:a.previous,iterator:h}),f[g]=a.results,f[h+"Loading"]=!1,f[h+"HoldInput"]=!1,c("stop"),f.$emit("related"+g)}).error(function(b,c){a(f,b,c,null,{hdr:"Error!",msg:"Failed to retrieve "+g+". GET returned status: "+c})})}}]),angular.module("RefreshHelper",["RestServices","Utilities","PaginationHelpers"]).factory("Refresh",["ProcessErrors","Rest","Wait","Empty","PageRangeSetup",function(a,b,c,d,e){return function(d){var f=d.scope,g=d.set,h=d.iterator,i=d.url;f.current_url=i,b.setUrl(i),b.get().success(function(a){var b,d;for(e({scope:f,count:a.count,next:a.next,previous:a.previous,iterator:h}),f[h+"Loading"]=!1,b=1;3>=b;b++)d=1===b?"":b,f[h+"HoldInput"+d]=!1;f[g]=a.results,window.scrollTo(0,0),c("stop"),f.$emit("PostRefresh")}).error(function(b,c){f[h+"HoldInput"]=!1,a(f,b,c,null,{hdr:"Error!",msg:"Failed to retrieve "+g+". GET returned status: "+c})})}}]),angular.module("RelatedSearchHelper",["RestServices","Utilities","RefreshRelatedHelper"]).factory("RelatedSearchInit",["$timeout","Alert","Rest","RefreshRelated","Wait",function(a,b,c,d,e){return function(a){function b(a){var b,c,d,e;for(e in h.related)if("tree"!==h.related[e].type&&(void 0===a||a===h.related[e].iterator)){b=h.related[e].iterator;for(d in h.related[e].fields)if(h.related[e].fields[d].key){f[b+"SearchField"]=d,f[b+"SearchFieldLabel"]=h.related[e].fields[d].label;break}f[b+"SortOrder"]=null,f[b+"SearchType"]="icontains",f[b+"SearchTypeLabel"]="Contains",f[b+"SearchValue"]=null,f[b+"SelectShow"]=!1,f[b+"ShowStartBtn"]=!0,f[b+"HideAllStartBtn"]=!1,c=f[b+"SearchField"],!h.related[e].fields[c].searchType||"boolean"!==h.related[e].fields[c].searchType&&"select"!==h.related[e].fields[c].searchType||(f[b+"SelectShow"]=!0,f[b+"SearchSelectOpts"]=h.fields[c].searchOptions),h.related[e].fields[c].searchType&&"gtzero"===h.related[e].fields[c].searchType&&(f[b+"InputHide"]=!0)}}var c,f=a.scope,g=a.relatedSets,h=a.form;b(),f.resetSearch=function(a){b(a),f.search(a)},f.setSearchField=function(a,b,c){var d,e;for(e in h.related)h.related[e].iterator===a&&(d=h.related[e].fields[b]);f[a+"SearchFieldLabel"]=c,f[a+"SearchField"]=b,f[a+"SearchValue"]="",f[a+"SelectShow"]=!1,f[a+"InputHide"]=!1,f[a+"ShowStartBtn"]=!0,void 0!==d.searchType&&"gtzero"===d.searchType&&(f[a+"InputHide"]=!0,f[a+"ShowStartBtn"]=!1),void 0===d.searchType||"boolean"!==d.searchType&&"select"!==d.searchType||(f[a+"SelectShow"]=!0,f[a+"SearchSelectOpts"]=d.searchOptions),void 0!==d.searchType&&"int"===d.searchType&&(f[a+"SearchType"]="int"),f.search(a)},f.setSearchType=function(a,b,c){f[a+"SearchTypeLabel"]=c,f[a+"SearchType"]=b,f.search(a)},f.startSearch=function(a,b){13===a.keyCode&&f.search(b)},f.search=function(a){e("start"),f[a+"Loading"]=!0,f[a+"HoldInput"]=!0,f[a+"SearchValue"]&&(f[a+"ShowStartBtn"]=!1),"host"===a&&"has_active_failures"===f.hostSearchField&&(f.hostFailureFilter=f.hostSearchSelectValue&&1===f.hostSearchSelectValue.value?!0:!1);var b,i,j,k,l;for(i in g)if(g[i].iterator===a){j=i,k=g[i].url;for(b in h.related[i].fields)h.related[i].fields[b].key&&(l=h.related[i].fields[b].desc?"-"+b:b);break}l=null===f[a+"SortOrder"]?l:f[a+"SortOrder"],c=h.related[j].fields[f[a+"SearchField"]],f[a+"SelectShow"]===!1&&""!==f[a+"SearchValue"]&&void 0!==f[a+"SearchValue"]||f[a+"SelectShow"]&&f[a+"SearchSelectValue"]||c.searchType&&"gtzero"===c.searchType?(f[a+"SearchParams"]=c.sourceModel?c.sourceModel+"__"+c.sourceField+"__":c.searchField?c.searchField+"__":f[a+"SearchField"]+"__",f[a+"SearchParams"]+=!c.searchType||"int"!==c.searchType&&"boolean"!==c.searchType?c.searchType&&"gtzero"===c.searchType?"gt=0":f[a+"SearchType"]+"=":"int=",!c.searchType||"boolean"!==c.searchType&&"select"!==c.searchType?(void 0===c.searchType||"gtzero"===c.searchType)&&(f[a+"SearchParams"]+=encodeURI(f[a+"SearchValue"])):f[a+"SearchParams"]+=f[a+"SearchSelectValue"].value,f[a+"SearchParams"]+=l?"&order_by="+encodeURI(l):""):f[a+"SearchParams"]=l?"order_by="+encodeURI(l):"",f[a+"Page"]=0,k+=k.match(/\/$/)?"?":"&",k+=f[a+"SearchParams"],k+=f[a+"PageSize"]?"&page_size="+f[a+"PageSize"]:"",d({scope:f,set:j,iterator:a,url:k})},f.sort=function(a,b){var c,d,e,g;$("."+a+" .list-header").each(function(){if($(this).attr("id")!==a+"-"+b+"-header"){var c=$(this).find("i");c.attr("class","icon-sort")}}),d=$("#"+a+"-"+b+"-header i"),e="",d.hasClass("icon-sort")?(d.removeClass("icon-sort"),d.addClass("icon-sort-up")):d.hasClass("icon-sort-up")?(d.removeClass("icon-sort-up"),d.addClass("icon-sort-down"),e="-"):d.hasClass("icon-sort-down")&&(d.removeClass("icon-sort-down"),d.addClass("icon-sort-up"));for(g in h.related)h.related[g].iterator===a&&(c=h.related[g].fields[b].sourceModel?e+h.related[g].fields[b].sourceModel+"__"+h.related[g].fields[b].sourceField:e+b);f[a+"SortOrder"]=c,f.search(a)}}}]),angular.module("SearchHelper",["RestServices","Utilities","RefreshHelper"]).factory("SearchInit",["Alert","Rest","Refresh","$location","GetBasePath","Empty","$timeout","Wait","Store",function(a,b,c,d,e,f,g,h,i){return function(a){function b(a){var b,c,d,e;e=void 0===a||1===a?"":a,l[p+"SearchField"+e]="",l[p+"SearchFieldLabel"+e]="";for(c in o.fields)if((void 0===o.fields[c].searchWidget&&1===a||o.fields[c].searchWidget===a)&&o.fields[c].key){o.fields[c].sourceModel?(d=o.fields[c].sourceModel+"__"+o.fields[c].sourceField,r=o.fields[c].desc?"-"+d:d):r=o.fields[c].desc?"-"+c:c,(void 0===o.fields[c].searchable||o.fields[c].searchable===!0)&&(l[p+"SearchField"+e]=c,l[p+"SearchFieldLabel"+e]=o.fields[c].label);break}if(f(l[p+"SearchField"+e]))for(c in o.fields)if((void 0===o.fields[c].searchWidget&&1===a||o.fields[c].searchWidget===a)&&(void 0===o.fields[c].searchable||o.fields[c].searchable===!0)){l[p+"SearchField"+e]=c,l[p+"SearchFieldLabel"+e]=o.fields[c].label;break}l[p+"SearchType"+e]="icontains",l[p+"SearchTypeLabel"+e]="Contains",l[p+"SearchParams"+e]="",l[p+"SearchValue"+e]="",l[p+"SelectShow"+e]=!1,l[p+"HideSearchType"+e]=!1,l[p+"InputDisable"+e]=!1,l[p+"ExtraParms"+e]="",l[p+"ShowStartBtn"+e]=!0,l[p+"HideAllStartBtn"+e]=!1,l[p+"SearchPlaceholder"+e]=o.fields[l[p+"SearchField"+e]]&&o.fields[l[p+"SearchField"+e]].searchPlaceholder?l[o.fields[l[p+"SearchField"+e]].searchPlaceholder]?l[o.fields[l[p+"SearchField"+e]].searchPlaceholder]:o.fields[l[p+"SearchField"+e]].searchPlaceholder:"Search",l[p+"InputDisable"+e]=o.fields[l[p+"SearchField"+e]]&&"all"===o.fields[l[p+"SearchField"+e]].searchObject?!0:!1,b=l[p+"SearchField"+e],o.fields[b]&&(!o.fields[b].searchType||"boolean"!==o.fields[b].searchType&&"select"!==o.fields[b].searchType||(l[p+"SelectShow"+e]=!0,l[p+"SearchSelectOpts"+e]=o.fields[b].searchOptions),o.fields[b].searchType&&"int"===o.fields[b].searchType&&(l[p+"HideSearchType"+e]=!0),o.fields[b].searchType&&"gtzero"===o.fields[b].searchType&&(l[p+"InputHide"+e]=!0))}var e,g,j,k,l=a.scope,m=a.set,n=a.url,o=a.list,p=a.iterator?a.iterator:o.iterator,q=a.setWidgets===!1?!1:!0,r=a.sort_order||"";if(q)for(e=o.searchWidgets?o.searchWidgets:1,g=1;e>=g;g++)j=1===g?"":g,$("#search-widget-container"+j)&&b(g);k={set:m,defaultUrl:n,list:o,iterator:p,sort_order:r},i("CurrentSearchParams",k),l.setSearchField=function(a,b,c,d){var e=void 0===d||1===d?"":d;l[a+"SearchFieldLabel"+e]=c,l[a+"SearchField"+e]=b,l[a+"SearchValue"+e]="",l[a+"SelectShow"+e]=!1,l[a+"HideSearchType"+e]=!1,l[a+"InputHide"+e]=!1,l[a+"SearchType"+e]="icontains",l[a+"InputDisable"+e]="all"===o.fields[b].searchObject?!0:!1,l[a+"ShowStartBtn"+e]=!0,l[a+"SearchPlaceholder"+e]=o.fields[l[a+"SearchField"+e]]&&o.fields[l[a+"SearchField"+e]].searchPlaceholder?l[o.fields[l[a+"SearchField"+e]].searchPlaceholder]?l[o.fields[l[a+"SearchField"+e]].searchPlaceholder]:o.fields[l[a+"SearchField"+e]].searchPlaceholder:"Search",o.fields[b].searchType&&"gtzero"===o.fields[b].searchType?(l[a+"InputDisable"+e]=!0,l[a+"ShowStartBtn"+e]=!1,l.search(a)):o.fields[b].searchSingleValue?(l[a+"InputDisable"+e]=!0,l[a+"SearchValue"+e]=o.fields[b].searchValue,l[a+"SearchSelectValue"+e]="boolean"===o.fields[b].searchType&&"true"===o.fields[b].searchValue?{value:1}:"boolean"===o.fields[b].searchType&&"false"===o.fields[b].searchValue?{value:0}:{value:o.fields[b].searchValue},l[a+"ShowStartBtn"+e]=!1):"in"===o.fields[b].searchType?(l[a+"SearchType"+e]="in",l[a+"SearchValue"+e]=o.fields[b].searchValue,l[a+"InputDisable"+e]=!0,l[a+"ShowStartBtn"+e]=!1):!o.fields[b].searchType||"boolean"!==o.fields[b].searchType&&"select"!==o.fields[b].searchType&&"select_or"!==o.fields[b].searchType?o.fields[b].searchType&&"int"===o.fields[b].searchType?l[a+"SearchType"+e]="int":o.fields[b].searchType&&"isnull"===o.fields[b].searchType&&(l[a+"SearchType"+e]="isnull",l[a+"InputDisable"+e]=!0,l[a+"SearchValue"+e]="true",l[a+"ShowStartBtn"+e]=!1):(l[a+"SelectShow"+e]=!0,l[a+"SearchSelectOpts"+e]=o.fields[b].searchOptions),l.search(a)},l.resetSearch=function(a){var c,e=o.searchWidgets?o.searchWidgets:1;for(c=1;e>=c;c++)b(c);window.location="/#"+d.path(),l.search(a)},l.removeDoSearch&&l.removeDoSearch(),l.removeDoSearch=l.$on("doSearch",function(a,b,d,e){l[b+"Loading"]=void 0===e||e===!0?!0:!1;var f,g=n;l[b+"Page"]=d?parseInt(d)-1:0,l[b+"SearchParams"]&&(g+=/\/$/.test(g)?"?"+l[b+"SearchParams"]:"&"+l[b+"SearchParams"]),f=/\/$/.test(g)?"?":"&",g+=l[b+"_page_size"]?f+"page_size="+l[b+"_page_size"]:"",d&&(f=/\/$/.test(g)?"?":"&",g+=f+"page="+d),l[b+"ExtraParms"]&&(f=/\/$/.test(g)?"?":"&",g+=f+l[b+"ExtraParms"]),g=g.replace(/\&\&/,"&"),c({scope:l,set:m,iterator:b,url:g})}),l.removePrepareSearch&&l.removePrepareSearch(),l.removePrepareSearch=l.$on("prepareSearch",function(a,b,c,d,e){h("start"),l[b+"SearchParams"]="";var f,g,i=o.searchWidgets?o.searchWidgets:1;for(f=1;i>=f;f++)g=1===f?"":f,$("#search-widget-container"+g)&&o.fields[l[b+"SearchField"+g]]&&o.fields[l[b+"SearchField"+g]].searchObject&&("all"!==o.fields[l[b+"SearchField"+g]].searchObject?(l[b+"HideAllStartBtn"+g]=!1,l[b+"SearchValue"+g]?(l[b+"ShowStartBtn"+g]=!1,l[b+"SearchParams"]+=o.fields[l[b+"SearchField"+g]].searchOnID?"&"+o.fields[l[b+"SearchField"+g]].searchObject+"__id="+l[b+"SearchValue"+g]:"&"+o.fields[l[b+"SearchField"+g]].searchObject+"__name__icontains="+l[b+"SearchValue"+g]):(l[b+"ShowStartBtn"+g]=!0,l[b+"SearchParams"]+="&"+o.fields[l[b+"SearchField"+g]].searchField+"="+o.fields[l[b+"SearchField"+g]].searchObject)):l[b+"HideAllStartBtn"+g]=!0);l.$emit("prepareSearch2",b,c,d,e)}),l.removePrepareSearch2&&l.removePrepareSearch2(),l.removePrepareSearch2=l.$on("prepareSearch2",function(a,b,c,d,e){var g,h,i=o.searchWidgets?o.searchWidgets:1;for(g=1;i>=g;g++)h=1===g?"":g,l[b+"HoldInput"+h]=!0,$("#search-widget-container"+h)&&o.fields[l[b+"SearchField"+h]]&&!o.fields[l[b+"SearchField"+h]].searchObject&&(l[b+"ShowStartBtn"+h]=l[b+"SearchValue"+h]?!1:!0,(!l[b+"SelectShow"+h]&&!f(l[b+"SearchValue"+h])||l[b+"SelectShow"+h]&&l[b+"SearchSelectValue"+h]||o.fields[l[b+"SearchField"+h]]&&"gtzero"===o.fields[l[b+"SearchField"+h]].searchType)&&(l[b+"SearchParams"]+=o.fields[l[b+"SearchField"+h]].searchField?"&"+o.fields[l[b+"SearchField"+h]].searchField+"__":o.fields[l[b+"SearchField"+h]].sourceModel?"&"+o.fields[l[b+"SearchField"+h]].sourceModel+"__"+o.fields[l[b+"SearchField"+h]].sourceField+"__":"select"!==o.fields[l[b+"SearchField"+h]].searchType||""!==l[b+"SearchSelectValue"+h].value&&null!==l[b+"SearchSelectValue"+h].value?"&"+l[b+"SearchField"+h]+"__":"&"+l[b+"SearchField"+h]+"__",l[b+"SearchParams"]+=!o.fields[l[b+"SearchField"+h]].searchType||"int"!==o.fields[l[b+"SearchField"+h]].searchType&&"boolean"!==o.fields[l[b+"SearchField"+h]].searchType?o.fields[l[b+"SearchField"+h]].searchType&&"gtzero"===o.fields[l[b+"SearchField"+h]].searchType?"gt=0":"select"!==o.fields[l[b+"SearchField"+h]].searchType||""!==l[b+"SearchSelectValue"+h].value&&null!==l[b+"SearchSelectValue"+h].value?l[b+"SearchType"+h]+"=":"iexact=":"int=",!o.fields[l[b+"SearchField"+h]].searchType||"boolean"!==o.fields[l[b+"SearchField"+h]].searchType&&"select"!==o.fields[l[b+"SearchField"+h]].searchType?(!o.fields[l[b+"SearchField"+h]].searchType||o.fields[l[b+"SearchField"+h]].searchType&&"or"!==o.fields[l[b+"SearchField"+h]].searchType&&"gtzero"!==o.fields[l[b+"SearchField"+h]].searchType)&&(l[b+"SearchParams"]+=encodeURI(l[b+"SearchValue"+h])):l[b+"SearchParams"]+=l[b+"SearchSelectValue"+h].value));("inventory"===b&&l.inventoryFailureFilter||"host"===b&&l.hostFailureFilter)&&(l[b+"SearchParams"]+="&has_active_failures=true"),r&&(l[b+"SearchParams"]+=l[b+"SearchParams"]?"&":"",l[b+"SearchParams"]+="order_by="+encodeURI(r)),l.$emit("doSearch",b,c,d,e)}),l.startSearch=function(a,b){13===a.keyCode&&l.search(b)},l.search=function(a,b,c){c=void 0===c?!0:!1,c&&(l[m]=[]),l.$emit("prepareSearch",a,b,c)},l.sort=function(a){$(".list-header").each(function(){if($(this).attr("id")!==a+"-header"){var b=$(this).find("i");b.attr("class","fa fa-sort")}});var b=$("#"+a+"-header i"),c="";b.hasClass("fa-sort")?(b.removeClass("fa-sort"),b.addClass("fa-sort-up")):b.hasClass("fa-sort-up")?(b.removeClass("fa-sort-up"),b.addClass("fa-sort-down"),c="-"):b.hasClass("fa-sort-down")&&(b.removeClass("fa-sort-down"),b.addClass("fa-sort-up")),r=o.fields[a].searchField?c+o.fields[a].searchField:o.fields[a].sortField?c+o.fields[a].sortField:o.fields[a].sourceModel?c+o.fields[a].sourceModel+"__"+o.fields[a].sourceField:c+a,l.search(o.iterator)},l.searchCleanup=function(){l.removeDoSearch(),l.removePrepareSearch(),l.removePrepareSearch2()}}}]),angular.module("TeamHelper",["RestServices","Utilities","OrganizationListDefinition","SearchHelper","PaginationHelpers","ListGenerator"]).factory("SetTeamListeners",["Alert","Rest",function(a,b){return function(a){var c=a.scope,d=a.set,e=a.iterator;c.$on("TeamResultFound",function(a,b,f){var g,h,i,j;if(f.length===b.length){for(i="organization",j="organization_name",g=0;gSelect existing users by clicking each user or checking the related checkbox. When finished, click the blue Select button, located bottom right.

",base:"users",index:!0,hover:!0,fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},actions:{},fieldActions:{}}),angular.module("CloudCredentialsListDefinition",[]).value("CloudCredentialList",{name:"cloudcredentials",iterator:"cloudcredential",selectTitle:"Add Cloud Credentials",editTitle:"Cloud Credentials",selectInstructions:"

Select existing credentials by clicking each credential or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new credential by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",excludeModal:!1},team:{label:"Team",ngBind:"credential.team_name",sourceModel:"team",sourceField:"name",excludeModal:!0},user:{label:"User",ngBind:"credential.user_username",sourceModel:"user",sourceField:"username",excludeModal:!0}},actions:{add:{mode:"all",ngClick:"addCredential()","class":"btn-sm",awToolTip:"Create a new credential"}},fieldActions:{edit:{ngClick:"editCredential(credential.id)",icon:"fa-edit",label:"Edit","class":"btn-sm",awToolTip:"Edit credential",dataPlacement:"top"},"delete":{ngClick:"deleteCredential(credential.id, credential.name)",icon:"fa-trash-o",label:"Delete","class":"btn-sm",awToolTip:"Delete credential",dataPlacement:"top"}}}),angular.module("CredentialsListDefinition",[]).value("CredentialList",{name:"credentials",iterator:"credential",selectTitle:"Add Credentials",editTitle:"Credentials",selectInstructions:"

Select existing credentials by clicking each credential or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new credential by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",excludeModal:!1},kind:{label:"Type",searchType:"select",searchOptions:[],excludeModal:!0,nosort:!0}},actions:{add:{mode:"all",ngClick:"addCredential()",awToolTip:"Create a new credential"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{ngClick:"editCredential(credential.id)",icon:"fa-edit",label:"Edit","class":"btn-sm",awToolTip:"Edit credential",dataPlacement:"top"},"delete":{ngClick:"deleteCredential(credential.id, credential.name)",icon:"fa-trash",label:"Delete","class":"btn-sm",awToolTip:"Delete credential",dataPlacement:"top"}}}),angular.module("GroupListDefinition",[]).value("GroupList",{name:"groups",iterator:"group",selectTitle:"Copy Groups",editTitle:"Groups",index:!0,well:!1,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{help:{awPopOver:"Choose groups by clicking on each group you wish to add. Click the Select button to add the groups to the selected inventory group.",dataContainer:"#form-modal .modal-content",mode:"all",awToolTip:"Click for help",dataTitle:"Adding Groups"}},fieldActions:{edit:{label:"Edit",ngClick:"editGroup(group.id)",icon:"icon-edit","class":"btn-xs",awToolTip:"Edit group",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteGroup(group.id, group.name)",icon:"icon-trash","class":"btn-xs",awToolTip:"Delete group",dataPlacement:"top"}}}),angular.module("HomeGroupListDefinition",[]).value("HomeGroupList",{name:"home_groups",iterator:"group",editTitle:"Groups",index:!0,hover:!0,well:!0,fields:{name:{key:!0,label:"Group",ngClick:"editGroup(group.id, group.inventory)",columnClass:"col-lg-4 col-md3 col-sm-3 col-xs-6 ellipsis"},inventory_name:{label:"Inventory",sourceModel:"inventory",sourceField:"name",columnClass:"col-lg-3 col-md2 col-sm-2 hidden-xs elllipsis",linkTo:"{{ /#/inventories/' + group.inventory + '/' }}"},source:{label:"Source",searchType:"select",searchOptions:[{name:"ec2",value:"ec2"},{name:"none",value:""},{name:"rax",value:"rax"}],sourceModel:"inventory_source",sourceField:"source",searchOnly:!0},has_external_source:{label:"Has external source?",searchType:"in",searchValue:"ec2,rax",searchOnly:!0,sourceModel:"inventory_source",sourceField:"source"},has_active_failures:{label:"Has failed hosts?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},last_update_failed:{label:"Update failed?",searchType:"select",searchSingleValue:!0,searchValue:"failed",searchOnly:!0,sourceModel:"inventory_source",sourceField:"status"},id:{label:"ID",searchOnly:!0}},fieldActions:{sync_status:{mode:"all",ngClick:"viewUpdateStatus(group.id, group.group_id)",awToolTip:"{{ group.status_tooltip }}",ngClass:"group.status_class",dataPlacement:"top"},failed_hosts:{mode:"all",awToolTip:"{{ group.hosts_status_tip }}",dataPlacement:"top",ngHref:"/#/inventories/{{ group.inventory }}/",iconClass:"{{ 'fa icon-failures-' + group.hosts_status_class }}"},group_update:{mode:"all",ngClick:"updateGroup(group.id)",awToolTip:"{{ group.launch_tooltip }}",ngShow:"(group.status !== 'running' && group.status !== 'pending' && group.status !== 'updating')",ngClass:"group.launch_class",dataPlacement:"top"},cancel:{mode:"all",ngClick:"cancelUpdate(group.id)",awToolTip:"Cancel sync process","class":"red-txt",ngShow:"(group.status == 'running' || group.status == 'pending' || group.status == 'updating')",dataPlacement:"top"},edit:{label:"Edit",mode:"all",ngClick:"editGroup(group.id)",awToolTip:"Edit group",dataPlacement:"top"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("HomeHostListDefinition",[]).value("HomeHostList",{name:"hosts",iterator:"host",selectTitle:"Add Existing Hosts",editTitle:"Hosts",index:!0,hover:!0,well:!0,fields:{name:{key:!0,label:"Name",columnClass:"col-lg-4 col-md3 col-sm-3 col-xs-7 ellipsis",ngClick:"editHost(host.id, host.name)"},inventory_name:{label:"Inventory",sourceModel:"inventory",sourceField:"name",columnClass:"col-lg-3 col-md2 col-sm-2 hidden-xs elllipsis",linkTo:"{{ '/#/inventories/' + host.inventory }}"},enabled:{label:"Disabled?",searchSingleValue:!0,searchType:"boolean",searchValue:"false",searchOnly:!0},has_active_failures:{label:"Has failed jobs?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},has_inventory_sources:{label:"Has external source?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},id:{label:"ID",searchOnly:!0}},fieldActions:{enabled_flag:{iconClass:"{{ 'fa icon-enabled-' + host.enabled }}",dataPlacement:"top",awToolTip:"{{ host.enabledToolTip }}",dataTipWatch:"host.enabledToolTip",ngClick:"toggleHostEnabled(host.id, host.has_inventory_sources)"},active_failures:{awPopOver:"{{ host.job_status_html }}",dataTitle:"{{ host.job_status_title }}",awToolTip:"{{ host.badgeToolTip }}",awTipPlacement:"top",dataPlacement:"left",iconClass:"{{ 'fa icon-failures-' + host.has_active_failures }}"},edit:{label:"Edit",ngClick:"editHost(host.id)",icon:"icon-edit",awToolTip:"Edit host",dataPlacement:"top"}},actions:{stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("HostListDefinition",[]).value("HostList",{name:"hosts",iterator:"host",selectTitle:"Add Existing Hosts",editTitle:"Hosts",index:!0,well:!1,fields:{name:{key:!0,label:"Host Name",linkTo:"/inventories/{{ inventory_id }}/hosts/{{ host.id }}"},description:{label:"Description"}},actions:{help:{awPopOver:"Select hosts by clicking on each host you wish to add. Add the selected hosts to the group by clicking the Select button.",dataContainer:"#form-modal .modal-content",mode:"all",awToolTip:"Click for help",dataTitle:"Selecting Hosts"}},fieldActions:{edit:{label:"Edit",ngClick:"editHost({{ host.id }})",icon:"icon-edit","class":"btn-xs",awToolTip:"Edit host",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteHost(host.id, host.name)",icon:"icon-trash","class":"btn-xs",awToolTip:"Delete host",dataPlacement:"top"}}}),angular.module("InventoriesListDefinition",[]).value("InventoryList",{name:"inventories",iterator:"inventory",selectTitle:"Add Inventories",editTitle:"Inventories",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},organization:{label:"Organization",ngBind:"inventory.summary_fields.organization.name",linkTo:"/#/organizations/{{ inventory.organization }}",sourceModel:"organization",sourceField:"name",excludeModal:!0},has_inventory_sources:{label:"Cloud sourced?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},has_active_failures:{label:"Failed hosts?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},inventory_sources_with_failures:{label:"Sync failures?",searchType:"gtzero",searchValue:"true",searchOnly:!0}},actions:{add:{mode:"all",ngClick:"addInventory()",awToolTip:"Create a new inventory"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",icon:"icon-comments-alt",mode:"all"}},fieldActions:{status:{ngHref:"inventory.status_link",iconClass:"{{ 'fa fa-cloud icon-cloud-' + inventory.status_class }}",awToolTip:"{{ inventory.status_tip }}",dataPlacement:"top"},failed_hosts:{ngHref:"inventory.failed_hosts_link",iconClass:"{{ 'fa icon-failures-' + inventory.failed_hosts_class }}",awToolTip:"{{ inventory.failed_hosts_tip }}",dataPlacement:"top"},edit:{label:"Edit",ngClick:"editInventoryProperties(inventory.id)",awToolTip:"Edit inventory",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteInventory(inventory.id, inventory.names')",awToolTip:"Delete inventory",dataPlacement:"top"}}}),angular.module("InventoryGroupsDefinition",[]).value("InventoryGroups",{name:"groups",iterator:"group",editTitle:"{{ inventory_name }}",showTitle:!1,well:!0,index:!1,hover:!1,hasChildren:!0,filterBy:"{ show: true }","class":"table-condensed table-no-border",fields:{name:{label:"Groups",key:!0,ngClick:"showHosts(group.id,group.group_id, false)",ngClass:"group.selected_class",hasChildren:!0,columnClass:"col-lg-9 col-md-9 col-sm-7 col-xs-7",nosort:!0,awDroppable:"{{ group.isDroppable }}",awDraggable:"{{ group.isDraggable }}",dataContainment:"#groups_table",dataTreeId:"{{ group.id }}",dataGroupId:"{{ group.group_id }}",dataType:"group"}},actions:{columnClass:"col-lg-3 col-md-3 col-sm-5 col-xs-5",create:{mode:"all",ngClick:"createGroup()",awToolTip:"Create a new group"},properties:{mode:"all",awToolTip:"Edit inventory properties",ngClick:"editInventoryProperties()"},refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refreshGroups()"},stream:{ngClick:"showGroupActivity()",awToolTip:"View Activity Stream",mode:"all"},help:{mode:"all",awToolTip:"Get help building your inventory",ngClick:"showGroupHelp()",id:"inventory-summary-help"}},fieldActions:{sync_status:{mode:"all",ngClick:"viewUpdateStatus(group.id, group.group_id)",ngShow:"group.id > 1",awToolTip:"{{ group.status_tooltip }}",dataTipWatch:"group.launch_tooltip",ngClass:"group.status_class",dataPlacement:"top"},failed_hosts:{mode:"all",awToolTip:"{{ group.hosts_status_tip }}",ngShow:"group.id > 1",dataPlacement:"top",ngClick:"showHosts(group.id, group.group_id, group.show_failures)",iconClass:"{{ 'fa icon-failures-' + group.hosts_status_class }}"},group_update:{mode:"all",ngClick:"updateGroup(group.id)",awToolTip:"{{ group.launch_tooltip }}",dataTipWatch:"group.launch_tooltip",ngShow:"group.id > 1 && (group.status !== 'running' && group.status !== 'pending' && group.status !== 'updating')",ngClass:"group.launch_class",dataPlacement:"top"},cancel:{mode:"all",ngClick:"cancelUpdate({{ group.id }})",awToolTip:"Cancel sync process","class":"red-txt",ngShow:"group.id > 1 && (group.status == 'running' || group.status == 'pending' || group.status == 'updating')",dataPlacement:"top"},edit:{mode:"all",ngClick:"editGroup({{ group.group_id + ',' + group.id }})",awToolTip:"Edit group",ngShow:"group.id > 1",dataPlacement:"top"},"delete":{mode:"all",ngClick:"deleteGroup({{ group.id + ',' + group.group_id }})",awToolTip:"Delete group",ngShow:"group.id != 1",dataPlacement:"top"}}}),angular.module("InventoryHostsDefinition",[]).value("InventoryHosts",{name:"hosts",iterator:"host",editTitle:"{{ selected_group }}",showTitle:!1,well:!0,index:!1,hover:!1,hasChildren:!0,"class":"table-condensed table-no-border",fields:{name:{key:!0,label:"Hosts",ngClick:"editHost(host.id)",searchPlaceholder:"search_place_holder",columnClass:"col-lg-9 col-md-9 col-sm-7 col-xs-7",dataHostId:"{{ host.id }}",dataType:"host",awDraggable:"true"},enabled:{label:"Disabled?",searchSingleValue:!0,searchType:"boolean",searchValue:"false",searchOnly:!0},has_active_failures:{label:"Failed jobs?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0}},fieldActions:{enabled_flag:{iconClass:"{{ 'fa icon-enabled-' + host.enabled }}",dataPlacement:"top",awToolTip:"{{ host.enabledToolTip }}",dataTipWatch:"host.enabledToolTip",ngClick:"toggleHostEnabled(host.id, host.has_inventory_sources)"},active_failures:{awPopOver:"{{ host.job_status_html }}",dataTitle:"{{ host.job_status_title }}",awToolTip:"{{ host.badgeToolTip }}",awTipPlacement:"top",dataPlacement:"left",iconClass:"{{ 'fa icon-failures-' + host.has_active_failures }}"},edit:{ngClick:"editHost(host.id)",icon:"icon-edit",awToolTip:"Edit host",dataPlacement:"top"},"delete":{ngClick:"deleteHost(host.id, host.name)",icon:"icon-trash",awToolTip:"Delete host",dataPlacement:"top"}},actions:{columnClass:"col-lg-3 col-md-3 col-sm-5 col-xs-5",create:{mode:"all",ngClick:"createHost()",ngHide:"selected_tree_id == 1",awToolTip:"Create a new host"},stream:{ngClick:"showHostActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("JobEventsListDefinition",[]).value("JobEventList",{name:"jobevents",iterator:"jobevent",editTitle:"Job Events",index:!1,hover:!0,hasChildren:!0,filterBy:"{ show: true }",navigationLinks:{details:{href:"/#/jobs/{{ job_id }}",label:"Status",icon:"icon-zoom-in",ngShow:"job_id !== null"},events:{href:"/#/jobs/{{ job_id }}/job_events",label:"Events",active:!0,icon:"icon-list-ul"},hosts:{href:"/#/jobs/{{ job_id }}/job_host_summaries",label:"Host Summary",icon:"icon-laptop"}},fields:{created:{label:"Created On",columnClass:"col-lg-1 col-md-1 hidden-sm hidden-xs",key:!0,nosort:!0,searchable:!1,link:!1},status:{label:"Status",showValue:!1,columnClass:"col-sm-1 col-xs-2 text-center",searchField:"failed",searchType:"boolean",searchOptions:[{name:"success",value:0},{name:"error",value:1}],nosort:!0,searchable:!1,ngClick:"viewJobEvent({{ jobevent.id }})",awToolTip:"{{ jobevent.statusBadgeToolTip }}",dataPlacement:"top",badgeIcon:"fa icon-job-{{ jobevent.status }}",badgePlacement:"left",badgeToolTip:"{{ jobevent.statusBadgeToolTip }}",badgeTipPlacement:"top",badgeNgClick:"viewJobEvent({{ jobevent.id }})"},event_display:{label:"Event",hasChildren:!0,ngClick:"toggleChildren(jobevent.id, jobevent.related.children)",nosort:!0,searchable:!1,ngClass:"{{ jobevent.class }}",appendHTML:"jobevent.event_detail"},host:{label:"Host",ngBind:"jobevent.summary_fields.host.name",ngHref:"{{ jobevent.hostLink }}",searchField:"hosts__name",nosort:!0,searchOnly:!1,id:"job-event-host-header","class":"break",columnClass:"col-lg-2 hidden-sm hidden-xs"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"}},fieldActions:{columnClass:"col-sm-1 col-xs-2",view:{label:"View",ngClick:"viewJobEvent(jobevent.id)",awToolTip:"View event details",dataPlacement:"top"}}}),angular.module("JobHostDefinition",[]).value("JobHostList",{name:"jobhosts",iterator:"jobhost",editTitle:"All summaries",index:!0,hover:!0,navigationLinks:{ngHide:"host_id !== null",details:{href:"/#/jobs/{{ job_id }}",label:"Status",icon:"icon-zoom-in",ngShow:"job_id !== null"},events:{href:"/#/jobs/{{ job_id }}/job_events",label:"Events",icon:"icon-list-ul"},hosts:{href:"/#/jobs/{{ job_id }}/job_host_summaries",label:"Host Summary",active:!0,icon:"icon-laptop"}},fields:{job:{label:"Job ID",ngClick:"showJob(jobhost.job)",columnShow:"host_id !== null",key:!0,desc:!0},host:{label:"Host",key:!0,sourceModel:"host",sourceField:"name",ngBind:"jobhost.host_name",ngHref:"jobhost.hostLinkTo"},status:{label:"Status",badgeNgHref:"{{ jobhost.statusLinkTo }}",badgeIcon:"fa icon-job-{{ jobhost.status }}",badgePlacement:"left",badgeToolTip:"{{ jobhost.statusBadgeToolTip }}",badgeTipPlacement:"top",ngHref:"{{ jobhost.statusLinkTo }}",awToolTip:"{{ jobhost.statusBadgeToolTip }}",dataPlacement:"top",searchField:"failed",searchType:"boolean",searchOptions:[{name:"success",value:0},{name:"error",value:1}]},failed:{label:"Job failed?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0,nosort:!0},ok:{label:"Success",searchable:!1},changed:{label:"Changed",searchable:!1},failures:{label:"Failure",searchable:!0,searchLabel:"Contains failed events?",searchType:"gtzero"},dark:{label:"Unreachable",searchable:!0,searchType:"gtzero",searchLabel:"Contains unreachable hosts?"},skipped:{label:"Skipped",searchable:!1}},actions:{help:{awPopOver:"
\n
Success
Tasks successfully executed on the host.
\n
Changed
Actions taken on the host.
\n
Failure
Tasks that failed on the host.
\n
Unreachable
Times the ansible server could not reach the host.
\n
Skipped
Tasks bypassed and not performed on the host due to prior task failure or the host being unreachable.
\n
\n",dataPlacement:"left",dataContainer:"body",mode:"all","class":"btn-xs btn-help",awToolTip:"Click for help",dataTitle:"Job Host Summary",id:"jobhost-help-button"},refresh:{mode:"all","class":"btn-xs",awToolTip:"Refresh the page",ngClick:"refresh()",ngShow:"host_id == null"}},fieldActions:{}}),angular.module("JobTemplatesListDefinition",[]).value("JobTemplateList",{name:"job_templates",iterator:"job_template",selectTitle:"Add Job Template",editTitle:"Job Templates",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{add:{mode:"all",ngClick:"addJobTemplate()",basePaths:["job_templates"],awToolTip:"Create a new template"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",icon:"icon-comments-alt",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editJobTemplate(job_template.id)",icon:"icon-edit",awToolTip:"Edit template","class":"btn-default btn-xs",dataPlacement:"top"},submit:{label:"Launch",icon:"icon-rocket",mode:"all","class":"btn-xs btn-success",ngClick:"submitJob(job_template.id)",awToolTip:"Start a job using this template",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteJobTemplate(job_template.id, job_template.name)",icon:"icon-trash","class":"btn-danger btn-xs",awToolTip:"Delete template",dataPlacement:"top"}}}),angular.module("JobsListDefinition",[]).value("JobList",{name:"jobs",iterator:"job",editTitle:"Jobs",index:!1,hover:!0,"class":"jobs-table",fields:{id:{label:"Job ID",key:!0,desc:!0,searchType:"int"},inventory:{label:"Inventory ID",searchType:"int",searchOnly:!0},created:{label:"Create On",link:!1,searchable:!1},job_template:{label:"Job Template",ngBind:"job.summary_fields.job_template.name",ngHref:"{{ '/#/job_templates/' + job.job_template }}",sourceModel:"job_template",sourceField:"name"},failed:{label:"Job failed?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0,nosort:!0},status:{label:"Status","class":"job-{{ job.status }}",searchType:"select",linkTo:"{{ job.statusLinkTo }}",searchOptions:[{name:"new",value:"new"},{name:"waiting",value:"waiting"},{name:"pending",value:"pending"},{name:"running",value:"running"},{name:"successful",value:"successful"},{name:"error",value:"error"},{name:"failed",value:"failed"},{name:"canceled",value:"canceled"}],badgeIcon:"fa icon-job-{{ job.status }}",badgePlacement:"left",badgeToolTip:"{{ job.statusBadgeToolTip }}",badgeTipPlacement:"top",badgeNgHref:"{{ job.statusLinkTo }}",awToolTip:"{{ job.statusBadgeToolTip }}",dataPlacement:"top"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"}},fieldActions:{submit:{label:"Relaunch",icon:"icon-rocket",mode:"all",ngClick:"submitJob(job.id, job.summary_fields.job_template.name)",awToolTip:"Start the job",dataPlacement:"top"},cancel:{label:"Stop",mode:"all",ngClick:"deleteJob(job.id)",awToolTip:"Cancel a running or pending job",ngShow:"job.status == 'pending' || job.status == 'running' || job.status == 'waiting'",dataPlacement:"top"},"delete":{label:"Delete",mode:"all",ngClick:"deleteJob(job.id)",awToolTip:"Delete the job",ngShow:"job.status != 'pending' && job.status != 'running' && job.status != 'waiting'",dataPlacement:"top"},dropdown:{type:"DropDown",label:"View",icon:"fa-search-plus","class":"btn-default btn-xs",options:[{ngClick:"editJob(job.id, job.summary_fields.job_template.name)",label:"Status"},{ngClick:"viewEvents(job.id, job.summary_fields.job_template.name)",label:"Events",ngHide:"job.status == 'new'"},{ngClick:"viewSummary(job.id, job.summary_fields.job_template.name)",label:"Host Summary",ngHide:"job.status == 'new'"}]}}}),angular.module("OrganizationListDefinition",[]).value("OrganizationList",{name:"organizations",iterator:"organization",selectTitle:"Add Organizations",editTitle:"Organizations",hover:!0,index:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{add:{mode:"all",ngClick:"addOrganization()",awToolTip:"Create a new organization"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editOrganization(organization.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit organization",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteOrganization(organization.id, organization.name)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete organization",dataPlacement:"top"}}}),angular.module("PermissionListDefinition",[]).value("PermissionList",{name:"permissions",iterator:"permission",selectTitle:"Add Permission",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',editTitle:"Permissions",index:!0,well:!0,fields:{name:{key:!0,label:"Name",ngClick:"editPermission(permission.id)"},inventory:{label:"Inventory",sourceModel:"inventory",sourceField:"name",ngBind:"permission.summary_fields.inventory.name"},project:{label:"Project",sourceModel:"project",sourceField:"name",ngBind:"permission.summary_fields.project.name"},permission_type:{label:"Permission"}},actions:{add:{mode:"all",ngClick:"addPermission()",awToolTip:"Add a new permission",ngShow:"PermissionAddAllowed"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editPermission(permission.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit permission",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deletePermission(permission.id, permission.name)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete permission",ngShow:"PermissionAddAllowed",dataPlacement:"top"}}}),angular.module("ProjectsListDefinition",[]).value("ProjectList",{name:"projects",iterator:"project",selectTitle:"Add Project",editTitle:"Projects",selectInstructions:"

Select existing projects by clicking each project or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new project by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",columnClass:"hidden-sm hidden-xs",excludeModal:!0},scm_type:{label:"Type",searchType:"select",searchOptions:[],excludeModal:!0,nosort:!0},status:{label:"Status",ngClick:"showSCMStatus(project.id)",awToolTip:"View details of last SCM Update",dataPlacement:"top",badgeIcon:"{{ 'fa icon-failures-' + project.badge }}",badgePlacement:"left",searchType:"select",searchOptions:[],excludeModal:!0},last_updated:{label:"Last Updated",type:"date",excludeModal:!0,searchable:!1}},actions:{add:{mode:"all",ngClick:"addProject()",awToolTip:"Create a new project"},help:{awPopOver:"
\n
Updating
A source control update is in progress.
\n
Never Updated
This project has not yet been updated from source control.
\n
Failed
An error occurred during the most recent source control update, click the status text for more information.
\n
Successful
TThe latest source control update completed successfully.
\n
Missing
The previously configured local project directory is missing.
\n
N/A
The project is not linked to source control, so updates are not applicable.
\n
\n",dataPlacement:"left",dataContainer:"body",mode:"all",awToolTip:"Click for help",awTipPlacement:"top"},refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editProject(project.id)",awToolTip:"Edit project properties",dataPlacement:"top"},scm_update:{label:"Update",ngClick:"SCMUpdate(project.id)",awToolTip:"{{ project.scm_update_tooltip }}",ngClass:"project.scm_type_class",dataPlacement:"top"},cancel:{label:"Stop",ngClick:"cancelUpdate(project.id, project.name)",awToolTip:"Cancel a running SCM update process",ngShow:"project.status == 'updating'",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteProject(project.id, project.name)",awToolTip:"Permanently remove project from the database",ngShow:"project.status !== 'updating'",dataPlacement:"top"}}}),angular.module("StreamListDefinition",[]).value("StreamList",{name:"activities",iterator:"activity",editTitle:"Activity Stream",selectInstructions:"",index:!1,hover:!0,"class":"table-condensed",searchWidgets:3,fields:{timestamp:{label:"Event Time",key:!0,desc:!0,noLink:!0,searchable:!1},user:{label:"Initiated by",ngBindHtml:"activity.user",sourceModel:"actor",sourceField:"username",searchPlaceholder:"Username",searchWidget:1},description:{label:"Action",ngBindHtml:"activity.description",nosort:!0,searchable:!1,columnClass:"col-lg-7"},system_event:{label:"System event",searchOnly:!0,searchType:"isnull",sourceModel:"actor",sourceField:"username",searchWidget:1},all_objects:{label:"All",searchOnly:!0,searchObject:"all",searchPlaceholder:"All resources",searchWidget:2},credential_search:{label:"Credential",searchOnly:!0,searchObject:"credential",searchPlaceholder:"Credential name",searchWidget:2,searchField:"object1"},group_search:{label:"Group",searchOnly:!0,searchObject:"group",searchPlaceholder:"Group name",searchWidget:2,searchField:"object1"},host_search:{label:"Host",searchOnly:!0,searchObject:"host",searchPlaceholder:"Host name",searchWidget:2,searchField:"object1"},inventory_search:{label:"Inventory",searchOnly:!0,searchObject:"inventory",searchPlaceholder:"Inventory name",searchWidget:2,searchField:"object1"},job_template_search:{label:"Job Template",searchOnly:!0,searchObject:"job_template",searchPlaceholder:"Job template name",searchWidget:2,searchField:"object1"},job_search:{label:"Job",searchOnly:!0,searchObject:"job",searchPlaceholder:"Job id",searchOnID:!0,searchWidget:2,searchField:"object1"},organization_search:{label:"Organization",searchOnly:!0,searchObject:"organization",searchPlaceholder:"Organization name",searchWidget:2,searchField:"object1"},project_search:{label:"Project",searchOnly:!0,searchObject:"project",searchPlaceholder:"Project name",searchWidget:2,searchField:"object1"},user_search:{label:"User",searchOnly:!0,searchObject:"user",searchPlaceholder:"Primary username",searchWidget:2,searchField:"object1"},all_objects3:{label:"All",searchOnly:!0,searchObject:"all",searchPlaceholder:"All related resources",searchWidget:3,searchField:"object2"},credential_search3:{label:"Credential",searchOnly:!0,searchObject:"credential",searchPlaceholder:"Related credential name",searchWidget:3,searchField:"object2"},group_search3:{label:"Group",searchOnly:!0,searchObject:"group",searchPlaceholder:"Related group name",searchWidget:3,searchField:"object2"},host_search3:{label:"Host",searchOnly:!0,searchObject:"host",searchPlaceholder:"Related host name",searchWidget:3,searchField:"object2"},inventory_search3:{label:"Inventory",searchOnly:!0,searchObject:"inventory",searchPlaceholder:"Related inventory name",searchWidget:3,searchField:"object2"},job_search3:{label:"Job",searchOnly:!0,searchObject:"job",searchPlaceholder:"Job id",searchOnID:!0,searchWidget:3,searchField:"object2"},job_template_search3:{label:"Job Template",searchOnly:!0,searchObject:"job_template",searchPlaceholder:"Related job template name",searchWidget:3,searchField:"object2"},organization_search3:{label:"Organization",searchOnly:!0,searchObject:"organization",searchPlaceholder:"Related organization name",searchWidget:3,searchField:"object2"},project_search3:{label:"Project",searchOnly:!0,searchObject:"project",searchPlaceholder:"Related project name",searchWidget:3,searchField:"object2"},user_search3:{label:"User",searchOnly:!0,searchObject:"user",searchPlaceholder:"Related username",searchWidget:3,searchField:"object2"}},actions:{refresh:{mode:"all","class":"btn-xs",awToolTip:"Refresh the page",ngClick:"refreshStream()"},close:{mode:"all",awToolTip:"Close Activity Stream view",ngClick:"closeStream()"}},fieldActions:{view:{label:"View",ngClick:"showDetail(activity.id)",icon:"fa-zoom-in","class":"btn-default btn-xs",awToolTip:"View event details",dataPlacement:"top"}}}),angular.module("TeamsListDefinition",[]).value("TeamList",{name:"teams",iterator:"team",selectTitle:"Add Team",editTitle:"Teams",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description"},organization:{label:"Organization",ngBind:"team.organization_name",sourceModel:"organization",sourceField:"name"}},actions:{add:{mode:"all",ngClick:"addTeam()",awToolTip:"Create a new team"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editTeam(team.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit team",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteTeam(team.id, team.name)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete team",dataPlacement:"top"}}}),angular.module("UserListDefinition",[]).value("UserList",{name:"users",iterator:"user",selectTitle:"Add Users",editTitle:"Users",selectInstructions:"

Select existing users by clicking each user or checking the related checkbox. When finished, click the blue Select button, located bottom right.

When available, a brand new user can be created by clicking the green Create New button.

",index:!0,hover:!0,fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},actions:{add:{label:"Create New",mode:"all",ngClick:"addUser()",basePaths:["organizations","users"],"class":"btn-xs",awToolTip:"Create a new user"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editUser(user.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit user",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteUser(user.id, user.username)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete user",dataPlacement:"top"}}}),angular.module("InventorySyncStatusWidget",["RestServices","Utilities"]).factory("InventorySyncStatus",["$rootScope","$compile",function(a,b){return function(a){function c(a){var b=a.label,c=a.count,d=a.fail,e=a.link,f=a.fail_link,g="\n"; +return g+='\n",g+=''+d+"",g+="\n",g+='',g+=''+c+"",g+="\n"}var d,e,f,g,h,i=a.scope,j=a.target,k=a.dashboard;if(d='
\n',d+='
Inventory Sync Status
\n',d+='
\n',d+='\n',d+="\n",d+="\n",d+='\n',d+='\n',d+='\n',d+="\n",d+="\n",d+="\n",d+=c({label:"Inventories",count:k.inventories&&k.inventories.total_with_inventory_source?k.inventories.total_with_inventory_source:0,fail:k.inventories&&k.inventories.inventory_failed?k.inventories.inventory_failed:0,link:"/#/inventories/?has_inventory_sources=true",fail_link:"/#/inventories/?inventory_sources_with_failures=true"}),e=0,f=0,k.inventory_sources)for(h in k.inventory_sources)e+=k.inventory_sources[h].total?k.inventory_sources[h].total:0,f+=k.inventory_sources[h].failed?k.inventory_sources[h].failed:0;d+=c({label:"Groups",count:e,fail:f,link:"/#/home/groups/?has_external_source=true",fail_link:"/#/home/groups/?status=failed"});for(h in k.inventory_sources)k.inventory_sources[h].total&&(d+=c({label:k.inventory_sources[h].label,count:k.inventory_sources[h].total?k.inventory_sources[h].total:0,fail:k.inventory_sources[h].failed?k.inventory_sources[h].failed:0,link:"/#/home/groups/?source="+h,fail_link:"/#/home/groups/?status=failed&source="+h}));d+="\n",d+="
FailedTotal
\n",d+="
\n",d+="
\n",d+="\n",g=angular.element(document.getElementById(j)),g.html(d),b(g)(i),i.$emit("WidgetLoaded")}}]),angular.module("JobStatusWidget",["RestServices","Utilities"]).factory("JobStatus",["$rootScope","$compile","Rest","GetBasePath","ProcessErrors","Wait",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.fail_link,f=a.count,g=a.fail;return b+="\n",b+='\n",b+=''+g+"",b+="\n",b+='',b+=''+f+"",b+="\n"}var d,e=a.scope,f=a.target,g=a.dashboard,h="";h='
\n',h+='
Job Status
\n',h+='
\n',h+='\n',h+="\n",h+="\n",h+='\n',h+='\n',h+='\n',h+="\n",h+="\n",h+="\n",h+=c({label:"Jobs",link:"/#/jobs",count:g.jobs&&g.jobs.total?g.jobs.total:0,fail:g.jobs&&g.jobs.failed?g.jobs.failed:0,fail_link:"/#/jobs/?status=failed"}),h+=c({label:"Inventories",link:"/#/inventories",count:g.inventories&&g.inventories.total?g.inventories.total:0,fail:g.inventories&&g.inventories.job_failed?g.inventories.job_failed:0,fail_link:"/#/inventories/?has_active_failures=true"}),h+=c({label:"Groups",link:"/#/home/groups",count:g.groups&&g.groups.total?g.groups.total:0,fail:g.groups&&g.groups.job_failed?g.groups.job_failed:0,fail_link:"/#/home/groups/?has_active_failures=true"}),h+=c({label:"Hosts",link:"/#/home/hosts",count:g.hosts&&g.hosts.total?g.hosts.total:0,fail:g.hosts&&g.hosts.failed?g.hosts.failed:0,fail_link:"/#/home/hosts/?has_active_failures=true"}),h+="\n",h+="
FailedTotal
\n",h+="
\n",h+="
\n",h+="\n",d=angular.element(document.getElementById(f)),d.html(h),b(d)(e),e.$emit("WidgetLoaded")}}]),angular.module("ObjectCountWidget",["RestServices","Utilities"]).factory("ObjectCount",["$rootScope","$compile","Rest","GetBasePath","ProcessErrors","Wait",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.count;return b+="\n",b+='\n",b+='',b+=''+e+"",b+="\n"}var d,e,f,g=a.scope,h=a.target,i=a.dashboard,j=["organizations","users","teams","credentials","projects","inventories","groups","hosts","job_templates","jobs"];for(e='
\n',e+='
System Summary
\n',e+='
\n',e+='\n',e+="\n",e+="\n",e+='\n',e+='\n',e+="\n",e+="\n",e+="\n",d=0;d\n",e+="
Total
\n",e+="
\n",e+="
\n",f=angular.element(document.getElementById(h)),f.html(e),b(f)(g),g.$emit("WidgetLoaded")}}]),angular.module("SCMSyncStatusWidget",["RestServices","Utilities"]).factory("SCMSyncStatus",["$rootScope","$compile",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.fail_link,f=a.count,g=a.fail;return b+="\n",b+=''+c+"\n",b+=''+g+"",b+="\n",b+='',b+=''+f+"",b+="\n"}var d,e,f,g,h,i,j=a.scope,k=a.target,l=a.dashboard;if(e='
\n',e+='
Project SCM Status
\n',e+='
\n',e+='\n',e+="\n",e+="\n",e+='\n',e+='\n',e+='\n',e+="\n",e+="\n",e+="\n",f=0,l.scm_types)for(h in l.scm_types)f+=l.scm_types[h].total?l.scm_types[h].total:0;e+=c({label:"Projects",link:"/#/projects",count:f,fail:l.projects&&l.projects.failed?l.projects.failed:0,fail_link:"/#/projects/?status=failed"}),i=[];for(h in l.scm_types)i.push(h);for(i.sort(),d=0;d\n",e+="
FailedTotal
\n",e+="
\n",e+="
\n",e+="\n",g=angular.element(document.getElementById(k)),g.html(e),b(g)(j),j.$emit("WidgetLoaded")}}]),angular.module("StreamWidget",["RestServices","Utilities","StreamListDefinition","SearchHelper","PaginationHelpers","RefreshHelper","ListGenerator","StreamWidget","AuthService"]).factory("setStreamHeight",[function(){return function(){var a=$("#stream-content").height(),b=parseInt($("#tab-content-container").css("min-height").replace(/px/,"")),c=a>b?a:b;$("#tab-content-container").css({"min-height":c})}}]).factory("ShowStream",["setStreamHeight","Authorization",function(a){return function(){var b=$("#stream-container");b.css({position:"absolute",top:0,left:0,width:"100%","min-height":"100%","background-color":"#FFF"}),a(),b.show("slide",{direction:"left"},{duration:500,queue:!1})}}]).factory("HideStream",["LoadBreadCrumbs",function(a){return function(){var b=$("#stream-container");b.hide("slide",{direction:"left"},{duration:500,queue:!1}),setTimeout(function(){b.detach(),b.empty(),b.unbind(),$("#tab-content-container").css({"min-height":0})},500),a()}}]).factory("StreamBreadCrumbs",["$rootScope","$location",function(a,b){return function(){a.breadcrumbs=[];var c,d,e,f,g=b.path().split("/");for(g.splice(0,1),e=0;e=f;f++)c+="/"+g[f];for(f=0;f0)for(f=0;e>=f;f++)c+="/"+g[f];else c="/"+g[e];d=g[e],d=d.charAt(0).toUpperCase()+d.slice(1)}a.breadcrumbs.push({path:c,title:d,ngClick:"closeStream('"+c+"')"})}}}]).factory("FixUrl",[function(){return function(a){return a.replace(/\/api\/v1\//,"/#/")}}]).factory("BuildUrl",[function(){return function(a){var b="/#/";switch(a.base){case"group":case"host":b+="home/"+a.base+"s/?id="+a.id;break;case"inventory":b+="inventories/"+a.id+"/";break;default:b+=a.base+"s/"+a.id+"/"}return b}}]).factory("BuildDescription",["FixUrl","BuildUrl",function(a,b){return function(a){function c(a){return a.replace(/^_deleted_\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+\+\d+:\d+_/,"")}var d,e,f,g,h,i,j,k;d=a.operation,d+=/e$/.test(a.operation)?"d ":"ed ",e=d,f=a.object1,g=a.object2,h=a.summary_fields[f]?a.summary_fields[f][0]:null,i=f===g?a.summary_fields[f][1]:a.summary_fields[g]?a.summary_fields[g][0]:null,("user"===f||"user"===g)&&(a.summary_fields.user[0].name=a.summary_fields.user[0].username),i&&i.name&&!/^_delete/.test(i.name)?(i.base=g,d+=g+' '+i.name+""+("disassociate"===a.operation?" from ":" to "),e+=g+" "+i.name+("disassociate"===a.operation?" from ":" to ")):g&&(j="",i&&i.name&&(j=" "+c(i.name)),d+=g+j+("disassociate"===a.operation?" from ":" to "),e+=g+j+("disassociate"===a.operation?" from ":" to ")),h&&h.name&&!/^\_delete/.test(h.name)?(h.base=f,d+=f+' '+h.name+"",e+=f+" "+h.name):f&&(j="",k="",!h||!h.name||h&&h.name&&/^_delete/.test(h.name)?a.changes&&a.changes.name?"string"==typeof a.changes.name?(j=" "+a.changes.name,k=j):"object"==typeof a.changes.name&&Array.isArray(a.changes.name)&&(j=" "+a.changes.name[0],k=j):"job"===f&&h&&a.changes&&a.changes.job_template?"delete"!==a.operation?(h.base=f,j=' '+h.id+" "+a.changes.job_template+"",k=" "+h.id+" "+a.changes.job_template):(j=" "+h.id+" "+a.changes.job_template,k=j):"job"===f&&h&&("delete"!==a.operation?(h.base=f,j=' '+h.id+"",k=" "+h.id):(j=" "+h.id,k=j)):h&&h.name&&(j=" "+c(h.name),k=j),d+=f+j,e+=f+k),a.description=d,a.description_nolink=e}}]).factory("ShowDetail",["$rootScope","Rest","Alert","GenerateForm","ProcessErrors","GetBasePath","FormatDate","ActivityDetailForm","Empty","Find",function(a,b,c,d,e,f,g,h,i,j){return function(a){var b,c,e,f=a.activity_id,i=a.scope,k=d,l=h,m=j({list:i.activities,key:"id",val:f});m&&(m.changes_stringified=JSON.stringify(m.changes,null," "),b=m.changes_stringified.match(/\n/g),c=b?b.length:1,c=1>c?3:10,l.fields.changes.rows=10,e=k.inject(l,{mode:"edit",modal:!0,related:!1}),e.changes=m.changes_stringified,e.user=(m.summary_fields.actor?m.summary_fields.actor.username:"system")+" on "+g(new Date(m.timestamps)),e.operation=m.description_nolink,e.formModalAction=function(){$("#form-modal").modal("hide")},$("#form-modal").on("show.bs.modal",function(){$("#form-modal-body").css({width:"auto",height:"auto","max-height":"100%"})}),e.formModalActionLabel="OK",e.formModalCancelShow=!1,e.formModalInfo=!1,e.formModalHeader="Event "+m.id,e.$$phase||e.$digest())}}]).factory("Stream",["$rootScope","$location","Rest","GetBasePath","ProcessErrors","Wait","StreamList","SearchInit","PaginateInit","GenerateList","FormatDate","ShowStream","HideStream","BuildDescription","FixUrl","BuildUrl","ShowDetail","StreamBreadCrumbs","setStreamHeight","Find","Store",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){return function(c){var e,f,o,v,w=g,x=d("activity_stream"),y=j,z=b.path().replace(/^\//,"").split("/")[0],A=c.scope,B=u("CurrentSearchParams"),C=c&&c.inventory_name?c.inventory_name:null,D=c&&c.url?c.url:null;a.flashMessage=null,D?x=D:"/home"!==b.path()&&(e="inventories"===z?"inventory":z.replace(/s$/,""),f=b.path().split("/"),f.splice(0,1),f.length>1&&/^\d+/.test(f[f.length-1])?(e=f[f.length-2],e="inventories"===e?"inventory":e.replace(/s$/,""),x+="?"+e+"__id="+f[f.length-1]):f.length>1?(e=f[f.length-1],e="inventories"===e?"inventory":e.replace(/s$/,""),x+="?or__object1="+e+"&or__object2="+e):x+="?or__object1="+e+"&or__object2="+e),$("#tab-content-container").append('
'),r(),C&&(o=t({list:a.breadcrumbs,key:"title",val:"{{ inventory_name }}"}),o&&(o.title=C)),l(),v=y.inject(w,{mode:"edit",id:"stream-content",searchSize:"col-lg-3",secondWidget:!0,activityStream:!0}),v.streamTitle=c&&c.title?c.title:null,v.closeStream=function(a){m(),v.searchCleanup&&v.searchCleanup(),B&&h({scope:A,set:B.set,list:B.list,url:B.defaultUrl,iterator:B.iterator,sort_order:B.sort_order,setWidgets:!1}),a&&b.path(a)},v.refreshStream=function(){v.search(w.iterator)},v.showDetail=function(a){q({scope:v,activity_id:a})},v.removeStreamPostRefresh&&v.removeStreamPostRefresh(),v.removeStreamPostRefresh=v.$on("PostRefresh",function(){var a,b,c,d,e,f;for(a=0;a'+v.activities[a].summary_fields.actor.username+"":"system",d=/^\_delete/,e=v.activities[a].object1,f=v.activities[a].object2,e&&v.activities[a].summary_fields[e]&&v.activities[a].summary_fields[e].name?d.test(v.activities[a].summary_fields[e].name)?v.activities[a].objects=v.activities[a].summary_fields[e].name:(c=p(v.activities[a].summary_fields.object1),v.activities[a].objects=''+v.activities[a].summary_fields[e].name+""):v.activities[a].object1&&(v.activities[a].objects=v.activities[a].object1),f&&v.activities[a].summary_fields[f]&&v.activities[a].summary_fields[f].name?d.test(v.activities[a].summary_fields.object2.name)?v.activities[a].objects+=","+v.activities[a].summary_fields[f].name:(c=p(v.activities[a].summary_fields.object2),v.activities[a].objects+=', '+v.activities[a].summary_fields[f].name+""):v.activities[a].object2&&(v.activities[a].objects+=", "+v.activities[a].object2),n(v.activities[a]);setTimeout(function(){s()},500)}),h({scope:v,set:w.name,list:w,url:x}),i({scope:v,list:w,url:x}),v.search(w.iterator)}}]),angular.module("AuthService",["ngCookies","Utilities"]).factory("Authorization",["$http","$rootScope","$location","$cookieStore","GetBasePath",function(a,b,c,d,e){return{setToken:function(a,c){d.remove("token"),d.remove("token_expires"),d.remove("userLoggedIn"),d.put("token",a),d.put("token_expires",c),d.put("userLoggedIn",!0),d.put("sessionExpired",!1),b.token=a,b.userLoggedIn=!0,b.token_expires=c,b.sessionExpired=!1},isUserLoggedIn:function(){return void 0===b.userLoggedIn&&(b.userLoggedIn=d.get("userLoggedIn"),b.sessionExpired=d.get("sessionExpired")),b.userLoggedIn},getToken:function(){return b.token?b.token:d.get("token")},retrieveToken:function(b,c){return a({method:"POST",url:e("authtoken"),data:{username:b,password:c}})},logout:function(){var a=angular.element(document.getElementById("main-view")).scope();a.$destroy(),b.$destroy(),d.remove("accordions"),d.remove("token"),d.remove("token_expires"),d.remove("current_user"),d.remove("lastPath"),d.put("userLoggedIn",!1),d.put("sessionExpired",!1),d.remove("lastPath","/home"),b.current_user={},b.license_tested=void 0,b.userLoggedIn=!1,b.sessionExpired=!1,b.token=null,b.token_expires=null,b.lastPath="/home"},getLicense:function(){return a({method:"GET",url:e("config"),headers:{Authorization:"Token "+this.getToken()}})},setLicense:function(a){a.tested=!1,d.put("license",a)},licenseTested:function(){var a,c;return void 0!==b.license_tested?c=b.license_tested:(a=d.get("license"),c=a&&void 0!==a.tested?a.tested:!1),c},getUser:function(){return a({method:"GET",url:"/api/v1/me/",headers:{Authorization:"Token "+this.getToken()}})},setUserInfo:function(a){b.current_user=a.results[0],d.put("current_user",a.results[0])},restoreUserInfo:function(){b.current_user=d.get("current_user")},getUserInfo:function(a){var c;return b.current_user?b.current_user[a]:(this.restoreUserInfo(),c=d.get("current_user"),c[a])}}}]),angular.module("InventoryTree",["Utilities","RestServices","GroupsHelper","PromptDialog"]).factory("SortNodes",[function(){return function(a){var b,c,d=[],e=[];for(b=0;b0?!0:!1,has_inventory_sources:s[e].has_inventory_sources,id:r,source:s[e].summary_fields.inventory_source.source,group_id:s[e].id,event_level:c,children:i,ngicon:s[e].children.length>0?"fa fa-minus-square-o node-toggle":"fa fa-square-o node-no-toggle",ngclick:"toggle("+r+")",related:{children:s[e].children.length>0?s[e].related.children:"",inventory_source:s[e].related.inventory_source},status:s[e].summary_fields.inventory_source.status,status_class:k["class"],status_tooltip:k.tooltip,launch_tooltip:k.launch_tip,launch_class:k.launch_class,hosts_status_tip:n.tooltip,show_failures:n.failures,hosts_status_class:n["class"],selected_class:"",show:!0,isDraggable:!0,isDroppable:!0},q.push(o),p&&o.group_id===p&&(m.selected_tree_id=r,m.selected_group_id=o.group_id),s[e].children.length>0&&j(s[e].children,r,c+1)}}function k(){e("start"),a.setUrl(b("inventory")+l+"/"),a.get().success(function(a){m.$emit("buildAllGroups",a.name,a.related.tree,a.related.groups)}).error(function(a,b){e("stop"),c(m,a,b,null,{hdr:"Error!",msg:"Failed to get inventory: "+l+". GET returned: "+b})})}var l=h.inventory_id,m=h.scope,n=h.refresh,o=h.emit,p=h.new_group_id,q=[],r=1;m.buildAllGroupsRemove&&m.buildAllGroupsRemove(),m.buildAllGroupsRemove=m.$on("buildAllGroups",function(b,d,f){a.setUrl(f),a.get().success(function(a){i(a),j(a,0,0),m.autoShowGroupHelp=0===a.length?!0:!1,n?(m.groups=q,m.$emit("GroupTreeRefreshed",d,q,o)):m.$emit("GroupTreeLoaded",d,q,o)}).error(function(a,b){e("stop"),c(m,a,b,null,{hdr:"Error!",msg:"Failed to get inventory tree for: "+l+". GET returned: "+b})})}),k()}}]).factory("UpdateGroup",["ApplyEllipsis","GetSyncStatusMsg","Empty",function(a,b,c){return function(d){var e,f,g,h,i,j=d.scope,k=d.group_id,l=d.properties;for(e=0;e\n',m+='\n",m+="\n",i=angular.element(document.getElementById("inventory-modal-container")),i.empty().append(m),a(i)(j),$("#copy-prompt-modal").modal({backdrop:"static",keyboard:!0,show:!0}),j.moveGroup=function(){var a,b,i;$("#copy-prompt-modal").modal("hide"),e("start"),j.removeGroupRemove&&j.removeGroupRemove(),j.removeGroupRemove=j.$on("removeGroup",function(){l.parent>0?(i=d({list:j.groups,key:"id",val:l.parent}),a=h("base")+"groups/"+i.group_id+"/children/",f.setUrl(a),f.post({id:l.group_id,disassociate:1}).success(function(){j.$emit("GroupDeleteCompleted")}).error(function(a,b){e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to remove "+l.name+" from "+i.name+". POST returned status: "+b})})):j.$emit("GroupDeleteCompleted")}),a=g(k.group_id)?h("inventory")+j.inventory_id+"/groups/":h("base")+"groups/"+k.group_id+"/children/",b={id:l.group_id,name:l.name,description:l.description,inventory:j.inventory_id},f.setUrl(a),f.post(b).success(function(){j.$emit("removeGroup")}).error(function(a,b){var d=g(k.group_id)?"inventory":k.name;e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+d+". POST returned status: "+b})})},j.copyGroup=function(){$("#copy-prompt-modal").modal("hide"),e("start");var a=g(k.group_id)?h("inventory")+j.inventory_id+"/groups/":h("base")+"groups/"+k.group_id+"/children/",b={id:l.group_id,name:l.name,description:l.description,inventory:j.inventory_id};f.setUrl(a),f.post(b).success(function(){j.$emit("GroupDeleteCompleted")}).error(function(a,b){var d=g(k.group_id)?"inventory":k.name;e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+d+". POST returned status: "+b})})}}}]).factory("CopyMoveHost",["$compile","Alert","ProcessErrors","Find","Wait","Rest","Empty","GetBasePath",function(a,b,c,d,e,f,g,h){return function(b){var g,i,j=b.scope,k=d({list:j.groups,key:"id",val:b.target_tree_id}),l=d({list:j.hosts,key:"id",val:b.host_id}),m=!1,n="";if(l.summary_fields.all_groups)for(i=0;i\n',n+='\n",n+="\n",n+="\n",g=angular.element(document.getElementById("inventory-modal-container")),g.empty().append(n),a(g)(j),$("#copy-alert-modal").modal({backdrop:"static",keyboard:!0,show:!0})):(n="",n+='\n",g=angular.element(document.getElementById("inventory-modal-container")),g.empty().append(n),a(g)(j),$("#copy-prompt-modal").modal({backdrop:"static",keyboard:!0,show:!0}),j.copyHost=function(){$("#copy-prompt-modal").modal("hide"),e("start"),f.setUrl(h("groups")+k.group_id+"/hosts/"),f.post(l).success(function(){j.$emit("GroupTreeRefreshed")}).error(function(a,b){e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+k.name+". POST returned status: "+b})})})}}]),angular.module("RestServices",["ngCookies","AuthService"]).factory("Rest",["$http","$rootScope","$cookieStore","$q","Authorization",function(a,b,c,d,e){return{headers:{},setUrl:function(a){this.url=a},checkExpired:function(){return b.sessionTimer.isExpired()},pReplace:function(){var a,b;for(a in this.params)b=new RegExp("\\:"+a,"gm"),b.test(this.url)&&(this.url=this.url.replace(b,this.params[a]),delete this.params[a])},createResponse:function(a,b){var c=d.reject({data:a,status:b});return c.success=function(a){return c.then(function(b){a(b.data,b.status)},null),c},c.error=function(a){return c.then(null,function(b){a(b.data,b.status)}),c},c},setHeader:function(a){for(var b in a)this.headers[b]=a[b]},get:function(b){b=b?b:{},this.params=b.params?b.params:null,this.pReplace();var c=this.checkExpired(),d=e.getToken();return c?this.createResponse({detail:"Token is expired"},401):d?(this.setHeader({Authorization:"Token "+d}),this.setHeader({"X-Auth-Token":"Token "+d}),a({method:"GET",url:this.url,headers:this.headers,params:this.params})):this.createResponse({detail:"Invalid token"},401)},post:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"POST",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},put:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"PUT",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},destroy:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"DELETE",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},options:function(){var b=e.getToken(),c=this.checkExpired();return c?this.createResponse({detail:"Token is expired"},401):b?(this.setHeader({Authorization:"Token "+b}),this.setHeader({"X-Auth-Token":"Token "+b}),a({method:"OPTIONS",url:this.url,headers:this.headers})):this.createResponse({detail:"Invalid token"},401)}}}]),angular.module("TimerService",["ngCookies","Utilities"]).factory("Timer",["$rootScope","$cookieStore","$location","GetBasePath","Empty",function(a,b){return{sessionTime:null,timeout:null,getSessionTime:function(){return this.sessionTime?this.sessionTime:b.get("sessionTime")},isExpired:function(){var a=this.getSessionTime(),b=(new Date).getTime();return 0>=a-b?!0:(this.moveForward(),!1)},expireSession:function(){this.sessionTime=0,a.sessionExpired=!0,b.put("sessionExpired",!0)},moveForward:function(){var c=(new Date).getTime()+1e3*$AnsibleConfig.session_timeout;this.sessionTime=c,b.put("sessionTime",c),a.sessionExpired=!1,b.put("sessionExpired",!1)},init:function(){return this.moveForward(),this}}}]),angular.module("Utilities",["RestServices","Utilities"]).factory("ClearScope",[function(){return function(a){var b,c=document.getElementById(a);c&&(b=angular.element(c).scope(),b.$destroy()),$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()});try{$("#help-modal").dialog("close")}catch(d){}$(window).unbind("resize")}}]).factory("Empty",[function(){return function(a){return null===a||void 0===a||""===a?!0:!1}}]).factory("ToggleClass",function(){return function(a,b){$(a)&&$(a).hasClass(b)?$(a).removeClass(b):$(a)&&$(a).addClass(b)}}).factory("Alert",["$rootScope",function(a){return function(b,c,d,e,f,g){f?(a.alertHeader2=b,a.alertBody2=c,a.alertClass2=d?d:"alert-danger",$("#alert-modal2").modal({show:!0,keyboard:!0,backdrop:"static"}),a.disableButtons2=g?!0:!1,e&&$("#alert-modal2").on("hidden",function(){e()}),$(document).bind("keydown",function(a){27===a.keyCode&&($("#alert-modal2").modal("hide"),e&&e())})):(a.alertHeader=b,a.alertBody=c,a.alertClass=d?d:"alert-danger",$("#alert-modal").modal({show:!0,keyboard:!0,backdrop:"static"}),$(document).bind("keydown",function(a){27===a.keyCode&&($("#alert-modal").modal("hide"),e&&e())}),a.disableButtons=g?!0:!1,e&&$("#alert-modal").on("hidden",function(){e()}))}}]).factory("ProcessErrors",["$rootScope","$cookieStore","$log","$location","Alert","Wait",function(a,b,c,d,e,f){return function(b,c,g,h,i){var j,k,l;if(f("stop"),$AnsibleConfig.debug_mode&&console&&(console.log("Debug status: "+g),console.log("Debug data: "),console.log(c)),403===g)l="The API responded with a 403 Access Denied error. ",l+=c.detail?"Detail: "+c.detail:"Please contact your system administrator.",e(i.hdr,l);else if(401===g&&c.detail&&"Token is expired"===c.detail||401===g&&c.detail&&"Invalid token"===c.detail)a.sessionTimer.expireSession(),d.url("/login");else if(c.non_field_errors)e("Error!",c.non_field_errors);else if(c.detail)e(i.hdr,i.msg+" "+c.detail);else if(c.__all__)e("Error!",c.__all__);else if(h){k=!1;for(j in h.fields)c[j]&&h.fields[j].tab&&$("#"+h.name+'_tabs a[href="#'+h.fields[j].tab+'"]').tab("show"),h.fields[j].realName&&c[h.fields[j].realName]&&(b[j+"_api_error"]=c[h.fields[j]][0],$('[name="'+h.fields[j].realName+'"]').addClass("ng-invalid"),k=!0),h.fields[j].sourceModel?c[j]&&(b[h.fields[j].sourceModel+"_"+h.fields[j].sourceField+"_api_error"]=c[j][0],$('[name="'+h.fields[j].sourceModel+"_"+h.fields[j].sourceField+'"]').addClass("ng-invalid"),k=!0):c[j]&&(b[j+"_api_error"]=c[j][0],$('[name="'+j+'"]').addClass("ng-invalid"),k=!0); +!k&&i&&e(i.hdr,i.msg)}else e(i.hdr,i.msg)}}]).factory("LoadBreadCrumbs",["$rootScope","$routeParams","$location","Empty",function(a,b,c,d){return function(b){function e(a){return a.toUpperCase()}function f(a){return"ies"===a?"y":""}var g,h,i,j,k,l,m,n;if(!d(b)){for(h=!1,j=0;j1)for(j=0;j0&&k[j].match(/\d+/)){for(m=k[j-1],n=m.replace(/(ies$|s$)/,f),n=n.charAt(0).toUpperCase()+n.slice(1),h=!1,i=0;i\n",b+='
\n',b+='',b+="
\n",b+='
'+a.box+"
",b+=f&&a.autoOffNotice?'
\n':""}var h,i,j,k,l=!1;e=a,j=d.story.width?d.story.width:510,k=d.story.height?d.story.height:600,i=$(document).width(),j=j>i?i:j;try{l=$("#help-modal").dialog("isOpen")}catch(m){}l?$("#help-modal").html(g(d.story.steps[e])):(h=[],d.story.steps.length>1&&(h.push({text:"Prev",click:function(a){e-1===0&&$(a.target).button("disable"),e-10&&$(a.target).prev().button("enable"),e+1===d.story.steps.length-1&&$(a.target).button("disable"),b(e+1)}})),h.push({text:"Close",click:function(){$("#help-modal").dialog("close")}}),$("#help-modal").html(g(d.story.steps[e])).dialog({position:{my:"center top",at:"center top+150",of:"body"},title:d.story.hdr,width:j,height:k,buttons:h,closeOnEscape:!0,show:500,hide:500,resizable:!1,close:function(){$("#help-modal").empty()}}),$(".ui-dialog-buttonset button").each(function(){var a,b,c;c=$(this).text(),"Close"===c?(b="fa-times",a="btn btn-default",$(this).attr({"class":a}).html(' Close')):"Prev"===c?(b="fa-chevron-left",a="btn btn-primary",$(this).attr({"class":a}).html(' Prev')):(b="fa-chevron-right",a="btn btn-primary",$(this).attr({"class":a}).html('Next ').css({"margin-right":"20px"}))}),$('.ui-dialog[aria-describedby="help-modal"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$("#auto-off-checkbox").click(function(){$('input[name="auto-off-checkbox"]:checked').length?c("inventoryAutoHelp","off"):c("inventoryAutoHelp","on")}))}var d=a.defn,e=a.step,f=a.autoShow||!1;b(0)}}]).factory("ReturnToCaller",["$location","Empty",function(a,b){return function(c){var d,e=a.path().replace(/^\//,"").split("/"),f="";for(c=b(c)?e.length-1:c+1,d=0;c>d;d++)f+="/"+e[d];a.path(f)}}]).factory("FormatDate",["$filter",function(a){return function(b){return a("date")(b,"MM/dd/yy HH:mm:ss")}}]).factory("Wait",["$rootScope",function(a){return function(b){var c,d,e,f,g,h;"start"!==b||a.waiting?"stop"===b&&a.waiting&&$(".spinny, .overlay").fadeOut(400,function(){a.waiting=!1}):(a.waiting=!0,c=$(window).width(),d=$(window).height(),e=$(".spinny").width(),f=$(".spinny").height(),g=(c-e)/2,h=(d-f)/2,$(".overlay").css({width:$(document).width(),height:$(document).height()}).fadeIn(),$(".spinny").css({top:h,left:g}).fadeIn(400))}}]).factory("HideElement",[function(){return function(a,b){var c=$(a),d=c.css("width"),e=c.css("height"),f=c.position(),g=c.parent(),h=c.css("border-radius"),i=c.css("background-color"),j=c.css("margin"),k=c.css("padding");g.append('
'),$("#curtain-div").show(0,b)}}]).factory("ShowElement",[function(){return function(){$("#curtain-div").fadeOut(500,function(){$(this).remove()})}}]).factory("GetChoices",["Rest","ProcessErrors",function(a,b){return function(c){var d=c.scope,e=c.url,f=c.field,g=c.variable,h=c.callback,i=c.choice_name;d[g]?d[g].length=0:d[g]=[],a.setUrl(e),a.options().success(function(a){var b,c;for(b=i?a.actions.GET[f][i]:a.actions.GET[f].choices,c=0;c
. Use the Refresh button to monitor the status.","alert-info"):o({scope:A,group_id:d,url:A.group_update_url,group_name:A.name,group_source:A.source.value})},A.sourceChange=function(){v({scope:A,form:g})}}}]).factory("GroupsDelete",["$rootScope","$location","$log","$routeParams","Rest","Alert","GroupForm","GenerateForm","Prompt","ProcessErrors","GetBasePath","Wait","BuildTree","Find",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return function(a){var b,c=a.scope,d=a.tree_id,f=a.inventory_id,g=n({list:c.groups,key:"id",val:d}),h=k("inventory")+f+"/groups/";b=function(){$("#prompt-modal").on("hidden.bs.modal",function(){l("start")}),$("#prompt-modal").modal("hide"),e.setUrl(h),e.post({id:g.group_id,disassociate:1}).success(function(){$("#prompt-modal").off(),c.$emit("GroupDeleteCompleted")}).error(function(a,b){l("stop"),j(c,a,b,null,{hdr:"Error!",msg:"Call to "+h+" failed. POST returned status: "+b})})},i({hdr:"Delete Group",body:"

Are you sure you want to delete group "+g.name+"?

",action:b,"class":"btn-danger"})}}]).factory("ShowUpdateStatus",["$rootScope","$location","$log","$routeParams","Rest","Alert","GenerateForm","Prompt","ProcessErrors","GetBasePath","FormatDate","InventoryStatusForm","Wait","Empty","WatchInventoryWindowResize",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return function(a){function b(a){var b,d;return b=a.match(/\n/g),d=b?b.length:1,d>c?c:d}var c,d,h,j,n,p,q,r=a.group_name,s=a.last_update,t=g,u=l,v=a.license_error;void 0===s||null===s||""===s?(m("stop"),f("Missing Configuration","The selected group is not configured for inventory sync. Edit the group and provide Source information.","alert-info")):(d='
\n
\n',$("#inventory-modal-container").empty().append(d),h=t.inject(u,{mode:"edit",id:"form-container",breadCrumbs:!1,related:!1}),j=$(document).width(),n=$("body").height(),j>1199?(p=675,q=750>n?n-20:750,c=18):1199>=j&&j>=768?(p=550,q=620>n?n-15:620,c=12):(p=j-20,q=500>n?n:500,c=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:p,height:q,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#inventory-modal-container").empty(),o()},open:function(){m("stop")}}),e.setUrl(s),e.get().success(function(a){for(var c in u.fields)a[c]&&(h[c]="created"===c?k(new Date(a[c])):a[c]);h.license_error=v,h.status_rows=b(a.status),h.stdout_rows=b(a.result_stdout),h.traceback_rows=b(a.result_traceback),$("#status-modal-dialog").dialog("open")}).error(function(a,b){$("#form-modal").modal("hide"),i(h,a,b,null,{hdr:"Error!",msg:"Failed to retrieve last update: "+s+". GET status: "+b})}))}}]),angular.module("HostsHelper",["RestServices","Utilities","ListGenerator","HostListDefinition","SearchHelper","PaginationHelpers","ListGenerator","AuthService","HostsHelper","InventoryHelper","RelatedSearchHelper","InventoryFormDefinition","SelectionHelper","HostGroupsFormDefinition"]).factory("SetEnabledMsg",[function(){return function(a){a.enabledToolTip=a.has_inventory_sources?a.enabled?"Host is available":"Host is not available":a.enabled?"Host is available. Click to toggle.":"Host is not available. Click to toggle."}}]).factory("SetHostStatus",["SetEnabledMsg",function(a){return function(b){b.activeFailuresLink="/#/hosts/"+b.id+"/job_host_summaries/?inventory="+b.inventory+"&host_name="+encodeURI(b.name),b.has_active_failures===!0?(b.badgeToolTip="Most recent job failed. Click to view jobs.",b.active_failures="failed"):b.has_active_failures===!1&&null===b.last_job?(b.has_active_failures="none",b.badgeToolTip="No job data available.",b.active_failures="n/a"):b.has_active_failures===!1&&null!==b.last_job&&(b.badgeToolTip="Most recent job successful. Click to view jobs.",b.active_failures="success"),b.enabled_flag=b.enabled,a(b)}}]).factory("SetStatus",["SetEnabledMsg","Empty",function(a,b){return function(c){function d(a){return a.length>25?a.substr(0,25)+"...":a}function e(a){var b,c,e;if(a.has_active_failures===!0||a.has_active_failures===!1&&null!==a.last_job)if(a.has_active_failures===!0?(a.badgeToolTip="Most recent job failed. Click to view jobs.",a.active_failures="failed"):(a.badgeToolTip="Most recent job successful. Click to view jobs.",a.active_failures="success"),a.summary_fields.recent_jobs.length>0){for(e=a.summary_fields.recent_jobs.sort(function(a,b){return-1*(a-b)}),h="Recent Jobs",g='\n',g+="\n",g+="\n",g+="\n",g+="\n",g+="\n",g+="\n",b=0;b\n",g+='\n",g+='\n',g+='\n',g+='\n",g+="\n";g+="\n",g+="
ID\n",g+='Status\n',g+="ViewName\n",g+="
'+c.id+"Events Hosts'+d(c.name)+"
\n"}else h="No job data",g="

No recent job data available for this host.

";else a.has_active_failures===!1&&null===a.last_job&&(a.has_active_failures="none",a.badgeToolTip="No job data available.",a.active_failures="n/a");a.job_status_html=g,a.job_status_title=h}var f,g,h,i=c.scope,j=c.host;if(b(j))for(f=0;fAre you sure you want to delete host "+j+" from group "+n.name+"?

":"

Are you sure you want to delete host "+j+"?

",g({hdr:"Delete Host",body:c,action:b,"class":"btn-danger"})}}]).factory("EditHostGroups",["$rootScope","$location","$log","$routeParams","Rest","Alert","GenerateForm","Prompt","ProcessErrors","GetBasePath","HostsReload","ParseTypeChange","Wait",function(a,b,c,d,e,f,g,h,i,j,k,l,m){return function(a){var b,c,d,f,h,l=a.host_id,n=a.inventory_id,o=g,p=[];for(c='
\n',c+='
\n',c+="\n",c+='\n',c+="
\n",c+='
\n',c+="\n",c+='\n',c+="
\n",c+="
\n",c+='
\n',c+='
\n',c+='\n',c+='\n',c+="

(move selected groups)

\n",c+="
\n",c+="
\n",d=j("hosts")+l+"/",f=o.inject(null,{mode:"edit",modal:!0,related:!1,html:c}),b=0;bGroups',f.formModalCancelShow=!0,f.formModalActionDisabled=!0,$("#form-modal .btn-none").removeClass("btn-none").addClass("btn-success"),f.hostGroupChangeRemove&&f.hostGroupChangeRemove(),f.hostGroupChangeRemove=f.$on("hostGroupChange",function(){p.pop(),0===p.length&&(h=function(){setTimeout(function(){m("stop")},500)},k({scope:f,inventory_id:n,group_id:f.group_id,action:h}))}),f.formModalAction=function(){var a,b,c;for($("#form-modal").modal("hide"),m("start"),a=0;a0?(f.assignedGroups=null,f.leftButtonDisabled=!0,f.rightButtonDisabled=!1):f.rightButtonDisabled=!0},f.rightChange=function(){null!==f.assignedGroups&&f.assignedGroups.length>0?(f.selectedGroups=null,f.leftButtonDisabled=!1,f.rightButtonDisabled=!0):f.leftButtonDisabled=!0},f.moveLeft=function(){var a,b,c,d;for(a=0;af.available_groups[b].name.toLowerCase()&&f.assignedGroups[a].name.toLowerCase()f.host_groups[b].name.toLowerCase()&&f.selectedGroups[a].name.toLowerCase()0){for(j("stop"),u+='
\n',u+=w?w:"",o=0;o\n',u+='\n",u+='
\n',u+='A value is required!\n',u+='\n',u+="
\n",u+="\n",n=l.associated,l=p.fields[l.associated],q[n]="",u+='
\n',u+='\n",u+='
\n',u+='A value is required!\n',l.awPassMatch&&(u+='Must match Password value\n'),u+='\n',u+="
\n",u+="
\n";u+="\n",m=angular.element(document.getElementById("password-body")),m.html(u),c(m.contents())(q),$("#password-modal").modal(),$("#password-modal").on("shown.bs.modal",function(){$("#password-body").find('input[type="password"]:first').focus()})}else q.startJob()}}]).factory("SubmitJob",["PromptPasswords","$compile","Rest","$location","GetBasePath","CredentialList","LookUpInit","CredentialForm","ProcessErrors","JobTemplateForm","Wait",function(a,b,c,d,e,f,g,h,i,j,k){return function(b){function l(b){var e,f,g;m.credentialWatchRemove&&m.credentialWatchRemove(),e=(new Date).toISOString(),f=b.related.jobs?b.related.jobs:b.related.job_template+"jobs/",g=o?o:b.name,k("start"),c.setUrl(f),c.post({name:g+" "+e,description:b.description,job_template:b.id,inventory:b.inventory,project:b.project,playbook:b.playbook,credential:b.credential,forks:b.forks,limit:b.limit,verbosity:b.verbosity,extra_vars:b.extra_vars}).success(function(b){m.job_id=b.id,b.passwords_needed_to_start.length>0?a({scope:m,passwords:b.passwords_needed_to_start,start_url:b.related.start,form:h}):(c.setUrl(b.related.start),c.post().success(function(){k("stop");var a=d.path().replace(/^\//,"").split("/")[0];"jobs"===a?m.refresh():d.path("/jobs")}).error(function(a,b){i(m,a,b,null,{hdr:"Error!",msg:"Failed to start job. POST returned status: "+b})}))}).error(function(a,b){k("stop"),i(m,a,b,null,{hdr:"Error!",msg:"Failed to create job. POST returned status: "+b})})}var m=b.scope,n=b.id,o=b.template?b.template:null,p=d.path().replace(/^\//,"").split("/")[0],q=e(p)+n+"/";k("start"),c.setUrl(q),c.get().success(function(a){m.credential="",""===a.credential||null===a.credential?(k("stop"),m.credentialWatchRemove&&m.credentialWatchRemove(),m.credentialWatchRemove=m.$watch("credential",function(b,c){b!==c&&""!==m.credential&&null!==m.credential&&void 0!==m.credential&&(a.credential=m.credential,l(a))}),g({scope:m,form:j,current_item:null,list:f,field:"credential",hdr:"Credential Required"}),m.lookUpCredential()):l(a)}).error(function(a,b){i(m,a,b,null,{hdr:"Error!",msg:"Failed to get job template details. GET returned status: "+b})})}}]).factory("ProjectUpdate",["PromptPasswords","$compile","Rest","$location","GetBasePath","ProcessErrors","Alert","ProjectsForm","Wait",function(a,b,c,d,e,f,g,h,i){return function(b){var d=b.scope,j=b.project_id,k=e("projects")+j+"/update/";d.removeUpdateSubmitted&&d.removeUpdateSubmitted(),d.removeUpdateSubmitted=d.$on("UpdateSubmitted",function(){i("stop"),g("Update Started","The request to start the SCM update process was submitted. To monitor the update status, refresh the page by clicking the Refresh button.","alert-info"),d.refresh()}),d.removeSCMSubmit&&d.removeSCMSubmit(),d.removeSCMSubmit=d.$on("SCMSubmit",function(b,c,e){a({scope:d,passwords:c,start_url:k,form:h,extra_html:e})}),i("start"),c.setUrl(k),c.get().success(function(a){var b,c;if(i("stop"),a.can_update){for(c="",b=0;b\n',c+='\n',c+='
\n',c+=' button.',"alert-info"),d.removeHostReloadComplete&&d.removeHostReloadComplete()}),d.removeUpdateSubmitted&&d.removeUpdateSubmitted(),d.removeUpdateSubmitted=d.$on("UpdateSubmitted",function(a,b){"started"===b&&(d.refreshGroups?(d.selected_tree_id=k,d.selected_group_id=i,d.refreshGroups()):d.refresh&&d.refresh(),d.$emit("HostReloadComplete"))}),d.removeInventorySubmit&&d.removeInventorySubmit(),d.removeInventorySubmit=d.$on("InventorySubmit",function(b,c,f){a({scope:d,passwords:c,start_url:e,form:h,extra_html:f})}),j("start"),c.setUrl(e),c.get().success(function(a){a.can_update?d.$emit("InventorySubmit",a.passwords_needed_to_update):(j("stop"),g("Permission Denied","You do not have access to run the update. Please contact your system administrator.","alert-danger"))}).error(function(a,b){j("stop"),f(d,a,b,null,{hdr:"Error!",msg:"Failed to get inventory_source details. "+e+"GET status: "+b})})}}]),angular.module("JobsHelper",["Utilities","FormGenerator","JobSummaryDefinition","InventoryHelper"]).factory("JobStatusToolTip",[function(){return function(a){var b;switch(a){case"successful":case"success":b="There were no failed tasks.";break;case"failed":b="Some tasks encountered errors.";break;case"canceled":b="Stopped by user request.";break;case"new":b="In queue, waiting on task manager.";break;case"waiting":b="SCM Update or Inventory Update is executing.";break;case"pending":b="Not in queue, waiting on task manager.";break;case"running":b="Playbook tasks executing."}return b}}]).factory("ShowJobSummary",["Rest","Wait","GetBasePath","FormatDate","ProcessErrors","GenerateForm","JobSummary","WatchInventoryWindowResize",function(a,b,c,d,e,f,g,h){return function(i){function j(a){var b=a.match(/\n/g),c=b?b.length:1;return c>p?20:c}var k,l,m,n,o,p,q,r,s=i.job_id,t=f,u=g;r='
\n',$("#inventory-modal-container").empty().append(r),k=t.inject(u,{mode:"edit",id:"form-container",breadCrumbs:!1,related:!1}),l=$(document).width(),m=$("body").height(),l>1199?(n=675,o=750>m?m-20:750,p=20):1199>=l&&l>=768?(n=550,o=620>m?m-15:620,p=15):(n=l-20,o=500>m?m:500,p=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:n,height:o,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#inventory-modal-container").empty(),h()},open:function(){b("stop")}}),b("start"),q=c("jobs")+s+"/",a.setUrl(q),a.get().success(function(a){var b;k.id=a.id,k.name=a.name,k.status=a.status,k.result_stdout=a.result_stdout,k.result_traceback=a.result_traceback,k.stdout_rows=j(k.result_stdout),k.traceback_rows=j(k.result_traceback),b=new Date(a.created),k.created=d(b),$("#status-modal-dialog").dialog("open")}).error(function(a,b){e(k,a,b,null,{hdr:"Error!",msg:"Attempt to load job failed. GET returned status: "+b})})}}]),angular.module("LookUpHelper",["RestServices","Utilities","SearchHelper","PaginationHelpers","ListGenerator","ApiLoader"]).factory("LookUpInit",["Alert","Rest","GenerateList","SearchInit","PaginateInit","GetBasePath","FormatDate","Empty",function(a,b,c,d,e,f,g,h){return function(b){var i,j,k,l,m=b.scope,n=b.form,o=b.list,p=b.field,q=b.postAction;i=b.url?b.url:f("inventories"===o.name?"inventory":o.name),j=o.iterator.charAt(0).toUpperCase()+o.iterator.substring(1),k=b.hdr?b.hdr:"Select "+j,l=/\/$/.test(i)?i+"?":i+"&",l+=n.fields[p].sourceField+"__iexact=:value",$('input[name="'+n.fields[p].sourceModel+"_"+n.fields[p].sourceField+'"]').attr("data-url",l),$('input[name="'+n.fields[p].sourceModel+"_"+n.fields[p].sourceField+'"]').attr("data-source",p),m["lookUp"+j]=function(){var b=c,f=b.inject(o,{mode:"lookup",hdr:k});$("#lookup-modal").on("hidden.bs.modal",function(){f.searchCleanup&&f.searchCleanup(),(""===m[p]||null===m[p])&&(m[n.fields[p].sourceModel+"_"+n.fields[p].sourceField]="",m.$$phase||m.$digest())}),f.selectAction=function(){var c,d=!1;for(c=0;c5?f[j+"_page"]-5:1,e=f[j+"_page"]<6?10<=f[j+"_num_pages"]?10:f[j+"_num_pages"]:f[j+"_page"]+4=c;c++)f[j+"_page_range"].push(c)}}]).factory("RelatedPaginateInit",["RefreshRelated","$cookieStore","Wait",function(a,b,c){return function(d){var e,f=d.scope,g=d.relatedSets,h=d.pageSize?d.pageSize:10;for(e in g)f[g[e].iterator+"_url"]=g[e].url,f[g[e].iterator+"_page"]=0,f[g[e].iterator+"_page_size"]=h;f.getPage=function(b,d,e){var g=f[e+"_url"].replace(/.page\=\d+/,""),h=/\/$/.test(g)?"?":"&";g+=h+"page="+b,g+=f[e+"SearchParams"]?"&"+f[e+"SearchParams"]+"&page_size="+f[e+"_page_size"]:"page_size="+f[e+"PageSize"],c("start"),a({scope:f,set:d,iterator:e,url:g})},f.pageIsActive=function(a,b){return a===f[b+"_page"]?"active":""},f.changePageSize=function(c,d){f[d+"_page"]=1;var e=f[d+"_url"];b.put(d+"_page_size",f[d+"_page_size"]),e=e.replace(/\/\?.*$/,"/"),e+=f[d+"SearchParams"]?"?"+f[d+"SearchParams"]+"&page_size="+f[d+"_page_size"]:"?page_size="+f[d+"_page_size"],a({scope:f,set:c,iterator:d,url:e})}}}]).factory("PaginateInit",["Refresh","$cookieStore","Wait",function(a,b,c){return function(b){var d=b.scope,e=b.list,f=b.iterator?b.iterator:e.iterator,g=b.mode?b.mode:null;d[f+"_page"]=b.page?b.page:1,d[f+"_url"]=b.url,d[f+"_mode"]=g,d[f+"_page_size"]=b.pageSize?b.pageSize:"lookup"===g?5:20,d.getPage=function(b,e,f){var g=d[f+"_url"].replace(/.page\=\d+/,""),h=/\/$/.test(g)?"?":"&";g+=h+"page="+b,g+=d[f+"SearchParams"]?"&"+d[f+"SearchParams"]+"&page_size="+d[f+"_page_size"]:"page_size="+d[f+"PageSize"],c("start"),a({scope:d,set:e,iterator:f,url:g})},d.pageIsActive=function(a,b){return a===d[b+"_page"]?"active":""},d.changePageSize=function(b,e){d[e+"_page"]=0;var f=d[e+"_url"].replace(/\?page_size\=\d+/,""),g=/\/$/.test(f)?"?":"&";f+=d[e+"SearchParams"]?g+d[e+"SearchParams"]+"&page_size="+d[e+"_page_size"]:g+"page_size="+d[e+"_page_size"],c("start"),a({scope:d,set:b,iterator:e,url:f})}}}]),angular.module("ParseHelper",[]).factory("ParseTypeChange",[function(){return function(a,b,c){var d=b?b:"variables",e=c?c:"parseType";a.blockParseTypeWatch=!1,a.blockVariableDataWatch=!1,a["remove"+d+"Watch"]&&a["remove"+d+"Watch"](),a["remove"+d+"Watch"]=a.$watch(e,function(b,c){var e;if(b!==c)if("json"===b)if(a[d]&&!/^---$/.test(a[d]))try{e=jsyaml.load(a[d]),a[d]=JSON.stringify(e,null," ")}catch(f){}else a[d]="{}";else if(a[d]&&!/^\{\}$/.test(a[d]))try{e=JSON.parse(a[d]),a[d]=jsyaml.safeDump(e)}catch(f){}else a[d]="---"})}}]),angular.module("PermissionsHelper",[]).factory("PermissionCategoryChange",[function(){return function(a){var b=a.scope,c=a.reset;"Inventory"===b.category?(b.projectrequired=!1,b.permissionTypeHelp="
\n
Read
\n
Only allow the user or team to view the inventory.
\n
Write
\n
Allow the user or team to modify hosts and groups contained in the inventory, add new hosts and groups, and perform inventory sync operations.\n
Admin
\n
Allow the user or team full access to the inventory. This includes reading, writing, deletion of the inventory and inventory sync operations.
\n
\n"):(b.projectrequired=!0,b.permissionTypeHelp="
\n
Run
\n
Allow the user or team to perform a live deployment of the project against the inventory. In Run mode modules will be executed, and changes to the inventory will occur.
\n
Check
\n
Only allow the user or team to deploy the project against the inventory as a dry-run operation. In Check mode, module operations will only be simulated. No changes will occur.
\n
\n"),c&&(b.permission_type="Inventory"===b.category?"read":"run")}}]),angular.module("ProjectPathHelper",["RestServices","Utilities"]).factory("GetProjectPath",["Alert","Rest","GetBasePath","ProcessErrors",function(a,b,c,d){return function(a){function e(a){var b,c,d=[],e=[];for(b=0;b
\n',$("#projects-modal-container").empty().append(b),c=q.inject(r,{mode:"edit",id:"form-container",related:!1,breadCrumbs:!1}),q.reset(),d=$(document).width(),f=$("body").height(),d>1199?(h=675,j=750>f?f-20:750,n=20):1199>=d&&d>=768?(h=550,j=620>f?f-15:620,n=15):(h=d-20,j=500>f?f:500,n=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:h,height:j,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#projects-modal-container").empty()},open:function(){m("stop")}}),e.setUrl(p),e.get().success(function(a){var b,d=a;for(b in r.fields)d[b]?c[b]="created"===b?k(new Date(d[b])):d[b]:d.summary_fields.project[b]&&(c[b]=d.summary_fields.project[b]);$("#status-modal-dialog").dialog({title:d.summary_fields.project.name+" Status"}).dialog("open")}).error(function(a,b){$("#form-modal").modal("hide"),i(c,a,b,r,{hdr:"Error!",msg:"Failed to retrieve status of project: "+o+". GET status: "+b})})}}]),angular.module("SelectionHelper",["Utilities","RestServices"]).factory("SelectionInit",["Rest","Alert","ProcessErrors","ReturnToCaller","Wait",function(a,b,c,d,e){return function(b){var f,g=b.scope,h=b.list,i=b.url,j=b.returnToCaller;f=void 0!==b.selected?b.selected:[],g.formModalActionDisabled=!0,g.disableSelectBtn=!0,g["toggle_"+h.iterator]=function(a,b){var c,d,e;for(c=0;c0?(g.formModalActionDisabled=!1,g.disableSelectBtn=!1):(g.formModalActionDisabled=!0,g.disableSelectBtn=!0)},g.finishSelection=function(){function b(){f=[],void 0!==j?d(j):($("#form-modal").modal("hide"),g.$emit("modalClosed"))}function k(b){a.post(b).success(function(a,b){m.push({result:"success",data:a,status:b}),g.$emit("callFinished")}).error(function(a,b,c){m.push({result:"error",data:a,status:b,headers:c}),g.$emit("callFinished")})}a.setUrl(i);var l,m=[];if(g.formModalActionDisabled=!0,g.disableSelectBtn=!0,e("start"),g.callFinishedRemove&&g.callFinishedRemove(),g.callFinishedRemove=g.$on("callFinished",function(){var a,d=0;if(m.length===f.length){for(e("stop"),a=0;a0)for(l=0;lh)h++,setTimeout(1e3,e());else if("success"===g.status)return d(a)}var f,g={},h=0;return null===c.apiDefaults||void 0===c.apiDefaults?(f="/api/v1/",b.setUrl(f),b.get().success(function(a){var b,d=a;for(b in d)switch(b){case"organizations":d[b].iterator="organization";break;case"jobs":d[b].iterator="job";break;case"users":d[b].iterator="user";break;case"teams":d[b].iterator="team";break;case"hosts":d[b].iterator="host";break;case"groups":d[b].iterator="group";break;case"projects":d[b].iterator="project";break;case"inventories":d[b].iterator="inventory"}c.apiDefaults=d,g={status:"success"}}).error(function(a,b){g={status:"error",msg:"Call to "+f+" failed. GET returned status: "+b}}),e()):d(a)}}]),angular.module("InventoryHelper",["RestServices","Utilities","OrganizationListDefinition","ListGenerator","AuthService","InventoryHelper","InventoryFormDefinition","ParseHelper","SearchHelper"]).factory("WatchInventoryWindowResize",["ApplyEllipsis",function(a){return function(){var b;$(window).resize(function(){clearTimeout(b),b=setTimeout(function(){$("#groups_table .name-column").each(function(){var a=$(this).width(),b=$(this).find(".level").width(),c=parseInt($(this).find(".level").css("padding-left").replace(/px/,"")),d=b+c,e=100-Math.ceil(d/a*100)+"%";$(this).find(".group-name").css({width:e})}),a("#groups_table .group-name a"),a("#hosts_table .host-name a")},100)})}}]).factory("SaveInventory",["InventoryForm","Rest","Alert","ProcessErrors","LookUpInit","OrganizationList","GetBasePath","ParseTypeChange","Wait",function(a,b,c,d,e,f,g,h,i){return function(e){var f,h,j,k=e.scope,l=a,m=g("inventory");i("start");try{if(h="json"===k.inventoryParseType?JSON.parse(k.inventory_variables):jsyaml.load(k.inventory_variables),"object"!=typeof h)throw"failed to return an object!";j={};for(f in l.fields)"inventory_variables"!==f&&(l.fields[f].realName?j[l.fields[f].realName]=k[f]:j[f]=k[f]);b.setUrl(m+k.inventory_id+"/"),b.put(j).success(function(a){k.inventory_variables?(b.setUrl(a.related.variable_data),b.put(h).success(function(){i("stop"),k.$emit("InventorySaved")}).error(function(a,b){d(k,a,b,l,{hdr:"Error!",msg:"Failed to update inventory varaibles. PUT returned status: "+b})})):k.$emit("InventorySaved")}).error(function(a,b){d(k,a,b,l,{hdr:"Error!",msg:"Failed to update inventory. POST returned status: "+b})})}catch(n){i("stop"),c("Error","Error parsing inventory variables. Parser returned: "+n)}}}]).factory("EditInventoryProperties",["InventoryForm","GenerateForm","Rest","Alert","ProcessErrors","LookUpInit","OrganizationList","GetBasePath","ParseTypeChange","SaveInventory","Wait","Store","SearchInit",function(a,b,c,d,e,f,g,h,i,j,k,l,m){return function(n){var o,p=n.scope,q=n.inventory_id,r=b,s=a,t={},u=l("CurrentSearchParams");s.well=!1,o=r.inject(s,{mode:"edit",modal:!0,related:!1,modal_show:!1}),s.well=!0,i(o,"inventory_variables","inventoryParseType"),o.inventoryParseType="yaml",o.formModalActionLabel="Save",o.formModalCancelShow=!0,o.formModalInfo=!1,o.formModalHeader="Inventory Properties",k("start"),c.setUrl(h("inventory")+q+"/"),c.get().success(function(a){var b,c;for(b in s.fields){if("inventory_variables"===b){if($.isEmptyObject(a.variables)||"{}"===a.variables||"null"===a.variables||""===a.variables)o.inventory_variables="---";else try{c=JSON.parse(a.variables),o.inventory_variables=jsyaml.safeDump(c)}catch(e){d("Variable Parse Error","Attempted to parse variables for inventory: "+q+". Parse returned: "+e),console&&(console.log(e),console.log("data:"),console.log(a.variables)),o.inventory_variables="---"}t.inventory_variables=o.variables}else"inventory_name"===b?(o[b]=a.name,t[b]=o[b]):"inventory_description"===b?(o[b]=a.description,t[b]=o[b]):a[b]&&(o[b]=a[b],t[b]=o[b]);s.fields[b].sourceModel&&a.summary_fields&&a.summary_fields[s.fields[b].sourceModel]&&(o[s.fields[b].sourceModel+"_"+s.fields[b].sourceField]=a.summary_fields[s.fields[b].sourceModel][s.fields[b].sourceField],t[s.fields[b].sourceModel+"_"+s.fields[b].sourceField]=a.summary_fields[s.fields[b].sourceModel][s.fields[b].sourceField])}f({scope:o,form:s,current_item:o.organization,list:g,field:"organization"}),k("stop"),$("#form-modal").modal("show")}).error(function(a,b){e(o,a,b,null,{hdr:"Error!",msg:"Failed to get inventory: "+q+". GET returned: "+b})}),o.removeInventorySaved&&o.removeInventorySaved(),o.removeInventorySaved=o.$on("InventorySaved",function(){$("#form-modal").modal("hide"),o.searchCleanp&&o.searchCleanup(),m({scope:p,set:u.set,list:u.list,url:u.defaultUrl,iterator:u.iterator,sort_order:u.sort_order,setWidgets:!1}),p.$emit("RefreshInventories")}),o.cancelModal=function(){o.searchCleanp&&o.searchCleanup(),m({scope:p,set:u.set,list:u.list,url:u.defaultUrl,iterator:u.iterator,sort_order:u.sort_order,setWidgets:!1})},o.formModalAction=function(){p.inventory_id=q,p.inventory_name=o.inventory_name,j({scope:o})}}}]),angular.module("md5Helper",["RestServices","Utilities"]).factory("md5Setup",[function(){return function(a){var b=a.scope,c=a.master,d=a.check_field,e=a.default_val;b[d]=e,c[d]=e,b.genMD5=function(a){var c=new Date;b[a]=$.md5("AnsibleWorks"+c.getTime())},b.toggleCallback=function(a){"false"===b.allow_callbacks&&(b[a]="")},b.selectAll=function(a){$('input[name="'+a+'"]').focus().select()}}}]),angular.module("RefreshRelatedHelper",["RestServices","Utilities","PaginationHelpers"]).factory("RefreshRelated",["ProcessErrors","Rest","Wait","PageRangeSetup",function(a,b,c,d){return function(e){var f=e.scope,g=e.set,h=e.iterator,i=e.url;b.setUrl(i),b.get().success(function(a){d({scope:f,count:a.count,next:a.next,previous:a.previous,iterator:h}),f[g]=a.results,f[h+"Loading"]=!1,f[h+"HoldInput"]=!1,c("stop"),f.$emit("related"+g)}).error(function(b,c){a(f,b,c,null,{hdr:"Error!",msg:"Failed to retrieve "+g+". GET returned status: "+c})})}}]),angular.module("RefreshHelper",["RestServices","Utilities","PaginationHelpers"]).factory("Refresh",["ProcessErrors","Rest","Wait","Empty","PageRangeSetup",function(a,b,c,d,e){return function(d){var f=d.scope,g=d.set,h=d.iterator,i=d.url;f.current_url=i,b.setUrl(i),b.get().success(function(a){var b,d;for(e({scope:f,count:a.count,next:a.next,previous:a.previous,iterator:h}),f[h+"Loading"]=!1,b=1;3>=b;b++)d=1===b?"":b,f[h+"HoldInput"+d]=!1;f[g]=a.results,window.scrollTo(0,0),c("stop"),f.$emit("PostRefresh")}).error(function(b,c){f[h+"HoldInput"]=!1,a(f,b,c,null,{hdr:"Error!",msg:"Failed to retrieve "+g+". GET returned status: "+c})})}}]),angular.module("RelatedSearchHelper",["RestServices","Utilities","RefreshRelatedHelper"]).factory("RelatedSearchInit",["$timeout","Alert","Rest","RefreshRelated","Wait",function(a,b,c,d,e){return function(a){function b(a){var b,c,d,e;for(e in h.related)if("tree"!==h.related[e].type&&(void 0===a||a===h.related[e].iterator)){b=h.related[e].iterator;for(d in h.related[e].fields)if(h.related[e].fields[d].key){f[b+"SearchField"]=d,f[b+"SearchFieldLabel"]=h.related[e].fields[d].label;break}f[b+"SortOrder"]=null,f[b+"SearchType"]="icontains",f[b+"SearchTypeLabel"]="Contains",f[b+"SearchValue"]=null,f[b+"SelectShow"]=!1,f[b+"ShowStartBtn"]=!0,f[b+"HideAllStartBtn"]=!1,c=f[b+"SearchField"],!h.related[e].fields[c].searchType||"boolean"!==h.related[e].fields[c].searchType&&"select"!==h.related[e].fields[c].searchType||(f[b+"SelectShow"]=!0,f[b+"SearchSelectOpts"]=h.fields[c].searchOptions),h.related[e].fields[c].searchType&&"gtzero"===h.related[e].fields[c].searchType&&(f[b+"InputHide"]=!0)}}var c,f=a.scope,g=a.relatedSets,h=a.form;b(),f.resetSearch=function(a){b(a),f.search(a)},f.setSearchField=function(a,b,c){var d,e;for(e in h.related)h.related[e].iterator===a&&(d=h.related[e].fields[b]);f[a+"SearchFieldLabel"]=c,f[a+"SearchField"]=b,f[a+"SearchValue"]="",f[a+"SelectShow"]=!1,f[a+"InputHide"]=!1,f[a+"ShowStartBtn"]=!0,void 0!==d.searchType&&"gtzero"===d.searchType&&(f[a+"InputHide"]=!0,f[a+"ShowStartBtn"]=!1),void 0===d.searchType||"boolean"!==d.searchType&&"select"!==d.searchType||(f[a+"SelectShow"]=!0,f[a+"SearchSelectOpts"]=d.searchOptions),void 0!==d.searchType&&"int"===d.searchType&&(f[a+"SearchType"]="int"),f.search(a)},f.setSearchType=function(a,b,c){f[a+"SearchTypeLabel"]=c,f[a+"SearchType"]=b,f.search(a)},f.startSearch=function(a,b){13===a.keyCode&&f.search(b)},f.search=function(a){e("start"),f[a+"Loading"]=!0,f[a+"HoldInput"]=!0,f[a+"SearchValue"]&&(f[a+"ShowStartBtn"]=!1),"host"===a&&"has_active_failures"===f.hostSearchField&&(f.hostFailureFilter=f.hostSearchSelectValue&&1===f.hostSearchSelectValue.value?!0:!1);var b,i,j,k,l;for(i in g)if(g[i].iterator===a){j=i,k=g[i].url;for(b in h.related[i].fields)h.related[i].fields[b].key&&(l=h.related[i].fields[b].desc?"-"+b:b);break}l=null===f[a+"SortOrder"]?l:f[a+"SortOrder"],c=h.related[j].fields[f[a+"SearchField"]],f[a+"SelectShow"]===!1&&""!==f[a+"SearchValue"]&&void 0!==f[a+"SearchValue"]||f[a+"SelectShow"]&&f[a+"SearchSelectValue"]||c.searchType&&"gtzero"===c.searchType?(f[a+"SearchParams"]=c.sourceModel?c.sourceModel+"__"+c.sourceField+"__":c.searchField?c.searchField+"__":f[a+"SearchField"]+"__",f[a+"SearchParams"]+=!c.searchType||"int"!==c.searchType&&"boolean"!==c.searchType?c.searchType&&"gtzero"===c.searchType?"gt=0":f[a+"SearchType"]+"=":"int=",!c.searchType||"boolean"!==c.searchType&&"select"!==c.searchType?(void 0===c.searchType||"gtzero"===c.searchType)&&(f[a+"SearchParams"]+=encodeURI(f[a+"SearchValue"])):f[a+"SearchParams"]+=f[a+"SearchSelectValue"].value,f[a+"SearchParams"]+=l?"&order_by="+encodeURI(l):""):f[a+"SearchParams"]=l?"order_by="+encodeURI(l):"",f[a+"Page"]=0,k+=k.match(/\/$/)?"?":"&",k+=f[a+"SearchParams"],k+=f[a+"PageSize"]?"&page_size="+f[a+"PageSize"]:"",d({scope:f,set:j,iterator:a,url:k})},f.sort=function(a,b){var c,d,e,g;$("."+a+" .list-header").each(function(){if($(this).attr("id")!==a+"-"+b+"-header"){var c=$(this).find("i");c.attr("class","icon-sort")}}),d=$("#"+a+"-"+b+"-header i"),e="",d.hasClass("icon-sort")?(d.removeClass("icon-sort"),d.addClass("icon-sort-up")):d.hasClass("icon-sort-up")?(d.removeClass("icon-sort-up"),d.addClass("icon-sort-down"),e="-"):d.hasClass("icon-sort-down")&&(d.removeClass("icon-sort-down"),d.addClass("icon-sort-up"));for(g in h.related)h.related[g].iterator===a&&(c=h.related[g].fields[b].sourceModel?e+h.related[g].fields[b].sourceModel+"__"+h.related[g].fields[b].sourceField:e+b);f[a+"SortOrder"]=c,f.search(a)}}}]),angular.module("SearchHelper",["RestServices","Utilities","RefreshHelper"]).factory("SearchInit",["Alert","Rest","Refresh","$location","GetBasePath","Empty","$timeout","Wait","Store",function(a,b,c,d,e,f,g,h,i){return function(a){function b(a){var b,c,d,e;e=void 0===a||1===a?"":a,l[p+"SearchField"+e]="",l[p+"SearchFieldLabel"+e]="";for(c in o.fields)if((void 0===o.fields[c].searchWidget&&1===a||o.fields[c].searchWidget===a)&&o.fields[c].key){o.fields[c].sourceModel?(d=o.fields[c].sourceModel+"__"+o.fields[c].sourceField,r=o.fields[c].desc?"-"+d:d):r=o.fields[c].desc?"-"+c:c,(void 0===o.fields[c].searchable||o.fields[c].searchable===!0)&&(l[p+"SearchField"+e]=c,l[p+"SearchFieldLabel"+e]=o.fields[c].label);break}if(f(l[p+"SearchField"+e]))for(c in o.fields)if((void 0===o.fields[c].searchWidget&&1===a||o.fields[c].searchWidget===a)&&(void 0===o.fields[c].searchable||o.fields[c].searchable===!0)){l[p+"SearchField"+e]=c,l[p+"SearchFieldLabel"+e]=o.fields[c].label;break}l[p+"SearchType"+e]="icontains",l[p+"SearchTypeLabel"+e]="Contains",l[p+"SearchParams"+e]="",l[p+"SearchValue"+e]="",l[p+"SelectShow"+e]=!1,l[p+"HideSearchType"+e]=!1,l[p+"InputDisable"+e]=!1,l[p+"ExtraParms"+e]="",l[p+"ShowStartBtn"+e]=!0,l[p+"HideAllStartBtn"+e]=!1,l[p+"SearchPlaceholder"+e]=o.fields[l[p+"SearchField"+e]]&&o.fields[l[p+"SearchField"+e]].searchPlaceholder?l[o.fields[l[p+"SearchField"+e]].searchPlaceholder]?l[o.fields[l[p+"SearchField"+e]].searchPlaceholder]:o.fields[l[p+"SearchField"+e]].searchPlaceholder:"Search",l[p+"InputDisable"+e]=o.fields[l[p+"SearchField"+e]]&&"all"===o.fields[l[p+"SearchField"+e]].searchObject?!0:!1,b=l[p+"SearchField"+e],o.fields[b]&&(!o.fields[b].searchType||"boolean"!==o.fields[b].searchType&&"select"!==o.fields[b].searchType||(l[p+"SelectShow"+e]=!0,l[p+"SearchSelectOpts"+e]=o.fields[b].searchOptions),o.fields[b].searchType&&"int"===o.fields[b].searchType&&(l[p+"HideSearchType"+e]=!0),o.fields[b].searchType&&"gtzero"===o.fields[b].searchType&&(l[p+"InputHide"+e]=!0))}var e,g,j,k,l=a.scope,m=a.set,n=a.url,o=a.list,p=a.iterator?a.iterator:o.iterator,q=a.setWidgets===!1?!1:!0,r=a.sort_order||"";if(q)for(e=o.searchWidgets?o.searchWidgets:1,g=1;e>=g;g++)j=1===g?"":g,$("#search-widget-container"+j)&&b(g);k={set:m,defaultUrl:n,list:o,iterator:p,sort_order:r},i("CurrentSearchParams",k),l.setSearchField=function(a,b,c,d){var e=void 0===d||1===d?"":d;l[a+"SearchFieldLabel"+e]=c,l[a+"SearchField"+e]=b,l[a+"SearchValue"+e]="",l[a+"SelectShow"+e]=!1,l[a+"HideSearchType"+e]=!1,l[a+"InputHide"+e]=!1,l[a+"SearchType"+e]="icontains",l[a+"InputDisable"+e]="all"===o.fields[b].searchObject?!0:!1,l[a+"ShowStartBtn"+e]=!0,l[a+"SearchPlaceholder"+e]=o.fields[l[a+"SearchField"+e]]&&o.fields[l[a+"SearchField"+e]].searchPlaceholder?l[o.fields[l[a+"SearchField"+e]].searchPlaceholder]?l[o.fields[l[a+"SearchField"+e]].searchPlaceholder]:o.fields[l[a+"SearchField"+e]].searchPlaceholder:"Search",o.fields[b].searchType&&"gtzero"===o.fields[b].searchType?(l[a+"InputDisable"+e]=!0,l[a+"ShowStartBtn"+e]=!1,l.search(a)):o.fields[b].searchSingleValue?(l[a+"InputDisable"+e]=!0,l[a+"SearchValue"+e]=o.fields[b].searchValue,l[a+"SearchSelectValue"+e]="boolean"===o.fields[b].searchType&&"true"===o.fields[b].searchValue?{value:1}:"boolean"===o.fields[b].searchType&&"false"===o.fields[b].searchValue?{value:0}:{value:o.fields[b].searchValue},l[a+"ShowStartBtn"+e]=!1):"in"===o.fields[b].searchType?(l[a+"SearchType"+e]="in",l[a+"SearchValue"+e]=o.fields[b].searchValue,l[a+"InputDisable"+e]=!0,l[a+"ShowStartBtn"+e]=!1):!o.fields[b].searchType||"boolean"!==o.fields[b].searchType&&"select"!==o.fields[b].searchType&&"select_or"!==o.fields[b].searchType?o.fields[b].searchType&&"int"===o.fields[b].searchType?l[a+"SearchType"+e]="int":o.fields[b].searchType&&"isnull"===o.fields[b].searchType&&(l[a+"SearchType"+e]="isnull",l[a+"InputDisable"+e]=!0,l[a+"SearchValue"+e]="true",l[a+"ShowStartBtn"+e]=!1):(l[a+"SelectShow"+e]=!0,l[a+"SearchSelectOpts"+e]=o.fields[b].searchOptions),l.search(a)},l.resetSearch=function(a){var c,e=o.searchWidgets?o.searchWidgets:1;for(c=1;e>=c;c++)b(c);window.location="/#"+d.path(),l.search(a)},l.removeDoSearch&&l.removeDoSearch(),l.removeDoSearch=l.$on("doSearch",function(a,b,d,e){l[b+"Loading"]=void 0===e||e===!0?!0:!1;var f,g=n;l[b+"Page"]=d?parseInt(d)-1:0,l[b+"SearchParams"]&&(g+=/\/$/.test(g)?"?"+l[b+"SearchParams"]:"&"+l[b+"SearchParams"]),f=/\/$/.test(g)?"?":"&",g+=l[b+"_page_size"]?f+"page_size="+l[b+"_page_size"]:"",d&&(f=/\/$/.test(g)?"?":"&",g+=f+"page="+d),l[b+"ExtraParms"]&&(f=/\/$/.test(g)?"?":"&",g+=f+l[b+"ExtraParms"]),g=g.replace(/\&\&/,"&"),c({scope:l,set:m,iterator:b,url:g})}),l.removePrepareSearch&&l.removePrepareSearch(),l.removePrepareSearch=l.$on("prepareSearch",function(a,b,c,d,e){h("start"),l[b+"SearchParams"]="";var f,g,i=o.searchWidgets?o.searchWidgets:1;for(f=1;i>=f;f++)g=1===f?"":f,$("#search-widget-container"+g)&&o.fields[l[b+"SearchField"+g]]&&o.fields[l[b+"SearchField"+g]].searchObject&&("all"!==o.fields[l[b+"SearchField"+g]].searchObject?(l[b+"HideAllStartBtn"+g]=!1,l[b+"SearchValue"+g]?(l[b+"ShowStartBtn"+g]=!1,l[b+"SearchParams"]+=o.fields[l[b+"SearchField"+g]].searchOnID?"&"+o.fields[l[b+"SearchField"+g]].searchObject+"__id="+l[b+"SearchValue"+g]:"&"+o.fields[l[b+"SearchField"+g]].searchObject+"__name__icontains="+l[b+"SearchValue"+g]):(l[b+"ShowStartBtn"+g]=!0,l[b+"SearchParams"]+="&"+o.fields[l[b+"SearchField"+g]].searchField+"="+o.fields[l[b+"SearchField"+g]].searchObject)):l[b+"HideAllStartBtn"+g]=!0);l.$emit("prepareSearch2",b,c,d,e)}),l.removePrepareSearch2&&l.removePrepareSearch2(),l.removePrepareSearch2=l.$on("prepareSearch2",function(a,b,c,d,e){var g,h,i=o.searchWidgets?o.searchWidgets:1;for(g=1;i>=g;g++)h=1===g?"":g,l[b+"HoldInput"+h]=!0,$("#search-widget-container"+h)&&o.fields[l[b+"SearchField"+h]]&&!o.fields[l[b+"SearchField"+h]].searchObject&&(l[b+"ShowStartBtn"+h]=l[b+"SearchValue"+h]?!1:!0,(!l[b+"SelectShow"+h]&&!f(l[b+"SearchValue"+h])||l[b+"SelectShow"+h]&&l[b+"SearchSelectValue"+h]||o.fields[l[b+"SearchField"+h]]&&"gtzero"===o.fields[l[b+"SearchField"+h]].searchType)&&(l[b+"SearchParams"]+=o.fields[l[b+"SearchField"+h]].searchField?"&"+o.fields[l[b+"SearchField"+h]].searchField+"__":o.fields[l[b+"SearchField"+h]].sourceModel?"&"+o.fields[l[b+"SearchField"+h]].sourceModel+"__"+o.fields[l[b+"SearchField"+h]].sourceField+"__":"select"!==o.fields[l[b+"SearchField"+h]].searchType||""!==l[b+"SearchSelectValue"+h].value&&null!==l[b+"SearchSelectValue"+h].value?"&"+l[b+"SearchField"+h]+"__":"&"+l[b+"SearchField"+h]+"__",l[b+"SearchParams"]+=!o.fields[l[b+"SearchField"+h]].searchType||"int"!==o.fields[l[b+"SearchField"+h]].searchType&&"boolean"!==o.fields[l[b+"SearchField"+h]].searchType?o.fields[l[b+"SearchField"+h]].searchType&&"gtzero"===o.fields[l[b+"SearchField"+h]].searchType?"gt=0":"select"!==o.fields[l[b+"SearchField"+h]].searchType||""!==l[b+"SearchSelectValue"+h].value&&null!==l[b+"SearchSelectValue"+h].value?l[b+"SearchType"+h]+"=":"iexact=":"int=",!o.fields[l[b+"SearchField"+h]].searchType||"boolean"!==o.fields[l[b+"SearchField"+h]].searchType&&"select"!==o.fields[l[b+"SearchField"+h]].searchType?(!o.fields[l[b+"SearchField"+h]].searchType||o.fields[l[b+"SearchField"+h]].searchType&&"or"!==o.fields[l[b+"SearchField"+h]].searchType&&"gtzero"!==o.fields[l[b+"SearchField"+h]].searchType)&&(l[b+"SearchParams"]+=encodeURI(l[b+"SearchValue"+h])):l[b+"SearchParams"]+=l[b+"SearchSelectValue"+h].value));("inventory"===b&&l.inventoryFailureFilter||"host"===b&&l.hostFailureFilter)&&(l[b+"SearchParams"]+="&has_active_failures=true"),r&&(l[b+"SearchParams"]+=l[b+"SearchParams"]?"&":"",l[b+"SearchParams"]+="order_by="+encodeURI(r)),l.$emit("doSearch",b,c,d,e)}),l.startSearch=function(a,b){13===a.keyCode&&l.search(b)},l.search=function(a,b,c){c=void 0===c?!0:!1,c&&(l[m]=[]),l.$emit("prepareSearch",a,b,c)},l.sort=function(a){$(".list-header").each(function(){if($(this).attr("id")!==a+"-header"){var b=$(this).find("i");b.attr("class","fa fa-sort")}});var b=$("#"+a+"-header i"),c="";b.hasClass("fa-sort")?(b.removeClass("fa-sort"),b.addClass("fa-sort-up")):b.hasClass("fa-sort-up")?(b.removeClass("fa-sort-up"),b.addClass("fa-sort-down"),c="-"):b.hasClass("fa-sort-down")&&(b.removeClass("fa-sort-down"),b.addClass("fa-sort-up")),r=o.fields[a].searchField?c+o.fields[a].searchField:o.fields[a].sortField?c+o.fields[a].sortField:o.fields[a].sourceModel?c+o.fields[a].sourceModel+"__"+o.fields[a].sourceField:c+a,l.search(o.iterator)},l.searchCleanup=function(){l.removeDoSearch(),l.removePrepareSearch(),l.removePrepareSearch2()}}}]),angular.module("TeamHelper",["RestServices","Utilities","OrganizationListDefinition","SearchHelper","PaginationHelpers","ListGenerator"]).factory("SetTeamListeners",["Alert","Rest",function(a,b){return function(a){var c=a.scope,d=a.set,e=a.iterator;c.$on("TeamResultFound",function(a,b,f){var g,h,i,j;if(f.length===b.length){for(i="organization",j="organization_name",g=0;gSelect existing users by clicking each user or checking the related checkbox. When finished, click the blue Select button, located bottom right.

",base:"users",index:!0,hover:!0,fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},actions:{},fieldActions:{}}),angular.module("CloudCredentialsListDefinition",[]).value("CloudCredentialList",{name:"cloudcredentials",iterator:"cloudcredential",selectTitle:"Add Cloud Credentials",editTitle:"Cloud Credentials",selectInstructions:"

Select existing credentials by clicking each credential or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new credential by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",excludeModal:!1},team:{label:"Team",ngBind:"credential.team_name",sourceModel:"team",sourceField:"name",excludeModal:!0},user:{label:"User",ngBind:"credential.user_username",sourceModel:"user",sourceField:"username",excludeModal:!0}},actions:{add:{mode:"all",ngClick:"addCredential()","class":"btn-sm",awToolTip:"Create a new credential"}},fieldActions:{edit:{ngClick:"editCredential(credential.id)",icon:"fa-edit",label:"Edit","class":"btn-sm",awToolTip:"Edit credential",dataPlacement:"top"},"delete":{ngClick:"deleteCredential(credential.id, credential.name)",icon:"fa-trash-o",label:"Delete","class":"btn-sm",awToolTip:"Delete credential",dataPlacement:"top"}}}),angular.module("CredentialsListDefinition",[]).value("CredentialList",{name:"credentials",iterator:"credential",selectTitle:"Add Credentials",editTitle:"Credentials",selectInstructions:"

Select existing credentials by clicking each credential or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new credential by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",excludeModal:!1},kind:{label:"Type",searchType:"select",searchOptions:[],excludeModal:!0,nosort:!0}},actions:{add:{mode:"all",ngClick:"addCredential()",awToolTip:"Create a new credential"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{ngClick:"editCredential(credential.id)",icon:"fa-edit",label:"Edit","class":"btn-sm",awToolTip:"Edit credential",dataPlacement:"top"},"delete":{ngClick:"deleteCredential(credential.id, credential.name)",icon:"fa-trash",label:"Delete","class":"btn-sm",awToolTip:"Delete credential",dataPlacement:"top"}}}),angular.module("GroupListDefinition",[]).value("GroupList",{name:"groups",iterator:"group",selectTitle:"Copy Groups",editTitle:"Groups",index:!0,well:!1,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{help:{awPopOver:"Choose groups by clicking on each group you wish to add. Click the Select button to add the groups to the selected inventory group.",dataContainer:"#form-modal .modal-content",mode:"all",awToolTip:"Click for help",dataTitle:"Adding Groups"}},fieldActions:{edit:{label:"Edit",ngClick:"editGroup(group.id)",icon:"icon-edit","class":"btn-xs",awToolTip:"Edit group",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteGroup(group.id, group.name)",icon:"icon-trash","class":"btn-xs",awToolTip:"Delete group",dataPlacement:"top"}}}),angular.module("HomeGroupListDefinition",[]).value("HomeGroupList",{name:"home_groups",iterator:"group",editTitle:"Groups",index:!0,hover:!0,well:!0,fields:{name:{key:!0,label:"Group",ngClick:"editGroup(group.id, group.inventory)",columnClass:"col-lg-4 col-md3 col-sm-3 col-xs-6 ellipsis"},inventory_name:{label:"Inventory",sourceModel:"inventory",sourceField:"name",columnClass:"col-lg-3 col-md2 col-sm-2 hidden-xs elllipsis",linkTo:"{{ /#/inventories/' + group.inventory + '/' }}"},source:{label:"Source",searchType:"select",searchOptions:[{name:"ec2",value:"ec2"},{name:"none",value:""},{name:"rax",value:"rax"}],sourceModel:"inventory_source",sourceField:"source",searchOnly:!0},has_external_source:{label:"Has external source?",searchType:"in",searchValue:"ec2,rax",searchOnly:!0,sourceModel:"inventory_source",sourceField:"source"},has_active_failures:{label:"Has failed hosts?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},last_update_failed:{label:"Update failed?",searchType:"select",searchSingleValue:!0,searchValue:"failed",searchOnly:!0,sourceModel:"inventory_source",sourceField:"status"},id:{label:"ID",searchOnly:!0}},fieldActions:{sync_status:{mode:"all",ngClick:"viewUpdateStatus(group.id, group.group_id)",awToolTip:"{{ group.status_tooltip }}",ngClass:"group.status_class",dataPlacement:"top"},failed_hosts:{mode:"all",awToolTip:"{{ group.hosts_status_tip }}",dataPlacement:"top",ngHref:"/#/inventories/{{ group.inventory }}/",iconClass:"{{ 'fa icon-failures-' + group.hosts_status_class }}"},group_update:{mode:"all",ngClick:"updateGroup(group.id)",awToolTip:"{{ group.launch_tooltip }}",ngShow:"(group.status !== 'running' && group.status !== 'pending' && group.status !== 'updating')",ngClass:"group.launch_class",dataPlacement:"top"},cancel:{mode:"all",ngClick:"cancelUpdate(group.id)",awToolTip:"Cancel sync process","class":"red-txt",ngShow:"(group.status == 'running' || group.status == 'pending' || group.status == 'updating')",dataPlacement:"top"},edit:{label:"Edit",mode:"all",ngClick:"editGroup(group.id)",awToolTip:"Edit group",dataPlacement:"top"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("HomeHostListDefinition",[]).value("HomeHostList",{name:"hosts",iterator:"host",selectTitle:"Add Existing Hosts",editTitle:"Hosts",index:!0,hover:!0,well:!0,fields:{name:{key:!0,label:"Name",columnClass:"col-lg-4 col-md3 col-sm-3 col-xs-7 ellipsis",ngClick:"editHost(host.id, host.name)"},inventory_name:{label:"Inventory",sourceModel:"inventory",sourceField:"name",columnClass:"col-lg-3 col-md2 col-sm-2 hidden-xs elllipsis",linkTo:"{{ '/#/inventories/' + host.inventory }}"},enabled:{label:"Disabled?",searchSingleValue:!0,searchType:"boolean",searchValue:"false",searchOnly:!0},has_active_failures:{label:"Has failed jobs?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},has_inventory_sources:{label:"Has external source?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},id:{label:"ID",searchOnly:!0}},fieldActions:{enabled_flag:{iconClass:"{{ 'fa icon-enabled-' + host.enabled }}",dataPlacement:"top",awToolTip:"{{ host.enabledToolTip }}",dataTipWatch:"host.enabledToolTip",ngClick:"toggleHostEnabled(host.id, host.has_inventory_sources)"},active_failures:{awPopOver:"{{ host.job_status_html }}",dataTitle:"{{ host.job_status_title }}",awToolTip:"{{ host.badgeToolTip }}",awTipPlacement:"top",dataPlacement:"left",iconClass:"{{ 'fa icon-failures-' + host.has_active_failures }}"},edit:{label:"Edit",ngClick:"editHost(host.id)",icon:"icon-edit",awToolTip:"Edit host",dataPlacement:"top"}},actions:{stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("HostListDefinition",[]).value("HostList",{name:"hosts",iterator:"host",selectTitle:"Add Existing Hosts",editTitle:"Hosts",index:!0,well:!1,fields:{name:{key:!0,label:"Host Name",linkTo:"/inventories/{{ inventory_id }}/hosts/{{ host.id }}"},description:{label:"Description"}},actions:{help:{awPopOver:"Select hosts by clicking on each host you wish to add. Add the selected hosts to the group by clicking the Select button.",dataContainer:"#form-modal .modal-content",mode:"all",awToolTip:"Click for help",dataTitle:"Selecting Hosts"}},fieldActions:{edit:{label:"Edit",ngClick:"editHost({{ host.id }})",icon:"icon-edit","class":"btn-xs",awToolTip:"Edit host",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteHost(host.id, host.name)",icon:"icon-trash","class":"btn-xs",awToolTip:"Delete host",dataPlacement:"top"}}}),angular.module("InventoriesListDefinition",[]).value("InventoryList",{name:"inventories",iterator:"inventory",selectTitle:"Add Inventories",editTitle:"Inventories",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},organization:{label:"Organization",ngBind:"inventory.summary_fields.organization.name",linkTo:"/#/organizations/{{ inventory.organization }}",sourceModel:"organization",sourceField:"name",excludeModal:!0},has_inventory_sources:{label:"Cloud sourced?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},has_active_failures:{label:"Failed hosts?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},inventory_sources_with_failures:{label:"Sync failures?",searchType:"gtzero",searchValue:"true",searchOnly:!0}},actions:{add:{mode:"all",ngClick:"addInventory()",awToolTip:"Create a new inventory"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",icon:"icon-comments-alt",mode:"all"}},fieldActions:{status:{ngHref:"inventory.status_link",iconClass:"{{ 'fa fa-cloud icon-cloud-' + inventory.status_class }}",awToolTip:"{{ inventory.status_tip }}",dataPlacement:"top"},failed_hosts:{ngHref:"inventory.failed_hosts_link",iconClass:"{{ 'fa icon-failures-' + inventory.failed_hosts_class }}",awToolTip:"{{ inventory.failed_hosts_tip }}",dataPlacement:"top"},edit:{label:"Edit",ngClick:"editInventoryProperties(inventory.id)",awToolTip:"Edit inventory",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteInventory(inventory.id, inventory.names')",awToolTip:"Delete inventory",dataPlacement:"top"}}}),angular.module("InventoryGroupsDefinition",[]).value("InventoryGroups",{name:"groups",iterator:"group",editTitle:"{{ inventory_name }}",showTitle:!1,well:!0,index:!1,hover:!1,hasChildren:!0,filterBy:"{ show: true }","class":"table-condensed table-no-border",fields:{name:{label:"Groups",key:!0,ngClick:"showHosts(group.id,group.group_id, false)",ngClass:"group.selected_class",hasChildren:!0,columnClass:"col-lg-9 col-md-9 col-sm-7 col-xs-7",nosort:!0,awDroppable:"{{ group.isDroppable }}",awDraggable:"{{ group.isDraggable }}",dataContainment:"#groups_table",dataTreeId:"{{ group.id }}",dataGroupId:"{{ group.group_id }}",dataType:"group"}},actions:{columnClass:"col-lg-3 col-md-3 col-sm-5 col-xs-5",create:{mode:"all",ngClick:"createGroup()",awToolTip:"Create a new group"},properties:{mode:"all",awToolTip:"Edit inventory properties",ngClick:"editInventoryProperties()"},refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refreshGroups()"},stream:{ngClick:"showGroupActivity()",awToolTip:"View Activity Stream",mode:"all"},help:{mode:"all",awToolTip:"Get help building your inventory",ngClick:"showGroupHelp()",id:"inventory-summary-help"}},fieldActions:{sync_status:{mode:"all",ngClick:"viewUpdateStatus(group.id, group.group_id)",ngShow:"group.id > 1",awToolTip:"{{ group.status_tooltip }}",dataTipWatch:"group.launch_tooltip",ngClass:"group.status_class",dataPlacement:"top"},failed_hosts:{mode:"all",awToolTip:"{{ group.hosts_status_tip }}",ngShow:"group.id > 1",dataPlacement:"top",ngClick:"showHosts(group.id, group.group_id, group.show_failures)",iconClass:"{{ 'fa icon-failures-' + group.hosts_status_class }}"},group_update:{mode:"all",ngClick:"updateGroup(group.id)",awToolTip:"{{ group.launch_tooltip }}",dataTipWatch:"group.launch_tooltip",ngShow:"group.id > 1 && (group.status !== 'running' && group.status !== 'pending' && group.status !== 'updating')",ngClass:"group.launch_class",dataPlacement:"top"},cancel:{mode:"all",ngClick:"cancelUpdate({{ group.id }})",awToolTip:"Cancel sync process","class":"red-txt",ngShow:"group.id > 1 && (group.status == 'running' || group.status == 'pending' || group.status == 'updating')",dataPlacement:"top"},edit:{mode:"all",ngClick:"editGroup({{ group.group_id + ',' + group.id }})",awToolTip:"Edit group",ngShow:"group.id > 1",dataPlacement:"top"},"delete":{mode:"all",ngClick:"deleteGroup({{ group.id + ',' + group.group_id }})",awToolTip:"Delete group",ngShow:"group.id != 1",dataPlacement:"top"}}}),angular.module("InventoryHostsDefinition",[]).value("InventoryHosts",{name:"hosts",iterator:"host",editTitle:"{{ selected_group }}",showTitle:!1,well:!0,index:!1,hover:!1,hasChildren:!0,"class":"table-condensed table-no-border",fields:{name:{key:!0,label:"Hosts",ngClick:"editHost(host.id)",searchPlaceholder:"search_place_holder",columnClass:"col-lg-9 col-md-9 col-sm-7 col-xs-7",dataHostId:"{{ host.id }}",dataType:"host",awDraggable:"true"},enabled:{label:"Disabled?",searchSingleValue:!0,searchType:"boolean",searchValue:"false",searchOnly:!0},has_active_failures:{label:"Failed jobs?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0}},fieldActions:{enabled_flag:{iconClass:"{{ 'fa icon-enabled-' + host.enabled }}",dataPlacement:"top",awToolTip:"{{ host.enabledToolTip }}",dataTipWatch:"host.enabledToolTip",ngClick:"toggleHostEnabled(host.id, host.has_inventory_sources)"},active_failures:{awPopOver:"{{ host.job_status_html }}",dataTitle:"{{ host.job_status_title }}",awToolTip:"{{ host.badgeToolTip }}",awTipPlacement:"top",dataPlacement:"left",iconClass:"{{ 'fa icon-failures-' + host.has_active_failures }}"},edit:{ngClick:"editHost(host.id)",icon:"icon-edit",awToolTip:"Edit host",dataPlacement:"top"},"delete":{ngClick:"deleteHost(host.id, host.name)",icon:"icon-trash",awToolTip:"Delete host",dataPlacement:"top"}},actions:{columnClass:"col-lg-3 col-md-3 col-sm-5 col-xs-5",create:{mode:"all",ngClick:"createHost()",ngHide:"selected_tree_id == 1",awToolTip:"Create a new host"},stream:{ngClick:"showHostActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("JobEventsListDefinition",[]).value("JobEventList",{name:"jobevents",iterator:"jobevent",editTitle:"Job Events",index:!1,hover:!0,hasChildren:!0,filterBy:"{ show: true }",navigationLinks:{details:{href:"/#/jobs/{{ job_id }}",label:"Status",icon:"icon-zoom-in",ngShow:"job_id !== null"},events:{href:"/#/jobs/{{ job_id }}/job_events",label:"Events",active:!0,icon:"icon-list-ul"},hosts:{href:"/#/jobs/{{ job_id }}/job_host_summaries",label:"Host Summary",icon:"icon-laptop"}},fields:{created:{label:"Created On",columnClass:"col-lg-1 col-md-1 hidden-sm hidden-xs",key:!0,nosort:!0,searchable:!1,link:!1},status:{label:"Status",showValue:!1,columnClass:"col-sm-1 col-xs-2 text-center",searchField:"failed",searchType:"boolean",searchOptions:[{name:"success",value:0},{name:"error",value:1}],nosort:!0,searchable:!1,ngClick:"viewJobEvent({{ jobevent.id }})",awToolTip:"{{ jobevent.statusBadgeToolTip }}",dataPlacement:"top",badgeIcon:"fa icon-job-{{ jobevent.status }}",badgePlacement:"left",badgeToolTip:"{{ jobevent.statusBadgeToolTip }}",badgeTipPlacement:"top",badgeNgClick:"viewJobEvent({{ jobevent.id }})"},event_display:{label:"Event",hasChildren:!0,ngClick:"toggleChildren(jobevent.id, jobevent.related.children)",nosort:!0,searchable:!1,ngClass:"{{ jobevent.class }}",appendHTML:"jobevent.event_detail"},host:{label:"Host",ngBind:"jobevent.summary_fields.host.name",ngHref:"{{ jobevent.hostLink }}",searchField:"hosts__name",nosort:!0,searchOnly:!1,id:"job-event-host-header","class":"break",columnClass:"col-lg-2 hidden-sm hidden-xs"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"}},fieldActions:{columnClass:"col-sm-1 col-xs-2",view:{label:"View",ngClick:"viewJobEvent(jobevent.id)",awToolTip:"View event details",dataPlacement:"top"}}}),angular.module("JobHostDefinition",[]).value("JobHostList",{name:"jobhosts",iterator:"jobhost",editTitle:"All summaries",index:!0,hover:!0,navigationLinks:{ngHide:"host_id !== null",details:{href:"/#/jobs/{{ job_id }}",label:"Status",icon:"icon-zoom-in",ngShow:"job_id !== null"},events:{href:"/#/jobs/{{ job_id }}/job_events",label:"Events",icon:"icon-list-ul"},hosts:{href:"/#/jobs/{{ job_id }}/job_host_summaries",label:"Host Summary",active:!0,icon:"icon-laptop"}},fields:{job:{label:"Job ID",ngClick:"showJob(jobhost.job)",columnShow:"host_id !== null",key:!0,desc:!0},host:{label:"Host",key:!0,sourceModel:"host",sourceField:"name",ngBind:"jobhost.host_name",ngHref:"jobhost.hostLinkTo"},status:{label:"Status",badgeNgHref:"{{ jobhost.statusLinkTo }}",badgeIcon:"fa icon-job-{{ jobhost.status }}",badgePlacement:"left",badgeToolTip:"{{ jobhost.statusBadgeToolTip }}",badgeTipPlacement:"top",ngHref:"{{ jobhost.statusLinkTo }}",awToolTip:"{{ jobhost.statusBadgeToolTip }}",dataPlacement:"top",searchField:"failed",searchType:"boolean",searchOptions:[{name:"success",value:0},{name:"error",value:1}]},failed:{label:"Job failed?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0,nosort:!0},ok:{label:"Success",searchable:!1},changed:{label:"Changed",searchable:!1},failures:{label:"Failure",searchable:!0,searchLabel:"Contains failed events?",searchType:"gtzero"},dark:{label:"Unreachable",searchable:!0,searchType:"gtzero",searchLabel:"Contains unreachable hosts?"},skipped:{label:"Skipped",searchable:!1}},actions:{help:{awPopOver:"
\n
Success
Tasks successfully executed on the host.
\n
Changed
Actions taken on the host.
\n
Failure
Tasks that failed on the host.
\n
Unreachable
Times the ansible server could not reach the host.
\n
Skipped
Tasks bypassed and not performed on the host due to prior task failure or the host being unreachable.
\n
\n",dataPlacement:"left",dataContainer:"body",mode:"all","class":"btn-xs btn-help",awToolTip:"Click for help",dataTitle:"Job Host Summary",id:"jobhost-help-button"},refresh:{mode:"all","class":"btn-xs",awToolTip:"Refresh the page",ngClick:"refresh()",ngShow:"host_id == null"}},fieldActions:{}}),angular.module("JobTemplatesListDefinition",[]).value("JobTemplateList",{name:"job_templates",iterator:"job_template",selectTitle:"Add Job Template",editTitle:"Job Templates",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{add:{mode:"all",ngClick:"addJobTemplate()",basePaths:["job_templates"],awToolTip:"Create a new template"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",icon:"icon-comments-alt",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editJobTemplate(job_template.id)",icon:"icon-edit",awToolTip:"Edit template","class":"btn-default btn-xs",dataPlacement:"top"},submit:{label:"Launch",icon:"icon-rocket",mode:"all","class":"btn-xs btn-success",ngClick:"submitJob(job_template.id)",awToolTip:"Start a job using this template",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteJobTemplate(job_template.id, job_template.name)",icon:"icon-trash","class":"btn-danger btn-xs",awToolTip:"Delete template",dataPlacement:"top"}}}),angular.module("JobsListDefinition",[]).value("JobList",{name:"jobs",iterator:"job",editTitle:"Jobs",index:!1,hover:!0,"class":"jobs-table",fields:{id:{label:"Job ID",key:!0,desc:!0,searchType:"int"},inventory:{label:"Inventory ID",searchType:"int",searchOnly:!0},created:{label:"Create On",link:!1,searchable:!1},job_template:{label:"Job Template",ngBind:"job.summary_fields.job_template.name",ngHref:"{{ '/#/job_templates/' + job.job_template }}",sourceModel:"job_template",sourceField:"name"},failed:{label:"Job failed?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0,nosort:!0},status:{label:"Status","class":"job-{{ job.status }}",searchType:"select",linkTo:"{{ job.statusLinkTo }}",searchOptions:[{name:"new",value:"new"},{name:"waiting",value:"waiting"},{name:"pending",value:"pending"},{name:"running",value:"running"},{name:"successful",value:"successful"},{name:"error",value:"error"},{name:"failed",value:"failed"},{name:"canceled",value:"canceled"}],badgeIcon:"fa icon-job-{{ job.status }}",badgePlacement:"left",badgeToolTip:"{{ job.statusBadgeToolTip }}",badgeTipPlacement:"top",badgeNgHref:"{{ job.statusLinkTo }}",awToolTip:"{{ job.statusBadgeToolTip }}",dataPlacement:"top"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"}},fieldActions:{submit:{label:"Relaunch",icon:"icon-rocket",mode:"all",ngClick:"submitJob(job.id, job.summary_fields.job_template.name)",awToolTip:"Start the job",dataPlacement:"top"},cancel:{label:"Stop",mode:"all",ngClick:"deleteJob(job.id)",awToolTip:"Cancel a running or pending job",ngShow:"job.status == 'pending' || job.status == 'running' || job.status == 'waiting'",dataPlacement:"top"},"delete":{label:"Delete",mode:"all",ngClick:"deleteJob(job.id)",awToolTip:"Delete the job",ngShow:"job.status != 'pending' && job.status != 'running' && job.status != 'waiting'",dataPlacement:"top"},dropdown:{type:"DropDown",label:"View",icon:"fa-search-plus","class":"btn-default btn-xs",options:[{ngClick:"editJob(job.id, job.summary_fields.job_template.name)",label:"Status"},{ngClick:"viewEvents(job.id, job.summary_fields.job_template.name)",label:"Events",ngHide:"job.status == 'new'"},{ngClick:"viewSummary(job.id, job.summary_fields.job_template.name)",label:"Host Summary",ngHide:"job.status == 'new'"}]}}}),angular.module("OrganizationListDefinition",[]).value("OrganizationList",{name:"organizations",iterator:"organization",selectTitle:"Add Organizations",editTitle:"Organizations",hover:!0,index:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{add:{mode:"all",ngClick:"addOrganization()",awToolTip:"Create a new organization"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editOrganization(organization.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit organization",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteOrganization(organization.id, organization.name)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete organization",dataPlacement:"top"}}}),angular.module("PermissionListDefinition",[]).value("PermissionList",{name:"permissions",iterator:"permission",selectTitle:"Add Permission",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',editTitle:"Permissions",index:!0,well:!0,fields:{name:{key:!0,label:"Name",ngClick:"editPermission(permission.id)"},inventory:{label:"Inventory",sourceModel:"inventory",sourceField:"name",ngBind:"permission.summary_fields.inventory.name"},project:{label:"Project",sourceModel:"project",sourceField:"name",ngBind:"permission.summary_fields.project.name"},permission_type:{label:"Permission"}},actions:{add:{mode:"all",ngClick:"addPermission()",awToolTip:"Add a new permission",ngShow:"PermissionAddAllowed"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editPermission(permission.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit permission",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deletePermission(permission.id, permission.name)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete permission",ngShow:"PermissionAddAllowed",dataPlacement:"top"}}}),angular.module("ProjectsListDefinition",[]).value("ProjectList",{name:"projects",iterator:"project",selectTitle:"Add Project",editTitle:"Projects",selectInstructions:"

Select existing projects by clicking each project or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new project by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",columnClass:"hidden-sm hidden-xs",excludeModal:!0},scm_type:{label:"Type",searchType:"select",searchOptions:[],excludeModal:!0,nosort:!0},status:{label:"Status",ngClick:"showSCMStatus(project.id)",awToolTip:"View details of last SCM Update",dataPlacement:"top",badgeIcon:"{{ 'fa icon-failures-' + project.badge }}",badgePlacement:"left",searchType:"select",searchOptions:[],excludeModal:!0},last_updated:{label:"Last Updated",type:"date",excludeModal:!0,searchable:!1}},actions:{add:{mode:"all",ngClick:"addProject()",awToolTip:"Create a new project"},help:{awPopOver:"
\n
Updating
A source control update is in progress.
\n
Never Updated
This project has not yet been updated from source control.
\n
Failed
An error occurred during the most recent source control update, click the status text for more information.
\n
Successful
TThe latest source control update completed successfully.
\n
Missing
The previously configured local project directory is missing.
\n
N/A
The project is not linked to source control, so updates are not applicable.
\n
\n",dataPlacement:"left",dataContainer:"body",mode:"all",awToolTip:"Click for help",awTipPlacement:"top"},refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editProject(project.id)",awToolTip:"Edit project properties",dataPlacement:"top"},scm_update:{label:"Update",ngClick:"SCMUpdate(project.id)",awToolTip:"{{ project.scm_update_tooltip }}",ngClass:"project.scm_type_class",dataPlacement:"top"},cancel:{label:"Stop",ngClick:"cancelUpdate(project.id, project.name)",awToolTip:"Cancel a running SCM update process",ngShow:"project.status == 'updating'",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteProject(project.id, project.name)",awToolTip:"Permanently remove project from the database",ngShow:"project.status !== 'updating'",dataPlacement:"top"}}}),angular.module("StreamListDefinition",[]).value("StreamList",{name:"activities",iterator:"activity",editTitle:"Activity Stream",selectInstructions:"",index:!1,hover:!0,"class":"table-condensed",searchWidgets:3,fields:{timestamp:{label:"Event Time",key:!0,desc:!0,noLink:!0,searchable:!1},user:{label:"Initiated by",ngBindHtml:"activity.user",sourceModel:"actor",sourceField:"username",searchPlaceholder:"Username",searchWidget:1},description:{label:"Action",ngBindHtml:"activity.description",nosort:!0,searchable:!1,columnClass:"col-lg-7"},system_event:{label:"System event",searchOnly:!0,searchType:"isnull",sourceModel:"actor",sourceField:"username",searchWidget:1},all_objects:{label:"All",searchOnly:!0,searchObject:"all",searchPlaceholder:"All resources",searchWidget:2},credential_search:{label:"Credential",searchOnly:!0,searchObject:"credential",searchPlaceholder:"Credential name",searchWidget:2,searchField:"object1"},group_search:{label:"Group",searchOnly:!0,searchObject:"group",searchPlaceholder:"Group name",searchWidget:2,searchField:"object1"},host_search:{label:"Host",searchOnly:!0,searchObject:"host",searchPlaceholder:"Host name",searchWidget:2,searchField:"object1"},inventory_search:{label:"Inventory",searchOnly:!0,searchObject:"inventory",searchPlaceholder:"Inventory name",searchWidget:2,searchField:"object1"},job_template_search:{label:"Job Template",searchOnly:!0,searchObject:"job_template",searchPlaceholder:"Job template name",searchWidget:2,searchField:"object1"},job_search:{label:"Job",searchOnly:!0,searchObject:"job",searchPlaceholder:"Job id",searchOnID:!0,searchWidget:2,searchField:"object1"},organization_search:{label:"Organization",searchOnly:!0,searchObject:"organization",searchPlaceholder:"Organization name",searchWidget:2,searchField:"object1"},project_search:{label:"Project",searchOnly:!0,searchObject:"project",searchPlaceholder:"Project name",searchWidget:2,searchField:"object1"},user_search:{label:"User",searchOnly:!0,searchObject:"user",searchPlaceholder:"Primary username",searchWidget:2,searchField:"object1"},all_objects3:{label:"All",searchOnly:!0,searchObject:"all",searchPlaceholder:"All related resources",searchWidget:3,searchField:"object2"},credential_search3:{label:"Credential",searchOnly:!0,searchObject:"credential",searchPlaceholder:"Related credential name",searchWidget:3,searchField:"object2"},group_search3:{label:"Group",searchOnly:!0,searchObject:"group",searchPlaceholder:"Related group name",searchWidget:3,searchField:"object2"},host_search3:{label:"Host",searchOnly:!0,searchObject:"host",searchPlaceholder:"Related host name",searchWidget:3,searchField:"object2"},inventory_search3:{label:"Inventory",searchOnly:!0,searchObject:"inventory",searchPlaceholder:"Related inventory name",searchWidget:3,searchField:"object2"},job_search3:{label:"Job",searchOnly:!0,searchObject:"job",searchPlaceholder:"Job id",searchOnID:!0,searchWidget:3,searchField:"object2"},job_template_search3:{label:"Job Template",searchOnly:!0,searchObject:"job_template",searchPlaceholder:"Related job template name",searchWidget:3,searchField:"object2"},organization_search3:{label:"Organization",searchOnly:!0,searchObject:"organization",searchPlaceholder:"Related organization name",searchWidget:3,searchField:"object2"},project_search3:{label:"Project",searchOnly:!0,searchObject:"project",searchPlaceholder:"Related project name",searchWidget:3,searchField:"object2"},user_search3:{label:"User",searchOnly:!0,searchObject:"user",searchPlaceholder:"Related username",searchWidget:3,searchField:"object2"}},actions:{refresh:{mode:"all","class":"btn-xs",awToolTip:"Refresh the page",ngClick:"refreshStream()"},close:{mode:"all",awToolTip:"Close Activity Stream view",ngClick:"closeStream()"}},fieldActions:{view:{label:"View",ngClick:"showDetail(activity.id)",icon:"fa-zoom-in","class":"btn-default btn-xs",awToolTip:"View event details",dataPlacement:"top"}}}),angular.module("TeamsListDefinition",[]).value("TeamList",{name:"teams",iterator:"team",selectTitle:"Add Team",editTitle:"Teams",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description"},organization:{label:"Organization",ngBind:"team.organization_name",sourceModel:"organization",sourceField:"name"}},actions:{add:{mode:"all",ngClick:"addTeam()",awToolTip:"Create a new team"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editTeam(team.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit team",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteTeam(team.id, team.name)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete team",dataPlacement:"top"}}}),angular.module("UserListDefinition",[]).value("UserList",{name:"users",iterator:"user",selectTitle:"Add Users",editTitle:"Users",selectInstructions:"

Select existing users by clicking each user or checking the related checkbox. When finished, click the blue Select button, located bottom right.

When available, a brand new user can be created by clicking the green Create New button.

",index:!0,hover:!0,fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},actions:{add:{label:"Create New",mode:"all",ngClick:"addUser()",basePaths:["organizations","users"],"class":"btn-xs",awToolTip:"Create a new user"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editUser(user.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit user",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteUser(user.id, user.username)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete user",dataPlacement:"top"}}}),angular.module("InventorySyncStatusWidget",["RestServices","Utilities"]).factory("InventorySyncStatus",["$rootScope","$compile",function(a,b){return function(a){function c(a){var b=a.label,c=a.count,d=a.fail,e=a.link,f=a.fail_link,g="\n"; +return g+='\n",g+=''+d+"",g+="\n",g+='',g+=''+c+"",g+="\n"}var d,e,f,g,h,i=a.scope,j=a.target,k=a.dashboard;if(d='
\n',d+='
Inventory Sync Status
\n',d+='
\n',d+='\n',d+="\n",d+="\n",d+='\n',d+='\n',d+='\n',d+="\n",d+="\n",d+="\n",d+=c({label:"Inventories",count:k.inventories&&k.inventories.total_with_inventory_source?k.inventories.total_with_inventory_source:0,fail:k.inventories&&k.inventories.inventory_failed?k.inventories.inventory_failed:0,link:"/#/inventories/?has_inventory_sources=true",fail_link:"/#/inventories/?inventory_sources_with_failures=true"}),e=0,f=0,k.inventory_sources)for(h in k.inventory_sources)e+=k.inventory_sources[h].total?k.inventory_sources[h].total:0,f+=k.inventory_sources[h].failed?k.inventory_sources[h].failed:0;d+=c({label:"Groups",count:e,fail:f,link:"/#/home/groups/?has_external_source=true",fail_link:"/#/home/groups/?status=failed"});for(h in k.inventory_sources)k.inventory_sources[h].total&&(d+=c({label:k.inventory_sources[h].label,count:k.inventory_sources[h].total?k.inventory_sources[h].total:0,fail:k.inventory_sources[h].failed?k.inventory_sources[h].failed:0,link:"/#/home/groups/?source="+h,fail_link:"/#/home/groups/?status=failed&source="+h}));d+="\n",d+="
FailedTotal
\n",d+="
\n",d+="
\n",d+="\n",g=angular.element(document.getElementById(j)),g.html(d),b(g)(i),i.$emit("WidgetLoaded")}}]),angular.module("JobStatusWidget",["RestServices","Utilities"]).factory("JobStatus",["$rootScope","$compile","Rest","GetBasePath","ProcessErrors","Wait",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.fail_link,f=a.count,g=a.fail;return b+="\n",b+='\n",b+=''+g+"",b+="\n",b+='',b+=''+f+"",b+="\n"}var d,e=a.scope,f=a.target,g=a.dashboard,h="";h='
\n',h+='
Job Status
\n',h+='
\n',h+='\n',h+="\n",h+="\n",h+='\n',h+='\n',h+='\n',h+="\n",h+="\n",h+="\n",h+=c({label:"Jobs",link:"/#/jobs",count:g.jobs&&g.jobs.total?g.jobs.total:0,fail:g.jobs&&g.jobs.failed?g.jobs.failed:0,fail_link:"/#/jobs/?status=failed"}),h+=c({label:"Inventories",link:"/#/inventories",count:g.inventories&&g.inventories.total?g.inventories.total:0,fail:g.inventories&&g.inventories.job_failed?g.inventories.job_failed:0,fail_link:"/#/inventories/?has_active_failures=true"}),h+=c({label:"Groups",link:"/#/home/groups",count:g.groups&&g.groups.total?g.groups.total:0,fail:g.groups&&g.groups.job_failed?g.groups.job_failed:0,fail_link:"/#/home/groups/?has_active_failures=true"}),h+=c({label:"Hosts",link:"/#/home/hosts",count:g.hosts&&g.hosts.total?g.hosts.total:0,fail:g.hosts&&g.hosts.failed?g.hosts.failed:0,fail_link:"/#/home/hosts/?has_active_failures=true"}),h+="\n",h+="
FailedTotal
\n",h+="
\n",h+="
\n",h+="\n",d=angular.element(document.getElementById(f)),d.html(h),b(d)(e),e.$emit("WidgetLoaded")}}]),angular.module("ObjectCountWidget",["RestServices","Utilities"]).factory("ObjectCount",["$rootScope","$compile","Rest","GetBasePath","ProcessErrors","Wait",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.count;return b+="\n",b+='\n",b+='',b+=''+e+"",b+="\n"}var d,e,f,g=a.scope,h=a.target,i=a.dashboard,j=["organizations","users","teams","credentials","projects","inventories","groups","hosts","job_templates","jobs"];for(e='
\n',e+='
System Summary
\n',e+='
\n',e+='\n',e+="\n",e+="\n",e+='\n',e+='\n',e+="\n",e+="\n",e+="\n",d=0;d\n",e+="
Total
\n",e+="
\n",e+="
\n",f=angular.element(document.getElementById(h)),f.html(e),b(f)(g),g.$emit("WidgetLoaded")}}]),angular.module("SCMSyncStatusWidget",["RestServices","Utilities"]).factory("SCMSyncStatus",["$rootScope","$compile",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.fail_link,f=a.count,g=a.fail;return b+="\n",b+=''+c+"\n",b+=''+g+"",b+="\n",b+='',b+=''+f+"",b+="\n"}var d,e,f,g,h,i,j=a.scope,k=a.target,l=a.dashboard;if(e='
\n',e+='
Project SCM Status
\n',e+='
\n',e+='\n',e+="\n",e+="\n",e+='\n',e+='\n',e+='\n',e+="\n",e+="\n",e+="\n",f=0,l.scm_types)for(h in l.scm_types)f+=l.scm_types[h].total?l.scm_types[h].total:0;e+=c({label:"Projects",link:"/#/projects",count:f,fail:l.projects&&l.projects.failed?l.projects.failed:0,fail_link:"/#/projects/?status=failed"}),i=[];for(h in l.scm_types)i.push(h);for(i.sort(),d=0;d\n",e+="
FailedTotal
\n",e+="
\n",e+="
\n",e+="\n",g=angular.element(document.getElementById(k)),g.html(e),b(g)(j),j.$emit("WidgetLoaded")}}]),angular.module("StreamWidget",["RestServices","Utilities","StreamListDefinition","SearchHelper","PaginationHelpers","RefreshHelper","ListGenerator","StreamWidget","AuthService"]).factory("setStreamHeight",[function(){return function(){var a=$("#stream-content").height(),b=parseInt($("#tab-content-container").css("min-height").replace(/px/,"")),c=a>b?a:b;$("#tab-content-container").css({"min-height":c})}}]).factory("ShowStream",["setStreamHeight","Authorization",function(a){return function(){var b=$("#stream-container");b.css({position:"absolute",top:0,left:0,width:"100%","min-height":"100%","background-color":"#FFF"}),a(),b.show("slide",{direction:"left"},{duration:500,queue:!1})}}]).factory("HideStream",["LoadBreadCrumbs",function(a){return function(){var b=$("#stream-container");b.hide("slide",{direction:"left"},{duration:500,queue:!1}),setTimeout(function(){b.detach(),b.empty(),b.unbind(),$("#tab-content-container").css({"min-height":0})},500),a()}}]).factory("StreamBreadCrumbs",["$rootScope","$location",function(a,b){return function(){a.breadcrumbs=[];var c,d,e,f,g=b.path().split("/");for(g.splice(0,1),e=0;e=f;f++)c+="/"+g[f];for(f=0;f0)for(f=0;e>=f;f++)c+="/"+g[f];else c="/"+g[e];d=g[e],d=d.charAt(0).toUpperCase()+d.slice(1)}a.breadcrumbs.push({path:c,title:d,ngClick:"closeStream('"+c+"')"})}}}]).factory("FixUrl",[function(){return function(a){return a.replace(/\/api\/v1\//,"/#/")}}]).factory("BuildUrl",[function(){return function(a){var b="/#/";switch(a.base){case"group":case"host":b+="home/"+a.base+"s/?id="+a.id;break;case"inventory":b+="inventories/"+a.id+"/";break;default:b+=a.base+"s/"+a.id+"/"}return b}}]).factory("BuildDescription",["FixUrl","BuildUrl",function(a,b){return function(a){function c(a){return a.replace(/^_deleted_\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+\+\d+:\d+_/,"")}var d,e,f,g,h,i,j,k;d=a.operation,d+=/e$/.test(a.operation)?"d ":"ed ",e=d,f=a.object1,g=a.object2,h=a.summary_fields[f]?a.summary_fields[f][0]:null,i=f===g?a.summary_fields[f][1]:a.summary_fields[g]?a.summary_fields[g][0]:null,("user"===f||"user"===g)&&(a.summary_fields.user[0].name=a.summary_fields.user[0].username),i&&i.name&&!/^_delete/.test(i.name)?(i.base=g,d+=g+' '+i.name+""+("disassociate"===a.operation?" from ":" to "),e+=g+" "+i.name+("disassociate"===a.operation?" from ":" to ")):g&&(j="",i&&i.name&&(j=" "+c(i.name)),d+=g+j+("disassociate"===a.operation?" from ":" to "),e+=g+j+("disassociate"===a.operation?" from ":" to ")),h&&h.name&&!/^\_delete/.test(h.name)?(h.base=f,d+=f+' '+h.name+"",e+=f+" "+h.name):f&&(j="",k="",!h||!h.name||h&&h.name&&/^_delete/.test(h.name)?a.changes&&a.changes.name?"string"==typeof a.changes.name?(j=" "+a.changes.name,k=j):"object"==typeof a.changes.name&&Array.isArray(a.changes.name)&&(j=" "+a.changes.name[0],k=j):"job"===f&&h&&a.changes&&a.changes.job_template?"delete"!==a.operation?(h.base=f,j=' '+h.id+" "+a.changes.job_template+"",k=" "+h.id+" "+a.changes.job_template):(j=" "+h.id+" "+a.changes.job_template,k=j):"job"===f&&h&&("delete"!==a.operation?(h.base=f,j=' '+h.id+"",k=" "+h.id):(j=" "+h.id,k=j)):h&&h.name&&(j=" "+c(h.name),k=j),d+=f+j,e+=f+k),a.description=d,a.description_nolink=e}}]).factory("ShowDetail",["$rootScope","Rest","Alert","GenerateForm","ProcessErrors","GetBasePath","FormatDate","ActivityDetailForm","Empty","Find",function(a,b,c,d,e,f,g,h,i,j){return function(a){var b,c,e,f=a.activity_id,i=a.scope,k=d,l=h,m=j({list:i.activities,key:"id",val:f});m&&(m.changes_stringified=JSON.stringify(m.changes,null," "),b=m.changes_stringified.match(/\n/g),c=b?b.length:1,c=1>c?3:10,l.fields.changes.rows=10,e=k.inject(l,{mode:"edit",modal:!0,related:!1}),e.changes=m.changes_stringified,e.user=(m.summary_fields.actor?m.summary_fields.actor.username:"system")+" on "+g(new Date(m.timestamps)),e.operation=m.description_nolink,e.formModalAction=function(){$("#form-modal").modal("hide")},$("#form-modal").on("show.bs.modal",function(){$("#form-modal-body").css({width:"auto",height:"auto","max-height":"100%"})}),e.formModalActionLabel="OK",e.formModalCancelShow=!1,e.formModalInfo=!1,e.formModalHeader="Event "+m.id,e.$$phase||e.$digest())}}]).factory("Stream",["$rootScope","$location","Rest","GetBasePath","ProcessErrors","Wait","StreamList","SearchInit","PaginateInit","GenerateList","FormatDate","ShowStream","HideStream","BuildDescription","FixUrl","BuildUrl","ShowDetail","StreamBreadCrumbs","setStreamHeight","Find","Store",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){return function(c){var e,f,o,v,w=g,x=d("activity_stream"),y=j,z=b.path().replace(/^\//,"").split("/")[0],A=c.scope,B=u("CurrentSearchParams"),C=c&&c.inventory_name?c.inventory_name:null,D=c&&c.url?c.url:null;a.flashMessage=null,D?x=D:"/home"!==b.path()&&(e="inventories"===z?"inventory":z.replace(/s$/,""),f=b.path().split("/"),f.splice(0,1),f.length>1&&/^\d+/.test(f[f.length-1])?(e=f[f.length-2],e="inventories"===e?"inventory":e.replace(/s$/,""),x+="?"+e+"__id="+f[f.length-1]):f.length>1?(e=f[f.length-1],e="inventories"===e?"inventory":e.replace(/s$/,""),x+="?or__object1="+e+"&or__object2="+e):x+="?or__object1="+e+"&or__object2="+e),$("#tab-content-container").append('
'),r(),C&&(o=t({list:a.breadcrumbs,key:"title",val:"{{ inventory_name }}"}),o&&(o.title=C)),l(),v=y.inject(w,{mode:"edit",id:"stream-content",searchSize:"col-lg-3",secondWidget:!0,activityStream:!0}),v.streamTitle=c&&c.title?c.title:null,v.closeStream=function(a){m(),v.searchCleanup&&v.searchCleanup(),B&&h({scope:A,set:B.set,list:B.list,url:B.defaultUrl,iterator:B.iterator,sort_order:B.sort_order,setWidgets:!1}),a&&b.path(a)},v.refreshStream=function(){v.search(w.iterator)},v.showDetail=function(a){q({scope:v,activity_id:a})},v.removeStreamPostRefresh&&v.removeStreamPostRefresh(),v.removeStreamPostRefresh=v.$on("PostRefresh",function(){var a,b,c,d,e,f;for(a=0;a'+v.activities[a].summary_fields.actor.username+"":"system",d=/^\_delete/,e=v.activities[a].object1,f=v.activities[a].object2,e&&v.activities[a].summary_fields[e]&&v.activities[a].summary_fields[e].name?d.test(v.activities[a].summary_fields[e].name)?v.activities[a].objects=v.activities[a].summary_fields[e].name:(c=p(v.activities[a].summary_fields.object1),v.activities[a].objects=''+v.activities[a].summary_fields[e].name+""):v.activities[a].object1&&(v.activities[a].objects=v.activities[a].object1),f&&v.activities[a].summary_fields[f]&&v.activities[a].summary_fields[f].name?d.test(v.activities[a].summary_fields.object2.name)?v.activities[a].objects+=","+v.activities[a].summary_fields[f].name:(c=p(v.activities[a].summary_fields.object2),v.activities[a].objects+=', '+v.activities[a].summary_fields[f].name+""):v.activities[a].object2&&(v.activities[a].objects+=", "+v.activities[a].object2),n(v.activities[a]);setTimeout(function(){s()},500)}),h({scope:v,set:w.name,list:w,url:x}),i({scope:v,list:w,url:x}),v.search(w.iterator)}}]),angular.module("AuthService",["ngCookies","Utilities"]).factory("Authorization",["$http","$rootScope","$location","$cookieStore","GetBasePath",function(a,b,c,d,e){return{setToken:function(a,c){d.remove("token"),d.remove("token_expires"),d.remove("userLoggedIn"),d.put("token",a),d.put("token_expires",c),d.put("userLoggedIn",!0),d.put("sessionExpired",!1),b.token=a,b.userLoggedIn=!0,b.token_expires=c,b.sessionExpired=!1},isUserLoggedIn:function(){return void 0===b.userLoggedIn&&(b.userLoggedIn=d.get("userLoggedIn"),b.sessionExpired=d.get("sessionExpired")),b.userLoggedIn},getToken:function(){return b.token?b.token:d.get("token")},retrieveToken:function(b,c){return a({method:"POST",url:e("authtoken"),data:{username:b,password:c}})},logout:function(){var a=angular.element(document.getElementById("main-view")).scope();a.$destroy(),b.$destroy(),d.remove("accordions"),d.remove("token"),d.remove("token_expires"),d.remove("current_user"),d.remove("lastPath"),d.put("userLoggedIn",!1),d.put("sessionExpired",!1),d.remove("lastPath","/home"),b.current_user={},b.license_tested=void 0,b.userLoggedIn=!1,b.sessionExpired=!1,b.token=null,b.token_expires=null,b.lastPath="/home"},getLicense:function(){return a({method:"GET",url:e("config"),headers:{Authorization:"Token "+this.getToken()}})},setLicense:function(a){a.tested=!1,d.put("license",a)},licenseTested:function(){var a,c;return void 0!==b.license_tested?c=b.license_tested:(a=d.get("license"),c=a&&void 0!==a.tested?a.tested:!1),c},getUser:function(){return a({method:"GET",url:"/api/v1/me/",headers:{Authorization:"Token "+this.getToken()}})},setUserInfo:function(a){b.current_user=a.results[0],d.put("current_user",a.results[0])},restoreUserInfo:function(){b.current_user=d.get("current_user")},getUserInfo:function(a){var c;return b.current_user?b.current_user[a]:(this.restoreUserInfo(),c=d.get("current_user"),c[a])}}}]),angular.module("InventoryTree",["Utilities","RestServices","GroupsHelper","PromptDialog"]).factory("SortNodes",[function(){return function(a){var b,c,d=[],e=[];for(b=0;b0?!0:!1,has_inventory_sources:s[e].has_inventory_sources,id:r,source:s[e].summary_fields.inventory_source.source,group_id:s[e].id,event_level:c,children:i,ngicon:s[e].children.length>0?"fa fa-minus-square-o node-toggle":"fa fa-square-o node-no-toggle",ngclick:"toggle("+r+")",related:{children:s[e].children.length>0?s[e].related.children:"",inventory_source:s[e].related.inventory_source},status:s[e].summary_fields.inventory_source.status,status_class:k["class"],status_tooltip:k.tooltip,launch_tooltip:k.launch_tip,launch_class:k.launch_class,hosts_status_tip:n.tooltip,show_failures:n.failures,hosts_status_class:n["class"],selected_class:"",show:!0,isDraggable:!0,isDroppable:!0},q.push(o),p&&o.group_id===p&&(m.selected_tree_id=r,m.selected_group_id=o.group_id),s[e].children.length>0&&j(s[e].children,r,c+1)}}function k(){e("start"),a.setUrl(b("inventory")+l+"/"),a.get().success(function(a){m.$emit("buildAllGroups",a.name,a.related.tree,a.related.groups)}).error(function(a,b){e("stop"),c(m,a,b,null,{hdr:"Error!",msg:"Failed to get inventory: "+l+". GET returned: "+b})})}var l=h.inventory_id,m=h.scope,n=h.refresh,o=h.emit,p=h.new_group_id,q=[],r=1;m.buildAllGroupsRemove&&m.buildAllGroupsRemove(),m.buildAllGroupsRemove=m.$on("buildAllGroups",function(b,d,f){a.setUrl(f),a.get().success(function(a){i(a),j(a,0,0),m.autoShowGroupHelp=0===a.length?!0:!1,n?(m.groups=q,m.$emit("GroupTreeRefreshed",d,q,o)):m.$emit("GroupTreeLoaded",d,q,o)}).error(function(a,b){e("stop"),c(m,a,b,null,{hdr:"Error!",msg:"Failed to get inventory tree for: "+l+". GET returned: "+b})})}),k()}}]).factory("UpdateGroup",["ApplyEllipsis","GetSyncStatusMsg","Empty",function(a,b,c){return function(d){var e,f,g,h,i,j=d.scope,k=d.group_id,l=d.properties;for(e=0;e\n',m+='\n",m+="\n",i=angular.element(document.getElementById("inventory-modal-container")),i.empty().append(m),a(i)(j),$("#copy-prompt-modal").modal({backdrop:"static",keyboard:!0,show:!0}),j.moveGroup=function(){var a,b,i;$("#copy-prompt-modal").modal("hide"),e("start"),j.removeGroupRemove&&j.removeGroupRemove(),j.removeGroupRemove=j.$on("removeGroup",function(){l.parent>0?(i=d({list:j.groups,key:"id",val:l.parent}),a=h("base")+"groups/"+i.group_id+"/children/",f.setUrl(a),f.post({id:l.group_id,disassociate:1}).success(function(){j.$emit("GroupDeleteCompleted")}).error(function(a,b){e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to remove "+l.name+" from "+i.name+". POST returned status: "+b})})):j.$emit("GroupDeleteCompleted")}),a=g(k.group_id)?h("inventory")+j.inventory_id+"/groups/":h("base")+"groups/"+k.group_id+"/children/",b={id:l.group_id,name:l.name,description:l.description,inventory:j.inventory_id},f.setUrl(a),f.post(b).success(function(){j.$emit("removeGroup")}).error(function(a,b){var d=g(k.group_id)?"inventory":k.name;e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+d+". POST returned status: "+b})})},j.copyGroup=function(){$("#copy-prompt-modal").modal("hide"),e("start");var a=g(k.group_id)?h("inventory")+j.inventory_id+"/groups/":h("base")+"groups/"+k.group_id+"/children/",b={id:l.group_id,name:l.name,description:l.description,inventory:j.inventory_id};f.setUrl(a),f.post(b).success(function(){j.$emit("GroupDeleteCompleted")}).error(function(a,b){var d=g(k.group_id)?"inventory":k.name;e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+d+". POST returned status: "+b})})}}}]).factory("CopyMoveHost",["$compile","Alert","ProcessErrors","Find","Wait","Rest","Empty","GetBasePath",function(a,b,c,d,e,f,g,h){return function(b){var g,i,j=b.scope,k=d({list:j.groups,key:"id",val:b.target_tree_id}),l=d({list:j.hosts,key:"id",val:b.host_id}),m=!1,n="";if(l.summary_fields.all_groups)for(i=0;i\n',n+='\n",n+="\n",n+="\n",g=angular.element(document.getElementById("inventory-modal-container")),g.empty().append(n),a(g)(j),$("#copy-alert-modal").modal({backdrop:"static",keyboard:!0,show:!0})):(n="",n+='\n",g=angular.element(document.getElementById("inventory-modal-container")),g.empty().append(n),a(g)(j),$("#copy-prompt-modal").modal({backdrop:"static",keyboard:!0,show:!0}),j.copyHost=function(){$("#copy-prompt-modal").modal("hide"),e("start"),f.setUrl(h("groups")+k.group_id+"/hosts/"),f.post(l).success(function(){j.$emit("GroupTreeRefreshed")}).error(function(a,b){e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+k.name+". POST returned status: "+b})})})}}]),angular.module("RestServices",["ngCookies","AuthService"]).factory("Rest",["$http","$rootScope","$cookieStore","$q","Authorization",function(a,b,c,d,e){return{headers:{},setUrl:function(a){this.url=a},checkExpired:function(){return b.sessionTimer.isExpired()},pReplace:function(){var a,b;for(a in this.params)b=new RegExp("\\:"+a,"gm"),b.test(this.url)&&(this.url=this.url.replace(b,this.params[a]),delete this.params[a])},createResponse:function(a,b){var c=d.reject({data:a,status:b});return c.success=function(a){return c.then(function(b){a(b.data,b.status)},null),c},c.error=function(a){return c.then(null,function(b){a(b.data,b.status)}),c},c},setHeader:function(a){for(var b in a)this.headers[b]=a[b]},get:function(b){b=b?b:{},this.params=b.params?b.params:null,this.pReplace();var c=this.checkExpired(),d=e.getToken();return c?this.createResponse({detail:"Token is expired"},401):d?(this.setHeader({Authorization:"Token "+d}),this.setHeader({"X-Auth-Token":"Token "+d}),a({method:"GET",url:this.url,headers:this.headers,params:this.params})):this.createResponse({detail:"Invalid token"},401)},post:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"POST",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},put:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"PUT",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},destroy:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"DELETE",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},options:function(){var b=e.getToken(),c=this.checkExpired();return c?this.createResponse({detail:"Token is expired"},401):b?(this.setHeader({Authorization:"Token "+b}),this.setHeader({"X-Auth-Token":"Token "+b}),a({method:"OPTIONS",url:this.url,headers:this.headers})):this.createResponse({detail:"Invalid token"},401)}}}]),angular.module("TimerService",["ngCookies","Utilities"]).factory("Timer",["$rootScope","$cookieStore","$location","GetBasePath","Empty",function(a,b){return{sessionTime:null,timeout:null,getSessionTime:function(){return this.sessionTime?this.sessionTime:b.get("sessionTime")},isExpired:function(){var a=this.getSessionTime(),b=(new Date).getTime();return 0>=a-b?!0:(this.moveForward(),!1)},expireSession:function(){this.sessionTime=0,a.sessionExpired=!0,b.put("sessionExpired",!0)},moveForward:function(){var c=(new Date).getTime()+1e3*$AnsibleConfig.session_timeout;this.sessionTime=c,b.put("sessionTime",c),a.sessionExpired=!1,b.put("sessionExpired",!1)},init:function(){return this.moveForward(),this}}}]),angular.module("Utilities",["RestServices","Utilities"]).factory("ClearScope",[function(){return function(a){var b,c=document.getElementById(a);c&&(b=angular.element(c).scope(),b.$destroy()),$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()});try{$("#help-modal").dialog("close")}catch(d){}$(window).unbind("resize")}}]).factory("Empty",[function(){return function(a){return null===a||void 0===a||""===a?!0:!1}}]).factory("ToggleClass",function(){return function(a,b){$(a)&&$(a).hasClass(b)?$(a).removeClass(b):$(a)&&$(a).addClass(b)}}).factory("Alert",["$rootScope",function(a){return function(b,c,d,e,f,g){f?(a.alertHeader2=b,a.alertBody2=c,a.alertClass2=d?d:"alert-danger",$("#alert-modal2").modal({show:!0,keyboard:!0,backdrop:"static"}),a.disableButtons2=g?!0:!1,e&&$("#alert-modal2").on("hidden",function(){e()}),$(document).bind("keydown",function(a){27===a.keyCode&&($("#alert-modal2").modal("hide"),e&&e())})):(a.alertHeader=b,a.alertBody=c,a.alertClass=d?d:"alert-danger",$("#alert-modal").modal({show:!0,keyboard:!0,backdrop:"static"}),$(document).bind("keydown",function(a){27===a.keyCode&&($("#alert-modal").modal("hide"),e&&e())}),a.disableButtons=g?!0:!1,e&&$("#alert-modal").on("hidden",function(){e()}))}}]).factory("ProcessErrors",["$rootScope","$cookieStore","$log","$location","Alert","Wait",function(a,b,c,d,e,f){return function(b,c,g,h,i){var j,k,l;if(f("stop"),$AnsibleConfig.debug_mode&&console&&(console.log("Debug status: "+g),console.log("Debug data: "),console.log(c)),403===g)l="The API responded with a 403 Access Denied error. ",l+=c.detail?"Detail: "+c.detail:"Please contact your system administrator.",e(i.hdr,l);else if(401===g&&c.detail&&"Token is expired"===c.detail||401===g&&c.detail&&"Invalid token"===c.detail)a.sessionTimer.expireSession(),d.url("/login");else if(c.non_field_errors)e("Error!",c.non_field_errors);else if(c.detail)e(i.hdr,i.msg+" "+c.detail);else if(c.__all__)e("Error!",c.__all__);else if(h){k=!1;for(j in h.fields)c[j]&&h.fields[j].tab&&$("#"+h.name+'_tabs a[href="#'+h.fields[j].tab+'"]').tab("show"),h.fields[j].realName&&c[h.fields[j].realName]&&(b[j+"_api_error"]=c[h.fields[j]][0],$('[name="'+h.fields[j].realName+'"]').addClass("ng-invalid"),k=!0),h.fields[j].sourceModel?c[j]&&(b[h.fields[j].sourceModel+"_"+h.fields[j].sourceField+"_api_error"]=c[j][0],$('[name="'+h.fields[j].sourceModel+"_"+h.fields[j].sourceField+'"]').addClass("ng-invalid"),k=!0):c[j]&&(b[j+"_api_error"]=c[j][0],$('[name="'+j+'"]').addClass("ng-invalid"),k=!0); +!k&&i&&e(i.hdr,i.msg)}else e(i.hdr,i.msg)}}]).factory("LoadBreadCrumbs",["$rootScope","$routeParams","$location","Empty",function(a,b,c,d){return function(b){function e(a){return a.toUpperCase()}function f(a){return"ies"===a?"y":""}var g,h,i,j,k,l,m,n;if(!d(b)){for(h=!1,j=0;j1)for(j=0;j0&&k[j].match(/\d+/)){for(m=k[j-1],n=m.replace(/(ies$|s$)/,f),n=n.charAt(0).toUpperCase()+n.slice(1),h=!1,i=0;i\n",b+='
\n',b+='',b+="
\n",b+='
'+a.box+"
",b+=f&&a.autoOffNotice?'
\n':""}var h,i,j,k,l=!1;e=a,j=d.story.width?d.story.width:510,k=d.story.height?d.story.height:600,i=$(document).width(),j=j>i?i:j;try{l=$("#help-modal").dialog("isOpen")}catch(m){}l?$("#help-modal").html(g(d.story.steps[e])):(h=[],d.story.steps.length>1&&(h.push({text:"Prev",click:function(a){e-1===0&&$(a.target).button("disable"),e-10&&$(a.target).prev().button("enable"),e+1===d.story.steps.length-1&&$(a.target).button("disable"),b(e+1)}})),h.push({text:"Close",click:function(){$("#help-modal").dialog("close")}}),$("#help-modal").html(g(d.story.steps[e])).dialog({position:{my:"center top",at:"center top+150",of:"body"},title:d.story.hdr,width:j,height:k,buttons:h,closeOnEscape:!0,show:500,hide:500,resizable:!1,close:function(){$("#help-modal").empty()}}),$(".ui-dialog-buttonset button").each(function(){var a,b,c;c=$(this).text(),"Close"===c?(b="fa-times",a="btn btn-default",$(this).attr({"class":a}).html(' Close')):"Prev"===c?(b="fa-chevron-left",a="btn btn-primary",$(this).attr({"class":a}).html(' Prev')):(b="fa-chevron-right",a="btn btn-primary",$(this).attr({"class":a}).html('Next ').css({"margin-right":"20px"}))}),$('.ui-dialog[aria-describedby="help-modal"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$("#auto-off-checkbox").click(function(){$('input[name="auto-off-checkbox"]:checked').length?c("inventoryAutoHelp","off"):c("inventoryAutoHelp","on")}))}var d=a.defn,e=a.step,f=a.autoShow||!1;b(0)}}]).factory("ReturnToCaller",["$location","Empty",function(a,b){return function(c){var d,e=a.path().replace(/^\//,"").split("/"),f="";for(c=b(c)?e.length-1:c+1,d=0;c>d;d++)f+="/"+e[d];a.path(f)}}]).factory("FormatDate",["$filter",function(a){return function(b){return a("date")(b,"MM/dd/yy HH:mm:ss")}}]).factory("Wait",["$rootScope",function(a){return function(b){var c,d,e,f,g,h;"start"!==b||a.waiting?"stop"===b&&a.waiting&&$(".spinny, .overlay").fadeOut(400,function(){a.waiting=!1}):(a.waiting=!0,c=$(window).width(),d=$(window).height(),e=$(".spinny").width(),f=$(".spinny").height(),g=(c-e)/2,h=(d-f)/2,$(".overlay").css({width:$(document).width(),height:$(document).height()}).fadeIn(),$(".spinny").css({top:h,left:g}).fadeIn(400))}}]).factory("HideElement",[function(){return function(a,b){var c=$(a),d=c.css("width"),e=c.css("height"),f=c.position(),g=c.parent(),h=c.css("border-radius"),i=c.css("background-color"),j=c.css("margin"),k=c.css("padding");g.append('
'),$("#curtain-div").show(0,b)}}]).factory("ShowElement",[function(){return function(){$("#curtain-div").fadeOut(500,function(){$(this).remove()})}}]).factory("GetChoices",["Rest","ProcessErrors",function(a,b){return function(c){var d=c.scope,e=c.url,f=c.field,g=c.variable,h=c.callback,i=c.choice_name;d[g]?d[g].length=0:d[g]=[],a.setUrl(e),a.options().success(function(a){var b,c;for(b=i?a.actions.GET[f][i]:a.actions.GET[f].choices,c=0;c
. Use the Refresh button to monitor the status.","alert-info"):o({scope:A,group_id:d,url:A.group_update_url,group_name:A.name,group_source:A.source.value})},A.sourceChange=function(){v({scope:A,form:g})}}}]).factory("GroupsDelete",["$rootScope","$location","$log","$routeParams","Rest","Alert","GroupForm","GenerateForm","Prompt","ProcessErrors","GetBasePath","Wait","BuildTree","Find",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return function(a){var b,c=a.scope,d=a.tree_id,f=a.inventory_id,g=n({list:c.groups,key:"id",val:d}),h=k("inventory")+f+"/groups/";b=function(){$("#prompt-modal").on("hidden.bs.modal",function(){l("start")}),$("#prompt-modal").modal("hide"),e.setUrl(h),e.post({id:g.group_id,disassociate:1}).success(function(){$("#prompt-modal").off(),c.$emit("GroupDeleteCompleted")}).error(function(a,b){l("stop"),j(c,a,b,null,{hdr:"Error!",msg:"Call to "+h+" failed. POST returned status: "+b})})},i({hdr:"Delete Group",body:"

Are you sure you want to delete group "+g.name+"?

",action:b,"class":"btn-danger"})}}]).factory("ShowUpdateStatus",["$rootScope","$location","$log","$routeParams","Rest","Alert","GenerateForm","Prompt","ProcessErrors","GetBasePath","FormatDate","InventoryStatusForm","Wait","Empty","WatchInventoryWindowResize",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return function(a){function b(a){var b,d;return b=a.match(/\n/g),d=b?b.length:1,d>c?c:d}var c,d,h,j,n,p,q,r=a.group_name,s=a.last_update,t=g,u=l,v=a.license_error;void 0===s||null===s||""===s?(m("stop"),f("Missing Configuration","The selected group is not configured for inventory sync. Edit the group and provide Source information.","alert-info")):(d='
\n
\n',$("#inventory-modal-container").empty().append(d),h=t.inject(u,{mode:"edit",id:"form-container",breadCrumbs:!1,related:!1}),j=$(document).width(),n=$("body").height(),j>1199?(p=675,q=750>n?n-20:750,c=18):1199>=j&&j>=768?(p=550,q=620>n?n-15:620,c=12):(p=j-20,q=500>n?n:500,c=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:p,height:q,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#inventory-modal-container").empty(),o()},open:function(){m("stop")}}),e.setUrl(s),e.get().success(function(a){for(var c in u.fields)a[c]&&(h[c]="created"===c?k(new Date(a[c])):a[c]);h.license_error=v,h.status_rows=b(a.status),h.stdout_rows=b(a.result_stdout),h.traceback_rows=b(a.result_traceback),$("#status-modal-dialog").dialog("open")}).error(function(a,b){$("#form-modal").modal("hide"),i(h,a,b,null,{hdr:"Error!",msg:"Failed to retrieve last update: "+s+". GET status: "+b})}))}}]),angular.module("HostsHelper",["RestServices","Utilities","ListGenerator","HostListDefinition","SearchHelper","PaginationHelpers","ListGenerator","AuthService","HostsHelper","InventoryHelper","RelatedSearchHelper","InventoryFormDefinition","SelectionHelper","HostGroupsFormDefinition"]).factory("SetEnabledMsg",[function(){return function(a){a.enabledToolTip=a.has_inventory_sources?a.enabled?"Host is available":"Host is not available":a.enabled?"Host is available. Click to toggle.":"Host is not available. Click to toggle."}}]).factory("SetHostStatus",["SetEnabledMsg",function(a){return function(b){b.activeFailuresLink="/#/hosts/"+b.id+"/job_host_summaries/?inventory="+b.inventory+"&host_name="+encodeURI(b.name),b.has_active_failures===!0?(b.badgeToolTip="Most recent job failed. Click to view jobs.",b.active_failures="failed"):b.has_active_failures===!1&&null===b.last_job?(b.has_active_failures="none",b.badgeToolTip="No job data available.",b.active_failures="n/a"):b.has_active_failures===!1&&null!==b.last_job&&(b.badgeToolTip="Most recent job successful. Click to view jobs.",b.active_failures="success"),b.enabled_flag=b.enabled,a(b)}}]).factory("SetStatus",["SetEnabledMsg","Empty",function(a,b){return function(c){function d(a){return a.length>25?a.substr(0,25)+"...":a}function e(a){var b,c,e;if(a.has_active_failures===!0||a.has_active_failures===!1&&null!==a.last_job)if(a.has_active_failures===!0?(a.badgeToolTip="Most recent job failed. Click to view jobs.",a.active_failures="failed"):(a.badgeToolTip="Most recent job successful. Click to view jobs.",a.active_failures="success"),a.summary_fields.recent_jobs.length>0){for(e=a.summary_fields.recent_jobs.sort(function(a,b){return-1*(a-b)}),h="Recent Jobs",g='\n',g+="\n",g+="\n",g+="\n",g+="\n",g+="\n",g+="\n",b=0;b\n",g+='\n",g+='\n',g+='\n',g+='\n",g+="\n";g+="\n",g+="
ID\n",g+='Status\n',g+="ViewName\n",g+="
'+c.id+"Events Hosts'+d(c.name)+"
\n"}else h="No job data",g="

No recent job data available for this host.

";else a.has_active_failures===!1&&null===a.last_job&&(a.has_active_failures="none",a.badgeToolTip="No job data available.",a.active_failures="n/a");a.job_status_html=g,a.job_status_title=h}var f,g,h,i=c.scope,j=c.host;if(b(j))for(f=0;fAre you sure you want to delete host "+j+" from group "+n.name+"?

":"

Are you sure you want to delete host "+j+"?

",g({hdr:"Delete Host",body:c,action:b,"class":"btn-danger"})}}]).factory("EditHostGroups",["$rootScope","$location","$log","$routeParams","Rest","Alert","GenerateForm","Prompt","ProcessErrors","GetBasePath","HostsReload","ParseTypeChange","Wait",function(a,b,c,d,e,f,g,h,i,j,k,l,m){return function(a){var b,c,d,f,h,l=a.host_id,n=a.inventory_id,o=g,p=[];for(c='
\n',c+='
\n',c+="\n",c+='\n',c+="
\n",c+='
\n',c+="\n",c+='\n',c+="
\n",c+="
\n",c+='
\n',c+='
\n',c+='\n',c+='\n',c+="

(move selected groups)

\n",c+="
\n",c+="
\n",d=j("hosts")+l+"/",f=o.inject(null,{mode:"edit",modal:!0,related:!1,html:c}),b=0;bGroups',f.formModalCancelShow=!0,f.formModalActionDisabled=!0,$("#form-modal .btn-none").removeClass("btn-none").addClass("btn-success"),f.hostGroupChangeRemove&&f.hostGroupChangeRemove(),f.hostGroupChangeRemove=f.$on("hostGroupChange",function(){p.pop(),0===p.length&&(h=function(){setTimeout(function(){m("stop")},500)},k({scope:f,inventory_id:n,group_id:f.group_id,action:h}))}),f.formModalAction=function(){var a,b,c;for($("#form-modal").modal("hide"),m("start"),a=0;a0?(f.assignedGroups=null,f.leftButtonDisabled=!0,f.rightButtonDisabled=!1):f.rightButtonDisabled=!0},f.rightChange=function(){null!==f.assignedGroups&&f.assignedGroups.length>0?(f.selectedGroups=null,f.leftButtonDisabled=!1,f.rightButtonDisabled=!0):f.leftButtonDisabled=!0},f.moveLeft=function(){var a,b,c,d;for(a=0;af.available_groups[b].name.toLowerCase()&&f.assignedGroups[a].name.toLowerCase()f.host_groups[b].name.toLowerCase()&&f.selectedGroups[a].name.toLowerCase()0){for(j("stop"),u+='
\n',u+=w?w:"",o=0;o\n',u+='\n",u+='
\n',u+='A value is required!\n',u+='\n',u+="
\n",u+="\n",n=l.associated,l=p.fields[l.associated],q[n]="",u+='
\n',u+='\n",u+='
\n',u+='A value is required!\n',l.awPassMatch&&(u+='Must match Password value\n'),u+='\n',u+="
\n",u+="
\n";u+="\n",m=angular.element(document.getElementById("password-body")),m.html(u),c(m.contents())(q),$("#password-modal").modal(),$("#password-modal").on("shown.bs.modal",function(){$("#password-body").find('input[type="password"]:first').focus()})}else q.startJob()}}]).factory("SubmitJob",["PromptPasswords","$compile","Rest","$location","GetBasePath","CredentialList","LookUpInit","CredentialForm","ProcessErrors","JobTemplateForm","Wait",function(a,b,c,d,e,f,g,h,i,j,k){return function(b){function l(b){var e,f,g;m.credentialWatchRemove&&m.credentialWatchRemove(),e=(new Date).toISOString(),f=b.related.jobs?b.related.jobs:b.related.job_template+"jobs/",g=o?o:b.name,k("start"),c.setUrl(f),c.post({name:g+" "+e,description:b.description,job_template:b.id,inventory:b.inventory,project:b.project,playbook:b.playbook,credential:b.credential,forks:b.forks,limit:b.limit,verbosity:b.verbosity,extra_vars:b.extra_vars}).success(function(b){m.job_id=b.id,b.passwords_needed_to_start.length>0?a({scope:m,passwords:b.passwords_needed_to_start,start_url:b.related.start,form:h}):(c.setUrl(b.related.start),c.post().success(function(){k("stop");var a=d.path().replace(/^\//,"").split("/")[0];"jobs"===a?m.refresh():d.path("/jobs")}).error(function(a,b){i(m,a,b,null,{hdr:"Error!",msg:"Failed to start job. POST returned status: "+b})}))}).error(function(a,b){k("stop"),i(m,a,b,null,{hdr:"Error!",msg:"Failed to create job. POST returned status: "+b})})}var m=b.scope,n=b.id,o=b.template?b.template:null,p=d.path().replace(/^\//,"").split("/")[0],q=e(p)+n+"/";k("start"),c.setUrl(q),c.get().success(function(a){m.credential="",""===a.credential||null===a.credential?(k("stop"),m.credentialWatchRemove&&m.credentialWatchRemove(),m.credentialWatchRemove=m.$watch("credential",function(b,c){b!==c&&""!==m.credential&&null!==m.credential&&void 0!==m.credential&&(a.credential=m.credential,l(a))}),g({scope:m,form:j,current_item:null,list:f,field:"credential",hdr:"Credential Required"}),m.lookUpCredential()):l(a)}).error(function(a,b){i(m,a,b,null,{hdr:"Error!",msg:"Failed to get job template details. GET returned status: "+b})})}}]).factory("ProjectUpdate",["PromptPasswords","$compile","Rest","$location","GetBasePath","ProcessErrors","Alert","ProjectsForm","Wait",function(a,b,c,d,e,f,g,h,i){return function(b){var d=b.scope,j=b.project_id,k=e("projects")+j+"/update/";d.removeUpdateSubmitted&&d.removeUpdateSubmitted(),d.removeUpdateSubmitted=d.$on("UpdateSubmitted",function(){i("stop"),g("Update Started","The request to start the SCM update process was submitted. To monitor the update status, refresh the page by clicking the Refresh button.","alert-info"),d.refresh()}),d.removeSCMSubmit&&d.removeSCMSubmit(),d.removeSCMSubmit=d.$on("SCMSubmit",function(b,c,e){a({scope:d,passwords:c,start_url:k,form:h,extra_html:e})}),i("start"),c.setUrl(k),c.get().success(function(a){var b,c;if(i("stop"),a.can_update){for(c="",b=0;b\n',c+='\n',c+='
\n',c+=' button.',"alert-info"),d.removeHostReloadComplete&&d.removeHostReloadComplete()}),d.removeUpdateSubmitted&&d.removeUpdateSubmitted(),d.removeUpdateSubmitted=d.$on("UpdateSubmitted",function(a,b){"started"===b&&(d.refreshGroups?(d.selected_tree_id=k,d.selected_group_id=i,d.refreshGroups()):d.refresh&&d.refresh(),d.$emit("HostReloadComplete"))}),d.removeInventorySubmit&&d.removeInventorySubmit(),d.removeInventorySubmit=d.$on("InventorySubmit",function(b,c,f){a({scope:d,passwords:c,start_url:e,form:h,extra_html:f})}),j("start"),c.setUrl(e),c.get().success(function(a){a.can_update?d.$emit("InventorySubmit",a.passwords_needed_to_update):(j("stop"),g("Permission Denied","You do not have access to run the update. Please contact your system administrator.","alert-danger"))}).error(function(a,b){j("stop"),f(d,a,b,null,{hdr:"Error!",msg:"Failed to get inventory_source details. "+e+"GET status: "+b})})}}]),angular.module("JobsHelper",["Utilities","FormGenerator","JobSummaryDefinition","InventoryHelper"]).factory("JobStatusToolTip",[function(){return function(a){var b;switch(a){case"successful":case"success":b="There were no failed tasks.";break;case"failed":b="Some tasks encountered errors.";break;case"canceled":b="Stopped by user request.";break;case"new":b="In queue, waiting on task manager.";break;case"waiting":b="SCM Update or Inventory Update is executing.";break;case"pending":b="Not in queue, waiting on task manager.";break;case"running":b="Playbook tasks executing."}return b}}]).factory("ShowJobSummary",["Rest","Wait","GetBasePath","FormatDate","ProcessErrors","GenerateForm","JobSummary","WatchInventoryWindowResize",function(a,b,c,d,e,f,g,h){return function(i){function j(a){var b=a.match(/\n/g),c=b?b.length:1;return c>p?20:c}var k,l,m,n,o,p,q,r,s=i.job_id,t=f,u=g;r='
\n',$("#inventory-modal-container").empty().append(r),k=t.inject(u,{mode:"edit",id:"form-container",breadCrumbs:!1,related:!1}),l=$(document).width(),m=$("body").height(),l>1199?(n=675,o=750>m?m-20:750,p=20):1199>=l&&l>=768?(n=550,o=620>m?m-15:620,p=15):(n=l-20,o=500>m?m:500,p=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:n,height:o,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#inventory-modal-container").empty(),h()},open:function(){b("stop")}}),b("start"),q=c("jobs")+s+"/",a.setUrl(q),a.get().success(function(a){var b;k.id=a.id,k.name=a.name,k.status=a.status,k.result_stdout=a.result_stdout,k.result_traceback=a.result_traceback,k.stdout_rows=j(k.result_stdout),k.traceback_rows=j(k.result_traceback),b=new Date(a.created),k.created=d(b),$("#status-modal-dialog").dialog("open")}).error(function(a,b){e(k,a,b,null,{hdr:"Error!",msg:"Attempt to load job failed. GET returned status: "+b})})}}]),angular.module("LookUpHelper",["RestServices","Utilities","SearchHelper","PaginationHelpers","ListGenerator","ApiLoader"]).factory("LookUpInit",["Alert","Rest","GenerateList","SearchInit","PaginateInit","GetBasePath","FormatDate","Empty",function(a,b,c,d,e,f,g,h){return function(b){var i,j,k,l,m=b.scope,n=b.form,o=b.list,p=b.field,q=b.postAction;i=b.url?b.url:f("inventories"===o.name?"inventory":o.name),j=o.iterator.charAt(0).toUpperCase()+o.iterator.substring(1),k=b.hdr?b.hdr:"Select "+j,l=/\/$/.test(i)?i+"?":i+"&",l+=n.fields[p].sourceField+"__iexact=:value",$('input[name="'+n.fields[p].sourceModel+"_"+n.fields[p].sourceField+'"]').attr("data-url",l),$('input[name="'+n.fields[p].sourceModel+"_"+n.fields[p].sourceField+'"]').attr("data-source",p),m["lookUp"+j]=function(){var b=c,f=b.inject(o,{mode:"lookup",hdr:k});$("#lookup-modal").on("hidden.bs.modal",function(){f.searchCleanup&&f.searchCleanup(),(""===m[p]||null===m[p])&&(m[n.fields[p].sourceModel+"_"+n.fields[p].sourceField]="",m.$$phase||m.$digest())}),f.selectAction=function(){var c,d=!1;for(c=0;c5?f[j+"_page"]-5:1,e=f[j+"_page"]<6?10<=f[j+"_num_pages"]?10:f[j+"_num_pages"]:f[j+"_page"]+4=c;c++)f[j+"_page_range"].push(c)}}]).factory("RelatedPaginateInit",["RefreshRelated","$cookieStore","Wait",function(a,b,c){return function(d){var e,f=d.scope,g=d.relatedSets,h=d.pageSize?d.pageSize:10;for(e in g)f[g[e].iterator+"_url"]=g[e].url,f[g[e].iterator+"_page"]=0,f[g[e].iterator+"_page_size"]=h;f.getPage=function(b,d,e){var g=f[e+"_url"].replace(/.page\=\d+/,""),h=/\/$/.test(g)?"?":"&";g+=h+"page="+b,g+=f[e+"SearchParams"]?"&"+f[e+"SearchParams"]+"&page_size="+f[e+"_page_size"]:"page_size="+f[e+"PageSize"],c("start"),a({scope:f,set:d,iterator:e,url:g})},f.pageIsActive=function(a,b){return a===f[b+"_page"]?"active":""},f.changePageSize=function(c,d){f[d+"_page"]=1;var e=f[d+"_url"];b.put(d+"_page_size",f[d+"_page_size"]),e=e.replace(/\/\?.*$/,"/"),e+=f[d+"SearchParams"]?"?"+f[d+"SearchParams"]+"&page_size="+f[d+"_page_size"]:"?page_size="+f[d+"_page_size"],a({scope:f,set:c,iterator:d,url:e})}}}]).factory("PaginateInit",["Refresh","$cookieStore","Wait",function(a,b,c){return function(b){var d=b.scope,e=b.list,f=b.iterator?b.iterator:e.iterator,g=b.mode?b.mode:null;d[f+"_page"]=b.page?b.page:1,d[f+"_url"]=b.url,d[f+"_mode"]=g,d[f+"_page_size"]=b.pageSize?b.pageSize:"lookup"===g?5:20,d.getPage=function(b,e,f){var g=d[f+"_url"].replace(/.page\=\d+/,""),h=/\/$/.test(g)?"?":"&";g+=h+"page="+b,g+=d[f+"SearchParams"]?"&"+d[f+"SearchParams"]+"&page_size="+d[f+"_page_size"]:"page_size="+d[f+"PageSize"],c("start"),a({scope:d,set:e,iterator:f,url:g})},d.pageIsActive=function(a,b){return a===d[b+"_page"]?"active":""},d.changePageSize=function(b,e){d[e+"_page"]=0;var f=d[e+"_url"].replace(/\?page_size\=\d+/,""),g=/\/$/.test(f)?"?":"&";f+=d[e+"SearchParams"]?g+d[e+"SearchParams"]+"&page_size="+d[e+"_page_size"]:g+"page_size="+d[e+"_page_size"],c("start"),a({scope:d,set:b,iterator:e,url:f})}}}]),angular.module("ParseHelper",[]).factory("ParseTypeChange",[function(){return function(a,b,c){var d=b?b:"variables",e=c?c:"parseType";a.blockParseTypeWatch=!1,a.blockVariableDataWatch=!1,a["remove"+d+"Watch"]&&a["remove"+d+"Watch"](),a["remove"+d+"Watch"]=a.$watch(e,function(b,c){var e;if(b!==c)if("json"===b)if(a[d]&&!/^---$/.test(a[d]))try{e=jsyaml.load(a[d]),a[d]=JSON.stringify(e,null," ")}catch(f){}else a[d]="{}";else if(a[d]&&!/^\{\}$/.test(a[d]))try{e=JSON.parse(a[d]),a[d]=jsyaml.safeDump(e)}catch(f){}else a[d]="---"})}}]),angular.module("PermissionsHelper",[]).factory("PermissionCategoryChange",[function(){return function(a){var b=a.scope,c=a.reset;"Inventory"===b.category?(b.projectrequired=!1,b.permissionTypeHelp="
\n
Read
\n
Only allow the user or team to view the inventory.
\n
Write
\n
Allow the user or team to modify hosts and groups contained in the inventory, add new hosts and groups, and perform inventory sync operations.\n
Admin
\n
Allow the user or team full access to the inventory. This includes reading, writing, deletion of the inventory and inventory sync operations.
\n
\n"):(b.projectrequired=!0,b.permissionTypeHelp="
\n
Run
\n
Allow the user or team to perform a live deployment of the project against the inventory. In Run mode modules will be executed, and changes to the inventory will occur.
\n
Check
\n
Only allow the user or team to deploy the project against the inventory as a dry-run operation. In Check mode, module operations will only be simulated. No changes will occur.
\n
\n"),c&&(b.permission_type="Inventory"===b.category?"read":"run")}}]),angular.module("ProjectPathHelper",["RestServices","Utilities"]).factory("GetProjectPath",["Alert","Rest","GetBasePath","ProcessErrors",function(a,b,c,d){return function(a){function e(a){var b,c,d=[],e=[];for(b=0;b
\n',$("#projects-modal-container").empty().append(b),c=q.inject(r,{mode:"edit",id:"form-container",related:!1,breadCrumbs:!1}),q.reset(),d=$(document).width(),f=$("body").height(),d>1199?(h=675,j=750>f?f-20:750,n=20):1199>=d&&d>=768?(h=550,j=620>f?f-15:620,n=15):(h=d-20,j=500>f?f:500,n=10),$("#status-modal-dialog").dialog({buttons:{OK:function(){$(this).dialog("close")}},modal:!0,width:h,height:j,autoOpen:!1,create:function(){$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$('.ui-dialog[aria-describedby="status-modal-dialog"]').find(".ui-dialog-buttonset button:first").attr({"class":"btn btn-primary"})},resizeStop:function(){var a=$('.ui-dialog[aria-describedby="status-modal-dialog"]'),b=a.find("#status-modal-dialog");b.width(a.width()-28)},close:function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()}),$("#status-modal-dialog").dialog("destroy"),$("#projects-modal-container").empty()},open:function(){m("stop")}}),e.setUrl(p),e.get().success(function(a){var b,d=a;for(b in r.fields)d[b]?c[b]="created"===b?k(new Date(d[b])):d[b]:d.summary_fields.project[b]&&(c[b]=d.summary_fields.project[b]);$("#status-modal-dialog").dialog({title:d.summary_fields.project.name+" Status"}).dialog("open")}).error(function(a,b){$("#form-modal").modal("hide"),i(c,a,b,r,{hdr:"Error!",msg:"Failed to retrieve status of project: "+o+". GET status: "+b})})}}]),angular.module("SelectionHelper",["Utilities","RestServices"]).factory("SelectionInit",["Rest","Alert","ProcessErrors","ReturnToCaller","Wait",function(a,b,c,d,e){return function(b){var f,g=b.scope,h=b.list,i=b.url,j=b.returnToCaller;f=void 0!==b.selected?b.selected:[],g.formModalActionDisabled=!0,g.disableSelectBtn=!0,g["toggle_"+h.iterator]=function(a,b){var c,d,e;for(c=0;c0?(g.formModalActionDisabled=!1,g.disableSelectBtn=!1):(g.formModalActionDisabled=!0,g.disableSelectBtn=!0)},g.finishSelection=function(){function b(){f=[],void 0!==j?d(j):($("#form-modal").modal("hide"),g.$emit("modalClosed"))}function k(b){a.post(b).success(function(a,b){m.push({result:"success",data:a,status:b}),g.$emit("callFinished")}).error(function(a,b,c){m.push({result:"error",data:a,status:b,headers:c}),g.$emit("callFinished")})}a.setUrl(i);var l,m=[];if(g.formModalActionDisabled=!0,g.disableSelectBtn=!0,e("start"),g.callFinishedRemove&&g.callFinishedRemove(),g.callFinishedRemove=g.$on("callFinished",function(){var a,d=0;if(m.length===f.length){for(e("stop"),a=0;a0)for(l=0;lh)h++,setTimeout(1e3,e());else if("success"===g.status)return d(a)}var f,g={},h=0;return null===c.apiDefaults||void 0===c.apiDefaults?(f="/api/v1/",b.setUrl(f),b.get().success(function(a){var b,d=a;for(b in d)switch(b){case"organizations":d[b].iterator="organization";break;case"jobs":d[b].iterator="job";break;case"users":d[b].iterator="user";break;case"teams":d[b].iterator="team";break;case"hosts":d[b].iterator="host";break;case"groups":d[b].iterator="group";break;case"projects":d[b].iterator="project";break;case"inventories":d[b].iterator="inventory"}c.apiDefaults=d,g={status:"success"}}).error(function(a,b){g={status:"error",msg:"Call to "+f+" failed. GET returned status: "+b}}),e()):d(a)}}]),angular.module("InventoryHelper",["RestServices","Utilities","OrganizationListDefinition","ListGenerator","AuthService","InventoryHelper","InventoryFormDefinition","ParseHelper","SearchHelper"]).factory("WatchInventoryWindowResize",["ApplyEllipsis",function(a){return function(){var b;$(window).resize(function(){clearTimeout(b),b=setTimeout(function(){$("#groups_table .name-column").each(function(){var a=$(this).width(),b=$(this).find(".level").width(),c=parseInt($(this).find(".level").css("padding-left").replace(/px/,"")),d=b+c,e=100-Math.ceil(d/a*100)+"%";$(this).find(".group-name").css({width:e})}),a("#groups_table .group-name a"),a("#hosts_table .host-name a")},100)})}}]).factory("SaveInventory",["InventoryForm","Rest","Alert","ProcessErrors","LookUpInit","OrganizationList","GetBasePath","ParseTypeChange","Wait",function(a,b,c,d,e,f,g,h,i){return function(e){var f,h,j,k=e.scope,l=a,m=g("inventory");i("start");try{if(h="json"===k.inventoryParseType?JSON.parse(k.inventory_variables):jsyaml.load(k.inventory_variables),"object"!=typeof h)throw"failed to return an object!";j={};for(f in l.fields)"inventory_variables"!==f&&(l.fields[f].realName?j[l.fields[f].realName]=k[f]:j[f]=k[f]);b.setUrl(m+k.inventory_id+"/"),b.put(j).success(function(a){k.inventory_variables?(b.setUrl(a.related.variable_data),b.put(h).success(function(){i("stop"),k.$emit("InventorySaved")}).error(function(a,b){d(k,a,b,l,{hdr:"Error!",msg:"Failed to update inventory varaibles. PUT returned status: "+b})})):k.$emit("InventorySaved")}).error(function(a,b){d(k,a,b,l,{hdr:"Error!",msg:"Failed to update inventory. POST returned status: "+b})})}catch(n){i("stop"),c("Error","Error parsing inventory variables. Parser returned: "+n)}}}]).factory("EditInventoryProperties",["InventoryForm","GenerateForm","Rest","Alert","ProcessErrors","LookUpInit","OrganizationList","GetBasePath","ParseTypeChange","SaveInventory","Wait","Store","SearchInit",function(a,b,c,d,e,f,g,h,i,j,k,l,m){return function(n){var o,p=n.scope,q=n.inventory_id,r=b,s=a,t={},u=l("CurrentSearchParams");s.well=!1,o=r.inject(s,{mode:"edit",modal:!0,related:!1,modal_show:!1}),s.well=!0,i(o,"inventory_variables","inventoryParseType"),o.inventoryParseType="yaml",o.formModalActionLabel="Save",o.formModalCancelShow=!0,o.formModalInfo=!1,o.formModalHeader="Inventory Properties",k("start"),c.setUrl(h("inventory")+q+"/"),c.get().success(function(a){var b,c;for(b in s.fields){if("inventory_variables"===b){if($.isEmptyObject(a.variables)||"{}"===a.variables||"null"===a.variables||""===a.variables)o.inventory_variables="---";else try{c=JSON.parse(a.variables),o.inventory_variables=jsyaml.safeDump(c)}catch(e){d("Variable Parse Error","Attempted to parse variables for inventory: "+q+". Parse returned: "+e),console&&(console.log(e),console.log("data:"),console.log(a.variables)),o.inventory_variables="---"}t.inventory_variables=o.variables}else"inventory_name"===b?(o[b]=a.name,t[b]=o[b]):"inventory_description"===b?(o[b]=a.description,t[b]=o[b]):a[b]&&(o[b]=a[b],t[b]=o[b]);s.fields[b].sourceModel&&a.summary_fields&&a.summary_fields[s.fields[b].sourceModel]&&(o[s.fields[b].sourceModel+"_"+s.fields[b].sourceField]=a.summary_fields[s.fields[b].sourceModel][s.fields[b].sourceField],t[s.fields[b].sourceModel+"_"+s.fields[b].sourceField]=a.summary_fields[s.fields[b].sourceModel][s.fields[b].sourceField])}f({scope:o,form:s,current_item:o.organization,list:g,field:"organization"}),k("stop"),$("#form-modal").modal("show")}).error(function(a,b){e(o,a,b,null,{hdr:"Error!",msg:"Failed to get inventory: "+q+". GET returned: "+b})}),o.removeInventorySaved&&o.removeInventorySaved(),o.removeInventorySaved=o.$on("InventorySaved",function(){$("#form-modal").modal("hide"),o.searchCleanp&&o.searchCleanup(),m({scope:p,set:u.set,list:u.list,url:u.defaultUrl,iterator:u.iterator,sort_order:u.sort_order,setWidgets:!1}),p.$emit("RefreshInventories")}),o.cancelModal=function(){o.searchCleanp&&o.searchCleanup(),m({scope:p,set:u.set,list:u.list,url:u.defaultUrl,iterator:u.iterator,sort_order:u.sort_order,setWidgets:!1})},o.formModalAction=function(){p.inventory_id=q,p.inventory_name=o.inventory_name,j({scope:o})}}}]),angular.module("md5Helper",["RestServices","Utilities"]).factory("md5Setup",[function(){return function(a){var b=a.scope,c=a.master,d=a.check_field,e=a.default_val;b[d]=e,c[d]=e,b.genMD5=function(a){var c=new Date;b[a]=$.md5("AnsibleWorks"+c.getTime())},b.toggleCallback=function(a){"false"===b.allow_callbacks&&(b[a]="")},b.selectAll=function(a){$('input[name="'+a+'"]').focus().select()}}}]),angular.module("RefreshRelatedHelper",["RestServices","Utilities","PaginationHelpers"]).factory("RefreshRelated",["ProcessErrors","Rest","Wait","PageRangeSetup",function(a,b,c,d){return function(e){var f=e.scope,g=e.set,h=e.iterator,i=e.url;b.setUrl(i),b.get().success(function(a){d({scope:f,count:a.count,next:a.next,previous:a.previous,iterator:h}),f[g]=a.results,f[h+"Loading"]=!1,f[h+"HoldInput"]=!1,c("stop"),f.$emit("related"+g)}).error(function(b,c){a(f,b,c,null,{hdr:"Error!",msg:"Failed to retrieve "+g+". GET returned status: "+c})})}}]),angular.module("RefreshHelper",["RestServices","Utilities","PaginationHelpers"]).factory("Refresh",["ProcessErrors","Rest","Wait","Empty","PageRangeSetup",function(a,b,c,d,e){return function(d){var f=d.scope,g=d.set,h=d.iterator,i=d.url;f.current_url=i,b.setUrl(i),b.get().success(function(a){var b,d;for(e({scope:f,count:a.count,next:a.next,previous:a.previous,iterator:h}),f[h+"Loading"]=!1,b=1;3>=b;b++)d=1===b?"":b,f[h+"HoldInput"+d]=!1;f[g]=a.results,window.scrollTo(0,0),c("stop"),f.$emit("PostRefresh")}).error(function(b,c){f[h+"HoldInput"]=!1,a(f,b,c,null,{hdr:"Error!",msg:"Failed to retrieve "+g+". GET returned status: "+c})})}}]),angular.module("RelatedSearchHelper",["RestServices","Utilities","RefreshRelatedHelper"]).factory("RelatedSearchInit",["$timeout","Alert","Rest","RefreshRelated","Wait",function(a,b,c,d,e){return function(a){function b(a){var b,c,d,e;for(e in h.related)if("tree"!==h.related[e].type&&(void 0===a||a===h.related[e].iterator)){b=h.related[e].iterator;for(d in h.related[e].fields)if(h.related[e].fields[d].key){f[b+"SearchField"]=d,f[b+"SearchFieldLabel"]=h.related[e].fields[d].label;break}f[b+"SortOrder"]=null,f[b+"SearchType"]="icontains",f[b+"SearchTypeLabel"]="Contains",f[b+"SearchValue"]=null,f[b+"SelectShow"]=!1,f[b+"ShowStartBtn"]=!0,f[b+"HideAllStartBtn"]=!1,c=f[b+"SearchField"],!h.related[e].fields[c].searchType||"boolean"!==h.related[e].fields[c].searchType&&"select"!==h.related[e].fields[c].searchType||(f[b+"SelectShow"]=!0,f[b+"SearchSelectOpts"]=h.fields[c].searchOptions),h.related[e].fields[c].searchType&&"gtzero"===h.related[e].fields[c].searchType&&(f[b+"InputHide"]=!0)}}var c,f=a.scope,g=a.relatedSets,h=a.form;b(),f.resetSearch=function(a){b(a),f.search(a)},f.setSearchField=function(a,b,c){var d,e;for(e in h.related)h.related[e].iterator===a&&(d=h.related[e].fields[b]);f[a+"SearchFieldLabel"]=c,f[a+"SearchField"]=b,f[a+"SearchValue"]="",f[a+"SelectShow"]=!1,f[a+"InputHide"]=!1,f[a+"ShowStartBtn"]=!0,void 0!==d.searchType&&"gtzero"===d.searchType&&(f[a+"InputHide"]=!0,f[a+"ShowStartBtn"]=!1),void 0===d.searchType||"boolean"!==d.searchType&&"select"!==d.searchType||(f[a+"SelectShow"]=!0,f[a+"SearchSelectOpts"]=d.searchOptions),void 0!==d.searchType&&"int"===d.searchType&&(f[a+"SearchType"]="int"),f.search(a)},f.setSearchType=function(a,b,c){f[a+"SearchTypeLabel"]=c,f[a+"SearchType"]=b,f.search(a)},f.startSearch=function(a,b){13===a.keyCode&&f.search(b)},f.search=function(a){e("start"),f[a+"Loading"]=!0,f[a+"HoldInput"]=!0,f[a+"SearchValue"]&&(f[a+"ShowStartBtn"]=!1),"host"===a&&"has_active_failures"===f.hostSearchField&&(f.hostFailureFilter=f.hostSearchSelectValue&&1===f.hostSearchSelectValue.value?!0:!1);var b,i,j,k,l;for(i in g)if(g[i].iterator===a){j=i,k=g[i].url;for(b in h.related[i].fields)h.related[i].fields[b].key&&(l=h.related[i].fields[b].desc?"-"+b:b);break}l=null===f[a+"SortOrder"]?l:f[a+"SortOrder"],c=h.related[j].fields[f[a+"SearchField"]],f[a+"SelectShow"]===!1&&""!==f[a+"SearchValue"]&&void 0!==f[a+"SearchValue"]||f[a+"SelectShow"]&&f[a+"SearchSelectValue"]||c.searchType&&"gtzero"===c.searchType?(f[a+"SearchParams"]=c.sourceModel?c.sourceModel+"__"+c.sourceField+"__":c.searchField?c.searchField+"__":f[a+"SearchField"]+"__",f[a+"SearchParams"]+=!c.searchType||"int"!==c.searchType&&"boolean"!==c.searchType?c.searchType&&"gtzero"===c.searchType?"gt=0":f[a+"SearchType"]+"=":"int=",!c.searchType||"boolean"!==c.searchType&&"select"!==c.searchType?(void 0===c.searchType||"gtzero"===c.searchType)&&(f[a+"SearchParams"]+=encodeURI(f[a+"SearchValue"])):f[a+"SearchParams"]+=f[a+"SearchSelectValue"].value,f[a+"SearchParams"]+=l?"&order_by="+encodeURI(l):""):f[a+"SearchParams"]=l?"order_by="+encodeURI(l):"",f[a+"Page"]=0,k+=k.match(/\/$/)?"?":"&",k+=f[a+"SearchParams"],k+=f[a+"PageSize"]?"&page_size="+f[a+"PageSize"]:"",d({scope:f,set:j,iterator:a,url:k})},f.sort=function(a,b){var c,d,e,g;$("."+a+" .list-header").each(function(){if($(this).attr("id")!==a+"-"+b+"-header"){var c=$(this).find("i");c.attr("class","icon-sort")}}),d=$("#"+a+"-"+b+"-header i"),e="",d.hasClass("icon-sort")?(d.removeClass("icon-sort"),d.addClass("icon-sort-up")):d.hasClass("icon-sort-up")?(d.removeClass("icon-sort-up"),d.addClass("icon-sort-down"),e="-"):d.hasClass("icon-sort-down")&&(d.removeClass("icon-sort-down"),d.addClass("icon-sort-up"));for(g in h.related)h.related[g].iterator===a&&(c=h.related[g].fields[b].sourceModel?e+h.related[g].fields[b].sourceModel+"__"+h.related[g].fields[b].sourceField:e+b);f[a+"SortOrder"]=c,f.search(a)}}}]),angular.module("SearchHelper",["RestServices","Utilities","RefreshHelper"]).factory("SearchInit",["Alert","Rest","Refresh","$location","GetBasePath","Empty","$timeout","Wait","Store",function(a,b,c,d,e,f,g,h,i){return function(a){function b(a){var b,c,d,e;e=void 0===a||1===a?"":a,l[p+"SearchField"+e]="",l[p+"SearchFieldLabel"+e]="";for(c in o.fields)if((void 0===o.fields[c].searchWidget&&1===a||o.fields[c].searchWidget===a)&&o.fields[c].key){o.fields[c].sourceModel?(d=o.fields[c].sourceModel+"__"+o.fields[c].sourceField,r=o.fields[c].desc?"-"+d:d):r=o.fields[c].desc?"-"+c:c,(void 0===o.fields[c].searchable||o.fields[c].searchable===!0)&&(l[p+"SearchField"+e]=c,l[p+"SearchFieldLabel"+e]=o.fields[c].label);break}if(f(l[p+"SearchField"+e]))for(c in o.fields)if((void 0===o.fields[c].searchWidget&&1===a||o.fields[c].searchWidget===a)&&(void 0===o.fields[c].searchable||o.fields[c].searchable===!0)){l[p+"SearchField"+e]=c,l[p+"SearchFieldLabel"+e]=o.fields[c].label;break}l[p+"SearchType"+e]="icontains",l[p+"SearchTypeLabel"+e]="Contains",l[p+"SearchParams"+e]="",l[p+"SearchValue"+e]="",l[p+"SelectShow"+e]=!1,l[p+"HideSearchType"+e]=!1,l[p+"InputDisable"+e]=!1,l[p+"ExtraParms"+e]="",l[p+"ShowStartBtn"+e]=!0,l[p+"HideAllStartBtn"+e]=!1,l[p+"SearchPlaceholder"+e]=o.fields[l[p+"SearchField"+e]]&&o.fields[l[p+"SearchField"+e]].searchPlaceholder?l[o.fields[l[p+"SearchField"+e]].searchPlaceholder]?l[o.fields[l[p+"SearchField"+e]].searchPlaceholder]:o.fields[l[p+"SearchField"+e]].searchPlaceholder:"Search",l[p+"InputDisable"+e]=o.fields[l[p+"SearchField"+e]]&&"all"===o.fields[l[p+"SearchField"+e]].searchObject?!0:!1,b=l[p+"SearchField"+e],o.fields[b]&&(!o.fields[b].searchType||"boolean"!==o.fields[b].searchType&&"select"!==o.fields[b].searchType||(l[p+"SelectShow"+e]=!0,l[p+"SearchSelectOpts"+e]=o.fields[b].searchOptions),o.fields[b].searchType&&"int"===o.fields[b].searchType&&(l[p+"HideSearchType"+e]=!0),o.fields[b].searchType&&"gtzero"===o.fields[b].searchType&&(l[p+"InputHide"+e]=!0))}var e,g,j,k,l=a.scope,m=a.set,n=a.url,o=a.list,p=a.iterator?a.iterator:o.iterator,q=a.setWidgets===!1?!1:!0,r=a.sort_order||"";if(q)for(e=o.searchWidgets?o.searchWidgets:1,g=1;e>=g;g++)j=1===g?"":g,$("#search-widget-container"+j)&&b(g);k={set:m,defaultUrl:n,list:o,iterator:p,sort_order:r},i("CurrentSearchParams",k),l.setSearchField=function(a,b,c,d){var e=void 0===d||1===d?"":d;l[a+"SearchFieldLabel"+e]=c,l[a+"SearchField"+e]=b,l[a+"SearchValue"+e]="",l[a+"SelectShow"+e]=!1,l[a+"HideSearchType"+e]=!1,l[a+"InputHide"+e]=!1,l[a+"SearchType"+e]="icontains",l[a+"InputDisable"+e]="all"===o.fields[b].searchObject?!0:!1,l[a+"ShowStartBtn"+e]=!0,l[a+"SearchPlaceholder"+e]=o.fields[l[a+"SearchField"+e]]&&o.fields[l[a+"SearchField"+e]].searchPlaceholder?l[o.fields[l[a+"SearchField"+e]].searchPlaceholder]?l[o.fields[l[a+"SearchField"+e]].searchPlaceholder]:o.fields[l[a+"SearchField"+e]].searchPlaceholder:"Search",o.fields[b].searchType&&"gtzero"===o.fields[b].searchType?(l[a+"InputDisable"+e]=!0,l[a+"ShowStartBtn"+e]=!1,l.search(a)):o.fields[b].searchSingleValue?(l[a+"InputDisable"+e]=!0,l[a+"SearchValue"+e]=o.fields[b].searchValue,l[a+"SearchSelectValue"+e]="boolean"===o.fields[b].searchType&&"true"===o.fields[b].searchValue?{value:1}:"boolean"===o.fields[b].searchType&&"false"===o.fields[b].searchValue?{value:0}:{value:o.fields[b].searchValue},l[a+"ShowStartBtn"+e]=!1):"in"===o.fields[b].searchType?(l[a+"SearchType"+e]="in",l[a+"SearchValue"+e]=o.fields[b].searchValue,l[a+"InputDisable"+e]=!0,l[a+"ShowStartBtn"+e]=!1):!o.fields[b].searchType||"boolean"!==o.fields[b].searchType&&"select"!==o.fields[b].searchType&&"select_or"!==o.fields[b].searchType?o.fields[b].searchType&&"int"===o.fields[b].searchType?l[a+"SearchType"+e]="int":o.fields[b].searchType&&"isnull"===o.fields[b].searchType&&(l[a+"SearchType"+e]="isnull",l[a+"InputDisable"+e]=!0,l[a+"SearchValue"+e]="true",l[a+"ShowStartBtn"+e]=!1):(l[a+"SelectShow"+e]=!0,l[a+"SearchSelectOpts"+e]=o.fields[b].searchOptions),l.search(a)},l.resetSearch=function(a){var c,e=o.searchWidgets?o.searchWidgets:1;for(c=1;e>=c;c++)b(c);window.location="/#"+d.path(),l.search(a)},l.removeDoSearch&&l.removeDoSearch(),l.removeDoSearch=l.$on("doSearch",function(a,b,d,e){l[b+"Loading"]=void 0===e||e===!0?!0:!1;var f,g=n;l[b+"Page"]=d?parseInt(d)-1:0,l[b+"SearchParams"]&&(g+=/\/$/.test(g)?"?"+l[b+"SearchParams"]:"&"+l[b+"SearchParams"]),f=/\/$/.test(g)?"?":"&",g+=l[b+"_page_size"]?f+"page_size="+l[b+"_page_size"]:"",d&&(f=/\/$/.test(g)?"?":"&",g+=f+"page="+d),l[b+"ExtraParms"]&&(f=/\/$/.test(g)?"?":"&",g+=f+l[b+"ExtraParms"]),g=g.replace(/\&\&/,"&"),c({scope:l,set:m,iterator:b,url:g})}),l.removePrepareSearch&&l.removePrepareSearch(),l.removePrepareSearch=l.$on("prepareSearch",function(a,b,c,d,e){h("start"),l[b+"SearchParams"]="";var f,g,i=o.searchWidgets?o.searchWidgets:1;for(f=1;i>=f;f++)g=1===f?"":f,$("#search-widget-container"+g)&&o.fields[l[b+"SearchField"+g]]&&o.fields[l[b+"SearchField"+g]].searchObject&&("all"!==o.fields[l[b+"SearchField"+g]].searchObject?(l[b+"HideAllStartBtn"+g]=!1,l[b+"SearchValue"+g]?(l[b+"ShowStartBtn"+g]=!1,l[b+"SearchParams"]+=o.fields[l[b+"SearchField"+g]].searchOnID?"&"+o.fields[l[b+"SearchField"+g]].searchObject+"__id="+l[b+"SearchValue"+g]:"&"+o.fields[l[b+"SearchField"+g]].searchObject+"__name__icontains="+l[b+"SearchValue"+g]):(l[b+"ShowStartBtn"+g]=!0,l[b+"SearchParams"]+="&"+o.fields[l[b+"SearchField"+g]].searchField+"="+o.fields[l[b+"SearchField"+g]].searchObject)):l[b+"HideAllStartBtn"+g]=!0);l.$emit("prepareSearch2",b,c,d,e)}),l.removePrepareSearch2&&l.removePrepareSearch2(),l.removePrepareSearch2=l.$on("prepareSearch2",function(a,b,c,d,e){var g,h,i=o.searchWidgets?o.searchWidgets:1;for(g=1;i>=g;g++)h=1===g?"":g,l[b+"HoldInput"+h]=!0,$("#search-widget-container"+h)&&o.fields[l[b+"SearchField"+h]]&&!o.fields[l[b+"SearchField"+h]].searchObject&&(l[b+"ShowStartBtn"+h]=l[b+"SearchValue"+h]?!1:!0,(!l[b+"SelectShow"+h]&&!f(l[b+"SearchValue"+h])||l[b+"SelectShow"+h]&&l[b+"SearchSelectValue"+h]||o.fields[l[b+"SearchField"+h]]&&"gtzero"===o.fields[l[b+"SearchField"+h]].searchType)&&(l[b+"SearchParams"]+=o.fields[l[b+"SearchField"+h]].searchField?"&"+o.fields[l[b+"SearchField"+h]].searchField+"__":o.fields[l[b+"SearchField"+h]].sourceModel?"&"+o.fields[l[b+"SearchField"+h]].sourceModel+"__"+o.fields[l[b+"SearchField"+h]].sourceField+"__":"select"!==o.fields[l[b+"SearchField"+h]].searchType||""!==l[b+"SearchSelectValue"+h].value&&null!==l[b+"SearchSelectValue"+h].value?"&"+l[b+"SearchField"+h]+"__":"&"+l[b+"SearchField"+h]+"__",l[b+"SearchParams"]+=!o.fields[l[b+"SearchField"+h]].searchType||"int"!==o.fields[l[b+"SearchField"+h]].searchType&&"boolean"!==o.fields[l[b+"SearchField"+h]].searchType?o.fields[l[b+"SearchField"+h]].searchType&&"gtzero"===o.fields[l[b+"SearchField"+h]].searchType?"gt=0":"select"!==o.fields[l[b+"SearchField"+h]].searchType||""!==l[b+"SearchSelectValue"+h].value&&null!==l[b+"SearchSelectValue"+h].value?l[b+"SearchType"+h]+"=":"iexact=":"int=",!o.fields[l[b+"SearchField"+h]].searchType||"boolean"!==o.fields[l[b+"SearchField"+h]].searchType&&"select"!==o.fields[l[b+"SearchField"+h]].searchType?(!o.fields[l[b+"SearchField"+h]].searchType||o.fields[l[b+"SearchField"+h]].searchType&&"or"!==o.fields[l[b+"SearchField"+h]].searchType&&"gtzero"!==o.fields[l[b+"SearchField"+h]].searchType)&&(l[b+"SearchParams"]+=encodeURI(l[b+"SearchValue"+h])):l[b+"SearchParams"]+=l[b+"SearchSelectValue"+h].value));("inventory"===b&&l.inventoryFailureFilter||"host"===b&&l.hostFailureFilter)&&(l[b+"SearchParams"]+="&has_active_failures=true"),r&&(l[b+"SearchParams"]+=l[b+"SearchParams"]?"&":"",l[b+"SearchParams"]+="order_by="+encodeURI(r)),l.$emit("doSearch",b,c,d,e)}),l.startSearch=function(a,b){13===a.keyCode&&l.search(b)},l.search=function(a,b,c){c=void 0===c?!0:!1,c&&(l[m]=[]),l.$emit("prepareSearch",a,b,c)},l.sort=function(a){$(".list-header").each(function(){if($(this).attr("id")!==a+"-header"){var b=$(this).find("i");b.attr("class","fa fa-sort")}});var b=$("#"+a+"-header i"),c="";b.hasClass("fa-sort")?(b.removeClass("fa-sort"),b.addClass("fa-sort-up")):b.hasClass("fa-sort-up")?(b.removeClass("fa-sort-up"),b.addClass("fa-sort-down"),c="-"):b.hasClass("fa-sort-down")&&(b.removeClass("fa-sort-down"),b.addClass("fa-sort-up")),r=o.fields[a].searchField?c+o.fields[a].searchField:o.fields[a].sortField?c+o.fields[a].sortField:o.fields[a].sourceModel?c+o.fields[a].sourceModel+"__"+o.fields[a].sourceField:c+a,l.search(o.iterator)},l.searchCleanup=function(){l.removeDoSearch(),l.removePrepareSearch(),l.removePrepareSearch2()}}}]),angular.module("TeamHelper",["RestServices","Utilities","OrganizationListDefinition","SearchHelper","PaginationHelpers","ListGenerator"]).factory("SetTeamListeners",["Alert","Rest",function(a,b){return function(a){var c=a.scope,d=a.set,e=a.iterator;c.$on("TeamResultFound",function(a,b,f){var g,h,i,j;if(f.length===b.length){for(i="organization",j="organization_name",g=0;gSelect existing users by clicking each user or checking the related checkbox. When finished, click the blue Select button, located bottom right.

",base:"users",index:!0,hover:!0,fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},actions:{},fieldActions:{}}),angular.module("CloudCredentialsListDefinition",[]).value("CloudCredentialList",{name:"cloudcredentials",iterator:"cloudcredential",selectTitle:"Add Cloud Credentials",editTitle:"Cloud Credentials",selectInstructions:"

Select existing credentials by clicking each credential or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new credential by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",excludeModal:!1},team:{label:"Team",ngBind:"credential.team_name",sourceModel:"team",sourceField:"name",excludeModal:!0},user:{label:"User",ngBind:"credential.user_username",sourceModel:"user",sourceField:"username",excludeModal:!0}},actions:{add:{mode:"all",ngClick:"addCredential()","class":"btn-sm",awToolTip:"Create a new credential"}},fieldActions:{edit:{ngClick:"editCredential(credential.id)",icon:"fa-edit",label:"Edit","class":"btn-sm",awToolTip:"Edit credential",dataPlacement:"top"},"delete":{ngClick:"deleteCredential(credential.id, credential.name)",icon:"fa-trash-o",label:"Delete","class":"btn-sm",awToolTip:"Delete credential",dataPlacement:"top"}}}),angular.module("CredentialsListDefinition",[]).value("CredentialList",{name:"credentials",iterator:"credential",selectTitle:"Add Credentials",editTitle:"Credentials",selectInstructions:"

Select existing credentials by clicking each credential or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new credential by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",excludeModal:!1},kind:{label:"Type",searchType:"select",searchOptions:[],excludeModal:!0,nosort:!0}},actions:{add:{mode:"all",ngClick:"addCredential()",awToolTip:"Create a new credential"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{ngClick:"editCredential(credential.id)",icon:"fa-edit",label:"Edit","class":"btn-sm",awToolTip:"Edit credential",dataPlacement:"top"},"delete":{ngClick:"deleteCredential(credential.id, credential.name)",icon:"fa-trash",label:"Delete","class":"btn-sm",awToolTip:"Delete credential",dataPlacement:"top"}}}),angular.module("GroupListDefinition",[]).value("GroupList",{name:"groups",iterator:"group",selectTitle:"Copy Groups",editTitle:"Groups",index:!0,well:!1,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{help:{awPopOver:"Choose groups by clicking on each group you wish to add. Click the Select button to add the groups to the selected inventory group.",dataContainer:"#form-modal .modal-content",mode:"all",awToolTip:"Click for help",dataTitle:"Adding Groups"}},fieldActions:{edit:{label:"Edit",ngClick:"editGroup(group.id)",icon:"icon-edit","class":"btn-xs",awToolTip:"Edit group",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteGroup(group.id, group.name)",icon:"icon-trash","class":"btn-xs",awToolTip:"Delete group",dataPlacement:"top"}}}),angular.module("HomeGroupListDefinition",[]).value("HomeGroupList",{name:"home_groups",iterator:"group",editTitle:"Groups",index:!0,hover:!0,well:!0,fields:{name:{key:!0,label:"Group",ngClick:"editGroup(group.id, group.inventory)",columnClass:"col-lg-4 col-md3 col-sm-3 col-xs-6 ellipsis"},inventory_name:{label:"Inventory",sourceModel:"inventory",sourceField:"name",columnClass:"col-lg-3 col-md2 col-sm-2 hidden-xs elllipsis",linkTo:"{{ /#/inventories/' + group.inventory + '/' }}"},source:{label:"Source",searchType:"select",searchOptions:[{name:"ec2",value:"ec2"},{name:"none",value:""},{name:"rax",value:"rax"}],sourceModel:"inventory_source",sourceField:"source",searchOnly:!0},has_external_source:{label:"Has external source?",searchType:"in",searchValue:"ec2,rax",searchOnly:!0,sourceModel:"inventory_source",sourceField:"source"},has_active_failures:{label:"Has failed hosts?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},last_update_failed:{label:"Update failed?",searchType:"select",searchSingleValue:!0,searchValue:"failed",searchOnly:!0,sourceModel:"inventory_source",sourceField:"status"},id:{label:"ID",searchOnly:!0}},fieldActions:{sync_status:{mode:"all",ngClick:"viewUpdateStatus(group.id, group.group_id)",awToolTip:"{{ group.status_tooltip }}",ngClass:"group.status_class",dataPlacement:"top"},failed_hosts:{mode:"all",awToolTip:"{{ group.hosts_status_tip }}",dataPlacement:"top",ngHref:"/#/inventories/{{ group.inventory }}/",iconClass:"{{ 'fa icon-failures-' + group.hosts_status_class }}"},group_update:{mode:"all",ngClick:"updateGroup(group.id)",awToolTip:"{{ group.launch_tooltip }}",ngShow:"(group.status !== 'running' && group.status !== 'pending' && group.status !== 'updating')",ngClass:"group.launch_class",dataPlacement:"top"},cancel:{mode:"all",ngClick:"cancelUpdate(group.id)",awToolTip:"Cancel sync process","class":"red-txt",ngShow:"(group.status == 'running' || group.status == 'pending' || group.status == 'updating')",dataPlacement:"top"},edit:{label:"Edit",mode:"all",ngClick:"editGroup(group.id)",awToolTip:"Edit group",dataPlacement:"top"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("HomeHostListDefinition",[]).value("HomeHostList",{name:"hosts",iterator:"host",selectTitle:"Add Existing Hosts",editTitle:"Hosts",index:!0,hover:!0,well:!0,fields:{name:{key:!0,label:"Name",columnClass:"col-lg-4 col-md3 col-sm-3 col-xs-7 ellipsis",ngClick:"editHost(host.id, host.name)"},inventory_name:{label:"Inventory",sourceModel:"inventory",sourceField:"name",columnClass:"col-lg-3 col-md2 col-sm-2 hidden-xs elllipsis",linkTo:"{{ '/#/inventories/' + host.inventory }}"},enabled:{label:"Disabled?",searchSingleValue:!0,searchType:"boolean",searchValue:"false",searchOnly:!0},has_active_failures:{label:"Has failed jobs?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},has_inventory_sources:{label:"Has external source?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},id:{label:"ID",searchOnly:!0}},fieldActions:{enabled_flag:{iconClass:"{{ 'fa icon-enabled-' + host.enabled }}",dataPlacement:"top",awToolTip:"{{ host.enabledToolTip }}",dataTipWatch:"host.enabledToolTip",ngClick:"toggleHostEnabled(host.id, host.has_inventory_sources)"},active_failures:{awPopOver:"{{ host.job_status_html }}",dataTitle:"{{ host.job_status_title }}",awToolTip:"{{ host.badgeToolTip }}",awTipPlacement:"top",dataPlacement:"left",iconClass:"{{ 'fa icon-failures-' + host.has_active_failures }}"},edit:{label:"Edit",ngClick:"editHost(host.id)",icon:"icon-edit",awToolTip:"Edit host",dataPlacement:"top"}},actions:{stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("HostListDefinition",[]).value("HostList",{name:"hosts",iterator:"host",selectTitle:"Add Existing Hosts",editTitle:"Hosts",index:!0,well:!1,fields:{name:{key:!0,label:"Host Name",linkTo:"/inventories/{{ inventory_id }}/hosts/{{ host.id }}"},description:{label:"Description"}},actions:{help:{awPopOver:"Select hosts by clicking on each host you wish to add. Add the selected hosts to the group by clicking the Select button.",dataContainer:"#form-modal .modal-content",mode:"all",awToolTip:"Click for help",dataTitle:"Selecting Hosts"}},fieldActions:{edit:{label:"Edit",ngClick:"editHost({{ host.id }})",icon:"icon-edit","class":"btn-xs",awToolTip:"Edit host",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteHost(host.id, host.name)",icon:"icon-trash","class":"btn-xs",awToolTip:"Delete host",dataPlacement:"top"}}}),angular.module("InventoriesListDefinition",[]).value("InventoryList",{name:"inventories",iterator:"inventory",selectTitle:"Add Inventories",editTitle:"Inventories",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},organization:{label:"Organization",ngBind:"inventory.summary_fields.organization.name",linkTo:"/#/organizations/{{ inventory.organization }}",sourceModel:"organization",sourceField:"name",excludeModal:!0},has_inventory_sources:{label:"Cloud sourced?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},has_active_failures:{label:"Failed hosts?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0},inventory_sources_with_failures:{label:"Sync failures?",searchType:"gtzero",searchValue:"true",searchOnly:!0}},actions:{add:{mode:"all",ngClick:"addInventory()",awToolTip:"Create a new inventory"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",icon:"icon-comments-alt",mode:"all"}},fieldActions:{status:{ngHref:"inventory.status_link",iconClass:"{{ 'fa fa-cloud icon-cloud-' + inventory.status_class }}",awToolTip:"{{ inventory.status_tip }}",dataPlacement:"top"},failed_hosts:{ngHref:"inventory.failed_hosts_link",iconClass:"{{ 'fa icon-failures-' + inventory.failed_hosts_class }}",awToolTip:"{{ inventory.failed_hosts_tip }}",dataPlacement:"top"},edit:{label:"Edit",ngClick:"editInventoryProperties(inventory.id)",awToolTip:"Edit inventory",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteInventory(inventory.id, inventory.names')",awToolTip:"Delete inventory",dataPlacement:"top"}}}),angular.module("InventoryGroupsDefinition",[]).value("InventoryGroups",{name:"groups",iterator:"group",editTitle:"{{ inventory_name }}",showTitle:!1,well:!0,index:!1,hover:!1,hasChildren:!0,filterBy:"{ show: true }","class":"table-condensed table-no-border",fields:{name:{label:"Groups",key:!0,ngClick:"showHosts(group.id,group.group_id, false)",ngClass:"group.selected_class",hasChildren:!0,columnClass:"col-lg-9 col-md-9 col-sm-7 col-xs-7",nosort:!0,awDroppable:"{{ group.isDroppable }}",awDraggable:"{{ group.isDraggable }}",dataContainment:"#groups_table",dataTreeId:"{{ group.id }}",dataGroupId:"{{ group.group_id }}",dataType:"group"}},actions:{columnClass:"col-lg-3 col-md-3 col-sm-5 col-xs-5",create:{mode:"all",ngClick:"createGroup()",awToolTip:"Create a new group"},properties:{mode:"all",awToolTip:"Edit inventory properties",ngClick:"editInventoryProperties()"},refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refreshGroups()"},stream:{ngClick:"showGroupActivity()",awToolTip:"View Activity Stream",mode:"all"},help:{mode:"all",awToolTip:"Get help building your inventory",ngClick:"showGroupHelp()",id:"inventory-summary-help"}},fieldActions:{sync_status:{mode:"all",ngClick:"viewUpdateStatus(group.id, group.group_id)",ngShow:"group.id > 1",awToolTip:"{{ group.status_tooltip }}",dataTipWatch:"group.launch_tooltip",ngClass:"group.status_class",dataPlacement:"top"},failed_hosts:{mode:"all",awToolTip:"{{ group.hosts_status_tip }}",ngShow:"group.id > 1",dataPlacement:"top",ngClick:"showHosts(group.id, group.group_id, group.show_failures)",iconClass:"{{ 'fa icon-failures-' + group.hosts_status_class }}"},group_update:{mode:"all",ngClick:"updateGroup(group.id)",awToolTip:"{{ group.launch_tooltip }}",dataTipWatch:"group.launch_tooltip",ngShow:"group.id > 1 && (group.status !== 'running' && group.status !== 'pending' && group.status !== 'updating')",ngClass:"group.launch_class",dataPlacement:"top"},cancel:{mode:"all",ngClick:"cancelUpdate({{ group.id }})",awToolTip:"Cancel sync process","class":"red-txt",ngShow:"group.id > 1 && (group.status == 'running' || group.status == 'pending' || group.status == 'updating')",dataPlacement:"top"},edit:{mode:"all",ngClick:"editGroup({{ group.group_id + ',' + group.id }})",awToolTip:"Edit group",ngShow:"group.id > 1",dataPlacement:"top"},"delete":{mode:"all",ngClick:"deleteGroup({{ group.id + ',' + group.group_id }})",awToolTip:"Delete group",ngShow:"group.id != 1",dataPlacement:"top"}}}),angular.module("InventoryHostsDefinition",[]).value("InventoryHosts",{name:"hosts",iterator:"host",editTitle:"{{ selected_group }}",showTitle:!1,well:!0,index:!1,hover:!1,hasChildren:!0,"class":"table-condensed table-no-border",fields:{name:{key:!0,label:"Hosts",ngClick:"editHost(host.id)",searchPlaceholder:"search_place_holder",columnClass:"col-lg-9 col-md-9 col-sm-7 col-xs-7",dataHostId:"{{ host.id }}",dataType:"host",awDraggable:"true"},enabled:{label:"Disabled?",searchSingleValue:!0,searchType:"boolean",searchValue:"false",searchOnly:!0},has_active_failures:{label:"Failed jobs?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0}},fieldActions:{enabled_flag:{iconClass:"{{ 'fa icon-enabled-' + host.enabled }}",dataPlacement:"top",awToolTip:"{{ host.enabledToolTip }}",dataTipWatch:"host.enabledToolTip",ngClick:"toggleHostEnabled(host.id, host.has_inventory_sources)"},active_failures:{awPopOver:"{{ host.job_status_html }}",dataTitle:"{{ host.job_status_title }}",awToolTip:"{{ host.badgeToolTip }}",awTipPlacement:"top",dataPlacement:"left",iconClass:"{{ 'fa icon-failures-' + host.has_active_failures }}"},edit:{ngClick:"editHost(host.id)",icon:"icon-edit",awToolTip:"Edit host",dataPlacement:"top"},"delete":{ngClick:"deleteHost(host.id, host.name)",icon:"icon-trash",awToolTip:"Delete host",dataPlacement:"top"}},actions:{columnClass:"col-lg-3 col-md-3 col-sm-5 col-xs-5",create:{mode:"all",ngClick:"createHost()",ngHide:"selected_tree_id == 1",awToolTip:"Create a new host"},stream:{ngClick:"showHostActivity()",awToolTip:"View Activity Stream",mode:"all"}}}),angular.module("JobEventsListDefinition",[]).value("JobEventList",{name:"jobevents",iterator:"jobevent",editTitle:"Job Events",index:!1,hover:!0,hasChildren:!0,filterBy:"{ show: true }",navigationLinks:{details:{href:"/#/jobs/{{ job_id }}",label:"Status",icon:"icon-zoom-in",ngShow:"job_id !== null"},events:{href:"/#/jobs/{{ job_id }}/job_events",label:"Events",active:!0,icon:"icon-list-ul"},hosts:{href:"/#/jobs/{{ job_id }}/job_host_summaries",label:"Host Summary",icon:"icon-laptop"}},fields:{created:{label:"Created On",columnClass:"col-lg-1 col-md-1 hidden-sm hidden-xs",key:!0,nosort:!0,searchable:!1,link:!1},status:{label:"Status",showValue:!1,columnClass:"col-sm-1 col-xs-2 text-center",searchField:"failed",searchType:"boolean",searchOptions:[{name:"success",value:0},{name:"error",value:1}],nosort:!0,searchable:!1,ngClick:"viewJobEvent({{ jobevent.id }})",awToolTip:"{{ jobevent.statusBadgeToolTip }}",dataPlacement:"top",badgeIcon:"fa icon-job-{{ jobevent.status }}",badgePlacement:"left",badgeToolTip:"{{ jobevent.statusBadgeToolTip }}",badgeTipPlacement:"top",badgeNgClick:"viewJobEvent({{ jobevent.id }})"},event_display:{label:"Event",hasChildren:!0,ngClick:"toggleChildren(jobevent.id, jobevent.related.children)",nosort:!0,searchable:!1,ngClass:"{{ jobevent.class }}",appendHTML:"jobevent.event_detail"},host:{label:"Host",ngBind:"jobevent.summary_fields.host.name",ngHref:"{{ jobevent.hostLink }}",searchField:"hosts__name",nosort:!0,searchOnly:!1,id:"job-event-host-header","class":"break",columnClass:"col-lg-2 hidden-sm hidden-xs"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"}},fieldActions:{columnClass:"col-sm-1 col-xs-2",view:{label:"View",ngClick:"viewJobEvent(jobevent.id)",awToolTip:"View event details",dataPlacement:"top"}}}),angular.module("JobHostDefinition",[]).value("JobHostList",{name:"jobhosts",iterator:"jobhost",editTitle:"All summaries",index:!0,hover:!0,navigationLinks:{ngHide:"host_id !== null",details:{href:"/#/jobs/{{ job_id }}",label:"Status",icon:"icon-zoom-in",ngShow:"job_id !== null"},events:{href:"/#/jobs/{{ job_id }}/job_events",label:"Events",icon:"icon-list-ul"},hosts:{href:"/#/jobs/{{ job_id }}/job_host_summaries",label:"Host Summary",active:!0,icon:"icon-laptop"}},fields:{job:{label:"Job ID",ngClick:"showJob(jobhost.job)",columnShow:"host_id !== null",key:!0,desc:!0},host:{label:"Host",key:!0,sourceModel:"host",sourceField:"name",ngBind:"jobhost.host_name",ngHref:"jobhost.hostLinkTo"},status:{label:"Status",badgeNgHref:"{{ jobhost.statusLinkTo }}",badgeIcon:"fa icon-job-{{ jobhost.status }}",badgePlacement:"left",badgeToolTip:"{{ jobhost.statusBadgeToolTip }}",badgeTipPlacement:"top",ngHref:"{{ jobhost.statusLinkTo }}",awToolTip:"{{ jobhost.statusBadgeToolTip }}",dataPlacement:"top",searchField:"failed",searchType:"boolean",searchOptions:[{name:"success",value:0},{name:"error",value:1}]},failed:{label:"Job failed?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0,nosort:!0},ok:{label:"Success",searchable:!1},changed:{label:"Changed",searchable:!1},failures:{label:"Failure",searchable:!0,searchLabel:"Contains failed events?",searchType:"gtzero"},dark:{label:"Unreachable",searchable:!0,searchType:"gtzero",searchLabel:"Contains unreachable hosts?"},skipped:{label:"Skipped",searchable:!1}},actions:{help:{awPopOver:"
\n
Success
Tasks successfully executed on the host.
\n
Changed
Actions taken on the host.
\n
Failure
Tasks that failed on the host.
\n
Unreachable
Times the ansible server could not reach the host.
\n
Skipped
Tasks bypassed and not performed on the host due to prior task failure or the host being unreachable.
\n
\n",dataPlacement:"left",dataContainer:"body",mode:"all","class":"btn-xs btn-help",awToolTip:"Click for help",dataTitle:"Job Host Summary",id:"jobhost-help-button"},refresh:{mode:"all","class":"btn-xs",awToolTip:"Refresh the page",ngClick:"refresh()",ngShow:"host_id == null"}},fieldActions:{}}),angular.module("JobTemplatesListDefinition",[]).value("JobTemplateList",{name:"job_templates",iterator:"job_template",selectTitle:"Add Job Template",editTitle:"Job Templates",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{add:{mode:"all",ngClick:"addJobTemplate()",basePaths:["job_templates"],awToolTip:"Create a new template"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",icon:"icon-comments-alt",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editJobTemplate(job_template.id)",icon:"icon-edit",awToolTip:"Edit template","class":"btn-default btn-xs",dataPlacement:"top"},submit:{label:"Launch",icon:"icon-rocket",mode:"all","class":"btn-xs btn-success",ngClick:"submitJob(job_template.id)",awToolTip:"Start a job using this template",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteJobTemplate(job_template.id, job_template.name)",icon:"icon-trash","class":"btn-danger btn-xs",awToolTip:"Delete template",dataPlacement:"top"}}}),angular.module("JobsListDefinition",[]).value("JobList",{name:"jobs",iterator:"job",editTitle:"Jobs",index:!1,hover:!0,"class":"jobs-table",fields:{id:{label:"Job ID",key:!0,desc:!0,searchType:"int"},inventory:{label:"Inventory ID",searchType:"int",searchOnly:!0},created:{label:"Create On",link:!1,searchable:!1},job_template:{label:"Job Template",ngBind:"job.summary_fields.job_template.name",ngHref:"{{ '/#/job_templates/' + job.job_template }}",sourceModel:"job_template",sourceField:"name"},failed:{label:"Job failed?",searchSingleValue:!0,searchType:"boolean",searchValue:"true",searchOnly:!0,nosort:!0},status:{label:"Status","class":"job-{{ job.status }}",searchType:"select",linkTo:"{{ job.statusLinkTo }}",searchOptions:[{name:"new",value:"new"},{name:"waiting",value:"waiting"},{name:"pending",value:"pending"},{name:"running",value:"running"},{name:"successful",value:"successful"},{name:"error",value:"error"},{name:"failed",value:"failed"},{name:"canceled",value:"canceled"}],badgeIcon:"fa icon-job-{{ job.status }}",badgePlacement:"left",badgeToolTip:"{{ job.statusBadgeToolTip }}",badgeTipPlacement:"top",badgeNgHref:"{{ job.statusLinkTo }}",awToolTip:"{{ job.statusBadgeToolTip }}",dataPlacement:"top"}},actions:{refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"}},fieldActions:{submit:{label:"Relaunch",icon:"icon-rocket",mode:"all",ngClick:"submitJob(job.id, job.summary_fields.job_template.name)",awToolTip:"Start the job",dataPlacement:"top"},cancel:{label:"Stop",mode:"all",ngClick:"deleteJob(job.id)",awToolTip:"Cancel a running or pending job",ngShow:"job.status == 'pending' || job.status == 'running' || job.status == 'waiting'",dataPlacement:"top"},"delete":{label:"Delete",mode:"all",ngClick:"deleteJob(job.id)",awToolTip:"Delete the job",ngShow:"job.status != 'pending' && job.status != 'running' && job.status != 'waiting'",dataPlacement:"top"},dropdown:{type:"DropDown",label:"View",icon:"fa-search-plus","class":"btn-default btn-xs",options:[{ngClick:"editJob(job.id, job.summary_fields.job_template.name)",label:"Status"},{ngClick:"viewEvents(job.id, job.summary_fields.job_template.name)",label:"Events",ngHide:"job.status == 'new'"},{ngClick:"viewSummary(job.id, job.summary_fields.job_template.name)",label:"Host Summary",ngHide:"job.status == 'new'"}]}}}),angular.module("OrganizationListDefinition",[]).value("OrganizationList",{name:"organizations",iterator:"organization",selectTitle:"Add Organizations",editTitle:"Organizations",hover:!0,index:!1,fields:{name:{key:!0,label:"Name"},description:{label:"Description"}},actions:{add:{mode:"all",ngClick:"addOrganization()",awToolTip:"Create a new organization"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{}}),angular.module("PermissionListDefinition",[]).value("PermissionList",{name:"permissions",iterator:"permission",selectTitle:"Add Permission",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',editTitle:"Permissions",index:!0,well:!0,fields:{name:{key:!0,label:"Name",ngClick:"editPermission(permission.id)"},inventory:{label:"Inventory",sourceModel:"inventory",sourceField:"name",ngBind:"permission.summary_fields.inventory.name"},project:{label:"Project",sourceModel:"project",sourceField:"name",ngBind:"permission.summary_fields.project.name"},permission_type:{label:"Permission"}},actions:{add:{mode:"all",ngClick:"addPermission()",awToolTip:"Add a new permission",ngShow:"PermissionAddAllowed"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editPermission(permission.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit permission",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deletePermission(permission.id, permission.name)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete permission",ngShow:"PermissionAddAllowed",dataPlacement:"top"}}}),angular.module("ProjectsListDefinition",[]).value("ProjectList",{name:"projects",iterator:"project",selectTitle:"Add Project",editTitle:"Projects",selectInstructions:"

Select existing projects by clicking each project or checking the related checkbox. When finished, click the blue Select button, located bottom right.

Create a brand new project by clicking the green Create New button.

",index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description",columnClass:"hidden-sm hidden-xs",excludeModal:!0},scm_type:{label:"Type",searchType:"select",searchOptions:[],excludeModal:!0,nosort:!0},status:{label:"Status",ngClick:"showSCMStatus(project.id)",awToolTip:"View details of last SCM Update",dataPlacement:"top",badgeIcon:"{{ 'fa icon-failures-' + project.badge }}",badgePlacement:"left",searchType:"select",searchOptions:[],excludeModal:!0},last_updated:{label:"Last Updated",type:"date",excludeModal:!0,searchable:!1}},actions:{add:{mode:"all",ngClick:"addProject()",awToolTip:"Create a new project"},help:{awPopOver:"
\n
Updating
A source control update is in progress.
\n
Never Updated
This project has not yet been updated from source control.
\n
Failed
An error occurred during the most recent source control update, click the status text for more information.
\n
Successful
TThe latest source control update completed successfully.
\n
Missing
The previously configured local project directory is missing.
\n
N/A
The project is not linked to source control, so updates are not applicable.
\n
\n",dataPlacement:"left",dataContainer:"body",mode:"all",awToolTip:"Click for help",awTipPlacement:"top"},refresh:{mode:"all",awToolTip:"Refresh the page",ngClick:"refresh()"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editProject(project.id)",awToolTip:"Edit project properties",dataPlacement:"top"},scm_update:{label:"Update",ngClick:"SCMUpdate(project.id)",awToolTip:"{{ project.scm_update_tooltip }}",ngClass:"project.scm_type_class",dataPlacement:"top"},cancel:{label:"Stop",ngClick:"cancelUpdate(project.id, project.name)",awToolTip:"Cancel a running SCM update process",ngShow:"project.status == 'updating'",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteProject(project.id, project.name)",awToolTip:"Permanently remove project from the database",ngShow:"project.status !== 'updating'",dataPlacement:"top"}}}),angular.module("StreamListDefinition",[]).value("StreamList",{name:"activities",iterator:"activity",editTitle:"Activity Stream",selectInstructions:"",index:!1,hover:!0,"class":"table-condensed",searchWidgets:3,fields:{timestamp:{label:"Event Time",key:!0,desc:!0,noLink:!0,searchable:!1},user:{label:"Initiated by",ngBindHtml:"activity.user",sourceModel:"actor",sourceField:"username",searchPlaceholder:"Username",searchWidget:1},description:{label:"Action",ngBindHtml:"activity.description",nosort:!0,searchable:!1,columnClass:"col-lg-7"},system_event:{label:"System event",searchOnly:!0,searchType:"isnull",sourceModel:"actor",sourceField:"username",searchWidget:1},all_objects:{label:"All",searchOnly:!0,searchObject:"all",searchPlaceholder:"All resources",searchWidget:2},credential_search:{label:"Credential",searchOnly:!0,searchObject:"credential",searchPlaceholder:"Credential name",searchWidget:2,searchField:"object1"},group_search:{label:"Group",searchOnly:!0,searchObject:"group",searchPlaceholder:"Group name",searchWidget:2,searchField:"object1"},host_search:{label:"Host",searchOnly:!0,searchObject:"host",searchPlaceholder:"Host name",searchWidget:2,searchField:"object1"},inventory_search:{label:"Inventory",searchOnly:!0,searchObject:"inventory",searchPlaceholder:"Inventory name",searchWidget:2,searchField:"object1"},job_template_search:{label:"Job Template",searchOnly:!0,searchObject:"job_template",searchPlaceholder:"Job template name",searchWidget:2,searchField:"object1"},job_search:{label:"Job",searchOnly:!0,searchObject:"job",searchPlaceholder:"Job id",searchOnID:!0,searchWidget:2,searchField:"object1"},organization_search:{label:"Organization",searchOnly:!0,searchObject:"organization",searchPlaceholder:"Organization name",searchWidget:2,searchField:"object1"},project_search:{label:"Project",searchOnly:!0,searchObject:"project",searchPlaceholder:"Project name",searchWidget:2,searchField:"object1"},user_search:{label:"User",searchOnly:!0,searchObject:"user",searchPlaceholder:"Primary username",searchWidget:2,searchField:"object1"},all_objects3:{label:"All",searchOnly:!0,searchObject:"all",searchPlaceholder:"All related resources",searchWidget:3,searchField:"object2"},credential_search3:{label:"Credential",searchOnly:!0,searchObject:"credential",searchPlaceholder:"Related credential name",searchWidget:3,searchField:"object2"},group_search3:{label:"Group",searchOnly:!0,searchObject:"group",searchPlaceholder:"Related group name",searchWidget:3,searchField:"object2"},host_search3:{label:"Host",searchOnly:!0,searchObject:"host",searchPlaceholder:"Related host name",searchWidget:3,searchField:"object2"},inventory_search3:{label:"Inventory",searchOnly:!0,searchObject:"inventory",searchPlaceholder:"Related inventory name",searchWidget:3,searchField:"object2"},job_search3:{label:"Job",searchOnly:!0,searchObject:"job",searchPlaceholder:"Job id",searchOnID:!0,searchWidget:3,searchField:"object2"},job_template_search3:{label:"Job Template",searchOnly:!0,searchObject:"job_template",searchPlaceholder:"Related job template name",searchWidget:3,searchField:"object2"},organization_search3:{label:"Organization",searchOnly:!0,searchObject:"organization",searchPlaceholder:"Related organization name",searchWidget:3,searchField:"object2"},project_search3:{label:"Project",searchOnly:!0,searchObject:"project",searchPlaceholder:"Related project name",searchWidget:3,searchField:"object2"},user_search3:{label:"User",searchOnly:!0,searchObject:"user",searchPlaceholder:"Related username",searchWidget:3,searchField:"object2"}},actions:{refresh:{mode:"all","class":"btn-xs",awToolTip:"Refresh the page",ngClick:"refreshStream()"},close:{mode:"all",awToolTip:"Close Activity Stream view",ngClick:"closeStream()"}},fieldActions:{view:{label:"View",ngClick:"showDetail(activity.id)",icon:"fa-zoom-in","class":"btn-default btn-xs",awToolTip:"View event details",dataPlacement:"top"}}}),angular.module("TeamsListDefinition",[]).value("TeamList",{name:"teams",iterator:"team",selectTitle:"Add Team",editTitle:"Teams",selectInstructions:'Click on a row to select it, and click Finished when done. Use the green button to create a new row.',index:!0,hover:!0,fields:{name:{key:!0,label:"Name"},description:{label:"Description"},organization:{label:"Organization",ngBind:"team.organization_name",sourceModel:"organization",sourceField:"name"}},actions:{add:{mode:"all",ngClick:"addTeam()",awToolTip:"Create a new team"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editTeam(team.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit team",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteTeam(team.id, team.name)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete team",dataPlacement:"top"}}}),angular.module("UserListDefinition",[]).value("UserList",{name:"users",iterator:"user",selectTitle:"Add Users",editTitle:"Users",selectInstructions:"

Select existing users by clicking each user or checking the related checkbox. When finished, click the blue Select button, located bottom right.

When available, a brand new user can be created by clicking the green Create New button.

",index:!0,hover:!0,fields:{username:{key:!0,label:"Username"},first_name:{label:"First Name"},last_name:{label:"Last Name"}},actions:{add:{label:"Create New",mode:"all",ngClick:"addUser()",basePaths:["organizations","users"],"class":"btn-xs",awToolTip:"Create a new user"},stream:{ngClick:"showActivity()",awToolTip:"View Activity Stream",mode:"all"}},fieldActions:{edit:{label:"Edit",ngClick:"editUser(user.id)",icon:"icon-edit","class":"btn-xs btn-default",awToolTip:"Edit user",dataPlacement:"top"},"delete":{label:"Delete",ngClick:"deleteUser(user.id, user.username)",icon:"icon-trash","class":"btn-xs btn-danger",awToolTip:"Delete user",dataPlacement:"top"}}}),angular.module("InventorySyncStatusWidget",["RestServices","Utilities"]).factory("InventorySyncStatus",["$rootScope","$compile",function(a,b){return function(a){function c(a){var b=a.label,c=a.count,d=a.fail,e=a.link,f=a.fail_link,g="\n"; +return g+='\n",g+=''+d+"",g+="\n",g+='',g+=''+c+"",g+="\n"}var d,e,f,g,h,i=a.scope,j=a.target,k=a.dashboard;if(d='
\n',d+='
Inventory Sync Status
\n',d+='
\n',d+='\n',d+="\n",d+="\n",d+='\n',d+='\n',d+='\n',d+="\n",d+="\n",d+="\n",d+=c({label:"Inventories",count:k.inventories&&k.inventories.total_with_inventory_source?k.inventories.total_with_inventory_source:0,fail:k.inventories&&k.inventories.inventory_failed?k.inventories.inventory_failed:0,link:"/#/inventories/?has_inventory_sources=true",fail_link:"/#/inventories/?inventory_sources_with_failures=true"}),e=0,f=0,k.inventory_sources)for(h in k.inventory_sources)e+=k.inventory_sources[h].total?k.inventory_sources[h].total:0,f+=k.inventory_sources[h].failed?k.inventory_sources[h].failed:0;d+=c({label:"Groups",count:e,fail:f,link:"/#/home/groups/?has_external_source=true",fail_link:"/#/home/groups/?status=failed"});for(h in k.inventory_sources)k.inventory_sources[h].total&&(d+=c({label:k.inventory_sources[h].label,count:k.inventory_sources[h].total?k.inventory_sources[h].total:0,fail:k.inventory_sources[h].failed?k.inventory_sources[h].failed:0,link:"/#/home/groups/?source="+h,fail_link:"/#/home/groups/?status=failed&source="+h}));d+="\n",d+="
FailedTotal
\n",d+="
\n",d+="
\n",d+="\n",g=angular.element(document.getElementById(j)),g.html(d),b(g)(i),i.$emit("WidgetLoaded")}}]),angular.module("JobStatusWidget",["RestServices","Utilities"]).factory("JobStatus",["$rootScope","$compile","Rest","GetBasePath","ProcessErrors","Wait",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.fail_link,f=a.count,g=a.fail;return b+="\n",b+='\n",b+=''+g+"",b+="\n",b+='',b+=''+f+"",b+="\n"}var d,e=a.scope,f=a.target,g=a.dashboard,h="";h='
\n',h+='
Job Status
\n',h+='
\n',h+='\n',h+="\n",h+="\n",h+='\n',h+='\n',h+='\n',h+="\n",h+="\n",h+="\n",h+=c({label:"Jobs",link:"/#/jobs",count:g.jobs&&g.jobs.total?g.jobs.total:0,fail:g.jobs&&g.jobs.failed?g.jobs.failed:0,fail_link:"/#/jobs/?status=failed"}),h+=c({label:"Inventories",link:"/#/inventories",count:g.inventories&&g.inventories.total?g.inventories.total:0,fail:g.inventories&&g.inventories.job_failed?g.inventories.job_failed:0,fail_link:"/#/inventories/?has_active_failures=true"}),h+=c({label:"Groups",link:"/#/home/groups",count:g.groups&&g.groups.total?g.groups.total:0,fail:g.groups&&g.groups.job_failed?g.groups.job_failed:0,fail_link:"/#/home/groups/?has_active_failures=true"}),h+=c({label:"Hosts",link:"/#/home/hosts",count:g.hosts&&g.hosts.total?g.hosts.total:0,fail:g.hosts&&g.hosts.failed?g.hosts.failed:0,fail_link:"/#/home/hosts/?has_active_failures=true"}),h+="\n",h+="
FailedTotal
\n",h+="
\n",h+="
\n",h+="\n",d=angular.element(document.getElementById(f)),d.html(h),b(d)(e),e.$emit("WidgetLoaded")}}]),angular.module("ObjectCountWidget",["RestServices","Utilities"]).factory("ObjectCount",["$rootScope","$compile","Rest","GetBasePath","ProcessErrors","Wait",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.count;return b+="\n",b+='\n",b+='',b+=''+e+"",b+="\n"}var d,e,f,g=a.scope,h=a.target,i=a.dashboard,j=["organizations","users","teams","credentials","projects","inventories","groups","hosts","job_templates","jobs"];for(e='
\n',e+='
System Summary
\n',e+='
\n',e+='\n',e+="\n",e+="\n",e+='\n',e+='\n',e+="\n",e+="\n",e+="\n",d=0;d\n",e+="
Total
\n",e+="
\n",e+="
\n",f=angular.element(document.getElementById(h)),f.html(e),b(f)(g),g.$emit("WidgetLoaded")}}]),angular.module("SCMSyncStatusWidget",["RestServices","Utilities"]).factory("SCMSyncStatus",["$rootScope","$compile",function(a,b){return function(a){function c(a){var b="",c=a.label,d=a.link,e=a.fail_link,f=a.count,g=a.fail;return b+="\n",b+=''+c+"\n",b+=''+g+"",b+="\n",b+='',b+=''+f+"",b+="\n"}var d,e,f,g,h,i,j=a.scope,k=a.target,l=a.dashboard;if(e='
\n',e+='
Project SCM Status
\n',e+='
\n',e+='\n',e+="\n",e+="\n",e+='\n',e+='\n',e+='\n',e+="\n",e+="\n",e+="\n",f=0,l.scm_types)for(h in l.scm_types)f+=l.scm_types[h].total?l.scm_types[h].total:0;e+=c({label:"Projects",link:"/#/projects",count:f,fail:l.projects&&l.projects.failed?l.projects.failed:0,fail_link:"/#/projects/?status=failed"}),i=[];for(h in l.scm_types)i.push(h);for(i.sort(),d=0;d\n",e+="
FailedTotal
\n",e+="
\n",e+="
\n",e+="\n",g=angular.element(document.getElementById(k)),g.html(e),b(g)(j),j.$emit("WidgetLoaded")}}]),angular.module("StreamWidget",["RestServices","Utilities","StreamListDefinition","SearchHelper","PaginationHelpers","RefreshHelper","ListGenerator","StreamWidget","AuthService"]).factory("setStreamHeight",[function(){return function(){var a=$("#stream-content").height(),b=parseInt($("#tab-content-container").css("min-height").replace(/px/,"")),c=a>b?a:b;$("#tab-content-container").css({"min-height":c})}}]).factory("ShowStream",["setStreamHeight","Authorization",function(a){return function(){var b=$("#stream-container");b.css({position:"absolute",top:0,left:0,width:"100%","min-height":"100%","background-color":"#FFF"}),a(),b.show("slide",{direction:"left"},{duration:500,queue:!1})}}]).factory("HideStream",["LoadBreadCrumbs",function(a){return function(){var b=$("#stream-container");b.hide("slide",{direction:"left"},{duration:500,queue:!1}),setTimeout(function(){b.detach(),b.empty(),b.unbind(),$("#tab-content-container").css({"min-height":0})},500),a()}}]).factory("StreamBreadCrumbs",["$rootScope","$location",function(a,b){return function(){a.breadcrumbs=[];var c,d,e,f,g=b.path().split("/");for(g.splice(0,1),e=0;e=f;f++)c+="/"+g[f];for(f=0;f0)for(f=0;e>=f;f++)c+="/"+g[f];else c="/"+g[e];d=g[e],d=d.charAt(0).toUpperCase()+d.slice(1)}a.breadcrumbs.push({path:c,title:d})}}}]).factory("FixUrl",[function(){return function(a){return a.replace(/\/api\/v1\//,"/#/")}}]).factory("BuildUrl",[function(){return function(a){var b="/#/";switch(a.base){case"group":case"host":b+="home/"+a.base+"s/?id="+a.id;break;case"inventory":b+="inventories/"+a.id+"/";break;default:b+=a.base+"s/"+a.id+"/"}return b}}]).factory("BuildDescription",["FixUrl","BuildUrl",function(a,b){return function(a){function c(a){return a.replace(/^_deleted_\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+\+\d+:\d+_/,"")}var d,e,f,g,h,i,j,k;d=a.operation,d+=/e$/.test(a.operation)?"d ":"ed ",e=d,f=a.object1,g=a.object2,h=a.summary_fields[f]?a.summary_fields[f][0]:null,i=f===g?a.summary_fields[f][1]:a.summary_fields[g]?a.summary_fields[g][0]:null,("user"===f||"user"===g)&&(a.summary_fields.user[0].name=a.summary_fields.user[0].username),i&&i.name&&!/^_delete/.test(i.name)?(i.base=g,d+=g+' '+i.name+""+("disassociate"===a.operation?" from ":" to "),e+=g+" "+i.name+("disassociate"===a.operation?" from ":" to ")):g&&(j="",i&&i.name&&(j=" "+c(i.name)),d+=g+j+("disassociate"===a.operation?" from ":" to "),e+=g+j+("disassociate"===a.operation?" from ":" to ")),h&&h.name&&!/^\_delete/.test(h.name)?(h.base=f,d+=f+' '+h.name+"",e+=f+" "+h.name):f&&(j="",k="",!h||!h.name||h&&h.name&&/^_delete/.test(h.name)?a.changes&&a.changes.name?"string"==typeof a.changes.name?(j=" "+a.changes.name,k=j):"object"==typeof a.changes.name&&Array.isArray(a.changes.name)&&(j=" "+a.changes.name[0],k=j):"job"===f&&h&&a.changes&&a.changes.job_template?"delete"!==a.operation?(h.base=f,j=' '+h.id+" "+a.changes.job_template+"",k=" "+h.id+" "+a.changes.job_template):(j=" "+h.id+" "+a.changes.job_template,k=j):"job"===f&&h&&("delete"!==a.operation?(h.base=f,j=' '+h.id+"",k=" "+h.id):(j=" "+h.id,k=j)):h&&h.name&&(j=" "+c(h.name),k=j),d+=f+j,e+=f+k),a.description=d,a.description_nolink=e}}]).factory("ShowDetail",["$rootScope","Rest","Alert","GenerateForm","ProcessErrors","GetBasePath","FormatDate","ActivityDetailForm","Empty","Find",function(a,b,c,d,e,f,g,h,i,j){return function(a){var b,c,e,f=a.activity_id,i=a.scope,k=d,l=h,m=j({list:i.activities,key:"id",val:f});m&&(m.changes_stringified=JSON.stringify(m.changes,null," "),b=m.changes_stringified.match(/\n/g),c=b?b.length:1,c=1>c?3:10,l.fields.changes.rows=10,e=k.inject(l,{mode:"edit",modal:!0,related:!1}),e.changes=m.changes_stringified,e.user=(m.summary_fields.actor?m.summary_fields.actor.username:"system")+" on "+g(new Date(m.timestamps)),e.operation=m.description_nolink,e.formModalAction=function(){$("#form-modal").modal("hide")},$("#form-modal").on("show.bs.modal",function(){$("#form-modal-body").css({width:"auto",height:"auto","max-height":"100%"})}),e.formModalActionLabel="OK",e.formModalCancelShow=!1,e.formModalInfo=!1,e.formModalHeader="Event "+m.id,e.$$phase||e.$digest())}}]).factory("Stream",["$rootScope","$location","Rest","GetBasePath","ProcessErrors","Wait","StreamList","SearchInit","PaginateInit","GenerateList","FormatDate","ShowStream","HideStream","BuildDescription","FixUrl","BuildUrl","ShowDetail","StreamBreadCrumbs","setStreamHeight","Find","Store",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){return function(c){var e,f,o,v,w=g,x=d("activity_stream"),y=j,z=b.path().replace(/^\//,"").split("/")[0],A=c.scope,B=u("CurrentSearchParams"),C=c&&c.inventory_name?c.inventory_name:null,D=c&&c.url?c.url:null;a.flashMessage=null,D?x=D:"/home"!==b.path()&&(e="inventories"===z?"inventory":z.replace(/s$/,""),f=b.path().split("/"),f.splice(0,1),f.length>1&&/^\d+/.test(f[f.length-1])?(e=f[f.length-2],e="inventories"===e?"inventory":e.replace(/s$/,""),x+="?"+e+"__id="+f[f.length-1]):f.length>1?(e=f[f.length-1],e="inventories"===e?"inventory":e.replace(/s$/,""),x+="?or__object1="+e+"&or__object2="+e):x+="?or__object1="+e+"&or__object2="+e),$("#tab-content-container").append('
'),r(),C&&(o=t({list:a.breadcrumbs,key:"title",val:"{{ inventory_name }}"}),o&&(o.title=C)),l(),v=y.inject(w,{mode:"edit",id:"stream-content",searchSize:"col-lg-3",secondWidget:!0,activityStream:!0}),v.streamTitle=c&&c.title?c.title:null,v.closeStream=function(a){m(),v.searchCleanup&&v.searchCleanup(),B&&h({scope:A,set:B.set,list:B.list,url:B.defaultUrl,iterator:B.iterator,sort_order:B.sort_order,setWidgets:!1}),a&&b.path(a)},v.refreshStream=function(){v.search(w.iterator)},v.showDetail=function(a){q({scope:v,activity_id:a})},v.removeStreamPostRefresh&&v.removeStreamPostRefresh(),v.removeStreamPostRefresh=v.$on("PostRefresh",function(){var a,b,c,d,e,f;for(a=0;a'+v.activities[a].summary_fields.actor.username+"":"system",d=/^\_delete/,e=v.activities[a].object1,f=v.activities[a].object2,e&&v.activities[a].summary_fields[e]&&v.activities[a].summary_fields[e].name?d.test(v.activities[a].summary_fields[e].name)?v.activities[a].objects=v.activities[a].summary_fields[e].name:(c=p(v.activities[a].summary_fields.object1),v.activities[a].objects=''+v.activities[a].summary_fields[e].name+""):v.activities[a].object1&&(v.activities[a].objects=v.activities[a].object1),f&&v.activities[a].summary_fields[f]&&v.activities[a].summary_fields[f].name?d.test(v.activities[a].summary_fields.object2.name)?v.activities[a].objects+=","+v.activities[a].summary_fields[f].name:(c=p(v.activities[a].summary_fields.object2),v.activities[a].objects+=', '+v.activities[a].summary_fields[f].name+""):v.activities[a].object2&&(v.activities[a].objects+=", "+v.activities[a].object2),n(v.activities[a]);setTimeout(function(){s()},500)}),h({scope:v,set:w.name,list:w,url:x}),i({scope:v,list:w,url:x}),v.search(w.iterator)}}]),angular.module("AuthService",["ngCookies","Utilities"]).factory("Authorization",["$http","$rootScope","$location","$cookieStore","GetBasePath",function(a,b,c,d,e){return{setToken:function(a,c){d.remove("token"),d.remove("token_expires"),d.remove("userLoggedIn"),d.put("token",a),d.put("token_expires",c),d.put("userLoggedIn",!0),d.put("sessionExpired",!1),b.token=a,b.userLoggedIn=!0,b.token_expires=c,b.sessionExpired=!1},isUserLoggedIn:function(){return void 0===b.userLoggedIn&&(b.userLoggedIn=d.get("userLoggedIn"),b.sessionExpired=d.get("sessionExpired")),b.userLoggedIn},getToken:function(){return b.token?b.token:d.get("token")},retrieveToken:function(b,c){return a({method:"POST",url:e("authtoken"),data:{username:b,password:c}})},logout:function(){var a=angular.element(document.getElementById("main-view")).scope();a.$destroy(),b.$destroy(),d.remove("accordions"),d.remove("token"),d.remove("token_expires"),d.remove("current_user"),d.remove("lastPath"),d.put("userLoggedIn",!1),d.put("sessionExpired",!1),d.remove("lastPath","/home"),b.current_user={},b.license_tested=void 0,b.userLoggedIn=!1,b.sessionExpired=!1,b.token=null,b.token_expires=null,b.lastPath="/home"},getLicense:function(){return a({method:"GET",url:e("config"),headers:{Authorization:"Token "+this.getToken()}})},setLicense:function(a){a.tested=!1,d.put("license",a)},licenseTested:function(){var a,c;return void 0!==b.license_tested?c=b.license_tested:(a=d.get("license"),c=a&&void 0!==a.tested?a.tested:!1),c},getUser:function(){return a({method:"GET",url:"/api/v1/me/",headers:{Authorization:"Token "+this.getToken()}})},setUserInfo:function(a){b.current_user=a.results[0],d.put("current_user",a.results[0])},restoreUserInfo:function(){b.current_user=d.get("current_user")},getUserInfo:function(a){var c;return b.current_user?b.current_user[a]:(this.restoreUserInfo(),c=d.get("current_user"),c[a])}}}]),angular.module("InventoryTree",["Utilities","RestServices","GroupsHelper","PromptDialog"]).factory("SortNodes",[function(){return function(a){var b,c,d=[],e=[];for(b=0;b0?!0:!1,has_inventory_sources:s[e].has_inventory_sources,id:r,source:s[e].summary_fields.inventory_source.source,group_id:s[e].id,event_level:c,children:i,ngicon:s[e].children.length>0?"fa fa-minus-square-o node-toggle":"fa fa-square-o node-no-toggle",ngclick:"toggle("+r+")",related:{children:s[e].children.length>0?s[e].related.children:"",inventory_source:s[e].related.inventory_source},status:s[e].summary_fields.inventory_source.status,status_class:k["class"],status_tooltip:k.tooltip,launch_tooltip:k.launch_tip,launch_class:k.launch_class,hosts_status_tip:n.tooltip,show_failures:n.failures,hosts_status_class:n["class"],selected_class:"",show:!0,isDraggable:!0,isDroppable:!0},q.push(o),p&&o.group_id===p&&(m.selected_tree_id=r,m.selected_group_id=o.group_id),s[e].children.length>0&&j(s[e].children,r,c+1)}}function k(){e("start"),a.setUrl(b("inventory")+l+"/"),a.get().success(function(a){m.$emit("buildAllGroups",a.name,a.related.tree,a.related.groups)}).error(function(a,b){e("stop"),c(m,a,b,null,{hdr:"Error!",msg:"Failed to get inventory: "+l+". GET returned: "+b})})}var l=h.inventory_id,m=h.scope,n=h.refresh,o=h.emit,p=h.new_group_id,q=[],r=1;m.buildAllGroupsRemove&&m.buildAllGroupsRemove(),m.buildAllGroupsRemove=m.$on("buildAllGroups",function(b,d,f){a.setUrl(f),a.get().success(function(a){i(a),j(a,0,0),m.autoShowGroupHelp=0===a.length?!0:!1,n?(m.groups=q,m.$emit("GroupTreeRefreshed",d,q,o)):m.$emit("GroupTreeLoaded",d,q,o)}).error(function(a,b){e("stop"),c(m,a,b,null,{hdr:"Error!",msg:"Failed to get inventory tree for: "+l+". GET returned: "+b})})}),k()}}]).factory("UpdateGroup",["ApplyEllipsis","GetSyncStatusMsg","Empty",function(a,b,c){return function(d){var e,f,g,h,i,j=d.scope,k=d.group_id,l=d.properties;for(e=0;e\n',m+='\n",m+="\n",i=angular.element(document.getElementById("inventory-modal-container")),i.empty().append(m),a(i)(j),$("#copy-prompt-modal").modal({backdrop:"static",keyboard:!0,show:!0}),j.moveGroup=function(){var a,b,i;$("#copy-prompt-modal").modal("hide"),e("start"),j.removeGroupRemove&&j.removeGroupRemove(),j.removeGroupRemove=j.$on("removeGroup",function(){l.parent>0?(i=d({list:j.groups,key:"id",val:l.parent}),a=h("base")+"groups/"+i.group_id+"/children/",f.setUrl(a),f.post({id:l.group_id,disassociate:1}).success(function(){j.$emit("GroupDeleteCompleted")}).error(function(a,b){e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to remove "+l.name+" from "+i.name+". POST returned status: "+b})})):j.$emit("GroupDeleteCompleted")}),a=g(k.group_id)?h("inventory")+j.inventory_id+"/groups/":h("base")+"groups/"+k.group_id+"/children/",b={id:l.group_id,name:l.name,description:l.description,inventory:j.inventory_id},f.setUrl(a),f.post(b).success(function(){j.$emit("removeGroup")}).error(function(a,b){var d=g(k.group_id)?"inventory":k.name;e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+d+". POST returned status: "+b})})},j.copyGroup=function(){$("#copy-prompt-modal").modal("hide"),e("start");var a=g(k.group_id)?h("inventory")+j.inventory_id+"/groups/":h("base")+"groups/"+k.group_id+"/children/",b={id:l.group_id,name:l.name,description:l.description,inventory:j.inventory_id};f.setUrl(a),f.post(b).success(function(){j.$emit("GroupDeleteCompleted")}).error(function(a,b){var d=g(k.group_id)?"inventory":k.name;e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+d+". POST returned status: "+b})})}}}]).factory("CopyMoveHost",["$compile","Alert","ProcessErrors","Find","Wait","Rest","Empty","GetBasePath",function(a,b,c,d,e,f,g,h){return function(b){var g,i,j=b.scope,k=d({list:j.groups,key:"id",val:b.target_tree_id}),l=d({list:j.hosts,key:"id",val:b.host_id}),m=!1,n="";if(l.summary_fields.all_groups)for(i=0;i\n',n+='\n",n+="\n",n+="\n",g=angular.element(document.getElementById("inventory-modal-container")),g.empty().append(n),a(g)(j),$("#copy-alert-modal").modal({backdrop:"static",keyboard:!0,show:!0})):(n="",n+='\n",g=angular.element(document.getElementById("inventory-modal-container")),g.empty().append(n),a(g)(j),$("#copy-prompt-modal").modal({backdrop:"static",keyboard:!0,show:!0}),j.copyHost=function(){$("#copy-prompt-modal").modal("hide"),e("start"),f.setUrl(h("groups")+k.group_id+"/hosts/"),f.post(l).success(function(){j.$emit("GroupTreeRefreshed")}).error(function(a,b){e("stop"),c(j,a,b,null,{hdr:"Error!",msg:"Failed to add "+l.name+" to "+k.name+". POST returned status: "+b})})})}}]),angular.module("RestServices",["ngCookies","AuthService"]).factory("Rest",["$http","$rootScope","$cookieStore","$q","Authorization",function(a,b,c,d,e){return{headers:{},setUrl:function(a){this.url=a},checkExpired:function(){return b.sessionTimer.isExpired()},pReplace:function(){var a,b;for(a in this.params)b=new RegExp("\\:"+a,"gm"),b.test(this.url)&&(this.url=this.url.replace(b,this.params[a]),delete this.params[a])},createResponse:function(a,b){var c=d.reject({data:a,status:b});return c.success=function(a){return c.then(function(b){a(b.data,b.status)},null),c},c.error=function(a){return c.then(null,function(b){a(b.data,b.status)}),c},c},setHeader:function(a){for(var b in a)this.headers[b]=a[b]},get:function(b){b=b?b:{},this.params=b.params?b.params:null,this.pReplace();var c=this.checkExpired(),d=e.getToken();return c?this.createResponse({detail:"Token is expired"},401):d?(this.setHeader({Authorization:"Token "+d}),this.setHeader({"X-Auth-Token":"Token "+d}),a({method:"GET",url:this.url,headers:this.headers,params:this.params})):this.createResponse({detail:"Invalid token"},401)},post:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"POST",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},put:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"PUT",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},destroy:function(b){var c=e.getToken(),d=this.checkExpired();return d?this.createResponse({detail:"Token is expired"},401):c?(this.setHeader({Authorization:"Token "+c}),this.setHeader({"X-Auth-Token":"Token "+c}),a({method:"DELETE",url:this.url,headers:this.headers,data:b})):this.createResponse({detail:"Invalid token"},401)},options:function(){var b=e.getToken(),c=this.checkExpired();return c?this.createResponse({detail:"Token is expired"},401):b?(this.setHeader({Authorization:"Token "+b}),this.setHeader({"X-Auth-Token":"Token "+b}),a({method:"OPTIONS",url:this.url,headers:this.headers})):this.createResponse({detail:"Invalid token"},401)}}}]),angular.module("TimerService",["ngCookies","Utilities"]).factory("Timer",["$rootScope","$cookieStore","$location","GetBasePath","Empty",function(a,b){return{sessionTime:null,timeout:null,getSessionTime:function(){return this.sessionTime?this.sessionTime:b.get("sessionTime")},isExpired:function(){var a=this.getSessionTime(),b=(new Date).getTime();return 0>=a-b?!0:(this.moveForward(),!1)},expireSession:function(){this.sessionTime=0,a.sessionExpired=!0,b.put("sessionExpired",!0)},moveForward:function(){var c=(new Date).getTime()+1e3*$AnsibleConfig.session_timeout;this.sessionTime=c,b.put("sessionTime",c),a.sessionExpired=!1,b.put("sessionExpired",!1)},init:function(){return this.moveForward(),this}}}]),angular.module("Utilities",["RestServices","Utilities"]).factory("ClearScope",[function(){return function(){$(".tooltip").each(function(){$(this).remove()}),$(".popover").each(function(){$(this).remove()});try{$("#help-modal").dialog("close")}catch(a){}$(window).unbind("resize")}}]).factory("Empty",[function(){return function(a){return null===a||void 0===a||""===a?!0:!1}}]).factory("ToggleClass",function(){return function(a,b){$(a)&&$(a).hasClass(b)?$(a).removeClass(b):$(a)&&$(a).addClass(b)}}).factory("Alert",["$rootScope",function(a){return function(b,c,d,e,f,g){f?(a.alertHeader2=b,a.alertBody2=c,a.alertClass2=d?d:"alert-danger",$("#alert-modal2").modal({show:!0,keyboard:!0,backdrop:"static"}),a.disableButtons2=g?!0:!1,e&&$("#alert-modal2").on("hidden",function(){e()}),$(document).bind("keydown",function(a){27===a.keyCode&&($("#alert-modal2").modal("hide"),e&&e())})):(a.alertHeader=b,a.alertBody=c,a.alertClass=d?d:"alert-danger",$("#alert-modal").modal({show:!0,keyboard:!0,backdrop:"static"}),$(document).bind("keydown",function(a){27===a.keyCode&&($("#alert-modal").modal("hide"),e&&e())}),a.disableButtons=g?!0:!1,e&&$("#alert-modal").on("hidden",function(){e()}))}}]).factory("ProcessErrors",["$rootScope","$cookieStore","$log","$location","Alert","Wait",function(a,b,c,d,e,f){return function(b,c,g,h,i){var j,k,l;if(f("stop"),$AnsibleConfig.debug_mode&&console&&(console.log("Debug status: "+g),console.log("Debug data: "),console.log(c)),403===g)l="The API responded with a 403 Access Denied error. ",l+=c.detail?"Detail: "+c.detail:"Please contact your system administrator.",e(i.hdr,l);else if(401===g&&c.detail&&"Token is expired"===c.detail||401===g&&c.detail&&"Invalid token"===c.detail)a.sessionTimer.expireSession(),d.url("/login");else if(c.non_field_errors)e("Error!",c.non_field_errors);else if(c.detail)e(i.hdr,i.msg+" "+c.detail);else if(c.__all__)e("Error!",c.__all__);else if(h){k=!1;for(j in h.fields)c[j]&&h.fields[j].tab&&$("#"+h.name+'_tabs a[href="#'+h.fields[j].tab+'"]').tab("show"),h.fields[j].realName&&c[h.fields[j].realName]&&(b[j+"_api_error"]=c[h.fields[j]][0],$('[name="'+h.fields[j].realName+'"]').addClass("ng-invalid"),k=!0),h.fields[j].sourceModel?c[j]&&(b[h.fields[j].sourceModel+"_"+h.fields[j].sourceField+"_api_error"]=c[j][0],$('[name="'+h.fields[j].sourceModel+"_"+h.fields[j].sourceField+'"]').addClass("ng-invalid"),k=!0):c[j]&&(b[j+"_api_error"]=c[j][0],$('[name="'+j+'"]').addClass("ng-invalid"),k=!0); +!k&&i&&e(i.hdr,i.msg)}else e(i.hdr,i.msg)}}]).factory("LoadBreadCrumbs",["$rootScope","$routeParams","$location","Empty",function(a,b,c,d){return function(b){function e(a){return a.toUpperCase()}function f(a){return"ies"===a?"y":""}var g,h,i,j,k,l,m,n;if(!d(b)){for(h=!1,j=0;j1)for(j=0;j0&&k[j].match(/\d+/)){for(m=k[j-1],n=m.replace(/(ies$|s$)/,f),n=n.charAt(0).toUpperCase()+n.slice(1),h=!1,i=0;i\n",b+='
\n',b+='',b+="
\n",b+='
'+a.box+"
",b+=f&&a.autoOffNotice?'
\n':""}var h,i,j,k,l=!1;e=a,j=d.story.width?d.story.width:510,k=d.story.height?d.story.height:600,i=$(document).width(),j=j>i?i:j;try{l=$("#help-modal").dialog("isOpen")}catch(m){}l?$("#help-modal").html(g(d.story.steps[e])):(h=[],d.story.steps.length>1&&(h.push({text:"Prev",click:function(a){e-1===0&&$(a.target).button("disable"),e-10&&$(a.target).prev().button("enable"),e+1===d.story.steps.length-1&&$(a.target).button("disable"),b(e+1)}})),h.push({text:"Close",click:function(){$("#help-modal").dialog("close")}}),$("#help-modal").html(g(d.story.steps[e])).dialog({position:{my:"center top",at:"center top+150",of:"body"},title:d.story.hdr,width:j,height:k,buttons:h,closeOnEscape:!0,show:500,hide:500,resizable:!1,close:function(){$("#help-modal").empty()}}),$(".ui-dialog-buttonset button").each(function(){var a,b,c;c=$(this).text(),"Close"===c?(b="fa-times",a="btn btn-default",$(this).attr({"class":a}).html(' Close')):"Prev"===c?(b="fa-chevron-left",a="btn btn-primary",$(this).attr({"class":a}).html(' Prev')):(b="fa-chevron-right",a="btn btn-primary",$(this).attr({"class":a}).html('Next ').css({"margin-right":"20px"}))}),$('.ui-dialog[aria-describedby="help-modal"]').find(".ui-dialog-titlebar button").empty().attr({"class":"close"}).text("x"),$("#auto-off-checkbox").click(function(){$('input[name="auto-off-checkbox"]:checked').length?c("inventoryAutoHelp","off"):c("inventoryAutoHelp","on")}))}var d=a.defn,e=a.step,f=a.autoShow||!1;b(0)}}]).factory("ReturnToCaller",["$location","Empty",function(a,b){return function(c){var d,e=a.path().replace(/^\//,"").split("/"),f="";for(c=b(c)?e.length-1:c+1,d=0;c>d;d++)f+="/"+e[d];a.path(f)}}]).factory("FormatDate",["$filter",function(a){return function(b){return a("date")(b,"MM/dd/yy HH:mm:ss")}}]).factory("Wait",["$rootScope",function(a){return function(b){var c,d,e,f,g,h;"start"!==b||a.waiting?"stop"===b&&a.waiting&&$(".spinny, .overlay").fadeOut(400,function(){a.waiting=!1}):(a.waiting=!0,c=$(window).width(),d=$(window).height(),e=$(".spinny").width(),f=$(".spinny").height(),g=(c-e)/2,h=(d-f)/2,$(".overlay").css({width:$(document).width(),height:$(document).height()}).fadeIn(),$(".spinny").css({top:h,left:g}).fadeIn(400))}}]).factory("HideElement",[function(){return function(a,b){var c=$(a),d=c.css("width"),e=c.css("height"),f=c.position(),g=c.parent(),h=c.css("border-radius"),i=c.css("background-color"),j=c.css("margin"),k=c.css("padding");g.append('
'),$("#curtain-div").show(0,b)}}]).factory("ShowElement",[function(){return function(){$("#curtain-div").fadeOut(500,function(){$(this).remove()})}}]).factory("GetChoices",["Rest","ProcessErrors",function(a,b){return function(c){var d=c.scope,e=c.url,f=c.field,g=c.variable,h=c.callback,i=c.choice_name;d[g]?d[g].length=0:d[g]=[],a.setUrl(e),a.options().success(function(a){var b,c;for(b=i?a.actions.GET[f][i]:a.actions.GET[f].choices,c=0;c