====== behavior: edit ====== Standard single line input element behavior ===== Elements ===== that have this behavior applied by default (see [[h-smile:built-in-behaviors:master_style_sheet]]): * '''' - inline single line * '''' ===== Attributes ===== that this behavior knows about: * ''value="text"'' - initial value of the input element * ''size=integer'' - determines value of (intrinsic and default) width of the element. * ''maxlength=integer'' - maximum number of characters that this element can contain. * ''filter="filter-expr"'' - limits set of characters allowed to input in the field. ''filter-expr'' string accepts single characters and character ranges. Example: ".@0~9a~zA~Z" - all alpha-numeric characters, '.' and '@'. If you just want to exclude some characters then you can prepend filter with '^' sign. So this ''filter="^.,-"'' filter will allow to input any character except '.', ',' and '-'. * ''novalue="text"'' - if textbox is empty then it shows text provided by the //novalue// attribute. You can style this state by using '':empty'' CSS selector. ===== Events ===== Together with the standard set of events (mouse, keyboard, focus) //behavior: button// generates: * EDIT_VALUE_CHANGED event - value of the element was changed due to user actions. Posted (asynchronous) event. * EDIT_VALUE_CHANGING event - sent when value of the element is about to change. Synchronous event. ===== Value ===== type json::value::V_STRING, reflects current status of internal editing buffer. ===== Special key combinations ===== * LEFT, CTRL+LEFT, SHIFT+LEFT, CTRL+SHIFT+LEFT * RIGHT, CTRL+RIGHT, SHIFT+RIGHT, CTRL+SHIFT+RIGHT * HOME, SHIFT+HOME * END, SHIFT+END * BACKSPACE, ALT+BACKSPACE, CTRL+BACKSPACE * CTRL+A * DELETE, SHIFT+DELETE, CTRL+DELETE * INSERT, SHIFT+INSERT, CTRL+INSERT * CTRL+X * CTRL+V * CTRL+Z * CTRL+(LEFT)SHIFT and CTRL+(RIGHT)SHIFT - for subtrees under dir attribute these key combinations set dir="ltr" and dir="rtl" correspondingly. ===== Methods ===== Edit supports following ''xcall()'' methods (see dom::element::xcall() function): * ''xcall("selectionStart"): int'' - return selection starting position; * ''xcall("selectionEnd"): int'' - return selection ending position; * ''xcall("setSelection", start:int, end:int):void'' - sets position of the selection in the edit field; * ''xcall("selectionText"): string'' - returns selected text; * ''xcall("insertText", text: string):void'' - inserts text at caret position; * ''xcall("appendText", text: string):void'' - appends text; * ''xcall("undo", false): bool'' - returns boolean wrapped into ''json::value'', ''true'' - if //undo// is available and ''false'' if not; * ''xcall("undo", true)'' - executes undo operation; * ''xcall("cut", false): bool'' - returns ''true'' - if //cut// is available and ''false'' if not; * ''xcall("cut", true)'' - executes cut operation - copy selection into the clipboard and deletes selected text; * ''xcall("copy", false): bool'' - returns ''true'' - if //copy// is available and ''false'' if not; * ''xcall("copy", true)'' - executes copy operation - copy selection into the clipboard; * ''xcall("paste", false): bool'' - returns ''true'' - if //paste// is available and ''false'' if not; * ''xcall("paste", true)'' - executes paste operation - pastes content of the the clipboard; * ''xcall("selectAll"): bool'' - returns ''true'' if current selection spans the whole document and ''false'' otherwise. * ''xcall("selectAll", true)'' - selects whole content of the editor; Note that in Sciter you can access these methods simply as: var edit = self.select("input[type='text']"); edit.setSelection(0,10); var selStart = edit.selectionStart;