sfc-utils 1.4.67 → 1.4.68
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/package.json +2 -2
- package/settings.js +129 -106
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sfc-utils",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.68",
|
|
4
4
|
"author": "ewagstaff <evanjwagstaff@gmail.com>",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"archieml": "^0.4.2",
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
"react-transition-group": "^4.4.5",
|
|
15
15
|
"write": "^2.0.0"
|
|
16
16
|
}
|
|
17
|
-
}
|
|
17
|
+
}
|
package/settings.js
CHANGED
|
@@ -1,120 +1,143 @@
|
|
|
1
|
-
|
|
2
1
|
/* Handle the data/processing for the Hearst analytics and paywall configuration */
|
|
3
2
|
let projectConfig;
|
|
4
3
|
try {
|
|
5
|
-
|
|
6
|
-
} catch (err){
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
projectConfig = require("../../project-config.json");
|
|
5
|
+
} catch (err) {
|
|
6
|
+
try {
|
|
7
|
+
projectConfig = require("../../project.json");
|
|
8
|
+
} catch (err) {
|
|
9
|
+
// It's ok
|
|
10
|
+
}
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
// Get settings off story_settings if it exists, otherwise fall back to projectConfig
|
|
15
|
-
let getSettings = function(){
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
14
|
+
let getSettings = function () {
|
|
15
|
+
if (!projectConfig) {
|
|
16
|
+
let settings = {
|
|
17
|
+
PROJECT: {
|
|
18
|
+
DATE: "January 1, 1900 9:00 AM",
|
|
19
|
+
MOD_DATE: "January 1, 1901 9:00 AM",
|
|
20
|
+
},
|
|
21
|
+
}; // Making this demo date SUPER wrong so we can catch it
|
|
22
|
+
return settings;
|
|
23
|
+
}
|
|
24
|
+
let projectSettings = projectConfig.PROJECT;
|
|
25
|
+
let settings = projectConfig;
|
|
26
|
+
// This needs to be set even if the "try" below fails
|
|
27
|
+
settings.PROJECT["ANALYTICS_CREDIT"] = "";
|
|
28
|
+
settings.PROJECT["KEY_SUBJECTS"] = "";
|
|
29
|
+
// Populate with storySettings if they exist
|
|
30
|
+
let storySettings;
|
|
31
|
+
let fullAuthors = [];
|
|
32
|
+
try {
|
|
30
33
|
try {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
34
|
+
[storySettings] = require("../../src/data/story_settings.sheet.json");
|
|
35
|
+
// Uncomment line below and comment out line above if testing from example folder in utils
|
|
36
|
+
// [storySettings] = require("./example/src/data/story_settings.sheet.json")
|
|
37
|
+
|
|
38
|
+
// If we got story_settings, try structuring the AUTHORS object
|
|
39
|
+
let authorNames = [];
|
|
40
|
+
let authorLinks = [];
|
|
41
|
+
try {
|
|
42
|
+
if (storySettings.Byline) {
|
|
43
|
+
authorNames = storySettings.Byline.split(",");
|
|
44
|
+
}
|
|
45
|
+
if (storySettings.Byline_Link) {
|
|
46
|
+
authorLinks = storySettings.Byline_Link.split(",");
|
|
47
|
+
}
|
|
48
|
+
for (let i in authorNames) {
|
|
49
|
+
fullAuthors.push({
|
|
50
|
+
AUTHOR_NAME: authorNames[i],
|
|
51
|
+
AUTHOR_PAGE: authorLinks[i] || "",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
} catch (err) {
|
|
55
|
+
// It's ok, we'll fall back
|
|
56
|
+
}
|
|
57
|
+
} catch (err) {
|
|
58
|
+
try {
|
|
59
|
+
// May be an Archie doc, try grabbing from there
|
|
60
|
+
storySettings = require("../../data/project_data.json").story_settings;
|
|
61
|
+
} catch (err) {
|
|
62
|
+
// hacking this to bypass??
|
|
63
|
+
// Evan: This hack has my approval
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Empty array is triggering truthy test, so let's nullify
|
|
67
|
+
if (fullAuthors.length === 0) {
|
|
68
|
+
fullAuthors = null;
|
|
63
69
|
}
|
|
64
|
-
// Empty array is triggering truthy test, so let's nullify
|
|
65
|
-
if (fullAuthors.length === 0){
|
|
66
|
-
fullAuthors = null
|
|
67
|
-
}
|
|
68
70
|
// Populate with sheet settings
|
|
69
71
|
settings = {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
72
|
+
PAYWALL_SETTING: storySettings.Paywall,
|
|
73
|
+
EMBEDDED: projectConfig.EMBEDDED,
|
|
74
|
+
GOOGLE_SHEETS: projectConfig.GOOGLE_SHEETS,
|
|
75
|
+
GOOGLE_DOCS: projectConfig.GOOGLE_DOCS,
|
|
76
|
+
MAIN_DOMAIN: projectConfig.MAIN_DOMAIN,
|
|
77
|
+
PROJECT: {
|
|
78
|
+
SUBFOLDER: storySettings.Year,
|
|
79
|
+
SLUG: storySettings.Slug,
|
|
80
|
+
TITLE: storySettings.SEO_Title,
|
|
81
|
+
DISPLAY_TITLE: storySettings.Title,
|
|
82
|
+
SOCIAL_TITLE: storySettings.Social_Title,
|
|
83
|
+
DECK: storySettings.Deck,
|
|
84
|
+
URL: "https://projects.sfchronicle.com",
|
|
85
|
+
IMAGE:
|
|
86
|
+
"https://s.hdnux.com/photos/0/0/0/0/" +
|
|
87
|
+
storySettings.Social_ImageID +
|
|
88
|
+
"/1/rawImage.jpg",
|
|
89
|
+
DESCRIPTION: storySettings.SEO_Description,
|
|
90
|
+
TWITTER_TEXT: storySettings.Twitter_Text,
|
|
91
|
+
DATE: storySettings.Publish_Date,
|
|
92
|
+
MOD_DATE: storySettings.Mod_Date || storySettings.LastModDate_C2P,
|
|
93
|
+
AUTHORS: fullAuthors || projectSettings.AUTHORS,
|
|
94
|
+
ANALYTICS_CREDIT: storySettings.Analytics_Credit,
|
|
95
|
+
HEARST_CATEGORY:
|
|
96
|
+
storySettings.Category || storySettings.Analytics_Section || "News",
|
|
97
|
+
KEY_SUBJECTS: storySettings.Key_Subjects || "",
|
|
98
|
+
MARKET_KEY: storySettings.Market_Key,
|
|
99
|
+
// Surveys have slightly different naming, so catch that below for backwards compat
|
|
100
|
+
NEWSLETTER_ID:
|
|
101
|
+
storySettings.NewsletterID ||
|
|
102
|
+
storySettings.Custom_Sailthru_ID ||
|
|
103
|
+
projectSettings.NEWSLETTER_ID,
|
|
104
|
+
NEWSLETTER_PROMO:
|
|
105
|
+
storySettings.NewsletterPromo ||
|
|
106
|
+
storySettings.Custom_Signup_Text ||
|
|
107
|
+
projectSettings.NEWSLETTER_PROMO,
|
|
108
|
+
NEWSLETTER_LEGAL:
|
|
109
|
+
storySettings.NewsletterLegal ||
|
|
110
|
+
storySettings.TOS_Text ||
|
|
111
|
+
projectSettings.NEWSLETTER_LEGAL,
|
|
112
|
+
// Newer things
|
|
113
|
+
RELATED_LINKS_HED: storySettings.Related_Links_Hed,
|
|
114
|
+
SECTION:
|
|
115
|
+
storySettings.Section ||
|
|
116
|
+
storySettings.Category ||
|
|
117
|
+
storySettings.Analytics_Section,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
} catch (err) {
|
|
121
|
+
// It's ok, we'll use project data
|
|
122
|
+
}
|
|
105
123
|
|
|
106
|
-
|
|
124
|
+
// Check if we need a slash
|
|
107
125
|
let slash = "";
|
|
108
|
-
if (settings.PROJECT.SUBFOLDER){
|
|
109
|
-
|
|
126
|
+
if (settings.PROJECT.SUBFOLDER) {
|
|
127
|
+
slash = "/";
|
|
110
128
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
129
|
+
settings.PROJECT["OPT_SLASH"] = slash;
|
|
130
|
+
// Set the canonical (either from the sheet override or constructed)
|
|
131
|
+
settings.PROJECT["CANONICAL_URL"] =
|
|
132
|
+
projectConfig.MAIN_DOMAIN +
|
|
133
|
+
"/" +
|
|
134
|
+
settings.PROJECT.SUBFOLDER +
|
|
135
|
+
slash +
|
|
136
|
+
settings.PROJECT.SLUG;
|
|
137
|
+
if (typeof storySettings !== "undefined" && storySettings.Canonical_URL) {
|
|
138
|
+
settings.PROJECT["CANONICAL_URL"] = storySettings.Canonical_URL;
|
|
139
|
+
}
|
|
140
|
+
return settings;
|
|
141
|
+
};
|
|
119
142
|
|
|
120
|
-
module.exports = { getSettings }
|
|
143
|
+
module.exports = { getSettings };
|