dhtmlx-scheduler 5.3.11 → 5.3.14

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.
Files changed (142) hide show
  1. package/README.md +2 -2
  2. package/bower.json +1 -1
  3. package/codebase/dhtmlxscheduler.css +2 -2
  4. package/codebase/dhtmlxscheduler.d.ts +1 -1
  5. package/codebase/dhtmlxscheduler.js +259 -257
  6. package/codebase/dhtmlxscheduler_contrast_black.css +2 -2
  7. package/codebase/dhtmlxscheduler_contrast_white.css +2 -2
  8. package/codebase/dhtmlxscheduler_flat.css +2 -2
  9. package/codebase/dhtmlxscheduler_material.css +2 -2
  10. package/codebase/dhtmlxscheduler_terrace.css +2 -2
  11. package/codebase/ext/dhtmlxscheduler_active_links.js +3 -3
  12. package/codebase/ext/dhtmlxscheduler_agenda_view.js +1 -1
  13. package/codebase/ext/dhtmlxscheduler_all_timed.js +1 -1
  14. package/codebase/ext/dhtmlxscheduler_collision.js +1 -1
  15. package/codebase/ext/dhtmlxscheduler_container_autoresize.js +1 -1
  16. package/codebase/ext/dhtmlxscheduler_cookie.js +1 -1
  17. package/codebase/ext/dhtmlxscheduler_csp.js +1 -1
  18. package/codebase/ext/dhtmlxscheduler_editors.js +1 -1
  19. package/codebase/ext/dhtmlxscheduler_expand.js +2 -2
  20. package/codebase/ext/dhtmlxscheduler_html_templates.js +1 -1
  21. package/codebase/ext/dhtmlxscheduler_key_nav.js +68 -68
  22. package/codebase/ext/dhtmlxscheduler_layer.js +12 -12
  23. package/codebase/ext/dhtmlxscheduler_limit.js +1 -1
  24. package/codebase/ext/dhtmlxscheduler_map_view.js +1 -1
  25. package/codebase/ext/dhtmlxscheduler_minical.js +2 -2
  26. package/codebase/ext/dhtmlxscheduler_monthheight.js +1 -1
  27. package/codebase/ext/dhtmlxscheduler_multiselect.js +1 -1
  28. package/codebase/ext/dhtmlxscheduler_multisource.js +1 -1
  29. package/codebase/ext/dhtmlxscheduler_mvc.js +1 -1
  30. package/codebase/ext/dhtmlxscheduler_outerdrag.js +1 -1
  31. package/codebase/ext/dhtmlxscheduler_pdf.js +1 -1
  32. package/codebase/ext/dhtmlxscheduler_quick_info.js +1 -1
  33. package/codebase/ext/dhtmlxscheduler_readonly.js +1 -1
  34. package/codebase/ext/dhtmlxscheduler_recurring.js +28 -24
  35. package/codebase/ext/dhtmlxscheduler_serialize.js +3 -3
  36. package/codebase/ext/dhtmlxscheduler_tooltip.js +1 -1
  37. package/codebase/ext/dhtmlxscheduler_url.js +1 -1
  38. package/codebase/ext/dhtmlxscheduler_wp.js +1 -1
  39. package/codebase/ext/dhtmlxscheduler_year_view.js +1 -1
  40. package/codebase/locale/locale_ar.js +1 -1
  41. package/codebase/locale/locale_be.js +1 -1
  42. package/codebase/locale/locale_ca.js +1 -1
  43. package/codebase/locale/locale_cn.js +1 -1
  44. package/codebase/locale/locale_cs.js +1 -1
  45. package/codebase/locale/locale_da.js +1 -1
  46. package/codebase/locale/locale_de.js +1 -1
  47. package/codebase/locale/locale_el.js +1 -1
  48. package/codebase/locale/locale_en.js +1 -1
  49. package/codebase/locale/locale_es.js +1 -1
  50. package/codebase/locale/locale_fi.js +1 -1
  51. package/codebase/locale/locale_fr.js +1 -1
  52. package/codebase/locale/locale_he.js +1 -1
  53. package/codebase/locale/locale_hu.js +1 -1
  54. package/codebase/locale/locale_id.js +1 -1
  55. package/codebase/locale/locale_it.js +1 -1
  56. package/codebase/locale/locale_jp.js +1 -1
  57. package/codebase/locale/locale_nb.js +1 -1
  58. package/codebase/locale/locale_nl.js +1 -1
  59. package/codebase/locale/locale_no.js +1 -1
  60. package/codebase/locale/locale_pl.js +1 -1
  61. package/codebase/locale/locale_pt.js +1 -1
  62. package/codebase/locale/locale_ro.js +1 -1
  63. package/codebase/locale/locale_ru.js +1 -1
  64. package/codebase/locale/locale_si.js +1 -1
  65. package/codebase/locale/locale_sk.js +1 -1
  66. package/codebase/locale/locale_sv.js +1 -1
  67. package/codebase/locale/locale_tr.js +1 -1
  68. package/codebase/locale/locale_ua.js +1 -1
  69. package/codebase/sources/dhtmlxscheduler.js +83 -16
  70. package/codebase/sources/dhtmlxscheduler.js.map +1 -1
  71. package/codebase/sources/ext/dhtmlxscheduler_active_links.js +1 -1
  72. package/codebase/sources/ext/dhtmlxscheduler_agenda_view.js +1 -1
  73. package/codebase/sources/ext/dhtmlxscheduler_all_timed.js +1 -1
  74. package/codebase/sources/ext/dhtmlxscheduler_collision.js +1 -1
  75. package/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js +1 -1
  76. package/codebase/sources/ext/dhtmlxscheduler_cookie.js +1 -1
  77. package/codebase/sources/ext/dhtmlxscheduler_csp.js +1 -1
  78. package/codebase/sources/ext/dhtmlxscheduler_editors.js +1 -1
  79. package/codebase/sources/ext/dhtmlxscheduler_expand.js +1 -1
  80. package/codebase/sources/ext/dhtmlxscheduler_html_templates.js +1 -1
  81. package/codebase/sources/ext/dhtmlxscheduler_key_nav.js +52 -18
  82. package/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map +1 -1
  83. package/codebase/sources/ext/dhtmlxscheduler_layer.js +1 -1
  84. package/codebase/sources/ext/dhtmlxscheduler_limit.js +1 -1
  85. package/codebase/sources/ext/dhtmlxscheduler_map_view.js +1 -1
  86. package/codebase/sources/ext/dhtmlxscheduler_minical.js +5 -1
  87. package/codebase/sources/ext/dhtmlxscheduler_minical.js.map +1 -1
  88. package/codebase/sources/ext/dhtmlxscheduler_monthheight.js +1 -1
  89. package/codebase/sources/ext/dhtmlxscheduler_multiselect.js +1 -1
  90. package/codebase/sources/ext/dhtmlxscheduler_multisource.js +1 -1
  91. package/codebase/sources/ext/dhtmlxscheduler_mvc.js +1 -1
  92. package/codebase/sources/ext/dhtmlxscheduler_outerdrag.js +1 -1
  93. package/codebase/sources/ext/dhtmlxscheduler_pdf.js +1 -1
  94. package/codebase/sources/ext/dhtmlxscheduler_quick_info.js +1 -1
  95. package/codebase/sources/ext/dhtmlxscheduler_readonly.js +1 -1
  96. package/codebase/sources/ext/dhtmlxscheduler_recurring.js +103 -11
  97. package/codebase/sources/ext/dhtmlxscheduler_recurring.js.map +1 -1
  98. package/codebase/sources/ext/dhtmlxscheduler_serialize.js +1 -1
  99. package/codebase/sources/ext/dhtmlxscheduler_tooltip.js +1 -1
  100. package/codebase/sources/ext/dhtmlxscheduler_url.js +1 -1
  101. package/codebase/sources/ext/dhtmlxscheduler_wp.js +1 -1
  102. package/codebase/sources/ext/dhtmlxscheduler_year_view.js +1 -1
  103. package/codebase/sources/less/package.json +2 -2
  104. package/codebase/sources/less/skins/basic/ext.less +16 -7
  105. package/codebase/sources/less/skins/material/add_styles.less +2 -1
  106. package/codebase/sources/locale/locale_ar.js +1 -1
  107. package/codebase/sources/locale/locale_be.js +1 -1
  108. package/codebase/sources/locale/locale_ca.js +1 -1
  109. package/codebase/sources/locale/locale_cn.js +1 -1
  110. package/codebase/sources/locale/locale_cs.js +1 -1
  111. package/codebase/sources/locale/locale_da.js +1 -1
  112. package/codebase/sources/locale/locale_de.js +1 -1
  113. package/codebase/sources/locale/locale_el.js +1 -1
  114. package/codebase/sources/locale/locale_en.js +1 -1
  115. package/codebase/sources/locale/locale_es.js +1 -1
  116. package/codebase/sources/locale/locale_fi.js +1 -1
  117. package/codebase/sources/locale/locale_fr.js +1 -1
  118. package/codebase/sources/locale/locale_he.js +1 -1
  119. package/codebase/sources/locale/locale_hu.js +1 -1
  120. package/codebase/sources/locale/locale_id.js +1 -1
  121. package/codebase/sources/locale/locale_it.js +1 -1
  122. package/codebase/sources/locale/locale_jp.js +1 -1
  123. package/codebase/sources/locale/locale_nb.js +1 -1
  124. package/codebase/sources/locale/locale_nl.js +1 -1
  125. package/codebase/sources/locale/locale_no.js +1 -1
  126. package/codebase/sources/locale/locale_pl.js +1 -1
  127. package/codebase/sources/locale/locale_pt.js +1 -1
  128. package/codebase/sources/locale/locale_ro.js +1 -1
  129. package/codebase/sources/locale/locale_ru.js +1 -1
  130. package/codebase/sources/locale/locale_si.js +1 -1
  131. package/codebase/sources/locale/locale_sk.js +1 -1
  132. package/codebase/sources/locale/locale_sv.js +1 -1
  133. package/codebase/sources/locale/locale_tr.js +1 -1
  134. package/codebase/sources/locale/locale_ua.js +1 -1
  135. package/codebase/sources/skins/dhtmlxscheduler.css +13 -9
  136. package/codebase/sources/skins/dhtmlxscheduler_contrast_black.css +13 -9
  137. package/codebase/sources/skins/dhtmlxscheduler_contrast_white.css +13 -9
  138. package/codebase/sources/skins/dhtmlxscheduler_flat.css +13 -9
  139. package/codebase/sources/skins/dhtmlxscheduler_material.css +15 -10
  140. package/codebase/sources/skins/dhtmlxscheduler_terrace.css +13 -9
  141. package/package.json +1 -1
  142. package/whatsnew.md +26 -0
@@ -1,7 +1,7 @@
1
1
  /*
2
2
 
3
3
  @license
4
- dhtmlxScheduler v.5.3.11 Standard
4
+ dhtmlxScheduler v.5.3.14 Standard
5
5
 
6
6
  To use dhtmlxScheduler in non-GPL projects (and get Pro version of the product), please obtain Commercial/Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxScheduler/#licensing or contact us at sales@dhtmlx.com
7
7
 
@@ -1953,7 +1953,7 @@ Scheduler.plugin = function (code) {
1953
1953
  };
1954
1954
  Scheduler._schedulerPlugins = [];
1955
1955
  Scheduler.getSchedulerInstance = function () {
1956
- var scheduler = { version: "5.3.11" };
1956
+ var scheduler = { version: "5.3.14" };
1957
1957
 
1958
1958
  var commonViews = {
1959
1959
  agenda: "https://docs.dhtmlx.com/scheduler/agenda_view.html",
@@ -2674,7 +2674,9 @@ scheduler.select=function(id){
2674
2674
  if (this._select_id==id) return;
2675
2675
  scheduler._close_not_saved();
2676
2676
  this.editStop(false);
2677
- this.unselect();
2677
+ if(this._select_id){
2678
+ this.unselect();
2679
+ }
2678
2680
  this._select_id = id;
2679
2681
  this.updateEvent(id);
2680
2682
  this.callEvent("onEventSelected", [id]);
@@ -2731,7 +2733,7 @@ scheduler._click={
2731
2733
  scheduler._click.buttons[mask.split(" ")[1].replace("icon_","")](id);
2732
2734
  } else{
2733
2735
  scheduler._close_not_saved();
2734
- if (new Date().valueOf()-(scheduler._new_event||0) > 500){
2736
+ if (scheduler.getState().select_id && new Date().valueOf()-(scheduler._new_event||0) > 500){
2735
2737
  scheduler.unselect();
2736
2738
  }
2737
2739
  }
@@ -3450,7 +3452,7 @@ scheduler.update_view=function(){
3450
3452
 
3451
3453
  var view = this[this._mode + "_view"];
3452
3454
  if(view){
3453
- view(true);
3455
+ view.call(this, true);
3454
3456
  }else{
3455
3457
  this._reset_scale();
3456
3458
  }
@@ -4264,6 +4266,32 @@ scheduler.eventRemove = function(el, event, handler){
4264
4266
  ].join(", "));
4265
4267
 
4266
4268
  var nodesArray = Array.prototype.slice.call(nodes, 0);
4269
+
4270
+ for(var i = 0; i < nodesArray.length; i++){
4271
+ nodesArray[i].$position = i;
4272
+ // we remember original nodes order,
4273
+ // so when we sort them by tabindex we ensure order of nodes with same tabindex is preserved,
4274
+ // since some browsers do unstable sort
4275
+ }
4276
+
4277
+ nodesArray.sort(function(a, b) {
4278
+ if(a.tabIndex === 0 && b.tabIndex !== 0){
4279
+ return 1;
4280
+ }
4281
+ if(a.tabIndex !== 0 && b.tabIndex === 0){
4282
+ return -1;
4283
+ }
4284
+
4285
+ if (a.tabIndex === b.tabIndex){
4286
+ // ensure we do stable sort
4287
+ return a.$position - b.$position;
4288
+ }
4289
+ if (a.tabIndex < b.tabIndex) {
4290
+ return -1;
4291
+ }
4292
+ return 1;
4293
+ });
4294
+
4267
4295
  for(var i = 0; i < nodesArray.length; i++){
4268
4296
  var node = nodesArray[i];
4269
4297
  var isValid = (hasNonNegativeTabIndex(node) || isEnabled(node) || hasHref(node)) && isVisible(node);
@@ -5577,6 +5605,9 @@ scheduler.addEvent = function(start_date, end_date, text, id, extra_data) {
5577
5605
  if (ev.start_date.valueOf() == ev.end_date.valueOf())
5578
5606
  ev.end_date.setTime(ev.end_date.valueOf() + d);
5579
5607
 
5608
+ ev.start_date.setMilliseconds(0);
5609
+ ev.end_date.setMilliseconds(0);
5610
+
5580
5611
  ev._timed = this.isOneDayEvent(ev);
5581
5612
 
5582
5613
  var is_new = !this._events[ev.id];
@@ -5591,7 +5622,9 @@ scheduler.deleteEvent = function(id, silent) {
5591
5622
  if (!silent && (!this.callEvent("onBeforeEventDelete", [id, ev]) || !this.callEvent("onConfirmedBeforeEventDelete", [id, ev])))
5592
5623
  return;
5593
5624
  if (ev) {
5594
- this._select_id = null;
5625
+ if(scheduler.getState().select_id == id){
5626
+ scheduler.unselect();
5627
+ }
5595
5628
  delete this._events[id];
5596
5629
  this.event_updated(ev);
5597
5630
 
@@ -5677,7 +5710,7 @@ scheduler.is_visible_events = function(ev) {
5677
5710
  lastHour = this.config.last_hour,
5678
5711
  firstHour = this.config.first_hour;
5679
5712
 
5680
- var end_dates_visible = (this._table_view || !((evLastHour > lastHour || evLastHour < firstHour) && (evFirstHour >= lastHour || evFirstHour < firstHour)));
5713
+ var end_dates_visible = (this._table_view || !((evLastHour > lastHour || evLastHour <= firstHour) && (evFirstHour >= lastHour || evFirstHour < firstHour)));
5681
5714
 
5682
5715
  if(end_dates_visible){
5683
5716
  return true;
@@ -5687,7 +5720,7 @@ scheduler.is_visible_events = function(ev) {
5687
5720
  var event_duration = (ev.end_date.valueOf() - ev.start_date.valueOf()) / (1000*60*60),//hours
5688
5721
  hidden_duration = 24 - (this.config.last_hour - this.config.first_hour);
5689
5722
 
5690
- return !!((event_duration > hidden_duration) || (evFirstHour < lastHour && evLastHour >= firstHour));
5723
+ return !!((event_duration > hidden_duration) || (evFirstHour < lastHour && evLastHour > firstHour));
5691
5724
 
5692
5725
  }
5693
5726
  }else{
@@ -6781,8 +6814,11 @@ scheduler.showEvent = function(id, mode) {
6781
6814
 
6782
6815
  scheduler.setCurrentView(new Date(ev.start_date), mode);
6783
6816
 
6784
- ev.color = original_color;
6785
- ev.textColor = original_text_color;
6817
+ function restoreOriginalColors(){
6818
+ ev.color = original_color;
6819
+ ev.textColor = original_text_color;
6820
+ }
6821
+
6786
6822
  scheduler.config.scroll_hour = scroll_hour;
6787
6823
  scheduler.config.preserve_scroll = preserve_scroll;
6788
6824
 
@@ -6806,11 +6842,24 @@ scheduler.showEvent = function(id, mode) {
6806
6842
  var container = scheduler.$container.querySelector(".dhx_timeline_data_wrapper");
6807
6843
  left = left - (container.offsetWidth - timeline.dx) / 2;
6808
6844
  top = top - container.offsetHeight / 2 + timeline.dy/2;
6845
+
6846
+ if (timeline._smartRenderingEnabled()) {
6847
+ var handlerId = timeline.attachEvent("onScroll", function(){
6848
+ restoreOriginalColors();
6849
+ timeline.detachEvent(handlerId);
6850
+ });
6851
+ }
6852
+
6809
6853
  timeline.scrollTo({
6810
6854
  left: left,
6811
6855
  top: top
6812
6856
  });
6857
+ if (!timeline._smartRenderingEnabled()) {
6858
+ restoreOriginalColors();
6859
+ }
6813
6860
  }
6861
+ }else{
6862
+ restoreOriginalColors();
6814
6863
  }
6815
6864
 
6816
6865
  scheduler.callEvent("onAfterEventDisplay", [ev, mode]);
@@ -7342,13 +7391,22 @@ scheduler.attachEvent("onXLE", function() {
7342
7391
  scheduler._lightbox_controls = {};
7343
7392
  scheduler.formSection = function(name){
7344
7393
  var config = this.config.lightbox.sections;
7345
- var i =0;
7346
- for (i; i < config.length; i++)
7347
- if (config[i].name == name)
7394
+ var i = 0;
7395
+ for (i; i < config.length; i++) {
7396
+ if (config[i].name == name) {
7348
7397
  break;
7398
+ }
7399
+ }
7400
+
7401
+ if (i === config.length) {
7402
+ // GS-1662 section not found, should exit here instead of throwing an error
7403
+ return null;
7404
+ }
7405
+
7349
7406
  var section = config[i];
7350
- if (!scheduler._lightbox)
7407
+ if (!scheduler._lightbox) {
7351
7408
  scheduler.getLightbox();
7409
+ }
7352
7410
  var header = document.getElementById(section.id);
7353
7411
  var node = header.nextSibling;
7354
7412
 
@@ -7611,6 +7669,11 @@ scheduler.form_blocks={
7611
7669
 
7612
7670
  if(cfg.auto_end_date && cfg.event_duration) {
7613
7671
  var _update_lightbox_select = function () {
7672
+
7673
+ if (!(cfg.auto_end_date && cfg.event_duration)){
7674
+ // setting may be disabled after the handler is attached
7675
+ return;
7676
+ }
7614
7677
  start_date = new Date(s[map[3]].value,s[map[2]].value,s[map[1]].value,0,s[map[0]].value);
7615
7678
  end_date = new Date(start_date.getTime() + (scheduler.config.event_duration * 60 * 1000));
7616
7679
  _fill_lightbox_select(s, 4, end_date);
@@ -7788,7 +7851,6 @@ scheduler._empty_lightbox=function(data){
7788
7851
  scheduler.hide_lightbox=function(id){
7789
7852
  scheduler.endLightbox(false, this.getLightbox());
7790
7853
  };
7791
- scheduler.hideLightbox = scheduler.hide_lightbox;
7792
7854
 
7793
7855
  scheduler.hideCover=function(box){
7794
7856
  if (box) box.style.display="none";
@@ -7852,9 +7914,14 @@ scheduler.resetLightbox = function(){
7852
7914
  scheduler._lightbox = null;
7853
7915
  };
7854
7916
  scheduler.cancel_lightbox=function(){
7855
- this.callEvent("onEventCancel",[this._lightbox_id, this._new_event]);
7917
+ if(this._lightbox_id){
7918
+ this.callEvent("onEventCancel",[this._lightbox_id, this._new_event]);
7919
+ }
7920
+
7856
7921
  this.hide_lightbox();
7857
7922
  };
7923
+ scheduler.hideLightbox = scheduler.cancel_lightbox;// GS-1650 need to use cancel in order to fire onEventCancel event, which is important to refresh the state of recurring series
7924
+
7858
7925
  scheduler._init_lightbox_events=function(){
7859
7926
  this.getLightbox().onclick=function(e){
7860
7927
  var src=e?e.target:event.srcElement;