129 lines
4.1 KiB
FSharp
129 lines
4.1 KiB
FSharp
/// <summary>View rendering context for myWebLog</summary>
|
|
[<AutoOpen>]
|
|
module MyWebLog.ViewContext
|
|
|
|
open Microsoft.AspNetCore.Antiforgery
|
|
open MyWebLog.ViewModels
|
|
|
|
/// <summary>The rendering context for this application</summary>
|
|
[<NoComparison; NoEquality>]
|
|
type AppViewContext = {
|
|
/// <summary>The web log for this request</summary>
|
|
WebLog: WebLog
|
|
|
|
/// <summary>The ID of the current user</summary>
|
|
UserId: WebLogUserId option
|
|
|
|
/// <summary>The title of the page being rendered</summary>
|
|
PageTitle: string
|
|
|
|
/// <summary>The subtitle for the page</summary>
|
|
Subtitle: string option
|
|
|
|
/// <summary>The anti-Cross Site Request Forgery (CSRF) token set to use when rendering a form</summary>
|
|
Csrf: AntiforgeryTokenSet option
|
|
|
|
/// <summary>The page list for the web log</summary>
|
|
PageList: DisplayPage array
|
|
|
|
/// <summary>Categories and post counts for the web log</summary>
|
|
Categories: DisplayCategory array
|
|
|
|
/// <summary>Tag mappings</summary>
|
|
TagMappings: TagMap array
|
|
|
|
/// <summary>The URL of the page being rendered</summary>
|
|
CurrentPage: string
|
|
|
|
/// <summary>User messages</summary>
|
|
Messages: UserMessage array
|
|
|
|
/// <summary>The generator string for the rendered page</summary>
|
|
Generator: string
|
|
|
|
/// <summary>The payload for this page (see other properties that wrap this one)</summary>
|
|
Payload: obj
|
|
|
|
/// <summary>The content of a page (wrapped when rendering the layout)</summary>
|
|
Content: string
|
|
|
|
/// <summary>Whether the current user is an author</summary>
|
|
IsAuthor: bool
|
|
|
|
/// <summary>Whether the current user is an editor (implies author)</summary>
|
|
IsEditor: bool
|
|
|
|
/// <summary>Whether the current user is a web log administrator (implies author and editor)</summary>
|
|
IsWebLogAdmin: bool
|
|
|
|
/// <summary>Whether the current user is an installation administrator (implies all web log rights)</summary>
|
|
IsAdministrator: bool
|
|
|
|
/// <summary>Whether the current page is the home page of the web log</summary>
|
|
IsHome: bool
|
|
|
|
/// <summary>Whether the current page is a category archive page</summary>
|
|
IsCategory: bool
|
|
|
|
/// <summary>Whether the current page is a category archive home page</summary>
|
|
IsCategoryHome: bool
|
|
|
|
/// <summary>Whether the current page is a tag archive page</summary>
|
|
IsTag: bool
|
|
|
|
/// <summary>Whether the current page is a tag archive home page</summary>
|
|
IsTagHome: bool
|
|
|
|
/// <summary>Whether the current page is a single post</summary>
|
|
IsPost: bool
|
|
|
|
/// <summary>Whether the current page is a static page</summary>
|
|
IsPage: bool
|
|
|
|
/// <summary>The slug for a category or tag</summary>
|
|
Slug: string option
|
|
} with
|
|
|
|
/// <summary>Whether there is a user logged on</summary>
|
|
member this.IsLoggedOn = Option.isSome this.UserId
|
|
|
|
/// <summary>The payload for this page as a <c>DisplayPage</c></summary>
|
|
member this.Page =
|
|
this.Payload :?> DisplayPage
|
|
|
|
/// <summary>The payload for this page as a <c>PostDisplay</c></summary>
|
|
member this.Posts =
|
|
this.Payload :?> PostDisplay
|
|
|
|
/// <summary>The model for this view (prior versions used <c>model</c> for the v3 <c>payload</c>)</summary>
|
|
member this.Model =
|
|
this.Payload
|
|
|
|
/// <summary>An empty view context</summary>
|
|
static member Empty =
|
|
{ WebLog = WebLog.Empty
|
|
UserId = None
|
|
PageTitle = ""
|
|
Subtitle = None
|
|
Csrf = None
|
|
PageList = [||]
|
|
Categories = [||]
|
|
TagMappings = [||]
|
|
CurrentPage = ""
|
|
Messages = [||]
|
|
Generator = ""
|
|
Payload = obj ()
|
|
Content = ""
|
|
IsAuthor = false
|
|
IsEditor = false
|
|
IsWebLogAdmin = false
|
|
IsAdministrator = false
|
|
IsHome = false
|
|
IsCategory = false
|
|
IsCategoryHome = false
|
|
IsTag = false
|
|
IsTagHome = false
|
|
IsPost = false
|
|
IsPage = false
|
|
Slug = None }
|