hugo

Fork of github.com/gohugoio/hugo with reverse pagination support

git clone git://git.shimmy1996.com/hugo.git

site.go (3413B)

    1 // Copyright 2019 The Hugo Authors. All rights reserved.
    2 //
    3 // Licensed under the Apache License, Version 2.0 (the "License");
    4 // you may not use this file except in compliance with the License.
    5 // You may obtain a copy of the License at
    6 // http://www.apache.org/licenses/LICENSE-2.0
    7 //
    8 // Unless required by applicable law or agreed to in writing, software
    9 // distributed under the License is distributed on an "AS IS" BASIS,
   10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   11 // See the License for the specific language governing permissions and
   12 // limitations under the License.
   13 
   14 package page
   15 
   16 import (
   17 	"html/template"
   18 	"time"
   19 
   20 	"github.com/gohugoio/hugo/common/maps"
   21 
   22 	"github.com/gohugoio/hugo/config"
   23 
   24 	"github.com/gohugoio/hugo/common/hugo"
   25 	"github.com/gohugoio/hugo/langs"
   26 	"github.com/gohugoio/hugo/navigation"
   27 )
   28 
   29 // Site represents a site in the build. This is currently a very narrow interface,
   30 // but the actual implementation will be richer, see hugolib.SiteInfo.
   31 type Site interface {
   32 	// Returns the Language configured for this Site.
   33 	Language() *langs.Language
   34 
   35 	// Returns all the regular Pages in this Site.
   36 	RegularPages() Pages
   37 
   38 	// Returns all Pages in this Site.
   39 	Pages() Pages
   40 
   41 	// A shortcut to the home page.
   42 	Home() Page
   43 
   44 	// Returns true if we're running in a server.
   45 	IsServer() bool
   46 
   47 	// Returns the server port.
   48 	ServerPort() int
   49 
   50 	// Returns the configured title for this Site.
   51 	Title() string
   52 
   53 	// Returns all Sites for all languages.
   54 	Sites() Sites
   55 
   56 	// Returns Site currently rendering.
   57 	Current() Site
   58 
   59 	// Returns a struct with some information about the build.
   60 	Hugo() hugo.Info
   61 
   62 	// Returns the BaseURL for this Site.
   63 	BaseURL() template.URL
   64 
   65 	// Retuns a taxonomy map.
   66 	Taxonomies() any
   67 
   68 	// Returns the last modification date of the content.
   69 	LastChange() time.Time
   70 
   71 	// Returns the Menus for this site.
   72 	Menus() navigation.Menus
   73 
   74 	// Returns the Params configured for this site.
   75 	Params() maps.Params
   76 
   77 	// Returns a map of all the data inside /data.
   78 	Data() map[string]any
   79 }
   80 
   81 // Sites represents an ordered list of sites (languages).
   82 type Sites []Site
   83 
   84 // First is a convenience method to get the first Site, i.e. the main language.
   85 func (s Sites) First() Site {
   86 	if len(s) == 0 {
   87 		return nil
   88 	}
   89 	return s[0]
   90 }
   91 
   92 type testSite struct {
   93 	h hugo.Info
   94 	l *langs.Language
   95 }
   96 
   97 func (t testSite) Hugo() hugo.Info {
   98 	return t.h
   99 }
  100 
  101 func (t testSite) ServerPort() int {
  102 	return 1313
  103 }
  104 
  105 func (testSite) LastChange() (t time.Time) {
  106 	return
  107 }
  108 
  109 func (t testSite) Title() string {
  110 	return "foo"
  111 }
  112 
  113 func (t testSite) Sites() Sites {
  114 	return nil
  115 }
  116 
  117 func (t testSite) Current() Site {
  118 	return t
  119 }
  120 
  121 func (t testSite) IsServer() bool {
  122 	return false
  123 }
  124 
  125 func (t testSite) Language() *langs.Language {
  126 	return t.l
  127 }
  128 
  129 func (t testSite) Home() Page {
  130 	return nil
  131 }
  132 
  133 func (t testSite) Pages() Pages {
  134 	return nil
  135 }
  136 
  137 func (t testSite) RegularPages() Pages {
  138 	return nil
  139 }
  140 
  141 func (t testSite) Menus() navigation.Menus {
  142 	return nil
  143 }
  144 
  145 func (t testSite) Taxonomies() any {
  146 	return nil
  147 }
  148 
  149 func (t testSite) BaseURL() template.URL {
  150 	return ""
  151 }
  152 
  153 func (t testSite) Params() maps.Params {
  154 	return nil
  155 }
  156 
  157 func (t testSite) Data() map[string]any {
  158 	return nil
  159 }
  160 
  161 // NewDummyHugoSite creates a new minimal test site.
  162 func NewDummyHugoSite(cfg config.Provider) Site {
  163 	return testSite{
  164 		h: hugo.NewInfo(hugo.EnvironmentProduction, nil),
  165 		l: langs.NewLanguage("en", cfg),
  166 	}
  167 }