PluginProbe
User Access Manager / 2.2.15
User Access Manager v2.2.15
2.3.20 2.3.19 2.3.18 2.3.17 2.3.16 2.3.15 2.3.14 2.3.13 trunk 0.6 0.6.1 0.6.2 0.7 0.7 Beta 0.7.0.1 0.8 0.8.0.1 0.8.0.2 0.9 0.9.1 0.9.1.1 0.9.1.2 0.9.1.3 0.9.1.4 1.0 All 136 releases
user-access-manager / assets / js / jquery.uam-time-input.js

jquery.uam-time-input.js in User Access Manager 2.2.15, at assets/js/jquery.uam-time-input.js

96 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function($) {
2 var delay = (function() {
3 var timer = 0;
4 return function(callback, ms){
5 clearTimeout (timer);
6 timer = setTimeout(callback, ms);
7 };
8 })();
9
10 var convertRawChunksToTime = function(chunks) {
11 var caps = [999, 24, 60, 60];
12 chunks = chunks.map(function(num) { return parseInt(num); });
13
14 for (var i = 4; i >= 0; i--) {
15 if (chunks[i] >= caps[i]) {
16 if (i - 1 >= 0) {
17 var times = Math.floor(chunks[i] / caps[i]);
18 chunks[i-1] += times;
19 chunks[i] = chunks[i] - (times * caps[i]);
20 } else {
21 chunks[i] = caps[i];
22 }
23 }
24 }
25
26 return chunks;
27 };
28
29 var formatChunks = function(chunks) {
30 return chunks[0].toString().padStart(3, 0) + '-'
31 + chunks.slice(1, 4).map(function (element) {
32 return element.toString().padStart(2, 0);
33 }).join(':');
34 };
35
36 var convertChunksToSeconds = function(chunks) {
37 var multiples = [24, 60, 60, 1];
38
39 return chunks.reduce(function (sum, value, index) {
40 var multiplier = multiples.slice(index, multiples.length).reduce(function (product, value) {
41 return product * value;
42 });
43
44 return sum + value * multiplier;
45 }, 0);
46 };
47
48 $.uamTimeInput = function(targetInput) {
49 var $input = $(targetInput);
50 var $newInput = $input.clone().attr('name', '');
51 $input.hide().before($newInput);
52
53 var existingValue = $input.val();
54
55 if (existingValue !== '') {
56 $newInput.val(formatChunks(convertRawChunksToTime([0, 0, 0, existingValue * 1])));
57 }
58
59 $newInput.on('keyup', function (event) {
60 var $this = $(this);
61 var selection = window.getSelection().toString();
62 var rawInput = $this.val();
63
64 if (selection !== ''
65 || rawInput === ''
66 || $.inArray(event.keyCode, [38, 40, 37, 39]) !== -1
67 ) {
68 return;
69 }
70
71 var domElement = $this.get(0);
72 var cursorStart = domElement.selectionStart;
73 var cursorEnd = domElement.selectionEnd;
74 var inputRegex = /(\d{3})(\d{2})(\d{2})(\d{2})/g;
75 var inputValue = rawInput.replace(/^\D+|:|-/g, '')
76 .substr(0, 9)
77 .padStart(9, 0);
78 var chunks = inputRegex.exec(inputValue);
79 chunks = convertRawChunksToTime([chunks[1], chunks[2], chunks[3], chunks[4]]);
80 $input.val(convertChunksToSeconds(chunks));
81
82 delay(function () {
83 $this.val(formatChunks(chunks));
84 domElement.setSelectionRange(cursorStart, cursorEnd);
85 }, 1000);
86 });
87 };
88
89 $.fn.uamTimeInput = function () {
90 this.each(function() {
91 $.uamTimeInput(this);
92 });
93
94 return this;
95 }
96 })(jQuery);