Skip to content

Commit d7b4963

Browse files
committed
sayonara webpacker
1 parent 0457df0 commit d7b4963

File tree

18 files changed

+4426
-2276
lines changed

18 files changed

+4426
-2276
lines changed

Gemfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ gem 'faraday'
2222
gem 'faraday_middleware'
2323

2424
gem 'nokogiri'
25+
gem 'rexml' # letter-opener
2526

2627
gem 'sidekiq'
2728

2829
gem 'jbuilder', '~> 2.9'
2930
gem 'hamlit'
30-
gem 'webpacker', '>= 4.2.0'
31+
gem 'simpacker'
3132

3233
gem 'premailer-rails'
3334

Gemfile.lock

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,6 @@ GEM
196196
rack (2.2.3)
197197
rack-contrib (2.3.0)
198198
rack (~> 2.0)
199-
rack-proxy (0.7.2)
200-
rack
201199
rack-test (1.1.0)
202200
rack (>= 1.0, < 3)
203201
rails (6.0.4.7)
@@ -252,6 +250,7 @@ GEM
252250
redis (>= 4, < 5)
253251
revision_plate (0.1.2)
254252
rack
253+
rexml (3.2.5)
255254
rqrcode (2.1.1)
256255
chunky_png (~> 1.0)
257256
rqrcode_core (~> 1.0)
@@ -277,13 +276,14 @@ GEM
277276
sawyer (0.8.2)
278277
addressable (>= 2.3.5)
279278
faraday (> 0.8, < 2.0)
280-
semantic_range (3.0.0)
281279
sentry-raven (3.1.2)
282280
faraday (>= 1.0)
283281
sidekiq (6.4.1)
284282
connection_pool (>= 2.2.2)
285283
rack (~> 2.0)
286284
redis (>= 4.2.0)
285+
simpacker (1.2.1)
286+
railties (>= 4.2)
287287
sprockets (4.0.3)
288288
concurrent-ruby (~> 1.0)
289289
rack (> 1, < 3)
@@ -298,11 +298,6 @@ GEM
298298
tilt (2.0.10)
299299
tzinfo (1.2.9)
300300
thread_safe (~> 0.1)
301-
webpacker (5.4.3)
302-
activesupport (>= 5.2)
303-
rack-proxy (>= 0.6.1)
304-
railties (>= 5.2)
305-
semantic_range (>= 2.3.0)
306301
websocket-driver (0.7.5)
307302
websocket-extensions (>= 0.1.0)
308303
websocket-extensions (0.1.5)
@@ -337,11 +332,12 @@ DEPENDENCIES
337332
rails-i18n (~> 6.0)
338333
redis-rails
339334
revision_plate
335+
rexml
340336
rqrcode
341337
rspec-rails
342338
sentry-raven
343339
sidekiq
344-
webpacker (>= 4.2.0)
340+
simpacker
345341

346342
BUNDLED WITH
347343
2.2.32

app/javascript/meta.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const SENTRY_DSN = document.querySelector<HTMLMetaElement>(
2+
'meta[name="rkto:sentry-dsn"]'
3+
)?.content;

app/javascript/packs/admin.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
1-
import 'bootstrap/dist/css/bootstrap';
2-
import 'font-awesome/css/font-awesome';
1+
import "bootstrap/dist/css/bootstrap";
2+
import "font-awesome/css/font-awesome";
33

4-
import 'raven';
4+
import * as Sentry from "@sentry/react";
5+
import { SENTRY_DSN } from "../meta";
56

6-
import 'bootstrap';
7+
Sentry.init({
8+
dsn: SENTRY_DSN,
9+
});
710

8-
import Rails from '@rails/ujs';
11+
import "bootstrap";
12+
13+
import Rails from "@rails/ujs";
914
Rails.start();
1015

11-
import 'user_sponsorships_form';
12-
import 'broadcast_new_recipient_fields';
13-
import 'booth_assignments';
16+
import "../user_sponsorships_form";
17+
import "../broadcast_new_recipient_fields";
18+
import "../booth_assignments";
Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
1-
import 'bootstrap/dist/css/bootstrap';
2-
import 'font-awesome/css/font-awesome';
1+
import "bootstrap/dist/css/bootstrap";
2+
import "font-awesome/css/font-awesome";
33

4-
import 'raven';
4+
import * as Sentry from "@sentry/react";
5+
import { SENTRY_DSN } from "../meta";
56

6-
import 'bootstrap';
7+
Sentry.init({
8+
dsn: SENTRY_DSN,
9+
});
710

8-
import Rails from '@rails/ujs';
11+
import "bootstrap";
12+
13+
import Rails from "@rails/ujs";
914
Rails.start();
1015

11-
import 'user_sponsorships_form';
12-
import 'user_sponsorship_asset_file_form';
16+
import "../user_sponsorships_form";
17+
import "../user_sponsorship_asset_file_form";
1318

14-
import '../../stylesheets/application.sass';
19+
import "../../stylesheets/application.sass";

app/javascript/packs/reception.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
import 'bootstrap/dist/css/bootstrap';
2-
import 'font-awesome/css/font-awesome';
1+
import "bootstrap/dist/css/bootstrap";
2+
import "font-awesome/css/font-awesome";
33

4-
import 'raven';
4+
import * as Sentry from "@sentry/react";
5+
import { SENTRY_DSN } from "../meta";
56

6-
import 'bootstrap';
7+
Sentry.init({
8+
dsn: SENTRY_DSN,
9+
});
710

8-
import Rails from '@rails/ujs';
11+
import "bootstrap";
12+
13+
import Rails from "@rails/ujs";
914
Rails.start();
1015

11-
import 'reception_checkin_form';
12-
import 'reception_checkin_button';
16+
import "../reception_checkin_form";
17+
import "../reception_checkin_button";
Lines changed: 101 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,130 @@
1-
document.addEventListener('DOMContentLoaded', () => {
2-
document.querySelectorAll('.sponsorships_form').forEach((formElem) => {
3-
formElem.querySelectorAll('select.sponsorship_id_to_copy_selector').forEach((elem_) => {
4-
const elem = elem_ as HTMLSelectElement;
5-
elem.addEventListener('change', () => {
6-
const query = new URLSearchParams(location.search);
7-
query.set('sponsorship_id_to_copy', elem.value);
8-
location.search = query.toString();
1+
document.addEventListener("DOMContentLoaded", () => {
2+
console.log("DOMContentLoaded");
3+
document.querySelectorAll(".sponsorships_form").forEach((formElem) => {
4+
formElem
5+
.querySelectorAll("select.sponsorship_id_to_copy_selector")
6+
.forEach((elem_) => {
7+
const elem = elem_ as HTMLSelectElement;
8+
elem.addEventListener("change", () => {
9+
const query = new URLSearchParams(location.search);
10+
query.set("sponsorship_id_to_copy", elem.value);
11+
location.search = query.toString();
12+
});
913
});
10-
});
1114

15+
formElem
16+
.querySelectorAll(".sponsorships_form_billing_contact")
17+
.forEach((elem) => {
18+
const checkbox = elem.querySelector(
19+
".form-check input[type=checkbox]"
20+
) as HTMLInputElement;
21+
const fieldset = elem.querySelector("fieldset") as HTMLFieldSetElement;
1222

13-
formElem.querySelectorAll('.sponsorships_form_billing_contact').forEach((elem) => {
14-
const checkbox = elem.querySelector('.form-check input[type=checkbox]') as HTMLInputElement;
15-
const fieldset = elem.querySelector('fieldset') as HTMLFieldSetElement;
16-
17-
const handleChange = (e?: Event) => {
18-
if (checkbox.checked) {
19-
fieldset.classList.remove('d-none');
20-
fieldset.disabled = false;
21-
} else {
22-
fieldset.classList.add('d-none');
23-
fieldset.disabled = true;
24-
}
25-
}
26-
checkbox.addEventListener('change', handleChange);
27-
checkbox.addEventListener('click', handleChange);
28-
handleChange();
29-
});
23+
const handleChange = (e?: Event) => {
24+
if (checkbox.checked) {
25+
fieldset.classList.remove("d-none");
26+
fieldset.disabled = false;
27+
} else {
28+
fieldset.classList.add("d-none");
29+
fieldset.disabled = true;
30+
}
31+
};
32+
checkbox.addEventListener("change", handleChange);
33+
checkbox.addEventListener("click", handleChange);
34+
handleChange();
35+
});
3036

3137
const calculateTotalAttendees = () => {
32-
const totalElem = formElem.querySelector('.sponsorships_form_tickets__total') as Element;
38+
const totalElem = formElem.querySelector(
39+
".sponsorships_form_tickets__total"
40+
) as Element;
3341
if (!totalElem) return;
3442

35-
const selectedPlanElem = formElem.querySelector('.sponsorships_form_plans input[type=radio]:checked') as HTMLInputElement;
36-
const ticketsIncludedInPlanElem = formElem.querySelector('.sponsorships_form_tickets__included_in_plan')! as Element;
37-
const additionalAttendeesElem = formElem.querySelector('.sponsorships_form_tickets__additional_attendees input')! as HTMLInputElement;
43+
const selectedPlanElem = formElem.querySelector(
44+
".sponsorships_form_plans input[type=radio]:checked"
45+
) as HTMLInputElement;
46+
const ticketsIncludedInPlanElem = formElem.querySelector(
47+
".sponsorships_form_tickets__included_in_plan"
48+
)! as Element;
49+
const additionalAttendeesElem = formElem.querySelector(
50+
".sponsorships_form_tickets__additional_attendees input"
51+
)! as HTMLInputElement;
3852

39-
const numberOfGuests = selectedPlanElem ? parseInt(selectedPlanElem.dataset['guests']!, 10) : 0;
53+
const numberOfGuests = selectedPlanElem
54+
? parseInt(selectedPlanElem.dataset["guests"]!, 10)
55+
: 0;
4056
const additionalAttendees = additionalAttendeesElem.valueAsNumber;
4157

42-
const total = numberOfGuests + (isNaN(additionalAttendees) ? 0 : additionalAttendees);
58+
const total =
59+
numberOfGuests + (isNaN(additionalAttendees) ? 0 : additionalAttendees);
4360

4461
ticketsIncludedInPlanElem.innerHTML = `${numberOfGuests}`;
4562
totalElem.innerHTML = `${total}`;
4663
};
47-
formElem.querySelectorAll('.sponsorships_form_tickets__additional_attendees input').forEach((elem) => {
48-
elem.addEventListener('change', () => calculateTotalAttendees());
49-
elem.addEventListener('click', () => calculateTotalAttendees());
50-
});
64+
formElem
65+
.querySelectorAll(
66+
".sponsorships_form_tickets__additional_attendees input"
67+
)
68+
.forEach((elem) => {
69+
elem.addEventListener("change", () => calculateTotalAttendees());
70+
elem.addEventListener("click", () => calculateTotalAttendees());
71+
});
5172
calculateTotalAttendees();
5273

53-
formElem.querySelectorAll('.sponsorships_form_plans').forEach((elem) => {
54-
const boothCheckbox = formElem.querySelector('.sponsorships_form_booth_request input[type=checkbox]') as HTMLInputElement;
55-
const uneligibleHelpTextElem = formElem.querySelector('.sponsorships_form_booth_request_uneligible') as Element;
56-
const customizationRequestField = document.querySelector('.sponsorships_form_customization_request') as HTMLTextAreaElement;
57-
const profileFieldHelpElem = document.querySelector('.sponsorships_form_profile_help') as Element;
58-
const acceptanceHelpElem = document.querySelector('.sponsorships_acceptance_help') as Element;
74+
formElem.querySelectorAll(".sponsorships_form_plans").forEach((elem) => {
75+
const boothCheckbox = formElem.querySelector(
76+
".sponsorships_form_booth_request input[type=checkbox]"
77+
) as HTMLInputElement;
78+
const uneligibleHelpTextElem = formElem.querySelector(
79+
".sponsorships_form_booth_request_uneligible"
80+
) as Element;
81+
const customizationRequestField = document.querySelector(
82+
".sponsorships_form_customization_request"
83+
) as HTMLTextAreaElement;
84+
const profileFieldHelpElem = document.querySelector(
85+
".sponsorships_form_profile_help"
86+
) as Element;
87+
const acceptanceHelpElem = document.querySelector(
88+
".sponsorships_acceptance_help"
89+
) as Element;
5990

6091
const handleChange = (e: HTMLInputElement | null) => {
61-
if (!e) return;
62-
if (e.dataset.booth == '1') {
63-
uneligibleHelpTextElem.classList.add('d-none');
64-
boothCheckbox.disabled = false;
65-
} else {
66-
uneligibleHelpTextElem.classList.remove('d-none');
67-
boothCheckbox.disabled = true;
68-
}
92+
if (!e) return;
93+
if (e.dataset.booth == "1") {
94+
uneligibleHelpTextElem.classList.add("d-none");
95+
boothCheckbox.disabled = false;
96+
} else {
97+
uneligibleHelpTextElem.classList.remove("d-none");
98+
boothCheckbox.disabled = true;
99+
}
69100

70-
const wordsLimitHelp = e.dataset.wordsLimitHelp;
71-
if (wordsLimitHelp) {
72-
profileFieldHelpElem.innerHTML = wordsLimitHelp;
73-
} else {
74-
profileFieldHelpElem.innerHTML = '';
75-
}
101+
const wordsLimitHelp = e.dataset.wordsLimitHelp;
102+
if (wordsLimitHelp) {
103+
profileFieldHelpElem.innerHTML = wordsLimitHelp;
104+
} else {
105+
profileFieldHelpElem.innerHTML = "";
106+
}
76107

77-
const acceptanceHelp = e.dataset.acceptanceHelp;
78-
if (acceptanceHelp) {
79-
acceptanceHelpElem.innerHTML = acceptanceHelp;
80-
} else {
81-
acceptanceHelpElem.innerHTML = '';
82-
}
108+
const acceptanceHelp = e.dataset.acceptanceHelp;
109+
if (acceptanceHelp) {
110+
acceptanceHelpElem.innerHTML = acceptanceHelp;
111+
} else {
112+
acceptanceHelpElem.innerHTML = "";
113+
}
83114

84-
customizationRequestField.required = e.dataset['other'] == '1';
115+
customizationRequestField.required = e.dataset["other"] == "1";
85116
};
86-
handleChange(elem.querySelector('input[type=radio]:checked') as HTMLInputElement);
117+
handleChange(
118+
elem.querySelector("input[type=radio]:checked") as HTMLInputElement
119+
);
87120

88-
elem.querySelectorAll('input[type=radio]').forEach((planRadioElem) => {
121+
elem.querySelectorAll("input[type=radio]").forEach((planRadioElem) => {
89122
const planRadio = planRadioElem as HTMLInputElement;
90-
planRadio.addEventListener('change', (e) => {
123+
planRadio.addEventListener("change", (e) => {
91124
calculateTotalAttendees();
92125
handleChange(e.target as HTMLInputElement);
93126
});
94-
});
95-
});
127+
});
128+
});
96129
});
97130
});

app/jobs/sponsorship_welcome_job.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def perform(sponsorship)
1212
).admin_email.deliver_now
1313

1414
SlackWebhookJob.perform_now(
15-
text: ":tamago: *New sponsorship* (#{sponsorship.plan_name || '*OTHER*'}): #{sponsorship.name} <#{conference_sponsorship_url(sponsorship.conference, sponsorship)}|Open>",
15+
{ text: ":tamago: *New sponsorship* (#{sponsorship.plan_name || '*OTHER*'}): #{sponsorship.name} <#{conference_sponsorship_url(sponsorship.conference, sponsorship)}|Open>" },
1616
)
1717

1818
EnsureSponsorshipTitoDiscountCodeJob.perform_later(sponsorship, 'attendee')

app/stylesheets/styles/config/_base.sass

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ nav.navbar.navbar-expand-lg a.dropdown-item,
2828
.navbar-dark .navbar-nav .nav-link
2929
color: $nav-link
3030
transition: all .2s ease-out
31-
&:hover,
31+
&:hover
3232
color: $nav-link-hover
3333
&:focus
3434
color: $reversal-text

app/views/layouts/admin.html.haml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
= csrf_meta_tags
88
= csp_meta_tag
99

10+
= stylesheet_pack_tag 'vendor', media: 'all'
1011
= stylesheet_pack_tag 'admin', media: 'all'
1112

1213
- if Rails.application.config.x.sentry.dsn.present?
@@ -30,4 +31,5 @@
3031
- if notice
3132
.alert.alert-success= notice
3233
= yield
34+
= javascript_pack_tag 'vendor'
3335
= javascript_pack_tag 'admin'

0 commit comments

Comments
 (0)