diff --git a/euscanwww/djeuscan/tasks.py b/euscanwww/djeuscan/tasks.py index 897f9b6..290df65 100644 --- a/euscanwww/djeuscan/tasks.py +++ b/euscanwww/djeuscan/tasks.py @@ -58,7 +58,7 @@ def _run_in_chunks(task, iterable, n=32): ]) result = job.apply_async() # TODO: understand why this causes timeout - output.extend(list(result.join(timeout=3600))) + #output.extend(list(result.join(timeout=3600))) return output diff --git a/euscanwww/djeuscan/templates/_base.html b/euscanwww/djeuscan/templates/_base.html index afd9324..54ea007 100644 --- a/euscanwww/djeuscan/templates/_base.html +++ b/euscanwww/djeuscan/templates/_base.html @@ -45,7 +45,7 @@
  • Logout
  • diff --git a/euscanwww/djeuscan/templates/euscan/_categories_table.html b/euscanwww/djeuscan/templates/euscan/_categories_table.html new file mode 100644 index 0000000..f40e404 --- /dev/null +++ b/euscanwww/djeuscan/templates/euscan/_categories_table.html @@ -0,0 +1,32 @@ +{% load url from future %} +{% load euscan %} + + + + + + + + + {% if extras %} + + {% endif %} + + + {% for category in categories %} + + + {% package_cols category %} + {% if extras %} + + {% endif %} + + {% endfor %} + +
    CategorygentoooverlaysupstreamGraphs
    + {{ category.category }} + {% package_bar category %} + + + +
    diff --git a/euscanwww/djeuscan/templates/euscan/_herds_table.html b/euscanwww/djeuscan/templates/euscan/_herds_table.html new file mode 100644 index 0000000..ae218a6 --- /dev/null +++ b/euscanwww/djeuscan/templates/euscan/_herds_table.html @@ -0,0 +1,34 @@ +{% load url from future %} +{% load euscan %} + + + + + + + + + {% if extras %} + + {% endif %} + + + {% for herd in herds %} + + + {% package_cols herd %} + {% if extras %} + + {% endif %} + + {% endfor %} + +
    HerdgentoooverlaysupstreamGraphs
    + + {{ herd.herds__herd }} + + {% package_bar herd %} + + + +
    diff --git a/euscanwww/djeuscan/templates/euscan/_maintainers_table.html b/euscanwww/djeuscan/templates/euscan/_maintainers_table.html new file mode 100644 index 0000000..f7b1412 --- /dev/null +++ b/euscanwww/djeuscan/templates/euscan/_maintainers_table.html @@ -0,0 +1,40 @@ +{% load url from future %} +{% load euscan %} + + + + + + + + + {% if extras %} + + {% endif %} + + + {% for maintainer in maintainers %} + + + {% package_cols maintainer %} + + {% if extras %} + + {% endif %} + + + {% endfor %} + +
    MaintainergentoooverlaysupstreamGraphs
    + + {% if maintainer.maintainers__name != maintainer.maintainers__email %} + {{ maintainer.maintainers__name }} <{{ maintainer.maintainers__email }}> + {% else %} + {{ maintainer.maintainers__name }} + {% endif %} + + {% package_bar maintainer %} + + + +
    diff --git a/euscanwww/djeuscan/templates/euscan/_package_cols.html b/euscanwww/djeuscan/templates/euscan/_package_cols.html index a3b6942..5140701 100644 --- a/euscanwww/djeuscan/templates/euscan/_package_cols.html +++ b/euscanwww/djeuscan/templates/euscan/_package_cols.html @@ -1,4 +1,4 @@ -{% load packages %} +{% load euscan %} {% load mul %} {% load sub %} {% load div %} diff --git a/euscanwww/djeuscan/templates/euscan/_packages.html b/euscanwww/djeuscan/templates/euscan/_packages.html index 58db056..6df68c9 100644 --- a/euscanwww/djeuscan/templates/euscan/_packages.html +++ b/euscanwww/djeuscan/templates/euscan/_packages.html @@ -1,4 +1,4 @@ -{% load packages %} +{% load euscan %} {% load sub %} {% load div %} {% load mul %} diff --git a/euscanwww/djeuscan/templates/euscan/accounts/categories.html b/euscanwww/djeuscan/templates/euscan/accounts/categories.html index a2bd6fa..3c823f3 100644 --- a/euscanwww/djeuscan/templates/euscan/accounts/categories.html +++ b/euscanwww/djeuscan/templates/euscan/accounts/categories.html @@ -1,11 +1,15 @@ -{% extends "_base.html" %} +{% extends "euscan/_datatable.html" %} {% load url from future %} +{% load euscan %} {% block title %} - {{ block.super }} - My categories + {{ block.super }} - Watched categories {% endblock %} {% block content %} -

    Welcome {{ user }}

    +

    Watched categories

    + + {% categories_table categories %} + {% endblock %} diff --git a/euscanwww/djeuscan/templates/euscan/accounts/herds.html b/euscanwww/djeuscan/templates/euscan/accounts/herds.html index d77aa03..d55c034 100644 --- a/euscanwww/djeuscan/templates/euscan/accounts/herds.html +++ b/euscanwww/djeuscan/templates/euscan/accounts/herds.html @@ -1,11 +1,14 @@ -{% extends "_base.html" %} +{% extends "euscan/_datatable.html" %} {% load url from future %} +{% load euscan %} {% block title %} - {{ block.super }} - My herds + {{ block.super }} - Watched herds {% endblock %} {% block content %} -

    Welcome {{ user }}

    +

    Watched herds

    + + {% herds_table herds %} {% endblock %} diff --git a/euscanwww/djeuscan/templates/euscan/accounts/maintainers.html b/euscanwww/djeuscan/templates/euscan/accounts/maintainers.html index 1a907b9..06cfc1f 100644 --- a/euscanwww/djeuscan/templates/euscan/accounts/maintainers.html +++ b/euscanwww/djeuscan/templates/euscan/accounts/maintainers.html @@ -1,11 +1,14 @@ -{% extends "_base.html" %} +{% extends "euscan/_datatable.html" %} {% load url from future %} +{% load euscan %} {% block title %} - {{ block.super }} - My maintainer profiles + {{ block.super }} - Watched maintainers {% endblock %} {% block content %} -

    Welcome {{ user }}

    +

    Watched maintainers

    + + {% maintainers_table maintainers %} {% endblock %} diff --git a/euscanwww/djeuscan/templates/euscan/accounts/packages.html b/euscanwww/djeuscan/templates/euscan/accounts/packages.html index 7c847f6..bd87b5d 100644 --- a/euscanwww/djeuscan/templates/euscan/accounts/packages.html +++ b/euscanwww/djeuscan/templates/euscan/accounts/packages.html @@ -1,15 +1,15 @@ {% extends "euscan/_datatable.html" %} {% load url from future %} -{% load packages %} +{% load euscan %} {% block title %} - {{ block.super }} - My packages + {{ block.super }} - Watched packages {% endblock %} {% block content %} -

    My Packages

    +

    Watched packages

    {% packages packages %} diff --git a/euscanwww/djeuscan/templates/euscan/categories.html b/euscanwww/djeuscan/templates/euscan/categories.html index 9b0a3eb..1887627 100644 --- a/euscanwww/djeuscan/templates/euscan/categories.html +++ b/euscanwww/djeuscan/templates/euscan/categories.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% load url from future %} {% block title %} @@ -10,33 +10,6 @@ {% block content %}

    Categories

    - - - - - - - - {% if request.GET.extras %} - - {% endif %} - - - {% for category in categories %} - - - {% package_cols category %} - {% if request.GET.extras %} - - {% endif %} - - {% endfor %} - -
    CategorygentoooverlaysupstreamGraphs
    - {{ category.category }} - {% package_bar category %} - - - -
    +{% categories_table categories request.GET.extras %} + {% endblock %} diff --git a/euscanwww/djeuscan/templates/euscan/category.html b/euscanwww/djeuscan/templates/euscan/category.html index 25cf7f7..edfd4c5 100644 --- a/euscanwww/djeuscan/templates/euscan/category.html +++ b/euscanwww/djeuscan/templates/euscan/category.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% load url from future %} {% block title %} diff --git a/euscanwww/djeuscan/templates/euscan/herd.html b/euscanwww/djeuscan/templates/euscan/herd.html index a7470ef..56a7488 100644 --- a/euscanwww/djeuscan/templates/euscan/herd.html +++ b/euscanwww/djeuscan/templates/euscan/herd.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% load url from future %} {% block title %} diff --git a/euscanwww/djeuscan/templates/euscan/herds.html b/euscanwww/djeuscan/templates/euscan/herds.html index 48eb591..ef11932 100644 --- a/euscanwww/djeuscan/templates/euscan/herds.html +++ b/euscanwww/djeuscan/templates/euscan/herds.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% load url from future %} {% block title %} @@ -9,35 +9,7 @@ {% block content %}

    Herds

    - - - - - - - - {% if request.GET.extras %} - - {% endif %} - - - {% for herd in herds %} - - - {% package_cols herd %} - {% if request.GET.extras %} - - {% endif %} - - {% endfor %} - -
    HerdgentoooverlaysupstreamGraphs
    - - {{ herd.herds__herd }} - - {% package_bar herd %} - - - -
    + +{% herds_table herds request.GET.extras %} + {% endblock %} diff --git a/euscanwww/djeuscan/templates/euscan/maintainer.html b/euscanwww/djeuscan/templates/euscan/maintainer.html index 5630209..b4aff14 100644 --- a/euscanwww/djeuscan/templates/euscan/maintainer.html +++ b/euscanwww/djeuscan/templates/euscan/maintainer.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% load url from future %} {% block title %} diff --git a/euscanwww/djeuscan/templates/euscan/maintainers.html b/euscanwww/djeuscan/templates/euscan/maintainers.html index ba0cc32..8c2e6d5 100644 --- a/euscanwww/djeuscan/templates/euscan/maintainers.html +++ b/euscanwww/djeuscan/templates/euscan/maintainers.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% load url from future %} {% block title %} @@ -9,41 +9,7 @@ {% block content %}

    Maintainers

    - - - - - - - - {% if request.GET.extras %} - - {% endif %} - - - {% for maintainer in maintainers %} - - - {% package_cols maintainer %} - {% if request.GET.extras %} - - {% endif %} +{% maintainers_table maintainers request.GET.extras %} - - {% endfor %} - -
    MaintainergentoooverlaysupstreamGraphs
    - - {% if maintainer.maintainers__name != maintainer.maintainers__email %} - {{ maintainer.maintainers__name }} <{{ maintainer.maintainers__email }}> - {% else %} - {{ maintainer.maintainers__name }} - {% endif %} - - {% package_bar maintainer %} - - - -
    {% endblock %} diff --git a/euscanwww/djeuscan/templates/euscan/overlay.html b/euscanwww/djeuscan/templates/euscan/overlay.html index b6e105c..c0b2a92 100644 --- a/euscanwww/djeuscan/templates/euscan/overlay.html +++ b/euscanwww/djeuscan/templates/euscan/overlay.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% block title %} {{ block.super }} - Overlay: {{ overlay }} diff --git a/euscanwww/djeuscan/templates/euscan/overlays.html b/euscanwww/djeuscan/templates/euscan/overlays.html index 2efb73f..51c6a7a 100644 --- a/euscanwww/djeuscan/templates/euscan/overlays.html +++ b/euscanwww/djeuscan/templates/euscan/overlays.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% load url from future %} {% block title %} diff --git a/euscanwww/djeuscan/templates/euscan/package.html b/euscanwww/djeuscan/templates/euscan/package.html index 6eb500f..7b3eaec 100644 --- a/euscanwww/djeuscan/templates/euscan/package.html +++ b/euscanwww/djeuscan/templates/euscan/package.html @@ -31,9 +31,12 @@ - + {% endif %}
    @@ -151,7 +154,15 @@ $(".favourite-button").click(function() { $.post($(this).data("url"), function() { - alert("Favourited!"); + $(".unfavourite-button").removeClass("hide"); + $(".favourite-button").addClass("hide"); + }); + }); + + $(".unfavourite-button").click(function() { + $.post($(this).data("url"), function() { + $(".favourite-button").removeClass("hide"); + $(".unfavourite-button").addClass("hide"); }); }); diff --git a/euscanwww/djeuscan/templates/euscan/world_scan.html b/euscanwww/djeuscan/templates/euscan/world_scan.html index ebb6561..b16a850 100644 --- a/euscanwww/djeuscan/templates/euscan/world_scan.html +++ b/euscanwww/djeuscan/templates/euscan/world_scan.html @@ -1,6 +1,6 @@ {% extends "euscan/_datatable.html" %} -{% load packages %} +{% load euscan %} {% block title %} {{ block.super }} - World Scan diff --git a/euscanwww/djeuscan/templatetags/euscan.py b/euscanwww/djeuscan/templatetags/euscan.py new file mode 100644 index 0000000..41daf4b --- /dev/null +++ b/euscanwww/djeuscan/templatetags/euscan.py @@ -0,0 +1,49 @@ +from django import template +from django.conf import settings + +register = template.Library() + + +@register.inclusion_tag('euscan/_packages.html', takes_context=True) +def packages(context, pkgs): + context['packages'] = pkgs + return context + + +@register.inclusion_tag('euscan/_package_cols.html', takes_context=True) +def package_cols(context, infos): + context['infos'] = infos + return context + + +@register.inclusion_tag('euscan/_package_bar.html', takes_context=True) +def package_bar(context, infos): + context['infos'] = infos + return context + + +@register.inclusion_tag('euscan/_categories_table.html') +def categories_table(categories, extras=False): + return { + "categories": categories, + "extras": extras, + "STATIC_URL": settings.STATIC_URL, + } + + +@register.inclusion_tag('euscan/_herds_table.html') +def herds_table(herds, extras=False): + return { + "herds": herds, + "extras": extras, + "STATIC_URL": settings.STATIC_URL, + } + + +@register.inclusion_tag('euscan/_maintainers_table.html') +def maintainers_table(maintainers, extras=False): + return { + "maintainers": maintainers, + "extras": extras, + "STATIC_URL": settings.STATIC_URL, + } diff --git a/euscanwww/djeuscan/templatetags/packages.py b/euscanwww/djeuscan/templatetags/packages.py deleted file mode 100644 index 91e8af3..0000000 --- a/euscanwww/djeuscan/templatetags/packages.py +++ /dev/null @@ -1,21 +0,0 @@ -from django import template - -register = template.Library() - - -@register.inclusion_tag('euscan/_packages.html', takes_context=True) -def packages(context, pkgs): - context['packages'] = pkgs - return context - - -@register.inclusion_tag('euscan/_package_cols.html', takes_context=True) -def package_cols(context, infos): - context['infos'] = infos - return context - - -@register.inclusion_tag('euscan/_package_bar.html', takes_context=True) -def package_bar(context, infos): - context['infos'] = infos - return context diff --git a/euscanwww/djeuscan/urls.py b/euscanwww/djeuscan/urls.py index 17063b6..2fad421 100644 --- a/euscanwww/djeuscan/urls.py +++ b/euscanwww/djeuscan/urls.py @@ -18,6 +18,9 @@ package_patterns = patterns('djeuscan.views', 'package', name="package"), url(r'^(?P[\w+][\w+.-]*)/(?P[\w+][\w+.-]*)/favourite$', 'favourite_package', name="favourite_package"), + url((r'^(?P[\w+][\w+.-]*)/(?P[\w+][\w+.-]*)/' + 'unfavourite$'), + 'unfavourite_package', name="unfavourite_package"), ) categories_patterns = patterns('djeuscan.views', @@ -29,6 +32,8 @@ categories_patterns = patterns('djeuscan.views', 'chart_category', name="chart_category"), url(r'^(?P[\w+][\w+.-]*)/favourite$', 'favourite_category', name="favourite_category"), + url(r'^(?P[\w+][\w+.-]*)/unfavourite$', + 'unfavourite_category', name="unfavourite_category"), url(r'^$', 'categories', name="categories"), ) @@ -39,6 +44,8 @@ herds_patterns = patterns('djeuscan.views', 'chart_herd', name="chart_herd"), url(r'^(?P[\@\{\}\w+.-]*)/favourite$', 'favourite_herd', name="favourite_herd"), + url(r'^(?P[\@\{\}\w+.-]*)/unfavourite$', 'unfavourite_herd', + name="unfavourite_herd"), url(r'^$', 'herds', name="herds"), ) @@ -50,6 +57,8 @@ maintainers_patterns = patterns('djeuscan.views', 'chart_maintainer', name="chart_maintainer"), url(r'^(?P\d+)/favourite$', 'favourite_maintainer', name="favourite_maintainer"), + url(r'^(?P\d+)/unfavourite$', + 'unfavourite_maintainer', name="unfavourite_maintainer"), url(r'^$', 'maintainers', name="maintainers"), ) diff --git a/euscanwww/djeuscan/views.py b/euscanwww/djeuscan/views.py index 7a34271..730dcf0 100644 --- a/euscanwww/djeuscan/views.py +++ b/euscanwww/djeuscan/views.py @@ -167,13 +167,23 @@ def package(request, category, package): except EuscanResult.DoesNotExist: last_scan = None + favourited = False + if request.user.is_authenticated(): + try: + PackageAssociation.objects.get(user=request.user, package=package) + except PackageAssociation.DoesNotExist: + pass + else: + favourited = True + return { 'package': package, 'packaged': packaged, 'upstream': upstream, 'log': log, 'vlog': vlog, - 'last_scan': last_scan + 'last_scan': last_scan, + 'favourited': favourited, } @@ -299,19 +309,25 @@ def accounts_index(request): @login_required @render_to('euscan/accounts/categories.html') def accounts_categories(request): - return {} + categories = [obj.category for obj in + CategoryAssociation.objects.filter(user=request.user)] + return {"categories": categories} @login_required @render_to('euscan/accounts/herds.html') def accounts_herds(request): - return {} + herds = [obj.herd for obj in + HerdAssociation.objects.filter(user=request.user)] + return {"herds": herds} @login_required @render_to('euscan/accounts/maintainers.html') def accounts_maintainers(request): - return {} + maintainers = [obj.maintainer for obj in + MaintainerAssociation.objects.filter(user=request.user)] + return {"maintainers": maintainers} @login_required @@ -333,6 +349,18 @@ def favourite_package(request, category, package): return {"success": created} +@login_required +@require_POST +@ajax_request +def unfavourite_package(request, category, package): + package = get_object_or_404(Package, category=category, name=package) + obj = get_object_or_404( + PackageAssociation, package=package, user=request.user + ) + obj.delete() + return {"success": True} + + @login_required @require_POST @ajax_request @@ -344,6 +372,18 @@ def favourite_herd(request, herd): return {"success": created} +@login_required +@require_POST +@ajax_request +def unfavourite_herd(request, herd): + herd = get_object_or_404(Herd, herd=herd) + obj = get_object_or_404( + HerdAssociation, herd=herd, user=request.user + ) + obj.delete() + return {"success": True} + + @login_required @require_POST @ajax_request @@ -355,6 +395,18 @@ def favourite_maintainer(request, maintainer_id): return {"success": created} +@login_required +@require_POST +@ajax_request +def unfavourite_maintainer(request, maintainer_id): + maintainer = get_object_or_404(Maintainer, pk=maintainer_id) + obj = get_object_or_404( + MaintainerAssociation, maintainer=maintainer, user=request.user + ) + obj.delete() + return {"success": True} + + @login_required @require_POST @ajax_request @@ -368,3 +420,14 @@ def favourite_category(request, category): user=request.user, category=category ) return {"success": created} + + +@login_required +@require_POST +@ajax_request +def unfavourite_category(request, category): + obj = get_object_or_404( + CategoryAssociation, user=request.user, category=category + ) + obj.delete() + return {"success": True} diff --git a/euscanwww/htdocs/css/style.css b/euscanwww/htdocs/css/style.css index 62d6cda..556f02f 100644 --- a/euscanwww/htdocs/css/style.css +++ b/euscanwww/htdocs/css/style.css @@ -119,68 +119,66 @@ a:hover, a:active /* code, pre{ - background-color:transparent; - font-family:"Courier New",Courier,monospace; - font-size:small; + background-color:transparent; + font-family:"Courier New",Courier,monospace; + font-size:small; } */ a{ - color: #3F4C66; + color: #3F4C66; } a:link, a:visited, a:active { - color: #3F4C66; - text-decoration: none; + color: #3F4C66; + text-decoration: none; } a:hover { - color: #4C5C7B; - text-decoration: underline; + color: #4C5C7B; + text-decoration: underline; } abbr:hover { - text-decoration: underline; + text-decoration: underline; } pre{ - border-left:5px solid; - padding:0.5em 1em; - margin-left:2em; + border-left:5px solid; + padding:0.5em 1em; + margin-left:2em; } dt { - font-weight: bold; + font-weight: bold; } dd { - border-left: 1px solid #ccc; - margin: 5px; - padding: 5px; + border-left: 1px solid #ccc; + margin: 5px; + padding: 5px; } h1 { - color: #000; - width: 20em; - margin-left: auto; - margin-right: auto; + color: #000; + width: 20em; + margin-left: auto; + margin-right: auto; } .ok { - color:#15B100; + color:#15B100; } -hr -{ - margin: 0.3em 1em 0.3em 1em; - height: 1px; - border: #bcbcbc dashed; - border-width: 0 0 1px 0; - } +hr { + margin: 0.3em 1em 0.3em 1em; + height: 1px; + border: #bcbcbc dashed; + border-width: 0 0 1px 0; +} -table -{ +table { max-width: 60em; /* width: 50%; */ border-collapse: collapse; @@ -191,27 +189,24 @@ table text-align: left; } -td -{ - vertical-align: top; - } +td { + vertical-align: top; +} -th -{ - font-size: 0.8em; - text-align: center; - border-bottom: 3px solid; - } +th { + font-size: 0.8em; + text-align: center; + border-bottom: 3px solid; +} -#footer -{ +#footer { background: #8076A1; font-size: 0.8em; width: 100%; margin: 0; margin-top: 10px; color: #FFF; - } +} #footer p { text-align: right; @@ -220,33 +215,31 @@ th .err,.ok,.inf { - margin: 5px; - margin-left: auto; - margin-right: auto; - width: 70%; - font-weight:bold; - border: 1px dotted #5682AD; - } + margin: 5px; + margin-left: auto; + margin-right: auto; + width: 70%; + font-weight:bold; + border: 1px dotted #5682AD; +} .added { - color: #262; + color: #262; } .removed { - color: #F00; + color: #F00; } -.err -{ - border-color: #F00; - color: #F00; - } +.err { + border-color: #F00; + color: #F00; +} -.ok -{ - border-color: #262; - color: #262; - } +.ok { + border-color: #262; + color: #262; +} .logo { float: right; @@ -284,3 +277,7 @@ th max-height: 100pt; overflow: auto; } + +.hide { + display: none; +}