public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Slava Bacherikov" <slava@bacherikov.org.ua>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/templates/
Date: Tue, 10 Jul 2012 23:13:59 +0000 (UTC)	[thread overview]
Message-ID: <1341863637.ccf2f1130d5b6f42235f56046de01a0baa7bb5cc.bacher09@gentoo> (raw)

commit:     ccf2f1130d5b6f42235f56046de01a0baa7bb5cc
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Jul  9 19:53:57 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Jul  9 19:53:57 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=ccf2f113

Add simple filtering view

---
 gpackages/apps/packages/forms.py        |   35 ++++++++++++++++++++++++++++++-
 gpackages/apps/packages/urls.py         |    3 +-
 gpackages/apps/packages/views.py        |   28 +++++++++++++++++++++++-
 gpackages/templates/base.html           |    1 +
 gpackages/templates/filtering_view.html |   19 ++++++++++++++++
 5 files changed, 82 insertions(+), 4 deletions(-)

diff --git a/gpackages/apps/packages/forms.py b/gpackages/apps/packages/forms.py
index 39dab08..974eb63 100644
--- a/gpackages/apps/packages/forms.py
+++ b/gpackages/apps/packages/forms.py
@@ -1,5 +1,6 @@
 from django import forms
-from .models import ArchesModel
+from .models import ArchesModel, RepositoryModel, CategoryModel, HerdsModel, \
+                    UseFlagModel, MaintainerModel, LicenseModel
 from .widgets import DivCheckboxSelectMultiple
 
 # Need rerun if database are empty
@@ -11,3 +12,35 @@ class ArchChoiceForm(forms.Form):
             widget = DivCheckboxSelectMultiple,
             #widget = forms.CheckboxSelectMultiple(attrs = {'class': 'inline checkbox'}),
             choices = arches)
+
+class FilteringForm(forms.Form):
+    def __init__(self, *args, **kwargs):
+        super(FilteringForm, self).__init__(*args, **kwargs)
+        repos = RepositoryModel.objects.all().order_by('name'). \
+            values_list('name', 'name')
+
+        categories = CategoryModel.objects.all().order_by('category'). \
+            values_list('category', 'category')
+
+        herds = HerdsModel.objects.all().order_by('name'). \
+            values_list('name','name')
+
+        uses = UseFlagModel.objects.all().order_by('name'). \
+            values_list('name', 'name')
+
+        #maintainers = MaintainerModel.all().order_by('email'). \
+        #    values_list('pk', 'email')
+
+        licenses = LicenseModel.objects.all().order_by('name'). \
+            values_list('name', 'name')
+        
+        names = ['repos', 'categories', 'herds', 'uses', 'licenses']
+        values = [repos, categories, herds, uses, licenses]
+        for k, v in zip(names, values):
+            self.fields[k].choices = v
+
+    repos = forms.MultipleChoiceField(required = False)
+    categories = forms.MultipleChoiceField(required = False)
+    herds = forms.MultipleChoiceField(required = False)
+    uses = forms.MultipleChoiceField(required = False)
+    licenses = forms.MultipleChoiceField(required = False)

diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/urls.py
index a8e4cab..d7ebf49 100644
--- a/gpackages/apps/packages/urls.py
+++ b/gpackages/apps/packages/urls.py
@@ -4,7 +4,7 @@ from views import CategoriesListView, HerdsListView, MaintainersListView, \
                   PackagesListsView, PackageDetailView, EbuildDetailView, \
                   GlobalUseListView, NewsListView, NewsDetailView, \
                   LicenseDetailView, ArchChoiceView, LicensesListView, \
-                  LocalUseListView
+                  LocalUseListView, FilteringView
 
 urlpatterns = patterns('',
     url(r'^categories/$', CategoriesListView.as_view(), name = 'categories'),
@@ -29,4 +29,5 @@ urlpatterns = patterns('',
     url(r'^license/(?P<slug>[^/]+)/$', LicenseDetailView.as_view(), name = 'license'),
     url(r'^arches/$', ArchChoiceView.as_view(), name = 'archchoice'),
     url(r'^licenses/$', LicensesListView.as_view(), name = 'licenses'),
+    url(r'^filter/$', FilteringView.as_view(), name = 'filter'),
 )

diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py
index a52e3fa..ad1bffa 100644
--- a/gpackages/apps/packages/views.py
+++ b/gpackages/apps/packages/views.py
@@ -5,7 +5,8 @@ from .models import CategoryModel, HerdsModel, MaintainerModel, \
                     RepositoryModel, LicenseGroupModel, EbuildModel, \
                     PackageModel, UseFlagModel, PortageNewsModel, \
                     UseFlagDescriptionModel, LicenseModel
-from .forms import ArchChoiceForm
+from .forms import ArchChoiceForm, FilteringForm
+from django.core.urlresolvers import reverse
 
 from django.shortcuts import get_object_or_404
 from package_info.parse_cp import EbuildParseCPVR, PackageParseCPR
@@ -115,7 +116,7 @@ class PackagesListsView(MultipleFilterListViewMixin, ContextArchListView):
                       'rand':'?', # it slow
                       None: '-updated_datetime'
                     }
-    allowed_many = {'repo': 5, 'use' : 3}
+    allowed_many = {'repo': 5, 'use' : 3, 'herd': 4, 'category': 4, 'license': 3}
 
     paginate_by = 40
     extra_context = {'page_name': 'Packages', 'arches': arches}
@@ -221,3 +222,26 @@ class ArchChoiceView(ContextView, ArchesViewMixin, FormView):
         # arches_str = ','.join(arches)
         self.request.session['arches'] = arches
         return super(ArchChoiceView, self).form_valid(form)
+
+class FilteringView(FormView):
+    form_class = FilteringForm
+    template_name = 'filtering_view.html'
+    success_url = '/'
+    params_dict = { 'repos': 'repo',
+                    'herds': 'herd',
+                    'categories': 'category',
+                    'licenses': 'license',
+                    'uses': 'use'
+                  }
+
+    def form_valid(self, form):
+        self.form_data = form.cleaned_data
+        return super(FilteringView, self).form_valid(form)
+
+    def get_success_url(self):
+        dct = {}
+        for k, v in self.params_dict.iteritems():
+            vv = self.form_data[k]
+            if vv:
+                dct[v] = ','.join(vv)
+        return reverse('packages', kwargs = dct)

diff --git a/gpackages/templates/base.html b/gpackages/templates/base.html
index 2f3c79a..cd90352 100644
--- a/gpackages/templates/base.html
+++ b/gpackages/templates/base.html
@@ -116,6 +116,7 @@
                             {% active_link 'local_uses' 'Local Use Flags' %}
                             {% active_link 'archchoice' 'Select Arches' %}
                             {% active_link 'licenses' 'Licenses' %}
+                            {% active_link 'filter' 'Filter' %}
                         </ul>
                        </div>
                        {% recent_ebuilds %}

diff --git a/gpackages/templates/filtering_view.html b/gpackages/templates/filtering_view.html
new file mode 100644
index 0000000..d7a2f14
--- /dev/null
+++ b/gpackages/templates/filtering_view.html
@@ -0,0 +1,19 @@
+{% extends 'base.html' %}
+
+{% block content %}
+<div class="filter">
+<form action="./" method="post" enctype="multipart/form-data">{% csrf_token %}
+   {{ form.as_ul }} <br />
+    <input type="submit" value="Submit" />
+</form>
+</div>
+{% endblock content %}
+
+{% block scripts %}
+    {{ block.super }}
+    <link href="{{ STATIC_URL }}css/chosen.css" rel="stylesheet">
+    <script src="{{ STATIC_URL }}js/chosen.jquery.js"></script>
+    <script type="text/javascript" charset="utf-8">
+        $('select').chosen(); // :)
+    </script>
+{% endblock scripts %}



             reply	other threads:[~2012-07-10 23:14 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-10 23:13 Slava Bacherikov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-08-20 13:03 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/templates/ Slava Bacherikov
2012-07-19 23:50 Slava Bacherikov
2012-07-19 23:50 Slava Bacherikov
2012-07-12 22:16 Slava Bacherikov
2012-07-12 22:16 Slava Bacherikov
2012-07-08 19:54 Slava Bacherikov
2012-07-08 19:54 Slava Bacherikov
2012-07-08 19:54 Slava Bacherikov
2012-07-06 23:09 Slava Bacherikov
2012-07-06 23:09 Slava Bacherikov
2012-07-04 22:13 Slava Bacherikov
2012-07-02 22:25 Slava Bacherikov
2012-06-30 21:02 Slava Bacherikov
2012-06-30 21:02 Slava Bacherikov
2012-06-30  0:22 Slava Bacherikov
2012-06-29 19:25 Slava Bacherikov
2012-06-28 23:59 Slava Bacherikov
2012-06-27 22:52 Slava Bacherikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1341863637.ccf2f1130d5b6f42235f56046de01a0baa7bb5cc.bacher09@gentoo \
    --to=slava@bacherikov.org.ua \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox