calendar_events-1.0.0-beta1/js/calendar_events.js

js/calendar_events.js
/** 
* @file
*
*/

(function ($, Drupal, DrupalSettings){
    'use strict';

    var deb = 1;
    var opt;

    var debug = function(param){
        if (deb==1){
            return console.log(param);
        }
        return false;
    }
    //debug(DrupalSettings.calendar_events.text_initial_date);
    //debug(DrupalSettings);
    
    var global_events_json = JSON.parse(DrupalSettings.calendar_events.eventsjson);
    var array_dates_data = [];
    var text_in_modal = DrupalSettings.calendar_events.text_in_modal;
    var text_end_date = DrupalSettings.calendar_events.text_end_date;
    var text_initial_date = DrupalSettings.calendar_events.text_initial_date;
    var text_end_time = DrupalSettings.calendar_events.text_end_time;
    var text_initial_time = DrupalSettings.calendar_events.text_initial_time;    
    var num_cal = DrupalSettings.calendar_events.num_cal;
    var drupal_lang = DrupalSettings.calendar_events.lang.toLowerCase();
    var lang = (DrupalSettings.calendar_events.lang.length > 0 && typeof pickmeup.defaults.locales[drupal_lang] == 'object' ) ? drupal_lang : 'en';
    var bg_color = DrupalSettings.calendar_events.bg_color;
    var bg_color_selected = DrupalSettings.calendar_events.bg_color_selected;
    var bg_color_today = DrupalSettings.calendar_events.bg_color_today;
    var bg_color_event = DrupalSettings.calendar_events.bg_color_event;
    var border_radius = DrupalSettings.calendar_events.border_radius;
    var color = DrupalSettings.calendar_events.color;
    var color_event = DrupalSettings.calendar_events.color_event;
    var color_other = DrupalSettings.calendar_events.color_other;
    var color_month = DrupalSettings.calendar_events.color_month;
    var week_first_day = DrupalSettings.calendar_events.week_first_day;

    

    function validateColors(color){
        if(null == color ){
            return false;
        }
        if(color.length > 3 && color.length <= 7 && color[0] =="#"){
            return true;
        } 
        return false;
    }

    function validateRadius(radius){
        var len = radius.length;
        var res = false;
        for(var i=0; i < (len - 1); i++){
            if(typeof parseInt(radius[i]) != 'number'){              
                return res;
            }
        }
        if(radius[len - 1] != '%'){
          return res;
        }
        return true;
    }

    function setCss(){
        if(validateColors(bg_color)){
            $('.containerDate .pickmeup').css('background-color', bg_color);
        } 
        if(validateColors(color_other)){ 
            $('.containerDate .pickmeup .pmu-day-of-week, .containerDate .pickmeup .pmu-not-in-month, .containerDate .pickmeup .pmu-instance .pmu-button').css('color', color_other, 'important');
        }
        if(validateColors(color)){ 
            $(".containerDate .pickmeup .pmu-instance .pmu-button").css("color", color, 'important');
        }
        if(validateRadius(border_radius)){ 
            $(".containerDate .pickmeup .pmu-instance div[class*='__event_calendar']").css("border-radius", border_radius, 'important');
        }
        if(validateColors(color_event)){
            $(".containerDate .pickmeup .pmu-instance div[class*='__event_calendar']").css("color", color_event, 'important');
        }
        if(validateColors(bg_color_event)){ 
            $(".containerDate .pickmeup .pmu-instance div[class*='__event_calendar']").css("background-color", bg_color_event, 'important');
        }
        if(validateColors(bg_color_selected)){ 
            $(".containerDate .pickmeup .pmu-instance .pmu-selected").css("background-color", bg_color_selected, 'important');
        }
        if(validateColors(bg_color_today)){
            $(".containerDate .pickmeup .pmu-instance .pmu-today").css("background-color", bg_color_today, 'important');
        }
        if(validateColors(color_month)){
            $(".containerDate .pickmeup .pmu-instance .pmu-month").css("color", color_month, 'important'); 
        } 
    
    }

    function split_days(start, end){
        var arr_d = start.split('-');
        var array_range = [];
        var aux_date = new Date(arr_d[0],(arr_d[1] - 1),arr_d[2]);
        var aux_d;
        var c = 0;
        while(end != aux_d){
            c++;
            aux_date = new Date(aux_date.setDate(aux_date.getDate() + 1));
            aux_d = aux_date.getUTCFullYear() + "-" + ("0" + (aux_date.getUTCMonth() + 1 )).slice(-2) + '-' + ("0" + aux_date.getUTCDate()).slice(-2);
            array_range.push(aux_d);
            if(c > 150){
                console.log('Event error')
                break;
            }
        }
        return array_range; 
    }

    function fill_calendar(){
        $.each(global_events_json, function(){
            var start_aux, end_aux, title, body, url;
            start_aux = $(this)[0].start.split("T");
            end_aux = ($(this)[0].end != null) ? $(this)[0].end.split("T") : [null,null];
            title = $(this)[0].title;
            body = $(this)[0].body;
            url  = $(this)[0].url;
            if(null != end_aux){
                var continuos_days = split_days(start_aux[0], end_aux[0]);
                for (var i in continuos_days){
                    if (Array.isArray(array_dates_data[continuos_days[i]]) == false){
                        array_dates_data[continuos_days[i]] = [];
                    }
                    array_dates_data[continuos_days[i]]['start'] = start_aux[0];
                    array_dates_data[continuos_days[i]]['start_time'] = start_aux[1];
                    array_dates_data[continuos_days[i]]['end'] = end_aux[0];
                    array_dates_data[continuos_days[i]]['end_time'] = end_aux[1];
                    array_dates_data[continuos_days[i]]['title'] = title;
                    array_dates_data[continuos_days[i]]['body'] = body;
                    array_dates_data[continuos_days[i]]['url'] = url;
                }
            }
            if (Array.isArray(array_dates_data[start_aux[0]]) == false){
                array_dates_data[start_aux[0]] = [];
            }
            array_dates_data[start_aux[0]]['start'] = start_aux[0];
            array_dates_data[start_aux[0]]['start_time'] = start_aux[1];
            array_dates_data[start_aux[0]]['end'] = end_aux[0];
            array_dates_data[start_aux[0]]['end_time'] = end_aux[1];
            array_dates_data[start_aux[0]]['title'] = title;
            array_dates_data[start_aux[0]]['body'] = body;
            array_dates_data[start_aux[0]]['url'] = url;
        });
    }

    function init(){
        fill_calendar();
        pickmeup('.containerDate', {
            format	: 'Y-m-d',
            flat : true,
                date      : [
                  new Date
              ],
              mode      : 'single',
              first_day: week_first_day,
              locale: lang,
              calendars: num_cal,
              render: function(date){
                var date_calendar = date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + (date.getDate())).slice(-2);
                var ev = eval(array_dates_data[date_calendar]);
                var dt = '';
                if(Array.isArray(ev)){
                    dt = '__event_calendar';                    
                }
                setCss();
                return { class_name: 'data_' + date_calendar + dt }
                },
               before_show: function(){
                   return setCss();
               },
            }); // close pickmeup call

            event_click();
            $(".containerDate").on('pickmeup-fill', function (e) {
                event_click();
                setCss();                
            });
    } // close init


    function event_click(){
        $("div[class*='__event_calendar']").each(function(){                    
            opt = {
                autoOpen: true,
                modal: true,
                title: 'detail', 
                close: function(event, ui){
                    $('.containerDate').focus();
                }
            };
        });
        $("div[class*='__event_calendar']").on("click", function(event){
            event.preventDefault;
            debug($(this).attr('class'));
            var aux_class = $(this).attr("class").split("__event_calendar"); 
            var data_day = array_dates_data[aux_class[0].split("data_")[1]];
            if(text_in_modal == 0){
                return window.location.href=data_day['url'];
            }
            var dl = $('.dialog').dialog(opt).dialog("open");
            dl.html(data_day['body']);
            dl.append('<p>' + text_initial_date + ': ' + data_day['start'] + ' ' + text_initial_time + ': ' + data_day['start_time'] + '</p>');
            if(data_day['end'] != null)
                dl.append('<p>' + text_end_date + ': ' + data_day['end'] + ' ' +  text_end_time + ': ' + data_day['end_time'] + '</p>');
            $('.ui-dialog-title').html(data_day['title']);
            setCss();
          });
    }

    

     
    Drupal.behaviors.calendar_events = {
        attach: function(context, settings){
            init();
            setCss();
        }
    }
})(jQuery, Drupal, drupalSettings); 

//init();

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc