Skip to content

k.site.views

Addition, deletion, modification and version log of reusable view (View) fragments

Overview

View is an HTML fragment that can be referenced through <view id="view name"> in a page or layout, and is suitable for splitting reusable blocks such as headers, cards, and lists. k.site.views is used to manage view resources in the site.

::: The difference between tip and pages Same as k.site.layouts, k.site.views provides add / all / get / update / updateBody / delete and version log APIs, not getByUrl / getUrl / getAbsUrl (only k.site.pages supports finding pages by URL). :::

TypeScript Definition

ts
interface ViewRepository {
  add(view: ViewInput): void;
  all(): View[];
  get(nameOrId: string): View | null;
  update(view: View): void;
  updateBody(nameOrId: string, body: string): void;
  delete(nameOrId: string): void;
  getLogs(nameOrId: string): ChangeLog[] | null;
  getByLog(logId: number): View | null;
}

interface ViewInput {
  name: string;
  body: string;
}

add()

Create a view.

ParameterTypeRequiredDescription
view.namestringyesView name, referenced by <view id="name"> in the page
view.bodystringyesHTML fragment

Returns: void.

ts
k.api.post(() => {
    const stamp = Date.now().toString()
    const name = "ai-view-" + stamp

    k.site.views.add({
        name,
        body: `<div class="ai-view">${name}</div>`
    })

    const view = k.site.views.get(name)
    return {
        verified: !!view && view.name === name,
        id: view?.id
    }
})

all()

Return to full view.

Parameters: None.

Returns: View[].

ts
k.api.get(() => {
    const views = k.site.views.all()
    return { count: views.length, names: views.slice(0, 10).map((v) => v.name) }
})

get()

Get a view by name or Id.

ParameterTypeRequiredDescription
nameOrIdstringyesView name or ID

Returns: View | null.

ts
k.api.get(() => {
    const view = k.site.views.get("hero")
    return view ? { id: view.id, name: view.name, bodyLength: view.body?.length } : null
})

update()

Update the full view object.

ParameterTypeRequiredDescription
viewViewyesModified full View object

Returns: void.

ts
k.api.post(() => {
    const stamp = Date.now().toString()
    const name = "ai-view-upd-" + stamp

    k.site.views.add({ name, body: "<div>v1</div>" })
    const view = k.site.views.get(name)
    view.body = "<div>v2</div>"
    k.site.views.update(view)

    const after = k.site.views.get(name)
    return {
        verified: after?.body?.indexOf("v2") >= 0,
        hasV1: after?.body?.indexOf("v1") >= 0
    }
})

updateBody()

Only updates body.

ParameterTypeRequiredDescription
nameOrIdstringyesView name or ID
bodystringyesNew View HTML

Returns: void.

ts
k.api.post(() => {
    const stamp = Date.now().toString()
    const name = "ai-view-body-" + stamp

    k.site.views.add({ name, body: "<div>before</div>" })
    k.site.views.updateBody(name, "<div>after-body</div>")

    const after = k.site.views.get(name)
    return { verified: after?.body?.indexOf("after-body") >= 0 }
})

delete()

Delete a view by name or Id. Verify with get(name) after deletion.

ParameterTypeRequiredDescription
nameOrIdstringyesView name or ID

Returns: void.

ts
k.api.post(() => {
    const stamp = Date.now().toString()
    const name = "ai-view-del-" + stamp

    k.site.views.add({ name, body: "<div>del</div>" })
    const before = k.site.views.get(name)

    k.site.views.delete(name)
    const after = k.site.views.get(name)

    return {
        verified: !!before && !after,
        hadBefore: !!before
    }
})

getLogs() / getByLog()

MethodParametersReturnsDescription
getLogs(nameOrId)nameOrId: string`ChangeLog[]null`
getByLog(logId)logId: number`Viewnull`
ts
k.api.get(() => {
    const views = k.site.views.all()
    if (!views.length) return { error: "no views" }

    const logs = k.site.views.getLogs(views[0].id)
    return {
        verified: logs === null || Array.isArray(logs),
        logCount: logs ? logs.length : 0
    }
})

Common View Fields

FieldTypeDescription
IDstringViewId
namestringname
bodystringHTML content
moduleIdstringThe ID of the module it belongs to (when viewed in the module)
extensionstringDefault html
onlinebooleanIs it online?
versionnumberversion number

Quote in page

html
<layout id="main">
  <placeholder id="Main">
    <view id="hero"></view>
  </placeholder>
</layout>

A view named hero needs to exist and k.site.views.get("hero") can return objects.