jsuites 4.17.2 → 4.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -585,6 +585,14 @@ div[data-before]:before {
585
585
  display:flex;
586
586
  }
587
587
 
588
+ .jcalendar_warning {
589
+ color: red;
590
+ }
591
+
592
+ .jcalendar-hide-controls .jcalendar-controls {
593
+ display: none;
594
+ }
595
+
588
596
 
589
597
  .jcolor {
590
598
  display: none;
@@ -17,7 +17,7 @@
17
17
 
18
18
  var jSuites = {};
19
19
 
20
- var Version = '4.17.2';
20
+ var Version = '4.17.4';
21
21
 
22
22
  var Events = function() {
23
23
 
@@ -910,6 +910,8 @@ jSuites.calendar = (function(el, options) {
910
910
  position: null,
911
911
  // Data type
912
912
  dataType: null,
913
+ // Controls
914
+ controls: true,
913
915
  }
914
916
 
915
917
  // Loop through our object
@@ -946,7 +948,7 @@ jSuites.calendar = (function(el, options) {
946
948
 
947
949
  if (jSuites.isNumeric(obj.options.value) && obj.options.value > 0) {
948
950
  obj.options.value = jSuites.calendar.numToDate(obj.options.value);
949
- // Data type numberic
951
+ // Data type numeric
950
952
  obj.options.dataType = 'numeric';
951
953
  }
952
954
 
@@ -1154,6 +1156,8 @@ jSuites.calendar = (function(el, options) {
1154
1156
  if (! newValue) {
1155
1157
  obj.date = null;
1156
1158
  var val = '';
1159
+ el.classList.remove('jcalendar_warning');
1160
+ el.title = '';
1157
1161
  } else {
1158
1162
  var value = obj.setLabel(newValue, obj.options);
1159
1163
  var date = newValue.split(' ');
@@ -1169,6 +1173,35 @@ jSuites.calendar = (function(el, options) {
1169
1173
  var i = parseInt(time[1]);
1170
1174
  obj.date = [ y, m, d, h, i, 0 ];
1171
1175
  var val = obj.setLabel(newValue, obj.options);
1176
+
1177
+ // Current selection day
1178
+ var current = jSuites.calendar.now(new Date(y, m-1, d), true);
1179
+
1180
+ // Available ranges
1181
+ if (obj.options.validRange) {
1182
+ if (! obj.options.validRange[0] || current >= obj.options.validRange[0]) {
1183
+ var test1 = true;
1184
+ } else {
1185
+ var test1 = false;
1186
+ }
1187
+
1188
+ if (! obj.options.validRange[1] || current <= obj.options.validRange[1]) {
1189
+ var test2 = true;
1190
+ } else {
1191
+ var test2 = false;
1192
+ }
1193
+
1194
+ if (! (test1 && test2)) {
1195
+ el.classList.add('jcalendar_warning');
1196
+ el.title = jSuites.translate('Date outside the valid range');
1197
+ } else {
1198
+ el.classList.remove('jcalendar_warning');
1199
+ el.title = '';
1200
+ }
1201
+ } else {
1202
+ el.classList.remove('jcalendar_warning');
1203
+ el.title = '';
1204
+ }
1172
1205
  }
1173
1206
 
1174
1207
  // New value
@@ -1192,6 +1225,10 @@ jSuites.calendar = (function(el, options) {
1192
1225
  }
1193
1226
 
1194
1227
  obj.getDays();
1228
+ // Render months
1229
+ if (obj.options.type == 'year-month-picker') {
1230
+ obj.getMonths();
1231
+ }
1195
1232
  }
1196
1233
 
1197
1234
  obj.getValue = function() {
@@ -1640,7 +1677,6 @@ jSuites.calendar = (function(el, options) {
1640
1677
 
1641
1678
  calendarContainer = document.createElement('div');
1642
1679
  calendarContainer.className = 'jcalendar-container';
1643
-
1644
1680
  calendarContent = document.createElement('div');
1645
1681
  calendarContent.className = 'jcalendar-content';
1646
1682
  calendarContainer.appendChild(calendarContent);
@@ -1833,6 +1869,11 @@ jSuites.calendar = (function(el, options) {
1833
1869
  obj.open();
1834
1870
  }
1835
1871
 
1872
+ // Controls
1873
+ if (obj.options.controls == false) {
1874
+ calendarContainer.classList.add('jcalendar-hide-controls');
1875
+ }
1876
+
1836
1877
  // Change method
1837
1878
  el.change = obj.setValue;
1838
1879
 
@@ -1971,24 +2012,30 @@ jSuites.calendar.toArray = function(value) {
1971
2012
  // Helper to extract date from a string
1972
2013
  jSuites.calendar.extractDateFromString = function(date, format) {
1973
2014
  var o = jSuites.mask(date, { mask: format }, true);
1974
-
2015
+
1975
2016
  // Check if in format Excel (Need difference with format date or type detected is numeric)
1976
2017
  if (date > 0 && Number(date) == date && (o.values.join("") !== o.value || o.type == "numeric")) {
1977
2018
  var d = new Date(Math.round((date - 25569)*86400*1000));
1978
2019
  return d.getFullYear() + "-" + jSuites.two(d.getMonth()) + "-" + jSuites.two(d.getDate()) + ' 00:00:00';
1979
2020
  }
1980
-
1981
- if (o.date[0] && o.date[1]) {
2021
+
2022
+ var complete = false;
2023
+
2024
+ if (o.values.length === o.tokens.length && o.values[o.values.length-1].length >= o.tokens[o.tokens.length-1].length) {
2025
+ complete = true;
2026
+ }
2027
+
2028
+ if (o.date[0] && o.date[1] && (o.date[2] || complete)) {
1982
2029
  if (! o.date[2]) {
1983
2030
  o.date[2] = 1;
1984
2031
  }
1985
2032
 
1986
2033
  return o.date[0] + '-' + jSuites.two(o.date[1]) + '-' + jSuites.two(o.date[2]) + ' ' + jSuites.two(o.date[3]) + ':' + jSuites.two(o.date[4])+ ':' + jSuites.two(o.date[5]);
1987
2034
  }
2035
+
1988
2036
  return '';
1989
2037
  }
1990
2038
 
1991
-
1992
2039
  var excelInitialTime = Date.UTC(1900, 0, 0);
1993
2040
  var excelLeapYearBug = Date.UTC(1900, 1, 29);
1994
2041
  var millisecondsPerDay = 86400000;
@@ -7075,7 +7122,7 @@ jSuites.mask = (function() {
7075
7122
  // Number
7076
7123
  numeric: [ '0{1}(.{1}0+)?' ],
7077
7124
  // Data tokens
7078
- datetime: [ 'YYYY', 'YYY', 'YY', 'MMMMM', 'MMMM', 'MMM', 'MM', 'DDDDD', 'DDDD', 'DDD', 'DD', 'DY', 'DAY', 'WD', 'D', 'Q', 'HH24', 'HH12', 'HH', '\\[H\\]', 'H', 'AM/PM', 'PM', 'AM', 'MI', 'SS', 'MS', 'MONTH', 'MON', 'Y', 'M' ],
7125
+ datetime: [ 'YYYY', 'YYY', 'YY', 'MMMMM', 'MMMM', 'MMM', 'MM', 'DDDDD', 'DDDD', 'DDD', 'DD', 'DY', 'DAY', 'WD', 'D', 'Q', 'MONTH', 'MON', 'HH24', 'HH12', 'HH', '\\[H\\]', 'H', 'AM/PM', 'PM', 'AM', 'MI', 'SS', 'MS', 'Y', 'M' ],
7079
7126
  // Other
7080
7127
  general: [ 'A', '0', '[0-9a-zA-Z\$]+', '.']
7081
7128
  }
@@ -7456,6 +7503,10 @@ jSuites.mask = (function() {
7456
7503
  if (isBlank(this.values[this.index])) {
7457
7504
  this.values[this.index] = '';
7458
7505
  }
7506
+ if (this.event && this.event.inputType && this.event.inputType.indexOf('delete') > -1) {
7507
+ this.values[this.index] += v;
7508
+ return;
7509
+ }
7459
7510
  var pos = 0;
7460
7511
  var count = 0;
7461
7512
  var value = (this.values[this.index] + v).toLowerCase();
@@ -7483,12 +7534,18 @@ jSuites.mask = (function() {
7483
7534
  this.date[1] = ret + 1;
7484
7535
  }
7485
7536
  },
7537
+ 'MON': function(v) {
7538
+ parser['MMM'].call(this, v);
7539
+ },
7486
7540
  'MMMM': function(v) {
7487
7541
  var ret = parser.FIND.call(this, v, monthsFull);
7488
7542
  if (ret !== undefined) {
7489
7543
  this.date[1] = ret + 1;
7490
7544
  }
7491
7545
  },
7546
+ 'MONTH': function(v) {
7547
+ parser['MMMM'].call(this, v);
7548
+ },
7492
7549
  'MMMMM': function(v) {
7493
7550
  if (isBlank(this.values[this.index])) {
7494
7551
  this.values[this.index] = '';
@@ -7620,9 +7677,15 @@ jSuites.mask = (function() {
7620
7677
  'DDD': function(v) {
7621
7678
  parser.FIND.call(this, v, weekDays);
7622
7679
  },
7680
+ 'DY': function(v) {
7681
+ parser['DDD'].call(this, v);
7682
+ },
7623
7683
  'DDDD': function(v) {
7624
7684
  parser.FIND.call(this, v, weekDaysFull);
7625
7685
  },
7686
+ 'DAY': function(v) {
7687
+ parser['DDDD'].call(this, v);
7688
+ },
7626
7689
  'HH12': function(v, two) {
7627
7690
  if (isBlank(this.values[this.index])) {
7628
7691
  if (parseInt(v) > 1 && parseInt(v) < 10) {
@@ -8152,6 +8215,7 @@ jSuites.mask = (function() {
8152
8215
  // Get tokens
8153
8216
  o.tokens = getTokens.call(o, o.mask);
8154
8217
  }
8218
+
8155
8219
  // On new input
8156
8220
  if (typeof(e) !== 'object' || ! e.inputType || ! e.inputType.indexOf('insert') || ! e.inputType.indexOf('delete')) {
8157
8221
  // Start transformation
@@ -8164,6 +8228,8 @@ jSuites.mask = (function() {
8164
8228
  } else {
8165
8229
  // Get tokens
8166
8230
  o.methods = getMethods.call(o, o.tokens);
8231
+ o.event = e;
8232
+
8167
8233
  // Go through all tokes
8168
8234
  while (o.position < o.value.length && typeof(o.tokens[o.index]) !== 'undefined') {
8169
8235
  // Get the appropriate parser
package/dist/jsuites.css CHANGED
@@ -585,6 +585,14 @@ div[data-before]:before {
585
585
  display:flex;
586
586
  }
587
587
 
588
+ .jcalendar_warning {
589
+ color: red;
590
+ }
591
+
592
+ .jcalendar-hide-controls .jcalendar-controls {
593
+ display: none;
594
+ }
595
+
588
596
 
589
597
  .jcolor {
590
598
  display: none;
package/dist/jsuites.js CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  var jSuites = {};
19
19
 
20
- var Version = '4.17.2';
20
+ var Version = '4.17.4';
21
21
 
22
22
  var Events = function() {
23
23
 
@@ -921,6 +921,8 @@ jSuites.calendar = (function(el, options) {
921
921
  position: null,
922
922
  // Data type
923
923
  dataType: null,
924
+ // Controls
925
+ controls: true,
924
926
  }
925
927
 
926
928
  // Loop through our object
@@ -957,7 +959,7 @@ jSuites.calendar = (function(el, options) {
957
959
 
958
960
  if (jSuites.isNumeric(obj.options.value) && obj.options.value > 0) {
959
961
  obj.options.value = jSuites.calendar.numToDate(obj.options.value);
960
- // Data type numberic
962
+ // Data type numeric
961
963
  obj.options.dataType = 'numeric';
962
964
  }
963
965
 
@@ -1165,6 +1167,8 @@ jSuites.calendar = (function(el, options) {
1165
1167
  if (! newValue) {
1166
1168
  obj.date = null;
1167
1169
  var val = '';
1170
+ el.classList.remove('jcalendar_warning');
1171
+ el.title = '';
1168
1172
  } else {
1169
1173
  var value = obj.setLabel(newValue, obj.options);
1170
1174
  var date = newValue.split(' ');
@@ -1180,6 +1184,35 @@ jSuites.calendar = (function(el, options) {
1180
1184
  var i = parseInt(time[1]);
1181
1185
  obj.date = [ y, m, d, h, i, 0 ];
1182
1186
  var val = obj.setLabel(newValue, obj.options);
1187
+
1188
+ // Current selection day
1189
+ var current = jSuites.calendar.now(new Date(y, m-1, d), true);
1190
+
1191
+ // Available ranges
1192
+ if (obj.options.validRange) {
1193
+ if (! obj.options.validRange[0] || current >= obj.options.validRange[0]) {
1194
+ var test1 = true;
1195
+ } else {
1196
+ var test1 = false;
1197
+ }
1198
+
1199
+ if (! obj.options.validRange[1] || current <= obj.options.validRange[1]) {
1200
+ var test2 = true;
1201
+ } else {
1202
+ var test2 = false;
1203
+ }
1204
+
1205
+ if (! (test1 && test2)) {
1206
+ el.classList.add('jcalendar_warning');
1207
+ el.title = jSuites.translate('Date outside the valid range');
1208
+ } else {
1209
+ el.classList.remove('jcalendar_warning');
1210
+ el.title = '';
1211
+ }
1212
+ } else {
1213
+ el.classList.remove('jcalendar_warning');
1214
+ el.title = '';
1215
+ }
1183
1216
  }
1184
1217
 
1185
1218
  // New value
@@ -1203,6 +1236,10 @@ jSuites.calendar = (function(el, options) {
1203
1236
  }
1204
1237
 
1205
1238
  obj.getDays();
1239
+ // Render months
1240
+ if (obj.options.type == 'year-month-picker') {
1241
+ obj.getMonths();
1242
+ }
1206
1243
  }
1207
1244
 
1208
1245
  obj.getValue = function() {
@@ -1651,7 +1688,6 @@ jSuites.calendar = (function(el, options) {
1651
1688
 
1652
1689
  calendarContainer = document.createElement('div');
1653
1690
  calendarContainer.className = 'jcalendar-container';
1654
-
1655
1691
  calendarContent = document.createElement('div');
1656
1692
  calendarContent.className = 'jcalendar-content';
1657
1693
  calendarContainer.appendChild(calendarContent);
@@ -1844,6 +1880,11 @@ jSuites.calendar = (function(el, options) {
1844
1880
  obj.open();
1845
1881
  }
1846
1882
 
1883
+ // Controls
1884
+ if (obj.options.controls == false) {
1885
+ calendarContainer.classList.add('jcalendar-hide-controls');
1886
+ }
1887
+
1847
1888
  // Change method
1848
1889
  el.change = obj.setValue;
1849
1890
 
@@ -1982,24 +2023,30 @@ jSuites.calendar.toArray = function(value) {
1982
2023
  // Helper to extract date from a string
1983
2024
  jSuites.calendar.extractDateFromString = function(date, format) {
1984
2025
  var o = jSuites.mask(date, { mask: format }, true);
1985
-
2026
+
1986
2027
  // Check if in format Excel (Need difference with format date or type detected is numeric)
1987
2028
  if (date > 0 && Number(date) == date && (o.values.join("") !== o.value || o.type == "numeric")) {
1988
2029
  var d = new Date(Math.round((date - 25569)*86400*1000));
1989
2030
  return d.getFullYear() + "-" + jSuites.two(d.getMonth()) + "-" + jSuites.two(d.getDate()) + ' 00:00:00';
1990
2031
  }
1991
-
1992
- if (o.date[0] && o.date[1]) {
2032
+
2033
+ var complete = false;
2034
+
2035
+ if (o.values.length === o.tokens.length && o.values[o.values.length-1].length >= o.tokens[o.tokens.length-1].length) {
2036
+ complete = true;
2037
+ }
2038
+
2039
+ if (o.date[0] && o.date[1] && (o.date[2] || complete)) {
1993
2040
  if (! o.date[2]) {
1994
2041
  o.date[2] = 1;
1995
2042
  }
1996
2043
 
1997
2044
  return o.date[0] + '-' + jSuites.two(o.date[1]) + '-' + jSuites.two(o.date[2]) + ' ' + jSuites.two(o.date[3]) + ':' + jSuites.two(o.date[4])+ ':' + jSuites.two(o.date[5]);
1998
2045
  }
2046
+
1999
2047
  return '';
2000
2048
  }
2001
2049
 
2002
-
2003
2050
  var excelInitialTime = Date.UTC(1900, 0, 0);
2004
2051
  var excelLeapYearBug = Date.UTC(1900, 1, 29);
2005
2052
  var millisecondsPerDay = 86400000;
@@ -7500,7 +7547,7 @@ jSuites.mask = (function() {
7500
7547
  // Number
7501
7548
  numeric: [ '0{1}(.{1}0+)?' ],
7502
7549
  // Data tokens
7503
- datetime: [ 'YYYY', 'YYY', 'YY', 'MMMMM', 'MMMM', 'MMM', 'MM', 'DDDDD', 'DDDD', 'DDD', 'DD', 'DY', 'DAY', 'WD', 'D', 'Q', 'HH24', 'HH12', 'HH', '\\[H\\]', 'H', 'AM/PM', 'PM', 'AM', 'MI', 'SS', 'MS', 'MONTH', 'MON', 'Y', 'M' ],
7550
+ datetime: [ 'YYYY', 'YYY', 'YY', 'MMMMM', 'MMMM', 'MMM', 'MM', 'DDDDD', 'DDDD', 'DDD', 'DD', 'DY', 'DAY', 'WD', 'D', 'Q', 'MONTH', 'MON', 'HH24', 'HH12', 'HH', '\\[H\\]', 'H', 'AM/PM', 'PM', 'AM', 'MI', 'SS', 'MS', 'Y', 'M' ],
7504
7551
  // Other
7505
7552
  general: [ 'A', '0', '[0-9a-zA-Z\$]+', '.']
7506
7553
  }
@@ -7881,6 +7928,10 @@ jSuites.mask = (function() {
7881
7928
  if (isBlank(this.values[this.index])) {
7882
7929
  this.values[this.index] = '';
7883
7930
  }
7931
+ if (this.event && this.event.inputType && this.event.inputType.indexOf('delete') > -1) {
7932
+ this.values[this.index] += v;
7933
+ return;
7934
+ }
7884
7935
  var pos = 0;
7885
7936
  var count = 0;
7886
7937
  var value = (this.values[this.index] + v).toLowerCase();
@@ -7908,12 +7959,18 @@ jSuites.mask = (function() {
7908
7959
  this.date[1] = ret + 1;
7909
7960
  }
7910
7961
  },
7962
+ 'MON': function(v) {
7963
+ parser['MMM'].call(this, v);
7964
+ },
7911
7965
  'MMMM': function(v) {
7912
7966
  var ret = parser.FIND.call(this, v, monthsFull);
7913
7967
  if (ret !== undefined) {
7914
7968
  this.date[1] = ret + 1;
7915
7969
  }
7916
7970
  },
7971
+ 'MONTH': function(v) {
7972
+ parser['MMMM'].call(this, v);
7973
+ },
7917
7974
  'MMMMM': function(v) {
7918
7975
  if (isBlank(this.values[this.index])) {
7919
7976
  this.values[this.index] = '';
@@ -8045,9 +8102,15 @@ jSuites.mask = (function() {
8045
8102
  'DDD': function(v) {
8046
8103
  parser.FIND.call(this, v, weekDays);
8047
8104
  },
8105
+ 'DY': function(v) {
8106
+ parser['DDD'].call(this, v);
8107
+ },
8048
8108
  'DDDD': function(v) {
8049
8109
  parser.FIND.call(this, v, weekDaysFull);
8050
8110
  },
8111
+ 'DAY': function(v) {
8112
+ parser['DDDD'].call(this, v);
8113
+ },
8051
8114
  'HH12': function(v, two) {
8052
8115
  if (isBlank(this.values[this.index])) {
8053
8116
  if (parseInt(v) > 1 && parseInt(v) < 10) {
@@ -8577,6 +8640,7 @@ jSuites.mask = (function() {
8577
8640
  // Get tokens
8578
8641
  o.tokens = getTokens.call(o, o.mask);
8579
8642
  }
8643
+
8580
8644
  // On new input
8581
8645
  if (typeof(e) !== 'object' || ! e.inputType || ! e.inputType.indexOf('insert') || ! e.inputType.indexOf('delete')) {
8582
8646
  // Start transformation
@@ -8589,6 +8653,8 @@ jSuites.mask = (function() {
8589
8653
  } else {
8590
8654
  // Get tokens
8591
8655
  o.methods = getMethods.call(o, o.tokens);
8656
+ o.event = e;
8657
+
8592
8658
  // Go through all tokes
8593
8659
  while (o.position < o.value.length && typeof(o.tokens[o.index]) !== 'undefined') {
8594
8660
  // Get the appropriate parser
package/package.json CHANGED
@@ -19,7 +19,7 @@
19
19
  "javascript plugins"
20
20
  ],
21
21
  "main": "dist/jsuites.js",
22
- "version": "4.17.2",
22
+ "version": "4.17.4",
23
23
  "bugs": "https://github.com/jsuites/jsuites/issues",
24
24
  "homepage": "https://github.com/jsuites/jsuites",
25
25
  "docs": "https://jsuites.net",