summaryrefslogtreecommitdiffstats
path: root/codebase/sources/ext/dhtmlxscheduler_recurring.js
diff options
context:
space:
mode:
authorAlexKlimenkov <shurick.klimenkov@gmail.com>2014-11-12 12:31:30 +0300
committerAlexKlimenkov <shurick.klimenkov@gmail.com>2014-11-12 12:31:30 +0300
commitb43931167c3a3229c89608fe0cac8cc6f28db9d5 (patch)
treea21af26a5b6fb026be2210d20263ae820337f99e /codebase/sources/ext/dhtmlxscheduler_recurring.js
parent18d5b85296811c84235763e3b39eb6f7715e8d19 (diff)
downloadscheduler-b43931167c3a3229c89608fe0cac8cc6f28db9d5.zip
scheduler-b43931167c3a3229c89608fe0cac8cc6f28db9d5.tar.gz
scheduler-b43931167c3a3229c89608fe0cac8cc6f28db9d5.tar.bz2
[update] version 4.2.0
Diffstat (limited to 'codebase/sources/ext/dhtmlxscheduler_recurring.js')
-rw-r--r--codebase/sources/ext/dhtmlxscheduler_recurring.js376
1 files changed, 298 insertions, 78 deletions
diff --git a/codebase/sources/ext/dhtmlxscheduler_recurring.js b/codebase/sources/ext/dhtmlxscheduler_recurring.js
index ad4a7a0..8f81264 100644
--- a/codebase/sources/ext/dhtmlxscheduler_recurring.js
+++ b/codebase/sources/ext/dhtmlxscheduler_recurring.js
@@ -1,5 +1,5 @@
/*
-dhtmlxScheduler v.4.1.0 Stardard
+dhtmlxScheduler v.4.2.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.
@@ -8,11 +8,87 @@ This software is covered by GPL license. You also can obtain Commercial or Enter
scheduler.config.occurrence_timestamp_in_utc = false;
scheduler.config.recurring_workdays = [1,2,3,4,5];
scheduler.form_blocks["recurring"] = {
+ _get_node : function(node){
+ if (typeof node == "string")
+ node = document.getElementById(node);
+ if (node.style.display == 'none')
+ node.style.display = "";
+ return node;
+ },
+ _outer_html: function(node){
+ return node.outerHTML || getOuterHTML(node);
+
+ //probably not needed, FF v10- only
+ function getOuterHTML(n){
+ var div = document.createElement('div'), h;
+ div.appendChild( n.cloneNode(true) );
+ h = div.innerHTML;
+ div = null;
+ return h;
+ }
+ },
render:function(sns) {
+ if(sns.form){
+ var rec = scheduler.form_blocks["recurring"];
+ var form = rec._get_node(sns.form);
+ return rec._outer_html(form);
+ }
+
return scheduler.__recurring_template;
+
},
_ds: {},
+ _get_form_node: function(els, name, value){
+ var col = els[name];
+ if(!col) return null;
+ if(col.nodeName) return col;
+
+ if(col.length){
+ for(var i=0; i < col.length; i++){
+ if(col[i].value == value)
+ return col[i];
+ }
+ }
+ },
+ _get_node_value: function(els, name, multiselect){
+ var col = els[name];
+ if(!col) return "";
+ if(col.length){
+ if(multiselect){
+ var res = [];
+ for (var i = 0; i < col.length; i++)
+ if (col[i].checked) res.push(col[i].value);
+
+ return res;
+ }else{
+ for (var i = 0; i < col.length; i++)
+ if (col[i].checked) return col[i].value;
+ }
+ }
+
+ if(col.value)
+ return !multiselect ? col.value : [col.value];
+ },
+
+ _set_node_value: function(els, name, value){
+ var col = els[name];
+ if(!col) return;
+
+ if(col.name == name){
+ col.value = value;
+ }else if(col.length){
+ var hash_value = typeof value == "object";
+ for (var i = 0; i < col.length; i++)
+ if (hash_value || col[i].value == value){
+ col[i].checked = hash_value ? !!value[col[i].value] : !!value;
+ }
+ }
+ },
+
_init_set_value:function(node, value, ev) {
+ var block = scheduler.form_blocks["recurring"];
+ var get_value = block._get_node_value;
+ var set_value = block._set_node_value;
scheduler.form_blocks["recurring"]._ds = {start:ev.start_date, end:ev._end_date};
var str_date_format = scheduler.date.str_to_date(scheduler.config.repeat_date);
@@ -26,17 +102,24 @@ scheduler.form_blocks["recurring"] = {
var date_str = scheduler.date.date_to_str(scheduler.config.repeat_date);
var top = node.getElementsByTagName("FORM")[0];
- var els = [];
+ var els = {};
function register_els(inps) {
for (var i = 0; i < inps.length; i++) {
var inp = inps[i];
- if (inp.type == "checkbox" || inp.type == "radio") {
- if (!els[inp.name])
- els[inp.name] = [];
- els[inp.name].push(inp);
- } else
- els[inp.name] = inp;
+
+ if(inp.name){
+ if(!els[inp.name]){
+ els[inp.name] = inp;
+ }else if(els[inp.name].nodeType){
+ var node = els[inp.name];
+ els[inp.name] = [node, inp];
+
+ }else{
+ els[inp.name].push(inp);
+ }
+
+ }
}
}
@@ -47,59 +130,129 @@ scheduler.form_blocks["recurring"] = {
var formatter = scheduler.date.date_to_str(scheduler.config.repeat_date);
scheduler.config.repeat_date_of_end = formatter(scheduler.date.add(scheduler._currentDate(), 30, "day"));
}
- els["date_of_end"].value = scheduler.config.repeat_date_of_end;
+ set_value(els, "date_of_end", scheduler.config.repeat_date_of_end);
var $ = function(a) {
- return document.getElementById(a);
+ return document.getElementById(a) || { style:{} };//return fake object if node not found
};
- function get_radio_value(name) {
- var col = els[name];
- for (var i = 0; i < col.length; i++)
- if (col[i].checked) return col[i].value;
- }
-
function change_current_view() {
$("dhx_repeat_day").style.display = "none";
$("dhx_repeat_week").style.display = "none";
$("dhx_repeat_month").style.display = "none";
$("dhx_repeat_year").style.display = "none";
$("dhx_repeat_" + this.value).style.display = "block";
+ scheduler.setLightboxSize();
}
function get_repeat_code(dates) {
- var code = [get_radio_value("repeat")];
+ var code = [get_value(els, "repeat")];
get_rcode[code[0]](code, dates);
while (code.length < 5) code.push("");
var repeat = "";
- if (els["end"][0].checked) {
+
+ var end = get_end_rule(els);
+
+ if (end == "no") {
dates.end = new Date(9999, 1, 1);
repeat = "no";
}
- else if (els["end"][2].checked) {
- dates.end = str_date(els["date_of_end"].value);
+ else if (end == "date_of_end") {
+ dates.end = str_date(get_value(els, "date_of_end"));
}
else {
scheduler.transpose_type(code.join("_"));
- repeat = Math.max(1, els["occurences_count"].value);
- var transp = ((code[0] == "week" && code[4] && code[4].toString().indexOf(scheduler.config.start_on_monday ? 1 : 0) == -1) ? 1 : 0);
+ repeat = Math.max(1, get_value(els, "occurences_count"));
+
+ var transp = 0;
+
+ //var transp = ((code[0] == "week" && code[4] && code[4].toString().indexOf(scheduler.config.start_on_monday ? 1 : 0) == -1) ? 1 : 0);
+
+ // which is equal to following code, seems to produce extra instance, not clear why needed
+
+ /*if(code[0] == "week"){
+ var days = code[4] || "";
+ if(scheduler.config.start_on_monday){
+ if(days.indexOf(1) == -1)
+ transp = 1;
+ }else{
+ if(days.indexOf(0) == -1)
+ transp = 1;
+ }
+ }*/
+
dates.end = scheduler.date.add(new Date(dates.start), repeat + transp, code.join("_"));
}
return code.join("_") + "#" + repeat;
}
+ function get_end_rule(els){
+ var end = els["end"];
+ if(end.length){
+ for(var i =0; i < end.length; i++){
+ if(end[i].checked){
+ if(end[i].value && end[i].value != "on"){//seems to be default value:var input = document.createElement("input"); input.type = "radio"; input.value
+ return end[i].value;
+ }else{
+ if(!i){
+ return "no";
+ }else if(i == 2){
+ return "date_of_end";
+ }else{
+ return "occurences_count";
+ }
+ }
+ }
+ }
+ }else{
+ if(end.value)
+ return end.value;
+ }
+ return "no";
+ }
+ function set_end_rule(els, value){
+ var end = els["end"];
+
+ if(end.length){
+ var has_values = !!end[0].value;
+ if(has_values){
+ for(var i =0; i < end.length; i++){
+ if(end[i].value == value)
+ end[i].checked = true;
+ }
+ }else{
+ var ind = 0;
+ switch(value){
+ case "no":
+ ind = 0;
+ break;
+ case "date_of_end":
+ ind = 2;
+ break;
+ default:
+ ind = 1;
+ break;
+ }
+ end[ind].checked = true;
+ }
+ }else{
+ end.value = value;
+ }
+ }
+
scheduler.form_blocks["recurring"]._get_repeat_code = get_repeat_code;
var get_rcode = {
month:function(code, dates) {
- if (get_radio_value("month_type") == "d") {
- code.push(Math.max(1, els["month_count"].value));
- dates.start.setDate(els["month_day"].value);
+ var get_value = scheduler.form_blocks["recurring"]._get_node_value;
+ if (get_value(els, "month_type") == "d") {
+ code.push(Math.max(1, get_value(els, "month_count")));
+ dates.start.setDate(get_value(els, "month_day"));
} else {
- code.push(Math.max(1, els["month_count2"].value));
- code.push(els["month_day2"].value);
- code.push(Math.max(1, els["month_week2"].value));
+ code.push(Math.max(1, get_value(els, "month_count2")));
+ code.push( get_value(els, "month_day2"));
+ code.push(Math.max(1, get_value(els, "month_week2")));
if (!scheduler.config.repeat_precise){
dates.start.setDate(1);
}
@@ -107,19 +260,21 @@ scheduler.form_blocks["recurring"] = {
dates._start = true;
},
week:function(code, dates) {
- code.push(Math.max(1, els["week_count"].value));
+ var get_value = scheduler.form_blocks["recurring"]._get_node_value;
+
+ code.push(Math.max(1, get_value(els, "week_count")));
code.push("");
code.push("");
var t = [];
- var col = els["week_day"];
+
+ var col = get_value(els, "week_day", true);
+ //var col = els["week_day"];
var day = dates.start.getDay();
var start_exists = false;
for (var i = 0; i < col.length; i++){
- if (col[i].checked) {
- t.push(col[i].value);
- start_exists = start_exists || col[i].value == day;
- }
+ t.push(col[i]);
+ start_exists = start_exists || col[i] == day;
}
if (!t.length){
t.push(day);
@@ -139,8 +294,10 @@ scheduler.form_blocks["recurring"] = {
code.push(t.join(","));
},
day:function(code) {
- if (get_radio_value("day_type") == "d") {
- code.push(Math.max(1, els["day_count"].value));
+ var get_value = scheduler.form_blocks["recurring"]._get_node_value;
+
+ if (get_value(els, "day_type") == "d") {
+ code.push(Math.max(1, get_value(els, "day_count")));
}
else {
code.push("week");
@@ -152,98 +309,128 @@ scheduler.form_blocks["recurring"] = {
}
},
year:function(code, dates) {
- if (get_radio_value("year_type") == "d") {
+ var get_value = scheduler.form_blocks["recurring"]._get_node_value;
+
+ if (get_value(els, "year_type") == "d") {
code.push("1");
dates.start.setMonth(0);
- dates.start.setDate(els["year_day"].value);
- dates.start.setMonth(els["year_month"].value);
+ dates.start.setDate(get_value(els, "year_day"));
+ dates.start.setMonth(get_value(els, "year_month"));
} else {
code.push("1");
- code.push(els["year_day2"].value);
- code.push(els["year_week2"].value);
+ code.push(get_value(els, "year_day2"));
+ code.push(get_value(els, "year_week2"));
dates.start.setDate(1);
- dates.start.setMonth(els["year_month2"].value);
+ dates.start.setMonth(get_value(els, "year_month2"));
}
dates._start = true;
}
};
var set_rcode = {
week:function(code, dates) {
- els["week_count"].value = code[1];
- var col = els["week_day"];
+ var set_value = scheduler.form_blocks["recurring"]._set_node_value;
+ set_value(els, "week_count", code[1]);
+
var t = code[4].split(",");
var d = {};
for (var i = 0; i < t.length; i++) d[t[i]] = true;
- for (var i = 0; i < col.length; i++)
- col[i].checked = (!!d[col[i].value]);
+
+ set_value(els, "week_day", d);
+
+ //for (var i = 0; i < col.length; i++)
+ // col[i].checked = (!!d[col[i].value]);
},
month:function(code, dates) {
+ var set_value = scheduler.form_blocks["recurring"]._set_node_value;
+
if (code[2] === "") {
- els["month_type"][0].checked = true;
- els["month_count"].value = code[1];
- els["month_day"].value = dates.start.getDate();
+ set_value(els, "month_type", "d");
+ set_value(els, "month_count", code[1]);
+ set_value(els, "month_day", dates.start.getDate());
} else {
- els["month_type"][1].checked = true;
- els["month_count2"].value = code[1];
- els["month_week2"].value = code[3];
- els["month_day2"].value = code[2];
+ set_value(els, "month_type", "w");
+ set_value(els, "month_count2", code[1]);
+ set_value(els, "month_week2", code[3]);
+ set_value(els, "month_day2", code[2]);
}
},
day:function(code, dates) {
- els["day_type"][0].checked = true;
- els["day_count"].value = code[1];
+ var set_value = scheduler.form_blocks["recurring"]._set_node_value;
+ set_value(els, "day_type", "d");
+ set_value(els, "day_count", code[1]);
},
year:function(code, dates) {
+ var set_value = scheduler.form_blocks["recurring"]._set_node_value;
+
if (code[2] === "") {
- els["year_type"][0].checked = true;
- els["year_day"].value = dates.start.getDate();
- els["year_month"].value = dates.start.getMonth();
+ set_value(els, "year_type", "d");
+ set_value(els, "year_day", dates.start.getDate());
+ set_value(els, "year_month", dates.start.getMonth());
+
} else {
- els["year_type"][1].checked = true;
- els["year_week2"].value = code[3];
- els["year_day2"].value = code[2];
- els["year_month2"].value = dates.start.getMonth();
+ set_value(els, "year_type", "w");
+ set_value(els, "year_week2", code[3]);
+ set_value(els, "year_day2", code[2]);
+ set_value(els, "year_month2", dates.start.getMonth());
}
}
};
function set_repeat_code(code, dates) {
+ var set_value = scheduler.form_blocks["recurring"]._set_node_value;
var data = code.split("#");
code = data[0].split("_");
set_rcode[code[0]](code, dates);
- var e = els["repeat"][({day:0, week:1, month:2, year:3})[code[0]]];
+
+
switch (data[1]) {
case "no":
- els["end"][0].checked = true;
+ set_end_rule(els, "no");
break;
case "":
- els["end"][2].checked = true;
+ set_end_rule(els, "date_of_end");
var end_date = dates.end;
if (scheduler.config.include_end_by){
end_date = scheduler.date.add(end_date, -1, 'day');
}
+ set_value(els, "date_of_end", date_str(end_date));
- els["date_of_end"].value = date_str(end_date);
break;
default:
- els["end"][1].checked = true;
- els["occurences_count"].value = data[1];
+ set_end_rule(els, "occurences_count");
+ set_value(els, "occurences_count", data[1]);
+
break;
}
- e.checked = true;
- e.onclick();
+ set_value(els, "repeat", code[0]);
+ //e.checked = true;
+
+ var node = scheduler.form_blocks["recurring"]._get_form_node(els, "repeat", code[0]);
+ if(node.nodeName == "SELECT" && node.onchange){
+ node.onchange();
+ }else if(node.onclick){
+ node.onclick();
+ }
}
+ function activate(els, mode){
+ }
scheduler.form_blocks["recurring"]._set_repeat_code = set_repeat_code;
for (var i = 0; i < top.elements.length; i++) {
var el = top.elements[i];
switch (el.name) {
case "repeat":
- el.onclick = change_current_view;
+ if(el.nodeName == "SELECT"){
+ el.onchange = change_current_view;
+ }else{
+ el.onclick = change_current_view;
+ }
+
+
break;
}
}
@@ -288,21 +475,54 @@ scheduler.form_blocks["recurring"] = {
}
return ev.rec_type;
},
- focus:function(node) {
+ _get_button: function(){
+ var node = scheduler.formSection("recurring").header;
+ return node.firstChild.firstChild;
},
- button_click:function(index, el, section, cont) {
+ _get_form: function(){
+ return scheduler.formSection("recurring").node;
+ },
+ open:function(){
+ var block = scheduler.form_blocks.recurring;
+
+ var cont = block._get_form();
+ if(!cont.open)
+ block._toggle_block();
+ },
+ close: function(){
+ var block = scheduler.form_blocks.recurring;
+
+ var cont = block._get_form();
+
+ if(cont.open)
+ block._toggle_block();
+ },
+ _toggle_block: function(){
+ var block = scheduler.form_blocks.recurring;
+
+ var cont = block._get_form(),
+ el = block._get_button();
if (!cont.open && !cont.blocked) {
- cont.style.height = "115px";
- el.style.backgroundPosition = "-5px 0px";
- el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring_open;
+ cont.style.height = "auto";//reset to default value
+ if(el){
+ el.style.backgroundPosition = "-5px 0px";
+ el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring_open;
+ }
} else {
cont.style.height = "0px";
- el.style.backgroundPosition = "-5px 20px";
- el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring;
+ if(el){
+ el.style.backgroundPosition = "-5px 20px";
+ el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring;
+ }
}
cont.open = !cont.open;
scheduler.setLightboxSize();
+ },
+ focus:function(node) {
+ },
+ button_click:function(index, el, section, cont) {
+ scheduler.form_blocks.recurring._toggle_block();
}
};