UNPKG

ns-components-angular

Version:

Angular Wrapper Components for NSComponents

2 lines (1 loc) 33.4 kB
export declare const NSNumericTextBoxCode = "var nsModuleExport = function(root,name,prototype)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\tmodule.exports[name] = prototype;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\tdefine(name,[], function () {return prototype;});\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\texports[name] = prototype;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\troot[name] = prototype;\r\n\t\t}\r\n\t};var nsIsWeb = function(root)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};if(!nsIsWeb())\r\n\t\t{\r\nvar nsutilRef = require('./nsUtil.min.js');\r\nvar NSUtil = nsutilRef.NSUtil;\r\nvar nscontainerbaseRef = require('./nsContainerBase.min.js');\r\nvar nsExtendPrototype = nscontainerbaseRef.nsExtendPrototype;\r\nvar NSContainerBase = nscontainerbaseRef.NSContainerBase;\r\nvar svgRef = require('./nsSVG.min.js');\r\nvar NSSvg = svgRef.NSSvg;\r\nvar NSSvgShapes = svgRef.NSSvgShapes;\r\nvar plugginsRef = require('./nsPluggins.min.js');\r\nvar nsTextEditor = plugginsRef.nsTextEditor;\r\nvar nsTextAreaEditor = plugginsRef.nsTextAreaEditor;\r\nvar NSCellSelection = plugginsRef.NSCellSelection;\r\nvar NSTableCellNavigator = plugginsRef.NSTableCellNavigator;\r\nvar dateutilRef = require('./nsDateUtil.min.js');\r\nvar NSDateUtil = dateutilRef.NSDateUtil;\r\n\r\n\t\t}\r\n \"use strict\"; \r\nvar NSNumericTextBox = (function()\r\n{\r\n\tfunction NSNumericTextBox(setting) \r\n\t{\r\n\t\tthis.util = new NSUtil();\r\n\t\t\r\n\t\tthis.__setting = setting;\r\n\t\tthis.__config = null;\r\n\t\t\r\n\t\tthis.__id = null;\r\n\t\tthis.__parentNode = null;\r\n\t\tthis.__spanContainer = null;\r\n\t\tthis.__spanTextBoxParent = null;\r\n\t\tthis.__currentValue = null;\r\n\t\tthis.__interval = null;\r\n\t\tthis.__hasClickedSpin = false;\r\n\t\tthis.__typing = false;\r\n\t\tthis.__observer = null;\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.setValue = function(value,fireEvent) \r\n\t{\r\n\t\tfireEvent = this.util.isUndefined(fireEvent) ? true : Boolean.parse(fireEvent);\r\n\t\tif(this.util.isUndefinedOrNull(value))\r\n\t\t{\r\n\t\t\tvar textBox = this.__config.input;\r\n\t\t\ttextBox.value = null;\r\n\t\t\tthis.__oldValue = this.__currentValue;\r\n\t\t\tthis.__currentValue = null;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.__updateValue(value,false,fireEvent);\r\n\t\t\tthis.__setFormattedValue();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.getValue = function() \r\n\t{\r\n\t\treturn (this.__currentValue || 0);\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.getFormattedValue = function() \r\n\t{\r\n\t\treturn this.__config.input.value;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.setTheme = function(theme) \r\n\t{\r\n\t\tif(theme)\r\n\t\t{\r\n\t\t\tthis.util.removeStyleClass(this.__spanContainer, \"nsNumericTextBoxContainer\" + this.__config.theme);\r\n\t\t\tthis.__config.theme = theme;\r\n\t\t\tthis.util.addStyleClass(this.__spanContainer, \"nsNumericTextBoxContainer\" + this.__config.theme);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.setDisabled = function(isDisabled) \r\n\t{\r\n\t\tvar textBox = this.__config.input;\r\n\t\ttextBox.disabled = isDisabled;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.setReadonly = function(isReadonly) \r\n\t{\r\n\t\tvar textBox = this.__config.input;\r\n\t\ttextBox.readOnly = isReadonly;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.remove = function() \r\n\t{ \r\n\t\tif(this.__spanContainer && this.__spanContainer.parentNode == this.__parentNode)\r\n\t\t{\r\n\t\t\tthis.__spanTextBoxParent.removeChild(this.__config.input);\r\n\t\t\tthis.__parentNode.insertBefore(this.__config.input,this.__spanContainer);\r\n\t\t\tthis.__parentNode.removeChild(this.__spanContainer);\r\n\t\t}\r\n\t\tthis.__removeTextBoxEvents();\r\n\t\tthis.util.removeStyleClass(this.__config.input,\"nsNumericTextBox\");\r\n\t\tif(this.__observer)\r\n\t\t{\r\n\t\t\tthis.__observer.disconnect();\r\n\t\t\tthis.__observer = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__initialize = function()\r\n\t{\r\n\t\tif(this.__setting)\r\n\t\t{\r\n\t\t\tthis.__objType = {\"num\":{symbol:\"\",format:\"%v\"},\r\n\t\t\t\t\t\t\t \"per\":{symbol:\"%\",format:\"%v%s\"},\r\n\t\t\t\t\t\t\t \"usd\":{symbol:\"$\",format:\"%s%v\"},\r\n\t\t\t\t\t\t\t \"pound\":{symbol:\"\u00A3\",format:\"%s%v\"},\r\n\t\t\t\t\t\t\t \"euro\":{symbol:\"\\u20AC\",format:\"%v%s\"},//https://www.fileformat.info/info/unicode/char/20ac/index.htm\r\n\t\t\t\t\t\t\t \"yen\":{symbol:\"\\u00A5\",format:\"%s%v\"}//https://www.fileformat.info/info/unicode/char/a5/index.htm\r\n\t\t\t\t\t\t\t };\r\n\t\t\tthis.__config = {\r\n\t\t\t\t\tinput: this.__setting[\"input\"],\r\n\t\t\t\t\ttype: this.__setting[\"type\"] || \"num\",\r\n\t\t\t\t\tenableDecimals: this.util.isUndefinedOrNull(this.__setting[\"enableDecimals\"]) ? true : Boolean.parse(this.__setting[\"enableDecimals\"]),\r\n\t\t\t\t\tdecimals: this.__setting[\"decimals\"] || 2,\r\n\t\t\t\t\tgrouping: this.__setting[\"grouping\"] || 3,\r\n\t\t\t\t\tmin: this.__setting[\"min\"],\r\n\t\t\t\t\tmax: this.__setting[\"max\"],\r\n\t\t\t\t\tvalue: this.__setting[\"value\"],\r\n\t\t\t\t\tenableThousand: this.util.isUndefinedOrNull(this.__setting[\"enableThousand\"]) ? true : Boolean.parse(this.__setting[\"enableThousand\"]),\r\n\t\t\t\t\tdecimalSeparator: this.__setting[\"decimalSeparator\"] || \".\",\r\n\t\t\t\t\tthousandSeparator: this.__setting[\"thousandSeparator\"] || \",\",\r\n\t\t\t\t\tenableHover: this.util.isUndefinedOrNull(this.__setting[\"enableHover\"]) ? true : Boolean.parse(this.__setting[\"enableHover\"]),\r\n\t\t\t\t\ttheme: this.__setting[\"theme\"] || \"White\",\r\n\t\t\t\t\tcustomClass: this.__setting[\"customClass\"] || {},\r\n\t\t\t\t\tenableSpinner: this.util.isUndefinedOrNull(this.__setting[\"enableSpinner\"]) ? true : Boolean.parse(this.__setting[\"enableSpinner\"]),\r\n\t\t\t\t\tincrementerProp: this.__setting[\"incrementerProp\"] || {label:\"Increase Value\",iconHtml:\"\"},\r\n\t\t\t\t\tdecrementerProp: this.__setting[\"decrementerProp\"] || {label:\"Decrease Value\",iconHtml:\"\"},\r\n\t\t\t\t\tstep: this.__setting[\"step\"] || 1,\r\n\t\t\t\t\tformat: this.__setting[\"format\"],\r\n\t\t\t\t\tenableRangeRoundOf: this.util.isUndefinedOrNull(this.__setting[\"enableRangeRoundOf\"]) ? true : Boolean.parse(this.__setting[\"enableRangeRoundOf\"]),\r\n\t\t\t\t\tcustomFormatSpecifier: this.__setting[\"customFormatSpecifier\"] || \"#\",\r\n\t\t\t\t};\r\n\t\t\tif(!this.__config.input)\r\n\t\t\t{\r\n\t\t\t\tthis.util.throwNSError(\"NSNumericTextBox\",\"Input property is not valid\");\r\n\t\t\t}\r\n\t\t\tif(!this.__config.enableThousand)\r\n\t\t\t{\r\n\t\t\t\tthis.__config.thousandSeparator = \"\";\r\n\t\t\t}\r\n\t\t\tif(!this.__config.enableDecimals)\r\n\t\t\t{\r\n\t\t\t\tthis.__config.decimals = 0;\r\n\t\t\t}\r\n\t\t\tthis.__createElement();\r\n\t\t\tvar value = this.__config.value;\r\n\t\t\tif(!this.util.isUndefinedOrNull(value))\r\n\t\t\t{\r\n\t\t\t\tthis.setValue(value);\r\n\t\t\t}\r\n\t\t\tif(this.__config.type == \"custom\" && this.util.isUndefinedOrNull(this.__setting[\"enableRangeRoundOf\"]))\r\n\t\t\t{\r\n\t\t\t\tthis.__config.enableRangeRoundOf = false;\r\n\t\t\t}\r\n\t\t\tthis.setTheme(this.__config.theme);\r\n\t\t\tthis.__setDisabledOrReadonly();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__createElement = function() \r\n\t{\r\n\t\tthis.__parentNode = this.__config.input.parentNode;\r\n\t\tvar id = this.__getID();\r\n\t\tthis.__spanContainer = this.util.createElement(\"span\", id + \"Container\", \"nsNumericTextBoxContainer\");\r\n\t\t\r\n\t\tthis.__applyCustomClass(this.__spanContainer,\"outerContainer\");\r\n\t\tthis.__spanTextBoxParent = this.util.createElement(\"span\", id + \"Parent\", \"nsNumericTextBoxParent\");\r\n\t\tthis.__applyCustomClass(this.__spanTextBoxParent,\"textBoxContainer\");\r\n\t\tthis.__spanContainer.appendChild(this.__spanTextBoxParent);\r\n\t\tthis.__parentNode.insertBefore(this.__spanContainer,this.__config.input);\r\n\t\tthis.__spanTextBoxParent.appendChild(this.__config.input);\r\n\t\tthis.util.addStyleClass(this.__config.input,\"nsNumericTextBox\");\r\n\t\tif(this.__config.enableHover)\r\n\t\t{\r\n\t\t\tthis.util.addEvent(this.__spanTextBoxParent,\"mouseenter\",this.__textBoxParentEventHandler.bind(this,true));\r\n\t\t\tthis.util.addEvent(this.__spanTextBoxParent,\"mouseleave\",this.__textBoxParentEventHandler.bind(this,false));\r\n\t\t}\r\n\t\tthis.__addTextBoxEvents();\r\n\t\tif(this.__config.enableSpinner)\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(this.__spanTextBoxParent,\"nsNumericTextBoxParentWithSpinner\");\r\n\t\t\tthis.__createSpinner(id);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__createSpinner = function(id) \r\n\t{\r\n\t\tvar incrementerProp = this.__config.incrementerProp;\r\n\t\tvar decrementerProp = this.__config.decrementerProp;\r\n\t\tthis.__spanSpinnerContainer = this.util.createElement(\"span\", id + \"SpinnerContainer\", \"nsNumericTextBoxSpinnerContainer\");\r\n\t\tthis.__applyCustomClass(this.__spanSpinnerContainer,\"spinContainer\");\r\n\t\tvar item = this.__createSpecificSpinner(\"Inc\",incrementerProp.label,\"spinIncrement\");\r\n\t\tthis.__spanIncSpinContainer = item.parent;\r\n\t\tthis.__spanIncSpin = item.child;\r\n\t\titem = this.__createSpecificSpinner(\"Dec\",decrementerProp.label,\"spinDecrement\");\r\n\t\tthis.__spanDecSpinContainer = item.parent;\r\n\t\tthis.__spanDecSpin = item.child;\r\n\t\tthis.__spanTextBoxParent.appendChild(this.__spanSpinnerContainer);\r\n\t\tthis.util.addEvent(this.__spanSpinnerContainer,\"mouseleave\",this.__spinnerContainerMouseOutHandler.bind(this));\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__createSpecificSpinner = function(func,title,customClass) \r\n\t{\r\n\t\tvar spanParent = this.util.createElement(\"span\", null,\"nsNumericTextBoxSpinContainer \" + \"nsNumericTextBox\" + func + \"SpinnerContainer\");\r\n\t\tspanParent.setAttribute(\"unselectable\",\"on\");\r\n\t\tspanParent.setAttribute(\"title\",title);\r\n\t\tspanParent.setAttribute(\"aria-label\",title);\r\n\t\tvar spanSpin = this.util.createElement(\"span\", null,\"nsNumericTextBoxSpinner \" + \"nsNumericTextBox\" + func + \"Spinner\");\r\n\t\tspanSpin.setAttribute(\"unselectable\",\"on\");\r\n\t\tthis.__applyCustomClass(spanSpin,customClass);\r\n\t\tspanParent.appendChild(spanSpin);\r\n\t\tthis.__spanSpinnerContainer.appendChild(spanParent);\r\n\t\tvar mouseDownHandler = this.__spinnerMouseDownHandler.bind(this,spanParent,spanSpin,func);\r\n\t\tvar mouseOutHandler = this.__spinnerMouseOutHandler.bind(this,spanParent,spanSpin,func);\r\n\t\tthis.util.addEvent(spanParent,\"mousedown\",mouseDownHandler);\r\n\t\tthis.util.addEvent(spanParent,\"mouseup\",mouseOutHandler);\r\n\t\tthis.util.addEvent(spanParent,\"mouseleave\",mouseOutHandler);\r\n\t\treturn {parent: spanParent,child:spanSpin};\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__spinnerMouseDownHandler = function(spinParent,spin,func,event) \r\n\t{\r\n\t\tif(event)\r\n\t\t{\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t\tthis.__hasClickedSpin = true;\r\n\t\tthis.__spinHandler(func);\r\n\t\tclearTimeout(this.__interval);\r\n\t\tthis.util.addStyleClass(spinParent,\"nsNumericTextBoxSpinnerSelected\");\r\n\t\tvar self = this;\r\n\t\tthis.__interval = setTimeout(function(){self.__spinnerMouseDownHandler.call(self,spinParent,spin,func,event);}, 200);\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__spinnerMouseOutHandler = function(spinParent,spin,func,event) \r\n\t{\r\n\t\tclearTimeout(this.__interval);\r\n\t\tthis.__interval = null;\r\n\t\tthis.util.removeStyleClass(spinParent,\"nsNumericTextBoxSpinnerSelected\");\r\n\t\tif(event)\r\n\t\t{\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__spinnerContainerMouseOutHandler = function(event) \r\n\t{\r\n\t\tthis.__hasClickedSpin = false;\r\n\t\tvar textBox = this.__config.input;\r\n\t\ttextBox.blur();\r\n\t\tthis.__blurHandler(null);\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__spinHandler = function(func) \r\n\t{\r\n\t\tif(this.__config.enableSpinner && !this.__isDisabled())\r\n\t\t{\r\n\t\t\tvar step = Number(this.__config.step);\r\n\t\t\tstep = isNaN(step) ? 1 : step;\r\n\t\t\tstep = (func == \"Inc\") ? step : (-1 * step);\r\n\t\t\tthis.__spin(step);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__textBoxParentEventHandler = function(isMouseOver,event) \r\n\t{\r\n\t\tisMouseOver ? this.util.addStyleClass(this.__spanTextBoxParent,\"nsNumericTextBoxParentHover\") : this.util.removeStyleClass(this.__spanTextBoxParent,\"nsNumericTextBoxParentHover\");\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__keyDownHandler = function(event) \r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tvar inputCode = (event.which) ? event.which : event.keyCode;\r\n\t\tvar keyCode = this.util.KEYCODE;\r\n\t\tswitch(inputCode)\r\n\t\t{\r\n\t\t\tcase keyCode.UP:\r\n\t\t\t\tthis.__spinHandler(\"Inc\");\r\n\t\t\tbreak;\r\n\t\t\tcase keyCode.DOWN:\r\n\t\t\t\tthis.__spinHandler(\"Dec\");\r\n\t\t\tbreak;\r\n\t\t\tcase keyCode.DELETE:\r\n\t\t\tcase keyCode.BACKSPACE:\r\n\t\t\t\tvar self = this;\r\n\t\t\t\tsetTimeout(function(){self.__updateValue.call(self,self.__config.input.value,false,true);},500);\r\n\t\t\tbreak;\r\n\t\t\tcase keyCode.ENTER:\r\n\t\t\t\tthis.__updateValue(this.__config.input.value,false,true);\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tif(inputCode != keyCode.TAB)\r\n\t\t\t{\r\n\t\t\t\tthis.__typing = true;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__keyPressHandler = function(event) \r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tvar inputCode = (event.which) ? event.which : event.keyCode;\r\n\t\tif (inputCode === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) \r\n\t\t{\r\n return;\r\n }\r\n\t\tvar character = String.fromCharCode(inputCode);\r\n\t\tthis.__updateValue(character,true,false);\r\n\t\tevent.preventDefault();\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__focusHandler = function(event) \r\n\t{\r\n\t\tvar textBox = this.__config.input;\r\n\t\ttextBox.value = this.__currentValue;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__blurHandler = function(event) \r\n\t{\r\n\t\tvar value = this.__config.input.value;\r\n\t\tif(!(value == \"\" && this.util.isUndefinedOrNull(this.__currentValue)))\r\n\t\t{\r\n\t\t\tthis.__setFormattedValue(value);\r\n\t\t\tif(this.__oldValue != this.__currentValue)\r\n \t\t{\r\n \t\t\tvar item = {oldValue:this.__oldValue,newValue:this.__currentValue};\r\n \t\t\tthis.__dispatchEvent(NSNumericTextBox.VALUE_CHANGED,item,item);\r\n \t\t\tthis.__oldValue = this.__currentValue;\r\n \t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__pasteHandler = function(event) \r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tvar content = \"\";\r\n\t\tif(event.clipboardData)\r\n\t\t{\r\n\t\t\tcontent = event.clipboardData.getData('text/plain');\r\n\t\t}\r\n\t\telse if(window.clipboardData)\r\n\t\t{\r\n\t\t content = window.clipboardData.getData('Text');\r\n\t\t}\r\n\t\t//console.log(\"Pasted Data :: \" + content);\r\n\t\tthis.__updateValue(content,true,true);\r\n\t\tevent.stopPropagation();\r\n\t\tevent.preventDefault();\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__updateValue = function(newContent,isAdd,fireEvent) \r\n\t{\r\n\t\tvar textBox = this.__config.input;\r\n\t\tvar regex = this.__getNumericRegex();\r\n\t\tvar selection = this.util.caretPosition(textBox);\r\n\t\tvar selectionStart = selection.start;\r\n\t var selectionEnd = selection.end;\r\n\t var value = newContent;\r\n\t var presentValue = textBox.value;\r\n\t if(isAdd)\r\n\t {\r\n\t \tvalue = presentValue.substring(0, selectionStart) + newContent + presentValue.substring(selectionEnd);\r\n\t }\r\n\t\tvar isValid = regex.test(value);\r\n\t\tif(isValid)\r\n\t\t{\r\n\t\t\tvalue = this.__getRangeValue(value,this.__currentValue);\r\n\t\t\tthis.__oldValue = this.__currentValue;\r\n\t\t\tthis.__currentValue = value;\r\n\t \ttextBox.value = value;\r\n\t \tif(isAdd)\r\n\t\t {\r\n\t \t\tvar caretPos = selectionStart + newContent.length;\r\n\t \t\tthis.util.caretPosition(textBox,caretPos);\r\n\t\t }\r\n\t \tif(fireEvent)\r\n\t \t{\r\n\t \t\tif(this.__oldValue != value)\r\n\t \t\t{\r\n\t \t\t\tif(!this.__typing)\r\n\t \t\t\t{\r\n\t \t\t\t\tthis.util.triggerEvent(textBox,\"change\");\r\n\t \t\t\t}\r\n\t \t\t\tvar item = {oldValue:this.__oldValue,newValue:value};\r\n\t \t\t\tthis.__dispatchEvent(NSNumericTextBox.VALUE_CHANGED,item,item);\r\n\t \t\t\tthis.__oldValue = value;\r\n\t \t\t}\r\n\t \t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tconsole.debug(\"Invalid Value\");\r\n\t\t}\r\n\t\tthis.__typing = false;\r\n\t\treturn isValid;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__spin = function(steps) \r\n\t{\r\n\t\tvar textBox = this.__config.input;\r\n\t\tif(this.__getActiveElement() != textBox)\r\n\t\t{\r\n\t\t\tthis.__textBoxParentEventHandler(true,null);\r\n\t\t\tthis.__focusHandler();\r\n\t\t\ttextBox.focus();\r\n\t\t}\r\n\t\tvar currentValue = Number(this.__currentValue);\r\n\t\tvar presentValue = currentValue;\r\n\t\tvar decimals = Math.abs(this.__config.decimals);\r\n\t\tvar newValue = (currentValue + steps).toFixed(decimals);\r\n\t\tthis.__updateValue(newValue,false,true);\r\n\t\tnewValue = currentValue;\r\n\t\tif(presentValue !== newValue) \r\n\t\t{\r\n\t\t\tvar item = {oldValue:presentValue,newValue:newValue};\r\n\t\t\tthis.__dispatchEvent(NSNumericTextBox.SPIN,item,item);\r\n }\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__addTextBoxEvents = function()\r\n\t{\r\n\t\tvar textBox = this.__config.input;\r\n\t\tif(!this.__keyDownRef)\r\n\t\t{\r\n\t\t\tthis.__keyDownRef = this.__keyDownHandler.bind(this);\r\n\t\t\tthis.util.addEvent(textBox,\"keydown\",this.__keyDownRef);\r\n\t\t}\r\n\t\tif(!this.__keyPressRef)\r\n\t\t{\r\n\t\t\tthis.__keyPressRef = this.__keyPressHandler.bind(this);\r\n\t\t\tthis.util.addEvent(textBox,\"keypress\",this.__keyPressRef);\r\n\t\t}\r\n\t\tif(!this.__focusRef)\r\n\t\t{\r\n\t\t\tthis.__focusRef = this.__focusHandler.bind(this);\r\n\t\t\tthis.util.addEvent(textBox,\"focus\",this.__focusRef);\r\n\t\t}\r\n\t\tif(!this.__blurRef)\r\n\t\t{\r\n\t\t\tthis.__blurRef = this.__blurHandler.bind(this);\r\n\t\t\tthis.util.addEvent(textBox,\"blur\",this.__blurRef);\r\n\t\t}\r\n\t\tif(!this.__pasteRef)\r\n\t\t{\r\n\t\t\tthis.__pasteRef = this.__pasteHandler.bind(this);\r\n\t\t\tthis.util.addEvent(textBox,\"paste\",this.__pasteRef);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__removeTextBoxEvents = function()\r\n\t{\r\n\t\tvar textBox = this.__config.input;\r\n\t\tif(this.__keyDownRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(textBox,\"keydown\",this.__keyDownRef);\r\n\t\t\tthis.__keyDownRef = null;\r\n\t\t}\r\n\t\tif(this.__keyPressRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(textBox,\"keypress\",this.__keyPressRef);\r\n\t\t\tthis.__keyPressRef = null;\r\n\t\t}\r\n\t\tif(this.__focusRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(textBox,\"focus\",this.__focusRef);\r\n\t\t\tthis.__focusRef = null;\r\n\t\t}\r\n\t\tif(this.__blurRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(textBox,\"blur\",this.__blurRef);\r\n\t\t\tthis.__blurRef = null;\r\n\t\t}\r\n\t\tif(this.__pasteRef)\r\n\t\t{\r\n\t\t\tthis.util.addEvent(textBox,\"paste\",this.__pasteRef);\r\n\t\t\tthis.__pasteRef = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getNumericRegex = function()\r\n\t{\r\n\t\tvar decimals = Math.abs(this.__config.decimals);\r\n\t\tvar decimalSeparator = this.__config.decimalSeparator;\r\n\t\tvar decimalRegex = '*';\r\n\t\tif (decimalSeparator === \".\") \r\n\t\t{\r\n\t\t\tdecimalSeparator = '\\\\' + decimalSeparator;\r\n }\r\n\t\tif(decimals == 0)\r\n\t\t{\r\n\t\t\treturn new RegExp(\"^(-)?(\\\\d*)$\");\r\n\t\t}\r\n\t\tdecimalRegex = '{0,' + decimals + '}';\r\n\t\t//return new RegExp(\"^[0-9]+([\" + decimalSeparator + \"][0-9]{1,\" + decimals + \"})?$\");\r\n\t\treturn new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + decimalRegex + ')?)|(' + decimalSeparator + '\\\\d' + decimalRegex + ')))?$');\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__setFormattedValue = function(value)\r\n\t{\r\n\t\tvalue = this.util.isUndefinedOrNull(value) ? this.__currentValue : value;\r\n\t\tvar textBox = this.__config.input;\r\n\t\tif(this.util.isUndefinedOrNull(value) || value == \"\")\r\n\t\t{\r\n\t\t\tvalue = \"\";\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvalue = this.__getFormattedValue(value);\r\n\t\t}\r\n\t\ttextBox.value = value;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getFormattedValue = function(value)\r\n\t{\r\n\t\tvar type = this.__config.type;\r\n\t\tvar retValue = \"\";\r\n\t\tvalue = this.__getUnFormattedNumber(value);\r\n\t\tif(type == \"custom\")\r\n\t\t{\r\n\t\t\tvar format = this.__config.format;\r\n\t\t\tif(format)\r\n\t\t\t{\r\n\t\t\t\tretValue = this.__getCustomFormattedNumber(value.toString(),format);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.util.throwNSError(\"NSNumericTextBox\",\"Format is not valid\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar formattedValue = this.__getFormattedNumber(value);\r\n\t\t\tvar objType = this.__objType[type];\r\n\t\t\tvar format = this.__checkFormat(objType.format);\r\n\t\t\tretValue = format.replace('%s', this.__getRenderedChar(objType.symbol)).replace('%v',formattedValue);\r\n\t\t}\r\n\t\treturn retValue;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getCustomFormattedNumber = function(value,format)\r\n\t{\r\n\t\tvar retValue = format;\r\n\t\tvar specifier = this.__config.customFormatSpecifier;\r\n\t\tfor(var count = 0,index = 0;count <= format.length;count++)\r\n\t\t{\r\n\t\t\tvar cha = format.charAt(count);\r\n\t\t\tif(value.length > index)\r\n\t\t\t{\r\n\t\t\t\tif(cha == specifier)\r\n\t\t\t\t{\r\n\t\t\t\t\tretValue = this.__replaceCharAt(retValue,count,value[index]);\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tretValue = retValue.split(specifier).join(\"\");\r\n\t\tvar lastIndex = format.lastIndexOf(specifier);\r\n\t\tvar lastStr = format.substring(lastIndex + 1,format.length);\r\n\t\tvar index = retValue.length - 1;\r\n\t\twhile(!this.__isNumeric(retValue.charAt(index)) && index > -1)\r\n\t\t{\r\n\t\t\tretValue = retValue.substring(0,index);\r\n\t\t\tindex--;\r\n\t\t}\r\n\t\treturn (retValue + lastStr);\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getFormattedNumber = function(value)\r\n\t{\r\n\t\tvar retValue = value;\r\n\t\ttry\r\n\t\t{\r\n\t\t\tvar decimals = Math.abs(this.__config.decimals);\r\n\t\t\tvar decimalSeparator = this.__config.decimalSeparator;\r\n\t\t\tif(value.toString().indexOf(\"e\") > -1)\r\n\t\t\t{\r\n\t\t\t\tretValue = this.__round(+value,decimals);\r\n\t\t\t\tretValue = retValue.replace(\".\",decimalSeparator);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvar thousandSeparator = this.__config.thousandSeparator;\r\n\t\t\t\tvar grouping = Math.abs(this.__config.grouping);\r\n\t\t\t\tvar negativeSign = \"\";\r\n\t\t\t\tif(value < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tnegativeSign = \"-\";\r\n\t\t\t\t\tvalue = (-1 * value);\r\n\t\t\t\t}\r\n\t\t\t\tvar wholePart = parseInt(value = Math.abs(Number(value) || 0).toFixed(decimals)).toString();\r\n\t\t\t var groupingMod = (wholePart.length > grouping) ? wholePart.length % grouping : 0;\r\n\t\t\t var regex = new RegExp(\"(\\\\d{\" + grouping + \"})(?=\\\\d)\",\"g\");\r\n\t\t\t \r\n\t\t\t var firstWholePart = (groupingMod ? wholePart.substr(0, groupingMod) + thousandSeparator : '');\r\n\t\t\t\tvar restWholePart = wholePart.substr(groupingMod).replace(regex, \"$1\" + thousandSeparator);\r\n\t\t\t\tvar decimalPart = \"\";\r\n\t\t\t\tif (decimals > 0) \r\n\t\t\t\t{\r\n\t\t\t\t\tdecimalPart = decimalSeparator + Math.abs(value - wholePart).toFixed(decimals).slice(2);\r\n\t\t\t\t}\r\n\t\t\t retValue = negativeSign + firstWholePart + restWholePart + decimalPart;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(error)\r\n\t\t{\r\n\t\t}\r\n\t\treturn retValue;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getUnFormattedNumber = function(value)\r\n\t{\r\n\t\tif(typeof value === \"number\") \r\n\t\t{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\tvar decimalSeparator = this.__config.decimalSeparator;\r\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimalSeparator + \"]\", [\"g\"]);\r\n\t\tvar retValue = parseFloat(\r\n\t\t\t\t(\"\" + value)\r\n\t\t\t\t.replace(/\\((?=\\d+)(.*)\\)/, \"-$1\") // replace bracketed values with negatives\r\n\t\t\t\t.replace(regex, '') // strip out any cruft\r\n\t\t\t\t.replace(decimalSeparator, '.') // make sure decimal point is standard\r\n\t\t\t);\r\n\t\treturn !isNaN(retValue) ? retValue : 0;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__checkFormat = function(format)\r\n\t{\r\n\t\tvar retItem = {};\r\n\t\tif(typeof format === \"function\" ) \r\n\t\t{\r\n\t\t\tformat = format();\r\n\t\t}\r\n\t\tif(this.util.isString(format) && format.match(\"%v\")) \r\n\t\t{\r\n\t\t\tretItem = format;\r\n\t\t}\r\n\t\telse if(!format || !format.match(\"%v\")) \r\n\t\t{\r\n\t\t\tthis.util.throwNSError(\"NSNumericTextBox\",\"Format is not valid\");\r\n\t\t}\r\n\t\treturn retItem;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getRangeValue = function(value,presentValue) \r\n\t{\r\n\t\tvar decimalSeparator = this.__config.decimalSeparator;\r\n\t\tvalue = value.toString();\r\n\t\tif(value.indexOf(decimalSeparator) == value.length - 1)\r\n\t\t{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\tvar decimalPart = \"\";\r\n\t\tif(value.indexOf(decimalSeparator) > -1 && Number(value).toString().indexOf(decimalSeparator) == -1)\r\n\t\t{\r\n\t\t\tdecimalPart = decimalSeparator + value.split(decimalSeparator)[1];\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\tthis.__validateMinMax();\r\n\t\tvar min = this.__config.min;\r\n \tvar max = this.__config.max;\r\n \tvar retValue = null;\r\n \tif(this.__config.enableRangeRoundOf)\r\n \t{\r\n \t\tretValue = value > max ? max : value < min ? min : (value + decimalPart);\r\n \t}\r\n \telse\r\n \t{\r\n \t\tretValue = value > max ? presentValue : value < min ? presentValue : (value + decimalPart);\r\n \t}\r\n return retValue;\r\n };\r\n \r\n NSNumericTextBox.prototype.__validateMinMax = function() \r\n\t{\r\n \tvar min = this.__config.min;\r\n \tvar max = this.__config.max;\r\n \tvar type = this.__config.type;\r\n \tif(!this.util.isNumber(min) || isNaN(min))\r\n \t{\r\n \t\tmin = -Number.MAX_VALUE;\r\n \t}\r\n \tif(!this.util.isNumber(max) || isNaN(max))\r\n \t{\r\n \t\tmax = Number.MAX_VALUE;\r\n \t}\r\n \tif(type == \"custom\")\r\n\t\t{\r\n \t\tvar format = this.__config.format;\r\n\t\t\tif(format)\r\n\t\t\t{\r\n\t\t\t\tvar maxValue = \"\";\r\n\t\t\t\tvar specifier = this.__config.customFormatSpecifier;\r\n\t\t\t\tvar length = (format.match(new RegExp(specifier,\"g\")||[])).length;\r\n\t\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tmaxValue = maxValue + \"9\";\r\n\t\t\t\t}\r\n\t\t\t\tmaxValue = Number(maxValue);\r\n\t\t\t\tconsole.log(maxValue);\r\n\t\t\t\tif(max > maxValue)\r\n\t\t\t\t{\r\n\t\t\t\t\tmax = maxValue;\r\n\t\t\t\t}\r\n\t\t\t\tif(min < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tmin = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n \tmin = (min > max) ? max : min;\r\n \tthis.__config.min = min;\r\n \tthis.__config.max = max;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__applyCustomClass = function(element,type)\r\n\t{\r\n\t\tif(this.__config.customClass && element && type)\r\n\t\t{\r\n\t\t\tvar itemProperty = {\"outerContainer\":{property:\"outerContainer\",defaultValue:null},\r\n\t\t\t\t\t\t\t \"textBoxContainer\":{property:\"textBoxContainer\",defaultValue:null},\r\n\t\t\t\t\t\t\t \"spinContainer\":{property:\"spinContainer\",defaultValue:null},\r\n\t\t\t\t\t\t\t \"spinIncrement\":{property:\"spinIncrement\",defaultValue:null},\r\n\t\t\t\t\t\t\t \"spinDecrement\":{property:\"spinDecrement\",defaultValue:null},\r\n\t\t\t\t\t\t\t };\r\n\t\t\tif(itemProperty[type])\r\n\t\t\t{\r\n\t\t\t\tif(this.__config.customClass[itemProperty[type][\"property\"]])\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.addStyleClass(element,this.__config.customClass[itemProperty[type][\"property\"]]);\r\n\t\t\t\t}\r\n\t\t\t\telse if(itemProperty[type][\"defaultValue\"])\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.addStyleClass(element,itemProperty[type][\"defaultValue\"]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getRenderedChar = function(str) \r\n\t{\r\n\t\t/*var div = document.createElement(\"div\");\r\n\t\tdiv.innerHTML = str;\r\n\t\treturn div.innerHTML;*/\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__round = function(value,precision,negative) \r\n\t{\r\n\t\t precision = precision || 0;\r\n value = value.toString().split(\"e\");\r\n value = Math.round(+(value[0] + \"e\" + (value[1] ? +value[1] + precision : precision)));\r\n if (negative) \r\n {\r\n value = -value;\r\n }\r\n value = value.toString().split(\"e\");\r\n value = +(value[0] + \"e\" + (value[1] ? +value[1] - precision : -precision));\r\n return value.toFixed(Math.min(precision, 20));\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__replaceCharAt = function(str,index,replace) \r\n\t{\r\n\t\treturn str.substring(0,index) + replace + str.substring(index + 1);\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__isNumeric = function(str) \r\n\t{\r\n\t\treturn /^\\d+$/.test(str);\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__dispatchEvent = function(eventType,data,param,bubbles,cancelable)\r\n\t{\r\n\t\t/*if(this.__eventDispatcher)\r\n\t\t{\r\n\t\t\tthis.__eventDispatcher(eventType,data,param,bubbles,cancelable);\r\n\t\t}\r\n\t\telse\r\n\t\t{*/\r\n\t\t\tthis.util.dispatchEvent(this.__config.input,eventType,data,param,bubbles,cancelable);\r\n\t\t//}\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getActiveElement = function() \r\n\t{\r\n try \r\n {\r\n return document.activeElement;\r\n } \r\n catch (error) \r\n {\r\n return document.documentElement.activeElement;\r\n }\r\n };\r\n \r\n NSNumericTextBox.prototype.__setDisabledOrReadonly = function() \r\n\t{\r\n \tvar textBox = this.__config.input;\r\n \tvar disabled = this.__isDisabled();\r\n \tif(disabled)\r\n \t{\r\n \t\tthis.util.addStyleClass(this.__spanContainer,\"nsNumericTextBoxContainerDisabled\");\r\n \t}\r\n \telse\r\n \t{\r\n \t\tthis.util.removeStyleClass(this.__spanContainer,\"nsNumericTextBoxContainerDisabled\");\r\n \t}\r\n \tif(!this.__observer)\r\n \t{\r\n \t\tvar self = this;\r\n \t\tvar MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\r\n \t\tthis.__observer = new MutationObserver(function(mutations) \r\n \t\t{\r\n \t\t mutations.forEach(function(mutation) \r\n \t\t {\r\n \t\t \tif(mutation.type == \"attributes\") \r\n \t\t \t{\r\n \t\t \t\tvar attributeName = mutation.attributeName;\r\n \t\t \t\tif(attributeName.toLowerCase() == \"disabled\" || attributeName.toLowerCase() == \"readonly\")\r\n \t\t \t\t{\r\n \t\t \t\t\tself.__setDisabledOrReadonly();\r\n \t\t \t\t}\r\n \t\t \t}\r\n \t\t });\r\n \t\t});\r\n \t\tvar config = {attributes: true,childList:false,characterData: false};\r\n \t\tthis.__observer.observe(textBox,config);\r\n \t}\r\n\t};\r\n \r\n NSNumericTextBox.prototype.__isDisabled = function() \r\n\t{\r\n \tvar textBox = this.__config.input;\r\n \tif(textBox.disabled || textBox.readOnly)\r\n \t{\r\n \t\treturn true;\r\n \t}\r\n \tvar fieldSet = this.util.findParent(textBox,\"fieldset\");\r\n \tif(fieldSet && fieldSet.disabled)\r\n \t{\r\n \t\treturn true;\r\n \t}\r\n \treturn false;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.prototype.__getID = function()\r\n\t{\r\n\t\tif(!this.__id)\r\n\t\t{\r\n\t\t\tif(this.__config.input.hasAttribute(\"id\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__id = this.__config.input.getAttribute(\"id\");\r\n\t\t\t}\r\n\t\t\telse if(this.__config.input.hasAttribute(\"name\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__id = this.__config.input.getAttribute(\"name\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__id = \"comp\" + this.util.getUniqueId();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.__id;\r\n\t};\r\n\t\r\n\tNSNumericTextBox.SPIN = \"spin\";\r\n\tNSNumericTextBox.VALUE_CHANGED = \"valueChanged\";\r\n\t\r\n\treturn NSNumericTextBox;\r\n})();\r\nnsModuleExport(this,\"NSNumericTextBox\",NSNumericTextBox);";