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 }