Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var openedAllRec = false;
- var recordView = false;
- var BLOCK_HEIGHT = 19; // Фиксированный размер блока (30 мин)
- /**
- * Инициализирует события быстрого редактирования в календаре
- */
- function init_calendar_fast_edit() {
- var elems = $('[class^="fast_edit_span_"].not-init, input.sub_edit_link_input.not-init');
- if (elems.length > 0) {
- elems.each(function(i, elem) {
- if ($(elem).hasClass('fast_edit_text')) {
- addHandler_text(elem);
- autosize(elem);
- } else if ($(elem).hasClass('fast_edit_span--multi-select')) {
- addHandler_mult_select(elem);
- } else if ($(elem).hasClass('sub_fast_edit_select--select')) {
- addHandler_select(elem);
- } else if ($(elem).hasClass('combobox') ||
- $(elem).hasClass('sub_edit_link')) {
- calendar_combobox($(elem), true);
- } else if ($(elem).hasClass('fast_edit_file')) {
- addHandler_file(elem);
- } else if ($(elem).hasClass('fast_edit_datepicker')) {
- addHandler_date(elem);
- $(elem).datetimepicker({
- showOn:"button",
- buttonImage: "images/calbtn.png",
- buttonImageOnly: true,
- buttonText: lang.Calendar,
- showAnim: (('\v'=='v')?"":"show")
- });
- }
- });
- }
- $('.not-init').each(function() {
- $(this).removeClass('not-init');
- });
- }
- // Показать/скрыть календарь сбоку
- function viewMiniCalendar() {
- if (document.getElementById("mini_calendar_layout").style.display == "none") { // Календарь скрыт - показываем
- $("#mini_calendar_layout").animate({width: "show", opacity: "show", marginLeft: "30px"}, 200);
- $.cookie("mini_calendar_hide" + calendar.id, null);
- document.getElementById("view_calendar_arrow").innerHTML = "◀";
- }
- else { // Скрываем календарь
- $("#mini_calendar_layout").animate({width: "hide", opacity: "hide", marginLeft: "0px"}, 200);
- $.cookie("mini_calendar_hide" + calendar.id, 1);
- document.getElementById("view_calendar_arrow").innerHTML = "▶";
- hideOneEvent();
- }
- setTimeout("fixCalendarLayout()", 300);
- }
- // Листание календаря сбоку, dir - направление, вперёд-назад от текущей даты
- function getMiniCalendar(dir) {
- $("#mini_calendar_header").animate({color: '#c0c0c0'}, 200);
- $.ajax({
- type: "POST",
- url: "calendar.php",
- data: {
- csrf: csrf,
- id: calendar.id,
- get: 'mini_calendar',
- data: {month: calendar.month, year: calendar.year, direction: dir}
- },
- success: function (msg) {
- obj_data = JSON.parse(msg);
- if (!obj_data) {
- jalert("Incorrect response server!");
- return;
- }
- var mini_calendar = obj_data.mini_calendar;
- document.getElementById("mini_calendar_header").innerHTML = obj_data.monthname + " " + obj_data.year;
- $("#mini_calendar_header").animate({color: '#000000'}, 200);
- calendar.month = obj_data.month;
- calendar.year = obj_data.year;
- // Построение календаря
- var cal_content = "";
- for (str_num in mini_calendar) {
- cal_content += "<tr";
- if (mini_calendar[str_num]['cur_week']) cal_content += " class='m_cur_week'"; // Текущая неделя
- cal_content += ">";
- for (day_num in mini_calendar[str_num]) {
- if (day_num == "cur_week") continue;
- cal_content += "<td onclick='jumpToDay(" + mini_calendar[str_num][day_num]['day'] + ", " + mini_calendar[str_num][day_num]['month'] + ", " + mini_calendar[str_num][day_num]['year'] + ")'";
- if (mini_calendar[str_num][day_num]['cur'] != "1" || mini_calendar[str_num][day_num]['today'] == "1") {
- cal_content += " style='";
- if (mini_calendar[str_num][day_num]['cur'] != "1") // День текущего отображаемого месяца
- cal_content += "color:#989898;";
- if (mini_calendar[str_num][day_num]['today'] == "1")
- cal_content += "border: 1px dotted #989898; color: #cd6b69"; // Сегодняшний день
- cal_content += "'";
- }
- cal_content += ">"
- if (mini_calendar[str_num][day_num]['event'] == "1")
- cal_content += "<b>" + mini_calendar[str_num][day_num]['day'] + "</b>";
- else
- cal_content += mini_calendar[str_num][day_num]['day'];
- cal_content + "</td>";
- }
- cal_content += "</tr>";
- }
- $("#mini_calendar_content").animate({opacity: 'hide'}, 200, function () {
- $("#mini_calendar_content").html(cal_content);
- $("#mini_calendar_content").animate({opacity: 'show'}, 400);
- });
- }
- });
- }
- // Переходы по типам и страницам календаря
- /**
- * @param {string} type - режим календаря(день, неделя, месяц)
- */
- function calendar_transition(link, type) {
- if (type) {
- $.cookie('default_calendar_view', type)
- }
- if ($(".event_options_block:visible").length > 0) {
- $("#fast_search_submit_form").attr("action", link);
- fastSearchSubmit();
- }
- else
- location.href = link;
- }
- // Переход ко дню
- function jumpToDay(day, month, year) {
- calendar_transition("calendar.php?id=" + calendar.id + "&day=" + day + "&month=" + month + "&year=" + year);
- }
- // Показать все записи дня (временно не используется)
- function viewAllRecords(day, month, year) {
- if (openedAllRec) {
- hideAllRecords();
- setTimeout("viewAllRecords('" + day + "', " + month + ", " + year + ")", 100);
- return;
- }
- var qWidth;
- var qHeight;
- document.getElementById("q_short_header_" + day + "_" + month + "_" + year).style.display = "none";
- document.getElementById("q_full_header_" + day + "_" + month + "_" + year).style.display = "block";
- qWidth = '300';
- document.getElementById("quadr_" + day + "_" + month + "_" + year).style.width = "300px";
- document.getElementById("quadr_" + day + "_" + month + "_" + year).style.position = "absolute";
- document.getElementById("quadr_" + day + "_" + month + "_" + year).style.zIndex = 400;
- document.getElementById("quadr_" + day + "_" + month + "_" + year).style.border = "1px solid black";
- document.getElementById("quadr_" + day + "_" + month + "_" + year).style.background = "#ffffff";
- $("#hidden_items" + day + "_" + month + "_" + year).animate({height: "show"}, 200);
- $("#more_link" + day + "_" + month + "_" + year).animate({height: "hide", opacity: "hide"}, 200);
- openedAllRec = day + "_" + month + "_" + year;
- }
- // Скрыть все записи дня (временно не используется)
- function hideAllRecords() {
- if (!openedAllRec) return;
- $("#more_link" + openedAllRec).animate({height: "show", opacity: "show"}, 100);
- $("#hidden_items" + openedAllRec).animate({height: "hide"}, 100);
- sourceWidth = $("#cell_" + openedAllRec).width() + "px";
- $("#quadr_" + openedAllRec).animate({width: sourceWidth, marginLeft: "0px"}, 100, function () {
- document.getElementById("quadr_" + openedAllRec).style.position = "static";
- document.getElementById("quadr_" + openedAllRec).style.zIndex = 0;
- document.getElementById("quadr_" + openedAllRec).style.border = "none";
- document.getElementById("quadr_" + openedAllRec).style.background = "transparent";
- document.getElementById("q_short_header_" + openedAllRec).style.display = "block";
- document.getElementById("q_full_header_" + openedAllRec).style.display = "none";
- //$("#cell_" + openedAllRec).find("[id^=calendar_event_line_]").width($("#quadr_" + openedAllRec).width()-4);
- openedAllRec = false;
- });
- }
- var my_event_id = calendar.default_event;
- // Смена события по умолчанию
- function changeDefautEvent(event_id) {
- my_event_id = event_id;
- if (event_id == calendar.default_event) return; // Клик по текущему событию
- calendar.default_event = event_id;
- $.cookie("calendar_default_event" + calendar.id, event_id);
- $(".calendar_legend_event").removeClass("calendar_legend_default");
- $("#calendar_legend_event" + event_id).addClass("calendar_legend_default");
- if (calendar.group_field != all_calendar_events[event_id]['group_field'] && calendar.day) // Дневной вид, поле группировки текущего события не равно полю группировки нового события - перестраиваем календарь
- window.location.reload();
- }
- // Скрытые события
- /**
- * @param {string} event_id
- * @param {string} hce - hidden calendar event
- * @param {boolean} - first init flag
- */
- var hiddenEvents = new Object;
- function viewHideEvents(event_id, type, flag = false) {
- if ($.cookie("hce_" + event_id + "_" + type) && !flag) { // Отображаем события
- $(".calendar_event_id" + event_id).fadeIn(200);
- $("#one_event_legend" + event_id).animate({opacity: 1}, 200);
- $.removeCookie("hce_" + event_id + "_" + type);
- }
- else { // скрываем события
- $(".calendar_event_id" + event_id).fadeOut(200);
- $("#one_event_legend" + event_id).animate({opacity: 0.3}, 200);
- viewSystemHelp(event_id, 0)
- $.cookie("hce_" + event_id + "_" + type, true);
- }
- }
- function resizeRow() {
- var ma = new Array();
- var start = new Date();
- var rows = $('#big_calendar table tbody')[0].childElementCount;
- var table_all_options = [];
- var event_condition = '';
- for (var i = 0; i < Object.keys(all_calendar_events).length; i++) {
- table_all_options.push(Object.keys(all_calendar_events)[i]);
- event_condition += Object.keys(all_calendar_events)[i];
- }
- ma[event_condition] = new Array();
- for (var i = 0; i < rows; i++) {
- ma[event_condition]['row'+i] = new Array();
- }
- for (var i = 1; i < rows; i++) {
- if (i % 2) {
- var el = $('#big_calendar table tbody')[0].children[i].children[1];
- } else {
- var el = $('#big_calendar table tbody')[0].children[i].children[0];
- }
- for (var j = 0; j < el.children.length ; j++) {
- if (el.children[j].getAttribute('is_background') == 0) {
- var sortby = parseInt(el.children[j].id.split("_")[el.children[j].id.split("_").length-1]);
- var inside_el = el.children[j];
- var bg_event = inside_el.getAttribute('is_background') ? false : true;
- ma[event_condition]['row'+i].push({
- sortby,
- id: inside_el.id,
- width: '0',
- clone: false,
- bg: bg_event,
- order: j+1,
- checked: false
- });
- if (inside_el.getAttribute('event_length') > 1) {
- for (var k = 1; k < inside_el.getAttribute('event_length'); k++) {
- ma[event_condition]['row' + (i + k)].push({
- sortby,
- id: inside_el.id,
- width: '0',
- clone: true,
- bg: bg_event,
- order: null,
- checked: false
- })
- }
- }
- }
- }
- }
- // сортируем массив по колизиям
- var trash = Object.keys(ma[event_condition]);
- var trashRow = [];
- var trashRow2 = [];
- for (var i = 1; i < trash.length; i++) {
- var prev_row, this_row;
- prev_row = JSON.parse(JSON.stringify(ma[event_condition][trash[i-1]]));
- this_row = JSON.parse(JSON.stringify(ma[event_condition][trash[i]]));
- trashRow = JSON.parse(JSON.stringify(ma[event_condition][trash[i]]));
- if (prev_row.length > 0 && this_row.length > 0) {
- for (var j = 0; j < this_row.length; j++) {
- for (var k = 0; k < prev_row.length; k++) {
- if(this_row[j].id === prev_row[k].id) {
- prev_row[k].checked = true;
- prev_row[k].clone = true;
- trashRow[j].checked = true;
- }
- }
- }
- var s = trashRow.length;
- while (s--) {
- if (trashRow[s].checked) {
- trashRow.splice(s, 1);
- }
- }
- var g = prev_row.length;
- while (g--) {
- if (!prev_row[g].checked && (trashRow.length !== 0)) {
- prev_row[g] = trashRow[0];
- prev_row[g].checked = true;
- trashRow.shift();
- }
- }
- for (var j = 0; j < prev_row.length; j++) {
- if (!prev_row[j].checked) {
- prev_row.splice(j, 1);
- }
- }
- //если не выпотрошили прошлый ряд, присовываем
- while (trashRow.length > 0) {
- trashRow[0].checked = true;
- prev_row.push(trashRow[0]);
- trashRow.shift();
- }
- for (var j = 0; j < prev_row.length; j++) {
- if (prev_row[j].checked) {
- prev_row[j].checked = false;
- }
- }
- ma[event_condition]['row'+i] = prev_row;
- }
- }
- var max_elements_in_row = 0;
- for (i=0; i< trash.length; i++) {
- if (ma[event_condition][trash[i]].length > max_elements_in_row) {
- max_elements_in_row = ma[event_condition][trash[i]].length;
- }
- }
- var maxTableWidth = parseInt($(window).width() - $("#calendar_pad").width()) - 67 - 74;
- var elements_width = maxTableWidth/max_elements_in_row;
- for (var i = 0; i < trash.length; i++) {
- for (var j = 0; j < ma[event_condition][trash[i]].length; j++) {
- ma[event_condition][trash[i]][j].width = elements_width + 'px';
- ma[event_condition][trash[i]][j].margin = elements_width*ma[event_condition][trash[i]][j].order + 'px';
- }
- }
- var end = new Date();
- console.log('max_elements_in_row = ' + max_elements_in_row);
- console.log('time = ' + (end - start));
- return [ma, max_elements_in_row];
- }
- // вытаскиваем уникальные ключи в одномерном массиве
- function unique(arr) {
- var obj = {};
- for (var i = 0; i < arr.length; i++) {
- var str = arr[i];
- obj[str] = true;
- }
- return Object.keys(obj);
- }
- // Показать быстрый поиск события
- function toogleOptions(event_id) {
- if (document.getElementById("event_opitons" + event_id).style.display == "none") { // Показываем быстрый поиск
- $("#event_opitons" + event_id).animate({height: 'show', opacity: 'show'}, 200);
- document.getElementById("toogle_event_option" + event_id).innerHTML = "▼";
- if (document.getElementById("event_fast_search_submit").style.display == "none") // Показываем кнопку "применить", если она не выведена
- $("#event_fast_search_submit").fadeIn(400);
- }
- else { // Скрываем быстрый поиск
- $("#event_opitons" + event_id).animate({height: 'hide', opacity: 'hide'}, 200, function () {
- document.getElementById("event_opitons" + event_id).style.display = "none";
- if ($("[id^=event_opitons]:visible").length == 0) // Скрываем кнопку "применить", если больше нет отображаемых опций
- $("#event_fast_search_submit").fadeOut(200);
- });
- document.getElementById("toogle_event_option" + event_id).innerHTML = "▶";
- }
- }
- // Быстрый поиск
- function fastSearchSubmit() {
- // Строим форму по полям быстрого поиска
- $("#calendar_event_list [id^=fast_edit_span_]").each(function () {
- var fieldId = $(this).attr("field_id");
- var eventId = str_replace("fast_edit_span_" + fieldId + "_e", "", this.id);
- if ($(this).attr("f_value") != undefined) var value = $(this).attr("f_value");
- else var value = $(this).val();
- document.getElementById("fast_search_submit_form").innerHTML += "<input type='hidden' name='event_fast_search_input[" + eventId + "][" + fieldId + "]' value='" + value + "' />";
- });
- // Отправляем форму
- document.getElementById("fast_search_submit_form").submit();
- }
- // Позиция открытого блока события
- function positionEventBlock(event_id, e_object) {
- hideOneEvent();
- var docWidth = $(document).width();
- if (e_object.pageX == null && e_object.clientX != null) { // Для IE
- var html = document.documentElement
- var body = document.body
- e_object.pageX = e_object.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0)
- e_object.pageY = e_object.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0)
- }
- // Координаты блока
- oLeft = e_object.pageX - 130;
- if (oLeft < 20) oLeft = 20;
- if (oLeft + 420 > docWidth) oLeft = oLeft - (oLeft + 350 - docWidth)
- oTop = e_object.pageY + 10;
- document.getElementById("record_card_add" + event_id).style.left = oLeft + "px";
- document.getElementById("record_card_add" + event_id).style.top = oTop + "px";
- $("#record_card_add" + event_id).css({marginTop: "0px", marginLeft: "0px"});
- // Ширина и высота блока
- var curHeight = $("#record_card_add" + event_id).height();
- var curWidth = $("#record_card_add" + event_id).width();
- // Перестраиваем координаты
- var newPosX = 0 - intval(curWidth / 5);
- var newPosY = -curHeight - 40;
- if ((oLeft - newPosX) < 0)
- newPosX = 0;
- newPosXt = newPosX + "px";
- newPosYt = newPosY + "px";
- $("#record_card_add" + event_id).css({marginTop: newPosYt, marginLeft: newPosXt});
- // Стрелка блока (изначально внизу)
- document.getElementById("event_top_arrow" + event_id).style.display = "none";
- document.getElementById("event_bottom_arrow" + event_id).style.display = "block";
- // Показываем блок
- $("#record_card_add" + event_id).animate({opacity: 'show'}, 300);
- var curPos = $("#record_card_add" + event_id).offset();
- if (curPos.left <= 0) // Смещение влево
- $("#record_card_add" + event_id).css({marginLeft: "-10px"});
- }
- // Сдвиг блока от текущего положения
- function offsetEventBlock(event_id) {
- var newPosY = parseInt($("#record_card_add" + event_id).css("margin-top"));
- var curPos = $("#record_card_add" + event_id).offset();
- var bHeight = $("#event_view_hidden" + event_id).height();
- var diffHeight = bHeight - 70;
- // Смещаем высоту,
- if (diffHeight > 0) {
- newPosY = newPosY - diffHeight;
- if ((curPos.top + newPosY) <= 0) { // Перемещаем блок под событие, а не над ним, устанавливаем стрелку сверху
- newPosY = 0;
- document.getElementById("event_top_arrow" + event_id).style.display = "block";
- document.getElementById("event_bottom_arrow" + event_id).style.display = "none";
- }
- newPosYt = newPosY + "px";
- bHeight += "px";
- $("#event_view_edit_add" + event_id).animate({height: bHeight}, 200, function () {
- $(this).css("height", "auto");
- });
- $("#record_card_add" + event_id).animate({marginTop: newPosYt}, 200);
- }
- $("#event_view_hidden" + event_id).animate({opacity: 'show', height: 'show'}, 200);
- }
- // Показать в карточке события форму для добавления записей в связанные поля
- function add_link_block_show(field_id, event_id) {
- var curMargin = parseInt(document.getElementById("record_card_add" + event_id).style.marginTop);
- var fullHeight = 0;
- if (document.getElementById("add_link_block" + field_id).style.display == "none") {
- var firstValue = $("[id^=fast_edit_span_" + field_id + "]").val();
- l_field_id = all_fields[field_id]['s_field_id'];
- var v_o = document.getElementById("fast_edit_span_" + l_field_id + "_" + field_id + "_0");
- if (!v_o)
- v_o = document.getElementById("fast_edit_span_" + l_field_id + "_new_0");
- if (v_o) {
- if (typeof(v_o.value) === 'undefined')
- v_o.innerHTML = firstValue;
- else
- v_o.value = firstValue;
- }
- $("#add_link_block" + field_id).show();
- fullHeight += parseInt($("#add_link_block" + field_id).height());
- var newMarginTop = curMargin - fullHeight;
- document.getElementById("record_card_add" + event_id).style.marginTop = newMarginTop + "px";
- var maxInputWidth = 350 - parseInt($(".textpad_field_name").width());
- $(".textpad div, .textpad input, .textpad select .textpad").each(function () {
- if (parseInt($(this).width()) > maxInputWidth) $(this).width(maxInputWidth);
- });
- }
- else {
- fullHeight += parseInt($("#add_link_block" + field_id).height());
- var newMarginTop = curMargin + fullHeight;
- document.getElementById("record_card_add" + event_id).style.marginTop = newMarginTop + "px";
- $("#add_link_block" + field_id).hide();
- }
- }
- var addFieldsList = new Object;
- // Сохранить новое значение в поле связи
- function add_link_block_save(field_id, event_id) {
- var insertObj = new Object;
- for (addFieldId in addFieldsList) { // Формируем значения
- one_field = addFieldsList[addFieldId];
- type_field = one_field.type_field;
- v_o = document.getElementById("fast_edit_span_" + addFieldId + "_" + field_id + "_0");
- if (!v_o)
- v_o = document.getElementById("fast_edit_span_" + addFieldId + "_new_0");
- if (!v_o) continue;
- if ((type_field == 1) || (type_field == 2) || (type_field == 12) || (type_field == 3) || (type_field == 10) || (type_field == 4) || (type_field == 7) || (type_field == 14)) {
- if (typeof(v_o.value) === 'undefined')
- insertObj[addFieldId] = v_o.innerHTML;
- else {
- var sourceValue = v_o.value;
- if ((type_field == 4 || type_field == 7 || type_field == 14) && one_field.mult_value != "1" && sourceValue == "") {
- var reserveValue = $(v_o).next("span").html();
- if (reserveValue != "") {
- $(v_o).find("option").each(function () {
- if ($(this).html() == reserveValue) {
- $(this).attr("selected", true);
- sourceValue = $(this).attr("value")
- $(v_o).val(sourceValue);
- }
- });
- }
- }
- insertObj[addFieldId] = sourceValue;
- }
- }
- else if (type_field == 5)
- insertObj[addFieldId] = v_o.getAttribute('f_value');
- if (all_fields[field_id]['s_field_id'] == addFieldId) {
- var sFieldVal = insertObj[addFieldId];
- if (type_field == 7 || type_field == 14)
- sFieldVal = $(v_o).next("span").html();
- }
- }
- for (addFieldId in insertObj) {
- one_field = addFieldsList[addFieldId];
- type_field = one_field.type_field;
- if (insertObj[addFieldId] == "" || ((type_field == 1 || type_field == 7 || type_field == 14) && insertObj[addFieldId] == "0")) { // Не заполнены обязательные поля
- jalert(lang.Qst_required_alert + " '" + addFieldsList[addFieldId]['name_field'] + "'!");
- return;
- }
- }
- $.ajax({
- type: "POST",
- url: "calendar.php",
- data: {
- csrf: csrf,
- id: calendar.id,
- put: 'new_link_line',
- table_id: all_fields[field_id]['s_table_id'],
- data: insertObj
- },
- success: function (input) {
- var data = JSON.parse(input);
- if (!data) {
- jalert("JSON parse error!");
- return;
- }
- if (data.error) {
- jalert(data.error)
- return;
- }
- sFieldVal = str_replace("&", "&", sFieldVal);
- sFieldVal = str_replace(""", "\"", sFieldVal);
- sFieldVal = str_replace("'", "'", sFieldVal);
- sFieldVal = str_replace("<", "<", sFieldVal);
- sFieldVal = str_replace(">", ">", sFieldVal);
- $("[id^=fast_edit_span_" + field_id + "]").val(sFieldVal);
- $("[id^=fast_edit_span_" + field_id + "]").attr("f_value", data.new_line_id);
- $("[id^=fast_edit_span_" + field_id + "]").change();
- add_link_block_show(field_id, event_id)
- }
- });
- }
- // Просмотр события
- function viewOneEvent(event_id, line_id, e, str, cell) {
- if (document.getElementById("record_card_add" + event_id).style.display != "none") {
- hideOneEvent();
- return;
- }
- // Выводим блок в позицию и отображаем
- positionEventBlock(event_id, e);
- var eventTableId = all_calendar_events[event_id]['table_id'];
- var eventNameTable = all_calendar_events[event_id]['name_table'];
- // Ссылка на строку, скрываем кнопку "сохранить"
- document.getElementById("go_event_link" + event_id).innerHTML = "<a href='view_line2.php?table=" + eventTableId + "&line=" + line_id + "&back_url=" + back_url + "'>" + lang.Jump_to_record + " »</a>";
- document.getElementById("go_event_link" + event_id).style.display = "block";
- document.getElementById("save_event_button" + event_id).style.display = "none";
- highlightEvent(true, event_id, line_id); // Подсвечиваем событие, как при наведении
- $.ajax({
- type: "POST",
- url: "calendar.php",
- data: {csrf: csrf, id: calendar.id, get: 'event', data: {event_id: event_id, line_id: line_id}},
- success: function (msg) {
- resp = JSON.parse(msg);
- if (!resp) {
- jalert("JSON parse error!");
- return;
- }
- var date_fields = "";
- var nameDateField = "";
- addFieldsList = new Object;
- // Выводим ответ от сервера в блок события
- document.getElementById("event_view_edit_add" + event_id).style.backgroundImage = "none";
- if (resp.status == "error")
- eventText = "<div style='text-align: center; font-style: oblique; margin: 15px 0px -15px;'>" + resp.value + "</div>";
- else if (resp.status == "ok") {
- eventText = "<table cellpadding='0' cellspacing='0' border='0' class='textpad' style='margin: 10px 0px'>";
- fields = resp.value;
- var evalStr = "";
- for (orderField in fields) {
- one_field = fields[orderField];
- fieldId = one_field.field_id;
- if ((one_field.type_field == 1 || (one_field.type_field == 3 && one_field.view_html != "1")) && one_field.value.allow_write == "1") fullValue = one_field.value.fast_edit_div + one_field.value.fast_edit_div_close;
- else fullValue = one_field.value.fast_edit_div + one_field.value.value + one_field.value.fast_edit_div_close;
- if (one_field.date_field == "1") { // Дата события
- if (one_field.type_value == 1) {
- fullValue = fullValue.replace(" datepicker ", " datetimepicker fast_edit_datetime ");
- }
- date_fields = fullValue + date_fields;
- if (nameDateField == "") nameDateField = one_field.name + ": ";
- }
- else if (one_field.period_field == "1") { // Период события
- if (one_field.type_value == 1) {
- fullValue = fullValue.replace(" datepicker ", " datetimepicker fast_edit_datetime ");
- }
- date_fields += " " + lang.since_to + ": " + fullValue
- nameDateField = lang.since_from + ": ";
- }
- else { // Обычное поле
- eventText += "<tr><td style='vertical-align: middle; max-width: 200px; overflow: hidden' class='textpad_field_name'><b>" + one_field.name + ": </b></td>";
- eventText += "<td style='width: 100%;";
- if (one_field.add_link_fields != "0")
- eventText += " white-space: nowrap;";
- else if (!one_field.fast_edit_div)
- eventText += " white-space: normal;";
- if (one_field.type_value == 1) {
- fullValue = fullValue.replace(" datepicker ", " datetimepicker fast_edit_datetime ");
- }
- eventText += "' id='sub_cell_" + fieldId + "_" + line_id + "'>" + fullValue + "";
- if (one_field.add_link_fields != "0") {
- eventText += "<img src=\"images/green_plus.png\" style=\"margin-top: 5px;\" class=\"add_link_img\" onclick=\"add_link_block_show(" + fieldId + ", " + event_id + ")\" onmouseover=\"this.src='images/green_plus_active.png'\" onmouseout=\"this.src='images/green_plus.png'\" />";
- eventText += "</td></tr>";
- eventText += "<tbody id='add_link_block" + fieldId + "' class=\"add_link_block\" style='display: none; border-top: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD;'><tr><td colspan='2' style='padding: 5px 0px'></td></tr>";
- for (addFieldNum in one_field.add_link_fields) {
- var oneAddField = one_field['add_link_fields'][addFieldNum];
- addFieldId = oneAddField.id
- addFieldsList[addFieldId] = oneAddField;
- if (oneAddField.type_field == 1 || oneAddField.type_field == 3) fullAddValue = oneAddField.fast_edit_div + oneAddField.fast_edit_div_close;
- else fullAddValue = oneAddField.fast_edit_div + oneAddField.def_value + oneAddField.fast_edit_div_close;
- eventText += "<tr><td style='vertical-align: middle; max-width: 200px; overflow: hidden' class='textpad_field_name'><b>" + oneAddField.name_field + ": </b></td>";
- eventText += "<td style='width: 100%;' id='sub_cell_" + addFieldId + "_" + fieldId + "_0'>" + fullAddValue + "</td></tr>";
- while (fullAddValue.indexOf("<script>") >= 0) { // JS, который надо выполнить
- firstPos = fullAddValue.indexOf("<script>");
- secondPos = fullAddValue.indexOf("<\/script>");
- evalStr += fullAddValue.substring(firstPos + 8, secondPos) + "\r\n";
- fullAddValue = fullAddValue.substring(secondPos + 9);
- }
- }
- eventText += "<tr><td class='add_link_block_bottom'></td>";
- eventText += "<td class='add_link_block_bottom'><span onclick='add_link_block_save(" + fieldId + ", " + event_id + ")' class='add_link_block_save'><span class='b_small_begin'></span><span class='b_small'>" + lang.Save + "</span><span class='b_small_end'></span></span></td>";
- eventText += "</tr><tr><td colspan='2' style='padding: 5px 0px'></td></tr></tbody>"
- }
- else
- eventText += "</td></tr>";
- }
- while (fullValue.indexOf("<script>") >= 0) { // JS, который надо выполнить
- firstPos = fullValue.indexOf("<script>");
- secondPos = fullValue.indexOf("<\/script>");
- evalStr += fullValue.substring(firstPos + 8, secondPos) + "\r\n";
- fullValue = fullValue.substring(secondPos + 9);
- }
- }
- eventText += "</table>";
- }
- // Добавляем содержание в блок
- date_fields = "<div class='event_datefields' id='event_datefields" + event_id + "'>" + nameDateField + date_fields + "</div>";
- document.getElementById("event_view_edit_add" + event_id).innerHTML = "<div id='event_view_hidden" + event_id + "' style='display: none'>" + date_fields + eventText + "</div>";
- $("#event_view_hidden" + event_id + " [part=add_link_field]").attr("part", "");
- $("#event_view_hidden" + event_id + " .add_link_block [part='']").attr("part", "add_link_field");
- if (evalStr) { // Выполняем JS, выставляем обработчики
- eval(evalStr);
- $(".datepicker").datepicker({
- showOn: "button",
- buttonImage: "images/calbtn.png",
- buttonImageOnly: true,
- buttonText: lang.Calendar,
- showAnim: (('\v' == 'v') ? "" : "show"), // в ie не включаем анимацию, тормозит
- });
- $(".datetimepicker").datetimepicker({
- showOn: "button",
- timeFormat: "HH:mm",
- buttonImage: "images/calbtn.png",
- buttonImageOnly: true,
- buttonText: lang.Calendar,
- showAnim: (('\v' == 'v') ? "" : "show"), // в ie не включаем анимацию, тормозит
- });
- }
- if (resp.can_del == "1") // Если есть права на удаление - выводим ссылку
- document.getElementById("go_event_link" + event_id).innerHTML = "<a style='float: left;' href='#' onclick=\"jconfirm('" + lang.del_cal_event_confim + " "" + eventNameTable + "". " + lang.Continue + "?', function() { sub_drop_line(" + eventTableId + ", " + line_id + ") }, function () { }); return false\">" + lang.Delete + "</a>" + document.getElementById("go_event_link" + event_id).innerHTML;
- offsetEventBlock(event_id) // Сдвигаем блок, т.к. высота поменялась
- // Фиксирум поля по ширине
- var maxInputWidthSelect = 380 - parseInt($(".textpad_field_name").width());
- var maxInputWidth = 350 - parseInt($(".textpad_field_name").width());
- $(".event_view_edit .textpad div, .event_view_edit .textpad input").each(function () {
- if (parseInt($(this).width()) > maxInputWidth) $(this).width(maxInputWidth);
- });
- $(".event_view_edit .textpad select").each(function () {
- if (parseInt($(this).width()) > maxInputWidthSelect) {
- $(this).width(maxInputWidthSelect);
- $(this).parent("span").width(maxInputWidthSelect)
- $(this).next("span").width(maxInputWidthSelect - 5)
- }
- var optTextVal = "";
- $(this).find("option").each(function () {
- if ($(this).attr("selected")) optTextVal = $(this).html();
- })
- $(this).next("span").html(optTextVal);
- // substr_select_span($(this).attr("id"));
- });
- init_calendar_fast_edit();
- }
- });
- recordView = line_id;
- }
- var addedCell = false;
- var nextCell = false;
- function addEvent(date, e, event_id) {
- if (event_id == undefined) // Если событие не выбрано, выбираем событие по умолчанию
- event_id = calendar.default_event;
- if (all_calendar_events[event_id]["add_acc"] == "0")
- return; // Нет доступа на добавление строк по умолчанию
- if (document.getElementById("record_card_add" + event_id).style.display != "none") {
- hideOneEvent();
- return;
- }
- // Скрываем ссылку, отображаем кнопку "сохранить"
- document.getElementById("go_event_link" + event_id).style.display = "none";
- document.getElementById("save_event_button" + event_id).style.display = "none";
- saveEventId = event_id;
- eventFields = new Object;
- positionEventBlock(event_id, e); // Позиционируем блок и выводим
- var defValues = new Object;
- if (calendar.day) { // Дата добавления в дневном виде
- gr_date = "";
- if (date.indexOf("|") >= 0) {
- parts_val = date.split("|");
- date = parts_val[0];
- gr_date = parts_val[1];
- if (calendar.group_field == all_calendar_events[event_id]['group_field'] && all_calendar_events[event_id]['group_field'] != "0") {
- var def_gr_value = js_group_values[gr_date];
- if (def_gr_value)
- defValues = {field_id: calendar.group_field, value: def_gr_value};
- }
- }
- addedCell = "cell_" + str_replace(":", "_", date) + "_" + gr_date;
- }
- else if (calendar.week) // В недельном
- addedCell = "cell_" + str_replace(" ", "_", str_replace(":", "_", str_replace(".", "_", date)));
- else // В месячном
- addedCell = "cell_" + str_replace(".", "_", date);
- if (document.getElementById(addedCell)) {
- if (calendar.day || calendar.week) {
- var cellOffset = $("#" + addedCell).offset();
- if (e.pageY > cellOffset.top + 15) {
- if (calendar.week) {
- var dateValues = date.split(" ");
- var datePartsVal = dateValues[1].split(":");
- }
- else
- var datePartsVal = date.split(":");
- var cell_height = $('.day_top').outerHeight() - 1;
- var diffCell = (Math.ceil((e.pageY - cellOffset.top) / cell_height) - 1);
- var halfTime = diffCell % 2;
- diffCell = Math.floor(diffCell / 2);
- if (datePartsVal[0] == "00") {
- var timeDate = parseInt(diffCell);
- } else {
- var timeDate = parseInt(ltrim(datePartsVal[0], "0")) + parseInt(diffCell);
- }
- if (timeDate < 10) timeDate = "0" + timeDate;
- timeDate = timeDate + ":" + halfTime;
- if (calendar.week) {
- addedCell = "cell_" + str_replace(".", "_", dateValues[0]) + "_" + str_replace(":", "_", timeDate);
- date = dateValues[0] + " " + timeDate;
- }
- else {
- addedCell = "cell_" + str_replace(":", "_", timeDate) + "_" + gr_date;
- date = timeDate;
- }
- }
- if (calendar.week) {
- var dateValues = date.split(" ");
- var datePartsVal = dateValues[1].split(":");
- }
- else
- var datePartsVal = date.split(":");
- if (datePartsVal[1] == "1") {
- var nextHour = parseInt(ltrim(datePartsVal[0], "0")) + 1;
- if (nextHour < 10) nextHour = "0" + nextHour;
- if (calendar.week)
- nextCell = "cell_" + str_replace(".", "_", dateValues[0]) + "_" + nextHour + "_0";
- else
- nextCell = "cell_" + nextHour + "_0_" + gr_date;
- }
- else {
- if (calendar.week)
- nextCell = "cell_" + str_replace(".", "_", dateValues[0]) + "_" + datePartsVal[0] + "_1";
- else
- nextCell = "cell_" + datePartsVal[0] + "_1_" + gr_date;
- }
- }
- if (document.getElementById(addedCell)) // Подсвечиваем ячейку, в которую будет добавлена запись
- document.getElementById(addedCell).style.background = "#efefef";
- if (nextCell)
- if (document.getElementById(nextCell))
- document.getElementById(nextCell).style.background = "#efefef";
- }
- if (calendar.day && date.indexOf(":") > 0) {
- date = str_replace(":0", ":00:00", date);
- date = str_replace(":1", ":30:00", date);
- date = calendar.day + "." + calendar.month + "." + calendar.year + " " + date;
- }
- else if (calendar.week && date.indexOf(":") > 0) {
- date = str_replace(":0", ":00:00", date);
- date = str_replace(":1", ":30:00", date);
- }
- else
- date = date + " {current}";
- // Получаем список полей
- $.ajax({
- type: "POST",
- url: "calendar.php",
- data: {
- csrf: csrf,
- id: calendar.id,
- get: 'add_fields',
- data: {event_id: event_id, date: date, def_field: defValues}
- },
- success: function (msg) {
- resp = JSON.parse(msg);
- if (!resp) {
- jalert("JSON parse error!");
- return;
- }
- var date_fields = "";
- var nameDateField = "";
- addFieldsList = new Object;
- document.getElementById("event_view_edit_add" + event_id).style.backgroundImage = "none";
- // Строим содержание
- if (resp.status == "error")
- eventText = resp.value;
- else if (resp.status == "ok") {
- document.getElementById("go_event_link" + event_id).style.display = "none";
- document.getElementById("save_event_button" + event_id).style.display = "block";
- eventText = "<table cellpadding='0' cellspacing='0' border='0' class='textpad' style='margin: 10px 0px'>";
- fields = resp.value;
- var evalStr = "";
- for (orderField in fields) {
- one_field = fields[orderField];
- fieldId = one_field.id;
- eventFields[fieldId] = new Object;
- eventFields[fieldId] = one_field;
- if (one_field.type_field == 1 || one_field.type_field == 3) fullValue = one_field.fast_edit_div + one_field.fast_edit_div_close;
- else fullValue = one_field.fast_edit_div + one_field.def_value + one_field.fast_edit_div_close;
- if (one_field.date_field == "1") { // Поле даты события
- if (one_field.type_value == 1) {
- fullValue = fullValue.replace(" datepicker ", " datetimepicker fast_edit_datetime ");
- }
- date_fields = fullValue + date_fields;
- if (nameDateField == "") nameDateField = one_field.name_field + ": ";
- }
- else if (one_field.period_field == "1") { // Поле периода события
- if (one_field.type_value == 1) {
- fullValue = fullValue.replace(" datepicker ", " datetimepicker fast_edit_datetime ");
- }
- date_fields += " " + lang.since_to + ": " + fullValue
- nameDateField = lang.since_from + ": ";
- }
- else { // Обычное поле
- eventText += "<tr><td style='vertical-align: middle; max-width: 200px; overflow: hidden' class='textpad_field_name'>";
- if (eventFields[fieldId]['main'] == "1") eventText += "<span style='color: red'>* </span>";
- eventText += "<b>" + one_field.name_field + ": </b></td>";
- if (one_field.type_value == 1) {
- fullValue = fullValue.replace(" datepicker ", " datetimepicker fast_edit_datetime ");
- }
- eventText += "<td style='width: 100%;' id='sub_cell_" + fieldId + "_new'>" + fullValue;
- if (one_field.add_link_fields != "0") {
- eventText += "<img src=\"images/green_plus.png\" style=\"margin-top: 5px;\" class=\"add_link_img\" onclick=\"add_link_block_show(" + fieldId + ", " + event_id + ")\" onmouseover=\"this.src='images/green_plus_active.png'\" onmouseout=\"this.src='images/green_plus.png'\" />";
- eventText += "</td></tr>";
- eventText += "<tbody id='add_link_block" + fieldId + "' class=\"add_link_block\" style='display: none; border-top: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD;'><tr><td colspan='2' style='padding: 5px 0px'></td></tr>";
- for (addFieldNum in one_field.add_link_fields) {
- var oneAddField = one_field['add_link_fields'][addFieldNum];
- addFieldId = oneAddField.id
- addFieldsList[addFieldId] = oneAddField;
- if (oneAddField.type_field == 1 || oneAddField.type_field == 3) fullAddValue = oneAddField.fast_edit_div + oneAddField.fast_edit_div_close;
- else fullAddValue = oneAddField.fast_edit_div + oneAddField.def_value + oneAddField.fast_edit_div_close;
- eventText += "<tr><td style='vertical-align: middle; max-width: 200px; overflow: hidden' class='textpad_field_name'><b>" + oneAddField.name_field + ": </b></td>";
- eventText += "<td style='width: 100%;' id='sub_cell_" + addFieldId + "_" + fieldId + "_0'>" + fullAddValue + "</td></tr>";
- while (fullAddValue.indexOf("<script>") >= 0) { // JS, который надо выполнить
- firstPos = fullAddValue.indexOf("<script>");
- secondPos = fullAddValue.indexOf("<\/script>");
- evalStr += fullAddValue.substring(firstPos + 8, secondPos) + "\r\n";
- fullAddValue = fullAddValue.substring(secondPos + 9);
- }
- }
- eventText += "<tr><td class='add_link_block_bottom'></td>";
- eventText += "<td class='add_link_block_bottom'><span onclick='add_link_block_save(" + fieldId + ", " + event_id + ")' class='add_link_block_save'><span class='b_small_begin'></span><span class='b_small'>" + lang.Save + "</span><span class='b_small_end'></span></span></td>";
- eventText += "</tr><tr><td colspan='2' style='padding: 5px 0px'></td></tr></tbody>"
- }
- else
- eventText += "</td></tr>";
- }
- while (fullValue.indexOf("<script>") >= 0) { // JS, который надо выполнить
- firstPos = fullValue.indexOf("<script>");
- secondPos = fullValue.indexOf("<\/script>");
- evalStr += fullValue.substring(firstPos + 8, secondPos) + "\r\n";
- fullValue = fullValue.substring(secondPos + 9);
- }
- }
- eventText += "</table>";
- }
- // Вставляем содержание
- date_fields = "<div class='event_datefields' id='event_datefields" + event_id + "'>" + nameDateField + date_fields + "</div>";
- document.getElementById("event_view_edit_add" + event_id).innerHTML = "<div id='event_view_hidden" + event_id + "' style='display: none'>" + date_fields + eventText + "</div>";
- if (evalStr) { // Выполняем JS, ставим обработчики на поля
- eval(evalStr);
- $(".datepicker").datepicker({
- showOn: "button",
- buttonImage: "images/calbtn.png",
- buttonImageOnly: true,
- buttonText: lang.Calendar,
- showAnim: (('\v' == 'v') ? "" : "show"), // в ie не включаем анимацию, тормозит
- });
- //теперь уберем баг с непредвиденным автозакрытием календаря
- var span_obj = $(".datetimepicker").parent("span.datepicker_span");
- for (var i = 0; i < span_obj.length; i++) {
- $(span_obj.get(i)).replaceWith(function (e) {
- return span_obj.get(i).innerHTML;
- });
- }
- $(".datetimepicker").datetimepicker({
- showOn: "button",
- timeFormat: "HH:mm",
- buttonImage: "images/calbtn.png",
- buttonImageOnly: true,
- buttonText: lang.Calendar,
- showAnim: (('\v' == 'v') ? "" : "show"), // в ie не включаем анимацию, тормозит
- });
- }
- offsetEventBlock(event_id); // Сдвигаем блок под изменение высоты
- // Фиксирум поля по ширине
- var maxInputWidthSelect = 380 - parseInt($(".textpad_field_name").width());
- var maxInputWidth = 350 - parseInt($(".textpad_field_name").width());
- $(".event_view_edit .textpad div, .event_view_edit .textpad input").each(function () {
- if (parseInt($(this).width()) > maxInputWidth) $(this).width(maxInputWidth);
- });
- $(".event_view_edit .textpad select").each(function () {
- if (parseInt($(this).width()) > maxInputWidthSelect) {
- $(this).width(maxInputWidthSelect);
- $(this).parent("span").width(maxInputWidthSelect)
- $(this).next("span").width(maxInputWidthSelect - 5)
- // substr_select_span($(this).attr("id"));
- }
- });
- $("#record_card_add" + event_id).find($('textarea')).each(function (i, item) {
- autosize(item);
- });
- init_calendar_fast_edit();
- }
- });
- }
- // Добавление новой строки/сохранение текущей
- function saveEvent() {
- //некореектные даты
- if (calendar_error_status == 1)
- jalert('Время начала события больше времени окончания!');
- if (!addedCell) { // Сохранение текущей записи, скрываем кнопку сохранения, показываем ссылки
- $(".save_event_button").fadeOut(200, function () {
- setTimeout("$('.go_event_link').fadeIn(200)", 200);
- })
- if (pageReload) window.location.reload(); // Даты изменились, перестраиваем календарь
- return;
- }
- $(".save_event_button").fadeOut(100);
- var insertObj = new Object;
- var calendar_type;
- for (fieldId in eventFields) { // Формируем значения
- one_field = eventFields[fieldId];
- type_field = one_field.type_field;
- v_o = document.getElementById("fast_edit_span_" + fieldId + "_new_0");
- if (!v_o) continue;
- if ((type_field == 1) || (type_field == 2) || (type_field == 12) || (type_field == 3) || (type_field == 10) || (type_field == 4) || (type_field == 7) || (type_field == 14)) {
- if (typeof(v_o.value) === 'undefined')
- insertObj[fieldId] = v_o.innerHTML;
- else
- insertObj[fieldId] = v_o.value;
- }
- else if (type_field == 5) {
- insertObj[fieldId] = v_o.value;
- }
- }
- var emptyFields = "";
- $(".textpad tr").css("background", "transparent");
- $(".textpad td.textpad_field_name b").css("color", "black");
- for (fieldId in insertObj) {
- if (eventFields[fieldId]['main'] == "1" && !insertObj[fieldId]) { // Не заполнены обязательные поля
- if (emptyFields != "") emptyFields += ", ";
- emptyFields += "'" + eventFields[fieldId]['name_field'] + "'";
- $("#sub_cell_" + fieldId + "_new").parent("tr").css("background", "#FFE0E0");
- $("#sub_cell_" + fieldId + "_new").parent("tr").find("td.textpad_field_name b").css("color", "#FF0000");
- }
- }
- if (emptyFields != "") {
- jalert(lang.not_all_fields);
- $(".save_event_button").fadeIn(200);
- return;
- }
- if (calendar.day)
- calendar_type = "day";
- else if (calendar.week)
- calendar_type = "week";
- else
- calendar_type = "month";
- // Отправляем данные (сейчас при добавлении страница перезагрузится в UpdateData, в дальнейшем вставка происходит на лету)
- $.ajax({
- type: "POST",
- url: "calendar.php",
- data: {
- csrf: csrf,
- id: calendar.id,
- put: 'new_line',
- data: {event_id: saveEventId, calendar_type: calendar_type, values: insertObj}
- },
- success: function (input) {
- var data = JSON.parse(input);
- if (!data) {
- jalert("JSON parse error!");
- $(".save_event_button").fadeIn(300);
- return;
- }
- if (data.error) {
- jalert(data.error)
- $(".save_event_button").fadeIn(300);
- return;
- }
- var new_line = data.new_line;
- var js_event = all_calendar_events[new_line.event_id];
- var newEventData = "<div style='display: none' event_length='" + new_line.length + "' style='margin-top: 0px;border: 1px solid " + js_event.color + "' ";
- newEventData += "class='calendar_event_line calendar_event_line_" + js_event.date_field + "_" + new_line.line_id + "_" + new_line.event_id + "' ";
- newEventData += "id='calendar_event_line_" + js_event.date_field + "_" + new_line.line_id + "_" + new_line.event_id + "_0_0'>";
- newEventData += "<div onclick='viewOneEvent(" + new_line.event_id + ", " + new_line.line_id + ", event, 0, 0); event.cancelBubble = true;' ";
- newEventData += "onmouseover='highlightEvent(true, " + new_line.event_id + ", " + new_line.line_id + ")' onmouseout='highlightEvent(false, " + new_line.event_id + ", " + new_line.line_id + ")' ";
- newEventData += "id='c_event_layout" + js_event.date_field + "_" + new_line.line_id + "_" + new_line.event_id + "_0_0' ";
- newEventData += " class='c_event_layout c_event_layout" + new_line.event_id + "_" + new_line.line_id + "'><span style='display: inline-block; width: 10px; height: 10px; background: " + js_event.color + "; margin: 0px 4px 0px 2px;'></span>" + new_line.mount + "</div></div>";
- document.getElementById("hidden_add_events").innerHTML += newEventData;
- if (js_events == undefined)
- js_events = new Object;
- if (!js_events[new_line.event_id])
- js_events[new_line.event_id] = new Object;
- js_events[new_line.event_id][new_line.line_id] = {
- begin: new_line.begin,
- end: new_line.end,
- offset: 0,
- length: new_line.length
- };
- var resp_arr = data.changes.toString().split("\r\n");
- UpdateData(resp_arr);
- }
- });
- }
- function hideOneEvent() {
- $(".one_event_block").animate({opacity: 'hide'}, 200, function () {
- $(".event_view_edit").html("");
- $(".event_view_edit").css("background-image", "url('images/process.gif')");
- $(".event_view_edit").css("height", "70px");
- });
- $(".c_event_layout").css("background", "");
- if (addedCell)
- if (document.getElementById(addedCell))
- document.getElementById(addedCell).style.background = "";
- if (nextCell)
- if (document.getElementById(nextCell))
- document.getElementById(nextCell).style.background = "";
- addedCell = false;
- nextCell = false;
- recordView = false;
- if (pageReload) window.location.reload();
- }
- // Вывод справки по событию (блок слева)
- var sysHelpInit = false;
- function viewSystemHelp(event_id, action) {
- if (action) {
- if (window.sysHelpInit || hiddenEvents[event_id])
- return;
- else
- sysHelpInit = setTimeout("document.getElementById('system_help_event" + event_id + "').style.display = 'block'", 1000);
- }
- else {
- if (window.sysHelpInit)
- clearTimeout(sysHelpInit);
- sysHelpInit = false;
- document.getElementById("system_help_event" + event_id).style.display = "none";
- }
- }
- // Фиксация таблицы после загрузки
- /**
- * @param {string} hce - hidden calendar event
- */
- $(document).ready(function () {
- fixCalendarLayout();
- setTimeout("$('#calendar_event_list .select_border_btn_hover').css({width: '100px', paddingRight: '50px'})", 500);
- // Скрытые события
- // смотрим тип календаря
- var type = '0';
- if ($.cookie('default_calendar_view')) {
- switch($.cookie('default_calendar_view')) {
- case 'week':
- type = 1;
- break;
- case 'day':
- type = 2;
- break;
- default:
- type = 0;
- }
- }
- // ищем их в куках
- if (hiddenEvents) {
- for (oneEventId in all_calendar_events)
- if ($.cookie("hce_" + oneEventId + "_" + type)) {
- viewHideEvents(oneEventId, type, true);
- }
- }
- calendar_combobox($('.combobox'), false);
- init_calendar_fast_edit();
- if ($.cookie("mini_calendar_hide" + calendar.id) === 'null') {
- $("#mini_calendar_layout").animate({width: "show", opacity: "show", marginLeft: "30px"}, 200);
- document.getElementById("view_calendar_arrow").innerHTML = "◀";
- }else { // Скрываем календарь
- $("#mini_calendar_layout").animate({width: "hide", opacity: "hide", marginLeft: "0px"}, 200);
- document.getElementById("view_calendar_arrow").innerHTML = "▶";
- }
- setTimeout("fixCalendarLayout()", 300);
- });
- $(window).resize(function () {
- if (window.fixInit)
- clearTimeout(fixInit);
- fixInit = setTimeout("fixCalendarLayout()", 200);
- });
- // Фиксация таблицы при загрузке страницы и ресайзе
- function fixCalendarLayout() {
- $("#calendar_layout").width($(window).width() - 34);
- if (document.getElementById("mini_calendar_layout").style.display != "none")
- document.getElementById("calendar_pad").style.width = $("#calendar_pad").width() + "px";
- else
- document.getElementById("calendar_pad").style.width = "0px";
- if (!calendar.day && !calendar.week) { // Месячный вид
- var tableWidth = $(".calendar_month_type").width();
- var tdWidth = parseInt(((tableWidth - 6) / 7) - 2);
- $(".calendar_month_type td").width(tdWidth);
- $(".calendar_event_line").each(function () {
- var eventLength = parseInt($(this).attr("event_length"));
- var isBackground = parseInt($(this).attr("is_background"));
- var borderMargin = 0
- if (isBackground)
- borderMargin = 2
- var addWidth = 0;
- if (eventLength == 1)
- addWidth = 1;
- if (eventLength == 2)
- addWidth = 3;
- if (eventLength == 3)
- addWidth = 7;
- if (eventLength == 4)
- addWidth = 11;
- if (eventLength == 5)
- addWidth = 13;
- if (eventLength == 6)
- addWidth = 17;
- if (eventLength == 7)
- addWidth = 19;
- fullCalWidth = (eventLength * tdWidth) + addWidth + borderMargin;
- $(this).width(fullCalWidth);
- var arrowMargin = fullCalWidth + 1 - isBackground;
- $(this).find(".next_event_arrow").css("margin-left", arrowMargin + "px");
- });
- $(".hidden_items_events").width(tdWidth);
- }
- if (calendar.day) { // Дневной вид
- var maxTableWidth = parseInt($(window).width() - $("#calendar_pad").width()) - 67 - 74;
- var maxTdWidth = parseInt(maxTableWidth / calendar.day_td_count);
- $(".day_top").width(maxTdWidth);
- $(".view_overperiod_events").width(maxTableWidth + 74);
- if (document.getElementById("cur_time_line")) {
- var timeLineWidth = maxTableWidth + 1;
- document.getElementById("cur_time_line").style.width = timeLineWidth + "px";
- var timeHeight = parseInt($(".day_time").height());
- var pOffset = parseInt($("#cur_time_line").attr("offset"));
- var timeLineOffset = parseInt(timeHeight - ((timeHeight / 100) * (100 - pOffset))) - 9;
- if (pOffset > 50) timeLineOffset += 2;
- document.getElementById("cur_time_line").style.marginTop = timeLineOffset + "px";
- }
- var total_background_events = 0;
- $(".calendar_day_type .calendar_event_line").each(function () {
- if ($(this).attr("is_background") == 1) {
- total_background_events++ ;
- }
- });
- var main = resizeRow();
- console.log(main[0]);
- console.log(main[1]);
- for (var i = 0; i < Object.keys(main[0]).length; i++) {
- for (var j = 0; j < Object.keys(main[0][Object.keys(main[0])]).length; j++) {
- var key = Object.keys(main[0][Object.keys(main[0])])[j];
- key = main[0][Object.keys(main[0])][key];
- for (var k = 0; k < key.length; k++) {
- var c = document.getElementById(key[k].id);
- if (!key[k].clone) {
- c.style.width = key[k].width;
- c.style.marginLeft = key[k].margin;
- }
- }
- }
- }
- $(".calendar_day_type .calendar_event_line").each(function () {
- var oneMargin = '';
- var oneHeight = '';
- var element_width = '';
- var eventLength = parseFloat($(this).attr("event_length"));
- var eventOffset = $(this).attr("event_offset");
- var isBackground = $(this).attr("is_background");
- backgroundInLayout = 1;
- if (eventOffset.indexOf("back") < 0)
- backgroundInLayout = 0;
- eventOffset = parseInt(eventOffset);
- if (isBackground == 1) {
- var background_width = maxTableWidth/total_background_events;
- oneHeight = parseInt(eventLength * BLOCK_HEIGHT -2); // 2 - размер бордера, его отнимаем от высоты
- if (navigator.userAgent.search("Firefox") !== -1) {
- oneHeight = parseInt(eventLength * (BLOCK_HEIGHT+0.45) - 1);
- }
- $(this).css({
- width: background_width + "px",
- marginLeft: (eventOffset-1)*background_width + "px",
- height: oneHeight + 'px',
- 'min-height': oneHeight + 'px'
- });
- } else {
- oneHeight = parseInt(eventLength * BLOCK_HEIGHT -2); // 2 - размер бордера, его отнимаем от высоты
- if (navigator.userAgent.search("Firefox") !== -1) {
- oneHeight = parseInt(eventLength * (BLOCK_HEIGHT+0.45) - 1);
- }
- eventOffset = eventOffset - total_background_events;
- if (eventOffset <= 0 ) eventOffset = 1;
- $(this).css({
- height: oneHeight + 'px',
- 'min-height': oneHeight + 'px'
- });
- $(this).find($('.c_event_layout')).css('min-height', oneHeight + 'px');
- $(this).hover(function () {
- $(this).css('height', 'auto');
- }, function () {
- $(this).css('height', oneHeight + 'px');
- });
- }
- });
- var arrowMargin = $(".view_overperiod_events").width();
- $(".view_overperiod_events .calendar_event_line").each(function () {
- if (parseInt($(this).attr("is_background")))
- aMargin = arrowMargin;
- else
- aMargin = arrowMargin - 2;
- $(this).find(".next_event_arrow").css("margin-left", aMargin + "px");
- })
- }
- if (calendar.week) { // Недельный вид
- var tableWidth = $(window).width() - $("#calendar_pad").width() - 140;
- var oneTdWidth = parseInt((tableWidth - 7) / 7);
- $("td.overperiod_cells").width(oneTdWidth);
- $(".view_overperiod_events").width(tableWidth);
- if (oneTdWidth < 100) oneTdWidth = 100;
- if (document.getElementById("cur_time_line")) {
- var timeLineWidth = oneTdWidth;
- document.getElementById("cur_time_line").style.width = timeLineWidth + "px";
- var timeHeight = parseInt($(".week_time").height());
- var pOffset = parseInt($("#cur_time_line").attr("offset"));
- var timeLineOffset = parseInt(timeHeight - ((timeHeight / 100) * (100 - pOffset)));
- document.getElementById("cur_time_line").style.marginTop = timeLineOffset + "px";
- var leftArrowOffset = $("#calendar_pad").width() + 32;
- var topArrowOffset = timeLineOffset - 6;
- $("#cur_time_line_arrow").css({left: leftArrowOffset + "px", marginTop: topArrowOffset + "px"});
- }
- $(".view_overperiod_events .calendar_event_line").each(function () {
- var eventLength = parseInt($(this).attr("event_length"));
- fullCalWidth = parseInt((eventLength * oneTdWidth) + eventLength);
- $(this).width(fullCalWidth);
- var arrowMargin = fullCalWidth;
- $(this).find(".next_event_arrow").css("margin-left", arrowMargin + "px");
- });
- $(".week_top .calendar_event_line, .week_bottom .calendar_event_line").each(function () {
- var isBackground = parseInt($(this).attr("is_background"));
- var eventOffset = parseInt($(this).attr("event_offset"));
- var eventLength = parseFloat($(this).attr("event_length"));
- var eventWidth = parseInt($(this).attr("event_width"));
- var oneHeight = parseInt(eventLength * BLOCK_HEIGHT - 2); // 2 - размер бордера, его отнимаем от высоты
- var widthValue = parseInt(oneTdWidth / (eventWidth + 1));
- var marginValue = widthValue;
- if (widthValue < 100) {
- marginValue = widthValue - parseInt((100 - widthValue) / eventWidth + 2) + eventWidth - 1;
- widthValue = 100;
- }
- var oneMargin = marginValue * (eventOffset - 1);
- if (!isBackground)
- var oneWidth = widthValue - 2;
- else
- var oneWidth = widthValue;
- if (isNaN(eventWidth)) {
- oneWidth = $(this).parent().outerWidth(true);
- }
- $(this).css({
- width: oneWidth + "px",
- marginLeft: oneMargin + "px",
- height: oneHeight + 'px',
- 'min-height': oneHeight + 'px'
- });
- $(this).hover(function () {
- $(this).css('height', 'auto');
- var childHeight = $(this).children()[0];
- if ($(childHeight).css('height') < $(this).css('height')) {
- $(childHeight).css('height', oneHeight + 'px');
- }
- }, function () {
- $(this).css('height', oneHeight + 'px');
- });
- });
- }
- }
- function highlightEvent(set, event_id, line_id) { // Подсветка событий при наведении
- var eventData = all_calendar_events[event_id];
- var backgroundColor = eventData.color;
- var colorR = eventData.color_r;
- var colorG = eventData.color_g;
- var colorB = eventData.color_b;
- if (set) {
- if (calendar.week || calendar.day)
- $(".calendar_offset_" + line_id + "_" + event_id).css("z-index", 400);
- $(".c_event_layout" + event_id + "_" + line_id).css("background-color", "rgba(" + colorR + ", " + colorG + ", " + colorB + ", 0.4)");
- }
- else if (document.getElementById("record_card_add" + event_id).style.display == "none" || recordView != line_id) {
- if (calendar.week || calendar.day) {
- var eOffset = parseInt($(".calendar_offset_" + line_id + "_" + event_id).attr("event_offset"));
- $(".calendar_offset_" + line_id + "_" + event_id).css("z-index", eOffset + 13);
- }
- $(".c_event_layout" + event_id + "_" + line_id).css("background-color", "rgba(" + colorR + ", " + colorG + ", " + colorB + ", 0.2)");
- }
- }
- // Подсветка столбца с маленьким календарём при наведении на стрелку
- function highlightMinicalendar(set) {
- if (set)
- setColor = "#f0f0f0";
- else
- setColor = "transparent";
- document.getElementById("calendar_act_button").style.background = setColor;
- document.getElementById("calendar_pad").style.background = setColor;
- }
- // Показать/скрыть список всех событий на кнопке "Добавить запись"
- var hiddenHandler = function () {
- if ($(event.target).closest("#hidden_add_events").length) return;
- viewAllEvents();
- event.stopPropagation();
- };
- function viewAllEvents() {
- if (document.getElementById("hidden_add_events").style.display == "none") {
- $('#hidden_add_events').animate({width: 'show', height: 'show', opacity: 'show'}, 200);
- $(document).bind("click", hiddenHandler);
- }
- else {
- $('#hidden_add_events').animate({width: 'hide', height: 'hide', opacity: 'hide'}, 200);
- $(document).unbind("click", hiddenHandler);
- }
- }
- // Функция перестроения календаря при изменениях, пока только перезагружает страницу
- function changeOffsets() {
- window.location.reload();
- return;
- var lengthOrder = new Object;
- var maxLength = 0;
- max_offset = 0;
- max_overperiods_offset = 0;
- var busyDates = new Object;
- var busyWeekdays = new Object;
- for (oneEventId in js_events) {
- var oneEvent = js_events[oneEventId];
- for (oneLineId in oneEvent) {
- var oneLine = oneEvent[oneLineId];
- if (oneLine == undefined) continue;
- if (calendar.day && (parseInt(calendar.js_begin) > parseInt(oneLine.begin) || parseInt(calendar.js_end) < parseInt(oneLine.end))) continue;
- var lengthValue = parseInt(oneLine.length);
- if (lengthValue > maxLength)
- maxLength = lengthValue;
- if (!lengthOrder[lengthValue])
- lengthOrder[lengthValue] = new Object;
- if (!lengthOrder[lengthValue][oneEventId])
- lengthOrder[lengthValue][oneEventId] = new Object;
- lengthOrder[lengthValue][oneEventId][oneLineId] = 1;
- }
- }
- for (m = maxLength + 1; m >= 0; m--) {
- var oneData = lengthOrder[m];
- if (!oneData) continue;
- for (oneEventId in oneData) {
- var oneEvent = oneData[oneEventId];
- for (oneLineId in oneEvent) {
- var oneLine = js_events[oneEventId][oneLineId];
- if (calendar.day || calendar.week)
- var startLine = 1;
- else
- var startLine = 0;
- var overperiodOffset = 0;
- var currentOffset = oneLine.offset;
- var addedLine = false;
- while (!addedLine) {
- if (calendar.day || (calendar.week && (oneLine.begin.substr(0, 8) == oneLine.end.substr(0, 8) || oneLine.end == "0"))) {
- var startHour = oneLine.begin.substr(8, 2);
- if (startHour[0] == "0") startHour = startHour[1];
- var startMin = oneLine.begin.substr(10, 2);
- if (startMin < "30") startMin = 0;
- else startMin = 0.5;
- var startTime = parseInt(startHour) + startMin;
- if (oneLine.end == "0")
- var endTime = startTime + 1;
- else {
- var endHour = oneLine.end.substr(8, 2);
- if (endHour[0] == "0") endHour = endHour[1];
- var endMin = oneLine.end.substr(10, 2);
- if (endMin < "30") endMin = 0;
- else endMin = 0.5;
- var endTime = parseInt(endHour) + endMin;
- }
- if (calendar.week) {
- for (pos in week_days)
- if (oneLine.begin.substr(0, 8) == week_days[pos])
- lineWeekDay = pos;
- }
- else
- lineWeekDay = "";
- for (h = startTime; h <= endTime; h = h + 0.5) {
- var busyDate = h + "" + lineWeekDay;
- if (!busyDates[busyDate])
- busyDates[busyDate] = new Object;
- if (!busyDates[busyDate][startLine]) {
- busyDates[busyDate][startLine] = {event_id: oneEventId, line_id: oneLineId};
- addedLine = true;
- }
- else {
- addedLine = false;
- startLine += 1;
- for (oneDateStr in busyDates) {
- var oneDate = busyDates[oneDateStr];
- if (oneDate[startLine])
- if (oneDate[startLine]['event_id'] == oneEventId && oneDate[startLine]['line_id'] == oneLineId)
- busyDates[oneDateStr][startLine] = false;
- }
- break;
- }
- }
- }
- else if (calendar.week && oneLine.begin.substr(0, 8) != oneLine.end.substr(0, 8) && oneLine.end != "0") {
- if (calendar.js_begin > oneLine.begin)
- var startCell = calendar.js_begin.substr(0, 8);
- else
- var startCell = oneLine.begin.substr(0, 8);
- if (calendar.js_end < oneLine.end)
- var endCell = calendar.js_end.substr(0, 8);
- else
- var endCell = oneLine.end.substr(0, 8);
- for (pos in week_days) {
- if (startCell <= week_days[pos] && endCell >= week_days[pos]) {
- if (!busyWeekdays[pos])
- busyWeekdays[pos] = new Object;
- if (!busyWeekdays[pos][overperiodOffset]) {
- busyWeekdays[pos][overperiodOffset] = {event_id: oneEventId, line_id: oneLineId};
- addedLine = true;
- }
- else {
- for (oneWeekStr in busyWeekdays) {
- var oneWeek = busyWeekdays[oneWeekStr];
- if (oneWeek[overperiodOffset])
- if (oneWeek[overperiodOffset]['event_id'] == oneEventId && oneWeek[overperiodOffset]['line_id'] == oneLineId)
- busyWeekdays[oneWeekStr][overperiodOffset] = false;
- }
- overperiodOffset += 1;
- addedLine = false;
- break;
- }
- }
- }
- }
- else {
- for (oneStrId in month_days) {
- var oneStr = month_days[oneStrId];
- for (oneCellId in oneStr) {
- var oneCell = oneStr[oneCellId];
- var busyDate = parseInt(oneCell.str);
- if (parseInt(oneLine.end) == 0) oneLine.end = oneLine.begin;
- if (busyDate >= parseInt(oneLine.begin) && busyDate <= parseInt(oneLine.end)) {
- if (!busyDates[busyDate])
- busyDates[busyDate] = new Object;
- if (!busyDates[busyDate][startLine]) {
- busyDates[busyDate][startLine] = {event_id: oneEventId, line_id: oneLineId};
- addedLine = true;
- }
- else {
- for (oneDateStr in busyDates) {
- var oneDate = busyDates[oneDateStr];
- if (oneDate[startLine])
- if (oneDate[startLine]['event_id'] == oneEventId && oneDate[startLine]['line_id'] == oneLineId)
- busyDates[oneDateStr][startLine] = false;
- }
- addedLine = false;
- startLine += 1
- }
- }
- }
- }
- }
- }
- if (max_offset < parseInt(startLine)) max_offset = parseInt(startLine) - 1;
- if (max_overperiods_offset < parseInt(overperiodOffset)) max_overperiods_offset = parseInt(overperiodOffset);
- $(".overperiods_heights").height((max_overperiods_offset + 1) * 17)
- if (calendar.week && oneLine.begin.substr(0, 8) != oneLine.end.substr(0, 8) && oneLine.end != "0" && parseInt(currentOffset) != parseInt(overperiodOffset)) {
- var date_field = all_calendar_events[oneEventId]['date_field'];
- js_events[oneEventId][oneLineId]['offset'] = overperiodOffset;
- var cOffset = parseInt(overperiodOffset) * 17;
- $(".calendar_event_line_" + date_field + "_" + oneLineId + "_" + oneEventId).css("margin-top", cOffset + "px");
- }
- else if (parseInt(currentOffset) != parseInt(startLine)) {
- if (calendar.week && oneLine.begin.substr(0, 8) != oneLine.end.substr(0, 8) && oneLine.end != "0") continue;
- var date_field = all_calendar_events[oneEventId]['date_field'];
- js_events[oneEventId][oneLineId]['offset'] = startLine;
- if (calendar.day || calendar.week) {
- $(".calendar_event_line_" + date_field + "_" + oneLineId + "_" + oneEventId).attr("event_offset", startLine);
- }
- else {
- var cOffset = parseInt(startLine) * 17;
- $(".calendar_event_line_" + date_field + "_" + oneLineId + "_" + oneEventId).css("margin-top", cOffset + "px");
- }
- }
- }
- }
- }
- }
- ////////////////////////////////////
- ///////////////////////////////////
- // сформировать значение мулти-селекта
- function form_value_multi(field_id, line_id, pos, subtable_id, val) {
- // console.log("save_value_multi: "+"field="+field_id+" line="+line_id+" pos"+pos+" value="+val);
- fast_edit_old = field_id + '|' + line_id + '|' + pos + '|' + val;
- var mult_id = "fast_edit_span_" + field_id + "_" + line_id + "_" + subtable_id + pos;
- var mult_obj = document.getElementById(mult_id);
- var part = mult_obj.getAttribute('part');
- var selWidth = $(mult_obj).width();
- field = all_fields[field_id];
- type_field = field['type_field'];
- // формируем полное значение
- var full_value = "";
- var all_values = {};
- $("#sub_cell_" + field_id + "_" + line_id).find('select[multi_select_group=' + field_id + '_' + line_id + ']').each(function (i) {
- if (this.value && all_values[this.value] == undefined) {
- if (((type_field == 7 || type_field == 11) && this.value != 0) || (type_field == 14 && this.value != ""))
- full_value += "-" + this.value;
- else if (type_field == 4)
- full_value = full_value + this.value + "\r\n";
- }
- // Также составляем список элемент, которые нельзя выбрать
- if (((type_field == 7 || type_field == 11) && this.value != 0) || ((type_field == 14 || type_field == 4) && this.value != ""))
- all_values[this.value] = this.value;
- });
- if (full_value) {
- if (type_field == 4)
- full_value = full_value.substr(0, full_value.length - 2);
- else
- full_value += "-";
- }
- // измеянем количество селектов
- if (((type_field == 4 || type_field == 14) && val == "") || ((type_field == 7 || type_field == 11) && val == 0)) { // выбрано пустое значение
- var t_span = mult_obj.parentNode;
- t_span.parentNode.removeChild(t_span);
- }
- else { // выбрано непустое значение
- if (mult_obj.getAttribute("is_last") == 1) {
- mult_obj.setAttribute("is_last", 0);
- // клонируем текущий элемент
- var obj_tag_name = mult_obj.tagName;
- var new_pos = intval(pos) + 1;
- var new_id = "fast_edit_span_" + field_id + "_" + line_id + "_" + subtable_id + new_pos;
- var newEL = document.createElement(obj_tag_name);
- newEL.id = new_id;
- newEL.className = mult_obj.className;
- newEL.setAttribute("subtable_id", subtable_id);
- $(newEL).removeClass('cust_select');
- // события
- addHandler_mult_select(newEL);
- // атрибуты
- newEL.setAttribute("multi_select_group", field_id + "_" + line_id);
- newEL.setAttribute("style", mult_obj.getAttribute("style"));
- newEL.style.background = '';
- newEL.setAttribute("field_id", field_id);
- newEL.setAttribute("line_id", line_id);
- newEL.setAttribute("pos", new_pos);
- newEL.setAttribute("is_last", 1);
- newEL.setAttribute("tabindex", last_tabindex_fast_edit);
- newEL.setAttribute("part", part);
- $(newEL).html(mult_obj.innerHTML);
- newEL.selectedIndex = -1;
- // вставляем после текущего
- var parent = mult_obj.parentNode;
- parent.appendChild(newEL);
- }
- }
- $("#sub_cell_" + field_id + "_" + line_id).find('select[multi_select_group=' + field_id + '_' + line_id + ']').each(function (t) {
- var select_obj = this;
- var options_count = 0;
- $(this).children().each(function (y) {
- if (this.value != select_obj.value) { // не выбранный елемент
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- if (((type_field == 4 || type_field == 14) && this.value != '') || ((type_field == 7 || type_field == 11) && this.value != 0)) options_count++;
- }
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- if (((type_field == 4 || type_field == 14) && this.value != '') || ((type_field == 7 || type_field == 11) && this.value != 0)) options_count++;
- }
- });
- if (options_count == 0)
- // Не одного видимого элемента, скрываем котрол
- {
- select_obj.parentNode.style.display = 'none';
- select_obj.style.display = 'none';
- }
- else {
- select_obj.parentNode.style.display = 'block';
- select_obj.style.display = '';
- }
- });
- if (document.getElementById('fast_edit_span_' + field_id + '_' + line_id + "_" + subtable_id).value != full_value) { // Если изменилось сохранияем
- $('input[id^=fast_edit_span_' + field_id + '_' + line_id + ']').val(full_value);
- if (part == 'add_link_field') return; // Ничего не сохраняем
- save_value_multi(field_id, line_id, full_value);
- }
- ;
- }
- /// ----------------- Обработчкики событий ----------------
- //
- // Одинарный селект
- //
- function addHandler_select(obj) {
- // Поскольку объект скрыт, ширина равна нулю, проходимся по всему списку значений и находим самое длинное, устанавливаем ширину элемента по нему
- var field_id = obj.getAttribute('field_id');
- if (obj.id.indexOf("fast_edit_span_" + field_id + "_e") >= 0) {
- $(obj).width(150); // В быстром поиске принудительная ширина
- $(obj).removeClass("nwidth");
- // setTimeout("substr_select_span('" + obj.id + "')", 500);
- }
- else {
- var charsCount = 0
- $("#" + obj.id + " option").each(function (element, index) {
- if (charsCount < $(this).html().length)
- charsCount = $(this).html().length;
- });
- $(obj).width((charsCount * 7) + 20);
- }
- addHandler(obj, "onkeypress", onkeypress_select);
- addHandler(obj, "onkeydown", onkeydown_select);
- addHandler(obj, "onmousedown", onmousedown_select);
- addHandler(obj, "onfocus", onfocus_select);
- addHandler(obj, "onchange", onchange_select);
- };
- function onkeypress_select(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if ((event.keyCode == 0xA) || (event.keyCode == 0xD)) {
- if (window.event) {
- window.event.cancelBubble = true;
- window.event.returnValue = false;
- }
- else {
- event.stopPropagation();
- event.cancelBubble = true;
- event.returnValue = false;
- }
- obj.blur();
- dont_open_view = 1;
- return false;
- }
- };
- function onkeydown_select(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if ((event.keyCode == 0xA) || (event.keyCode == 0xD)) {
- if (window.event) {
- window.event.cancelBubble = true;
- window.event.returnValue = false;
- }
- else {
- event.stopPropagation();
- event.cancelBubble = true;
- event.returnValue = false;
- }
- obj.blur();
- dont_open_view = 1;
- return false;
- }
- };
- function onmousedown_select(event) {
- dont_open_view = 2;
- };
- function onfocus_select(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- obj.style.background = 'white';
- fast_edit_old = obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + obj.value;
- }
- function onchange_select(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- var part = obj.getAttribute('part');
- var field_id = obj.getAttribute('field_id');
- /*if (obj.id.indexOf("fast_edit_span_" + field_id + "_e") >= 0)
- setTimeout("substr_select_span('" + obj.id + "')", 200);*/
- if (part == 'add_link_field') return; // Ничего не сохраняем
- if ($(".save_event_button:visible").length == 0) {
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- }
- if (fast_edit_old != obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + obj.value) {
- obj.parentNode.style.background = '#fff6ad';
- obj.parentNode.setAttribute('yellow_color', '1');
- save_value(field_id, obj.getAttribute('line_id'), obj.value);
- obj.parentNode.setAttribute('yellow_color', '0');
- parentObj= obj.parentNode;
- $(parentObj).animate({
- backgroundColor: '#fff'
- }, 1000);
- }
- else {
- obj.parentNode.style.background = '';
- obj.parentNode.style.backgroundColor = '';
- }
- }
- //
- // МНОЖЕСТВЕННЫЙ СЕЛЕКТ
- //
- function addHandler_mult_select(obj) {
- // Поскольку объект скрыт, ширина равна нулю, проходимся по всему списку значений и находим самое длинное, устанавливаем ширину элемента по нему
- var field_id = obj.getAttribute('field_id');
- var line_id = obj.getAttribute('line_id');
- if (obj.id.indexOf("fast_edit_span_" + field_id + "_e") >= 0) {
- $(obj).width(150); // В быстром поиске принудительная ширина
- $(obj).removeClass("nwidth");
- }
- else {
- var charsCount = 0
- $("#" + obj.id + " option").each(function (element, index) {
- if (charsCount < $(this).html().length)
- charsCount = $(this).html().length;
- });
- $(obj).width((charsCount * 7) + 20);
- }
- addHandler(obj, "onkeypress", onkeypress_mult_select);
- addHandler(obj, "onkeydown", onkeydown_mult_select);
- addHandler(obj, "onfocus", onfocus_mult_select);
- addHandler(obj, "onchange", onchange_mult_select);
- };
- function onkeypress_mult_select(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if ((event.keyCode == 0xA) || (event.keyCode == 0xD)) {
- if (window.event) {
- window.event.cancelBubble = true;
- window.event.returnValue = false;
- }
- else {
- event.stopPropagation();
- event.cancelBubble = true;
- event.returnValue = false;
- }
- obj.blur();
- dont_open_view = 1;
- return false;
- }
- };
- function onkeydown_mult_select(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if ((event.keyCode == 0xA) || (event.keyCode == 0xD)) {
- if (window.event) {
- window.event.cancelBubble = true;
- window.event.returnValue = false;
- }
- else {
- event.stopPropagation();
- event.cancelBubble = true;
- event.returnValue = false;
- }
- obj.blur();
- dont_open_view = 1;
- return false;
- }
- };
- function onfocus_mult_select(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- fast_edit_old = obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + obj.getAttribute('pos') + '|' + obj.value;
- }
- function onchange_mult_select(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if (fast_edit_old != obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + obj.getAttribute('pos') + '|' + obj.value) {
- var part = obj.getAttribute('part');
- if (part != 'add_link_field') {
- obj.parentNode.style.background = '#fff6ad';
- obj.parentNode.setAttribute('yellow_color', '1');
- if ($(".save_event_button:visible").size() == 0) {
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- }
- }
- form_value_multi(obj.getAttribute('field_id'), obj.getAttribute('line_id'), obj.getAttribute('pos'), 0, obj.value);
- }
- else {
- obj.parentNode.style.background = '';
- obj.parentNode.style.backgroundColor = '';
- }
- }
- //
- // Поле дата
- //
- function addHandler_date(obj) {
- addHandler(obj, "onkeydown", onkeydown_date);
- $(obj).bind("mousedown", onmousedown_date);
- addHandler(obj, "onfocus", onfocus_date);
- addHandler(obj, "onblur", onblur_date);
- $(obj).bind('change', onchange_date); // необходимо для обмена событиями
- };
- function onkeydown_date(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- var part = obj.getAttribute('part');
- if (part != 'add_link_field') {
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- }
- if ((event.keyCode == 0xA) || (event.keyCode == 0xD)) {
- if (window.event) {
- window.event.cancelBubble = true;
- window.event.returnValue = false;
- }
- else {
- event.stopPropagation();
- event.cancelBubble = true;
- event.returnValue = false;
- }
- // Если нажат enter отменяем событие, и сохраняем значение
- this.blur();
- return false;
- }
- }
- function onmousedown_date(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- dont_open_view = 1;
- }
- function onfocus_date(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if (skip_fast_focus) {
- skip_fast_focus = 0;
- return;
- }
- if (fast_edit_old === '') {
- fast_edit_old = obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + obj.value;
- }
- }
- function onblur_date(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if (skip_fast_blur) {
- skip_fast_blur = 0;
- return;
- }
- ;
- // $(obj).datepicker('hide');
- }
- function onchange_date(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if ($('#ui-datepicker-div').css("overflow") != 'hidden' && $(obj).hasClass("datetimepicker") && $('#ui-datepicker-div').css("display") != 'none') return false; //отключаем быстрое редактирование в режиме календаря c часами и минутами до тех пор, пока открыт сам календарик
- var part = obj.getAttribute('part');
- if (part == 'add_link_field') return; // Ничего не сохраняем
- if (fast_edit_old != obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + this.value) {
- obj.style.background = '#fff6ad';
- $(obj).attr('yellow_color', '1');
- save_value(obj.getAttribute('field_id'), obj.getAttribute('line_id'), obj.value);
- }
- else
- obj.style.background = '';
- obj.blur();
- if ($(".save_event_button:visible").size() == 0) {
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- }
- }
- //
- // ПОЛЕ ТЕКСТ
- //
- function addHandler_text(obj, part) {
- //addHandler(obj,"onkeypress", onkeypress_text);
- addHandler(obj, "onkeydown", onkeydown_text);
- //addHandler(obj,"onmousedown", onmousedown_text);
- //addHandler(obj,"onfocus", onfocus_text);
- //addHandler(obj,"onblur", onblur_text);
- addHandler(obj, "onchange", onchange_text);
- addHandler(obj, "onfocus", onfocus_text_new);
- addHandler(obj, "onblur", onblur_text_new);
- };
- function onfocus_text_new(event) {
- var obj = event.target;
- var part = obj.getAttribute('part');
- if (part == 'add_link_field') return; // Ничего не сохраняем
- obj.style.border = '1px dotted #a0a0a0';
- obj.style.background = 'white';
- }
- function onblur_text_new(event) {
- var obj = event.target;
- var part = obj.getAttribute('part');
- if (part == 'add_link_field') return; // Ничего не сохраняем
- obj.style.border = '1px dotted #a0a0a0';
- }
- function onchange_text(event) {
- var obj = event.target;
- var part = obj.getAttribute('part');
- if (part == 'add_link_field') return; // Ничего не сохраняем
- obj.style.border = '1px dotted #a0a0a0';
- if (fast_edit_old != obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + obj.value) {
- obj.style.background = '#fff6ad';
- $(obj).attr('yellow_color', '1');
- save_value(obj.getAttribute('field_id'), obj.getAttribute('line_id'), obj.value);
- }
- else
- obj.style.background = '';
- }
- function onkeypress_text(event) {
- if ((navigator.appVersion.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Opera") != -1)) { // тк. они некорректно вставляют перенос строки
- if ((event.keyCode == 0xA) || (event.keyCode == 0xD)) {
- if (window.event) {
- window.event.cancelBubble = true;
- window.event.returnValue = false;
- }
- else {
- event.stopPropagation();
- event.cancelBubble = true;
- event.returnValue = false;
- }
- return false;
- }
- }
- }
- function onkeydown_text(event) {
- var obj = event.target;
- if (!obj) {
- obj = event.srcElement;
- // IE как всегда в ударе, подписываем на событие div а приходит событие о вложенном элементе, получить родительский div через свойства невозможно
- // поэтому если не div то всплываем
- while (obj.tagName != 'DIV') {
- obj = obj.parentNode;
- }
- }
- var part = obj.getAttribute('part');
- if (part != 'add_link_field') {
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- }
- return; // Дальнейшая обработка не требуется
- if (event.shiftKey) // Для правильной установки фокуса на span - чтобы появлялся курсор
- {
- var t = obj.previousSibling;
- if (typeof(t.onfocus) !== 'undefined') t.tabIndex = '';
- }
- else {
- var t = obj.previousSibling;
- if (typeof(t.onfocus) !== 'undefined') t.tabIndex = '800';
- }
- if ((event.keyCode == 0xA) || (event.keyCode == 0xD)) {
- if (event.ctrlKey) { // если нажат контрол, полюбому теряем фокус
- obj.blur();
- return false;
- }
- if (obj.getAttribute("mult_value") == 1) {
- if ((navigator.appVersion.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Opera") != -1)) { // тк. они некорректно вставляют перенос строки
- // IE и OPERA явно вставляем br
- if (window.event) {
- window.event.cancelBubble = true;
- window.event.returnValue = false;
- }
- else {
- event.stopPropagation();
- event.cancelBubble = true;
- event.returnValue = false;
- }
- insert_next_line(obj);
- return false;
- }
- else {
- return true;
- }
- }
- else {
- obj.blur();
- return false;
- }
- }
- else if (event.keyCode == 32 && navigator.userAgent.indexOf('Chrome')) { // Если текстовое поле не ограничено по ширине, то при вставке стандартного пробела происходит баг с сокращением последнего пробела
- var space_span = document.createTextNode('\u2009');
- insertTextAtCursor(" ", space_span);
- if (window.event) {
- window.event.cancelBubble = true;
- window.event.returnValue = false;
- }
- else {
- event.stopPropagation();
- event.cancelBubble = true;
- event.returnValue = false;
- }
- return false;
- }
- }
- function onmousedown_text(event) {
- var obj = event.currentTarget;
- if (!obj) {
- obj = event.srcElement;
- // IE как всегда в ударе, подписываем на событие div а приходит событие о вложенном элементе, получить родительский div через свойства невозможно
- // поэтому если не div то всплываем
- while (obj.tagName != 'DIV') {
- obj = obj.parentNode;
- }
- }
- if (event.ctrlKey) { // если нажат контрол, то срабатывает как обычная таблица
- }
- else {
- obj.contentEditable = true;
- dont_open_view = 2;
- }
- }
- function onfocus_text(event) {
- var obj = event.target;
- if (!obj) {
- obj = event.srcElement;
- // IE как всегда в ударе, подписываем на событие div а приходит событие о вложенном элементе, получить родительский div через свойства невозможно
- // поэтому если не div то всплываем
- while (obj.tagName != 'DIV') {
- obj = obj.parentNode;
- }
- }
- obj.previousSibling.tabIndex = obj.getAttribute('tabindex');
- obj.style.border = '1px dotted #a0a0a0';
- fast_edit_old = obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + obj.innerHTML;
- }
- function onblur_text(event) {
- var obj = event.target;
- if (!obj) {
- obj = event.srcElement;
- // IE как всегда в ударе, подписываем на событие div а приходит событие о вложенном элементе, получить родительский div через свойства невозможно
- // поэтому если не div то всплываем
- while (obj.tagName != 'DIV') {
- obj = obj.parentNode;
- }
- }
- var part = obj.getAttribute('part');
- obj.previousSibling.tabIndex = obj.getAttribute('tabindex');
- obj.contentEditable = false;
- obj.style.border = '';
- if (part == 'add_link_field') return; // Ничего не сохраняем
- if (fast_edit_old != obj.getAttribute('field_id') + '|' + obj.getAttribute('line_id') + '|' + obj.innerHTML) {
- obj.style.background = '#fff6ad';
- $(obj).attr('yellow_color', '1');
- save_value(obj.getAttribute('field_id'), obj.getAttribute('line_id'), obj.innerHTML);
- }
- else
- obj.style.background = '';
- }
- //
- // ПОЛЕ ФАЙЛ
- //
- function addHandler_file(obj) {
- addHandler(obj, "onmouseover", onmouseover_file);
- addHandler(obj, "onmouseout", onmouseout_file);
- addHandler(obj.nextSibling, "onclick", ondrop_file);
- };
- function onmouseover_file(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if (obj.tagName != "A") obj = obj.parentNode; // Разворачиваем вверх, т.к. это изображение
- obj.nextSibling.className = "b_drop";
- var field_id = obj.getAttribute('field_id');
- var line_id = obj.getAttribute('line_id');
- document.getElementById("add_file_url_" + field_id + "_" + line_id).className = "sub_fast_edit_file_url_hover";
- }
- function onmouseout_file(event) {
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- if (obj.tagName != "A") obj = obj.parentNode; // Разворачиваем вверх, т.к. это изображение
- obj.nextSibling.className = "b_drop_hoverpopup";
- var field_id = obj.getAttribute('field_id');
- var line_id = obj.getAttribute('line_id');
- document.getElementById("add_file_url_" + field_id + "_" + line_id).className = "sub_fast_edit_file_url";
- }
- function ondrop_file(event) {
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- var prev = obj.previousSibling; // A href
- var part = obj.getAttribute('part');
- if (part == 'add_link_field') return; // Ничего не сохраняем
- jconfirm(lang.Delete_file + " " + obj.previousSibling.title + " ?",
- function () {
- var field_id = prev.getAttribute('field_id');
- var line_id = prev.getAttribute('line_id');
- var f_name = prev.title;
- prev.style.background = "#fff6ad";
- obj.style.backgroundColor = "#fff6ad";
- obj.style.borderLeft = "7px solid #fff6ad";
- ajax_update.format = 0;
- ajax_update.method = "POST";
- ajax_update.call("sel=drop_file&field=" + field_id + "&line=" + line_id + "&fname=" + encodeURIComponent(f_name) + "&csrf=" + csrf, function (resp) {
- var res_arr = resp.toString().split("|");
- var field_id = res_arr[2];
- var line_id = res_arr[3];
- if (res_arr[0] == "deleted" || res_arr[0] == "message") { // удаляем из списка
- obj.parentNode.parentNode.removeChild(obj.parentNode);
- }
- var resp_arr = str_replace("\n", "\r\n", resp.toString()).split("\r\n");
- UpdateData(resp_arr);
- });
- });
- }
- // Загрузка файла
- var upload_in_progress = 0;
- function check_upload_file(field_id, obj) {
- if (obj.files) {
- var f_pos;
- for (f_pos = 0; f_pos < obj.files.length; f_pos++) {
- var upl_files = obj.files[f_pos];
- name = upl_files.name;
- size = upl_files.size;
- ext_pos = name.lastIndexOf(".");
- ext = name.substr(ext_pos + 1).toLowerCase();
- f_t = all_fields[field_id]['file_types'];
- if (typeof f_t[0] != 'undefined') {
- var i = 0;
- var ext_str = '';
- for (var key in f_t) {
- if (f_t[key] == ext) i++;
- ext_str = ext_str + f_t[key] + ', ';
- }
- if (i == 0) {
- len = ext_str.length;
- ext_str = ext_str.substr(0, len - 2);
- jalert(name + ' ' + lang.wrong_extension + ' ' + ext_str);
- return false;
- }
- }
- if (all_fields[field_id]['max_size'] != 0 && all_fields[field_id]['max_size'] * 1024 < size) {
- jalert(name + ' ' + lang.File_max_size + ' ' + all_fields[field_id]['max_size']);
- return false;
- }
- }
- }
- return true;
- }
- function sub_add_file(field_id, line_id, obj) {
- if (check_upload_file(field_id, obj) === false) return false;
- var value = obj.value;
- var part = obj.getAttribute('part');
- var file_img = obj.getAttribute('file_img');
- var progress_span = "<span class='upload_progress'></span>";
- var bg = "style='background:#fff6ad'";
- if (part == 'add_link_field') {
- progress_span = "";
- bg = "";
- }
- if (obj.files) { // Новый режим многофайловость
- var i;
- for (i = 0; i < obj.files.length; i++) {
- value = obj.files[i].fileName;
- if (typeof(value) == 'undefined') value = obj.files[i].name;
- var new_line;
- if (file_img) new_line = $("<span style='white-space:nowrap;'><a href=\"open_file.php?field=" + field_id + "&line=" + line_id + "&file=" + encodeURIComponent(value) + "&show=1\" onclick='jalert(\"" + lang.file_wasnt_upload + "\");return false;' id='new_file_upload_" + field_id + "_" + line_id + "_" + i + "' " + bg + " file_img=1 title='" + value + "'>" + value + "</a>" + progress_span + "<span><br />");
- else new_line = $("<span style='white-space:nowrap;'><a href=\"open_file.php?field=" + field_id + "&line=" + line_id + "&file=" + encodeURIComponent(value) + "\" onclick='jalert(\"" + lang.file_wasnt_upload + "\");return false;' id='new_file_upload_" + field_id + "_" + line_id + "_" + i + "' " + bg + " title='" + value + "'>" + value + "</a>" + progress_span + "</span> ");
- $(document.getElementById("fast_edit_span_" + field_id + "_" + line_id + "_0")).append(new_line);
- }
- }
- else { // Старый режим
- // Если указан полный путь оставляем только имя файла
- var last_slash = -1;
- var last_slash_p1 = 0;
- var last_slash_p2 = -1;
- while (1) {
- last_slash_p2 = value.indexOf('\\', last_slash_p1);
- if (last_slash_p2 == -1) break;
- last_slash_p1 = last_slash_p2 + 1;
- last_slash = last_slash_p2;
- }
- if (last_slash != -1) {
- value = value.substr(last_slash + 1, 1024 * 1024);
- }
- ;
- var new_line;
- if (file_img) new_line = $("<span style='white-space:nowrap;'><a class=\"href_post\" href=\"open_file.php?field=" + field_id + "&line=" + line_id + "&file=" + encodeURIComponent(value) + "&show=1\" onclick='jalert(\"" + lang.file_wasnt_upload + "\");return false;' id='new_file_upload_" + field_id + "_" + line_id + "_0' " + bg + " file_img=1 title='" + value + "'>" + value + "</a>" + progress_span + "</span><br />");
- else new_line = $("<span style='white-space:nowrap;'><a class=\"href_post\" href=\"open_file.php?field=" + field_id + "&line=" + line_id + "&file=" + encodeURIComponent(value) + "\" onclick='jalert(\"" + lang.file_wasnt_upload + "\");return false;' id='new_file_upload_" + field_id + "_" + line_id + "_0' " + bg + " title='" + value + "'>" + value + "</a>" + progress_span + "</span> ");
- $(document.getElementById("fast_edit_span_" + field_id + "_" + line_id + "_0")).append(new_line);
- }
- if (part == 'add_link_field') return; // Ничего не сохраняем
- upload_in_progress = 1;
- document.getElementById("sbmt_file_" + field_id + "_" + line_id).submit();
- obj.value = "";
- }
- function onupload_file_done(event) {
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- var obj = event.target;
- if (!obj) obj = event.srcElement;
- var file_img;
- var fname;
- var resp = obj.contentDocument.body.innerHTML;
- var resp_arr = str_replace("\n", "\r\n", resp.toString()).split("\r\n");
- if (upload_in_progress) {
- upload_in_progress = 0;
- obj.src = "";
- // console.log(resp);
- // Проверка на ограничение размера
- var max_size_text = 'Warning: POST Content-Length of';
- var max_bytes_text = 'bytes exceeds the limit of ';
- var max_size_flag = 0;
- var pos = resp.indexOf(max_size_text);
- if (pos != -1) { // Превышен максиамальный размер файла
- var p2 = resp.indexOf(max_bytes_text, pos);
- var max_size_mb = 'unknown';
- if (p2 != -1) {
- var msz = resp.substr(p2 + max_bytes_text.length, 1024);
- max_size_mb = intval(msz) / 1024 / 1024;
- max_size_mb = intval(max_size_mb) + (intval(max_size_mb * 10) / 10 - intval(max_size_mb)); // Округляем до десятых
- }
- jalert(lang.max_filesize_exceeded + ' ' + max_size_mb + ' ' + lang.megabytes + '.');
- max_size_flag = 1;
- var p2 = resp.indexOf('saved|');
- resp = resp.substr(p2, 1024);
- }
- resp = trim(resp, "\r\n");
- var res_arr = resp.toString().split("|");
- var field_id = res_arr[2];
- var table_id = all_fields[field_id]['table_id'];
- var line_id = res_arr[3];
- var i;
- var n_el;
- var drop_cur_file;
- if (res_arr[0] == "saved" || res_arr[0] == "message") { // файл успешно обработан, убираем индикатор загрузки
- for (i = 0; i < 100000; i++) {
- if (!document.getElementById("new_file_upload_" + field_id + "_" + line_id + "_" + i)) break;
- n_el = document.getElementById("new_file_upload_" + field_id + "_" + line_id + "_" + i);
- fname = n_el.getAttribute('title');
- file_img = n_el.getAttribute('file_img');
- drop_cur_file = 0;
- if (max_size_flag) { // файл не сохранился, убираем его из списка
- drop_cur_file = 1;
- }
- else {
- // проверяем является ли файл дубликатом
- $(n_el.parentNode.parentNode).find("a").each(function () {
- if (this != n_el) {
- if (this.innerHTML == n_el.innerHTML) { // такой файл уже есть, убираем как дубликат
- drop_cur_file = 1;
- }
- }
- })
- }
- if (drop_cur_file) { // удаляем файл из списка
- n_el.parentNode.parentNode.removeChild(n_el.parentNode);
- }
- else {
- // Меняем стиль файла на обычный
- n_el.id = "";
- n_el.style.background = '';
- n_el.setAttribute('field_id', field_id);
- n_el.setAttribute('line_id', line_id);
- if (file_img) {
- n_el.onclick = "image_window=window.open('open_file.php?field=" + field_id + "&line=" + line_id + "&file=" + encodeURIComponent(fname) + "&show=1','','width=,height=,menubar=1,scrollbars=1,resizable=1,status=1');image_window.focus();return false;";
- n_el.innerHTML = "<img src='cache/" + table_id + "_" + field_id + "_" + line_id + "_" + utf2eng(fname) + ".png' class='sub_fast_edit_img'>";
- }
- else
- n_el.onclick = "";
- n_el.nextSibling.className = "b_drop_hoverpopup";
- addHandler_file(n_el);
- }
- }
- UpdateData(resp_arr);
- }
- }
- return;
- };
- //
- // ПОЛЕ СВЯЗЬ
- //
- function calendar_combobox(combobox, add_event) {
- if (combobox.length > 0) {
- combobox.each(function (i, item) {
- var f_id = $(this).attr('field_id');
- var l_id = $(this).attr('line_id');
- var ac_val = $(item).attr('ac_link_val');
- var url;
- if (typeof ac_val !== 'undefined') {
- url = 'select_value.php?field=' + f_id + '&line=' + l_id + '&q=' + ac_val;
- } else {
- url = 'select_value.php?field=' + f_id + '&line=' + l_id;
- }
- autocomplete_ajax_request($(this), url, false);
- var field_id = $(item).attr('field_id');
- var parent_link = $(item).attr('filter_field');
- create_combobox($(item));
- var input = $(this).next().find($('.autocomplete__input'));
- var btn = input.next();
- var autocomplete = $(item).next().find('.autocomplete__input');
- var autocomplete_btn = autocomplete.next();
- install_autocomplete_value($(item));
- install_combobox_val(item);
- var timeout;
- input.on('keyup', function(e) {
- var word = '&q=';
- if (input.val() !== '') {
- word += encodeURIComponent(input.val());
- }
- var url_by_word = 'select_value.php?field=' + f_id + '&line=' + l_id + word;
- if (e.keyCode === 17 || e.keyCode === 18 || e.keyCode === 16 || e.keyCode === 27 || e.keyCode === 40 || e.keyCode === 37 ||
- e.keyCode === 38 || e.keyCode === 39 || e.keyCode === 9 || e.keyCode === 20 || e.keyCode === 13) {
- return;
- }
- clearTimeout(timeout);
- timeout = setTimeout(function() {
- autocomplete_ajax_request($(item), url_by_word, false, true);
- }, 100);
- });
- var onAutocompleteClick = function () {
- };
- if (parent_link && parent_link !== '') {
- onAutocompleteClick = function () {
- var parent_obj = $('[field_id="' + parent_link + '"]');
- var filter_id = $(parent_obj).attr('filter_field');
- var ac_data = {
- table_id: 0,
- filter_id: filter_id,
- field_id: field_id,
- line_id: 'new',
- has_parent: true,
- parent_obj: parent_obj
- };
- autocomplete_ajax_request($(item), url, false, true, 0, parent_obj.val(), ac_data);
- autocomplete_btn.off('click', autocomplete_btn);
- }
- autocomplete.click(onAutocompleteClick);
- autocomplete_btn.click(onAutocompleteClick);
- } else {
- onAutocompleteClick = function () {
- autocomplete_ajax_request($(item), url, false, true, 0);
- autocomplete_btn.off('click', onAutocompleteClick);
- };
- autocomplete.on('click', onAutocompleteClick);
- autocomplete_btn.on('click', onAutocompleteClick);
- }
- });
- }
- }
- function sub_fix_lnk_result(event, data, formatted) {
- this.setAttribute('f_value', data[0]);
- $(this).change();
- }
- /// ================= Обработчкики событий ================
- // сохранить значение
- function save_value(field_id, line_id, val) {
- fast_edit_old = field_id + "|" + line_id + "|" + val;
- var new_val = encodeURIComponent(val);
- ajax_update.format = 0;
- ajax_update.method = "POST";
- ajax_update.call("calendar=" + my_event_id + "&field=" + field_id + "&line=" + line_id + "&value=" + new_val + "&csrf=" + csrf, ComRespSaveSub);
- }
- // сохранить значение мулти-селекта
- function save_value_multi(field_id, line_id, full_value) {
- var new_val = encodeURIComponent(full_value);
- ajax_update.format = 0;
- ajax_update.method = "POST";
- ajax_update.call("calendar=1&field=" + field_id + "&line=" + line_id + "&value=" + new_val + "&csrf=" + csrf, ComRespSaveMultSub);
- };
- function sub_drop_line(table_id, line_id) {
- ajax_update.format = 0;
- ajax_update.method = "POST";
- ajax_update.call("calendar=1&sel=delete_line&table_id=" + table_id + "&line_id=" + line_id + "&csrf=" + csrf, ComRespDropSub);
- };
- function ComRespDropSub(resp) {
- resp = trim(resp, "\r\n")
- var resp_arr = resp.toString().split("\r\n");
- var res_arr = resp_arr[0].toString().split("|");
- var drop_table_id = res_arr[1];
- var drop_line_id = res_arr[2];
- if (res_arr[0] == "cancel_delete") {
- // var v_o=document.getElementById('subtable_'+cur_subtable_id+"_line_"+drop_line_id);
- // v_o.style.background='#ffadad';
- // $(v_o).stop().animate({ backgroundColor: '#FFFFFF' },1500).css('background','');
- jalert(lang.Canceled);
- // Обновляем, если были вычисления
- if (typeof resp_arr != 'undefined') UpdateData(resp_arr);
- }
- if (res_arr[0] == "deleted" || res_arr[0] == "message") {
- window.location.reload(); // Временная функция
- return; // В этом месте необходимо вызывать перестроение календаря
- var v_o = document.getElementById('subtable_' + cur_subtable_id + "_line_" + drop_line_id);
- if ((v_o) && (typeof(v_o.parentNode) !== 'undefined')) // Защита от быстрого двойного щелчка удалить
- v_o.parentNode.removeChild(v_o);
- if ($("#subtable_" + cur_subtable_id + " [id ^= subtable_" + cur_subtable_id + "_line_]").size() == 0 && cur_mode == "view") $(".small_green_save").fadeOut();
- // Обновляем, если были вычисления
- if (typeof resp_arr != 'undefined') UpdateData(resp_arr);
- }
- }
- var pageReload = false;
- // Обновить данные на странице
- function UpdateData(resp_arr) {
- var field;
- var type_field;
- var n_tmp;
- var n;
- var n2;
- var last_select;
- var select_obj;
- var int_val;
- var dspl_val;
- var saved_field;
- var date_fields = new Object;
- var updatedLines = new Object;
- var messagesObj = new Object;
- var messagesNum = new Object;
- var pageReloadIns = false;
- for (keyVar in resp_arr) { // меняем также значения которые изменились в результате вычислений
- res_arr = resp_arr[keyVar].toString().split("|");
- field_id = res_arr[1];
- line_id = res_arr[2];
- new_value_arr = res_arr[3].split(" ");
- new_value = Base64.decode(new_value_arr[0]);
- saved_field = false;
- if (res_arr[0] == "message") {
- var mStatus = field_id;
- var mNum = line_id;
- var mText = new_value
- if (!messagesObj[mStatus]) {
- messagesObj[mStatus] = new Object;
- messagesNum[mStatus] = mNum;
- }
- if (messagesNum[mStatus] < mNum)
- messagesNum[mStatus] = mNum;
- messagesObj[mStatus][mNum] = mText;
- continue;
- }
- if (res_arr[0] == "inserted") {
- inserted_table_id = field_id;
- inserted_line_id = line_id;
- pageReloadIns = true;
- }
- if (res_arr[0] == "saved") { // Приводим действие 'saved' к виду changed
- field_id = res_arr[2];
- line_id = res_arr[3];
- new_value = Base64.decode(res_arr[4]);
- if (res_arr[5])
- link_add_value = Base64.decode(res_arr[5]);
- else
- link_add_value = false;
- res_arr[0] = "changed";
- saved_field = true;
- }
- if (res_arr[0] == "changed") {
- field = all_fields[field_id];
- if (!field) continue;
- view_field = field['view'];
- type_field = field['type_field'];
- if (calendar.day)
- for (oneEventId in all_calendar_events)
- if (all_calendar_events[oneEventId]['group_field'] == field_id)
- pageReload = true;
- if ((type_field == 2 || type_field == 12) && new_value != "") {
- var new_date = new_value.substr(0, 10);
- var dateParts = new_date.split(".");
- var new_time = new_value.substr(11, 5);
- if (new_time)
- var timeParts = new_time.split(":");
- else
- var timeParts = ['00', '00'];
- for (oneEventId in all_calendar_events) {
- oneEvent = all_calendar_events[oneEventId];
- if (field_id != oneEvent.date_field && field_id != oneEvent.period_field) continue;
- if (js_events[oneEventId] == undefined) continue;
- if (js_events[oneEventId][line_id] == undefined) continue;
- pageReload = true;
- /*
- updatedLines[oneEventId] = {};
- updatedLines[oneEventId][line_id] = 1;
- if (calendar.day||calendar.week)
- jsDateValue = dateParts[2]+ "" + dateParts[1] + "" + dateParts[0]+timeParts[0]+timeParts[1];
- else
- jsDateValue = dateParts[2]+ "" + dateParts[1] + "" + dateParts[0];
- if (field_id == oneEvent.date_field)
- js_events[oneEventId][line_id]['begin'] = jsDateValue;
- else
- js_events[oneEventId][line_id]['end'] = jsDateValue;
- */
- }
- }
- v_o = document.getElementById("fast_edit_span_" + field_id + "_" + line_id + "_0");
- if (!v_o) { // Нередактируемое поле
- v_o = document.getElementById("sub_cell_" + field_id + "_" + line_id);
- if (!v_o) continue;
- if (type_field == 5) {
- n_tmp = new_value.split("|");
- int_val = n_tmp[0];
- dspl_val = n_tmp[1];
- if (view_field) {
- v_o.innerHTML = '<a href="view_line2.php?table=' + field['table_id'] + '&line=' + int_val + '&back_url={$base64_current_url}">' + dspl_val + '</a>';
- }
- else {
- v_o.innerHTML = dspl_val;
- }
- $(".mount_cell_" + field_id + "_" + line_id).each(function (indx, element) {
- if (link_add_value)
- mountValue = link_add_value;
- else
- mountValue = dspl_val;
- if (mountValue == "") mounValue = " ";
- this.innerHTML = strip_tags(mountValue);
- });
- }
- else {
- if (field['view_html'] == "0")
- v_o.innerHTML = new_value;
- $(".mount_cell_" + field_id + "_" + line_id).each(function (indx, element) {
- mountValue = str_replace("<br>", " ", str_replace("<br/>", " ", str_replace("<br />", " ", new_value)));
- if (mountValue == "") mountValue = " ";
- this.innerHTML = strip_tags(mountValue);
- });
- }
- v_o.style.background = '#fff6ad';
- $(v_o).attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background', '')
- if (type_field == 3) {
- // выполняем Javascript если он вписан и поле - отображать html
- if (field['view_html']) {
- var re = /<script>([\s\S]*?)<\/script>/gi;
- js_result = new_value.match(re);
- if (js_result) {
- var o_str, s_len = String('<script>').length;
- for (keyVar in js_result) {
- if (intval(keyVar) != keyVar) continue; // Фикс для ie, т.к. могут быть не только числа
- o_str = js_result[keyVar];
- o_str = o_str.substr(s_len, o_str.length - s_len * 2 - 1);
- eval(o_str);
- }
- }
- }
- }
- continue;
- }
- // Формируем вывод
- if ((type_field == 1) || (type_field == 2) || (type_field == 12) || (type_field == 3) || (type_field == 10)) { // Число, строка, дата
- if ((type_field == 2) || (type_field == 12)) new_value = new_value.substr(0, 16);
- if (typeof(v_o.value) === 'undefined' && field['view_html'] == "0") {
- v_o.innerHTML = new_value;
- }
- else if (field['view_html'] == "0")
- v_o.value = new_value;
- $(".mount_cell_" + field_id + "_" + line_id).each(function (indx, element) {
- mountValue = str_replace("<br>", " ", str_replace("<br/>", " ", str_replace("<br />", " ", new_value)));
- if (mountValue == "") mountValue = " ";
- this.innerHTML = strip_tags(mountValue);
- });
- v_o.style.background = '#fff6ad';
- $(v_o).attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background', '')
- }
- if (type_field == 7 || type_field == 11 || type_field == 14) { // Пользователь, группа
- if (saved_field) {
- if (field['mult_value'] > 0) {
- real_value = "";
- all_id_values = new_value.split('\r\n');
- vals_count = all_text_values.length;
- for (v = 0; v < vals_count; v++)
- real_value += field['s_list_values'][all_id_values[v]] + " "
- }
- else real_value = field['s_list_values'][new_value];
- }
- else if (field['mult_value'] > 0)
- real_value = str_replace("\r\n", " ", new_value);
- else
- real_value = new_value;
- $(".mount_cell_" + field_id + "_" + line_id).each(function (indx, element) {
- if (real_value == "") real_value = " ";
- this.innerHTML = real_value;
- });
- if (saved_field) continue;
- if (field['mult_value'] > 0) {
- all_text_values = new_value.split('\r\n');
- insVal = str_replace("\r\n", " ", new_value);
- $(".mount_cell_" + field_id + "_" + line_id).each(function (indx, element) {
- if (insVal == "") insVal = " "
- this.innerHTML = insVal;
- });
- values_count = all_text_values.length;
- var all_list_count;
- all_values = [];
- n = 0;
- // Формируем значение в скрытом поле
- if (new_value == "") {
- document.getElementById("fast_edit_span_" + field_id + "_" + line_id + "_0").value = "";
- values_count = 0;
- }
- else {
- var hidden_val = "-";
- for (l = 0; l < values_count; l++) {
- all_list_count = 0;
- for (v_id in field['s_list_values']) {
- all_list_count += 1;
- if (all_text_values[l] == field['s_list_values'][v_id]) {
- hidden_val += v_id + "-";
- all_values[l] = v_id;
- }
- }
- }
- document.getElementById("fast_edit_span_" + field_id + "_" + line_id + "_0").value = hidden_val;
- }
- // Устанавливаем значения
- $('select[multi_select_group=' + field_id + '_' + line_id + ']').each(function (i) {
- select_obj = this;
- last_select = select_obj;
- n_tmp = select_obj.nextSibling;
- n_tmp.style.background = '#fff6ad';
- $(n_tmp).attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background', '')
- if (n < values_count) { // устанавливаем значение
- select_obj.value = all_values[n];
- n_tmp.innerHTML = all_text_values[n];
- select_obj.setAttribute("is_last", 0);
- $(select_obj).children().each(function (y) {
- if (this.value != select_obj.value) { // не выбранный елемент
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- }
- else {
- this.selected = true;
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- });
- }
- else if (n == values_count) { // пустое значение в конце
- if (type_field == 14)
- select_obj.value = "";
- else
- select_obj.value = 0;
- n_tmp.innerHTML = "";
- select_obj.setAttribute("is_last", 1);
- $(select_obj).children().each(function (y) {
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- });
- }
- else { // лишние значения, удаляем
- var t_span = select_obj.parentNode;
- t_span.parentNode.removeChild(t_span);
- }
- n++;
- });
- // если новых элементов больше чем существующих - добавляем
- for (n; n <= values_count; n++) {
- // Создание элемента, на основе копирования последнего
- var obj_tag_name = last_select.tagName;
- var new_id = "fast_edit_span_" + field_id + "_" + line_id + "_" + n + "0";
- var newEL = document.createElement(obj_tag_name);
- newEL.id = new_id;
- newEL.className = "";
- // события
- addHandler_mult_select(newEL);
- // атрибуты
- newEL.setAttribute("multi_select_group", field_id + "_" + line_id);
- newEL.setAttribute("style", last_select.getAttribute("style"));
- newEL.style.background = '';
- newEL.setAttribute("field_id", field_id);
- newEL.setAttribute("line_id", line_id);
- newEL.setAttribute("pos", n);
- newEL.setAttribute("is_last", 1);
- newEL.setAttribute("tabindex", last_tabindex_fast_edit);
- $(newEL).html(last_select.innerHTML);
- newEL.selectedIndex = -1;
- // вставляем после текущего
- var t_span = last_select.parentNode;
- var next_node = t_span.nextSibling;
- //alert(next_node.innerHTML);
- t_span.parentNode.insertBefore(newEL, next_node);
- //console.log(newEL.parentNode);
- $(newEL).attr('add_width', '0');
- form_fast_select_obj(newEL);
- var select_obj = newEL;
- var last_select = select_obj;
- n_tmp = select_obj.nextSibling;
- if (n < values_count) { // устанавливаем значение
- select_obj.value = all_values[n];
- n_tmp.innerHTML = all_text_values[n];
- select_obj.setAttribute("is_last", 0);
- $(select_obj).children().each(function (y) {
- if (this.value != select_obj.value) { // не выбранный елемент
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- //this.selected = true;
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- });
- }
- else if (n == values_count) { // пустое значение в конце
- var options_count = 0;
- if (type_field == 14)
- select_obj.value = "";
- else
- select_obj.value = 0;
- select_obj.setAttribute("is_last", 1);
- $(select_obj).children().each(function (y) {
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- if ((type_field == 14 && this.value != '') || ((type_field == 7 || type_field == 11) && this.value != 0)) options_count++;
- }
- });
- if (options_count == 0) // Не одного видимого элемента, скрываем котрол
- {
- select_obj.parentNode.style.display = 'none';
- select_obj.style.display = 'none';
- }
- }
- }
- }
- else { // Обычный список
- // Ищем id
- var new_value_id = 0;
- for (v_id in field['s_list_values'])
- if (new_value == field['s_list_values'][v_id]) new_value_id = v_id;
- v_o.value = new_value_id;
- n_tmp = v_o.nextSibling;
- n_tmp.innerHTML = new_value;
- $(n_tmp).attr('yellow_color', '1');
- n_tmp.style.background = '#fff6ad';
- $(n_tmp).attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background', '')
- // substr_select_span(v_o.id)
- }
- }
- if (type_field == 4) { // Список
- if (field['mult_value'] > 0) { // Мультисписок
- all_values = new_value.split('\r\n');
- insVal = str_replace("\r\n", " ", new_value);
- $(".mount_cell_" + field_id + "_" + line_id).each(function (indx, element) {
- if (insVal == "") insVal = " ";
- this.innerHTML = insVal;
- });
- values_count = all_values.length;
- n = 0;
- // Формируем значение в скрытом поле
- if (new_value == "") {
- document.getElementById("fast_edit_span_" + field_id + "_" + line_id + "_0").value = "";
- values_count = 0;
- }
- else
- document.getElementById("fast_edit_span_" + field_id + "_" + line_id + "_0").value = new_value;
- // Устанавливаем значения
- $('select[multi_select_group=' + field_id + '_' + line_id + ']').each(function (i) {
- select_obj = this;
- last_select = select_obj;
- n_tmp = select_obj.nextSibling;
- n_tmp.style.background = '#fff6ad';
- $(n_tmp).attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background', '')
- if (n < values_count) { // устанавливаем значение
- select_obj.value = all_values[n];
- n_tmp.innerHTML = all_values[n];
- select_obj.setAttribute("is_last", 0);
- $(select_obj).children().each(function (y) {
- if (this.value != select_obj.value) { // не выбранный елемент
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- });
- }
- else if (n == values_count) { // пустое значение в конце
- select_obj.value = "";
- n_tmp.innerHTML = "";
- select_obj.setAttribute("is_last", 1);
- $(select_obj).children().each(function (y) {
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- });
- }
- else { // лишние значения, удаляем
- var t_span = select_obj.parentNode;
- t_span.parentNode.removeChild(t_span);
- }
- n++;
- });
- // если новых элементов больше чем существующих - добавляем
- for (n; n <= values_count; n++) {
- // Создание элемента, на основе копирования последнего
- var obj_tag_name = last_select.tagName;
- var new_id = "fast_edit_span_" + field_id + "_" + line_id + "_" + n + "0";
- var newEL = document.createElement(obj_tag_name);
- newEL.id = new_id;
- newEL.className = "";
- // события
- addHandler_mult_select(newEL);
- // атрибуты
- newEL.setAttribute("multi_select_group", field_id + "_" + line_id);
- newEL.setAttribute("style", last_select.getAttribute("style"));
- newEL.style.background = '';
- newEL.setAttribute("field_id", field_id);
- newEL.setAttribute("line_id", line_id);
- newEL.setAttribute("pos", n);
- newEL.setAttribute("is_last", 1);
- newEL.setAttribute("tabindex", last_tabindex_fast_edit);
- $(newEL).html(last_select.innerHTML);
- newEL.selectedIndex = -1;
- // вставляем после текущего
- var t_span = last_select.parentNode;
- var next_node = t_span.nextSibling;
- t_span.parentNode.insertBefore(newEL, next_node);
- //console.log(newEL.parentNode);
- $(newEL).attr('add_width', '0');
- form_fast_select_obj(newEL);
- select_obj = newEL;
- last_select = select_obj;
- n_tmp = select_obj.nextSibling;
- if (n < values_count) { // устанавливаем значение
- select_obj.value = all_values[n];
- n_tmp.innerHTML = all_values[n];
- select_obj.setAttribute("is_last", 0);
- $(select_obj).children().each(function (y) {
- if (this.value != select_obj.value) { // не выбранный елемент
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- }
- });
- }
- else if (n == values_count) { // пустое значение в конце
- select_obj.value = "";
- n_tmp.innerHTML = "";
- select_obj.setAttribute("is_last", 1);
- var options_count = 0;
- $(select_obj).children().each(function (y) {
- if (in_array(this.value, all_values)) {
- this.style.display = 'none';
- this.setAttribute('disabled', 'disabled');
- }
- else {
- this.style.display = '';
- this.setAttribute('disabled', '');
- this.removeAttribute('disabled');
- if (this.value != '') options_count++;
- }
- });
- if (options_count == 0) // Не одного видимого элемента, скрываем котрол
- {
- select_obj.parentNode.style.display = 'none';
- select_obj.style.display = 'none';
- }
- }
- }
- }
- else { // Обычный список
- v_o.value = new_value;
- n_tmp = v_o.nextSibling;
- n_tmp.innerHTML = new_value;
- n_tmp.style.background = '#fff6ad';
- $(".mount_cell_" + field_id + "_" + line_id).each(function (indx, element) {
- if (new_value == "") new_value = " "
- this.innerHTML = new_value;
- });
- $(n_tmp).attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background', '')
- // substr_select_span(v_o.id)
- }
- }
- if (type_field == 5) { // Связь
- n_tmp = new_value.split("|");
- int_val = n_tmp[0];
- dspl_val = n_tmp[1];
- v_o.setAttribute('f_value', int_val);
- v_o.value = dspl_val;
- v_o.style.background = '#fff6ad';
- $(v_o).attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background', '')
- $(".mount_cell_" + field_id + "_" + line_id).each(function (indx, element) {
- if (link_add_value)
- mountValue = link_add_value;
- else
- mountValue = dspl_val;
- if (mountValue == "") mountValue = " "
- this.innerHTML = mountValue;
- });
- }
- }
- }
- var messagesCalc = false;
- for (statusId in messagesObj) {
- messagesCalc = true;
- var oneMsgGroup = messagesObj[statusId];
- var oneStatusText = "";
- for (m = 0; m <= messagesNum[statusId]; m++) {
- if (!oneMsgGroup[m]) continue;
- oneStatusText += oneMsgGroup[m] + "<br />";
- }
- if (oneStatusText != "")
- jalert(oneStatusText);
- }
- if (pageReloadIns) {
- if (messagesCalc)
- $("#jalert button").bind("click", saveHandler);
- else
- window.location.reload();
- }
- var stringChanges = false;
- for (oneEventId in updatedLines) {
- stringChanges = true; // Временная
- break; // заглушка
- oneUpdate = updatedLines[oneEventId];
- for (oneLineId in oneUpdate) {
- var js_line = js_events[oneEventId][oneLineId];
- var js_event = all_calendar_events[oneEventId];
- var eventContent = $(".c_event_layout" + oneEventId + "_" + oneLineId).html();
- $(".calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId).remove();
- hideOneEvent();
- if ((calendar.js_begin > js_line.begin && calendar.js_begin > js_line.end) || (calendar.js_end < js_line.begin && calendar.js_end < js_line.end)) {
- js_events[oneEventId][oneLineId] = undefined;
- stringChanges = true;
- continue;
- }
- if (calendar.day && (calendar.js_begin > js_line.begin || calendar.js_end < js_line.end)) {
- js_events[oneEventId][oneLineId]['length'] = 0;
- var newEventData = "<div event_length='0' style='margin-top: 0px; border: 1px solid " + js_event.color + "; z-index: 0' ";
- newEventData += "class='calendar_event_line calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + " calendar_offset_" + oneLineId + "_" + oneEventId + "' ";
- newEventData += "id='calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + "'>";
- newEventData += "<div onclick='viewOneEvent(" + oneEventId + ", " + oneLineId + ", event); event.cancelBubble = true;' ";
- newEventData += "onmouseover='highlightEvent(true, " + oneEventId + ", " + oneLineId + ")' onmouseout='highlightEvent(false, " + oneEventId + ", " + oneLineId + ")' ";
- newEventData += "id='c_event_layout" + oneEventId + "_" + oneLineId + "' class='c_event_layout c_event_layout" + oneEventId + "_" + oneLineId + "' style='z-index: 0'>" + eventContent + "</div></div>";
- $(".view_overperiod_events").append(newEventData);
- stringChanges = true;
- continue;
- }
- if (calendar.week && ((calendar.js_begin > js_line.begin || calendar.js_end < js_line.end) || (js_line.begin.substr(0, 8) != js_line.end.substr(0, 8) && js_line.end != "0"))) {
- if (calendar.js_begin > js_line.begin)
- var startCell = calendar.js_begin.substr(0, 8);
- else
- var startCell = js_line.begin.substr(0, 8);
- if (calendar.js_end < js_line.end)
- var endCell = calendar.js_end.substr(0, 8);
- else
- var endCell = js_line.end.substr(0, 8);
- eLength = 0;
- for (pos in week_days) {
- if (startCell <= week_days[pos] && endCell >= week_days[pos])
- eLength += 1;
- if (startCell == week_days[pos])
- var insertedCell = pos;
- }
- js_events[oneEventId][oneLineId]['length'] = eLength;
- eOffset = parseInt(js_line.offset) * 17;
- var newEventData = "<div event_length='" + eLength + "' style='margin-top: " + eOffset + "px; border: 1px solid " + js_event.color + "' ";
- newEventData += "class='calendar_event_line calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + " calendar_offset_" + oneLineId + "_" + oneEventId + "' ";
- newEventData += "id='calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + "_0_0'> ";
- newEventData += "<div onclick='viewOneEvent(" + oneEventId + ", " + oneLineId + ", event); event.cancelBubble = true;' ";
- newEventData += "onmouseover='highlightEvent(true, " + oneEventId + ", " + oneLineId + ") 'onmouseout='highlightEvent(false, " + oneEventId + ", " + oneLineId + ")' ";
- newEventData += "id='c_event_layout" + oneEventId + "_" + oneLineId + "_0_0' ";
- newEventData += "class='c_event_layout c_event_layout" + oneEventId + "_" + oneLineId + "'>" + eventContent + "</div></div>";
- $("#week_overperiod" + insertedCell).prepend(newEventData);
- stringChanges = true;
- continue;
- }
- js_events[oneEventId][oneLineId]['length'] = 0;
- var eLength = 0;
- if (calendar.day || calendar.week) {
- var beginTime = js_line.begin.substr(8, 4);
- var insertHour = beginTime.substr(0, 2);
- var insertMin = beginTime.substr(2, 2);
- var startMin = insertMin;
- var startHour = insertHour;
- if (calendar.week) {
- for (pos in week_days) {
- if (js_line.begin.substr(0, 8) == week_days[pos])
- var insertedCol = pos;
- }
- }
- else
- var insertedCol = 0;
- if (insertMin < "30")
- insertMin = 0;
- else
- insertMin = 1;
- if (js_line.end == "0") {
- js_events[oneEventId][oneLineId]['length'] = 1;
- eLength = 1;
- }
- else {
- if (startHour[0] == "0")
- startHour = startHour[1];
- if (startMin[0] == "0")
- startMin = startMin[1];
- var startTime = parseInt(startHour) + (parseInt(startMin) / 60);
- var endHour = js_line.end.substr(8, 2);
- if (endHour[0] == "0")
- endHour = endHour[1];
- var endMin = js_line.end.substr(10, 2);
- if (endMin[0] == "0")
- endMin = endMin[1];
- var endTime = parseInt(endHour) + (parseInt(endMin) / 60);
- eLength = (endTime - startTime) / 0.5;
- if (eLength < 1) eLength = 1;
- js_events[oneEventId][oneLineId]['length'] = eLength;
- }
- var newEventData = "<div event_length='" + eLength + "' event_offset='-1' style='margin-top: 0px; z-index: 13; margin-left: 0px; border: 1px solid " + js_event.color + "' ";
- newEventData += "class='calendar_event_line calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + " calendar_offset_" + oneLineId + "_" + oneEventId + "' ";
- newEventData += "id='calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + "'> ";
- newEventData += "<div onclick='viewOneEvent(" + oneEventId + ", " + oneLineId + ", event); event.cancelBubble = true;' ";
- newEventData += "onmouseover='highlightEvent(true, " + oneEventId + ", " + oneLineId + ")' onmouseout='highlightEvent(false, " + oneEventId + ", " + oneLineId + ")' ";
- newEventData += "id='c_event_layout" + oneEventId + "_" + oneLineId + "' class='c_event_layout c_event_layout" + oneEventId + "_" + oneLineId + "'>" + eventContent + "</div></div>";
- js_events[oneEventId][oneLineId]['offset'] = -1;
- $("#cell_" + insertHour + "_" + insertMin + "_" + insertedCol).prepend(newEventData);
- stringChanges = true;
- }
- if (calendar.day == "" && calendar.week == "") {
- for (oneStrId in month_days) {
- var oneStr = month_days[oneStrId];
- var beginEventCell = false;
- var endEventSell = 7;
- for (oneCellId in oneStr) {
- var oneCell = oneStr[oneCellId];
- if ((oneCellId == "1" && js_line.begin <= oneCell.str && js_line.end >= oneCell.str) || js_line.begin == oneCell.str) {
- beginEventCell = oneCellId;
- if (js_line.end == "0") {
- endEventSell = oneCellId;
- break;
- }
- }
- if (oneCell.str == js_line.end) endEventSell = oneCellId;
- }
- if (beginEventCell) {
- eOffset = parseInt(js_line.offset) * 17;
- eLength = endEventSell - (beginEventCell - 1);
- js_events[oneEventId][oneLineId]['length'] += eLength;
- var newEventData = "<div event_length='" + eLength + "' style='margin-top: " + eOffset + "px;border: 1px solid " + js_event.color + "' ";
- newEventData += "class='calendar_event_line calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + "' ";
- newEventData += "id='calendar_event_line_" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + "_" + oneStrId + "_" + beginEventCell + "'>";
- newEventData += "<div onclick='viewOneEvent(" + oneEventId + ", " + oneLineId + ", event, " + oneStrId + ", " + beginEventCell + "); event.cancelBubble = true;' ";
- newEventData += "onmouseover='highlightEvent(true, " + oneEventId + ", " + oneLineId + ")' onmouseout='highlightEvent(false, " + oneEventId + ", " + oneLineId + ")' ";
- newEventData += "id='c_event_layout" + js_event.date_field + "_" + oneLineId + "_" + oneEventId + "_" + oneStrId + "_" + beginEventCell + "' ";
- newEventData += " class='c_event_layout c_event_layout" + oneEventId + "_" + oneLineId + "'>" + eventContent + "</div></div>";
- $("tr#month_str" + oneStrId + " .month_cell" + beginEventCell + " [id^=quadr]").append(newEventData);
- stringChanges = true;
- }
- }
- }
- }
- }
- if (stringChanges) {
- changeOffsets();
- fixCalendarLayout();
- }
- }
- // Обработка сохранения
- var saveHandler = function () {
- $.ajax({
- type: "POST",
- url: "calendar.php",
- data: {
- csrf: csrf,
- id: calendar.id,
- get: 'check_line',
- data: {line_id: inserted_line_id, table_id: inserted_table_id}
- },
- success: function (input) {
- if (input == "1")
- window.location.reload();
- else {
- $("#jalert button").unbind("click", saveHandler);
- pageReload = false;
- $(".save_event_button").fadeIn(100);
- }
- }
- });
- };
- var calendar_error_status = 0;
- var uniq_error_status = 0;
- // Обработать отклик о сохранении
- function ComRespSaveSub(resp) {
- if (resp == "Invalid access.") {
- jalert("Please press f5 button, for refresh login status.");
- return;
- }
- resp = trim(resp, "\r\n");
- var resp_arr = resp.toString().split("\r\n");
- for (i = 0; i < resp_arr.length; i++) {
- var res_arr = resp_arr[i].toString().split("|");
- var field_id = res_arr[2];
- var line_id = res_arr[3];
- var new_value = Base64.decode(res_arr[4]);
- var v_o;
- if (res_arr[0] == "saved") {
- calendar_error_status = 0;
- uniq_error_status = 0;
- $('[yellow_color=1]').attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background-color', '');
- // Обновляем остальные поля
- UpdateData(resp_arr);
- }
- else if (resp_arr[0] == 'error') {
- calendar_error_status = 1;
- $('[yellow_color=1]').attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background-color', '');
- //jalert('Время начала события больше времени окончания!');
- }
- else if (resp_arr.indexOf('error1') != -1) {
- var mm = resp_arr.toString().split("|");
- var my_field = all_fields[mm[1]];
- uniq_error_status = 1;
- $('[yellow_color=1]').attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background-color', '');
- jalert(lang.fast_field_already_exists_p1 + ' ' + my_field.name_field + ' ' + lang.fast_field_already_exists_p2);
- }
- }
- }
- // Обработать отклик о сохранении мултивыбора
- function ComRespSaveMultSub(resp) {
- var res_arr = resp.toString().split("|");
- var field_id = res_arr[2];
- var line_id = res_arr[3];
- var new_value = Base64.decode(res_arr[4]);
- if (res_arr[0] == "saved" || res_arr[0] == "message") {
- // Обратный отклик не реализован, просто меняем фон на белый
- $('[yellow_color=1]').attr('yellow_color', '0').stop().animate({backgroundColor: '#FFFFFF'}, 1500).css('background', '');
- }
- }
- function insertTextAtCursor(text, t_node) {
- var sel, range, html;
- if (window.getSelection) {
- sel = window.getSelection();
- if (sel.getRangeAt && sel.rangeCount) {
- range = sel.getRangeAt(0);
- range.insertNode(t_node);
- range.setEndAfter(t_node);
- range.setStartAfter(t_node);
- sel.removeAllRanges();
- sel.addRange(range);
- }
- } else if (document.selection && document.selection.createRange) {
- range = document.selection.createRange();
- range.pasteHTML(text);
- range.moveEnd('character', 0);
- range.select();
- }
- }
- // Вставляем стандартный перевод строки
- function insert_next_line(element) {
- insertTextAtCursor("<br>", document.createElement("br"));
- }
- function get_edit_html_value(obj_id) {
- var html = $('#edit_html_value_' + obj_id).html();
- var par_w = $('#edit_html_value_' + obj_id).width();
- $('#edit_html_value_' + obj_id).html('<textarea style="border:0px;min-height:17px; outline:none; background: #fff;padding:0px;width:' + par_w + 'px;">' + html + '</textarea>');
- $('#edit_html_value_' + obj_id + ' textarea:first-child').autosize({
- append: ""
- });
- $('#edit_html_value_' + obj_id + ' textarea:first-child').focus();
- $('#edit_html_value_' + obj_id + ' textarea:first-child').blur(function () {
- // $('#edit_html_value_'+obj_id).css("border", "1px dotted #ffffff");
- save_edit_html_value(obj_id)
- });
- // $('#edit_html_value_'+obj_id).mouseout(function(){
- // $(this).css("border", "1px dotted #a0a0a0");
- // });
- $('#edit_html_value_' + obj_id).attr('onclick', '');
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- }
- function save_edit_html_value(obj_id) {
- var html = $('#edit_html_value_' + obj_id + ' textarea:first-child').val();
- $('#edit_html_value_' + obj_id).css('background', '#fff6ad');
- $('#edit_html_value_' + obj_id).attr('yellow_color', '1');
- save_value($('#edit_html_value_' + obj_id).attr('field_id'), $('#edit_html_value_' + obj_id).attr('line_id'), html);
- $('#edit_html_value_' + obj_id).html(html);
- // $('#edit_html_value_'+obj_id).mouseout(function(){
- // $(this).css("border", "1px dotted #ffffff");
- // });
- $('#edit_html_value_' + obj_id).attr('onclick', 'get_edit_html_value("' + obj_id + '")');
- }
- function get_edit_html_input_value(obj_id) {
- var html = $('#edit_html_input_value_' + obj_id).html();
- var par_w = $('#edit_html_input_value_' + obj_id).width();
- $('#edit_html_input_value_' + obj_id).html('<input type="text" value="' + html + '" style="border:0px;min-height:17px; outline:none; background: #fff;padding:0px;width:' + par_w + 'px;"/>');
- $('#edit_html_input_value_' + obj_id + ' input:first-child').focus();
- $('#edit_html_input_value_' + obj_id + ' input:first-child').blur(function () {
- // $('#edit_html_input_value_'+obj_id).css("border", "1px dotted #ffffff");
- save_edit_html_input_value(obj_id)
- });
- // $('#edit_html_input_value_'+obj_id).mouseout(function(){
- // $(this).css("border", "1px dotted #a0a0a0");
- // });
- $('#edit_html_input_value_' + obj_id).attr('onclick', '');
- $(".go_event_link").fadeOut(200, function () {
- setTimeout("$('.save_event_button').fadeIn(200)", 200);
- });
- }
- function save_edit_html_input_value(obj_id) {
- var html = $('#edit_html_input_value_' + obj_id + ' input:first-child').val();
- $('#edit_html_input_value_' + obj_id).css('background', '#fff6ad');
- $('#edit_html_input_value_' + obj_id).attr('yellow_color', '1');
- save_value($('#edit_html_input_value_' + obj_id).attr('field_id'), $('#edit_html_input_value_' + obj_id).attr('line_id'), html);
- $('#edit_html_input_value_' + obj_id).html(html);
- // $('#edit_html_input_value_'+obj_id).mouseout(function(){
- // $(this).css("border", "1px dotted #ffffff");
- // });
- $('#edit_html_input_value_' + obj_id).attr('onclick', 'get_edit_html_input_value("' + obj_id + '")');
- }
Add Comment
Please, Sign In to add comment