mirror of
git://git.yoctoproject.org/layerindex-web.git
synced 2025-07-19 12:29:02 +02:00
Navigation improvements
* Drop the front page - this just gets in the way. Redirect to the layers list instead. This has meant adding a touch more text to the about page and adding the FAQ link to the footer. * Use a separate navbar to hold the branch selector and the main top-level pages (Layers, Recipes, Machines) instead of tabs * All pages depending on a branch selection are now under branch/<branchname>/ so we don't need to have the branch selection on every page. * Use breadcrumbs on recipe detail and layer detail pages instead of tabs * Add title to recipe detail page Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
parent
97361ae37e
commit
1643aef67d
2
TODO
2
TODO
|
@ -4,9 +4,7 @@ TODO:
|
|||
* Document macros for URL fields
|
||||
|
||||
Later:
|
||||
* Breadcrumbs / fix tab navigation?
|
||||
* Ability for reviewers to comment before publishing a layer?
|
||||
* Add link to the all layers and all recipes tables from the layer details page?
|
||||
* Prevent SMTP failures from breaking submission process
|
||||
* All-branch search/results so you can see version availability of recipes in all branches at once?
|
||||
* Rawrecipes branch support
|
||||
|
|
|
@ -7,12 +7,8 @@
|
|||
from layerindex.models import Branch, LayerItem
|
||||
|
||||
def layerindex_context(request):
|
||||
current_branch = request.session.get('branch', None)
|
||||
if not current_branch:
|
||||
current_branch = 'master'
|
||||
return {
|
||||
'all_branches': Branch.objects.exclude(name='oe-classic').order_by('sort_priority'),
|
||||
'current_branch': current_branch,
|
||||
'unpublished_count': LayerItem.objects.filter(status='N').count(),
|
||||
'oe_classic': Branch.objects.filter(name='oe-classic')
|
||||
}
|
|
@ -96,7 +96,7 @@ class LayerItem(models.Model):
|
|||
return fetch_dir
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('layer_item', args=(self.name,));
|
||||
return reverse('layer_item', args=('master',self.name));
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
|
|
@ -6,33 +6,30 @@
|
|||
|
||||
from django.conf.urls.defaults import *
|
||||
from django.views.generic import TemplateView, DetailView, ListView
|
||||
from django.views.generic.simple import redirect_to
|
||||
from django.views.defaults import page_not_found
|
||||
from layerindex.views import LayerListView, LayerReviewListView, LayerReviewDetailView, RecipeSearchView, MachineSearchView, PlainTextListView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, switch_branch_view, HistoryListView, EditProfileFormView, DuplicatesView, AdvancedRecipeSearchView, BulkChangeView, BulkChangeSearchView, bulk_change_edit_view, bulk_change_patch_view, BulkChangeDeleteView, RecipeDetailView, ClassicRecipeSearchView, ClassicRecipeDetailView, ClassicRecipeStatsView
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
from layerindex.views import LayerListView, LayerReviewListView, LayerReviewDetailView, RecipeSearchView, MachineSearchView, PlainTextListView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, HistoryListView, EditProfileFormView, AdvancedRecipeSearchView, BulkChangeView, BulkChangeSearchView, bulk_change_edit_view, bulk_change_patch_view, BulkChangeDeleteView, RecipeDetailView, RedirectParamsView, ClassicRecipeSearchView, ClassicRecipeDetailView, ClassicRecipeStatsView
|
||||
from layerindex.models import LayerItem, Recipe, RecipeChangeset
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$',
|
||||
TemplateView.as_view(
|
||||
template_name='layerindex/frontpage.html'),
|
||||
name='frontpage'),
|
||||
url(r'^$', redirect_to, {'url' : reverse_lazy('layer_list', args=('master',))},
|
||||
name='frontpage'),
|
||||
|
||||
url(r'^layers/$',
|
||||
LayerListView.as_view(
|
||||
template_name='layerindex/layers.html'),
|
||||
name='layer_list'),
|
||||
redirect_to, {'url' : reverse_lazy('layer_list', args=('master',))}),
|
||||
url(r'^layer/(?P<slug>[-\w]+)/$',
|
||||
RedirectParamsView.as_view(), {'redirect_name': 'layer_item', 'branch':'master'}),
|
||||
url(r'^recipes/$',
|
||||
redirect_to, {'url' : reverse_lazy('recipe_search', args=('master',))}),
|
||||
url(r'^machines/$',
|
||||
redirect_to, {'url' : reverse_lazy('machine_search', args=('master',))}),
|
||||
|
||||
url(r'^submit/$', edit_layer_view, {'template_name': 'layerindex/submitlayer.html'}, name="submit_layer"),
|
||||
url(r'^edit/(?P<slug>[-\w]+)/$', edit_layer_view, {'template_name': 'layerindex/editlayer.html'}, name="edit_layer"),
|
||||
url(r'^submit/thanks$',
|
||||
TemplateView.as_view(
|
||||
template_name='layerindex/submitthanks.html'),
|
||||
name="submit_layer_thanks"),
|
||||
url(r'^recipes/$',
|
||||
RecipeSearchView.as_view(
|
||||
template_name='layerindex/recipes.html'),
|
||||
name='recipe_search'),
|
||||
url(r'^machines/$',
|
||||
MachineSearchView.as_view(
|
||||
template_name='layerindex/machines.html'),
|
||||
name='machine_search'),
|
||||
url(r'^review/$',
|
||||
LayerReviewListView.as_view(
|
||||
template_name='layerindex/reviewlist.html'),
|
||||
|
@ -41,10 +38,6 @@ urlpatterns = patterns('',
|
|||
LayerReviewDetailView.as_view(
|
||||
template_name='layerindex/reviewdetail.html'),
|
||||
name='layer_review'),
|
||||
url(r'^layer/(?P<slug>[-\w]+)/$',
|
||||
LayerDetailView.as_view(
|
||||
template_name='layerindex/detail.html'),
|
||||
name='layer_item'),
|
||||
url(r'^layer/(?P<slug>[-\w]+)/addnote/$',
|
||||
edit_layernote_view, {'template_name': 'layerindex/editlayernote.html'}, name="add_layernote"),
|
||||
url(r'^layer/(?P<slug>[-\w]+)/editnote/(?P<pk>[-\w]+)/$',
|
||||
|
@ -80,8 +73,8 @@ urlpatterns = patterns('',
|
|||
BulkChangeDeleteView.as_view(
|
||||
template_name='layerindex/deleteconfirm.html'),
|
||||
name="bulk_change_delete"),
|
||||
url(r'^branch/(?P<slug>[-\w]+)/$',
|
||||
switch_branch_view, name="switch_branch"),
|
||||
url(r'^branch/(?P<branch>[-\w]+)/',
|
||||
include('layerindex.urls_branch')),
|
||||
url(r'^raw/recipes.txt$',
|
||||
PlainTextListView.as_view(
|
||||
queryset=Recipe.objects.order_by('pn', 'layerbranch__layer'),
|
||||
|
@ -92,10 +85,6 @@ urlpatterns = patterns('',
|
|||
HistoryListView.as_view(
|
||||
template_name='layerindex/history.html'),
|
||||
name='history_list'),
|
||||
url(r'^duplicates/$',
|
||||
DuplicatesView.as_view(
|
||||
template_name='layerindex/duplicates.html'),
|
||||
name='duplicates'),
|
||||
url(r'^profile/$',
|
||||
EditProfileFormView.as_view(
|
||||
template_name='layerindex/profile.html'),
|
||||
|
|
37
layerindex/urls_branch.py
Normal file
37
layerindex/urls_branch.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
# layerindex-web - Branch-based URL definitions
|
||||
#
|
||||
# Copyright (C) 2013 Intel Corporation
|
||||
#
|
||||
# Licensed under the MIT license, see COPYING.MIT for details
|
||||
|
||||
from django.conf.urls.defaults import *
|
||||
from django.views.generic.simple import redirect_to
|
||||
from django.views.defaults import page_not_found
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
from layerindex.views import LayerListView, RecipeSearchView, MachineSearchView, PlainTextListView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, RedirectParamsView, DuplicatesView
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$',
|
||||
RedirectParamsView.as_view(), {'redirect_name': 'layer_list'}),
|
||||
url(r'^layers/$',
|
||||
LayerListView.as_view(
|
||||
template_name='layerindex/layers.html'),
|
||||
name='layer_list'),
|
||||
url(r'^layer/(?P<slug>[-\w]+)/$',
|
||||
LayerDetailView.as_view(
|
||||
template_name='layerindex/detail.html'),
|
||||
name='layer_item'),
|
||||
url(r'^recipes/$',
|
||||
RecipeSearchView.as_view(
|
||||
template_name='layerindex/recipes.html'),
|
||||
name='recipe_search'),
|
||||
url(r'^machines/$',
|
||||
MachineSearchView.as_view(
|
||||
template_name='layerindex/machines.html'),
|
||||
name='machine_search'),
|
||||
url(r'^edit/(?P<slug>[-\w]+)/$', edit_layer_view, {'template_name': 'layerindex/editlayer.html'}, name="edit_layer"),
|
||||
url(r'^duplicates/$',
|
||||
DuplicatesView.as_view(
|
||||
template_name='layerindex/duplicates.html'),
|
||||
name='duplicates'),
|
||||
)
|
|
@ -6,13 +6,14 @@
|
|||
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, Http404
|
||||
from django.core.urlresolvers import reverse, reverse_lazy
|
||||
from django.core.urlresolvers import reverse, reverse_lazy, resolve
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.template import RequestContext
|
||||
from layerindex.models import Branch, LayerItem, LayerMaintainer, LayerBranch, LayerDependency, LayerNote, Recipe, Machine, BBClass, BBAppend, RecipeChange, RecipeChangeset, ClassicRecipe
|
||||
from datetime import datetime
|
||||
from django.views.generic import TemplateView, DetailView, ListView
|
||||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||
from django.views.generic.base import RedirectView
|
||||
from layerindex.forms import EditLayerForm, LayerMaintainerFormSet, EditNoteForm, EditProfileForm, RecipeChangesetForm, AdvancedRecipeSearchForm, BulkChangeEditFormSet, ClassicRecipeForm, ClassicRecipeSearchForm
|
||||
from django.db import transaction
|
||||
from django.contrib.auth.models import User, Permission
|
||||
|
@ -81,7 +82,7 @@ def delete_layer_view(request, template_name, slug):
|
|||
raise PermissionDenied
|
||||
if request.method == 'POST':
|
||||
layeritem.delete()
|
||||
return HttpResponseRedirect(reverse('layer_list'))
|
||||
return HttpResponseRedirect(reverse('layer_list', args=('master',)))
|
||||
else:
|
||||
return render(request, template_name, {
|
||||
'object': layeritem,
|
||||
|
@ -89,26 +90,25 @@ def delete_layer_view(request, template_name, slug):
|
|||
'cancel_url': layeritem.get_absolute_url()
|
||||
})
|
||||
|
||||
def edit_layer_view(request, template_name, slug=None):
|
||||
def edit_layer_view(request, template_name, branch='master', slug=None):
|
||||
return_url = None
|
||||
branchobj = Branch.objects.filter(name=branch)[:1].get()
|
||||
if slug:
|
||||
# Edit mode
|
||||
branch = Branch.objects.filter(name=request.session.get('branch', 'master'))[:1].get()
|
||||
layeritem = get_object_or_404(LayerItem, name=slug)
|
||||
if layeritem.classic:
|
||||
raise Http404
|
||||
if not (request.user.is_authenticated() and (request.user.has_perm('layerindex.publish_layer') or layeritem.user_can_edit(request.user))):
|
||||
raise PermissionDenied
|
||||
layerbranch = get_object_or_404(LayerBranch, layer=layeritem, branch=branch)
|
||||
layerbranch = get_object_or_404(LayerBranch, layer=layeritem, branch=branchobj)
|
||||
deplistlayers = LayerItem.objects.exclude(id=layeritem.id).order_by('name')
|
||||
returnto = request.GET.get('returnto', 'layer_item')
|
||||
if returnto:
|
||||
return_url = reverse_lazy(returnto, args=(layeritem.name,))
|
||||
return_url = reverse_lazy(returnto, args=(branch, layeritem.name))
|
||||
else:
|
||||
# Submit mode
|
||||
branch = Branch.objects.filter(name='master')[:1].get()
|
||||
layeritem = LayerItem()
|
||||
layerbranch = LayerBranch(layer=layeritem, branch=branch)
|
||||
layerbranch = LayerBranch(layer=layeritem, branch=branchobj)
|
||||
deplistlayers = LayerItem.objects.filter(classic=False).order_by('name')
|
||||
|
||||
if request.method == 'POST':
|
||||
|
@ -167,7 +167,7 @@ def edit_layer_view(request, template_name, slug=None):
|
|||
d = Context({
|
||||
'user_name': user_name,
|
||||
'layer_name': layeritem.name,
|
||||
'layer_url': request.build_absolute_uri(reverse('layer_review', args=(layeritem.name,))) + '?branch=master',
|
||||
'layer_url': request.build_absolute_uri(reverse('layer_review', args=(layeritem.name,))),
|
||||
})
|
||||
subject = '%s - %s' % (settings.SUBMIT_EMAIL_SUBJECT, layeritem.name)
|
||||
from_email = settings.SUBMIT_EMAIL_FROM
|
||||
|
@ -236,19 +236,12 @@ def bulk_change_patch_view(request, pk):
|
|||
# FIXME better error handling
|
||||
|
||||
|
||||
def _check_branch(request):
|
||||
branchname = request.GET.get('branch', '')
|
||||
def _check_url_branch(kwargs):
|
||||
branchname = kwargs['branch']
|
||||
if branchname:
|
||||
if branchname == 'oe-classic':
|
||||
raise Http404
|
||||
branch = get_object_or_404(Branch, name=branchname)
|
||||
request.session['branch'] = branch.name
|
||||
|
||||
def switch_branch_view(request, slug):
|
||||
branch = get_object_or_404(Branch, name=slug)
|
||||
request.session['branch'] = branch.name
|
||||
return_url = request.META.get('HTTP_REFERER')
|
||||
if not return_url:
|
||||
return_url = reverse('layer_list')
|
||||
return HttpResponseRedirect(return_url)
|
||||
|
||||
def publish(request, name):
|
||||
if not (request.user.is_authenticated() and request.user.has_perm('layerindex.publish_layer')):
|
||||
|
@ -264,27 +257,38 @@ def _statuschange(request, name, newstatus):
|
|||
w.save()
|
||||
return HttpResponseRedirect(w.get_absolute_url())
|
||||
|
||||
|
||||
class RedirectParamsView(RedirectView):
|
||||
def get_redirect_url(self, *args, **kwargs):
|
||||
redirect_name = kwargs.pop('redirect_name')
|
||||
return reverse_lazy(redirect_name, args=args, kwargs=kwargs)
|
||||
|
||||
|
||||
|
||||
class LayerListView(ListView):
|
||||
context_object_name = 'layerbranch_list'
|
||||
|
||||
def get_queryset(self):
|
||||
return LayerBranch.objects.filter(branch__name=self.request.session.get('branch', 'master')).filter(layer__status='P').order_by('layer__layer_type', 'layer__name')
|
||||
_check_url_branch(self.kwargs)
|
||||
return LayerBranch.objects.filter(branch__name=self.kwargs['branch']).filter(layer__status='P').order_by('layer__layer_type', 'layer__name')
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(LayerListView, self).get_context_data(**kwargs)
|
||||
context['url_branch'] = self.kwargs['branch']
|
||||
context['this_url_name'] = resolve(self.request.path_info).url_name
|
||||
context['layer_type_choices'] = LayerItem.LAYER_TYPE_CHOICES
|
||||
return context
|
||||
|
||||
|
||||
class LayerReviewListView(ListView):
|
||||
@method_decorator(login_required)
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
if not request.user.has_perm('layerindex.publish_layer'):
|
||||
raise PermissionDenied
|
||||
_check_branch(request)
|
||||
return super(LayerReviewListView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_queryset(self):
|
||||
return LayerBranch.objects.filter(branch__name=self.request.session.get('branch', 'master')).filter(layer__status='N').order_by('layer__name')
|
||||
return LayerBranch.objects.filter(branch__name='master').filter(layer__status='N').order_by('layer__name')
|
||||
|
||||
class LayerDetailView(DetailView):
|
||||
model = LayerItem
|
||||
|
@ -292,7 +296,6 @@ class LayerDetailView(DetailView):
|
|||
|
||||
# This is a bit of a mess. Surely there has to be a better way to handle this...
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
_check_branch(request)
|
||||
self.user = request.user
|
||||
res = super(LayerDetailView, self).dispatch(request, *args, **kwargs)
|
||||
l = self.get_object()
|
||||
|
@ -305,15 +308,18 @@ class LayerDetailView(DetailView):
|
|||
return res
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
_check_url_branch(self.kwargs)
|
||||
context = super(LayerDetailView, self).get_context_data(**kwargs)
|
||||
layer = context['layeritem']
|
||||
context['useredit'] = layer.user_can_edit(self.user)
|
||||
layerbranch = layer.get_layerbranch(self.request.session.get('branch', 'master'))
|
||||
layerbranch = layer.get_layerbranch(self.kwargs['branch'])
|
||||
if layerbranch:
|
||||
context['layerbranch'] = layerbranch
|
||||
context['machines'] = layerbranch.machine_set.order_by('name')
|
||||
context['appends'] = layerbranch.bbappend_set.order_by('filename')
|
||||
context['classes'] = layerbranch.bbclass_set.order_by('name')
|
||||
context['url_branch'] = self.kwargs['branch']
|
||||
context['this_url_name'] = resolve(self.request.path_info).url_name
|
||||
return context
|
||||
|
||||
class LayerReviewDetailView(LayerDetailView):
|
||||
|
@ -323,6 +329,12 @@ class LayerReviewDetailView(LayerDetailView):
|
|||
raise PermissionDenied
|
||||
return super(LayerReviewDetailView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
self.kwargs['branch'] = 'master'
|
||||
context = super(LayerReviewDetailView, self).get_context_data(**kwargs)
|
||||
return context
|
||||
|
||||
|
||||
def recipes_preferred_count(qs):
|
||||
# Add extra column so we can show "duplicate" recipes from other layers de-emphasised
|
||||
# (it's a bit crude having to do this using SQL but I couldn't find a better way...)
|
||||
|
@ -350,9 +362,9 @@ class RecipeSearchView(ListView):
|
|||
paginate_by = 50
|
||||
|
||||
def get_queryset(self):
|
||||
_check_branch(self.request)
|
||||
_check_url_branch(self.kwargs)
|
||||
query_string = self.request.GET.get('q', '')
|
||||
init_qs = Recipe.objects.filter(layerbranch__branch__name=self.request.session.get('branch', 'master'))
|
||||
init_qs = Recipe.objects.filter(layerbranch__branch__name=self.kwargs['branch'])
|
||||
if query_string.strip():
|
||||
entry_query = simplesearch.get_query(query_string, ['pn', 'summary', 'description', 'filename'])
|
||||
qs = init_qs.filter(entry_query).order_by('pn', 'layerbranch__layer')
|
||||
|
@ -370,17 +382,19 @@ class RecipeSearchView(ListView):
|
|||
def get_context_data(self, **kwargs):
|
||||
context = super(RecipeSearchView, self).get_context_data(**kwargs)
|
||||
context['search_keyword'] = self.request.GET.get('q', '')
|
||||
context['url_branch'] = self.kwargs['branch']
|
||||
context['this_url_name'] = resolve(self.request.path_info).url_name
|
||||
return context
|
||||
|
||||
class DuplicatesView(TemplateView):
|
||||
def get_recipes(self):
|
||||
init_qs = Recipe.objects.filter(layerbranch__branch__name=self.request.session.get('branch', 'master'))
|
||||
init_qs = Recipe.objects.filter(layerbranch__branch__name=self.kwargs['branch'])
|
||||
dupes = init_qs.values('pn').annotate(Count('layerbranch', distinct=True)).filter(layerbranch__count__gt=1)
|
||||
qs = init_qs.all().filter(pn__in=[item['pn'] for item in dupes]).order_by('pn', 'layerbranch__layer')
|
||||
return recipes_preferred_count(qs)
|
||||
|
||||
def get_classes(self):
|
||||
init_qs = BBClass.objects.filter(layerbranch__branch__name=self.request.session.get('branch', 'master'))
|
||||
init_qs = BBClass.objects.filter(layerbranch__branch__name=self.kwargs['branch'])
|
||||
dupes = init_qs.values('name').annotate(Count('layerbranch', distinct=True)).filter(layerbranch__count__gt=1)
|
||||
qs = init_qs.all().filter(name__in=[item['name'] for item in dupes]).order_by('name', 'layerbranch__layer')
|
||||
return qs
|
||||
|
@ -389,6 +403,8 @@ class DuplicatesView(TemplateView):
|
|||
context = super(DuplicatesView, self).get_context_data(**kwargs)
|
||||
context['recipes'] = self.get_recipes()
|
||||
context['classes'] = self.get_classes()
|
||||
context['url_branch'] = self.kwargs['branch']
|
||||
context['this_url_name'] = resolve(self.request.path_info).url_name
|
||||
return context
|
||||
|
||||
class AdvancedRecipeSearchView(ListView):
|
||||
|
@ -411,7 +427,7 @@ class AdvancedRecipeSearchView(ListView):
|
|||
query = Q(**{"%s__icontains" % field: value})
|
||||
else:
|
||||
query = Q(**{"%s" % field: value})
|
||||
queryset = Recipe.objects.filter(layerbranch__branch__name=self.request.session.get('branch', 'master'))
|
||||
queryset = Recipe.objects.filter(layerbranch__branch__name='master')
|
||||
layer = self.request.GET.get('layer', '')
|
||||
if layer:
|
||||
queryset = queryset.filter(layerbranch__layer=layer)
|
||||
|
@ -497,6 +513,7 @@ class BulkChangeSearchView(AdvancedRecipeSearchView):
|
|||
def get_context_data(self, **kwargs):
|
||||
context = super(BulkChangeSearchView, self).get_context_data(**kwargs)
|
||||
context['changeset'] = self.changeset
|
||||
context['current_branch'] = 'master'
|
||||
return context
|
||||
|
||||
|
||||
|
@ -527,8 +544,9 @@ class MachineSearchView(ListView):
|
|||
paginate_by = 50
|
||||
|
||||
def get_queryset(self):
|
||||
_check_url_branch(self.kwargs)
|
||||
query_string = self.request.GET.get('q', '')
|
||||
init_qs = Machine.objects.filter(layerbranch__branch__name=self.request.session.get('branch', 'master'))
|
||||
init_qs = Machine.objects.filter(layerbranch__branch__name=self.kwargs['branch'])
|
||||
if query_string.strip():
|
||||
entry_query = simplesearch.get_query(query_string, ['name', 'description'])
|
||||
return init_qs.filter(entry_query).order_by('name', 'layerbranch__layer')
|
||||
|
@ -542,6 +560,8 @@ class MachineSearchView(ListView):
|
|||
def get_context_data(self, **kwargs):
|
||||
context = super(MachineSearchView, self).get_context_data(**kwargs)
|
||||
context['search_keyword'] = self.request.GET.get('q', '')
|
||||
context['url_branch'] = self.kwargs['branch']
|
||||
context['this_url_name'] = resolve(self.request.path_info).url_name
|
||||
return context
|
||||
|
||||
|
||||
|
@ -623,7 +643,7 @@ class RecipeDetailView(DetailView):
|
|||
recipe = self.get_object()
|
||||
if recipe:
|
||||
appendprefix = "%s_" % recipe.pn
|
||||
context['appends'] = BBAppend.objects.filter(layerbranch__branch__name=self.request.session.get('branch', 'master')).filter(filename__startswith=appendprefix)
|
||||
context['appends'] = BBAppend.objects.filter(layerbranch__branch=recipe.layerbranch.branch).filter(filename__startswith=appendprefix)
|
||||
return context
|
||||
|
||||
|
||||
|
|
|
@ -30,31 +30,6 @@
|
|||
<div class="container-fluid">
|
||||
<a class="brand" href="{% url frontpage %}">OpenEmbedded metadata index</a>
|
||||
|
||||
<ul class="nav">
|
||||
{% block branch_selector %}
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
||||
Branch: <b>{{ current_branch }}</b>
|
||||
<b class="caret"></b>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
{% for branch in all_branches %}
|
||||
<li><a href="{% url switch_branch branch.name %}">
|
||||
{% if branch.name = current_branch %}<b>{% endif %}
|
||||
{{ branch.name }}
|
||||
{% if branch.short_description %}
|
||||
({{ branch.short_description }})
|
||||
{% endif %}
|
||||
{% if branch.name = current_branch %}</b>{% endif %}
|
||||
</a></li>
|
||||
{% endfor %}
|
||||
{% if oe_classic %}
|
||||
<li><a href="{% url classic %}">OE-Classic</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endblock %}
|
||||
</ul>
|
||||
{% if user.is_authenticated %}
|
||||
<div class="btn-group pull-right">
|
||||
{% if perms.layerindex.publish_layer %}
|
||||
|
@ -90,7 +65,7 @@
|
|||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{% url bulk_change %}">Bulk Change</a></li>
|
||||
<li><a href="{% url duplicates %}">Duplicates</a></li>
|
||||
<li><a href="{% url duplicates 'master' %}">Duplicates</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="divider-vertical"></li>
|
||||
|
@ -117,6 +92,7 @@
|
|||
<div class="footer">
|
||||
<a href="{% url history_list %}">change history</a>
|
||||
• <a href="{% url about %}">about this site</a>
|
||||
• <a href="http://www.openembedded.org/Layers_FAQ">FAQ</a>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
59
templates/base_toplevel.html
Normal file
59
templates/base_toplevel.html
Normal file
|
@ -0,0 +1,59 @@
|
|||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% load url from future %}
|
||||
{% comment %}
|
||||
|
||||
layerindex-web - top level page template
|
||||
|
||||
Copyright (C) 2013 Intel Corporation
|
||||
Licensed under the MIT license, see COPYING.MIT for details
|
||||
|
||||
{% endcomment %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="navbar">
|
||||
<div class="navbar-inner">
|
||||
<ul class="nav">
|
||||
{% block branch_selector %}
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
||||
Branch: <b>{{ url_branch }}</b>
|
||||
<b class="caret"></b>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
{% for branch in all_branches %}
|
||||
<li><a href="{% url this_url_name branch.name %}">
|
||||
{% if branch.name = url_branch %}<b>{% endif %}
|
||||
{{ branch.name }}
|
||||
{% if branch.short_description %}
|
||||
({{ branch.short_description }})
|
||||
{% endif %}
|
||||
{% if branch.name = url_branch %}</b>{% endif %}
|
||||
</a></li>
|
||||
{% endfor %}
|
||||
{% if oe_classic %}
|
||||
<li class="divider"></li>
|
||||
<li><a href="{% url 'classic' %}">OE-Classic</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endblock %}
|
||||
</ul>
|
||||
|
||||
<ul class="nav">
|
||||
{% block navs %}{% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% block content_inner %}{% endblock %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -9,7 +9,7 @@
|
|||
{% autoescape on %}
|
||||
<h2>About</h2>
|
||||
|
||||
<p>This website indexes layers for the <a href="http://www.openembedded.org">OpenEmbedded</a> build system, suitable for use on top of OpenEmbedded-Core and distributions based upon it, providing additional recipes, machine support and/or distro policy configuration.</p>
|
||||
<p>This website indexes layers for the <a href="http://www.openembedded.org">OpenEmbedded</a> build system provided by members of the OpenEmbedded / Yocto Project community, suitable for use on top of OpenEmbedded-Core and compatible systems, providing additional recipes, machine support and/or distro policy configuration.</p>
|
||||
|
||||
<p>If you have a layer for use with OpenEmbedded that you wish to share with others, please <a href="{% url submit_layer %}">submit it</a>!</p>
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
<td><a href="{% url recipe recipe.id %}">{{ recipe.name }}</a></td>
|
||||
<td>{{ recipe.pv }}</td>
|
||||
<td>{{ recipe.short_desc }}</td>
|
||||
<td><a href="{% url layer_item recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a></td>
|
||||
<td><a href="{% url layer_item current_branch recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
@ -21,7 +21,10 @@
|
|||
{% block content %}
|
||||
|
||||
{% autoescape on %}
|
||||
|
||||
<ul class="breadcrumb">
|
||||
<li><a href="{% url layer_list url_branch %}">Layers</a> <span class="divider">→</span></li>
|
||||
<li class="active">{{ layeritem.name }}</li>
|
||||
</ul>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row-fluid">
|
||||
|
@ -33,7 +36,7 @@
|
|||
{% if user.is_authenticated %}
|
||||
<span class="pull-right">
|
||||
{% if perms.layerindex.publish_layer or useredit %}
|
||||
<a href="{% url edit_layer layeritem.name %}" class="btn">Edit layer</a>
|
||||
<a href="{% url edit_layer url_branch layeritem.name %}" class="btn">Edit layer</a>
|
||||
{% if layeritem.layernote_set.count = 0 %}
|
||||
<a href="{% url add_layernote layeritem.name %}" class="btn">Add note</a>
|
||||
{% endif %}
|
||||
|
@ -49,7 +52,7 @@
|
|||
{% if not layerbranch %}
|
||||
<div class="row-fluid">
|
||||
<div class="alert alert-error">
|
||||
This layer does not exist for branch {{ current_branch }}.
|
||||
This layer does not exist for branch {{ url_branch }}.
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
@ -141,7 +144,7 @@
|
|||
<p>The {{ layeritem.name }} layer depends upon:</p>
|
||||
<ul>
|
||||
{% for dep in layerbranch.dependencies_set.all %}
|
||||
<li><a href="{% url layer_item dep.dependency.name %}">{{ dep.dependency.name }}</a></li>
|
||||
<li><a href="{% url layer_item url_branch dep.dependency.name %}">{{ dep.dependency.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div> <!-- end of well -->
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "base_toplevel.html" %}
|
||||
{% load i18n %}
|
||||
{% load url from future %}
|
||||
|
||||
{% comment %}
|
||||
|
||||
|
@ -19,7 +20,27 @@
|
|||
{% autoescape on %}
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span9 offset1">
|
||||
<div class="span12">
|
||||
|
||||
<div class="btn-group pull-right">
|
||||
<a href="#" class="btn dropdown-toggle" data-toggle="dropdown">
|
||||
Branch: <b>{{ url_branch }}</b>
|
||||
<b class="caret"></b>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
{% for branch in all_branches %}
|
||||
<li><a href="{% url this_url_name branch.name %}">
|
||||
{% if branch.name = url_branch %}<b>{% endif %}
|
||||
{{ branch.name }}
|
||||
{% if branch.short_description %}
|
||||
({{ branch.short_description }})
|
||||
{% endif %}
|
||||
{% if branch.name = url_branch %}</b>{% endif %}
|
||||
</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h2>Duplicate recipes</h2>
|
||||
{% if recipes %}
|
||||
<p>Recipes with the same name in different layers:</p>
|
||||
|
@ -36,10 +57,10 @@
|
|||
<tbody>
|
||||
{% for recipe in recipes %}
|
||||
<tr {% if recipe.preferred_count > 0 %}class="muted"{% endif %}>
|
||||
<td><a href="{% url recipe recipe.id %}">{{ recipe.name }}</a></td>
|
||||
<td><a href="{% url 'recipe' recipe.id %}">{{ recipe.name }}</a></td>
|
||||
<td>{{ recipe.pv }}</td>
|
||||
<td>{{ recipe.short_desc }}</td>
|
||||
<td><a href="{% url layer_item recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a></td>
|
||||
<td><a href="{% url 'layer_item' url_branch recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
@ -52,7 +73,7 @@
|
|||
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span9 offset1">
|
||||
<div class="span12">
|
||||
<h2>Duplicate classes</h2>
|
||||
{% if classes %}
|
||||
<p>Classes with the same name in different layers:</p>
|
||||
|
@ -67,8 +88,8 @@
|
|||
<tbody>
|
||||
{% for class in classes %}
|
||||
<tr>
|
||||
<td><a href="{% url class.vcs_web_url %}">{{ class.name }}</a></td>
|
||||
<td><a href="{% url layer_item class.layerbranch.layer.name %}">{{ class.layerbranch.layer.name }}</a></td>
|
||||
<td><a href="{{ class.vcs_web_url }}">{{ class.name }}</a></td>
|
||||
<td><a href="{% url 'layer_item' 'master' class.layerbranch.layer.name %}">{{ class.layerbranch.layer.name }}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<input type="submit" value="Save" class='btn' />
|
||||
<a href="{% url layer_item form.instance.layer.name %}" class='btn'>Cancel</a>
|
||||
<a href="{% url layer_item 'master' form.instance.layer.name %}" class='btn'>Cancel</a>
|
||||
</form>
|
||||
|
||||
{% endautoescape %}
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
{% comment %}
|
||||
|
||||
layerindex-web - front page template
|
||||
|
||||
Copyright (C) 2013 Intel Corporation
|
||||
Licensed under the MIT license, see COPYING.MIT for details
|
||||
|
||||
{% endcomment %}
|
||||
|
||||
|
||||
<!--
|
||||
{% block title_append %}{% endblock %}
|
||||
-->
|
||||
|
||||
{% block content %}
|
||||
{% autoescape on %}
|
||||
|
||||
<div class="hero-unit hero-evenlyspaced">
|
||||
<h1>Welcome!</h1>
|
||||
<p>Welcome to the OpenEmbedded metadata index. Here you can find metadata (layers, recipes and machines)
|
||||
provided by members of the OpenEmbedded / Yocto Project community for use on top of OpenEmbedded-Core
|
||||
and compatible systems.</p>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="span8">
|
||||
<div class="well well-frontpage">
|
||||
<h2>Finding what you need</h2>
|
||||
<p>You can browse or search by layer, by recipe or by machine.</p>
|
||||
<div class="frontpage-button-group">
|
||||
<a href="{% url layer_list %}" class="btn btn-large btn-primary">Layers</a>
|
||||
<a href="{% url recipe_search %}" class="btn btn-large btn-primary">Recipes</a>
|
||||
<a href="{% url machine_search %}" class="btn btn-large btn-primary">Machines</a>
|
||||
</div>
|
||||
<p><small>Note that you are currently viewing
|
||||
{% if current_branch = 'master' %}
|
||||
the <span class="branch">master</span> branch - the latest development version of the code.
|
||||
{% else %}
|
||||
the <span class="branch">{{ current_branch }}</span> branch.
|
||||
{% endif %}
|
||||
You can change between master and release branches at any time using the branch selector on the bar at the top of the page.</small></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="span4">
|
||||
<div class="well well-frontpage">
|
||||
<h2>Questions?</h2>
|
||||
<p>Got some questions about layers or this website? See the <a href="http://www.openembedded.org/Layers_FAQ">FAQ</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endautoescape %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "base_toplevel.html" %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
|
@ -16,23 +16,24 @@
|
|||
{% block title_append %} - layers{% endblock %}
|
||||
-->
|
||||
|
||||
{% block content %}
|
||||
{% block navs %}
|
||||
{% autoescape on %}
|
||||
<li class="active"><a href="{% url layer_list url_branch %}">Layers</a></li>
|
||||
<li><a href="{% url recipe_search url_branch %}">Recipes</a></li>
|
||||
<li><a href="{% url machine_search url_branch %}">Machines</a></li>
|
||||
{% endautoescape %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block content_inner %}
|
||||
{% autoescape on %}
|
||||
|
||||
{% if layerbranch_list %}
|
||||
<div class="row-fluid">
|
||||
<div class="span9 offset1">
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a href="{% url layer_list %}">Layers</a></li>
|
||||
<li><a href="{% url recipe_search %}">Recipes</a></li>
|
||||
<li><a href="{% url machine_search %}">Machines</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span5">
|
||||
<form id="filter-form">
|
||||
<input type="text" class="input-xxlarge" id="filter" placeholder="Search layers">
|
||||
<input type="text" class="input-xxlarge search-query" id="filter" placeholder="Search layers">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
@ -70,7 +71,7 @@
|
|||
<tbody>
|
||||
{% for layerbranch in layerbranch_list %}
|
||||
<tr class="layertype_{{ layerbranch.layer.layer_type }}">
|
||||
<td><a href="{% url layer_item layerbranch.layer.name %}">{{ layerbranch.layer.name }}</a></td>
|
||||
<td><a href="{% url layer_item url_branch layerbranch.layer.name %}">{{ layerbranch.layer.name }}</a></td>
|
||||
<td>{{ layerbranch.layer.summary }}</td>
|
||||
<td>{{ layerbranch.layer.get_layer_type_display }}</td>
|
||||
<td class="showRollie">
|
||||
|
@ -95,8 +96,6 @@
|
|||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if is_paginated %}
|
||||
{% load pagination %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "base_toplevel.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% comment %}
|
||||
|
@ -15,22 +15,22 @@
|
|||
{% block title_append %} - machines{% endblock %}
|
||||
-->
|
||||
|
||||
{% block content %}
|
||||
{% block navs %}
|
||||
{% autoescape on %}
|
||||
<li><a href="{% url layer_list url_branch %}">Layers</a></li>
|
||||
<li><a href="{% url recipe_search url_branch %}">Recipes</a></li>
|
||||
<li class="active"><a href="{% url machine_search url_branch %}">Machines</a></li>
|
||||
{% endautoescape %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block content_inner %}
|
||||
{% autoescape on %}
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span9 offset1">
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
<li><a href="{% url layer_list %}">Layers</a></li>
|
||||
<li><a href="{% url recipe_search %}">Recipes</a></li>
|
||||
<li class="active"><a href="{% url machine_search %}">Machines</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="input-append">
|
||||
<form id="filter-form" action="{% url machine_search %}" method="get">
|
||||
<form id="filter-form" action="{% url machine_search url_branch %}" method="get">
|
||||
<input type="text" class="input-xxlarge" id="appendedInputButtons" placeholder="Search machines" name="q" value="{{ search_keyword }}" />
|
||||
<button class="btn" type="submit">search</button>
|
||||
</form>
|
||||
|
@ -52,7 +52,7 @@
|
|||
<tr>
|
||||
<td><a href="{{ machine.vcs_web_url }}">{{ machine.name }}</a></td>
|
||||
<td>{{ machine.description }}</td>
|
||||
<td><a href="{% url layer_item machine.layerbranch.layer.name %}">{{ machine.layerbranch.layer.name }}</a></td>
|
||||
<td><a href="{% url layer_item url_branch machine.layerbranch.layer.name %}">{{ machine.layerbranch.layer.name }}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
@ -68,9 +68,6 @@
|
|||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% endautoescape %}
|
||||
|
||||
|
|
|
@ -20,23 +20,18 @@
|
|||
{% block content %}
|
||||
{% autoescape on %}
|
||||
|
||||
<ul class="breadcrumb">
|
||||
<li><a href="{% url layer_list recipe.layerbranch.branch.name %}">Layers</a> <span class="divider">→</span></li>
|
||||
<li><a href="{% url layer_item recipe.layerbranch.branch.name recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a> <span class="divider">→</span></li>
|
||||
<li class="active">{{ recipe.name }}</li>
|
||||
</ul>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span9 offset1">
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
<li>
|
||||
<a href="{% url layer_list %}">Layer index</a>
|
||||
</li>
|
||||
<li><a href="{% url recipe_search %}">Recipe index</a></li>
|
||||
<li class="active"><a href="#">Recipe</a></li>
|
||||
</ul>
|
||||
|
||||
{% if recipe.layerbranch.branch.name != current_branch %}
|
||||
<div class="alert alert-error">
|
||||
This recipe record is for a different branch than the one you have selected. To search for the equivalent recipe on the {{ current_branch }} branch, click <a href="{% url recipe_search %}?q={{ recipe.name }}">here</a>.
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="page-header">
|
||||
<h1>{{ recipe.name }} {{ recipe.pv }}</h1>
|
||||
</div>
|
||||
|
||||
<table class="table table-striped table-bordered">
|
||||
<tbody>
|
||||
|
@ -86,7 +81,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<th>Layer</th>
|
||||
<td><a href="{% url layer_item recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a> ({{ recipe.layerbranch.branch.name}} branch)</td>
|
||||
<td><a href="{% url layer_item recipe.layerbranch.branch.name recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a> ({{ recipe.layerbranch.branch.name}} branch)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -98,7 +93,7 @@
|
|||
{% for append in appends %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{% url layer_item append.layerbranch.layer.name %}">{{ append.layerbranch.layer.name }}</a>
|
||||
<a href="{% url layer_item append.layerbranch.branch.name append.layerbranch.layer.name %}">{{ append.layerbranch.layer.name }}</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ append.vcs_web_url }}">{{ append.filename }}</a>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "base.html" %}
|
||||
{% extends "base_toplevel.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% comment %}
|
||||
|
@ -15,22 +15,23 @@
|
|||
{% block title_append %} - recipes{% endblock %}
|
||||
-->
|
||||
|
||||
{% block content %}
|
||||
{% block navs %}
|
||||
{% autoescape on %}
|
||||
<li><a href="{% url layer_list url_branch %}">Layers</a></li>
|
||||
<li class="active"><a href="{% url recipe_search url_branch %}">Recipes</a></li>
|
||||
<li><a href="{% url machine_search url_branch %}">Machines</a></li>
|
||||
{% endautoescape %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block content_inner %}
|
||||
{% autoescape on %}
|
||||
|
||||
<div class="row-fluid">
|
||||
|
||||
<div class="span9 offset1">
|
||||
|
||||
<ul class="nav nav-tabs">
|
||||
<li><a href="{% url layer_list %}">Layers</a></li>
|
||||
<li class="active"><a href="{% url recipe_search %}">Recipes</a></li>
|
||||
<li><a href="{% url machine_search %}">Machines</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="input-append">
|
||||
<form id="filter-form" action="{% url recipe_search %}" method="get">
|
||||
<form id="filter-form" action="{% url recipe_search url_branch %}" method="get">
|
||||
<input type="text" class="input-xxlarge" id="appendedInputButtons" placeholder="Search recipes" name="q" value="{{ search_keyword }}" />
|
||||
<button class="btn" type="submit">search</button>
|
||||
</form>
|
||||
|
@ -54,7 +55,7 @@
|
|||
<td><a href="{% url recipe recipe.id %}">{{ recipe.name }}</a></td>
|
||||
<td>{{ recipe.pv }}</td>
|
||||
<td>{{ recipe.short_desc }}</td>
|
||||
<td><a href="{% url layer_item recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a></td>
|
||||
<td><a href="{% url layer_item url_branch recipe.layerbranch.layer.name %}">{{ recipe.layerbranch.layer.name }}</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
@ -70,10 +71,6 @@
|
|||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% endautoescape %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
{% if user.is_authenticated %}
|
||||
<span class="pull-right">
|
||||
{% if perms.layerindex.publish_layer or useredit %}
|
||||
<a href="{% url edit_layer layeritem.name %}?returnto=layer_review" class="btn">Edit layer</a>
|
||||
<a href="{% url edit_layer 'master' layeritem.name %}?returnto=layer_review" class="btn">Edit layer</a>
|
||||
{% if layeritem.layernote_set.count = 0 %}
|
||||
<a href="{% url add_layernote layeritem.name %}" class="btn">Add note</a>
|
||||
{% endif %}
|
||||
|
@ -52,13 +52,6 @@
|
|||
</div> <!-- end of container-fluid -->
|
||||
|
||||
<div class="container-fluid">
|
||||
{% if not layerbranch %}
|
||||
<div class="row-fluid">
|
||||
<div class="alert alert-error">
|
||||
This layer does not exist for branch {{ current_branch }}.
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="row-fluid">
|
||||
{% for note in layeritem.layernote_set.all %}
|
||||
<div class="alert">
|
||||
|
@ -170,7 +163,7 @@
|
|||
<td>
|
||||
<ul class="unstyled">
|
||||
{% for dep in layerbranch.dependencies_set.all %}
|
||||
<li><a href="{% url layer_item dep.dependency.name %}">{{ dep.dependency.name }}</a></li>
|
||||
<li><a href="{% url layer_item 'master' dep.dependency.name %}">{{ dep.dependency.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</td>
|
||||
|
|
Loading…
Reference in New Issue
Block a user