Documentation
¶
Index ¶
- Constants
- Variables
- func Autocomplete(a AutocompleteFunc)
- func BuildPage(p string, encloseInDir bool)
- func EachPage(ctx context.Context, f func(Page))
- func FindAllInAST[t ast.Node](n ast.Node, kind ast.NodeKind) (a []t)
- func FindInAST[t ast.Node](n ast.Node, kind ast.NodeKind) (found t, ok bool)
- func Helper(name string, f interface{})
- func IgnoreDirectory(r *regexp.Regexp)
- func Listen(e PageEvent, h PageEventHandler)
- func Partial(path string, data Locals) template.HTML
- func PrependWidget(s widgetSpace, f func(Page, Request) template.HTML)
- func Preprocessor(f PreprocessorFunc)
- func RegisterCommand(c Command)
- func RenderWidget(s widgetSpace, p Page, r Request) (o template.HTML)
- func Start()
- func Template(t fs.FS, subDir string)
- func Trigger(e PageEvent, p Page)
- func Vars(r Request) map[string]string
- func Widget(s widgetSpace, f func(Page, Request) template.HTML)
- type AutocompleteFunc
- type Autocompletion
- type Command
- type HandlerFunc
- type Locals
- type Output
- type Page
- type PageEvent
- type PageEventHandler
- type PreprocessorFunc
- type Request
- type Response
- type Route
- type RouteCheck
- type Suggestion
Constants ¶
const ( SIDEBAR_WIDGET widgetSpace = iota // widgets rengered in the sidebar AFTER_VIEW_WIDGET // widgets rendered after the content of the view page ACTION_WIDGET // widgets rendered in the actions row of the view page HEAD_WIDGET // widgets rendered in page <head> tag )
List of widgets spaces that extensions can use to register a widgetFunc to inject content into.
Variables ¶
var ( SOURCE string // path to markdown files directory BUILD string // path to write built files READONLY bool // is xlog in readonly mode SITENAME string // name of knowledgebase SIDEBAR bool // is sidebar displayed INDEX string // name of the index page markdown file )
var ( // a function that renders CSRF hidden input field CSRF = csrf.TemplateField )
var MarkDownRenderer = goldmark.New( goldmark.WithExtensions( extension.GFM, extension.DefinitionList, extension.Footnote, highlighting.Highlighting, emoji.Emoji, ), goldmark.WithRendererOptions( html.WithHardWraps(), html.WithUnsafe(), ), )
The instance of markdown renderer. this is what takes the page content and converts it to HTML. it defines what features to use from goldmark and what options to turn on
Functions ¶
func Autocomplete ¶
func Autocomplete(a AutocompleteFunc)
Autocomplete registers an autocomplete function. it should be used by an extension to register a new autocomplete function. these functions are going to be executed when rendering the edit page.
func BuildPage ¶ added in v0.25.0
BuildPage registers a path of a page to export when building static version of the knowledgebase. encloseInDir will write the output to p/index.html instead instead of writing to p directly. that can help have paths with no .html extension to be served with the exact name.
func EachPage ¶ added in v0.24.0
EachPage iterates on all available pages. many extensions uses it to get all pages and maybe parse them and extract needed information
func FindAllInAST ¶ added in v0.25.0
Extract all nodes of a specific type from the AST
func FindInAST ¶ added in v0.25.0
This is a function that takes an AST node and walks the tree depth first recursively calling itself in search for a node of a specific kind can be used to find first image, link, paragraph...etc
func Helper ¶ added in v0.22.0
func Helper(name string, f interface{})
Helper registers a new helper function. all helpers are used when compiling templates. so registering helpers function must happen before the server starts as compiling templates happened right before starting the http server.
func IgnoreDirectory ¶ added in v0.27.0
IgnoreDirectory Register a pattern to be ignored when walking directories.
func Listen ¶ added in v0.16.0
func Listen(e PageEvent, h PageEventHandler)
Register an event handler to be executed when PageEvent is triggered. extensions can use this to register hooks under specific page events. extensions that keeps a cached version of the pages list for example needs to register handlers to update its cache
func PrependWidget ¶ added in v0.22.0
Register widget function to be rendered in a specific space before any other widget. functions registered by this function will have higher priority than the rest. this function is needed for example to register the search input before any other links in the sidebar
func Preprocessor ¶ added in v0.22.0
func Preprocessor(f PreprocessorFunc)
Register a Preprocessor function. extensions should use this function to register a preprocessor.
func RegisterCommand ¶ added in v0.27.0
func RegisterCommand(c Command)
RegisterCommand registers a new command
func RenderWidget ¶
This is used by view and edit routes to render all widgetfuncs registered for specific widget space.
func Start ¶
func Start()
Define the catch all HTTP routes, parse CLI flags and take actions like building the static pages and exit, or start the HTTP server
func Template ¶ added in v0.24.0
Template registers a filesystem that contains templates, specifying subDir as the subdirectory name that contains the templates. templates are registered such that the latest registered directory override older ones. template file extensions are signified by TEMPLATE_EXTENSION constant and the file path can be used as template name without this extension
func Trigger ¶ added in v0.16.0
Trigger event handlers for a specific page event. page methods use this function to trigger all registered handlers when the page is edited or deleted for example.
Types ¶
type AutocompleteFunc ¶ added in v0.27.0
type AutocompleteFunc func() *Autocompletion
This is a function that returns an auto completer instance. this function should be defined by extensions and registered to be executed when rendering the edit page
type Autocompletion ¶ added in v0.22.0
type Autocompletion struct { StartChar string Suggestions []*Suggestion }
Autocompletion defines what character triggeres the autocomplete feature and what is the list to display in this case.
type Command ¶ added in v0.27.0
type Command interface { // Name of the command. to be displayed in the list Name() string // OnClick action. a Javascript code to invoke when the command is executed OnClick() template.JS // Widget a HTML snippet to embed in the page that include any needed // assets, HTML, JS the command needs Widget(Page) template.HTML }
Command define a command that a user can invoke in view or edit page on a Page.
type HandlerFunc ¶
type HandlerFunc func(http.ResponseWriter, *http.Request) Output
HandlerFunc is the type of an HTTP handler function + returns output function. it makes it easier to return the output directly instead of writing the output to w then return.
type Locals ¶
type Locals map[string]interface{} // passed to templates
Some aliases to make it easier
type Output ¶
type Output = http.HandlerFunc
Some aliases to make it easier
func BadRequest ¶
BadRequest returns an output function that writes BadRequest http response
func InternalServerError ¶
InternalServerError returns an output function that writes InternalServerError http response
func NoContent ¶
func NoContent() Output
NoContent returns an output function that writes NoContent http status
func Render ¶
Render returns an output function that renders partial with data and writes it as response
func Unauthorized ¶
Unauthorized returns an output function that writes Unauthorized http response
type Page ¶
type Page interface { // Name returns page name without '.md' extension Name() string // returns the filename, makes sure it converts slashes to backslashes when // needed. this is safe to use when trying to access the file that represent the // page FileName() string // checks if the page underlying file exists on disk or not. Exists() bool // Renders the page content to HTML. it makes sure all preprocessors are called Render() template.HTML // Reads the underlying file and returns the content Content() string // Deletes the file and makes sure it triggers the AfterDelete event Delete() bool // Overwrite page content with new content. making sure to trigger before and // after write events. Write(string) bool // ModTime Return the last modification time of the underlying file ModTime() time.Time // Parses the page content and returns the Abstract Syntax Tree (AST). // extensions can use it to walk the tree and modify it or collect statistics or // parts of the page. for example the following "Emoji" function uses it to // extract the first emoji. AST() ast.Node // Returns the first emoji of the page. Emoji() string }
a Type that represent a page.
type PageEvent ¶
type PageEvent int
a type used to define events to be used when the page is manipulated for example modified, renamed, deleted...etc.
List of page events. extensions can use these events to register a function to be executed when this event is triggered. extensions that require to be notified when the page is created or overwritten or deleted should register an event handler for the interesting events.
type PageEventHandler ¶
a function that handles a page event. this should be implemented by an extension and then registered. it will get executed when the event is triggered
type PreprocessorFunc ¶ added in v0.22.0
A PreprocessorFunc is a function that takes the whole page content and returns a modified version of the content. extensions should define this type and register is so that when page is rendered it will execute all of them in order like a pipeline each function output is passed as an input to the next. at the end the last preprocessor output is then rendered to HTML
type Route ¶
type Route struct {
// contains filtered or unexported fields
}
A route has handler function and set of RouteChecks if all checks are true, the last request will be passed to the handler function
func Delete ¶ added in v0.22.0
func Delete(path string, handler HandlerFunc, middlewares ...func(http.HandlerFunc) http.HandlerFunc) Route
Delete defines a new route that gets executed when the request matches path and method is http Delete. the list of middlewares are executed in order
func Get ¶ added in v0.22.0
func Get(path string, handler HandlerFunc, middlewares ...func(http.HandlerFunc) http.HandlerFunc) Route
Get defines a new route that gets executed when the request matches path and method is http Get. the list of middlewares are executed in order
func Match ¶ added in v0.22.0
func Match(route http.HandlerFunc, checks ...RouteCheck) Route
Match Adds a new HTTP handler function to the list of routes with a list of checks functions. the list of checks are executed when a request comes in if all of them returned true the handler function gets executed.
func Post ¶ added in v0.22.0
func Post(path string, handler HandlerFunc, middlewares ...func(http.HandlerFunc) http.HandlerFunc) Route
Post defines a new route that gets executed when the request matches path and method is http Post. the list of middlewares are executed in order
type RouteCheck ¶
Checks a request for conditions, may modify request returning the new request and if conditions are met.
Can be used to check request method, path or other attributes against expected values.
type Suggestion ¶
type Suggestion struct { Text string // The text that gets injected in the editor if this option is chosen DisplayText string // The display text for this item in the menu. this can be more cosmetic. }
Suggestions represent an item in the list of autocomplete menu in the edit page