ea8c8854cc288e7f63eeda77fecf6a30cd248099
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

1) (function (factory) {
2) 	if (typeof define === 'function' && define.amd) {
3) 		// AMD. Register as an anonymous module.
4) 		define(['jquery'], factory);
5) 	} else if (typeof module === 'object' && module.exports) {
6) 		// Node/CommonJS
7) 		module.exports = function( root, jQuery ) {
8) 			if ( jQuery === undefined ) {
9) 				// require('jQuery') returns a factory that requires window to
10) 				// build a jQuery instance, we normalize how we use modules
11) 				// that require this pattern but the window provided is a noop
12) 				// if it's defined (how jquery works)
13) 				if ( typeof window !== 'undefined' ) {
14) 					jQuery = require('jquery');
15) 				}
16) 				else {
17) 					jQuery = require('jquery')(root);
18) 				}
19) 			}
20) 			factory(jQuery);
21) 			return jQuery;
22) 		};
23) 	} else {
24) 		// Browser globals
25) 		factory(jQuery);
26) 	}
27) }(function ($) {
28) 	'use strict'
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

29) 	$.fn.numbercontrol = function (methodOrProps) {
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

30) 		if (methodOrProps === 'destory') {
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

31) 			this.each(function () {
32) 				$(this).parent().children().each(function (index, value) {
33) 					var thisSelector = $(value);
34) 
35) 					if (options.onBeforeDestoryInitialize !== undefined)
36) 						options.onBeforeDestoryInitialize(this);
37) 
38) 					if (!thisSelector.is('input'))
39) 						thisSelector.remove();
40) 
41) 					if (options.onAfterDestoryInitialize !== undefined)
42) 						options.onAfterDestoryInitialize(this);
43) 				});
44) 
45) 				$(this).parent().removeClass().addClass('numberControlDestoryed');
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

46) 			})
47) 			return this;
48) 		}
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

49) 
50) 		// Allow customizing the options.
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

51) 		var options = {
52) 			debug: false,
53) 			separator: '.',
54) 			type: 'number',
55) 			prependHtml: '<div class="input-group-prepend"><button class="btn btn-decrease btn-outline-secondary px-1"><span class="oi oi-minus" /></button></div>',
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

56) 			appendHtml: '<div class="input-group-append"><button class="btn btn-increase btn-outline-secondary px-1"><span class="oi oi-plus" /></button></div>',
57) 			inputParentCss: 'input-group numberControl',
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

58) 			inputParent: 'div',
59) 			inputCss: 'numberControlInput form-control px-1',
60) 			bindButtonEvents: 'click tap touch touchstart',
61) 			keyboardLanguage: {
62) 				'UP' : '<span class="oi oi-chevron-top" />',
63) 				'DOWN' : '<span class="oi oi-chevron-bottom" />',
64) 				'INVERSE' : '<span class="oi oi-transfer" />',
65) 				'SEP' : '<span class="oi oi-media-record" />',
66) 			},
67) 			keyboardControl: {
68) 			},
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

69) 			buttons: [...Array(10).keys(), 'DELETE', 'CLEAR', 'DONE', 'CANCEL', 'UP', 'DOWN', 'SEP', 'INVERSE']
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

70) 		}
71) 		for (var option in methodOrProps) {
72) 			options[option] = methodOrProps[option]
73) 		}
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

74) 
75) 		function setNewValue(container, value)
76) 		{
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

77) 			if (options.onBeforeSetNewvalue !== undefined)
78) 				options.onBeforeSetNewvalue(this, event, container, value);
79) 
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

80) 			if (options.type === 'number')
81) 				$(container).val(parseInt(value));
82) 			else
83) 				$(container).val(parseFloat(value));
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

84) 
85) 			if (options.onAfterSetNewvalue !== undefined)
86) 				options.onAfterSetNewvalue(this, event, container, value);
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

87) 		}
88) 
89) 		function findMinMaxValue()
90) 		{
91) 			var testValue;
92) 			for (var i=0; i < arguments.length; i++) {
93) 				testValue = arguments[i];
94) 				if (typeof testValue !== 'undefined' && !isNaN(testValue))
95) 				{
96) 					if (options.type === 'number' && parseInt(testValue) !== null)
97) 						return parseInt(testValue);
98) 					else if (parseFloat(testValue) !== null)
99) 						return parseFloat(testValue);
100) 					continue;
101) 				}
102) 			}
103) 			return 0;
104) 		}
105) 
106) 		// Bind to each input selector
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

107) 		this.each(function () {
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

108) 			if (options.onBeforeInitialized !== undefined)
109) 				options.onBeforeInitialized(this);
110) 
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

111) 			var $base = $(this);
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

112) 
113) 			// Some settings we either can pull in from a options, from standard attributes or defaults.
114) 			var $step = findMinMaxValue(parseFloat(options.step), parseFloat($base.attr('step')), 1);
115) 			var $minValue = findMinMaxValue(options.min, $base.attr('min'), Number.MIN_VALUE);
116) 			var $maxValue = findMinMaxValue(options.max, $base.attr('max'), Number.MAX_VALUE);
117) 
118) 			// Build the parent up. 
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

119) 			if (!$($base).parent().is('div') || !$($base).parent().hasClass('numberControlDestoryed')) {
120) 				$base.wrap('<' + options.inputParent + '></' + options.inputParent + '>');
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

121) 			}
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

122) 			var $parent = $base.parent(options.parentSelector);
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

123) 			$parent.removeClass().addClass(options.inputParentCss);
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

124) 
125) 			// Set the base.
126) 			$base.attr('type', options.type);
127) 			$base.addClass(options.inputCss);
128) 
129) 			// Wrap the buttons around.			
130) 			$base.before(options.prependHtml);
131) 			$base.after(options.appendHtml);
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

132) 
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

133) 			// Add the style to the body to cleanup input controls for number.
134) 			if (options.type == 'number' && !options.DisableNumberSpinStyleFix)
135) 				$('body').append('<style>' +
136) 							'.numberControlInput::-webkit-outer-spin-button,.numberControlInput::-webkit-inner-spin-button {' + 
137) 								'-webkit-appearance: none;' +
138) 							'}</style>'
139) 				);
140) 
141) 			// The decrease event.
142) 			var $decreaseButton = $parent.find('.btn-decrease');
143) 			$decreaseButton.on(options.bindButtonEvents, function (event) {
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

144) 				event.preventDefault();
145) 
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

146) 				if (options.onBeforeClickDecrease !== undefined)
147) 					options.onBeforeClickDecrease(this, event);
148) 				if ($base.val() > $minValue)
149) 					setNewValue($base, parseFloat($base.val()) - parseFloat($step));
150) 				if (options.onAfterClickDecrease !== undefined)
151) 					options.onAfterClickDecrease(this, event);
152) 				if (options.debug)
153) 					console.log('numbercontrl: decreaseButton: Click', event, $base.val(), $minValue);
154) 			});
155) 
156) 			// The increase event.
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

157) 			var $increaseButton = $parent.find('.btn-increase');
158) 			$increaseButton.on(options.bindButtonEvents, function (event) {
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

159) 				event.preventDefault();
160) 
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

161) 				if (options.onBeforeClickIncrease !== undefined)
162) 					options.onBeforeClickIncrease(this, event);
163) 				if ($base.val() < $maxValue)
164) 					setNewValue($base, parseFloat($base.val()) + parseFloat($step));
165) 				if (options.onAfterClickIncrease !== undefined)
166) 					options.onAfterClickIncrease(this, event);
167) 				if (options.debug)
168) 					console.log('numbercontrl: increaseButton: Click', event, $base.val(), $minValue);
169) 			});
170) 
171) 			// The Popup Numberpad
172) 			if (!options.disableVirtualKeyboard)
173) 			{
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

174) 				var $KeyboardLayout;
175) 
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

176) 				if (options.onBeforeVirtualKeyboardInitalized !== undefined)
177) 					options.onBeforeVirtualKeyboardInitalized(this);
178) 
179) 				$base.on(options.bindButtonEvents, function (event) {
180) 					event.stopPropagation();
181) 
182) 					if (options.onBeforeVirtualKeyboardOpen !== undefined)
183) 						options.onBeforeVirtualKeyboardOpen(this);
184) 
185) 					var $location = options.virtualKeyboardAttachSelector ? $(options.virtualKeyboardAttachSelector) : $base;
186) 
187) 					if (options.keyboardLayout)
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

188) 						$KeyboardLayout = options.keyboardLayout;
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

189) 					else
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

190) 						$KeyboardLayout = 
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

191) 							'<div class="modal-dialog modal-dialog-centered" style="width: 250px;">' +
192) 								'<div class="modal-content">' +
193) 									'<table>' +
194) 										'<tr>' +
195) 											'<td colspan="4">{INPUTBOX}</td>' +
196) 										'</tr><tr>' +
197) 											'<td>{7}</td>' +
198) 											'<td>{8}</td>' +
199) 											'<td>{9}</td>' +
200) 											'<td>{DELETE}</td>' +
201) 										'</tr><tr>' +
202) 											'<td>{4}</td>' +
203) 											'<td>{5}</td>' +
204) 											'<td>{6}</td>' +
205) 											'<td>{CLEAR}</td>' +
206) 										'</tr><tr>' +
207) 											'<td>{1}</td>' +
208) 											'<td>{2}</td>' +
209) 											'<td>{3}</td>' +
210) 											'<td>{DONE}</td>' +
211) 										'</tr><tr>' +
212) 											'<td>{UP}</td>' +
213) 											'<td>{0}</td>' +
214) 											'<td>{DOWN}</td>' +
215) 											'<td>{CANCEL}</td>' +
216) 										'</tr>' +
217) 									'</table>' +
218) 								'</div>' +
219) 							'</div>'
220) 						;
221) 
222) 					// Fill out the input.
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

223) 					if (typeof options.keyboardControl['INPUTBOX'] === 'undefined')
224) 						options.keyboardControl['INPUTBOX'] = '<input class="numberControlVirtualNumPad numberControlVirtualNumPadINPUT form-control" type="text" readonly value="{VAL}"/>';
225) 					$KeyboardLayout = $KeyboardLayout.replace('{INPUTBOX}', options.keyboardControl['INPUTBOX'].replace('{VAL}', $base.val()).toString());
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

226) 
227) 					// Fill out all buttons.
228) 					$.each(options.buttons, function(i, v){
229) 						var LanguageBox = options.keyboardLanguage[v] ? options.keyboardLanguage[v] : v;
230) 
231) 						if (typeof options.keyboardControl[v] === 'undefined')
232) 							options.keyboardControl[v] = '<button class="numberControlVirtualNumPad numberControlVirtualNumPad' + v + ' btn btn-outline-secondary w-100" data-function="' + v + '">{' + v + '_LANG}</button>';
233) 						$KeyboardLayout = $KeyboardLayout.replace('{' + v + '}', options.keyboardControl[v].replace('{' + v + '_LANG}', LanguageBox));
234) 					});
235) 
236) 					// Attach the keyboard to the container.
237) 					$location.after('<div class="numberControlVirtualNumPad modal d-block">' + $KeyboardLayout + '</div>');
238) 					var $VirtualKeyboard = $parent.find('.numberControlVirtualNumPad');
239) 					var $VirtualKeyboardInput = $VirtualKeyboard.find('.numberControlVirtualNumPadINPUT');
240) 
241) 					// Bind the virtual Keyboard action.
242) 					$VirtualKeyboard.find('.numberControlVirtualNumPad').on(options.bindButtonEvents, function(event){						
jdarwood007 Destroy the plugin better....

jdarwood007 authored 3 years ago

243) 						event.preventDefault();
244) 
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

245) 						if (options.debug) console.log('numbercontrl: numberControlVirtualNumPad: Click', event, $base.val(), $VirtualKeyboardInput.val().toString(), $(this).attr('data-function'));
246) 
247) 						var thisFunction = $(this).attr('data-function');
248) 
249) 						if (options.onBeforeVirtualKeyboardButton !== undefined)
250) 							options.onBeforeVirtualKeyboardButton(this, event, thisFunction);
251) 
252) 						switch (thisFunction)
253) 						{
254) 							case 'DELETE':
255) 								$VirtualKeyboardInput.val($VirtualKeyboardInput.val().toString().slice(0, -1));
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

256) 								break;
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

257) 							
258) 							case 'CLEAR':
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

259) 								$VirtualKeyboardInput.val('');
260) 								break;
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

261) 							
262) 							case 'DONE':
263) 								if ($VirtualKeyboardInput.val() > $maxValue)
264) 									setNewValue($base, $maxValue);
265) 								else if ($VirtualKeyboardInput.val() < $minValue)
266) 									setNewValue($base, $minValue);
267) 								else
268) 									setNewValue($base, $VirtualKeyboardInput.val());
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

269) 								
270) 								$VirtualKeyboard.remove();
271) 								break;
272) 
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

273) 							case 'CANCEL':
274) 								$VirtualKeyboard.remove();
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

275) 								break;
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

276) 							
277) 							case 'UP':
278) 								if ($VirtualKeyboardInput.val() < $maxValue)
279) 									setNewValue($VirtualKeyboardInput, parseFloat($VirtualKeyboardInput.val()) + parseFloat($step));
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

280) 								break;
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

281) 							
282) 							case 'DOWN':
283) 								if ($VirtualKeyboardInput.val() > $minValue)
284) 									setNewValue($VirtualKeyboardInput, parseFloat($VirtualKeyboardInput.val()) - parseFloat($step));
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

285) 								break;
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

286) 
287) 							case 'SEP':
288) 								if ($VirtualKeyboardInput.val().toString().indexOf(options.separator) === -1)
289) 									$VirtualKeyboardInput.val($VirtualKeyboardInput.val().toString() + options.separator);
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

290) 								break;
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

291) 
292) 							case 'INVERSE':
293) 								setNewValue($VirtualKeyboardInput, parseFloat($VirtualKeyboardInput.val()) * -1);
jdarwood007 Cleanup, enforce style and...

jdarwood007 authored 3 years ago

294) 								break;
jdarwood007 Initial commit

jdarwood007 authored 3 years ago

295) 														
296) 							// Default to assume its numbers.
297) 							default:
298) 								if ($(this).attr('data-custom-function'))
299) 									$(this).attr('data-custom-function')(this, event, thisFunction);
300) 								else
301) 									setNewValue($VirtualKeyboardInput, $VirtualKeyboardInput.val().toString() + $(this).attr('data-function'));
302) 						}
303) 
304) 						if (options.onAfterVirtualKeyboardButton !== undefined)
305) 							options.onAfterVirtualKeyboardButton(this, event, thisFunction);
306) 					});
307) 
308) 					if (options.onAfterVirtualKeyboardOpen !== undefined)
309) 						options.onAfterVirtualKeyboardOpen(this);
310) 				});
311) 
312) 				if (options.onAfterVirtualKeyboardInitalized !== undefined)
313) 					options.onAfterVirtualKeyboardInitalized(this);
314) 			}
315) 
316) 			if (options.onAfterInitialized !== undefined)
317) 				options.onAfterInitialized(this);
318) 			if (options.debug) console.log($base.parent());
319) 		});