15
15
*/
16
16
17
17
const { html} = require ( 'common-tags' ) ;
18
+
19
+ const { defaultLanguage} = require ( '../../../lib/utils/language' ) ;
18
20
const { findByUrl} = require ( '../../_filters/find-by-url' ) ;
19
21
const md = require ( '../../_filters/md' ) ;
20
22
23
+ /**
24
+ * Find matching collection items given a language code.
25
+ *
26
+ * @param {string[] } slugs
27
+ * @param {string } lang
28
+ * @returns {EleventyCollectionItem[] }
29
+ */
30
+ function filterCodelabsByLang ( slugs , lang ) {
31
+ return slugs
32
+ . map ( ( slug ) => findByUrl ( `/${ lang } /${ slug } /` ) )
33
+ . filter ( ( item ) => item ) ; // filter out any undefined entries
34
+ }
35
+
21
36
/**
22
37
* Generates codelab links HTML.
23
38
*
@@ -29,12 +44,15 @@ function CodelabsCallout(slugs, lang) {
29
44
// Coerce slugs to Array just in case someone pasted in a single slug string.
30
45
slugs = slugs instanceof Array ? slugs : [ slugs ] ;
31
46
32
- const codelabs = slugs
33
- . map ( ( slug ) => findByUrl ( `/${ lang } /${ slug } /` ) )
34
- . filter ( ( item ) => item ) ; // filter out any undefined entries
35
-
36
- if ( ! codelabs . length ) {
37
- return ;
47
+ let codelabs = filterCodelabsByLang ( slugs , lang ) ;
48
+ // If there's no language-specific codelab, returning the default (English)
49
+ // language one is preferable.
50
+ if ( codelabs . length === 0 ) {
51
+ codelabs = filterCodelabsByLang ( slugs , defaultLanguage ) ;
52
+ }
53
+ // If there's still no codelabs found, return an empty string (not undefined).
54
+ if ( codelabs . length === 0 ) {
55
+ return '' ;
38
56
}
39
57
40
58
return `
0 commit comments