+++ /dev/null
-/*\r
- * Fuel UX Spinner\r
- * https://github.com/ExactTarget/fuelux\r
- *\r
- * Copyright (c) 2012 ExactTarget\r
- * Licensed under the MIT license.\r
- */\r
-\r
-define(['require','jquery'],function(require) {\r
-\r
- var $ = require('jquery');\r
-\r
-\r
- // SPINNER CONSTRUCTOR AND PROTOTYPE\r
-\r
- var Spinner = function (element, options) {\r
- this.$element = $(element);\r
- this.options = $.extend({}, $.fn.spinner.defaults, options);\r
- this.$input = this.$element.find('.spinner-input');\r
- this.$element.on('keyup', this.$input, $.proxy(this.change, this));\r
-\r
- if (this.options.hold) {\r
- this.$element.on('mousedown', '.spinner-up', $.proxy(function() { this.startSpin(true); } , this));\r
- this.$element.on('mouseup', '.spinner-up, .spinner-down', $.proxy(this.stopSpin, this));\r
- this.$element.on('mouseout', '.spinner-up, .spinner-down', $.proxy(this.stopSpin, this));\r
- this.$element.on('mousedown', '.spinner-down', $.proxy(function() {this.startSpin(false);} , this));\r
- } else {\r
- this.$element.on('click', '.spinner-up', $.proxy(function() { this.step(true); } , this));\r
- this.$element.on('click', '.spinner-down', $.proxy(function() { this.step(false); }, this));\r
- }\r
-\r
- this.switches = {\r
- count: 1,\r
- enabled: true\r
- };\r
-\r
- if (this.options.speed === 'medium') {\r
- this.switches.speed = 300;\r
- } else if (this.options.speed === 'fast') {\r
- this.switches.speed = 100;\r
- } else {\r
- this.switches.speed = 500;\r
- }\r
-\r
- this.lastValue = null;\r
-\r
- this.render();\r
-\r
- if (this.options.disabled) {\r
- this.disable();\r
- }\r
- };\r
-\r
- Spinner.prototype = {\r
- constructor: Spinner,\r
-\r
- render: function () {\r
- this.$input.val(this.options.value);\r
- this.$input.attr('maxlength',(this.options.max + '').split('').length);\r
- },\r
-\r
- change: function () {\r
- var newVal = this.$input.val();\r
-\r
- if(newVal/1){\r
- this.options.value = newVal/1;\r
- }else{\r
- newVal = newVal.replace(/[^0-9]/g,'');\r
- this.$input.val(newVal);\r
- this.options.value = newVal/1;\r
- }\r
-\r
- this.triggerChangedEvent();\r
- },\r
-\r
- stopSpin: function () {\r
- clearTimeout(this.switches.timeout);\r
- this.switches.count = 1;\r
- this.triggerChangedEvent();\r
- },\r
-\r
- triggerChangedEvent: function () {\r
- var currentValue = this.value();\r
- if (currentValue === this.lastValue) return;\r
-\r
- this.lastValue = currentValue;\r
-\r
- // Primary changed event\r
- this.$element.trigger('changed', currentValue);\r
-\r
- // Undocumented, kept for backward compatibility\r
- this.$element.trigger('change');\r
- },\r
-\r
- startSpin: function (type) {\r
-\r
- if (!this.options.disabled) {\r
- var divisor = this.switches.count;\r
-\r
- if (divisor === 1) {\r
- this.step(type);\r
- divisor = 1;\r
- } else if (divisor < 3){\r
- divisor = 1.5;\r
- } else if (divisor < 8){\r
- divisor = 2.5;\r
- } else {\r
- divisor = 4;\r
- }\r
-\r
- this.switches.timeout = setTimeout($.proxy(function() {this.iterator(type);} ,this),this.switches.speed/divisor);\r
- this.switches.count++;\r
- }\r
- },\r
-\r
- iterator: function (type) {\r
- this.step(type);\r
- this.startSpin(type);\r
- },\r
-\r
- step: function (dir) {\r
- var curValue = this.options.value;\r
- var limValue = dir ? this.options.max : this.options.min;\r
-\r
- if ((dir ? curValue < limValue : curValue > limValue)) {\r
- var newVal = curValue + (dir ? 1 : -1) * this.options.step;\r
-\r
- if (dir ? newVal > limValue : newVal < limValue) {\r
- this.value(limValue);\r
- } else {\r
- this.value(newVal);\r
- }\r
- }\r
- },\r
-\r
- value: function (value) {\r
- if (!isNaN(parseFloat(value)) && isFinite(value)) {\r
- value = parseFloat(value);\r
- this.options.value = value;\r
- this.$input.val(value);\r
- return this;\r
- } else {\r
- return this.options.value;\r
- }\r
- },\r
-\r
- disable: function () {\r
- this.options.disabled = true;\r
- this.$input.attr('disabled','');\r
- this.$element.find('button').addClass('disabled');\r
- },\r
-\r
- enable: function () {\r
- this.options.disabled = false;\r
- this.$input.removeAttr("disabled");\r
- this.$element.find('button').removeClass('disabled');\r
- }\r
- };\r
-\r
-\r
- // SPINNER PLUGIN DEFINITION\r
-\r
- $.fn.spinner = function (option,value) {\r
- var methodReturn;\r
-\r
- var $set = this.each(function () {\r
- var $this = $(this);\r
- var data = $this.data('spinner');\r
- var options = typeof option === 'object' && option;\r
-\r
- if (!data) $this.data('spinner', (data = new Spinner(this, options)));\r
- if (typeof option === 'string') methodReturn = data[option](value);\r
- });\r
-\r
- return (methodReturn === undefined) ? $set : methodReturn;\r
- };\r
-\r
- $.fn.spinner.defaults = {\r
- value: 1,\r
- min: 1,\r
- max: 999,\r
- step: 1,\r
- hold: true,\r
- speed: 'medium',\r
- disabled: false\r
- };\r
-\r
- $.fn.spinner.Constructor = Spinner;\r
-\r
-\r
- // SPINNER DATA-API\r
-\r
- $(function () {\r
- $('body').on('mousedown.spinner.data-api', '.spinner', function (e) {\r
- var $this = $(this);\r
- if ($this.data('spinner')) return;\r
- $this.spinner($this.data());\r
- });\r
- });\r
-\r
-});\r