model

package module
v0.0.77 Latest Latest
Warning

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

Go to latest
Published: Dec 8, 2023 License: MIT Imports: 4 Imported by: 42

README

Estructuras que utilizo con frecuencia en proyectos escritos en Go

ejemplo de uso en un objeto

func MedicalHistory() model.Object {
	return model.Object{
		Name:           "medicalhistory",
		PrincipalFieldsName: []string{"service_name"},
		Fields: []model.Field{
			{Name: "id_medicalhistory", Legend: "id", Input: unixid.InputPK()},
			{Name: "id_patient", Legend: "paciente", Input: unixid.InputPK()},

			{Name: "staff_id", Legend: "Id", Input: unixid.InputPK()},
			{Name: "staff_name", Legend: "Atendido por", Input: input.Text()},
			{Name: "staff_ocupation", Legend: "Especialidad", Input: input.Text()},
			{Name: "staff_area", Legend: "Area", Input: input.Check(Area{})},

			{Name: "service_id", Legend: "Prestación", Input: unixid.InputPK()},

			{Name: "day_attention", Legend: "Dia Atención", Input: input.Date()},
			{Name: "hour_attention", Legend: "Hora", Input: input.Hour(`min="08:15"`, `max="20:15"`)},

			{Name: "reason", Legend: "Motivo Consulta, Servicio o Procedimiento", Input: input.TextArea()},
			{Name: "diagnostic", Legend: "Diagnostico (Descripción)", Input: input.TextArea()},
			{Name: "prescription", Legend: "Prescripción (Conclusion)", Input: input.TextArea()},

			{Name: "last_print_file", Legend: "Ultima Impresión en Archivo", Input: input.Text()},
		},
	}
}

Documentation

Index

Constants

View Source
const INPUT_PATTERN = `input\.(\w+)\([^)]*\)`
View Source
const PREFIX_ID_NAME = "id_"

Variables

This section is empty.

Functions

func GetFieldNamesFrom added in v0.0.68

func GetFieldNamesFrom(struct_in interface{}) (field_names []string)

Types

type AfterClicked added in v0.0.52

type AfterClicked interface {
	// data del objeto que fue cliqueado por el usuario
	UserClicked(data map[string]string)
}

type AfterCreate added in v0.0.46

type AfterCreate interface {
	SetObjectInDomAfterCreate(data ...map[string]string) (err string)
}

type AfterDelete added in v0.0.46

type AfterDelete interface {
	SetObjectInDomAfterDelete(data ...map[string]string) (err string)
}

type AfterRead added in v0.0.49

type AfterRead interface {
	SetObjectInDomAfterRead(data ...map[string]string) (err string)
}

type AfterUpdate added in v0.0.46

type AfterUpdate interface {
	SetObjectInDomAfterUpdate(data ...map[string]string) (err string)
}

type AlternativeValidateAdapter added in v0.0.69

type AlternativeValidateAdapter interface {
	ValidateData(its_new, its_update_or_delete bool, all_data ...map[string]string) (err string)
}

type AppInfo added in v0.0.67

type AppInfo struct {
	App_name         string
	App_version      string
	Business_name    string
	Business_address string
	Business_phone   string
}

type AuthBackendAdapter added in v0.0.77

type AuthBackendAdapter interface {
	// params ej: r *http
	BackendCheckUser(r_http any) (u *User, err string)
	AuthHandlerAdapter
}

type AuthFrontendAdapter added in v0.0.77

type AuthFrontendAdapter interface {
	FrontendCheckUser(result func(u *User, err string))
	AuthHandlerAdapter
}

type AuthHandlerAdapter added in v0.0.77

type AuthHandlerAdapter interface {
	NameOfAuthHandler() string
	UserAuthNumber
}

type BackendBootDataUser added in v0.0.76

type BackendBootDataUser interface {
	BackendLoadBootData(u *User) (out, err string)
}

type BackendHandler added in v0.0.46

type BackendHandler struct {
	BootResponse

	CreateApi
	ReadApi
	UpdateApi
	DeleteApi
}

type BootPageData added in v0.0.74

type BootPageData struct {
	JsonBootActions string
}

type BootResponse added in v0.0.45

type BootResponse interface {
	AddBootResponse(u *User) (r []Response, err string)
}

type CipherAdapter added in v0.0.76

type CipherAdapter interface {
	Encrypt(content []byte) (out, err string)
	Decrypt(content string) (out, err string)
}

type ContainerViewAdapter added in v0.0.70

type ContainerViewAdapter interface {
	BuildContainerView(id, field_name string, allow_skip_completed bool) string
}

todo el contenido html por defecto del objeto

type CreateApi added in v0.0.31

type CreateApi interface {
	Create(u *User, data ...map[string]string) (err string)
}

type CutData added in v0.0.19

type CutData struct {

	// ej Modelo Objeto: usuario := Object{Name: "Usuario",Fields: []Field{
	// 		{Name: "name"}, //0
	// 		{Name: "email"},//1
	// 		{Name: "phone"},//2
	// 	},}
	// ej data normal con todos los campos: {"name":"John Doe","email":"johndoe@example.com","phone":"555"}
	// version recortada Data: {"John Doe","johndoe@example.com","555"}
	// Index Objeto al codificar = {"0:0","1:1","2:2"}
	// ej no mail: {"marcel", "777"}
	// Index al codificar = {"0:0","1:2"}
	Index map[int8]int8 `json:"i"`
	//Data ej en mapa: "Data":[{"id":"222","name":"manzana","valor":"1200"}]
	// ahora: "Data":["222","manzana","1200"]
	Data []string `json:"d"`
}

type CutResponse added in v0.0.19

type CutResponse struct {
	//Action,Object,Module,Message
	//ej: ["create","user","ModuleUsers","ok"]
	CutOptions []string  `json:"o,omitempty"`
	CutData    []CutData `json:"d,omitempty"`
}

func (*CutResponse) CutResponseDecode added in v0.0.21

func (cr *CutResponse) CutResponseDecode(data []map[string]string) (out Response)

type DataBaseAdapter added in v0.0.35

type DataBaseAdapter interface {
	IdHandler
	RunOnClientDB() bool //verdadero corren en el cliente ej browser. por defecto falso corre en el servidor
	// items support in server db: []map[string]string, map[string]string
	CreateObjectsInDB(table_name string, backup_required bool, items any) (err string)

	// from_tables ej: "users,products" or: public.reservation, public.patient"
	// params: map[string]string ej:{
	// LIMIT: 10, 5, 100. note: Postgres y MySQL: "LIMIT 10", SQLite: "LIMIT 10 OFFSET 0" OR "" no limit
	// ORDER_BY: name,phone,address
	// SELECT: "name, phone, address" default *
	// WHERE: "patient.id_patient = reservation.id_patient AND reservation.id_staff = '2'"
	// ARGS: "1,4,33"
	// }
	ReadSyncDataDB(from_tables string, params ...map[string]string) (result []map[string]string, err string)
	//params: callback fun ej: fun([]map[string]string,error)
	// "ORDER_BY": "patient_name", "SORT":"DESC" DEFAULT "ASC"
	ReadAsyncDataDB(p ReadParams, callback func(r ReadResult))

	UpdateObjectsInDB(table_name string, data ...map[string]string) (err string)
	DeleteObjectsInDB(table_name string, data ...map[string]string) (err string)

	CreateTablesInDB(objects []*Object, result func(err string))

	BackupDataBase(callback func(err string))
	ClearAllTableDataInDB(tables ...string) (err string)
}

type DataConverter added in v0.0.68

type DataConverter interface {
	EncodeStruct(in any) (result []byte, err string)
	// &out is a pointer
	DecodeStruct(in []byte, out any) (err string)
	//map_in ej []map[string]string or map[string]string
	EncodeMaps(map_in any, object_name ...string) (out []byte, err string)
	DecodeMaps(in []byte, object_name ...string) (out []map[string]string, err string)

	EncodeResponses(requests ...Response) (out []byte, err string)
	DecodeResponses(data []byte) (out []Response, err string)
}

si nombre del objeto no se ingresa se codifica a json de forma normal

type DeleteApi added in v0.0.31

type DeleteApi interface {
	Delete(u *User, data ...map[string]string) (err string)
}

type DomAdapter added in v0.0.47

type DomAdapter interface {
	BuildFrontendUI() (err string)
	InnerHTML(html_content string, o *Object)
	InsertAfterBegin(html_content string, o *Object)
	InsertBeforeEnd(html_content string, o *Object)
	// querySelector ej: "a[name='xxx']"
	ElementClicking(querySelector string) (err string)
	//ej: querySelector "meta[name='JsonBootTests']"
	// get_content: "content"
	SelectContent(querySelector, get_content string) (content, err string)

	CallFunction(functionName string, args ...any) (err string)
}

type FetchAdapter added in v0.0.68

type FetchAdapter interface {
	//method ej: GET,POST
	// endpoint ej: http://localhost/upload
	// object ej: imagen
	// body_rq any ej: []map[string]string, map[string]string
	SendOneRequest(method, endpoint, object string, body_rq any, response func(result []map[string]string, err string))
	// only POST method
	SendAllRequests(endpoint string, body_rq []Response, response func(result []Response, err string))
}

type Field

type Field struct {
	// si el campo comienza com id_ se considera como único y perteneciente a una tabla específica ej: id_user su tabla es user
	// otros ej: id_usuario, apellido, address, city etc
	Name          string
	Legend        string //como se mostrara al usuario el campo en el encabezado ej: "name" por "Nombre Usuario"
	SourceTable   string // tabla origen ej: patient,user,product
	NotRenderHtml bool   // si no se necesita en formulario html

	*Input

	SkipCompletionAllowed bool //se permite que el campo no este completado. por defecto siempre sera requerido

	Unique                   bool //campo único e inalterable en db
	NotRequiredInDB          bool // campo no requerido en base de datos al crear tabla
	Encrypted                bool // si estará encriptado su almacenamiento o no
	NotClearValueOnFormReset bool // no borrar el valor del campo al resetear el formulario
}

func (Field) IsPrimaryKey added in v0.0.35

func (f Field) IsPrimaryKey(o *Object) bool

type FileApi added in v0.0.33

type FileApi interface {
	// FileAddUploadApi(h *Handlers, source *Object, file_settings any) error
	//backend file_request ej: r *http.Request, w http.ResponseWriter
	//frontend file_request ej: blob file js.Value
	FileUpload(object_name, area_file string, file_request ...any) (out []map[string]string, err string)
	//params ej: id:123
	FilePath(params map[string]string) (file_path, area string, err string)
}

type FileDiskRW added in v0.0.68

type FileDiskRW interface {
	FileGet(path string) (item any, err string)

	FileDelete(path string) (err string)
}

type FormAdapter added in v0.0.66

type FormAdapter interface {
	FormReset(object_name string) (err string)
	FormAutoFill(object_name string) (err string)
	//validate valida después de completar,auto_grow hacer crecer los campos según el contenido
	FormComplete(object_name string, data map[string]string, validate, auto_grow bool) (err string)
}

type FrontendBootDataUser added in v0.0.76

type FrontendBootDataUser interface {
	FrontendLoadBootData(data string) (err string)
}

type Handlers added in v0.0.60

func (*Handlers) AddModules added in v0.0.68

func (h *Handlers) AddModules(new_modules ...*Module)

func (*Handlers) AddObjects added in v0.0.68

func (h *Handlers) AddObjects(new_objects ...*Object)

func (Handlers) CheckInterfaces added in v0.0.68

func (h Handlers) CheckInterfaces(pkg_name string, struct_in interface{}) (err string)

func (Handlers) GetModuleByName added in v0.0.68

func (h Handlers) GetModuleByName(module_name string) (m *Module, err string)

func (Handlers) GetModules added in v0.0.68

func (h Handlers) GetModules() []*Module

func (Handlers) GetObjectByName added in v0.0.68

func (h Handlers) GetObjectByName(object_name string) (o *Object, err string)

func (Handlers) GetObjects added in v0.0.68

func (h Handlers) GetObjects() []*Object

type HtmlAdapter added in v0.0.70

type HtmlAdapter interface {
	// retorna un elemento html del tipo js.Value
	GetHtmlModule(module_name string) (jsValue any, err string)
}

type Icon added in v0.0.28

type Icon struct {
	Id      string   //ej: icon-search, icon-btn-save, icon-btn-new
	ViewBox string   //ej: "0 0 16 16", "0 0 448 512"
	Paths   []string //ej: m11.51 11..,m7.051..,m3.267 15...
}

type IdHandler added in v0.0.56

type IdHandler interface {
	GetNewID() string
}

type Input added in v0.0.5

type Input struct {
	InputName string

	Minimum int
	Maximum int

	Tag
	ItemViewAdapter
	ResetViewAdapter
	Validate

	TestData
}

type ItemViewAdapter added in v0.0.70

type ItemViewAdapter interface {
	BuildItemsView(all_data ...map[string]string) (html string)
}

type Logger added in v0.0.60

type Logger interface {
	// retorno una interfaz solo para simplificar funciones de tipo syscall/js
	Log(message ...any) interface{}
}

type MessageAdapter added in v0.0.69

type MessageAdapter interface {
	UserMessage(message ...any) interface{}
}

type Module

type Module struct {
	//nombre modulo ej: chat,patient,user
	ModuleName string
	//Titulo que vera el usuario ej: "Modulo Fotografía"
	Title string
	// id icono para utilizar en sprite svg ej: icon-info
	IconID string

	//interfaz usuario modulo
	UI

	//areas soportadas por el modulo ej: 'a','t','x'
	Areas map[string]string
	// objetos o componentes que contiene el modulo ej: patient,user,datalist,search....
	Objects []*Object

	// tipo de entradas usadas en el modulo
	Inputs []*Input

	*Handlers
}

func (*Module) AddInputs added in v0.0.56

func (m *Module) AddInputs(new_inputs []*Input, from string) (err string)

from ej: file, user

func (Module) ModuleSupports added in v0.0.74

func (m Module) ModuleSupports(area string) bool

type ModuleHandler added in v0.0.68

type ModuleHandler interface {
	GetModules() []*Module
	GetModuleByName(module_name string) (m *Module, err string)
}

type NotifyBootData added in v0.0.50

type NotifyBootData interface {
	NotifyBootDataIsLoaded()
}

type NotifyFormComplete added in v0.0.74

type NotifyFormComplete interface {
	NotifyFormIsOK()
}

type Object

type Object struct {
	// ej: module.client, client.search_footer,user.datalist
	ObjectName string
	Table      string //tabla origen db ej: users

	PrincipalFieldsName []string //campos mas representativos ej: name, address, phone
	NoAddObjectInDB     bool
	Fields              []Field //campos

	*Module // módulo origen

	BackHandler BackendHandler

	FrontHandler FrontendHandler

	PrinterHandler

	FormData map[string]string // data temporal formulario

	AlternativeValidateAdapter
}

func (Object) CallJsFunctionObject added in v0.0.70

func (o Object) CallJsFunctionObject(func_name string, enable bool, params ...map[string]interface{}) (err string)

func (Object) ClickMenuModule added in v0.0.71

func (o Object) ClickMenuModule() (err string)

func (Object) ClickObjectElement added in v0.0.71

func (o Object) ClickObjectElement(query_element string) (err string)

func (Object) ClickingID added in v0.0.70

func (o Object) ClickingID(id string) (err string)

func (Object) Columns

func (o Object) Columns() (columns []string)

func (Object) DataDecode added in v0.0.19

func (o Object) DataDecode(cut_data ...CutData) (decoded_data []map[string]string, err string)

func (Object) DataEncode added in v0.0.19

func (o Object) DataEncode(all_data ...map[string]string) (out []CutData, err string)

DataEncode quita los nombres de los campos de la data según modelo del objeto

func (Object) FieldExist added in v0.0.16

func (o Object) FieldExist(field_name string) (Field, bool)

func (Object) FieldsToFormValidate added in v0.0.66

func (o Object) FieldsToFormValidate() (fiels_out []Field)

func (Object) FilterRemoveFields

func (o Object) FilterRemoveFields(namesToRemove ...string) (fiels_out []Field)

func (Object) GetFieldsByNames added in v0.0.50

func (o Object) GetFieldsByNames(required_names ...string) (fiels_out []Field, err string)

func (Object) GetID

func (o Object) GetID(data_search map[string]string) string

func (Object) GetRepresentativeTextField

func (o Object) GetRepresentativeTextField(data_element map[string]string) (values string)

func (Object) GetTablesNames added in v0.0.50

func (o Object) GetTablesNames() (out []string)

func (Object) JoinFieldNames added in v0.0.48

func (o Object) JoinFieldNames(add_prefix_table_name bool) (out string)

ej: id_patient,patient_name,patient_run - add_prefix_table_name: true = patient.id_patient,patient.patient_name,patient.patient_run

func (Object) MainName

func (o Object) MainName() string

func (Object) OnlyRequiredDbFieldsThisObject added in v0.0.63

func (o Object) OnlyRequiredDbFieldsThisObject() (db_field []Field)

solo campos requeridos en la base de datos. NOTA: puntero []*Field no funciona con slice

func (Object) PrimaryKeyName

func (o Object) PrimaryKeyName(options ...string) string

ej: "id_client", options: "add_prefix_table_name" = "client.id_client"

func (Object) RenderFields

func (o Object) RenderFields() (fiels_out []Field)

func (Object) RequiredFields

func (o Object) RequiredFields() (fiels_out []Field)

func (*Object) ResetFormValues added in v0.0.74

func (o *Object) ResetFormValues(reset_input_view bool) (err string)

setear valores del formulario

func (Object) Response added in v0.0.35

func (o Object) Response(data []map[string]string, options ...string) Response

options ej: update,delete,"mensaje a enviar" default action: create

func (Object) TestData added in v0.0.39

func (o Object) TestData(required_objects int, skip_id, wrong_data bool) (out []map[string]string, err string)

func (Object) ValidateData added in v0.0.16

func (o Object) ValidateData(its_new, its_update_or_delete bool, all_data ...map[string]string) (err string)

validar data objeto

func (Object) Where added in v0.0.50

func (o Object) Where(data map[string]string) (out string)

ej: reservation.id_patient = patient.id_patient AND reservation.id_staff = '1635574887' AND reservation.reservation_day = '29'

type ObjectsHandler added in v0.0.68

type ObjectsHandler interface {
	AddObjects(o ...*Object)
	GetObjects() []*Object
	GetObjectByName(object_name string) (o *Object, err string)
}

type Package added in v0.0.35

type Package struct {
	SkipMeInResponse bool     `json:"-"` //  saltarme al difundir
	Recipients       []string `json:"-"` // lista de ip, token o ids según app para el reenvió al finalizar solicitud
	TargetArea       bool     `json:"-"` // si es falso el destino por defecto es publico de lo contrario sera para todos quines tengan la misma area del usuario solicitante
	Response
}

type Page added in v0.0.33

type Page struct {
	StyleSheet string // url ej style.css

	AppName    string
	AppVersion string

	SpriteIcons string

	Menu string

	UserName string
	UserArea string
	Message  string

	Modules string

	Script string // ej main.js

	// JsonBootActions string //index ej <meta name="JsonBootActions" content="{{.JsonBootActions}}">
	// JsonBootTests   string
	BootPageData
}

index.html ej: {{.StyleSheet}} {{.AppName}} {{.AppVersion}} {{.SpriteIcons}} {{.Menu}} {{.Message}} {{.UserName}} {{.UserArea}} {{.Modules}} {{.Script}} {{.Data}}

type Permission

type Permission struct {
	Read  bool
	Write bool
}

type PrinterHandler added in v0.0.66

type PrinterHandler interface {
	PrintFormObject()
}

type ReadApi added in v0.0.31

type ReadApi interface {
	Read(u *User, data ...map[string]string) (out []map[string]string, err string)
}

type ReadData added in v0.0.69

type ReadData interface {
	ReadByID(id string) (out []map[string]string, err string)
}

type ReadParams added in v0.0.77

type ReadParams struct {
	FROM_TABLE      string
	ID              string   // unique search
	WHERE           []string //
	SEARCH_ARGUMENT string
	ORDER_BY        string
	SORT_DESC       bool //default ASC
	RETURN_ANY      bool // default string return []map[string]string, any = []map[string]interface{}

}

type ReadResult added in v0.0.77

type ReadResult struct {
	DataString []map[string]string
	DataAny    []map[string]any
	Error      string
}

type Request

type Request struct {
	//usuario que ejecuta la solicitud
	*User
	// paquetes de solicitud y respuesta
	Packages []Package
}

type ResetViewAdapter added in v0.0.70

type ResetViewAdapter interface {
	ResetAdapterView() (err string)
}

type ResetViewObjectAdapter added in v0.0.70

type ResetViewObjectAdapter interface {
	ResetObjectView() (err string)
}

type Response

type Response struct {
	Action  string              `json:"a,omitempty"` //acción a realizar con la solicitud: create, read, update, delete o error
	Object  string              `json:"o,omitempty"` //nombre de la tabla u objeto controlador hacia donde va la solicitud
	Message string              `json:"g,omitempty"` //mensaje para el usuario de la solicitud
	Data    []map[string]string `json:"d,omitempty"` //data entrada y respuesta json
}

type Responses added in v0.0.72

type Responses struct {
	NoCut []Response    `json:"n,omitempty"` // normal
	Cut   []CutResponse `json:"c,omitempty"` //re cortada
}

type SourceData added in v0.0.44

type SourceData interface {
	SourceData() map[string]string
}

type Tag added in v0.0.26

type Tag interface {
	HtmlName() string
	ContainerViewAdapter
}

type TemplateModuleConfig added in v0.0.74

type TemplateModuleConfig struct {
	Module *Module
	// ej:	`<div class="target-module">
	// 	<select name="select">
	// 		<option value="value1">Value 1</option>
	// 		<option value="value2" selected>Value 2</option>
	// 	</select>
	// </div>`
	HeaderInputTarget string
	Form              *Object
	AsideList         ContainerViewAdapter
	ButtonLogin       bool
	ButtonPrint       bool
}

type TestData added in v0.0.10

type TestData interface {
	GoodTestData() (out []string)
	WrongTestData() (out []string)
}

type ThemeAdapter added in v0.0.47

type ThemeAdapter interface {
	// MenuButtonTemplate ej: <li class="navbar-item"><a href="#` + module_name + `" tabindex="` + index + `" class="navbar-link" name="` + module_name + `">
	// <svg aria-hidden="true" focusable="false" class="fa-primary"><use xlink:href="#` + icon_id + `" /></svg>
	// <span class="link-text">` + title + `</span></a></li>
	MenuButtonTemplate(module_name, index, icon_id, title string) string
	MenuClassName() string // ej: .menu-container
	MenuItemClass() string // ej: navbar-item

	ModuleClassName() string //ej: slider_panel

	ModuleTemplate(*TemplateModuleConfig) string

	FunctionMessageName() string // ej: ShowMessageToUser
	// ej query: "div#"+o.ModuleName+" [data-id='"+o.ObjectName+"']"
	QuerySelectorMenuModule(module_name string) string
	QuerySelectorModule(module_name string) string
	QuerySelectorObject(module_name, object_name string) string
}

type TimeAdapter added in v0.0.47

type TimeAdapter interface {
	TimeNow
	TimeWeek
	UnixTimeHandler

	//esperar en milliseconds ej: 500, 2000 ..
	WaitFor(milliseconds int, callback func())

	// new_date ej: 2003-11-22 o "" para volver al estado normal
	SetDate(new_date string)
}

type TimeNow added in v0.0.52

type TimeNow interface {
	// layout ej: 2006-01-02
	ToDay(layout string) string
}

type TimeWeek added in v0.0.52

type TimeWeek interface {
	//date ej: 2006-01-02,  0 para Domingo, 1 para Lunes, etc.
	WeekDayNumber(date_in string) (n int, err string)
}

type UI added in v0.0.26

type UI interface {
	UserInterface(options ...string) string
}

type UnixTimeHandler added in v0.0.56

type UnixTimeHandler interface {
	UnixNano() int64
}

ej: time.Now()

type UpdateApi added in v0.0.31

type UpdateApi interface {
	Update(u *User, data ...map[string]string) (err string)
}

type User

type User struct {
	Token          string // token de sesión solicitante
	Id             string // id usuario
	Ip             string
	Name           string
	Area           string //"" sin area.. un que byte y uint8 son lo mismo en go la idea que aca sea un valor de carácter ej: a,s,p...
	AccessLevel    string // aquí valor numérico 0 a 255
	LastConnection string //time.Time

}

type UserAuthNumber added in v0.0.51

type UserAuthNumber interface {
	// ej: 1 or 2 or 34 or 400.....
	UserAuthNumber() (number string, err string)
}

type Validate added in v0.0.5

type Validate interface {
	//options html ej: data-option="ch_doc"
	ValidateField(data_in string, skip_validation bool, options ...string) (err string)
}

type ViewAdapter added in v0.0.70

type ViewAdapter interface {
	NameViewAdapter() string
	ContainerViewAdapter
	ItemViewAdapter
	ResetViewAdapter
}

Jump to

Keyboard shortcuts

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