mod-build 3.6.21--beta.2 → 3.6.21--a11y.beta.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/gulp-tasks/build.js +1 -1
- package/gulp-tasks/grab-global-images.js +102 -0
- package/gulp-tasks/grab-shared-scripts.js +71 -11
- package/gulp-tasks/serve.js +8 -2
- package/gulp-tasks/tasks.js +12 -0
- package/gulp-tasks/templates.js +0 -12
- package/package.json +1 -1
package/gulp-tasks/build.js
CHANGED
|
@@ -10,7 +10,7 @@ module.exports = function(gulp, gulpPlugins, siteSettings, siteData) {
|
|
|
10
10
|
if (siteData.isQSPage) {
|
|
11
11
|
sequenceOpts = ['clean', 'grab-cdn', 'grab-shared-components', 'grab-shared-scripts', 'templates', 'styles', 'grab-theme-json', 'combine-files', 'grab-images', 'copy-json', 'js-lint', 'html-min', 'css-min', 'js-min', 'img-min', 'extras', 'brand', 'copy-files-to-build-path', 'cache-bust', 'grab-tooltips-json', 'build-stat'];
|
|
12
12
|
} else {
|
|
13
|
-
sequenceOpts = ['clean', 'grab-cdn', 'grab-shared-components', 'grab-shared-scripts', 'templates', 'styles', 'combine-files', 'grab-images', 'js-lint', 'html-min', 'css-min', 'js-min', 'img-min', 'extras', 'brand', 'cache-bust', 'grab-tooltips-json', 'build-stat'];
|
|
13
|
+
sequenceOpts = ['clean', 'grab-cdn', 'grab-shared-components', 'grab-shared-scripts', 'templates', 'styles', 'combine-files', 'grab-images', 'js-lint', 'html-min','grab-global-images', 'css-min', 'js-min', 'img-min', 'extras', 'brand', 'cache-bust', 'grab-tooltips-json', 'build-stat'];
|
|
14
14
|
}
|
|
15
15
|
} else {
|
|
16
16
|
sequenceOpts = ['clean', 'grab-cdn', 'grab-shared-components', 'grab-shared-scripts', 'templates', 'styles', 'js-lint', 'html-min', 'css-min', 'js-min', 'img-min', 'extras', 'brand', 'cache-bust', 'build-stat'];
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
var fs = require('fs');
|
|
2
|
+
var request = require('request');
|
|
3
|
+
var source = require('vinyl-source-stream');
|
|
4
|
+
var replace = require('gulp-replace');
|
|
5
|
+
|
|
6
|
+
var images = [];
|
|
7
|
+
|
|
8
|
+
function streamToDestination(gulp, siteSettings, url, fileName) {
|
|
9
|
+
var finalDestination;
|
|
10
|
+
|
|
11
|
+
if (!fs.existsSync(siteSettings.distFolder)) {
|
|
12
|
+
finalDestination = siteSettings.srcFolder;
|
|
13
|
+
} else {
|
|
14
|
+
finalDestination = siteSettings.distFolder;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return new Promise(resolve => { // eslint-disable-line no-undef
|
|
18
|
+
request(url)
|
|
19
|
+
.on('response', resp => {
|
|
20
|
+
if (resp.statusCode !== 200 && resp.statusCode !== 206) {
|
|
21
|
+
throw new Error(`${resp.statusCode} Error while fetching ${fileName}`);
|
|
22
|
+
} else {
|
|
23
|
+
images.push(fileName);
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
.pipe(source(fileName))
|
|
27
|
+
.pipe(gulp.dest(`${finalDestination}/resources/images/`))
|
|
28
|
+
.on('finish', resolve);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function replaceImagePath(gulp, siteSettings) {
|
|
33
|
+
var finalDestination;
|
|
34
|
+
|
|
35
|
+
if (!fs.existsSync(siteSettings.distFolder)) {
|
|
36
|
+
finalDestination = siteSettings.tmpFolder;
|
|
37
|
+
} else {
|
|
38
|
+
finalDestination = siteSettings.distFolder;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var stream = gulp.src(`${finalDestination}/index.html`);
|
|
42
|
+
|
|
43
|
+
if (images.length) {
|
|
44
|
+
images.forEach(function(image) {
|
|
45
|
+
stream = stream.pipe(replace(new RegExp(`"(?:(?!"|")[\\s\\S])+(${image})"`, 'gm'), '"/resources/images/' + image + '"'))
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return stream.pipe(gulp.dest(finalDestination))
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const getTags = (string) => {
|
|
52
|
+
const regExs = [/<img.*?src="(.*?)"[^\>]+>/g, /<use.*?href="(.*?)".*?>/g, /<source.*?srcset="(.*?)".*?>/g, /url\('#{\$path}.*?'\)/g];
|
|
53
|
+
let tags = [];
|
|
54
|
+
|
|
55
|
+
regExs.forEach((regEx) => {
|
|
56
|
+
const match = string.match(regEx);
|
|
57
|
+
|
|
58
|
+
if (match) {
|
|
59
|
+
tags = [...tags, ...match];
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return tags;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const getUrls = (tags) => {
|
|
67
|
+
const urls = [];
|
|
68
|
+
|
|
69
|
+
tags.forEach((tag) => {
|
|
70
|
+
if (tag) {
|
|
71
|
+
let url = tag;
|
|
72
|
+
url = url.match(/(https?:\/\/[^\s]+)/gim);
|
|
73
|
+
if (url) {
|
|
74
|
+
url = url[0];
|
|
75
|
+
url = url.replace(/"/g, "")
|
|
76
|
+
urls.push(url)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
return [...new Set(urls)]; // eslint-disable-line no-undef
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const parseImageSources = (gulp, siteSettings) => {
|
|
85
|
+
const text = fs.readFileSync(`${siteSettings.tmpFolder}/index.html`, 'utf8');
|
|
86
|
+
const textMatches = getTags(text);
|
|
87
|
+
return getUrls(textMatches);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
module.exports = function(gulp, siteSettings, siteData) {
|
|
91
|
+
return async function() {
|
|
92
|
+
const urls = parseImageSources(gulp, siteSettings);
|
|
93
|
+
const urlsPromises = urls.map(async(url) => {
|
|
94
|
+
const fileName = await url.slice(url.lastIndexOf('/') + 1);
|
|
95
|
+
return await streamToDestination(gulp, siteSettings, url, fileName);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
return await Promise.all(urlsPromises).then(function() { // eslint-disable-line no-undef
|
|
99
|
+
replaceImagePath(gulp, siteSettings)
|
|
100
|
+
})
|
|
101
|
+
};
|
|
102
|
+
};
|
|
@@ -28,13 +28,24 @@ function replaceFootAssetScripts(gulp, gulpPlugins, siteSettings, siteData) {
|
|
|
28
28
|
.pipe(replace(/"(?:(?!"|js")[\s\S])+(modutils|mod-utils.*?)js"/, resourcePath + '/mod-utils/' + fileNames.modUtilsFileName))
|
|
29
29
|
.pipe(replace(/"(?:(?!"|")[\s\S])+(footer\/footer-component.*?)js"/, resourcePath + '/footer/' + fileNames.footerComponentJsFileName))
|
|
30
30
|
.pipe(replace(/"(?:(?!"|")[\s\S])+(mod-form\/mod-form.*?)js"/, resourcePath + '/mod-form/' + fileNames.modFormFileName))
|
|
31
|
+
.pipe(replace(/"(?:(?!"|")[\s\S])+(mod-form\/form\/mod-form.*?)js"/, resourcePath + '/mod-form/form/' + fileNames.newModFormFileName))
|
|
31
32
|
.pipe(replace(/"(?:(?!"|")[\s\S])+(qs-form.*?)js"/, resourcePath + '/mod-form/' + fileNames.qsFormFileName))
|
|
32
33
|
.pipe(gulp.dest(siteSettings.srcFolder + '/shared-components/foot-assets'));
|
|
33
34
|
}
|
|
34
|
-
function
|
|
35
|
-
const resourcePath = isQuotePageOrUseRelativePath ? 'resources/scripts
|
|
35
|
+
function replaceAccessibleFootAssets(gulp, gulpPlugins, siteSettings, siteData) {
|
|
36
|
+
const resourcePath = isQuotePageOrUseRelativePath ? '{{#if this.nodeModulesPath}}{{this.nodeModulesPath}}{{/if}}"resources/scripts' : '"/resources/scripts';
|
|
37
|
+
return gulp.src(siteSettings.srcFolder + '/templates/components/v1/foot-assets.html')
|
|
38
|
+
.pipe(replace(/"(?:(?!"|js")[\s\S])+(modutils|mod-utils.*?)js"/, resourcePath + '/mod-utils/' + fileNames.modUtilsFileName + '"'))
|
|
39
|
+
.pipe(replace(/"(?:(?!"|")[\s\S])+(mod-form\/mod-form.*?)js"/, resourcePath + '/mod-form/accessible/' + fileNames.modFormAccessibleFileName + '"'))
|
|
40
|
+
.pipe(replace(/"(?:(?!"|")[\s\S])+(qs-form.*?)js"/, resourcePath + '/mod-form/accessible/' + fileNames.qsFormAccessibleFileName + '"'))
|
|
41
|
+
.pipe(gulp.dest(siteSettings.srcFolder + '/templates/components/v1'));
|
|
42
|
+
}
|
|
43
|
+
function replaceAbandonmentJsCssSrc(gulp, gulpPlugins, siteSettings, siteData) {
|
|
44
|
+
const jsResourcePath = isQuotePageOrUseRelativePath ? 'resources/scripts/abandonment/' : '/resources/scripts/abandonment/';
|
|
45
|
+
const cssResourcePath = isQuotePageOrUseRelativePath ? 'resources/styles/components/abandonment/' : '/resources/styles/components/abandonment/';
|
|
36
46
|
return gulp.src(siteSettings.srcFolder + '/templates/abandonment/*.html')
|
|
37
|
-
.pipe(replace(/"(?:(?!"|")[\s\S])+(abandonment\/abandonment.*?)js"/,
|
|
47
|
+
.pipe(replace(/"(?:(?!"|")[\s\S])+(abandonment\/abandonment.*?)js"/, jsResourcePath + fileNames.abandonmentJsFileName))
|
|
48
|
+
.pipe(replace(/"(?:(?!"|")[\s\S])+(components\/abandonment\/abandonment.*?)css"/, cssResourcePath + fileNames.abandonmentStylesFileName))
|
|
38
49
|
.pipe(gulp.dest(siteSettings.srcFolder + '/templates/abandonment'));
|
|
39
50
|
}
|
|
40
51
|
function replaceFooterStylesReference(gulp, gulpPlugins, siteSettings, siteData) {
|
|
@@ -50,6 +61,12 @@ function replaceFooterStylesReference(gulp, gulpPlugins, siteSettings, siteData)
|
|
|
50
61
|
.pipe(gulp.dest(siteSettings.srcFolder + '/resources/scripts/footer'))
|
|
51
62
|
}
|
|
52
63
|
}
|
|
64
|
+
function replaceAccessibleFooterStylesReference(gulp, gulpPlugins, siteSettings, siteData) {
|
|
65
|
+
return gulp.src(siteSettings.srcFolder + '/scripts/components/v1/footer-component.js')
|
|
66
|
+
.pipe(replace(/`(?:(?!`|`)[\s\S])+(components\/footer\/mod.*?)`/, '`/resources/styles/components/footer/' + fileNames.modFooterStylesFileName + '`'))
|
|
67
|
+
.pipe(replace(/`(?:(?!`|`)[\s\S])+(components\/footer\/qs.*?)`/, '`/resources/styles/components/footer/' + fileNames.qsFooterStylesFileName + '`'))
|
|
68
|
+
.pipe(gulp.dest(siteSettings.srcFolder + '/scripts/components/v1'))
|
|
69
|
+
}
|
|
53
70
|
function replaceFooterStylesReferenceInMap(gulp, gulpPlugins, siteSettings, siteData) {
|
|
54
71
|
if (siteData.siteData && siteData.siteData.useRelativePathForResources === true) {
|
|
55
72
|
return gulp.src(siteSettings.srcFolder + '/resources/scripts/footer/footer-component.min.js.map')
|
|
@@ -73,18 +90,21 @@ function getResource(url, config = {}, fn, fnArray) {
|
|
|
73
90
|
|
|
74
91
|
return new Promise(resolve => {
|
|
75
92
|
const file = getFileFromURL(url);
|
|
76
|
-
|
|
93
|
+
const doNotAddHash = ['mod-form-beta.min.js']
|
|
94
|
+
let stream = request(`${resourceURL}/${url}`)
|
|
77
95
|
.on('response', resp => {
|
|
78
96
|
if (resp.statusCode !== 200) {
|
|
79
97
|
throw new Error(`${resp.statusCode} Error while fetching ${file}`);
|
|
80
98
|
}
|
|
81
99
|
})
|
|
82
100
|
.pipe(source(`${file}`))
|
|
83
|
-
.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
101
|
+
if (!doNotAddHash.includes(file)) {
|
|
102
|
+
stream = stream.pipe(hash({
|
|
103
|
+
hashLength: 20,
|
|
104
|
+
template: file.replace(/^([^.]*)\.(.*)$/, '$1-<%= hash %>.$2')
|
|
105
|
+
}))
|
|
106
|
+
}
|
|
107
|
+
stream.pipe(tap(function(file, t) {
|
|
88
108
|
fileNames[config.fileName] = path.basename(file.path);
|
|
89
109
|
}))
|
|
90
110
|
.pipe(config.gulp.dest(`${config.siteSettings.srcFolder}/resources/${config.dest}`))
|
|
@@ -140,6 +160,16 @@ const TASKS = {
|
|
|
140
160
|
srcReplaceFn: null,
|
|
141
161
|
additionalSrcReplaceFns: []
|
|
142
162
|
},
|
|
163
|
+
copyAbandonmentComponentStyles: {
|
|
164
|
+
url: `shared-resources/styles/components/abandonment/abandonment.min.css`,
|
|
165
|
+
config: {
|
|
166
|
+
fileName: 'abandonmentStylesFileName',
|
|
167
|
+
dest: 'styles/components/abandonment',
|
|
168
|
+
mapUrl: null,
|
|
169
|
+
},
|
|
170
|
+
srcReplaceFn: null,
|
|
171
|
+
additionalSrcReplaceFns: []
|
|
172
|
+
},
|
|
143
173
|
copyAbandonmentJs: {
|
|
144
174
|
url: `shared-resources/scripts/abandonment/abandonment.min.js`,
|
|
145
175
|
config: {
|
|
@@ -147,7 +177,7 @@ const TASKS = {
|
|
|
147
177
|
dest: 'scripts/abandonment',
|
|
148
178
|
mapUrl: `shared-resources/scripts/abandonment/abandonment.min.js.map`,
|
|
149
179
|
},
|
|
150
|
-
srcReplaceFn:
|
|
180
|
+
srcReplaceFn: replaceAbandonmentJsCssSrc,
|
|
151
181
|
additionalSrcReplaceFns: []
|
|
152
182
|
},
|
|
153
183
|
copyFooterComponentJs: {
|
|
@@ -170,6 +200,16 @@ const TASKS = {
|
|
|
170
200
|
srcReplaceFn: null,
|
|
171
201
|
additionalSrcReplaceFns: []
|
|
172
202
|
},
|
|
203
|
+
copyNewModForm: {
|
|
204
|
+
url: `mod-form/form/mod-form-beta.min.js`,
|
|
205
|
+
mapUrl: `mod-form/form/mod-form-beta.min.js.map`,
|
|
206
|
+
config: {
|
|
207
|
+
fileName: 'newModFormFileName',
|
|
208
|
+
dest: 'scripts/mod-form/form'
|
|
209
|
+
},
|
|
210
|
+
srcReplaceFn: null,
|
|
211
|
+
additionalSrcReplaceFns: []
|
|
212
|
+
},
|
|
173
213
|
copyQsForm: {
|
|
174
214
|
url: `mod-form/qs-form.min.js`,
|
|
175
215
|
config: {
|
|
@@ -180,6 +220,26 @@ const TASKS = {
|
|
|
180
220
|
srcReplaceFn: replaceFootAssetScripts,
|
|
181
221
|
additionalSrcReplaceFns: []
|
|
182
222
|
},
|
|
223
|
+
copyAccessibleModForm: {
|
|
224
|
+
url: `mod-form/accessible/mod-form.min.js`,
|
|
225
|
+
config: {
|
|
226
|
+
fileName: 'modFormAccessibleFileName',
|
|
227
|
+
dest: 'scripts/mod-form/accessible',
|
|
228
|
+
mapUrl: `mod-form/accessible/mod-form.min.js.map`,
|
|
229
|
+
},
|
|
230
|
+
srcReplaceFn: null,
|
|
231
|
+
additionalSrcReplaceFns: []
|
|
232
|
+
},
|
|
233
|
+
copyAccessibleQsForm: {
|
|
234
|
+
url: `mod-form/accessible/qs-form.min.js`,
|
|
235
|
+
config: {
|
|
236
|
+
fileName: 'qsFormAccessibleFileName',
|
|
237
|
+
dest: 'scripts/mod-form/accessible',
|
|
238
|
+
mapUrl: `mod-form/accessible/qs-form.min.js.map`,
|
|
239
|
+
},
|
|
240
|
+
srcReplaceFn: replaceAccessibleFootAssets,
|
|
241
|
+
additionalSrcReplaceFns: []
|
|
242
|
+
},
|
|
183
243
|
copyModFooterComponentStyles: {
|
|
184
244
|
url: `shared-resources/styles/components/footer/mod-footer.min.css`,
|
|
185
245
|
config: {
|
|
@@ -198,7 +258,7 @@ const TASKS = {
|
|
|
198
258
|
mapUrl: null,
|
|
199
259
|
},
|
|
200
260
|
srcReplaceFn: null,
|
|
201
|
-
additionalSrcReplaceFns: [replaceFooterStylesReference, replaceFooterStylesReferenceInMap]
|
|
261
|
+
additionalSrcReplaceFns: [replaceAccessibleFooterStylesReference, replaceFooterStylesReference, replaceFooterStylesReferenceInMap]
|
|
202
262
|
}
|
|
203
263
|
};
|
|
204
264
|
module.exports = function(gulp, gulpPlugins, siteSettings, siteData) {
|
package/gulp-tasks/serve.js
CHANGED
|
@@ -8,7 +8,7 @@ module.exports.src = function(gulp, gulpPlugins, siteSettings, siteData) {
|
|
|
8
8
|
} else if (siteData.isQSPage) {
|
|
9
9
|
sequenceOpts = ['clean', 'grab-cdn', 'grab-shared-components', 'grab-shared-scripts', 'templates', 'styles', 'grab-theme-json', 'grab-tooltips-json', 'combine-files', 'grab-images', 'js-lint'];
|
|
10
10
|
} else {
|
|
11
|
-
sequenceOpts = ['clean', 'grab-cdn', 'grab-shared-components', 'grab-shared-scripts', 'templates', 'styles', 'grab-tooltips-json', 'combine-files', 'grab-images', 'js-lint'];
|
|
11
|
+
sequenceOpts = ['clean', 'grab-cdn', 'grab-shared-components', 'grab-shared-scripts', 'templates', 'styles', 'grab-tooltips-json', 'combine-files', 'grab-images','grab-global-images', 'js-lint'];
|
|
12
12
|
}
|
|
13
13
|
runSequence(...sequenceOpts, () => {
|
|
14
14
|
// Run a BrowserSync server
|
|
@@ -36,7 +36,13 @@ module.exports.src = function(gulp, gulpPlugins, siteSettings, siteData) {
|
|
|
36
36
|
]).on('change', gulpPlugins.browserSync.reload);
|
|
37
37
|
|
|
38
38
|
// If templates changed, rerun templates task
|
|
39
|
-
|
|
39
|
+
if (!siteData.useTypescript && !siteData.isQSPage) {
|
|
40
|
+
gulp.watch(siteSettings.srcFolder + '/' + siteSettings.templatesSubfolder + '/**/*.html', function() {
|
|
41
|
+
runSequence('templates','grab-global-images')
|
|
42
|
+
});
|
|
43
|
+
} else {
|
|
44
|
+
gulp.watch(siteSettings.srcFolder + '/' + siteSettings.templatesSubfolder + '/**/*.html', ['templates'])
|
|
45
|
+
}
|
|
40
46
|
|
|
41
47
|
// If styles changed, rerun styles task
|
|
42
48
|
gulp.watch(siteSettings.srcFolder + '/' + siteSettings.stylesSubfolder + '/**/*.scss', ['styles']);
|
package/gulp-tasks/tasks.js
CHANGED
|
@@ -346,6 +346,18 @@ module.exports = function() {
|
|
|
346
346
|
|
|
347
347
|
return require(opts.gulpTasksFolderPath + '/grab-images')(opts.gulp, opts.gulpSettings, opts.siteData);
|
|
348
348
|
}
|
|
349
|
+
},
|
|
350
|
+
|
|
351
|
+
// Get global images
|
|
352
|
+
'grab-global-images': {
|
|
353
|
+
subtasks: [],
|
|
354
|
+
func: function(opts) {
|
|
355
|
+
if ('undefined' === typeof opts.gulpTasksFolderPath) {
|
|
356
|
+
opts.gulpTasksFolderPath = '.';
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return require(opts.gulpTasksFolderPath + '/grab-global-images')(opts.gulp, opts.gulpSettings, opts.siteData);
|
|
360
|
+
}
|
|
349
361
|
},
|
|
350
362
|
|
|
351
363
|
// Copy json files to dist
|
package/gulp-tasks/templates.js
CHANGED
|
@@ -137,18 +137,6 @@ module.exports = function(gulp, gulpPlugins, siteSettings, siteData) {
|
|
|
137
137
|
index++;
|
|
138
138
|
return index;
|
|
139
139
|
}
|
|
140
|
-
},
|
|
141
|
-
// Ignore certain keys when using {{#each}} to loop through key:value pairs
|
|
142
|
-
{
|
|
143
|
-
name: 'ignoreKeys',
|
|
144
|
-
fn: function(keysToIgnore, key, options) {
|
|
145
|
-
var ignoreKeys = keysToIgnore.split(',');
|
|
146
|
-
if (ignoreKeys.indexOf(key) === -1) {
|
|
147
|
-
return options.fn(this);
|
|
148
|
-
} else {
|
|
149
|
-
return options.inverse(this);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
140
|
}
|
|
153
141
|
];
|
|
154
142
|
|