Dump a bunch of stuff from my local branch into svn.

- Legacy-Id: 19583
This commit is contained in:
Lars Eggert 2021-11-09 13:54:17 +00:00
parent 2cef8b67cf
commit 8efa37e088
19 changed files with 15157 additions and 385 deletions

6
.gitignore vendored
View file

@ -16,17 +16,18 @@
.DS_store
# Simulated Subversion default ignores end here
/.coverage
/.factoryboy_random_state
/.mypy_cache
/.parcel-cache
/.project
/.pydevproject
/.Python
/.settings
/.tmp
/.factoryboy_random_state
/attic
/bin
/etc
/env
/etc
/ghostdriver.log
/htmlcov
/include
@ -38,6 +39,7 @@
/mergelog
/mergequeue
/minimum-requirements.txt
/node_modules
/pip-selfcheck.json
/selenium
/settings_local.py

View file

@ -8,18 +8,23 @@ from ietf.name.models import GroupTypeName
register = template.Library()
parents = GroupTypeName.objects.filter(slug__in=['ag','area','rag','team','dir','program'])
parents = GroupTypeName.objects.filter(
slug__in=["ag", "area", "rag", "team", "dir", "program"]
)
others = []
for group in Group.objects.filter(acronym__in=('rsoc',), state_id='active'):
group.menu_url = reverse('ietf.group.views.group_home', kwargs=dict(acronym=group.acronym)) # type: ignore
for group in Group.objects.filter(acronym__in=("rsoc",), state_id="active"):
group.menu_url = reverse("ietf.group.views.group_home", kwargs=dict(acronym=group.acronym)) # type: ignore
# could use group.about_url() instead
others.append(group)
@register.simple_tag
def active_groups_menu():
def active_groups_menu(flavor):
global parents, others
for p in parents:
p.menu_url = '/%s/'%p.slug
return render_to_string('base/menu_active_groups.html', { 'parents': parents, 'others': others })
p.menu_url = "/%s/" % p.slug
return render_to_string(
"base/menu_active_groups.html",
{"parents": parents, "others": others, "flavor": flavor},
)

View file

@ -39,26 +39,30 @@ from ietf.group.models import Group
register = template.Library()
parent_short_names = {
'ops':'Ops & Mgmt',
'rai':'RAI',
'iab':'IAB',
'art':'Apps & Realtime',
'ietfadminllc' : 'IETF LLC',
}
"ops": "Ops & Management",
"rai": "RAI",
"iab": "IAB",
"art": "Apps & Realtime",
"ietfadminllc": "IETF LLC",
}
parents = Group.objects.filter(
models.Q(type="area") | models.Q(type="irtf", acronym="irtf") | models.Q(acronym='iab') | models.Q(acronym='ietfadminllc'),
state="active"
).order_by('type__order','type_id', 'acronym')
models.Q(type="area")
| models.Q(type="irtf", acronym="irtf")
| models.Q(acronym="iab")
| models.Q(acronym="ietfadminllc"),
state="active",
).order_by("type__order", "type_id", "acronym")
@register.simple_tag
def wg_menu():
def wg_menu(flavor):
global parents
for p in parents:
p.short_name = parent_short_names.get(p.acronym) or p.name
if p.short_name.endswith(" Area"):
p.short_name = p.short_name[:-len(" Area")]
p.short_name = p.short_name[: -len(" Area")]
if p.type_id == "area":
p.menu_url = "/wg/#" + p.acronym
@ -66,7 +70,9 @@ def wg_menu():
p.menu_url = "/rg/"
elif p.acronym == "iab":
p.menu_url = "/program/"
elif p.acronym == 'ietfadminllc':
elif p.acronym == "ietfadminllc":
p.menu_url = "/adm/"
return render_to_string('base/menu_wg.html', { 'parents': parents })
return render_to_string(
"base/menu_wg.html", {"parents": parents, "flavor": flavor}
)

View file

@ -415,9 +415,8 @@ ROOT_URLCONF = 'ietf.urls'
# Additional locations of static files (in addition to each app's static/ dir)
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'secr/static'),
os.path.join(BASE_DIR, 'externals/static'),
os.path.join(BASE_DIR, 'static/dist'),
# os.path.join(BASE_DIR, 'secr/static'),
)
INSTALLED_APPS = [
@ -433,7 +432,7 @@ INSTALLED_APPS = [
'django.contrib.sites',
'django.contrib.staticfiles',
# External apps
'bootstrap3',
'django_bootstrap5',
'corsheaders',
'django_markup',
'django_password_strength',

View file

@ -0,0 +1 @@
@import "../../../node_modules/datatables.net-bs5/css/dataTables.bootstrap5";

87
ietf/static/css/ietf.scss Normal file
View file

@ -0,0 +1,87 @@
// Enable negative margin classes.
$enable-negative-margins: true;
// Don't add carets to dropdowns by default.
// $enable-caret: false;
// Only import what we need:
// https://getbootstrap.com/docs/5.1/customize/optimize/
// Configuration
@import "~/node_modules/bootstrap/scss/functions";
@import "~/node_modules/bootstrap/scss/variables";
@import "~/node_modules/bootstrap/scss/mixins";
@import "~/node_modules/bootstrap/scss/utilities";
// Layout & components
@import "~/node_modules/bootstrap/scss/root";
@import "~/node_modules/bootstrap/scss/reboot";
@import "~/node_modules/bootstrap/scss/type";
@import "~/node_modules/bootstrap/scss/images";
@import "~/node_modules/bootstrap/scss/containers";
@import "~/node_modules/bootstrap/scss/grid";
@import "~/node_modules/bootstrap/scss/tables";
@import "~/node_modules/bootstrap/scss/forms";
@import "~/node_modules/bootstrap/scss/buttons";
@import "~/node_modules/bootstrap/scss/transitions";
@import "~/node_modules/bootstrap/scss/dropdown";
@import "~/node_modules/bootstrap/scss/button-group";
@import "~/node_modules/bootstrap/scss/nav";
@import "~/node_modules/bootstrap/scss/navbar";
// @import "~/node_modules/bootstrap/scss/card";
@import "~/node_modules/bootstrap/scss/accordion";
// @import "~/node_modules/bootstrap/scss/breadcrumb";
// @import "~/node_modules/bootstrap/scss/pagination";
// @import "~/node_modules/bootstrap/scss/badge";
// @import "~/node_modules/bootstrap/scss/alert";
// @import "~/node_modules/bootstrap/scss/progress";
// @import "~/node_modules/bootstrap/scss/list-group";
// @import "~/node_modules/bootstrap/scss/close";
// @import "~/node_modules/bootstrap/scss/toasts";
// @import "~/node_modules/bootstrap/scss/modal";
// @import "~/node_modules/bootstrap/scss/tooltip";
// @import "~/node_modules/bootstrap/scss/popover";
// @import "~/node_modules/bootstrap/scss/carousel";
// @import "~/node_modules/bootstrap/scss/spinners";
// @import "~/node_modules/bootstrap/scss/offcanvas";
// @import "~/node_modules/bootstrap/scss/placeholders";
// Helpers
@import "~/node_modules/bootstrap/scss/helpers";
// Utilities
@import "~/node_modules/bootstrap/scss/utilities/api";
// Make the bootstrap icons available.
// FIXME: This requires cp -r node_modules/bootstrap-icons/font/fonts static/src/css/
// to be run manually due to parcel limitations.
// @import "../../../node_modules/bootstrap-icons/font/bootstrap-icons";
// Install the datatables.net bootstrap5 styles.
// FIXME: Including this with ~ fails for some odd reason?
@import "../../../node_modules/datatables.net-bs5/css/dataTables.bootstrap5";
// Leave room for fixed-top navbar.
body {
padding-top: 60px;
}
// Make the font size choice cascade down into group menu dropdowns.
.leftmenu li>ul {
font-size: inherit;
}
// Make the long dropdowns in the group menu scrollable.
.group-menu .dropdown-menu {
height: auto;
width: auto;
max-height: 35em;
overflow-x: hidden;
overflow-y: auto;
}
// Helper to constrain the size of the main logo
.ietflogo {
width: 75%;
max-width: 300px;
}

View file

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

Before

Width:  |  Height:  |  Size: 156 B

After

Width:  |  Height:  |  Size: 156 B

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View file

@ -0,0 +1,13 @@
require('datatables.net')(window, $);
require('datatables.net-bs5')(window, $);
// Disable datatable paging by default.
$.extend($.fn.dataTable.defaults, {
info : false,
paging : false,
"search": {
"caseInsensitive": true
}
});
$(document).ready(function() { $(".tablesorter").DataTable(); });

78
ietf/static/js/ietf.js Normal file
View file

@ -0,0 +1,78 @@
// Only import what we need:
// https://getbootstrap.com/docs/5.1/customize/optimize/
// import "bootstrap/js/dist/alert";
import "bootstrap/js/dist/button";
// import "bootstrap/js/dist/carousel";
import "bootstrap/js/dist/collapse";
import "bootstrap/js/dist/dropdown";
// import "bootstrap/js/dist/modal";
// import "bootstrap/js/dist/offcanvas";
// import "bootstrap/js/dist/popover";
// import "bootstrap/js/dist/scrollspy";
import "bootstrap/js/dist/tab";
// import "bootstrap/js/dist/toast";
// import "bootstrap/js/dist/tooltip";
import jquery from "jquery"
window.$ = window.jQuery = jquery;
if (!process.env.BUILD_DEPLOY) {
// get warnings for using deprecated jquery features
require("jquery-migrate")
}
function dropdown_hover() {
var navbar = $(this)
.closest(".navbar");
if (navbar.length === 0 || navbar.find(".navbar-toggler")
.is(":hidden")) {
$(this)
.children(".dropdown-toggle")
.dropdown("toggle");
}
}
if (!("ontouchstart" in document.documentElement)) {
$("ul.nav li.dropdown, ul.nav li.dropend")
.on("mouseenter", dropdown_hover)
.on("mouseleave", dropdown_hover);
}
// load data for the menu
$.ajax({
url: $(document.body)
.data("group-menu-data-url"),
type: "GET",
dataType: "json",
success: function (data) {
for (var parentId in data) {
var attachTo = $(".group-menu.group-parent-" + parentId);
if (attachTo.length == 0) {
console.log("Could not find parent " + parentId);
continue;
}
attachTo.find(".dropdown-menu")
.remove();
var menu = ['<ul class="dropdown-menu ms-n1">'];
var groups = data[parentId];
var gtype = "";
for (var i = 0; i < groups.length; ++i) {
var g = groups[i];
if (g.type != gtype) {
if (i > 0)
menu.push('<li class="dropdown-divider"></li>');
menu.push('<li class="dropdown-header">' + g.type + 's</li>');
gtype = g.type;
}
menu.push('<li><a class="dropdown-item" href="' + g.url + '">' +
g.acronym + ' &mdash; ' + g.name + '</a></li>');
}
menu.push("</ul>");
for (var i = 0; i < attachTo.length; i++) {
attachTo.closest(".dropdown-menu");
}
attachTo.append(menu.join(""));
}
}
});

View file

@ -1,33 +1,25 @@
<!DOCTYPE html> {% load ietf_filters static %}
<!doctype html>
{# Copyright The IETF Trust 2015-2021, All Rights Reserved #}
{% load ietf_filters static %}
{% load origin %}{% origin %}
{% load bootstrap3 %}
{% load django_bootstrap5 %}
<html lang="en">
<head>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{% block title %}No title{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="{% static 'ptmono/stylesheet.css' %}" rel='stylesheet' type='text/css'>
<link href="{% static 'ptsans/stylesheet.css' %}" rel='stylesheet' type='text/css'>
<link href="{% static 'ptserif/stylesheet.css' %}" rel='stylesheet' type='text/css'>
{% comment %}
<!-- Halloween
{% comment Halloween %}
<link href='https://fonts.googleapis.com/css?family=IM+Fell+English+SC|IM+Fell+DW+Pica:400,400italic|Nova+Mono|IM+Fell+English:400,400italic&subset=latin-ext,latin' rel='stylesheet' type='text/css'>
-->
{% endcomment %}
<link rel="stylesheet" href="{% static 'font-awesome/css/font-awesome.min.css' %}">
<link rel="stylesheet" href="{% static 'ietf/font-datatracker/css/font-datatracker.css' %}">
<link rel="stylesheet" href="{% static 'ietf/bootstrap/css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'ietf/bootstrap/css/bootstrap-theme.min.css' %}">
<link rel="stylesheet" href="{% static 'ietf/css/ietf.css' %}">
{% if debug %}
<link rel="stylesheet" href="{% static 'jquery.tablesorter/css/theme.bootstrap.min.css' %}">
{% endif %}
<style>
{% block morecss %}{% endblock %}
{% block morecss %}{% endblock %}
</style>
{% block pagehead %}{% endblock %}
@ -38,136 +30,109 @@
<link rel="shortcut icon" href="{% static 'ietf/images/ietf-icon-red3.png' %}">
{% endif %}
<link rel="apple-touch-icon" href="{% static 'ietf/images/apple-touch-icon.png' %}">
</head>
</head>
<body {% block bodyAttrs %}{%endblock%} data-group-menu-data-url="{% url 'ietf.group.views.group_menu_data' %}">
<nav class="navbar {% if server_mode and server_mode != "production" %}navbar-default{% else %}navbar-inverse{% endif %} {% if navbar_mode %}{{ navbar_mode }}{% else %}navbar-fixed-top{% endif %}">
<body {% block bodyAttrs %}{%endblock%} data-group-menu-data-url="{% url 'ietf.group.views.group_menu_data' %}">
<nav class="navbar navbar-expand-lg {% if server_mode and server_mode != " production" %}navbar-light bg-warning{% else %}navbar-dark bg-secondary{% endif %} {% if navbar_mode %}{{ navbar_mode }}{% else %}fixed-top{% endif %}">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">
<img alt="IETF Logo" src="{% static 'ietf/images/ietflogo-small-transparent.png' %}">
{% if not user.is_authenticated %}
{% if server_mode and server_mode != "production" %}
<b><i><small>Development mode</small></i></b>
{% else %}
Datatracker
{% endif %}
{% endif %}
</a>
</div>
<noscript>
<p class="navbar-text"><small>Enable Javascript for full functionality.</small></p>
</noscript>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="hidden-nojs nav navbar-nav">
{% include "base/menu.html" with flavor="top" %}
</ul>
{% if not user.is_authenticated %}
<p class="navbar-text"></p>
<a class="btn {% if server_mode and server_mode == "production" %}btn-warning{% else %}btn-default{% endif %} btn-sm navbar-btn" rel="nofollow" href="/accounts/login/?next={{request.get_full_path|urlencode}}">Sign in</a>
{% endif %}
<form class="navbar-form navbar-right hidden-xs" action="/doc/search/">
<div class="form-group">
<input class="form-control input-sm" type="text" name="name" placeholder="Document search" required>
<input type="hidden" name="activedrafts" value="on">
<input type="hidden" name="rfcs" value="on">
</div>
</form>
</div>
<a class="navbar-brand" href="/">
<img alt="IETF Logo" src="{% static 'ietf/images/ietflogo-small-transparent.png' %}">
Datatracker
{% if server_mode and server_mode != "production" %}
Dev Mode
{% endif %}
</a>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav">
{% include "base/menu.html" with flavor="top" %}
</ul>
</div>
{% if not user.is_authenticated %}
<a class="d-none d-sm-block mx-5 btn {% if server_mode and server_mode == " production" %}btn-warning{% else %}btn-info{% endif %}" rel="nofollow" href="/accounts/login/?next={{request.get_full_path|urlencode}}">Sign
in</a>
{% endif %}
<form class="d-flex d-none d-lg-block" action="/doc/search/">
<input class="form-control" type="text" name="name" placeholder="Document search" required>
<input type="hidden" name="activedrafts" value="on">
<input type="hidden" name="rfcs" value="on">
</form>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-collapse" aria-controls="navbar-collapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>
<div class="container-fluid-narrow">
</nav>
<div class="pt-3 container-fluid">
{% comment %} {% bootstrap_messages %} {% endcomment %}
{% for message in messages %}
<div class="alert{% if message.level_tag %} alert-{% if message.level_tag == 'error' %}danger{% else %}{{ message.level_tag }}{% endif %}{% endif %}{% if message.extra_tags %} {{message.extra_tags}}{% endif %} alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&#215;</button>{{ message }}</div>
<div class="alert{% if message.level_tag %} alert-{% if message.level_tag == 'error' %}danger{% else %}{{ message.level_tag }}{% endif %}{% endif %}{% if message.extra_tags %} {{message.extra_tags}}{% endif %} alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&#215;</button>{{ message }}</div>
{% endfor %}
{% if request.COOKIES.left_menu == "on" and not hide_menu %} {# ugly hack for the more or less unported meeting agenda edit pages #}
<div class="row">
<div class="col-md-2 visible-md visible-lg leftmenu">
<ul class="nav nav-pills nav-stacked panel panel-default panel-body">
{% include "base/menu.html" with flavor="left" %}
</ul>
</div>
<div class="col-md-10" id="content">
{% else %}
<div class="col-md-12 col-sm-12" id="content">
{% endif %}
{% block content %}{{ content|safe }}{% endblock %}
{% block content_end %}{% endblock %}
{% if request.COOKIES.left_menu == "on" and not hide_menu %}
</div>
</div>
{% else %}
</div>
{% endif %}
{% block footer %}
<hr>
<div class="col-md-12 col-sm-12">
<div class="text-center padded">
<a href="https://www.rfc-editor.org/" class="padded">RFC&nbsp;Editor</a>
<a href="https://www.ietf.org/llc/" class="padded">IASA&nbsp;&amp;&nbsp;IETF&nbsp;LLC</a>
<a href="https://trustee.ietf.org/" class="padded">IETF&nbsp;Trust</a>
<a href="https://www.irtf.org/" class="padded">IRTF</a>
<a href="https://www.ietf.org/" class="padded">IETF</a>
<a href="https://www.ietf.org/iesg/" class="padded">IESG</a>
<a href="https://www.iab.org/" class="padded">IAB</a>
<a href="https://www.iana.org/" class="padded">IANA</a>
<a href="https://www.ietf.org/privacy-statement/" class="padded">Privacy&nbsp;Statement</a>
</div>
</div>
<footer class="col-md-12 col-sm-12">
<div class="col-md-12">
<div class="text-center">
<p class="small text-muted">
{% if version_num %}
<a href="/release/about">About</a> |
IETF Datatracker |
<a href="/release/{{version_num}}/">Version {{ version_num }}</a> |
{{revision_date}} |
{% endif %}
Report a bug:
<a href="https://trac.ietf.org/trac/ietfdb/newticket">Tracker:<span class="fa fa-bug"></span></a>
{% if bugreport_email %}
<a href="mailto:{{ bugreport_email }}">Email:<span class="fa fa-envelope"></span></a>
{# ugly hack for the more or less unported meeting agenda edit pages #}
<div class="row">
<div class="d-none d-md-block border-end lh-sm leftmenu small" style="width: 13em;">
<ul class="nav nav-pills flex-column">
{% include "base/menu.html" with flavor="left" %}
</ul>
</div>
<div class="col" id="content">
{% else %}
<div class="col" id="content">
{% endif %}
{% block content %}{{ content|safe }}{% endblock %}
{% block content_end %}{% endblock %}
{% if request.COOKIES.left_menu == "on" and not hide_menu %}
</div>
{% endif %}
<br>
{% if python_version %}Python {{ python_version }}{% endif %} |
{% if django_version %}Django {{ django_version }}{% endif %}
</p>
</div>
</div>
</footer>
{% endblock %}
</div>
{% block footer %}
<hr>
<div class="col-md-12 col-sm-12">
<div class="text-center padded">
<a href="https://www.rfc-editor.org/" class="padded">RFC&nbsp;Editor</a>
<a href="https://www.ietf.org/llc/" class="padded">IASA&nbsp;&amp;&nbsp;IETF&nbsp;LLC</a>
<a href="https://trustee.ietf.org/" class="padded">IETF&nbsp;Trust</a>
<a href="https://www.irtf.org/" class="padded">IRTF</a>
<a href="https://www.ietf.org/" class="padded">IETF</a>
<a href="https://www.ietf.org/iesg/" class="padded">IESG</a>
<a href="https://www.iab.org/" class="padded">IAB</a>
<a href="https://www.iana.org/" class="padded">IANA</a>
<a href="https://www.ietf.org/privacy-statement/" class="padded">Privacy&nbsp;Statement</a>
</div>
</div>
<footer class="col-md-12 col-sm-12">
<div class="col-md-12">
<div class="text-center">
<p class="small text-muted">
{% if version_num %}
<a href="/release/about">About</a> |
IETF Datatracker |
<a href="/release/{{version_num}}/">Version {{ version_num }}</a>
|
{{revision_date}} |
{% endif %}
Report a bug:
<a href="https://trac.ietf.org/trac/ietfdb/newticket">Tracker:<span class="fa fa-bug"></span></a>
{% if bugreport_email %}
<a href="mailto:{{ bugreport_email }}">Email:<span class="fa fa-envelope"></span></a>
{% endif %}
<br>
{% if python_version %}Python {{ python_version }}{% endif %} |
{% if django_version %}Django {{ django_version }}{% endif %}
</p>
</div>
</div>
</footer>
{% endblock %}
</div>
</div>
{% include "debug.html" %}
{% include "debug.html" %}
<script src="{% static 'ietf/js/ietf.js' %}"></script>
{% block js %}{% endblock %}
{% if debug %}
<script src="{% static 'jquery.tablesorter/js/jquery.tablesorter.combined.min.js' %}"></script>
{% endif %}
</body>
<script src="{% static 'jquery/jquery.min.js' %}"></script>
{% comment %}
<!-- Remove the *-nojs attributes if we are running js. This depends on jQuery's removeClass(): -->
<!-- Do this as early as possible (after loading the page and jQuery) to avoid rendering changes -->
{% endcomment %}
<script>$(".visible-nojs").removeClass("visible-nojs");</script>
<script>$(".hidden-nojs").removeClass("hidden-nojs");</script>
<script src="{% static 'js-cookie/src/js.cookie.js' %}"></script>
<script src="{% static 'ietf/bootstrap/js/bootstrap.min.js' %}"></script>
<script src="{% static 'ietf/js/ietf.js' %}"></script>
{% block js %}{% endblock %}
{% if debug %}
<script src="{% static 'jquery.tablesorter/js/jquery.tablesorter.combined.min.js' %}"></script>
{% endif %}
</body>
</html>

View file

@ -1,166 +1,173 @@
{# Copyright The IETF Trust 2015-2019, All Rights Reserved #}{% load origin %}{% origin %}
{# Copyright The IETF Trust 2015-2019, All Rights Reserved #}
{% load origin %}
{% origin %}
{% load ietf_filters managed_groups wg_menu active_groups_menu group_filters %}
{% if flavor != "top" %}
{% include "base/menu_user.html" %}
{% if flavor != 'top' %}
{% include "base/menu_user.html" %}
{% endif %}
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
{#<span class="fa fa-users"></span>#}
Groups
{% if flavor == "top" %}
</a>
<ul class="dropdown-menu" role="menu">
<li class="nav-item dropdown">
{% if flavor == "top" %}
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-auto-close="false" data-bs-toggle="dropdown" aria-expanded="false">
Groups
</a>
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
{% else %}
<span class="fw-bolder">Groups</span>
{% endif %}
{%if flavor == 'top' %}<li class="dropdown-header">By area/parent</li>{% endif %}
{% wg_menu flavor %}
<li class="dropend">
<a class="dropdown-item dropdown-toggle {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.active_groups" %}">Other</a>
{% active_groups_menu flavor %}
</li>
<li class="dropdown-header visible-lg-block">By area/parent</li>
{% endif %}
{% wg_menu %}
<li class="dropdown-submenu group-menu"><a href="{% url "ietf.group.views.active_groups" %}">Other</a>{% active_groups_menu %} </li>
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li {%if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>New work</li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.chartering_groups" %}">Chartering groups</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.bofs" group_type="wg" %}">BOFs</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.doc.views_bofreq.bof_requests" %}">BOF Requests</a></li>
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>New work</li>
<li><a href="{% url "ietf.group.views.chartering_groups" %}">Chartering groups</a></li>
<li><a href="{% url "ietf.group.views.bofs" group_type="wg" %}">BOFs</a></li>
<li><a href="{% url "ietf.doc.views_bofreq.bof_requests" %}">BOF Requests</a></li>
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li {%if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>Other groups</li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.concluded_groups" %}">Concluded groups</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.mailinglists.views.nonwg' %}">Non-WG lists</a></li>
{% if flavor == "top" %}</ul>{% endif %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>Other groups</li>
<li><a href="{% url "ietf.group.views.concluded_groups" %}">Concluded groups</a></li>
<li><a href="{% url 'ietf.mailinglists.views.nonwg' %}">Non-WG lists</a></li>
{% if flavor == "top" %}</ul>{% endif %}
</li>
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
{#<span class="fa fa-file-text"></span>#}
Documents
{% if flavor == "top" %}
</a>
<ul class="dropdown-menu" role="menu">
{% endif %}
<li><a href="{% url "ietf.doc.views_search.search" %}">Search</a></li>
<li><a href="{% url "ietf.doc.views_search.recent_drafts" %}">Recent drafts</a></li>
<li><a href="{% url "ietf.submit.views.upload_submission" %}">Draft submission</a></li>
{% if user and user.is_authenticated %}
<li><a href="{% url "ietf.community.views.view_list" user.username %}">My tracked docs</a></li>
{% if user|has_role:"Area Director,Secretariat" %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li><a href="{% url 'ietf.doc.views_status_change.rfc_status_changes' %}">RFC status changes</a></li>
<li class="nav-item dropdown">
{% if flavor == "top" %}
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Documents
</a>
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
{% else %}
<span class="fw-bolder">Documents</span>
{% endif %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li><a href="{% url 'ietf.doc.views_ballot.irsg_ballot_status' %}">IRSG ballot status</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.doc.views_search.search" %}">Search</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.doc.views_search.recent_drafts" %}">Recent drafts</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.submit.views.upload_submission" %}">Draft submission</a></li>
{% if user|has_role:"WG Chair,RG Chair" %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>Manage</li>
<li><a href="{% url "ietf.submit.views.approvals" %}">Approve a draft</a></li>
{% if user and user.is_authenticated %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.community.views.view_list" user.username %}">My tracked docs</a></li>
{% for g in user|docman_groups %}
<li><a href="{% url "ietf.group.views.group_documents" g.acronym %}">{{ g.acronym }} {{ g.type.slug }} docs</a></li>
{% endfor %}
{% for g in user|matman_groups %}
<li><a href="{% url "ietf.group.views.meetings" g.acronym %}">{{ g.acronym }} {{ g.type.slug }} meetings</a></li>
{% endfor %}
{% if user|has_role:"Area Director,Secretariat" %}
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.doc.views_status_change.rfc_status_changes' %}">RFC status changes</a></li>
{% endif %}
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.doc.views_ballot.irsg_ballot_status' %}">IRSG ballot status</a></li>
{% if user|has_role:"WG Chair,RG Chair" %}
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li {%if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>Manage</li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.submit.views.approvals" %}">Approve a draft</a></li>
{% for g in user|docman_groups %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.group_documents" g.acronym %}">{{ g.acronym }} {{ g.type.slug }} docs</a></li>
{% endfor %}
{% for g in user|matman_groups %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.meetings" g.acronym %}">{{ g.acronym }} {{ g.type.slug }} meetings</a></li>
{% endfor %}
{% endif %}
{% if user|has_role:"Review Team Secretary" %}
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li {%if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>Review Teams</li>
{% for g in user|managed_review_groups %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.review_requests" g.acronym %}">{{ g.acronym }} reviews</a></li>
{% endfor %}
{% endif %}
{% if user|active_nomcoms %}
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li {%if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>NomComs</li>
{% for g in user|active_nomcoms %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.nomcom.views.private_index" g.nomcom_set.first.year %}">{{ g.acronym|capfirst }}</a></li>
{% endfor %}
{% endif %}
{% endif %}
{% if user|has_role:"Review Team Secretary" %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>Review Teams</li>
{% for g in user|managed_review_groups %}
<li><a href="{% url "ietf.group.views.review_requests" g.acronym %}">{{ g.acronym }} reviews</a></li>
{% endfor %}
{% endif %}
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li {%if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>RFC streams</li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.stream_documents" acronym="iab" %}">IAB</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.stream_documents" acronym="irtf" %}">IRTF</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.group.views.stream_documents" acronym="ise" %}">ISE</a></li>
{% if user|active_nomcoms %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>Nomcoms</li>
{% for g in user|active_nomcoms %}
<li><a href="{% url "ietf.nomcom.views.private_index" g.nomcom_set.first.year %}">{{ g.acronym|capfirst }}</a></li>
{% endfor %}
{% endif %}
{% endif %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>RFC streams</li>
<li><a href="{% url "ietf.group.views.stream_documents" acronym="iab" %}">IAB</a></li>
<li><a href="{% url "ietf.group.views.stream_documents" acronym="irtf" %}">IRTF</a></li>
<li><a href="{% url "ietf.group.views.stream_documents" acronym="ise" %}">ISE</a></li>
{% if flavor == "top" %}</ul>{% endif %}
{% if flavor == 'top' %}</ul>{% endif %}
</li>
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
{#<span class="fa fa-comments"></span>#}
Meetings
{% if flavor == "top" %}
</a>
<ul class="dropdown-menu" role="menu">
{% endif %}
<li class="nav-item dropdown">
{% if flavor == "top" %}
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Meetings
</a>
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
{% else %}
<span class="fw-bolder">Meetings</span>
{% endif %}
{% if flavor == "top" %}
<li class="dropdown-header visible-lg-block">Next meeting</li>
{% endif %}
<li><a href="/meeting/agenda/">Agenda</a></li>
<li><a href="/meeting/materials/">Materials</a></li>
<li><a href="/meeting/floor-plan/">Floor plan</a></li>
<li><a href="https://www.ietf.org/how/meetings/register/">Registration</a></li>
<li><a href="{% url 'ietf.meeting.views.important_dates' %}">Important dates</a></li>
<li><a href="/secr/sreq/">Request a session</a></li>
<li><a href="/meeting/requests">Session requests</a></li>
{% if flavor == "top" %}
<li class="divider hidden-xs"></li>
<li class="dropdown-header visible-lg-block">Upcoming meetings</li>
{% endif %}
<li><a href="/meeting/upcoming">Upcoming meetings</a></li>
{% if flavor == "top" %}
<li class="divider hidden-xs"></li>
<li class="dropdown-header visible-lg-block">Past meetings</li>
{% endif %}
<li><a href="/meeting/past">Past meetings</a></li>
<li><a href="https://www.ietf.org/how/meetings/past/">Meeting proceedings</a></li>
{% if flavor == "top" %}</ul>{% endif %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/meeting/agenda/">Agenda</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/meeting/materials/">Materials</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/meeting/floor-plan/">Floor plan</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="https://www.ietf.org/how/meetings/register/">Registration</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.meeting.views.important_dates' %}">Important dates</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/secr/sreq/">Request a session</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/meeting/requests">Session requests</a></li>
{% if flavor == 'top' %}
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li {%if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>New work</li>
<li class="dropdown-header">Upcoming meetings</li>
{% endif %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/meeting/upcoming">Upcoming meetings</a></li>
{% if flavor == 'top' %}
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li {%if flavor == 'top' %}class="dropdown-header"{% else %}class="nav-item fw-bolder"{% endif %}>New work</li>
<li class="dropdown-header">Past meetings</li>
{% endif %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/meeting/past">Past meetings</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="https://www.ietf.org/how/meetings/past/">Meeting proceedings</a></li>
{% if flavor == 'top' %}</ul>{% endif %}
</li>
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
{% if flavor == "top" %}<a href="#" class="dropdown-toggle" data-toggle="dropdown">{% endif %}
{#<span class="fa fa-folder"></span>#}
Other
{% if flavor == "top" %}
</a>
<ul class="dropdown-menu" role="menu">
{% endif %}
<li class="nav-item dropdown">
{% if flavor == "top" %}
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Other
</a>
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
{% else %}
<span class="fw-bolder">Other</span>
{% endif %}
<li><a href="/ipr/">IPR disclosures</a></li>
<li><a href="/liaison/">Liaison statements</a></li>
<li><a href="/iesg/agenda/">IESG agenda</a></li>
<li><a href="{% url 'ietf.nomcom.views.index' %}">NomComs</a></li>
<li><a href="/doc/downref/">Downref registry</a></li>
<li class="dropdown-submenu">
<a href="{% url "ietf.stats.views.stats_index" %}">Statistics</a>
<ul class="dropdown-menu">
<li><a href="{% url 'ietf.stats.views.document_stats' %}">Drafts/RFCs</a></li>
<li><a href="{% url 'ietf.stats.views.meeting_stats' %}">Meetings</a></li>
{% if user and user.is_authenticated %}
<li><a href="{% url 'ietf.stats.views.review_stats' %}">Reviews</a></li>
{% endif %}
</ul>
</li>
<li><a href="/group/edu/materials/">Tutorials</a></li>
<li><a href="/api/">API Help</a></li>
<li><a href="{% url 'ietf.release.views.release' %}">Release notes</a></li>
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li><a href="https://trac.ietf.org/trac/ietfdb/newticket"><span class="fa fa-bug"></span> Report a bug</a></li>
{% if flavor == "top" %}</ul>{% endif %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/ipr/">IPR disclosures</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/liaison/">Liaison statements</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/iesg/agenda/">IESG agenda</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.nomcom.views.index' %}">NomComs</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/doc/downref/">Downref registry</a></li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.stats.views.stats_index" %}">Statistics</a>
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.stats.views.document_stats' %}">Drafts/RFCs</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.stats.views.meeting_stats' %}">Meetings</a></li>
{% if user and user.is_authenticated %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.stats.views.review_stats' %}">Reviews</a></li>
{% endif %}
</ul>
</li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/group/edu/materials/">Tutorials</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/api/">API Help</a></li>
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.release.views.release' %}">Release notes</a></li>
{% if flavor == 'top' %}<li class="dropdown-divider"></li>{% endif %}
<li><a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="https://trac.ietf.org/trac/ietfdb/newticket"><span class="fa fa-bug"></span> Report a bug</a></li>
{% if flavor == 'top' %}</ul>{% endif %}
</li>
{% if flavor == "top" %}
{% include "base/menu_user.html" %}
{% if flavor == 'top' %}
{% include "base/menu_user.html" %}
{% endif %}

View file

@ -1,13 +1,17 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
<ul class="dropdown-menu" role="menu">
{% for p in parents %}
<li>
<a href="{{ p.menu_url }}">Active {{ p.name }}s</a>
</li>
{% endfor %}
{% for o in others %}
<li>
<a href="{{o.menu_url}}">{{ o.acronym|upper }}</a>
</li>
{% endfor %}
</ul>
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% origin %}
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
{% for p in parents %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap{% endif %}" href="{{ p.menu_url }}">Active {{ p.name }}s</a>
</li>
{% endfor %}
{% for o in others %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap{% endif %}" href="{{o.menu_url}}">{{ o.acronym|upper }}</a>
</li>
{% endfor %}
</ul>

View file

@ -1,72 +1,192 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% origin %}
{% load ietf_filters %}
<li {% if flavor == "top" %}class="dropdown"{% else %}class="nav-header"{% endif %}>
{% if flavor == "top" %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
{% if user.is_authenticated %}{{ user }}{% else %} User {% endif %}
</a>
<ul class="dropdown-menu" role="menu">
{% else %}
User
{% endif %}
{% if request.get_full_path == "/accounts/logout/" %}
<li><a rel="nofollow" href="/accounts/login{% if "/accounts/logout/" not in request.get_full_path %}/?next={{request.get_full_path|urlencode}}{% endif %}">Sign in</a></li>
{% else %}
{% if user.is_authenticated %}
<li><a rel="nofollow" href="/accounts/logout/" >Sign out</a></li>
<li><a rel="nofollow" href="/accounts/profile/">Account info</a></li>
<li><a href="/person/{{user.person.name|urlencode}}">Public profile page</a></li>
<li><a href="{%url "ietf.cookies.views.preferences" %}" rel="nofollow">Preferences</a></li>
<li><a href="{%url "ietf.ietfauth.views.apikey_index" %}" rel="nofollow">API keys</a></li>
<li><a rel="nofollow" href="/accounts/password/">Change password</a></li>
<li><a rel="nofollow" href="/accounts/username/">Change username</a></li>
<li class="nav-item dropdown">
{% if flavor == "top" %}
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{% if user.is_authenticated %}
{{ user }}
{% else %}
User
{% endif %}
</a>
<ul class="dropdown-menu {% if flavor == 'top' %}mt-n1{% else %}ms-n1{% endif %}">
{% else %}
<li><a rel="nofollow" href="/accounts/login/?next={{request.get_full_path|urlencode}}">Sign in</a></li>
<li><a rel="nofollow" href="/accounts/reset/">Password reset</a></li>
<li><a href="{%url "ietf.cookies.views.preferences" %}" rel="nofollow">Preferences</a></li>
<span class="fw-bolder">User</span>
{% endif %}
<li><a href="{% url 'personal-information' %}">Handling of personal information</a></li>
{% endif %}
{% if not request.user.is_authenticated %}
<li><a href="{% url "ietf.ietfauth.views.create_account" %}">New account</a></li>
{% endif %}
{% if request.get_full_path == "/accounts/logout/" %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" rel="nofollow" href="/accounts/login{% if "/accounts/logout/" not in request.get_full_path %}/?next={{request.get_full_path|urlencode}}{% endif %}">
Sign in
</a>
</li>
{% else %}
{% if user.is_authenticated %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" rel="nofollow" href="/accounts/logout/">
Sign out
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" rel="nofollow" href="/accounts/profile/">
Account info
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/person/{{user.person.name|urlencode}}">
Public profile page
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{%url "ietf.cookies.views.preferences" %}" rel="nofollow">
Preferences
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{%url "ietf.ietfauth.views.apikey_index" %}" rel="nofollow">
API keys
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" rel="nofollow" href="/accounts/password/">
Change password
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" rel="nofollow" href="/accounts/username/">
Change username
</a>
</li>
{% else %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" rel="nofollow" href="/accounts/login/?next={{request.get_full_path|urlencode}}">
Sign in
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" rel="nofollow" href="/accounts/reset/">
Password reset
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{%url "ietf.cookies.views.preferences" %}" rel="nofollow">
Preferences
</a>
</li>
{% endif %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'personal-information' %}">Handling of personal information
</a>
</li>
{% endif %}
{% if user|has_role:"Reviewer" %}
<li><a href="{% url "ietf.ietfauth.views.review_overview" %}">My reviews</a></li>
{% endif %}
{% if not request.user.is_authenticated %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.ietfauth.views.create_account" %}">
New account
</a>
</li>
{% endif %}
{% if user|has_role:"Area Director" %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>AD dashboard</li>
<li><a href="{% url 'ietf.doc.views_search.docs_for_ad' name=user.person.full_name_as_key %}">My docs</a></li>
<li><a href="{% url "ietf.iesg.views.agenda_documents" %}">Next telechat</a></li>
<li><a href="{% url "ietf.iesg.views.discusses" %}">Discusses</a></li>
<li><a href="{% url "ietf.iesg.views.milestones_needing_review" %}">Milestone review</a></li>
<li><a href="{% url "ietf.doc.views_search.drafts_in_last_call" %}">Last Call docs</a></li>
{% endif %}
{% if user|has_role:"Reviewer" %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.ietfauth.views.review_overview" %}">
My reviews
</a>
</li>
{% endif %}
{% if user|has_role:"Secretariat" %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>IETF secretariat</li>
<li><a href="/admin/iesg/telechatdate/">Telechat dates</a></li>
<li><a href="/admin/iesg/telechatagendaitem/">Management items</a></li>
<li><a href="{% url "ietf.iesg.views.milestones_needing_review" %}">Milestones</a></li>
<li><a href="{% url "ietf.sync.views.discrepancies" %}">Sync discrepancies</a>
<li><a href="{% url "ietf.ietfauth.views.add_account_whitelist" %}">Account whitelist</a>
{% endif %}
{% if user|has_role:"Area Director" %}
{% if flavor == "top" %}<li class="divider"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header"{% else %}class="nav-header"{% endif %}>
AD dashboard
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url 'ietf.doc.views_search.docs_for_ad' name=user.person.full_name_as_key %}">
My docs
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.iesg.views.agenda_documents" %}">
Next telechat
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.iesg.views.discusses" %}">
Discusses
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.iesg.views.milestones_needing_review" %}">
Milestone review
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.doc.views_search.drafts_in_last_call" %}">
Last Call docs
</a>
</li>
{% endif %}
{% if user|has_role:"IANA" %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>IANA</li>
<li><a href="{% url "ietf.sync.views.discrepancies" %}">Sync discrepancies</a></li>
{% endif %}
{% if user|has_role:"Secretariat" %}
{% if flavor == "top" %}<li class="divider"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header"{% else %}class="nav-header"{% endif %}>
IETF secretariat
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/admin/iesg/telechatdate/">
Telechat dates
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="/admin/iesg/telechatagendaitem/">
Management items
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.iesg.views.milestones_needing_review" %}">
Milestones
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.sync.views.discrepancies" %}">
Sync discrepancies
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.ietfauth.views.add_account_whitelist" %}">
Account whitelist
</a>
</li>
{% endif %}
{% if user|has_role:"RFC Editor" %}
{% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>RFC Editor</li>
<li><a href="{% url "ietf.sync.views.discrepancies" %}">Sync discrepancies</a></li>
{% endif %}
{% if flavor == "top" %}</ul>{% endif %}
{% if user|has_role:"IANA" %}
{% if flavor == "top" %}<li class="divider"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header"{% else %}class="nav-header"{% endif %}>
IANA
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.sync.views.discrepancies" %}">
Sync discrepancies
</a>
</li>
{% endif %}
{% if user|has_role:"RFC Editor" %}
{% if flavor == "top" %}<li class="divider"></li>{% endif %}
<li {%if flavor == "top" %}class="dropdown-header"{% else %}class="nav-header"{% endif %}>
RFC Editor
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{% url "ietf.sync.views.discrepancies" %}">
Sync discrepancies
</a>
</li>
{% endif %}
{% if flavor == "top" %}</ul>{% endif %}
</li>

View file

@ -1,6 +1,12 @@
{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %}
{# Copyright The IETF Trust 2015, All Rights Reserved #}
{% load origin %}
{% origin %}
{% for p in parents %}
<li class="hidden-nojs dropdown-submenu group-menu group-parent-{{ p.id }}">
<a href="{{ p.menu_url }}">{{ p.short_name }}</a>
</li>
{% endfor %}
<li class="hidden-nojs dropend group-menu group-parent-{{ p.id }}">
<a class="dropdown-item dropdown-toggle {% if flavor != 'top' %}text-wrap link-primary{% endif %}" href="{{ p.menu_url }}">
{{ p.short_name }}
</a>
</li>
{% endfor %}

14450
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

29
package.json Normal file
View file

@ -0,0 +1,29 @@
{
"dependencies": {
"@popperjs/core": "^2.10.2",
"bootstrap": "^5.1.3",
"datatables.net": "^1.11.3",
"datatables.net-bs5": "^1.11.3",
"jquery": "^3.6.0"
},
"devDependencies": {
"@parcel/transformer-sass": "^2.0.1",
"jquery-migrate": "^3.3.2",
"parcel": "^2.0.0"
},
"source": [
"ietf/static/js/ietf.js",
"ietf/static/js/datatables.js",
"ietf/static/css/ietf.scss",
"ietf/static/css/datatables.scss",
"ietf/static/images/ietflogo-small-transparent.png",
"ietf/static/images/ietflogo.png",
"ietf/static/images/apple-touch-icon.png",
"ietf/static/images/ietf-icon-red3.png"
],
"targets": {
"default": {
"distDir": "ietf/static/dist/ietf"
}
}
}