diff --git a/circle/dashboard/forms.py b/circle/dashboard/forms.py index 1b935dd..00cc3b1 100644 --- a/circle/dashboard/forms.py +++ b/circle/dashboard/forms.py @@ -39,8 +39,7 @@ from django.contrib.auth.forms import UserCreationForm as OrgUserCreationForm from django.forms.widgets import TextInput, HiddenInput from django.template import Context from django.template.loader import render_to_string -from django.utils.translation import ugettext as _ -from django.utils.translation import ugettext_lazy +from django.utils.translation import ugettext_lazy as _ from sizefield.widgets import FileSizeWidget from django.core.urlresolvers import reverse_lazy @@ -1142,9 +1141,17 @@ vm_search_choices = ( class VmListSearchForm(forms.Form): s = forms.CharField(widget=forms.TextInput(attrs={ 'class': "form-control input-tags", - 'placeholder': ugettext_lazy("Search...") + 'placeholder': _("Search...") })) stype = forms.ChoiceField(vm_search_choices, widget=forms.Select(attrs={ 'class': "btn btn-default input-tags", })) + + def __init__(self, *args, **kwargs): + super(VmListSearchForm, self).__init__(*args, **kwargs) + # set initial value, otherwise it would be overwritten by request.GET + if not self.data.get("stype"): + data = self.data.copy() + data['stype'] = 2 + self.data = data diff --git a/circle/dashboard/static/dashboard/dashboard.js b/circle/dashboard/static/dashboard/dashboard.js index db58574..a388416 100644 --- a/circle/dashboard/static/dashboard/dashboard.js +++ b/circle/dashboard/static/dashboard/dashboard.js @@ -258,14 +258,15 @@ $(function () { html += '<div class="list-group-item list-group-item-last">' + gettext("No result") + '</div>'; $("#dashboard-vm-list").html(html); $('.title-favourite').tooltip({'placement': 'right'}); + }); - // if there is only one result and ENTER is pressed redirect - if(e.keyCode == 13 && search_result.length == 1) { - window.location.href = "/dashboard/vm/" + search_result[0].pk + "/"; - } - if(e.keyCode == 13 && search_result.length > 1 && input.length > 0) { - window.location.href = "/dashboard/vm/list/?s=" + input + "&stype=2"; + $("#dashboard-vm-search-form").submit(function() { + var vm_list_items = $("#dashboard-vm-list .list-group-item"); + if(vm_list_items.length == 1) { + window.location.href = vm_list_items.first().prop("href"); + return false; } + return true; }); /* search for nodes */ diff --git a/circle/dashboard/templates/dashboard/index-vm.html b/circle/dashboard/templates/dashboard/index-vm.html index 6b93549..66622e5 100644 --- a/circle/dashboard/templates/dashboard/index-vm.html +++ b/circle/dashboard/templates/dashboard/index-vm.html @@ -46,12 +46,15 @@ </style> <div href="#" class="list-group-item list-group-footer"> <div class="row"> - <div class="col-sm-6 col-xs-6 input-group input-group-sm"> - <input id="dashboard-vm-search-input" type="text" class="form-control" placeholder="{% trans "Search..." %}" /> - <div class="input-group-btn"> - <button type="submit" class="form-control btn btn-primary"><i class="fa fa-search"></i></button> + <form action="{% url "dashboard.views.vm-list" %}" method="GET" id="dashboard-vm-search-form"> + <div class="col-sm-6 col-xs-6 input-group input-group-sm"> + <input id="dashboard-vm-search-input" type="text" class="form-control" name="s" + placeholder="{% trans "Search..." %}" /> + <div class="input-group-btn"> + <button type="submit" class="form-control btn btn-primary"><i class="fa fa-search"></i></button> + </div> </div> - </div> + </form> <div class="col-sm-6 text-right"> <a class="btn btn-primary btn-xs" href="{% url "dashboard.views.vm-list" %}"> <i class="fa fa-chevron-circle-right"></i> diff --git a/circle/dashboard/templates/dashboard/vm-list.html b/circle/dashboard/templates/dashboard/vm-list.html index fdce8d9..be27eb1 100644 --- a/circle/dashboard/templates/dashboard/vm-list.html +++ b/circle/dashboard/templates/dashboard/vm-list.html @@ -31,6 +31,7 @@ <div class="panel-body vm-list-group-control"> <p> <strong>{% trans "Group actions" %}</strong> + <!-- <button id="vm-list-group-select-all" class="btn btn-info btn-xs">{% trans "Select all" %}</button> <a href="#" class="btn btn-default btn-xs" title="{% trans "Migrate" %}" disabled> <i class="fa fa-truck"></i> @@ -41,6 +42,7 @@ <a href="#" class="btn btn-default btn-xs" title="{% trans "Shutdown" %}" disabled> <i class="fa fa-power-off"></i> </a> + --> <a title="{% trans "Destroy" %}" id="vm-list-group-delete" disabled href="#" class="btn btn-danger btn-xs" disabled> <i class="fa fa-times"></i> </a> diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py index 93ae865..d008a8b 100644 --- a/circle/dashboard/views.py +++ b/circle/dashboard/views.py @@ -1554,7 +1554,7 @@ class VmList(LoginRequiredMixin, FilterMixin, ListView): def get_context_data(self, *args, **kwargs): context = super(VmList, self).get_context_data(*args, **kwargs) - context['search_form'] = VmListSearchForm(self.request.GET) + context['search_form'] = self.search_form return context def get(self, *args, **kwargs): @@ -1576,6 +1576,8 @@ class VmList(LoginRequiredMixin, FilterMixin, ListView): content_type="application/json", ) else: + self.search_form = VmListSearchForm(self.request.GET) + self.search_form.full_clean() return super(VmList, self).get(*args, **kwargs) def get_queryset(self): @@ -1597,10 +1599,11 @@ class VmList(LoginRequiredMixin, FilterMixin, ListView): ).distinct() def create_default_queryset(self): - stype = self.request.GET.get("stype", "0") - superuser = stype == "2" - shared = stype == "1" - level = "owner" if stype == "0" else "user" + cleaned_data = self.search_form.cleaned_data + stype = cleaned_data.get('stype', 2) + superuser = stype == 2 + shared = stype == 1 + level = "owner" if stype == 0 else "user" queryset = Instance.get_objects_with_level( level, self.request.user, group_also=shared, disregard_superuser=not superuser,