Commit e6ae55c
Custom forms with roles (#1563)
* Add email confirmation, address type, and consent fields to registration forms
- Add confirm email field with server-side match validation
- Group email, confirm email, and email type in one row
- Label as "Email" on short forms, "Primary Email" when secondary exists
- Add address type (Home/Work) on same row as street address
- Add consent and training interest questions (appear on all forms)
- Skip storing confirmation field value in user form submissions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Extract BaseRegistrationFormBuilder to share fields across form types
Short, Extended, and Scholarship form builders now inherit from a common
base class that provides shared helpers (add_header, add_field) and
reusable field sections (basic contact, scholarship, consent). This
eliminates duplication and ensures changes to shared fields propagate
to all form types.
Also fixes three bugs:
- Email confirmation key mismatch (primary_email_confirmation → confirm_email)
so validation now works for extended forms
- workshop_settings → workshop_environments so professional tags get assigned
- confirm_email responses no longer stored redundantly in PersonForm
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Check all event forms for registration icon, not just current one (#1288)
Previously the form submission icon on the manage registrations and
event registrations index pages only checked the single form tagged
as "registration" role. If an event's registration form was swapped,
people who submitted the old form lost their green icon. Now both
pages check across all forms linked to the event via event_forms.
Also fixes N+1 queries on the event registrations index by batch-
loading form submissions upfront.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Fix delete registration button and return_to routing (#1289)
* Fix delete registration button and return_to routing
The delete button on the registration edit form wasn't working because
data-turbo="false" on the parent form disabled Turbo for the delete link
which relies on turbo_method: :delete. Added turbo: true override.
All CRUD actions (create, update, delete) now respect return_to param so
admins are redirected back to the page they came from — manage registrants
or registrations index — instead of always landing on the index or ticket.
Also adds event registration seed data with various scenarios and a system
spec for the delete button.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix request specs for return_to routing changes
Update tests to pass return_to param explicitly since create no longer
infers destination from event_id presence.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Use rhino_description for registration confirmation email (#1291)
* Use rhino_description for registration confirmation email details
The email was showing the plain-text description column (lorem ipsum
placeholder) instead of the actual event details from rhino_description,
which is the same content used in calendar events.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add EventMailer spec covering confirmation and cancellation emails
Tests that rhino_description content appears in the confirmation email
body, and verifies basic rendering for both mailer actions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Remove cancelled email tests from EventMailer spec
Cancellation email doesn't reference description, so no test needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix rubocop empty line at block body end
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Add direct organization associations to event registrations (#1292)
* Add direct organization associations to event registrations
Registrations now have their own many-to-many relationship with
organizations via a join table, decoupled from the registrant's
affiliations. Active orgs are snapshotted at registration time,
and admins can add/remove orgs from the registration edit page
using toggleable chips and a Stimulus controller.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Register people with multiple affiliations in seeds
Ensures Mariana Johnson (3 affiliations), Samuel Smith, Lisa
Williamson, Kim Davidson, and Sarah Davis (2 each) are registered
to events so their organizations get snapshotted via the
after_create callback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Rescue RecordNotUnique in controllers with ActionText fields (#1294)
A RecordNotUnique error (duplicate action_text_rich_texts entry) was
surfacing as a 500 in production during workshop updates, likely from
a race condition (e.g. double form submission). The transaction rescue
blocks only caught RecordInvalid and RecordNotSaved, letting the
uniqueness violation propagate uncaught.
Added RecordNotUnique to rescue clauses in all 10 controllers that
save models with has_rich_text fields, so duplicate-key errors roll
back gracefully and re-render the form instead of crashing.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Prevent deletion of users with associated records (#1295)
* Prevent deletion of users with associated records
Users who have created reports, workshop logs, resources, workshops,
stories, or ideas can no longer be deleted. The delete button is hidden
in the UI and the controller rescues InvalidForeignKey as a safety net.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix report factory in deletable? test to include workshop
The report factory doesn't include a workshop association, but the
Report model requires one. Pass it explicitly in the test.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Fix workshop form admin layout (#1298)
* Remove dead assets/form partial reference from workshop edit
The partial was removed in a previous revert but the render call
was left behind, causing a MissingTemplate error on ?admin=true.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix workshop form admin fields layout and conditional author name
Stack admin fields vertically instead of horizontally to prevent
label truncation and field overlap. Only show Author's name field
when the value is present and ?admin=true.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Move workshop created date under Workshop Idea parent
Relocate the date field from the bottom of the form into the
admin grid column alongside Workshop Idea parent. Rename label
from "Date created" to "Workshop created" with consistent sizing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Remove full_name fill from create workshop test
The Author's name field is now conditionally shown only when
the value is present and ?admin=true, so it won't appear on
the new workshop form.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Allow workshop logs with external title and no workshop (#1299)
* Allow workshop logs without workshop_id when external title present
Workshop logs can now be submitted with an external_workshop_title
instead of requiring a workshop_id. This supports users logging
workshops that don't exist in the system.
- Make workshop association optional on Report
- Add migration to remove NOT NULL constraint on reports.workshop_id
- Add custom validation requiring either workshop_id or external_workshop_title
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Show external workshop title on workshop log show page
Display external_workshop_title in heading and Workshop field when
no workshop record is associated. When both are present, show the
external title inline next to the workshop chip.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add tests for external workshop title on workshop logs
- Model spec: validate workshop_id or external_workshop_title required
- Request spec: create workshop log with external title and no workshop
- System spec: display external title in heading and Workshop field
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix CI failures in workshop log tests
- Check workshop.present? instead of workshop_id.present? so
validation works with both build (in-memory) and create (persisted)
- Use specific Capybara selector to avoid ambiguous div matches
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Use rhino rich text fields instead of native columns across the app (#1297)
* Use OuterJoin in RichTextSearchable so records without rich text still appear
InnerJoin was filtering out records that had no action_text_rich_texts
entry, causing them to disappear from search results entirely.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update SearchCop configs to search rich text content
- Resource: enable rich text search (was commented out), remove native body
- Story: add grouped default attributes so rich text + title both searched
- Tutorial: add rich text search, split multi-word search terms for
independent matching, search both native body and rhino_body
- WorkshopVariation: add RichTextSearchable, replace native body search
with rich text search, use rhino_body in description method
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Use rhino rich text fields instead of native columns in decorators
- StoryDecorator: use rhino_body.to_plain_text in detail
- TutorialDecorator: use rhino_body in display_text and detail
- ResourceDecorator: use rhino_body in detail, truncated_text,
flex_text, display_text, and html
- WorkshopDecorator: prepend rhino_ prefix in spanish_field_values,
use rhino fields in html_content and html_objective
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Use rhino rich text fields instead of native columns in views
- Story shares: use rhino_body.to_plain_text instead of strip_tags(body)
- Tutorial partial: display rhino_body instead of body.html_safe
- Workshop variations index: use rhino_body.to_plain_text instead of body
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update tutorial specs to use rhino_body for test data
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix tutorial view spec to include rhino_body for rendered output
The show view now renders rhino_body instead of native body, so the
test data needs to populate the rich text field.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Restrict person profile to read-only for non-admins (#1296)
* Restrict person edit/update to admin only
- Remove owner? from edit? and update? in PersonPolicy
- Hide "My profile" menu link unless admin manage
- Update policy spec to expect owner cannot edit
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add admin-only styling and permission gates to person views
- Gate People and Edit links with policy checks and admin-only styling
- Show email with admin-only styling when profile_show_email is off
- Remove comments section from person show (keep in edit form only)
- Add admin-only styling to comments section on person edit form
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add request specs for person show authorization and profile flags
- Test edit/update blocked for owners, allowed for admin
- Test show page gated content (Edit link, email, Submitted content, Comments)
- Test all 16 profile flags for visibility on own and admin-viewed profiles
- Test email admin-only styling when profile_show_email is off
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix navbar avatar system test for admin-only person edit
The test was using a regular user to edit a person record, which is
now restricted to admins only.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Add admin CRUD for forms with question library picker
Admins can now manage forms through a dedicated UI:
- Index lists all forms with field counts, linked events, and type badges
- New form flow: interstitial page to select builder type (short/extended
registration, scholarship, or blank generic), then redirect to edit
- Edit page supports inline editing of form name and question labels,
toggling required/status, adding/removing fields via cocoon, and
cloning questions from other forms via a searchable Turbo Frame picker
- Show page displays fields grouped by section with linked events
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add email confirmation, address type, and consent fields to registration forms
- Add confirm email field with server-side match validation
- Group email, confirm email, and email type in one row
- Label as "Email" on short forms, "Primary Email" when secondary exists
- Add address type (Home/Work) on same row as street address
- Add consent and training interest questions (appear on all forms)
- Skip storing confirmation field value in user form submissions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Extract BaseRegistrationFormBuilder to share fields across form types
Short, Extended, and Scholarship form builders now inherit from a common
base class that provides shared helpers (add_header, add_field) and
reusable field sections (basic contact, scholarship, consent). This
eliminates duplication and ensures changes to shared fields propagate
to all form types.
Also fixes three bugs:
- Email confirmation key mismatch (primary_email_confirmation → confirm_email)
so validation now works for extended forms
- workshop_settings → workshop_environments so professional tags get assigned
- confirm_email responses no longer stored redundantly in PersonForm
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Consolidate form builders into configurable FormBuilderService with admin CRUD
- Replace 4 hardcoded builders (Base, Short, Extended, Scholarship) with a
single FormBuilderService that accepts selectable sections
- Rename PersonForm → FormSubmission and PersonFormFormField → FormAnswer
(tables, models, and all references)
- Add admin FormsController with section interstitial (new) and field
editor (edit) with drag-reorder via existing sortable_controller
- Snapshot question_text on FormAnswer at submission time for answer
preservation when fields are later deleted
- Add form-level hide_answered_person_questions and
hide_answered_form_questions booleans for conditional field visibility
- Add sections JSON column to forms to record builder configuration
- Keep form_fields.status column (still used by workshop logs/reports)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Move registration form seeds into dummy dev seeds
The standalone registration forms are dev/test data, not required for
production bootstrapping. Placed before event seeds that depend on them.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add preview form link to form editor
Links to the public registration page of the first event using this
form, opening in a new tab.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add form show page for previewing form fields
Renders a disabled preview of the form as it would appear to a
registrant. Works for all forms, including those not linked to events.
Accessible from both the forms index and the form editor.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Match form page nav links to person show/edit styling
Use the same text-sm text-gray-500 hover:text-gray-700 px-2 py-1
pattern in a right-aligned flex-wrap container.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Change consent field to checkbox with only "Yes" option
Consent is an opt-in acknowledgment, not a yes/no choice.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add edit_sections page to add/remove form sections
Allows changing which builder sections are included on an existing form.
Unchecking a section removes its fields; checking adds default fields at
the end. Preserves existing answers via question_text snapshots.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix section removal to properly delete group headers
Use explicit SECTION_HEADERS mapping to remove headers by question text
instead of by field_group, which failed when sections shared a group
(e.g. person_identifier and person_contact_info both use "contact").
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Improve form editor: conditional visibility, group sorting, cocoon fields
- Rename event_feedback section to marketing with updated field keys
- Add three-category conditional visibility: Scholarship-only, Logged out
only, Answers on file (covers professional + marketing groups)
- Add slide toggle previews on form show page
- Group-aware drag-and-drop: dragging a section header moves all its fields
- Switch to cocoon for adding/removing fields (replaces server-side add_field)
- Style section headers as bold text, indent child fields
- Replace Delete checkbox with Remove link (matching affiliation pattern)
- Fix nested form issue (button_to inside form_with)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add per-field visibility enum and fix cocoon new field saving
- Add visibility column (always_ask, scholarship_only, logged_out_only,
answers_on_file) to form_fields with migration
- Update FormBuilderService with GROUP_VISIBILITY defaults per section
- Replace visibility_select_controller with generic chip_select_controller
that accepts styles via Stimulus values
- Update public_registrations_controller to filter by visibility column
instead of hardcoded field_group arrays
- Update form show/edit views to derive toggle conditions from visibility
- Fix new cocoon fields not saving: reject_if blank question on new records
- Add validation error display to form edit page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Register chip-select and form-fields-sortable Stimulus controllers
Both were created but never added to the controller index, so they
weren't loading on the page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add one-time field hiding, flexbox layout, and cocoon insertion fix
- Add `one_time` boolean to form_fields for cross-form answer hiding
- Two-tier answer hiding: one-time checks all forms, regular checks within event
- Switch field rows to flexbox with wrap for responsive layout
- Make section header names editable text fields
- New cocoon fields now append to bottom of form field list
- Add ONE_TIME_GROUPS to FormBuilderService for professional/background sections
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Rename form_answers.text to question_answer for clarity
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Consolidate form builder migrations and rename columns for clarity
Collapse four separate migrations into a single consolidation migration.
Rename columns across form_fields, form_answers, and form_submissions
to use clearer, more consistent names (e.g. field_key → field_identifier,
question → name, answer_datatype → input_type). Add NOT NULL constraints
to match model associations. Rename tables person_forms → form_submissions
and person_form_form_fields → form_answers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix legacy references and add missing specs for form builder
- Fix FormField#html_input_type and #form_helper_type to use enum values
instead of old human-readable strings
- Update seeds to use FormSubmission/FormAnswer instead of PersonForm/PersonFormFormField
- Update event specs to use :form_submission factory
- Delete obsolete person_forms factory
- Add FormSubmission and FormAnswer model specs
- Add visibility enum, multiple_choice?, html_input_type, form_helper_type
specs to FormField
- Expand forms request spec with destroy, show preview, edit_sections,
update_sections, and reorder_fields coverage
- Regenerate schema.rb after running consolidation migration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add specs for FormBuilderService.update_sections!
Test adding sections, removing sections with field cleanup,
header removal, field preservation, and position ordering.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix schema/validation mismatches found in audit
- Remove erroneous null: false on workshop_variations.workshop_id —
PR #1078 intentionally made workshop optional per stakeholder request
(variations can exist without a parent workshop, visible to admins only).
The constraint was picked up by schema dump from local DB state, not
from any migration.
- Add required: true to form field name inputs so browser enforces the
presence validation that exists at model (validates :name, presence: true)
and DB (null: false) levels.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update AGENTS.md with form builder models/services and fix minor issues
- Add Form, FormField, FormSubmission, FormAnswer to model docs
- Add FormBuilderService and new Stimulus controllers to AGENTS.md
- Simplify logged_out_only field hiding to always apply for logged-in
users (not gated on hide_answered_person_questions flag)
- Use Stimulus shorthand action descriptors for chip-select
- Remove trailing comma in forms/show.html.erb
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor separate forms with roles
* filter form builder sections
* add visitor param for admin
* clean up
* clean up seeds
more
* fix seeds
* clean up
* clean up
* fix merge issues
* change visibility
* add logged in user form flow
* fix test failure
* rubocop
* breakman
* update puma
---------
Co-authored-by: maebeale <maebeale@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>1 parent 2053f18 commit e6ae55c
88 files changed
Lines changed: 2346 additions & 1102 deletions
File tree
- app
- controllers
- events
- frontend/javascript/controllers
- helpers
- models
- policies
- services
- event_registration_services
- views
- event_registrations
- events
- public_registrations
- forms
- monthly_reports
- reports
- workshop_logs
- config
- db
- migrate
- seeds
- lib
- spec
- factories
- models
- policies
- requests
- events
- services
- event_registration_services
- system
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
| 181 | + | |
181 | 182 | | |
182 | 183 | | |
183 | 184 | | |
| |||
186 | 187 | | |
187 | 188 | | |
188 | 189 | | |
189 | | - | |
190 | | - | |
191 | | - | |
192 | 190 | | |
193 | 191 | | |
194 | 192 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
129 | 129 | | |
130 | 130 | | |
131 | 131 | | |
132 | | - | |
| 132 | + | |
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
| |||
234 | 234 | | |
235 | 235 | | |
236 | 236 | | |
237 | | - | |
| 237 | + | |
238 | 238 | | |
239 | 239 | | |
240 | | - | |
241 | | - | |
| 240 | + | |
| 241 | + | |
242 | 242 | | |
243 | | - | |
| 243 | + | |
244 | 244 | | |
245 | | - | |
| 245 | + | |
246 | 246 | | |
247 | 247 | | |
Lines changed: 159 additions & 40 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
35 | | - | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
36 | 41 | | |
37 | | - | |
| 42 | + | |
38 | 43 | | |
39 | 44 | | |
40 | | - | |
41 | 45 | | |
42 | 46 | | |
43 | 47 | | |
| |||
48 | 52 | | |
49 | 53 | | |
50 | 54 | | |
51 | | - | |
52 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
53 | 58 | | |
54 | 59 | | |
55 | 60 | | |
56 | 61 | | |
57 | 62 | | |
58 | | - | |
59 | | - | |
| 63 | + | |
| 64 | + | |
60 | 65 | | |
61 | 66 | | |
62 | 67 | | |
| |||
90 | 95 | | |
91 | 96 | | |
92 | 97 | | |
93 | | - | |
94 | | - | |
| 98 | + | |
| 99 | + | |
95 | 100 | | |
96 | 101 | | |
97 | 102 | | |
98 | 103 | | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
| 104 | + | |
| 105 | + | |
105 | 106 | | |
106 | 107 | | |
107 | 108 | | |
108 | 109 | | |
109 | 110 | | |
110 | 111 | | |
111 | | - | |
| 112 | + | |
112 | 113 | | |
113 | 114 | | |
114 | 115 | | |
115 | 116 | | |
116 | 117 | | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
| 118 | + | |
125 | 119 | | |
126 | | - | |
127 | | - | |
| 120 | + | |
128 | 121 | | |
129 | 122 | | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | 123 | | |
135 | 124 | | |
136 | 125 | | |
| |||
163 | 152 | | |
164 | 153 | | |
165 | 154 | | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
166 | 188 | | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
172 | 263 | | |
| 264 | + | |
173 | 265 | | |
174 | 266 | | |
175 | 267 | | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
176 | 295 | | |
177 | 296 | | |
178 | 297 | | |
| |||
182 | 301 | | |
183 | 302 | | |
184 | 303 | | |
185 | | - | |
| 304 | + | |
186 | 305 | | |
187 | 306 | | |
188 | 307 | | |
189 | 308 | | |
190 | 309 | | |
191 | 310 | | |
192 | | - | |
| 311 | + | |
193 | 312 | | |
194 | 313 | | |
195 | 314 | | |
| |||
198 | 317 | | |
199 | 318 | | |
200 | 319 | | |
201 | | - | |
| 320 | + | |
202 | 321 | | |
203 | 322 | | |
204 | 323 | | |
205 | 324 | | |
206 | | - | |
207 | | - | |
| 325 | + | |
| 326 | + | |
208 | 327 | | |
209 | 328 | | |
210 | 329 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
220 | 220 | | |
221 | 221 | | |
222 | 222 | | |
223 | | - | |
224 | | - | |
225 | 223 | | |
226 | 224 | | |
227 | 225 | | |
228 | 226 | | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
236 | 234 | | |
237 | 235 | | |
238 | 236 | | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | | - | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
243 | 243 | | |
244 | 244 | | |
245 | 245 | | |
| |||
249 | 249 | | |
250 | 250 | | |
251 | 251 | | |
252 | | - | |
| 252 | + | |
253 | 253 | | |
254 | 254 | | |
255 | 255 | | |
| |||
0 commit comments