diff options
author | AlexKlimenkov <shurick.klimenkov@gmail.com> | 2017-01-31 18:38:36 +0300 |
---|---|---|
committer | AlexKlimenkov <shurick.klimenkov@gmail.com> | 2017-01-31 18:38:36 +0300 |
commit | ae92cf850550a9be965db867ba4bfb5651a18e5f (patch) | |
tree | bbf70ce45cc6e608def6e9a81570febe4528208b /codebase/sources/ext/dhtmlxscheduler_recurring.js | |
parent | 2e509c1f562c4f471d766c9b3532370f847f0839 (diff) | |
download | scheduler-ae92cf850550a9be965db867ba4bfb5651a18e5f.zip scheduler-ae92cf850550a9be965db867ba4bfb5651a18e5f.tar.gz scheduler-ae92cf850550a9be965db867ba4bfb5651a18e5f.tar.bz2 |
[update] version 4.4.0
Diffstat (limited to 'codebase/sources/ext/dhtmlxscheduler_recurring.js')
-rw-r--r-- | codebase/sources/ext/dhtmlxscheduler_recurring.js | 99 |
1 files changed, 58 insertions, 41 deletions
diff --git a/codebase/sources/ext/dhtmlxscheduler_recurring.js b/codebase/sources/ext/dhtmlxscheduler_recurring.js index 002c0a7..fa8886d 100644 --- a/codebase/sources/ext/dhtmlxscheduler_recurring.js +++ b/codebase/sources/ext/dhtmlxscheduler_recurring.js @@ -1,6 +1,6 @@ /* @license -dhtmlxScheduler v.4.3.1 +dhtmlxScheduler v.4.4.0 Stardard This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. @@ -73,6 +73,11 @@ scheduler.form_blocks["recurring"] = { return !multiselect ? col.value : [col.value]; }, + _get_node_numeric_value: function(els, name){ + var value = scheduler.form_blocks["recurring"]._get_node_value(els, name); + return ((value * 1) || 0); + }, + _set_node_value: function(els, name, value){ var col = els[name]; if(!col) return; @@ -249,13 +254,15 @@ scheduler.form_blocks["recurring"] = { var get_rcode = { month:function(code, dates) { var get_value = scheduler.form_blocks["recurring"]._get_node_value; + var get_numeric_value = scheduler.form_blocks["recurring"]._get_node_numeric_value; + if (get_value(els, "month_type") == "d") { - code.push(Math.max(1, get_value(els, "month_count"))); + code.push(Math.max(1, get_numeric_value(els, "month_count"))); dates.start.setDate(get_value(els, "month_day")); } else { - code.push(Math.max(1, get_value(els, "month_count2"))); + code.push(Math.max(1, get_numeric_value(els, "month_count2"))); code.push( get_value(els, "month_day2")); - code.push(Math.max(1, get_value(els, "month_week2"))); + code.push(Math.max(1, get_numeric_value(els, "month_week2"))); if (!scheduler.config.repeat_precise){ dates.start.setDate(1); } @@ -264,8 +271,9 @@ scheduler.form_blocks["recurring"] = { }, week:function(code, dates) { var get_value = scheduler.form_blocks["recurring"]._get_node_value; + var get_numeric_value = scheduler.form_blocks["recurring"]._get_node_numeric_value; - code.push(Math.max(1, get_value(els, "week_count"))); + code.push(Math.max(1, get_numeric_value(els, "week_count"))); code.push(""); code.push(""); var t = []; @@ -298,9 +306,10 @@ scheduler.form_blocks["recurring"] = { }, day:function(code) { var get_value = scheduler.form_blocks["recurring"]._get_node_value; + var get_numeric_value = scheduler.form_blocks["recurring"]._get_node_numeric_value; if (get_value(els, "day_type") == "d") { - code.push(Math.max(1, get_value(els, "day_count"))); + code.push(Math.max(1, get_numeric_value(els, "day_count"))); } else { code.push("week"); @@ -566,13 +575,18 @@ scheduler._rec_temp = []; scheduler.attachEvent("onEventIdChange", function(id, new_id) { if (this._ignore_call) return; this._ignore_call = true; - + if(scheduler._rec_markers[id]){ //important for for correct work of scheduler.getEvents(from, to) and collision detection scheduler._rec_markers[new_id] = scheduler._rec_markers[id]; delete scheduler._rec_markers[id]; } + if(scheduler._rec_markers_pull[id]){ + scheduler._rec_markers_pull[new_id] = scheduler._rec_markers_pull[id]; + delete scheduler._rec_markers_pull[id]; + } + for (var i = 0; i < this._rec_temp.length; i++) { var tev = this._rec_temp[i]; if (tev.event_pid == id) { @@ -581,6 +595,22 @@ scheduler.attachEvent("onEventIdChange", function(id, new_id) { } } + for(var i in this._rec_markers){ + var tev = this._rec_markers[i]; + if(tev.event_pid == id){ + tev.event_pid = new_id; + tev._pid_changed = true; + } + } + + var el = scheduler._rec_markers[new_id]; + if(el && el._pid_changed) { + delete el._pid_changed; + setTimeout(function() { + scheduler.callEvent("onEventChanged", [new_id, scheduler.getEvent(new_id)]); + }, 1); + } + delete this._ignore_call; }); scheduler.attachEvent("onConfirmedBeforeEventDelete", function(id) { @@ -883,13 +913,15 @@ scheduler.transpose_type = function(type) { } } }; -scheduler.repeat_date = function(ev, stack, non_render, from, to) { +scheduler.repeat_date = function(ev, stack, non_render, from, to, maxCount) { from = from || this._min_date; to = to || this._max_date; - + var max = maxCount || -1; var td = new Date(ev.start_date.valueOf()); + var visibleCount = 0; + if (!ev.rec_pattern && ev.rec_type) ev.rec_pattern = ev.rec_type.split("#")[0]; @@ -897,7 +929,7 @@ scheduler.repeat_date = function(ev, stack, non_render, from, to) { scheduler.date["transpose_" + ev.rec_pattern](td, from); while (td < ev.start_date || scheduler._fix_daylight_saving_date(td,from,ev,td,new Date(td.valueOf() + ev.event_length * 1000)).valueOf() <= from.valueOf() || td.valueOf() + ev.event_length * 1000 <= from.valueOf()) td = this.date.add(td, 1, ev.rec_pattern); - while (td < to && td < ev.end_date) { + while (td < to && td < ev.end_date && (max < 0 || visibleCount < max)) { var timestamp = (scheduler.config.occurrence_timestamp_in_utc) ? Date.UTC(td.getFullYear(), td.getMonth(), td.getDate(), td.getHours(), td.getMinutes(), td.getSeconds()) : td.valueOf(); var ch = this._get_rec_marker(timestamp, ev.id); if (!ch) { // unmodified element of series @@ -922,8 +954,15 @@ scheduler.repeat_date = function(ev, stack, non_render, from, to) { this._rec_temp.push(copy); } + visibleCount++; + } else - if (non_render) stack.push(ch); + if (non_render){ + if(ch.rec_type != "none"){ + visibleCount++; + } + stack.push(ch); + } td = this.date.add(td, 1, ev.rec_pattern); } @@ -944,13 +983,9 @@ scheduler._fix_daylight_saving_date = function(start_date, end_date, ev, counter }; scheduler.getRecDates = function(id, max) { var ev = typeof id == "object" ? id : scheduler.getEvent(id); - var count = 0; - var result = []; + var recurrings = []; max = max || 100; - - var td = new Date(ev.start_date.valueOf()); - var from = new Date(td.valueOf()); - + if (!ev.rec_type) { return [ { start_date: ev.start_date, end_date: ev.end_date } @@ -959,34 +994,16 @@ scheduler.getRecDates = function(id, max) { if (ev.rec_type == "none") { return []; } - this.transpose_type(ev.rec_pattern); - scheduler.date["transpose_" + ev.rec_pattern](td, from); - - while (td < ev.start_date || (td.valueOf() + ev.event_length * 1000) <= from.valueOf()) - td = this.date.add(td, 1, ev.rec_pattern); - while (td < ev.end_date) { - var ch = this._get_rec_marker(td.valueOf(), ev.id); - var res = true; - if (!ch) { // unmodified element of series - var sed = new Date(td); - var ted = new Date(td.valueOf() + ev.event_length * 1000); - ted = scheduler._fix_daylight_saving_date(sed, ted, ev, td, ted); + scheduler.repeat_date(ev, recurrings, true, ev.start_date, ev.end_date, max); - result.push({start_date:sed, end_date:ted}); - } else if(ch.rec_type == "none") { - res = false; - } else { - result.push({ start_date: ch.start_date, end_date: ch.end_date }); - } - - td = this.date.add(td, 1, ev.rec_pattern); - if (res) { - count++; - if (count == max) - break; + var result = []; + for(var i = 0; i < recurrings.length; i++){ + if(recurrings[i].rec_type != "none"){ + result.push({start_date: recurrings[i].start_date, end_date: recurrings[i].end_date}); } } + return result; }; scheduler.getEvents = function(from, to) { |