From cc723ce449f257be53d3143219f60fdafc9e5a90 Mon Sep 17 00:00:00 2001 From: Lars Eggert Date: Mon, 31 Jan 2022 19:17:50 +0000 Subject: [PATCH] More fixes. - Legacy-Id: 19899 --- ietf/doc/templatetags/ietf_filters.py | 14 +- ietf/ietfauth/views.py | 2 +- ietf/person/tests.py | 7 +- ietf/static/css/ietf.scss | 2 +- ietf/static/css/list.scss | 15 +- ietf/static/js/draft-submit.js | 69 +++ ietf/static/js/list.js | 7 +- ietf/static/js/password_strength.js | 183 +++--- ietf/static/js/zxcvbn.js | 2 +- ietf/submit/templatetags/submit_tags.py | 4 +- ietf/submit/tests.py | 6 +- .../meeting/edit_materials_button.html | 10 +- ietf/templates/meeting/group_materials.html | 30 +- ietf/templates/meeting/group_proceedings.html | 76 ++- .../meeting/previously_approved_slides.html | 45 +- ietf/templates/meeting/proceedings.html | 2 +- .../meeting/proceedings/edit_material.html | 8 +- .../proceedings/remove_restore_material.html | 24 +- .../meeting/propose_session_slides.html | 32 +- .../meeting/remove_sessionpresentation.html | 53 +- .../nomcom/process_nomination_status.html | 16 +- .../registration/change_password.html | 104 ++-- .../registration/change_username.html | 47 +- .../registration/confirm_account.html | 31 +- .../registration/confirm_new_email.html | 38 +- .../registration/confirm_profile_update.html | 36 +- ietf/templates/registration/create.html | 61 +- ietf/templates/registration/edit_profile.html | 198 ++++--- ietf/templates/registration/index.html | 12 +- ietf/templates/registration/logged_out.html | 8 +- ietf/templates/registration/login.html | 15 +- ietf/templates/registration/manual.html | 16 +- .../registration/missing_person.html | 12 +- .../registration/password_reset.html | 20 +- ietf/templates/release/about.html | 141 +++-- ietf/templates/release/release.html | 78 +-- ietf/templates/submit/add_preapproval.html | 65 +-- ietf/templates/submit/add_submit_email.html | 48 +- ietf/templates/submit/api_submit_info.html | 38 +- ietf/templates/submit/approvals.html | 68 ++- ietf/templates/submit/cancel_preapproval.html | 23 +- ietf/templates/submit/confirm_submission.html | 78 +-- ietf/templates/submit/edit_submission.html | 97 ++-- ietf/templates/submit/email.html | 24 +- ietf/templates/submit/extresources_form.html | 7 +- ietf/templates/submit/manual_post.html | 106 ++-- .../submit/problem-reports-footer.html | 19 +- ietf/templates/submit/replaces_form.html | 17 +- ietf/templates/submit/search_submission.html | 33 +- ietf/templates/submit/submission_email.html | 108 ++-- ietf/templates/submit/submission_files.html | 11 +- ietf/templates/submit/submission_status.html | 538 +++++++++++------- ietf/templates/submit/submit_base.html | 44 +- ietf/templates/submit/submitter_form.html | 23 +- ietf/templates/submit/tool_instructions.html | 269 +++++---- ietf/templates/submit/upload_submission.html | 129 ++--- ietf/utils/templatetags/textfilters.py | 2 +- package.json | 1 + 58 files changed, 1761 insertions(+), 1411 deletions(-) create mode 100644 ietf/static/js/draft-submit.js diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index daf24cd3d..f755ed004 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -226,13 +226,13 @@ def urlize_ietf_docs(string, autoescape=None): """ if autoescape and not isinstance(string, SafeData): string = escape(string) - string = re.sub(r"(?)(RFC\s*?)0{0,3}(\d+)", "\\1\\2", string) - string = re.sub(r"(?)(BCP\s*?)0{0,3}(\d+)", "\\1\\2", string) - string = re.sub(r"(?)(STD\s*?)0{0,3}(\d+)", "\\1\\2", string) - string = re.sub(r"(?)(FYI\s*?)0{0,3}(\d+)", "\\1\\2", string) - string = re.sub(r"(?)(draft-[-0-9a-zA-Z._+]+)", "\\1", string) - string = re.sub(r"(?)(conflict-review-[-0-9a-zA-Z._+]+)", "\\1", string) - string = re.sub(r"(?)(status-change-[-0-9a-zA-Z._+]+)", "\\1", string) + string = re.sub(r"(?)(RFC\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) + string = re.sub(r"(?)(BCP\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) + string = re.sub(r"(?)(STD\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) + string = re.sub(r"(?)(FYI\s*?)0{0,3}(\d+)", "\\1\\2", string, flags=re.IGNORECASE) + string = re.sub(r"(?)(draft-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) + string = re.sub(r"(?)(conflict-review-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) + string = re.sub(r"(?)(status-change-[-0-9a-zA-Z._+]+)", "\\1", string, flags=re.IGNORECASE) return mark_safe(string) urlize_ietf_docs = stringfilter(urlize_ietf_docs) diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py index 3cfa9f8bc..028193812 100644 --- a/ietf/ietfauth/views.py +++ b/ietf/ietfauth/views.py @@ -789,4 +789,4 @@ def apikey_disable(request): messages.error(request, "Key validation failed; key not disabled") else: form = KeyDeleteForm(request.GET) - return render(request, 'form.html', {'form':form, 'title':"Disable a personal API key", 'description':'', 'button':'Disable key'}) + return render(request, 'form.html', {'form':form, 'title':"Disable a personal API key", 'description':'', 'button':'Disable key'}) \ No newline at end of file diff --git a/ietf/person/tests.py b/ietf/person/tests.py index a61cfe487..7054bb676 100644 --- a/ietf/person/tests.py +++ b/ietf/person/tests.py @@ -92,12 +92,12 @@ class PersonTests(TestCase): #debug.show('person.photo_name()') self.assertContains(r, person.photo_name(), status_code=200) q = PyQuery(r.content) - self.assertIn("Photo of %s"%person, q("div.bio-text img.bio-photo").attr("alt")) + self.assertIn("Photo of %s"%person, q("div.bio-text img").attr("alt")) bio_text = q("div.bio-text").text() self.assertIsNotNone(bio_text) - photo_url = q("div.bio-text img.bio-photo").attr("src") + photo_url = q("div.bio-text img").attr("src") r = self.client.get(photo_url) self.assertEqual(r.status_code, 200) @@ -398,5 +398,4 @@ class PersonUtilsTests(TestCase): - - + \ No newline at end of file diff --git a/ietf/static/css/ietf.scss b/ietf/static/css/ietf.scss index 56a593d37..55c14bf82 100644 --- a/ietf/static/css/ietf.scss +++ b/ietf/static/css/ietf.scss @@ -38,7 +38,7 @@ $popover-max-width: 100%; @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/progress"; @import "~/node_modules/bootstrap/scss/list-group"; @import "~/node_modules/bootstrap/scss/close"; // @import "~/node_modules/bootstrap/scss/toasts"; diff --git a/ietf/static/css/list.scss b/ietf/static/css/list.scss index 208a62bf2..2d475c0c0 100644 --- a/ietf/static/css/list.scss +++ b/ietf/static/css/list.scss @@ -5,7 +5,6 @@ // @import "~/node_modules/bootstrap/scss/utilities"; table .sort { - // white-space: nowrap; cursor: pointer; } @@ -14,16 +13,18 @@ table .sort:hover { color: var(--#{$variable-prefix}table-hover-color); } -table .sort:before { +table .sort:after { + white-space: nowrap; font-family: 'bootstrap-icons'; - content: '\f127'; + content: '\f283'; // chevron-expand + float: right; padding-right: .25em; } -table .sort.asc:before { - content: '\f128'; +table .sort.asc:after { + content: '\f282'; // chevron-down } -table .sort.desc:before { - content: '\f148'; +table .sort.desc:after { + content: '\f286'; // chevron-up } \ No newline at end of file diff --git a/ietf/static/js/draft-submit.js b/ietf/static/js/draft-submit.js new file mode 100644 index 000000000..13ef20dcc --- /dev/null +++ b/ietf/static/js/draft-submit.js @@ -0,0 +1,69 @@ +$(document) + .ready(function () { + // fill in submitter info when an author button is clicked + $("form.idsubmit input[type=button].author") + .on("click", function () { + var name = $(this) + .data("name"); + var email = $(this) + .data("email"); + + $(this) + .parents("form") + .find("input[name=submitter-name]") + .val(name || ""); + $(this) + .parents("form") + .find("input[name=submitter-email]") + .val(email || ""); + }); + + $("form.idsubmit") + .on("submit", function () { + if (this.submittedAlready) + return false; + else { + this.submittedAlready = true; + return true; + } + }); + + $("form.idsubmit #add-author") + .on("click", function () { + // clone the last author block and make it empty + var cloner = $("#cloner"); + var next = cloner.clone(); + next.find('input:not([type=hidden])') + .val(''); + + // find the author number + var t = next.children('h3') + .text(); + var n = parseInt(t.replace(/\D/g, '')); + + // change the number in attributes and text + next.find('*') + .each(function () { + var e = this; + $.each(['id', 'for', 'name', 'value'], function (i, v) { + if ($(e) + .attr(v)) { + $(e) + .attr(v, $(e) + .attr(v) + .replace(n - 1, n)); + } + }); + }); + + t = t.replace(n, n + 1); + next.children('h3') + .text(t); + + // move the cloner id to next and insert next into the DOM + cloner.removeAttr('id'); + next.attr('id', 'cloner'); + next.insertAfter(cloner); + + }); + }); \ No newline at end of file diff --git a/ietf/static/js/list.js b/ietf/static/js/list.js index 4b32b2296..8374befd8 100644 --- a/ietf/static/js/list.js +++ b/ietf/static/js/list.js @@ -68,9 +68,10 @@ $(document) $(header_row) .children("[data-sort]") .addClass("sort"); - $(header_row) - .children("th, td") - .each((i, e) => field_magic(i, e, fields)); + // $(header_row) + // .children("th, td") + // .wrapInner(""); + // // .each((i, e) => field_magic(i, e, fields)); if ($(header_row) .text() diff --git a/ietf/static/js/password_strength.js b/ietf/static/js/password_strength.js index b7d12e2bc..499b44379 100644 --- a/ietf/static/js/password_strength.js +++ b/ietf/static/js/password_strength.js @@ -1,7 +1,7 @@ // Taken from django-password-strength, with changes to use the bower-managed zxcvbn.js The // bower-managed zxcvbn.js is kept up-to-date to a larger extent than the copy packaged with // the django-password-strength component. -(function($, window, document, undefined){ +(function ($, window, document, undefined) { window.djangoPasswordStrength = { config: { passwordClass: 'password_strength', @@ -15,64 +15,108 @@ $.extend(self.config, config); } + // Fix the initial widget for bootstrap 5 + var widget = $("." + self.config.passwordClass) + .closest("form"); + widget + .find(".hidden") + .addClass("visually-hidden") + .removeClass("hidden"); + + widget + .find(".label") + .addClass("badge") + .removeClass("label"); + + widget + .find(".label-danger") + .addClass("bg-danger") + .removeClass("label-danger"); + + widget + .find(".text-muted") + .addClass("form-text") + .removeClass("text-muted"); + self.initListeners(); }, - initListeners: function() { + initListeners: function () { var self = this; - var body = $('body'); - $('.' + self.config.passwordClass).on('keyup', function() { - var password_strength_bar = $(this).parent().find('.password_strength_bar'); - var password_strength_info = $(this).parent().find('.password_strength_info'); - var password_strength_offline_info = $(this).parent().parent().parent().find('.password_strength_offline_info'); + $('.' + self.config.passwordClass) + .on('keyup', function () { + var password_strength_bar = $(this) + .parent() + .find('.password_strength_bar'); + var password_strength_info = $(this) + .parent() + .find('.password_strength_info'); + var password_strength_offline_info = $(this) + .parent() + .parent() + .parent() + .find('.password_strength_offline_info'); - if( $(this).val() ) { - var result = zxcvbn( $(this).val() ); + if ($(this) + .val()) { + var result = zxcvbn($(this) + .val()); - if( result.score < 3 ) { - password_strength_bar.removeClass('progress-bar-success').addClass('progress-bar-warning'); - password_strength_info.find('.label').removeClass('hidden'); + if (result.score < 3) { + password_strength_bar.removeClass('bg-success') + .addClass('bg-warning'); + password_strength_info.find('.badge') + .removeClass('visually-hidden'); + } else { + password_strength_bar.removeClass('bg-warning') + .addClass('bg-success'); + password_strength_info.find('.badge') + .addClass('visually-hidden'); + } + + password_strength_bar.width(((result.score + 1) / 5) * 100 + '%') + .attr('aria-valuenow', result.score + 1); + // henrik@levkowetz.com -- this is the only changed line: + password_strength_info.find('.password_strength_time') + .html(result.crack_times_display.online_no_throttling_10_per_second); + password_strength_info.removeClass('visually-hidden'); + + password_strength_offline_info.find('.password_strength_time') + .html(result.crack_times_display.offline_slow_hashing_1e4_per_second); + password_strength_offline_info.removeClass('visually-hidden'); } else { - password_strength_bar.removeClass('progress-bar-warning').addClass('progress-bar-success'); - password_strength_info.find('.label').addClass('hidden'); + password_strength_bar.removeClass('bg-success') + .addClass('bg-warning'); + password_strength_bar.width('0%') + .attr('aria-valuenow', 0); + password_strength_info.addClass('visually-hidden'); } - - password_strength_bar.width( ((result.score+1)/5)*100 + '%' ).attr('aria-valuenow', result.score + 1); - // henrik@levkowetz.com -- this is the only changed line: - password_strength_info.find('.password_strength_time').html(result.crack_times_display.online_no_throttling_10_per_second); - password_strength_info.removeClass('hidden'); - - password_strength_offline_info.find('.password_strength_time').html(result.crack_times_display.offline_slow_hashing_1e4_per_second); - password_strength_offline_info.removeClass('hidden'); - } else { - password_strength_bar.removeClass('progress-bar-success').addClass('progress-bar-warning'); - password_strength_bar.width( '0%' ).attr('aria-valuenow', 0); - password_strength_info.addClass('hidden'); - } - self.match_passwords($(this)); - }); + self.match_passwords($(this)); + }); var timer = null; - $('.' + self.config.confirmationClass).on('keyup', function() { - var password_field; - var confirm_with = $(this).data('confirm-with'); + $('.' + self.config.confirmationClass) + .on('keyup', function () { + var password_field; + var confirm_with = $(this) + .data('confirm-with'); - if( confirm_with ) { - password_field = $('#' + confirm_with); - } else { - password_field = $('.' + self.config.passwordClass); - } + if (confirm_with) { + password_field = $('#' + confirm_with); + } else { + password_field = $('.' + self.config.passwordClass); + } - if (timer !== null) clearTimeout(timer); + if (timer !== null) clearTimeout(timer); - timer = setTimeout(function(){ - self.match_passwords(password_field); - }, 400); - }); + timer = setTimeout(function () { + self.match_passwords(password_field); + }, 400); + }); }, - display_time: function(seconds) { + display_time: function (seconds) { var minute = 60; var hour = minute * 60; var day = hour * 24; @@ -81,46 +125,57 @@ var century = year * 100; // Provide fake gettext for when it is not available - if( typeof gettext !== 'function' ) { gettext = function(text) { return text; }; }; + if (typeof gettext !== 'function') { gettext = function (text) { return text; }; } - if( seconds < minute ) return gettext('only an instant'); - if( seconds < hour) return (1 + Math.ceil(seconds / minute)) + ' ' + gettext('minutes'); - if( seconds < day) return (1 + Math.ceil(seconds / hour)) + ' ' + gettext('hours'); - if( seconds < month) return (1 + Math.ceil(seconds / day)) + ' ' + gettext('days'); - if( seconds < year) return (1 + Math.ceil(seconds / month)) + ' ' + gettext('months'); - if( seconds < century) return (1 + Math.ceil(seconds / year)) + ' ' + gettext('years'); + if (seconds < minute) return gettext('only an instant'); + if (seconds < hour) return (1 + Math.ceil(seconds / minute)) + ' ' + gettext('minutes'); + if (seconds < day) return (1 + Math.ceil(seconds / hour)) + ' ' + gettext('hours'); + if (seconds < month) return (1 + Math.ceil(seconds / day)) + ' ' + gettext('days'); + if (seconds < year) return (1 + Math.ceil(seconds / month)) + ' ' + gettext('months'); + if (seconds < century) return (1 + Math.ceil(seconds / year)) + ' ' + gettext('years'); return gettext('centuries'); }, - match_passwords: function(password_field, confirmation_fields) { + match_passwords: function (password_field, confirmation_fields) { var self = this; // Optional parameter: if no specific confirmation field is given, check all - if( confirmation_fields === undefined ) { confirmation_fields = $('.' + self.config.confirmationClass) } - if( confirmation_fields === undefined ) { return; } + if (confirmation_fields === undefined) { confirmation_fields = $('.' + self.config.confirmationClass); } + if (confirmation_fields === undefined) { return; } var password = password_field.val(); - confirmation_fields.each(function(index, confirm_field) { - var confirm_value = $(confirm_field).val(); - var confirm_with = $(confirm_field).data('confirm-with'); + confirmation_fields.each(function (index, confirm_field) { + var confirm_value = $(confirm_field) + .val(); + var confirm_with = $(confirm_field) + .data('confirm-with'); - if( confirm_with && confirm_with == password_field.attr('id')) { - if( confirm_value && password ) { + if (confirm_with && confirm_with == password_field.attr('id')) { + if (confirm_value && password) { if (confirm_value === password) { - $(confirm_field).parent().find('.password_strength_info').addClass('hidden'); + $(confirm_field) + .parent() + .find('.password_strength_info') + .addClass('visually-hidden'); } else { - $(confirm_field).parent().find('.password_strength_info').removeClass('hidden'); + $(confirm_field) + .parent() + .find('.password_strength_info') + .removeClass('visually-hidden'); } } else { - $(confirm_field).parent().find('.password_strength_info').addClass('hidden'); + $(confirm_field) + .parent() + .find('.password_strength_info') + .addClass('visually-hidden'); } } }); // If a password field other than our own has been used, add the listener here - if( !password_field.hasClass(self.config.passwordClass) && !password_field.data('password-listener') ) { - password_field.on('keyup', function() { + if (!password_field.hasClass(self.config.passwordClass) && !password_field.data('password-listener')) { + password_field.on('keyup', function () { self.match_passwords($(this)); }); password_field.data('password-listener', true); @@ -131,4 +186,4 @@ // Call the init for backwards compatibility djangoPasswordStrength.init(); -})(jQuery, window, document); +})(jQuery, window, document); \ No newline at end of file diff --git a/ietf/static/js/zxcvbn.js b/ietf/static/js/zxcvbn.js index cdf07c40e..6d7d4a8bc 100644 --- a/ietf/static/js/zxcvbn.js +++ b/ietf/static/js/zxcvbn.js @@ -1 +1 @@ -import "zxcvbn"; \ No newline at end of file +window.zxcvbn = require('zxcvbn'); \ No newline at end of file diff --git a/ietf/submit/templatetags/submit_tags.py b/ietf/submit/templatetags/submit_tags.py index 416564881..465d93213 100644 --- a/ietf/submit/templatetags/submit_tags.py +++ b/ietf/submit/templatetags/submit_tags.py @@ -36,5 +36,5 @@ def two_pages_decorated_with_errors(submission, errors): for line in pages.split('\n'): result += escape(line) result += '\n' - result += 'pre>\n' - return mark_safe(result) + result += '\n' + return mark_safe(result) \ No newline at end of file diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py index c542be626..c5edb41ea 100644 --- a/ietf/submit/tests.py +++ b/ietf/submit/tests.py @@ -202,7 +202,7 @@ class SubmitTests(BaseSubmitTestCase): sys.stderr.write("Author initials: %s\n" % author.initials()) self.assertEqual(len(submission.authors), 1) a = submission.authors[0] - self.assertEqual(a["name"], author.ascii) + self.assertEqual(a["name"], author.ascii_name()) self.assertEqual(a["email"], author.email().address.lower()) self.assertEqual(a["affiliation"], "Test Centre Inc.") self.assertEqual(a["country"], "UK") @@ -2516,7 +2516,7 @@ ZSBvZiBsaW5lcyAtIGJ1dCBpdCBjb3VsZCBiZSBhIGRyYWZ0Cg== if is_secretariat: # check that reply button is visible - reply_href = self.get_href(q, "#email-details a#reply%s:contains('Reply')" % submission.pk) + reply_href = self.get_href(q, "a#reply%s:contains('Reply')" % submission.pk) else: # No reply button @@ -2591,7 +2591,7 @@ Thank you # check the page r = self.client.get(the_url) q = PyQuery(r.content) - post_button = q('[type=submit]:contains("Send Email")') + post_button = q('[type=submit]:contains("Send email")') self.assertEqual(len(post_button), 1) subject = post_button.parents("form").find('input[name="subject"]').val() frm = post_button.parents("form").find('input[name="frm"]').val() diff --git a/ietf/templates/meeting/edit_materials_button.html b/ietf/templates/meeting/edit_materials_button.html index 2142e459f..a83f47216 100644 --- a/ietf/templates/meeting/edit_materials_button.html +++ b/ietf/templates/meeting/edit_materials_button.html @@ -1,10 +1,14 @@ +{# bs5ok #} {% load ietf_filters session_filters origin %} {% if not session.past_cutoff_date %} {% origin %} {% with gt=session.group.type_id %} {%comment%} - Edit - {%endcomment%} - Edit materials + Edit + {% endcomment %} + + Edit materials + {% endwith %} {% endif %} \ No newline at end of file diff --git a/ietf/templates/meeting/group_materials.html b/ietf/templates/meeting/group_materials.html index 80ab1b80a..af83b1d76 100644 --- a/ietf/templates/meeting/group_materials.html +++ b/ietf/templates/meeting/group_materials.html @@ -1,3 +1,4 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015-2019, All Rights Reserved #} {% load origin %} {% origin %} @@ -5,11 +6,6 @@ {% load tz %} - {% comment %} - - - - {% endcomment %} {% if session.name %}
{{ session.name }}
{% else %} @@ -22,15 +18,9 @@ {% endif %} {% if session.all_meeting_sessions_cancelled %} - {% if user|has_role:"Secretariat" or user_groups %} - - Session cancelled - - {% else %} - - Session cancelled - - {% endif %} + + Session cancelled + {% else %} {% if session.all_meeting_agendas %} @@ -38,7 +28,7 @@ {% if session.all_meeting_agendas|length == 1 %} {% if agenda.time > old %} + title="Last Update: {{ agenda.time|utc|date:"Y-m-d H:i:s" }} UTC"> {% endif %} Agenda
@@ -85,7 +75,7 @@ {% endfor %} {% endif %} {% else %} - No bluesheets + No bluesheets {% endif %} {% endif %} @@ -94,7 +84,7 @@ {% for slide in slides %} {% if slide.time > old %} + title="Last Update: {{ slide.time|utc|date:"Y-m-d H:i:s" }} UTC"> {% endif %} {{ slide.title|clean_whitespace }}
@@ -108,7 +98,7 @@ {% for draft in drafts %} {% if draft.time > old %} + title="Last Update: {{ draft.time|utc|date:"Y-m-d H:i:s" }} UTC"> {% endif %} {{ draft.name }}
@@ -126,8 +116,8 @@ {% if user|has_role:"Secretariat" or session.group in user_groups %} -
{% include "meeting/edit_materials_button.html" %}
+
{% include "meeting/edit_materials_button.html" %}
{% endif %} {% endif %} - + \ No newline at end of file diff --git a/ietf/templates/meeting/group_proceedings.html b/ietf/templates/meeting/group_proceedings.html index 64cbd702b..b753831c1 100644 --- a/ietf/templates/meeting/group_proceedings.html +++ b/ietf/templates/meeting/group_proceedings.html @@ -1,77 +1,94 @@ -{# Copyright The IETF Trust 2015, All Rights Reserved #}{% load origin %}{% origin %} +{# bs5ok #} +{# Copyright The IETF Trust 2015, All Rights Reserved #} +{% load origin %} +{% origin %} {% load ietf_filters %} {% load proceedings_filters %} - {% comment %} - - - - {% endcomment %} {% if session.name %}
{{ session.name }}
{% else %} -
{{session.group.acronym}}
- {% if session.group.state_id == "bof" %} - BOF - {% endif %} +
+ {{ session.group.acronym }} +
+ {% if session.group.state_id == "bof" %}BOF{% endif %} {% endif %} - {% if session.all_meeting_sessions_cancelled %} - Session cancelled + + Session cancelled + {% else %} {% if session.all_meeting_agendas %} {% if session.all_meeting_agendas|length == 1 %} - Agenda
+ Agenda +
{% else %} {% for agenda in session.all_meeting_agendas %} - Agenda {{agenda.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i"}}
+ + Agenda {{ agenda.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i" }} + +
{% endfor %} {% endif %} {% else %} {% if show_agenda == "True" and not meeting.proceedings_final %} - No agenda
+ No agenda +
{% endif %} {% endif %} {% if session.all_meeting_minutes %} {% if session.all_meeting_minutes|length == 1 %} - Minutes
+ Minutes +
{% else %} {% for minutes in session.all_meeting_minutes %} - Minutes {{minutes.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i"}}
+ + Minutes {{ minutes.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i" }} + +
{% endfor %} {% endif %} {% else %} {% if show_agenda == "True" and not meeting.proceedings_final %} - No minutes
+ No minutes +
{% endif %} {% endif %} {% if session.all_meeting_bluesheets %} {% if session.all_meeting_bluesheets|length == 1 %} - Bluesheets
+ Bluesheets +
{% else %} {% for bs in session.all_meeting_bluesheets %} - Bluesheets {{bs.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i"}}
+ + Bluesheets {{ bs.sessionpresentation_set.first.session.official_timeslotassignment.timeslot.time|date:"D G:i" }} + +
{% endfor %} {% endif %} {% endif %} {% with session.group|status_for_meeting:meeting as status %} {% if status %} - Status
+ + Status + +
{% endif %} {% endwith %} - {% if session.all_meeting_sessions_for_group|length == 1 %} {% for rec in session.all_meeting_recordings %} - {{rec|hack_recording_title:False}}
+ {{ rec|hack_recording_title:False }} +
{% endfor %} {% else %} {% for rec in session.all_meeting_recordings %} - {{rec|hack_recording_title:True}}
+ {{ rec|hack_recording_title:True }} +
{% endfor %} {% endif %} @@ -81,20 +98,17 @@ {{ slide.title|clean_whitespace }}
{% empty %} - {% if not meeting.proceedings_final %} - No slides - {% endif %} + {% if not meeting.proceedings_final %}No slides{% endif %} {% endfor %} {% endwith %} {% with session.all_meeting_drafts as drafts %} {% for draft in drafts %} - {{ draft.canonical_name }}
+ {{ draft.canonical_name }} +
{% empty %} - {% if not meeting.proceedings_final %} - No drafts - {% endif %} + {% if not meeting.proceedings_final %}No drafts{% endif %} {% endfor %} {% endwith %} diff --git a/ietf/templates/meeting/previously_approved_slides.html b/ietf/templates/meeting/previously_approved_slides.html index ba6dbb131..0ade38f13 100644 --- a/ietf/templates/meeting/previously_approved_slides.html +++ b/ietf/templates/meeting/previously_approved_slides.html @@ -1,20 +1,37 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2020, All Rights Reserved #} {% load origin staticfiles django_bootstrap5 %} - -{% block title %}Approved Slides for {{ submission.session.meeting }} : {{ submission.session.group.acronym }}{% endblock %} - +{% block title %} + Approved Slides for {{ submission.session.meeting }} : {{ submission.session.group.acronym }} +{% endblock %} {% block content %} {% origin %} - -

These slides have already been {% if submission.status.slug == 'approved' %} approved {% else %} rejected {% endif %}

- -

The slides from {{ submission.submitter }} have already been {% if submission.status.slug == 'approved' %} approved {% else %} rejected {% endif %}. No further action is needed.

- -

You may wish to - {% if submission.status.slug == 'approved' and submission.doc %} - view the slides or +

+ These slides have already been + {% if submission.status.slug == 'approved' %} + approved + {% else %} + rejected {% endif %} - return to this meeting session.

- -{% endblock %} +

+

+ The slides from {{ submission.submitter }} have already been + {% if submission.status.slug == 'approved' %} + approved. + {% else %} + rejected. + {% endif %} + No further action is needed. +

+

+ You may wish to + {% if submission.status.slug == 'approved' and submission.doc %} + view the slides + or + {% endif %} + + return to this meeting session + . +

+{% endblock %} \ No newline at end of file diff --git a/ietf/templates/meeting/proceedings.html b/ietf/templates/meeting/proceedings.html index 9cb2f2428..125ccd591 100644 --- a/ietf/templates/meeting/proceedings.html +++ b/ietf/templates/meeting/proceedings.html @@ -72,7 +72,7 @@ {% endif %} {% if not_meeting_sessions %}

- {{ area.name }} groups not meeting: + {{ area.name }} groups not meeting: {% for session in not_meeting_sessions %} {% ifchanged session.group.acronym %} {{ session.group.acronym }} diff --git a/ietf/templates/meeting/proceedings/edit_material.html b/ietf/templates/meeting/proceedings/edit_material.html index e9d1597de..ab4b798c1 100644 --- a/ietf/templates/meeting/proceedings/edit_material.html +++ b/ietf/templates/meeting/proceedings/edit_material.html @@ -1,13 +1,13 @@ +{# bs5ok #} {% extends "meeting/proceedings/edit_material_base.html" %} {# Copyright The IETF Trust 2021, All Rights Reserved #} {% load tz %} - {% block intro %}

{% if material.active %} - This item will be listed on the proceedings as "{{ material }}". To change this, set the title below.
+ This item will be listed on the proceedings as "{{ material }}". To change this, set the title below. {% else %} - This item currently will not appear on the proceedings.
+ This item currently will not appear on the proceedings. {% endif %}

-{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/meeting/proceedings/remove_restore_material.html b/ietf/templates/meeting/proceedings/remove_restore_material.html index a37d9e601..d61581ec2 100644 --- a/ietf/templates/meeting/proceedings/remove_restore_material.html +++ b/ietf/templates/meeting/proceedings/remove_restore_material.html @@ -1,25 +1,21 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2021, All Rights Reserved #} {% load origin %} - {% load django_bootstrap5 %} - -{% block title %}{{ action|capfirst }} {{material.type.name}} for {{ material.meeting }} proceedings{% endblock %} - +{% block title %}{{ action|capfirst }} {{ material.type.name }} for {{ material.meeting }} proceedings{% endblock %} {% block content %} {% origin %}

{{ action|capfirst }} material

- -

{{ action|capfirst }} {{material}} for the {{ material.meeting }} proceedings?

- +

+ {{ action|capfirst }} {{ material }} for the {{ material.meeting }} proceedings? +

{% csrf_token %} - - - Cancel - - + + Back +
- -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/meeting/propose_session_slides.html b/ietf/templates/meeting/propose_session_slides.html index 0d7ac9308..3dddff495 100644 --- a/ietf/templates/meeting/propose_session_slides.html +++ b/ietf/templates/meeting/propose_session_slides.html @@ -1,26 +1,28 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin static django_bootstrap5 %} - {% block title %}Propose Slides for {{ session.meeting }} : {{ session.group.acronym }}{% endblock %} - {% block content %} {% origin %} - -

Propose Slides for {{ session.meeting }} : {{ session.group.acronym }}{% if session.name %} : {{session.name}}{% endif %}

- {% if session_number %}

Session {{session_number}} : {{session.official_timeslotassignment.timeslot.time|date:"D M-d-Y Hi"}}

{% endif %} - -

This form will allow you to propose a slide deck to the session chairs. After you upload your proposal, mail will be sent to the session chairs asking for their approval.

- +

+ Propose Slides for {{ session.meeting }} +
+ {{ session.group.acronym }} + {% if session.name %}: {{ session.name }}{% endif %} + +

+ {% if session_number %} +

+ Session {{ session_number }} : {{ session.official_timeslotassignment.timeslot.time|date:"D M-d-Y Hi" }} +

+ {% endif %} +

+ This form will allow you to propose a slide deck to the session chairs. After you upload your proposal, mail will be sent to the session chairs asking for their approval. +

{% csrf_token %} {% bootstrap_form form %} - - - -
- - -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/meeting/remove_sessionpresentation.html b/ietf/templates/meeting/remove_sessionpresentation.html index adfefe07f..eaed69046 100644 --- a/ietf/templates/meeting/remove_sessionpresentation.html +++ b/ietf/templates/meeting/remove_sessionpresentation.html @@ -1,33 +1,44 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - {% load django_bootstrap5 %} - -{% block title %}Remove {{sp.document}} from session{% endblock %} - +{% block title %}Remove {{ sp.document }} from session{% endblock %} {% block content %} {% origin %} -

Confirm removing document from session {{sp.session}}

- +

Confirm removing document from session {{ sp.session }}

{% if sp.session.is_material_submission_cutoff %} -

The deadline for submission corrections has passed. This may affect published proceedings.

+

+ The deadline for submission corrections has passed. This may affect published proceedings. +

{% endif %} - -

Document

-

{{sp.document.name}}{% if sp.rev %}-{{sp.rev}}{% else %} (current version){% endif %}

-

{{sp.document.title}}

-

Session

-

{{sp.session}}

- +

Document

+

+ {{ sp.document.name }} + {% if sp.rev %} + -{{ sp.rev }} + {% else %} + (current version) + {% endif %} + +

+

+ {{ sp.document.title }} +

+

Session

+

+ {{ sp.session }} +

{% csrf_token %} - - - - Cancel - - + + + Back +
- {% endblock %} diff --git a/ietf/templates/nomcom/process_nomination_status.html b/ietf/templates/nomcom/process_nomination_status.html index 0c626c7d9..6cd0f9f9b 100644 --- a/ietf/templates/nomcom/process_nomination_status.html +++ b/ietf/templates/nomcom/process_nomination_status.html @@ -1,26 +1,16 @@ +{# bs5ok #} {% extends "nomcom/nomcom_public_base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - {% load django_bootstrap5 %} - -{% block subtitle %} - Change Nomination {% endblock %} - +{% block subtitle %}- Change Nomination{% endblock %} {% block nomcom_content %} {% origin %} - {% if need_confirmation %}
{% csrf_token %} - {% bootstrap_form form %} - - - - -
{% endif %} - -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/change_password.html b/ietf/templates/registration/change_password.html index dfe61a4cd..20bc2f371 100644 --- a/ietf/templates/registration/change_password.html +++ b/ietf/templates/registration/change_password.html @@ -1,79 +1,61 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - - {% load django_bootstrap5 %} {% load static %} - {% block title %}Change password{% endblock %} - {% block js %} {{ block.super }} {% endblock %} - {% block content %} {% origin %} - {% if success %} -

Your password was successfully changed.

+

+ Your password was successfully changed. +

{% if not user.is_authenticated %} - Sign in + Sign in {% endif %} {% else %} -
-
-
-

Change password

- -
- {% csrf_token %} - {% bootstrap_form form %} - - - - - - -
- -
- This password form uses the - zxcvbn - password strength estimator to give an indication of password strength. - The crack time estimage given above assume online attack without rate - limiting, at a rate of 10 attempts per second. -
- -

Offline cracking

-
- The datatracker currently uses the {{ hasher.algorithm }} - password hasher with - - {% if hasher.iterations %} - {{ hasher.iterations }} iterations - {% elif hasher.rounds %} - {{ hasher.rounds }} rounds - {% elif hasher.time_cost and hasher.memory_cost and hasher.parallelism %} - time cost {{ hasher.time_cost }}, memory cost {{ hasher.memory_cost }} - and parallelism {{ hasher.parallelism }} - {% endif %} - . - Calculating offline attack time if password hashes should leak is left - as an excercise for the reader. -
-
- -
-
-
+

Change password

+
+ {% csrf_token %} + {% bootstrap_form form %} + +
+
+ Online attack: This password form uses the + zxcvbn + password strength estimator to give an indication of password strength. + The crack time estimate given above assume online attack without rate + limiting, at a rate of 10 attempts per second. +
+ Offline cracking: + The datatracker currently uses the {{ hasher.algorithm }} + password hasher with + {% if hasher.iterations %} + {{ hasher.iterations }} iterations + {% elif hasher.rounds %} + {{ hasher.rounds }} rounds + {% elif hasher.time_cost and hasher.memory_cost and hasher.parallelism %} + time cost {{ hasher.time_cost }}, memory cost {{ hasher.memory_cost }} + and parallelism {{ hasher.parallelism }} + {% endif %} + . + Calculating offline attack time if password hashes should leak is left + as an exercise for the reader. + + As a guideline, if we assume offline hashing using the current hasher + at a speed of 104 attempts per second, this password would + take to crack. +
- - {% endif %} -{% endblock %} +
+{% endif %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/change_username.html b/ietf/templates/registration/change_username.html index 1ba6ff82a..dca2d009d 100644 --- a/ietf/templates/registration/change_username.html +++ b/ietf/templates/registration/change_username.html @@ -1,42 +1,23 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - {% load django_bootstrap5 %} {% load static %} - {% block title %}Change username{% endblock %} - - {% block content %} {% origin %} - -
-
-
-

Change username

- -
- This form lets you change your username (login) from {{ user.username }} to - one of your other active email addresses. If you want to change to a new - email address, then please first - edit your profile - to add that email address to the active email addresses for your account. -
- -
- {% csrf_token %} - {% bootstrap_form form %} - - - - - - -
- -
-
+

Change username

+
+ This form lets you change your username (login) from {{ user.username }} to + one of your other active email addresses. If you want to change to a new + email address, then please first + edit your profile + to add that email address to the active email addresses for your account.
- -{% endblock %} +
+ {% csrf_token %} + {% bootstrap_form form %} + +
+{% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/confirm_account.html b/ietf/templates/registration/confirm_account.html index be4b6ff2b..55f29a430 100644 --- a/ietf/templates/registration/confirm_account.html +++ b/ietf/templates/registration/confirm_account.html @@ -1,40 +1,35 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} {% load static %} - -{% load django_bootstrap5 %} - +{% load django_bootstrap5 textfilters %} {% block title %}Complete account creation{% endblock %} - {% block js %} {{ block.super }} {% endblock %} - {% block content %} {% origin %} - {% if success %}

Account creation successful

- -

Your account with login {{ email }} has been created, using the password you have selected.

- Sign in - +

+ Your account with login {{ email|linkify }} has been created, using the password you have selected. +

+ Sign in {% else %}

Complete account creation

- -

In order to complete the setup of your account with login {{ email }}, please choose a password:

+

+ In order to complete the setup of your account with login {{ email|linkify }}, please provide the following information: +

{% csrf_token %} {% bootstrap_form form %} - - - - -
{% endif %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/confirm_new_email.html b/ietf/templates/registration/confirm_new_email.html index 793a5a7f1..dd7550cb3 100644 --- a/ietf/templates/registration/confirm_new_email.html +++ b/ietf/templates/registration/confirm_new_email.html @@ -1,37 +1,31 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} -{% load origin django_bootstrap5 %} - +{% load origin django_bootstrap5 textfilters %} {% block title %}Confirm new email address{% endblock %} - {% block content %} {% origin %}

Confirm new email address

- {% if not can_confirm %} -

An error has occured when attempting to add the email address {{ email }} to your account {{ username }}.

- +

+ An error has occurred when attempting to add the email address {{ email|linkify }} to your account {{ username }}. +

{% bootstrap_form_errors form %} - -

- Edit profile -

+ Edit profile {% elif new_email_obj %} -

Your account {{ username }} has been updated to include the email address {{ email }}.

- -

- Edit profile +

+ Your account {{ username }} has been updated to include the email address {{ email|linkify }}.

+ Edit profile {% else %} -

Confirm that you want to add the email address {{ email }} to your account {{ username }}.

- -
+

+ Confirm that you want to add the email address {{ email|linkify }} to your account {{ username }}. +

+ {% csrf_token %} - - - -
{% endif %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/confirm_profile_update.html b/ietf/templates/registration/confirm_profile_update.html index c65801020..487759d04 100644 --- a/ietf/templates/registration/confirm_profile_update.html +++ b/ietf/templates/registration/confirm_profile_update.html @@ -1,21 +1,19 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015, All Rights Reserved #} - {% extends "base.html" %} - -{% load origin %} - -{% block title %}Profile update successful{% endblock%} - -{% block content %} - {% origin %} - -

Profile update successful

- -

Your account has been updated to reflect the changes you submitted.

- - {% for email in email_confirmations %} -

A confirmation email has been sent to {{email}}. The email will be activated after you click on the link it contains.

- {% endfor %} - - Edit profile -{% endblock %} \ No newline at end of file +{% load origin textfilters %} +{% block title %}Profile update successful{% endblock %} + {% block content %} + {% origin %} +

Profile update successful

+

+ Your account has been updated to reflect the changes you submitted. +

+ {% for email in email_confirmations %} +

+ A confirmation email has been sent to {{ email|linkify }}. The email will be activated after you click on the link it contains. +

+ {% endfor %} + Edit profile + {% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/create.html b/ietf/templates/registration/create.html index 885f93546..44d0306f3 100644 --- a/ietf/templates/registration/create.html +++ b/ietf/templates/registration/create.html @@ -1,48 +1,41 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015, All Rights Reserved #} - {% extends "base.html" %} - {% load origin %} - -{% load django_bootstrap5 %} - +{% load django_bootstrap5 textfilters %} {% block title %}Account creation{% endblock %} - {% block content %} {% origin %} - {% if to_email %}

Account request received.

- -

Your account creation request has been successfully received.

- -

We have sent an email to {{ to_email }} with instructions on how to complete the process.

- +
+ Your account creation request has been successfully received. +
+ We have sent an email to {{ to_email|linkify }} with instructions on how to complete the process. +
{% else %} -

Account creation

- -

- If you already have an account and want to use a new email address, - please go to your account profile page and +

+
+
+ If you already have an account and want to use a new email address, please go to your account profile page and +
+ Add a new email address +
+
+
+
+ If you already have an account but forgot your password, please simply +
+ Reset your password +
+
+
+

+ Otherwise, please enter your email address in order to create your datatracker account.

- -

- Add a new email address -

- -

- If you already have an account but forgot your password, - please simply -

- -

- Reset your password -

- -
- -

Please enter your email address in order to create your datatracker account.

{% csrf_token %} {% bootstrap_form form %} diff --git a/ietf/templates/registration/edit_profile.html b/ietf/templates/registration/edit_profile.html index e5165300d..a923dcbe5 100644 --- a/ietf/templates/registration/edit_profile.html +++ b/ietf/templates/registration/edit_profile.html @@ -1,116 +1,125 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015, All Rights Reserved #} - {% extends "base.html" %} - {% load origin %} - -{% load widget_tweaks django_bootstrap5 %} - +{% load widget_tweaks django_bootstrap5 textfilters ietf_filters %} {% load person_filters %} - {% block title %}Profile for {{ user }}{% endblock %} - {% block content %} {% origin %}

Profile information for {{ user.person.name }}

- -

- The information you provide below is used to generate your public datatracker profile page +

+ The information you provide below is used to generate your + public datatracker profile page

- {% csrf_token %} - {% bootstrap_form_errors person_form %} {% for f in new_email_forms %} {% bootstrap_form_errors f %} {% endfor %} -
- +

{{ user.username }}

Edit -
-
- +
- {% if person.photo %}
- -
-

- - Photo of {{ person }} - -

-
+ +
{% include "person/photo.html" with person=person %}
{% endif %} -
-

- {{ person|is_nomcom_eligible|yesno:'Yes,No,No' }} -

+ {% with person|is_nomcom_eligible|yesno:'Yes,No,No' as is_eligible %} +

+ {{ is_eligible }} +

+ {% endwith %} {% if volunteer_status == 'allow' %} - Volunteer + Volunteer {% endif %}
-
-

- If you believe this calculation is incorrect, make sure you've added all the - email addresses you've registered for IETF meetings with to the - list below.

-

- If you've done so and the calculation is still incorrect, please - send a note to - {{ settings.SECRETARIAT_SUPPORT_EMAIL }}. -

-

- See RFC 8713 - for eligibility requirements. - For the 2021 and 2022 NomComs, see also RFC 8989. -

- {% if volunteer_status == 'volunteered' %} -

+

You have volunteered for the {{ nomcom.group.name }}. To modify your volunteer status, contact the NomCom chair.

+ {% else %} +

+ If you believe this calculation is incorrect, make sure you've added all the + email addresses you've registered for IETF meetings with to the + list below. +

+

+ If you've done so and the calculation is still incorrect, please + send a note to + {{ settings.SECRETARIAT_SUPPORT_EMAIL }}. +

+

+ See + RFC 8713 + for eligibility requirements. + For the 2021 and 2022 NomComs, see also + RFC 8989. +

{% endif %}
-
- +
- {% for extres in person.personextresource_set.all %} -
-
- {% firstof extres.display_name extres.name.name %} -
-
- {{ extres.value }} -
-
- {% empty %} - None - {% endfor %} - Edit +
+
+ {% for extres in person.personextresource_set.all %} +
+ {% firstof extres.display_name extres.name.name %} +
+
+ {{ extres.value|linkify }} +
+ {% empty %} + None + {% endfor %} +
+
+ Edit
-
@@ -119,31 +128,42 @@ Primary Active Address - Origin + Origin + {% for email in emails %} - + - + {% if email.origin == person.user.username or email.origin == '' %} - + + + {% endif %} {{ email }} - {{ email.origin|default:'(unknown)' }} + {{ email.origin|default:'(unknown)'|urlize_ietf_docs }} {% endfor %} -

Note: Email addresses cannot be deleted in this form, only deactivated.

- +

+ Note: Email addresses cannot be deleted in this form, only deactivated. +

{% for f in new_email_forms %} {% bootstrap_field f.new_email layout="horizontal" show_label=False %} {% endfor %} -
@@ -152,49 +172,53 @@ {% bootstrap_field role.email_form.email show_label=False %} {% endfor %}
-
{% bootstrap_form person_form layout="horizontal" exclude="ascii_short" %} {% bootstrap_button button_type="submit" content="Submit" extra_classes="offset-sm-2" %} - -
- +

Personal information requiring consent

-

Personal information in the datatracker which is derived from your contributions to the IETF standards development process is covered by the EU General Data Protection Regulation's - Article 6(1) (f) + + Article 6(1) (f) + covering IETF's Legitimate Interest due to the IETF's mission of developing standards - for the internet. See also the page on handling - of personal information. + for the internet. See also the page on + + handling + of personal information + .

-

Personal information which is not derived from your contributions is covered by the EU - GDPR Article 6(1) (a) + + GDPR Article 6(1) (a) + regarding consent. All such information is visible on this page and shown with the symbol next to it, or listed on your - notification subscription page. Most of this + notification subscription page. + Most of this information can be edited or removed on these pages. There are some exceptions, such - as photos, which currently require an email to the Secretariat + as photos, which currently require an email to + the Secretariat if you wish to update or remove the information.

-

All the information the datatracker has that is coupled to this account and visible on this page or otherwise related to your work on ietf documents, is also available - to you as a JSON blob when + to you as a + JSON blob + when you are logged in. It contains both the Legitimate Interest information and the information that requires Consent.

{% endblock %} - {% block js %} {% endif %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/login.html b/ietf/templates/registration/login.html index 62cd7ec8d..635c3e46f 100644 --- a/ietf/templates/registration/login.html +++ b/ietf/templates/registration/login.html @@ -1,26 +1,17 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015, All Rights Reserved #} - {% extends "base.html" %} - {% load origin %} - {% load django_bootstrap5 %} - {% block title %}Sign in{% endblock %} - {% block content %} {% origin %}

Sign in

- -
{% csrf_token %} {% bootstrap_form form %} {% bootstrap_button button_type="submit" content="Sign in" %} - -
- Forgot your password? - Request a reset. -
+ Forgot your password?
{% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/manual.html b/ietf/templates/registration/manual.html index bd16af047..8ee134cea 100644 --- a/ietf/templates/registration/manual.html +++ b/ietf/templates/registration/manual.html @@ -1,19 +1,17 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015, All Rights Reserved #} - {% extends "base.html" %} - {% load origin %} - {% block title %}Complete account creation{% endblock %} - {% block content %} {% origin %} -

Additional Assistance Required

- -

+

Our apologies, it looks like there was an issue creating your Datatracker account. - Please send an email to the IETF secretariat and we'll get you set up promptly. + Please send an email to the + IETF secretariat + and we'll get you set up promptly.

- + Email IETF secretariat {% endblock %} \ No newline at end of file diff --git a/ietf/templates/registration/missing_person.html b/ietf/templates/registration/missing_person.html index 09fe6e085..bb89fdd08 100644 --- a/ietf/templates/registration/missing_person.html +++ b/ietf/templates/registration/missing_person.html @@ -1,14 +1,16 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - {% block content %} {% origin %} -

Missing person info

- -

+

Missing person record

+

There is no person record associated with your login. Please - contact the secretariat at {{settings.SECRETARIAT_INFO_EMAIL}} + contact the secretariat at + {{ settings.SECRETARIAT_INFO_EMAIL }} and explain the situation.

+ Contact the secretariat {% endblock %} diff --git a/ietf/templates/registration/password_reset.html b/ietf/templates/registration/password_reset.html index 713aef1ab..c6877c82b 100644 --- a/ietf/templates/registration/password_reset.html +++ b/ietf/templates/registration/password_reset.html @@ -1,26 +1,22 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015, All Rights Reserved #} - {% extends "base.html" %} - {% load origin %} - {% load django_bootstrap5 %} - {% block title %}Password reset{% endblock %} - {% block content %} {% origin %} - {% if success %}

Password reset successful

-

Your password reset request has been successfully received .

-

We have sent you an email with instructions on how to set a new password.

- +

+ Your password reset request has been successfully received. + We have sent you an email with instructions on how to set a new password. +

{% else %}

Password reset

- -

Please enter the account for which you would like to reset the password.

- +

+ Please enter the account for which you would like to reset the password. +

{% csrf_token %} {% bootstrap_form form %} diff --git a/ietf/templates/release/about.html b/ietf/templates/release/about.html index 81505343d..75fab7ab8 100644 --- a/ietf/templates/release/about.html +++ b/ietf/templates/release/about.html @@ -1,78 +1,77 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015, All Rights Reserved #} - {% extends "base.html" %} {% load origin %} - {% block title %}About the Datatracker{% endblock %} - {% block content %} {% origin %}

About the IETF Datatracker

-

The IETF Datatracker is the primary day-to-day front-end to the IETF database for people who work on IETF standards. It contains data about the documents, working groups, meetings, agendas, minutes, presentations, and more, of the IETF. - The primary public face of the IETF is at www.ietf.org. + The primary public face of the IETF is at + www.ietf.org.

-

All the Datatracker code is publicly available from the IETF tools SVN repository. Bug tickets and wiki notes are available from the - Issue Tracker, and - there are also release notes available since version 2.00. + Issue Tracker, + and + there are also + release notes + available since version 2.00.

-

Below you'll find a brief history of the datatracker development, in terms of the big moments. For the nitty-gritty week-to-week code changes, please check the release notes or the commit log. -

-

Version 6.x Work

-

- Between the release of 6.0.0 in April 2015 and the latest release + Between the release of 6.0.0 in April 2015 and the + latest release there has been numerous releases (75, as of 11 Feb 2017) which has extended the - functionality of the datatracker substantially. The release list + functionality of the datatracker substantially. The + release list gives more information. -

-

Version 6.0.0: Facelift using Bootstrap

-

During more than a year, from July 2013 to late 2014, Lars Eggert worked intensively on a major facelift to the datatracker, porting the GUI to Bootstrap. The work took 287 separate commits - , and comprised changes to 1016 different files. - + , + and comprised changes to 1016 different files.

-

This work has turned the IETF Datatracker website into a responsive website which support use on a much larger variety of devices, from small mobile devices to desktops. -

-

- The work relies heavily on the capabilities of - Bootstrap, and continues to use the Django - framework which the datatracker has been build on since version - 2.00. It also uses icons from FontAwesome, and functions from + The work relies heavily on the capabilities of + Bootstrap, + and continues to use the + Django + framework which the datatracker has been build on since + + version + 2.00 + . + It also uses icons from + FontAwesome, + and functions from django-bootstrap3. -

-

Additional page conversion work - has been done by Ole Laursen, with + + has been done by Ole Laursen, with final style tweaks, bug-fixes and adaptations @@ -81,47 +80,60 @@ (with the addition of complementing green and red colours for success and error indications), and a selection of fonts from ParaType - (PT Serif for body text, - PT Sans Caption for headers, - PT Sans for menus, + (PT Serif + for body text, + PT Sans Caption + for headers, + PT Sans + for menus, and PT Mono for monospaced documents). (Even if PT Sans Caption was - created as a 'Caption' (6-8pt) - optical size font to go with PT Sans, it works well for headers when paired with PT Serif.) + created as a 'Caption' (6-8pt) + optical size + font to go with PT Sans, it works well for headers when paired with PT Serif.)

-

Version 5.x Work

-

Between the release of 5.0.0 in January 2014 and the last release in the 5.x series in April 2015, there were 42 releases containing bug fixes and features. Worth mentioning were 4 code sprint releases, added support for the secretariat's agenda scheduling work, - the addition of pages for Research Groups and Teams, a JSON interface to the - database for tool builders, improved IPR support, a move to Django 1.7, - and many - improvements in testing support. + the addition of pages for + Research Groups + and + Teams, + a + JSON interface + to the + database for tool builders, improved + + IPR support + , + a move to Django 1.7, + and many + + improvements in testing support + .

- -

Version 5.0.0: Shim Removal

- +

+ Version 5.0.0: Shim Removal +

To be written.
- -

Version 4.00: New Database Schema

- +

+ Version 4.00: New Database Schema +

To be written.
- -

Version 3.00: Django Port of the IESG Datatracker Pages

- +

+ Version 3.00: Django Port of the IESG Datatracker Pages +

To be written.
- -

Version 2.00: Django Port of the Public Datatracker Pages

- +

+ Version 2.00: Django Port of the Public Datatracker Pages +

This release was a complete re-write of the CGI/Perl-based IESG datatracker in Python, using the Django framework. It comprised about 8000 lines of @@ -134,16 +146,19 @@ to get all public pages ported and released. The release was deployed in the early hours of 28 June 2007, and nobody noticed the change :-))

- -

Version 1.0: Initial Perl/MySQL database and web-pages

- +

+ Version 1.0: Initial Perl/MySQL database and web-pages +

The first version of the idtracker was commissioned by the IESG under Harald - Alvestrand in 2001, and the IESG started using it at the beginning of 2002. It was - written by Michael Lee in Perl, with direct SQL statements. It provided a - major improvement in visibility of the progress of drafts by the IESG. - The first - public presentation of it and its capabilities was made 2002-11-20 - in Atlanta by Thomas Narten. -

+ Alvestrand in 2001, and the IESG started using it at the beginning of 2002. It was + written by Michael Lee in Perl, with direct SQL statements. It provided a + major improvement in visibility of the progress of drafts by the IESG. + The first + + public presentation + + of it and its capabilities was made 2002-11-20 + in Atlanta by Thomas Narten. +

{% endblock %} \ No newline at end of file diff --git a/ietf/templates/release/release.html b/ietf/templates/release/release.html index 7b784bf84..f260622fb 100644 --- a/ietf/templates/release/release.html +++ b/ietf/templates/release/release.html @@ -1,18 +1,19 @@ +{# bs5ok #} {# Copyright The IETF Trust 2015, All Rights Reserved #} - {% extends "base.html" %} -{% load origin %} +{% load origin textfilters ietf_filters %} {% load cache %} - {% block title %}Release information{% endblock %} - {% block content %} {% origin %}

- - Version {{ entry.version }} -
Released {{ entry.date }} + + Version {{ entry.version }} + +
+ Released {{ entry.date }}

- -

{% if coverage %} Tested: @@ -38,40 +43,47 @@ URLs: {{ coverage.url.percentage|stringformat:".2f" }}% {% endif %} {% if code_coverage_url %} -
- (A code test coverage report dated {{ code_coverage_time }} is available.) + (A + code test coverage report + dated {{ code_coverage_time }} is available.) {% endif %}

- -

{{ entry.version }} release notes

- {% if entry.title %}

{{ entry.title }}

{% endif %} -
{{ entry.html|safe }}
-
-  — {{ entry.author }} <{{ entry.email }}>  {{ entry.date }}
-    
- +

{{ entry.version }} release notes

+ {% if entry.title %}

{{ entry.title }}

{% endif %} +
{{ entry.html|linkify|urlize_ietf_docs }}
+
— {{ entry.author }} <{{ entry.email|linkify }}> {{ entry.date }}
{% cache 3600 ietf_release_list %} -
-

Release list:

- - +
+

Release list

+
+ + + + + + + + {% for item in releases %} {% ifchanged %} - + + + {% endifchanged %} - - - + + + {% endfor %} -
VersionRelease dateFeature summary
{{ item.date|slice:"7:11" }}{{ item.date|slice:"7:11" }}
{{ item.version }}{{ item.date|slice:":11" }}{{ item.title }} + {{ item.version }} + {{ item.date|slice:":11" }}{{ item.title|linkify|urlize_ietf_docs }}
- {% endcache %} - + + +{% endcache %} {% endblock %} - {% block footer %}

Contractor instructions diff --git a/ietf/templates/submit/add_preapproval.html b/ietf/templates/submit/add_preapproval.html index 4d4533eaa..edd5d7e7e 100644 --- a/ietf/templates/submit/add_preapproval.html +++ b/ietf/templates/submit/add_preapproval.html @@ -1,63 +1,60 @@ +{# bs5ok #} {% extends "submit/submit_base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - {% load humanize %} {% load django_bootstrap5 %} - {% block title %}Add pre-approval{% endblock %} - {% load ietf_filters %} - {% block submit_content %} {% origin %} - -

Add pre-approval

- -

You can register a pre-approved draft name. Then the chair - approval step of group -00 submissions is suspended for that draft name - so a future submission is posted to the data tracker immediately.

- -

When the revision -00 draft is submitted, the pre-approval will not - be shown anymore as it has fulfilled its purpose (only revision -00 submissions are +

Add pre-approval

+

+ You can register a pre-approved draft name. Then the chair + approval step of group -00 submissions is suspended for that draft name + so a future submission is posted to the data tracker immediately. +

+

+ When the revision -00 draft is submitted, the pre-approval will not + be shown anymore as it has fulfilled its purpose (only revision -00 submissions are subject to approval). If the draft never shows up, you can instead - later cancel the pre-approval to get rid of it.

- -

Instructions

- -

Do not include -00 and do not include a file extension - like .txt in the name.

- + later cancel the pre-approval to get rid of it. +

+

Instructions

+

+ Do not include a version (like -00) and do not include a file extension + (like .txt) in the name. +

{% if user|has_role:"Secretariat" %} -

Only group submissions are subject to approval and are thus pre-approvable.

+

+ Only group submissions are subject to approval and are thus pre-approvable. +

{% else %} -

As chair{% if groups|length > 1 %} of {{ groups|length|apnumber }} groups{% endif %} you can pre-approve draft names on the form:

- +

+ As chair + {% if groups|length > 1 %}of {{ groups|length|apnumber }} groups{% endif %} + you can pre-approve draft names on the form: +

{% for g in groups %} - + {% endfor %}

{% endif %} - {% csrf_token %} {% bootstrap_form form %} - - - - Back - - + Back
- {% endblock %} - {% block js %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/submit/add_submit_email.html b/ietf/templates/submit/add_submit_email.html index 68cdba837..e1eba6f39 100644 --- a/ietf/templates/submit/add_submit_email.html +++ b/ietf/templates/submit/add_submit_email.html @@ -1,39 +1,33 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - {% load django_bootstrap5 %} - -{% block title %}{% if submission == None %}Add new submission request email{% else %}Add submission request email to {{ submission.name }}{% endif %}{% endblock %} - +{% block title %} + {% if submission == None %} + Add new submission request email + {% else %} + Add submission request email to {{ submission.name }} + {% endif %} +{% endblock %} {% block content %} {% origin %}

Add email

- - {% if submission == None %} -

+

+ {% if submission == None %} A new submission request will be created for the given name and revision. The - name must take the form "draft-xxx-nn" where xxx is lowercase letters, digits or dashes - and nn is the revision number - 00 for the initial revision. For example
-    draft-my-spec-00 -

- {% else %} -

- The email will be added to the submission history for {{ submission.name }} -

- {% endif %} - -
+ name must take the form draft-xxx-nn where xxx is lowercase letters, digits or dashes + and nn is the revision number, 00 for the initial revision. For example, + draft-my-spec-00. + {% else %} + The email will be added to the submission history for {{ submission.name }}. + {% endif %} +

+ {% csrf_token %} - {% bootstrap_form form %} - - - - Back - - + Back
- -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/submit/api_submit_info.html b/ietf/templates/submit/api_submit_info.html index 515569731..0a15fd8cc 100644 --- a/ietf/templates/submit/api_submit_info.html +++ b/ietf/templates/submit/api_submit_info.html @@ -1,21 +1,19 @@ +{# bs5ok #} {% extends "base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - {% block title %}Draft submission API instructions{% endblock %} - {% block content %} {% origin %} -

Draft submission API instructions

- +

Draft submission API instructions

A simplified draft submission interface, intended for automation, is available at {% url 'ietf.submit.views.api_submit' %}.

- The interface accepts only xml uploads which can be processed on the server, and + The interface accepts only XML uploads that can be processed on the server, and requires the user to have a datatracker account. A successful submit still requires - the same email confirmation roundtrip as submissions done through the regular + the same email confirmation round-trip as submissions done through the regular submission tool.

@@ -23,16 +21,21 @@ Some limitations:

    -
  • Only xml-only uploads are supported, not text or combined.
  • +
  • Only XML-only uploads are supported, not text or combined.
  • Document replacement information cannot be supplied.
  • -
  • The server expects multipart/form-data, supported by curl but not by wget
  • +
  • + The server expects multipart/form-data, supported by curl but not by wget. +

- It takes 2 parameters: + It takes two parameters:

    -
  • user which is the user login
  • -
  • xml, which is the submitted file +
  • + user which is the user login +
  • +
  • + xml, which is the submitted file

It returns an appropriate http result code, and a brief explanatory text message. @@ -40,11 +43,8 @@

Here is an example:

-
-    $ curl -S -F "user=user.name@example.com" -F "xml=@~/draft-user-example.xml" https://datatracker.ietf.org/api/submit
-    Upload of draft-user-example OK, confirmation requests sent to:
-      User Name <user.name@example.com>
-  
- - -{% endblock %} +
+$ curl -S -F "user=user.name@example.com" -F "xml=@~/draft-user-example.xml" https://datatracker.ietf.org/api/submit
+Upload of draft-user-example OK, confirmation requests sent to:
+User Name <user.name@example.com>
+ {% endblock %} \ No newline at end of file diff --git a/ietf/templates/submit/approvals.html b/ietf/templates/submit/approvals.html index 83a3993e7..7a0b4bed4 100644 --- a/ietf/templates/submit/approvals.html +++ b/ietf/templates/submit/approvals.html @@ -1,22 +1,20 @@ +{# bs5ok #} {% extends "submit/submit_base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} -{% load origin static %} - +{% load origin static person_filters ietf_filters %} {% block pagehead %} {% endblock %} - {% block title %}Draft submission approvals{% endblock %} - {% load ietf_filters %} - {% block submit_content %} {% origin %} {% if user.is_authenticated %} -

Submissions you can approve

- +

Submissions you can approve

{% if not approvals %} -

You don't have any submissions to approve.

+

+ You don't have any submissions to approve. +

{% else %} @@ -28,22 +26,28 @@ {% for s in approvals %} - + {% endfor %}
{{ s.name }}-{{ s.rev }} + + {{ s.name }}-{{ s.rev }} + + {{ s.submission_date }}
{% endif %} - -

Pre-approved drafts not yet submitted

- +

Pre-approved drafts not yet submitted

{% if user|has_role:"Secretariat,WG Chair,RG Chair" %} -

Add pre-approval

+

+ Add pre-approval +

{% endif %} - {% if not preapprovals %} -

No pre-approvals within your jurisdiction found.

+

+ No pre-approvals within your jurisdiction found. +

{% else %} @@ -57,20 +61,25 @@ {% for p in preapprovals %} - + - - + + {% endfor %}
{{ p.name }}{{ p.name|urlize_ietf_docs }} {{ p.time|date:"Y-m-d" }}{{ p.by }}Cancel{% person_link p.by %} + + Cancel + +
{% endif %} - -

Approved drafts within the past {{ days }} days

- +

Approved drafts within the past {{ days }} days

{% if not recently_approved %} -

No drafts approved.

+

+ No drafts approved. +

{% else %} @@ -82,26 +91,31 @@ {% for d in recently_approved %} - + {% endfor %}
{{ d.name }} + {{ d.name }} + {{ d.submission_date }}
{% endif %} - {% else %}

Submission of approvals

This is where chairs and the secretariat can approve and pre-approve document - submissions which require approval, such as WG -00 drafts. + submissions which require approval, such as WG -00 drafts.

- You need to sign in in order to handle approvals. + You need to + + sign in + + in order to handle approvals.

{% endif %} {% endblock %} - {% block js %} {% endblock %} \ No newline at end of file diff --git a/ietf/templates/submit/cancel_preapproval.html b/ietf/templates/submit/cancel_preapproval.html index b99ebf9a9..b0589d91c 100644 --- a/ietf/templates/submit/cancel_preapproval.html +++ b/ietf/templates/submit/cancel_preapproval.html @@ -1,30 +1,21 @@ +{# bs5ok #} {% extends "submit/submit_base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} -{% load origin %} - +{% load origin person_filters %} {% load django_bootstrap5 %} - {% block title %}Cancel pre-approval{% endblock %} - {% block submit_content %} {% origin %}

Cancel pre-approval

- -

- Pre-approval of {{ preapproval.name }} by {{ preapproval.by }} +

+ Pre-approval of {{ preapproval.name }} by {% person_link preapproval.by %} on {{ preapproval.time }}.

-
{% csrf_token %} - - - - Back - - + Back
- -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/submit/confirm_submission.html b/ietf/templates/submit/confirm_submission.html index 759c712ae..9ae07419f 100644 --- a/ietf/templates/submit/confirm_submission.html +++ b/ietf/templates/submit/confirm_submission.html @@ -1,57 +1,71 @@ +{# bs5ok #} {% extends "submit/submit_base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - - {% block title %}Confirm submission of {{ submission.name }}{% endblock %} - {% block submit_content %} {% origin %}

Confirm submission of {{ submission.name }}

- {% if submission.state_id != "auth" and submission.state_id != "aut-appr" %} {% if submission.state_id == "posted" %} -

The submission has already been posted. See the draft here.

+

+ The submission has already been posted. See the + draft here. +

{% else %} -

The submission is not in a state where it can be confirmed.

- -

Go to the status page - to see what has happened to it.

+
+

+ The submission is not in a state where it can be confirmed. +

+

+ Go to the + status page + to see what has happened to it. +

+
{% endif %} {% else %} - {% if not key_matched %} -

Incorrect authorization key.

- -

Double-check the link you followed. If everything fails, you can go to - the status page, - cancel the submission and try again.

+
+

+ Incorrect authorization key. +

+

+ Double-check the link you followed. If everything fails, you can go to + the + status page, + cancel the submission and try again. +

+
{% else %} -

Authorization key accepted.

- -

Go to the status page - for submission details and links to the files which will be posted.

- -

Please press the button below to finish posting of - {{ submission.name }}-{{ submission.rev }}.

- - +
+

+ Authorization key accepted. +

+

+ Go to the + status page + for submission details and links to the files which will be posted. +

+

+ Please press the button below to finish posting of + {{ submission.name }}-{{ submission.rev }}. +

+
{% csrf_token %} - - + +
- {% endif %} - {% endif %} - {% endblock %} - {% block js %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/ietf/templates/submit/edit_submission.html b/ietf/templates/submit/edit_submission.html index fa94e2387..15be01491 100644 --- a/ietf/templates/submit/edit_submission.html +++ b/ietf/templates/submit/edit_submission.html @@ -1,3 +1,4 @@ +{# bs5ok #} {% extends "submit/submit_base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} @@ -5,95 +6,97 @@ {% load django_bootstrap5 %} {% load submit_tags %} {% load misc_filters %} - {% block pagehead %} {{ block.super }} {{ all_forms|merge_media:'css' }} {% endblock %} - {% block title %}Adjust meta-data of submitted {{ submission.name }}{% endblock %} - {% block submit_content %} {% origin %} -