From b8a525d2138dbf3094918788485311b815bddc17 Mon Sep 17 00:00:00 2001 From: Kevin Dao Date: Fri, 10 Aug 2018 00:26:46 -0500 Subject: [PATCH 1/6] Added test calendar using dhtmlxscheduler with test data --- calendar.html | 26 ++ css/dhtmlxscheduler.css | 9 + css/imgs_dhx_terrace/arrow_left.png | Bin 0 -> 187 bytes css/imgs_dhx_terrace/arrow_right.png | Bin 0 -> 131 bytes css/imgs_dhx_terrace/but_repeat.gif | Bin 0 -> 422 bytes css/imgs_dhx_terrace/calendar.gif | Bin 0 -> 244 bytes css/imgs_dhx_terrace/clock_big.gif | Bin 0 -> 1958 bytes css/imgs_dhx_terrace/clock_small.gif | Bin 0 -> 588 bytes css/imgs_dhx_terrace/close_icon.png | Bin 0 -> 162 bytes css/imgs_dhx_terrace/collapse_expand_icon.gif | Bin 0 -> 1192 bytes css/imgs_dhx_terrace/controls.png | Bin 0 -> 761 bytes css/imgs_dhx_terrace/databg.png | Bin 0 -> 156 bytes css/imgs_dhx_terrace/databg_now.png | Bin 0 -> 103 bytes css/imgs_dhx_terrace/export_ical.png | Bin 0 -> 1793 bytes css/imgs_dhx_terrace/export_pdf.png | Bin 0 -> 1667 bytes css/imgs_dhx_terrace/resize_dots.png | Bin 0 -> 110 bytes css/imgs_dhx_terrace/resizing.png | Bin 0 -> 99 bytes css/popup.css | 2 +- js/calendar.js | 21 ++ js/dhtmlxscheduler.js | 277 ++++++++++++++++++ js/popup.js | 3 + manifest.json | 1 + popup.html | 1 + 23 files changed, 339 insertions(+), 1 deletion(-) create mode 100644 calendar.html create mode 100755 css/dhtmlxscheduler.css create mode 100755 css/imgs_dhx_terrace/arrow_left.png create mode 100755 css/imgs_dhx_terrace/arrow_right.png create mode 100755 css/imgs_dhx_terrace/but_repeat.gif create mode 100755 css/imgs_dhx_terrace/calendar.gif create mode 100755 css/imgs_dhx_terrace/clock_big.gif create mode 100755 css/imgs_dhx_terrace/clock_small.gif create mode 100755 css/imgs_dhx_terrace/close_icon.png create mode 100755 css/imgs_dhx_terrace/collapse_expand_icon.gif create mode 100755 css/imgs_dhx_terrace/controls.png create mode 100755 css/imgs_dhx_terrace/databg.png create mode 100755 css/imgs_dhx_terrace/databg_now.png create mode 100755 css/imgs_dhx_terrace/export_ical.png create mode 100755 css/imgs_dhx_terrace/export_pdf.png create mode 100755 css/imgs_dhx_terrace/resize_dots.png create mode 100755 css/imgs_dhx_terrace/resizing.png create mode 100644 js/calendar.js create mode 100755 js/dhtmlxscheduler.js diff --git a/calendar.html b/calendar.html new file mode 100644 index 00000000..e7b6f22d --- /dev/null +++ b/calendar.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
+
+
+
+
+
+ + + diff --git a/css/dhtmlxscheduler.css b/css/dhtmlxscheduler.css new file mode 100755 index 00000000..76957414 --- /dev/null +++ b/css/dhtmlxscheduler.css @@ -0,0 +1,9 @@ +/* +@license +dhtmlxScheduler v.5.0.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:11}.dhtmlx-info{min-width:120px;font-family:Tahoma;z-index:14;overflow:hidden;margin:5px 5px 10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.dhtmlx-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.dhtmlx_modal_box{overflow:hidden;display:inline-block;position:fixed;min-width:300px;width:330px;text-align:center;background:#fff;box-shadow:0 0 14px #888;border:1px solid #fff;z-index:18;border-radius:6px;font-family:Tahoma,san-serif}.dhtmlx_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%)}.dhtmlx-info,.dhtmlx_button,.dhtmlx_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.dhtmlx_popup_text{overflow:hidden}.dhtmlx_popup_controls{border-radius:6px;padding:5px 5px 9px}.dhtmlx_button,.dhtmlx_popup_button{height:30px;line-height:28px;display:inline-block;margin:0 5px;border-radius:6px;color:#fff;border:1px solid #838383;box-shadow:none}.dhtmlx_popup_button{min-width:120px;background:#fff}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #fff;background:#fff;border-radius:6px;font-size:15px;-moz-box-sizing:content-box;box-sizing:content-box;text-shadow:none;color:#444;font-weight:400;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px}.dhtmlx_popup_button.dhtmlx_ok_button div{background:#22a1bc;border:1px solid #22a1bc;color:#fff;text-shadow:0 -1px 0 #6f6f6f;outline:0}.dhtmlx_popup_button.dhtmlx_ok_button{border:1px solid #22a1bc;background-color:#22a1bc;outline:0}.dhtmlx_button input:active,.dhtmlx_button input:focus,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:#fff;color:#444;box-shadow:none;outline:0}.dhtmlx_popup_button.dhtmlx_cancel_button div:active{background-color:transparent;border-color:transparent;outline:0}div.dhx_modal_cover{background-color:#000;cursor:default;opacity:.2;position:fixed;z-index:17;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC)}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_popup_title{color:#fff;text-shadow:1px 1px #000;height:40px;line-height:40px;font-size:20px}.dhtmlx-error,.dhtmlx-info{font-size:14px;color:#000;box-shadow:0 0 10px #888;padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.dhtmlx-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #b8b8b8}.dhtmlx_message_area .dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000}.dhtmlx_message_area .dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.dhtmlx_modal_box.dhtmlx-error .dhtmlx_popup_title{background:#d81b1b;border:1px solid #ff3c3c;color:#FFF}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{background-color:#1796b0;border:1px solid transparent;color:#fff;overflow:hidden;width:100%}.dhx_move_denid .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default}.dhx_cal_event .dhx_header{height:1px;margin:0 0 0 1px;border-width:1px 1px 0;cursor:pointer}.dhx_cal_event .dhx_title{height:12px;border-width:1px 1px 0;border-bottom-style:dotted;border-radius:4px 4px 0 0;font-size:12px;line-height:12px;font-weight:700;text-align:center;background-position:right;background-repeat:no-repeat;padding:1px 0 0;cursor:pointer}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px;padding:5px 5px 8px;border-radius:0 0 4px 4px;font-weight:400;line-height:normal}.dhx_cal_event.dhx_cal_select_menu{-webkit-box-shadow:0 0 1px #fff;-moz-box-shadow:0 0 1px #fff;box-shadow:0 0 1px #fff}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important}.dhx_cal_event .dhx_event_resize{cursor:s-resize;cursor:ns-resize}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:5px;margin:-6px 0 0 2px;border-width:0;position:relative;top:auto;background:url(imgs_dhx_terrace/resizing.png) center center no-repeat #1796b0}.dhx_cal_event .dhx_resize_denied.dhx_event_resize.dhx_footer{height:0}.dhx_cal_event_line{background-color:#1796b0;border:1px solid transparent;border-radius:2px;font-family:Arial,san-serif;font-size:12px;font-weight:400;line-height:17px;height:17px;padding:0 0 0 10px;color:#fff;cursor:pointer;overflow:hidden}.dhx_cal_event_line_start{border-top-left-radius:9px;border-bottom-left-radius:9px}.dhx_cal_event_line_end{border-top-right-radius:9px;border-bottom-right-radius:9px}.dhx_cal_event_clear{height:13px;padding:0 0 0 2px;color:#0e64a0;font-family:Tahoma,san-serif;font-size:8pt;line-height:normal;white-space:nowrap;overflow:hidden;cursor:pointer;background-color:transparent;font-weight:400}.dhx_cal_event.dhx_cal_editor{z-index:10;position:absolute;overflow:hidden}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid #000;padding:0;margin:0;overflow:auto;font-family:Arial,san-serif;font-size:12px}div.dhx_menu_head{background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default}div.dhx_menu_icon{width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer}div.icon_details{background-position:0 0}div.icon_edit{background-position:-22px 0}div.icon_save{background-position:-84px -1px}div.icon_cancel{background-position:-62px 0}div.icon_delete{background-position:-42px 0}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px;font-size:8pt;font-family:Tahoma,san-serif}.dhx_month_link a{color:#00f}.dhx_month_link a:hover{text-decoration:underline;color:#0000b3}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,.7);color:#000;z-index:14;padding:20px 30px;width:190px}.dhx_global_tip div{font-size:30px}@media (-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none}}.dhx_unselectable,.dhx_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_light{-webkit-tap-highlight-color:transparent;background-color:#fff;border-radius:5px;color:#2e2e2e;font-family:Tahoma,san-serif;font-size:8pt;box-shadow:5px 5px 5px #888;position:absolute;z-index:15;width:580px}.dhx_cal_ltitle{padding:2px 0 2px 5px;height:30px;line-height:30px;border-bottom:1px solid #cecece;background:0 0;margin:0;border-radius:0;overflow:hidden;white-space:nowrap}.dhx_cal_ltext.dhx_cal_template{position:relative}.dhx_cal_ltitle span{white-space:nowrap}.dhx_time{font-weight:700;padding:0 0 0 10px;font-size:8pt;display:inline-block;margin:0}.dhx_mark{position:relative;top:3px;background-image:url(imgs/controls.gif);background-position:0 -43px;padding-left:10px}.dhx_ie6 .dhx_mark{background-position:6px -41px}.dhx_cal_light select{font-family:Tahoma,san-serif;font-size:8pt;color:#2e2e2e;padding:2px;margin:0}.dhx_cal_light .dhx_title{padding:0 0 0 13px;font-size:8pt;text-transform:none;color:inherit;display:inline-block;margin:0}.dhx_cal_larea{background-color:#fff;overflow:hidden}.dhx_cal_light_wide .dhx_cal_larea{border-top-width:0;margin:0 0 0 3px}.dhx_cal_light_wide .dhx_wrap_section{border-top:0;border-bottom:1px solid #cecece;position:relative;background-color:#fff;overflow:hidden;padding:5px 0;margin:0}.dhx_cal_lsection{background-color:#fff;font-weight:700;font-family:Arial,san-serif;font-size:18px;padding:5px 0 5px 10px}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:82px;width:100px;min-height:20px;line-height:normal;height:auto;font-size:13px;padding:5px 0 0 10px;margin:0}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;font-family:Arial,san-serif;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection .dhx_fullday input[type=checkbox]{margin:3px 3px 3px 4px}.dhx_cal_ltext{overflow:hidden;float:left;float:none;width:auto;height:auto;padding:2px 0 2px 10px}.dhx_readonly{height:15px}.dhx_cal_ltext textarea{background-color:#f9f9f9;overflow:auto;color:#2e2e2e;height:100%;width:100%;outline:0!important;resize:none;border:1px solid #cecece;line-height:20px;font-family:inherit;padding:2px}.dhx_section_time{white-space:nowrap}.dhx_cal_light_wide .dhx_section_time{padding:2px 0 0!important;height:20px!important}.dhx_section_time{text-align:center}.dhx_cal_light_wide .dhx_section_time{background:0 0}.dhx_btn_set{padding:0;margin:12px 0 0 20px;font-size:12px;font-weight:700;border-radius:3px;text-transform:none}.dhx_right_btn_set{margin-right:20px}.dhx_btn_set div{float:left;height:30px;line-height:30px;padding:0 20px;vertical-align:middle;cursor:pointer}.dhx_btn_set,.dhx_cancel_btn_set{border:1px solid #cecece;background-color:transparent;color:#454544;float:right;float:left}.dhx_save_btn{background-image:url(imgs/controls.gif);background-position:-84px 0;width:21px}.dhx_cancel_btn{background-image:url(imgs/controls.gif);background-position:-63px 0;width:20px}.dhx_delete_btn{background-image:url(imgs/controls.gif);background-position:-42px 0;width:20px}.dhx_delete_btn_set{border:1px solid #ff8831;background-color:#ff8831;color:#fff;text-shadow:0 -1px 0 #93755f;margin:12px 20px 0}.dhx_save_btn_set{border:1px solid #cecece;color:#fff;text-shadow:0 -1px 0 #6f6f6f;background-color:#22a1bc}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:14;top:0;left:0;background-color:#000;opacity:.1}.dhx_custom_button{padding:0 3px;font-family:Arial,san-serif;font-size:8pt;font-weight:400;margin-right:5px;margin-top:0;cursor:pointer}.dhx_custom_button div{cursor:pointer;float:left;height:21px;line-height:21px;vertical-align:middle}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin:0;font-weight:700;font-size:13px;cursor:pointer}.dhx_cal_light_wide .dhx_cal_larea{width:730px}.dhx_cal_light_wide{width:738px}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_wrap_section .dhx_cal_wide_checkbox input[type=checkbox]{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-family:Tahoma,san-serif;font-size:8pt;color:#747473}#input_1518604462804{margin:0 0 0 11px;border-bottom:0}.dhx_custom_button{float:right;height:21px}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0;margin-top:6px}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_minical_popup{position:absolute;z-index:16;width:251px;height:175px}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #a39588;width:100%}.dhx_expand_icon{position:absolute;right:0;background-image:url(imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:4}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(imgs/databg.png)}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(imgs/databg.png)}.dhx_agenda_line{height:21px;clear:both;overflow:hidden}.dhx_agenda_line div{float:left;width:188px;text-align:center;line-height:21px;overflow:hidden}.dhx_cal_header div.dhx_agenda_line div,.dhx_cal_header div.dhx_agenda_line span,.dhx_cal_header div.dhx_map_line{font-weight:400;color:#747473}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #000}.dhx_v_border{position:absolute;left:187px;top:0;width:1px;height:100%}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) 5px 4px no-repeat;cursor:pointer}.dhx_agenda_line span{padding-left:5px;line-height:21px}.dhx_year_week{position:relative}.dhx_year_month{height:18px;padding-top:3px;text-align:center;vertical-align:middle}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head a,.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a{color:#e2e3e6}.dhx_year_body .dhx_month_body{height:0;overflow:hidden}.dhx_month_head.dhx_year_event{background-color:#ffe763;color:''}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head{cursor:default}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(imgs/databg.png);position:absolute;z-index:12;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(imgs/icon.png) 5px 4px no-repeat;cursor:pointer}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center}.dhx_text_disabled{font-family:Tahoma,san-serif;font-size:8pt}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.dhx_mini_calendar .dhx_month_head{cursor:pointer}.dhx_mini_calendar .dhx_calendar_click{background-color:#c2d5fc}.dhx_cal_navline div.dhx_minical_icon{cursor:pointer;background:url(imgs_dhx_terrace/calendar.gif) no-repeat}.dhx_matrix_scell{height:100%;font-family:Tahoma,san-serif;font-size:8pt;color:inherit;font-weight:500}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle;border-bottom:1px solid #cecece;border-right:1px solid #cecece}.dhx_matrix_cell{background-color:#fff}.dhx_matrix_line{overflow:hidden}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;cursor:ew-resize;background:url(imgs_dhx_terrace/resize_dots.png) repeat-y;position:absolute;top:0;width:4px;height:100%}.dhx_event_resize_start{left:0}.dhx_event_resize_end{right:0}.dhx_data_table.folder .dhx_matrix_cell,.dhx_matrix_scell.folder{background-color:#969394;cursor:pointer}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px}.dhx_matrix_scell.folder{border-right:0;font-weight:700;text-align:left}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px;position:relative}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto;color:inherit;text-transform:none;font-weight:inherit}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left}.dhx_data_table.folder .dhx_matrix_cell{border-right:0}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px}.dhx_section_timeline select{width:552px}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(imgs/databg.png)}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) 5px 4px no-repeat;cursor:pointer}.dhx_map_line{height:21px;clear:both;overflow:hidden}.dhx_map{position:absolute}.dhx_map_line .headline_description,.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden}.dhx_map_line.highlight{background-color:#C4C5CC}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);background-color:#fff;cursor:default;padding:10px;position:fixed;z-index:9;opacity:1;font-family:Arial,san-serif}.dhx_cal_checkbox label{padding-left:5px}.dhx_cal_light .radio{padding:2px 0 2px 10px}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px}.dhx_cal_light .combo{padding:4px}.dhx_cal_light_wide .combo>div,.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px}.dhx_wa_column{float:left}.dhx_wa_scale_bar{font-family:Tahoma,san-serif;padding-left:10px;font-size:11px}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto}.dhx_wa_ev_body{font-size:12px;padding:5px 0 5px 7px}.dhx_wa_dnd{font-family:Tahoma,san-serif;position:absolute;padding-right:7px;color:#887AE2!important;background-color:#FFE763!important}.dhx_second_scale_bar{padding-top:2px}.dhx_cal_header div.dhx_grid_line div{border-left:1px solid #cecece}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed}.dhx_grid_area td{table-layout:fixed;text-align:center}.dhx_grid_line{height:21px;clear:both;overflow:hidden}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4}.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td{border-bottom-width:0;border-bottom-style:none}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%}.dhx_grid_event_selected{background-color:#9cc1db!important;color:#fff!important}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(imgs/images.png)}.dhx_marked_timespan{position:absolute;width:100%;margin-left:0}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100)}.dhx_mini_calendar .dhx_marked_timespan,.dhx_scheduler_month .dhx_marked_timespan{display:none}.dhx_now_time{width:100%;border-bottom:2px solid red;z-index:1}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px solid red}.dhx_matrix_now_time{border-left:2px solid red;z-index:1}.dhx_matrix_now_time,.dhx_now_time{opacity:.5}.dhx_cal_quick_info{border:2px solid #888;border-radius:5px;position:absolute;z-index:8;font-family:Tahoma,san-serif;font-size:8pt;background-color:rgba(50,50,50,.5);padding:0 0 0 7px;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.dhx_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon{float:right}.dhx_cal_qi_title{padding:5px 0 10px 5px;color:#fff;letter-spacing:1px}.dhx_cal_qi_tdate{font-size:14px}.dhx_cal_qi_tcontent{font-size:18px;font-weight:700}.dhx_cal_qi_content{border:1px solid #888;background-color:#fefefe;padding:16px 8px;font-size:14px;color:#444;width:275px;overflow:hidden}.dhx_qi_big_icon{min-width:60px;padding:5px 10px 5px 5px;margin:5px 9px 5px 0;background-color:#1796b0;border-bottom:1px solid #666;border-right:1px solid #666;border-radius:3px;line-height:20px;color:#fff;vertical-align:middle;cursor:pointer;float:left}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0}.dhx_drag_marker{width:100%;filter:alpha(Opacity=50);opacity:.5;background-color:#ffe763;position:absolute;box-sizing:border-box!important;border-top:1px solid #b6b6b6;border-bottom:1px solid #b6b6b6}.dhx_focus_slot{background:#ffe763;position:absolute;pointer-events:none;opacity:.3}.dhx_cal_container :focus{outline-style:auto}.dhtmlx_modal_box *,.dhx_cal_data,.dhx_cal_data div,.dhx_cal_data table *,.dhx_cal_header,.dhx_cal_header div,.dhx_cal_light .dhx_cal_lsection,.dhx_cal_light .dhx_wrap_section,.dhx_cal_navline div,.dhx_cal_quick_info,.dhx_cal_quick_info div,.dhx_multi_day,.dhx_multi_day div,.dhx_tooltip_line div{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dhx_form_repeat label{margin-bottom:0}.dhx_cal_data div.dhx_scale_hour,.dhx_cal_data table .dhx_matrix_cell,.dhx_cal_data table .dhx_matrix_scell{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.dhx_cal_data table{border-collapse:separate}.dhx_cal_light .dhx_cal_radio input[type=radio]{margin:3px 3px 0 5px}.dhx_cal_light .dhx_cal_radio label{display:inline-block;margin:0;position:relative;top:-3px}.dhx_cal_event div{line-height:normal}.dhx_cal_container{position:relative;overflow:hidden;background-color:#fff;font-family:Arial,san-serif;font-size:12px}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2f3a48}.dhx_cal_navline div{position:absolute;white-space:nowrap;top:14px}.dhx_cal_navline .dhx_cal_date{border:0;font-size:18px;font-weight:400;font-family:Arial,san-serif;width:100%;text-align:center;left:0;padding:1px 0 0;color:#454544;z-index:-1}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:5;top:0}.dhx_cal_prev_button{cursor:pointer;right:61px;background-color:none;background-image:url(imgs_dhx_terrace/arrow_left.png);background-position:center center;background-repeat:no-repeat;height:30px;width:46px;border:1px solid #cecece;border-radius:5px 0 0 5px}.dhx_cal_today_button{cursor:pointer;text-align:center;font-size:inherit;font-weight:700;color:#747473;right:123px;background-color:none;background-image:none;background-position:-62px 0;background-repeat:no-repeat;height:30px;width:80px;border:1px solid #cecece;border-radius:5px;text-decoration:none;text-transform:none}.dhx_cal_next_button{cursor:pointer;right:14px;background-color:none;background-image:url(imgs_dhx_terrace/arrow_right.png);background-position:center center;background-repeat:no-repeat;height:30px;width:46px;border:1px solid #cecece;border-radius:0 5px 5px 0}.dhx_cal_tab{width:60px;height:30px;background-color:none;text-align:center;text-decoration:none;text-transform:none;font-weight:700;padding-top:0;border-radius:0;cursor:pointer;border:1px solid #cecece;color:#747473;font-size:inherit}.dhx_cal_tab.active{text-decoration:none;cursor:default;font-weight:700;font-size:inherit;color:#454544;border:1px solid #cecece;border-bottom:1;background-color:#f0ede7;z-index:25}.dhx_cal_tab_first{border-radius:5px 0 0 5px;border-right:0}.dhx_cal_tab_last{border-radius:0 5px 5px 0}.dhx_cal_header{position:absolute;overflow:hidden;left:10px;background:#fff;border-top:1px solid #cecece;border-right:1px solid #cecece;z-index:2}.dhx_cal_data{-webkit-tap-highlight-color:transparent;border-top:1px solid #cecece;position:absolute;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;-ms-touch-action:pan-y;touch-action:pan-y}.dhx_cal_event,.dhx_cal_event_clear,.dhx_cal_event_line{-ms-touch-action:none;touch-action:none}.dhx_scale_bar{position:absolute;text-align:center;background-color:#fff;padding:2px 0 0;border-left:1px solid #cecece;font-size:11px;font-weight:inherit;line-height:16px;color:#767676}.dhx_scale_holder{position:absolute;border-right:1px solid #cecece;background-image:url(imgs_dhx_terrace/databg.png);-ms-interpolation-mode:nearest-neighbor;image-rendering:-moz-crisp-edges;image-rendering:crisp-edges;image-rendering:pixelated}.dhx_scale_holder_now{-ms-interpolation-mode:nearest-neighbor;image-rendering:-moz-crisp-edges;image-rendering:crisp-edges;image-rendering:pixelated;position:absolute;border-right:1px solid #cecece;background-image:url(imgs_dhx_terrace/databg_now.png)}.dhx_scale_hour{border-bottom:1px solid #cecece;background-color:#fff;text-align:center;line-height:44px;color:#767676;font-size:11px;font-weight:inherit;overflow:hidden}.dhx_month_head{height:21px;padding:0 5px 0 0;font-size:12px;font-weight:inherit;line-height:21px;color:#362d26;border-right:1px solid #cecece;background-color:#fff;text-align:right}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#fff;color:#bbb}.dhx_now .dhx_month_head{font-weight:400}.dhx_month_body{border-right:1px solid #cecece;border-bottom:1px solid #cecece;background-color:#fff}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#fff}.dhx_now .dhx_month_body,.dhx_now .dhx_month_head{background-color:#fff3a1}.dhx_scale_ignore{display:none}.dhx_cal_drag{position:absolute;z-index:13;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50)}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:13}.dhx_multi_day{position:absolute;border-top:1px solid #cecece;background-color:#fff;border-right:none;box-shadow:none}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-color:#fff;background-position:center center;border-bottom:1px solid #cecece;border-right:1px solid #cecece;background-repeat:no-repeat}.dhx_multi_day_icon{background-image:url(imgs_dhx_terrace/clock_big.gif)}.dhx_multi_day_icon_small{background-image:url(imgs_dhx_terrace/clock_small.gif)}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff}.dhx_form_repeat,.dhx_form_repeat input{padding:0 0 0 5px;margin:0;font-family:Tahoma,Verdana;font-size:11px;line-height:24px}.dhx_form_repeat{overflow:hidden}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent}.dhx_repeat_center,.dhx_repeat_divider,.dhx_repeat_left,.dhx_repeat_right{height:115px;-moz-box-sizing:border-box;box-sizing:border-box}.dhx_repeat_center,.dhx_repeat_left{padding:10px 0 0 10px;float:left}.dhx_repeat_left{width:105px}.dhx_repeat_center{width:345px;padding-top:22px}.dhx_repeat_divider{float:left;width:1px}.dhx_repeat_right{float:right;width:173px;padding:17px 3px 0 10px}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px;line-height:18px;padding:0 0 0 2px}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px solid #7f9db9;line-height:18px}input[type=radio].dhx_repeat_radio{margin:5px 4px 0 0;display:inline-block;position:relative;top:2px}input.dhx_repeat_checkbox{margin:4px 4px 0 0}.dhx_repeat_days td{padding-right:5px}.dhx_repeat_days label{font-size:10px}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_custom_button_recurring{background-image:url(imgs_dhx_terrace/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px}.dhx_cal_light_rec{width:640px}.dhx_cal_light_rec .dhx_cal_larea{width:632px}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px}.dhx_cal_event .dhx_header,.dhx_cal_event.dhx_cal_select_menu .dhx_footer{display:none}.dhx_cal_event.dhx_cal_editor{border:1px solid transparent}div.dhx_menu_head,div.dhx_menu_icon{background-image:url(imgs_dhx_terrace/controls.png)}.dhx_cal_tab.active{text-shadow:0 1px 0 #fff}.dhx_cal_tab_standalone{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px!important;padding:0 5px}.dhx_cal_larea{margin-left:0;border:1px solid transparent}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,.dhx_cal_lsection,.dhx_cal_lsection .dhx_fullday{color:#747473}.dhx_cal_light{border:1px solid #CECECE}.dhx_section_time{background-color:transparent}.dhx_btn_set div:first-child,.dhx_cancel_btn,.dhx_delete_btn,.dhx_save_btn{display:none}.dhx_cal_ltitle span{float:left}.dhx_mark{display:none}.dhx_close_icon{float:right;width:9px;height:9px;background:url(imgs_dhx_terrace/close_icon.png) center center no-repeat;padding:10px;margin-top:1px}.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template{line-height:22px}.dhx_cal_ltext textarea{box-sizing:border-box;-moz-box-sizing:border-box}.dhx_cal_container.dhx_mini_calendar{box-sizing:border-box;border:1px solid #CECECE;box-shadow:2px 2px 5px #CCC;border-radius:3px}.dhx_mini_calendar .dhx_year_month{border:1px solid #CECECE;font-family:Arial}.dhx_mini_calendar .dhx_month_body,.dhx_mini_calendar .dhx_month_head,.dhx_mini_calendar .dhx_scale_bar,.dhx_mini_calendar .dhx_year_body,.dhx_mini_calendar .dhx_year_month{border-color:transparent}.dhx_mini_calendar .dhx_year_body{padding-top:1px}.dhx_mini_calendar .dhx_scale_bar{border-width:0}.dhx_mini_calendar .dhx_year_week{border-bottom:1px solid #CECECE;padding-top:1px}.dhx_mini_calendar .dhx_month_head{padding-right:0;text-align:center}.dhx_mini_calendar .dhx_cal_next_button,.dhx_mini_calendar .dhx_cal_prev_button{border:0;height:20px}.dhx_cal_navline div.dhx_minical_icon{left:210px;top:14px;width:30px;height:30px;background-position:3px 5px}.dhx_second_scale_bar{border-bottom:1px solid #CECECE}.dhx_repeat_divider{border-left:1px solid #CECECE}.dhx_custom_button{background-color:#fff;border:1px solid #CECECE;color:#747473}.dhx_agenda_line div,.dhx_v_border{border-right:1px solid #CECECE}.dhx_year_month{border:1px solid #CECECE}.dhx_scale_bar_last{border-right:1px solid #CECECE}.dhx_year_body{border-left:1px solid #CECECE}.dhx_expand_icon{top:-3px}.dhx_scale_bar .dhx_cal_next_button,.dhx_scale_bar .dhx_cal_prev_button{width:20px;height:20px;top:0!important;border:0}.dhx_scale_bar .dhx_cal_next_button{right:1px!important;border-left:1px solid #CECECE}.dhx_scale_bar .dhx_cal_prev_button{left:1px!important;border-right:1px solid #CECECE}.dhx_cal_date,.dhx_cal_next_button,.dhx_cal_prev_button,.dhx_cal_tab,.dhx_cal_today_button{line-height:30px}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border:0}.dhx_map_line .headline_date{border-right:1px solid #CECECE}.dhtmlXTooltip.tooltip{border-left:1px solid #CECECE;border-top:1px solid #CECECE;color:#747473;font-size:12px;line-height:16px}.dhx_wa_scale_bar{border-top:1px solid #CECECE;border-bottom:1px solid #CECECE}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px solid #CECECE}.dhx_wa_ev_body{border-bottom:1px solid #CECECE}.dhx_wa_scale_bar{background-color:#f0ede7}.dhx_wa_ev_body.dhx_cal_event_selected{background-color:#fff3a1;color:#362d26}.dhx_wa_dnd{background-color:#fddb93!important;color:#747473!important;border:1px solid #ccb177}.dhx_text_disabled{color:#2E2E2E}.dhx_cal_ltext .dhx_text_disabled{line-height:22px}.dhx_grid_v_border{border-right-color:#CECECE}.dhx_month_body_border,.dhx_month_head_border,.dhx_scale_bar_border,.dhx_scale_hour_border{border-left:1px solid #CECECE}.dhx_cal_navline .dhx_cal_export{width:32px;height:32px;margin:2px;cursor:pointer;top:12px}.dhx_cal_navline .dhx_cal_export.pdf{left:auto;right:249px;background-image:url(imgs_dhx_terrace/export_pdf.png)}.dhx_cal_navline .dhx_cal_export.ical{left:auto;right:210px;background-image:url(imgs_dhx_terrace/export_ical.png)}.dhx_mini_calendar{padding:5px}.dhx_mini_calendar .dhx_calendar_click,.dhx_mini_calendar .dhx_year_event{border-radius:7px}.dhx_mini_calendar .dhx_month_head{margin:2px}.dhx_mini_calendar .dhx_year_month{line-height:20px;height:25px;font-size:14px}.dhx_mini_calendar .dhx_cal_next_button,.dhx_mini_calendar .dhx_cal_prev_button{top:8px!important} \ No newline at end of file diff --git a/css/imgs_dhx_terrace/arrow_left.png b/css/imgs_dhx_terrace/arrow_left.png new file mode 100755 index 0000000000000000000000000000000000000000..72381d325bc0b090980f5c60e8a91cd28a13d3de GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^+(693!3-pu%eSuqQtAOdA+GKPKL3dTyo+Xbf%KOI z`2{nW|7@`R^v~3*Jn>u5WR9gkadS@>#}JO|u4g^D7z{X^1Fdfuez(sTTz&FYt$@f+ zW+}-e{^7klC8PewC+4K3PnYZg8o}V{>gTe~DWM4fvkO!% literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/arrow_right.png b/css/imgs_dhx_terrace/arrow_right.png new file mode 100755 index 0000000000000000000000000000000000000000..5dbe7c8a38b50106805a03e2b119f89d743b68a2 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^+(693#0(@)9$(K3;sp4Fxc>kD-@U*GNCLs!`Rn!q z#hFWj{DPeruGU}NtqtTVd%8G=a9mH`z{8ukf&Jlnhd=Ty`x!pUYy4vp{LK}ZEG@;v ZuzR!6(p#F&7lFzdJYD@<);T3K0RUVmE8GA8 literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/but_repeat.gif b/css/imgs_dhx_terrace/but_repeat.gif new file mode 100755 index 0000000000000000000000000000000000000000..e045c8718e357050567e913ae1c6ffb94fb3b057 GIT binary patch literal 422 zcmZ?wbhEHblw#0eSgOdt#>VF7=NA$Z5*-z#uC5*$8sh2UZe?l7%gdXVmKxyipPHKL z;9zfUZ7nP;?C0z2=;$aRAz@--qNAgusHn)w%9@y%$i>AK84+$}W##DLpsK2xkPt5< zBm|Vr$jI>X_4!Xrp!k!8k&D5eL5BedKz?FiJA7b%frpM%|A{3aMdl?+3Xjh2K@~?Y%=!`?3G?#*)kBGd4oI9_u4~LkH z0-J1^3ln#ff>hWP=M4A2aCwDP7Y3n4;fyiN!SbBU?BNVNadGUTb9V09y=U*fz5Z*1 zLRUs@jZNrHUgDCT=aZFleokSrLg~(msv7UQhNc$pwvMhI@4g9>c1@cxYxg|21-^^U eI4xV@yGmhA@cNCuoBIlPeqFubppqj4gEauGU&K!U literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/calendar.gif b/css/imgs_dhx_terrace/calendar.gif new file mode 100755 index 0000000000000000000000000000000000000000..cecde96ac7fceb6cc6256da048b078383b8b6756 GIT binary patch literal 244 zcmZ?wbhEHb6lV}+c+AVt)7A6m-=8J(=B!z@X34T8b7sw%GO1_Dq9tqAty!{Y&YERQ zrc9c$W!;+pFrdQ#1R%W(EGr8nIh`Ve`~%jr9dY1jQ{{Ue!M5;}!HEEoBiYJ5K8JfY zJ=h?SccPoOqlNYSu^g*fj@F|}bHi2!UvmmPQMNqZ+v36JRPpCuOlF2eUkJ7+jXoeE z^!2Fi{_Wb6m^mZan_I(5;yM!|?O3$)^Td0&a|yIAhI#D0UEy!RE07bxVnE(I) literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/clock_big.gif b/css/imgs_dhx_terrace/clock_big.gif new file mode 100755 index 0000000000000000000000000000000000000000..26b331cf05e6419f9cb1bec5a6dc77ea833490d1 GIT binary patch literal 1958 zcmbVMX;>3i6rBLFD4^m>-GHxk2i0*_nv#-yXR~V;`q?G zYoImI&+(Az%H_1Qw86nav)P=Qnp#q2zabf0ULKD-?>%%#4im^m{+uRbDF0%*-4a85tWJtFP1KWM_|$kJr}L z*3{G}mC6D|p2=joTvVu1sTvy_3knL#OI1~s<+-`J#mb_q>dHH}zkm4fVNUj!%}x5Q zuC9rRiJPrACMPGeva&7}=0AG$DDUEhg8V#T6d!Iy#z~^rNGud_`VcYs-b)^A%+(yMo6QD;;cnND>FH@HDJj#_(+~u?P0!mC90IesGA{UU-6j`vd6B3L4oCM3L=5~u zbsZiS@EQ2slweY@n1x0N0uM{jU58%|;~kFV(fIgnzVKE#T`m+0Q5hGO3!_9*x}1UM z^09D~4(66^A|9SGkwr4_{+0vSg2}=pC`=)cJa{B338o?h#M8^$+uI!`lMoV-L?$9+ z55$}9Nv4xX@LwMuph@`q=%H-RUszzpz(>erVmgr+6B9#-@g!i9{X~RDqgi5*$sWMM zLwZOgKD`83PY8eNuu@931>Kut-XnDTu(sghV-4 zOhgDIqEKk5YsOkC3q}7<$7>Y`+@>P@ClnN(�D>SiD#eqHuxN-UiALoxDYG%2>Fe*q zB2m0pOpZ4NK>`pOiA-hs_#j>!e<}#+KkFMLlFGOu9y*IFu;4!NW&W!#oh3oJGE5SN zVNtUk5E6mOFlhuPhFQBP@NR*KkHttWkMpEfHYyPuMEM*ECWL2hmo9h~I{CkD zRV7!7FDr{?)B$J_keci-vobT%(^6Bu`25^wXV08I_30-cfArzW6UUDwCw-8Za5O$H z_Q?B(56NQ=M$4p<_r#b;7!`Ry5V3zB%IAf1_rCki+i$)3#_M}_zxHa_uF#z!ue=<* ztJtZJIBV_3J26>+y;#CkULNsp!aJa$Zq;*eBuX5$;XbL zIOc4J-yFLc|3=8kb5?G#xYY|>-63~ZU#6SYx#ab@W!?_U=Prs{GTb2)vR(zPI=}8t^>Ta2Hp$NYNPEgD_^g$q?HTxVLPqVupDseMo54BTT?;Qgq7ZGz zElYG>j4;I)eC_Dr_Do#&i_Ou*IdZd`fpgOJg(lNbXsJHgK5+s*s%SrT%u6~rI z3x<3gj2ll|J8Cz@ZcwsG_wRcx2{tYKjWyDi;KHhzKkrTBjYCJ4seMhE!MT?6}rm^)&LY5QHR6cFNbe`8D`EsoCmfuBnMoSm453>!U5*)m=%k z1vyFj^Bz66`BVGwJ5FsmaT6-Z-CIe*T@T$6Sf1bn*@*bPD`0I)@={E!J0Eh-*51`g zY}U5>>7AW$5+5xk(9aQ?!>KRv%bAaxN8-G-Zkr*?9i9(ug&Ov@SxrDaF80utKLKO$ BRLKAU literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/clock_small.gif b/css/imgs_dhx_terrace/clock_small.gif new file mode 100755 index 0000000000000000000000000000000000000000..9646dab0d163279a6702e2c2a2654315d7f2eb27 GIT binary patch literal 588 zcmZ?wbhEHblxN^)c*el+_wV1ibLYN#^=jtKnHx85{PpYCg9i`JpFe;7`t^ki7k>Eg z;n>k53l=PR_U!4)moFbbe*Ev>zcZ&#&!0DM^{SPRA3ys2`}f0#5C8o6bMoZL*|TOn zdGh%E`*&y0o?W|U^_I<>pFe*#efsn(moMMBb9?jV&2#3=UbAM+jqBI%-@pI!=g*Dn z*B&}};N81-mo8meylBy;4eNm5#PMU-uU%WQV#V_1%lGfyvv~31bLY<8x^?TxlP9}& z?b^C!)4H{5jvhVy<;$0^U%%eGaee*zb?eu!-?44$qeqYK+_`h>*3C^D)?d7E9;pAs z@#D8{-n@P5*5ykVXV0F!XV=avSFZg3|DRzn0mYvzj0_Bc3_2i3f#QULePu&nQ*%q8 zsF@?Pf~tf@YyX56K4X1XZD|oLYv+k`oB5gj0|Jy52k^R?&zs1~Be;xlS%8R<~e?=m(XzD-<0rO#_4s^1MF|jBpOgM1pkfV6g Sg$zd~j&>$-XD%)l25SK4FZx~p literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/close_icon.png b/css/imgs_dhx_terrace/close_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..4aa5d6620e493055c369385ec5cbd774f2bb9150 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{!3Opi<85sDEfH31!Z9ZwBV2G!S zV~E7%!d@R3@crIZ}u*9^a7gC;OXk;vd$@? F2>|j&FzEmQ literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/collapse_expand_icon.gif b/css/imgs_dhx_terrace/collapse_expand_icon.gif new file mode 100755 index 0000000000000000000000000000000000000000..bf64cc8199cee2ae3200dfb506eee46af6184866 GIT binary patch literal 1192 zcmZ?wbhEHb6k(~DO|DS<@LGeF#gl~X?OJYePkhZa}C`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@&oOZb5Ep zNuokUZcbjYRfVlmVoH8esuhq864qBz04piUwpDTjNhpBqbj~kIRWQ{v&`mZlGf*%y z)H5_TF*i5YQ7|$vG|)FN(l<2HH8i&}HnK7>P=Ep@plwAdX;wilZcw{`JX@uVl9B=| zef{$Ca=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~> zCgqow*eU^C3h_d20o>TUVm+{T^pf*)^(zt!^bPe4Kwg3=^!3HBG&dKny0|1L72#g2 z1{a4^7NqJ2r55Lx7A2F<7;)ua#$BaY0ZFv$KJ@xuKz}p_7rBv7@7f zk&%n5v#FV*1x&9?esXDUYF-IUZwf-M3r@YDgpgYRwAm%KD6=dz#jPkmR{`u{t4!Q( zal~mJRBsAyw>aU{s}FRHJ}6p|q8TOxOgkVZJkbI<@MNEw2Tbclz(mdX|KHy~zkmJw z@%`J^FP}es{P6zW+c&RYy?pWf+0!SFA3c0<|K8m@w{P9NasArWE0-@_ym0>9*)yk4 zojh^;*wG`04;?(Pf8X9cyLau}v3=XtEt@xO+^~M#+BK_Jtz5Bu+0rG87cE>cf8N|V zvuDkmF@4(9DU&BnoY3Fb+tc0E+0owC+S1(A*ic_rTT@+CSy5hAT2fq8SdgEWo0FZD znUS8Bnv$H9m=GTq8xtKB84(^98WJ277~t>c>*MX^>EZ6?>f-F==wNSWYh!I?X<=?= zYGP~z%usr|I@(&A8tQ7QD#}WV3i5KYGSX6#65?W_BEmv~0{ncuJltHI9PDhYEX+)d zz>?u73y@@D&;gbb44{&Ofhm4U|H{*E85Yku5R&e+!T-uz+XtnF4PtFqS1F|y9Q#l+ zVR_r*cN4#BJm2}#!Qr4m_-2mU-8~<7c6u3HS@pGR>85SELEm2e4a=Rf^3e)rrwcAD Wvon(Q@10!mhv#g5#G@QW25SH;i?#Ov literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/controls.png b/css/imgs_dhx_terrace/controls.png new file mode 100755 index 0000000000000000000000000000000000000000..f9a99e21fae845f58cc3519fa806ac82cd3f9e32 GIT binary patch literal 761 zcmVx_Fc^m?f~SHYcoqBxUOjmg3Ijib-$S}F@#fK! zAP9mWcvKWrybJ~#g?)gXb`=Cc5QUh+JN8M!uHc1yE1Pm{jMmX;8r1)2>i z0g}M~mNdPZGk>2aUA|u}DG}}|v98o2epa%JsQhulLsBF;kn|;AM4#S^>Xzi2+$8B* zf|{`BH)lsO(UdWvJfUT*NX{jxWVxR1PA`d9Vx5xqSl)pomaG!l_LzO%4lL-J-2}_c zYDsQ)dljrn-sl{T@)bpl*m=IvF}~lMea{t@`7YUNR(I##CH;Kv*uU!NQN9Po=R^8@ zL|u}gV^rnsQmcp!f-c#$@0WQdwHzv|oFsoip(V{KKGp~t(texvQ-h=|eJIMz3p#C9 z;1EVoXh|QGZ`~j$V}o^hx-u`AsNI~Pb9U`1J(pU|Xh}AL?8D`dl3oiW6$#>!-YlMT z(*jXv?Al)>o6QKp)#aN8sC9LBDnUF7OfAZd*|lbY!ENsPW7ly~_?BcE3#rFWbp#GN zK`Sg2?^&Mbsp1B;I)0HYNhr2W16+0Y8CDVx!Dmrik)RWY5IiavAm1y({Msdn662>u zOUe&s#}vhF5N*%F><&#Y33^VgH*fB)iW!XXlB%8->QD>Z{!c$uBo*C25mo3QH%-)O z!UQY8?@0iXAPGPcfFwu)kOWDn1V{pq1W5pr03<;YfFuA(kOUwJk^m$DNP;8)NdS`m ztR$bsU0?x{On<~rO8lL-OkQ9q$!4|0Y~|V`Z9lOU13r0y6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$S5uFMGaB5^r6K|)Mn|As&R*ZyAL sHfgeCb#?Vl2_T37;(bO21_lfakGHWeHQ9eo9jJ-H)78&qol`;+0IhQ=7ytkO literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/databg_now.png b/css/imgs_dhx_terrace/databg_now.png new file mode 100755 index 0000000000000000000000000000000000000000..f1875140dbd449685e573311c3687f17d914f87d GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfz!2~3=U0uz96lZ})WHAE+-w_aIoT|+y4HT60 xba4#fxSssuf2AVx){n2*gC#N&-|bZPWq2=KFi9qC`dgqP22WQ%mvv4FO#l;&8T$YL literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/export_ical.png b/css/imgs_dhx_terrace/export_ical.png new file mode 100755 index 0000000000000000000000000000000000000000..ca496f5bda3a8f0c2a84c115bedb07c48c562762 GIT binary patch literal 1793 zcmaJ?c~BE~7+pjJK}3*xA$1!yfQ9UC0)|9V$i-nv#sua?S^P#lay6BH^IY3O1d2~@~gq)0CT zEKqaNL`9%MgN7S~BAFpc#*mYIKLLI8OhQ13;!;qrOjc=`dKPI~mr2Y`+YkwyhTuso z(i>A^K?umjG$`mrfjwmKdKg@fP!O6YolbWLsW1XVFcm_m9tfRDqcUL_e0!0IXc~Du zGmPi|HWsmBkrHuS&4eJGPDjzvD3~SzLKqB&NrOuDAP^qfR244Od#JRlXB2p-R;E#? zaRsIVO^VVuECpwg2&ZpSP^#a_s-F#jIWs|5^3ka^{YDe&R(?fmzYZok>YmO)D0d&5bY{ z8?S%eXO6$j{Q03Tu$7Kwf3)lj-k)wE6MbeDebKtkIZ~3E8pS`d;e!eNA8PO5cJ7(fiWsq==nGUNlZS#KJ7}rUb`R%O>y>~pz?H1~-@|OlUEKVTJ z&uz^<5Zw7|c2`K8JfOJTMd(yW&%JA%KS&X8-kj@Zo_X~JA zYZJp^xBs!@5f9p)WJTBpyJv~2J#jRm;i!D;^Hx{)<-msSK;b7g4YP$aZHJGFgJ6d&e6a8mN=4t)b%BSZLVz zTQcnJtv3Lk6E|*Tb(c2ZZ`{VT?K``9xT3nc+NXE{@%_6tG2uNlJ~lR|xyEetmOYC)9PUtn6`elAopej&IY|t8*sT9CZGB z2w2Ifsi|4i0FkHq(wm>Ga|R-Kbw;BljYd1PkzD`ydEVg4!0yQ^{u#e|G%7Pce~J3y z{R)QVM1J_)302>8ArnNp&5@V|KQya{3Iyx+_OE=A~W`?L=a3zqWz_$q0F{>O%6@rk_#} LU&uSfk!1V>Q6I!R literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/export_pdf.png b/css/imgs_dhx_terrace/export_pdf.png new file mode 100755 index 0000000000000000000000000000000000000000..ebadc7cc73047fb4e91218a3330c4a7b9f95d1dc GIT binary patch literal 1667 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%nF$y5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8p{tRTxs!#9i;<;;fs3nw zlbH!juSMv>2~2MaLa!lCy`Y4UTL84#CABECEH%ZgC_h&L>|v`+oNh67#c3W? zZwgMgn7ZNAs}FRHJ}6p|q8TOxOgkVZJkbI<@MNEw2Tbclz(ieqisv>11Jh4W7srr_ zTSvmZGlT<0_Rc)Br1y!l0=KEx?oC+&Em4`F8+LuzymIxfi*qBd%;n|aQWE46;M-h5fIGv>eTg{VJ@PubRAT>m0A z*aaw=kj&NhqsGpeIYdZ)g>BW`teI0JiC3x1hi6-k_>^ngcx$)hJ%_=GHK8m>G^?~Ao|c6j+(@M0H-u3*8By-HD; z&fY9u=byX8%*X6roi@`Aduw05`O~>JvOk$SGbfhyLfxf* zd+&6`ZqY8AtQFJv_2u%liUFsevCOEhSfS^(j=@7DDS6rQLjsMDjx7F_ckJ`}=-W@d z4{hFK{p!&cSLPG@EDT-WPSjTV?B*=Gq_$c^Uh>)Z@RPE#kHpSS+_mQud&lye$NzZ* zFKlK%kQR6@xb)}j3vBx??{D=};oY*xS5TlJzp3Z+BW@Py`*=SL#fy1;-rIGccg{y zZ|CLv^Ve{GSN83hzf?ni7rsbY`{Re_+M8@SmAjeSXZ>-RTF&j{aN-2t{^-3?u`#}a;&X6QbIyS)gN#DVewN! zCUnK7N47DnyVpdmReG{fr2b6WYj*CZF8oiG%wIh(Q`;0e+w`!}OrAqc&C!hEo2Nf4 zxN+g_iLR+$s$Oc7wf?`Ez9stA+@(uZy_R3z;c$zsXJaFyPQs@B7hNq*ZNJK5z3%z( oo8`BUJhcA(``GKB`HXA~YvwLBa9$bM3#t}8UHx3vIVCg!0FOV8IsgCw literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/resize_dots.png b/css/imgs_dhx_terrace/resize_dots.png new file mode 100755 index 0000000000000000000000000000000000000000..c26e2a3aaffc7a98b9170f844ba5cea5b69f273e GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c6!3HF^d|7u4NO2Z;L>4nJ@ErkR#;MwT(m+84 zPZ!6Kid)Gd^S3oJN*Wj%7#Qq1@#X)2rOW^AV;CeE7)~^?EqtOS9|ly*;OXk;vd$@? F2>@GS9hv|D literal 0 HcmV?d00001 diff --git a/css/imgs_dhx_terrace/resizing.png b/css/imgs_dhx_terrace/resizing.png new file mode 100755 index 0000000000000000000000000000000000000000..389ca543e0deee26e0d48330289f8e5d22def03a GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^vOvtr!3HFEiaq}cq&N#aB8wRq_>O=u<5X=vX`rB} tr;B5V#`)wQ_6!Y)3I>NeK55=HWKhj}t?V|{@*hwEgQu&X%Q~loCII>X80r83 literal 0 HcmV?d00001 diff --git a/css/popup.css b/css/popup.css index 7f8aabe0..9e157856 100644 --- a/css/popup.css +++ b/css/popup.css @@ -19,7 +19,7 @@ } body{ - min-width: 350px; + min-width: 500px; min-height: 400px; } .matbut { diff --git a/js/calendar.js b/js/calendar.js new file mode 100644 index 00000000..429f1ebc --- /dev/null +++ b/js/calendar.js @@ -0,0 +1,21 @@ +// 0 refers to Sunday, 6 - to Saturday +scheduler.ignore_week = function(date) { + if (date.getDay() == 6 || date.getDay() == 0) // hides Sat and Sun + return true; +}; + +// Sets schedule to 12-hour format +scheduler.config.hour_date = "%h:%i %A"; + +scheduler.config.first_hour = 8; +scheduler.config.last_hour = 21; + +scheduler.init('scheduler_here', new Date(), "week"); + +var events = [ + {id:1, text:"Meeting", start_date:"08/09/2018 14:00",end_date:"08/09/2018 17:00"}, + {id:2, text:"Conference",start_date:"08/13/2018 12:00",end_date:"08/13/2018 13:00"}, + {id:3, text:"Interview", start_date:"08/01/2018 09:00",end_date:"08/01/2018 10:00"} + ]; + + scheduler.parse(events, "json"); // takes the name and format of the data source \ No newline at end of file diff --git a/js/dhtmlxscheduler.js b/js/dhtmlxscheduler.js new file mode 100755 index 00000000..6dfe0bbc --- /dev/null +++ b/js/dhtmlxscheduler.js @@ -0,0 +1,277 @@ +/* +@license +dhtmlxScheduler v.5.0.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +function dtmlXMLLoaderObject(e,t,i,r){return this.xmlDoc="","undefined"!=typeof i?this.async=i:this.async=!0,this.onloadAction=e||null,this.mainObject=t||null,this.waitCall=null,this.rSeed=r||!1,this}function convertStringToBoolean(e){switch("string"==typeof e&&(e=e.toLowerCase()),e){case"1":case"true":case"yes":case"y":case 1:case!0:return!0;default:return!1}}function getUrlSymbol(e){return-1!=e.indexOf("?")?"&":"?"}function dhtmlDragAndDropObject(){return window.dhtmlDragAndDrop?window.dhtmlDragAndDrop:(this.lastLanding=0, +this.dragNode=0,this.dragStartNode=0,this.dragStartObject=0,this.tempDOMU=null,this.tempDOMM=null,this.waitDrag=0,window.dhtmlDragAndDrop=this,this)}function _dhtmlxError(e,t,i){return this.catches||(this.catches=[]),this}function dhtmlXHeir(e,t){for(var i in t)"function"==typeof t[i]&&(e[i]=t[i]);return e}window.dhtmlXScheduler=window.scheduler={version:"5.0.0"},window.dhtmlx||(dhtmlx=function(e){for(var t in e)dhtmlx[t]=e[t];return dhtmlx}),dhtmlx.extend_api=function(e,t,i){var r=window[e];r&&(window[e]=function(e){ +var i;if(e&&"object"==typeof e&&!e.tagName){i=r.apply(this,t._init?t._init(e):arguments);for(var s in dhtmlx)t[s]&&this[t[s]](dhtmlx[s]);for(var s in e)t[s]?this[t[s]](e[s]):0===s.indexOf("on")&&this.attachEvent(s,e[s])}else i=r.apply(this,arguments);return t._patch&&t._patch(this),i||this},window[e].prototype=r.prototype,i&&dhtmlXHeir(window[e].prototype,i))},dhtmlxAjax={get:function(e,t){var i=new dtmlXMLLoaderObject(!0);return i.async=arguments.length<3,i.waitCall=t,i.loadXML(e),i},post:function(e,t,i){ +var r=new dtmlXMLLoaderObject(!0);return r.async=arguments.length<4,r.waitCall=i,r.loadXML(e,!0,t),r},getSync:function(e){return this.get(e,null,!0)},postSync:function(e,t){return this.post(e,t,null,!0)}},window.dtmlXMLLoaderObject=dtmlXMLLoaderObject,dtmlXMLLoaderObject.count=0,dtmlXMLLoaderObject.prototype.waitLoadFunction=function(e){var t=!0;return this.check=function(){if(e&&e.onloadAction&&(!e.xmlDoc.readyState||4==e.xmlDoc.readyState)){if(!t)return;t=!1,dtmlXMLLoaderObject.count++,"function"==typeof e.onloadAction&&e.onloadAction(e.mainObject,null,null,null,e), +e.waitCall&&(e.waitCall.call(this,e),e.waitCall=null)}},this.check},dtmlXMLLoaderObject.prototype.getXMLTopNode=function(e,t){var i;if(this.xmlDoc.responseXML){var r=this.xmlDoc.responseXML.getElementsByTagName(e);if(0===r.length&&-1!=e.indexOf(":"))var r=this.xmlDoc.responseXML.getElementsByTagName(e.split(":")[1]);i=r[0]}else i=this.xmlDoc.documentElement;if(i)return this._retry=!1,i;if(!this._retry&&_isIE){this._retry=!0;var t=this.xmlDoc;return this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""),!0), +this.getXMLTopNode(e,t)}return dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),document.createElement("div")},dtmlXMLLoaderObject.prototype.loadXMLString=function(e,t){if(_isIE)this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"),this.xmlDoc.async=this.async,this.xmlDoc.onreadystatechange=function(){},this.xmlDoc.loadXML(e);else{var i=new DOMParser;this.xmlDoc=i.parseFromString(e,"text/xml")}t||(this.onloadAction&&this.onloadAction(this.mainObject,null,null,null,this), +this.waitCall&&(this.waitCall(),this.waitCall=null))},dtmlXMLLoaderObject.prototype.loadXML=function(e,t,i,r){this.rSeed&&(e+=(-1!=e.indexOf("?")?"&":"?")+"a_dhx_rSeed="+(new Date).valueOf()),this.filePath=e,!_isIE&&window.XMLHttpRequest?this.xmlDoc=new XMLHttpRequest:this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP"),this.async&&(this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this)),"string"==typeof t?this.xmlDoc.open(t,e,this.async):this.xmlDoc.open(t?"POST":"GET",e,this.async),r?(this.xmlDoc.setRequestHeader("User-Agent","dhtmlxRPC v0.1 ("+navigator.userAgent+")"), +this.xmlDoc.setRequestHeader("Content-type","text/xml")):t&&this.xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded"),this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"),this.xmlDoc.send(i),this.async||new this.waitLoadFunction(this)()},dtmlXMLLoaderObject.prototype.destructor=function(){return this._filterXPath=null,this._getAllNamedChilds=null,this._retry=null,this.async=null,this.rSeed=null,this.filePath=null,this.onloadAction=null,this.mainObject=null,this.xmlDoc=null, +this.doXPath=null,this.doXPathOpera=null,this.doXSLTransToObject=null,this.doXSLTransToString=null,this.loadXML=null,this.loadXMLString=null,this.doSerialization=null,this.xmlNodeToJSON=null,this.getXMLTopNode=null,this.setXSLParamValue=null,null},dtmlXMLLoaderObject.prototype.xmlNodeToJSON=function(e){for(var t={},i=0;i-1&&(_isChrome=!0),-1!=navigator.userAgent.indexOf("Safari")||-1!=navigator.userAgent.indexOf("Konqueror")?(_KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari")+7,5)), +_KHTMLrv>525?(_isFF=!0,_FFrv=1.9):_isKHTML=!0):-1!=navigator.userAgent.indexOf("Opera")?(_isOpera=!0,_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera")+6,3))):-1!=navigator.appName.indexOf("Microsoft")?(_isIE=!0,-1==navigator.appVersion.indexOf("MSIE 8.0")&&-1==navigator.appVersion.indexOf("MSIE 9.0")&&-1==navigator.appVersion.indexOf("MSIE 10.0")||"BackCompat"==document.compatMode||(_isIE=8)):"Netscape"==navigator.appName&&-1!=navigator.userAgent.indexOf("Trident")?_isIE=8:(_isFF=!0, +_FFrv=parseFloat(navigator.userAgent.split("rv:")[1])),dtmlXMLLoaderObject.prototype.doXPath=function(e,t,i,r){if(_isKHTML||!_isIE&&!window.XPathResult)return this.doXPathOpera(e,t);if(_isIE)return t||(t=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),t||dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),i&&t.setProperty("SelectionNamespaces","xmlns:xsl='"+i+"'"),"single"==r?t.selectSingleNode(e):t.selectNodes(e)||new Array(0);var s=t;t||(t=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML), +t||dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),-1!=t.nodeName.indexOf("document")?s=t:(s=t,t=t.ownerDocument);var a=XPathResult.ANY_TYPE;"single"==r&&(a=XPathResult.FIRST_ORDERED_NODE_TYPE);var n=[],d=t.evaluate(e,s,function(e){return i},a,null);if(a==XPathResult.FIRST_ORDERED_NODE_TYPE)return d.singleNodeValue;for(var o=d.iterateNext();o;)n[n.length]=o,o=d.iterateNext();return n},_dhtmlxError.prototype.catchError=function(e,t){this.catches[e]=t},_dhtmlxError.prototype.throwError=function(e,t,i){ +return this.catches[e]?this.catches[e](e,t,i):this.catches.ALL?this.catches.ALL(e,t,i):(window.alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]),null)},window.dhtmlxError=new _dhtmlxError,dtmlXMLLoaderObject.prototype.doXPathOpera=function(e,t){var i=e.replace(/[\/]+/gi,"/").split("/"),r=null,s=1;if(!i.length)return[];if("."==i[0])r=[t];else{if(""!==i[0])return[];r=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(i[s].replace(/\[[^\]]*\]/g,"")),s++}for(s;s=0}function i(e){var t={a:!0,area:!0};return t[e.nodeName.loLowerCase()]?!!e.getAttribute("href"):!0}function r(e){var t={input:!0,select:!0,textarea:!0,button:!0,object:!0};return t[e.nodeName.toLowerCase()]?!e.hasAttribute("disabled"):!0}scheduler._getFocusableNodes=function(s){for(var a=s.querySelectorAll(["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"].join(", ")),n=Array.prototype.slice.call(a,0),d=0;d-1&&s.click?s.click():(e(c,!0),r=!0)}27==i&&(e(c,!1),r=!0)}if(r)return t.preventDefault&&t.preventDefault(),!(t.cancelBubble=!0)}else;}function i(e){i.cover||(i.cover=document.createElement("div"),i.cover.onkeydown=t,i.cover.className="dhx_modal_cover", +document.body.appendChild(i.cover));document.body.scrollHeight;i.cover.style.display=e?"inline-block":"none"}function r(e,t,i){var r=scheduler._waiAria.messageButtonAttrString(e),s=i?i:e||"",a="dhtmlx_"+s.toLowerCase().replace(/ /g,"_")+"_button";return"
"+e+"
"}function s(e){u.area||(u.area=document.createElement("div"),u.area.className="dhtmlx_message_area",u.area.style[u.position]="5px",document.body.appendChild(u.area)), +u.hide(e.id);var t=document.createElement("div");return t.innerHTML="
"+e.text+"
",t.className="dhtmlx-info dhtmlx-"+e.type,t.onclick=function(){u.hide(e.id),e=null},scheduler._waiAria.messageInfoAttr(t),"bottom"==u.position&&u.area.firstChild?u.area.insertBefore(t,u.area.firstChild):u.area.appendChild(t),e.expire>0&&(u.timers[e.id]=window.setTimeout(function(){u.hide(e.id)},e.expire)),u.pull[e.id]=t,t=null,e.id}function a(t,i,s){var a=document.createElement("div");a.className=" dhtmlx_modal_box dhtmlx-"+t.type, +a.setAttribute("dhxbox",1);var n=scheduler.uid();scheduler._waiAria.messageModalAttr(a,n);var d="",o=!1;if(t.width&&(a.style.width=t.width),t.height&&(a.style.height=t.height),t.title&&(d+='
'+t.title+"
",o=!0),d+='
"+(t.content?"":t.text)+'
',i){var l=t.ok||scheduler.locale.labels.message_ok;void 0===l&&(l="OK"),d+=r(l,!0,"ok")}if(s){var h=t.cancel||scheduler.locale.labels.message_cancel; +void 0===h&&(h="Cancel"),d+=r(h,!1,"cancel")}if(t.buttons)for(var _=0;_",a.innerHTML=d,t.content){var u=t.content;"string"==typeof u&&(u=document.getElementById(u)),"none"==u.style.display&&(u.style.display=""),a.childNodes[t.title?1:0].appendChild(u)}return a.onclick=function(i){i=i||event;var r=i.target||i.srcElement,s=scheduler._getClassName(r);if(s||(r=r.parentNode),s=scheduler._getClassName(r),"dhtmlx_popup_button"==s.split(" ")[0]){var a=r.getAttribute("result"); +a="true"==a||("false"==a?!1:a),e(t,a)}},t.box=a,c=t,a}function n(e,r,s){var n=e.tagName?e:a(e,r,s);e.hidden||i(!0),document.body.appendChild(n);var d=Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-n.offsetWidth)/2)),o=Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-n.offsetHeight)/2));return"top"==e.position?n.style.top="-3px":n.style.top=o+"px",n.style.left=d+"px",n.onkeydown=t,dhtmlx.modalbox.focus(n),e.hidden&&dhtmlx.modalbox.hide(n), +dhtmlx.callEvent("onMessagePopup",[n]),n}function d(e){return n(e,!0,!1)}function o(e){return n(e,!0,!0)}function l(e){return n(e)}function h(e,t,i){return"object"!=typeof e&&("function"==typeof t&&(i=t,t=""),e={text:e,type:t,callback:i}),e}function _(e,t,i,r){return"object"!=typeof e&&(e={text:e,type:t,expire:i,id:r}),e.id=e.id||u.uid(),e.expire=e.expire||u.expire,e}var c=null;document.attachEvent?document.attachEvent("onkeydown",t):document.addEventListener("keydown",t,!0),dhtmlx.alert=function(){ +var e=h.apply(this,arguments);return e.type=e.type||"confirm",d(e)},dhtmlx.confirm=function(){var e=h.apply(this,arguments);return e.type=e.type||"alert",o(e)},dhtmlx.modalbox=function(){var e=h.apply(this,arguments);return e.type=e.type||"alert",l(e)},dhtmlx.modalbox.hide=function(e){for(;e&&e.getAttribute&&!e.getAttribute("dhxbox");)e=e.parentNode;e&&(e.parentNode.removeChild(e),i(!1))},dhtmlx.modalbox.focus=function(e){setTimeout(function(){var t=scheduler._getFocusableNodes(e);t.length&&t[0].focus&&t[0].focus(); +},1)};var u=dhtmlx.message=function(e,t,i,r){e=_.apply(this,arguments),e.type=e.type||"info";var a=e.type.split("-")[0];switch(a){case"alert":return d(e);case"confirm":return o(e);case"modalbox":return l(e);default:return s(e)}};u.seed=(new Date).valueOf(),u.uid=function(){return u.seed++},u.expire=4e3,u.keyboard=!0,u.position="top",u.pull={},u.timers={},u.hideAll=function(){for(var e in u.pull)u.hide(e)},u.hide=function(e){var t=u.pull[e];t&&t.parentNode&&(window.setTimeout(function(){t.parentNode.removeChild(t), +t=null},2e3),t.className+=" hidden",u.timers[e]&&window.clearTimeout(u.timers[e]),delete u.pull[e])}}(),dhtmlx.attachEvent||dhtmlxEventable(dhtmlx);var dataProcessor=window.dataProcessor=function(e){return this.serverProcessor=e,this.action_param="!nativeeditor_status",this.object=null,this.updatedRows=[],this.autoUpdate=!0,this.updateMode="cell",this._tMode="GET",this._headers=null,this._payload=null,this.post_delim="_",this._waitMode=0,this._in_progress={},this._invalid={},this.mandatoryFields=[], +this.messages=[],this.styles={updated:"font-weight:bold;",inserted:"font-weight:bold;",deleted:"text-decoration : line-through;",invalid:"background-color:FFE0E0;",invalid_cell:"border-bottom:2px solid red;",error:"color:red;",clear:"font-weight:normal;text-decoration:none;"},this.enableUTFencoding(!0),dhtmlxEventable(this),this};dataProcessor.prototype={setTransactionMode:function(e,t){"object"==typeof e?(this._tMode=e.mode||this._tMode,void 0!==e.headers&&(this._headers=e.headers),void 0!==e.payload&&(this._payload=e.payload)):(this._tMode=e, +this._tSend=t),"REST"==this._tMode&&(this._tSend=!1,this._endnm=!0),"JSON"==this._tMode&&(this._tSend=!1,this._endnm=!0,this._headers=this._headers||{},this._headers["Content-type"]="application/json")},escape:function(e){return this._utf?encodeURIComponent(e):escape(e)},enableUTFencoding:function(e){this._utf=!!e},setDataColumns:function(e){this._columns="string"==typeof e?e.split(","):e},getSyncState:function(){return!this.updatedRows.length},enableDataNames:function(e){this._endnm=!!e},enablePartialDataSend:function(e){ +this._changed=!!e},setUpdateMode:function(e,t){this.autoUpdate="cell"==e,this.updateMode=e,this.dnd=t},ignore:function(e,t){this._silent_mode=!0,e.call(t||window),this._silent_mode=!1},setUpdated:function(e,t,i){if(!this._silent_mode){var r=this.findRow(e);i=i||"updated";var s=this.obj.getUserData(e,this.action_param);s&&"updated"==i&&(i=s),t?(this.set_invalid(e,!1),this.updatedRows[r]=e,this.obj.setUserData(e,this.action_param,i),this._in_progress[e]&&(this._in_progress[e]="wait")):this.is_invalid(e)||(this.updatedRows.splice(r,1), +this.obj.setUserData(e,this.action_param,"")),t||this._clearUpdateFlag(e),this.markRow(e,t,i),t&&this.autoUpdate&&this.sendData(e)}},_clearUpdateFlag:function(e){},markRow:function(e,t,i){var r="",s=this.is_invalid(e);if(s&&(r=this.styles[s],t=!0),this.callEvent("onRowMark",[e,t,i,s])&&(r=this.styles[t?i:"clear"]+r,this.obj[this._methods[0]](e,r),s&&s.details)){r+=this.styles[s+"_cell"];for(var a=0;a","gm"),s=new RegExp(" +","gm"),a=new RegExp("'","gm");scheduler._waiAria={getAttributeString:function(i){var r=[" "];for(var s in i)if("function"!=typeof i[s]&&"object"!=typeof i[s]){var a=t(e(i[s]));r.push(s+"='"+a+"'")}return r.push(" "),r.join(" ")},setAttributes:function(t,i){ +for(var r in i)t.setAttribute(r,e(i[r]));return t},labelAttr:function(e,t){return this.setAttributes(e,{"aria-label":t})},label:function(e){return scheduler._waiAria.getAttributeString({"aria-label":e})},hourScaleAttr:function(e,t){this.labelAttr(e,t)},monthCellAttr:function(e,t){this.labelAttr(e,scheduler.templates.day_date(t))},navBarDateAttr:function(e,t){this.labelAttr(e,t)},dayHeaderAttr:function(e,t){this.labelAttr(e,t)},dayColumnAttr:function(e,t){this.dayHeaderAttr(e,scheduler.templates.day_date(t)); +},headerButtonsAttributes:function(e,t){return this.setAttributes(e,{role:"button","aria-label":t})},headerToggleState:function(e,t){return this.setAttributes(e,{"aria-pressed":t?"true":"false"})},getHeaderCellAttr:function(e){return scheduler._waiAria.getAttributeString({"aria-label":e})},eventAttr:function(e,t){this._eventCommonAttr(e,t)},_eventCommonAttr:function(t,i){i.setAttribute("aria-label",e(scheduler.templates.tooltip_text(t.start_date,t.end_date,t))),scheduler.config.readonly&&i.setAttribute("aria-readonly",!0), +t.$dataprocessor_class&&i.setAttribute("aria-busy",!0),i.setAttribute("aria-selected",scheduler.getState().select_id==t.id?"true":"false")},setEventBarAttr:function(e,t){this._eventCommonAttr(e,t)},_getAttributes:function(e,t){var i={setAttribute:function(e,t){this[e]=t}};return e.apply(this,[t,i]),i},eventBarAttrString:function(e){return this.getAttributeString(this._getAttributes(this.setEventBarAttr,e))},agendaHeadAttrString:function(){return this.getAttributeString({role:"row"})},agendaHeadDateString:function(e){ +return this.getAttributeString({role:"columnheader","aria-label":e})},agendaHeadDescriptionString:function(e){return this.agendaHeadDateString(e)},agendaDataAttrString:function(){return this.getAttributeString({role:"grid"})},agendaEventAttrString:function(e){var t=this._getAttributes(this._eventCommonAttr,e);return t.role="row",this.getAttributeString(t)},agendaDetailsBtnString:function(){return this.getAttributeString({role:"button","aria-label":scheduler.locale.labels.icon_details})},gridAttrString:function(){ +return this.getAttributeString({role:"grid"})},gridRowAttrString:function(e){return this.agendaEventAttrString(e)},gridCellAttrString:function(e,t,i){return this.getAttributeString({role:"gridcell","aria-label":[void 0===t.label?t.id:t.label,": ",i]})},mapAttrString:function(){return this.gridAttrString()},mapRowAttrString:function(e){return this.gridRowAttrString(e)},mapDetailsBtnString:function(){return this.agendaDetailsBtnString()},minicalHeader:function(e,t){this.setAttributes(e,{id:t+"","aria-live":"assertice", +"aria-atomic":"true"})},minicalGrid:function(e,t){this.setAttributes(e,{"aria-labelledby":t+"",role:"grid"})},minicalRow:function(e){this.setAttributes(e,{role:"row"})},minicalDayCell:function(e,t){var i=t.valueOf()=scheduler._min_date.valueOf();this.setAttributes(e,{role:"gridcell","aria-label":scheduler.templates.day_date(t),"aria-selected":i?"true":"false"})},minicalHeadCell:function(e){this.setAttributes(e,{role:"columnheader"})},weekAgendaDayCell:function(e,t){ +var i=e.querySelector(".dhx_wa_scale_bar"),r=e.querySelector(".dhx_wa_day_data"),s=scheduler.uid()+"";this.setAttributes(i,{id:s}),this.setAttributes(r,{"aria-labelledby":s})},weekAgendaEvent:function(e,t){this.eventAttr(t,e)},lightboxHiddenAttr:function(e){e.setAttribute("aria-hidden","true")},lightboxVisibleAttr:function(e){e.setAttribute("aria-hidden","false")},lightboxSectionButtonAttrString:function(e){return this.getAttributeString({role:"button","aria-label":e,tabindex:"0"})},yearHeader:function(e,t){ +this.setAttributes(e,{id:t+""})},yearGrid:function(e,t){this.minicalGrid(e,t)},yearHeadCell:function(e){return this.minicalHeadCell(e)},yearRow:function(e){return this.minicalRow(e)},yearDayCell:function(e){this.setAttributes(e,{role:"gridcell"})},lightboxAttr:function(e){e.setAttribute("role","dialog"),e.setAttribute("aria-hidden","true"),e.firstChild.setAttribute("role","heading")},lightboxButtonAttrString:function(e){return this.getAttributeString({role:"button","aria-label":scheduler.locale.labels[e], +tabindex:"0"})},eventMenuAttrString:function(e){return this.getAttributeString({role:"button","aria-label":scheduler.locale.labels[e]})},lightboxHeader:function(e,t){e.setAttribute("aria-label",t)},lightboxSelectAttrString:function(e){var t="";switch(e){case"%Y":t=scheduler.locale.labels.year;break;case"%m":t=scheduler.locale.labels.month;break;case"%d":t=scheduler.locale.labels.day;break;case"%H:%i":t=scheduler.locale.labels.hour+" "+scheduler.locale.labels.minute}return scheduler._waiAria.getAttributeString({ +"aria-label":t})},messageButtonAttrString:function(e){return"tabindex='0' role='button' aria-label='"+e+"'"},messageInfoAttr:function(e){e.setAttribute("role","alert")},messageModalAttr:function(e,t){e.setAttribute("role","dialog"),t&&e.setAttribute("aria-labelledby",t)},quickInfoAttr:function(e){e.setAttribute("role","dialog")},quickInfoHeaderAttrString:function(){return" role='heading' "},quickInfoHeader:function(e,t){e.setAttribute("aria-label",t)},quickInfoButtonAttrString:function(e){return scheduler._waiAria.getAttributeString({ +role:"button","aria-label":e,tabindex:"0"})},tooltipAttr:function(e){e.setAttribute("role","tooltip")},tooltipVisibleAttr:function(e){e.setAttribute("aria-hidden","false")},tooltipHiddenAttr:function(e){e.setAttribute("aria-hidden","true")}};for(var n in scheduler._waiAria)scheduler._waiAria[n]=function(e){return function(){return i()?" ":e.apply(this,arguments)}}(scheduler._waiAria[n])}(),dhtmlxEventable(scheduler),scheduler._detachDomEvent=function(e,t,i){e.removeEventListener?e.removeEventListener(t,i,!1):e.detachEvent&&e.detachEvent("on"+t,i); +},scheduler._init_once=function(){function e(e){for(var t=document.body;e&&e!=t;)e=e.parentNode;return!(t!=e)}function t(){return{w:window.innerWidth||document.documentElement.clientWidth,h:window.innerHeight||document.documentElement.clientHeight}}function i(e,t){return e.w==t.w&&e.h==t.h}var r=t();dhtmlxEvent(window,"resize",function(){e(scheduler._obj)&&(window.clearTimeout(scheduler._resize_timer),scheduler._resize_timer=window.setTimeout(function(){var s=t();if(!i(r,s)){if(!e(scheduler._obj))return; +scheduler.callEvent("onSchedulerResize",[])&&(scheduler.update_view(),scheduler.callEvent("onAfterSchedulerResize",[]))}r=s},20))}),scheduler._init_once=function(){}},scheduler.init=function(e,t,i){t=t||scheduler._currentDate(),i=i||"week",this._obj&&this.unset_actions(),this._obj="string"==typeof e?document.getElementById(e):e,this.$container=this._obj,this.config.wai_aria_attributes&&this.config.wai_aria_application_role&&this.$container.setAttribute("role","application"),this._skin_init&&scheduler._skin_init(), +scheduler.date.init(),this._els=[],this._scroll=!0,this._quirks=_isIE&&"BackCompat"==document.compatMode,this._quirks7=_isIE&&-1==navigator.appVersion.indexOf("MSIE 8"),this.get_elements(),this.init_templates(),this.set_actions(),this._init_once(),this._init_touch_events(),this.set_sizes(),scheduler.callEvent("onSchedulerReady",[]),this.setCurrentView(t,i)},scheduler.xy={min_event_height:40,scale_width:50,scroll_width:18,scale_height:20,month_scale_height:20,menu_width:25,margin_top:0,margin_left:0, +editor_width:140,month_head_height:22,event_header_height:14},scheduler.keys={edit_save:13,edit_cancel:27},scheduler.set_sizes=function(){var e=this._x=this._obj.clientWidth-this.xy.margin_left,t=this._y=this._obj.clientHeight-this.xy.margin_top,i=this._table_view?0:this.xy.scale_width+this.xy.scroll_width,r=this._table_view?-1:this.xy.scale_width,s=this.$container.querySelector(".dhx_cal_scale_placeholder");scheduler._is_material_skin()?(s||(s=document.createElement("div"),s.className="dhx_cal_scale_placeholder", +this.$container.insertBefore(s,this._els.dhx_cal_header[0])),s.style.display="block",this.set_xy(s,e,this.xy.scale_height+1,0,this.xy.nav_height+(this._quirks?-1:1))):s&&s.parentNode.removeChild(s),this.set_xy(this._els.dhx_cal_navline[0],e,this.xy.nav_height,0,0),this.set_xy(this._els.dhx_cal_header[0],e-i,this.xy.scale_height,r,this.xy.nav_height+(this._quirks?-1:1));var a=this._els.dhx_cal_navline[0].offsetHeight;a>0&&(this.xy.nav_height=a);var n=this.xy.scale_height+this.xy.nav_height+(this._quirks?-2:0); +this.set_xy(this._els.dhx_cal_data[0],e,t-(n+2),0,n+2)},scheduler.set_xy=function(e,t,i,r,s){e.style.width=Math.max(0,t)+"px",e.style.height=Math.max(0,i)+"px",arguments.length>3&&(e.style.left=r+"px",e.style.top=s+"px")},scheduler.get_elements=function(){for(var e=this._obj.getElementsByTagName("DIV"),t=0;t500&&scheduler.unselect()},dhx_cal_prev_button:function(){scheduler._click.dhx_cal_next_button(0,-1)},dhx_cal_next_button:function(e,t){scheduler.setCurrentView(scheduler.date.add(scheduler.date[scheduler._mode+"_start"](scheduler._date),t||1,scheduler._mode)); +},dhx_cal_today_button:function(){scheduler.callEvent("onBeforeTodayDisplayed",[])&&scheduler.setCurrentView(scheduler._currentDate())},dhx_cal_tab:function(){var e=this.getAttribute("name"),t=e.substring(0,e.search("_tab"));scheduler.setCurrentView(scheduler._date,t)},buttons:{"delete":function(e){var t=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(t,scheduler.locale.labels.title_confirm_deleting,function(){scheduler.deleteEvent(e)})},edit:function(e){scheduler.edit(e)},save:function(e){ +scheduler.editStop(!0)},details:function(e){scheduler.showLightbox(e)},cancel:function(e){scheduler.editStop(!1)}}},scheduler._dhtmlx_confirm=function(e,t,i){if(!e)return i();var r={text:e};t&&(r.title=t),i&&(r.callback=function(e){e&&i()}),dhtmlx.confirm(r)},scheduler.addEventNow=function(e,t,i){var r={};scheduler._isObject(e)&&!scheduler._isDate(e)&&(r=e,e=null);var s=6e4*(this.config.event_duration||this.config.time_step);e||(e=r.start_date||Math.round(scheduler._currentDate().valueOf()/s)*s);var a=new Date(e); +if(!t){var n=this.config.first_hour;n>a.getHours()&&(a.setHours(n),e=a.valueOf()),t=e.valueOf()+s}var d=new Date(t);a.valueOf()==d.valueOf()&&d.setTime(d.valueOf()+s),r.start_date=r.start_date||a,r.end_date=r.end_date||d,r.text=r.text||this.locale.labels.new_event,r.id=this._drag_id=r.id||this.uid(),this._drag_mode="new-size",this._loading=!0;var o=this.addEvent(r);return this.callEvent("onEventCreated",[this._drag_id,i]),this._loading=!1,this._drag_event={},this._on_mouse_up(i),o},scheduler._on_dbl_click=function(e,t){ +if(t=t||e.target||e.srcElement,!this.config.readonly){var i=scheduler._getClassName(t).split(" ")[0];switch(i){case"dhx_scale_holder":case"dhx_scale_holder_now":case"dhx_month_body":case"dhx_wa_day_data":if(!scheduler.config.dblclick_create)break;this.addEventNow(this.getActionData(e).date,null,e);break;case"dhx_cal_event":case"dhx_wa_ev_body":case"dhx_agenda_line":case"dhx_grid_event":case"dhx_cal_event_line":case"dhx_cal_event_clear":var r=this._locate_event(t);if(!this.callEvent("onDblClick",[r,e]))return; +this.config.details_on_dblclick||this._table_view||!this.getEvent(r)._timed||!this.config.select?this.showLightbox(r):this.edit(r);break;case"dhx_time_block":case"dhx_cal_container":return;default:var s=this["dblclick_"+i];if(s)s.call(this,e);else if(t.parentNode&&t!=this)return scheduler._on_dbl_click(e,t.parentNode)}}},scheduler._get_column_index=function(e){var t=0;if(this._cols){for(var i=0,r=0;i+this._cols[r]=this._cols.length)for(;t>=1&&this._ignores[Math.floor(t)];)t--}return t},scheduler._week_indexes_from_pos=function(e){if(this._cols){var t=this._get_column_index(e.x);return e.x=Math.min(this._cols.length-1,Math.max(0,Math.ceil(t)-1)),e.y=Math.max(0,Math.ceil(60*e.y/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step),e}return e},scheduler._mouse_coords=function(e){var t,i=document.body,r=document.documentElement;t=_isIE||!e.pageX&&!e.pageY?{ +x:e.clientX+(i.scrollLeft||r.scrollLeft||0)-i.clientLeft,y:e.clientY+(i.scrollTop||r.scrollTop||0)-i.clientTop}:{x:e.pageX,y:e.pageY},t.x-=this.$domHelpers.getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width),t.y-=this.$domHelpers.getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els.dhx_cal_data[0].scrollTop,t.ev=e;var s=this["mouse_"+this._mode];if(s)t=s.call(this,t);else if(this._table_view){var a=this._get_column_index(t.x);if(!this._cols||!this._colsS)return t; +var n=0;for(n=1;nt.y);n++);t.y=Math.ceil(24*(Math.max(0,a)+7*Math.max(0,n-1))*60/this.config.time_step),(scheduler._drag_mode||"month"==this._mode)&&(t.y=24*(Math.max(0,Math.ceil(a)-1)+7*Math.max(0,n-1))*60/this.config.time_step),"move"==this._drag_mode&&scheduler._ignores_detected&&scheduler.config.preserve_length&&(t._ignores=!0,this._drag_event._event_length||(this._drag_event._event_length=this._get_real_event_length(this._drag_event.start_date,this._drag_event.end_date,{ +x_step:1,x_unit:"day"}))),t.x=0}else t=this._week_indexes_from_pos(t);return t.timestamp=+new Date,t},scheduler._close_not_saved=function(){if((new Date).valueOf()-(scheduler._new_event||0)>500&&scheduler._edit_id){var e=scheduler.locale.labels.confirm_closing;scheduler._dhtmlx_confirm(e,scheduler.locale.labels.title_confirm_closing,function(){scheduler.editStop(scheduler.config.positive_closing)}),e&&(this._drag_id=this._drag_pos=this._drag_mode=null)}},scheduler._correct_shift=function(e,t){return e-=6e4*(new Date(scheduler._min_date).getTimezoneOffset()-new Date(e).getTimezoneOffset())*(t?-1:1); +},scheduler._is_pos_changed=function(e,t){function i(e,t,i){return!!(Math.abs(e-t)>i)}if(!e||!this._drag_pos)return!0;var r=100,s=5;return!!(this._drag_pos.has_moved||!this._drag_pos.timestamp||t.timestamp-this._drag_pos.timestamp>r||i(e.ev.clientX,t.ev.clientX,s)||i(e.ev.clientY,t.ev.clientY,s))},scheduler._correct_drag_start_date=function(e){var t;scheduler.matrix&&(t=scheduler.matrix[scheduler._mode]),t=t||{x_step:1,x_unit:"day"},e=new Date(e);var i=1;return(t._start_correction||t._end_correction)&&(i=60*(t.last_hour||0)-(60*e.getHours()+e.getMinutes())||1), +1*e+(scheduler._get_fictional_event_length(e,i,t)-i)},scheduler._correct_drag_end_date=function(e,t){var i;scheduler.matrix&&(i=scheduler.matrix[scheduler._mode]),i=i||{x_step:1,x_unit:"day"};var r=1*e+scheduler._get_fictional_event_length(e,t,i);return new Date(1*r-(scheduler._get_fictional_event_length(r,-1,i,-1)+1))},scheduler._on_mouse_move=function(e){if(this._drag_mode){var t=this._mouse_coords(e);if(this._is_pos_changed(this._drag_pos,t)){var i,r;if(this._edit_id!=this._drag_id&&this._close_not_saved(), +!this._drag_mode)return;var s=null;if(this._drag_pos&&!this._drag_pos.has_moved&&(s=this._drag_pos,s.has_moved=!0),this._drag_pos=t,this._drag_pos.has_moved=!0,"create"==this._drag_mode){if(s&&(t=s),this._close_not_saved(),this.unselect(this._select_id),this._loading=!0,i=this._get_date_from_pos(t).valueOf(),!this._drag_start){var a=this.callEvent("onBeforeEventCreated",[e,this._drag_id]);return a?(this._loading=!1,void(this._drag_start=i)):void(this._loading=!1)}r=i,r==this._drag_start;var n=new Date(this._drag_start),d=new Date(r); +"day"!=this._mode&&"week"!=this._mode||n.getHours()!=d.getHours()||n.getMinutes()!=d.getMinutes()||(d=new Date(this._drag_start+1e3)),this._drag_id=this.uid(),this.addEvent(n,d,this.locale.labels.new_event,this._drag_id,t.fields),this.callEvent("onEventCreated",[this._drag_id,e]),this._loading=!1,this._drag_mode="new-size"}var o,l=this.getEvent(this._drag_id);if(scheduler.matrix&&(o=scheduler.matrix[scheduler._mode]),o=o||{x_step:1,x_unit:"day"},"move"==this._drag_mode)i=this._min_date.valueOf()+6e4*(t.y*this.config.time_step+24*t.x*60-(scheduler._move_pos_shift||0)), +!t.custom&&this._table_view&&(i+=1e3*this.date.time_part(l.start_date)),i=this._correct_shift(i),t._ignores&&this.config.preserve_length&&this._table_view?(i=scheduler._correct_drag_start_date(i),r=scheduler._correct_drag_end_date(i,this._drag_event._event_length)):r=l.end_date.valueOf()-(l.start_date.valueOf()-i);else{if(i=l.start_date.valueOf(),r=l.end_date.valueOf(),this._table_view){var h=this._min_date.valueOf()+t.y*this.config.time_step*6e4+(t.custom?0:864e5);if("month"==this._mode)if(h=this._correct_shift(h,!1), +this._drag_from_start){var _=864e5;h<=scheduler.date.date_part(new Date(r+_-1)).valueOf()&&(i=h-_)}else r=h;else this.config.preserve_length?t.resize_from_start?i=scheduler._correct_drag_start_date(h):r=scheduler._correct_drag_end_date(h,0):t.resize_from_start?i=h:r=h}else{var c=this.date.date_part(new Date(l.end_date.valueOf()-1)).valueOf(),u=new Date(c);r=c+t.y*this.config.time_step*6e4,r+=6e4*(new Date(r).getTimezoneOffset()-u.getTimezoneOffset()),this._els.dhx_cal_data[0].style.cursor="s-resize", +("week"==this._mode||"day"==this._mode)&&(r=this._correct_shift(r))}if("new-size"==this._drag_mode)if(r<=this._drag_start){var g=t.shift||(this._table_view&&!t.custom?864e5:0);i=r-(t.shift?0:g),r=this._drag_start+(g||6e4*this.config.time_step)}else i=this._drag_start;else i>=r&&(r=i+6e4*this.config.time_step)}var f=new Date(r-1),v=new Date(i);if("move"==this._drag_mode&&scheduler.config.limit_drag_out&&(+v<+scheduler._min_date||+r>+scheduler._max_date)){if(+l.start_date<+scheduler._min_date||+l.end_date>+scheduler._max_date)v=new Date(l.start_date), +r=new Date(l.end_date);else{var m=r-v;+v<+scheduler._min_date?(v=new Date(scheduler._min_date),t._ignores&&this.config.preserve_length&&this._table_view?(v=new Date(scheduler._correct_drag_start_date(v)),o._start_correction&&(v=new Date(v.valueOf()+o._start_correction)),r=new Date(1*v+this._get_fictional_event_length(v,this._drag_event._event_length,o))):r=new Date(+v+m)):(r=new Date(scheduler._max_date),t._ignores&&this.config.preserve_length&&this._table_view?(o._end_correction&&(r=new Date(r.valueOf()-o._end_correction)), +r=new Date(1*r-this._get_fictional_event_length(r,0,o,!0)),v=new Date(1*r-this._get_fictional_event_length(r,this._drag_event._event_length,o,!0)),this._ignores_detected&&(v=scheduler.date.add(v,o.x_step,o.x_unit),r=new Date(1*r-this._get_fictional_event_length(r,0,o,!0)),r=scheduler.date.add(r,o.x_step,o.x_unit))):v=new Date(+r-m))}var f=new Date(r-1)}if(!this._table_view&&!scheduler.config.all_timed&&(!scheduler._get_section_view()&&t.x!=this._get_event_sday({start_date:new Date(r),end_date:new Date(r) +})||new Date(r).getHours()>=this.config.last_hour)){var m=r-v,_=this._min_date.valueOf()+24*t.x*60*6e4;r=scheduler.date.date_part(new Date(_)),r.setHours(this.config.last_hour),f=new Date(r-1),"move"==this._drag_mode&&(v=new Date(+r-m))}if(this._table_view||f.getDate()==v.getDate()&&f.getHours()n;n++)this._ignores[n]?(this._cols[n]=0,a++):this._cols[n]=Math.floor(r/(a-n)),r-=this._cols[n],this._colsS[n]=(this._cols[n-1]||0)+(this._colsS[n-1]||(this._table_view?0:this.xy.scale_width+2));this._colsS.col_length=s,this._colsS[s]=this._cols[s-1]+this._colsS[s-1]||0},scheduler._set_scale_col_size=function(e,t,i){var r=this.config;this.set_xy(e,t-1,r.hour_size_px*(r.last_hour-r.first_hour),i+this.xy.scale_width+1,0); +},scheduler._render_scales=function(e,t){var i=new Date(scheduler._min_date),r=new Date(scheduler._max_date),s=this.date.date_part(scheduler._currentDate()),a=parseInt(e.style.width,10),n=new Date(this._min_date),d=this._get_columns_num(i,r);this._calc_scale_sizes(a,i,r);var o=0;e.innerHTML="";for(var l=0;d>l;l++){if(this._ignores[l]||this._render_x_header(l,o,n,e),!this._table_view){var h=document.createElement("div"),_="dhx_scale_holder";n.valueOf()==s.valueOf()&&(_="dhx_scale_holder_now"),this._ignores_detected&&this._ignores[l]&&(_+=" dhx_scale_ignore"), +h.className=_+" "+this.templates.week_date_class(n,s),this._waiAria.dayColumnAttr(h,n),this._set_scale_col_size(h,this._cols[l],o),t.appendChild(h),this.callEvent("onScaleAdd",[h,n])}o+=this._cols[l],n=this.date.add(n,1,"day"),n=this.date.day_start(n)}},scheduler._reset_scale=function(){if(this.templates[this._mode+"_date"]){var e=this._els.dhx_cal_header[0],t=this._els.dhx_cal_data[0],i=this.config;e.innerHTML="",t.innerHTML="";var r=(i.readonly||!i.drag_resize?" dhx_resize_denied":"")+(i.readonly||!i.drag_move?" dhx_move_denied":""); +t.className="dhx_cal_data"+r,this._scales={},this._cols=[],this._colsS={height:0},this._dy_shift=0,this.set_sizes();var s,a,n=this._get_timeunit_start(),d=scheduler._get_view_end();s=a=this._table_view?scheduler.date.week_start(n):n,this._min_date=s;var o=this.templates[this._mode+"_date"](n,d,this._mode);if(this._els.dhx_cal_date[0].innerHTML=o,this._waiAria.navBarDateAttr(this._els.dhx_cal_date[0],o),this._max_date=d,scheduler._render_scales(e,t),this._table_view)this._reset_month_scale(t,n,a);else if(this._reset_hours_scale(t,n,a), +i.multi_day){var l="dhx_multi_day";this._els[l]&&(this._els[l][0].parentNode.removeChild(this._els[l][0]),this._els[l]=null);var h=this._els.dhx_cal_navline[0],_=h.offsetHeight+this._els.dhx_cal_header[0].offsetHeight+1,c=document.createElement("div");c.className=l,c.style.visibility="hidden",this.set_xy(c,Math.max(this._colsS[this._colsS.col_length]+this.xy.scroll_width-2,0),0,0,_),t.parentNode.insertBefore(c,t);var u=c.cloneNode(!0);u.className=l+"_icon",u.style.visibility="hidden",this.set_xy(u,this.xy.scale_width,0,0,_), +c.appendChild(u),this._els[l]=[c,u],this._els[l][0].onclick=this._click.dhx_cal_data}}},scheduler._reset_hours_scale=function(e,t,i){var r=document.createElement("div");r.className="dhx_scale_holder";for(var s=new Date(1980,1,1,this.config.first_hour,0,0),a=1*this.config.first_hour;ad;d++)a(n)&&(this._ignores_detected+=1,this._ignores[d]=!0,s&&t++),n=scheduler.date.add(n,r,i),scheduler.date[i+"_start"]&&(n=scheduler.date[i+"_start"](n))},scheduler._render_month_scale=function(e,t,i,r){function s(e){var t=scheduler._colsS.height;return void 0!==scheduler._colsS.heights[e+1]&&(t=scheduler._colsS.heights[e+1]-(scheduler._colsS.heights[e]||0)),t}var a=scheduler.date.add(t,1,"month"),n=new Date(i),d=scheduler._currentDate(); +this.date.date_part(d),this.date.date_part(i),r=r||Math.ceil(Math.round((a.valueOf()-i.valueOf())/864e5)/7);for(var o=[],l=0;7>=l;l++){var h=(this._cols[l]||0)-1;0===l&&this.config.left_border&&(h-=1),o[l]=h+"px"}var _=0,c=document.createElement("table");c.setAttribute("cellpadding","0"),c.setAttribute("cellspacing","0");var u=document.createElement("tbody");c.appendChild(u);for(var g=[],l=0;r>l;l++){var f=document.createElement("tr");u.appendChild(f);for(var v=Math.max(s(l)-scheduler.xy.month_head_height,0),m=0;7>m;m++){ +var p=document.createElement("td");f.appendChild(p);var x="";t>i?x="dhx_before":i>=a?x="dhx_after":i.valueOf()==d.valueOf()&&(x="dhx_now"),this._ignores_detected&&this._ignores[m]&&(x+=" dhx_scale_ignore"),p.className=x+" "+this.templates.month_date_class(i,d);var b="dhx_month_body",y="dhx_month_head";if(0===m&&this.config.left_border&&(b+=" dhx_month_body_border",y+=" dhx_month_head_border"),this._ignores_detected&&this._ignores[m])p.appendChild(document.createElement("div")),p.appendChild(document.createElement("div"));else{ +this._waiAria.monthCellAttr(p,i);var w=document.createElement("div");w.className=y,w.innerHTML=this.templates.month_day(i),p.appendChild(w);var D=document.createElement("div");D.className=b,D.style.height=v+"px",D.style.width=o[m],p.appendChild(D)}g.push(i);var E=i.getDate();i=this.date.add(i,1,"day"),i.getDate()-E>1&&(i=new Date(i.getFullYear(),i.getMonth(),E+1,12,0))}scheduler._colsS.heights[l]=_,_+=s(l)}this._min_date=n,this._max_date=i,e.innerHTML="",e.appendChild(c),this._scales={};for(var A=e.getElementsByTagName("div"),l=0;ld;){var l=scheduler.date.add(t,-i.x_step,i.x_unit);n&&n(t)&&(!o||o&&n(l))?s-=t-l:(o=!1,s-=a),t=l,r--}return s},scheduler._get_fictional_event_length=function(e,t,i,r){var s=new Date(e),a=r?-1:1;if(i._start_correction||i._end_correction){var n;n=r?60*s.getHours()+s.getMinutes()-60*(i.first_hour||0):60*(i.last_hour||0)-(60*s.getHours()+s.getMinutes());var d=60*(i.last_hour-i.first_hour),o=Math.ceil((t/6e4-n)/d);0>o&&(o=0),t+=o*(1440-d)*60*1e3}var l,h=new Date(1*e+t*a),_=this["ignore_"+this._mode],c=0; +for(i.render?(c=this._get_date_index(i,s),l=this._get_date_index(i,h)):l=Math.round(t/60/60/1e3/24);l*a>=c*a;){var u=scheduler.date.add(s,i.x_step*a,i.x_unit);_&&_(s)&&(t+=(u-s)*a,l+=a),s=u,c+=a}return t},scheduler._get_section_view=function(){return this.matrix&&this.matrix[this._mode]?this.matrix[this._mode]:this._props&&this._props[this._mode]?this._props[this._mode]:null},scheduler._get_section_property=function(){return this.matrix&&this.matrix[this._mode]?this.matrix[this._mode].y_property:this._props&&this._props[this._mode]?this._props[this._mode].map_to:null; +},scheduler._is_initialized=function(){var e=this.getState();return this._obj&&e.date&&e.mode},scheduler._is_lightbox_open=function(){var e=this.getState();return null!==e.lightbox_id&&void 0!==e.lightbox_id},scheduler._getClassName=function(e){if(!e)return"";var t=e.className||"";return t.baseVal&&(t=t.baseVal),t.indexOf||(t=""),t||""},scheduler.$domHelpers={getAbsoluteLeft:function(e){return this.getOffset(e).left},getAbsoluteTop:function(e){return this.getOffset(e).top},getOffsetSum:function(e){ +for(var t=0,i=0;e;)t+=parseInt(e.offsetTop),i+=parseInt(e.offsetLeft),e=e.offsetParent;return{top:t,left:i}},getOffsetRect:function(e){var t=e.getBoundingClientRect(),i=0,r=0;if(/Mobi/.test(navigator.userAgent)){var s=document.createElement("div");s.style.position="absolute",s.style.left="0px",s.style.top="0px",s.style.width="1px",s.style.height="1px",document.body.appendChild(s);var a=s.getBoundingClientRect();i=t.top-a.top,r=t.left-a.left,s.parentNode.removeChild(s)}else{var n=document.body,d=document.documentElement,o=window.pageYOffset||d.scrollTop||n.scrollTop,l=window.pageXOffset||d.scrollLeft||n.scrollLeft,h=d.clientTop||n.clientTop||0,_=d.clientLeft||n.clientLeft||0; +i=t.top+o-h,r=t.left+l-_}return{top:Math.round(i),left:Math.round(r)}},getOffset:function(e){return e.getBoundingClientRect?this.getOffsetRect(e):this.getOffsetSum(e)}},scheduler.$env={isIE:navigator.userAgent.indexOf("MSIE")>=0||navigator.userAgent.indexOf("Trident")>=0,isIE6:!window.XMLHttpRequest&&navigator.userAgent.indexOf("MSIE")>=0,isIE7:navigator.userAgent.indexOf("MSIE 7.0")>=0&&navigator.userAgent.indexOf("Trident")<0,isIE8:navigator.userAgent.indexOf("MSIE 8.0")>=0&&navigator.userAgent.indexOf("Trident")>=0, +isOpera:navigator.userAgent.indexOf("Opera")>=0,isChrome:navigator.userAgent.indexOf("Chrome")>=0,isKHTML:navigator.userAgent.indexOf("Safari")>=0||navigator.userAgent.indexOf("Konqueror")>=0,isFF:navigator.userAgent.indexOf("Firefox")>=0,isIPad:navigator.userAgent.search(/iPad/gi)>=0,isEdge:-1!=navigator.userAgent.indexOf("Edge")},scheduler.$ajax={_obj:scheduler,cache:!0,method:"get",parse:function(e){if("string"!=typeof e)return e;var t;return e=e.replace(/^[\s]+/,""),window.DOMParser&&!scheduler.$env.isIE?t=(new window.DOMParser).parseFromString(e,"text/xml"):window.ActiveXObject!==window.undefined&&(t=new window.ActiveXObject("Microsoft.XMLDOM"), +t.async="false",t.loadXML(e)),t},xmltop:function(e,t,i){if("undefined"==typeof t.status||t.status<400){var r=t.responseXML?t.responseXML||t:this.parse(t.responseText||t);if(r&&null!==r.documentElement&&!r.getElementsByTagName("parsererror").length)return r.getElementsByTagName(e)[0]}return-1!==i&&this._obj.callEvent("onLoadXMLError",["Incorrect XML",arguments[1],i]),document.createElement("DIV")},xpath:function(e,t){if(t.nodeName||(t=t.responseXML||t),scheduler.$env.isIE)return t.selectNodes(e)||[]; +for(var i,r=[],s=(t.ownerDocument||t).evaluate(e,t,null,XPathResult.ANY_TYPE,null);;){if(i=s.iterateNext(),!i)break;r.push(i)}return r},query:function(e){this._call(e.method||"GET",e.url,e.data||"",e.async||!0,e.callback,null,e.headers)},get:function(e,t){this._call("GET",e,null,!0,t)},getSync:function(e){return this._call("GET",e,null,!1)},put:function(e,t,i){this._call("PUT",e,t,!0,i)},del:function(e,t,i){this._call("DELETE",e,t,!0,i)},post:function(e,t,i){1==arguments.length?t="":2!=arguments.length||"function"!=typeof t&&"function"!=typeof window[t]?t=String(t):(i=t, +t=""),this._call("POST",e,t,!0,i)},postSync:function(e,t){return t=null===t?"":String(t),this._call("POST",e,t,!1)},getLong:function(e,t){this._call("GET",e,null,!0,t,{url:e})},postLong:function(e,t,i){2==arguments.length&&(i=t,t=""),this._call("POST",e,t,!0,i,{url:e,postData:t})},_call:function(e,t,i,r,s,a,n){var d=this._obj,o=window.XMLHttpRequest&&!d.$env.isIE?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),l=null!==navigator.userAgent.match(/AppleWebKit/)&&null!==navigator.userAgent.match(/Qt/)&&null!==navigator.userAgent.match(/Safari/); +if(r&&(o.onreadystatechange=function(){if(4==o.readyState||l&&3==o.readyState){if((200!=o.status||""===o.responseText)&&!d.callEvent("onAjaxError",[o]))return;window.setTimeout(function(){"function"==typeof s&&s.apply(window,[{xmlDoc:o,filePath:t}]),a&&("undefined"!=typeof a.postData?this.postLong(a.url,a.postData,s):this.getLong(a.url,s)),s=null,o=null},1)}}),"GET"!=e||this.cache||(t+=(t.indexOf("?")>=0?"&":"?")+"dhxr"+(new Date).getTime()+"=1"),o.open(e,t,r),n)for(var h in n)o.setRequestHeader(h,n[h]);else"POST"==e.toUpperCase()||"PUT"==e||"DELETE"==e?o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"):"GET"==e&&(i=null); +return o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.send(i),r?void 0:{xmlDoc:o,filePath:t}},urlSeparator:function(e){return-1!=e.indexOf("?")?"&":"?"}},scheduler.date={init:function(){for(var e=scheduler.locale.date.month_short,t=scheduler.locale.date.month_short_hash={},i=0;i0){var r=+i-+e,s=r%864e5;if(s&&e.getTimezoneOffset()==i.getTimezoneOffset()){var a=s/36e5;i.setTime(i.getTime()+60*(24-a)*60*1e3)}}return t>=0&&!e.getHours()&&i.getHours()&&(i.getDate()e?"0"+e:e},copy:function(e){return new Date(e.valueOf())},date_to_str:function(e,t){return e=e.replace(/%[a-zA-Z]/g,function(e){ +switch(e){case"%d":return'"+scheduler.date.to_fixed(date.getDate())+"';case"%m":return'"+scheduler.date.to_fixed((date.getMonth()+1))+"';case"%j":return'"+date.getDate()+"';case"%n":return'"+(date.getMonth()+1)+"';case"%y":return'"+scheduler.date.to_fixed(date.getFullYear()%100)+"';case"%Y":return'"+date.getFullYear()+"';case"%D":return'"+scheduler.locale.date.day_short[date.getDay()]+"';case"%l":return'"+scheduler.locale.date.day_full[date.getDay()]+"';case"%M":return'"+scheduler.locale.date.month_short[date.getMonth()]+"'; +case"%F":return'"+scheduler.locale.date.month_full[date.getMonth()]+"';case"%h":return'"+scheduler.date.to_fixed((date.getHours()+11)%12+1)+"';case"%g":return'"+((date.getHours()+11)%12+1)+"';case"%G":return'"+date.getHours()+"';case"%H":return'"+scheduler.date.to_fixed(date.getHours())+"';case"%i":return'"+scheduler.date.to_fixed(date.getMinutes())+"';case"%a":return'"+(date.getHours()>11?"pm":"am")+"';case"%A":return'"+(date.getHours()>11?"PM":"AM")+"';case"%s":return'"+scheduler.date.to_fixed(date.getSeconds())+"'; +case"%W":return'"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+"';default:return e}}),t&&(e=e.replace(/date\.get/g,"date.getUTC")),new Function("date",'return "'+e+'";')},str_to_date:function(e,t){for(var i="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",r=e.match(/%[a-zA-Z]/g),s=0;s50?1900:2000);";break;case"%g": +case"%G":case"%h":case"%H":i+="set[3]=temp["+s+"]||0;";break;case"%i":i+="set[4]=temp["+s+"]||0;";break;case"%Y":i+="set[0]=temp["+s+"]||0;";break;case"%a":case"%A":i+="set[3]=set[3]%12+((temp["+s+"]||'').toLowerCase()=='am'?0:12);";break;case"%s":i+="set[5]=temp["+s+"]||0;";break;case"%M":i+="set[1]=scheduler.locale.date.month_short_hash[temp["+s+"]]||0;";break;case"%F":i+="set[1]=scheduler.locale.date.month_full_hash[temp["+s+"]]||0;"}var a="set[0],set[1],set[2],set[3],set[4],set[5]";return t&&(a=" Date.UTC("+a+")"), +new Function("date","var set=[0,0,1,0,0,0]; "+i+" return new Date("+a+");")},getISOWeek:function(e){if(!e)return!1;e=this.date_part(new Date(e));var t=e.getDay();0===t&&(t=7);var i=new Date(e.valueOf());i.setDate(e.getDate()+(4-t));var r=i.getFullYear(),s=Math.round((i.getTime()-new Date(r,0,1).getTime())/864e5),a=1+Math.floor(s/7);return a},getUTCISOWeek:function(e){return this.getISOWeek(this.convert_to_utc(e))},convert_to_utc:function(e){return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()); +}},scheduler.locale={date:{month_full:["January","February","March","April","May","June","July","August","September","October","November","December"],month_short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],day_full:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],day_short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},labels:{dhx_cal_today_button:"Today",day_tab:"Day",week_tab:"Week",month_tab:"Month",new_event:"New event",icon_save:"Save",icon_cancel:"Cancel", +icon_details:"Details",icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Event will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",full_day:"Full day",confirm_recurring:"Do you want to edit the whole set of repeated events?",section_recurring:"Repeat event",button_recurring:"Disabled",button_recurring_open:"Enabled",button_edit_series:"Edit series",button_edit_occurrence:"Edit occurrence",agenda_tab:"Agenda",date:"Date", +description:"Description",year_tab:"Year",week_agenda_tab:"Agenda",grid_tab:"Grid",drag_to_create:"Drag to create",drag_to_move:"Drag to move",message_ok:"OK",message_cancel:"Cancel",next:"Next",prev:"Previous",year:"Year",month:"Month",day:"Day",hour:"Hour",minute:"Minute"}},scheduler.config={default_date:"%j %M %Y",month_date:"%F %Y",load_date:"%Y-%m-%d",week_date:"%l",day_date:"%D, %F %j",hour_date:"%H:%i",month_day:"%d",xml_date:"%m/%d/%Y %H:%i",api_date:"%d-%m-%Y %H:%i",preserve_length:!0,time_step:5, +start_on_monday:1,first_hour:0,last_hour:24,readonly:!1,drag_resize:1,drag_move:1,drag_create:1,dblclick_create:1,edit_on_create:1,details_on_create:0,resize_month_events:!1,resize_month_timed:!1,cascade_event_display:!1,cascade_event_count:4,cascade_event_margin:30,multi_day:!0,multi_day_height_limit:0,drag_lightbox:!0,preserve_scroll:!0,select:!0,server_utc:!1,touch:!0,touch_tip:!0,touch_drag:500,quick_info_detached:!0,positive_closing:!1,drag_highlight:!0,limit_drag_out:!1,icons_edit:["icon_save","icon_cancel"], +icons_select:["icon_details","icon_edit","icon_delete"],buttons_left:["dhx_save_btn","dhx_cancel_btn"],buttons_right:["dhx_delete_btn"],lightbox:{sections:[{name:"description",map_to:"text",type:"textarea",focus:!0},{name:"time",height:72,type:"time",map_to:"auto"}]},highlight_displayed_event:!0,left_border:!1,ajax_error:"alert",delay_render:0,timeline_swap_resize:!0,wai_aria_attributes:!0,wai_aria_application_role:!0},scheduler.config.buttons_left.$inital=scheduler.config.buttons_left.join(),scheduler.config.buttons_right.$inital=scheduler.config.buttons_right.join(), +scheduler.templates={},scheduler.init_templates=function(){var e=scheduler.locale.labels;e.dhx_save_btn=e.icon_save,e.dhx_cancel_btn=e.icon_cancel,e.dhx_delete_btn=e.icon_delete;var t=scheduler.date.date_to_str,i=scheduler.config,r=function(e,t){for(var i in t)e[i]||(e[i]=t[i])};r(scheduler.templates,{day_date:t(i.default_date),month_date:t(i.month_date),week_date:function(e,t){return scheduler.templates.day_date(e)+" – "+scheduler.templates.day_date(scheduler.date.add(t,-1,"day"))},day_scale_date:t(i.default_date), +month_scale_date:t(i.week_date),week_scale_date:t(i.day_date),hour_scale:t(i.hour_date),time_picker:t(i.hour_date),event_date:t(i.hour_date),month_day:t(i.month_day),xml_date:scheduler.date.str_to_date(i.xml_date,i.server_utc),load_format:t(i.load_date),xml_format:t(i.xml_date,i.server_utc),api_date:scheduler.date.str_to_date(i.api_date),event_header:function(e,t,i){return scheduler.templates.event_date(e)+" - "+scheduler.templates.event_date(t)},event_text:function(e,t,i){return i.text},event_class:function(e,t,i){ +return""},month_date_class:function(e){return""},week_date_class:function(e){return""},event_bar_date:function(e,t,i){return scheduler.templates.event_date(e)+" "},event_bar_text:function(e,t,i){return i.text},month_events_link:function(e,t){return"View more("+t+" events)"},drag_marker_class:function(e,t,i){return""},drag_marker_content:function(e,t,i){return""},tooltip_date_format:scheduler.date.date_to_str("%Y-%m-%d %H:%i"),tooltip_text:function(e,t,i){return"Event: "+i.text+"
Start date: "+scheduler.templates.tooltip_date_format(e)+"
End date: "+scheduler.templates.tooltip_date_format(t); +}}),this.callEvent("onTemplatesReady",[])},scheduler.uid=function(){return this._seed||(this._seed=(new Date).valueOf()),this._seed++},scheduler._events={},scheduler.clearAll=function(){this._events={},this._loaded={},this._edit_id=null,this._select_id=null,this._drag_id=null,this._drag_mode=null,this._drag_pos=null,this.clear_view(),this.callEvent("onClearAll",[])},scheduler.addEvent=function(e,t,i,r,s){if(!arguments.length)return this.addEventNow();var a=e;1!=arguments.length&&(a=s||{},a.start_date=e, +a.end_date=t,a.text=i,a.id=r),a.id=a.id||scheduler.uid(),a.text=a.text||"","string"==typeof a.start_date&&(a.start_date=this.templates.api_date(a.start_date)),"string"==typeof a.end_date&&(a.end_date=this.templates.api_date(a.end_date));var n=6e4*(this.config.event_duration||this.config.time_step);a.start_date.valueOf()==a.end_date.valueOf()&&a.end_date.setTime(a.end_date.valueOf()+n),a._timed=this.isOneDayEvent(a);var d=!this._events[a.id];return this._events[a.id]=a,this.event_updated(a),this._loading||this.callEvent(d?"onEventAdded":"onEventChanged",[a.id,a]), +a.id},scheduler.deleteEvent=function(e,t){var i=this._events[e];(t||this.callEvent("onBeforeEventDelete",[e,i])&&this.callEvent("onConfirmedBeforeEventDelete",[e,i]))&&(i&&(this._select_id=null,delete this._events[e],this.event_updated(i),this._drag_id==i.id&&(this._drag_id=null,this._drag_mode=null,this._drag_pos=null)),this.callEvent("onEventDeleted",[e,i]))},scheduler.getEvent=function(e){return this._events[e]},scheduler.setEvent=function(e,t){t.id||(t.id=e),this._events[e]=t},scheduler.for_rendered=function(e,t){ +for(var i=this._rendered.length-1;i>=0;i--)this._rendered[i].getAttribute("event_id")==e&&t(this._rendered[i],i)},scheduler.changeEventId=function(e,t){if(e!=t){var i=this._events[e];i&&(i.id=t,this._events[t]=i,delete this._events[e]),this.for_rendered(e,function(e){e.setAttribute("event_id",t)}),this._select_id==e&&(this._select_id=t),this._edit_id==e&&(this._edit_id=t),this.callEvent("onEventIdChange",[e,t])}},function(){for(var e=["text","Text","start_date","StartDate","end_date","EndDate"],t=function(e){ +return function(t){return scheduler.getEvent(t)[e]}},i=function(e){return function(t,i){var r=scheduler.getEvent(t);r[e]=i,r._changed=!0,r._timed=this.isOneDayEvent(r),scheduler.event_updated(r,!0)}},r=0;rs||a>r)&&(i>=s||a>i));if(n)return!0;var d=(e.end_date.valueOf()-e.start_date.valueOf())/36e5,o=24-(this.config.last_hour-this.config.first_hour);return!!(d>o||s>i&&r>=a)}return!1},scheduler.isOneDayEvent=function(e){var t=e.end_date.getDate()-e.start_date.getDate();return t?(0>t&&(t=Math.ceil((e.end_date.valueOf()-e.start_date.valueOf())/864e5)), +1==t&&!e.end_date.getHours()&&!e.end_date.getMinutes()&&(e.start_date.getHours()||e.start_date.getMinutes())):e.start_date.getMonth()==e.end_date.getMonth()&&e.start_date.getFullYear()==e.end_date.getFullYear()},scheduler.get_visible_events=function(e){var t=[];for(var i in this._events)this.is_visible_events(this._events[i])&&(!e||this._events[i]._timed)&&this.filter_event(i,this._events[i])&&t.push(this._events[i]);return t},scheduler.filter_event=function(e,t){var i=this["filter_"+this._mode];return i?i(e,t):!0; +},scheduler._is_main_area_event=function(e){return!!e._timed},scheduler.render_view_data=function(e,t){var i=!1;if(!e){if(i=!0,this._not_render)return void(this._render_wait=!0);this._render_wait=!1,this.clear_view(),e=this.get_visible_events(!(this._table_view||this.config.multi_day))}for(var r=0,s=e.length;s>r;r++)this._recalculate_timed(e[r]);if(this.config.multi_day&&!this._table_view){for(var a=[],n=[],r=0;rl){var h=l;1*this.config.max_month_events!==this.config.max_month_events||s[d]<=this.config.max_month_events?h=s[d]*i:(this.config.max_month_events+1)*i>l&&(h=(this.config.max_month_events+1)*i);for(var _=0;_t.id?1:-1:e.start_date>t.start_date?1:-1});var i=[],r=[];this._min_mapped_duration=Math.ceil(60*this.xy.min_event_height/this.config.hour_size_px); +for(var s=0;sp&&(p=h[f]._sorder);a._sorder=p+1,a._inner=!1}else a._sorder=0;h.splice(u,u==h.length?0:1,a),h.length>(h.max_count||0)?(h.max_count=h.length, +a._count=h.length):a._count=a._count?a._count:1}(o=this.config.last_hour)&&(r.push(a),e[s]=a=this._copy_event(a),o=this.config.last_hour&&(a.end_date.setMinutes(0),a.end_date.setHours(this.config.last_hour)),a.start_date>a.end_date||o==this.config.last_hour)&&(e.splice(s,1),s--)}}if(!t){for(var s=0;st.id?1:-1:e.start_date>t.start_date?1:-1})},scheduler._pre_render_events_table=function(e,t){this._time_order(e);for(var i,r=[],s=[[],[],[],[],[],[],[]],a=this._colsS.heights,n=this._cols.length,d={},o=0;othis._max_date&&(_.last_chunk=!1,u=this._max_date);var g=this.locate_holder_day(c,!1,l);if(l._sday=g%n,!this._ignores[l._sday]||!l._timed){var f=this.locate_holder_day(u,!0,l)||n;l._eday=f%n||n,l._length=f-g,l._sweek=Math.floor((this._correct_shift(c.valueOf(),1)-this._min_date.valueOf())/(864e5*n));var v,m=s[l._sweek];for(v=0;v",this._quirks7&&(v.firstChild.style.height=n-12+"px"),this._editor=v.firstChild, +this._editor.onkeydown=function(e){if((e||event).shiftKey)return!0;var t=(e||event).keyCode;t==scheduler.keys.edit_save&&scheduler.editStop(!0),t==scheduler.keys.edit_cancel&&scheduler.editStop(!1),(t==scheduler.keys.edit_save||t==scheduler.keys.edit_cancel)&&e.preventDefault&&e.preventDefault()},this._editor.onselectstart=function(e){return(e||event).cancelBubble=!0,!0},scheduler._focus(v.firstChild,!0),this._els.dhx_cal_data[0].scrollLeft=0}if(0!==this.xy.menu_width&&this._select_id==e.id){this.config.cascade_event_display&&this._drag_mode&&(g.style.zIndex=1); +for(var m,p=this.config["icons_"+(this._edit_id==e.id?"edit":"select")],x="",b=e.color?"background-color: "+e.color+";":"",y=e.textColor?"color: "+e.textColor+";":"",w=0;w
";var D=this._render_v_bar(e,h-t+1,a,t,20*p.length+26-2,"","
",x,!0);D.style.left=h-t+1,this._els.dhx_cal_data[0].appendChild(D), +this._rendered.push(D)}this.config.drag_highlight&&this._drag_id==e.id&&this.highlightEventPosition(e)}}},scheduler._render_v_bar=function(e,t,i,r,s,a,n,d,o){var l=document.createElement("div"),h=e.id,_=o?"dhx_cal_event dhx_cal_select_menu":"dhx_cal_event",c=scheduler.getState();c.drag_id==e.id&&(_+=" dhx_cal_event_drag"),c.select_id==e.id&&(_+=" dhx_cal_event_selected");var u=scheduler.templates.event_class(e.start_date,e.end_date,e);u&&(_=_+" "+u),this.config.cascade_event_display&&(_+=" dhx_cal_event_cascade"); +var g=e.color?"background-color:"+e.color+";":"",f=e.textColor?"color:"+e.textColor+";":"",v=scheduler._border_box_bvents(),m=r-2,p=v?m:r-4,x=v?m:r-6,b=v?m:r-(this._quirks?4:14),y=v?m-2:r-8,w=v?s-this.xy.event_header_height-1:s-(this._quirks?20:30)+1,D='
';l.innerHTML=D;var E=l.cloneNode(!0).firstChild;if(!o&&scheduler.renderEvent(E,e,r,s,n,d))return E;E=l.firstChild; +var A='
 
';A+='
'+n+"
",A+='
'+d+"
";var k="dhx_event_resize dhx_footer";return o&&(k="dhx_resize_denied "+k),A+='
',E.innerHTML=A,E},scheduler.renderEvent=function(){return!1},scheduler.locate_holder=function(e){ +return"day"==this._mode?this._els.dhx_cal_data[0].firstChild:this._els.dhx_cal_data[0].childNodes[e]},scheduler.locate_holder_day=function(e,t){var i=Math.floor((this._correct_shift(e,1)-this._min_date)/864e5);return t&&this.date.time_part(e)&&i++,i},scheduler._get_dnd_order=function(e,t,i){if(!this._drag_event)return e;this._drag_event._orig_sorder?e=this._drag_event._orig_sorder:this._drag_event._orig_sorder=e;for(var r=t*e;r+t>i;)e--,r-=t;return e=Math.max(e,0)},scheduler._get_event_bar_pos=function(e){ +var t=this._colsS[e._sday],i=this._colsS[e._eday];i==t&&(i=this._colsS[e._eday+1]);var r=this.xy.bar_height,s=e._sorder;if(e.id==this._drag_id){var a=this._colsS.heights[e._sweek+1]-this._colsS.heights[e._sweek]-this.xy.month_head_height;s=scheduler._get_dnd_order(s,r,a)}var n=s*r,d=this._colsS.heights[e._sweek]+(this._colsS.height?this.xy.month_scale_height+2:2)+n;return{x:t,x2:i,y:d}},scheduler.render_event_bar=function(e){var t=this._rendered_location,i=this._get_event_bar_pos(e),r=i.y,s=i.x,a=i.x2,n=""; +if(a){var d=scheduler.config.resize_month_events&&"month"==this._mode&&(!e._timed||scheduler.config.resize_month_timed),o=document.createElement("div"),l=e.hasOwnProperty("_first_chunk")&&e._first_chunk,h=e.hasOwnProperty("_last_chunk")&&e._last_chunk,_=d&&(e._timed||l),c=d&&(e._timed||h),u="dhx_cal_event_clear";(!e._timed||d)&&(u="dhx_cal_event_line"),l&&(u+=" dhx_cal_event_line_start"),h&&(u+=" dhx_cal_event_line_end"),_&&(n+="
"),c&&(n+="
"); +var g=scheduler.templates.event_class(e.start_date,e.end_date,e);g&&(u+=" "+g);var f=e.color?"background:"+e.color+";":"",v=e.textColor?"color:"+e.textColor+";":"",m=["position:absolute","top:"+r+"px","left:"+s+"px","width:"+(a-s-15)+"px",v,f,e._text_style||""].join(";"),p="
";d&&(p+=n),"month"==scheduler.getState().mode&&(e=scheduler.getEvent(e.id)),e._timed&&(p+=scheduler.templates.event_bar_date(e.start_date,e.end_date,e)), +p+=scheduler.templates.event_bar_text(e.start_date,e.end_date,e)+"
",p+="",o.innerHTML=p,this._rendered.push(o.firstChild),t.appendChild(o.firstChild)}},scheduler._locate_event=function(e){for(var t=null;e&&!t&&e.getAttribute;)t=e.getAttribute("event_id"),e=e.parentNode;return t},scheduler._locate_css=function(e,t,i){void 0===i&&(i=!0);for(var r=e.target||e.srcElement,s="";r;){if(s=scheduler._getClassName(r)){var a=s.indexOf(t);if(a>=0){if(!i)return r;var n=0===a||!scheduler._trim(s.charAt(a-1)),d=a+t.length>=s.length||!scheduler._trim(s.charAt(a+t.length)); +if(n&&d)return r}}r=r.parentNode}return null},scheduler.edit=function(e){this._edit_id!=e&&(this.editStop(!1,e),this._edit_id=e,this.updateEvent(e))},scheduler.editStop=function(e,t){if(!t||this._edit_id!=t){var i=this.getEvent(this._edit_id);i&&(e&&(i.text=this._editor.value),this._edit_id=null,this._editor=null,this.updateEvent(i.id),this._edit_stop_event(i,e))}},scheduler._edit_stop_event=function(e,t){this._new_event?(t?this.callEvent("onEventAdded",[e.id,e]):e&&this.deleteEvent(e.id,!0),this._new_event=null):t&&this.callEvent("onEventChanged",[e.id,e]); +},scheduler.getEvents=function(e,t){var i=[];for(var r in this._events){var s=this._events[r];s&&(!e&&!t||s.start_datee)&&i.push(s)}return i},scheduler.getRenderedEvent=function(e){if(e){for(var t=scheduler._rendered,i=0;ithis._min_date;)t=this.date.add(t,-1,this._load_mode);i=t;for(var s=!0;it&&this._loaded[r(a)]);if(t>=i)return!1;for(scheduler.$ajax.get(e+"&from="+r(t)+"&to="+r(i),function(e){scheduler.on_load(e)});i>t;)this._loaded[r(t)]=!0,t=this.date.add(t,1,this._load_mode)}else scheduler.$ajax.get(e,function(e){scheduler.on_load(e)});return this.callEvent("onXLS",[]),!0}},scheduler.on_load=function(e){var t,i=!1;if(this._process&&"xml"!=this._process)try{t=this[this._process].parse(e.xmlDoc.responseText)}catch(r){i=!0; +}else t=this._magic_parser(e),t||(i=!0);(i||e.xmlDoc.status&&e.xmlDoc.status>=400)&&(this.callEvent("onLoadError",[e.xmlDoc]),t=[]),scheduler._process_loading(t),this.callEvent("onXLE",[])},scheduler._process_loading=function(e){this._loading=!0,this._not_render=!0;for(var t=0;t"},set_value:function(e,t,i,r){e.innerHTML=t||""},get_value:function(e,t,i){return e.innerHTML||""},focus:function(e){}},textarea:{render:function(e){var t=scheduler._lightbox_controls.defaults.textarea,i=t?t.height:200,r=(e.height||i||"130")+"px";return"
"; +},set_value:function(e,t,i){scheduler.form_blocks.textarea._get_input(e).value=t||""},get_value:function(e,t){return scheduler.form_blocks.textarea._get_input(e).value},focus:function(e){var t=scheduler.form_blocks.textarea._get_input(e);scheduler._focus(t,!0)},_get_input:function(e){return e.getElementsByTagName("textarea")[0]}},select:{render:function(e){for(var t=scheduler._lightbox_controls.defaults.select,i=t?t.height:23,r=(e.height||i||"23")+"px",s="
"},set_value:function(e,t,i,r){var s=e.firstChild;!s._dhx_onchange&&r.onchange&&(s.onchange=r.onchange,s._dhx_onchange=!0),"undefined"==typeof t&&(t=(s.options[0]||{}).value),s.value=t||""},get_value:function(e,t){return e.firstChild.value},focus:function(e){var t=e.firstChild;scheduler._focus(t,!0)}},time:{render:function(e){e.time_format||(e.time_format=["%H:%i","%d","%m","%Y"]),e._time_format_order={};var t=e.time_format,i=scheduler.config,r=scheduler.date.date_part(scheduler._currentDate()),s=1440,a=0; +scheduler.config.limit_time_select&&(s=60*i.last_hour+1,a=60*i.first_hour,r.setHours(i.first_hour));for(var n="",d=0;d0&&(n+=" ");var l="",h="";switch(o){case"%Y":l="dhx_lightbox_year_select",e._time_format_order[3]=d;for(var _=r.getFullYear()-5,c=0;10>c;c++)h+="";break;case"%m":l="dhx_lightbox_month_select",e._time_format_order[2]=d;for(var c=0;12>c;c++)h+="";break; +case"%d":l="dhx_lightbox_day_select",e._time_format_order[1]=d;for(var c=1;32>c;c++)h+="";break;case"%H:%i":l="dhx_lightbox_time_select",e._time_format_order[0]=d;var c=a,u=r.getDate();for(e._time_values=[];s>c;){var g=this.templates.time_picker(r);h+="",e._time_values.push(c),r.setTime(r.valueOf()+60*this.config.time_step*1e3);var f=r.getDate()!=u?1:0;c=24*f*60+60*r.getHours()+r.getMinutes()}}if(h){var v=scheduler._waiAria.lightboxSelectAttrString(o),m=e.readonly?"disabled='disabled'":""; +n+=" "}}var p=scheduler._lightbox_controls.defaults.select,x=p?p.height:23,b=x||30;return"
"+n+"  –  "+n+"
"},set_value:function(e,t,i,r){function s(e,t,i){for(var s=r._time_values,a=60*i.getHours()+i.getMinutes(),n=a,d=!1,o=0;oh&&(n=h)}e[t+l[0]].value=d?a:n, +d||n||(e[t+l[0]].selectedIndex=-1),e[t+l[1]].value=i.getDate(),e[t+l[2]].value=i.getMonth(),e[t+l[3]].value=i.getFullYear()}var a,n,d=scheduler.config,o=e.getElementsByTagName("select"),l=r._time_format_order;if(d.full_day){if(!e._full_day){var h="";scheduler.config.wide_form||(h=e.previousSibling.innerHTML+h),e.previousSibling.innerHTML=h,e._full_day=!0}var _=e.previousSibling.getElementsByTagName("input")[0]; +_.checked=0===scheduler.date.time_part(i.start_date)&&0===scheduler.date.time_part(i.end_date),o[l[0]].disabled=_.checked,o[l[0]+o.length/2].disabled=_.checked,_.onclick=function(){if(_.checked){var t={};scheduler.form_blocks.time.get_value(e,t,r),a=scheduler.date.date_part(t.start_date),n=scheduler.date.date_part(t.end_date),(+n==+a||+n>=+a&&(0!==i.end_date.getHours()||0!==i.end_date.getMinutes()))&&(n=scheduler.date.add(n,1,"day"))}else a=null,n=null;o[l[0]].disabled=_.checked,o[l[0]+o.length/2].disabled=_.checked, +s(o,0,a||i.start_date),s(o,4,n||i.end_date)}}if(d.auto_end_date&&d.event_duration)for(var c=function(){a=new Date(o[l[3]].value,o[l[2]].value,o[l[1]].value,0,o[l[0]].value),n=new Date(a.getTime()+60*scheduler.config.event_duration*1e3),s(o,4,n)},u=0;4>u;u++)o[u].onchange=c;s(o,0,i.start_date),s(o,4,i.end_date)},get_value:function(e,t,i){var r=e.getElementsByTagName("select"),s=i._time_format_order;if(t.start_date=new Date(r[s[3]].value,r[s[2]].value,r[s[1]].value,0,r[s[0]].value),t.end_date=new Date(r[s[3]+4].value,r[s[2]+4].value,r[s[1]+4].value,0,r[s[0]+4].value), +!r[s[3]].value||!r[s[3]+4].value){var a=scheduler.getEvent(scheduler._lightbox_id);a&&(t.start_date=a.start_date,t.end_date=a.end_date)}return t.end_date<=t.start_date&&(t.end_date=scheduler.date.add(t.start_date,scheduler.config.time_step,"minute")),{start_date:new Date(t.start_date),end_date:new Date(t.end_date)}},focus:function(e){scheduler._focus(e.getElementsByTagName("select")[0])}}},scheduler.showCover=function(e){if(e){e.style.display="block";var t=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop,i=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft,r=window.innerHeight||document.documentElement.clientHeight; +t?e.style.top=Math.round(t+Math.max((r-e.offsetHeight)/2,0))+"px":e.style.top=Math.round(Math.max((r-e.offsetHeight)/2,0)+9)+"px",document.documentElement.scrollWidth>document.body.offsetWidth?e.style.left=Math.round(i+(document.body.offsetWidth-e.offsetWidth)/2)+"px":e.style.left=Math.round((document.body.offsetWidth-e.offsetWidth)/2)+"px"}this.show_cover()},scheduler.showLightbox=function(e){if(e){if(!this.callEvent("onBeforeLightbox",[e]))return void(this._new_event&&(this._new_event=null));var t=this.getLightbox(); +this.showCover(t),this._fill_lightbox(e,t),this._waiAria.lightboxVisibleAttr(t),this.callEvent("onLightbox",[e])}},scheduler._fill_lightbox=function(e,t){var i=this.getEvent(e),r=t.getElementsByTagName("span"),s=[];if(scheduler.templates.lightbox_header){s.push("");var a=scheduler.templates.lightbox_header(i.start_date,i.end_date,i);s.push(a),r[1].innerHTML="",r[2].innerHTML=a}else{var n=this.templates.event_header(i.start_date,i.end_date,i),d=(this.templates.event_bar_text(i.start_date,i.end_date,i)||"").substr(0,70); +s.push(n),s.push(d),r[1].innerHTML=n,r[2].innerHTML=d}this._waiAria.lightboxHeader(t,s.join(" "));for(var o=this.config.lightbox.sections,l=0;l-1)||(t=t.querySelector("[dhx_button]"))){var i=scheduler._getClassName(t);if(t&&i)switch(i){case"dhx_save_btn":scheduler.save_lightbox();break;case"dhx_delete_btn":var r=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(r,scheduler.locale.labels.title_confirm_deleting,function(){ +scheduler.deleteEvent(scheduler._lightbox_id),scheduler._new_event=null,scheduler.hide_lightbox()});break;case"dhx_cancel_btn":scheduler.cancel_lightbox();break;default:if(t.getAttribute("dhx_button"))scheduler.callEvent("onLightboxButton",[i,t,e]);else{var s,a,n;-1!=i.indexOf("dhx_custom_button")&&(-1!=i.indexOf("dhx_custom_button_")?(s=t.parentNode.getAttribute("index"),n=t.parentNode.parentNode):(s=t.getAttribute("index"),n=t.parentNode,t=t.firstChild)),s&&(a=scheduler.form_blocks[scheduler.config.lightbox.sections[s].type], +a.button_click(s,t,n,n.nextSibling))}}}},this.getLightbox().onkeydown=function(e){var t=e||window.event,i=e.target||e.srcElement,r=i.querySelector("[dhx_button]");switch(r||(r=i.parentNode.querySelector(".dhx_custom_button, .dhx_readonly")),(e||t).keyCode){case 32:if((e||t).shiftKey)return;r&&r.click&&r.click();break;case scheduler.keys.edit_save:if((e||t).shiftKey)return;r&&r.click?r.click():scheduler.save_lightbox();break;case scheduler.keys.edit_cancel:scheduler.cancel_lightbox()}}},scheduler.setLightboxSize=function(){ +var e=this._lightbox;if(e){var t=e.childNodes[1];t.style.height="0px",t.style.height=t.scrollHeight+"px",e.style.height=t.scrollHeight+scheduler.xy.lightbox_additional_height+"px",t.style.height=t.scrollHeight+"px"}},scheduler._init_dnd_events=function(){dhtmlxEvent(document.body,"mousemove",scheduler._move_while_dnd),dhtmlxEvent(document.body,"mouseup",scheduler._finish_dnd),scheduler._init_dnd_events=function(){}},scheduler._move_while_dnd=function(e){if(scheduler._dnd_start_lb){document.dhx_unselectable||(document.body.className+=" dhx_unselectable", +document.dhx_unselectable=!0);var t=scheduler.getLightbox(),i=e&&e.target?[e.pageX,e.pageY]:[event.clientX,event.clientY];t.style.top=scheduler._lb_start[1]+i[1]-scheduler._dnd_start_lb[1]+"px",t.style.left=scheduler._lb_start[0]+i[0]-scheduler._dnd_start_lb[0]+"px"}},scheduler._ready_to_dnd=function(e){var t=scheduler.getLightbox();scheduler._lb_start=[parseInt(t.style.left,10),parseInt(t.style.top,10)],scheduler._dnd_start_lb=e&&e.target?[e.pageX,e.pageY]:[event.clientX,event.clientY]},scheduler._finish_dnd=function(){ +scheduler._lb_start&&(scheduler._lb_start=scheduler._dnd_start_lb=!1,document.body.className=document.body.className.replace(" dhx_unselectable",""),document.dhx_unselectable=!1)},scheduler.getLightbox=function(){if(!this._lightbox){var e=document.createElement("div");e.className="dhx_cal_light",scheduler.config.wide_form&&(e.className+=" dhx_cal_light_wide"),scheduler.form_blocks.recurring&&(e.className+=" dhx_cal_light_rec"),/msie|MSIE 6/.test(navigator.userAgent)&&(e.className+=" dhx_ie6"),e.style.visibility="hidden"; +for(var t=this._lightbox_template,i=this.config.buttons_left,r="",s=0;s
"+scheduler.locale.labels[i[s]]+"
";i=this.config.buttons_right;for(var s=0;s
"+scheduler.locale.labels[i[s]]+"
"; +t+="",e.innerHTML=t,scheduler.config.drag_lightbox&&(e.firstChild.onmousedown=scheduler._ready_to_dnd,e.firstChild.onselectstart=function(){return!1},e.firstChild.style.cursor="move",scheduler._init_dnd_events()),this._waiAria.lightboxAttr(e),document.body.insertBefore(e,document.body.firstChild),this._lightbox=e;var a=this.config.lightbox.sections;t="";for(var s=0;s
"+this.locale.labels["button_"+a[s].button]+"
"}this.config.wide_form&&(t+="
");var o=this.locale.labels["section_"+a[s].name];"string"!=typeof o&&(o=a[s].name),t+="
"+d+"
"+n.render.call(this,a[s]),t+="
"}}for(var l=e.getElementsByTagName("div"),s=0;s 
", +scheduler._init_touch_events=function(){var e=this.config.touch&&(-1!=navigator.userAgent.indexOf("Mobile")||-1!=navigator.userAgent.indexOf("iPad")||-1!=navigator.userAgent.indexOf("Android")||-1!=navigator.userAgent.indexOf("Touch"));if(e&&(this.xy.scroll_width=0,this._mobile=!0),this.config.touch){var t=!0;try{document.createEvent("TouchEvent")}catch(i){t=!1}t?this._touch_events(["touchmove","touchstart","touchend"],function(e){return e.touches&&e.touches.length>1?null:e.touches[0]?{target:e.target, +pageX:e.touches[0].pageX,pageY:e.touches[0].pageY,clientX:e.touches[0].clientX,clientY:e.touches[0].clientY}:e},function(){return!1}):window.PointerEvent||window.navigator.pointerEnabled?this._touch_events(["pointermove","pointerdown","pointerup"],function(e){return"mouse"==e.pointerType?null:e},function(e){return!e||"mouse"==e.pointerType}):window.navigator.msPointerEnabled&&this._touch_events(["MSPointerMove","MSPointerDown","MSPointerUp"],function(e){return e.pointerType==e.MSPOINTER_TYPE_MOUSE?null:e; +},function(e){return!e||e.pointerType==e.MSPOINTER_TYPE_MOUSE})}},scheduler._touch_events=function(e,t,i){function r(e,t,r){e.addEventListener(t,function(e){if(scheduler._is_lightbox_open())return!0;if(!i(e))return r(e)},{passive:!1})}function s(e,t,i,r){if(!e||!t)return!1;for(var s=e.target;s&&s!=scheduler._obj;)s=s.parentNode;if(s!=scheduler._obj)return!1;var a=Math.abs(e.pageY-t.pageY),n=Math.abs(e.pageX-t.pageX);return r>a&&n>i&&(!a||n/a>3)?(e.pageX>t.pageX?scheduler._click.dhx_cal_next_button():scheduler._click.dhx_cal_prev_button(), +!0):!1}function a(e){if(!i(e)){var t=scheduler.getState().drag_mode,r=scheduler.matrix?scheduler.matrix[scheduler._mode]:!1,s=scheduler.render_view_data;return"create"==t&&r&&(scheduler.render_view_data=function(){for(var e=scheduler.getState().drag_id,t=scheduler.getEvent(e),i=r.y_property,s=scheduler.getEvents(t.start_date,t.end_date),a=0;a5||Math.abs(d.pageY-o.pageY)>5)&&(_=!0,clearTimeout(l))):void(_=!0)}}}),r(this._els.dhx_cal_data[0],"scroll",n),r(this._els.dhx_cal_data[0],"touchcancel",n),r(this._els.dhx_cal_data[0],"contextmenu",function(e){return i(e)?void 0:c?(e&&e.preventDefault&&e.preventDefault(),(e||event).cancelBubble=!0, +!1):void 0}),r(this._obj,e[1],function(e){if(!i(e)){scheduler._pointerDragId=e.pointerId;var r;if(h=_=!1,c=!0,r=o=t(e),!r)return void(_=!0);var s=new Date;if(!_&&!h&&250>s-u)return scheduler._click.dhx_cal_data(r),window.setTimeout(function(){r.type="dblclick",scheduler._on_dbl_click(r)},50),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,scheduler._block_next_stop=!0,!1;if(u=s,!_&&!h&&scheduler.config.touch_drag){var a=scheduler._locate_event(document.activeElement),n=scheduler._locate_event(r.target),g=d?scheduler._locate_event(d.target):null; +if(a&&n&&a==n&&a!=g)return e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,scheduler._ignore_next_click=!1,scheduler._click.dhx_cal_data(r),d=r,!1;l=setTimeout(function(){h=!0;var e=d.target,t=scheduler._getClassName(e);e&&-1!=t.indexOf("dhx_body")&&(e=e.previousSibling),scheduler._on_mouse_down(d,e),scheduler._drag_mode&&"create"!=scheduler._drag_mode&&scheduler.for_rendered(scheduler._drag_id,function(e,t){e.style.display="none",scheduler._rendered.splice(t,1)}),scheduler.config.touch_tip&&scheduler._show_global_tip(), +scheduler.updateEvent(scheduler._drag_id)},scheduler.config.touch_drag),d=r}}}),r(this._els.dhx_cal_data[0],e[2],function(e){return i(e)?void 0:(!h&&s(d,o,200,100)&&(scheduler._block_next_stop=!0),h&&(scheduler._ignore_next_click=!0,setTimeout(function(){scheduler._ignore_next_click=!1},100)),n(e),scheduler._block_next_stop?(scheduler._block_next_stop=!1,e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,!1):void 0)}),dhtmlxEvent(document.body,e[2],n)},scheduler._show_global_tip=function(){scheduler._hide_global_tip(); +var e=scheduler._global_tip=document.createElement("div");e.className="dhx_global_tip",scheduler._update_global_tip(1),document.body.appendChild(e)},scheduler._update_global_tip=function(e){var t=scheduler._global_tip;if(t){var i="";if(scheduler._drag_id&&!e){var r=scheduler.getEvent(scheduler._drag_id);r&&(i="
"+(r._timed?scheduler.templates.event_header(r.start_date,r.end_date,r):scheduler.templates.day_date(r.start_date,r.end_date,r))+"
")}"create"==scheduler._drag_mode||"new-size"==scheduler._drag_mode?t.innerHTML=(scheduler.locale.labels.drag_to_create||"Drag to create")+i:t.innerHTML=(scheduler.locale.labels.drag_to_move||"Drag to move")+i; +}},scheduler._hide_global_tip=function(){var e=scheduler._global_tip;e&&e.parentNode&&(e.parentNode.removeChild(e),scheduler._global_tip=0)},scheduler._dp_init=function(e){e._methods=["_set_event_text_style","","_dp_change_event_id","_dp_hook_delete"],this._dp_change_event_id=function(e,t){scheduler.getEvent(e)&&scheduler.changeEventId(e,t)},this._dp_hook_delete=function(t,i){return scheduler.getEvent(t)?(t!=i&&("true_deleted"==this.getUserData(t,e.action_param)&&this.setUserData(t,e.action_param,"updated"), +this.changeEventId(t,i)),this.deleteEvent(i,!0)):void 0},this.attachEvent("onEventAdded",function(t){!this._loading&&this._validId(t)&&e.setUpdated(t,!0,"inserted")}),this.attachEvent("onConfirmedBeforeEventDelete",function(t){if(this._validId(t)){var i=e.getState(t);return"inserted"==i||this._new_event?(e.setUpdated(t,!1),!0):"deleted"==i?!1:"true_deleted"==i?!0:(e.setUpdated(t,!0,"deleted"),!1)}}),this.attachEvent("onEventChanged",function(t){!this._loading&&this._validId(t)&&e.setUpdated(t,!0,"updated"); +}),scheduler.attachEvent("onClearAll",function(){e._in_progress={},e._invalid={},e.updatedRows=[],e._waitMode=0}),e._objToJson=function(t,i,r){r=r||"",i=i||{};for(var s in t)0!==s.indexOf("_")&&(t[s]&&t[s].getUTCFullYear?i[r+s]=this.obj.templates.xml_format(t[s]):t[s]&&"object"==typeof t[s]?e._objToJson(t[s],i,r+s+"."):i[r+s]=t[s]);return i},e._getRowData=function(e,t){var i=this.obj.getEvent(e);return this._objToJson(i)},e._clearUpdateFlag=function(){},e.attachEvent("insertCallback",scheduler._update_callback), +e.attachEvent("updateCallback",scheduler._update_callback),e.attachEvent("deleteCallback",function(e,t){this.obj.getEvent(t)?(this.obj.setUserData(t,this.action_param,"true_deleted"),this.obj.deleteEvent(t)):this.obj._add_rec_marker&&this.obj._update_callback(e,t)})},scheduler._validId=function(e){return!0},scheduler.setUserData=function(e,t,i){if(e){var r=this.getEvent(e);r&&(r[t]=i)}else this._userdata[t]=i},scheduler.getUserData=function(e,t){if(e){var i=this.getEvent(e);return i?i[t]:null}return this._userdata[t]; +},scheduler._set_event_text_style=function(e,t){if(scheduler.getEvent(e)){this.for_rendered(e,function(e){e.style.cssText+=";"+t});var i=this.getEvent(e);i._text_style=t,this.event_updated(i)}},scheduler._update_callback=function(e,t){var i=scheduler._xmlNodeToJSON(e.firstChild);"none"==i.rec_type&&(i.rec_pattern="none"),i.text=i.text||i._tagvalue,i.start_date=scheduler.templates.xml_date(i.start_date),i.end_date=scheduler.templates.xml_date(i.end_date),scheduler.addEvent(i),scheduler._add_rec_marker&&scheduler.setCurrentView(); +},scheduler._skin_settings={fix_tab_position:[1,0],use_select_menu_space:[1,0],wide_form:[1,0],hour_size_px:[44,42],displayed_event_color:["#ff4a4a","ffc5ab"],displayed_event_text_color:["#ffef80","7e2727"]},scheduler._skin_xy={lightbox_additional_height:[90,50],nav_height:[59,22],bar_height:[24,20]},scheduler._is_material_skin=function(){return(scheduler.skin+"").indexOf("material")>-1},scheduler._border_box_bvents=function(){return scheduler._is_material_skin()},scheduler._configure=function(e,t,i){ +for(var r in t)"undefined"==typeof e[r]&&(e[r]=t[r][i])},scheduler._skin_init=function(){if(!scheduler.skin)for(var e=document.getElementsByTagName("link"),t=0;tt?"0"+t:t;var i=""+e.getHours()+" "+t+"";return i}),!r){var d=scheduler.config.minicalendar;d&&(d.padding=14),scheduler.templates.event_bar_date=function(e,t,i){return"• "+scheduler.templates.event_date(e)+" "},scheduler.attachEvent("onTemplatesReady",function(){var e=scheduler.date.date_to_str("%d"); +scheduler.templates._old_month_day||(scheduler.templates._old_month_day=scheduler.templates.month_day);var t=scheduler.templates._old_month_day;if(scheduler.templates.month_day=function(i){if("month"==this._mode){var r=e(i);return 1==i.getDate()&&(r=scheduler.locale.date.month_full[i.getMonth()]+" "+r),+i==+scheduler.date.date_part(this._currentDate())&&(r=scheduler.locale.labels.dhx_cal_today_button+" "+r),r}return t.call(this,i)},scheduler.config.fix_tab_position){var i=scheduler._els.dhx_cal_navline[0].getElementsByTagName("div"),r=null,s=211,a=[14,75,136],n=14; +scheduler._is_material_skin()&&(a=[16,103,192],s=294,n=-1);for(var d=0;d
 
 
', +this.className+=" dhx_cal_container"),scheduler.init(this,scheduler.config.date,scheduler.config.mode),i.data&&scheduler.parse(i.data),r.push(scheduler)}}),1===r.length?r[0]:r}return t[i]?t[i].apply(this,[]):void e.error("Method "+i+" does not exist on jQuery.dhx_scheduler")}}(jQuery),function(){function e(e,t,i){t&&(e._date=t),i&&(e._mode=i)}var t=scheduler.setCurrentView,i=scheduler.updateView,r=null,s=null,a=function(t,a){var n=this;window.clearTimeout(s),window.clearTimeout(r);var d=n._date,o=n._mode; +e(this,t,a),s=setTimeout(function(){return n.callEvent("onBeforeViewChange",[o,d,a||n._mode,t||n._date])?(i.call(n,t,a),n.callEvent("onViewChange",[n._mode,n._date]),window.clearTimeout(r),void(s=0)):void e(n,d,o)},scheduler.config.delay_render)},n=function(t,a){var n=this,d=arguments;e(this,t,a),window.clearTimeout(r),r=setTimeout(function(){s||i.apply(n,d)},scheduler.config.delay_render)};scheduler.attachEvent("onSchedulerReady",function(){scheduler.config.delay_render?(scheduler.setCurrentView=a, +scheduler.updateView=n):(scheduler.setCurrentView=t,scheduler.updateView=i)})}(); +//# sourceMappingURL=sources/dhtmlxscheduler.js.map \ No newline at end of file diff --git a/js/popup.js b/js/popup.js index d081fd17..9b0b5f5e 100644 --- a/js/popup.js +++ b/js/popup.js @@ -112,6 +112,9 @@ $(document).ready(function() { $("#open").click(function(){ chrome.tabs.create({ 'url': "options.html"}); }); + $("#calendar").click(function() { + chrome.tabs.create({ 'url': "calendar.html"}); + }); }); /* convert from the dtarr and maek the time lines*/ diff --git a/manifest.json b/manifest.json index 2eb28b1b..218bea40 100644 --- a/manifest.json +++ b/manifest.json @@ -16,6 +16,7 @@ "js": ["js/moment.min.js","js/sql-memory-growth.js","js/highcharts.js","js/jquery-3.3.1.min.js","js/content.js"], "matches": ["https://utdirect.utexas.edu/apps/registrar/course_schedule/*"] }], + "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", "web_accessible_resources": [ "grades.db","images/disticon.png"], "background": { diff --git a/popup.html b/popup.html index 8474c537..73840378 100644 --- a/popup.html +++ b/popup.html @@ -10,6 +10,7 @@ +
    From a1f80f1749216bf084ea056d30bc5512f13116f2 Mon Sep 17 00:00:00 2001 From: Kevin Dao Date: Fri, 10 Aug 2018 11:09:48 -0500 Subject: [PATCH 2/6] Removed dhtmlxscheduler implementation --- calendar.html | 22 +- css/dhtmlxscheduler.css | 9 - css/imgs_dhx_terrace/arrow_left.png | Bin 187 -> 0 bytes css/imgs_dhx_terrace/arrow_right.png | Bin 131 -> 0 bytes css/imgs_dhx_terrace/but_repeat.gif | Bin 422 -> 0 bytes css/imgs_dhx_terrace/calendar.gif | Bin 244 -> 0 bytes css/imgs_dhx_terrace/clock_big.gif | Bin 1958 -> 0 bytes css/imgs_dhx_terrace/clock_small.gif | Bin 588 -> 0 bytes css/imgs_dhx_terrace/close_icon.png | Bin 162 -> 0 bytes css/imgs_dhx_terrace/collapse_expand_icon.gif | Bin 1192 -> 0 bytes css/imgs_dhx_terrace/controls.png | Bin 761 -> 0 bytes css/imgs_dhx_terrace/databg.png | Bin 156 -> 0 bytes css/imgs_dhx_terrace/databg_now.png | Bin 103 -> 0 bytes css/imgs_dhx_terrace/export_ical.png | Bin 1793 -> 0 bytes css/imgs_dhx_terrace/export_pdf.png | Bin 1667 -> 0 bytes css/imgs_dhx_terrace/resize_dots.png | Bin 110 -> 0 bytes css/imgs_dhx_terrace/resizing.png | Bin 99 -> 0 bytes js/dhtmlxscheduler.js | 277 ------------------ 18 files changed, 2 insertions(+), 306 deletions(-) delete mode 100755 css/dhtmlxscheduler.css delete mode 100755 css/imgs_dhx_terrace/arrow_left.png delete mode 100755 css/imgs_dhx_terrace/arrow_right.png delete mode 100755 css/imgs_dhx_terrace/but_repeat.gif delete mode 100755 css/imgs_dhx_terrace/calendar.gif delete mode 100755 css/imgs_dhx_terrace/clock_big.gif delete mode 100755 css/imgs_dhx_terrace/clock_small.gif delete mode 100755 css/imgs_dhx_terrace/close_icon.png delete mode 100755 css/imgs_dhx_terrace/collapse_expand_icon.gif delete mode 100755 css/imgs_dhx_terrace/controls.png delete mode 100755 css/imgs_dhx_terrace/databg.png delete mode 100755 css/imgs_dhx_terrace/databg_now.png delete mode 100755 css/imgs_dhx_terrace/export_ical.png delete mode 100755 css/imgs_dhx_terrace/export_pdf.png delete mode 100755 css/imgs_dhx_terrace/resize_dots.png delete mode 100755 css/imgs_dhx_terrace/resizing.png delete mode 100755 js/dhtmlxscheduler.js diff --git a/calendar.html b/calendar.html index e7b6f22d..2cf3e7cb 100644 --- a/calendar.html +++ b/calendar.html @@ -1,26 +1,8 @@ - - - - + -
    -
    -
    -
    -
    -
    -
    + - - diff --git a/css/dhtmlxscheduler.css b/css/dhtmlxscheduler.css deleted file mode 100755 index 76957414..00000000 --- a/css/dhtmlxscheduler.css +++ /dev/null @@ -1,9 +0,0 @@ -/* -@license -dhtmlxScheduler v.5.0.0 Stardard - -This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. - -(c) Dinamenta, UAB. -*/ -.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:11}.dhtmlx-info{min-width:120px;font-family:Tahoma;z-index:14;overflow:hidden;margin:5px 5px 10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.dhtmlx-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.dhtmlx_modal_box{overflow:hidden;display:inline-block;position:fixed;min-width:300px;width:330px;text-align:center;background:#fff;box-shadow:0 0 14px #888;border:1px solid #fff;z-index:18;border-radius:6px;font-family:Tahoma,san-serif}.dhtmlx_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%)}.dhtmlx-info,.dhtmlx_button,.dhtmlx_popup_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.dhtmlx_popup_text{overflow:hidden}.dhtmlx_popup_controls{border-radius:6px;padding:5px 5px 9px}.dhtmlx_button,.dhtmlx_popup_button{height:30px;line-height:28px;display:inline-block;margin:0 5px;border-radius:6px;color:#fff;border:1px solid #838383;box-shadow:none}.dhtmlx_popup_button{min-width:120px;background:#fff}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #fff;background:#fff;border-radius:6px;font-size:15px;-moz-box-sizing:content-box;box-sizing:content-box;text-shadow:none;color:#444;font-weight:400;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px}.dhtmlx_popup_button.dhtmlx_ok_button div{background:#22a1bc;border:1px solid #22a1bc;color:#fff;text-shadow:0 -1px 0 #6f6f6f;outline:0}.dhtmlx_popup_button.dhtmlx_ok_button{border:1px solid #22a1bc;background-color:#22a1bc;outline:0}.dhtmlx_button input:active,.dhtmlx_button input:focus,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:#fff;color:#444;box-shadow:none;outline:0}.dhtmlx_popup_button.dhtmlx_cancel_button div:active{background-color:transparent;border-color:transparent;outline:0}div.dhx_modal_cover{background-color:#000;cursor:default;opacity:.2;position:fixed;z-index:17;left:0;top:0;width:100%;height:100%;border:none;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC)}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_popup_title{color:#fff;text-shadow:1px 1px #000;height:40px;line-height:40px;font-size:20px}.dhtmlx-error,.dhtmlx-info{font-size:14px;color:#000;box-shadow:0 0 10px #888;padding:0;background-color:#fff;border-radius:3px;border:1px solid #fff}.dhtmlx-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #b8b8b8}.dhtmlx_message_area .dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000}.dhtmlx_message_area .dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.dhtmlx_modal_box.dhtmlx-error .dhtmlx_popup_title{background:#d81b1b;border:1px solid #ff3c3c;color:#FFF}.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title{background-color:#1796b0;border:1px solid transparent;color:#fff;overflow:hidden;width:100%}.dhx_move_denid .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default}.dhx_cal_event .dhx_header{height:1px;margin:0 0 0 1px;border-width:1px 1px 0;cursor:pointer}.dhx_cal_event .dhx_title{height:12px;border-width:1px 1px 0;border-bottom-style:dotted;border-radius:4px 4px 0 0;font-size:12px;line-height:12px;font-weight:700;text-align:center;background-position:right;background-repeat:no-repeat;padding:1px 0 0;cursor:pointer}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px;padding:5px 5px 8px;border-radius:0 0 4px 4px;font-weight:400;line-height:normal}.dhx_cal_event.dhx_cal_select_menu{-webkit-box-shadow:0 0 1px #fff;-moz-box-shadow:0 0 1px #fff;box-shadow:0 0 1px #fff}.dhx_resize_denied,.dhx_resize_denied .dhx_event_resize{cursor:default!important}.dhx_cal_event .dhx_event_resize{cursor:s-resize;cursor:ns-resize}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:5px;margin:-6px 0 0 2px;border-width:0;position:relative;top:auto;background:url(imgs_dhx_terrace/resizing.png) center center no-repeat #1796b0}.dhx_cal_event .dhx_resize_denied.dhx_event_resize.dhx_footer{height:0}.dhx_cal_event_line{background-color:#1796b0;border:1px solid transparent;border-radius:2px;font-family:Arial,san-serif;font-size:12px;font-weight:400;line-height:17px;height:17px;padding:0 0 0 10px;color:#fff;cursor:pointer;overflow:hidden}.dhx_cal_event_line_start{border-top-left-radius:9px;border-bottom-left-radius:9px}.dhx_cal_event_line_end{border-top-right-radius:9px;border-bottom-right-radius:9px}.dhx_cal_event_clear{height:13px;padding:0 0 0 2px;color:#0e64a0;font-family:Tahoma,san-serif;font-size:8pt;line-height:normal;white-space:nowrap;overflow:hidden;cursor:pointer;background-color:transparent;font-weight:400}.dhx_cal_event.dhx_cal_editor{z-index:10;position:absolute;overflow:hidden}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid #000;padding:0;margin:0;overflow:auto;font-family:Arial,san-serif;font-size:12px}div.dhx_menu_head{background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default}div.dhx_menu_icon{width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer}div.icon_details{background-position:0 0}div.icon_edit{background-position:-22px 0}div.icon_save{background-position:-84px -1px}div.icon_cancel{background-position:-62px 0}div.icon_delete{background-position:-42px 0}.dhx_month_link{position:absolute;box-sizing:border-box;-moz-box-sizing:border-box;text-align:right;cursor:pointer;padding-right:10px;font-size:8pt;font-family:Tahoma,san-serif}.dhx_month_link a{color:#00f}.dhx_month_link a:hover{text-decoration:underline;color:#0000b3}.dhx_global_tip{font-family:Tahoma,Helvetica;text-align:center;font-size:20px;position:fixed;top:60px;right:20px;background-color:rgba(255,255,255,.7);color:#000;z-index:14;padding:20px 30px;width:190px}.dhx_global_tip div{font-size:30px}@media (-moz-touch-enabled){.dhx_cal_container{user-select:none;-moz-user-select:none}}.dhx_unselectable,.dhx_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_light{-webkit-tap-highlight-color:transparent;background-color:#fff;border-radius:5px;color:#2e2e2e;font-family:Tahoma,san-serif;font-size:8pt;box-shadow:5px 5px 5px #888;position:absolute;z-index:15;width:580px}.dhx_cal_ltitle{padding:2px 0 2px 5px;height:30px;line-height:30px;border-bottom:1px solid #cecece;background:0 0;margin:0;border-radius:0;overflow:hidden;white-space:nowrap}.dhx_cal_ltext.dhx_cal_template{position:relative}.dhx_cal_ltitle span{white-space:nowrap}.dhx_time{font-weight:700;padding:0 0 0 10px;font-size:8pt;display:inline-block;margin:0}.dhx_mark{position:relative;top:3px;background-image:url(imgs/controls.gif);background-position:0 -43px;padding-left:10px}.dhx_ie6 .dhx_mark{background-position:6px -41px}.dhx_cal_light select{font-family:Tahoma,san-serif;font-size:8pt;color:#2e2e2e;padding:2px;margin:0}.dhx_cal_light .dhx_title{padding:0 0 0 13px;font-size:8pt;text-transform:none;color:inherit;display:inline-block;margin:0}.dhx_cal_larea{background-color:#fff;overflow:hidden}.dhx_cal_light_wide .dhx_cal_larea{border-top-width:0;margin:0 0 0 3px}.dhx_cal_light_wide .dhx_wrap_section{border-top:0;border-bottom:1px solid #cecece;position:relative;background-color:#fff;overflow:hidden;padding:5px 0;margin:0}.dhx_cal_lsection{background-color:#fff;font-weight:700;font-family:Arial,san-serif;font-size:18px;padding:5px 0 5px 10px}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:82px;width:100px;min-height:20px;line-height:normal;height:auto;font-size:13px;padding:5px 0 0 10px;margin:0}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;font-family:Arial,san-serif;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection .dhx_fullday input[type=checkbox]{margin:3px 3px 3px 4px}.dhx_cal_ltext{overflow:hidden;float:left;float:none;width:auto;height:auto;padding:2px 0 2px 10px}.dhx_readonly{height:15px}.dhx_cal_ltext textarea{background-color:#f9f9f9;overflow:auto;color:#2e2e2e;height:100%;width:100%;outline:0!important;resize:none;border:1px solid #cecece;line-height:20px;font-family:inherit;padding:2px}.dhx_section_time{white-space:nowrap}.dhx_cal_light_wide .dhx_section_time{padding:2px 0 0!important;height:20px!important}.dhx_section_time{text-align:center}.dhx_cal_light_wide .dhx_section_time{background:0 0}.dhx_btn_set{padding:0;margin:12px 0 0 20px;font-size:12px;font-weight:700;border-radius:3px;text-transform:none}.dhx_right_btn_set{margin-right:20px}.dhx_btn_set div{float:left;height:30px;line-height:30px;padding:0 20px;vertical-align:middle;cursor:pointer}.dhx_btn_set,.dhx_cancel_btn_set{border:1px solid #cecece;background-color:transparent;color:#454544;float:right;float:left}.dhx_save_btn{background-image:url(imgs/controls.gif);background-position:-84px 0;width:21px}.dhx_cancel_btn{background-image:url(imgs/controls.gif);background-position:-63px 0;width:20px}.dhx_delete_btn{background-image:url(imgs/controls.gif);background-position:-42px 0;width:20px}.dhx_delete_btn_set{border:1px solid #ff8831;background-color:#ff8831;color:#fff;text-shadow:0 -1px 0 #93755f;margin:12px 20px 0}.dhx_save_btn_set{border:1px solid #cecece;color:#fff;text-shadow:0 -1px 0 #6f6f6f;background-color:#22a1bc}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:14;top:0;left:0;background-color:#000;opacity:.1}.dhx_custom_button{padding:0 3px;font-family:Arial,san-serif;font-size:8pt;font-weight:400;margin-right:5px;margin-top:0;cursor:pointer}.dhx_custom_button div{cursor:pointer;float:left;height:21px;line-height:21px;vertical-align:middle}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin:0;font-weight:700;font-size:13px;cursor:pointer}.dhx_cal_light_wide .dhx_cal_larea{width:730px}.dhx_cal_light_wide{width:738px}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_wrap_section .dhx_cal_wide_checkbox input[type=checkbox]{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-family:Tahoma,san-serif;font-size:8pt;color:#747473}#input_1518604462804{margin:0 0 0 11px;border-bottom:0}.dhx_custom_button{float:right;height:21px}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0;margin-top:6px}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_minical_popup{position:absolute;z-index:16;width:251px;height:175px}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #a39588;width:100%}.dhx_expand_icon{position:absolute;right:0;background-image:url(imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:4}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(imgs/databg.png)}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(imgs/databg.png)}.dhx_agenda_line{height:21px;clear:both;overflow:hidden}.dhx_agenda_line div{float:left;width:188px;text-align:center;line-height:21px;overflow:hidden}.dhx_cal_header div.dhx_agenda_line div,.dhx_cal_header div.dhx_agenda_line span,.dhx_cal_header div.dhx_map_line{font-weight:400;color:#747473}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #000}.dhx_v_border{position:absolute;left:187px;top:0;width:1px;height:100%}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) 5px 4px no-repeat;cursor:pointer}.dhx_agenda_line span{padding-left:5px;line-height:21px}.dhx_year_week{position:relative}.dhx_year_month{height:18px;padding-top:3px;text-align:center;vertical-align:middle}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head a,.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head a{color:#e2e3e6}.dhx_year_body .dhx_month_body{height:0;overflow:hidden}.dhx_month_head.dhx_year_event{background-color:#ffe763;color:''}.dhx_year_body .dhx_after .dhx_month_head,.dhx_year_body .dhx_before .dhx_month_head{cursor:default}.dhx_year_tooltip{border:1px solid #BBB;background-image:url(imgs/databg.png);position:absolute;z-index:12;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(imgs/icon.png) 5px 4px no-repeat;cursor:pointer}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center}.dhx_text_disabled{font-family:Tahoma,san-serif;font-size:8pt}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.dhx_mini_calendar .dhx_month_head{cursor:pointer}.dhx_mini_calendar .dhx_calendar_click{background-color:#c2d5fc}.dhx_cal_navline div.dhx_minical_icon{cursor:pointer;background:url(imgs_dhx_terrace/calendar.gif) no-repeat}.dhx_matrix_scell{height:100%;font-family:Tahoma,san-serif;font-size:8pt;color:inherit;font-weight:500}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle;border-bottom:1px solid #cecece;border-right:1px solid #cecece}.dhx_matrix_cell{background-color:#fff}.dhx_matrix_line{overflow:hidden}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;cursor:ew-resize;background:url(imgs_dhx_terrace/resize_dots.png) repeat-y;position:absolute;top:0;width:4px;height:100%}.dhx_event_resize_start{left:0}.dhx_event_resize_end{right:0}.dhx_data_table.folder .dhx_matrix_cell,.dhx_matrix_scell.folder{background-color:#969394;cursor:pointer}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px}.dhx_matrix_scell .dhx_scell_level2{padding-left:35px}.dhx_matrix_scell .dhx_scell_level3{padding-left:50px}.dhx_matrix_scell .dhx_scell_level4{padding-left:65px}.dhx_matrix_scell.folder{border-right:0;font-weight:700;text-align:left}.dhx_matrix_scell.folder .dhx_scell_expand{float:left;width:10px;padding-right:3px;position:relative}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto;color:inherit;text-transform:none;font-weight:inherit}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left}.dhx_data_table.folder .dhx_matrix_cell{border-right:0}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px}.dhx_section_timeline select{width:552px}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(imgs/databg.png)}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(imgs/icon.png) 5px 4px no-repeat;cursor:pointer}.dhx_map_line{height:21px;clear:both;overflow:hidden}.dhx_map{position:absolute}.dhx_map_line .headline_description,.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden}.dhx_map_line.highlight{background-color:#C4C5CC}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5);background-color:#fff;cursor:default;padding:10px;position:fixed;z-index:9;opacity:1;font-family:Arial,san-serif}.dhx_cal_checkbox label{padding-left:5px}.dhx_cal_light .radio{padding:2px 0 2px 10px}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px}.dhx_cal_light .combo{padding:4px}.dhx_cal_light_wide .combo>div,.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px}.dhx_wa_column{float:left}.dhx_wa_scale_bar{font-family:Tahoma,san-serif;padding-left:10px;font-size:11px}.dhx_wa_day_data{background-color:#FCFEFC;overflow-y:auto}.dhx_wa_ev_body{font-size:12px;padding:5px 0 5px 7px}.dhx_wa_dnd{font-family:Tahoma,san-serif;position:absolute;padding-right:7px;color:#887AE2!important;background-color:#FFE763!important}.dhx_second_scale_bar{padding-top:2px}.dhx_cal_header div.dhx_grid_line div{border-left:1px solid #cecece}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed}.dhx_grid_area td{table-layout:fixed;text-align:center}.dhx_grid_line{height:21px;clear:both;overflow:hidden}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4}.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td{border-bottom-width:0;border-bottom-style:none}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%}.dhx_grid_event_selected{background-color:#9cc1db!important;color:#fff!important}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(imgs/images.png)}.dhx_marked_timespan{position:absolute;width:100%;margin-left:0}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100)}.dhx_mini_calendar .dhx_marked_timespan,.dhx_scheduler_month .dhx_marked_timespan{display:none}.dhx_now_time{width:100%;border-bottom:2px solid red;z-index:1}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px solid red}.dhx_matrix_now_time{border-left:2px solid red;z-index:1}.dhx_matrix_now_time,.dhx_now_time{opacity:.5}.dhx_cal_quick_info{border:2px solid #888;border-radius:5px;position:absolute;z-index:8;font-family:Tahoma,san-serif;font-size:8pt;background-color:rgba(50,50,50,.5);padding:0 0 0 7px;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.dhx_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon{float:right}.dhx_cal_qi_title{padding:5px 0 10px 5px;color:#fff;letter-spacing:1px}.dhx_cal_qi_tdate{font-size:14px}.dhx_cal_qi_tcontent{font-size:18px;font-weight:700}.dhx_cal_qi_content{border:1px solid #888;background-color:#fefefe;padding:16px 8px;font-size:14px;color:#444;width:275px;overflow:hidden}.dhx_qi_big_icon{min-width:60px;padding:5px 10px 5px 5px;margin:5px 9px 5px 0;background-color:#1796b0;border-bottom:1px solid #666;border-right:1px solid #666;border-radius:3px;line-height:20px;color:#fff;vertical-align:middle;cursor:pointer;float:left}.dhx_cal_qi_controls div{float:left;height:20px;text-align:center;line-height:20px}.dhx_qi_big_icon .dhx_menu_icon{margin:0 8px 0 0}.dhx_drag_marker{width:100%;filter:alpha(Opacity=50);opacity:.5;background-color:#ffe763;position:absolute;box-sizing:border-box!important;border-top:1px solid #b6b6b6;border-bottom:1px solid #b6b6b6}.dhx_focus_slot{background:#ffe763;position:absolute;pointer-events:none;opacity:.3}.dhx_cal_container :focus{outline-style:auto}.dhtmlx_modal_box *,.dhx_cal_data,.dhx_cal_data div,.dhx_cal_data table *,.dhx_cal_header,.dhx_cal_header div,.dhx_cal_light .dhx_cal_lsection,.dhx_cal_light .dhx_wrap_section,.dhx_cal_navline div,.dhx_cal_quick_info,.dhx_cal_quick_info div,.dhx_multi_day,.dhx_multi_day div,.dhx_tooltip_line div{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dhx_form_repeat label{margin-bottom:0}.dhx_cal_data div.dhx_scale_hour,.dhx_cal_data table .dhx_matrix_cell,.dhx_cal_data table .dhx_matrix_scell{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.dhx_cal_data table{border-collapse:separate}.dhx_cal_light .dhx_cal_radio input[type=radio]{margin:3px 3px 0 5px}.dhx_cal_light .dhx_cal_radio label{display:inline-block;margin:0;position:relative;top:-3px}.dhx_cal_event div{line-height:normal}.dhx_cal_container{position:relative;overflow:hidden;background-color:#fff;font-family:Arial,san-serif;font-size:12px}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2f3a48}.dhx_cal_navline div{position:absolute;white-space:nowrap;top:14px}.dhx_cal_navline .dhx_cal_date{border:0;font-size:18px;font-weight:400;font-family:Arial,san-serif;width:100%;text-align:center;left:0;padding:1px 0 0;color:#454544;z-index:-1}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:5;top:0}.dhx_cal_prev_button{cursor:pointer;right:61px;background-color:none;background-image:url(imgs_dhx_terrace/arrow_left.png);background-position:center center;background-repeat:no-repeat;height:30px;width:46px;border:1px solid #cecece;border-radius:5px 0 0 5px}.dhx_cal_today_button{cursor:pointer;text-align:center;font-size:inherit;font-weight:700;color:#747473;right:123px;background-color:none;background-image:none;background-position:-62px 0;background-repeat:no-repeat;height:30px;width:80px;border:1px solid #cecece;border-radius:5px;text-decoration:none;text-transform:none}.dhx_cal_next_button{cursor:pointer;right:14px;background-color:none;background-image:url(imgs_dhx_terrace/arrow_right.png);background-position:center center;background-repeat:no-repeat;height:30px;width:46px;border:1px solid #cecece;border-radius:0 5px 5px 0}.dhx_cal_tab{width:60px;height:30px;background-color:none;text-align:center;text-decoration:none;text-transform:none;font-weight:700;padding-top:0;border-radius:0;cursor:pointer;border:1px solid #cecece;color:#747473;font-size:inherit}.dhx_cal_tab.active{text-decoration:none;cursor:default;font-weight:700;font-size:inherit;color:#454544;border:1px solid #cecece;border-bottom:1;background-color:#f0ede7;z-index:25}.dhx_cal_tab_first{border-radius:5px 0 0 5px;border-right:0}.dhx_cal_tab_last{border-radius:0 5px 5px 0}.dhx_cal_header{position:absolute;overflow:hidden;left:10px;background:#fff;border-top:1px solid #cecece;border-right:1px solid #cecece;z-index:2}.dhx_cal_data{-webkit-tap-highlight-color:transparent;border-top:1px solid #cecece;position:absolute;width:600px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;-ms-touch-action:pan-y;touch-action:pan-y}.dhx_cal_event,.dhx_cal_event_clear,.dhx_cal_event_line{-ms-touch-action:none;touch-action:none}.dhx_scale_bar{position:absolute;text-align:center;background-color:#fff;padding:2px 0 0;border-left:1px solid #cecece;font-size:11px;font-weight:inherit;line-height:16px;color:#767676}.dhx_scale_holder{position:absolute;border-right:1px solid #cecece;background-image:url(imgs_dhx_terrace/databg.png);-ms-interpolation-mode:nearest-neighbor;image-rendering:-moz-crisp-edges;image-rendering:crisp-edges;image-rendering:pixelated}.dhx_scale_holder_now{-ms-interpolation-mode:nearest-neighbor;image-rendering:-moz-crisp-edges;image-rendering:crisp-edges;image-rendering:pixelated;position:absolute;border-right:1px solid #cecece;background-image:url(imgs_dhx_terrace/databg_now.png)}.dhx_scale_hour{border-bottom:1px solid #cecece;background-color:#fff;text-align:center;line-height:44px;color:#767676;font-size:11px;font-weight:inherit;overflow:hidden}.dhx_month_head{height:21px;padding:0 5px 0 0;font-size:12px;font-weight:inherit;line-height:21px;color:#362d26;border-right:1px solid #cecece;background-color:#fff;text-align:right}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#fff;color:#bbb}.dhx_now .dhx_month_head{font-weight:400}.dhx_month_body{border-right:1px solid #cecece;border-bottom:1px solid #cecece;background-color:#fff}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#fff}.dhx_now .dhx_month_body,.dhx_now .dhx_month_head{background-color:#fff3a1}.dhx_scale_ignore{display:none}.dhx_cal_drag{position:absolute;z-index:13;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50)}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:13}.dhx_multi_day{position:absolute;border-top:1px solid #cecece;background-color:#fff;border-right:none;box-shadow:none}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-color:#fff;background-position:center center;border-bottom:1px solid #cecece;border-right:1px solid #cecece;background-repeat:no-repeat}.dhx_multi_day_icon{background-image:url(imgs_dhx_terrace/clock_big.gif)}.dhx_multi_day_icon_small{background-image:url(imgs_dhx_terrace/clock_small.gif)}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff}.dhx_form_repeat,.dhx_form_repeat input{padding:0 0 0 5px;margin:0;font-family:Tahoma,Verdana;font-size:11px;line-height:24px}.dhx_form_repeat{overflow:hidden}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent}.dhx_repeat_center,.dhx_repeat_divider,.dhx_repeat_left,.dhx_repeat_right{height:115px;-moz-box-sizing:border-box;box-sizing:border-box}.dhx_repeat_center,.dhx_repeat_left{padding:10px 0 0 10px;float:left}.dhx_repeat_left{width:105px}.dhx_repeat_center{width:345px;padding-top:22px}.dhx_repeat_divider{float:left;width:1px}.dhx_repeat_right{float:right;width:173px;padding:17px 3px 0 10px}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px;line-height:18px;padding:0 0 0 2px}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px solid #7f9db9;line-height:18px}input[type=radio].dhx_repeat_radio{margin:5px 4px 0 0;display:inline-block;position:relative;top:2px}input.dhx_repeat_checkbox{margin:4px 4px 0 0}.dhx_repeat_days td{padding-right:5px}.dhx_repeat_days label{font-size:10px}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_custom_button_recurring{background-image:url(imgs_dhx_terrace/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px}.dhx_cal_light_rec{width:640px}.dhx_cal_light_rec .dhx_cal_larea{width:632px}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px}.dhx_cal_event .dhx_header,.dhx_cal_event.dhx_cal_select_menu .dhx_footer{display:none}.dhx_cal_event.dhx_cal_editor{border:1px solid transparent}div.dhx_menu_head,div.dhx_menu_icon{background-image:url(imgs_dhx_terrace/controls.png)}.dhx_cal_tab.active{text-shadow:0 1px 0 #fff}.dhx_cal_tab_standalone{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px!important;padding:0 5px}.dhx_cal_larea{margin-left:0;border:1px solid transparent}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday,.dhx_cal_lsection,.dhx_cal_lsection .dhx_fullday{color:#747473}.dhx_cal_light{border:1px solid #CECECE}.dhx_section_time{background-color:transparent}.dhx_btn_set div:first-child,.dhx_cancel_btn,.dhx_delete_btn,.dhx_save_btn{display:none}.dhx_cal_ltitle span{float:left}.dhx_mark{display:none}.dhx_close_icon{float:right;width:9px;height:9px;background:url(imgs_dhx_terrace/close_icon.png) center center no-repeat;padding:10px;margin-top:1px}.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template{line-height:22px}.dhx_cal_ltext textarea{box-sizing:border-box;-moz-box-sizing:border-box}.dhx_cal_container.dhx_mini_calendar{box-sizing:border-box;border:1px solid #CECECE;box-shadow:2px 2px 5px #CCC;border-radius:3px}.dhx_mini_calendar .dhx_year_month{border:1px solid #CECECE;font-family:Arial}.dhx_mini_calendar .dhx_month_body,.dhx_mini_calendar .dhx_month_head,.dhx_mini_calendar .dhx_scale_bar,.dhx_mini_calendar .dhx_year_body,.dhx_mini_calendar .dhx_year_month{border-color:transparent}.dhx_mini_calendar .dhx_year_body{padding-top:1px}.dhx_mini_calendar .dhx_scale_bar{border-width:0}.dhx_mini_calendar .dhx_year_week{border-bottom:1px solid #CECECE;padding-top:1px}.dhx_mini_calendar .dhx_month_head{padding-right:0;text-align:center}.dhx_mini_calendar .dhx_cal_next_button,.dhx_mini_calendar .dhx_cal_prev_button{border:0;height:20px}.dhx_cal_navline div.dhx_minical_icon{left:210px;top:14px;width:30px;height:30px;background-position:3px 5px}.dhx_second_scale_bar{border-bottom:1px solid #CECECE}.dhx_repeat_divider{border-left:1px solid #CECECE}.dhx_custom_button{background-color:#fff;border:1px solid #CECECE;color:#747473}.dhx_agenda_line div,.dhx_v_border{border-right:1px solid #CECECE}.dhx_year_month{border:1px solid #CECECE}.dhx_scale_bar_last{border-right:1px solid #CECECE}.dhx_year_body{border-left:1px solid #CECECE}.dhx_expand_icon{top:-3px}.dhx_scale_bar .dhx_cal_next_button,.dhx_scale_bar .dhx_cal_prev_button{width:20px;height:20px;top:0!important;border:0}.dhx_scale_bar .dhx_cal_next_button{right:1px!important;border-left:1px solid #CECECE}.dhx_scale_bar .dhx_cal_prev_button{left:1px!important;border-right:1px solid #CECECE}.dhx_cal_date,.dhx_cal_next_button,.dhx_cal_prev_button,.dhx_cal_tab,.dhx_cal_today_button{line-height:30px}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border:0}.dhx_map_line .headline_date{border-right:1px solid #CECECE}.dhtmlXTooltip.tooltip{border-left:1px solid #CECECE;border-top:1px solid #CECECE;color:#747473;font-size:12px;line-height:16px}.dhx_wa_scale_bar{border-top:1px solid #CECECE;border-bottom:1px solid #CECECE}.dhx_wa_column_last .dhx_wa_day_cont{border-left:1px solid #CECECE}.dhx_wa_ev_body{border-bottom:1px solid #CECECE}.dhx_wa_scale_bar{background-color:#f0ede7}.dhx_wa_ev_body.dhx_cal_event_selected{background-color:#fff3a1;color:#362d26}.dhx_wa_dnd{background-color:#fddb93!important;color:#747473!important;border:1px solid #ccb177}.dhx_text_disabled{color:#2E2E2E}.dhx_cal_ltext .dhx_text_disabled{line-height:22px}.dhx_grid_v_border{border-right-color:#CECECE}.dhx_month_body_border,.dhx_month_head_border,.dhx_scale_bar_border,.dhx_scale_hour_border{border-left:1px solid #CECECE}.dhx_cal_navline .dhx_cal_export{width:32px;height:32px;margin:2px;cursor:pointer;top:12px}.dhx_cal_navline .dhx_cal_export.pdf{left:auto;right:249px;background-image:url(imgs_dhx_terrace/export_pdf.png)}.dhx_cal_navline .dhx_cal_export.ical{left:auto;right:210px;background-image:url(imgs_dhx_terrace/export_ical.png)}.dhx_mini_calendar{padding:5px}.dhx_mini_calendar .dhx_calendar_click,.dhx_mini_calendar .dhx_year_event{border-radius:7px}.dhx_mini_calendar .dhx_month_head{margin:2px}.dhx_mini_calendar .dhx_year_month{line-height:20px;height:25px;font-size:14px}.dhx_mini_calendar .dhx_cal_next_button,.dhx_mini_calendar .dhx_cal_prev_button{top:8px!important} \ No newline at end of file diff --git a/css/imgs_dhx_terrace/arrow_left.png b/css/imgs_dhx_terrace/arrow_left.png deleted file mode 100755 index 72381d325bc0b090980f5c60e8a91cd28a13d3de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^+(693!3-pu%eSuqQtAOdA+GKPKL3dTyo+Xbf%KOI z`2{nW|7@`R^v~3*Jn>u5WR9gkadS@>#}JO|u4g^D7z{X^1Fdfuez(sTTz&FYt$@f+ zW+}-e{^7klC8PewC+4K3PnYZg8o}V{>gTe~DWM4fvkO!% diff --git a/css/imgs_dhx_terrace/arrow_right.png b/css/imgs_dhx_terrace/arrow_right.png deleted file mode 100755 index 5dbe7c8a38b50106805a03e2b119f89d743b68a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^+(693#0(@)9$(K3;sp4Fxc>kD-@U*GNCLs!`Rn!q z#hFWj{DPeruGU}NtqtTVd%8G=a9mH`z{8ukf&Jlnhd=Ty`x!pUYy4vp{LK}ZEG@;v ZuzR!6(p#F&7lFzdJYD@<);T3K0RUVmE8GA8 diff --git a/css/imgs_dhx_terrace/but_repeat.gif b/css/imgs_dhx_terrace/but_repeat.gif deleted file mode 100755 index e045c8718e357050567e913ae1c6ffb94fb3b057..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmZ?wbhEHblw#0eSgOdt#>VF7=NA$Z5*-z#uC5*$8sh2UZe?l7%gdXVmKxyipPHKL z;9zfUZ7nP;?C0z2=;$aRAz@--qNAgusHn)w%9@y%$i>AK84+$}W##DLpsK2xkPt5< zBm|Vr$jI>X_4!Xrp!k!8k&D5eL5BedKz?FiJA7b%frpM%|A{3aMdl?+3Xjh2K@~?Y%=!`?3G?#*)kBGd4oI9_u4~LkH z0-J1^3ln#ff>hWP=M4A2aCwDP7Y3n4;fyiN!SbBU?BNVNadGUTb9V09y=U*fz5Z*1 zLRUs@jZNrHUgDCT=aZFleokSrLg~(msv7UQhNc$pwvMhI@4g9>c1@cxYxg|21-^^U eI4xV@yGmhA@cNCuoBIlPeqFubppqj4gEauGU&K!U diff --git a/css/imgs_dhx_terrace/calendar.gif b/css/imgs_dhx_terrace/calendar.gif deleted file mode 100755 index cecde96ac7fceb6cc6256da048b078383b8b6756..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmZ?wbhEHb6lV}+c+AVt)7A6m-=8J(=B!z@X34T8b7sw%GO1_Dq9tqAty!{Y&YERQ zrc9c$W!;+pFrdQ#1R%W(EGr8nIh`Ve`~%jr9dY1jQ{{Ue!M5;}!HEEoBiYJ5K8JfY zJ=h?SccPoOqlNYSu^g*fj@F|}bHi2!UvmmPQMNqZ+v36JRPpCuOlF2eUkJ7+jXoeE z^!2Fi{_Wb6m^mZan_I(5;yM!|?O3$)^Td0&a|yIAhI#D0UEy!RE07bxVnE(I) diff --git a/css/imgs_dhx_terrace/clock_big.gif b/css/imgs_dhx_terrace/clock_big.gif deleted file mode 100755 index 26b331cf05e6419f9cb1bec5a6dc77ea833490d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1958 zcmbVMX;>3i6rBLFD4^m>-GHxk2i0*_nv#-yXR~V;`q?G zYoImI&+(Az%H_1Qw86nav)P=Qnp#q2zabf0ULKD-?>%%#4im^m{+uRbDF0%*-4a85tWJtFP1KWM_|$kJr}L z*3{G}mC6D|p2=joTvVu1sTvy_3knL#OI1~s<+-`J#mb_q>dHH}zkm4fVNUj!%}x5Q zuC9rRiJPrACMPGeva&7}=0AG$DDUEhg8V#T6d!Iy#z~^rNGud_`VcYs-b)^A%+(yMo6QD;;cnND>FH@HDJj#_(+~u?P0!mC90IesGA{UU-6j`vd6B3L4oCM3L=5~u zbsZiS@EQ2slweY@n1x0N0uM{jU58%|;~kFV(fIgnzVKE#T`m+0Q5hGO3!_9*x}1UM z^09D~4(66^A|9SGkwr4_{+0vSg2}=pC`=)cJa{B338o?h#M8^$+uI!`lMoV-L?$9+ z55$}9Nv4xX@LwMuph@`q=%H-RUszzpz(>erVmgr+6B9#-@g!i9{X~RDqgi5*$sWMM zLwZOgKD`83PY8eNuu@931>Kut-XnDTu(sghV-4 zOhgDIqEKk5YsOkC3q}7<$7>Y`+@>P@ClnN(�D>SiD#eqHuxN-UiALoxDYG%2>Fe*q zB2m0pOpZ4NK>`pOiA-hs_#j>!e<}#+KkFMLlFGOu9y*IFu;4!NW&W!#oh3oJGE5SN zVNtUk5E6mOFlhuPhFQBP@NR*KkHttWkMpEfHYyPuMEM*ECWL2hmo9h~I{CkD zRV7!7FDr{?)B$J_keci-vobT%(^6Bu`25^wXV08I_30-cfArzW6UUDwCw-8Za5O$H z_Q?B(56NQ=M$4p<_r#b;7!`Ry5V3zB%IAf1_rCki+i$)3#_M}_zxHa_uF#z!ue=<* ztJtZJIBV_3J26>+y;#CkULNsp!aJa$Zq;*eBuX5$;XbL zIOc4J-yFLc|3=8kb5?G#xYY|>-63~ZU#6SYx#ab@W!?_U=Prs{GTb2)vR(zPI=}8t^>Ta2Hp$NYNPEgD_^g$q?HTxVLPqVupDseMo54BTT?;Qgq7ZGz zElYG>j4;I)eC_Dr_Do#&i_Ou*IdZd`fpgOJg(lNbXsJHgK5+s*s%SrT%u6~rI z3x<3gj2ll|J8Cz@ZcwsG_wRcx2{tYKjWyDi;KHhzKkrTBjYCJ4seMhE!MT?6}rm^)&LY5QHR6cFNbe`8D`EsoCmfuBnMoSm453>!U5*)m=%k z1vyFj^Bz66`BVGwJ5FsmaT6-Z-CIe*T@T$6Sf1bn*@*bPD`0I)@={E!J0Eh-*51`g zY}U5>>7AW$5+5xk(9aQ?!>KRv%bAaxN8-G-Zkr*?9i9(ug&Ov@SxrDaF80utKLKO$ BRLKAU diff --git a/css/imgs_dhx_terrace/clock_small.gif b/css/imgs_dhx_terrace/clock_small.gif deleted file mode 100755 index 9646dab0d163279a6702e2c2a2654315d7f2eb27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmZ?wbhEHblxN^)c*el+_wV1ibLYN#^=jtKnHx85{PpYCg9i`JpFe;7`t^ki7k>Eg z;n>k53l=PR_U!4)moFbbe*Ev>zcZ&#&!0DM^{SPRA3ys2`}f0#5C8o6bMoZL*|TOn zdGh%E`*&y0o?W|U^_I<>pFe*#efsn(moMMBb9?jV&2#3=UbAM+jqBI%-@pI!=g*Dn z*B&}};N81-mo8meylBy;4eNm5#PMU-uU%WQV#V_1%lGfyvv~31bLY<8x^?TxlP9}& z?b^C!)4H{5jvhVy<;$0^U%%eGaee*zb?eu!-?44$qeqYK+_`h>*3C^D)?d7E9;pAs z@#D8{-n@P5*5ykVXV0F!XV=avSFZg3|DRzn0mYvzj0_Bc3_2i3f#QULePu&nQ*%q8 zsF@?Pf~tf@YyX56K4X1XZD|oLYv+k`oB5gj0|Jy52k^R?&zs1~Be;xlS%8R<~e?=m(XzD-<0rO#_4s^1MF|jBpOgM1pkfV6g Sg$zd~j&>$-XD%)l25SK4FZx~p diff --git a/css/imgs_dhx_terrace/close_icon.png b/css/imgs_dhx_terrace/close_icon.png deleted file mode 100755 index 4aa5d6620e493055c369385ec5cbd774f2bb9150..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{!3Opi<85sDEfH31!Z9ZwBV2G!S zV~E7%!d@R3@crIZ}u*9^a7gC;OXk;vd$@? F2>|j&FzEmQ diff --git a/css/imgs_dhx_terrace/collapse_expand_icon.gif b/css/imgs_dhx_terrace/collapse_expand_icon.gif deleted file mode 100755 index bf64cc8199cee2ae3200dfb506eee46af6184866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmZ?wbhEHb6k(~DO|DS<@LGeF#gl~X?OJYePkhZa}C`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@&oOZb5Ep zNuokUZcbjYRfVlmVoH8esuhq864qBz04piUwpDTjNhpBqbj~kIRWQ{v&`mZlGf*%y z)H5_TF*i5YQ7|$vG|)FN(l<2HH8i&}HnK7>P=Ep@plwAdX;wilZcw{`JX@uVl9B=| zef{$Ca=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~> zCgqow*eU^C3h_d20o>TUVm+{T^pf*)^(zt!^bPe4Kwg3=^!3HBG&dKny0|1L72#g2 z1{a4^7NqJ2r55Lx7A2F<7;)ua#$BaY0ZFv$KJ@xuKz}p_7rBv7@7f zk&%n5v#FV*1x&9?esXDUYF-IUZwf-M3r@YDgpgYRwAm%KD6=dz#jPkmR{`u{t4!Q( zal~mJRBsAyw>aU{s}FRHJ}6p|q8TOxOgkVZJkbI<@MNEw2Tbclz(mdX|KHy~zkmJw z@%`J^FP}es{P6zW+c&RYy?pWf+0!SFA3c0<|K8m@w{P9NasArWE0-@_ym0>9*)yk4 zojh^;*wG`04;?(Pf8X9cyLau}v3=XtEt@xO+^~M#+BK_Jtz5Bu+0rG87cE>cf8N|V zvuDkmF@4(9DU&BnoY3Fb+tc0E+0owC+S1(A*ic_rTT@+CSy5hAT2fq8SdgEWo0FZD znUS8Bnv$H9m=GTq8xtKB84(^98WJ277~t>c>*MX^>EZ6?>f-F==wNSWYh!I?X<=?= zYGP~z%usr|I@(&A8tQ7QD#}WV3i5KYGSX6#65?W_BEmv~0{ncuJltHI9PDhYEX+)d zz>?u73y@@D&;gbb44{&Ofhm4U|H{*E85Yku5R&e+!T-uz+XtnF4PtFqS1F|y9Q#l+ zVR_r*cN4#BJm2}#!Qr4m_-2mU-8~<7c6u3HS@pGR>85SELEm2e4a=Rf^3e)rrwcAD Wvon(Q@10!mhv#g5#G@QW25SH;i?#Ov diff --git a/css/imgs_dhx_terrace/controls.png b/css/imgs_dhx_terrace/controls.png deleted file mode 100755 index f9a99e21fae845f58cc3519fa806ac82cd3f9e32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmVx_Fc^m?f~SHYcoqBxUOjmg3Ijib-$S}F@#fK! zAP9mWcvKWrybJ~#g?)gXb`=Cc5QUh+JN8M!uHc1yE1Pm{jMmX;8r1)2>i z0g}M~mNdPZGk>2aUA|u}DG}}|v98o2epa%JsQhulLsBF;kn|;AM4#S^>Xzi2+$8B* zf|{`BH)lsO(UdWvJfUT*NX{jxWVxR1PA`d9Vx5xqSl)pomaG!l_LzO%4lL-J-2}_c zYDsQ)dljrn-sl{T@)bpl*m=IvF}~lMea{t@`7YUNR(I##CH;Kv*uU!NQN9Po=R^8@ zL|u}gV^rnsQmcp!f-c#$@0WQdwHzv|oFsoip(V{KKGp~t(texvQ-h=|eJIMz3p#C9 z;1EVoXh|QGZ`~j$V}o^hx-u`AsNI~Pb9U`1J(pU|Xh}AL?8D`dl3oiW6$#>!-YlMT z(*jXv?Al)>o6QKp)#aN8sC9LBDnUF7OfAZd*|lbY!ENsPW7ly~_?BcE3#rFWbp#GN zK`Sg2?^&Mbsp1B;I)0HYNhr2W16+0Y8CDVx!Dmrik)RWY5IiavAm1y({Msdn662>u zOUe&s#}vhF5N*%F><&#Y33^VgH*fB)iW!XXlB%8->QD>Z{!c$uBo*C25mo3QH%-)O z!UQY8?@0iXAPGPcfFwu)kOWDn1V{pq1W5pr03<;YfFuA(kOUwJk^m$DNP;8)NdS`m ztR$bsU0?x{On<~rO8lL-OkQ9q$!4|0Y~|V`Z9lOU13r0y6kC$Fy9>jA5L~c#`DCC7XMsm# zF#`j)FbFd;%$g$s6l5>)^mS!_$S5uFMGaB5^r6K|)Mn|As&R*ZyAL sHfgeCb#?Vl2_T37;(bO21_lfakGHWeHQ9eo9jJ-H)78&qol`;+0IhQ=7ytkO diff --git a/css/imgs_dhx_terrace/databg_now.png b/css/imgs_dhx_terrace/databg_now.png deleted file mode 100755 index f1875140dbd449685e573311c3687f17d914f87d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfz!2~3=U0uz96lZ})WHAE+-w_aIoT|+y4HT60 xba4#fxSssuf2AVx){n2*gC#N&-|bZPWq2=KFi9qC`dgqP22WQ%mvv4FO#l;&8T$YL diff --git a/css/imgs_dhx_terrace/export_ical.png b/css/imgs_dhx_terrace/export_ical.png deleted file mode 100755 index ca496f5bda3a8f0c2a84c115bedb07c48c562762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1793 zcmaJ?c~BE~7+pjJK}3*xA$1!yfQ9UC0)|9V$i-nv#sua?S^P#lay6BH^IY3O1d2~@~gq)0CT zEKqaNL`9%MgN7S~BAFpc#*mYIKLLI8OhQ13;!;qrOjc=`dKPI~mr2Y`+YkwyhTuso z(i>A^K?umjG$`mrfjwmKdKg@fP!O6YolbWLsW1XVFcm_m9tfRDqcUL_e0!0IXc~Du zGmPi|HWsmBkrHuS&4eJGPDjzvD3~SzLKqB&NrOuDAP^qfR244Od#JRlXB2p-R;E#? zaRsIVO^VVuECpwg2&ZpSP^#a_s-F#jIWs|5^3ka^{YDe&R(?fmzYZok>YmO)D0d&5bY{ z8?S%eXO6$j{Q03Tu$7Kwf3)lj-k)wE6MbeDebKtkIZ~3E8pS`d;e!eNA8PO5cJ7(fiWsq==nGUNlZS#KJ7}rUb`R%O>y>~pz?H1~-@|OlUEKVTJ z&uz^<5Zw7|c2`K8JfOJTMd(yW&%JA%KS&X8-kj@Zo_X~JA zYZJp^xBs!@5f9p)WJTBpyJv~2J#jRm;i!D;^Hx{)<-msSK;b7g4YP$aZHJGFgJ6d&e6a8mN=4t)b%BSZLVz zTQcnJtv3Lk6E|*Tb(c2ZZ`{VT?K``9xT3nc+NXE{@%_6tG2uNlJ~lR|xyEetmOYC)9PUtn6`elAopej&IY|t8*sT9CZGB z2w2Ifsi|4i0FkHq(wm>Ga|R-Kbw;BljYd1PkzD`ydEVg4!0yQ^{u#e|G%7Pce~J3y z{R)QVM1J_)302>8ArnNp&5@V|KQya{3Iyx+_OE=A~W`?L=a3zqWz_$q0F{>O%6@rk_#} LU&uSfk!1V>Q6I!R diff --git a/css/imgs_dhx_terrace/export_pdf.png b/css/imgs_dhx_terrace/export_pdf.png deleted file mode 100755 index ebadc7cc73047fb4e91218a3330c4a7b9f95d1dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1667 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%nF$y5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8p{tRTxs!#9i;<;;fs3nw zlbH!juSMv>2~2MaLa!lCy`Y4UTL84#CABECEH%ZgC_h&L>|v`+oNh67#c3W? zZwgMgn7ZNAs}FRHJ}6p|q8TOxOgkVZJkbI<@MNEw2Tbclz(ieqisv>11Jh4W7srr_ zTSvmZGlT<0_Rc)Br1y!l0=KEx?oC+&Em4`F8+LuzymIxfi*qBd%;n|aQWE46;M-h5fIGv>eTg{VJ@PubRAT>m0A z*aaw=kj&NhqsGpeIYdZ)g>BW`teI0JiC3x1hi6-k_>^ngcx$)hJ%_=GHK8m>G^?~Ao|c6j+(@M0H-u3*8By-HD; z&fY9u=byX8%*X6roi@`Aduw05`O~>JvOk$SGbfhyLfxf* zd+&6`ZqY8AtQFJv_2u%liUFsevCOEhSfS^(j=@7DDS6rQLjsMDjx7F_ckJ`}=-W@d z4{hFK{p!&cSLPG@EDT-WPSjTV?B*=Gq_$c^Uh>)Z@RPE#kHpSS+_mQud&lye$NzZ* zFKlK%kQR6@xb)}j3vBx??{D=};oY*xS5TlJzp3Z+BW@Py`*=SL#fy1;-rIGccg{y zZ|CLv^Ve{GSN83hzf?ni7rsbY`{Re_+M8@SmAjeSXZ>-RTF&j{aN-2t{^-3?u`#}a;&X6QbIyS)gN#DVewN! zCUnK7N47DnyVpdmReG{fr2b6WYj*CZF8oiG%wIh(Q`;0e+w`!}OrAqc&C!hEo2Nf4 zxN+g_iLR+$s$Oc7wf?`Ez9stA+@(uZy_R3z;c$zsXJaFyPQs@B7hNq*ZNJK5z3%z( oo8`BUJhcA(``GKB`HXA~YvwLBa9$bM3#t}8UHx3vIVCg!0FOV8IsgCw diff --git a/css/imgs_dhx_terrace/resize_dots.png b/css/imgs_dhx_terrace/resize_dots.png deleted file mode 100755 index c26e2a3aaffc7a98b9170f844ba5cea5b69f273e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c6!3HF^d|7u4NO2Z;L>4nJ@ErkR#;MwT(m+84 zPZ!6Kid)Gd^S3oJN*Wj%7#Qq1@#X)2rOW^AV;CeE7)~^?EqtOS9|ly*;OXk;vd$@? F2>@GS9hv|D diff --git a/css/imgs_dhx_terrace/resizing.png b/css/imgs_dhx_terrace/resizing.png deleted file mode 100755 index 389ca543e0deee26e0d48330289f8e5d22def03a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^vOvtr!3HFEiaq}cq&N#aB8wRq_>O=u<5X=vX`rB} tr;B5V#`)wQ_6!Y)3I>NeK55=HWKhj}t?V|{@*hwEgQu&X%Q~loCII>X80r83 diff --git a/js/dhtmlxscheduler.js b/js/dhtmlxscheduler.js deleted file mode 100755 index 6dfe0bbc..00000000 --- a/js/dhtmlxscheduler.js +++ /dev/null @@ -1,277 +0,0 @@ -/* -@license -dhtmlxScheduler v.5.0.0 Stardard - -This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. - -(c) Dinamenta, UAB. -*/ -function dtmlXMLLoaderObject(e,t,i,r){return this.xmlDoc="","undefined"!=typeof i?this.async=i:this.async=!0,this.onloadAction=e||null,this.mainObject=t||null,this.waitCall=null,this.rSeed=r||!1,this}function convertStringToBoolean(e){switch("string"==typeof e&&(e=e.toLowerCase()),e){case"1":case"true":case"yes":case"y":case 1:case!0:return!0;default:return!1}}function getUrlSymbol(e){return-1!=e.indexOf("?")?"&":"?"}function dhtmlDragAndDropObject(){return window.dhtmlDragAndDrop?window.dhtmlDragAndDrop:(this.lastLanding=0, -this.dragNode=0,this.dragStartNode=0,this.dragStartObject=0,this.tempDOMU=null,this.tempDOMM=null,this.waitDrag=0,window.dhtmlDragAndDrop=this,this)}function _dhtmlxError(e,t,i){return this.catches||(this.catches=[]),this}function dhtmlXHeir(e,t){for(var i in t)"function"==typeof t[i]&&(e[i]=t[i]);return e}window.dhtmlXScheduler=window.scheduler={version:"5.0.0"},window.dhtmlx||(dhtmlx=function(e){for(var t in e)dhtmlx[t]=e[t];return dhtmlx}),dhtmlx.extend_api=function(e,t,i){var r=window[e];r&&(window[e]=function(e){ -var i;if(e&&"object"==typeof e&&!e.tagName){i=r.apply(this,t._init?t._init(e):arguments);for(var s in dhtmlx)t[s]&&this[t[s]](dhtmlx[s]);for(var s in e)t[s]?this[t[s]](e[s]):0===s.indexOf("on")&&this.attachEvent(s,e[s])}else i=r.apply(this,arguments);return t._patch&&t._patch(this),i||this},window[e].prototype=r.prototype,i&&dhtmlXHeir(window[e].prototype,i))},dhtmlxAjax={get:function(e,t){var i=new dtmlXMLLoaderObject(!0);return i.async=arguments.length<3,i.waitCall=t,i.loadXML(e),i},post:function(e,t,i){ -var r=new dtmlXMLLoaderObject(!0);return r.async=arguments.length<4,r.waitCall=i,r.loadXML(e,!0,t),r},getSync:function(e){return this.get(e,null,!0)},postSync:function(e,t){return this.post(e,t,null,!0)}},window.dtmlXMLLoaderObject=dtmlXMLLoaderObject,dtmlXMLLoaderObject.count=0,dtmlXMLLoaderObject.prototype.waitLoadFunction=function(e){var t=!0;return this.check=function(){if(e&&e.onloadAction&&(!e.xmlDoc.readyState||4==e.xmlDoc.readyState)){if(!t)return;t=!1,dtmlXMLLoaderObject.count++,"function"==typeof e.onloadAction&&e.onloadAction(e.mainObject,null,null,null,e), -e.waitCall&&(e.waitCall.call(this,e),e.waitCall=null)}},this.check},dtmlXMLLoaderObject.prototype.getXMLTopNode=function(e,t){var i;if(this.xmlDoc.responseXML){var r=this.xmlDoc.responseXML.getElementsByTagName(e);if(0===r.length&&-1!=e.indexOf(":"))var r=this.xmlDoc.responseXML.getElementsByTagName(e.split(":")[1]);i=r[0]}else i=this.xmlDoc.documentElement;if(i)return this._retry=!1,i;if(!this._retry&&_isIE){this._retry=!0;var t=this.xmlDoc;return this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""),!0), -this.getXMLTopNode(e,t)}return dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),document.createElement("div")},dtmlXMLLoaderObject.prototype.loadXMLString=function(e,t){if(_isIE)this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"),this.xmlDoc.async=this.async,this.xmlDoc.onreadystatechange=function(){},this.xmlDoc.loadXML(e);else{var i=new DOMParser;this.xmlDoc=i.parseFromString(e,"text/xml")}t||(this.onloadAction&&this.onloadAction(this.mainObject,null,null,null,this), -this.waitCall&&(this.waitCall(),this.waitCall=null))},dtmlXMLLoaderObject.prototype.loadXML=function(e,t,i,r){this.rSeed&&(e+=(-1!=e.indexOf("?")?"&":"?")+"a_dhx_rSeed="+(new Date).valueOf()),this.filePath=e,!_isIE&&window.XMLHttpRequest?this.xmlDoc=new XMLHttpRequest:this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP"),this.async&&(this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this)),"string"==typeof t?this.xmlDoc.open(t,e,this.async):this.xmlDoc.open(t?"POST":"GET",e,this.async),r?(this.xmlDoc.setRequestHeader("User-Agent","dhtmlxRPC v0.1 ("+navigator.userAgent+")"), -this.xmlDoc.setRequestHeader("Content-type","text/xml")):t&&this.xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded"),this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"),this.xmlDoc.send(i),this.async||new this.waitLoadFunction(this)()},dtmlXMLLoaderObject.prototype.destructor=function(){return this._filterXPath=null,this._getAllNamedChilds=null,this._retry=null,this.async=null,this.rSeed=null,this.filePath=null,this.onloadAction=null,this.mainObject=null,this.xmlDoc=null, -this.doXPath=null,this.doXPathOpera=null,this.doXSLTransToObject=null,this.doXSLTransToString=null,this.loadXML=null,this.loadXMLString=null,this.doSerialization=null,this.xmlNodeToJSON=null,this.getXMLTopNode=null,this.setXSLParamValue=null,null},dtmlXMLLoaderObject.prototype.xmlNodeToJSON=function(e){for(var t={},i=0;i-1&&(_isChrome=!0),-1!=navigator.userAgent.indexOf("Safari")||-1!=navigator.userAgent.indexOf("Konqueror")?(_KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari")+7,5)), -_KHTMLrv>525?(_isFF=!0,_FFrv=1.9):_isKHTML=!0):-1!=navigator.userAgent.indexOf("Opera")?(_isOpera=!0,_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera")+6,3))):-1!=navigator.appName.indexOf("Microsoft")?(_isIE=!0,-1==navigator.appVersion.indexOf("MSIE 8.0")&&-1==navigator.appVersion.indexOf("MSIE 9.0")&&-1==navigator.appVersion.indexOf("MSIE 10.0")||"BackCompat"==document.compatMode||(_isIE=8)):"Netscape"==navigator.appName&&-1!=navigator.userAgent.indexOf("Trident")?_isIE=8:(_isFF=!0, -_FFrv=parseFloat(navigator.userAgent.split("rv:")[1])),dtmlXMLLoaderObject.prototype.doXPath=function(e,t,i,r){if(_isKHTML||!_isIE&&!window.XPathResult)return this.doXPathOpera(e,t);if(_isIE)return t||(t=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),t||dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),i&&t.setProperty("SelectionNamespaces","xmlns:xsl='"+i+"'"),"single"==r?t.selectSingleNode(e):t.selectNodes(e)||new Array(0);var s=t;t||(t=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML), -t||dhtmlxError.throwError("LoadXML","Incorrect XML",[t||this.xmlDoc,this.mainObject]),-1!=t.nodeName.indexOf("document")?s=t:(s=t,t=t.ownerDocument);var a=XPathResult.ANY_TYPE;"single"==r&&(a=XPathResult.FIRST_ORDERED_NODE_TYPE);var n=[],d=t.evaluate(e,s,function(e){return i},a,null);if(a==XPathResult.FIRST_ORDERED_NODE_TYPE)return d.singleNodeValue;for(var o=d.iterateNext();o;)n[n.length]=o,o=d.iterateNext();return n},_dhtmlxError.prototype.catchError=function(e,t){this.catches[e]=t},_dhtmlxError.prototype.throwError=function(e,t,i){ -return this.catches[e]?this.catches[e](e,t,i):this.catches.ALL?this.catches.ALL(e,t,i):(window.alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]),null)},window.dhtmlxError=new _dhtmlxError,dtmlXMLLoaderObject.prototype.doXPathOpera=function(e,t){var i=e.replace(/[\/]+/gi,"/").split("/"),r=null,s=1;if(!i.length)return[];if("."==i[0])r=[t];else{if(""!==i[0])return[];r=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(i[s].replace(/\[[^\]]*\]/g,"")),s++}for(s;s=0}function i(e){var t={a:!0,area:!0};return t[e.nodeName.loLowerCase()]?!!e.getAttribute("href"):!0}function r(e){var t={input:!0,select:!0,textarea:!0,button:!0,object:!0};return t[e.nodeName.toLowerCase()]?!e.hasAttribute("disabled"):!0}scheduler._getFocusableNodes=function(s){for(var a=s.querySelectorAll(["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"].join(", ")),n=Array.prototype.slice.call(a,0),d=0;d-1&&s.click?s.click():(e(c,!0),r=!0)}27==i&&(e(c,!1),r=!0)}if(r)return t.preventDefault&&t.preventDefault(),!(t.cancelBubble=!0)}else;}function i(e){i.cover||(i.cover=document.createElement("div"),i.cover.onkeydown=t,i.cover.className="dhx_modal_cover", -document.body.appendChild(i.cover));document.body.scrollHeight;i.cover.style.display=e?"inline-block":"none"}function r(e,t,i){var r=scheduler._waiAria.messageButtonAttrString(e),s=i?i:e||"",a="dhtmlx_"+s.toLowerCase().replace(/ /g,"_")+"_button";return"
    "+e+"
    "}function s(e){u.area||(u.area=document.createElement("div"),u.area.className="dhtmlx_message_area",u.area.style[u.position]="5px",document.body.appendChild(u.area)), -u.hide(e.id);var t=document.createElement("div");return t.innerHTML="
    "+e.text+"
    ",t.className="dhtmlx-info dhtmlx-"+e.type,t.onclick=function(){u.hide(e.id),e=null},scheduler._waiAria.messageInfoAttr(t),"bottom"==u.position&&u.area.firstChild?u.area.insertBefore(t,u.area.firstChild):u.area.appendChild(t),e.expire>0&&(u.timers[e.id]=window.setTimeout(function(){u.hide(e.id)},e.expire)),u.pull[e.id]=t,t=null,e.id}function a(t,i,s){var a=document.createElement("div");a.className=" dhtmlx_modal_box dhtmlx-"+t.type, -a.setAttribute("dhxbox",1);var n=scheduler.uid();scheduler._waiAria.messageModalAttr(a,n);var d="",o=!1;if(t.width&&(a.style.width=t.width),t.height&&(a.style.height=t.height),t.title&&(d+='
    '+t.title+"
    ",o=!0),d+='
    "+(t.content?"":t.text)+'
    ',i){var l=t.ok||scheduler.locale.labels.message_ok;void 0===l&&(l="OK"),d+=r(l,!0,"ok")}if(s){var h=t.cancel||scheduler.locale.labels.message_cancel; -void 0===h&&(h="Cancel"),d+=r(h,!1,"cancel")}if(t.buttons)for(var _=0;_",a.innerHTML=d,t.content){var u=t.content;"string"==typeof u&&(u=document.getElementById(u)),"none"==u.style.display&&(u.style.display=""),a.childNodes[t.title?1:0].appendChild(u)}return a.onclick=function(i){i=i||event;var r=i.target||i.srcElement,s=scheduler._getClassName(r);if(s||(r=r.parentNode),s=scheduler._getClassName(r),"dhtmlx_popup_button"==s.split(" ")[0]){var a=r.getAttribute("result"); -a="true"==a||("false"==a?!1:a),e(t,a)}},t.box=a,c=t,a}function n(e,r,s){var n=e.tagName?e:a(e,r,s);e.hidden||i(!0),document.body.appendChild(n);var d=Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-n.offsetWidth)/2)),o=Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-n.offsetHeight)/2));return"top"==e.position?n.style.top="-3px":n.style.top=o+"px",n.style.left=d+"px",n.onkeydown=t,dhtmlx.modalbox.focus(n),e.hidden&&dhtmlx.modalbox.hide(n), -dhtmlx.callEvent("onMessagePopup",[n]),n}function d(e){return n(e,!0,!1)}function o(e){return n(e,!0,!0)}function l(e){return n(e)}function h(e,t,i){return"object"!=typeof e&&("function"==typeof t&&(i=t,t=""),e={text:e,type:t,callback:i}),e}function _(e,t,i,r){return"object"!=typeof e&&(e={text:e,type:t,expire:i,id:r}),e.id=e.id||u.uid(),e.expire=e.expire||u.expire,e}var c=null;document.attachEvent?document.attachEvent("onkeydown",t):document.addEventListener("keydown",t,!0),dhtmlx.alert=function(){ -var e=h.apply(this,arguments);return e.type=e.type||"confirm",d(e)},dhtmlx.confirm=function(){var e=h.apply(this,arguments);return e.type=e.type||"alert",o(e)},dhtmlx.modalbox=function(){var e=h.apply(this,arguments);return e.type=e.type||"alert",l(e)},dhtmlx.modalbox.hide=function(e){for(;e&&e.getAttribute&&!e.getAttribute("dhxbox");)e=e.parentNode;e&&(e.parentNode.removeChild(e),i(!1))},dhtmlx.modalbox.focus=function(e){setTimeout(function(){var t=scheduler._getFocusableNodes(e);t.length&&t[0].focus&&t[0].focus(); -},1)};var u=dhtmlx.message=function(e,t,i,r){e=_.apply(this,arguments),e.type=e.type||"info";var a=e.type.split("-")[0];switch(a){case"alert":return d(e);case"confirm":return o(e);case"modalbox":return l(e);default:return s(e)}};u.seed=(new Date).valueOf(),u.uid=function(){return u.seed++},u.expire=4e3,u.keyboard=!0,u.position="top",u.pull={},u.timers={},u.hideAll=function(){for(var e in u.pull)u.hide(e)},u.hide=function(e){var t=u.pull[e];t&&t.parentNode&&(window.setTimeout(function(){t.parentNode.removeChild(t), -t=null},2e3),t.className+=" hidden",u.timers[e]&&window.clearTimeout(u.timers[e]),delete u.pull[e])}}(),dhtmlx.attachEvent||dhtmlxEventable(dhtmlx);var dataProcessor=window.dataProcessor=function(e){return this.serverProcessor=e,this.action_param="!nativeeditor_status",this.object=null,this.updatedRows=[],this.autoUpdate=!0,this.updateMode="cell",this._tMode="GET",this._headers=null,this._payload=null,this.post_delim="_",this._waitMode=0,this._in_progress={},this._invalid={},this.mandatoryFields=[], -this.messages=[],this.styles={updated:"font-weight:bold;",inserted:"font-weight:bold;",deleted:"text-decoration : line-through;",invalid:"background-color:FFE0E0;",invalid_cell:"border-bottom:2px solid red;",error:"color:red;",clear:"font-weight:normal;text-decoration:none;"},this.enableUTFencoding(!0),dhtmlxEventable(this),this};dataProcessor.prototype={setTransactionMode:function(e,t){"object"==typeof e?(this._tMode=e.mode||this._tMode,void 0!==e.headers&&(this._headers=e.headers),void 0!==e.payload&&(this._payload=e.payload)):(this._tMode=e, -this._tSend=t),"REST"==this._tMode&&(this._tSend=!1,this._endnm=!0),"JSON"==this._tMode&&(this._tSend=!1,this._endnm=!0,this._headers=this._headers||{},this._headers["Content-type"]="application/json")},escape:function(e){return this._utf?encodeURIComponent(e):escape(e)},enableUTFencoding:function(e){this._utf=!!e},setDataColumns:function(e){this._columns="string"==typeof e?e.split(","):e},getSyncState:function(){return!this.updatedRows.length},enableDataNames:function(e){this._endnm=!!e},enablePartialDataSend:function(e){ -this._changed=!!e},setUpdateMode:function(e,t){this.autoUpdate="cell"==e,this.updateMode=e,this.dnd=t},ignore:function(e,t){this._silent_mode=!0,e.call(t||window),this._silent_mode=!1},setUpdated:function(e,t,i){if(!this._silent_mode){var r=this.findRow(e);i=i||"updated";var s=this.obj.getUserData(e,this.action_param);s&&"updated"==i&&(i=s),t?(this.set_invalid(e,!1),this.updatedRows[r]=e,this.obj.setUserData(e,this.action_param,i),this._in_progress[e]&&(this._in_progress[e]="wait")):this.is_invalid(e)||(this.updatedRows.splice(r,1), -this.obj.setUserData(e,this.action_param,"")),t||this._clearUpdateFlag(e),this.markRow(e,t,i),t&&this.autoUpdate&&this.sendData(e)}},_clearUpdateFlag:function(e){},markRow:function(e,t,i){var r="",s=this.is_invalid(e);if(s&&(r=this.styles[s],t=!0),this.callEvent("onRowMark",[e,t,i,s])&&(r=this.styles[t?i:"clear"]+r,this.obj[this._methods[0]](e,r),s&&s.details)){r+=this.styles[s+"_cell"];for(var a=0;a","gm"),s=new RegExp(" +","gm"),a=new RegExp("'","gm");scheduler._waiAria={getAttributeString:function(i){var r=[" "];for(var s in i)if("function"!=typeof i[s]&&"object"!=typeof i[s]){var a=t(e(i[s]));r.push(s+"='"+a+"'")}return r.push(" "),r.join(" ")},setAttributes:function(t,i){ -for(var r in i)t.setAttribute(r,e(i[r]));return t},labelAttr:function(e,t){return this.setAttributes(e,{"aria-label":t})},label:function(e){return scheduler._waiAria.getAttributeString({"aria-label":e})},hourScaleAttr:function(e,t){this.labelAttr(e,t)},monthCellAttr:function(e,t){this.labelAttr(e,scheduler.templates.day_date(t))},navBarDateAttr:function(e,t){this.labelAttr(e,t)},dayHeaderAttr:function(e,t){this.labelAttr(e,t)},dayColumnAttr:function(e,t){this.dayHeaderAttr(e,scheduler.templates.day_date(t)); -},headerButtonsAttributes:function(e,t){return this.setAttributes(e,{role:"button","aria-label":t})},headerToggleState:function(e,t){return this.setAttributes(e,{"aria-pressed":t?"true":"false"})},getHeaderCellAttr:function(e){return scheduler._waiAria.getAttributeString({"aria-label":e})},eventAttr:function(e,t){this._eventCommonAttr(e,t)},_eventCommonAttr:function(t,i){i.setAttribute("aria-label",e(scheduler.templates.tooltip_text(t.start_date,t.end_date,t))),scheduler.config.readonly&&i.setAttribute("aria-readonly",!0), -t.$dataprocessor_class&&i.setAttribute("aria-busy",!0),i.setAttribute("aria-selected",scheduler.getState().select_id==t.id?"true":"false")},setEventBarAttr:function(e,t){this._eventCommonAttr(e,t)},_getAttributes:function(e,t){var i={setAttribute:function(e,t){this[e]=t}};return e.apply(this,[t,i]),i},eventBarAttrString:function(e){return this.getAttributeString(this._getAttributes(this.setEventBarAttr,e))},agendaHeadAttrString:function(){return this.getAttributeString({role:"row"})},agendaHeadDateString:function(e){ -return this.getAttributeString({role:"columnheader","aria-label":e})},agendaHeadDescriptionString:function(e){return this.agendaHeadDateString(e)},agendaDataAttrString:function(){return this.getAttributeString({role:"grid"})},agendaEventAttrString:function(e){var t=this._getAttributes(this._eventCommonAttr,e);return t.role="row",this.getAttributeString(t)},agendaDetailsBtnString:function(){return this.getAttributeString({role:"button","aria-label":scheduler.locale.labels.icon_details})},gridAttrString:function(){ -return this.getAttributeString({role:"grid"})},gridRowAttrString:function(e){return this.agendaEventAttrString(e)},gridCellAttrString:function(e,t,i){return this.getAttributeString({role:"gridcell","aria-label":[void 0===t.label?t.id:t.label,": ",i]})},mapAttrString:function(){return this.gridAttrString()},mapRowAttrString:function(e){return this.gridRowAttrString(e)},mapDetailsBtnString:function(){return this.agendaDetailsBtnString()},minicalHeader:function(e,t){this.setAttributes(e,{id:t+"","aria-live":"assertice", -"aria-atomic":"true"})},minicalGrid:function(e,t){this.setAttributes(e,{"aria-labelledby":t+"",role:"grid"})},minicalRow:function(e){this.setAttributes(e,{role:"row"})},minicalDayCell:function(e,t){var i=t.valueOf()=scheduler._min_date.valueOf();this.setAttributes(e,{role:"gridcell","aria-label":scheduler.templates.day_date(t),"aria-selected":i?"true":"false"})},minicalHeadCell:function(e){this.setAttributes(e,{role:"columnheader"})},weekAgendaDayCell:function(e,t){ -var i=e.querySelector(".dhx_wa_scale_bar"),r=e.querySelector(".dhx_wa_day_data"),s=scheduler.uid()+"";this.setAttributes(i,{id:s}),this.setAttributes(r,{"aria-labelledby":s})},weekAgendaEvent:function(e,t){this.eventAttr(t,e)},lightboxHiddenAttr:function(e){e.setAttribute("aria-hidden","true")},lightboxVisibleAttr:function(e){e.setAttribute("aria-hidden","false")},lightboxSectionButtonAttrString:function(e){return this.getAttributeString({role:"button","aria-label":e,tabindex:"0"})},yearHeader:function(e,t){ -this.setAttributes(e,{id:t+""})},yearGrid:function(e,t){this.minicalGrid(e,t)},yearHeadCell:function(e){return this.minicalHeadCell(e)},yearRow:function(e){return this.minicalRow(e)},yearDayCell:function(e){this.setAttributes(e,{role:"gridcell"})},lightboxAttr:function(e){e.setAttribute("role","dialog"),e.setAttribute("aria-hidden","true"),e.firstChild.setAttribute("role","heading")},lightboxButtonAttrString:function(e){return this.getAttributeString({role:"button","aria-label":scheduler.locale.labels[e], -tabindex:"0"})},eventMenuAttrString:function(e){return this.getAttributeString({role:"button","aria-label":scheduler.locale.labels[e]})},lightboxHeader:function(e,t){e.setAttribute("aria-label",t)},lightboxSelectAttrString:function(e){var t="";switch(e){case"%Y":t=scheduler.locale.labels.year;break;case"%m":t=scheduler.locale.labels.month;break;case"%d":t=scheduler.locale.labels.day;break;case"%H:%i":t=scheduler.locale.labels.hour+" "+scheduler.locale.labels.minute}return scheduler._waiAria.getAttributeString({ -"aria-label":t})},messageButtonAttrString:function(e){return"tabindex='0' role='button' aria-label='"+e+"'"},messageInfoAttr:function(e){e.setAttribute("role","alert")},messageModalAttr:function(e,t){e.setAttribute("role","dialog"),t&&e.setAttribute("aria-labelledby",t)},quickInfoAttr:function(e){e.setAttribute("role","dialog")},quickInfoHeaderAttrString:function(){return" role='heading' "},quickInfoHeader:function(e,t){e.setAttribute("aria-label",t)},quickInfoButtonAttrString:function(e){return scheduler._waiAria.getAttributeString({ -role:"button","aria-label":e,tabindex:"0"})},tooltipAttr:function(e){e.setAttribute("role","tooltip")},tooltipVisibleAttr:function(e){e.setAttribute("aria-hidden","false")},tooltipHiddenAttr:function(e){e.setAttribute("aria-hidden","true")}};for(var n in scheduler._waiAria)scheduler._waiAria[n]=function(e){return function(){return i()?" ":e.apply(this,arguments)}}(scheduler._waiAria[n])}(),dhtmlxEventable(scheduler),scheduler._detachDomEvent=function(e,t,i){e.removeEventListener?e.removeEventListener(t,i,!1):e.detachEvent&&e.detachEvent("on"+t,i); -},scheduler._init_once=function(){function e(e){for(var t=document.body;e&&e!=t;)e=e.parentNode;return!(t!=e)}function t(){return{w:window.innerWidth||document.documentElement.clientWidth,h:window.innerHeight||document.documentElement.clientHeight}}function i(e,t){return e.w==t.w&&e.h==t.h}var r=t();dhtmlxEvent(window,"resize",function(){e(scheduler._obj)&&(window.clearTimeout(scheduler._resize_timer),scheduler._resize_timer=window.setTimeout(function(){var s=t();if(!i(r,s)){if(!e(scheduler._obj))return; -scheduler.callEvent("onSchedulerResize",[])&&(scheduler.update_view(),scheduler.callEvent("onAfterSchedulerResize",[]))}r=s},20))}),scheduler._init_once=function(){}},scheduler.init=function(e,t,i){t=t||scheduler._currentDate(),i=i||"week",this._obj&&this.unset_actions(),this._obj="string"==typeof e?document.getElementById(e):e,this.$container=this._obj,this.config.wai_aria_attributes&&this.config.wai_aria_application_role&&this.$container.setAttribute("role","application"),this._skin_init&&scheduler._skin_init(), -scheduler.date.init(),this._els=[],this._scroll=!0,this._quirks=_isIE&&"BackCompat"==document.compatMode,this._quirks7=_isIE&&-1==navigator.appVersion.indexOf("MSIE 8"),this.get_elements(),this.init_templates(),this.set_actions(),this._init_once(),this._init_touch_events(),this.set_sizes(),scheduler.callEvent("onSchedulerReady",[]),this.setCurrentView(t,i)},scheduler.xy={min_event_height:40,scale_width:50,scroll_width:18,scale_height:20,month_scale_height:20,menu_width:25,margin_top:0,margin_left:0, -editor_width:140,month_head_height:22,event_header_height:14},scheduler.keys={edit_save:13,edit_cancel:27},scheduler.set_sizes=function(){var e=this._x=this._obj.clientWidth-this.xy.margin_left,t=this._y=this._obj.clientHeight-this.xy.margin_top,i=this._table_view?0:this.xy.scale_width+this.xy.scroll_width,r=this._table_view?-1:this.xy.scale_width,s=this.$container.querySelector(".dhx_cal_scale_placeholder");scheduler._is_material_skin()?(s||(s=document.createElement("div"),s.className="dhx_cal_scale_placeholder", -this.$container.insertBefore(s,this._els.dhx_cal_header[0])),s.style.display="block",this.set_xy(s,e,this.xy.scale_height+1,0,this.xy.nav_height+(this._quirks?-1:1))):s&&s.parentNode.removeChild(s),this.set_xy(this._els.dhx_cal_navline[0],e,this.xy.nav_height,0,0),this.set_xy(this._els.dhx_cal_header[0],e-i,this.xy.scale_height,r,this.xy.nav_height+(this._quirks?-1:1));var a=this._els.dhx_cal_navline[0].offsetHeight;a>0&&(this.xy.nav_height=a);var n=this.xy.scale_height+this.xy.nav_height+(this._quirks?-2:0); -this.set_xy(this._els.dhx_cal_data[0],e,t-(n+2),0,n+2)},scheduler.set_xy=function(e,t,i,r,s){e.style.width=Math.max(0,t)+"px",e.style.height=Math.max(0,i)+"px",arguments.length>3&&(e.style.left=r+"px",e.style.top=s+"px")},scheduler.get_elements=function(){for(var e=this._obj.getElementsByTagName("DIV"),t=0;t500&&scheduler.unselect()},dhx_cal_prev_button:function(){scheduler._click.dhx_cal_next_button(0,-1)},dhx_cal_next_button:function(e,t){scheduler.setCurrentView(scheduler.date.add(scheduler.date[scheduler._mode+"_start"](scheduler._date),t||1,scheduler._mode)); -},dhx_cal_today_button:function(){scheduler.callEvent("onBeforeTodayDisplayed",[])&&scheduler.setCurrentView(scheduler._currentDate())},dhx_cal_tab:function(){var e=this.getAttribute("name"),t=e.substring(0,e.search("_tab"));scheduler.setCurrentView(scheduler._date,t)},buttons:{"delete":function(e){var t=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(t,scheduler.locale.labels.title_confirm_deleting,function(){scheduler.deleteEvent(e)})},edit:function(e){scheduler.edit(e)},save:function(e){ -scheduler.editStop(!0)},details:function(e){scheduler.showLightbox(e)},cancel:function(e){scheduler.editStop(!1)}}},scheduler._dhtmlx_confirm=function(e,t,i){if(!e)return i();var r={text:e};t&&(r.title=t),i&&(r.callback=function(e){e&&i()}),dhtmlx.confirm(r)},scheduler.addEventNow=function(e,t,i){var r={};scheduler._isObject(e)&&!scheduler._isDate(e)&&(r=e,e=null);var s=6e4*(this.config.event_duration||this.config.time_step);e||(e=r.start_date||Math.round(scheduler._currentDate().valueOf()/s)*s);var a=new Date(e); -if(!t){var n=this.config.first_hour;n>a.getHours()&&(a.setHours(n),e=a.valueOf()),t=e.valueOf()+s}var d=new Date(t);a.valueOf()==d.valueOf()&&d.setTime(d.valueOf()+s),r.start_date=r.start_date||a,r.end_date=r.end_date||d,r.text=r.text||this.locale.labels.new_event,r.id=this._drag_id=r.id||this.uid(),this._drag_mode="new-size",this._loading=!0;var o=this.addEvent(r);return this.callEvent("onEventCreated",[this._drag_id,i]),this._loading=!1,this._drag_event={},this._on_mouse_up(i),o},scheduler._on_dbl_click=function(e,t){ -if(t=t||e.target||e.srcElement,!this.config.readonly){var i=scheduler._getClassName(t).split(" ")[0];switch(i){case"dhx_scale_holder":case"dhx_scale_holder_now":case"dhx_month_body":case"dhx_wa_day_data":if(!scheduler.config.dblclick_create)break;this.addEventNow(this.getActionData(e).date,null,e);break;case"dhx_cal_event":case"dhx_wa_ev_body":case"dhx_agenda_line":case"dhx_grid_event":case"dhx_cal_event_line":case"dhx_cal_event_clear":var r=this._locate_event(t);if(!this.callEvent("onDblClick",[r,e]))return; -this.config.details_on_dblclick||this._table_view||!this.getEvent(r)._timed||!this.config.select?this.showLightbox(r):this.edit(r);break;case"dhx_time_block":case"dhx_cal_container":return;default:var s=this["dblclick_"+i];if(s)s.call(this,e);else if(t.parentNode&&t!=this)return scheduler._on_dbl_click(e,t.parentNode)}}},scheduler._get_column_index=function(e){var t=0;if(this._cols){for(var i=0,r=0;i+this._cols[r]=this._cols.length)for(;t>=1&&this._ignores[Math.floor(t)];)t--}return t},scheduler._week_indexes_from_pos=function(e){if(this._cols){var t=this._get_column_index(e.x);return e.x=Math.min(this._cols.length-1,Math.max(0,Math.ceil(t)-1)),e.y=Math.max(0,Math.ceil(60*e.y/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step),e}return e},scheduler._mouse_coords=function(e){var t,i=document.body,r=document.documentElement;t=_isIE||!e.pageX&&!e.pageY?{ -x:e.clientX+(i.scrollLeft||r.scrollLeft||0)-i.clientLeft,y:e.clientY+(i.scrollTop||r.scrollTop||0)-i.clientTop}:{x:e.pageX,y:e.pageY},t.x-=this.$domHelpers.getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width),t.y-=this.$domHelpers.getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els.dhx_cal_data[0].scrollTop,t.ev=e;var s=this["mouse_"+this._mode];if(s)t=s.call(this,t);else if(this._table_view){var a=this._get_column_index(t.x);if(!this._cols||!this._colsS)return t; -var n=0;for(n=1;nt.y);n++);t.y=Math.ceil(24*(Math.max(0,a)+7*Math.max(0,n-1))*60/this.config.time_step),(scheduler._drag_mode||"month"==this._mode)&&(t.y=24*(Math.max(0,Math.ceil(a)-1)+7*Math.max(0,n-1))*60/this.config.time_step),"move"==this._drag_mode&&scheduler._ignores_detected&&scheduler.config.preserve_length&&(t._ignores=!0,this._drag_event._event_length||(this._drag_event._event_length=this._get_real_event_length(this._drag_event.start_date,this._drag_event.end_date,{ -x_step:1,x_unit:"day"}))),t.x=0}else t=this._week_indexes_from_pos(t);return t.timestamp=+new Date,t},scheduler._close_not_saved=function(){if((new Date).valueOf()-(scheduler._new_event||0)>500&&scheduler._edit_id){var e=scheduler.locale.labels.confirm_closing;scheduler._dhtmlx_confirm(e,scheduler.locale.labels.title_confirm_closing,function(){scheduler.editStop(scheduler.config.positive_closing)}),e&&(this._drag_id=this._drag_pos=this._drag_mode=null)}},scheduler._correct_shift=function(e,t){return e-=6e4*(new Date(scheduler._min_date).getTimezoneOffset()-new Date(e).getTimezoneOffset())*(t?-1:1); -},scheduler._is_pos_changed=function(e,t){function i(e,t,i){return!!(Math.abs(e-t)>i)}if(!e||!this._drag_pos)return!0;var r=100,s=5;return!!(this._drag_pos.has_moved||!this._drag_pos.timestamp||t.timestamp-this._drag_pos.timestamp>r||i(e.ev.clientX,t.ev.clientX,s)||i(e.ev.clientY,t.ev.clientY,s))},scheduler._correct_drag_start_date=function(e){var t;scheduler.matrix&&(t=scheduler.matrix[scheduler._mode]),t=t||{x_step:1,x_unit:"day"},e=new Date(e);var i=1;return(t._start_correction||t._end_correction)&&(i=60*(t.last_hour||0)-(60*e.getHours()+e.getMinutes())||1), -1*e+(scheduler._get_fictional_event_length(e,i,t)-i)},scheduler._correct_drag_end_date=function(e,t){var i;scheduler.matrix&&(i=scheduler.matrix[scheduler._mode]),i=i||{x_step:1,x_unit:"day"};var r=1*e+scheduler._get_fictional_event_length(e,t,i);return new Date(1*r-(scheduler._get_fictional_event_length(r,-1,i,-1)+1))},scheduler._on_mouse_move=function(e){if(this._drag_mode){var t=this._mouse_coords(e);if(this._is_pos_changed(this._drag_pos,t)){var i,r;if(this._edit_id!=this._drag_id&&this._close_not_saved(), -!this._drag_mode)return;var s=null;if(this._drag_pos&&!this._drag_pos.has_moved&&(s=this._drag_pos,s.has_moved=!0),this._drag_pos=t,this._drag_pos.has_moved=!0,"create"==this._drag_mode){if(s&&(t=s),this._close_not_saved(),this.unselect(this._select_id),this._loading=!0,i=this._get_date_from_pos(t).valueOf(),!this._drag_start){var a=this.callEvent("onBeforeEventCreated",[e,this._drag_id]);return a?(this._loading=!1,void(this._drag_start=i)):void(this._loading=!1)}r=i,r==this._drag_start;var n=new Date(this._drag_start),d=new Date(r); -"day"!=this._mode&&"week"!=this._mode||n.getHours()!=d.getHours()||n.getMinutes()!=d.getMinutes()||(d=new Date(this._drag_start+1e3)),this._drag_id=this.uid(),this.addEvent(n,d,this.locale.labels.new_event,this._drag_id,t.fields),this.callEvent("onEventCreated",[this._drag_id,e]),this._loading=!1,this._drag_mode="new-size"}var o,l=this.getEvent(this._drag_id);if(scheduler.matrix&&(o=scheduler.matrix[scheduler._mode]),o=o||{x_step:1,x_unit:"day"},"move"==this._drag_mode)i=this._min_date.valueOf()+6e4*(t.y*this.config.time_step+24*t.x*60-(scheduler._move_pos_shift||0)), -!t.custom&&this._table_view&&(i+=1e3*this.date.time_part(l.start_date)),i=this._correct_shift(i),t._ignores&&this.config.preserve_length&&this._table_view?(i=scheduler._correct_drag_start_date(i),r=scheduler._correct_drag_end_date(i,this._drag_event._event_length)):r=l.end_date.valueOf()-(l.start_date.valueOf()-i);else{if(i=l.start_date.valueOf(),r=l.end_date.valueOf(),this._table_view){var h=this._min_date.valueOf()+t.y*this.config.time_step*6e4+(t.custom?0:864e5);if("month"==this._mode)if(h=this._correct_shift(h,!1), -this._drag_from_start){var _=864e5;h<=scheduler.date.date_part(new Date(r+_-1)).valueOf()&&(i=h-_)}else r=h;else this.config.preserve_length?t.resize_from_start?i=scheduler._correct_drag_start_date(h):r=scheduler._correct_drag_end_date(h,0):t.resize_from_start?i=h:r=h}else{var c=this.date.date_part(new Date(l.end_date.valueOf()-1)).valueOf(),u=new Date(c);r=c+t.y*this.config.time_step*6e4,r+=6e4*(new Date(r).getTimezoneOffset()-u.getTimezoneOffset()),this._els.dhx_cal_data[0].style.cursor="s-resize", -("week"==this._mode||"day"==this._mode)&&(r=this._correct_shift(r))}if("new-size"==this._drag_mode)if(r<=this._drag_start){var g=t.shift||(this._table_view&&!t.custom?864e5:0);i=r-(t.shift?0:g),r=this._drag_start+(g||6e4*this.config.time_step)}else i=this._drag_start;else i>=r&&(r=i+6e4*this.config.time_step)}var f=new Date(r-1),v=new Date(i);if("move"==this._drag_mode&&scheduler.config.limit_drag_out&&(+v<+scheduler._min_date||+r>+scheduler._max_date)){if(+l.start_date<+scheduler._min_date||+l.end_date>+scheduler._max_date)v=new Date(l.start_date), -r=new Date(l.end_date);else{var m=r-v;+v<+scheduler._min_date?(v=new Date(scheduler._min_date),t._ignores&&this.config.preserve_length&&this._table_view?(v=new Date(scheduler._correct_drag_start_date(v)),o._start_correction&&(v=new Date(v.valueOf()+o._start_correction)),r=new Date(1*v+this._get_fictional_event_length(v,this._drag_event._event_length,o))):r=new Date(+v+m)):(r=new Date(scheduler._max_date),t._ignores&&this.config.preserve_length&&this._table_view?(o._end_correction&&(r=new Date(r.valueOf()-o._end_correction)), -r=new Date(1*r-this._get_fictional_event_length(r,0,o,!0)),v=new Date(1*r-this._get_fictional_event_length(r,this._drag_event._event_length,o,!0)),this._ignores_detected&&(v=scheduler.date.add(v,o.x_step,o.x_unit),r=new Date(1*r-this._get_fictional_event_length(r,0,o,!0)),r=scheduler.date.add(r,o.x_step,o.x_unit))):v=new Date(+r-m))}var f=new Date(r-1)}if(!this._table_view&&!scheduler.config.all_timed&&(!scheduler._get_section_view()&&t.x!=this._get_event_sday({start_date:new Date(r),end_date:new Date(r) -})||new Date(r).getHours()>=this.config.last_hour)){var m=r-v,_=this._min_date.valueOf()+24*t.x*60*6e4;r=scheduler.date.date_part(new Date(_)),r.setHours(this.config.last_hour),f=new Date(r-1),"move"==this._drag_mode&&(v=new Date(+r-m))}if(this._table_view||f.getDate()==v.getDate()&&f.getHours()n;n++)this._ignores[n]?(this._cols[n]=0,a++):this._cols[n]=Math.floor(r/(a-n)),r-=this._cols[n],this._colsS[n]=(this._cols[n-1]||0)+(this._colsS[n-1]||(this._table_view?0:this.xy.scale_width+2));this._colsS.col_length=s,this._colsS[s]=this._cols[s-1]+this._colsS[s-1]||0},scheduler._set_scale_col_size=function(e,t,i){var r=this.config;this.set_xy(e,t-1,r.hour_size_px*(r.last_hour-r.first_hour),i+this.xy.scale_width+1,0); -},scheduler._render_scales=function(e,t){var i=new Date(scheduler._min_date),r=new Date(scheduler._max_date),s=this.date.date_part(scheduler._currentDate()),a=parseInt(e.style.width,10),n=new Date(this._min_date),d=this._get_columns_num(i,r);this._calc_scale_sizes(a,i,r);var o=0;e.innerHTML="";for(var l=0;d>l;l++){if(this._ignores[l]||this._render_x_header(l,o,n,e),!this._table_view){var h=document.createElement("div"),_="dhx_scale_holder";n.valueOf()==s.valueOf()&&(_="dhx_scale_holder_now"),this._ignores_detected&&this._ignores[l]&&(_+=" dhx_scale_ignore"), -h.className=_+" "+this.templates.week_date_class(n,s),this._waiAria.dayColumnAttr(h,n),this._set_scale_col_size(h,this._cols[l],o),t.appendChild(h),this.callEvent("onScaleAdd",[h,n])}o+=this._cols[l],n=this.date.add(n,1,"day"),n=this.date.day_start(n)}},scheduler._reset_scale=function(){if(this.templates[this._mode+"_date"]){var e=this._els.dhx_cal_header[0],t=this._els.dhx_cal_data[0],i=this.config;e.innerHTML="",t.innerHTML="";var r=(i.readonly||!i.drag_resize?" dhx_resize_denied":"")+(i.readonly||!i.drag_move?" dhx_move_denied":""); -t.className="dhx_cal_data"+r,this._scales={},this._cols=[],this._colsS={height:0},this._dy_shift=0,this.set_sizes();var s,a,n=this._get_timeunit_start(),d=scheduler._get_view_end();s=a=this._table_view?scheduler.date.week_start(n):n,this._min_date=s;var o=this.templates[this._mode+"_date"](n,d,this._mode);if(this._els.dhx_cal_date[0].innerHTML=o,this._waiAria.navBarDateAttr(this._els.dhx_cal_date[0],o),this._max_date=d,scheduler._render_scales(e,t),this._table_view)this._reset_month_scale(t,n,a);else if(this._reset_hours_scale(t,n,a), -i.multi_day){var l="dhx_multi_day";this._els[l]&&(this._els[l][0].parentNode.removeChild(this._els[l][0]),this._els[l]=null);var h=this._els.dhx_cal_navline[0],_=h.offsetHeight+this._els.dhx_cal_header[0].offsetHeight+1,c=document.createElement("div");c.className=l,c.style.visibility="hidden",this.set_xy(c,Math.max(this._colsS[this._colsS.col_length]+this.xy.scroll_width-2,0),0,0,_),t.parentNode.insertBefore(c,t);var u=c.cloneNode(!0);u.className=l+"_icon",u.style.visibility="hidden",this.set_xy(u,this.xy.scale_width,0,0,_), -c.appendChild(u),this._els[l]=[c,u],this._els[l][0].onclick=this._click.dhx_cal_data}}},scheduler._reset_hours_scale=function(e,t,i){var r=document.createElement("div");r.className="dhx_scale_holder";for(var s=new Date(1980,1,1,this.config.first_hour,0,0),a=1*this.config.first_hour;ad;d++)a(n)&&(this._ignores_detected+=1,this._ignores[d]=!0,s&&t++),n=scheduler.date.add(n,r,i),scheduler.date[i+"_start"]&&(n=scheduler.date[i+"_start"](n))},scheduler._render_month_scale=function(e,t,i,r){function s(e){var t=scheduler._colsS.height;return void 0!==scheduler._colsS.heights[e+1]&&(t=scheduler._colsS.heights[e+1]-(scheduler._colsS.heights[e]||0)),t}var a=scheduler.date.add(t,1,"month"),n=new Date(i),d=scheduler._currentDate(); -this.date.date_part(d),this.date.date_part(i),r=r||Math.ceil(Math.round((a.valueOf()-i.valueOf())/864e5)/7);for(var o=[],l=0;7>=l;l++){var h=(this._cols[l]||0)-1;0===l&&this.config.left_border&&(h-=1),o[l]=h+"px"}var _=0,c=document.createElement("table");c.setAttribute("cellpadding","0"),c.setAttribute("cellspacing","0");var u=document.createElement("tbody");c.appendChild(u);for(var g=[],l=0;r>l;l++){var f=document.createElement("tr");u.appendChild(f);for(var v=Math.max(s(l)-scheduler.xy.month_head_height,0),m=0;7>m;m++){ -var p=document.createElement("td");f.appendChild(p);var x="";t>i?x="dhx_before":i>=a?x="dhx_after":i.valueOf()==d.valueOf()&&(x="dhx_now"),this._ignores_detected&&this._ignores[m]&&(x+=" dhx_scale_ignore"),p.className=x+" "+this.templates.month_date_class(i,d);var b="dhx_month_body",y="dhx_month_head";if(0===m&&this.config.left_border&&(b+=" dhx_month_body_border",y+=" dhx_month_head_border"),this._ignores_detected&&this._ignores[m])p.appendChild(document.createElement("div")),p.appendChild(document.createElement("div"));else{ -this._waiAria.monthCellAttr(p,i);var w=document.createElement("div");w.className=y,w.innerHTML=this.templates.month_day(i),p.appendChild(w);var D=document.createElement("div");D.className=b,D.style.height=v+"px",D.style.width=o[m],p.appendChild(D)}g.push(i);var E=i.getDate();i=this.date.add(i,1,"day"),i.getDate()-E>1&&(i=new Date(i.getFullYear(),i.getMonth(),E+1,12,0))}scheduler._colsS.heights[l]=_,_+=s(l)}this._min_date=n,this._max_date=i,e.innerHTML="",e.appendChild(c),this._scales={};for(var A=e.getElementsByTagName("div"),l=0;ld;){var l=scheduler.date.add(t,-i.x_step,i.x_unit);n&&n(t)&&(!o||o&&n(l))?s-=t-l:(o=!1,s-=a),t=l,r--}return s},scheduler._get_fictional_event_length=function(e,t,i,r){var s=new Date(e),a=r?-1:1;if(i._start_correction||i._end_correction){var n;n=r?60*s.getHours()+s.getMinutes()-60*(i.first_hour||0):60*(i.last_hour||0)-(60*s.getHours()+s.getMinutes());var d=60*(i.last_hour-i.first_hour),o=Math.ceil((t/6e4-n)/d);0>o&&(o=0),t+=o*(1440-d)*60*1e3}var l,h=new Date(1*e+t*a),_=this["ignore_"+this._mode],c=0; -for(i.render?(c=this._get_date_index(i,s),l=this._get_date_index(i,h)):l=Math.round(t/60/60/1e3/24);l*a>=c*a;){var u=scheduler.date.add(s,i.x_step*a,i.x_unit);_&&_(s)&&(t+=(u-s)*a,l+=a),s=u,c+=a}return t},scheduler._get_section_view=function(){return this.matrix&&this.matrix[this._mode]?this.matrix[this._mode]:this._props&&this._props[this._mode]?this._props[this._mode]:null},scheduler._get_section_property=function(){return this.matrix&&this.matrix[this._mode]?this.matrix[this._mode].y_property:this._props&&this._props[this._mode]?this._props[this._mode].map_to:null; -},scheduler._is_initialized=function(){var e=this.getState();return this._obj&&e.date&&e.mode},scheduler._is_lightbox_open=function(){var e=this.getState();return null!==e.lightbox_id&&void 0!==e.lightbox_id},scheduler._getClassName=function(e){if(!e)return"";var t=e.className||"";return t.baseVal&&(t=t.baseVal),t.indexOf||(t=""),t||""},scheduler.$domHelpers={getAbsoluteLeft:function(e){return this.getOffset(e).left},getAbsoluteTop:function(e){return this.getOffset(e).top},getOffsetSum:function(e){ -for(var t=0,i=0;e;)t+=parseInt(e.offsetTop),i+=parseInt(e.offsetLeft),e=e.offsetParent;return{top:t,left:i}},getOffsetRect:function(e){var t=e.getBoundingClientRect(),i=0,r=0;if(/Mobi/.test(navigator.userAgent)){var s=document.createElement("div");s.style.position="absolute",s.style.left="0px",s.style.top="0px",s.style.width="1px",s.style.height="1px",document.body.appendChild(s);var a=s.getBoundingClientRect();i=t.top-a.top,r=t.left-a.left,s.parentNode.removeChild(s)}else{var n=document.body,d=document.documentElement,o=window.pageYOffset||d.scrollTop||n.scrollTop,l=window.pageXOffset||d.scrollLeft||n.scrollLeft,h=d.clientTop||n.clientTop||0,_=d.clientLeft||n.clientLeft||0; -i=t.top+o-h,r=t.left+l-_}return{top:Math.round(i),left:Math.round(r)}},getOffset:function(e){return e.getBoundingClientRect?this.getOffsetRect(e):this.getOffsetSum(e)}},scheduler.$env={isIE:navigator.userAgent.indexOf("MSIE")>=0||navigator.userAgent.indexOf("Trident")>=0,isIE6:!window.XMLHttpRequest&&navigator.userAgent.indexOf("MSIE")>=0,isIE7:navigator.userAgent.indexOf("MSIE 7.0")>=0&&navigator.userAgent.indexOf("Trident")<0,isIE8:navigator.userAgent.indexOf("MSIE 8.0")>=0&&navigator.userAgent.indexOf("Trident")>=0, -isOpera:navigator.userAgent.indexOf("Opera")>=0,isChrome:navigator.userAgent.indexOf("Chrome")>=0,isKHTML:navigator.userAgent.indexOf("Safari")>=0||navigator.userAgent.indexOf("Konqueror")>=0,isFF:navigator.userAgent.indexOf("Firefox")>=0,isIPad:navigator.userAgent.search(/iPad/gi)>=0,isEdge:-1!=navigator.userAgent.indexOf("Edge")},scheduler.$ajax={_obj:scheduler,cache:!0,method:"get",parse:function(e){if("string"!=typeof e)return e;var t;return e=e.replace(/^[\s]+/,""),window.DOMParser&&!scheduler.$env.isIE?t=(new window.DOMParser).parseFromString(e,"text/xml"):window.ActiveXObject!==window.undefined&&(t=new window.ActiveXObject("Microsoft.XMLDOM"), -t.async="false",t.loadXML(e)),t},xmltop:function(e,t,i){if("undefined"==typeof t.status||t.status<400){var r=t.responseXML?t.responseXML||t:this.parse(t.responseText||t);if(r&&null!==r.documentElement&&!r.getElementsByTagName("parsererror").length)return r.getElementsByTagName(e)[0]}return-1!==i&&this._obj.callEvent("onLoadXMLError",["Incorrect XML",arguments[1],i]),document.createElement("DIV")},xpath:function(e,t){if(t.nodeName||(t=t.responseXML||t),scheduler.$env.isIE)return t.selectNodes(e)||[]; -for(var i,r=[],s=(t.ownerDocument||t).evaluate(e,t,null,XPathResult.ANY_TYPE,null);;){if(i=s.iterateNext(),!i)break;r.push(i)}return r},query:function(e){this._call(e.method||"GET",e.url,e.data||"",e.async||!0,e.callback,null,e.headers)},get:function(e,t){this._call("GET",e,null,!0,t)},getSync:function(e){return this._call("GET",e,null,!1)},put:function(e,t,i){this._call("PUT",e,t,!0,i)},del:function(e,t,i){this._call("DELETE",e,t,!0,i)},post:function(e,t,i){1==arguments.length?t="":2!=arguments.length||"function"!=typeof t&&"function"!=typeof window[t]?t=String(t):(i=t, -t=""),this._call("POST",e,t,!0,i)},postSync:function(e,t){return t=null===t?"":String(t),this._call("POST",e,t,!1)},getLong:function(e,t){this._call("GET",e,null,!0,t,{url:e})},postLong:function(e,t,i){2==arguments.length&&(i=t,t=""),this._call("POST",e,t,!0,i,{url:e,postData:t})},_call:function(e,t,i,r,s,a,n){var d=this._obj,o=window.XMLHttpRequest&&!d.$env.isIE?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),l=null!==navigator.userAgent.match(/AppleWebKit/)&&null!==navigator.userAgent.match(/Qt/)&&null!==navigator.userAgent.match(/Safari/); -if(r&&(o.onreadystatechange=function(){if(4==o.readyState||l&&3==o.readyState){if((200!=o.status||""===o.responseText)&&!d.callEvent("onAjaxError",[o]))return;window.setTimeout(function(){"function"==typeof s&&s.apply(window,[{xmlDoc:o,filePath:t}]),a&&("undefined"!=typeof a.postData?this.postLong(a.url,a.postData,s):this.getLong(a.url,s)),s=null,o=null},1)}}),"GET"!=e||this.cache||(t+=(t.indexOf("?")>=0?"&":"?")+"dhxr"+(new Date).getTime()+"=1"),o.open(e,t,r),n)for(var h in n)o.setRequestHeader(h,n[h]);else"POST"==e.toUpperCase()||"PUT"==e||"DELETE"==e?o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"):"GET"==e&&(i=null); -return o.setRequestHeader("X-Requested-With","XMLHttpRequest"),o.send(i),r?void 0:{xmlDoc:o,filePath:t}},urlSeparator:function(e){return-1!=e.indexOf("?")?"&":"?"}},scheduler.date={init:function(){for(var e=scheduler.locale.date.month_short,t=scheduler.locale.date.month_short_hash={},i=0;i0){var r=+i-+e,s=r%864e5;if(s&&e.getTimezoneOffset()==i.getTimezoneOffset()){var a=s/36e5;i.setTime(i.getTime()+60*(24-a)*60*1e3)}}return t>=0&&!e.getHours()&&i.getHours()&&(i.getDate()e?"0"+e:e},copy:function(e){return new Date(e.valueOf())},date_to_str:function(e,t){return e=e.replace(/%[a-zA-Z]/g,function(e){ -switch(e){case"%d":return'"+scheduler.date.to_fixed(date.getDate())+"';case"%m":return'"+scheduler.date.to_fixed((date.getMonth()+1))+"';case"%j":return'"+date.getDate()+"';case"%n":return'"+(date.getMonth()+1)+"';case"%y":return'"+scheduler.date.to_fixed(date.getFullYear()%100)+"';case"%Y":return'"+date.getFullYear()+"';case"%D":return'"+scheduler.locale.date.day_short[date.getDay()]+"';case"%l":return'"+scheduler.locale.date.day_full[date.getDay()]+"';case"%M":return'"+scheduler.locale.date.month_short[date.getMonth()]+"'; -case"%F":return'"+scheduler.locale.date.month_full[date.getMonth()]+"';case"%h":return'"+scheduler.date.to_fixed((date.getHours()+11)%12+1)+"';case"%g":return'"+((date.getHours()+11)%12+1)+"';case"%G":return'"+date.getHours()+"';case"%H":return'"+scheduler.date.to_fixed(date.getHours())+"';case"%i":return'"+scheduler.date.to_fixed(date.getMinutes())+"';case"%a":return'"+(date.getHours()>11?"pm":"am")+"';case"%A":return'"+(date.getHours()>11?"PM":"AM")+"';case"%s":return'"+scheduler.date.to_fixed(date.getSeconds())+"'; -case"%W":return'"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+"';default:return e}}),t&&(e=e.replace(/date\.get/g,"date.getUTC")),new Function("date",'return "'+e+'";')},str_to_date:function(e,t){for(var i="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",r=e.match(/%[a-zA-Z]/g),s=0;s50?1900:2000);";break;case"%g": -case"%G":case"%h":case"%H":i+="set[3]=temp["+s+"]||0;";break;case"%i":i+="set[4]=temp["+s+"]||0;";break;case"%Y":i+="set[0]=temp["+s+"]||0;";break;case"%a":case"%A":i+="set[3]=set[3]%12+((temp["+s+"]||'').toLowerCase()=='am'?0:12);";break;case"%s":i+="set[5]=temp["+s+"]||0;";break;case"%M":i+="set[1]=scheduler.locale.date.month_short_hash[temp["+s+"]]||0;";break;case"%F":i+="set[1]=scheduler.locale.date.month_full_hash[temp["+s+"]]||0;"}var a="set[0],set[1],set[2],set[3],set[4],set[5]";return t&&(a=" Date.UTC("+a+")"), -new Function("date","var set=[0,0,1,0,0,0]; "+i+" return new Date("+a+");")},getISOWeek:function(e){if(!e)return!1;e=this.date_part(new Date(e));var t=e.getDay();0===t&&(t=7);var i=new Date(e.valueOf());i.setDate(e.getDate()+(4-t));var r=i.getFullYear(),s=Math.round((i.getTime()-new Date(r,0,1).getTime())/864e5),a=1+Math.floor(s/7);return a},getUTCISOWeek:function(e){return this.getISOWeek(this.convert_to_utc(e))},convert_to_utc:function(e){return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()); -}},scheduler.locale={date:{month_full:["January","February","March","April","May","June","July","August","September","October","November","December"],month_short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],day_full:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],day_short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},labels:{dhx_cal_today_button:"Today",day_tab:"Day",week_tab:"Week",month_tab:"Month",new_event:"New event",icon_save:"Save",icon_cancel:"Cancel", -icon_details:"Details",icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Event will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",full_day:"Full day",confirm_recurring:"Do you want to edit the whole set of repeated events?",section_recurring:"Repeat event",button_recurring:"Disabled",button_recurring_open:"Enabled",button_edit_series:"Edit series",button_edit_occurrence:"Edit occurrence",agenda_tab:"Agenda",date:"Date", -description:"Description",year_tab:"Year",week_agenda_tab:"Agenda",grid_tab:"Grid",drag_to_create:"Drag to create",drag_to_move:"Drag to move",message_ok:"OK",message_cancel:"Cancel",next:"Next",prev:"Previous",year:"Year",month:"Month",day:"Day",hour:"Hour",minute:"Minute"}},scheduler.config={default_date:"%j %M %Y",month_date:"%F %Y",load_date:"%Y-%m-%d",week_date:"%l",day_date:"%D, %F %j",hour_date:"%H:%i",month_day:"%d",xml_date:"%m/%d/%Y %H:%i",api_date:"%d-%m-%Y %H:%i",preserve_length:!0,time_step:5, -start_on_monday:1,first_hour:0,last_hour:24,readonly:!1,drag_resize:1,drag_move:1,drag_create:1,dblclick_create:1,edit_on_create:1,details_on_create:0,resize_month_events:!1,resize_month_timed:!1,cascade_event_display:!1,cascade_event_count:4,cascade_event_margin:30,multi_day:!0,multi_day_height_limit:0,drag_lightbox:!0,preserve_scroll:!0,select:!0,server_utc:!1,touch:!0,touch_tip:!0,touch_drag:500,quick_info_detached:!0,positive_closing:!1,drag_highlight:!0,limit_drag_out:!1,icons_edit:["icon_save","icon_cancel"], -icons_select:["icon_details","icon_edit","icon_delete"],buttons_left:["dhx_save_btn","dhx_cancel_btn"],buttons_right:["dhx_delete_btn"],lightbox:{sections:[{name:"description",map_to:"text",type:"textarea",focus:!0},{name:"time",height:72,type:"time",map_to:"auto"}]},highlight_displayed_event:!0,left_border:!1,ajax_error:"alert",delay_render:0,timeline_swap_resize:!0,wai_aria_attributes:!0,wai_aria_application_role:!0},scheduler.config.buttons_left.$inital=scheduler.config.buttons_left.join(),scheduler.config.buttons_right.$inital=scheduler.config.buttons_right.join(), -scheduler.templates={},scheduler.init_templates=function(){var e=scheduler.locale.labels;e.dhx_save_btn=e.icon_save,e.dhx_cancel_btn=e.icon_cancel,e.dhx_delete_btn=e.icon_delete;var t=scheduler.date.date_to_str,i=scheduler.config,r=function(e,t){for(var i in t)e[i]||(e[i]=t[i])};r(scheduler.templates,{day_date:t(i.default_date),month_date:t(i.month_date),week_date:function(e,t){return scheduler.templates.day_date(e)+" – "+scheduler.templates.day_date(scheduler.date.add(t,-1,"day"))},day_scale_date:t(i.default_date), -month_scale_date:t(i.week_date),week_scale_date:t(i.day_date),hour_scale:t(i.hour_date),time_picker:t(i.hour_date),event_date:t(i.hour_date),month_day:t(i.month_day),xml_date:scheduler.date.str_to_date(i.xml_date,i.server_utc),load_format:t(i.load_date),xml_format:t(i.xml_date,i.server_utc),api_date:scheduler.date.str_to_date(i.api_date),event_header:function(e,t,i){return scheduler.templates.event_date(e)+" - "+scheduler.templates.event_date(t)},event_text:function(e,t,i){return i.text},event_class:function(e,t,i){ -return""},month_date_class:function(e){return""},week_date_class:function(e){return""},event_bar_date:function(e,t,i){return scheduler.templates.event_date(e)+" "},event_bar_text:function(e,t,i){return i.text},month_events_link:function(e,t){return"View more("+t+" events)"},drag_marker_class:function(e,t,i){return""},drag_marker_content:function(e,t,i){return""},tooltip_date_format:scheduler.date.date_to_str("%Y-%m-%d %H:%i"),tooltip_text:function(e,t,i){return"Event: "+i.text+"
    Start date: "+scheduler.templates.tooltip_date_format(e)+"
    End date: "+scheduler.templates.tooltip_date_format(t); -}}),this.callEvent("onTemplatesReady",[])},scheduler.uid=function(){return this._seed||(this._seed=(new Date).valueOf()),this._seed++},scheduler._events={},scheduler.clearAll=function(){this._events={},this._loaded={},this._edit_id=null,this._select_id=null,this._drag_id=null,this._drag_mode=null,this._drag_pos=null,this.clear_view(),this.callEvent("onClearAll",[])},scheduler.addEvent=function(e,t,i,r,s){if(!arguments.length)return this.addEventNow();var a=e;1!=arguments.length&&(a=s||{},a.start_date=e, -a.end_date=t,a.text=i,a.id=r),a.id=a.id||scheduler.uid(),a.text=a.text||"","string"==typeof a.start_date&&(a.start_date=this.templates.api_date(a.start_date)),"string"==typeof a.end_date&&(a.end_date=this.templates.api_date(a.end_date));var n=6e4*(this.config.event_duration||this.config.time_step);a.start_date.valueOf()==a.end_date.valueOf()&&a.end_date.setTime(a.end_date.valueOf()+n),a._timed=this.isOneDayEvent(a);var d=!this._events[a.id];return this._events[a.id]=a,this.event_updated(a),this._loading||this.callEvent(d?"onEventAdded":"onEventChanged",[a.id,a]), -a.id},scheduler.deleteEvent=function(e,t){var i=this._events[e];(t||this.callEvent("onBeforeEventDelete",[e,i])&&this.callEvent("onConfirmedBeforeEventDelete",[e,i]))&&(i&&(this._select_id=null,delete this._events[e],this.event_updated(i),this._drag_id==i.id&&(this._drag_id=null,this._drag_mode=null,this._drag_pos=null)),this.callEvent("onEventDeleted",[e,i]))},scheduler.getEvent=function(e){return this._events[e]},scheduler.setEvent=function(e,t){t.id||(t.id=e),this._events[e]=t},scheduler.for_rendered=function(e,t){ -for(var i=this._rendered.length-1;i>=0;i--)this._rendered[i].getAttribute("event_id")==e&&t(this._rendered[i],i)},scheduler.changeEventId=function(e,t){if(e!=t){var i=this._events[e];i&&(i.id=t,this._events[t]=i,delete this._events[e]),this.for_rendered(e,function(e){e.setAttribute("event_id",t)}),this._select_id==e&&(this._select_id=t),this._edit_id==e&&(this._edit_id=t),this.callEvent("onEventIdChange",[e,t])}},function(){for(var e=["text","Text","start_date","StartDate","end_date","EndDate"],t=function(e){ -return function(t){return scheduler.getEvent(t)[e]}},i=function(e){return function(t,i){var r=scheduler.getEvent(t);r[e]=i,r._changed=!0,r._timed=this.isOneDayEvent(r),scheduler.event_updated(r,!0)}},r=0;rs||a>r)&&(i>=s||a>i));if(n)return!0;var d=(e.end_date.valueOf()-e.start_date.valueOf())/36e5,o=24-(this.config.last_hour-this.config.first_hour);return!!(d>o||s>i&&r>=a)}return!1},scheduler.isOneDayEvent=function(e){var t=e.end_date.getDate()-e.start_date.getDate();return t?(0>t&&(t=Math.ceil((e.end_date.valueOf()-e.start_date.valueOf())/864e5)), -1==t&&!e.end_date.getHours()&&!e.end_date.getMinutes()&&(e.start_date.getHours()||e.start_date.getMinutes())):e.start_date.getMonth()==e.end_date.getMonth()&&e.start_date.getFullYear()==e.end_date.getFullYear()},scheduler.get_visible_events=function(e){var t=[];for(var i in this._events)this.is_visible_events(this._events[i])&&(!e||this._events[i]._timed)&&this.filter_event(i,this._events[i])&&t.push(this._events[i]);return t},scheduler.filter_event=function(e,t){var i=this["filter_"+this._mode];return i?i(e,t):!0; -},scheduler._is_main_area_event=function(e){return!!e._timed},scheduler.render_view_data=function(e,t){var i=!1;if(!e){if(i=!0,this._not_render)return void(this._render_wait=!0);this._render_wait=!1,this.clear_view(),e=this.get_visible_events(!(this._table_view||this.config.multi_day))}for(var r=0,s=e.length;s>r;r++)this._recalculate_timed(e[r]);if(this.config.multi_day&&!this._table_view){for(var a=[],n=[],r=0;rl){var h=l;1*this.config.max_month_events!==this.config.max_month_events||s[d]<=this.config.max_month_events?h=s[d]*i:(this.config.max_month_events+1)*i>l&&(h=(this.config.max_month_events+1)*i);for(var _=0;_t.id?1:-1:e.start_date>t.start_date?1:-1});var i=[],r=[];this._min_mapped_duration=Math.ceil(60*this.xy.min_event_height/this.config.hour_size_px); -for(var s=0;sp&&(p=h[f]._sorder);a._sorder=p+1,a._inner=!1}else a._sorder=0;h.splice(u,u==h.length?0:1,a),h.length>(h.max_count||0)?(h.max_count=h.length, -a._count=h.length):a._count=a._count?a._count:1}(o=this.config.last_hour)&&(r.push(a),e[s]=a=this._copy_event(a),o=this.config.last_hour&&(a.end_date.setMinutes(0),a.end_date.setHours(this.config.last_hour)),a.start_date>a.end_date||o==this.config.last_hour)&&(e.splice(s,1),s--)}}if(!t){for(var s=0;st.id?1:-1:e.start_date>t.start_date?1:-1})},scheduler._pre_render_events_table=function(e,t){this._time_order(e);for(var i,r=[],s=[[],[],[],[],[],[],[]],a=this._colsS.heights,n=this._cols.length,d={},o=0;othis._max_date&&(_.last_chunk=!1,u=this._max_date);var g=this.locate_holder_day(c,!1,l);if(l._sday=g%n,!this._ignores[l._sday]||!l._timed){var f=this.locate_holder_day(u,!0,l)||n;l._eday=f%n||n,l._length=f-g,l._sweek=Math.floor((this._correct_shift(c.valueOf(),1)-this._min_date.valueOf())/(864e5*n));var v,m=s[l._sweek];for(v=0;v",this._quirks7&&(v.firstChild.style.height=n-12+"px"),this._editor=v.firstChild, -this._editor.onkeydown=function(e){if((e||event).shiftKey)return!0;var t=(e||event).keyCode;t==scheduler.keys.edit_save&&scheduler.editStop(!0),t==scheduler.keys.edit_cancel&&scheduler.editStop(!1),(t==scheduler.keys.edit_save||t==scheduler.keys.edit_cancel)&&e.preventDefault&&e.preventDefault()},this._editor.onselectstart=function(e){return(e||event).cancelBubble=!0,!0},scheduler._focus(v.firstChild,!0),this._els.dhx_cal_data[0].scrollLeft=0}if(0!==this.xy.menu_width&&this._select_id==e.id){this.config.cascade_event_display&&this._drag_mode&&(g.style.zIndex=1); -for(var m,p=this.config["icons_"+(this._edit_id==e.id?"edit":"select")],x="",b=e.color?"background-color: "+e.color+";":"",y=e.textColor?"color: "+e.textColor+";":"",w=0;w
    ";var D=this._render_v_bar(e,h-t+1,a,t,20*p.length+26-2,"","
    ",x,!0);D.style.left=h-t+1,this._els.dhx_cal_data[0].appendChild(D), -this._rendered.push(D)}this.config.drag_highlight&&this._drag_id==e.id&&this.highlightEventPosition(e)}}},scheduler._render_v_bar=function(e,t,i,r,s,a,n,d,o){var l=document.createElement("div"),h=e.id,_=o?"dhx_cal_event dhx_cal_select_menu":"dhx_cal_event",c=scheduler.getState();c.drag_id==e.id&&(_+=" dhx_cal_event_drag"),c.select_id==e.id&&(_+=" dhx_cal_event_selected");var u=scheduler.templates.event_class(e.start_date,e.end_date,e);u&&(_=_+" "+u),this.config.cascade_event_display&&(_+=" dhx_cal_event_cascade"); -var g=e.color?"background-color:"+e.color+";":"",f=e.textColor?"color:"+e.textColor+";":"",v=scheduler._border_box_bvents(),m=r-2,p=v?m:r-4,x=v?m:r-6,b=v?m:r-(this._quirks?4:14),y=v?m-2:r-8,w=v?s-this.xy.event_header_height-1:s-(this._quirks?20:30)+1,D='
    ';l.innerHTML=D;var E=l.cloneNode(!0).firstChild;if(!o&&scheduler.renderEvent(E,e,r,s,n,d))return E;E=l.firstChild; -var A='
     
    ';A+='
    '+n+"
    ",A+='
    '+d+"
    ";var k="dhx_event_resize dhx_footer";return o&&(k="dhx_resize_denied "+k),A+='
    ',E.innerHTML=A,E},scheduler.renderEvent=function(){return!1},scheduler.locate_holder=function(e){ -return"day"==this._mode?this._els.dhx_cal_data[0].firstChild:this._els.dhx_cal_data[0].childNodes[e]},scheduler.locate_holder_day=function(e,t){var i=Math.floor((this._correct_shift(e,1)-this._min_date)/864e5);return t&&this.date.time_part(e)&&i++,i},scheduler._get_dnd_order=function(e,t,i){if(!this._drag_event)return e;this._drag_event._orig_sorder?e=this._drag_event._orig_sorder:this._drag_event._orig_sorder=e;for(var r=t*e;r+t>i;)e--,r-=t;return e=Math.max(e,0)},scheduler._get_event_bar_pos=function(e){ -var t=this._colsS[e._sday],i=this._colsS[e._eday];i==t&&(i=this._colsS[e._eday+1]);var r=this.xy.bar_height,s=e._sorder;if(e.id==this._drag_id){var a=this._colsS.heights[e._sweek+1]-this._colsS.heights[e._sweek]-this.xy.month_head_height;s=scheduler._get_dnd_order(s,r,a)}var n=s*r,d=this._colsS.heights[e._sweek]+(this._colsS.height?this.xy.month_scale_height+2:2)+n;return{x:t,x2:i,y:d}},scheduler.render_event_bar=function(e){var t=this._rendered_location,i=this._get_event_bar_pos(e),r=i.y,s=i.x,a=i.x2,n=""; -if(a){var d=scheduler.config.resize_month_events&&"month"==this._mode&&(!e._timed||scheduler.config.resize_month_timed),o=document.createElement("div"),l=e.hasOwnProperty("_first_chunk")&&e._first_chunk,h=e.hasOwnProperty("_last_chunk")&&e._last_chunk,_=d&&(e._timed||l),c=d&&(e._timed||h),u="dhx_cal_event_clear";(!e._timed||d)&&(u="dhx_cal_event_line"),l&&(u+=" dhx_cal_event_line_start"),h&&(u+=" dhx_cal_event_line_end"),_&&(n+="
    "),c&&(n+="
    "); -var g=scheduler.templates.event_class(e.start_date,e.end_date,e);g&&(u+=" "+g);var f=e.color?"background:"+e.color+";":"",v=e.textColor?"color:"+e.textColor+";":"",m=["position:absolute","top:"+r+"px","left:"+s+"px","width:"+(a-s-15)+"px",v,f,e._text_style||""].join(";"),p="
    ";d&&(p+=n),"month"==scheduler.getState().mode&&(e=scheduler.getEvent(e.id)),e._timed&&(p+=scheduler.templates.event_bar_date(e.start_date,e.end_date,e)), -p+=scheduler.templates.event_bar_text(e.start_date,e.end_date,e)+"
    ",p+="",o.innerHTML=p,this._rendered.push(o.firstChild),t.appendChild(o.firstChild)}},scheduler._locate_event=function(e){for(var t=null;e&&!t&&e.getAttribute;)t=e.getAttribute("event_id"),e=e.parentNode;return t},scheduler._locate_css=function(e,t,i){void 0===i&&(i=!0);for(var r=e.target||e.srcElement,s="";r;){if(s=scheduler._getClassName(r)){var a=s.indexOf(t);if(a>=0){if(!i)return r;var n=0===a||!scheduler._trim(s.charAt(a-1)),d=a+t.length>=s.length||!scheduler._trim(s.charAt(a+t.length)); -if(n&&d)return r}}r=r.parentNode}return null},scheduler.edit=function(e){this._edit_id!=e&&(this.editStop(!1,e),this._edit_id=e,this.updateEvent(e))},scheduler.editStop=function(e,t){if(!t||this._edit_id!=t){var i=this.getEvent(this._edit_id);i&&(e&&(i.text=this._editor.value),this._edit_id=null,this._editor=null,this.updateEvent(i.id),this._edit_stop_event(i,e))}},scheduler._edit_stop_event=function(e,t){this._new_event?(t?this.callEvent("onEventAdded",[e.id,e]):e&&this.deleteEvent(e.id,!0),this._new_event=null):t&&this.callEvent("onEventChanged",[e.id,e]); -},scheduler.getEvents=function(e,t){var i=[];for(var r in this._events){var s=this._events[r];s&&(!e&&!t||s.start_datee)&&i.push(s)}return i},scheduler.getRenderedEvent=function(e){if(e){for(var t=scheduler._rendered,i=0;ithis._min_date;)t=this.date.add(t,-1,this._load_mode);i=t;for(var s=!0;it&&this._loaded[r(a)]);if(t>=i)return!1;for(scheduler.$ajax.get(e+"&from="+r(t)+"&to="+r(i),function(e){scheduler.on_load(e)});i>t;)this._loaded[r(t)]=!0,t=this.date.add(t,1,this._load_mode)}else scheduler.$ajax.get(e,function(e){scheduler.on_load(e)});return this.callEvent("onXLS",[]),!0}},scheduler.on_load=function(e){var t,i=!1;if(this._process&&"xml"!=this._process)try{t=this[this._process].parse(e.xmlDoc.responseText)}catch(r){i=!0; -}else t=this._magic_parser(e),t||(i=!0);(i||e.xmlDoc.status&&e.xmlDoc.status>=400)&&(this.callEvent("onLoadError",[e.xmlDoc]),t=[]),scheduler._process_loading(t),this.callEvent("onXLE",[])},scheduler._process_loading=function(e){this._loading=!0,this._not_render=!0;for(var t=0;t"},set_value:function(e,t,i,r){e.innerHTML=t||""},get_value:function(e,t,i){return e.innerHTML||""},focus:function(e){}},textarea:{render:function(e){var t=scheduler._lightbox_controls.defaults.textarea,i=t?t.height:200,r=(e.height||i||"130")+"px";return"
    "; -},set_value:function(e,t,i){scheduler.form_blocks.textarea._get_input(e).value=t||""},get_value:function(e,t){return scheduler.form_blocks.textarea._get_input(e).value},focus:function(e){var t=scheduler.form_blocks.textarea._get_input(e);scheduler._focus(t,!0)},_get_input:function(e){return e.getElementsByTagName("textarea")[0]}},select:{render:function(e){for(var t=scheduler._lightbox_controls.defaults.select,i=t?t.height:23,r=(e.height||i||"23")+"px",s="
    "},set_value:function(e,t,i,r){var s=e.firstChild;!s._dhx_onchange&&r.onchange&&(s.onchange=r.onchange,s._dhx_onchange=!0),"undefined"==typeof t&&(t=(s.options[0]||{}).value),s.value=t||""},get_value:function(e,t){return e.firstChild.value},focus:function(e){var t=e.firstChild;scheduler._focus(t,!0)}},time:{render:function(e){e.time_format||(e.time_format=["%H:%i","%d","%m","%Y"]),e._time_format_order={};var t=e.time_format,i=scheduler.config,r=scheduler.date.date_part(scheduler._currentDate()),s=1440,a=0; -scheduler.config.limit_time_select&&(s=60*i.last_hour+1,a=60*i.first_hour,r.setHours(i.first_hour));for(var n="",d=0;d0&&(n+=" ");var l="",h="";switch(o){case"%Y":l="dhx_lightbox_year_select",e._time_format_order[3]=d;for(var _=r.getFullYear()-5,c=0;10>c;c++)h+="";break;case"%m":l="dhx_lightbox_month_select",e._time_format_order[2]=d;for(var c=0;12>c;c++)h+="";break; -case"%d":l="dhx_lightbox_day_select",e._time_format_order[1]=d;for(var c=1;32>c;c++)h+="";break;case"%H:%i":l="dhx_lightbox_time_select",e._time_format_order[0]=d;var c=a,u=r.getDate();for(e._time_values=[];s>c;){var g=this.templates.time_picker(r);h+="",e._time_values.push(c),r.setTime(r.valueOf()+60*this.config.time_step*1e3);var f=r.getDate()!=u?1:0;c=24*f*60+60*r.getHours()+r.getMinutes()}}if(h){var v=scheduler._waiAria.lightboxSelectAttrString(o),m=e.readonly?"disabled='disabled'":""; -n+=" "}}var p=scheduler._lightbox_controls.defaults.select,x=p?p.height:23,b=x||30;return"
    "+n+"  –  "+n+"
    "},set_value:function(e,t,i,r){function s(e,t,i){for(var s=r._time_values,a=60*i.getHours()+i.getMinutes(),n=a,d=!1,o=0;oh&&(n=h)}e[t+l[0]].value=d?a:n, -d||n||(e[t+l[0]].selectedIndex=-1),e[t+l[1]].value=i.getDate(),e[t+l[2]].value=i.getMonth(),e[t+l[3]].value=i.getFullYear()}var a,n,d=scheduler.config,o=e.getElementsByTagName("select"),l=r._time_format_order;if(d.full_day){if(!e._full_day){var h="";scheduler.config.wide_form||(h=e.previousSibling.innerHTML+h),e.previousSibling.innerHTML=h,e._full_day=!0}var _=e.previousSibling.getElementsByTagName("input")[0]; -_.checked=0===scheduler.date.time_part(i.start_date)&&0===scheduler.date.time_part(i.end_date),o[l[0]].disabled=_.checked,o[l[0]+o.length/2].disabled=_.checked,_.onclick=function(){if(_.checked){var t={};scheduler.form_blocks.time.get_value(e,t,r),a=scheduler.date.date_part(t.start_date),n=scheduler.date.date_part(t.end_date),(+n==+a||+n>=+a&&(0!==i.end_date.getHours()||0!==i.end_date.getMinutes()))&&(n=scheduler.date.add(n,1,"day"))}else a=null,n=null;o[l[0]].disabled=_.checked,o[l[0]+o.length/2].disabled=_.checked, -s(o,0,a||i.start_date),s(o,4,n||i.end_date)}}if(d.auto_end_date&&d.event_duration)for(var c=function(){a=new Date(o[l[3]].value,o[l[2]].value,o[l[1]].value,0,o[l[0]].value),n=new Date(a.getTime()+60*scheduler.config.event_duration*1e3),s(o,4,n)},u=0;4>u;u++)o[u].onchange=c;s(o,0,i.start_date),s(o,4,i.end_date)},get_value:function(e,t,i){var r=e.getElementsByTagName("select"),s=i._time_format_order;if(t.start_date=new Date(r[s[3]].value,r[s[2]].value,r[s[1]].value,0,r[s[0]].value),t.end_date=new Date(r[s[3]+4].value,r[s[2]+4].value,r[s[1]+4].value,0,r[s[0]+4].value), -!r[s[3]].value||!r[s[3]+4].value){var a=scheduler.getEvent(scheduler._lightbox_id);a&&(t.start_date=a.start_date,t.end_date=a.end_date)}return t.end_date<=t.start_date&&(t.end_date=scheduler.date.add(t.start_date,scheduler.config.time_step,"minute")),{start_date:new Date(t.start_date),end_date:new Date(t.end_date)}},focus:function(e){scheduler._focus(e.getElementsByTagName("select")[0])}}},scheduler.showCover=function(e){if(e){e.style.display="block";var t=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop,i=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft,r=window.innerHeight||document.documentElement.clientHeight; -t?e.style.top=Math.round(t+Math.max((r-e.offsetHeight)/2,0))+"px":e.style.top=Math.round(Math.max((r-e.offsetHeight)/2,0)+9)+"px",document.documentElement.scrollWidth>document.body.offsetWidth?e.style.left=Math.round(i+(document.body.offsetWidth-e.offsetWidth)/2)+"px":e.style.left=Math.round((document.body.offsetWidth-e.offsetWidth)/2)+"px"}this.show_cover()},scheduler.showLightbox=function(e){if(e){if(!this.callEvent("onBeforeLightbox",[e]))return void(this._new_event&&(this._new_event=null));var t=this.getLightbox(); -this.showCover(t),this._fill_lightbox(e,t),this._waiAria.lightboxVisibleAttr(t),this.callEvent("onLightbox",[e])}},scheduler._fill_lightbox=function(e,t){var i=this.getEvent(e),r=t.getElementsByTagName("span"),s=[];if(scheduler.templates.lightbox_header){s.push("");var a=scheduler.templates.lightbox_header(i.start_date,i.end_date,i);s.push(a),r[1].innerHTML="",r[2].innerHTML=a}else{var n=this.templates.event_header(i.start_date,i.end_date,i),d=(this.templates.event_bar_text(i.start_date,i.end_date,i)||"").substr(0,70); -s.push(n),s.push(d),r[1].innerHTML=n,r[2].innerHTML=d}this._waiAria.lightboxHeader(t,s.join(" "));for(var o=this.config.lightbox.sections,l=0;l-1)||(t=t.querySelector("[dhx_button]"))){var i=scheduler._getClassName(t);if(t&&i)switch(i){case"dhx_save_btn":scheduler.save_lightbox();break;case"dhx_delete_btn":var r=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(r,scheduler.locale.labels.title_confirm_deleting,function(){ -scheduler.deleteEvent(scheduler._lightbox_id),scheduler._new_event=null,scheduler.hide_lightbox()});break;case"dhx_cancel_btn":scheduler.cancel_lightbox();break;default:if(t.getAttribute("dhx_button"))scheduler.callEvent("onLightboxButton",[i,t,e]);else{var s,a,n;-1!=i.indexOf("dhx_custom_button")&&(-1!=i.indexOf("dhx_custom_button_")?(s=t.parentNode.getAttribute("index"),n=t.parentNode.parentNode):(s=t.getAttribute("index"),n=t.parentNode,t=t.firstChild)),s&&(a=scheduler.form_blocks[scheduler.config.lightbox.sections[s].type], -a.button_click(s,t,n,n.nextSibling))}}}},this.getLightbox().onkeydown=function(e){var t=e||window.event,i=e.target||e.srcElement,r=i.querySelector("[dhx_button]");switch(r||(r=i.parentNode.querySelector(".dhx_custom_button, .dhx_readonly")),(e||t).keyCode){case 32:if((e||t).shiftKey)return;r&&r.click&&r.click();break;case scheduler.keys.edit_save:if((e||t).shiftKey)return;r&&r.click?r.click():scheduler.save_lightbox();break;case scheduler.keys.edit_cancel:scheduler.cancel_lightbox()}}},scheduler.setLightboxSize=function(){ -var e=this._lightbox;if(e){var t=e.childNodes[1];t.style.height="0px",t.style.height=t.scrollHeight+"px",e.style.height=t.scrollHeight+scheduler.xy.lightbox_additional_height+"px",t.style.height=t.scrollHeight+"px"}},scheduler._init_dnd_events=function(){dhtmlxEvent(document.body,"mousemove",scheduler._move_while_dnd),dhtmlxEvent(document.body,"mouseup",scheduler._finish_dnd),scheduler._init_dnd_events=function(){}},scheduler._move_while_dnd=function(e){if(scheduler._dnd_start_lb){document.dhx_unselectable||(document.body.className+=" dhx_unselectable", -document.dhx_unselectable=!0);var t=scheduler.getLightbox(),i=e&&e.target?[e.pageX,e.pageY]:[event.clientX,event.clientY];t.style.top=scheduler._lb_start[1]+i[1]-scheduler._dnd_start_lb[1]+"px",t.style.left=scheduler._lb_start[0]+i[0]-scheduler._dnd_start_lb[0]+"px"}},scheduler._ready_to_dnd=function(e){var t=scheduler.getLightbox();scheduler._lb_start=[parseInt(t.style.left,10),parseInt(t.style.top,10)],scheduler._dnd_start_lb=e&&e.target?[e.pageX,e.pageY]:[event.clientX,event.clientY]},scheduler._finish_dnd=function(){ -scheduler._lb_start&&(scheduler._lb_start=scheduler._dnd_start_lb=!1,document.body.className=document.body.className.replace(" dhx_unselectable",""),document.dhx_unselectable=!1)},scheduler.getLightbox=function(){if(!this._lightbox){var e=document.createElement("div");e.className="dhx_cal_light",scheduler.config.wide_form&&(e.className+=" dhx_cal_light_wide"),scheduler.form_blocks.recurring&&(e.className+=" dhx_cal_light_rec"),/msie|MSIE 6/.test(navigator.userAgent)&&(e.className+=" dhx_ie6"),e.style.visibility="hidden"; -for(var t=this._lightbox_template,i=this.config.buttons_left,r="",s=0;s
    "+scheduler.locale.labels[i[s]]+"
    ";i=this.config.buttons_right;for(var s=0;s
    "+scheduler.locale.labels[i[s]]+"
    "; -t+="",e.innerHTML=t,scheduler.config.drag_lightbox&&(e.firstChild.onmousedown=scheduler._ready_to_dnd,e.firstChild.onselectstart=function(){return!1},e.firstChild.style.cursor="move",scheduler._init_dnd_events()),this._waiAria.lightboxAttr(e),document.body.insertBefore(e,document.body.firstChild),this._lightbox=e;var a=this.config.lightbox.sections;t="";for(var s=0;s
    "+this.locale.labels["button_"+a[s].button]+"
    "}this.config.wide_form&&(t+="
    ");var o=this.locale.labels["section_"+a[s].name];"string"!=typeof o&&(o=a[s].name),t+="
    "+d+"
    "+n.render.call(this,a[s]),t+="
    "}}for(var l=e.getElementsByTagName("div"),s=0;s 
    ", -scheduler._init_touch_events=function(){var e=this.config.touch&&(-1!=navigator.userAgent.indexOf("Mobile")||-1!=navigator.userAgent.indexOf("iPad")||-1!=navigator.userAgent.indexOf("Android")||-1!=navigator.userAgent.indexOf("Touch"));if(e&&(this.xy.scroll_width=0,this._mobile=!0),this.config.touch){var t=!0;try{document.createEvent("TouchEvent")}catch(i){t=!1}t?this._touch_events(["touchmove","touchstart","touchend"],function(e){return e.touches&&e.touches.length>1?null:e.touches[0]?{target:e.target, -pageX:e.touches[0].pageX,pageY:e.touches[0].pageY,clientX:e.touches[0].clientX,clientY:e.touches[0].clientY}:e},function(){return!1}):window.PointerEvent||window.navigator.pointerEnabled?this._touch_events(["pointermove","pointerdown","pointerup"],function(e){return"mouse"==e.pointerType?null:e},function(e){return!e||"mouse"==e.pointerType}):window.navigator.msPointerEnabled&&this._touch_events(["MSPointerMove","MSPointerDown","MSPointerUp"],function(e){return e.pointerType==e.MSPOINTER_TYPE_MOUSE?null:e; -},function(e){return!e||e.pointerType==e.MSPOINTER_TYPE_MOUSE})}},scheduler._touch_events=function(e,t,i){function r(e,t,r){e.addEventListener(t,function(e){if(scheduler._is_lightbox_open())return!0;if(!i(e))return r(e)},{passive:!1})}function s(e,t,i,r){if(!e||!t)return!1;for(var s=e.target;s&&s!=scheduler._obj;)s=s.parentNode;if(s!=scheduler._obj)return!1;var a=Math.abs(e.pageY-t.pageY),n=Math.abs(e.pageX-t.pageX);return r>a&&n>i&&(!a||n/a>3)?(e.pageX>t.pageX?scheduler._click.dhx_cal_next_button():scheduler._click.dhx_cal_prev_button(), -!0):!1}function a(e){if(!i(e)){var t=scheduler.getState().drag_mode,r=scheduler.matrix?scheduler.matrix[scheduler._mode]:!1,s=scheduler.render_view_data;return"create"==t&&r&&(scheduler.render_view_data=function(){for(var e=scheduler.getState().drag_id,t=scheduler.getEvent(e),i=r.y_property,s=scheduler.getEvents(t.start_date,t.end_date),a=0;a5||Math.abs(d.pageY-o.pageY)>5)&&(_=!0,clearTimeout(l))):void(_=!0)}}}),r(this._els.dhx_cal_data[0],"scroll",n),r(this._els.dhx_cal_data[0],"touchcancel",n),r(this._els.dhx_cal_data[0],"contextmenu",function(e){return i(e)?void 0:c?(e&&e.preventDefault&&e.preventDefault(),(e||event).cancelBubble=!0, -!1):void 0}),r(this._obj,e[1],function(e){if(!i(e)){scheduler._pointerDragId=e.pointerId;var r;if(h=_=!1,c=!0,r=o=t(e),!r)return void(_=!0);var s=new Date;if(!_&&!h&&250>s-u)return scheduler._click.dhx_cal_data(r),window.setTimeout(function(){r.type="dblclick",scheduler._on_dbl_click(r)},50),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,scheduler._block_next_stop=!0,!1;if(u=s,!_&&!h&&scheduler.config.touch_drag){var a=scheduler._locate_event(document.activeElement),n=scheduler._locate_event(r.target),g=d?scheduler._locate_event(d.target):null; -if(a&&n&&a==n&&a!=g)return e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,scheduler._ignore_next_click=!1,scheduler._click.dhx_cal_data(r),d=r,!1;l=setTimeout(function(){h=!0;var e=d.target,t=scheduler._getClassName(e);e&&-1!=t.indexOf("dhx_body")&&(e=e.previousSibling),scheduler._on_mouse_down(d,e),scheduler._drag_mode&&"create"!=scheduler._drag_mode&&scheduler.for_rendered(scheduler._drag_id,function(e,t){e.style.display="none",scheduler._rendered.splice(t,1)}),scheduler.config.touch_tip&&scheduler._show_global_tip(), -scheduler.updateEvent(scheduler._drag_id)},scheduler.config.touch_drag),d=r}}}),r(this._els.dhx_cal_data[0],e[2],function(e){return i(e)?void 0:(!h&&s(d,o,200,100)&&(scheduler._block_next_stop=!0),h&&(scheduler._ignore_next_click=!0,setTimeout(function(){scheduler._ignore_next_click=!1},100)),n(e),scheduler._block_next_stop?(scheduler._block_next_stop=!1,e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,!1):void 0)}),dhtmlxEvent(document.body,e[2],n)},scheduler._show_global_tip=function(){scheduler._hide_global_tip(); -var e=scheduler._global_tip=document.createElement("div");e.className="dhx_global_tip",scheduler._update_global_tip(1),document.body.appendChild(e)},scheduler._update_global_tip=function(e){var t=scheduler._global_tip;if(t){var i="";if(scheduler._drag_id&&!e){var r=scheduler.getEvent(scheduler._drag_id);r&&(i="
    "+(r._timed?scheduler.templates.event_header(r.start_date,r.end_date,r):scheduler.templates.day_date(r.start_date,r.end_date,r))+"
    ")}"create"==scheduler._drag_mode||"new-size"==scheduler._drag_mode?t.innerHTML=(scheduler.locale.labels.drag_to_create||"Drag to create")+i:t.innerHTML=(scheduler.locale.labels.drag_to_move||"Drag to move")+i; -}},scheduler._hide_global_tip=function(){var e=scheduler._global_tip;e&&e.parentNode&&(e.parentNode.removeChild(e),scheduler._global_tip=0)},scheduler._dp_init=function(e){e._methods=["_set_event_text_style","","_dp_change_event_id","_dp_hook_delete"],this._dp_change_event_id=function(e,t){scheduler.getEvent(e)&&scheduler.changeEventId(e,t)},this._dp_hook_delete=function(t,i){return scheduler.getEvent(t)?(t!=i&&("true_deleted"==this.getUserData(t,e.action_param)&&this.setUserData(t,e.action_param,"updated"), -this.changeEventId(t,i)),this.deleteEvent(i,!0)):void 0},this.attachEvent("onEventAdded",function(t){!this._loading&&this._validId(t)&&e.setUpdated(t,!0,"inserted")}),this.attachEvent("onConfirmedBeforeEventDelete",function(t){if(this._validId(t)){var i=e.getState(t);return"inserted"==i||this._new_event?(e.setUpdated(t,!1),!0):"deleted"==i?!1:"true_deleted"==i?!0:(e.setUpdated(t,!0,"deleted"),!1)}}),this.attachEvent("onEventChanged",function(t){!this._loading&&this._validId(t)&&e.setUpdated(t,!0,"updated"); -}),scheduler.attachEvent("onClearAll",function(){e._in_progress={},e._invalid={},e.updatedRows=[],e._waitMode=0}),e._objToJson=function(t,i,r){r=r||"",i=i||{};for(var s in t)0!==s.indexOf("_")&&(t[s]&&t[s].getUTCFullYear?i[r+s]=this.obj.templates.xml_format(t[s]):t[s]&&"object"==typeof t[s]?e._objToJson(t[s],i,r+s+"."):i[r+s]=t[s]);return i},e._getRowData=function(e,t){var i=this.obj.getEvent(e);return this._objToJson(i)},e._clearUpdateFlag=function(){},e.attachEvent("insertCallback",scheduler._update_callback), -e.attachEvent("updateCallback",scheduler._update_callback),e.attachEvent("deleteCallback",function(e,t){this.obj.getEvent(t)?(this.obj.setUserData(t,this.action_param,"true_deleted"),this.obj.deleteEvent(t)):this.obj._add_rec_marker&&this.obj._update_callback(e,t)})},scheduler._validId=function(e){return!0},scheduler.setUserData=function(e,t,i){if(e){var r=this.getEvent(e);r&&(r[t]=i)}else this._userdata[t]=i},scheduler.getUserData=function(e,t){if(e){var i=this.getEvent(e);return i?i[t]:null}return this._userdata[t]; -},scheduler._set_event_text_style=function(e,t){if(scheduler.getEvent(e)){this.for_rendered(e,function(e){e.style.cssText+=";"+t});var i=this.getEvent(e);i._text_style=t,this.event_updated(i)}},scheduler._update_callback=function(e,t){var i=scheduler._xmlNodeToJSON(e.firstChild);"none"==i.rec_type&&(i.rec_pattern="none"),i.text=i.text||i._tagvalue,i.start_date=scheduler.templates.xml_date(i.start_date),i.end_date=scheduler.templates.xml_date(i.end_date),scheduler.addEvent(i),scheduler._add_rec_marker&&scheduler.setCurrentView(); -},scheduler._skin_settings={fix_tab_position:[1,0],use_select_menu_space:[1,0],wide_form:[1,0],hour_size_px:[44,42],displayed_event_color:["#ff4a4a","ffc5ab"],displayed_event_text_color:["#ffef80","7e2727"]},scheduler._skin_xy={lightbox_additional_height:[90,50],nav_height:[59,22],bar_height:[24,20]},scheduler._is_material_skin=function(){return(scheduler.skin+"").indexOf("material")>-1},scheduler._border_box_bvents=function(){return scheduler._is_material_skin()},scheduler._configure=function(e,t,i){ -for(var r in t)"undefined"==typeof e[r]&&(e[r]=t[r][i])},scheduler._skin_init=function(){if(!scheduler.skin)for(var e=document.getElementsByTagName("link"),t=0;tt?"0"+t:t;var i=""+e.getHours()+" "+t+"";return i}),!r){var d=scheduler.config.minicalendar;d&&(d.padding=14),scheduler.templates.event_bar_date=function(e,t,i){return"• "+scheduler.templates.event_date(e)+" "},scheduler.attachEvent("onTemplatesReady",function(){var e=scheduler.date.date_to_str("%d"); -scheduler.templates._old_month_day||(scheduler.templates._old_month_day=scheduler.templates.month_day);var t=scheduler.templates._old_month_day;if(scheduler.templates.month_day=function(i){if("month"==this._mode){var r=e(i);return 1==i.getDate()&&(r=scheduler.locale.date.month_full[i.getMonth()]+" "+r),+i==+scheduler.date.date_part(this._currentDate())&&(r=scheduler.locale.labels.dhx_cal_today_button+" "+r),r}return t.call(this,i)},scheduler.config.fix_tab_position){var i=scheduler._els.dhx_cal_navline[0].getElementsByTagName("div"),r=null,s=211,a=[14,75,136],n=14; -scheduler._is_material_skin()&&(a=[16,103,192],s=294,n=-1);for(var d=0;d
     
     
    ', -this.className+=" dhx_cal_container"),scheduler.init(this,scheduler.config.date,scheduler.config.mode),i.data&&scheduler.parse(i.data),r.push(scheduler)}}),1===r.length?r[0]:r}return t[i]?t[i].apply(this,[]):void e.error("Method "+i+" does not exist on jQuery.dhx_scheduler")}}(jQuery),function(){function e(e,t,i){t&&(e._date=t),i&&(e._mode=i)}var t=scheduler.setCurrentView,i=scheduler.updateView,r=null,s=null,a=function(t,a){var n=this;window.clearTimeout(s),window.clearTimeout(r);var d=n._date,o=n._mode; -e(this,t,a),s=setTimeout(function(){return n.callEvent("onBeforeViewChange",[o,d,a||n._mode,t||n._date])?(i.call(n,t,a),n.callEvent("onViewChange",[n._mode,n._date]),window.clearTimeout(r),void(s=0)):void e(n,d,o)},scheduler.config.delay_render)},n=function(t,a){var n=this,d=arguments;e(this,t,a),window.clearTimeout(r),r=setTimeout(function(){s||i.apply(n,d)},scheduler.config.delay_render)};scheduler.attachEvent("onSchedulerReady",function(){scheduler.config.delay_render?(scheduler.setCurrentView=a, -scheduler.updateView=n):(scheduler.setCurrentView=t,scheduler.updateView=i)})}(); -//# sourceMappingURL=sources/dhtmlxscheduler.js.map \ No newline at end of file From 1d15edd20d6b81581fa08f9bf30a3d8fd26ac7f8 Mon Sep 17 00:00:00 2001 From: Kevin Dao Date: Fri, 10 Aug 2018 11:11:14 -0500 Subject: [PATCH 3/6] Removed content security policy fix for using dhtmlxscheduler --- manifest.json | 1 - 1 file changed, 1 deletion(-) diff --git a/manifest.json b/manifest.json index 218bea40..2eb28b1b 100644 --- a/manifest.json +++ b/manifest.json @@ -16,7 +16,6 @@ "js": ["js/moment.min.js","js/sql-memory-growth.js","js/highcharts.js","js/jquery-3.3.1.min.js","js/content.js"], "matches": ["https://utdirect.utexas.edu/apps/registrar/course_schedule/*"] }], - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", "web_accessible_resources": [ "grades.db","images/disticon.png"], "background": { From 26136edeb7c02daeaec11778c7a9e374506ce348 Mon Sep 17 00:00:00 2001 From: Kevin Dao Date: Fri, 10 Aug 2018 11:14:57 -0500 Subject: [PATCH 4/6] Loaded fullcalendar library onto calendar page --- calendar.html | 5 +- css/fullcalendar.css | 1293 ++++ js/calendar.js | 21 - js/fullcalendar.js | 15010 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 16307 insertions(+), 22 deletions(-) create mode 100644 css/fullcalendar.css create mode 100644 js/fullcalendar.js diff --git a/calendar.html b/calendar.html index 2cf3e7cb..25808796 100644 --- a/calendar.html +++ b/calendar.html @@ -1,6 +1,9 @@ - + + + + diff --git a/css/fullcalendar.css b/css/fullcalendar.css new file mode 100644 index 00000000..dcbc9997 --- /dev/null +++ b/css/fullcalendar.css @@ -0,0 +1,1293 @@ +/*! + * FullCalendar v3.9.0 + * Docs & License: https://fullcalendar.io/ + * (c) 2018 Adam Shaw + */ +.fc { + direction: ltr; + text-align: left; } + +.fc-rtl { + text-align: right; } + +body .fc { + /* extra precedence to overcome jqui */ + font-size: 1em; } + +/* Colors +--------------------------------------------------------------------------------------------------*/ +.fc-highlight { + /* when user is selecting cells */ + background: #bce8f1; + opacity: .3; } + +.fc-bgevent { + /* default look for background events */ + background: #8fdf82; + opacity: .3; } + +.fc-nonbusiness { + /* default look for non-business-hours areas */ + /* will inherit .fc-bgevent's styles */ + background: #d7d7d7; } + +/* Buttons (styled ') + .click(function (ev) { + // don't process clicks for disabled buttons + if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) { + buttonClick(ev); + // after the click action, if the button becomes the "active" tab, or disabled, + // it should never have a hover class, so remove it now. + if (buttonEl.hasClass(theme.getClass('stateActive')) || + buttonEl.hasClass(theme.getClass('stateDisabled'))) { + buttonEl.removeClass(theme.getClass('stateHover')); + } + } + }) + .mousedown(function () { + // the *down* effect (mouse pressed in). + // only on buttons that are not the "active" tab, or disabled + buttonEl + .not('.' + theme.getClass('stateActive')) + .not('.' + theme.getClass('stateDisabled')) + .addClass(theme.getClass('stateDown')); + }) + .mouseup(function () { + // undo the *down* effect + buttonEl.removeClass(theme.getClass('stateDown')); + }) + .hover(function () { + // the *hover* effect. + // only on buttons that are not the "active" tab, or disabled + buttonEl + .not('.' + theme.getClass('stateActive')) + .not('.' + theme.getClass('stateDisabled')) + .addClass(theme.getClass('stateHover')); + }, function () { + // undo the *hover* effect + buttonEl + .removeClass(theme.getClass('stateHover')) + .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup + }); + groupChildren = groupChildren.add(buttonEl); + } + } + }); + if (isOnlyButtons) { + groupChildren + .first().addClass(theme.getClass('cornerLeft')).end() + .last().addClass(theme.getClass('cornerRight')).end(); + } + if (groupChildren.length > 1) { + groupEl = $('
    '); + if (isOnlyButtons) { + groupEl.addClass(theme.getClass('buttonGroup')); + } + groupEl.append(groupChildren); + sectionEl.append(groupEl); + } + else { + sectionEl.append(groupChildren); // 1 or 0 children + } + }); + } + return sectionEl; + }; + Toolbar.prototype.updateTitle = function (text) { + if (this.el) { + this.el.find('h2').text(text); + } + }; + Toolbar.prototype.activateButton = function (buttonName) { + if (this.el) { + this.el.find('.fc-' + buttonName + '-button') + .addClass(this.calendar.theme.getClass('stateActive')); + } + }; + Toolbar.prototype.deactivateButton = function (buttonName) { + if (this.el) { + this.el.find('.fc-' + buttonName + '-button') + .removeClass(this.calendar.theme.getClass('stateActive')); + } + }; + Toolbar.prototype.disableButton = function (buttonName) { + if (this.el) { + this.el.find('.fc-' + buttonName + '-button') + .prop('disabled', true) + .addClass(this.calendar.theme.getClass('stateDisabled')); + } + }; + Toolbar.prototype.enableButton = function (buttonName) { + if (this.el) { + this.el.find('.fc-' + buttonName + '-button') + .prop('disabled', false) + .removeClass(this.calendar.theme.getClass('stateDisabled')); + } + }; + Toolbar.prototype.getViewsWithButtons = function () { + return this.viewsWithButtons; + }; + return Toolbar; +}()); +exports.default = Toolbar; + + +/***/ }), +/* 240 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var $ = __webpack_require__(3); +var util_1 = __webpack_require__(4); +var options_1 = __webpack_require__(32); +var locale_1 = __webpack_require__(31); +var Model_1 = __webpack_require__(48); +var OptionsManager = /** @class */ (function (_super) { + tslib_1.__extends(OptionsManager, _super); + function OptionsManager(_calendar, overrides) { + var _this = _super.call(this) || this; + _this._calendar = _calendar; + _this.overrides = $.extend({}, overrides); // make a copy + _this.dynamicOverrides = {}; + _this.compute(); + return _this; + } + OptionsManager.prototype.add = function (newOptionHash) { + var optionCnt = 0; + var optionName; + this.recordOverrides(newOptionHash); // will trigger this model's watchers + for (optionName in newOptionHash) { + optionCnt++; + } + // special-case handling of single option change. + // if only one option change, `optionName` will be its name. + if (optionCnt === 1) { + if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') { + this._calendar.updateViewSize(true); // isResize=true + return; + } + else if (optionName === 'defaultDate') { + return; // can't change date this way. use gotoDate instead + } + else if (optionName === 'businessHours') { + return; // this model already reacts to this + } + else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) { + return; // doesn't affect rendering. only interactions. + } + else if (optionName === 'timezone') { + this._calendar.view.flash('initialEvents'); + return; + } + } + // catch-all. rerender the header and footer and rebuild/rerender the current view + this._calendar.renderHeader(); + this._calendar.renderFooter(); + // even non-current views will be affected by this option change. do before rerender + // TODO: detangle + this._calendar.viewsByType = {}; + this._calendar.reinitView(); + }; + // Computes the flattened options hash for the calendar and assigns to `this.options`. + // Assumes this.overrides and this.dynamicOverrides have already been initialized. + OptionsManager.prototype.compute = function () { + var locale; + var localeDefaults; + var isRTL; + var dirDefaults; + var rawOptions; + locale = util_1.firstDefined(// explicit locale option given? + this.dynamicOverrides.locale, this.overrides.locale); + localeDefaults = locale_1.localeOptionHash[locale]; + if (!localeDefaults) { + locale = options_1.globalDefaults.locale; + localeDefaults = locale_1.localeOptionHash[locale] || {}; + } + isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL? + this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL); + dirDefaults = isRTL ? options_1.rtlDefaults : {}; + this.dirDefaults = dirDefaults; + this.localeDefaults = localeDefaults; + rawOptions = options_1.mergeOptions([ + options_1.globalDefaults, + dirDefaults, + localeDefaults, + this.overrides, + this.dynamicOverrides + ]); + locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options + this.reset(rawOptions); + }; + // stores the new options internally, but does not rerender anything. + OptionsManager.prototype.recordOverrides = function (newOptionHash) { + var optionName; + for (optionName in newOptionHash) { + this.dynamicOverrides[optionName] = newOptionHash[optionName]; + } + this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it + this.compute(); // this.options needs to be recomputed after the dynamic override + }; + return OptionsManager; +}(Model_1.default)); +exports.default = OptionsManager; + + +/***/ }), +/* 241 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var moment = __webpack_require__(0); +var $ = __webpack_require__(3); +var ViewRegistry_1 = __webpack_require__(22); +var util_1 = __webpack_require__(4); +var options_1 = __webpack_require__(32); +var locale_1 = __webpack_require__(31); +var ViewSpecManager = /** @class */ (function () { + function ViewSpecManager(optionsManager, _calendar) { + this.optionsManager = optionsManager; + this._calendar = _calendar; + this.clearCache(); + } + ViewSpecManager.prototype.clearCache = function () { + this.viewSpecCache = {}; + }; + // Gets information about how to create a view. Will use a cache. + ViewSpecManager.prototype.getViewSpec = function (viewType) { + var cache = this.viewSpecCache; + return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType)); + }; + // Given a duration singular unit, like "week" or "day", finds a matching view spec. + // Preference is given to views that have corresponding buttons. + ViewSpecManager.prototype.getUnitViewSpec = function (unit) { + var viewTypes; + var i; + var spec; + if ($.inArray(unit, util_1.unitsDesc) !== -1) { + // put views that have buttons first. there will be duplicates, but oh well + viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well? + $.each(ViewRegistry_1.viewHash, function (viewType) { + viewTypes.push(viewType); + }); + for (i = 0; i < viewTypes.length; i++) { + spec = this.getViewSpec(viewTypes[i]); + if (spec) { + if (spec.singleUnit === unit) { + return spec; + } + } + } + } + }; + // Builds an object with information on how to create a given view + ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) { + var viewOverrides = this.optionsManager.overrides.views || {}; + var specChain = []; // for the view. lowest to highest priority + var defaultsChain = []; // for the view. lowest to highest priority + var overridesChain = []; // for the view. lowest to highest priority + var viewType = requestedViewType; + var spec; // for the view + var overrides; // for the view + var durationInput; + var duration; + var unit; + // iterate from the specific view definition to a more general one until we hit an actual View class + while (viewType) { + spec = ViewRegistry_1.viewHash[viewType]; + overrides = viewOverrides[viewType]; + viewType = null; // clear. might repopulate for another iteration + if (typeof spec === 'function') { + spec = { 'class': spec }; + } + if (spec) { + specChain.unshift(spec); + defaultsChain.unshift(spec.defaults || {}); + durationInput = durationInput || spec.duration; + viewType = viewType || spec.type; + } + if (overrides) { + overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level + durationInput = durationInput || overrides.duration; + viewType = viewType || overrides.type; + } + } + spec = util_1.mergeProps(specChain); + spec.type = requestedViewType; + if (!spec['class']) { + return false; + } + // fall back to top-level `duration` option + durationInput = durationInput || + this.optionsManager.dynamicOverrides.duration || + this.optionsManager.overrides.duration; + if (durationInput) { + duration = moment.duration(durationInput); + if (duration.valueOf()) { + unit = util_1.computeDurationGreatestUnit(duration, durationInput); + spec.duration = duration; + spec.durationUnit = unit; + // view is a single-unit duration, like "week" or "day" + // incorporate options for this. lowest priority + if (duration.as(unit) === 1) { + spec.singleUnit = unit; + overridesChain.unshift(viewOverrides[unit] || {}); + } + } + } + spec.defaults = options_1.mergeOptions(defaultsChain); + spec.overrides = options_1.mergeOptions(overridesChain); + this.buildViewSpecOptions(spec); + this.buildViewSpecButtonText(spec, requestedViewType); + return spec; + }; + // Builds and assigns a view spec's options object from its already-assigned defaults and overrides + ViewSpecManager.prototype.buildViewSpecOptions = function (spec) { + var optionsManager = this.optionsManager; + spec.options = options_1.mergeOptions([ + options_1.globalDefaults, + spec.defaults, + optionsManager.dirDefaults, + optionsManager.localeDefaults, + optionsManager.overrides, + spec.overrides, + optionsManager.dynamicOverrides // dynamically set via setter. highest precedence + ]); + locale_1.populateInstanceComputableOptions(spec.options); + }; + // Computes and assigns a view spec's buttonText-related options + ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) { + var optionsManager = this.optionsManager; + // given an options object with a possible `buttonText` hash, lookup the buttonText for the + // requested view, falling back to a generic unit entry like "week" or "day" + function queryButtonText(options) { + var buttonText = options.buttonText || {}; + return buttonText[requestedViewType] || + // view can decide to look up a certain key + (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) || + // a key like "month" + (spec.singleUnit ? buttonText[spec.singleUnit] : null); + } + // highest to lowest priority + spec.buttonTextOverride = + queryButtonText(optionsManager.dynamicOverrides) || + queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence + spec.overrides.buttonText; // `buttonText` for view-specific options is a string + // highest to lowest priority. mirrors buildViewSpecOptions + spec.buttonTextDefault = + queryButtonText(optionsManager.localeDefaults) || + queryButtonText(optionsManager.dirDefaults) || + spec.defaults.buttonText || // a single string. from ViewSubclass.defaults + queryButtonText(options_1.globalDefaults) || + (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like "3 days" + requestedViewType; // fall back to given view name + }; + return ViewSpecManager; +}()); +exports.default = ViewSpecManager; + + +/***/ }), +/* 242 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var $ = __webpack_require__(3); +var util_1 = __webpack_require__(4); +var EventPeriod_1 = __webpack_require__(243); +var ArrayEventSource_1 = __webpack_require__(52); +var EventSource_1 = __webpack_require__(6); +var EventSourceParser_1 = __webpack_require__(38); +var SingleEventDef_1 = __webpack_require__(13); +var EventInstanceGroup_1 = __webpack_require__(18); +var EmitterMixin_1 = __webpack_require__(11); +var ListenerMixin_1 = __webpack_require__(7); +var EventManager = /** @class */ (function () { + function EventManager(calendar) { + this.calendar = calendar; + this.stickySource = new ArrayEventSource_1.default(calendar); + this.otherSources = []; + } + EventManager.prototype.requestEvents = function (start, end, timezone, force) { + if (force || + !this.currentPeriod || + !this.currentPeriod.isWithinRange(start, end) || + timezone !== this.currentPeriod.timezone) { + this.setPeriod(// will change this.currentPeriod + new EventPeriod_1.default(start, end, timezone)); + } + return this.currentPeriod.whenReleased(); + }; + // Source Adding/Removing + // ----------------------------------------------------------------------------------------------------------------- + EventManager.prototype.addSource = function (eventSource) { + this.otherSources.push(eventSource); + if (this.currentPeriod) { + this.currentPeriod.requestSource(eventSource); // might release + } + }; + EventManager.prototype.removeSource = function (doomedSource) { + util_1.removeExact(this.otherSources, doomedSource); + if (this.currentPeriod) { + this.currentPeriod.purgeSource(doomedSource); // might release + } + }; + EventManager.prototype.removeAllSources = function () { + this.otherSources = []; + if (this.currentPeriod) { + this.currentPeriod.purgeAllSources(); // might release + } + }; + // Source Refetching + // ----------------------------------------------------------------------------------------------------------------- + EventManager.prototype.refetchSource = function (eventSource) { + var currentPeriod = this.currentPeriod; + if (currentPeriod) { + currentPeriod.freeze(); + currentPeriod.purgeSource(eventSource); + currentPeriod.requestSource(eventSource); + currentPeriod.thaw(); + } + }; + EventManager.prototype.refetchAllSources = function () { + var currentPeriod = this.currentPeriod; + if (currentPeriod) { + currentPeriod.freeze(); + currentPeriod.purgeAllSources(); + currentPeriod.requestSources(this.getSources()); + currentPeriod.thaw(); + } + }; + // Source Querying + // ----------------------------------------------------------------------------------------------------------------- + EventManager.prototype.getSources = function () { + return [this.stickySource].concat(this.otherSources); + }; + // like querySources, but accepts multple match criteria (like multiple IDs) + EventManager.prototype.multiQuerySources = function (matchInputs) { + // coerce into an array + if (!matchInputs) { + matchInputs = []; + } + else if (!$.isArray(matchInputs)) { + matchInputs = [matchInputs]; + } + var matchingSources = []; + var i; + // resolve raw inputs to real event source objects + for (i = 0; i < matchInputs.length; i++) { + matchingSources.push.apply(// append + matchingSources, this.querySources(matchInputs[i])); + } + return matchingSources; + }; + // matchInput can either by a real event source object, an ID, or the function/URL for the source. + // returns an array of matching source objects. + EventManager.prototype.querySources = function (matchInput) { + var sources = this.otherSources; + var i; + var source; + // given a proper event source object + for (i = 0; i < sources.length; i++) { + source = sources[i]; + if (source === matchInput) { + return [source]; + } + } + // an ID match + source = this.getSourceById(EventSource_1.default.normalizeId(matchInput)); + if (source) { + return [source]; + } + // parse as an event source + matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar); + if (matchInput) { + return $.grep(sources, function (source) { + return isSourcesEquivalent(matchInput, source); + }); + } + }; + /* + ID assumed to already be normalized + */ + EventManager.prototype.getSourceById = function (id) { + return $.grep(this.otherSources, function (source) { + return source.id && source.id === id; + })[0]; + }; + // Event-Period + // ----------------------------------------------------------------------------------------------------------------- + EventManager.prototype.setPeriod = function (eventPeriod) { + if (this.currentPeriod) { + this.unbindPeriod(this.currentPeriod); + this.currentPeriod = null; + } + this.currentPeriod = eventPeriod; + this.bindPeriod(eventPeriod); + eventPeriod.requestSources(this.getSources()); + }; + EventManager.prototype.bindPeriod = function (eventPeriod) { + this.listenTo(eventPeriod, 'release', function (eventsPayload) { + this.trigger('release', eventsPayload); + }); + }; + EventManager.prototype.unbindPeriod = function (eventPeriod) { + this.stopListeningTo(eventPeriod); + }; + // Event Getting/Adding/Removing + // ----------------------------------------------------------------------------------------------------------------- + EventManager.prototype.getEventDefByUid = function (uid) { + if (this.currentPeriod) { + return this.currentPeriod.getEventDefByUid(uid); + } + }; + EventManager.prototype.addEventDef = function (eventDef, isSticky) { + if (isSticky) { + this.stickySource.addEventDef(eventDef); + } + if (this.currentPeriod) { + this.currentPeriod.addEventDef(eventDef); // might release + } + }; + EventManager.prototype.removeEventDefsById = function (eventId) { + this.getSources().forEach(function (eventSource) { + eventSource.removeEventDefsById(eventId); + }); + if (this.currentPeriod) { + this.currentPeriod.removeEventDefsById(eventId); // might release + } + }; + EventManager.prototype.removeAllEventDefs = function () { + this.getSources().forEach(function (eventSource) { + eventSource.removeAllEventDefs(); + }); + if (this.currentPeriod) { + this.currentPeriod.removeAllEventDefs(); + } + }; + // Event Mutating + // ----------------------------------------------------------------------------------------------------------------- + /* + Returns an undo function. + */ + EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) { + var currentPeriod = this.currentPeriod; + var eventDefs; + var undoFuncs = []; + if (currentPeriod) { + currentPeriod.freeze(); + eventDefs = currentPeriod.getEventDefsById(eventDefId); + eventDefs.forEach(function (eventDef) { + // add/remove esp because id might change + currentPeriod.removeEventDef(eventDef); + undoFuncs.push(eventDefMutation.mutateSingle(eventDef)); + currentPeriod.addEventDef(eventDef); + }); + currentPeriod.thaw(); + return function () { + currentPeriod.freeze(); + for (var i = 0; i < eventDefs.length; i++) { + currentPeriod.removeEventDef(eventDefs[i]); + undoFuncs[i](); + currentPeriod.addEventDef(eventDefs[i]); + } + currentPeriod.thaw(); + }; + } + return function () { }; + }; + /* + copies and then mutates + */ + EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) { + var eventDefs = this.getEventDefsById(eventDefId); + var i; + var defCopy; + var allInstances = []; + for (i = 0; i < eventDefs.length; i++) { + defCopy = eventDefs[i].clone(); + if (defCopy instanceof SingleEventDef_1.default) { + eventDefMutation.mutateSingle(defCopy); + allInstances.push.apply(allInstances, // append + defCopy.buildInstances()); + } + } + return new EventInstanceGroup_1.default(allInstances); + }; + // Freezing + // ----------------------------------------------------------------------------------------------------------------- + EventManager.prototype.freeze = function () { + if (this.currentPeriod) { + this.currentPeriod.freeze(); + } + }; + EventManager.prototype.thaw = function () { + if (this.currentPeriod) { + this.currentPeriod.thaw(); + } + }; + // methods that simply forward to EventPeriod + EventManager.prototype.getEventDefsById = function (eventDefId) { + return this.currentPeriod.getEventDefsById(eventDefId); + }; + EventManager.prototype.getEventInstances = function () { + return this.currentPeriod.getEventInstances(); + }; + EventManager.prototype.getEventInstancesWithId = function (eventDefId) { + return this.currentPeriod.getEventInstancesWithId(eventDefId); + }; + EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) { + return this.currentPeriod.getEventInstancesWithoutId(eventDefId); + }; + return EventManager; +}()); +exports.default = EventManager; +EmitterMixin_1.default.mixInto(EventManager); +ListenerMixin_1.default.mixInto(EventManager); +function isSourcesEquivalent(source0, source1) { + return source0.getPrimitive() === source1.getPrimitive(); +} + + +/***/ }), +/* 243 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var $ = __webpack_require__(3); +var util_1 = __webpack_require__(4); +var Promise_1 = __webpack_require__(20); +var EmitterMixin_1 = __webpack_require__(11); +var UnzonedRange_1 = __webpack_require__(5); +var EventInstanceGroup_1 = __webpack_require__(18); +var EventPeriod = /** @class */ (function () { + function EventPeriod(start, end, timezone) { + this.pendingCnt = 0; + this.freezeDepth = 0; + this.stuntedReleaseCnt = 0; + this.releaseCnt = 0; + this.start = start; + this.end = end; + this.timezone = timezone; + this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone()); + this.requestsByUid = {}; + this.eventDefsByUid = {}; + this.eventDefsById = {}; + this.eventInstanceGroupsById = {}; + } + EventPeriod.prototype.isWithinRange = function (start, end) { + // TODO: use a range util function? + return !start.isBefore(this.start) && !end.isAfter(this.end); + }; + // Requesting and Purging + // ----------------------------------------------------------------------------------------------------------------- + EventPeriod.prototype.requestSources = function (sources) { + this.freeze(); + for (var i = 0; i < sources.length; i++) { + this.requestSource(sources[i]); + } + this.thaw(); + }; + EventPeriod.prototype.requestSource = function (source) { + var _this = this; + var request = { source: source, status: 'pending', eventDefs: null }; + this.requestsByUid[source.uid] = request; + this.pendingCnt += 1; + source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) { + if (request.status !== 'cancelled') { + request.status = 'completed'; + request.eventDefs = eventDefs; + _this.addEventDefs(eventDefs); + _this.pendingCnt--; + _this.tryRelease(); + } + }, function () { + if (request.status !== 'cancelled') { + request.status = 'failed'; + _this.pendingCnt--; + _this.tryRelease(); + } + }); + }; + EventPeriod.prototype.purgeSource = function (source) { + var request = this.requestsByUid[source.uid]; + if (request) { + delete this.requestsByUid[source.uid]; + if (request.status === 'pending') { + request.status = 'cancelled'; + this.pendingCnt--; + this.tryRelease(); + } + else if (request.status === 'completed') { + request.eventDefs.forEach(this.removeEventDef.bind(this)); + } + } + }; + EventPeriod.prototype.purgeAllSources = function () { + var requestsByUid = this.requestsByUid; + var uid; + var request; + var completedCnt = 0; + for (uid in requestsByUid) { + request = requestsByUid[uid]; + if (request.status === 'pending') { + request.status = 'cancelled'; + } + else if (request.status === 'completed') { + completedCnt++; + } + } + this.requestsByUid = {}; + this.pendingCnt = 0; + if (completedCnt) { + this.removeAllEventDefs(); // might release + } + }; + // Event Definitions + // ----------------------------------------------------------------------------------------------------------------- + EventPeriod.prototype.getEventDefByUid = function (eventDefUid) { + return this.eventDefsByUid[eventDefUid]; + }; + EventPeriod.prototype.getEventDefsById = function (eventDefId) { + var a = this.eventDefsById[eventDefId]; + if (a) { + return a.slice(); // clone + } + return []; + }; + EventPeriod.prototype.addEventDefs = function (eventDefs) { + for (var i = 0; i < eventDefs.length; i++) { + this.addEventDef(eventDefs[i]); + } + }; + EventPeriod.prototype.addEventDef = function (eventDef) { + var eventDefsById = this.eventDefsById; + var eventDefId = eventDef.id; + var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []); + var eventInstances = eventDef.buildInstances(this.unzonedRange); + var i; + eventDefs.push(eventDef); + this.eventDefsByUid[eventDef.uid] = eventDef; + for (i = 0; i < eventInstances.length; i++) { + this.addEventInstance(eventInstances[i], eventDefId); + } + }; + EventPeriod.prototype.removeEventDefsById = function (eventDefId) { + var _this = this; + this.getEventDefsById(eventDefId).forEach(function (eventDef) { + _this.removeEventDef(eventDef); + }); + }; + EventPeriod.prototype.removeAllEventDefs = function () { + var isEmpty = $.isEmptyObject(this.eventDefsByUid); + this.eventDefsByUid = {}; + this.eventDefsById = {}; + this.eventInstanceGroupsById = {}; + if (!isEmpty) { + this.tryRelease(); + } + }; + EventPeriod.prototype.removeEventDef = function (eventDef) { + var eventDefsById = this.eventDefsById; + var eventDefs = eventDefsById[eventDef.id]; + delete this.eventDefsByUid[eventDef.uid]; + if (eventDefs) { + util_1.removeExact(eventDefs, eventDef); + if (!eventDefs.length) { + delete eventDefsById[eventDef.id]; + } + this.removeEventInstancesForDef(eventDef); + } + }; + // Event Instances + // ----------------------------------------------------------------------------------------------------------------- + EventPeriod.prototype.getEventInstances = function () { + var eventInstanceGroupsById = this.eventInstanceGroupsById; + var eventInstances = []; + var id; + for (id in eventInstanceGroupsById) { + eventInstances.push.apply(eventInstances, // append + eventInstanceGroupsById[id].eventInstances); + } + return eventInstances; + }; + EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) { + var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId]; + if (eventInstanceGroup) { + return eventInstanceGroup.eventInstances.slice(); // clone + } + return []; + }; + EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) { + var eventInstanceGroupsById = this.eventInstanceGroupsById; + var matchingInstances = []; + var id; + for (id in eventInstanceGroupsById) { + if (id !== eventDefId) { + matchingInstances.push.apply(matchingInstances, // append + eventInstanceGroupsById[id].eventInstances); + } + } + return matchingInstances; + }; + EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) { + var eventInstanceGroupsById = this.eventInstanceGroupsById; + var eventInstanceGroup = eventInstanceGroupsById[eventDefId] || + (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default()); + eventInstanceGroup.eventInstances.push(eventInstance); + this.tryRelease(); + }; + EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) { + var eventInstanceGroupsById = this.eventInstanceGroupsById; + var eventInstanceGroup = eventInstanceGroupsById[eventDef.id]; + var removeCnt; + if (eventInstanceGroup) { + removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) { + return currentEventInstance.def === eventDef; + }); + if (!eventInstanceGroup.eventInstances.length) { + delete eventInstanceGroupsById[eventDef.id]; + } + if (removeCnt) { + this.tryRelease(); + } + } + }; + // Releasing and Freezing + // ----------------------------------------------------------------------------------------------------------------- + EventPeriod.prototype.tryRelease = function () { + if (!this.pendingCnt) { + if (!this.freezeDepth) { + this.release(); + } + else { + this.stuntedReleaseCnt++; + } + } + }; + EventPeriod.prototype.release = function () { + this.releaseCnt++; + this.trigger('release', this.eventInstanceGroupsById); + }; + EventPeriod.prototype.whenReleased = function () { + var _this = this; + if (this.releaseCnt) { + return Promise_1.default.resolve(this.eventInstanceGroupsById); + } + else { + return Promise_1.default.construct(function (onResolve) { + _this.one('release', onResolve); + }); + } + }; + EventPeriod.prototype.freeze = function () { + if (!(this.freezeDepth++)) { + this.stuntedReleaseCnt = 0; + } + }; + EventPeriod.prototype.thaw = function () { + if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) { + this.release(); + } + }; + return EventPeriod; +}()); +exports.default = EventPeriod; +EmitterMixin_1.default.mixInto(EventPeriod); + + +/***/ }), +/* 244 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var $ = __webpack_require__(3); +var util_1 = __webpack_require__(4); +var ListenerMixin_1 = __webpack_require__(7); +/* Creates a clone of an element and lets it track the mouse as it moves +----------------------------------------------------------------------------------------------------------------------*/ +var MouseFollower = /** @class */ (function () { + function MouseFollower(sourceEl, options) { + this.isFollowing = false; + this.isHidden = false; + this.isAnimating = false; // doing the revert animation? + this.options = options = options || {}; + this.sourceEl = sourceEl; + this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent + } + // Causes the element to start following the mouse + MouseFollower.prototype.start = function (ev) { + if (!this.isFollowing) { + this.isFollowing = true; + this.y0 = util_1.getEvY(ev); + this.x0 = util_1.getEvX(ev); + this.topDelta = 0; + this.leftDelta = 0; + if (!this.isHidden) { + this.updatePosition(); + } + if (util_1.getEvIsTouch(ev)) { + this.listenTo($(document), 'touchmove', this.handleMove); + } + else { + this.listenTo($(document), 'mousemove', this.handleMove); + } + } + }; + // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position. + // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately. + MouseFollower.prototype.stop = function (shouldRevert, callback) { + var _this = this; + var revertDuration = this.options.revertDuration; + var complete = function () { + _this.isAnimating = false; + _this.removeElement(); + _this.top0 = _this.left0 = null; // reset state for future updatePosition calls + if (callback) { + callback(); + } + }; + if (this.isFollowing && !this.isAnimating) { + this.isFollowing = false; + this.stopListeningTo($(document)); + if (shouldRevert && revertDuration && !this.isHidden) { + this.isAnimating = true; + this.el.animate({ + top: this.top0, + left: this.left0 + }, { + duration: revertDuration, + complete: complete + }); + } + else { + complete(); + } + } + }; + // Gets the tracking element. Create it if necessary + MouseFollower.prototype.getEl = function () { + var el = this.el; + if (!el) { + el = this.el = this.sourceEl.clone() + .addClass(this.options.additionalClass || '') + .css({ + position: 'absolute', + visibility: '', + display: this.isHidden ? 'none' : '', + margin: 0, + right: 'auto', + bottom: 'auto', + width: this.sourceEl.width(), + height: this.sourceEl.height(), + opacity: this.options.opacity || '', + zIndex: this.options.zIndex + }); + // we don't want long taps or any mouse interaction causing selection/menus. + // would use preventSelection(), but that prevents selectstart, causing problems. + el.addClass('fc-unselectable'); + el.appendTo(this.parentEl); + } + return el; + }; + // Removes the tracking element if it has already been created + MouseFollower.prototype.removeElement = function () { + if (this.el) { + this.el.remove(); + this.el = null; + } + }; + // Update the CSS position of the tracking element + MouseFollower.prototype.updatePosition = function () { + var sourceOffset; + var origin; + this.getEl(); // ensure this.el + // make sure origin info was computed + if (this.top0 == null) { + sourceOffset = this.sourceEl.offset(); + origin = this.el.offsetParent().offset(); + this.top0 = sourceOffset.top - origin.top; + this.left0 = sourceOffset.left - origin.left; + } + this.el.css({ + top: this.top0 + this.topDelta, + left: this.left0 + this.leftDelta + }); + }; + // Gets called when the user moves the mouse + MouseFollower.prototype.handleMove = function (ev) { + this.topDelta = util_1.getEvY(ev) - this.y0; + this.leftDelta = util_1.getEvX(ev) - this.x0; + if (!this.isHidden) { + this.updatePosition(); + } + }; + // Temporarily makes the tracking element invisible. Can be called before following starts + MouseFollower.prototype.hide = function () { + if (!this.isHidden) { + this.isHidden = true; + if (this.el) { + this.el.hide(); + } + } + }; + // Show the tracking element after it has been temporarily hidden + MouseFollower.prototype.show = function () { + if (this.isHidden) { + this.isHidden = false; + this.updatePosition(); + this.getEl().show(); + } + }; + return MouseFollower; +}()); +exports.default = MouseFollower; +ListenerMixin_1.default.mixInto(MouseFollower); + + +/***/ }), +/* 245 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var HitDragListener_1 = __webpack_require__(23); +var Interaction_1 = __webpack_require__(15); +var DateClicking = /** @class */ (function (_super) { + tslib_1.__extends(DateClicking, _super); + /* + component must implement: + - bindDateHandlerToEl + - getSafeHitFootprint + - getHitEl + */ + function DateClicking(component) { + var _this = _super.call(this, component) || this; + _this.dragListener = _this.buildDragListener(); + return _this; + } + DateClicking.prototype.end = function () { + this.dragListener.endInteraction(); + }; + DateClicking.prototype.bindToEl = function (el) { + var component = this.component; + var dragListener = this.dragListener; + component.bindDateHandlerToEl(el, 'mousedown', function (ev) { + if (!component.shouldIgnoreMouse()) { + dragListener.startInteraction(ev); + } + }); + component.bindDateHandlerToEl(el, 'touchstart', function (ev) { + if (!component.shouldIgnoreTouch()) { + dragListener.startInteraction(ev); + } + }); + }; + // Creates a listener that tracks the user's drag across day elements, for day clicking. + DateClicking.prototype.buildDragListener = function () { + var _this = this; + var component = this.component; + var dayClickHit; // null if invalid dayClick + var dragListener = new HitDragListener_1.default(component, { + scroll: this.opt('dragScroll'), + interactionStart: function () { + dayClickHit = dragListener.origHit; + }, + hitOver: function (hit, isOrig, origHit) { + // if user dragged to another cell at any point, it can no longer be a dayClick + if (!isOrig) { + dayClickHit = null; + } + }, + hitOut: function () { + dayClickHit = null; + }, + interactionEnd: function (ev, isCancelled) { + var componentFootprint; + if (!isCancelled && dayClickHit) { + componentFootprint = component.getSafeHitFootprint(dayClickHit); + if (componentFootprint) { + _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev); + } + } + } + }); + // because dragListener won't be called with any time delay, "dragging" will begin immediately, + // which will kill any touchmoving/scrolling. Prevent this. + dragListener.shouldCancelTouchScroll = false; + dragListener.scrollAlwaysKills = true; + return dragListener; + }; + return DateClicking; +}(Interaction_1.default)); +exports.default = DateClicking; + + +/***/ }), +/* 246 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var util_1 = __webpack_require__(4); +var EventRenderer_1 = __webpack_require__(42); +/* +Only handles foreground segs. +Does not own rendering. Use for low-level util methods by TimeGrid. +*/ +var TimeGridEventRenderer = /** @class */ (function (_super) { + tslib_1.__extends(TimeGridEventRenderer, _super); + function TimeGridEventRenderer(timeGrid, fillRenderer) { + var _this = _super.call(this, timeGrid, fillRenderer) || this; + _this.timeGrid = timeGrid; + return _this; + } + TimeGridEventRenderer.prototype.renderFgSegs = function (segs) { + this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls); + }; + // Given an array of foreground segments, render a DOM element for each, computes position, + // and attaches to the column inner-container elements. + TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) { + var segsByCol; + var col; + segsByCol = this.timeGrid.groupSegsByCol(segs); + for (col = 0; col < this.timeGrid.colCnt; col++) { + this.updateFgSegCoords(segsByCol[col]); + } + this.timeGrid.attachSegsByCol(segsByCol, containerEls); + }; + TimeGridEventRenderer.prototype.unrenderFgSegs = function () { + if (this.fgSegs) { + this.fgSegs.forEach(function (seg) { + seg.el.remove(); + }); + } + }; + // Computes a default event time formatting string if `timeFormat` is not explicitly defined + TimeGridEventRenderer.prototype.computeEventTimeFormat = function () { + return this.opt('noMeridiemTimeFormat'); // like "6:30" (no AM/PM) + }; + // Computes a default `displayEventEnd` value if one is not expliclty defined + TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () { + return true; + }; + // Renders the HTML for a single event segment's default rendering + TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) { + var view = this.view; + var calendar = view.calendar; + var componentFootprint = seg.footprint.componentFootprint; + var isAllDay = componentFootprint.isAllDay; + var eventDef = seg.footprint.eventDef; + var isDraggable = view.isEventDefDraggable(eventDef); + var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef); + var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef); + var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd); + var skinCss = util_1.cssToStr(this.getSkinCss(eventDef)); + var timeText; + var fullTimeText; // more verbose time text. for the print stylesheet + var startTimeText; // just the start time text + classes.unshift('fc-time-grid-event', 'fc-v-event'); + // if the event appears to span more than one day... + if (view.isMultiDayRange(componentFootprint.unzonedRange)) { + // Don't display time text on segments that run entirely through a day. + // That would appear as midnight-midnight and would look dumb. + // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am) + if (seg.isStart || seg.isEnd) { + var zonedStart = calendar.msToMoment(seg.startMs); + var zonedEnd = calendar.msToMoment(seg.endMs); + timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay); + fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT'); + startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false + } + } + else { + // Display the normal time text for the *event's* times + timeText = this.getTimeText(seg.footprint); + fullTimeText = this.getTimeText(seg.footprint, 'LT'); + startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false + } + return '' + + '
    ' + + (timeText ? + '
    ' + + '' + util_1.htmlEscape(timeText) + '' + + '
    ' : + '') + + (eventDef.title ? + '
    ' + + util_1.htmlEscape(eventDef.title) + + '
    ' : + '') + + '
    ' + + '
    ' + + /* TODO: write CSS for this + (isResizableFromStart ? + '
    ' : + '' + ) + + */ + (isResizableFromEnd ? + '
    ' : + '') + + ''; + }; + // Given segments that are assumed to all live in the *same column*, + // compute their verical/horizontal coordinates and assign to their elements. + TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) { + this.timeGrid.computeSegVerticals(segs); // horizontals relies on this + this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array + this.timeGrid.assignSegVerticals(segs); + this.assignFgSegHorizontals(segs); + }; + // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each. + // NOTE: Also reorders the given array by date! + TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) { + var levels; + var level0; + var i; + this.sortEventSegs(segs); // order by certain criteria + levels = buildSlotSegLevels(segs); + computeForwardSlotSegs(levels); + if ((level0 = levels[0])) { + for (i = 0; i < level0.length; i++) { + computeSlotSegPressures(level0[i]); + } + for (i = 0; i < level0.length; i++) { + this.computeFgSegForwardBack(level0[i], 0, 0); + } + } + }; + // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range + // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and + // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left. + // + // The segment might be part of a "series", which means consecutive segments with the same pressure + // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of + // segments behind this one in the current series, and `seriesBackwardCoord` is the starting + // coordinate of the first segment in the series. + TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) { + var forwardSegs = seg.forwardSegs; + var i; + if (seg.forwardCoord === undefined) { + if (!forwardSegs.length) { + // if there are no forward segments, this segment should butt up against the edge + seg.forwardCoord = 1; + } + else { + // sort highest pressure first + this.sortForwardSegs(forwardSegs); + // this segment's forwardCoord will be calculated from the backwardCoord of the + // highest-pressure forward segment. + this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord); + seg.forwardCoord = forwardSegs[0].backwardCoord; + } + // calculate the backwardCoord from the forwardCoord. consider the series + seg.backwardCoord = seg.forwardCoord - + (seg.forwardCoord - seriesBackwardCoord) / // available width for series + (seriesBackwardPressure + 1); // # of segments in the series + // use this segment's coordinates to computed the coordinates of the less-pressurized + // forward segments + for (i = 0; i < forwardSegs.length; i++) { + this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord); + } + } + }; + TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) { + forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs')); + }; + // A cmp function for determining which forward segment to rely on more when computing coordinates. + TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) { + // put higher-pressure first + return seg2.forwardPressure - seg1.forwardPressure || + // put segments that are closer to initial edge first (and favor ones with no coords yet) + (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) || + // do normal sorting... + this.compareEventSegs(seg1, seg2); + }; + // Given foreground event segments that have already had their position coordinates computed, + // assigns position-related CSS values to their elements. + TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) { + var i; + var seg; + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + seg.el.css(this.generateFgSegHorizontalCss(seg)); + // if the height is short, add a className for alternate styling + if (seg.bottom - seg.top < 30) { + seg.el.addClass('fc-short'); + } + } + }; + // Generates an object with CSS properties/values that should be applied to an event segment element. + // Contains important positioning-related properties that should be applied to any event element, customized or not. + TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) { + var shouldOverlap = this.opt('slotEventOverlap'); + var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point + var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point + var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first + var isRTL = this.timeGrid.isRTL; + var left; // amount of space from left edge, a fraction of the total width + var right; // amount of space from right edge, a fraction of the total width + if (shouldOverlap) { + // double the width, but don't go beyond the maximum forward coordinate (1.0) + forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2); + } + if (isRTL) { + left = 1 - forwardCoord; + right = backwardCoord; + } + else { + left = backwardCoord; + right = 1 - forwardCoord; + } + props.zIndex = seg.level + 1; // convert from 0-base to 1-based + props.left = left * 100 + '%'; + props.right = right * 100 + '%'; + if (shouldOverlap && seg.forwardPressure) { + // add padding to the edge so that forward stacked events don't cover the resizer's icon + props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width + } + return props; + }; + return TimeGridEventRenderer; +}(EventRenderer_1.default)); +exports.default = TimeGridEventRenderer; +// Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is +// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date. +function buildSlotSegLevels(segs) { + var levels = []; + var i; + var seg; + var j; + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + // go through all the levels and stop on the first level where there are no collisions + for (j = 0; j < levels.length; j++) { + if (!computeSlotSegCollisions(seg, levels[j]).length) { + break; + } + } + seg.level = j; + (levels[j] || (levels[j] = [])).push(seg); + } + return levels; +} +// For every segment, figure out the other segments that are in subsequent +// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs +function computeForwardSlotSegs(levels) { + var i; + var level; + var j; + var seg; + var k; + for (i = 0; i < levels.length; i++) { + level = levels[i]; + for (j = 0; j < level.length; j++) { + seg = level[j]; + seg.forwardSegs = []; + for (k = i + 1; k < levels.length; k++) { + computeSlotSegCollisions(seg, levels[k], seg.forwardSegs); + } + } + } +} +// Figure out which path forward (via seg.forwardSegs) results in the longest path until +// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure +function computeSlotSegPressures(seg) { + var forwardSegs = seg.forwardSegs; + var forwardPressure = 0; + var i; + var forwardSeg; + if (seg.forwardPressure === undefined) { + for (i = 0; i < forwardSegs.length; i++) { + forwardSeg = forwardSegs[i]; + // figure out the child's maximum forward path + computeSlotSegPressures(forwardSeg); + // either use the existing maximum, or use the child's forward pressure + // plus one (for the forwardSeg itself) + forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure); + } + seg.forwardPressure = forwardPressure; + } +} +// Find all the segments in `otherSegs` that vertically collide with `seg`. +// Append into an optionally-supplied `results` array and return. +function computeSlotSegCollisions(seg, otherSegs, results) { + if (results === void 0) { results = []; } + for (var i = 0; i < otherSegs.length; i++) { + if (isSlotSegCollision(seg, otherSegs[i])) { + results.push(otherSegs[i]); + } + } + return results; +} +// Do these segments occupy the same vertical space? +function isSlotSegCollision(seg1, seg2) { + return seg1.bottom > seg2.top && seg1.top < seg2.bottom; +} + + +/***/ }), +/* 247 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var $ = __webpack_require__(3); +var HelperRenderer_1 = __webpack_require__(58); +var TimeGridHelperRenderer = /** @class */ (function (_super) { + tslib_1.__extends(TimeGridHelperRenderer, _super); + function TimeGridHelperRenderer() { + return _super !== null && _super.apply(this, arguments) || this; + } + TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) { + var helperNodes = []; + var i; + var seg; + var sourceEl; + // TODO: not good to call eventRenderer this way + this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls); + // Try to make the segment that is in the same row as sourceSeg look the same + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + if (sourceSeg && sourceSeg.col === seg.col) { + sourceEl = sourceSeg.el; + seg.el.css({ + left: sourceEl.css('left'), + right: sourceEl.css('right'), + 'margin-left': sourceEl.css('margin-left'), + 'margin-right': sourceEl.css('margin-right') + }); + } + helperNodes.push(seg.el[0]); + } + return $(helperNodes); // must return the elements rendered + }; + return TimeGridHelperRenderer; +}(HelperRenderer_1.default)); +exports.default = TimeGridHelperRenderer; + + +/***/ }), +/* 248 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var FillRenderer_1 = __webpack_require__(57); +var TimeGridFillRenderer = /** @class */ (function (_super) { + tslib_1.__extends(TimeGridFillRenderer, _super); + function TimeGridFillRenderer() { + return _super !== null && _super.apply(this, arguments) || this; + } + TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) { + var timeGrid = this.component; + var containerEls; + // TODO: more efficient lookup + if (type === 'bgEvent') { + containerEls = timeGrid.bgContainerEls; + } + else if (type === 'businessHours') { + containerEls = timeGrid.businessContainerEls; + } + else if (type === 'highlight') { + containerEls = timeGrid.highlightContainerEls; + } + timeGrid.updateSegVerticals(segs); + timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls); + return segs.map(function (seg) { + return seg.el[0]; + }); + }; + return TimeGridFillRenderer; +}(FillRenderer_1.default)); +exports.default = TimeGridFillRenderer; + + +/***/ }), +/* 249 */ +/***/ (function(module, exports, __webpack_require__) { + +/* A rectangular panel that is absolutely positioned over other content +------------------------------------------------------------------------------------------------------------------------ +Options: + - className (string) + - content (HTML string or jQuery element set) + - parentEl + - top + - left + - right (the x coord of where the right edge should be. not a "CSS" right) + - autoHide (boolean) + - show (callback) + - hide (callback) +*/ +Object.defineProperty(exports, "__esModule", { value: true }); +var $ = __webpack_require__(3); +var util_1 = __webpack_require__(4); +var ListenerMixin_1 = __webpack_require__(7); +var Popover = /** @class */ (function () { + function Popover(options) { + this.isHidden = true; + this.margin = 10; // the space required between the popover and the edges of the scroll container + this.options = options || {}; + } + // Shows the popover on the specified position. Renders it if not already + Popover.prototype.show = function () { + if (this.isHidden) { + if (!this.el) { + this.render(); + } + this.el.show(); + this.position(); + this.isHidden = false; + this.trigger('show'); + } + }; + // Hides the popover, through CSS, but does not remove it from the DOM + Popover.prototype.hide = function () { + if (!this.isHidden) { + this.el.hide(); + this.isHidden = true; + this.trigger('hide'); + } + }; + // Creates `this.el` and renders content inside of it + Popover.prototype.render = function () { + var _this = this; + var options = this.options; + this.el = $('
    ') + .addClass(options.className || '') + .css({ + // position initially to the top left to avoid creating scrollbars + top: 0, + left: 0 + }) + .append(options.content) + .appendTo(options.parentEl); + // when a click happens on anything inside with a 'fc-close' className, hide the popover + this.el.on('click', '.fc-close', function () { + _this.hide(); + }); + if (options.autoHide) { + this.listenTo($(document), 'mousedown', this.documentMousedown); + } + }; + // Triggered when the user clicks *anywhere* in the document, for the autoHide feature + Popover.prototype.documentMousedown = function (ev) { + // only hide the popover if the click happened outside the popover + if (this.el && !$(ev.target).closest(this.el).length) { + this.hide(); + } + }; + // Hides and unregisters any handlers + Popover.prototype.removeElement = function () { + this.hide(); + if (this.el) { + this.el.remove(); + this.el = null; + } + this.stopListeningTo($(document), 'mousedown'); + }; + // Positions the popover optimally, using the top/left/right options + Popover.prototype.position = function () { + var options = this.options; + var origin = this.el.offsetParent().offset(); + var width = this.el.outerWidth(); + var height = this.el.outerHeight(); + var windowEl = $(window); + var viewportEl = util_1.getScrollParent(this.el); + var viewportTop; + var viewportLeft; + var viewportOffset; + var top; // the "position" (not "offset") values for the popover + var left; // + // compute top and left + top = options.top || 0; + if (options.left !== undefined) { + left = options.left; + } + else if (options.right !== undefined) { + left = options.right - width; // derive the left value from the right value + } + else { + left = 0; + } + if (viewportEl.is(window) || viewportEl.is(document)) { + viewportEl = windowEl; + viewportTop = 0; // the window is always at the top left + viewportLeft = 0; // (and .offset() won't work if called here) + } + else { + viewportOffset = viewportEl.offset(); + viewportTop = viewportOffset.top; + viewportLeft = viewportOffset.left; + } + // if the window is scrolled, it causes the visible area to be further down + viewportTop += windowEl.scrollTop(); + viewportLeft += windowEl.scrollLeft(); + // constrain to the view port. if constrained by two edges, give precedence to top/left + if (options.viewportConstrain !== false) { + top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin); + top = Math.max(top, viewportTop + this.margin); + left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin); + left = Math.max(left, viewportLeft + this.margin); + } + this.el.css({ + top: top - origin.top, + left: left - origin.left + }); + }; + // Triggers a callback. Calls a function in the option hash of the same name. + // Arguments beyond the first `name` are forwarded on. + // TODO: better code reuse for this. Repeat code + Popover.prototype.trigger = function (name) { + if (this.options[name]) { + this.options[name].apply(this, Array.prototype.slice.call(arguments, 1)); + } + }; + return Popover; +}()); +exports.default = Popover; +ListenerMixin_1.default.mixInto(Popover); + + +/***/ }), +/* 250 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var $ = __webpack_require__(3); +var util_1 = __webpack_require__(4); +var EventRenderer_1 = __webpack_require__(42); +/* Event-rendering methods for the DayGrid class +----------------------------------------------------------------------------------------------------------------------*/ +var DayGridEventRenderer = /** @class */ (function (_super) { + tslib_1.__extends(DayGridEventRenderer, _super); + function DayGridEventRenderer(dayGrid, fillRenderer) { + var _this = _super.call(this, dayGrid, fillRenderer) || this; + _this.dayGrid = dayGrid; + return _this; + } + DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) { + // don't render timed background events + eventRanges = $.grep(eventRanges, function (eventRange) { + return eventRange.eventDef.isAllDay(); + }); + _super.prototype.renderBgRanges.call(this, eventRanges); + }; + // Renders the given foreground event segments onto the grid + DayGridEventRenderer.prototype.renderFgSegs = function (segs) { + var rowStructs = this.rowStructs = this.renderSegRows(segs); + // append to each row's content skeleton + this.dayGrid.rowEls.each(function (i, rowNode) { + $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl); + }); + }; + // Unrenders all currently rendered foreground event segments + DayGridEventRenderer.prototype.unrenderFgSegs = function () { + var rowStructs = this.rowStructs || []; + var rowStruct; + while ((rowStruct = rowStructs.pop())) { + rowStruct.tbodyEl.remove(); + } + this.rowStructs = null; + }; + // Uses the given events array to generate elements that should be appended to each row's content skeleton. + // Returns an array of rowStruct objects (see the bottom of `renderSegRow`). + // PRECONDITION: each segment shoud already have a rendered and assigned `.el` + DayGridEventRenderer.prototype.renderSegRows = function (segs) { + var rowStructs = []; + var segRows; + var row; + segRows = this.groupSegRows(segs); // group into nested arrays + // iterate each row of segment groupings + for (row = 0; row < segRows.length; row++) { + rowStructs.push(this.renderSegRow(row, segRows[row])); + } + return rowStructs; + }; + // Given a row # and an array of segments all in the same row, render a element, a skeleton that contains + // the segments. Returns object with a bunch of internal data about how the render was calculated. + // NOTE: modifies rowSegs + DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) { + var colCnt = this.dayGrid.colCnt; + var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels + var levelCnt = Math.max(1, segLevels.length); // ensure at least one level + var tbody = $(''); + var segMatrix = []; // lookup for which segments are rendered into which level+col cells + var cellMatrix = []; // lookup for all elements of the level+col matrix + var loneCellMatrix = []; // lookup for elements that only take up a single column + var i; + var levelSegs; + var col; + var tr; + var j; + var seg; + var td; + // populates empty cells from the current column (`col`) to `endCol` + function emptyCellsUntil(endCol) { + while (col < endCol) { + // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell + td = (loneCellMatrix[i - 1] || [])[col]; + if (td) { + td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1); + } + else { + td = $(''); + tr.append(td); + } + cellMatrix[i][col] = td; + loneCellMatrix[i][col] = td; + col++; + } + } + for (i = 0; i < levelCnt; i++) { + levelSegs = segLevels[i]; + col = 0; + tr = $(''); + segMatrix.push([]); + cellMatrix.push([]); + loneCellMatrix.push([]); + // levelCnt might be 1 even though there are no actual levels. protect against this. + // this single empty row is useful for styling. + if (levelSegs) { + for (j = 0; j < levelSegs.length; j++) { + seg = levelSegs[j]; + emptyCellsUntil(seg.leftCol); + // create a container that occupies or more columns. append the event element. + td = $('').append(seg.el); + if (seg.leftCol !== seg.rightCol) { + td.attr('colspan', seg.rightCol - seg.leftCol + 1); + } + else { + loneCellMatrix[i][col] = td; + } + while (col <= seg.rightCol) { + cellMatrix[i][col] = td; + segMatrix[i][col] = seg; + col++; + } + tr.append(td); + } + } + emptyCellsUntil(colCnt); // finish off the row + this.dayGrid.bookendCells(tr); + tbody.append(tr); + } + return { + row: row, + tbodyEl: tbody, + cellMatrix: cellMatrix, + segMatrix: segMatrix, + segLevels: segLevels, + segs: rowSegs + }; + }; + // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels. + // NOTE: modifies segs + DayGridEventRenderer.prototype.buildSegLevels = function (segs) { + var levels = []; + var i; + var seg; + var j; + // Give preference to elements with certain criteria, so they have + // a chance to be closer to the top. + this.sortEventSegs(segs); + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + // loop through levels, starting with the topmost, until the segment doesn't collide with other segments + for (j = 0; j < levels.length; j++) { + if (!isDaySegCollision(seg, levels[j])) { + break; + } + } + // `j` now holds the desired subrow index + seg.level = j; + // create new level array if needed and append segment + (levels[j] || (levels[j] = [])).push(seg); + } + // order segments left-to-right. very important if calendar is RTL + for (j = 0; j < levels.length; j++) { + levels[j].sort(compareDaySegCols); + } + return levels; + }; + // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row + DayGridEventRenderer.prototype.groupSegRows = function (segs) { + var segRows = []; + var i; + for (i = 0; i < this.dayGrid.rowCnt; i++) { + segRows.push([]); + } + for (i = 0; i < segs.length; i++) { + segRows[segs[i].row].push(segs[i]); + } + return segRows; + }; + // Computes a default event time formatting string if `timeFormat` is not explicitly defined + DayGridEventRenderer.prototype.computeEventTimeFormat = function () { + return this.opt('extraSmallTimeFormat'); // like "6p" or "6:30p" + }; + // Computes a default `displayEventEnd` value if one is not expliclty defined + DayGridEventRenderer.prototype.computeDisplayEventEnd = function () { + return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day + }; + // Builds the HTML to be used for the default element for an individual segment + DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) { + var view = this.view; + var eventDef = seg.footprint.eventDef; + var isAllDay = seg.footprint.componentFootprint.isAllDay; + var isDraggable = view.isEventDefDraggable(eventDef); + var isResizableFromStart = !disableResizing && isAllDay && + seg.isStart && view.isEventDefResizableFromStart(eventDef); + var isResizableFromEnd = !disableResizing && isAllDay && + seg.isEnd && view.isEventDefResizableFromEnd(eventDef); + var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd); + var skinCss = util_1.cssToStr(this.getSkinCss(eventDef)); + var timeHtml = ''; + var timeText; + var titleHtml; + classes.unshift('fc-day-grid-event', 'fc-h-event'); + // Only display a timed events time if it is the starting segment + if (seg.isStart) { + timeText = this.getTimeText(seg.footprint); + if (timeText) { + timeHtml = '' + util_1.htmlEscape(timeText) + ''; + } + } + titleHtml = + '' + + (util_1.htmlEscape(eventDef.title || '') || ' ') + // we always want one line of height + ''; + return '' + + '
    ' + + (this.dayGrid.isRTL ? + titleHtml + ' ' + timeHtml : // put a natural space in between + timeHtml + ' ' + titleHtml // + ) + + '
    ' + + (isResizableFromStart ? + '
    ' : + '') + + (isResizableFromEnd ? + '
    ' : + '') + + ''; + }; + return DayGridEventRenderer; +}(EventRenderer_1.default)); +exports.default = DayGridEventRenderer; +// Computes whether two segments' columns collide. They are assumed to be in the same row. +function isDaySegCollision(seg, otherSegs) { + var i; + var otherSeg; + for (i = 0; i < otherSegs.length; i++) { + otherSeg = otherSegs[i]; + if (otherSeg.leftCol <= seg.rightCol && + otherSeg.rightCol >= seg.leftCol) { + return true; + } + } + return false; +} +// A cmp function for determining the leftmost event +function compareDaySegCols(a, b) { + return a.leftCol - b.leftCol; +} + + +/***/ }), +/* 251 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var $ = __webpack_require__(3); +var HelperRenderer_1 = __webpack_require__(58); +var DayGridHelperRenderer = /** @class */ (function (_super) { + tslib_1.__extends(DayGridHelperRenderer, _super); + function DayGridHelperRenderer() { + return _super !== null && _super.apply(this, arguments) || this; + } + // Renders a mock "helper" event. `sourceSeg` is the associated internal segment object. It can be null. + DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) { + var helperNodes = []; + var rowStructs; + // TODO: not good to call eventRenderer this way + rowStructs = this.eventRenderer.renderSegRows(segs); + // inject each new event skeleton into each associated row + this.component.rowEls.each(function (row, rowNode) { + var rowEl = $(rowNode); // the .fc-row + var skeletonEl = $('
    '); // will be absolutely positioned + var skeletonTopEl; + var skeletonTop; + // If there is an original segment, match the top position. Otherwise, put it at the row's top level + if (sourceSeg && sourceSeg.row === row) { + skeletonTop = sourceSeg.el.position().top; + } + else { + skeletonTopEl = rowEl.find('.fc-content-skeleton tbody'); + if (!skeletonTopEl.length) { + skeletonTopEl = rowEl.find('.fc-content-skeleton table'); + } + skeletonTop = skeletonTopEl.position().top; + } + skeletonEl.css('top', skeletonTop) + .find('table') + .append(rowStructs[row].tbodyEl); + rowEl.append(skeletonEl); + helperNodes.push(skeletonEl[0]); + }); + return $(helperNodes); // must return the elements rendered + }; + return DayGridHelperRenderer; +}(HelperRenderer_1.default)); +exports.default = DayGridHelperRenderer; + + +/***/ }), +/* 252 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var $ = __webpack_require__(3); +var FillRenderer_1 = __webpack_require__(57); +var DayGridFillRenderer = /** @class */ (function (_super) { + tslib_1.__extends(DayGridFillRenderer, _super); + function DayGridFillRenderer() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.fillSegTag = 'td'; // override the default tag name + return _this; + } + DayGridFillRenderer.prototype.attachSegEls = function (type, segs) { + var nodes = []; + var i; + var seg; + var skeletonEl; + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + skeletonEl = this.renderFillRow(type, seg); + this.component.rowEls.eq(seg.row).append(skeletonEl); + nodes.push(skeletonEl[0]); + } + return nodes; + }; + // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered. + DayGridFillRenderer.prototype.renderFillRow = function (type, seg) { + var colCnt = this.component.colCnt; + var startCol = seg.leftCol; + var endCol = seg.rightCol + 1; + var className; + var skeletonEl; + var trEl; + if (type === 'businessHours') { + className = 'bgevent'; + } + else { + className = type.toLowerCase(); + } + skeletonEl = $('
    ' + + '
    ' + + '
    '); + trEl = skeletonEl.find('tr'); + if (startCol > 0) { + trEl.append(''); + } + trEl.append(seg.el.attr('colspan', endCol - startCol)); + if (endCol < colCnt) { + trEl.append(''); + } + this.component.bookendCells(trEl); + return skeletonEl; + }; + return DayGridFillRenderer; +}(FillRenderer_1.default)); +exports.default = DayGridFillRenderer; + + +/***/ }), +/* 253 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var BasicViewDateProfileGenerator_1 = __webpack_require__(228); +var UnzonedRange_1 = __webpack_require__(5); +var MonthViewDateProfileGenerator = /** @class */ (function (_super) { + tslib_1.__extends(MonthViewDateProfileGenerator, _super); + function MonthViewDateProfileGenerator() { + return _super !== null && _super.apply(this, arguments) || this; + } + // Computes the date range that will be rendered. + MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) { + var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); + var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay); + var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay); + var rowCnt; + // ensure 6 weeks + if (this.opt('fixedWeekCount')) { + rowCnt = Math.ceil(// could be partial weeks due to hiddenDays + end.diff(start, 'weeks', true) // dontRound=true + ); + end.add(6 - rowCnt, 'weeks'); + } + return new UnzonedRange_1.default(start, end); + }; + return MonthViewDateProfileGenerator; +}(BasicViewDateProfileGenerator_1.default)); +exports.default = MonthViewDateProfileGenerator; + + +/***/ }), +/* 254 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var util_1 = __webpack_require__(4); +var EventRenderer_1 = __webpack_require__(42); +var ListEventRenderer = /** @class */ (function (_super) { + tslib_1.__extends(ListEventRenderer, _super); + function ListEventRenderer() { + return _super !== null && _super.apply(this, arguments) || this; + } + ListEventRenderer.prototype.renderFgSegs = function (segs) { + if (!segs.length) { + this.component.renderEmptyMessage(); + } + else { + this.component.renderSegList(segs); + } + }; + // generates the HTML for a single event row + ListEventRenderer.prototype.fgSegHtml = function (seg) { + var view = this.view; + var calendar = view.calendar; + var theme = calendar.theme; + var eventFootprint = seg.footprint; + var eventDef = eventFootprint.eventDef; + var componentFootprint = eventFootprint.componentFootprint; + var url = eventDef.url; + var classes = ['fc-list-item'].concat(this.getClasses(eventDef)); + var bgColor = this.getBgColor(eventDef); + var timeHtml; + if (componentFootprint.isAllDay) { + timeHtml = view.getAllDayHtml(); + } + else if (view.isMultiDayRange(componentFootprint.unzonedRange)) { + if (seg.isStart || seg.isEnd) { + timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay)); + } + else { + timeHtml = view.getAllDayHtml(); + } + } + else { + // Display the normal time text for the *event's* times + timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint)); + } + if (url) { + classes.push('fc-has-url'); + } + return '' + + (this.displayEventTime ? + '' + + (timeHtml || '') + + '' : + '') + + '' + + '' + + '' + + '' + + '' + + util_1.htmlEscape(eventDef.title || '') + + '' + + '' + + ''; + }; + // like "4:00am" + ListEventRenderer.prototype.computeEventTimeFormat = function () { + return this.opt('mediumTimeFormat'); + }; + return ListEventRenderer; +}(EventRenderer_1.default)); +exports.default = ListEventRenderer; + + +/***/ }), +/* 255 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var $ = __webpack_require__(3); +var EventPointing_1 = __webpack_require__(59); +var ListEventPointing = /** @class */ (function (_super) { + tslib_1.__extends(ListEventPointing, _super); + function ListEventPointing() { + return _super !== null && _super.apply(this, arguments) || this; + } + // for events with a url, the whole should be clickable, + // but it's impossible to wrap with an tag. simulate this. + ListEventPointing.prototype.handleClick = function (seg, ev) { + var url; + _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action + // not clicking on or within an with an href + if (!$(ev.target).closest('a[href]').length) { + url = seg.footprint.eventDef.url; + if (url && !ev.isDefaultPrevented()) { + window.location.href = url; // simulate link click + } + } + }; + return ListEventPointing; +}(EventPointing_1.default)); +exports.default = ListEventPointing; + + +/***/ }), +/* 256 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var EventSourceParser_1 = __webpack_require__(38); +var ArrayEventSource_1 = __webpack_require__(52); +var FuncEventSource_1 = __webpack_require__(215); +var JsonFeedEventSource_1 = __webpack_require__(216); +EventSourceParser_1.default.registerClass(ArrayEventSource_1.default); +EventSourceParser_1.default.registerClass(FuncEventSource_1.default); +EventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default); + + +/***/ }), +/* 257 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var ThemeRegistry_1 = __webpack_require__(51); +var StandardTheme_1 = __webpack_require__(213); +var JqueryUiTheme_1 = __webpack_require__(214); +var Bootstrap3Theme_1 = __webpack_require__(258); +var Bootstrap4Theme_1 = __webpack_require__(259); +ThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default); +ThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default); +ThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default); +ThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default); + + +/***/ }), +/* 258 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var Theme_1 = __webpack_require__(19); +var Bootstrap3Theme = /** @class */ (function (_super) { + tslib_1.__extends(Bootstrap3Theme, _super); + function Bootstrap3Theme() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Bootstrap3Theme; +}(Theme_1.default)); +exports.default = Bootstrap3Theme; +Bootstrap3Theme.prototype.classes = { + widget: 'fc-bootstrap3', + tableGrid: 'table-bordered', + tableList: 'table', + tableListHeading: 'active', + buttonGroup: 'btn-group', + button: 'btn btn-default', + stateActive: 'active', + stateDisabled: 'disabled', + today: 'alert alert-info', + popover: 'panel panel-default', + popoverHeader: 'panel-heading', + popoverContent: 'panel-body', + // day grid + // for left/right border color when border is inset from edges (all-day in agenda view) + // avoid `panel` class b/c don't want margins/radius. only border color. + headerRow: 'panel-default', + dayRow: 'panel-default', + // list view + listView: 'panel panel-default' +}; +Bootstrap3Theme.prototype.baseIconClass = 'glyphicon'; +Bootstrap3Theme.prototype.iconClasses = { + close: 'glyphicon-remove', + prev: 'glyphicon-chevron-left', + next: 'glyphicon-chevron-right', + prevYear: 'glyphicon-backward', + nextYear: 'glyphicon-forward' +}; +Bootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons'; +Bootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon'; +Bootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-'; + + +/***/ }), +/* 259 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var tslib_1 = __webpack_require__(2); +var Theme_1 = __webpack_require__(19); +var Bootstrap4Theme = /** @class */ (function (_super) { + tslib_1.__extends(Bootstrap4Theme, _super); + function Bootstrap4Theme() { + return _super !== null && _super.apply(this, arguments) || this; + } + return Bootstrap4Theme; +}(Theme_1.default)); +exports.default = Bootstrap4Theme; +Bootstrap4Theme.prototype.classes = { + widget: 'fc-bootstrap4', + tableGrid: 'table-bordered', + tableList: 'table', + tableListHeading: 'table-active', + buttonGroup: 'btn-group', + button: 'btn btn-primary', + stateActive: 'active', + stateDisabled: 'disabled', + today: 'alert alert-info', + popover: 'card card-primary', + popoverHeader: 'card-header', + popoverContent: 'card-body', + // day grid + // for left/right border color when border is inset from edges (all-day in agenda view) + // avoid `table` class b/c don't want margins/padding/structure. only border color. + headerRow: 'table-bordered', + dayRow: 'table-bordered', + // list view + listView: 'card card-primary' +}; +Bootstrap4Theme.prototype.baseIconClass = 'fa'; +Bootstrap4Theme.prototype.iconClasses = { + close: 'fa-times', + prev: 'fa-chevron-left', + next: 'fa-chevron-right', + prevYear: 'fa-angle-double-left', + nextYear: 'fa-angle-double-right' +}; +Bootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome'; +Bootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome'; +Bootstrap4Theme.prototype.iconOverridePrefix = 'fa-'; + + +/***/ }), +/* 260 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var ViewRegistry_1 = __webpack_require__(22); +var BasicView_1 = __webpack_require__(62); +var MonthView_1 = __webpack_require__(229); +ViewRegistry_1.defineView('basic', { + 'class': BasicView_1.default +}); +ViewRegistry_1.defineView('basicDay', { + type: 'basic', + duration: { days: 1 } +}); +ViewRegistry_1.defineView('basicWeek', { + type: 'basic', + duration: { weeks: 1 } +}); +ViewRegistry_1.defineView('month', { + 'class': MonthView_1.default, + duration: { months: 1 }, + defaults: { + fixedWeekCount: true + } +}); + + +/***/ }), +/* 261 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var ViewRegistry_1 = __webpack_require__(22); +var AgendaView_1 = __webpack_require__(226); +ViewRegistry_1.defineView('agenda', { + 'class': AgendaView_1.default, + defaults: { + allDaySlot: true, + slotDuration: '00:30:00', + slotEventOverlap: true // a bad name. confused with overlap/constraint system + } +}); +ViewRegistry_1.defineView('agendaDay', { + type: 'agenda', + duration: { days: 1 } +}); +ViewRegistry_1.defineView('agendaWeek', { + type: 'agenda', + duration: { weeks: 1 } +}); + + +/***/ }), +/* 262 */ +/***/ (function(module, exports, __webpack_require__) { + +Object.defineProperty(exports, "__esModule", { value: true }); +var ViewRegistry_1 = __webpack_require__(22); +var ListView_1 = __webpack_require__(230); +ViewRegistry_1.defineView('list', { + 'class': ListView_1.default, + buttonTextKey: 'list', + defaults: { + buttonText: 'list', + listDayFormat: 'LL', + noEventsMessage: 'No events to display' + } +}); +ViewRegistry_1.defineView('listDay', { + type: 'list', + duration: { days: 1 }, + defaults: { + listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header + } +}); +ViewRegistry_1.defineView('listWeek', { + type: 'list', + duration: { weeks: 1 }, + defaults: { + listDayFormat: 'dddd', + listDayAltFormat: 'LL' + } +}); +ViewRegistry_1.defineView('listMonth', { + type: 'list', + duration: { month: 1 }, + defaults: { + listDayAltFormat: 'dddd' // day-of-week is nice-to-have + } +}); +ViewRegistry_1.defineView('listYear', { + type: 'list', + duration: { year: 1 }, + defaults: { + listDayAltFormat: 'dddd' // day-of-week is nice-to-have + } +}); + + +/***/ }), +/* 263 */ +/***/ (function(module, exports) { + +Object.defineProperty(exports, "__esModule", { value: true }); + + +/***/ }) +/******/ ]); +}); \ No newline at end of file From 6ee0cb51c63b716e05d727439f518e480625c76d Mon Sep 17 00:00:00 2001 From: Kevin Dao Date: Fri, 10 Aug 2018 15:36:40 -0500 Subject: [PATCH 5/6] Added course data into full calendar --- calendar.html | 5 +- css/_materialFullCalendar.css | 150 ++++++++++++++++++++++++++++++++++ css/fullcalendar.css | 2 +- js/calendar.js | 103 +++++++++++++++++++++++ 4 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 css/_materialFullCalendar.css diff --git a/calendar.html b/calendar.html index 25808796..3f7ce75b 100644 --- a/calendar.html +++ b/calendar.html @@ -1,11 +1,14 @@ + - +
    + + \ No newline at end of file diff --git a/css/_materialFullCalendar.css b/css/_materialFullCalendar.css new file mode 100644 index 00000000..25b3c7ad --- /dev/null +++ b/css/_materialFullCalendar.css @@ -0,0 +1,150 @@ +/* + +This is the Material Design theme for FullCalendar Weekly Agenda view + +Creation Date: Aug 19th 2015 +Author: Jacky Liang +Version: FullCalendar 2.4.0 +Tested Using the Following FC Settings: + + editable: false, + handleWindowResize: true, + weekends: false, // Hide weekends + defaultView: 'agendaWeek', // Only show week view + header: false, // Hide buttons/titles + minTime: '07:30:00', // Start time for the calendar + maxTime: '22:00:00', // End time for the calendar + columnFormat: { + week: 'ddd' // Only show day of the week names + }, + displayEventTime: true, + allDayText: 'Online/TBD' + +Note: This has NOT been tested on Monthly or Daily views. + +Colors: Use the following - https://www.google.com/design/spec/style/color.html#color-color-palette + at the 700 level. An opacity of 0.65 is automatically applied to the + 700 level colors to generate a soft and pleasing look. + + Color were applied to each event using the following code: + + events.push({ + title: 'This is a Material Design event!', + start: 'someStartDate', + end: 'someEndDate', + color: '#C2185B' + }); + +*/ +/* Remove that awful yellow color and border from today in Schedule */ +.fc-state-highlight { + opacity: 0; + border: none; + } + + /* Styling for each event from Schedule */ + .fc-time-grid-event.fc-v-event.fc-event { + border-radius: 4px; + border: none; + padding: 5px; + opacity: 0.65; + left: 5% !important; + right: 5% !important; + } + + /* Bolds the name of the event and inherits the font size */ + .fc-event { + font-size: inherit !important; + font-weight: bold !important; + } + + /* Remove the header border from Schedule */ + .fc td, .fc th { + border-style: none !important; + border-width: 1px !important; + padding: 0 !important; + vertical-align: top !important; + } + + /* Inherits background for each event from Schedule. */ + .fc-event .fc-bg { + z-index: 1 !important; + background: inherit !important; + opacity: 0.25 !important; + } + + /* Normal font weight for the time in each event */ + .fc-time-grid-event .fc-time { + font-weight: normal !important; + } + + /* Apply same opacity to all day events */ + .fc-ltr .fc-h-event.fc-not-end, .fc-rtl .fc-h-event.fc-not-start { + opacity: 0.65 !important; + margin-left: 12px !important; + padding: 5px !important; + } + + /* Apply same opacity to all day events */ + .fc-day-grid-event.fc-h-event.fc-event.fc-not-start.fc-end { + opacity: 0.65 !important; + margin-left: 12px !important; + padding: 5px !important; + } + + /* Material design button */ + .fc-button { + display: inline-block; + position: relative; + cursor: pointer; + min-height: 36px; + min-width: 88px; + line-height: 36px; + vertical-align: middle; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; + text-align: center; + border-radius: 2px; + box-sizing: border-box; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: none; + border: 0; + padding: 0 6px; + margin: 6px 8px; + letter-spacing: 0.01em; + background: transparent; + color: currentColor; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + font-style: inherit; + font-variant: inherit; + font-family: inherit; + text-decoration: none; + overflow: hidden; + -webkit-transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); + } + + .fc-button:hover { + background-color: rgba(158, 158, 158, 0.2); + } + + .fc-button:focus, .fc-button:hover { + text-decoration: none; + } + + /* The active button box is ugly so the active button will have the same appearance of the hover */ + .fc-state-active { + background-color: rgba(158, 158, 158, 0.2); + } + + /* Not raised button */ + .fc-state-default { + box-shadow: None; + } \ No newline at end of file diff --git a/css/fullcalendar.css b/css/fullcalendar.css index dcbc9997..577b69d2 100644 --- a/css/fullcalendar.css +++ b/css/fullcalendar.css @@ -613,7 +613,7 @@ TODO: more distinction between this file and common.css color: #666; } .fc-unthemed td.fc-today { - background: #fcf8e3; } + background: #FFFFFF; } .fc-unthemed .fc-disabled-day { background: #d7d7d7; diff --git a/js/calendar.js b/js/calendar.js index e69de29b..d94fc3b9 100644 --- a/js/calendar.js +++ b/js/calendar.js @@ -0,0 +1,103 @@ +$(function() { + + const materialColors = + ['#FF1744', '#F50057', '#D500F9', '#651FFF', + '#3D5AFE', '#2979FF', '#00B0FF', '#00E5FF', + '#1DE9B6', '#00E676', '#76FF03', '#C6FF00', + '#FFEA00', '#FFC400', '#FF9100', 'FF3D00', + '#4E342E', '#424242', '#37474F']; + + + // console.log(moment().day('Tuesday')._d.toString().split(' ')); + // console.log(moment().format("YYYY-MM-") + moment().day('Tuesday')._d.toString().split(' ')[2]); + + // Counter to iterate through material colors to avoid duplicates + var colorCounter = 0; + + // Each schedule needs to store 'TITLE - START TIME - END TIME - COLOR' + var classSchedules = []; + + chrome.storage.sync.get('savedCourses', function (data) { + var savedCourses = data.savedCourses; + + console.log(savedCourses); + + // Iterate through each saved course and add to 'event' + for (let i = 0; i < savedCourses.length; i++) { + var classInfo = savedCourses[i]; // Store all info for a single class + + for (let j = 0; j < classInfo.datetimearr.length; j++) { + let session = classInfo.datetimearr[j]; // One single session for a class + + if (session[0] == 'M') { + classSchedules.push({ + title: classInfo.coursename, + start: moment().format("YYYY-MM-") + moment().day('Monday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', + end: moment().format("YYYY-MM-") + moment().day('Monday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', + color: materialColors[colorCounter], + allday: false + }); + } + + if (session[0] == 'T') { + classSchedules.push({ + title: classInfo.coursename, + start: moment().format("YYYY-MM-") + moment().day('Tuesday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', + end: moment().format("YYYY-MM-") + moment().day('Tuesday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', + color: materialColors[colorCounter], + allday: false + }); + } + + if (session[0] == 'W') { + classSchedules.push({ + title: classInfo.coursename, + start: moment().format("YYYY-MM-") + moment().day('Wednesday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', + end: moment().format("YYYY-MM-") + moment().day('Wednesday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', + color: materialColors[colorCounter], + allday: false + }); + } + + if (session[0] == 'TH') { + classSchedules.push({ + title: classInfo.coursename, + start: moment().format("YYYY-MM-") + moment().day('Thursday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', + end: moment().format("YYYY-MM-") + moment().day('Thursday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', + color: materialColors[colorCounter], + allday: false + }); + } + + if (session[0] == 'F') { + classSchedules.push({ + title: classInfo.coursename, + start: moment().format("YYYY-MM-") + moment().day('Friday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', + end: moment().format("YYYY-MM-") + moment().day('Friday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', + color: materialColors[colorCounter], + allday: false + }); + } + + colorCounter++; + } + + } + + $('#calendar').fullCalendar({ + editable: false, // Don't allow editing of events + handleWindowResize: true, + weekends: false, // will hide Saturdays and Sundays + defaultView: 'agendaWeek', // Only show week view + header: false, // Hide buttons/titles + minTime: '08:00:00', // Start time + maxTime: '21:00:00', // End time + columnHeaderFormat: 'ddd', // Only show day of the week names + displayEventTime: true, // Display event time + allDaySlot: false, + events: classSchedules + }) + + }); + +}); \ No newline at end of file From f4bac4d558f883181d34a8283a15e6907eb9664e Mon Sep 17 00:00:00 2001 From: Kevin Dao Date: Fri, 10 Aug 2018 21:11:33 -0500 Subject: [PATCH 6/6] Fixed overlapping issue and modified event format --- css/_materialFullCalendar.css | 4 +--- js/calendar.js | 27 +++++++++++++-------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/css/_materialFullCalendar.css b/css/_materialFullCalendar.css index 25b3c7ad..9a4d9136 100644 --- a/css/_materialFullCalendar.css +++ b/css/_materialFullCalendar.css @@ -47,9 +47,7 @@ Colors: Use the following - https://www.google.com/design/spec/style/color.html# border-radius: 4px; border: none; padding: 5px; - opacity: 0.65; - left: 5% !important; - right: 5% !important; + opacity: 1; } /* Bolds the name of the event and inherits the font size */ diff --git a/js/calendar.js b/js/calendar.js index d94fc3b9..314dbe4b 100644 --- a/js/calendar.js +++ b/js/calendar.js @@ -7,10 +7,6 @@ $(function() { '#FFEA00', '#FFC400', '#FF9100', 'FF3D00', '#4E342E', '#424242', '#37474F']; - - // console.log(moment().day('Tuesday')._d.toString().split(' ')); - // console.log(moment().format("YYYY-MM-") + moment().day('Tuesday')._d.toString().split(' ')[2]); - // Counter to iterate through material colors to avoid duplicates var colorCounter = 0; @@ -20,18 +16,22 @@ $(function() { chrome.storage.sync.get('savedCourses', function (data) { var savedCourses = data.savedCourses; - console.log(savedCourses); - // Iterate through each saved course and add to 'event' for (let i = 0; i < savedCourses.length; i++) { var classInfo = savedCourses[i]; // Store all info for a single class + var department = classInfo.coursename.substring(0,classInfo.coursename.search(/\d/)-2); + var course_nbr = classInfo.coursename.substring(classInfo.coursename.search(/\d/),classInfo.coursename.indexOf(" ",classInfo.coursename.search(/\d/))); + var uncapProf = classInfo.profname; + + uncapProf = uncapProf.charAt(0) + uncapProf.substring(1).toLowerCase(); + for (let j = 0; j < classInfo.datetimearr.length; j++) { let session = classInfo.datetimearr[j]; // One single session for a class if (session[0] == 'M') { classSchedules.push({ - title: classInfo.coursename, + title: `${department}-${course_nbr}\n${uncapProf}`, start: moment().format("YYYY-MM-") + moment().day('Monday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', end: moment().format("YYYY-MM-") + moment().day('Monday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', color: materialColors[colorCounter], @@ -41,7 +41,7 @@ $(function() { if (session[0] == 'T') { classSchedules.push({ - title: classInfo.coursename, + title: `${department}-${course_nbr}\n${uncapProf}`, start: moment().format("YYYY-MM-") + moment().day('Tuesday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', end: moment().format("YYYY-MM-") + moment().day('Tuesday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', color: materialColors[colorCounter], @@ -51,7 +51,7 @@ $(function() { if (session[0] == 'W') { classSchedules.push({ - title: classInfo.coursename, + title: `${department}-${course_nbr}\n${uncapProf}`, start: moment().format("YYYY-MM-") + moment().day('Wednesday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', end: moment().format("YYYY-MM-") + moment().day('Wednesday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', color: materialColors[colorCounter], @@ -61,7 +61,7 @@ $(function() { if (session[0] == 'TH') { classSchedules.push({ - title: classInfo.coursename, + title: `${department}-${course_nbr}\n${uncapProf}`, start: moment().format("YYYY-MM-") + moment().day('Thursday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', end: moment().format("YYYY-MM-") + moment().day('Thursday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', color: materialColors[colorCounter], @@ -71,23 +71,23 @@ $(function() { if (session[0] == 'F') { classSchedules.push({ - title: classInfo.coursename, + title: `${department}-${course_nbr}\n${uncapProf}`, start: moment().format("YYYY-MM-") + moment().day('Friday')._d.toString().split(' ')[2] + 'T' + session[1][0] + ':00', end: moment().format("YYYY-MM-") + moment().day('Friday')._d.toString().split(' ')[2] + 'T' + session[1][1] + ':00', color: materialColors[colorCounter], allday: false }); } - colorCounter++; } - } $('#calendar').fullCalendar({ editable: false, // Don't allow editing of events handleWindowResize: true, weekends: false, // will hide Saturdays and Sundays + slotDuration: '00:15:00', // 15 minute intervals on vertical column + slotEventOverlap: false, // No overlapping between events defaultView: 'agendaWeek', // Only show week view header: false, // Hide buttons/titles minTime: '08:00:00', // Start time @@ -97,7 +97,6 @@ $(function() { allDaySlot: false, events: classSchedules }) - }); }); \ No newline at end of file