mergeInto(LibraryManager.library, { $UIWidgetsCanvasInputModule__postset: 'UIWidgetsCanvasInputModule.init();', $UIWidgetsCanvasInputModule: { init: function() { // create a buffer that stores all inputs so that tabbing // between them is made possible. var inputs = []; // initialize the Canvas Input var UIWidgetsCanvasInput = window.UIWidgetsCanvasInput = function(o) { var self = this; o = o ? o : {}; // setup the defaults self._canvas = o.canvas || null; self._x = o.x || 0; self._y = o.y || 0; self._type = o.type || 'text'; self._onchange = o.onchange || function() {}; self._onsubmit = o.onsubmit || function() {}; self._onkeydown = o.onkeydown || function() {}; self._onkeyup = o.onkeyup || function() {}; self._onfocus = o.onfocus || function() {}; self._onblur = o.onblur || function() {}; self._multiline = o.multiline || false; self._hasFocus = false; self._createHiddenInput(); self.value(o.value || ''); self._inputsIndex = inputs.length - 1; }; // setup the prototype UIWidgetsCanvasInput.prototype = { x: function(data) { var self = this; if (typeof data !== 'undefined') { self._x = data; self._updateHiddenInput(); return; } else { return self._x; } }, y: function(data) { var self = this; if (typeof data !== 'undefined') { self._y = data; self._updateHiddenInput(); return; } else { return self._y; } }, multiline: function(data) { var self = this; if (typeof data !== 'undefined') { if (data === self._multiline) { return; } self._multiline = !!data; self._createHiddenInput(); return; } else { return self._multiline; } }, type: function(data) { var self = this; if (typeof data !== 'undefined') { self._type = data; self._hiddenInput.type = data; return; } else { return self._type; } }, value: function(data) { var self = this; if (typeof data !== 'undefined') { self._hiddenInput.value = data; return; } else { return self._hiddenInput.value; } }, selection: function() { var self = this; return [self._hiddenInput.selectionStart, self._hiddenInput.selectionEnd]; }, onsubmit: function(fn) { var self = this; if (typeof fn !== 'undefined') { self._onsubmit = fn; return self; } else { self._onsubmit(); } }, onkeydown: function(fn) { var self = this; if (typeof fn !== 'undefined') { self._onkeydown = fn; return self; } else { self._onkeydown(); } }, onkeyup: function(fn) { var self = this; if (typeof fn !== 'undefined') { self._onkeyup = fn; return self; } else { self._onkeyup(); } }, focus: function() { var self = this; // only fire the focus event when going from unfocussed if (!self._hasFocus) { self._onfocus(self); // remove focus from all other inputs for (var i=0; i