-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathInput.coffee
126 lines (108 loc) · 2.69 KB
/
Input.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
goog.require 'wzk.ui.InputRenderer'
goog.require 'wzk.ui.InputSearchRenderer'
goog.require 'goog.dom.TagName'
goog.require 'goog.style'
goog.require 'wzk.dom.Dom'
class wzk.ui.Input extends goog.ui.Control
###*
@enum {string}
###
@EventType:
VALUE_CHANGE: 'VALUE_CHANGE'
constructor: (content, renderer = wzk.ui.InputRenderer.getInstance(), dom = null) ->
super(content, renderer, dom)
@setHandleMouseEvents(false)
@setAllowTextSelection(true)
@setContent('') unless content?
@wrapperEl = null
@placeholder = ''
###*
@param {string|null} placeholder
###
setPlaceholder: (@placeholder) ->
@placeholder = '' unless @placeholder?
@getElement().setAttribute('placeholder', String(@placeholder)) if @getElement()
###*
@return {string|null}
###
getPlaceholder: ->
@placeholder
###*
@override
###
setVisible: (visible, force = false) ->
goog.style.setElementShown @wrapperEl, visible if @wrapperEl
super visible, force
###*
@param {*} val
###
setValue: (val) ->
str = String val
@setContent str
@getElement().value = str
###*
@override
###
setContent: (content) ->
@setContentInternal content
@dispatchEvent new goog.events.Event(wzk.ui.Input.EventType.VALUE_CHANGE, @)
undefined
###*
@return {string}
###
getValue: ->
@getElement().value
clear: ->
@setValue ''
###*
@override
###
renderBefore: (sibling) ->
super(sibling)
@fixInternalElement()
###*
@override
###
render: (parent) ->
super(parent)
@fixInternalElement()
goog.events.listen @getElement(), goog.events.EventType.KEYUP, @handleInputChange
undefined
###*
@param {goog.events.Event=} e
###
handleInputChange: (e) =>
if e?.target?.value?
@setContent e.target.value
else
@setContent @getElement().value
###*
@protected
An internal element should not be always Input (see wzk.ui.InputSearchRenderer)
Finds an appropriate input and sets as the internal element if it's necessary
###
fixInternalElement: ->
return if @isInput(@getElement())
@wrapperEl = @getElement()
if @isInput(@wrapperEl)
@setElementInternal(@wrapperEl)
else
@setElementInternal(@dom_.getChildren(@getElement())[0])
###*
@protected
@param {Element} el
@return {boolean}
###
isInput: (el) ->
el.tagName is String(goog.dom.TagName.INPUT)
###*
@param {boolean} required
###
makeRequired: (required = true) ->
@getElement().required = if required then 'required' else undefined
###*
Exits the DOM and remove the element from DOM
###
destroy: ->
@exitDocument()
@dom.removeNode @getElement()