private LayoutContentObject GetLayout(string layoutName, string layoutType, ContentType contentType) { LayoutContentObject layoutObject; layoutType ??= LayoutTypes.Single; var layoutKey = new LayoutKey(layoutName, layoutType, contentType); if (_layouts.TryGetValue(layoutKey, out layoutObject)) { return(layoutObject); } var layoutDelegate = FindLayoutPaths(layoutType); if (layoutDelegate != null) { // Get all possible extensions for the specific content type var extensions = Site.ContentTypes.GetExtensionsByContentType(contentType); var layoutRoot = UPath.Root / LayoutFolderName; foreach (var layoutPath in layoutDelegate(Site, layoutName, layoutType)) { foreach (var extension in extensions) { var fullLayoutPath = layoutRoot / layoutPath.FullName + extension; var entry = new FileEntry(Site.MetaFileSystem, fullLayoutPath); if (entry.Exists) { var scriptLayoutText = entry.ReadAllText(); var scriptInstance = Site.Scripts.ParseScript(scriptLayoutText, fullLayoutPath, ScriptMode.FrontMatterAndContent); if (scriptInstance.HasErrors) { goto exit; } layoutObject = new LayoutContentObject(Site, entry, scriptInstance); // We run first the front matter on the layout if (layoutObject.FrontMatter != null && !Site.Scripts.TryRunFrontMatter(layoutObject.FrontMatter, layoutObject)) { goto exit; } _layouts.Add(layoutKey, layoutObject); return(layoutObject); } } } } exit: return(null); }
private ScriptInstance GetLayout(string layoutName, string layoutType, ContentType contentType) { ScriptInstance scriptResult; layoutType ??= LayoutTypes.Single; var layoutKey = new LayoutKey(layoutName, layoutType, contentType); if (_layouts.TryGetValue(layoutKey, out scriptResult)) { return(scriptResult); } var layoutDelegate = FindLayoutPaths(layoutType); if (layoutDelegate != null) { // Get all possible extensions for the specific content type var extensions = Site.ContentTypes.GetExtensionsByContentType(contentType); var layoutRoot = UPath.Root / LayoutFolderName; foreach (var layoutPath in layoutDelegate(Site, layoutName, layoutType)) { foreach (var extension in extensions) { var fullLayoutPath = layoutRoot / layoutPath.FullName + extension; var entry = new FileEntry(Site.MetaFileSystem, fullLayoutPath); if (entry.Exists) { var scriptLayoutText = entry.ReadAllText(); scriptResult = Site.Scripts.ParseScript(scriptLayoutText, fullLayoutPath, ScriptMode.FrontMatterAndContent); _layouts.Add(layoutKey, scriptResult); return(scriptResult); } } } } return(null); }