CommonProps:
  type: object
  properties:
    loggedIn:
      type: boolean
      description: True if user is logged in, false otherwise
    loggedInUser:
      type: object
      description: The logged in user object
    relative_path:
      type: string
      description: |
        If NodeBB is installed in a subfolder this becomes the path to the forum. For example if your forum url is
        `example.org/community` then relative_path will be `/community`. If your forum url is `example.com` then relative path will be an empty string.
    template:
      type: object
      properties:
        name:
          type: string
          description: The path to the template, which acts as a unique name
          example: admin/settings/general
      additionalProperties:
        description: There will be one additional property added to all routes here. It is a boolean value whose key is the path to the current template. It is used on the client-side to verify the current page inside of a conditional (e.g. `if (ajaxify.data.template.topic)` to ensure a script is run only on the topic page)
        type: boolean
        enum: [true]
    url:
      type: string
      description: Base url of the current page, does not include query params
    bodyClass:
      type: string
      description: The css class string that is appended to the body element
    _header:
      type: object
      description: List of meta and link tags that are added to the head element
      properties:
        tags:
          type: object
          properties:
            meta:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  content:
                    type: string
                  noEscape:
                    type: boolean
                  property:
                    type: string
                required:
                  - content
            link:
              type: array
              items:
                type: object
                properties:
                  rel:
                    type: string
                  type:
                    type: string
                  href:
                    type: string
                  title:
                    type: string
                  sizes:
                    type: string
                  as:
                    type: string
                  noEscape:
                    type: boolean
                  crossorigin:
                    type: string
                    enum: ['', 'anonymous', 'use-credentials']
                    description: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin
                required:
                  - rel
                  - href
    widgets:
      type: object
      description: Each widget area will have its own property in this object
      additionalProperties:
        type: array
        description: A collection of HTML snippets that are appended to each widget area
        items:
          type: object
          properties:
            html:
              type: string