package docsrc
import (
"fmt"
"net/http"
"os"
"strings"
"github.com/go-chi/chi/middleware"
"github.com/qor5/admin/presets"
"github.com/qor5/docs/docsrc/examples/e00_basics"
"github.com/qor5/docs/docsrc/examples/e10_vuetify_autocomplete"
"github.com/qor5/docs/docsrc/examples/e11_vuetify_basic_inputs"
"github.com/qor5/docs/docsrc/examples/e13_vuetify_list"
"github.com/qor5/docs/docsrc/examples/e14_vuetify_menu"
"github.com/qor5/docs/docsrc/examples/e15_vuetify_navigation_drawer"
"github.com/qor5/docs/docsrc/examples/e17_hello_lazy_portals_and_reload"
"github.com/qor5/docs/docsrc/examples/e21_presents"
"github.com/qor5/docs/docsrc/examples/e22_vuetify_variant_sub_form"
"github.com/qor5/docs/docsrc/examples/e23_vuetify_components_kitchen"
"github.com/qor5/docs/docsrc/examples/e24_vuetify_components_linkage_select"
"github.com/qor5/docs/docsrc/examples/example_basics"
"github.com/qor5/docs/docsrc/utils"
"github.com/qor5/ui/tiptap"
v "github.com/qor5/ui/vuetify"
"github.com/qor5/ui/vuetifyx"
"github.com/qor5/web"
"github.com/theplant/docgo"
. "github.com/theplant/htmlgo"
)
type section struct {
title string
slug string
items []*pageItem
}
type pageItem struct {
section string
slug string
title string
doc HTMLComponent
}
func menuLinks(prefix string, secs []*section) (comp HTMLComponent) {
var nav = Nav().Class("side-tree-nav")
for _, sec := range secs {
secdiv := Div(
Div(
Div().Class("marker"),
Div().Class("text").Text(sec.title),
).Class("tree-item-title tree-branch-title js-item-title js-branch-title is_active"),
).Class("tree-item tree-branch js-item js-branch _opened")
for _, p := range sec.items {
secdiv.AppendChildren(
Div(
A(
Span("").Class("marker"),
Span(p.title).Class("text"),
).Class("tree-item-title tree-leaf-title js-item-title js-leaf-title").
Href(fmt.Sprintf("%s/%s/%s", prefix, sec.slug, p.slug)),
).Class("tree-item tree-leaf js-item js-leaf"),
)
}
nav.AppendChildren(secdiv)
}
comp = Aside(
Div(nav).Class("js-side-tree-nav"),
).Class("g-3")
return
}
func header() HTMLComponent {
return Header(
Div(
Div(
A().Href("/").Class("global-header-logo").Text("QOR5"),
Nav(
Div(
A().Href("https://github.com/qor5").Text("Github").Class("nav-item"),
).Class("nav-links"),
).Class("global-nav"),
).Class("g-layout"),
).Class("global-header-panel"),
).Class("global-header")
}
func footer() HTMLComponent {
return Footer(
Div(
Div(
Div(
Div(
Div().Class("terms-copyright").Text("Licensed under the MIT license"),
).Class("global-footer-row"),
).Class("global-footer-container"),
).Class("g-layout"),
).Class("global-footer-terms"),
).Role("contentinfo").Class("global-footer")
}
func addGA(ctx *web.EventContext) {
if strings.Index(ctx.R.Host, "localhost") >= 0 {
return
}
ctx.Injector.HeadHTML(`
`)
}
func layout(in web.PageFunc, secs []*section, prefix string, cp *pageItem) (out web.PageFunc) {
return func(ctx *web.EventContext) (pr web.PageResponse, err error) {
addGA(ctx)
pr.PageTitle = cp.title + " - " + "QOR5"
ctx.Injector.HeadHTML(`
`)
ctx.Injector.Title(cp.title)
ctx.Injector.HeadHTML(`
`)
ctx.Injector.TailHTML(coreJSTags)
var innerPr web.PageResponse
innerPr, err = in(ctx)
if err != nil {
panic(err)
}
demo := innerPr.Body
ctx.Injector.HeadHTML(`
`)
pr.Body = Components(
Div(
header(),
Div(
Div(
menuLinks(prefix, secs),
Article(demo.(HTMLComponent)).Class("page-content g-9").Role("main"),
).Class("g-grid"),
).Class("g-layout global-content"),
).Class("global-layout"),
footer(),
)
return
}
}
// @snippet_begin(DemoLayoutSample)
func demoLayout(in web.PageFunc) (out web.PageFunc) {
return func(ctx *web.EventContext) (pr web.PageResponse, err error) {
addGA(ctx)
ctx.Injector.HeadHTML(`
`)
ctx.Injector.TailHTML(coreJSTags)
ctx.Injector.HeadHTML(`
`)
var innerPr web.PageResponse
innerPr, err = in(ctx)
if err != nil {
panic(err)
}
pr.Body = innerPr.Body
return
}
}
// @snippet_end
// @snippet_begin(TipTapLayoutSample)
func tiptapLayout(in web.PageFunc) (out web.PageFunc) {
return func(ctx *web.EventContext) (pr web.PageResponse, err error) {
addGA(ctx)
ctx.Injector.HeadHTML(`
`)
ctx.Injector.TailHTML(`
`)
ctx.Injector.HeadHTML(`
`)
var innerPr web.PageResponse
innerPr, err = in(ctx)
if err != nil {
panic(err)
}
pr.Body = innerPr.Body
return
}
}
// @snippet_end
// @snippet_begin(DemoBootstrapLayoutSample)
func demoBootstrapLayout(in web.PageFunc) (out web.PageFunc) {
return func(ctx *web.EventContext) (pr web.PageResponse, err error) {
addGA(ctx)
ctx.Injector.HeadHTML(`
`)
ctx.Injector.TailHTML(`
`)
ctx.Injector.HeadHTML(`
`)
var innerPr web.PageResponse
innerPr, err = in(ctx)
if err != nil {
panic(err)
}
pr.Body = innerPr.Body
return
}
}
// @snippet_end
var coreJSTags = func() string {
if len(os.Getenv("DEV_CORE_JS")) > 0 {
return `
`
}
return ``
}()
var vuetifyJSTags = func() string {
if len(os.Getenv("DEV_VUETIFY_JS")) > 0 {
return `
`
}
return ``
}()
// @snippet_begin(DemoVuetifyLayoutSample)
func demoVuetifyLayout(in web.PageFunc) (out web.PageFunc) {
return func(ctx *web.EventContext) (pr web.PageResponse, err error) {
addGA(ctx)
ctx.Injector.HeadHTML(`
`)
ctx.Injector.TailHTML(fmt.Sprintf("%s %s", vuetifyJSTags, coreJSTags))
ctx.Injector.HeadHTML(`
`)
var innerPr web.PageResponse
innerPr, err = in(ctx)
if err != nil {
panic(err)
}
pr.Body = v.VApp(
v.VMain(
innerPr.Body,
),
)
return
}
}
// @snippet_end
func rf(comp HTMLComponent, p *pageItem) web.PageFunc {
return func(ctx *web.EventContext) (r web.PageResponse, err error) {
r.Body = Components(
utils.Anchor(H1(""), p.title),
comp,
)
return
}
}
func Mux(prefix string) http.Handler {
// @snippet_begin(HelloWorldMuxSample1)
mux := http.NewServeMux()
// @snippet_end
// @snippet_begin(ComponentsPackSample)
mux.Handle("/assets/main.js",
web.PacksHandler("text/javascript",
web.JSComponentsPack(),
),
)
mux.Handle("/assets/vue.js",
web.PacksHandler("text/javascript",
web.JSVueComponentsPack(),
),
)
// @snippet_end
// @snippet_begin(TipTapComponentsPackSample)
mux.Handle("/assets/tiptap.js",
web.PacksHandler("text/javascript",
tiptap.JSComponentsPack(),
),
)
mux.Handle("/assets/tiptap.css",
web.PacksHandler("text/css",
tiptap.CSSComponentsPack(),
),
)
// @snippet_end
// @snippet_begin(VuetifyComponentsPackSample)
mux.Handle("/assets/vuetify.js",
web.PacksHandler("text/javascript",
v.Vuetify(""),
v.JSComponentsPack(),
vuetifyx.JSComponentsPack(),
),
)
mux.Handle("/assets/vuetify.css",
web.PacksHandler("text/css",
v.CSSComponentsPack(),
),
)
// @snippet_end
mux.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) {
w.Write(favicon)
return
})
samplesMux := SamplesHandler(prefix)
mux.Handle("/samples/",
middleware.Logger(
middleware.RequestID(
samplesMux,
),
),
)
mux.Handle("/", docgo.New().
MainPageTitle("QOR5 Document").
Assets("/assets/", Assets).
DocTree(DocTree...).
Build(),
)
return mux
}
func SamplesHandler(prefix string) http.Handler {
mux := http.NewServeMux()
emptyUb := web.New().LayoutFunc(web.NoopLayoutFunc)
mux.Handle(e00_basics.TypeSafeBuilderSamplePath, e00_basics.TypeSafeBuilderSamplePFPB.Builder(emptyUb))
// @snippet_begin(HelloWorldMuxSample2)
mux.Handle(e00_basics.HelloWorldPath, e00_basics.HelloWorldPB)
// @snippet_end
// @snippet_begin(HelloWorldReloadMuxSample1)
mux.Handle(
e00_basics.HelloWorldReloadPath,
e00_basics.HelloWorldReloadPB.Wrap(demoLayout),
)
// @snippet_end
mux.Handle(
e00_basics.Page1Path,
e00_basics.Page1PB.Wrap(demoLayout),
)
mux.Handle(
e00_basics.Page2Path,
e00_basics.Page2PB.Wrap(demoLayout),
)
mux.Handle(
e00_basics.ReloadWithFlashPath,
e00_basics.ReloadWithFlashPB.Wrap(demoLayout),
)
mux.Handle(
e00_basics.PartialUpdatePagePath,
e00_basics.PartialUpdatePagePB.Wrap(demoLayout),
)
mux.Handle(
e00_basics.PartialReloadPagePath,
e00_basics.PartialReloadPagePB.Wrap(demoLayout),
)
mux.Handle(
e00_basics.MultiStatePagePath,
e00_basics.MultiStatePagePB.Wrap(demoLayout),
)
mux.Handle(
e00_basics.FormHandlingPagePath,
e00_basics.FormHandlingPagePB.Wrap(demoLayout),
)
mux.Handle(
e00_basics.CompositeComponentSample1PagePath,
e00_basics.CompositeComponentSample1PagePB.Wrap(demoBootstrapLayout),
)
mux.Handle(
e00_basics.HelloWorldTipTapPath,
e00_basics.HelloWorldTipTapPB.Wrap(tiptapLayout),
)
mux.Handle(
e13_vuetify_list.HelloVuetifyListPath,
e13_vuetify_list.HelloVuetifyListPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e14_vuetify_menu.HelloVuetifyMenuPath,
e14_vuetify_menu.HelloVuetifyMenuPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e00_basics.EventExamplePagePath,
e00_basics.ExamplePagePB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e00_basics.EventHandlingPagePath,
e00_basics.EventHandlingPagePB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e00_basics.WebScopeUseLocalsPagePath,
e00_basics.UseLocalsPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e00_basics.WebScopeUsePlaidFormPagePath,
e00_basics.UsePlaidFormPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e00_basics.ShortCutSamplePath,
e00_basics.ShortCutSamplePB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e11_vuetify_basic_inputs.VuetifyBasicInputsPath,
e11_vuetify_basic_inputs.VuetifyBasicInputsPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e10_vuetify_autocomplete.VuetifyAutoCompletePath,
e10_vuetify_autocomplete.VuetifyAutocompletePB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e10_vuetify_autocomplete.VuetifyAutoCompletePresetPath+"/",
e10_vuetify_autocomplete.ExamplePreset,
)
mux.Handle(
e22_vuetify_variant_sub_form.VuetifyVariantSubFormPath,
e22_vuetify_variant_sub_form.VuetifyVariantSubFormPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e23_vuetify_components_kitchen.VuetifyComponentsKitchenPath,
e23_vuetify_components_kitchen.VuetifyComponentsKitchenPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e15_vuetify_navigation_drawer.VuetifyNavigationDrawerPath,
e15_vuetify_navigation_drawer.VuetifyNavigationDrawerPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e17_hello_lazy_portals_and_reload.LazyPortalsAndReloadPath,
e17_hello_lazy_portals_and_reload.LazyPortalsAndReloadPB.Wrap(demoVuetifyLayout),
)
mux.Handle(
e24_vuetify_components_linkage_select.VuetifyComponentsLinkageSelectPath,
e24_vuetify_components_linkage_select.VuetifyComponentsLinkageSelectPB.Wrap(demoVuetifyLayout),
)
// @snippet_begin(MountPresetHelloWorldSample)
c00 := presets.New().AssetFunc(addGA)
e21_presents.PresetsHelloWorld(c00)
mux.Handle(
e21_presents.PresetsHelloWorldPath+"/",
c00,
)
// @snippet_end
c01 := presets.New().AssetFunc(addGA)
e21_presents.PresetsListingCustomizationFields(c01)
mux.Handle(
e21_presents.PresetsListingCustomizationFieldsPath+"/",
c01,
)
c02 := presets.New().AssetFunc(addGA)
e21_presents.PresetsListingCustomizationFilters(c02)
mux.Handle(
e21_presents.PresetsListingCustomizationFiltersPath+"/",
c02,
)
c03 := presets.New().AssetFunc(addGA)
e21_presents.PresetsListingCustomizationTabs(c03)
mux.Handle(
e21_presents.PresetsListingCustomizationTabsPath+"/",
c03,
)
c04 := presets.New().AssetFunc(addGA)
e21_presents.PresetsListingCustomizationBulkActions(c04)
mux.Handle(
e21_presents.PresetsListingCustomizationBulkActionsPath+"/",
c04,
)
c05 := presets.New().AssetFunc(addGA)
e21_presents.PresetsEditingCustomizationDescription(c05)
mux.Handle(
e21_presents.PresetsEditingCustomizationDescriptionPath+"/",
c05,
)
c06 := presets.New().AssetFunc(addGA)
e21_presents.PresetsEditingCustomizationFileType(c06)
mux.Handle(
e21_presents.PresetsEditingCustomizationFileTypePath+"/",
c06,
)
c07 := presets.New().AssetFunc(addGA)
e21_presents.PresetsEditingCustomizationValidation(c07)
mux.Handle(
e21_presents.PresetsEditingCustomizationValidationPath+"/",
c07,
)
c08 := presets.New().AssetFunc(addGA)
e21_presents.PresetsDetailPageTopNotes(c08)
mux.Handle(
e21_presents.PresetsDetailPageTopNotesPath+"/",
c08,
)
c09 := presets.New().AssetFunc(addGA)
e21_presents.PresetsDetailPageDetails(c09)
mux.Handle(
e21_presents.PresetsDetailPageDetailsPath+"/",
c09,
)
c10 := presets.New().AssetFunc(addGA)
e21_presents.PresetsDetailPageCards(c10)
mux.Handle(
e21_presents.PresetsDetailPageCardsPath+"/",
c10,
)
c11 := presets.New().AssetFunc(addGA)
e21_presents.PresetsPermissions(c11)
mux.Handle(
e21_presents.PresetsPermissionsPath+"/",
c11,
)
c12 := presets.New().AssetFunc(addGA)
e21_presents.PresetsModelBuilderExtensions(c12)
mux.Handle(
e21_presents.PresetsModelBuilderExtensionsPath+"/",
c12,
)
c13 := presets.New().AssetFunc(addGA)
example_basics.PresetsBasicFilter(c13)
mux.Handle(
example_basics.PresetsBasicFilterPath+"/",
c13,
)
c14 := presets.New().AssetFunc(addGA)
e21_presents.PresetsNotificationCenterSample(c14)
mux.Handle(
e21_presents.NotificationCenterSamplePath+"/",
c14,
)
c15 := presets.New().AssetFunc(addGA)
e21_presents.PresetsLinkageSelectFilterItem(c15)
mux.Handle(
e21_presents.PresetsLinkageSelectFilterItemPath+"/",
c15,
)
c16 := presets.New().AssetFunc(addGA)
example_basics.ListingSample(c16)
mux.Handle(
example_basics.ListingSamplePath+"/",
c16,
)
c17 := presets.New().AssetFunc(addGA)
e21_presents.PresetsBrandTitle(c17)
mux.Handle(
e21_presents.PresetsBrandTitlePath+"/",
c17,
)
c18 := presets.New().AssetFunc(addGA)
e21_presents.PresetsBrandFunc(c18)
mux.Handle(
e21_presents.PresetsBrandFuncPath+"/",
c18,
)
c19 := presets.New().AssetFunc(addGA)
e21_presents.PresetsProfile(c19)
mux.Handle(
e21_presents.PresetsProfilePath+"/",
c19,
)
c20 := presets.New().AssetFunc(addGA)
e21_presents.PresetsOrderMenu(c20)
mux.Handle(
e21_presents.PresetsMenuOrderPath+"/",
c20,
)
c21 := presets.New().AssetFunc(addGA)
e21_presents.PresetsGroupMenu(c21)
mux.Handle(
e21_presents.PresetsMenuGroupPath+"/",
c21,
)
c22 := presets.New().AssetFunc(addGA)
example_basics.PresetsConfirmDialog(c22)
mux.Handle(
example_basics.PresetsConfirmDialogPath+"/",
c22,
)
c23 := presets.New().AssetFunc(addGA)
example_basics.WorkerExampleMock(c23)
mux.Handle(
example_basics.WorkerExamplePath+"/",
c23,
)
c24 := presets.New().AssetFunc(addGA)
example_basics.ActionWorkerExampleMock(c24)
mux.Handle(
example_basics.ActionWorkerExamplePath+"/",
c24,
)
c25 := presets.New().AssetFunc(addGA)
example_basics.LocalizationExampleMock(c25)
mux.Handle(
example_basics.LocalizationExamplePath+"/",
c25,
)
return mux
}