sfc-utils 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/footer.js ADDED
@@ -0,0 +1,615 @@
1
+
2
+ let { getBrands } = require('./brands')
3
+
4
+ // Handle nav for various markets and include nav options for other links
5
+ let getFooter = function(meta, forceColor){
6
+
7
+ // If we aren't passing meta in, we have to call getSettings here
8
+ if (!meta){
9
+ let {getSettings} = require('./settings')
10
+ meta = getSettings()
11
+ }
12
+
13
+ let year = new Date().getFullYear()
14
+
15
+ let {attributes: {marketPrefix, invert}} = getBrands(meta.PROJECT.MARKET_KEY)
16
+
17
+ // Handle various CT domains
18
+ let eedition = "";
19
+ if (typeof window !== "undefined"){
20
+ switch(window.location.origin){
21
+ case "https://www.ctpost.com": marketPrefix = "ct"; eedition = "CT_PO"; break;
22
+ case "https://www.nhregister.com": marketPrefix = "nh"; eedition = "CT_NHR"; break;
23
+ case "https://www.greenwichtime.com": marketPrefix = "gt"; eedition = "CT_GT"; break;
24
+ case "https://www.stamfordadvocate.com": marketPrefix = "st"; eedition = "CT_AD"; break;
25
+ case "https://www.thehour.com": marketPrefix = "th"; eedition = "CT_HR"; break;
26
+ case "https://www.newstimes.com": marketPrefix = "nt"; eedition = "CT_NT"; break;
27
+ case "https://www.middletownpress.com": marketPrefix = "mp"; eedition = "CT_MP"; break;
28
+ case "https://www.ctinsider.com": marketPrefix = "in"; break;
29
+
30
+ case "https://www.beaumontenterprise.com":
31
+ marketPrefix = "texcom/beau";
32
+ break;
33
+ case "https://www.lmtonline.com":
34
+ marketPrefix = "texcom/laredo";
35
+ break;
36
+ case "https://www.mrt.com":
37
+ marketPrefix = "texcom/mrt";
38
+ break;
39
+ case "https://www.myplainview.com":
40
+ marketPrefix = "texcom/plain";
41
+ break;
42
+
43
+ case "https://www.bigrapidsnews.com":
44
+ marketPrefix = "midcom/big";
45
+ break;
46
+ case "https://www.manisteenews.com":
47
+ marketPrefix = "midcom/mani";
48
+ break;
49
+ case "https://www.ourmidland.com":
50
+ marketPrefix = "midcom/mid";
51
+ break;
52
+ case "https://www.michigansthumb.com":
53
+ marketPrefix = "midcom/huron";
54
+ break;
55
+ case "https://www.recordpatriot.com":
56
+ marketPrefix = "midcom/benzie";
57
+ break;
58
+ case "https://www.theheraldreview.com":
59
+ marketPrefix = "midcom/hr";
60
+ break;
61
+ case "https://www.lakecountystar.com":
62
+ marketPrefix = "midcom/lc";
63
+ break;
64
+ case "https://www.thetelegraph.com":
65
+ marketPrefix = "midcom/alton";
66
+ break;
67
+ case "https://www.theintelligencer.com":
68
+ marketPrefix = "midcom/ed";
69
+ break;
70
+ case "https://www.myjournalcourier.com":
71
+ marketPrefix = "midcom/jv";
72
+ break;
73
+ }
74
+ }
75
+ // If inverted, do black on white nav
76
+ let invertClass = ""
77
+ let color = "white"
78
+ if (invert || forceColor === "white"){
79
+ invertClass = "invert"
80
+ color = "black"
81
+ }
82
+
83
+ const footerLinks = {
84
+ "SFC": {
85
+ "About": [
86
+ {text:"Our Company",link:"http://www.hearst.com/newspapers/san-francisco-chronicle"},
87
+ {text:"Privacy Notice / Notice at Collection",link:"https://www.sfchronicle.com/privacy_policy"},
88
+ {text:"Your California Privacy Rights",link:"https://www.sfchronicle.com/privacy_policy/#caprivacyrights"},
89
+ {text:"Interest Based Ads",link:"https://www.sfchronicle.com/privacy_policy/#interestbasedads"},
90
+ {text:"Terms of Use",link:"https://www.sfchronicle.com/terms_of_use/"},
91
+ {text:"Careers",link:"https://eevd.fa.us6.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_15/pages/29004"},
92
+ {text:"Advertising",link:"https://marketing.sfgate.com/advertise-with-us-today"}
93
+ ],
94
+ "Newsroom": [
95
+ {text:"Ethics Policy",link:"https://www.sfchronicle.com/file/759/0/7590-7528-Hearst_Newspaper_Group_Standards_and_Ethics_Policy.pdf"},
96
+ {text:"How We Cover Politics",link:"https://www.sfchronicle.com/local-politics/article/Election-2020-inside-the-newsroom-How-15519702.php"},
97
+ {text:"Endorsement Process",link:"https://www.sfchronicle.com/opinion/article/How-The-Chronicle-s-endorsement-process-works-14499467.php"},
98
+ {text:"News Tips",link:"https://www.sfchronicle.com/newstips/"},
99
+ {text:"Newsroom News", link:"https://www.sfchronicle.com/about/newsroomnews/"}
100
+ ],
101
+ "Contact": [
102
+ {text:"Customer Service",link:"https://www.sfchronicle.com/customer_service"},
103
+ {text:"FAQ",link:"https://www.sfchronicle.com/faq"},
104
+ {text:"Newsroom Contacts",link:"https://www.sfchronicle.com/newsroom_contacts"}
105
+ ],
106
+ "CCPA": [
107
+ {text:"Do Not Sell My Personal Information",link:"https://www.sfchronicle.com/mydata/"}
108
+ ],
109
+ "Services": [
110
+ {text:"Subscriber Services",link:"https://subscription.sfchronicle.com/"},
111
+ {text:"e-Edition",link:"https://www.sfchronicle.com/e-edition"},
112
+ {text:"Reprints & Permissions",link:"https://www.parsintl.com/publication/sfchronicle/"},
113
+ {text:"Corporate Subscriptions",link:"https://www.sfchronicle.com/corporatesubscriptions/"},
114
+ {text:"App",link:"https://www.sfchronicle.com/mobile-apps/"},
115
+ {text:"Archives",link:"https://www.sfchronicle.com/archive/search/subscriber/"},
116
+ {text:"Membership",link:"https://www.sfchronicle.com/membership"},
117
+ {text:"Store",link:"https://sfchronicle.myshopify.com/?_ga=2.86091355.2125278198.1634578934-724761130.1630448969"},
118
+ {text:"Subscription Offers",link:"https://subscription.sfchronicle.com/checkout/430/866/?siteID=SFC&origin=footer"},
119
+ {text:"sfgate.com",link:"https://www.sfgate.com/"}
120
+ ]
121
+ },
122
+ "Houston": {
123
+ "About": [
124
+ {
125
+ "text": "Our Company",
126
+ "link": "https://www.hearst.com/newspapers/houston-chronicle"
127
+ },
128
+ {
129
+ "text": "Newspaper Delivery Safety Procedures",
130
+ "link": "https://www.houstonchronicle.com/customer_service/article/How-Hearst-Newspapers-is-delivering-information-15151944.php"
131
+ },
132
+ {
133
+ "text": "Privacy Notice",
134
+ "link": "https://www.houstonchronicle.com/privacy_policy"
135
+ },
136
+ {
137
+ "text": "Your California Privacy Rights",
138
+ "link": "https://www.houstonchronicle.com/privacy_policy/#caprivacyrights"
139
+ },
140
+ {
141
+ "text": "Interest Based Ads",
142
+ "link": "https://www.houstonchronicle.com/privacy_policy/#interestbasedads"
143
+ },
144
+ {
145
+ "text": "Terms of Use",
146
+ "link": "https://www.houstonchronicle.com/terms_of_use/"
147
+ },
148
+ {
149
+ "text": "Advertising",
150
+ "link": "http://marketing.chron.com/"
151
+ },
152
+ {
153
+ "text": "Careers",
154
+ "link": "http://www.chron.com/careers/"
155
+ }
156
+ ],
157
+ "Contact": [
158
+ {
159
+ "text": "Subscribe",
160
+ "link": "https://offers.houstonchronicle.com/?origin=footer&variant=wcm.88837"
161
+ },
162
+ {
163
+ "text": "e-Edition",
164
+ "link": "https://subscription.houstonchronicle.com/eedition"
165
+ },
166
+ {
167
+ "text": "Archives",
168
+ "link": "https://www.houstonchronicle.com/archive/"
169
+ },
170
+ {
171
+ "text": "Customer Service",
172
+ "link": "https://www.houstonchronicle.com/customer_service"
173
+ },
174
+ {
175
+ "text": "Frequently Asked Questions",
176
+ "link": "https://www.houstonchronicle.com/faq"
177
+ },
178
+ {
179
+ "text": "Newsroom Contacts",
180
+ "link": "https://www.houstonchronicle.com/newsroom_contacts"
181
+ }
182
+ ],
183
+ },
184
+ "SanAntonio": {
185
+ "About": [
186
+ {
187
+ "text": "Our Company",
188
+ "link": "https://www.hearst.com/newspapers/san-antonio-express-news"
189
+ },
190
+ {
191
+ "text": "Newspaper Delivery Safety Procedures",
192
+ "link": "https://www.expressnews.com/customer_service/article/How-Hearst-Newspapers-is-delivering-information-15152120.php"
193
+ },
194
+ {
195
+ "text": "Privacy Notice",
196
+ "link": "https://www.expressnews.com/privacy_policy/"
197
+ },
198
+ {
199
+ "text": "Your California Privacy Rights",
200
+ "link": "https://www.expressnews.com/privacy_policy/#caprivacyrights"
201
+ },
202
+ {
203
+ "text": "Interest Based Ads",
204
+ "link": "https://www.expressnews.com/privacy_policy/#interestbasedads"
205
+ },
206
+ {
207
+ "text": "Terms of Use",
208
+ "link": "https://www.expressnews.com/terms_of_use/"
209
+ },
210
+ {
211
+ "text": "Advertising",
212
+ "link": "http://www.hearstmediasa.com/"
213
+ },
214
+ {
215
+ "text": "Careers",
216
+ "link": "http://www.mysanantonio.com/careers/"
217
+ },
218
+ {
219
+ "text": "e-edition",
220
+ "link": "http://digital.olivesoftware.com/Olive/ODN/SanAntonioExpressNews/Default.aspx"
221
+ },
222
+ ],
223
+ "Contact": [
224
+ {
225
+ "text": "Archives",
226
+ "link": "https://www.expressnews.com/archive"
227
+ },
228
+ {
229
+ "text": "Customer Service",
230
+ "link": "https://www.expressnews.com/customer_service"
231
+ },
232
+ {
233
+ "text": "Frequently Asked Questions",
234
+ "link": "https://www.expressnews.com/subscriberfaqs/"
235
+ },
236
+ {
237
+ "text": "Newsroom Contacts",
238
+ "link": "https://www.expressnews.com/newsroom_contacts"
239
+ }
240
+ ]
241
+ },
242
+ "Albany": {
243
+ "About": [
244
+ {
245
+ "text": "Our Company",
246
+ "link": "http://www.hearst.com/newspapers/albany-times-union",
247
+ },
248
+ {
249
+ "text": "General Standards and Practices",
250
+ "link": "https://www.timesunion.com/home/article/General-Standards-and-Practices-for-Hearst-15647242.php/"
251
+ },
252
+ {
253
+ "text": "Newspaper Delivery Safety Procedures",
254
+ "link": "https://www.timesunion.com/home/article/How-Hearst-Newspapers-is-delivering-information-15152131.php"
255
+ },
256
+ {
257
+ "text": "Advertising",
258
+ "link": "https://timesunionmediagroup.com/"
259
+ },
260
+ {
261
+ "text": "Interest Based Ads",
262
+ "link": "https://www.timesunion.com/help/article/Privacy-notice-highlights-16480619.php#interestbasedads"
263
+ },
264
+ {
265
+ "text": "Terms of Use",
266
+ "link": "https://www.timesunion.com/help/article/Terms-of-use-16468248.php "
267
+ },
268
+ {
269
+ "text": "Privacy Notice",
270
+ "link": "https://www.timesunion.com/help/article/Privacy-notice-highlights-16480619.php "
271
+ },
272
+ {
273
+ "text": "Your California Privacy Rights",
274
+ "link": "https://www.timesunion.com/help/article/Privacy-notice-highlights-16480619.php#additionalinformationforcaliforniaresidents "
275
+ },
276
+ {
277
+ "text": "Jobs at the TU",
278
+ "link": "https://eevd.fa.us6.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_15/pages/28003 "
279
+ }
280
+ ],
281
+ "Contact": [
282
+ {
283
+ "text": "Contact Us",
284
+ "link": "https://www.timesunion.com/help/"
285
+ },
286
+ {
287
+ "text": "Weather",
288
+ "link": "https://www.timesunion.com/weather/"
289
+ },
290
+ {
291
+ "text": "School Closings",
292
+ "link": "https://www.timesunion.com/closings/"
293
+ },
294
+ {
295
+ "text": "Events Calendar",
296
+ "link": "https://events.timesunion.com"
297
+ },
298
+ {
299
+ "text": "Celebrations",
300
+ "link": "https://www.timesunion.com/celebrations/"
301
+ },
302
+ {
303
+ "text": "Obituaries",
304
+ "link": "https://www.legacy.com/obituaries/timesunion-albany/"
305
+ },
306
+ {
307
+ "text": "Online Store",
308
+ "link": "https://timesunionplus-store.myshopify.com/"
309
+ },
310
+ {
311
+ "text": "Puzzles Palace",
312
+ "link": "https://www.timesunion.com/puzzles/"
313
+ }
314
+ ],
315
+ "Services": [
316
+ {
317
+ "text": "Subscriber Services",
318
+ "link": "https://subscription.timesunion.com/"
319
+ },
320
+ {
321
+ "text": "Home Delivery",
322
+ "link": "https://subscription.timesunion.com/checkout/337/730/?origin=footer"
323
+ },
324
+ {
325
+ "text": "Become a Carrier",
326
+ "link": "https://www.timesunion.com/carriers"
327
+ },
328
+ {
329
+ "text": "e-Edition",
330
+ "link": "https://subscription.timesunion.com/eedition/"
331
+ },
332
+ {
333
+ "text": "Corporate Subscriptions",
334
+ "link": "https://www.timesunion.com/corporatesubscriptions/"
335
+ },
336
+ {
337
+ "text": "Mobile App",
338
+ "link": "https://www.timesunion.com/mobile-apps/"
339
+ },
340
+ {
341
+ "text": "Copyright and Reprint",
342
+ "link": "https://www.timesunion.com/help/article/Times-Union-copyright-and-reprint-policy-16417547.php"
343
+ },
344
+ {
345
+ "text": "Archives",
346
+ "link": "https://www.timesunion.com/archive"
347
+ }
348
+ ]
349
+ },
350
+ "CT": {
351
+ "About": [
352
+ {
353
+ "text": "Newspaper Delivery Safety Procedures",
354
+ "link": "/article/How-Hearst-Newspapers-is-delivering-information-15152129.php",
355
+ },
356
+ {
357
+ "text": "Privacy Notice",
358
+ "link": "/privacy/"
359
+ },
360
+ {
361
+ "text": "Your California Privacy Rights",
362
+ "link": "/privacy/#additionalinformationforcaliforniaresidents"
363
+ },
364
+ {
365
+ "text": "Interest Based Ads",
366
+ "link": "/privacy/#interestbasedads"
367
+ },
368
+ {
369
+ "text": "Terms of Use",
370
+ "link": "/tos/"
371
+ },
372
+ {
373
+ "text": "Advertising",
374
+ "link": "https://hearstmediact.com/"
375
+ },
376
+ {
377
+ "text": "Careers",
378
+ "link": "http://www.hearst.com/careers"
379
+ }
380
+ ],
381
+ "Contact": [
382
+ {
383
+ "text": "FAQ",
384
+ "link": "/faq/"
385
+ },
386
+ {
387
+ "text": "Customer Service",
388
+ "link": "/feedback/"
389
+ },
390
+ {
391
+ "text": "Today's e-Edition",
392
+ "link": "https://subscription.hearstmediact.com/eEdition?siteID="+eedition
393
+ },
394
+ {
395
+ "text": "Contact Us",
396
+ "link": "/contact/"
397
+ }
398
+ ],
399
+ "Connect": [
400
+ {
401
+ "text": "RSS",
402
+ "link": "/rss/"
403
+ },
404
+ {
405
+ "text": "Newsletter Sign-Up",
406
+ "link": "/newsletters/"
407
+ }
408
+ ]
409
+ },
410
+ "Midcom": {
411
+ "About": [
412
+ {
413
+ "text": "Privacy Notice",
414
+ "link": "/privacy/"
415
+ },
416
+ {
417
+ "text": "Your California Privacy Rights",
418
+ "link": "/privacy/#additionalinformationforcaliforniaresidents"
419
+ },
420
+ {
421
+ "text": "Interest Based Ads",
422
+ "link": "/privacy/#interestbasedads"
423
+ },
424
+ {
425
+ "text": "Terms of Use",
426
+ "link": "/tos/"
427
+ },
428
+ {
429
+ "text": "Careers",
430
+ "link": "http://www.hearst.com/careers"
431
+ }
432
+ ],
433
+ "Contact": [
434
+ {
435
+ "text": "Subscribe",
436
+ "link": "/subproject/"
437
+ },
438
+ {
439
+ "text": "Newsroom Contacts",
440
+ "link": "/contact/"
441
+ },
442
+ {
443
+ "text": "Advertise",
444
+ "link": "https://hearstmediamidwest.com/"
445
+ }
446
+ ]
447
+ },
448
+ "Texcom": {
449
+ "About": [
450
+ {
451
+ "text": "Privacy Notice",
452
+ "link": "/privacy/"
453
+ },
454
+ {
455
+ "text": "Your California Privacy Rights",
456
+ "link": "/privacy/#additionalinformationforcaliforniaresidents"
457
+ },
458
+ {
459
+ "text": "Interest Based Ads",
460
+ "link": "/privacy/#interestbasedads"
461
+ },
462
+ {
463
+ "text": "Terms of Use",
464
+ "link": "/tos/"
465
+ },
466
+ {
467
+ "text": "Careers",
468
+ "link": "http://www.hearst.com/careers"
469
+ }
470
+ ],
471
+ "Contact": [
472
+ {
473
+ "text": "Subscribe",
474
+ "link": "/subproject/"
475
+ },
476
+ {
477
+ "text": "Newsroom Contacts",
478
+ "link": "/contact/"
479
+ }
480
+ ]
481
+ },
482
+ "TK": {
483
+ "About": [
484
+ {
485
+ "text": "Advertising",
486
+ "link": "https://hearstmediact.com/"
487
+ },
488
+ {
489
+ "text": "Careers",
490
+ "link": "http://www.hearst.com/careers"
491
+ }
492
+ ]
493
+ }
494
+ }
495
+
496
+ let marketLinks = footerLinks[meta.PROJECT.MARKET_KEY]
497
+ // Special case for ctinsider, which doesn't fit the normal CT mold
498
+ if (marketPrefix === "in"){
499
+ marketLinks = {
500
+ "About": [
501
+ {
502
+ "text": "Our Company",
503
+ "link": "https://www.hearst.com/newspapers/hearst-connecticut-media-group",
504
+ },
505
+ {
506
+ "text": "Ad Choices",
507
+ "link": "https://optout.aboutads.info/?c=2&lang=EN"
508
+ },
509
+ {
510
+ "text": "Careers",
511
+ "link": "https://eevd.fa.us6.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1"
512
+ },
513
+ {
514
+ "text": "Terms of Use",
515
+ "link": "https://www.ctinsider.com/tos/"
516
+ },
517
+ {
518
+ "text": "Advertising",
519
+ "link": "https://hearstmediact.com/?_ga=2.121588744.1440353062.1624467793-1527008254.1622131828"
520
+ },
521
+ {
522
+ "text": "Privacy Notice / Notice of Collection",
523
+ "link": "https://www.ctinsider.com/privacy/"
524
+ },
525
+ {
526
+ "text": "Your Privacy Rights",
527
+ "link": "https://www.ctinsider.com/privacy/#your_rights"
528
+ },
529
+ {
530
+ "text": "Your California Privacy Rights",
531
+ "link": "https://www.ctinsider.com/privacy/#additionalinformationforcaliforniaresidents"
532
+ }
533
+ ],
534
+ "Contact": [
535
+ {
536
+ "text": "Contact Us",
537
+ "link": "https://www.ctinsider.com/contact/"
538
+ },
539
+ {
540
+ "text": "FAQ",
541
+ "link": "https://www.ctinsider.com/faq/"
542
+ }
543
+ ]
544
+ }
545
+ }
546
+
547
+ let linkHTML = ""
548
+ Object.keys(marketLinks).forEach(function(key,index) {
549
+ // Open the new section
550
+ linkHTML += '<li><div class="footer-title">'+key+'</div><ul class="section">'
551
+
552
+ // Create the link items
553
+ for (link in marketLinks[key]){
554
+ let thisLink = marketLinks[key][link]
555
+ linkHTML += '<li><a href="'+thisLink.link+'" target="_blank" rel="noopener noreferrer">'+thisLink.text+'</a></li>'
556
+ }
557
+
558
+ // Close the new section
559
+ linkHTML += '</ul></li>'
560
+ });
561
+
562
+ let footerHTML = `<footer class="pageFooter ${invertClass}">
563
+ <div class="lock">
564
+ <div class="pageFooter--wrapper">
565
+ <div class="pageFooter--left">
566
+ <a
567
+ href="/"
568
+ class="pageFooter--left-logo"
569
+ aria-label="Click to go to the homepage"
570
+ style="background-image: url(https://files.sfchronicle.com/static-assets/logos/${marketPrefix}-${color}.png)"
571
+ >
572
+ Homepage
573
+ </a>
574
+ <a
575
+ href="/"
576
+ class="pageFooter--left-logo mobile"
577
+ aria-label="Click to go to the homepage"
578
+ style="background-image: url(https://files.sfchronicle.com/static-assets/logos/${marketPrefix}-square-${color}.png)"
579
+ >
580
+ Homepage
581
+ </a>
582
+ </div>
583
+ <div class="pageFooter--right">
584
+ <div class="pageFooter--right-topLine">
585
+ <button id="scrollTop" class="return">
586
+ To Top
587
+ </button>
588
+ </div>
589
+ <div class="pageFooter--right-links">
590
+ <div class="hdnce-e hdnce-item-87230">
591
+ <ul class="wrapper">
592
+ ${linkHTML}
593
+ </ul>
594
+ </div>
595
+ </div>
596
+ </div>
597
+ </div>
598
+ <div class="pageFooter--branding">
599
+ <img
600
+ class="pageFooter--branding-logo"
601
+ src="https://sfchronicle.com/img/hearst_newspapers_logo.svg"
602
+ alt="San Francisco Chronicle logo"
603
+ />
604
+ <span class="pageFooter--branding-copyright">
605
+ ©${year}
606
+ Hearst
607
+ </span>
608
+ </div>
609
+ </div>
610
+ </footer>`
611
+
612
+ return footerHTML
613
+ }
614
+
615
+ module.exports = { getFooter }