Set lang template globals for each site when render shortcodes
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 12 Aug 2016 16:17:00 +0000 (18:17 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 6 Sep 2016 15:32:21 +0000 (18:32 +0300)
We should get rid of these globals, but that is another month.

hugolib/hugo_sites.go
hugolib/hugo_sites_test.go
hugolib/site.go

index 9aafb953ade788cf2d22397e576ae7f878e87d0c..8fe27e506840f7913b3a27c1972084f503ea6166 100644 (file)
@@ -394,6 +394,9 @@ func (h *HugoSites) setupTranslations(master *Site) {
 func (h *HugoSites) preRender() error {
 
        for _, s := range h.Sites {
+               if err := s.setCurrentLanguageConfig(); err != nil {
+                       return err
+               }
                // Run "render prepare"
                if err := s.renderHomePage(true); err != nil {
                        return err
@@ -409,12 +412,19 @@ func (h *HugoSites) preRender() error {
                }
        }
 
-       pageChan := make(chan *Page)
+       for _, s := range h.Sites {
+               if err := s.setCurrentLanguageConfig(); err != nil {
+                       return err
+               }
+               renderShortcodesForSite(s)
+       }
 
-       wg := &sync.WaitGroup{}
+       return nil
+}
 
-       // We want all the pages, so just pick one.
-       s := h.Sites[0]
+func renderShortcodesForSite(s *Site) {
+       pageChan := make(chan *Page)
+       wg := &sync.WaitGroup{}
 
        for i := 0; i < getGoMaxProcs()*4; i++ {
                wg.Add(1)
@@ -456,7 +466,7 @@ func (h *HugoSites) preRender() error {
                }(pageChan, wg)
        }
 
-       for _, p := range s.AllPages {
+       for _, p := range s.Pages {
                pageChan <- p
        }
 
@@ -464,7 +474,6 @@ func (h *HugoSites) preRender() error {
 
        wg.Wait()
 
-       return nil
 }
 
 // Pages returns all pages for all sites.
index 1529940205af0c8be16cb5938419266787253829..bfbcd914ef298a5b5970a1b365c5f27829d5c493 100644 (file)
@@ -258,6 +258,10 @@ func doTestMultiSitesBuild(t *testing.T, configContent, configSuffix string) {
        assertFileContent(t, "public/en/index.html", true, "Home Page 1", "Hello", "Hugo Rocks!")
        assertFileContent(t, "public/fr/index.html", true, "Home Page 1", "Bonjour", "Hugo Rocks!")
 
+       // check single page content
+       assertFileContent(t, "public/fr/sect/doc1/index.html", true, "Single", "Shortcode: Bonjour")
+       assertFileContent(t, "public/en/sect/doc1-slug/index.html", true, "Single", "Shortcode: Hello")
+
        // Check node translations
        homeEn := enSite.getNode("home-0")
        require.NotNil(t, homeEn)
@@ -566,8 +570,6 @@ title = "Svenska"
        require.Len(t, svPage.Translations(), 2)
        require.Len(t, svPage.AllTranslations(), 3)
        require.Equal(t, "en", svPage.Translations()[0].Lang())
-       //noFile := readDestination(t, "/public/no/doc1/index.html")
-       //require.True(t, strings.Contains("foo", noFile), noFile)
 
 }
 
@@ -719,7 +721,7 @@ func createMultiTestSitesForConfig(t *testing.T, configContent, configSuffix str
        // Add some layouts
        if err := afero.WriteFile(hugofs.Source(),
                filepath.Join("layouts", "_default/single.html"),
-               []byte("Single: {{ .Title }}|{{ i18n \"hello\" }} {{ .Content }}"),
+               []byte("Single: {{ .Title }}|{{ i18n \"hello\" }}|{{.Lang}}|{{ .Content }}"),
                0755); err != nil {
                t.Fatalf("Failed to write layout file: %s", err)
        }
@@ -738,6 +740,14 @@ func createMultiTestSitesForConfig(t *testing.T, configContent, configSuffix str
                t.Fatalf("Failed to write layout file: %s", err)
        }
 
+       // Add a shortcode
+       if err := afero.WriteFile(hugofs.Source(),
+               filepath.Join("layouts", "shortcodes", "shortcode.html"),
+               []byte("Shortcode: {{ i18n \"hello\" }}"),
+               0755); err != nil {
+               t.Fatalf("Failed to write layout file: %s", err)
+       }
+
        // Add some language files
        if err := afero.WriteFile(hugofs.Source(),
                filepath.Join("i18n", "en.yaml"),
@@ -769,6 +779,9 @@ publishdate: "2000-01-01"
 ---
 # doc1
 *some "content"*
+
+{{< shortcode >}}
+
 NOTE: slug should be used as URL
 `)},
                {filepath.FromSlash("sect/doc1.fr.md"), []byte(`---
@@ -780,6 +793,9 @@ publishdate: "2000-01-04"
 ---
 # doc1
 *quelque "contenu"*
+
+{{< shortcode >}}
+
 NOTE: should be in the 'en' Page's 'Translations' field.
 NOTE: date is after "doc3"
 `)},
index dd020f75cb3b1d3b7ed8dc38398a0b03cdb523ec..9f435218cc35bd735ed437de3e31c4df185285db 100644 (file)
@@ -776,11 +776,15 @@ func (s *Site) setupPrevNext() {
        }
 }
 
-func (s *Site) render() (err error) {
+func (s *Site) setCurrentLanguageConfig() error {
        // There are sadly some global template funcs etc. that need the language information.
        viper.Set("Multilingual", s.multilingualEnabled())
        viper.Set("CurrentContentLanguage", s.Language)
-       if err = tpl.SetTranslateLang(s.Language.Lang); err != nil {
+       return tpl.SetTranslateLang(s.Language.Lang)
+}
+
+func (s *Site) render() (err error) {
+       if err = s.setCurrentLanguageConfig(); err != nil {
                return
        }