github.com/gohugoio/hugo@v0.88.1/hugolib/page__common.go (about)

     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 hugolib
    15  
    16  import (
    17  	"sync"
    18  
    19  	"github.com/bep/gitmap"
    20  	"github.com/gohugoio/hugo/common/maps"
    21  	"github.com/gohugoio/hugo/compare"
    22  	"github.com/gohugoio/hugo/lazy"
    23  	"github.com/gohugoio/hugo/navigation"
    24  	"github.com/gohugoio/hugo/output"
    25  	"github.com/gohugoio/hugo/resources/page"
    26  	"github.com/gohugoio/hugo/resources/resource"
    27  )
    28  
    29  type treeRefProvider interface {
    30  	getTreeRef() *contentTreeRef
    31  }
    32  
    33  func (p *pageCommon) getTreeRef() *contentTreeRef {
    34  	return p.treeRef
    35  }
    36  
    37  type nextPrevProvider interface {
    38  	getNextPrev() *nextPrev
    39  }
    40  
    41  func (p *pageCommon) getNextPrev() *nextPrev {
    42  	return p.posNextPrev
    43  }
    44  
    45  type nextPrevInSectionProvider interface {
    46  	getNextPrevInSection() *nextPrev
    47  }
    48  
    49  func (p *pageCommon) getNextPrevInSection() *nextPrev {
    50  	return p.posNextPrevSection
    51  }
    52  
    53  type pageCommon struct {
    54  	s *Site
    55  	m *pageMeta
    56  
    57  	bucket  *pagesMapBucket
    58  	treeRef *contentTreeRef
    59  
    60  	// Lazily initialized dependencies.
    61  	init *lazy.Init
    62  
    63  	// All of these represents the common parts of a page.Page
    64  	maps.Scratcher
    65  	navigation.PageMenusProvider
    66  	page.AuthorProvider
    67  	page.PageRenderProvider
    68  	page.AlternativeOutputFormatsProvider
    69  	page.ChildCareProvider
    70  	page.FileProvider
    71  	page.GetPageProvider
    72  	page.GitInfoProvider
    73  	page.InSectionPositioner
    74  	page.OutputFormatsProvider
    75  	page.PageMetaProvider
    76  	page.Positioner
    77  	page.RawContentProvider
    78  	page.RelatedKeywordsProvider
    79  	page.RefProvider
    80  	page.ShortcodeInfoProvider
    81  	page.SitesProvider
    82  	page.DeprecatedWarningPageMethods
    83  	page.TranslationsProvider
    84  	page.TreeProvider
    85  	resource.LanguageProvider
    86  	resource.ResourceDataProvider
    87  	resource.ResourceMetaProvider
    88  	resource.ResourceParamsProvider
    89  	resource.ResourceTypeProvider
    90  	resource.MediaTypeProvider
    91  	resource.TranslationKeyProvider
    92  	compare.Eqer
    93  
    94  	// Describes how paths and URLs for this page and its descendants
    95  	// should look like.
    96  	targetPathDescriptor page.TargetPathDescriptor
    97  
    98  	layoutDescriptor     output.LayoutDescriptor
    99  	layoutDescriptorInit sync.Once
   100  
   101  	// The parsed page content.
   102  	pageContent
   103  
   104  	// Set if feature enabled and this is in a Git repo.
   105  	gitInfo *gitmap.GitInfo
   106  
   107  	// Positional navigation
   108  	posNextPrev        *nextPrev
   109  	posNextPrevSection *nextPrev
   110  
   111  	// Menus
   112  	pageMenus *pageMenus
   113  
   114  	// Internal use
   115  	page.InternalDependencies
   116  
   117  	// The children. Regular pages will have none.
   118  	*pagePages
   119  
   120  	// Any bundled resources
   121  	resources            resource.Resources
   122  	resourcesInit        sync.Once
   123  	resourcesPublishInit sync.Once
   124  
   125  	translations    page.Pages
   126  	allTranslations page.Pages
   127  
   128  	// Calculated an cached translation mapping key
   129  	translationKey     string
   130  	translationKeyInit sync.Once
   131  
   132  	// Will only be set for bundled pages.
   133  	parent *pageState
   134  
   135  	// Set in fast render mode to force render a given page.
   136  	forceRender bool
   137  }
   138  
   139  type pagePages struct {
   140  	pagesInit sync.Once
   141  	pages     page.Pages
   142  
   143  	regularPagesInit          sync.Once
   144  	regularPages              page.Pages
   145  	regularPagesRecursiveInit sync.Once
   146  	regularPagesRecursive     page.Pages
   147  }