* feat: move to postgresql
* fix: repair fractional replace statement
* fix: use pathlib to manipulate settings_local
Co-authored-by: Jennifer Richards <jennifer@painless-security.com>
* fix: do two string replacements, not one followed by another that throws away the first.
Co-authored-by: Jennifer Richards <jennifer@painless-security.com>
* fix: use pathlib again to manipulate settings_local
Co-authored-by: Jennifer Richards <jennifer@painless-security.com>
* fix: properly use assert (1/2)
Co-authored-by: Jennifer Richards <jennifer@painless-security.com>
* fix: properly use assert (2/2)
Co-authored-by: Jennifer Richards <jennifer@painless-security.com>
Co-authored-by: Jennifer Richards <jennifer@painless-security.com>
* ci: move HTML validation out of teardown so all failures are caught
Failures in the last batch were suppressed by the original implementation.
* test: rename template validation "test" so it is not auto-discovered
* test: run all HTML validation in a single batch at the end
Adds ~50 MB peak RAM usage during a full test run.
* test: refactor validation to collect failures of all kinds before exit
* test: avoid local times near midnight for test_past_swap_days_buttons()
* test: use timezone_options variable consistently
* test: add test of timezone_not_near_midnight() method
* fix: ensure that timezone_not_near_midnight() always exits
* fix: remove help/personal-information and the prompt-for-consent email management command.
* fix: remove gdpr treatment except for consent checkbox. Rename Submit.
* fix: drom the consent column from Person and Person.History
* fix: remove the consent boolean. Reorganize the account info form.
* chore: reorder migrations
* feat: apis for attaching chatlogs and polls to session materials
* fix: anticipate becoming tzaware, and improve guard against attempts to provide docs for sessions that have no official timeslot assignment.
* fix: get chatlog upload to actually work
Modifications to several initial implementation decisions.
Updates to the fixtures.
* fix: test polls upload
Refactored test to reduce duplicate code
* fix: allow api keys to be created for the new endpoints
* feat: add ability to view chatlog and polls documents. Show links in session materials.
* fix: commit new template
* fix: typo in migration signatures
* feat: add main doc page handling for polls. Improve tests.
* feat: chat log vue component + embedded vue loader
* feat: render polls using Vue
* fix: address pug syntax review comments from Nick.
* fix: repair remaining mention of chat log from copymunging
* fix: use double-quotes in html attributes
* fix: provide missing choices update migration
* test: silence html validator empty attr warnings
* test: fix test_runner config
* fix: locate session when looking at a dochistory object for polls or chatlog
Co-authored-by: Nicolas Giard <github@ngpixel.com>
* refactor: accept tz name strings in ietf.utils.timezone methods
* refactor: use explicitly tz-aware math for iana-changes-updates script
* chore: remove unused "local_timezone_to_utc()" method helper
* fix: use PST8PDT for published_rfc event timestamps
* fix: find RFCs by PST8PDT year in RfcFeed
* refactor: add const RPC_TZINFO to represent RFC publication timezone
* chore: remove (rather than fix) unused template tags
* fix: always return RPC_TZINFO-local date from Document.pub_date()
* refactor: convert 'published' flag to a Boolean to reflect its usage
* fix: display doc publication dates in correct time zones
* fix: fix various small issues breaking tests
* refactor: replace datetime.now with timezone.now
* refactor: migrate model fields to use timezone.now as default
* refactor: replace datetime.today with timezone.now
datetime.datetime.today() is equivalent to datetime.datetime.now(); both
return a naive datetime with the current local time.
* refactor: rephrase datetime.now(tz) as timezone.now().astimezone(tz)
This is effectively the same, but is less likely to encourage accidental
use of naive datetimes.
* refactor: revert datetime.today() change to old migrations
* refactor: change a missed datetime.now to timezone.now
* chore: renumber timezone_now migration
* chore: add migration to change timestamps to UTC
* refactor: move tz instantiation/caching from TimeSlot to Meeting
* fix: assume utc if meeting.time_zone is blank
* chore: make datetime.combine() calls tz aware in the meeting app
* ci: correctly use meeting.tz in TimeSlotFactory
* chore: compute TimeSlot utc / local times assuming tz-aware times
* chore: use tzaware math for agenda editor timeslot layout
* chore: fill in Meeting.time_zone where it is blank
Nearly all interim meetings on or before 2016-07-01 have blank
time_zone values. This migration fills these in with PST8PDT.
* chore: disallow blank Meeting.time_zone value
* refactor: no need to handle blank time_zone case in TZ migration
* refactor: remove now-unnecessary checks that meeting has time_zone
* chore: fix timezone handling in agenda.ics and Meeting.updated()
* chore: fix tz handling in interim_request_details, exercise in tests
* chore: fix timezone handling for test_interim_send_announcement
* chore: fix timezone handling in agenda_json()
* chore: fix timezone handling in old agenda
* chore: fix timezone handling for EditTimeslotsTests
* refactor: refactor a few fixes for more consistent timezone handling
* chore: add timezone info to timestamps in fixtures
* chore: remove naive datetime warnings found in meetings.tests_views
* chore: fix a few more test failures in meetings.tests_views
All tests in meetings.tests_views now passing
* chore: remove unused import
* chore: fix timezone handling in test_schedule_generator.py
* chore: fix timezone handling affecting meeting.tests_js
* chore: fix timeslot test bug when local date != UTC date
* test: fix a few failing tests, all meetings tests now pass
(for me, anyway)
* chore: renumber migrations
* chore: update timestamp conversion migration
The django-celery-beat package introduces tables with timestamp
columns. These columns are stored in CELERY_TIMEZONE. Because we run with
this set to UTC, the migration ignores these columns.
* chore: fix pytz-related change in migration
* chore: remove duplicate migrations
* chore: remove CELERY_BEAT_TZ_AWARE setting now that USE_TZ is True
* test: avoid failure in test with bogus timezone
* chore: add migration to change timestamps to UTC
* chore: fill in Meeting.time_zone where it is blank
Nearly all interim meetings on or before 2016-07-01 have blank
time_zone values. This migration fills these in with PST8PDT.
* chore: disallow blank Meeting.time_zone value
* refactor: no need to handle blank time_zone case in TZ migration
* refactor: remove now-unnecessary checks that meeting has time_zone
* chore: renumber migrations
* chore: update timestamp conversion migration
The django-celery-beat package introduces tables with timestamp
columns. These columns are stored in CELERY_TIMEZONE. Because we run with
this set to UTC, the migration ignores these columns.
* chore: fix pytz-related change in migration
* chore: be explicit that Meeting.vtimezone can return None
* refactor: remove unnecessary save()
* refactor: replace datetime.now with timezone.now
* refactor: migrate model fields to use timezone.now as default
* refactor: replace datetime.today with timezone.now
datetime.datetime.today() is equivalent to datetime.datetime.now(); both
return a naive datetime with the current local time.
* refactor: rephrase datetime.now(tz) as timezone.now().astimezone(tz)
This is effectively the same, but is less likely to encourage accidental
use of naive datetimes.
* refactor: revert datetime.today() change to old migrations
* refactor: change a missed datetime.now to timezone.now
* chore: renumber timezone_now migration
* chore: renumber migrations
* ci: add Dockerfile and action to build celery worker image
* ci: build celery worker on push to jennifer/celery branch
* ci: also build celery worker for main branch
* ci: Add comment to celery Dockerfile
* chore: first stab at a celery/rabbitmq docker-compose
* feat: add celery configuration and test task / endpoint
* chore: run mq/celery containers for dev work
* chore: point to ghcr.io image for celery worker
* refactor: move XML parsing duties into XMLDraft
Move some PlaintextDraft methods into the Draft base class and
implement for the XMLDraft class. Use xml2rfc code from ietf.submit
as a model for the parsing.
This leaves some mismatch between the PlaintextDraft and the Draft
class spec for the get_author_list() method to be resolved.
* feat: add api_upload endpoint and beginnings of async processing
This adds an api_upload() that behaves analogously to the api_submit()
endpoint. Celery tasks to handle asynchronous processing are added but
are not yet functional enough to be useful.
* perf: index Submission table on submission_date
This substantially speeds up submission rate threshold checks.
* feat: remove existing files when accepting a new submission
After checking that a submission is not in progress, remove any files
in staging that have the same name/rev with any extension. This should
guard against stale files confusing the submission process if the
usual cleanup fails or is skipped for some reason.
* refactor: make clear that deduce_group() uses only the draft name
* refactor: extract only draft name/revision in clean() method
Minimizing the amount of validation done when accepting a file. The
data extraction will be moved to asynchronous processing.
* refactor: minimize checks and data extraction in api_upload() view
* ci: fix dockerfiles to match sandbox testing
* ci: tweak celery container docker-compose settings
* refactor: clean up Draft parsing API and usage
* remove get_draftname() from Draft api; set filename during init
* further XMLDraft work
- remember xml_version after parsing
- extract filename/revision during init
- comment out long broken get_abstract() method
* adjust form clean() method to use changed API
* feat: flesh out async submission processing
First basically working pass!
* feat: add state name for submission being validated asynchronously
* feat: cancel submissions that async processing can't handle
* refactor: simplify/consolidate async tasks and improve error handling
* feat: add api_submission_status endpoint
* refactor: return JSON from submission api endpoints
* refactor: reuse cancel_submission method
* refactor: clean up error reporting a bit
* feat: guard against cancellation of a submission while validating
Not bulletproof but should prevent
* feat: indicate that a submission is still being validated
* fix: do not delete submission files after creating them
* chore: remove debug statement
* test: add tests of the api_upload and api_submission_status endpoints
* test: add tests and stubs for async side of submission handling
* fix: gracefully handle (ignore) invalid IDs in async submit task
* test: test process_uploaded_submission method
* fix: fix failures of new tests
* refactor: fix type checker complaints
* test: test submission_status view of submission in "validating" state
* fix: fix up migrations
* fix: use the streamlined SubmissionBaseUploadForm for api_upload
* feat: show submission history event timestamp as mouse-over text
* fix: remove 'manual' as next state for 'validating' submission state
* refactor: share SubmissionBaseUploadForm code with Deprecated version
* fix: validate text submission title, update a couple comments
* chore: disable requirements updating when celery dev container starts
* feat: log traceback on unexpected error during submission processing
* feat: allow secretariat to cancel "validating" submission
* feat: indicate time since submission on the status page
* perf: check submission rate thresholds earlier when possible
No sense parsing details of a draft that is going to be dropped regardless
of those details!
* fix: create Submission before saving to reduce race condition window
* fix: call deduce_group() with filename
* refactor: remove code lint
* refactor: change the api_upload URL to api/submission
* docs: update submission API documentation
* test: add tests of api_submission's text draft consistency checks
* refactor: rename api_upload to api_submission to agree with new URL
* test: test API documentation and submission thresholds
* fix: fix a couple api_submission view renames missed in templates
* chore: use base image + add arm64 support
* ci: try to fix workflow_dispatch for celery worker
* ci: another attempt to fix workflow_dispatch
* ci: build celery image for submit-async branch
* ci: fix typo
* ci: publish celery worker to ghcr.io/painless-security
* ci: install python requirements in celery image
* ci: fix up requirements install on celery image
* chore: remove XML_LIBRARY references that crept back in
* feat: accept 'replaces' field in api_submission
* docs: update api_submission documentation
* fix: remove unused import
* test: test "replaces" validation for submission API
* test: test that "replaces" is set by api_submission
* feat: trap TERM to gracefully stop celery container
* chore: tweak celery/mq settings
* docs: update installation instructions
* ci: adjust paths that trigger celery worker image build
* ci: fix branches/repo names left over from dev
* ci: run manage.py check when initializing celery container
Driver here is applying the patches. Starting the celery workers
also invokes the check task, but this should cause a clearer failure
if something fails.
* docs: revise INSTALL instructions
* ci: pass filename to pip update in celery container
* docs: update INSTALL to include freezing pip versions
Will be used to coordinate package versions with the celery
container in production.
* docs: add explanation of frozen-requirements.txt
* ci: build image for sandbox deployment
* ci: add additional build trigger path
* docs: tweak INSTALL
* fix: change INSTALL process to stop datatracker before running migrations
* chore: use ietf.settings for manage.py check in celery container
* chore: set uid/gid for celery worker
* chore: create user/group in celery container if needed
* chore: tweak docker compose/init so celery container works in dev
* ci: build mq docker image
* fix: move rabbitmq.pid to writeable location
* fix: clear password when CELERY_PASSWORD is empty
Setting to an empty password is really not a good plan!
* chore: add shutdown debugging option to celery image
* chore: add django-celery-beat package
* chore: run "celery beat" in datatracker-celery image
* chore: fix docker image name
* feat: add task to cancel stale submissions
* test: test the cancel_stale_submissions task
* chore: make f-string with no interpolation a plain string
Co-authored-by: Nicolas Giard <github@ngpixel.com>
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* refactor: avoid using select2 data-* attrs on html elements
Using "data-ajax--url" shadows explicit configuration in our
select2.js wrapper. Use "data-select2-ajax-url" to avoid this.
Also add ability to omit the ajax setup entirely by returning
None from ajax_url().
* chore: hook up a flag to disable ajax for SearchablePersonsField
* refactor: send select2 prefetch data as array and allow config of min input length
* feat: only offer IAB/IESG members for bofreq responsible leadership
* test: area directors/IAB members should be options for bofreq responsible leaders
* test: update tests to match changes to SearchableField
* fix: clean up SearchablePersonsField breakage when searching by email address
* chore: finish incomplete comment
* feat: Render the document shepherd writeup templates at two new URL.
Those being `/doc/shepherdwriteuptemplate/group` and
`/doc/shepherdwriteuptemplate/individual`.
* Address review comments from @jennifer-richards
* Fixes
* Remove debug statement
* Make bleach sanitizer not strip the `start` attribute of `ol` tags
Also rearrange the code a bit
* Don't sanitize the `python_markdown` output, it destroys wanted formatting
* Restore bleach
* Don't bleach tag `id`s.
* fix: set vite base path during deploy build + allow google fonts
* ci: only set vite base path if build is for production release
* test: add html-validate ignore rules for vite generated content that is valid
* fix: show buttons on regular sessions without agenda materials + link to legacy agenda
* fix: temporarily hide left menu on agenda-neue and floor-plan-neue
* fix: set resize handler to whole app
* fix: apply html-validate ignore to agenda-neue only + deploy/build.sh fix
* test: change old agenda cypress to always take the same elements to avoid #3564
* fix: Don't crash when urlreverse fails as part of urlize_ietf_docs
Also fix an HTMLization nit.
* Fix more corner cases found during test-crawl
* Handle "I-D.*"" reference-style matches
* Refactor use of bleach. Better Markdown linkification and formatting.
* Address review comment from @rjsparks
* chore: remove more tools.ietf.org server only related things.
* chore: remove use of tools.ietf.org floorplans\n\nThe data will move into the FloorPlan models instead.
* fix: Fix some HTML validation errors that came in via #4035
Also make validation errors display a bit better.
* content -> color for mask-icon (caught by @jennifer-richards; thanks)
* feat: restructure rfcedtype groups. add rpc, rswg, rsab.
* feat: show rfc editor groups on menu
* feat: add the editorial stream
* fix: repair broken html and extent dest coverage.
* chore: address Lars review comment
* chore: update copyright notices.
* Fix: Tweak the horrible code in SearchableField so another corner case works
Fixes#3940. Hopefully doesn't break anything.
* fix: remove incorrect remaining loop.
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* Unicode messages are triggered by both db content and tests
* Make ids unique
* Avoid "No value found" message on page
* Strip HTML from history entries, it's often broken
* Check HTML sources for occurrences of "** No value found for" and fix them
* Fix another occurrence of "** No value found for"
* Fix more occurrences of "** No value found for"
* Fix document revision stripping
* Force breaks of long (garbage) words
* Check URL validity before urlizing them
* Handle some additional corner cases
* Linkify action items
* Don't create profile/email links for System
* Handle headings with HTML elements in them better
* Fix comment
* Fix another occurrence of "** No value found for"
* Better I-D URLization that handles more edge cases. Also, test for them.
* Remove print
* Handle charters better
* Cache for one day
* Update vnu.jar
* Fix py2 -> py3 issue
* Run pyupgrade
* test: Add default-jdk to images
* test: Add option to also validate HTML with vnu.jar
Since it's already installed in bin. Don't do this by default, since it
increases the time needed for tests by ~50%.
* fix: Stop the urlizer from urlizing in linkified mailto: text
* More HTML fixes
* More HTML validation fixes
* And more HTML fixes
* Fix floating badge
* Ignore unicode errors
* Only URLize docs that are existing
* Final fixes
* Don't URLize everything during test-crawl
* Feed HTML into vnu using python rather than Java to speed things up
* Allow test-crawl to start vnu on a different port
* Increase retry count to vnu. Restore batch size to 30.
* More HTML validation fixes
* Use urllib3 to make requests to vnu, since overriding requests_mock is tricky
* Undo commit of unmodified file
* Also urlize ftp links
* Fix matching of file name
* More HTML fixes
* Add `is_valid_url` filter
* weekday -> data-weekday
* urlencode URLs
* Add and use vnu_fmt_message. Bump vnu max buffer.
* Simplify doc_exists
* Don't add tab link to mail archive if the URL is invalid
* Run urlize_ietf_docs before linkify
Reduces the possibility of generating incorrect HTML
* Undo superfluous change
* Runner fixes
* Consolidate vnu message filtering into vnu_filter_message
* Correctly handle multiple persons with same name
* Minimze diff
* Fix HTML nits
* Print source snippet in vnu_fmt_message
* Only escape if there is something to escape
* Fix snippet
* Skip crufty old IPR declarations
* Only include modal when needed. Add handles.
* Fix wordwrap+linkification
* Update ietf/doc/templatetags/ietf_filters.py
* Update ietf/doc/templatetags/tests_ietf_filters.py
* Don't right-align second column
* fix: Correctly linkify all current TLDs
* Pass a list to the build_*_re functions, not a string
* Need to sort TLDs by length to force longer ones to match first
* chore: silence incorrect mypy complaint.
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
Co-authored-by: Nicolas Giard <github@ngpixel.com>
Also rewrites scroll_to_element() using javascript. This seems to be less flaky
than the ActionChains implementation. Slight change in behavior - now scrolls
the requested element to the middle of the window instead of barely into view.
* ci: Also check generated HTML with the "vnu" validator
Because HTML Tidy apparently misses a bunch of errors.
* thead -> tbody
* More fixes
* More fixes
* Start checker in test runner
Only add right-hand page navigation panel to #content elements that have
the ietf-auto-nav class and test that the base template's DOM is compatible
with the panel.
Make the js a bit less noisy and adjust the tests accordingly.
- Legacy-Id: 19984
Note: SVN reference [19979] has been migrated to Git commit f61ddb4b60
Use correct UTC time when creating Meetecho conferences. Fixes#3565.
- Legacy-Id: 19970
Note: SVN reference [19969] has been migrated to Git commit 82ea659ed4
Create/delete Meetecho conferences when requesting/canceling interim sessions. Fixes#3507. Fixes#3508.
- Legacy-Id: 19934
Note: SVN reference [19917] has been migrated to Git commit 81cd64da2bc0122f733df02f7db634665c9b309a
Note: SVN reference [19930] has been migrated to Git commit c64297e495010f3c147726ad61c24ca436c324da
Suppress origin template tag in production mode, show relative path only in other modes.
- Legacy-Id: 19932
Note: SVN reference [19925] has been migrated to Git commit b4d07e11519d77523216bc8817058b0facd2bd41
Look at v2 'title' attribute in reference type heuristics for XML drafts. Related to #3529.
- Legacy-Id: 19897
Note: SVN reference [19895] has been migrated to Git commit ea79fe0dcc183bc5cd8b27da67865c300b9dce4e
Import django.conf.settings instead of ietf.settings. Fixes#3392.
- Legacy-Id: 19798
Note: SVN reference [19788] has been migrated to Git commit ecde8a780fce609efc6539e258e57752a03aa2bd
Add ability to import session minutes from notes.ietf.org. Mock out calls to the requests library in tests. Call markdown library through a util method. Fixes#3489.
- Legacy-Id: 19767
Note: SVN reference [19763] has been migrated to Git commit fd0df6f619
Remove ietf/templates/iesg/scribe_template.html and related,
which is not used anymore according to the secretariat.
(On merge, rjsparks@nostrum.com also removed the three other
templates that only that one included, and removed the test
that covered the view tht was removed).
- Legacy-Id: 19732
Note: SVN reference [19713] has been migrated to Git commit 70420380f7
Better handle invalid character encodings in process_email and feedback_email commands. Add tests of this using stdin.
- Legacy-Id: 19724
Note: SVN reference [19694] has been migrated to Git commit dcf4251363
There is definitely still quite some breakage, my main focus during
the conflict resolution was not to drop any changes made by others.
- Legacy-Id: 19632
Create dev branch for session purpose work (from revision [19414])
Snapshot of dev work to add session purpose annotation (from revision [19415])
Allow non-WG-like groups to request additional sessions/durations and bypass approval (from revision [19424])
Add 'closed' session purpose, assign purposes for nomcom groups, and update schedule editor to enforce timeslot type and allow blurring sessions by purpose (from revision [19427])
Add management command to set up timeslots/sessions for testing/demoing 'purpose' field (from revision [19430])
Update session purposes and group type -> purpose map to match notes page, change 'session' purpose to 'regular' (from revision [19433])
Redirect edit_schedule urls to edit_meeting_schedule view (from revision [19434])
Allow hiding/blurring sessions and timeslots based on TimeSlotType in the schedule editor (from revision [19438])
Disable session purpose/timeslot type hiding on schedule editor when only 0 or 1 options (from revision [19439])
Improvements to the timeslot and schedule editors (move new toggles to modals, handle overflowing session names, fix timeslot editor scrolling, add buttons to quickly create single timeslot, accept trailing slash on edit URL) (from revision [19449])
Update purpose/types after discussions, add on_agenda Session field, prevent session requests for groups with no allowed purpose, handle addition fields in session request, fix editing session requests, add session edit form/access from schedule editor, eliminate TimeSlotTypeName "private" field, add server-side timeslot type filtering to schedule editor (from revision [19549])
Eliminate the officehours timeslot type, update/renumber migrations, mark offagenda/reserved TimeSlotTypeNames as not used, add a 'none' SessionPurposeName and disallow null, update agenda filter keywords/filter helpers, fix broken tests and general debugging (from revision [19550])
Tear out old meeting schedule editor and related code (from revision [19551])
Fix merge errors in preceding commits (from revision [19556])
- Legacy-Id: 19570
Note: SVN reference [19415] has been migrated to Git commit 1054f90873
Note: SVN reference [19424] has been migrated to Git commit 5318081608
Note: SVN reference [19427] has been migrated to Git commit 173e438aee
Note: SVN reference [19430] has been migrated to Git commit 7a2530a0a6
Note: SVN reference [19433] has been migrated to Git commit 3be50d6e39
Note: SVN reference [19434] has been migrated to Git commit 3e3d681e5f
Note: SVN reference [19438] has been migrated to Git commit b6ac3d4b1d
Note: SVN reference [19439] has been migrated to Git commit 446ac7a47e
Note: SVN reference [19449] has been migrated to Git commit 5cbe402036
Note: SVN reference [19549] has been migrated to Git commit 3dfce7b850
Note: SVN reference [19550] has been migrated to Git commit 7b35c09c40
Note: SVN reference [19551] has been migrated to Git commit d7f20342b6
Note: SVN reference [19556] has been migrated to Git commit 2b1864f5a0
Use temporary directories instead of 'real' filesystem for tests. Fixes#3414.
- Legacy-Id: 19561
Note: SVN reference [19555] has been migrated to Git commit 81d9234d54
Create management command base class that sends emails on exceptions. Fixes#3356 and #3357.
- Legacy-Id: 19527
Note: SVN reference [19493] has been migrated to Git commit 968b775315
This field is needed because the plain JSONField does not permit empty arrays - [] - or empty objects - {} - when the field is marked as required. Those values explicitly evaluate to a null value, and are rejected.
Instead, the IETFJSONField accepts two new arguments to control this:
- empty_values: An array of values that should evaluate to null/empty, and be rejected.
- accepted_empty_values: An array of values that should *not* evaluate to null/empty, and be accepted.
This allows the programmer to specify either a positive or negative statement of what values to accept.
Fixes issue #3331. Commit ready for merge.
- Legacy-Id: 19401
Consolidate repeated searchable field code into SearchableField class. Fix single-valued searchable fields. Make javascript test config reusable. Use Django Form.media for JS/CSS inclusion. Fixes#3196, #3204.
- Legacy-Id: 18948
Note: SVN reference [18939] has been migrated to Git commit 17d37723f7
This adds support for the simpler show/hide filtering to the ical agenda
views. It also significantly rearranges (and, I hope, improves the
organization of) the tests. In particular, it specifically tests that
the ical and HTML views include equivalent sets of events. Finally, the
agenda_filter.html template is reworked to be more modular.
- Legacy-Id: 18631
Improved the classification of some github related external resources. Tightened validation of new resource values.
- Legacy-Id: 18449
Note: SVN reference [18378] has been migrated to Git commit 2b70735fd2