66 *
77 * @constructor
88 * @this {keys}
9- * @param {Array } syms An array of characters that you want the new keyboard to containt (this can be added to later).
9+ * @param {Array } syms An array of characters that you want the new keyboard to contain (this can be added to later).
1010 * @param {Object } options An object containing options for the new keys, this is optional
1111 */
1212 var Keys = function ( syms , opt ) {
6666 }
6767 if ( ! document . getElementById ( self . board . id ) ) {
6868 document . body . appendChild ( self . board ) ;
69+ self . board . addEventListener ( 'selectstart' , function ( event ) { event . preventDefault ( ) ; return false ; } , false ) ;
70+ self . board . addEventListener ( 'select' , function ( event ) { event . preventDefault ( ) ; return false ; } , false ) ;
6971 }
7072
7173 self . symbols . forEach ( function ( key ) {
7274 var button = document . createElement ( 'a' ) ;
73- button . value = key ;
74- button . innerHTML = key ;
75- button . className = "key" ;
76- button . hidefocus = "true" ;
7775
78- /*button.addEventListener('touchstart', function(event){
79- event.preventDefault();
80- }, false);*/
76+ if ( ! key . value && ! key . display ) {
77+ button . value = key ;
78+ button . innerHTML = key ;
79+ } else {
80+ button . value = key . value ;
81+ button . innerHTML = key . display ;
82+ }
8183
82- /*button.addEventListener('mouseup', function(event){
83- event.preventDefault();
84- }, false);*/
84+ button . className = "key" ;
8585
86- var insertAtCaret = function ( el , text ) {
87- var txtarea = el ;
88- var scrollPos = txtarea . scrollTop ;
89- var strPos = 0 ;
90- strPos = txtarea . selectionStart ;
91-
92- var front = ( txtarea . value ) . substring ( 0 , strPos ) ;
93- var back = ( txtarea . value ) . substring ( strPos , txtarea . value . length ) ;
94- txtarea . value = front + text + back ;
95- strPos = strPos + text . length ;
86+ var insertAtCaret = function ( el , text ) {
87+ var txtarea = el ;
88+ var scrollPos = txtarea . scrollTop ;
89+ var strPos = 0 ;
90+ strPos = txtarea . selectionStart ;
91+
92+ var front = ( txtarea . value ) . substring ( 0 , strPos ) ;
93+ var back = ( txtarea . value ) . substring ( strPos , txtarea . value . length ) ;
94+ txtarea . value = front + text + back ;
95+ strPos = strPos + text . length ;
9696 txtarea . selectionStart = strPos ;
97- txtarea . selectionEnd = strPos ;
98- txtarea . focus ( ) ;
99- txtarea . scrollTop = scrollPos ;
100- }
97+ txtarea . selectionEnd = strPos ;
98+ txtarea . focus ( ) ;
99+ txtarea . scrollTop = scrollPos ;
100+ }
101101
102102 button . hitButton = function ( event ) {
103-
104- //event.preventDefault();
105- //self.input.focus();
106- //have to check for normal input vs just content editable at some point
103+ button . removeEventListener ( 'touchend' , button . hitButton , false ) ;
104+ event . preventDefault ( ) ;
107105
108106 if ( self . input . replaceRange ) {
109107 var cursor_temp = self . input . getCursor ( ) ;
@@ -115,28 +113,29 @@ strPos = txtarea.selectionStart;
115113 } else {
116114 insertAtCaret ( self . input , button . value ) ;
117115 }
118- event . preventDefault ( ) ;
119- button . removeEventListener ( 'touchend' , button . hitButton , false ) ;
120116
121- } ;
117+ if ( key . behavior ) {
118+ key . behavior ( self . input )
119+ } ;
122120
123- button . addEventListener ( 'touchstart' , function ( ) {
124- //event.preventDefault();
121+ } ;
122+ var onTouchStart = function ( ) {
125123 button . addEventListener ( 'touchend' , button . hitButton , false ) ;
126- } , false ) ;
124+ } ;
125+
126+ button . addEventListener ( 'touchstart' , onTouchStart , false ) ;
127127 button . addEventListener ( 'touchmove' , function ( ) {
128- //event.preventDefault();
129128 button . removeEventListener ( 'touchend' , button . hitButton , false ) ;
130129 } , false ) ;
131-
132- if ( self . options . debug ) {
133- button . addEventListener ( 'mousedown' , function ( event ) {
134- event . preventDefault ( ) ;
135- } , false ) ;
136- button . addEventListener ( 'mouseup' , function ( event ) {
137- event . preventDefault ( ) ;
138- } , false ) ;
139- button . addEventListener ( 'click' , button . hitButton , false ) ;
130+
131+ button . addEventListener ( 'mousedown' , function ( event ) {
132+ event . preventDefault ( ) ;
133+ } , false ) ;
134+ button . addEventListener ( 'mouseup' , function ( event ) {
135+ event . preventDefault ( ) ;
136+ } , false ) ;
137+ if ( self . options . debug && ! ( ( navigator . userAgent . indexOf ( 'iPhone' ) != - 1 ) || ( navigator . userAgent . indexOf ( 'iPod' ) != - 1 ) || ( navigator . userAgent . indexOf ( 'iPad' ) != - 1 ) ) ) {
138+ button . addEventListener ( 'click' , button . hitButton , false ) ;
140139 }
141140
142141 self . board . appendChild ( button ) ;
@@ -175,11 +174,13 @@ strPos = txtarea.selectionStart;
175174 window . addEventListener ( 'scroll' , function ( ) {
176175 if ( self . input ) {
177176 self . board . style . top = window . pageYOffset + "px" ;
177+ self . board . style . left = window . pageXOffset + "px" ;
178178 }
179179 } , false ) ;
180180 window . addEventListener ( 'resize' , function ( ) {
181181 if ( self . input ) {
182182 self . board . style . top = window . pageYOffset + "px" ;
183+ self . board . style . left = window . pageXOffset + "px" ;
183184 self . board . style . width = window . innerWidth + "px" ;
184185 }
185186 } , false ) ;
@@ -192,13 +193,20 @@ strPos = txtarea.selectionStart;
192193 this . removeClass ( 'visible' ) ;
193194 this . input = false ;
194195 this . board . style . top = "-60px" ;
196+ if ( this . options . onHide ) {
197+ this . options . onHide ( ) ;
198+ }
195199 }
196200
197201 Keys . prototype . show = function ( ) {
198202 var self = this ;
199203 this . addClass ( 'visible' ) ;
200204 self . board . style . top = ( window . pageYOffset ) + "px" ;
205+ self . board . style . left = window . pageXOffset + "px" ;
201206 self . board . style . width = window . innerWidth + "px" ;
207+ if ( self . options . onShow ) {
208+ self . options . onShow ( ) ;
209+ }
202210 }
203211
204212 window . Keys = Keys ;
0 commit comments