Project

General

Profile

« Previous | Next » 

Revision bf4a13d3

Added by Walden Raines over 10 years ago

Fixes #3811 updating to bootstrap 3

View differences:

app/assets/javascripts/application.js
function onContentLoad(){
if($('.autocomplete-clear').size() == 0){
$('.autocomplete-input').scopedSearch();
$('.ui-helper-hidden-accessible').remove();
}
$('.flash.error').each(function(index, item) {
......
});
// adds buttons classes to all links
$("#title_action a").addClass("btn");
$("#title_action li a").removeClass("btn").addClass("la");
$("#title_action span").removeClass("btn").addClass("btn-group");
$("#title_action a[href*='new']").addClass("btn-success");
$("#title_action a").addClass("btn btn-default");
$("#title_action li a").removeClass("btn btn-default").addClass("la");
$("#title_action span").removeClass("btn btn-default").addClass("btn-group");
$("#title_action a[href*='new']").removeClass('btn-default').addClass("btn-success");
if ($("#login-form").size() > 0) {
$("#login_login").focus();
......
}
// highlight tabs with errors
$(".tab-content").find(".control-group.error").each(function() {
$(".tab-content").find(".form-group.error").each(function() {
var id = $(this).parentsUntil(".tab-content").last().attr("id");
$("a[href=#"+id+"]").addClass("tab-error");
})
......
$('*[title]').not('*[rel]').tooltip();
$('[data-table=inline]').not('.dataTable').dataTable(
{
"sDom": "<'row'<'span6'f>r>t<'row'<'span6'i><'span6'p>>",
"sDom": "<'row'<'col-md-6'f>r>t<'row'<'col-md-6'i><'col-md-6'p>>",
"sPaginationType": "bootstrap"
}
);
......
});
});
$('#params-tab').removeClass("tab-error");
if ($("#params").find('.control-group.error').length > 0) $('#params-tab').addClass('tab-error');
if ($("#params").find('.form-group.error').length > 0) $('#params-tab').addClass('tab-error');
$('a[rel="popover"]').popover({html: true});
}
......
$('#bookmarks-modal .modal-footer .btn-primary').on('click', function(){
$('#bookmarks-modal .modal-body .btn-primary').click();
});
$("#bookmarks-modal").bind('shown', function () {
$("#bookmarks-modal").bind('shown.bs.modal', function () {
var query = encodeURI($("#search").val());
var url = $("#bookmark").attr('data-url');
$("#bookmarks-modal .modal-body").empty();
......
$('.label-info').closest('tr').show();
$('.label-default').closest('tr').show();
$('.label-warning').closest('tr').show();
$('.label-important').closest('tr').show();
$('.label-danger').closest('tr').show();
}
if(level == 'notice'){
$('.label-info').closest('tr').show();
......
$('.label-info').closest('tr').hide();
$('.label-default').closest('tr').hide();
$('.label-warning').closest('tr').show();
$('.label-important').closest('tr').show();
$('.label-danger').closest('tr').show();
}
if(level == 'error'){
$('.label-info').closest('tr').hide();
$('.label-default').closest('tr').hide();
$('.label-warning').closest('tr').hide();
$('.label-important').closest('tr').show();
$('.label-danger').closest('tr').show();
}
if($("#report_log tr:visible ").size() ==1 || $("#report_log tr:visible ").size() ==2 && $('#ntsh:visible').size() > 0 ){
$('#ntsh').show();
......
function filter_permissions(item){
var term = $(item).val().trim();
if (term.length > 0) {
$(".control-group .collapse").parents('.control-group').hide();
$(".control-group .control-label:icontains('"+term+"')").parents('.control-group').show();
$(".form-group .collapse").parents('.form-group').hide();
$(".form-group .control-label:icontains('"+term+"')").parents('.form-group').show();
} else{
$(".control-group .collapse").parents('.control-group').show();
$(".form-group .collapse").parents('.form-group').show();
}
}
// Create a closure so that we can define intermediary
// method pointers that don't collide with other items
// in the global name space.
(function(){
// Store a reference to the original remove method.
var originalShowMethod = jQuery.fn.show;
// Define overriding method.
jQuery.fn.show = function(){
$(this).removeClass('hidden').removeClass('hide')
// Execute the original method.
return originalShowMethod.apply( this, arguments );
}
})();
app/assets/javascripts/charts.js
yaxis: { min: ranges.yaxis.from, max: ranges.yaxis.to }
}));
if(target.parents('.stats-well').find('.reset-zoom').size() == 0){
target.parents('.stats-well').prepend("<a class='reset-zoom btn btn-small'>" + _('Reset zoom') + "</a>");
target.parents('.stats-well').prepend("<a class='reset-zoom btn btn-sm'>" + _('Reset zoom') + "</a>");
}
}
......
function get_pie_chart(div, url) {
if($("#"+div).length == 0)
{
$('body').append('<div id="' + div + '" class="modal fade"></div>');
$("#"+div).append('<div class="modal-header"><a href="#" class="close" data-dismiss="modal">&times;</a><h3>' + _('Fact Chart') + '</h3></div>')
.append('<div id="' + div + '-body" class="fact_chart modal-body">' + _('Loading') + ' ...</div>');
$('body').append('<div id="' + div + '" class="modal fade"><div class="modal-dialog"><div class="modal-content"></div></div></div>');
$("#"+div+" .modal-content").append('<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title">' + _('Fact Chart') + '</h4></div>')
.append('<div id="' + div + '-body" class="fact_chart modal-body">' + _('Loading') + ' ...</div>')
.append('<div class="modal-footer"></div>')
$("#"+div).modal('show');
$.getJSON(url, function(data) {
var target = $("#"+div+"-body");
app/assets/javascripts/config_template.js
$('.logo-bar').addClass('hidden');
$editor.resize();
$('#main').append($('.exit-fullscreen'));
$('.exit-fullscreen').show();
$('.exit-fullscreen').removeClass('hidden');
$(window).scrollTop(0);
}
......
.width($(".template_text").width()+10)
$(".template_text").hide();
$editor.resize();
$('.exit-fullscreen').hide()
$('.exit-fullscreen').addClass('hidden');
}
function set_preview(){
app/assets/javascripts/host_checkbox.js
$(function() {
$('#submit_multiple a').click(function(){
if ($.foremanSelectedHosts.length == 0 || $(this).hasClass('dropdown-toggle')) { return false }
var title = $(this).attr('data-original-title');
var title = $(this).attr('data-dialog-title');
var url = $(this).attr('href') + "?" + $.param({host_ids: $.foremanSelectedHosts});
$('#confirmation-modal .modal-header h3').text(title);
$('#confirmation-modal .modal-header h4').text(title);
$('#confirmation-modal .modal-body').empty().append("<img class='modal-loading' src='/assets/spinner.gif'>");
$('#confirmation-modal').modal({show: "true", backdrop: "static"});
$('#confirmation-modal').modal();
$("#confirmation-modal .modal-body").load(url + " #content",
function(response, status, xhr) {
$("#loading").hide();
app/assets/javascripts/host_edit.js
}
function clear_errors(){
$('.error').children().children('.help-inline').remove();
$('.error').children().children('.help-block').remove();
$('.error').removeClass('error');
$('.tab-error').removeClass('tab-error');
$('.alert-error').remove();
......
var task_list_size = $('p',data).size();
if (task_list_size == 0 || stop_pooling == true) return;
var done_tasks = $('.icon-check',data).size();
var failed_tasks = $('.icon-remove',data).size();
var done_tasks = $('.glyphicon-check',data).size();
var failed_tasks = $('.glyphicon-remove',data).size();
var $progress = $('.progress');
$("#host-progress").show();
......
links.attr('onclick', 'remove_puppet_class(this)');
links.attr('data-original-title', _('Click to undo adding this class'));
links.tooltip();
link.removeClass('icon-plus-sign').addClass('icon-remove-sign');
link.removeClass('glyphicon-plus-sign').addClass('glyphicon-minus-sign');
$('#selected_classes').append(content);
......
$('#puppetclass_' + id + '_params_loading').remove();
$('[id^="puppetclass_' + id + '_params\\["]').remove();
$('#params-tab').removeClass("tab-error");
if ($("#params").find('.control-group.error').length > 0) $('#params-tab').addClass('tab-error');
if ($("#params").find('.form-group.error').length > 0) $('#params-tab').addClass('tab-error');
return false;
}
app/assets/javascripts/lookup_keys.js
//select the first tab
$('.smart-var-tabs li a span').hide();
select_first_tab();
// expend inner form fields
$('.tabs-left .col-md-4').removeClass('col-md-4').addClass('col-md-8')
//make the remove variable button visible only on the active pill
$(document).on('click', '.smart-var-tabs li a', function(){ show_delete_button(this);});
//remove variable click event
......
type_field.attr('disabled', override ? null : 'disabled');
validator_type_field.attr('disabled', override ? null : 'disabled');
default_value_field.attr('disabled', override ? null : 'disabled' );
pill_icon.attr("class", override ? 'icon-flag' : "icon- ");
pill_icon.attr("class", override ? 'glyphicon glyphicon-flag' : "glyphicon- ");
override_value_div.toggle(override);
}
function filterByEnvironment(item){
if ($(item).val()=="") {
$('ul.smart-var-tabs li[data-used-environments] a').removeClass('muted');
$('ul.smart-var-tabs li[data-used-environments] a').removeClass('text-muted');
return;
}
var selected = $(item).find('option:selected').text();
$('ul.smart-var-tabs li[data-used-environments] a').addClass('muted');
$('ul.smart-var-tabs li[data-used-environments*="'+selected+'"] a').removeClass('muted');
$('ul.smart-var-tabs li[data-used-environments] a').addClass('text-muted');
$('ul.smart-var-tabs li[data-used-environments*="'+selected+'"] a').removeClass('text-muted');
}
function filterByClassParam(item) {
app/assets/javascripts/noVNC.js
sb = $D('noVNC_status');
cad = $D('sendCtrlAltDelButton');
switch (state) {
case 'failed': level = "important"; break;
case 'fatal': level = "important"; break;
case 'normal': level = "success"; break;
case 'disconnected': level = ""; break;
case 'loaded': level = "success"; break;
default: level = "warning"; break;
case 'failed': level = "danger"; break;
case 'fatal': level = "danger"; break;
case 'normal': level = "success"; break;
case 'disconnected': level = "default"; break;
case 'loaded': level = "success"; break;
default: level = "warning"; break;
}
cad.disabled = state !== "normal";
if (typeof(msg) !== 'undefined') {
sb.setAttribute("class", "span7 label label-" + level);
sb.setAttribute("class", "col-md-7 label label-" + level);
s.innerHTML = msg;
}
}
app/assets/javascripts/spice.js
function spice_error(e) {
$('#spice-status').text(e);
$('#spice-status').removeClass('label-success').addClass('label-important');
$('#spice-status').removeClass('label-success').addClass('label-danger');
disconnect();
}
app/assets/javascripts/topbar.js
$('.persist-header').after(clone);
$('.persist-header:first').hide();
$('.persist-header:last').css({
'position': 'static'
'position': 'static', 'top': '0'
});
mark_active_menu();
......
})
//open main menu on hover
$(document).on('mouseenter', '.dropdown.menu_tab_dropdown', function(){
$(document).on('mouseenter', '.collapse .dropdown.menu_tab_dropdown', function(){
if(!$(this).hasClass('open')){
$(this).find('.dropdown-toggle:first').click();
}
});
$(document).on('mouseleave', '.collapse .dropdown.menu_tab_dropdown', function(){
if($(this).hasClass('open')){
$(this).find('.dropdown-toggle:first').click();
}
});
function mark_active_menu() {
$("[class^='menu_tab_']").removeClass('active');
app/assets/javascripts/two-pane.js
$('.two-pane-right').remove();
$('.pagination').hide();
if ($('.two-pane-left').length == 0){
$('.table-two-pane').wrap( "<div class='row'><div class='span3 two-pane-left'></div></div>");
$('.table-two-pane').wrap( "<div class='row'><div class='col-md-3 two-pane-left'></div></div>");
}
var placeholder = spinner_placeholder(_('Loading'));
$('.two-pane-left').after("<div class='span9 two-pane-right'><div class='well'>" + placeholder + "</div></div>");
$('.two-pane-left').after("<div class='col-md-9 two-pane-right'><div class='well'>" + placeholder + "</div></div>");
}
......
$('.two-pane-right').html(form_content);
$('.two-pane-right form').removeClass('form-horizontal');
$('.two-pane-right form').prepend("<div class='fr close-button'><a class='two-pane-close' href='#'>&times;</a></div>");
$('.form-actions div').addClass('pull-right');
$('.form-actions a').addClass('two-pane-close');
fix_multi_checkbox();
} else {
......
}
function fix_multi_checkbox(){
$('.two-pane-right .icon-check').parents('.control-group').each(function(){
$('.two-pane-right .glyphicon-icon-check').parents('.form-group').each(function(){
var label = $(this).find('.control-label').hide().text();
$(this).find('a').append(label).addClass('select-all');
})
......
// clear form errors classes.
function clear_errors(){
$('.error .help-inline').hide();
$('.error .help-block').hide();
$('.error').removeClass('error');
$('.tab-error').removeClass('tab-error');
$('.alert-error').remove();
app/assets/stylesheets/application.scss
text-decoration: none;
}
.classes ul {
margin-left: 10px;
margin-bottom: 0px;
.classes>ul {
margin-bottom: 6px;
margin-left: -42px;
}
.puppetclass, .puppetclass li, .selected_puppetclass, .selected_puppetclass li {
a { color: #333; }
a.icon-remove-sign, a.icon-plus-sign {
a.glyphicon-minus-sign, a.glyphicon-plus-sign {
float: right;
margin-right: 10px;
}
}
#title_action {
margin-top: -9px;
}
#actions_dropdown {
float: right;
margin-left: 3px;
......
/* float left */
.fl { float: left; }
#confirmation-modal{
width: 850px !important;
#confirmation-modal .modal-dialog{
width: 850px;
}
#confirmation-modal .modal-body{
......
max-height: 500px;
}
#host-conflicts-modal {
width: 650px !important;
#host-conflicts-modal .modal-dialog{
width: 650px;
}
.editable {
......
float: right;
}
.pagination ul{ float: right;}
.modal-loading {
position: relative;
top: 50%;
left: 50%;
}
select{padding: initial;}
.inputs-list{
......
margin-bottom: 7px;
}
.no-taxonomies button.btn.btn-large {
.no-taxonomies button.btn.btn-lg {
margin-left: 11px;
}
......
.grey, .gray{color: #808080 !important;}
.black{color: #000 !important;}
.control-group.condensed{margin-bottom: 0;}
.control-group.condensed textarea {
.form-group.condensed{margin-bottom: 0;}
.form-group.condensed textarea {
border-color: #f5f5f5;
background-color: #f5f5f5;
box-shadow: none;
......
cursor: text;
}
.control-group.condensed.error textarea{border-color: #b94a48;}
.control-group.condensed.warning textarea{border-color: #c09853;}
.form-group.condensed.error textarea{border-color: #b94a48;}
.form-group.condensed.warning textarea{border-color: #c09853;}
.gravatar{
width: 30px;
......
.ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
-ms-text-overflow: ellipsis;
......
.exit-fullscreen{
position: absolute;
top: 60px;
top: 30px;
right: 30px;
}
app/assets/stylesheets/bootstrap_and_overrides.scss
/*
=require twitter-bootstrap-static/bootstrap
=require twitter-bootstrap-static/sprites
*/
@import "mixin";
@import "colors";
@font-face {
font-family: 'Overpass';
src: local("Overpass"),
font-url('overpass_regular-web.eot?#iefix') format("eot"),
font-url('overpass_regular-web.woff') format("woff"),
font-url('overpass_regular-web.ttf') format("truetype"),
font-url('overpass_regular-web.svg#webfontLTZe4IYH') format("svg");
font-weight: normal;
font-style: normal;
$navbar-default-bg: $primary_color;
@import "twitter/bootstrap";
.dropdown-menu {
@include border_radius(0, 0, 6px, 6px);
}
// Necessary because bootstrap3 nav dropdown does not have top arrow
.nav li .dropdown-menu:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
position: absolute;
top: -6px;
left: 10px;
}
.navbar .navbar-right > li > .dropdown-menu:after,
.navbar .nav > li > .dropdown-menu.pull-right:after {
left: auto;
right: 13px;
}
// Necessary because bootstrap3 does not support dropdown sub menus.
.dropdown-submenu {
position:relative;
}
@font-face {
font-family: 'Overpass';
src: local("Overpass Bold"),
local("OverpassBold"),
font-url('overpass_bold-web.eot?#iefix') format("eot"),
font-url('overpass_bold-web.woff') format("woff"),
font-url('overpass_bold-web.ttf') format("truetype"),
font-url('overpass_bold-web.svg#webfontzAU82Ltw') format("svg");
font-weight: bold;
font-style: normal;
.dropdown-submenu > .dropdown-menu {
top:0;
left:100%;
margin-top:-6px;
margin-left:-1px;
}
table .span0{
float:none;width:20px;margin-left:0;
.dropdown-submenu:hover > .dropdown-menu {
display:block;
}
.table th{
color: #777777;
background: rgba(0, 0, 0, 0.08);
& a {
text-decoration: none;
color: #777777;
}
.dropdown-submenu > a:after {
display:block;content:" ";
float:right;
width:0;
height:0;
border-color:transparent;
border-style:solid;
border-width:5px 0 5px 5px;
border-left-color:#cccccc;
margin-top:5px;
margin-right:-10px;
}
h1, h2, h3{line-height: 32px;}
.btn a {text-decoration: none; color: #333333;}
.dropdown-submenu:hover > a:after {
border-left-color:#ffffff;
}
.navbar.navbar-inverse .navbar-inner{
border-bottom: none;
border-top: 1px solid $border_color;
@include linear-gradient($primary_gradient_start, $primary_gradient_end);
color: #ffffff;
a {
font-family: Overpass, sans-serif, sans;
font-size: 14px;
}
.dropdown-submenu.pull-left {
float:none;
}
.navbar-inverse .brand, .navbar-inverse .nav>li>a {
color: #ffffff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
.dropdown-submenu.pull-left > .dropdown-menu {
left:-100%;
margin-left:10px;
}
.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret {
border-top-color: #ffffff;
border-bottom-color: #ffffff;
// Bootstrap 3 no longer has icon-color classes
.icon-white {
color: white;
}
.navbar-inverse{
.btn-navbar,
.nav .active>a,
.nav li.dropdown.open>.dropdown-toggle,
.nav li.dropdown.active>.dropdown-toggle,
.nav li.dropdown.open.active>.dropdown-toggle {
color: #ffffff;
@include linear-gradient($selected_gradient_start, $selected_gradient_end);
}
.badge.badge-inverse {
background-color: black;
}
.navbar.navbar-inverse .navbar-inner{
.nav>li>a:hover,
.nav>li>a:focus {
@include linear-gradient($hover_gradient_start, $hover_gradient_end);
}
span.input-group-btn .hidden-xs {display:inline !important;}
@media (max-width: 768px) {
span.input-group-btn .hidden-xs {display:none !important;}
}
.dropdown-menu{
-webkit-border-radius: 0 0 6px 6px;
-moz-border-radius: 0 0 6px 6px;
-webkit-border-radius: 0 0 6px 6px;
-moz-border-radius: 0 0 6px 6px;
border-radius: 0 0 6px 6px;
margin: 0;
span.btn a{ text-decoration: none; color: #333333}
// help-inline is not defined in Bootstrap3
.help-inline{
vertical-align: middle;
line-height: 2.428571;
}
.nav-collapse.collapse.in li a{
color: #ffffff;
.well {
padding: 19px 19px 19px 36px;
background-color: white;
}
.navbar-fixed-top{
position: relative;
.label-default {
background-color: #cccccc;
}
.nav-collapse.collapse.in li a:hover,
.ui-menu .ui-menu-item a.ui-state-focus {
color: #ffffff;
text-decoration: none;
border-color: #0081c2;
-webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0;
@include linear-gradient(#0081c2, #0077b3);
.form-actions {
padding: 19px 20px 20px;
margin-top: 20px;
margin-bottom: 20px;
}
.pull-right .dropdown-submenu > .dropdown-menu
{
left: -95%;
border-radius: 6px 0px 6px 6px;
.navbar.navbar-form{
background-color: #f8f8f8;
padding: 10px;
border: 1px solid #e7e7e7;
border-radius: 4px;
}
.title_filter form{
margin: 0;
.nav.nav-tabs{
margin-bottom: 20px;
}
.tab-pane{
.tab-content{
min-height: 420px;
}
#about .tab-pane{
max-height: 420px;
/* custom inclusion of right, left and below tabs */
.tabs-below > .nav-tabs,
.tabs-right > .nav-tabs,
.tabs-left > .nav-tabs {
border-bottom: 0;
}
.tab-content > .tab-pane,
.pill-content > .pill-pane {
display: none;
}
.tab-content > .active,
.pill-content > .active {
display: block;
}
.tabs-below > .nav-tabs {
border-top: 1px solid #ddd;
}
.autocomplete-clear {
height: 18px;
.tabs-below > .nav-tabs > li {
margin-top: -1px;
margin-bottom: 0;
vertical-align: middle;
}
.form-search .btn{
height: 30px;
.tabs-below > .nav-tabs > li > a {
-webkit-border-radius: 0 0 4px 4px;
-moz-border-radius: 0 0 4px 4px;
border-radius: 0 0 4px 4px;
}
.tabs-below > .nav-tabs > li > a:hover,
.tabs-below > .nav-tabs > li > a:focus {
border-top-color: #ddd;
border-bottom-color: transparent;
}
.tabs-below > .nav-tabs > .active > a,
.tabs-below > .nav-tabs > .active > a:hover,
.tabs-below > .nav-tabs > .active > a:focus {
border-color: transparent #ddd #ddd #ddd;
}
.tabs-left > .nav-tabs > li,
.tabs-right > .nav-tabs > li {
float: none;
}
.tabs-left > .nav-tabs > li > a,
.tabs-right > .nav-tabs > li > a {
min-width: 74px;
margin-right: 0;
margin-bottom: 3px;
}
.tabs-left > .nav-tabs {
float: left;
margin-right: 19px;
padding-right: 0;
border-right: 1px solid #ddd;
}
.tabs-left > .nav-tabs > li > a {
margin-right: -1px;
-webkit-border-radius: 4px 0 0 4px;
-moz-border-radius: 4px 0 0 4px;
border-radius: 4px 0 0 4px;
}
.tabs-left > .nav-tabs > li > a:hover,
.tabs-left > .nav-tabs > li > a:focus {
border-color: #eeeeee #dddddd #eeeeee #eeeeee;
}
.tabs-left > .nav-tabs .active > a,
.tabs-left > .nav-tabs .active > a:hover,
.tabs-left > .nav-tabs .active > a:focus {
border-color: #ddd transparent #ddd #ddd;
*border-right-color: #ffffff;
}
.tabs-right > .nav-tabs {
float: right;
margin-left: 19px;
border-left: 1px solid #ddd;
}
.tabs-right > .nav-tabs > li > a {
margin-left: -1px;
-webkit-border-radius: 0 4px 4px 0;
-moz-border-radius: 0 4px 4px 0;
border-radius: 0 4px 4px 0;
}
.tabs-right > .nav-tabs > li > a:hover,
.tabs-right > .nav-tabs > li > a:focus {
border-color: #eeeeee #eeeeee #eeeeee #dddddd;
}
.tabs-right > .nav-tabs .active > a,
.tabs-right > .nav-tabs .active > a:hover,
.tabs-right > .nav-tabs .active > a:focus {
border-color: #ddd #ddd #ddd transparent;
*border-left-color: #ffffff;
}
app/assets/stylesheets/colors.scss
// Colors
$primary_color: #005C7E;
$border_color: #0187b6;
$brand_color: #005C7E;
......
$hover_gradient_start: #005b7e;
$hover_gradient_end: #006289;
$border_color: #0187b6;
$border_color: #0187b6;
$navbar-default-brand-color: white;
$navbar-default-brand-hover-color: white;
$navbar-default-link-color: white;
$navbar-default-link-active-color: white;
$navbar-default-link-hover-color: white;
$dropdown-link-color: #333333;
$dropdown-link-active-color: white;
$dropdown-link-hover-color: white;
$dropdown-link-hover-bg: #0088cc;
app/assets/stylesheets/login.scss
$side_gradient_start: $primary_color;
$side_gradient_end: $primary_color;
.login-container{
.login-container {
position: relative;
width: 500px;
height: 265px;
......
-moz-box-shadow: #acacac 0px 12px 15px -8px;
box-shadow: #acacac 0px 12px 15px -8px;
& .aside {
height: 100%;
width: 140px;
height: 265px;
float: left;
@include linear-gradient($side_gradient_start, $side_gradient_end);
@include border_radius(7px, 0, 0, 7px);
}
& .section {
width: 360px;
height: 100%;
position: relative;
overflow: hidden;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
min-height: 265px;
height: 265px;
width: 360px;
background: #f9f9f9;
padding: 0 30px;
@include border_radius(0, 7px, 7px, 0);
......
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#88d9d9d9,endColorstr=#33d9d9d9);
}
}
#login-form{
#login-form {
margin: 40px 0 0 0;
height: 265px;
font-family: Overpass !important;
& .btn{
margin-right: 16px;
}
}
.login-logo{
.login-logo {
margin-top: 88.33333px;
width: 130px;
margin-left: 5px;
app/assets/stylesheets/topbar.scss
@import "mixin";
@import "colors";
@media screen and (max-width: 767px){
.logo-bar {
margin-left: -20px;
margin-right: -20px;
.navbar {
border-radius: 0;
margin-bottom: 0;
.nav a {
font-family: Overpass, sans-serif, sans;
font-size: 14px;
}
.nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.5);
}
.active > a, .open > a {
@include linear-gradient($hover_gradient_start, $hover_gradient_end);
}
.navbar-header {
font-family: Overpass, sans-serif, sans;
float: none;
}
}
.navbar-brand {
padding: 0;
img {
height: 34px;
margin-bottom: -10px;
}
a {
color: white;
text-transform: uppercase;
font-weight: bold;
font-size: 16px;
&:hover {
color: white;
text-decoration: none;
}
}
}
.logo-bar{
.navbar-outer {
height: 25px;
border-top: solid 2px $brand_color;
background-color: $primary_color;
.nav > .dropdown > .dropdown-toggle{
color:#ffffff;
text-decoration: none;
padding: 4px 15px 0 0;
}
.nav > .dropdown > .dropdown-toggle:focus,
.nav > .dropdown > .dropdown-toggle:hover,
.nav > .dropdown.open > .dropdown-toggle{
background-color: $primary_color;
}
.nav.pull-right {
margin-bottom: 0;
min-height: 0;
z-index: 1;
.navbar-brand a,
.navbar-right a {
vertical-align: middle;
}
.navbar-right {
float: right;
margin: 0;
.dropdown > a {
padding: 0.25em 0 0 0;
}
.dropdown-menu {
margin-top: 0;
min-width: 100px;
}
a {
font-family: Overpass, sans-serif, sans;
font-size: 11px;
font-weight: bold;
}
}
.nav > .dropdown > .dropdown-toggle .caret {
border-top-color: #ffffff;
border-bottom-color: #ffffff;
margin-top: 8px;
}
.navbar-inner {
border-bottom: none;
border-top: 1px solid $border_color;
clear: left;
left: 0;
min-height: 40px;
max-height: 40px;
position: absolute;
right: 0;
top: 25px;
@include linear-gradient($primary_gradient_start, $primary_gradient_end);
.menu_tab_dropdown > a {
padding-top: 10px;
padding-bottom: 9px;
}
}
.menu-dropdown {text-transform: capitalize;}
.dropdown .caret {
margin-left: 4px;
}
.brand {
float: left;
display: block;
padding: 4px 0 0 50px;
font-family: Overpass;
font-size: 16px;
.nav-header {
padding: 3px 20px;
font-size: 11px;
font-weight: bold;
color: #ffffff;
text-transform:uppercase;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
&:hover,
&:focus {
color: #ffffff;
text-decoration: none;
line-height: 20px;
color: #999999;
text-transform: uppercase;
}
.navbar .nav .org-switcher > a {
font-size: 16px;
border-right: solid 1px $border_color;
.caret {
margin-left: 20px;
}
}
.logo-bar img{
float: left;
margin-right: -45px;
height: 34px;
.navbar-inner {
a.manage-menu {
font-size: 11px;
color: #0088cc;
&:hover,
&:focus {
color: #ffffff;
}
}
.glyphicon {
color: #cccccc;
}
}
.logo-bar .logo-small img{
height: 23px;
// Responsive menu display
.navbar-collapse.in li .dropdown-menu:after {
display: none;
}
.nav1 {
margin-left: 37px;
.navbar-collapse.in{
@include linear-gradient($primary_gradient_start, $primary_gradient_end);
margin-bottom: 0;
margin-top: 0;
max-height: none;
padding: 0;
position: relative;
z-index: 2;
.container {
width: 100%;
}
.open {
background-color: transparent;
}
}
.org-switcher>a{
font-family: Overpass, sans-serif, sans;
font-size: 16px !important;
border-right: solid 1px $border_color !important;
.caret{
margin-left:20px;
margin-top: 6px;
// Necessary to override bootstrap3 media query restyling for small screens
#userMenu .dropdown-menu {
@import "twitter/bootstrap/variables";
background-color: $dropdown-bg;
border: 1px solid $dropdown-fallback-border; // IE8 fallback
border: 1px solid $dropdown-border;
border-radius: 0 0 6px 6px;
position: absolute;
li > a {
color: $dropdown-link-color;
&:hover,
&:focus {
color: $dropdown-link-hover-color;
background-color: $dropdown-link-hover-bg;
}
}
}
.navbar.navbar-inverse .navbar-inner a.manage-menu{
font-size: 11px;
color: #0088cc;
&:hover{
color: #ffffff;
.navbar-default button.navbar-toggle {
border: 0;
border-radius: 0;
margin: 9px;
padding: 0;
&:hover,
&:focus {
background-color: transparent;
}
}
.glyphicon {
top: 0;
}
}
app/assets/stylesheets/two_pane.scss
}
.two-pane-right{
.form-actions{
margin-bottom: 0;
background-color: #ffffff;
}
.well{
padding: 19px;
min-height: 460px;
margin-bottom: 0;
margin-left: -31px;
......
.tab-pane{
min-height: 300px;
}
.tab-content {
margin: 15px;
}
.close-button a{
font-size: 16px;
font-weight: bold;
app/assets/stylesheets/typography.scss
@font-face {
font-family: 'Overpass';
src: local("Overpass"),
font-url('overpass_regular-web.eot?#iefix') format("eot"),
font-url('overpass_regular-web.woff') format("woff"),
font-url('overpass_regular-web.ttf') format("truetype"),
font-url('overpass_regular-web.svg#webfontLTZe4IYH') format("svg");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Overpass';
src: local("Overpass Bold"),
local("OverpassBold"),
font-url('overpass_bold-web.eot?#iefix') format("eot"),
font-url('overpass_bold-web.woff') format("woff"),
font-url('overpass_bold-web.ttf') format("truetype"),
font-url('overpass_bold-web.svg#webfontzAU82Ltw') format("svg");
font-weight: bold;
font-style: normal;
}
app/helpers/application_helper.rb
functions_options = { :klass => klass, :host => host, :css_class => ''}
text = remove_link_to_function(truncate(klass.name, :length => 28), functions_options)
content_tag(:span, text, options).html_safe +
remove_link_to_function('', functions_options.merge(:css_class => 'icon-remove-sign'))
remove_link_to_function('', functions_options.merge(:css_class => 'glyphicon glyphicon-minus-sign'))
end
......
text = add_link_to_function(truncate(klass.name, :length => 28), function_options)
content_tag(:span, text, options).html_safe +
add_link_to_function('', function_options.merge(:css_class => 'icon-plus-sign'))
add_link_to_function('', function_options.merge(:css_class => 'glyphicon glyphicon-plus-sign'))
end
......
def auto_complete_search(name, val, options = {})
path = send("#{controller_name}_path")
options.merge!(:class => "autocomplete-input", :'data-url' => "#{path}/auto_complete_#{name}" )
options.merge!(:class => "autocomplete-input form-control", :'data-url' => "#{path}/auto_complete_#{name}" )
text_field_tag(name, val, options)
end
......
end
def action_buttons(*args)
content_tag(:div, :class => "btn-toolbar btn-toolbar-condensed") do
toolbar_action_buttons args
end
end
def select_action_button(title, *args)
def select_action_button(title, options={}, *args)
# the no-buttons code is needed for users with less permissions
return unless args
args = args.flatten.map{|arg| arg unless arg.blank?}.compact
return if args.length == 0
#single button
return content_tag(:span, args[0].html_safe, :class=>'btn') if args.length == 1
return content_tag(:span, args[0].html_safe, options.merge(:class=>'btn btn-default')) if args.length == 1
#multiple options
content_tag(:div, :class=>'btn-group') do
link_to((title +" " +content_tag(:i, '', :class=>'caret')).html_safe,'#', :class=>"btn dropdown-toggle", :'data-toggle'=>'dropdown') +
content_tag(:div, options.merge(:class=>'btn-group')) do
link_to((title +" " +content_tag(:i, '', :class=>'caret')).html_safe,'#', :class=>"btn btn-default dropdown-toggle", :'data-toggle'=>'dropdown') +
content_tag(:ul,:class=>"dropdown-menu") do
args.map{|option| content_tag(:li,option)}.join(" ").html_safe
end
......
return if args.length == 0
#single button
return content_tag(:span, args[0].html_safe, :class=>'btn btn-small') if args.length == 1
return content_tag(:span, args[0].html_safe, :class=>'btn btn-sm btn-default') if args.length == 1
#multiple buttons
primary = args.delete_at(0).html_safe
primary = content_tag(:span, primary, :class=>'btn btn-small') if primary !~ /btn/
primary = content_tag(:span, primary, :class=>'btn btn-sm btn-default') if primary !~ /btn/
content_tag(:div,:class => "btn-group") do
primary + link_to(content_tag(:i, '', :class=>'caret'),'#', :class=>"btn #{'btn-small' if primary =~ /small/} dropdown-toggle", :'data-toggle'=>'dropdown') +
content_tag(:ul,:class=>"dropdown-menu") do
primary + link_to(content_tag(:i, '', :class=>'caret'),'#', :class=>"btn btn-default #{'btn-sm' if primary =~ /btn-sm/} dropdown-toggle", :'data-toggle'=>'dropdown') +
content_tag(:ul,:class=>"dropdown-menu pull-right") do
args.map{|option| content_tag(:li,option)}.join(" ").html_safe
end
end
app/helpers/audits_helper.rb
when 'update'
'label-info'
when 'destroy'
'label-important'
'label-danger'
else
''
end if main_object? audit
app/helpers/bmc_helper.rb
if s.downcase == 'on'
"<span class='label label-success'>#{_('On')}</span>".html_safe
else
"<span class='label'>#{_('Off')}</span>".html_safe
"<span class='label label-default'>#{_('Off')}</span>".html_safe
end
end
app/helpers/common_parameters_helper.rb
end
def parameter_value_field value
content_tag :div, :class => "control-group condensed" do
content_tag :div, :class => "form-group condensed" do
text_area_tag("value_#{value[:value]}", value[:value], :rows => (value[:value].to_s.lines.count || 1 rescue 1),
:class => "span5", :disabled => true) +
content_tag(:span, :class => "help-inline") { popover(_("Additional info"), _("<b>Source:</b> %s") % (value[:source]))}
:class => "col-md-5", :disabled => true) +
content_tag(:span, :class => "help-block") { popover(_("Additional info"), _("<b>Source:</b> %s") % (value[:source]))}
end
end
app/helpers/compute_resources_helper.rb
end
def vm_power_class s
"class='label #{s ? "label-success" : ""}'".html_safe
"class='label #{s ? "label-success" : "label-default"}'".html_safe
end
def vm_power_action vm
app/helpers/hosts_helper.rb
# TRANSLATORS: host's status: first character of "build"
short = s_("Build|B")
when "Alerts disabled"
style = ""
style = "label-default"
# TRANSLATORS: host's status: first character of "disabled"
short = s_("Disabled|D")
when "No reports"
style = ""
style = "label-default"
# TRANSLATORS: host's status: first character of "no reports"
short = s_("No reports|N")
when "Out of sync"
......
# TRANSLATORS: host's status: first character of "sync" (out of sync)
short = s_("Sync|S")
when "Error"
style = "label-important"
style = "label-danger"
# TRANSLATORS: host's status: first character of "error"
short = s_("Error|E")
when "Active"
......
def multiple_actions_select
actions = [
[_('Change Group'), select_multiple_hostgroup_hosts_path, 'pencil'],
[_('Change Environment'), select_multiple_environment_hosts_path, 'chevron-right'],
[_('Edit Parameters'), multiple_parameters_hosts_path, 'edit'],
[_('Delete Hosts'), multiple_destroy_hosts_path, 'trash'],
[_('Disable Notifications'), multiple_disable_hosts_path, 'eye-close'],
[_('Enable Notifications'), multiple_enable_hosts_path, 'bullhorn'],
[_('Change Group'), select_multiple_hostgroup_hosts_path],
[_('Change Environment'), select_multiple_environment_hosts_path],
[_('Edit Parameters'), multiple_parameters_hosts_path],
[_('Delete Hosts'), multiple_destroy_hosts_path],
[_('Disable Notifications'), multiple_disable_hosts_path],
[_('Enable Notifications'), multiple_enable_hosts_path],
]
actions.insert(1, [_('Build Hosts'), multiple_build_hosts_path, 'fast-forward']) if SETTINGS[:unattended]
actions << [_('Run Puppet'), multiple_puppetrun_hosts_path, 'play'] if Setting[:puppetrun]
actions << [_('Assign Organization'), select_multiple_organization_hosts_path, 'tags'] if SETTINGS[:organizations_enabled]
actions << [_('Assign Location'), select_multiple_location_hosts_path, 'map-marker'] if SETTINGS[:locations_enabled]
content_tag :span, :id => 'submit_multiple' do
select_action_button( _("Select Action"), actions.map do |action|
link_to(icon_text(action[2], action[0]) , action[1], :class=>'btn', :title => _("%s - The following hosts are about to be changed") % action[0])
end.flatten)
end
actions.insert(1, [_('Build Hosts'), multiple_build_hosts_path]) if SETTINGS[:unattended]
actions << [_('Run Puppet'), multiple_puppetrun_hosts_path] if Setting[:puppetrun]
actions << [_('Assign Organization'), select_multiple_organization_hosts_path] if SETTINGS[:organizations_enabled]
actions << [_('Assign Location'), select_multiple_location_hosts_path] if SETTINGS[:locations_enabled]
select_action_button( _("Select Action"), {:id => 'submit_multiple'},
actions.map do |action|
link_to(action[0] , action[1], :'data-dialog-title' => _("%s - The following hosts are about to be changed") % action[0])
end.flatten
)
end
def date ts=nil
......
form_tag @host, :id => 'days_filter', :method => :get, :class=>"form form-inline" do
content_tag(:span, (_("Reports from the last %{days} days - %{count} reports found") %
{ :days => select(nil, 'range', 1..days_ago(@host.reports.first.reported_at),
{:selected => @range}, {:class=>"span1", :onchange =>"$('#days_filter').submit();$(this).disabled();"}),
{:selected => @range}, {:class=>"col-md-1 form-control", :style=>"float:none;", :onchange =>"$('#days_filter').submit();$(this).disabled();"}),
:count => @host.reports.recent(@range.days.ago).count }).html_safe)
end
end
......
end
def show_appropriate_host_buttons(host)
[ link_to_if_authorized(_("Audits"), hash_for_host_audits_path(:host_id => @host), :title => _("Host audit entries") , :class => 'btn'),
(link_to_if_authorized(_("Facts"), hash_for_host_facts_path(:host_id => host), :title => _("Browse host facts") , :class => 'btn') if host.fact_values.any?),
(link_to_if_authorized(_("Reports"), hash_for_host_reports_path(:host_id => host), :title => _("Browse host reports") , :class => 'btn') if host.reports.any?),
(link_to(_("YAML"), externalNodes_host_path(:name => host), :title => _("Puppet external nodes YAML dump") , :class => 'btn') if SmartProxy.puppet_proxies.any?)
[ link_to_if_authorized(_("Audits"), hash_for_host_audits_path(:host_id => @host), :title => _("Host audit entries") , :class => 'btn btn-default'),
(link_to_if_authorized(_("Facts"), hash_for_host_facts_path(:host_id => host), :title => _("Browse host facts") , :class => 'btn btn-default') if host.fact_values.any?),
(link_to_if_authorized(_("Reports"), hash_for_host_reports_path(:host_id => host), :title => _("Browse host reports") , :class => 'btn btn-default') if host.reports.any?),
(link_to(_("YAML"), externalNodes_host_path(:name => host), :title => _("Puppet external nodes YAML dump") , :class => 'btn btn-default') if SmartProxy.puppet_proxies.any?)
].compact
end
app/helpers/layout_helper.rb
content_for(:javascripts) { javascript_include_tag(*args) }
end
def addClass options={}, new_class
options[:class] = "#{new_class} #{options[:class]}"
end
def text_f(f, attr, options = {})
field(f, attr, options) do
addClass options, "form-control"
f.text_field attr, options
end
end
......
def textarea_f(f, attr, options = {})
field(f, attr, options) do
options[:rows] = line_count(f, attr) if options[:rows] == :auto
addClass options, "form-control"
f.text_area attr, options
end
end
......
field(f, attr, options) do
options[:autocomplete] ||= "off"
options[:placeholder] ||= password_placeholder(f.object)
addClass options, "form-control"
f.password_field attr, options
end
end
......
text = options.delete(:help_text)
inline = options.delete(:help_inline)
field(f, attr, options) do
label_tag('', :class=>'checkbox') do
help_inline = inline.blank? ? '' : content_tag(:span, inline, :class => "help-inline")
f.check_box(attr, options, checked_value, unchecked_value) + " #{text} " + help_inline.html_safe
end
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff