wajaf

package module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 10, 2024 License: MIT Imports: 8 Imported by: 4

README

Go Report Card GoDoc

WAJAF for GO v0.1

WAJAF is the WebAbility Javascript Application Framework. It is a synchronized GO-Server <=> JS-Client framework to develop organized web applications.

GO manuals are available on godoc.org GoDoc

JAVASCRIPT manual:

The examples and tests show the working functions and the manual of them.

![Go to Examples]

  1. The main core.

The main core contains:

  • 2 attributes:

Examples & manuals: ![Go to attributes examples]

  • zIndex method, used to set an unused zIndex to a node,

Examples & manuals: ![Go to core examples]

  • Verification methods is*, used to know the type of JS objects. All the functions return true/false. True means the variable match the specified type by the is* method. -- isDefined: returns true if the variable is not undefined. -- isEmpty: returns true if the variable is empty: empty means undefined, null, empty array or empty string. -- isBool: returns true if the variable is a boolean. -- isNumber: returns true if the variable is number, integer or float. -- isString: returns true if the variable is a string or a String object. -- isArray: returns true if the variable is an array. -- isObject: returns true if the variable is an object. It includes String(), Date(), {}. etc. Note than Javasript consider null as an object too. -- isFunction: returns true if the variable is a function. -- isDate: return true if the variable is a Date object. -- isDOM: return true if the variable is a DOM node object.

Examples & manuals: ![Go to examples]

  • Objects and nodes methods.

For objects:

  • WA.extend: Will extends an object from another (inheritance).
  • WA.clone: Will clone an object and all its children. -- If you dont care the type of object but only its attributes, you can use WA.clone(object, true) -- If you use the normal method WA.clone(object), it will clone the whole object with attributes and methods.
  • WA.sizeof: Will calculates the size (number of attributes) of an object.

For DOM nodes:

  • WA.createDomNode: Will create a DOM Node of specified type, and apply classname if defined.
  • WA.getDomNode: Will get the DOM node of the specified Id.
  • WA.toDOM: Will get the DOM node from a string ID or a node itself.

Examples & manuals: ![Go to examples]

  • Node get() functions.

The get function lets you find a node or a set of nodes by rules, then apply some changes on the node.

The get() method works as followed:

  1. The code will search all the nodes corresponding to the filter you give it.

There are 3 posibilities:

a - No nodes were found. The subsequent operations will do nothing. b - There was only one node found. The subsequent operations will work directly on this node. c - There was more than 1 node found (from 2 to the whole DOM). The subsequent operations will work for each one of the found nodes.

  1. The operation is applied to all the node(s).

  2. The operations can be chained.

The parameter of get() method is a string used to search the nodes:

"#id": If you want to find a single node by its unique id, using the CSS syntax. ".class": If you want to find a list of nodes by their class, using the CSS syntax. "!name": If you want to find a list of nodes by their name (in a form). "tag": If you want to find a list of nodes by their tag type (example: 'div', 'a').

Examples & manuals: ![Go to examples]

  1. The browser core:

TO DO:

  • Adds local specific functions to all the Containers, Elements, Zones, etc to improve tree programmation.
  • Tests

Version Changes Control

v0.3.0 - 2024-04-09

  • Added searcheabletextfieldElement, go and JS modified
  • mmcFieldElement now supports multifile upload too, and a template to present information
  • lovFieldElement now supports radio and checkboxes, and multiple select
  • groupContainer now supports sub-forms for master-details administration screens with templates to format detail records
  • Errors corrected con crowser getNodeDocumentLeft and getNodeDocumentTop to be correctly calculated with scroll offsets
  • Added function findNodeByClass in browser class
  • Added coretemplate.js to inject templates with data sets
  • Added floatingContainer for floating windows in page
  • Added resize of columns, order of columns and drag and drop for order into gridContainer
  • Error corrected on tabContainer when unloading the instance
  • TreeContainer now supports dragging and hover, sinchronized with server with the listener
  • textfieldElement and textareafieldElement corrected to display correctly the number of words and letters
  • New classes into css for new components

v0.1.4 - 2022-12-02

  • Added listener option to AjaxRequest to follow the upload of request to the server
  • Error corrected in the 4GL Manager, the node with an inner application was not linking the application attribute
  • ggraphElement has been changed to control errors with try-catch when calling the google library
  • mmcFieldElement has been modified to work as expected and be able to manage any kind of files
  • gridContainer has been modified to be able to order the information by columns

v0.1.3 - 2022-06-12

  • Added CodeNode.go to create a node of code.
  • Added colorfieldelement.go to create a field to pick a color.
  • Added config/wajaf.conf in examples to run the examples on a xamboo server if needed.
  • The css for prettify is now absolute in the html code.
  • Some correction in the example code.
  • The go libraries now includes the new structures compatible with Xamboo 1.6
  • The jsfile.go added to manage all the JS files on an embed filesystem.
  • The js.go library now uses the GetJSFile into the wajaf library.
  • go.mod modified to go 1.17 for embed filesystem needed.
  • Some errors corrected into groupContainer.js and tabContainer.js to work better.
  • The buttonElement now as a listener to send data to the server when clicked.
  • lovFieldElement is now working correctly.
  • textFieldElement now knows integer, float, text, masked types of fields, and correctly convert values to send to server.
  • ajaxManager can now handle ajax promises.
  • canvasManager create for test purpose.
  • wa4glmanager modified to work on promises, capture errors and needed login requests.
  • options.go added to manager lovfield list of options.
  • resources directory removed, replaced by embed filesystem

v0.1.2 - 2021-10-04

  • Correction of isEmpty function of the core, to give true is the Date is empty or the String() is empty.
  • The simple javascript examples are now working on a Xamboo Go Server (Presentation, js.go corrected, all libraries working)

v0.1.1 - 2021-02-26

  • gridContainer.js has been modified to support large list of daat and put correct information metada data.
  • node.go enhanced to detect wrong XML formats and return an error
  • Added xml.Comment into node XML unmarshall to consider it

v0.1.0 - 2020-12-22

  • First build on GO, with all the necesary code to devel, test, publish and show live examples.
  • Adds titleview parameter to buttonelement.js (missing)
  • Separates coreext.js and coretemplate.js from core.js

v0.0.15 - 2020-04-26

  • JS code is now embedded into GO code in resources directory. embed.go is added to generate embedded code, but is not compilable with the libraries.

v0.0.14 - 2020-04-13

  • Correction on node: HELP as messages, not help children

v0.0.13 - 2020-04-13

  • Correction on node: JSON Marshal, wrong ',' calculations (again)

v0.0.12 - 2020-04-13

  • Correction on node: JSON Marshal, wrong ',' calculations

v0.0.11 - 2020-04-13

  • Added parameters to creation of containers, zones, dataset and elements

v0.0.10 - 2020-04-08

  • Added know child "code" to event

v0.0.9 - 2020-04-08

  • Correction of event node so code is into code node.

v0.0.8 - 2020-04-08

  • Correction of all the Types of containers and elements to put correct js library name (nameContainer and nameElement syntax)

v0.0.7 - 2020-04-08

  • Added MarshalXML on Node to build XML code from nodes

v0.0.6 - 2020-04-08

  • Correction on assigning the node data (concatened, only if some info into it: will ignore spaces and line formatting characters)

v0.0.5 - 2020-04-07

  • Added UnmarshalXML
  • Added MarshalJSON
  • Added basic functions AddMessage, AddHelp, AddEvent to a Node, with auto creation of children nodes
  • Removed messages, events, help attributes of Node
  • Added AddZone() to SeparatorContainer as a new struct extended from DomDef interface to build upon specific functions for specific nodes (it works)

v0.0.4 - 2020-04-06

  • All structures and Application tree implemented in GO
  • Full wajaf JS available in js directory

Documentation

Overview

Package wajaf is a go <=> javascript synchronized framework

Index

Constants

View Source
const VERSION = "0.3.0"

VERSION is the used version nombre of the XCore library.

Variables

View Source
var LOG = false

LOG is the flag to activate logging on the library. if LOG is set to TRUE, LOG indicates to the XCore libraries to log a trace of functions called, with most important parameters. LOG can be set to true or false dynamically to trace only parts of code on demand.

Functions

func GetJSFile added in v0.1.3

func GetJSFile(path string) []byte

Types

type AccordionContainer

type AccordionContainer struct {
	NodeDef
}

func NewAccordionContainer

func NewAccordionContainer(id string) *AccordionContainer

func (*AccordionContainer) NewZone

func (c *AccordionContainer) NewZone(ztype string, id string) NodeDef

type AccordionZone

type AccordionZone NodeDef

func NewAccordionZone

func NewAccordionZone(ztype string, id string) AccordionZone

type Application

type Application NodeDef

func NewApplication

func NewApplication(id string) Application

type Attributes

type Attributes map[string]string

type BarContainer

type BarContainer struct {
	NodeDef
}

func NewBarContainer

func NewBarContainer(id string) *BarContainer

func (*BarContainer) NewZone

func (c *BarContainer) NewZone(ztype string, id string) NodeDef

type BarZone

type BarZone NodeDef

func NewBarZone

func NewBarZone(ztype string, id string) BarZone

type ButtonElement

type ButtonElement NodeDef

func NewButtonElement

func NewButtonElement(id string, action string) ButtonElement

type CodeElement

type CodeElement NodeDef

func NewCodeElement

func NewCodeElement(id string, code string) CodeElement

func NewCodeNode added in v0.1.3

func NewCodeNode(id string, tp string, code string) CodeElement

type CodeNode added in v0.1.3

type CodeNode NodeDef

type ColorFieldElement added in v0.1.3

type ColorFieldElement NodeDef

func NewColorFieldElement added in v0.1.3

func NewColorFieldElement(id string) ColorFieldElement

type DBListContainer

type DBListContainer struct {
	NodeDef
}

func NewDBListContainer

func NewDBListContainer(id string) *DBListContainer

func (*DBListContainer) NewDataset

func (c *DBListContainer) NewDataset(dtype string, data string) NodeDef

func (*DBListContainer) NewTemplate

func (c *DBListContainer) NewTemplate(ttype string, name string) NodeDef

func (*DBListContainer) NewZone

func (c *DBListContainer) NewZone(ztype string, id string) NodeDef

type DBListDataset

type DBListDataset NodeDef

func NewDBListDataset

func NewDBListDataset(dtype string, data string) DBListDataset

type DBListTemplate

type DBListTemplate NodeDef

func NewDBListTemplate

func NewDBListTemplate(ttype string, name string) DBListTemplate

type DBListZone

type DBListZone NodeDef

func NewDBListZone

func NewDBListZone(id string, ztype string) DBListZone

type DateFieldElement

type DateFieldElement NodeDef

func NewDateFieldElement

func NewDateFieldElement(id string) DateFieldElement

type DateSelectorElement

type DateSelectorElement NodeDef

func NewDateSelectorElement

func NewDateSelectorElement(id string) DateSelectorElement

type DockContainer

type DockContainer struct {
	NodeDef
}

func NewDockContainer

func NewDockContainer(id string) *DockContainer

func (*DockContainer) NewZone

func (c *DockContainer) NewZone(ztype string, id string) NodeDef

type DockZone

type DockZone NodeDef

func NewDockZone

func NewDockZone(ztype string, id string) DockZone

type Event

type Event NodeDef

func NewEvent

func NewEvent(etype string, code string) Event

type ExpandableContainer

type ExpandableContainer struct {
	NodeDef
}

func NewExpandableContainer

func NewExpandableContainer(id string) *ExpandableContainer

func (*ExpandableContainer) NewZone

func (c *ExpandableContainer) NewZone(ztype string, id string) NodeDef

type ExpandableZone

type ExpandableZone NodeDef

func NewExpandableZone

func NewExpandableZone(ztype string, id string) ExpandableZone

type FileFieldElement

type FileFieldElement NodeDef

func NewFileFieldElement

func NewFileFieldElement(id string) FileFieldElement

type FloatingContainer

type FloatingContainer struct {
	NodeDef
}

func NewFloatingContainer

func NewFloatingContainer(id string) *FloatingContainer

func (*FloatingContainer) NewZone

func (c *FloatingContainer) NewZone(ztype string, id string) NodeDef

type FloatingZone

type FloatingZone NodeDef

func NewFloatingZone

func NewFloatingZone(ztype string, id string) FloatingZone

type GGraphDataset

type GGraphDataset NodeDef

func NewGGraphDataset

func NewGGraphDataset(data string) GGraphDataset

type GGraphElement

type GGraphElement NodeDef

func NewGGraphElement

func NewGGraphElement(id string) GGraphElement

type GridContainer

type GridContainer struct {
	NodeDef
}

func NewGridContainer

func NewGridContainer(id string) *GridContainer

func (*GridContainer) NewDataset

func (c *GridContainer) NewDataset(dtype string, data string) NodeDef

func (*GridContainer) NewTemplate

func (c *GridContainer) NewTemplate(ttype string, name string) NodeDef

func (*GridContainer) NewZone

func (c *GridContainer) NewZone(ztype string, id string) NodeDef

type GridDataset

type GridDataset NodeDef

func NewGridDataset

func NewGridDataset(dtype string, data string) GridDataset

type GridTemplate

type GridTemplate NodeDef

func NewGridTemplate

func NewGridTemplate(ttype string, name string) GridTemplate

type GridZone

type GridZone NodeDef

func NewGridZone

func NewGridZone(ztype string, id string) GridZone

type GroupContainer

type GroupContainer struct {
	NodeDef
}

func NewGroupContainer

func NewGroupContainer(id string) *GroupContainer

func (*GroupContainer) NewDataset

func (c *GroupContainer) NewDataset(dtype string, data string) NodeDef

func (*GroupContainer) NewZone

func (c *GroupContainer) NewZone(ztype string, id string) NodeDef

type GroupDataset

type GroupDataset NodeDef

func NewGroupDataset

func NewGroupDataset(dtype string, data string) GroupDataset

type GroupZone

type GroupZone NodeDef

func NewGroupZone

func NewGroupZone(ztype string, id string) GroupZone

type HTMLElement

type HTMLElement NodeDef

func NewHTMLElement

func NewHTMLElement(id string, data string) HTMLElement

type Help

type Help NodeDef

func NewHelp

func NewHelp(tooltip string, title string, description string) Help

type HiddenElement

type HiddenElement NodeDef

func NewHiddenElement

func NewHiddenElement(id string, data string) HiddenElement

type HiddenFieldElement

type HiddenFieldElement NodeDef

func NewHiddenFieldElement

func NewHiddenFieldElement(id string) HiddenFieldElement

type ImageElement

type ImageElement NodeDef

func NewImageElement

func NewImageElement(id string, src string, data string) ImageElement

type LOVFieldElement

type LOVFieldElement NodeDef

func NewLOVFieldElement

func NewLOVFieldElement(id string) LOVFieldElement

type LinkElement

type LinkElement NodeDef

func NewLinkElement

func NewLinkElement(id string) LinkElement

type ListContainer

type ListContainer struct {
	NodeDef
}

func NewListContainer

func NewListContainer(id string) *ListContainer

func (*ListContainer) NewDataset

func (c *ListContainer) NewDataset(dtype string, data string) NodeDef

func (*ListContainer) NewTemplate

func (c *ListContainer) NewTemplate(ttype string, name string) NodeDef

func (*ListContainer) NewZone

func (c *ListContainer) NewZone(ztype string, id string) NodeDef

type ListDataset

type ListDataset NodeDef

func NewListDataset

func NewListDataset(dtype string, data string) ListDataset

type ListTemplate

type ListTemplate NodeDef

func NewListTemplate

func NewListTemplate(ttype string, name string) ListTemplate

type ListZone

type ListZone NodeDef

func NewListZone

func NewListZone(ztype string, id string) ListZone

type MMCFieldElement

type MMCFieldElement NodeDef

func NewMMCFieldElement

func NewMMCFieldElement(id string) MMCFieldElement

type MatrixContainer

type MatrixContainer struct {
	NodeDef
}

func NewMatrixContainer

func NewMatrixContainer(id string) *MatrixContainer

func (*MatrixContainer) NewDataset

func (c *MatrixContainer) NewDataset(dtype string, data string) NodeDef

func (*MatrixContainer) NewTemplate

func (c *MatrixContainer) NewTemplate(ttype string, name string) NodeDef

func (*MatrixContainer) NewZone

func (c *MatrixContainer) NewZone(ztype string, id string) NodeDef

type MatrixDataset

type MatrixDataset NodeDef

func NewMatrixDataset

func NewMatrixDataset(dtype string, data string) MatrixDataset

type MatrixTemplate

type MatrixTemplate NodeDef

func NewMatrixTemplate

func NewMatrixTemplate(ttype string, name string) MatrixTemplate

type MatrixZone

type MatrixZone NodeDef

func NewMatrixZone

func NewMatrixZone(ztype string, id string) MatrixZone

type Message

type Message NodeDef

func NewMessage

func NewMessage(name string, value string) Message

func NewOption added in v0.1.3

func NewOption(key string, data string) Message

func NewOptions added in v0.1.3

func NewOptions() Message

type Node

type Node struct {
	ID        string
	SuperType string
	Type      string
	Data      string
	// contains filtered or unexported fields
}

func (*Node) AddChild

func (n *Node) AddChild(node NodeDef) error

func (*Node) AddEvent

func (n *Node) AddEvent(name string, code string)

func (*Node) AddHelp

func (n *Node) AddHelp(tooltip string, title string, description string)

func (*Node) AddMessage

func (n *Node) AddMessage(name string, value string)

func (*Node) DecodeAttributes

func (n *Node) DecodeAttributes(s xml.StartElement)

func (*Node) GetAttribute

func (n *Node) GetAttribute(name string) (string, error)

func (*Node) GetAttributes

func (n *Node) GetAttributes() Attributes

func (*Node) GetChildren

func (n *Node) GetChildren() []NodeDef

func (*Node) GetData

func (n *Node) GetData() string

func (*Node) GetID

func (n *Node) GetID() string

func (*Node) GetSuperType

func (n *Node) GetSuperType() string

func (*Node) GetType

func (n *Node) GetType() string

func (*Node) GoString

func (n *Node) GoString() string

func (*Node) MarshalJSON

func (n *Node) MarshalJSON() ([]byte, error)

func (*Node) MarshalXML

func (n *Node) MarshalXML(e *xml.Encoder, start xml.StartElement) error

func (*Node) RegisterKnownAttributes

func (n *Node) RegisterKnownAttributes(attributes []string) error

func (*Node) RegisterKnownChildren

func (n *Node) RegisterKnownChildren(children []string) error

func (*Node) SetAttribute

func (n *Node) SetAttribute(name string, value string) error

func (*Node) SetAttributes

func (n *Node) SetAttributes(attr Attributes) error

func (*Node) SetData

func (n *Node) SetData(data string)

func (*Node) SetID

func (n *Node) SetID(id string)

func (*Node) String

func (n *Node) String() string

func (*Node) UnmarshalJSON

func (n *Node) UnmarshalJSON([]byte) error

func (*Node) UnmarshalXML

func (n *Node) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

type NodeDef

type NodeDef interface {
	fmt.Stringer
	fmt.GoStringer

	RegisterKnownAttributes([]string) error
	RegisterKnownChildren([]string) error

	SetID(id string)
	SetData(data string)
	GetID() string
	GetType() string
	GetSuperType() string
	GetData() string
	SetAttribute(string, string) error
	SetAttributes(Attributes) error
	GetAttribute(string) (string, error)
	GetAttributes() Attributes
	AddHelp(string, string, string)
	AddMessage(string, string)
	AddEvent(string, string)
	AddChild(NodeDef) error
	GetChildren() []NodeDef

	//	DecodeAttributes(xml.StartElement)
	UnmarshalXML(*xml.Decoder, xml.StartElement) error
	MarshalXML(*xml.Encoder, xml.StartElement) error
	UnmarshalJSON([]byte) error
	MarshalJSON() ([]byte, error)
}

func NewNode

func NewNode(supertype string, subtype string) NodeDef

type Option added in v0.1.3

type Option NodeDef

type Options added in v0.1.3

type Options NodeDef

type PaginationElement

type PaginationElement NodeDef

func NewPaginationElement

func NewPaginationElement(id string) PaginationElement

type SearchableTextFieldElement added in v0.3.0

type SearchableTextFieldElement NodeDef

func NewSearchableTextFieldElement added in v0.3.0

func NewSearchableTextFieldElement(id string) SearchableTextFieldElement

type SeparatorContainer

type SeparatorContainer struct {
	NodeDef
}

func NewSeparatorContainer

func NewSeparatorContainer(id string) *SeparatorContainer

func (*SeparatorContainer) NewZone

func (c *SeparatorContainer) NewZone(ztype string, id string) NodeDef

type SeparatorZone

type SeparatorZone NodeDef

func NewSeparatorZone

func NewSeparatorZone(ztype string, id string) SeparatorZone

type SetTextFieldElement

type SetTextFieldElement NodeDef

func NewSetTextFieldElement

func NewSetTextFieldElement(id string) SetTextFieldElement

type SimpleContainer

type SimpleContainer struct {
	NodeDef
}

func NewSimpleContainer

func NewSimpleContainer(id string) *SimpleContainer

func (*SimpleContainer) NewZone

func (c *SimpleContainer) NewZone(ztype string, id string) NodeDef

type SimpleZone

type SimpleZone NodeDef

func NewSimpleZone

func NewSimpleZone(ztype string, id string) SimpleZone

type TabContainer

type TabContainer struct {
	NodeDef
}

func NewTabContainer

func NewTabContainer(id string) *TabContainer

func (*TabContainer) NewZone

func (c *TabContainer) NewZone(ztype string, id string) NodeDef

type TabZone

type TabZone NodeDef

func NewTabZone

func NewTabZone(ztype string, id string) TabZone

type TableContainer

type TableContainer struct {
	NodeDef
}

func NewTableContainer

func NewTableContainer(id string) *TableContainer

func (*TableContainer) NewZone

func (c *TableContainer) NewZone(ztype string, id string) NodeDef

type TableZone

type TableZone NodeDef

func NewTableZone

func NewTableZone(ztype string, id string) TableZone

type TextAreaFieldElement

type TextAreaFieldElement NodeDef

func NewTextAreaFieldElement

func NewTextAreaFieldElement(id string) TextAreaFieldElement

type TextElement

type TextElement NodeDef

func NewTextElement

func NewTextElement(id string, data string) TextElement

type TextFieldElement

type TextFieldElement NodeDef

func NewTextFieldElement

func NewTextFieldElement(id string) TextFieldElement

type TreeContainer

type TreeContainer struct {
	NodeDef
}

func NewTreeContainer

func NewTreeContainer(id string) *TreeContainer

func (*TreeContainer) NewDataset

func (c *TreeContainer) NewDataset(dtype string, data string) NodeDef

func (*TreeContainer) NewTemplate

func (c *TreeContainer) NewTemplate(ttype string, name string) NodeDef

func (*TreeContainer) NewZone

func (c *TreeContainer) NewZone(ztype string, id string) NodeDef

type TreeDataset

type TreeDataset NodeDef

func NewTreeDataset

func NewTreeDataset(dtype string, data string) TreeDataset

type TreeTemplate

type TreeTemplate NodeDef

func NewTreeTemplate

func NewTreeTemplate(ttype string, name string) TreeTemplate

type TreeZone

type TreeZone NodeDef

func NewTreeZone

func NewTreeZone(ztype string, id string) TreeZone

type WidgetContainer

type WidgetContainer struct {
	NodeDef
}

func NewWidgetContainer

func NewWidgetContainer(id string) *WidgetContainer

func (*WidgetContainer) NewDataset

func (c *WidgetContainer) NewDataset(dtype string, data string) NodeDef

func (*WidgetContainer) NewTemplate

func (c *WidgetContainer) NewTemplate(ttype string, name string) NodeDef

func (*WidgetContainer) NewZone

func (c *WidgetContainer) NewZone(ztype string, id string) NodeDef

type WidgetDataset

type WidgetDataset NodeDef

func NewWidgetDataset

func NewWidgetDataset(dtype string, data string) WidgetDataset

type WidgetTemplate

type WidgetTemplate NodeDef

func NewWidgetTemplate

func NewWidgetTemplate(ttype string, name string) WidgetTemplate

type WidgetZone

type WidgetZone NodeDef

func NewWidgetZone

func NewWidgetZone(ztype string, id string) WidgetZone

type WindowContainer

type WindowContainer struct {
	NodeDef
}

func NewWindowContainer

func NewWindowContainer(id string) *WindowContainer

func (*WindowContainer) NewZone

func (c *WindowContainer) NewZone(ztype string, id string) NodeDef

type WindowZone

type WindowZone NodeDef

func NewWindowZone

func NewWindowZone(ztype string, id string) WindowZone

Directories

Path Synopsis
examples
pages/js command
pages/main command
js package is made to load a javascript file and dispatch it on a web server or anything you want to.
js package is made to load a javascript file and dispatch it on a web server or anything you want to.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL