Merge "Update Twitter Bootstrap to version 3"

This commit is contained in:
Jenkins 2014-07-28 22:17:55 +00:00 committed by Gerrit Code Review
commit 9690232e99
290 changed files with 9965 additions and 5464 deletions

View File

@ -148,41 +148,16 @@ similar way, add the new column definition and then use the ``Meta``
Button Icons Button Icons
============ ============
Horizon provides hooks for customizing the look and feel of each class of Horizon uses font icons (glyphicons) from Twitter Bootstrap to add icons to buttons.
button on the site. The following classes are used to identify each type of Please see http://bootstrapdocs.com/v3.1.1/docs/components/#glyphicons for instructions
button: how to use icons in the code.
* Generic Classes To add icon to Table Action, use icon property. Example:
* btn-search
* btn-delete
* btn-upload
* btn-download
* btn-create
* btn-edit
* btn-list
* btn-copy
* btn-camera
* btn-stats
* btn-enable
* btn-disable
* Floating IP-specific Classes class CreateSnapshot(tables.LinkAction):
* btn-allocate name = "snapshot"
* btn-release verbose_name = _("Create Snapshot")
* btn-associate icon = "camera"
* btn-disassociate
* Instance-specific Classes
* btn-launch
* btn-terminate
* btn-reboot
* btn-pause
* btn-suspend
* btn-console
* btn-log
* Volume-specific classes
* btn-detach
Additionally, the site-wide default button classes can be configured by Additionally, the site-wide default button classes can be configured by
setting ``ACTION_CSS_CLASSES`` to a tuple of the classes you wish to appear setting ``ACTION_CSS_CLASSES`` to a tuple of the classes you wish to appear

View File

@ -411,8 +411,8 @@ dashboards::
{% endblock page_header %} {% endblock page_header %}
{% block main %} {% block main %}
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-sm-12">
{{ tab_group.render }} {{ tab_group.render }}
</div> </div>
</div> </div>

File diff suppressed because it is too large Load Diff

View File

@ -127,11 +127,11 @@
<form class="form-horizontal" <form class="form-horizontal"
id="linechart_general_form"> id="linechart_general_form">
<div class="control-group"> <div class="form-group">
<label for="meter" class="control-label">{% trans "Metric" %}:&nbsp;</label> <label for="meter" class="control-label col-sm-2">{% trans "Metric" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<select data-line-chart-command="select_box_change" <select data-line-chart-command="select_box_change"
name="meter" id="meter" class="span2 example"> name="meter" id="meter" class="col-sm-w form-control example">
{% for meter in meters %} {% for meter in meters %}
<option value="{{ meter }}" data-unit="{{ meter }}"> <option value="{{ meter }}" data-unit="{{ meter }}">
{{ meter }} {{ meter }}
@ -149,11 +149,11 @@
Example: Example:
<form class="form-horizontal" <form class="form-horizontal"
id="linechart_general_form"> id="linechart_general_form">
<div class="control-group" id="date_from"> <div class="form-group" id="date_from">
<label for="date_from" class="control-label">{% trans "From" %}:&nbsp;</label> <label for="date_from" class="control-label col-sm-2">{% trans "From" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<input data-line-chart-command="date_picker_change" <input data-line-chart-command="date_picker_change"
type="text" id="date_from" name="date_from" class="span2 example"/> type="text" id="date_from" name="date_from" class="form-control example"/>
</div> </div>
</div> </div>
</form> </form>

View File

@ -122,8 +122,8 @@ horizon.firewalls = {
} }
updateForm(); updateForm();
}); });
if ($("#ruleListId > div.control-group.error").length > 0) { if ($("#ruleListId > div.form-group.error").length > 0) {
var errortext = $("#ruleListId > div.control-group.error").find("span.help-inline").text(); var errortext = $("#ruleListId > div.form-group.error").find("span.help-block").text();
$("#selected_rule_h4").before($('<div class="dynamic-error">').html(errortext)); $("#selected_rule_h4").before($('<div class="dynamic-error">').html(errortext));
} }
$(".rulelist").sortable({ $(".rulelist").sortable({

View File

@ -197,10 +197,10 @@ horizon.addInitFunction(function () {
data = $input.data(slug + "-" + val); data = $input.data(slug + "-" + val);
if (typeof data === "undefined" || !visible) { if (typeof data === "undefined" || !visible) {
$input.closest('.form-field').hide(); $input.closest('.form-group').hide();
} else { } else {
$('label[for=' + $input.attr('id') + ']').html(data); $('label[for=' + $input.attr('id') + ']').html(data);
$input.closest('.form-field').show(); $input.closest('.form-group').show();
} }
}); });
}); });
@ -220,9 +220,9 @@ horizon.addInitFunction(function () {
$this.find("option").each(function () { $this.find("option").each(function () {
if (this.value !== base_type) { if (this.value !== base_type) {
$("#id_" + this.value).closest(".control-group").hide(); $("#id_" + this.value).closest(".form-group").hide();
} else { } else {
$("#id_" + this.value).closest(".control-group").show(); $("#id_" + this.value).closest(".form-group").show();
} }
}); });
} }
@ -240,19 +240,19 @@ horizon.addInitFunction(function () {
// Apply standard handler for everything but checkboxes. // Apply standard handler for everything but checkboxes.
$(document).tooltip({ $(document).tooltip({
selector: "div.form-field .help-icon", selector: "div.form-group .help-icon",
placement: function (tip, input) { placement: function (tip, input) {
// Position to the right unless this is a "split" for in which case put // Position to the right unless this is a "split" for in which case put
// the tooltip below so it doesn't block the next field. // the tooltip below so it doesn't block the next field.
return $(input).closest("form[class*='split']").length ? "bottom" : 'right'; return $(input).closest("form[class*='split']").length ? "bottom" : 'right';
}, },
title: function () { title: function () {
return $(this).closest('div.form-field').children('.help-block').text(); return $(this).closest('div.form-group').children('.help-block').text();
} }
}); });
// Hide the tooltip upon interaction with the field for select boxes. // Hide the tooltip upon interaction with the field for select boxes.
// We use mousedown and keydown since those "open" the select dropdown. // We use mousedown and keydown since those "open" the select dropdown.
$(document).on('mousedown keydown', '.form-field select', function (evt) { $(document).on('mousedown keydown', '.form-group select', function (evt) {
$(this).tooltip('hide'); $(this).tooltip('hide');
}); });
// Hide the tooltip after escape button pressed // Hide the tooltip after escape button pressed
@ -263,5 +263,5 @@ horizon.addInitFunction(function () {
}); });
// Hide the help text for js-capable browsers // Hide the help text for js-capable browsers
$('span.help-block').hide(); $('p.help-block').hide();
}); });

View File

@ -53,7 +53,7 @@ horizon.formset_table = (function () {
// if there are extra empty rows, add the button for new rows // if there are extra empty rows, add the button for new rows
if (add_label) { if (add_label) {
var button = $('<a href="#" class="btn btn-small pull-right">' + var button = $('<a href="#" class="btn btn-primary btn-sm pull-right">' +
add_label + '</a>'); add_label + '</a>');
table.find('tfoot td').append(button); table.find('tfoot td').append(button);
button.click(function () { button.click(function () {

View File

@ -126,8 +126,8 @@ horizon.instances = {
} }
updateForm(); updateForm();
}); });
if ($("#networkListId > div.control-group.error").length > 0) { if ($("#networkListId > div.form-group.error").length > 0) {
var errortext = $("#networkListId > div.control-group.error").find("span.help-inline").text(); var errortext = $("#networkListId > div.form-group.error").find("span.help-block").text();
$("#selected_network_label").before($('<div class="dynamic-error">').html(errortext)); $("#selected_network_label").before($('<div class="dynamic-error">').html(errortext));
} }
$(".networklist").sortable({ $(".networklist").sortable({
@ -164,29 +164,29 @@ horizon.addInitFunction(function () {
var $this = $(field), var $this = $(field),
base_type = $this.val(); base_type = $this.val();
$this.closest(".control-group").nextAll().hide(); $this.closest(".form-group").nextAll().hide();
switch(base_type) { switch(base_type) {
case "image_id": case "image_id":
$("#id_image_id").closest(".control-group").show(); $("#id_image_id").closest(".form-group").show();
break; break;
case "instance_snapshot_id": case "instance_snapshot_id":
$("#id_instance_snapshot_id").closest(".control-group").show(); $("#id_instance_snapshot_id").closest(".form-group").show();
break; break;
case "volume_id": case "volume_id":
$("#id_volume_id, #id_delete_on_terminate").closest(".control-group").show(); $("#id_volume_id, #id_delete_on_terminate").closest(".form-group").show();
break; break;
case "volume_image_id": case "volume_image_id":
$("#id_image_id, #id_volume_size, #id_device_name, #id_delete_on_terminate") $("#id_image_id, #id_volume_size, #id_device_name, #id_delete_on_terminate")
.closest(".control-group").show(); .closest(".form-group").show();
break; break;
case "volume_snapshot_id": case "volume_snapshot_id":
$("#id_volume_snapshot_id, #id_device_name, #id_delete_on_terminate") $("#id_volume_snapshot_id, #id_device_name, #id_delete_on_terminate")
.closest(".control-group").show(); .closest(".form-group").show();
break; break;
} }
} }

View File

@ -21,7 +21,7 @@ horizon.alert = function (type, message, extra_tags) {
}; };
horizon.clearErrorMessages = function() { horizon.clearErrorMessages = function() {
$('#main_content .messages .alert.alert-error').remove(); $('#main_content .messages .alert.alert-danger').remove();
}; };
horizon.clearSuccessMessages = function() { horizon.clearSuccessMessages = function() {

View File

@ -54,7 +54,7 @@ horizon.modals.modal_spinner = function (text) {
horizon.modals.spinner = $(template.render({text: text})); horizon.modals.spinner = $(template.render({text: text}));
horizon.modals.spinner.appendTo("#modal_wrapper"); horizon.modals.spinner.appendTo("#modal_wrapper");
horizon.modals.spinner.modal({backdrop: 'static'}); horizon.modals.spinner.modal({backdrop: 'static'});
horizon.modals.spinner.spin(horizon.conf.spinner_options.modal); horizon.modals.spinner.find(".modal-body").spin(horizon.conf.spinner_options.modal);
}; };
horizon.modals.init_wizard = function () { horizon.modals.init_wizard = function () {
@ -69,11 +69,11 @@ horizon.modals.init_wizard = function () {
} }
// Clear old errors. // Clear old errors.
$form.find('td.actions div.alert-error').remove(); $form.find('td.actions div.alert-danger').remove();
$form.find('.control-group.error').each(function () { $form.find('.form-group.error').each(function () {
var $group = $(this); var $group = $(this);
$group.removeClass('error'); $group.removeClass('error');
$group.find('span.help-inline.error').remove(); $group.find('span.help-block.error').remove();
}); });
// Send the data for validation. // Send the data for validation.
@ -103,7 +103,7 @@ horizon.modals.init_wizard = function () {
// Add global errors. // Add global errors.
$.each(errors, function (index, error) { $.each(errors, function (index, error) {
$fieldset.find('td.actions').prepend( $fieldset.find('td.actions').prepend(
'<div class="alert alert-message alert-error">' + '<div class="alert alert-message alert-danger">' +
error + '</div>'); error + '</div>');
}); });
$fieldset.find('input, select, textarea').first().focus(); $fieldset.find('input, select, textarea').first().focus();
@ -111,10 +111,10 @@ horizon.modals.init_wizard = function () {
} }
// Add field errors. // Add field errors.
$field = $fieldset.find('[name="' + field + '"]'); $field = $fieldset.find('[name="' + field + '"]');
$field.closest('.control-group').addClass('error'); $field.closest('.form-group').addClass('error');
$.each(errors, function (index, error) { $.each(errors, function (index, error) {
$field.before( $field.before(
'<span class="help-inline error">' + '<span class="help-block error">' +
error + '</span>'); error + '</span>');
}); });
// Focus the first invalid field. // Focus the first invalid field.
@ -235,14 +235,14 @@ horizon.addInitFunction(function() {
location.href = jqXHR.getResponseHeader("X-Horizon-Location"); location.href = jqXHR.getResponseHeader("X-Horizon-Location");
} else { } else {
$form.closest(".modal").modal("hide"); $form.closest(".modal").modal("hide");
horizon.alert("error", gettext("There was an error submitting the form. Please try again.")); horizon.alert("danger", gettext("There was an error submitting the form. Please try again."));
} }
} }
}); });
}); });
// Position modal so it's in-view even when scrolled down. // Position modal so it's in-view even when scrolled down.
$(document).on('show', '.modal', function (evt) { $(document).on('show.bs.modal', '.modal', function (evt) {
// Filter out indirect triggers of "show" from (for example) tabs. // Filter out indirect triggers of "show" from (for example) tabs.
if ($(evt.target).hasClass("modal")) { if ($(evt.target).hasClass("modal")) {
var scrollShift = $('body').scrollTop() || $('html').scrollTop(), var scrollShift = $('body').scrollTop() || $('html').scrollTop(),
@ -297,7 +297,7 @@ horizon.addInitFunction(function() {
else { else {
if (!horizon.ajax.get_messages(jqXHR)) { if (!horizon.ajax.get_messages(jqXHR)) {
// Generic error handler. Really generic. // Generic error handler. Really generic.
horizon.alert("error", gettext("An error occurred. Please try again later.")); horizon.alert("danger", gettext("An error occurred. Please try again later."));
} }
} }
}, },
@ -321,7 +321,7 @@ horizon.addInitFunction(function() {
/* Manage the modal "stack" */ /* Manage the modal "stack" */
// When a new modal is opened, hide any that are already in the stack. // When a new modal is opened, hide any that are already in the stack.
$(document).on("show", ".modal", function () { $(document).on("show.bs.modal", ".modal", function () {
var container = $("#modal_wrapper"), var container = $("#modal_wrapper"),
modal_stack = container.find(".modal"), modal_stack = container.find(".modal"),
$this = $(this); $this = $(this);
@ -334,7 +334,7 @@ horizon.addInitFunction(function() {
// Note: the modal should only be removed if it is the "top" of the stack of // Note: the modal should only be removed if it is the "top" of the stack of
// modals, e.g. it's the one currently being interacted with and isn't just // modals, e.g. it's the one currently being interacted with and isn't just
// temporarily being hidden. // temporarily being hidden.
$(document).on('hidden', '.modal', function () { $(document).on('hidden.bs.modal', '.modal', function () {
var $this = $(this), var $this = $(this),
modal_stack = $("#modal_wrapper .modal"); modal_stack = $("#modal_wrapper .modal");
if ($this[0] === modal_stack.last()[0] || $this.hasClass("loading")) { if ($this[0] === modal_stack.last()[0] || $this.hasClass("loading")) {

View File

@ -428,7 +428,7 @@ horizon.datatables.set_table_query_filter = function (parent) {
return false; return false;
} }
}); });
input.next('button.btn-search').on('click keypress', function (evt) { input.next('button.btn span.glyphicon-search').on('click keypress', function (evt) {
return false; return false;
}); });

View File

@ -15,7 +15,7 @@ horizon.user = {
check_passwords_match: function() { check_passwords_match: function() {
var row = $("label[for='id_confirm_password']"); var row = $("label[for='id_confirm_password']");
var error_id = "id_confirm_password_error"; var error_id = "id_confirm_password_error";
var msg = "<span id='" + error_id + "' class='help-inline'>" + gettext("Passwords do not match.") + "</span>"; var msg = "<span id='" + error_id + "' class='help-block'>" + gettext("Passwords do not match.") + "</span>";
var password = $("#id_password").val(); var password = $("#id_password").val();
var confirm_password = $("#id_confirm_password").val(); var confirm_password = $("#id_confirm_password").val();

View File

@ -4870,7 +4870,7 @@ function $TemplateCacheProvider() {
* should be done in a linking function rather than in a compile function. * should be done in a linking function rather than in a compile function.
* </div> * </div>
* *
* <div class="alert alert-error"> * <div class="alert alert-danger">
* **Note:** The `transclude` function that is passed to the compile function is deperecated, as it * **Note:** The `transclude` function that is passed to the compile function is deperecated, as it
* e.g. does not know about the right outer scope. Please use the transclude function that is passed * e.g. does not know about the right outer scope. Please use the transclude function that is passed
* to the link function instead. * to the link function instead.
@ -18166,7 +18166,7 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
* The `ngInit` directive allows you to evaluate an expression in the * The `ngInit` directive allows you to evaluate an expression in the
* current scope. * current scope.
* *
* <div class="alert alert-error"> * <div class="alert alert-danger">
* The only appropriate use of `ngInit` for aliasing special properties of * The only appropriate use of `ngInit` for aliasing special properties of
* {@link api/ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you * {@link api/ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you
* should use {@link guide/controller controllers} rather than `ngInit` * should use {@link guide/controller controllers} rather than `ngInit`

View File

@ -13,13 +13,13 @@ horizon.addInitFunction(function () {
test("Multiple Alerts", function () { test("Multiple Alerts", function () {
message = horizon.alert("error", "An error!"); message = horizon.alert("error", "An error!");
ok(message.hasClass("alert-error"), 'Verify the first message has the "alert-error" class.'); ok(message.hasClass("alert-danger"), 'Verify the first message has the "alert-danger" class.');
message2 = horizon.alert("success", "Another message"); message2 = horizon.alert("success", "Another message");
equal($('#main_content .messages .alert').length, 2, "Verify two messages have been added to the DOM."); equal($('#main_content .messages .alert').length, 2, "Verify two messages have been added to the DOM.");
horizon.clearErrorMessages(); horizon.clearErrorMessages();
equal($('#main_content .messages .alert-error').length, 0, "Verify our error message was removed."); equal($('#main_content .messages .alert-danger').length, 0, "Verify our error message was removed.");
equal($('#main_content .messages .alert').length, 1, "Verify one message remains."); equal($('#main_content .messages .alert').length, 1, "Verify one message remains.");
horizon.clearSuccessMessages(); horizon.clearSuccessMessages();
equal($('#main_content .messages .alert-success').length, 0, "Verify our success message was removed."); equal($('#main_content .messages .alert-success').length, 0, "Verify our success message was removed.");

View File

@ -36,7 +36,7 @@ from horizon.utils import html
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
# For Bootstrap integration; can be overridden in settings. # For Bootstrap integration; can be overridden in settings.
ACTION_CSS_CLASSES = ("btn", "btn-small") ACTION_CSS_CLASSES = ("btn", "btn-default", "btn-sm")
STRING_SEPARATOR = "__" STRING_SEPARATOR = "__"
@ -147,7 +147,7 @@ class BaseAction(html.HTMLElement):
def get_default_classes(self): def get_default_classes(self):
"""Returns a list of the default classes for the action. Defaults to """Returns a list of the default classes for the action. Defaults to
``["btn", "btn-small"]``. ``["btn", "btn-default", "btn-sm"]``.
""" """
return getattr(settings, "ACTION_CSS_CLASSES", ACTION_CSS_CLASSES) return getattr(settings, "ACTION_CSS_CLASSES", ACTION_CSS_CLASSES)
@ -263,6 +263,7 @@ class Action(BaseAction):
self.verbose_name_plural = kwargs.get('verbose_name_plural', self.verbose_name_plural = kwargs.get('verbose_name_plural',
"%ss" % self.verbose_name) "%ss" % self.verbose_name)
self.allowed_data_types = kwargs.get('allowed_data_types', []) self.allowed_data_types = kwargs.get('allowed_data_types', [])
self.icon = kwargs.get('icon', None)
if attrs: if attrs:
self.attrs.update(attrs) self.attrs.update(attrs)
@ -347,6 +348,7 @@ class LinkAction(BaseAction):
self.verbose_name = kwargs.get('verbose_name', self.name.title()) self.verbose_name = kwargs.get('verbose_name', self.name.title())
self.url = kwargs.get('url', None) self.url = kwargs.get('url', None)
self.allowed_data_types = kwargs.get('allowed_data_types', []) self.allowed_data_types = kwargs.get('allowed_data_types', [])
self.icon = kwargs.get('icon', None)
if not kwargs.get('verbose_name', None): if not kwargs.get('verbose_name', None):
raise NotImplementedError('A LinkAction object must have a ' raise NotImplementedError('A LinkAction object must have a '
@ -443,6 +445,7 @@ class FilterAction(BaseAction):
self.filter_type = kwargs.get('filter_type', "query") self.filter_type = kwargs.get('filter_type', "query")
self.needs_preloading = kwargs.get('needs_preloading', False) self.needs_preloading = kwargs.get('needs_preloading', False)
self.param_name = kwargs.get('param_name', 'q') self.param_name = kwargs.get('param_name', 'q')
self.icon = "search"
def get_param_name(self): def get_param_name(self):
"""Returns the full query parameter name for this action. """Returns the full query parameter name for this action.
@ -452,11 +455,6 @@ class FilterAction(BaseAction):
""" """
return "__".join([self.table.name, self.name, self.param_name]) return "__".join([self.table.name, self.name, self.param_name])
def get_default_classes(self):
classes = super(FilterAction, self).get_default_classes()
classes += ("btn-search",)
return classes
def assign_type_string(self, table, data, type_string): def assign_type_string(self, table, data, type_string):
for datum in data: for datum in data:
setattr(datum, table._meta.data_type_name, type_string) setattr(datum, table._meta.data_type_name, type_string)
@ -722,6 +720,7 @@ class DeleteAction(BatchAction):
self.name = kwargs.get('name', self.name) self.name = kwargs.get('name', self.name)
self.action_present = kwargs.get('action_present', _("Delete")) self.action_present = kwargs.get('action_present', _("Delete"))
self.action_past = kwargs.get('action_past', _("Deleted")) self.action_past = kwargs.get('action_past', _("Deleted"))
self.icon = "remove"
def action(self, request, obj_id): def action(self, request, obj_id):
return self.delete(request, obj_id) return self.delete(request, obj_id)
@ -731,7 +730,7 @@ class DeleteAction(BatchAction):
def get_default_classes(self): def get_default_classes(self):
classes = super(DeleteAction, self).get_default_classes() classes = super(DeleteAction, self).get_default_classes()
classes += ("btn-danger", "btn-delete") classes += ("btn-danger",)
return classes return classes

View File

@ -36,7 +36,7 @@ class FormsetCell(horizon_tables.Cell):
else: else:
if self.field.errors: if self.field.errors:
self.attrs['class'] = (self.attrs.get('class', '') + self.attrs['class'] = (self.attrs.get('class', '') +
' error control-group') ' error form-group')
self.attrs['title'] = ' '.join( self.attrs['title'] = ' '.join(
unicode(error) for error in self.field.errors) unicode(error) for error in self.field.errors)

View File

@ -11,16 +11,16 @@
{% block modal-body %} {% block modal-body %}
<fieldset> <fieldset>
{% if request.user.is_authenticated and 'next' in request.GET %} {% if request.user.is_authenticated and 'next' in request.GET %}
<div class="control-group clearfix error"> <div class="form-group clearfix error">
<span class="help-inline"><p>{% trans "You do not have permission to access the resource:" %}</p> <span class="help-block"><p>{% trans "You do not have permission to access the resource:" %}</p>
<p><b>{{ request.GET.next }}</b></p> <p><b>{{ request.GET.next }}</b></p>
<p>{% url 'horizon:user_home' as home_url %}{% blocktrans %}Login as different user or go back to <a href="{{ home_url }}"> home page</a>{% endblocktrans %}</p> <p>{% url 'horizon:user_home' as home_url %}{% blocktrans %}Login as different user or go back to <a href="{{ home_url }}"> home page</a>{% endblocktrans %}</p>
</span> </span>
</div> </div>
{% endif %} {% endif %}
{% if request.COOKIES.logout_reason %} {% if request.COOKIES.logout_reason %}
<div class="control-group clearfix error"> <div class="form-group clearfix error">
<span class="help-inline"><p>{{ request.COOKIES.logout_reason }}</p></span> <span class="help-block"><p>{{ request.COOKIES.logout_reason }}</p></span>
</div> </div>
{% endif %} {% endif %}
{% if next %}<input type="hidden" name="{{ redirect_field_name }}" value="{{ next }}" />{% endif %} {% if next %}<input type="hidden" name="{{ redirect_field_name }}" value="{{ next }}" />{% endif %}

View File

@ -2,25 +2,25 @@
<div class="messages"> <div class="messages">
{% for message in messages %} {% for message in messages %}
{% if "info" in message.tags %} {% if "info" in message.tags %}
<div class="alert alert-block alert-info fade in"> <div class="alert alert-info alert-dismissable fade in">
<a class="close" data-dismiss="alert" href="#">&times;</a> <a class="close" data-dismiss="alert" href="#">&times;</a>
<p><strong>{% trans "Info: " %}</strong>{{ message }}</p> <p><strong>{% trans "Info: " %}</strong>{{ message }}</p>
</div> </div>
{% endif %} {% endif %}
{% if "warning" in message.tags %} {% if "warning" in message.tags %}
<div class="alert alert-block alert-warning fade in"> <div class="alert alert-warning alert-dismissable fade in">
<a class="close" data-dismiss="alert" href="#">&times;</a> <a class="close" data-dismiss="alert" href="#">&times;</a>
<p><strong>{% trans "Warning: " %}</strong>{{ message }}</p> <p><strong>{% trans "Warning: " %}</strong>{{ message }}</p>
</div> </div>
{% endif %} {% endif %}
{% if "success" in message.tags %} {% if "success" in message.tags %}
<div class="alert alert-block alert-success fade in"> <div class="alert alert-success alert-dismissable fade in">
<a class="close" data-dismiss="alert" href="#">&times;</a> <a class="close" data-dismiss="alert" href="#">&times;</a>
<p><strong>{% trans "Success: " %}</strong>{{ message }}</p> <p><strong>{% trans "Success: " %}</strong>{{ message }}</p>
</div> </div>
{% endif %} {% endif %}
{% if "error" in message.tags %} {% if "error" in message.tags %}
<div class="alert alert-block alert-error fade in"> <div class="alert alert-danger alert-dismissable fade in">
<a class="close" data-dismiss="alert" href="#">&times;</a> <a class="close" data-dismiss="alert" href="#">&times;</a>
<p><strong>{% trans "Error: " %}</strong>{{ message }}</p> <p><strong>{% trans "Error: " %}</strong>{{ message }}</p>
</div> </div>

View File

@ -4,7 +4,7 @@
{% block id %}alert_message_template{% endblock %} {% block id %}alert_message_template{% endblock %}
{% block template %}{% spaceless %}{% jstemplate %} {% block template %}{% spaceless %}{% jstemplate %}
<div class="alert alert-block fade in alert-[[type]]"> <div class="alert alert-dismissable fade in alert-[[type]]">
<a class="close" data-dismiss="alert" href="#">&times;</a> <a class="close" data-dismiss="alert" href="#">&times;</a>
<p> <p>
<strong>[[type_display]]</strong> <strong>[[type_display]]</strong>

View File

@ -4,7 +4,13 @@
{% block id %}spinner-modal{% endblock %} {% block id %}spinner-modal{% endblock %}
{% block template %}{% spaceless %}{% jstemplate %} {% block template %}{% spaceless %}{% jstemplate %}
<div class="modal loading hide"> <div class="modal loading">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<p>[[text]]&hellip;</p> <p>[[text]]&hellip;</p>
</div> </div>
</div>
</div>
</div>
{% endjstemplate %}{% endspaceless %}{% endblock %} {% endjstemplate %}{% endspaceless %}{% endblock %}

View File

@ -4,7 +4,9 @@
{% block id %}modal_template{% endblock %} {% block id %}modal_template{% endblock %}
{% block template %}{% spaceless %}{% jstemplate %} {% block template %}{% spaceless %}{% jstemplate %}
<div class="modal hide"> <div class="modal">
<div class="modal-dialog">
<div class="modal-content">
<div class='modal-header'> <div class='modal-header'>
<a class='close' data-dismiss='modal'>&times;</a> <a class='close' data-dismiss='modal'>&times;</a>
<h3>[[title]]</h3> <h3>[[title]]</h3>
@ -14,7 +16,9 @@
</div> </div>
<div class='modal-footer'> <div class='modal-footer'>
<a href='#' class='btn btn-primary'>[[confirm]]</a> <a href='#' class='btn btn-primary'>[[confirm]]</a>
<a href='#' class='btn cancel' data-dismiss='modal'>[[cancel]]</a> <a href='#' class='btn btn-default cancel' data-dismiss='modal'>[[cancel]]</a>
</div>
</div>
</div> </div>
</div> </div>
{% endjstemplate %}{% endspaceless %}{% endblock %} {% endjstemplate %}{% endspaceless %}{% endblock %}

View File

@ -0,0 +1,59 @@
{% load bootstrap_form_field %}
<div class="form-group{% if field.errors %} has-error{% endif %} {{ field.css_classes }}">
{% if field|is_checkbox %}
<div class="{{ classes.single_value }}">
<div class="checkbox">
{% if field.auto_id %}
<label {% if field.field.required and form.required_css_class %}class="{{ form.required_css_class }}"{% endif %}>
{{ field }} <span>{{ field.label }}</span>
</label>
{% if field.help_text %}
<span class="help-icon" data-toggle="tooltip" data-placement="top" title="{{ field.help_text|safe }}"><span class="glyphicon glyphicon-question-sign"></span></span>
{% endif %}
{% endif %}
{% for error in field.errors %}
<span class="help-block alert alert-danger {{ form.error_css_class }}">{{ error }}</span>
{% endfor %}
</div>
</div>
{% elif field|is_radio %}
{% if field.auto_id %}
<label class="control-label {{ classes.label }} {% if field.field.required %}{{ form.required_css_class }}{% endif %}">{{ field.label }}</label>
{% if field.help_text %}
<span class="help-icon" data-toggle="tooltip" data-placement="top" title="{{ field.help_text|safe }}"><span class="glyphicon glyphicon-question-sign"></span></span>
{% endif %}
{% endif %}
<div class="{{ classes.value }}">
{% for choice in field %}
<div class="radio">
<label>
{{ choice.tag }}
{{ choice.choice_label }}
</label>
</div>
{% endfor %}
{% for error in field.errors %}
<span class="help-block alert alert-danger {{ form.error_css_class }}">{{ error }}</span>
{% endfor %}
</div>
{% else %}
{% if field.auto_id %}
<label class="control-label {{ classes.label }} {% if field.field.required %}{{ form.required_css_class }}{% endif %}" for="{{ field.auto_id }}">{{ field.label }}</label>
{% if field.help_text %}
<span class="help-icon" data-toggle="tooltip" data-placement="top" title="{{ field.help_text|safe }}"><span class="glyphicon glyphicon-question-sign"></span></span>
{% endif %}
{% endif %}
<div class="{{ classes.value }} {% if field|is_multiple_checkbox %}multiple-checkbox{% endif %}">
{{ field }}
{% for error in field.errors %}
<span class="help-block alert alert-danger {{ form.error_css_class }}">{{ error }}</span>
{% endfor %}
</div>
{% endif %}
</div>

View File

@ -13,7 +13,7 @@
name="action" name="action"
value="" type="submit"> value="" type="submit">
</button> </button>
<button class="inline-edit-cancel btn secondary cancel"></button> <button class="inline-edit-cancel btn btn-default secondary cancel"></button>
</div> </div>
<div class="inline-edit-status inline-edit-mod"></div> <div class="inline-edit-status inline-edit-mod"></div>
</div> </div>
@ -26,7 +26,7 @@
{%if cell.wrap_list %}<ul>{% endif %}{{ cell.value }}{%if cell.wrap_list %}</ul>{% endif %} {%if cell.wrap_list %}<ul>{% endif %}{{ cell.value }}{%if cell.wrap_list %}</ul>{% endif %}
</div> </div>
<div class="table_cell_action"> <div class="table_cell_action">
<button class="ajax-inline-edit btn-edit"></button> <button class="ajax-inline-edit"><span class="glyphicon glyphicon-pencil"></span></button>
</div> </div>
<div class="inline-edit-status"></div> <div class="inline-edit-status"></div>
</div> </div>

View File

@ -6,7 +6,7 @@
{% for action in row_actions %} {% for action in row_actions %}
{% if forloop.first %} {% if forloop.first %}
{% include "horizon/common/_data_table_row_action.html" %} {% include "horizon/common/_data_table_row_action.html" %}
<a class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#"> <a class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" href="#">
{% trans "More" %} {% trans "More" %}
<span class="caret"></span> <span class="caret"></span>
</a> </a>

View File

@ -1,5 +1,11 @@
{% if action.method != "GET" %} {% if action.method != "GET" %}
<button {{ action.attr_string|safe }} name="action" value="{{ action.get_param_name }}" type="submit">{% if action.handles_multiple %}{{ action.verbose_name_plural }}{% else %}{{ action.verbose_name }}{% endif %}</button> <button {{ action.attr_string|safe }} name="action" value="{{ action.get_param_name }}" type="submit">
{% if action.icon != None %}<span class="glyphicon glyphicon-{{ action.icon }}"></span> {% endif %}
{% if action.handles_multiple %}{{ action.verbose_name_plural }}{% else %}{{ action.verbose_name }}{% endif %}
</button>
{% else %} {% else %}
<a href='{{ action.get_link_url }}' title='{{ action.verbose_name }}' {{ action.attr_string|safe }}>{{ action.verbose_name }}</a> <a href='{{ action.get_link_url }}' title='{{ action.verbose_name }}' {{ action.attr_string|safe }}>
{% if action.icon != None %}<span class="glyphicon glyphicon-{{ action.icon }}"></span> {% endif %}
{{ action.verbose_name }}
</a>
{% endif %} {% endif %}

View File

@ -4,22 +4,25 @@
{% if filter.filter_type == 'fixed' %} {% if filter.filter_type == 'fixed' %}
<div class="table_filter btn-group" data-toggle="buttons-radio"> <div class="table_filter btn-group" data-toggle="buttons-radio">
{% for button in filter.fixed_buttons %} {% for button in filter.fixed_buttons %}
<button name="{{ filter.get_param_name }}" type="submit" value="{{ button.value }}" class="btn btn-small{% ifequal button.value filter.filter_string %} active{% endifequal %}">{% if button.icon %}<i class="{{ button.icon }}"></i> {% endif %}{{ button.text }}{% if button.count >= 0 %} ({{ button.count }}){% endif %}</button> <button name="{{ filter.get_param_name }}" type="submit" value="{{ button.value }}" class="btn btn-default btn-sm{% ifequal button.value filter.filter_string %} active{% endifequal %}">{% if button.icon %}<i class="{{ button.icon }}"></i> {% endif %}{{ button.text }}{% if button.count >= 0 %} ({{ button.count }}){% endif %}</button>
{% endfor %} {% endfor %}
</div> </div>
{% elif filter.filter_type == 'query' %} {% elif filter.filter_type == 'query' %}
<div class="table_search client"> <div class="table_search client">
<input class="span3 example" value="{{ filter.filter_string|default:'' }}" type="text" name="{{ filter.get_param_name }}" /> <div class="form-group has-feedback">
<input class="form-control" value="{{ filter.filter_string|default:'' }}" type="text" name="{{ filter.get_param_name }}" />
<span class="glyphicon glyphicon-search form-control-feedback"></span>
</div>
<button type="submit" {{ filter.attr_string|safe }}>{% trans "Filter" %}</button> <button type="submit" {{ filter.attr_string|safe }}>{% trans "Filter" %}</button>
</div> </div>
{% elif filter.filter_type == 'server' %} {% elif filter.filter_type == 'server' %}
<div class="table_search"> <div class="table_search">
<select name="{{ filter.get_param_name }}_field" class="span2"> <select name="{{ filter.get_param_name }}_field" class="form-control">
{% for choice in filter.filter_choices %} {% for choice in filter.filter_choices %}
<option value="{{ choice.0 }}" {% if choice.0 == filter.filter_field %} selected{% endif %}>{{ choice.1 }}</option> <option value="{{ choice.0 }}" {% if choice.0 == filter.filter_field %} selected{% endif %}>{{ choice.1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
<input class="span3 example" value="{{ filter.filter_string|default:'' }}" type="text" name="{{ filter.get_param_name }}" /> <input class="form-control" value="{{ filter.filter_string|default:'' }}" type="text" name="{{ filter.get_param_name }}" />
<button type="submit" {{ filter.attr_string|safe }}>{% trans "Filter" %}</button> <button type="submit" {{ filter.attr_string|safe }}>{% trans "Filter" %}</button>
</div> </div>
{% endif %} {% endif %}

View File

@ -1,3 +1,5 @@
{% load bootstrap_form_field %}
{% for hidden in form.hidden_fields %} {% for hidden in form.hidden_fields %}
{{ hidden }} {{ hidden }}
{% endfor %} {% endfor %}
@ -7,19 +9,19 @@
</div> </div>
{% endif %} {% endif %}
{% if form.non_field_errors %} {% if form.non_field_errors %}
<div class="alert alert-message alert-error"> <div class="alert alert-message alert-danger">
{{ form.non_field_errors }} {{ form.non_field_errors }}
</div> </div>
{% endif %} {% endif %}
{% for field in form.visible_fields %} {% for field in form.visible_fields %}
<div class="control-group form-field clearfix{% if field.errors %} error{% endif %} {{ field.css_classes }}"> <!-- <div class="form-group form-field clearfix{% if field.errors %} has-error{% endif %} {{ field.css_classes }}">
{{ field.label_tag }} {{ field.label_tag }}
{% if field.help_text %} {% if field.help_text %}
<span class="help-icon"><i class="icon-question-sign"></i></span> <span class="help-icon"><i class="icon-question-sign"></i></span>
{% endif %} {% endif %}
{% if field.errors %} {% if field.errors %}
{% for error in field.errors %} {% for error in field.errors %}
<span class="help-inline">{{ error }}</span> <p class="help-block">{{ error }}</p>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% comment %} {% comment %}
@ -28,8 +30,8 @@
Note: the spaces are necessary here. Note: the spaces are necessary here.
{% endcomment %} {% endcomment %}
<span class="help-block">{% filter force_escape %} {{ field.help_text }} {% endfilter %} </span> <span class="help-block">{% filter force_escape %} {{ field.help_text }} {% endfilter %} </span>
<div class="input">
{{ field }} {{ field }}
</div> </div>
</div> -->
{{ field|bootstrap_form_field }}
{% endfor %} {% endfor %}

View File

@ -19,7 +19,7 @@
{% with table.get_formset as formset %} {% with table.get_formset as formset %}
{{ formset.management_form }} {{ formset.management_form }}
{% if formset.non_field_errors %} {% if formset.non_field_errors %}
<div class="alert alert-error"> <div class="alert alert-danger">
{{ formset.non_field_errors }} {{ formset.non_field_errors }}
</div> </div>
{% endif %} {% endif %}

View File

@ -10,11 +10,11 @@
{% for field in row.form.hidden_fields %} {% for field in row.form.hidden_fields %}
{{ field }} {{ field }}
{% for error in field.errors %} {% for error in field.errors %}
<span class="help-inline">{{ field.name }}: {{ error }}</span> <span class="help-block">{{ field.name }}: {{ error }}</span>
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}
{% if row.form.non_field_errors %} {% if row.form.non_field_errors %}
<div class="alert alert-error"> <div class="alert alert-danger">
{{ row.form.non_field_errors }} {{ row.form.non_field_errors }}
</div> </div>
{% endif %} {% endif %}

View File

@ -1,4 +1,6 @@
<div id="{% block modal_id %}{% endblock %}" class="{% block modal_class %}{% if hide %}modal hide{% else %}static_page{% endif %}{% endblock %}"> <div id="{% block modal_id %}{% endblock %}" class="{% block modal_class %}{% if hide %}modal{% else %}static_page{% endif %}{% endblock %}">
<div class="{% if hide %}modal-dialog{% endif %}">
<div class="{% if hide %}modal-content{% endif %}">
<div class="modal-header"> <div class="modal-header">
{% if hide %}<a href="#" class="close" data-dismiss="modal">&times;</a>{% endif %} {% if hide %}<a href="#" class="close" data-dismiss="modal">&times;</a>{% endif %}
<h3>{% block modal-header %}{% endblock %}</h3> <h3>{% block modal-header %}{% endblock %}</h3>
@ -8,3 +10,5 @@
</div> </div>
<div class="modal-footer">{% block modal-footer %}{% endblock %}</div> <div class="modal-footer">{% block modal-footer %}{% endblock %}</div>
</div> </div>
</div>
</div>

View File

@ -1,4 +1,6 @@
<div id="{% block modal_id %}{% endblock %}" class="{% block modal_class %}{% if hide %}modal hide{% else %}static_page{% endif %}{% endblock %}"> <div id="{% block modal_id %}{% endblock %}" class="{% block modal_class %}{% if hide %}modal{% else %}static_page{% endif %}{% endblock %}">
<div class="{% if hide %}modal-dialog{% endif %}">
<div class="{% if hide %}modal-content{% endif %}">
<div class="modal-header"> <div class="modal-header">
{% if hide %}<a href="#" class="close" data-dismiss="modal">&times;</a>{% endif %} {% if hide %}<a href="#" class="close" data-dismiss="modal">&times;</a>{% endif %}
<h3>{% block modal-header %}{% endblock %}</h3> <h3>{% block modal-header %}{% endblock %}</h3>
@ -26,6 +28,8 @@
</div> </div>
<div class="modal-footer">{% block modal-footer %}{% endblock %}</div> <div class="modal-footer">{% block modal-footer %}{% endblock %}</div>
</form> </form>
</div>
</div>
</div>
{% block modal-js %} {% block modal-js %}
{% endblock %} {% endblock %}
</div>

View File

@ -3,15 +3,18 @@
<h3 class="quota-heading">{% trans "Usage Summary" %}</h3> <h3 class="quota-heading">{% trans "Usage Summary" %}</h3>
</div> </div>
<div class="usage_info_wrapper"> <div class="usage_info_wrapper">
<form action="?" method="get" id="date_form" class="form-horizontal"> <form action="?" method="get" id="date_form" class="form-inline">
<h3>{% trans "Select a period of time to query its usage" %}: </h3> <h3>{% trans "Select a period of time to query its usage" %}: </h3>
<div class="datepicker"> <div class="datepicker form-group">
{% blocktrans with start=form.start end=form.end %}<span>From: {{ start }} </span><span>To: {{ end }} </span>{% endblocktrans %} {% blocktrans with start=form.start end=form.end %}
<label>From:</label> {{ start }}
</div>
<div class="datepicker form-group">
<label>To:</label>{{ end }}{% endblocktrans %}
</div>
<button class="btn btn-primary" type="submit">{% trans "Submit" %}</button> <button class="btn btn-primary" type="submit">{% trans "Submit" %}</button>
<small>{% trans "The date should be in YYYY-mm-dd format." %}</small> <small>{% trans "The date should be in YYYY-mm-dd format." %}</small>
</div>
</form> </form>
<p id="activity"> <p id="activity">
<span><strong>{% trans "Active Instances" %}:</strong> {{ usage.summary.instances|default:'0' }}</span> <span><strong>{% trans "Active Instances" %}:</strong> {{ usage.summary.instances|default:'0' }}</span>
<span><strong>{% trans "Active RAM" %}:</strong> {{ usage.summary.memory_mb|mbformat|default:'0' }}</span> <span><strong>{% trans "Active RAM" %}:</strong> {{ usage.summary.memory_mb|mbformat|default:'0' }}</span>

View File

@ -3,6 +3,8 @@
<div class="workflow {{ layout|join:' ' }}"> <div class="workflow {{ layout|join:' ' }}">
<form {{ workflow.attr_string|safe }} action="{{ workflow.get_absolute_url }}" {% if add_to_field %}data-add-to-field="{{ add_to_field }}"{% endif %} method="POST"{% if workflow.multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %} <form {{ workflow.attr_string|safe }} action="{{ workflow.get_absolute_url }}" {% if add_to_field %}data-add-to-field="{{ add_to_field }}"{% endif %} method="POST"{% if workflow.multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
{% if REDIRECT_URL %}<input type="hidden" name="{{ workflow.redirect_param_name }}" value="{{ REDIRECT_URL }}"/>{% endif %} {% if REDIRECT_URL %}<input type="hidden" name="{{ workflow.redirect_param_name }}" value="{{ REDIRECT_URL }}"/>{% endif %}
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header"> <div class="modal-header">
{% block modal-header %} {% block modal-header %}
{% if modal %}<a href="#" class="close" data-dismiss="modal">&times;</a>{% endif %} {% if modal %}<a href="#" class="close" data-dismiss="modal">&times;</a>{% endif %}
@ -33,21 +35,23 @@
<div class="modal-footer"> <div class="modal-footer">
{% block modal-footer %} {% block modal-footer %}
{% if workflow.wizard %} {% if workflow.wizard %}
<div class="row-fluid"> <div class="row">
<div class="span6 back"> <div class="col-sm-6 back">
<button type="button" class="btn button-previous">&laquo; {% trans "Back" %}</button> <button type="button" class="btn btn-default button-previous">&laquo; {% trans "Back" %}</button>
</div> </div>
<div class="span6 next"> <div class="col-sm-6 next">
<button type="button" class="btn btn-primary button-next">{% trans "Next" %} &raquo;</button> <button type="button" class="btn btn-primary button-next">{% trans "Next" %} &raquo;</button>
<button type="submit" class="btn btn-primary button-final">{{ workflow.finalize_button_name }}</button> <button type="submit" class="btn btn-primary button-final">{{ workflow.finalize_button_name }}</button>
</div> </div>
</div> </div>
{% else %} {% else %}
<input class="btn btn-primary pull-right" type="submit" value="{{ workflow.finalize_button_name }}" /> <input class="btn btn-primary pull-right" type="submit" value="{{ workflow.finalize_button_name }}" />
{% if modal %}<a class="btn secondary cancel close">{% trans "Cancel" %}</a>{% endif %} {% if modal %}<a class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>{% endif %}
{% endif %} {% endif %}
{% endblock %} {% endblock %}
</div> </div>
</div>
</div>
</form> </form>
</div> </div>
{% endwith %} {% endwith %}

View File

@ -8,13 +8,13 @@
<div class="left"> <div class="left">
<div class="fake_table fake_table_header fake_{{ step.slug }}_table"> <div class="fake_table fake_table_header fake_{{ step.slug }}_table">
<span class="members_title">{{ step.available_list_title }}</span> <span class="members_title">{{ step.available_list_title }}</span>
<input type="text" name="available_{{ step.slug }}_filter" id="available_{{ step.slug }}" class="filter {{ step.slug }}_filter" placeholder="{% trans "Filter" %}"> <input type="text" name="available_{{ step.slug }}_filter form-control input-sm" id="available_{{ step.slug }}" class="filter {{ step.slug }}_filter" placeholder="{% trans "Filter" %}">
</div> </div>
</div> </div>
<div class="right"> <div class="right">
<div class="fake_table fake_table_header fake_{{ step.slug }}_table"> <div class="fake_table fake_table_header fake_{{ step.slug }}_table">
<span class="members_title">{{ step.members_list_title }}</span> <span class="members_title">{{ step.members_list_title }}</span>
<input type="text" name="{{ step.slug }}_members_filter" id="{{ step.slug }}_members" class="filter {{ step.slug }}_filter" placeholder="{% trans "Filter" %}"> <input type="text" name="{{ step.slug }}_members_filter" id="{{ step.slug }}_members" class="filter {{ step.slug }}_filter form-control input-sm" placeholder="{% trans "Filter" %}">
</div> </div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,47 @@
from django import forms
from django.template import Context
from django.template.loader import get_template
from django import template
register = template.Library()
@register.filter
def bootstrap_form_field(element):
markup_classes = {'label': '', 'value': '', 'single_value': ''}
return render(element, markup_classes)
def add_input_classes(field):
if not is_checkbox(field) and not is_multiple_checkbox(field) and not is_radio(field) \
and not is_file(field):
field_classes = field.field.widget.attrs.get('class', '')
field_classes += ' form-control'
field.field.widget.attrs['class'] = field_classes
def render(element, markup_classes):
add_input_classes(element)
template = get_template("horizon/common/_bootstrap_form_field.html")
context = Context({'field': element, 'classes': markup_classes})
return template.render(context)
@register.filter
def is_checkbox(field):
return isinstance(field.field.widget, forms.CheckboxInput)
@register.filter
def is_multiple_checkbox(field):
return isinstance(field.field.widget, forms.CheckboxSelectMultiple)
@register.filter
def is_radio(field):
return isinstance(field.field.widget, forms.RadioSelect)
@register.filter
def is_file(field):
return isinstance(field.field.widget, forms.FileInput)

View File

@ -103,7 +103,7 @@ class WorkflowView(generic.TemplateView):
the workflow characteristics the workflow characteristics
""" """
if self.request.is_ajax(): if self.request.is_ajax():
layout = ['modal', 'hide', ] layout = ['modal', ]
if self.workflow_class.fullscreen: if self.workflow_class.fullscreen:
layout += ['fullscreen', ] layout += ['fullscreen', ]
else: else:

View File

@ -33,21 +33,24 @@ class CreateAggregateAction(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Host Aggregate") verbose_name = _("Create Host Aggregate")
url = constants.AGGREGATES_CREATE_URL url = constants.AGGREGATES_CREATE_URL
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
class ManageHostsAction(tables.LinkAction): class ManageHostsAction(tables.LinkAction):
name = "manage" name = "manage"
verbose_name = _("Manage Hosts") verbose_name = _("Manage Hosts")
url = constants.AGGREGATES_MANAGE_HOSTS_URL url = constants.AGGREGATES_MANAGE_HOSTS_URL
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
class UpdateAggregateAction(tables.LinkAction): class UpdateAggregateAction(tables.LinkAction):
name = "update" name = "update"
verbose_name = _("Edit Host Aggregate") verbose_name = _("Edit Host Aggregate")
url = constants.AGGREGATES_UPDATE_URL url = constants.AGGREGATES_UPDATE_URL
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
class AggregateFilterAction(tables.FilterAction): class AggregateFilterAction(tables.FilterAction):

View File

@ -22,5 +22,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Save" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Save" %}" />
<a href="{% url 'horizon:admin:aggregates:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:aggregates:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -36,7 +36,8 @@ class ViewGroupsLink(tables.LinkAction):
name = "groups" name = "groups"
verbose_name = _("Modify Groups") verbose_name = _("Modify Groups")
url = "horizon:admin:domains:update" url = "horizon:admin:domains:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
def get_link_url(self, domain): def get_link_url(self, domain):
step = 'update_group_members' step = 'update_group_members'
@ -49,7 +50,8 @@ class CreateDomainLink(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Domain") verbose_name = _("Create Domain")
url = constants.DOMAINS_CREATE_URL url = constants.DOMAINS_CREATE_URL
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (('identity', 'identity:create_domain'),) policy_rules = (('identity', 'identity:create_domain'),)
def allowed(self, request, domain): def allowed(self, request, domain):
@ -60,7 +62,8 @@ class EditDomainLink(tables.LinkAction):
name = "edit" name = "edit"
verbose_name = _("Edit") verbose_name = _("Edit")
url = constants.DOMAINS_UPDATE_URL url = constants.DOMAINS_UPDATE_URL
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (('identity', 'identity:update_domain'),) policy_rules = (('identity', 'identity:update_domain'),)
def allowed(self, request, domain): def allowed(self, request, domain):

View File

@ -33,7 +33,8 @@ class ExtraSpecCreate(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create") verbose_name = _("Create")
url = "horizon:admin:flavors:extras:create" url = "horizon:admin:flavors:extras:create"
classes = ("btn-create", "ajax-modal") classes = ("ajax-modal",)
icon = "plus"
def get_link_url(self, extra_spec=None): def get_link_url(self, extra_spec=None):
return reverse(self.url, args=[self.table.kwargs['id']]) return reverse(self.url, args=[self.table.kwargs['id']])
@ -43,7 +44,8 @@ class ExtraSpecEdit(tables.LinkAction):
name = "edit" name = "edit"
verbose_name = _("Edit") verbose_name = _("Edit")
url = "horizon:admin:flavors:extras:edit" url = "horizon:admin:flavors:extras:edit"
classes = ("btn-edit", "ajax-modal") classes = ("ajax-modal",)
icon = "pencil"
def get_link_url(self, extra_spec): def get_link_url(self, extra_spec):
return reverse(self.url, args=[self.table.kwargs['id'], return reverse(self.url, args=[self.table.kwargs['id'],

View File

@ -38,28 +38,31 @@ class CreateFlavor(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Flavor") verbose_name = _("Create Flavor")
url = "horizon:admin:flavors:create" url = "horizon:admin:flavors:create"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
class UpdateFlavor(tables.LinkAction): class UpdateFlavor(tables.LinkAction):
name = "update" name = "update"
verbose_name = _("Edit Flavor") verbose_name = _("Edit Flavor")
url = "horizon:admin:flavors:update" url = "horizon:admin:flavors:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
class ViewFlavorExtras(tables.LinkAction): class ViewFlavorExtras(tables.LinkAction):
name = "extras" name = "extras"
verbose_name = _("View Extra Specs") verbose_name = _("View Extra Specs")
url = "horizon:admin:flavors:extras:index" url = "horizon:admin:flavors:extras:index"
classes = ("btn-edit",) icon = "pencil"
class ModifyAccess(tables.LinkAction): class ModifyAccess(tables.LinkAction):
name = "projects" name = "projects"
verbose_name = _("Modify Access") verbose_name = _("Modify Access")
url = "horizon:admin:flavors:update" url = "horizon:admin:flavors:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
def get_link_url(self, flavor): def get_link_url(self, flavor):
step = 'update_flavor_access' step = 'update_flavor_access'

View File

@ -23,6 +23,6 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create" %}" />
<a href="{% url 'horizon:admin:flavors:extras:index' flavor.id %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:flavors:extras:index' flavor.id %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -23,6 +23,6 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Save" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Save" %}" />
<a href="{% url 'horizon:admin:flavors:extras:index' flavor.id %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:flavors:extras:index' flavor.id %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -10,6 +10,6 @@
{% endblock %} {% endblock %}
{% block modal-footer %} {% block modal-footer %}
<a href="{% url 'horizon:admin:flavors:index' %}" class="btn secondary cancel close">{% trans "Close" %}</a> <a href="{% url 'horizon:admin:flavors:index' %}" class="btn btn-default secondary cancel close">{% trans "Close" %}</a>
{% endblock %} {% endblock %}

View File

@ -37,7 +37,8 @@ class CreateGroupLink(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Group") verbose_name = _("Create Group")
url = constants.GROUPS_CREATE_URL url = constants.GROUPS_CREATE_URL
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("identity", "identity:create_group"),) policy_rules = (("identity", "identity:create_group"),)
def allowed(self, request, group): def allowed(self, request, group):
@ -48,7 +49,8 @@ class EditGroupLink(tables.LinkAction):
name = "edit" name = "edit"
verbose_name = _("Edit Group") verbose_name = _("Edit Group")
url = constants.GROUPS_UPDATE_URL url = constants.GROUPS_UPDATE_URL
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (("identity", "identity:update_group"),) policy_rules = (("identity", "identity:update_group"),)
def allowed(self, request, group): def allowed(self, request, group):
@ -73,7 +75,7 @@ class ManageUsersLink(tables.LinkAction):
name = "users" name = "users"
verbose_name = _("Modify Users") verbose_name = _("Modify Users")
url = constants.GROUPS_MANAGE_URL url = constants.GROUPS_MANAGE_URL
classes = ("btn-edit") icon = "pencil"
policy_rules = (("identity", "identity:get_group"), policy_rules = (("identity", "identity:get_group"),
("identity", "identity:list_users"),) ("identity", "identity:list_users"),)
@ -144,7 +146,8 @@ class RemoveMembers(tables.DeleteAction):
class AddMembersLink(tables.LinkAction): class AddMembersLink(tables.LinkAction):
name = "add_user_link" name = "add_user_link"
verbose_name = _("Add...") verbose_name = _("Add...")
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
url = constants.GROUPS_ADD_MEMBER_URL url = constants.GROUPS_ADD_MEMBER_URL
policy_rules = (("identity", "identity:list_users"), policy_rules = (("identity", "identity:list_users"),
("identity", "identity:add_user_to_group"),) ("identity", "identity:add_user_to_group"),)
@ -181,7 +184,7 @@ class AddMembers(tables.BatchAction):
action_past = _("Added") action_past = _("Added")
data_type_singular = _("User") data_type_singular = _("User")
data_type_plural = _("Users") data_type_plural = _("Users")
classes = ("btn-create", ) icon = "plus"
requires_input = True requires_input = True
success_url = constants.GROUPS_MANAGE_URL success_url = constants.GROUPS_MANAGE_URL
policy_rules = (("identity", "identity:add_user_to_group"),) policy_rules = (("identity", "identity:add_user_to_group"),)

View File

@ -5,5 +5,5 @@
{% block modal-header %}{% trans "Add Group Assignment" %}{% endblock %} {% block modal-header %}{% trans "Add Group Assignment" %}{% endblock %}
{% block modal-footer %} {% block modal-footer %}
<a href="{% url 'horizon:admin:groups:manage_members' group.id %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:groups:manage_members' group.id %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -21,5 +21,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Group" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Group" %}" />
<a href="{% url 'horizon:admin:groups:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:groups:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -21,5 +21,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Group" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Group" %}" />
<a href="{% url 'horizon:admin:groups:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:groups:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -31,5 +31,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Image" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Image" %}" />
<a href="{% url 'horizon:admin:images:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:images:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -22,5 +22,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Image" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Image" %}" />
<a href="{% url 'horizon:admin:images:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:images:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -7,8 +7,8 @@
{% endblock page_header %} {% endblock page_header %}
{% block main %} {% block main %}
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-sm-12">
{{ tab_group.render }} {{ tab_group.render }}
<div class="version_label"> <div class="version_label">
{% blocktrans with version_info=version %}Version: {{version_info}} {% blocktrans with version_info=version %}Version: {{version_info}}

View File

@ -21,5 +21,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Live Migrate Instance" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Live Migrate Instance" %}" />
<a href="{% url 'horizon:admin:instances:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:instances:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -2,11 +2,11 @@
<div id="ceilometer-report"> <div id="ceilometer-report">
<form class="form-horizontal" action="{% url 'horizon:admin:metering:report' %}" method="POST"> <form class="form-horizontal" action="{% url 'horizon:admin:metering:report' %}" method="POST">
{% csrf_token %} {% csrf_token %}
<div class="control-group"> <div class="form-group">
<label for="report_date_options" class="control-label">{% trans "Period" %}:&nbsp;</label> <label for="report_date_options" class="control-label col-sm-2">{% trans "Period" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<select data-line-chart-command="select_box_change" <select data-line-chart-command="select_box_change"
id="report_date_options" name="date_options" class="span2"> id="report_date_options" name="date_options" class="form-control">
<option value="1">{% trans "Last day" %}</option> <option value="1">{% trans "Last day" %}</option>
<option value="7" selected="selected">{% trans "Last week" %}</option> <option value="7" selected="selected">{% trans "Last week" %}</option>
<option value="{% now 'j' %}">{% trans "Month to date" %}</option> <option value="{% now 'j' %}">{% trans "Month to date" %}</option>
@ -17,27 +17,31 @@
</select> </select>
</div> </div>
</div> </div>
<div class="control-group" id="report_date_from"> <div class="form-group" id="report_date_from">
<label for="date_from" class="control-label">{% trans "From" %}:&nbsp;</label> <label for="date_from" class="control-label col-sm-2">{% trans "From" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<input data-line-chart-command="date_picker_change" <input data-line-chart-command="date_picker_change"
type="text" id="date_from" name="date_from" class="span2 example"/> type="text" id="date_from" name="date_from" class="form-control example"/>
</div> </div>
</div> </div>
<div class="control-group" id="report_date_to"> <div class="form-group" id="report_date_to">
<label for="date_to" class="control-label">{% trans "To" %}:&nbsp;</label> <label for="date_to" class="control-label col-sm-2">{% trans "To" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<input data-line-chart-command="date_picker_change" <input data-line-chart-command="date_picker_change"
type="text" name="date_to" class="span2 example"/> type="text" name="date_to" class="form-control example"/>
</div> </div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label for="limit" class="control-label">{% trans "Limit project count" %}:&nbsp;</label> <label for="limit" class="control-label col-sm-2">{% trans "Limit project count" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<input type="text" name="limit" class="span2 example" value="20"/> <input type="text" name="limit" class="form-control example" value="20"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default btn-sm">{% trans 'Generate Report' %}</button>
</div> </div>
</div> </div>
<button type="submit" class="btn btn-small">{% trans 'Generate Report' %}</button>
</form> </form>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
@ -55,7 +59,7 @@
// want to refresh, but show hide the date fields // want to refresh, but show hide the date fields
if ($(this).find("option:selected").val() == "other"){ if ($(this).find("option:selected").val() == "other"){
evt.stopPropagation(); evt.stopPropagation();
$("#date_from .controls input, #date_to .controls input").val(''); $("#date_from input, #date_to input").val('');
$("#report_date_from, #report_date_to").show(); $("#report_date_from, #report_date_to").show();
} else { } else {
$("#report_date_from, #report_date_to").hide(); $("#report_date_from, #report_date_to").hide();

View File

@ -7,8 +7,8 @@
{% endblock page_header %} {% endblock page_header %}
{% block main %} {% block main %}
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-sm-12">
{{ tab_group.render }} {{ tab_group.render }}
</div> </div>
</div> </div>

View File

@ -9,8 +9,8 @@
{% block main %} {% block main %}
<div class="table_actions"> <div class="table_actions">
<a href="{{ csv_url }}"><button class="btn btn-small btn-download" >{% trans 'Download CSV Summary' %}</button></a> <a href="{{ csv_url }}"><button class="btn btn-default btn-sm" ><span class="glyphicon glyphicon-download"></span>{% trans 'Download CSV Summary' %}</button></a>
<a href="{% url 'horizon:admin:metering:index' %}"><button class="btn btn-small">{% trans 'Back' %}</button></a> <a href="{% url 'horizon:admin:metering:index' %}"><button class="btn btn-default btn-sm">{% trans 'Back' %}</button></a>
</div> </div>
{% for table in tables %} {% for table in tables %}
{{ table.render }} {{ table.render }}

View File

@ -6,11 +6,11 @@
<form class="form-horizontal" <form class="form-horizontal"
id="linechart_general_form"> id="linechart_general_form">
<div class="control-group"> <div class="form-group">
<label for="meter" class="control-label">{% trans "Metric" %}:&nbsp;</label> <label for="meter" class="col-sm-2 control-label">{% trans "Metric" %}:&nbsp;</label>
<div class="controls line_chart_time_picker"> <div class="col-sm-10 line_chart_time_picker">
<select data-line-chart-command="select_box_change" <select data-line-chart-command="select_box_change"
name="meter" id="meter" class="span2 example"> name="meter" id="meter" class="form-control example">
{% if nova_meters %} {% if nova_meters %}
<optgroup label='{% trans "Compute (Nova)" %}'> <optgroup label='{% trans "Compute (Nova)" %}'>
@ -75,21 +75,21 @@
</div> </div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label for="group_by" class="control-label">{% trans "Group by" %}:&nbsp;</label> <label for="group_by" class="col-sm-2 control-label">{% trans "Group by" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<select data-line-chart-command="select_box_change" <select data-line-chart-command="select_box_change"
id="group_by" name="group_by" class="span2"> id="group_by" name="group_by" class="form-control">
<option value="" selected="selected">{% trans "--" %}</option> <option value="" selected="selected">{% trans "--" %}</option>
<option selected="selected" value="project" selected>{% trans "Project" %}</option> <option selected="selected" value="project" selected>{% trans "Project" %}</option>
</select> </select>
</div> </div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label for="stats_attr" class="control-label">{% trans "Value" %}:&nbsp;</label> <label for="stats_attr" class="col-sm-2 control-label">{% trans "Value" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<select data-line-chart-command="select_box_change" <select data-line-chart-command="select_box_change"
id="stats_attr" name="stats_attr" class="span2"> id="stats_attr" name="stats_attr" class="form-control">
<option selected="selected" value="avg">{% trans "Avg." %}</option> <option selected="selected" value="avg">{% trans "Avg." %}</option>
<option value="min">{% trans "Min." %}</option> <option value="min">{% trans "Min." %}</option>
@ -98,11 +98,11 @@
</select> </select>
</div> </div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label for="date_options" class="control-label">{% trans "Period" %}:&nbsp;</label> <label for="date_options" class="col-sm-2 control-label">{% trans "Period" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<select data-line-chart-command="select_box_change" <select data-line-chart-command="select_box_change"
id="date_options" name="date_options" class="span2"> id="date_options" name="date_options" class="form-control">
<option value="1">{% trans "Last day" %}</option> <option value="1">{% trans "Last day" %}</option>
<option value="7" selected="selected">{% trans "Last week" %}</option> <option value="7" selected="selected">{% trans "Last week" %}</option>
<option value="{% now 'j' %}">{% trans "Month to date" %}</option> <option value="{% now 'j' %}">{% trans "Month to date" %}</option>
@ -113,30 +113,30 @@
</select> </select>
</div> </div>
</div> </div>
<div class="control-group" id="date_from"> <div class="form-group" id="date_from">
<label for="date_from" class="control-label">{% trans "From" %}:&nbsp;</label> <label for="date_from" class="col-sm-2 control-label">{% trans "From" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<input data-line-chart-command="date_picker_change" <input data-line-chart-command="date_picker_change"
type="text" id="date_from" name="date_from" class="span2 example"/> type="text" id="date_from" name="date_from" class="form-control example"/>
</div> </div>
</div> </div>
<div class="control-group" id="date_to"> <div class="form-group" id="date_to">
<label for="date_to" class="control-label">{% trans "To" %}:&nbsp;</label> <label for="date_to" class="col-sm-2 control-label">{% trans "To" %}:&nbsp;</label>
<div class="controls"> <div class="col-sm-10">
<input data-line-chart-command="date_picker_change" <input data-line-chart-command="date_picker_change"
type="text" name="date_to" class="span2 example"/> type="text" name="date_to" class="form-control example"/>
</div> </div>
</div> </div>
</form> </form>
</div> </div>
<div class="info row-fluid detail"> <div class="info row detail">
<div class="span12"> <div class="col-sm-12">
<h4>{% trans "Statistics of all resources" %}</h4> <h4>{% trans "Statistics of all resources" %}</h4>
<hr class="header_rule" /> <hr class="header_rule" />
<div class="info row-fluid detail"> <div class="info row detail">
<div class="span9 chart_container"> <div class="col-sm-9 chart_container">
<div class="chart" <div class="chart"
data-chart-type="line_chart" data-chart-type="line_chart"
data-url="{% url 'horizon:admin:metering:samples'%}" data-url="{% url 'horizon:admin:metering:samples'%}"
@ -146,7 +146,7 @@
data-slider-selector="#slider"> data-slider-selector="#slider">
</div> </div>
<div id="slider"></div> <div id="slider"></div>
<div class="span3 legend_container"> <div class="col-sm-3 legend_container">
<div id="smoother" title="Smoothing"></div> <div id="smoother" title="Smoothing"></div>
<div id="legend"></div> <div id="legend"></div>
</div> </div>
@ -175,7 +175,7 @@
// want to refresh, but show hide the date fields // want to refresh, but show hide the date fields
if ($(this).find("option:selected").val() == "other"){ if ($(this).find("option:selected").val() == "other"){
evt.stopPropagation(); evt.stopPropagation();
$("#date_from .controls input, #date_to .controls input").val(''); $("#date_from input, #date_to input").val('');
$("#date_from, #date_to").show(); $("#date_from, #date_to").show();
} else { } else {
$("#date_from, #date_to").hide(); $("#date_from, #date_to").hide();

View File

@ -55,7 +55,8 @@ class CreatePort(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Port") verbose_name = _("Create Port")
url = "horizon:admin:networks:addport" url = "horizon:admin:networks:addport"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("network", "create_port"),) policy_rules = (("network", "create_port"),)
def get_link_url(self, datum=None): def get_link_url(self, datum=None):
@ -67,7 +68,8 @@ class UpdatePort(tables.LinkAction):
name = "update" name = "update"
verbose_name = _("Edit Port") verbose_name = _("Edit Port")
url = "horizon:admin:networks:editport" url = "horizon:admin:networks:editport"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (("network", "update_port"),) policy_rules = (("network", "update_port"),)
def get_policy_target(self, request, datum=None): def get_policy_target(self, request, datum=None):

View File

@ -54,7 +54,8 @@ class CreateSubnet(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Subnet") verbose_name = _("Create Subnet")
url = "horizon:admin:networks:addsubnet" url = "horizon:admin:networks:addsubnet"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("network", "create_subnet"),) policy_rules = (("network", "create_subnet"),)
def get_policy_target(self, request, datum=None): def get_policy_target(self, request, datum=None):
@ -73,7 +74,8 @@ class UpdateSubnet(tables.LinkAction):
name = "update" name = "update"
verbose_name = _("Edit Subnet") verbose_name = _("Edit Subnet")
url = "horizon:admin:networks:editsubnet" url = "horizon:admin:networks:editsubnet"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (("network", "update_subnet"),) policy_rules = (("network", "update_subnet"),)
def get_policy_target(self, request, datum=None): def get_policy_target(self, request, datum=None):

View File

@ -54,7 +54,8 @@ class CreateNetwork(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Network") verbose_name = _("Create Network")
url = "horizon:admin:networks:create" url = "horizon:admin:networks:create"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("network", "create_network"),) policy_rules = (("network", "create_network"),)
@ -62,7 +63,8 @@ class EditNetwork(tables.LinkAction):
name = "update" name = "update"
verbose_name = _("Edit Network") verbose_name = _("Edit Network")
url = "horizon:admin:networks:update" url = "horizon:admin:networks:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (("network", "update_network"),) policy_rules = (("network", "update_network"),)
def get_policy_target(self, request, datum=None): def get_policy_target(self, request, datum=None):

View File

@ -22,5 +22,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Network" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Network" %}" />
<a href="{% url 'horizon:admin:networks:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:networks:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -21,5 +21,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Save Changes" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Save Changes" %}" />
<a href="{% url 'horizon:admin:networks:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:networks:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -22,5 +22,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Port" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Port" %}" />
<a href="{% url 'horizon:admin:networks:detail' network.id %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:networks:detail' network.id %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -26,5 +26,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Save Changes" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Save Changes" %}" />
<a href="{% url 'horizon:admin:networks:detail' network_id %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:networks:detail' network_id %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -28,7 +28,8 @@ class ViewMembersLink(tables.LinkAction):
name = "users" name = "users"
verbose_name = _("Modify Users") verbose_name = _("Modify Users")
url = "horizon:admin:projects:update" url = "horizon:admin:projects:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (("identity", "identity:list_users"), policy_rules = (("identity", "identity:list_users"),
("identity", "identity:list_roles")) ("identity", "identity:list_roles"))
@ -43,7 +44,8 @@ class ViewGroupsLink(tables.LinkAction):
name = "groups" name = "groups"
verbose_name = _("Modify Groups") verbose_name = _("Modify Groups")
url = "horizon:admin:projects:update" url = "horizon:admin:projects:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
def allowed(self, request, project): def allowed(self, request, project):
return keystone.VERSIONS.active >= 3 return keystone.VERSIONS.active >= 3
@ -59,7 +61,7 @@ class UsageLink(tables.LinkAction):
name = "usage" name = "usage"
verbose_name = _("View Usage") verbose_name = _("View Usage")
url = "horizon:admin:projects:usage" url = "horizon:admin:projects:usage"
classes = ("btn-stats",) icon = "stats"
policy_rules = (("compute", "compute_extension:simple_tenant_usage:show"),) policy_rules = (("compute", "compute_extension:simple_tenant_usage:show"),)
@ -78,7 +80,8 @@ class UpdateProject(tables.LinkAction):
name = "update" name = "update"
verbose_name = _("Edit Project") verbose_name = _("Edit Project")
url = "horizon:admin:projects:update" url = "horizon:admin:projects:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (('identity', 'identity:update_project'),) policy_rules = (('identity', 'identity:update_project'),)
def allowed(self, request, project): def allowed(self, request, project):
@ -89,7 +92,8 @@ class ModifyQuotas(tables.LinkAction):
name = "quotas" name = "quotas"
verbose_name = _("Modify Quotas") verbose_name = _("Modify Quotas")
url = "horizon:admin:projects:update" url = "horizon:admin:projects:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (('compute', "compute_extension:quotas:update"),) policy_rules = (('compute', "compute_extension:quotas:update"),)
def get_link_url(self, project): def get_link_url(self, project):

View File

@ -244,12 +244,17 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests):
self.assertTemplateUsed(res, views.WorkflowView.template_name) self.assertTemplateUsed(res, views.WorkflowView.template_name)
if django.VERSION >= (1, 6): if django.VERSION >= (1, 6):
self.assertContains(res, '<input id="id_subnet" min="-1" ' self.assertContains(res, '''
'name="subnet" type="number" value="10" />', <input class=" form-control"
html=True) id="id_subnet" min="-1"
name="subnet" type="number" value="10" />
''', html=True)
else: else:
self.assertContains(res, '<input name="subnet" id="id_subnet" ' self.assertContains(res, '''
'value="10" type="text" />', html=True) <input class=" form-control"
name="subnet" id="id_subnet"
value="10" type="text" />
''', html=True)
workflow = res.context['workflow'] workflow = res.context['workflow']
self.assertEqual(res.context['workflow'].name, self.assertEqual(res.context['workflow'].name,

View File

@ -23,7 +23,8 @@ class CreateRoleLink(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Role") verbose_name = _("Create Role")
url = "horizon:admin:roles:create" url = "horizon:admin:roles:create"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("identity", "identity:create_role"),) policy_rules = (("identity", "identity:create_role"),)
def allowed(self, request, role): def allowed(self, request, role):
@ -34,7 +35,8 @@ class EditRoleLink(tables.LinkAction):
name = "edit" name = "edit"
verbose_name = _("Edit") verbose_name = _("Edit")
url = "horizon:admin:roles:update" url = "horizon:admin:roles:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (("identity", "identity:update_role"),) policy_rules = (("identity", "identity:update_role"),)
def allowed(self, request, role): def allowed(self, request, role):

View File

@ -21,5 +21,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Role" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Role" %}" />
<a href="{% url 'horizon:admin:roles:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:roles:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -21,5 +21,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Role" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Update Role" %}" />
<a href="{% url 'horizon:admin:roles:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:roles:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -8,8 +8,8 @@
{% block main %} {% block main %}
{% include "admin/routers/_detail_overview.html" %} {% include "admin/routers/_detail_overview.html" %}
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-sm-12">
{{ tab_group.render }} {{ tab_group.render }}
</div> </div>
</div> </div>

View File

@ -27,7 +27,8 @@ class CreateUserLink(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create User") verbose_name = _("Create User")
url = "horizon:admin:users:create" url = "horizon:admin:users:create"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (('identity', 'identity:create_grant'), policy_rules = (('identity', 'identity:create_grant'),
("identity", "identity:create_user"), ("identity", "identity:create_user"),
("identity", "identity:list_roles"), ("identity", "identity:list_roles"),
@ -41,7 +42,8 @@ class EditUserLink(tables.LinkAction):
name = "edit" name = "edit"
verbose_name = _("Edit") verbose_name = _("Edit")
url = "horizon:admin:users:update" url = "horizon:admin:users:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
policy_rules = (("identity", "identity:update_user"), policy_rules = (("identity", "identity:update_user"),
("identity", "identity:list_projects"),) ("identity", "identity:list_projects"),)

View File

@ -31,5 +31,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create User" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create User" %}" />
<a href="{% url 'horizon:admin:users:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:users:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -31,5 +31,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Update User" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Update User" %}" />
<a href="{% url 'horizon:admin:users:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:users:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -22,7 +22,8 @@ class CreateVolumeType(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Volume Type") verbose_name = _("Create Volume Type")
url = "horizon:admin:volumes:create_type" url = "horizon:admin:volumes:create_type"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("volume", "volume_extension:types_manage"),) policy_rules = (("volume", "volume_extension:types_manage"),)

View File

@ -26,5 +26,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Volume Type" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Volume Type" %}" />
<a href="{% url 'horizon:admin:volumes:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:admin:volumes:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -7,8 +7,8 @@
{% endblock page_header %} {% endblock page_header %}
{% block main %} {% block main %}
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-sm-12">
{{ tab_group.render }} {{ tab_group.render }}
</div> </div>
</div> </div>

View File

@ -32,7 +32,7 @@ class DownloadEC2(tables.LinkAction):
name = "download_ec2" name = "download_ec2"
verbose_name = _("Download EC2 Credentials") verbose_name = _("Download EC2 Credentials")
verbose_name_plural = _("Download EC2 Credentials") verbose_name_plural = _("Download EC2 Credentials")
classes = ("btn-download",) icon = "download"
url = "horizon:project:access_and_security:api_access:ec2" url = "horizon:project:access_and_security:api_access:ec2"
policy_rules = (("compute", "compute_extension:certificates"),) policy_rules = (("compute", "compute_extension:certificates"),)
@ -44,7 +44,7 @@ class DownloadOpenRC(tables.LinkAction):
name = "download_openrc" name = "download_openrc"
verbose_name = _("Download OpenStack RC File") verbose_name = _("Download OpenStack RC File")
verbose_name_plural = _("Download OpenStack RC File") verbose_name_plural = _("Download OpenStack RC File")
classes = ("btn-download",) icon = "download"
url = "horizon:project:access_and_security:api_access:openrc" url = "horizon:project:access_and_security:api_access:openrc"

View File

@ -39,7 +39,8 @@ POLICY_CHECK = getattr(settings, "POLICY_CHECK_FUNCTION", lambda p, r: True)
class AllocateIP(tables.LinkAction): class AllocateIP(tables.LinkAction):
name = "allocate" name = "allocate"
verbose_name = _("Allocate IP To Project") verbose_name = _("Allocate IP To Project")
classes = ("ajax-modal", "btn-allocate") classes = ("ajax-modal",)
icon = "download-alt"
url = "horizon:project:access_and_security:floating_ips:allocate" url = "horizon:project:access_and_security:floating_ips:allocate"
def single(self, data_table, request, *args): def single(self, data_table, request, *args):
@ -72,7 +73,8 @@ class ReleaseIPs(tables.BatchAction):
action_past = _("Released") action_past = _("Released")
data_type_singular = _("Floating IP") data_type_singular = _("Floating IP")
data_type_plural = _("Floating IPs") data_type_plural = _("Floating IPs")
classes = ('btn-danger', 'btn-release') classes = ('btn-danger',)
icon = "arrow-up"
def allowed(self, request, fip=None): def allowed(self, request, fip=None):
if api.base.is_service_enabled(request, "network"): if api.base.is_service_enabled(request, "network"):
@ -91,7 +93,8 @@ class AssociateIP(tables.LinkAction):
name = "associate" name = "associate"
verbose_name = _("Associate") verbose_name = _("Associate")
url = "horizon:project:access_and_security:floating_ips:associate" url = "horizon:project:access_and_security:floating_ips:associate"
classes = ("ajax-modal", "btn-associate") classes = ("ajax-modal",)
icon = "link"
def allowed(self, request, fip): def allowed(self, request, fip):
if api.base.is_service_enabled(request, "network"): if api.base.is_service_enabled(request, "network"):

View File

@ -34,7 +34,8 @@ class ImportKeyPair(tables.LinkAction):
name = "import" name = "import"
verbose_name = _("Import Key Pair") verbose_name = _("Import Key Pair")
url = "horizon:project:access_and_security:keypairs:import" url = "horizon:project:access_and_security:keypairs:import"
classes = ("ajax-modal", "btn-upload") classes = ("ajax-modal",)
icon = "upload"
policy_rules = (("compute", "compute_extension:keypairs:create"),) policy_rules = (("compute", "compute_extension:keypairs:create"),)
@ -42,7 +43,8 @@ class CreateKeyPair(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Key Pair") verbose_name = _("Create Key Pair")
url = "horizon:project:access_and_security:keypairs:create" url = "horizon:project:access_and_security:keypairs:create"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
policy_rules = (("compute", "compute_extension:keypairs:create"),) policy_rules = (("compute", "compute_extension:keypairs:create"),)
def allowed(self, request, keypair=None): def allowed(self, request, keypair=None):

View File

@ -58,7 +58,8 @@ class CreateGroup(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Security Group") verbose_name = _("Create Security Group")
url = "horizon:project:access_and_security:security_groups:create" url = "horizon:project:access_and_security:security_groups:create"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
def allowed(self, request, security_group=None): def allowed(self, request, security_group=None):
if api.base.is_service_enabled(request, "network"): if api.base.is_service_enabled(request, "network"):
@ -73,7 +74,8 @@ class EditGroup(tables.LinkAction):
name = "edit" name = "edit"
verbose_name = _("Edit Security Group") verbose_name = _("Edit Security Group")
url = "horizon:project:access_and_security:security_groups:update" url = "horizon:project:access_and_security:security_groups:update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
def get_policy_target(self, request, datum=None): def get_policy_target(self, request, datum=None):
project_id = None project_id = None
@ -100,7 +102,7 @@ class ManageRules(tables.LinkAction):
name = "manage_rules" name = "manage_rules"
verbose_name = _("Manage Rules") verbose_name = _("Manage Rules")
url = "horizon:project:access_and_security:security_groups:detail" url = "horizon:project:access_and_security:security_groups:detail"
classes = ("btn-edit") icon = "pencil"
def get_policy_target(self, request, datum=None): def get_policy_target(self, request, datum=None):
project_id = None project_id = None
@ -136,7 +138,8 @@ class CreateRule(tables.LinkAction):
name = "add_rule" name = "add_rule"
verbose_name = _("Add Rule") verbose_name = _("Add Rule")
url = "horizon:project:access_and_security:security_groups:add_rule" url = "horizon:project:access_and_security:security_groups:add_rule"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
def allowed(self, request, security_group_rule=None): def allowed(self, request, security_group_rule=None):
if api.base.is_service_enabled(request, "network"): if api.base.is_service_enabled(request, "network"):

View File

@ -40,5 +40,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Allocate IP" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Allocate IP" %}" />
<a href="{% url 'horizon:project:access_and_security:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:access_and_security:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -7,8 +7,8 @@
{% endblock page_header %} {% endblock page_header %}
{% block main %} {% block main %}
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-sm-12">
{{ tab_group.render }} {{ tab_group.render }}
</div> </div>
</div> </div>

View File

@ -22,5 +22,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Key Pair" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Key Pair" %}" />
<a href="{% url 'horizon:project:access_and_security:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:access_and_security:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -27,5 +27,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Import Key Pair" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Import Key Pair" %}" />
<a href="{% url 'horizon:project:access_and_security:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:access_and_security:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -25,5 +25,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Add" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Add" %}" />
<a href="{% url 'horizon:project:access_and_security:security_groups:detail' security_group_id %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:access_and_security:security_groups:detail' security_group_id %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -22,5 +22,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Security Group" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Security Group" %}" />
<a href="{% url 'horizon:project:access_and_security:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:access_and_security:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -22,5 +22,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Edit Security Group" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Edit Security Group" %}" />
<a href="{% url 'horizon:project:access_and_security:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:access_and_security:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -54,7 +54,7 @@ class ViewContainer(tables.LinkAction):
class MakePublicContainer(tables.Action): class MakePublicContainer(tables.Action):
name = "make_public" name = "make_public"
verbose_name = _("Make Public") verbose_name = _("Make Public")
classes = ("btn-edit", ) icon = "pencil"
def allowed(self, request, container): def allowed(self, request, container):
# Container metadata have not been loaded # Container metadata have not been loaded
@ -80,7 +80,7 @@ class MakePublicContainer(tables.Action):
class MakePrivateContainer(tables.Action): class MakePrivateContainer(tables.Action):
name = "make_private" name = "make_private"
verbose_name = _("Make Private") verbose_name = _("Make Private")
classes = ("btn-edit", ) icon = "pencil"
def allowed(self, request, container): def allowed(self, request, container):
# Container metadata have not been loaded # Container metadata have not been loaded
@ -136,14 +136,15 @@ class CreateContainer(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Container") verbose_name = _("Create Container")
url = "horizon:project:containers:create" url = "horizon:project:containers:create"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
class ListObjects(tables.LinkAction): class ListObjects(tables.LinkAction):
name = "list_objects" name = "list_objects"
verbose_name = _("View Container") verbose_name = _("View Container")
url = "horizon:project:containers:index" url = "horizon:project:containers:index"
classes = ("btn-list",) icon = "list"
def get_link_url(self, datum=None): def get_link_url(self, datum=None):
container_name = http.urlquote(datum.name) container_name = http.urlquote(datum.name)
@ -155,7 +156,8 @@ class CreatePseudoFolder(tables.LinkAction):
name = "create_pseudo_folder" name = "create_pseudo_folder"
verbose_name = _("Create Pseudo-folder") verbose_name = _("Create Pseudo-folder")
url = "horizon:project:containers:create_pseudo_folder" url = "horizon:project:containers:create_pseudo_folder"
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal",)
icon = "plus"
def get_link_url(self, datum=None): def get_link_url(self, datum=None):
# Usable for both the container and object tables # Usable for both the container and object tables
@ -183,7 +185,8 @@ class UploadObject(tables.LinkAction):
name = "upload" name = "upload"
verbose_name = _("Upload Object") verbose_name = _("Upload Object")
url = "horizon:project:containers:object_upload" url = "horizon:project:containers:object_upload"
classes = ("ajax-modal", "btn-upload") classes = ("ajax-modal",)
icon = "upload"
def get_link_url(self, datum=None): def get_link_url(self, datum=None):
# Usable for both the container and object tables # Usable for both the container and object tables
@ -305,7 +308,8 @@ class UpdateObject(tables.LinkAction):
name = "update_object" name = "update_object"
verbose_name = _("Edit") verbose_name = _("Edit")
url = "horizon:project:containers:object_update" url = "horizon:project:containers:object_update"
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal",)
icon = "pencil"
allowed_data_types = ("objects",) allowed_data_types = ("objects",)
def get_link_url(self, obj): def get_link_url(self, obj):
@ -341,7 +345,8 @@ class CopyObject(tables.LinkAction):
name = "copy" name = "copy"
verbose_name = _("Copy") verbose_name = _("Copy")
url = "horizon:project:containers:object_copy" url = "horizon:project:containers:object_copy"
classes = ("ajax-modal", "btn-copy") classes = ("ajax-modal",)
icon = "circle-arrow-right"
allowed_data_types = ("objects",) allowed_data_types = ("objects",)
def get_link_url(self, obj): def get_link_url(self, obj):
@ -354,7 +359,7 @@ class DownloadObject(tables.LinkAction):
name = "download" name = "download"
verbose_name = _("Download") verbose_name = _("Download")
url = "horizon:project:containers:object_download" url = "horizon:project:containers:object_download"
classes = ("btn-download",) icon = "download"
allowed_data_types = ("objects",) allowed_data_types = ("objects",)
def get_link_url(self, obj): def get_link_url(self, obj):

View File

@ -5,7 +5,7 @@
{% block modal-header %}{% trans "Container Details" %}{% endblock %} {% block modal-header %}{% trans "Container Details" %}{% endblock %}
{% block modal-body %} {% block modal-body %}
<div class="info row-fluid detail clearfix"> <div class="info row detail clearfix">
<dl> <dl>
<dt>{% trans "Container Name" %}</dt> <dt>{% trans "Container Name" %}</dt>
<dd>{{ container.name }}</dd> <dd>{{ container.name }}</dd>
@ -26,5 +26,5 @@
{% endblock %} {% endblock %}
{% block modal-footer %} {% block modal-footer %}
<a href="{% url 'horizon:project:containers:index' %}" class="btn secondary cancel close">{% trans "Close" %}</a> <a href="{% url 'horizon:project:containers:index' %}" class="btn btn-default secondary cancel close">{% trans "Close" %}</a>
{% endblock %} {% endblock %}

View File

@ -21,5 +21,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Copy Object" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Copy Object" %}" />
<a href="{% url 'horizon:project:containers:index' container_name|add:'/' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:containers:index' container_name|add:'/' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -22,5 +22,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Container" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create Container" %}" />
<a href="{% url 'horizon:project:containers:index' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:containers:index' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -21,5 +21,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" value="{% trans "Create" %}" /> <input class="btn btn-primary pull-right" type="submit" value="{% trans "Create" %}" />
<a href="{% url 'horizon:project:containers:index' container_name|add:'/' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:containers:index' container_name|add:'/' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -5,7 +5,7 @@
{% block modal-header %}{% trans "Object Details" %}{% endblock %} {% block modal-header %}{% trans "Object Details" %}{% endblock %}
{% block modal-body %} {% block modal-body %}
<div class="info row-fluid detail"> <div class="info row detail">
<dl> <dl>
<dt>{% trans "Name" %}</dt> <dt>{% trans "Name" %}</dt>
<dd>{{ object.name }}</dd> <dd>{{ object.name }}</dd>
@ -22,5 +22,5 @@
{% endblock %} {% endblock %}
{% block modal-footer %} {% block modal-footer %}
<a href="{% url 'horizon:project:containers:index' %}" class="btn secondary cancel close">{% trans "Close" %}</a> <a href="{% url 'horizon:project:containers:index' %}" class="btn btn-default secondary cancel close">{% trans "Close" %}</a>
{% endblock %} {% endblock %}

View File

@ -25,5 +25,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" ng-disabled="updateForm.$invalid" value="{% trans "Update Object" %}" /> <input class="btn btn-primary pull-right" type="submit" ng-disabled="updateForm.$invalid" value="{% trans "Update Object" %}" />
<a href="{% url 'horizon:project:containers:index' container_name|add:'/' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:containers:index' container_name|add:'/' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -24,5 +24,5 @@
{% block modal-footer %} {% block modal-footer %}
<input class="btn btn-primary pull-right" type="submit" ng-disabled="uploadForm.$invalid || uploadForm.$pristine" value="{% trans "Upload Object" %}" /> <input class="btn btn-primary pull-right" type="submit" ng-disabled="uploadForm.$invalid || uploadForm.$pristine" value="{% trans "Upload Object" %}" />
<a href="{% url 'horizon:project:containers:index' container_name|add:'/' %}" class="btn secondary cancel close">{% trans "Cancel" %}</a> <a href="{% url 'horizon:project:containers:index' container_name|add:'/' %}" class="btn btn-default secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %} {% endblock %}

View File

@ -2,7 +2,7 @@
<h3>{% trans "Data Processing Plugin Overview" %}</h3> <h3>{% trans "Data Processing Plugin Overview" %}</h3>
<div class="status row-fluid detail"> <div class="status row detail">
<h4>{% trans "Info" %}</h4> <h4>{% trans "Info" %}</h4>
<hr class="header_rule"> <hr class="header_rule">
<dl> <dl>

View File

@ -7,8 +7,8 @@
{% endblock page_header %} {% endblock page_header %}
{% block main %} {% block main %}
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-sm-12">
{{ tab_group.render }} {{ tab_group.render }}
</div> </div>
</div> </div>

View File

@ -36,14 +36,16 @@ class LaunchLink(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Backup") verbose_name = _("Create Backup")
url = "horizon:project:database_backups:create" url = "horizon:project:database_backups:create"
classes = ("btn-launch", "ajax-modal") classes = ("ajax-modal", "btn-launch")
icon = "cloud-upload"
class RestoreLink(tables.LinkAction): class RestoreLink(tables.LinkAction):
name = "restore" name = "restore"
verbose_name = _("Restore Backup") verbose_name = _("Restore Backup")
url = "horizon:project:databases:launch" url = "horizon:project:databases:launch"
classes = ("btn-launch", "ajax-modal") classes = ("ajax-modal",)
icon = "cloud-upload"
def allowed(self, request, backup=None): def allowed(self, request, backup=None):
return backup.status == 'COMPLETED' return backup.status == 'COMPLETED'
@ -77,7 +79,8 @@ class DeleteBackup(tables.BatchAction):
action_past = _("Scheduled deletion of %(data_type)s") action_past = _("Scheduled deletion of %(data_type)s")
data_type_singular = _("Backup") data_type_singular = _("Backup")
data_type_plural = _("Backups") data_type_plural = _("Backups")
classes = ('btn-danger', 'btn-terminate') classes = ("ajax-modal",)
icon = "remove"
def action(self, request, obj_id): def action(self, request, obj_id):
api.trove.backup_delete(request, obj_id) api.trove.backup_delete(request, obj_id)

View File

@ -7,11 +7,11 @@
{% endblock page_header %} {% endblock page_header %}
{% block main %} {% block main %}
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-sm-12">
<h3>{% trans "Backup Overview" %}</h3> <h3>{% trans "Backup Overview" %}</h3>
<div class="status row-fluid detail"> <div class="status row detail">
<h4>{% trans "Info" %}</h4> <h4>{% trans "Info" %}</h4>
<hr class="header_rule"> <hr class="header_rule">
<dl> <dl>
@ -57,7 +57,7 @@
{% endif %} {% endif %}
{% if instance %} {% if instance %}
<div class="addresses row-fluid detail"> <div class="addresses row detail">
<h4>{% trans "Database Info" %}</h4> <h4>{% trans "Database Info" %}</h4>
<hr class="header_rule"> <hr class="header_rule">
<dl> <dl>

View File

@ -35,7 +35,8 @@ class TerminateInstance(tables.BatchAction):
action_past = _("Scheduled termination of %(data_type)s") action_past = _("Scheduled termination of %(data_type)s")
data_type_singular = _("Instance") data_type_singular = _("Instance")
data_type_plural = _("Instances") data_type_plural = _("Instances")
classes = ('btn-danger', 'btn-terminate') classes = ("ajax-modal",)
icon = "off"
def action(self, request, obj_id): def action(self, request, obj_id):
api.trove.instance_delete(request, obj_id) api.trove.instance_delete(request, obj_id)
@ -93,14 +94,16 @@ class LaunchLink(tables.LinkAction):
name = "launch" name = "launch"
verbose_name = _("Launch Instance") verbose_name = _("Launch Instance")
url = "horizon:project:databases:launch" url = "horizon:project:databases:launch"
classes = ("btn-launch", "ajax-modal") classes = ("ajax-modal", "btn-launch")
icon = "cloud-upload"
class CreateBackup(tables.LinkAction): class CreateBackup(tables.LinkAction):
name = "backup" name = "backup"
verbose_name = _("Create Backup") verbose_name = _("Create Backup")
url = "horizon:project:database_backups:create" url = "horizon:project:database_backups:create"
classes = ("ajax-modal", "btn-camera") classes = ("ajax-modal",)
icon = "camera"
def allowed(self, request, instance=None): def allowed(self, request, instance=None):
return (instance.status in ACTIVE_STATES and return (instance.status in ACTIVE_STATES and

View File

@ -2,7 +2,7 @@
<h3>{% trans "Instance Overview" %}</h3> <h3>{% trans "Instance Overview" %}</h3>
<div class="status row-fluid detail"> <div class="status row detail">
<h4>{% trans "Info" %}</h4> <h4>{% trans "Info" %}</h4>
<hr class="header_rule"> <hr class="header_rule">
<dl> <dl>
@ -40,3 +40,18 @@
{% block connection_info %} {% block connection_info %}
{% endblock %} {% endblock %}
<div class="addresses row detail">
<h4>{% trans "Connection Info" %}</h4>
<hr class="header_rule">
<dl>
{% with instance.host as host %}
<dt>{% trans "Host" %}</dt>
<dd>{{ host }}</dd>
<dt>{% trans "Database Port" %}</dt>
<dd>3306</dd> {# TODO: This should be a config #}
<dt>{% trans "Connection Examples" %}</dt>
<dd>mysql -h {{ host }} -u USERNAME -p</dd>
<dd>mysql://USERNAME:PASSWORD@{{ host }}:3306/DATABASE</dd>
{% endwith %}
</dl>
</div>

Some files were not shown because too many files have changed in this diff Show More