📄 jsclass_scheduler.js
字号:
if(has_meridiem) { GLOBAL_REGISTRY.focus.fields.time_start = hour_start + time_separator + minute_start + meridiem; } else { GLOBAL_REGISTRY.focus.fields.time_start = hour_start+time_separator+minute_start; //GLOBAL_REGISTRY.focus.fields.time_start = document.EditView.time_hour_start.value+time_separator+minute_start; } GLOBAL_REGISTRY.focus.fields.date_start = document.EditView.date_start.value; GLOBAL_REGISTRY.focus.fields.duration_hours = document.EditView.duration_hours.value; GLOBAL_REGISTRY.focus.fields.duration_minutes = document.EditView.duration_minutes.value; GLOBAL_REGISTRY.focus.fields.datetime_start = SugarDateTime.mysql2jsDateTime(GLOBAL_REGISTRY.focus.fields.date_start,GLOBAL_REGISTRY.focus.fields.time_start); this.timeslots = new Array(); this.hours = 9; this.segments = 4; this.start_hours_before = 4; var minute_interval = 15; var dtstart = GLOBAL_REGISTRY.focus.fields.datetime_start; // initialize first date in timeslots var curdate = new Date(dtstart.getFullYear(),dtstart.getMonth(),dtstart.getDate(),dtstart.getHours()-this.start_hours_before,0); if(typeof(GLOBAL_REGISTRY.focus.fields.duration_minutes) == 'undefined') { GLOBAL_REGISTRY.focus.fields.duration_minutes = 0; } GLOBAL_REGISTRY.focus.fields.datetime_end = new Date(dtstart.getFullYear(),dtstart.getMonth(),dtstart.getDate(),dtstart.getHours()+parseInt(GLOBAL_REGISTRY.focus.fields.duration_hours),dtstart.getMinutes()+parseInt(GLOBAL_REGISTRY.focus.fields.duration_minutes),0); var has_start = false; var has_end = false; for(i=0;i < this.hours*this.segments; i++) { var hash = SugarDateTime.getUTCHash(curdate); var obj = {"hash":hash,"date_obj":curdate}; if(has_start == false && GLOBAL_REGISTRY.focus.fields.datetime_start.getTime() <= curdate.getTime()) { obj.is_start = true; has_start = true; } if(has_end == false && GLOBAL_REGISTRY.focus.fields.datetime_end.getTime() <= curdate.getTime()) { obj.is_end = true; has_end = true; } this.timeslots.push(obj); curdate = new Date(curdate.getFullYear(),curdate.getMonth(),curdate.getDate(),curdate.getHours(),curdate.getMinutes()+minute_interval); }}SugarWidgetSchedulerAttendees.prototype.load = function (parentNode) { this.parentNode = parentNode; this.display();}SugarWidgetSchedulerAttendees.prototype.display = function() { var dtstart = GLOBAL_REGISTRY.focus.fields.datetime_start; var top_date = SugarDateTime.getFormattedDate(dtstart); var html = '<div class="schedulerDiv"><table class="schedulerTable" border=0 cellpadding=0 cellspacing=0>'; html += '<tr class="schedulerTopRow">'; html += '<td height="20" align="center" class="schedulerTopDateCell" colspan="'+((this.hours*this.segments)+2)+'">'+ top_date +'</td>'; html += '</tr>'; html += '<tr class="schedulerTimeRow">'; html += '<td class="schedulerAttendeeHeaderCell"> </td>'; for(var i=0;i < (this.timeslots.length/this.segments); i++) { var hours = this.timeslots[i*this.segments].date_obj.getHours(); var am_pm = ''; if(time_reg_format.indexOf('A') >= 0 || time_reg_format.indexOf('a') >= 0) { am_pm = "AM"; if(hours > 12) { am_pm = "PM"; hours -= 12; } if(hours == 12) { am_pm = "PM"; } if(hours == 0) { hours = 12; am_pm = "AM"; } if(time_reg_format.indexOf('a') >= 0) { am_pm = am_pm.toLowerCase(); } if(hours != 0 && hours != 12 && i != 0) { am_pm = ""; } } var form_hours = hours+time_separator+"00"; html += '<td colspan="'+this.segments+'" class="schedulerTimeCell">'+form_hours+am_pm+'</td>'; } html += '<td class="schedulerDeleteHeaderCell"> </td>'; html += '</tr>'; html += '</table></div>'; this.parentNode.innerHTML = html; var thetable = this.parentNode.getElementsByTagName('tbody')[0]; if(typeof (GLOBAL_REGISTRY) == 'undefined') { return; } // grab current user (as event-coordinator) if(typeof (GLOBAL_REGISTRY.focus.users_arr) == 'undefined' || GLOBAL_REGISTRY.focus.users_arr.length == 0) { GLOBAL_REGISTRY.focus.users_arr = [ GLOBAL_REGISTRY.current_user ]; } if(typeof GLOBAL_REGISTRY.focus.users_arr_hash == 'undefined') { GLOBAL_REGISTRY.focus.users_arr_hash = new Object(); } // append attendee rows for(var i=0;i < GLOBAL_REGISTRY.focus.users_arr.length;i++) { var row = new SugarWidgetScheduleRow(this.timeslots); row.focus_bean = GLOBAL_REGISTRY.focus.users_arr[i]; GLOBAL_REGISTRY.focus.users_arr_hash[ GLOBAL_REGISTRY.focus.users_arr[i]['fields']['id']] = GLOBAL_REGISTRY.focus.users_arr[i]; row.load(thetable); }}SugarWidgetSchedulerAttendees.form_add_attendee = function (list_row) { if(typeof (GLOBAL_REGISTRY.result_list[list_row]) != 'undefined' && typeof(GLOBAL_REGISTRY.focus.users_arr_hash[ GLOBAL_REGISTRY.result_list[list_row].fields.id]) == 'undefined') { GLOBAL_REGISTRY.focus.users_arr[ GLOBAL_REGISTRY.focus.users_arr.length ] = GLOBAL_REGISTRY.result_list[list_row]; } GLOBAL_REGISTRY.scheduler_attendees_obj.display();}//////////////////////////////////////////////////// class: SugarWidgetScheduleRow// widget to display each row in the scheduler////////////////////////////////////////////////////SugarClass.inherit("SugarWidgetScheduleRow","SugarClass");function SugarWidgetScheduleRow(timeslots) { this.init(timeslots);}SugarWidgetScheduleRow.prototype.init = function(timeslots) { this.timeslots = timeslots;}SugarWidgetScheduleRow.prototype.load = function (thetable) { this.thetable = thetable; this.display(); var self = this; vcalClient = new SugarVCalClient(); if(typeof (GLOBAL_REGISTRY['freebusy_adjusted']) == 'undefined' || typeof (GLOBAL_REGISTRY['freebusy_adjusted'][this.focus_bean.fields.id]) == 'undefined') { global_request_registry[req_count] = [this,'display']; vcalClient.load(this.focus_bean.fields.id,req_count); req_count++; } else { this.display(); }}SugarWidgetScheduleRow.prototype.display = function() { var self = this; var tr; if(typeof (this.element) != 'undefined') { this.thetable.deleteRow(this.element_index); tr = this.thetable.insertRow(this.element_index); } else { tr = this.thetable.insertRow(this.thetable.rows.length); } tr.className = "schedulerAttendeeRow"; var td = tr.insertCell(tr.cells.length); // icon + full name td.className = 'schedulerAttendeeCell'; //var img = '<img align="absmiddle" src="'+GLOBAL_REGISTRY.config['site_url']+'/themes/'+GLOBAL_REGISTRY.current_user.theme+'/images/'+self.focus_bean.module+'s.gif"/> '; var img = '<img align="absmiddle" src="themes/default/images/'+self.focus_bean.module+'s.gif"/> '; td.innerHTML = img; td.innerHTML = td.innerHTML; if (self.focus_bean.fields.full_name) td.innerHTML += ' ' + self.focus_bean.fields.full_name; else td.innerHTML += ' ' + self.focus_bean.fields.name; // add freebusy tds here: this.add_freebusy_nodes(tr); // delete button var td = tr.insertCell(tr.cells.length); td.className = 'schedulerAttendeeDeleteCell'; td.noWrap = true; if ( GLOBAL_REGISTRY.focus.fields.assigned_user_id != self.focus_bean.fields.id ) { td.innerHTML = '<a title="'+ GLOBAL_REGISTRY['meeting_strings']['LBL_DEL'] +'" class="listViewTdToolsS1" href="javascript:SugarWidgetScheduleRow.deleteRow(\''+self.focus_bean.fields.id+'\');"> <img src="themes/'+GLOBAL_REGISTRY.current_user.theme+'/images/delete_inline.gif" align="absmiddle" alt="'+ GLOBAL_REGISTRY['meeting_strings']['LBL_DEL'] +'" border="0"> '+ GLOBAL_REGISTRY['meeting_strings']['LBL_DEL'] +'</a>'; } this.element = tr; this.element_index = this.thetable.rows.length - 1;}SugarWidgetScheduleRow.deleteRow = function(bean_id) { // can't delete organizer if(GLOBAL_REGISTRY.focus.users_arr.length == 1 || GLOBAL_REGISTRY.focus.fields.assigned_user_id == bean_id) { return; } for(var i=0;i<GLOBAL_REGISTRY.focus.users_arr.length;i++) { if(GLOBAL_REGISTRY.focus.users_arr[i]['fields']['id']==bean_id) { delete GLOBAL_REGISTRY.focus.users_arr_hash[GLOBAL_REGISTRY.focus.users_arr[i]['fields']['id']]; GLOBAL_REGISTRY.focus.users_arr.splice(i,1); GLOBAL_REGISTRY.container.root_widget.display(); } }}function DL_GetElementLeft(eElement) { /* * ifargument is invalid * (not specified, is null or is 0) * and function is a method * identify the element as the method owner */ if(!eElement && this) { eElement = this; } /* * initialize var to store calculations * identify first offset parent element * move up through element hierarchy * appending left offset of each parent * until no more offset parents exist */ var nLeftPos = eElement.offsetLeft; var eParElement = eElement.offsetParent; while (eParElement != null) { nLeftPos += eParElement.offsetLeft; eParElement = eParElement.offsetParent; } return nLeftPos; // return the number calculated}function DL_GetElementTop(eElement) { if(!eElement && this) { eElement = this; } var nTopPos = eElement.offsetTop; var eParElement = eElement.offsetParent; while (eParElement != null) { nTopPos += eParElement.offsetTop; eParElement = eParElement.offsetParent; } return nTopPos;}//////////////////////////////////////////// adds the <td>s for freebusy display within a rowSugarWidgetScheduleRow.prototype.add_freebusy_nodes = function(tr,attendee) { var hours = 9; var segments = 4; var html = ''; var is_loaded = false; if(typeof GLOBAL_REGISTRY['freebusy_adjusted'] != 'undefined' && typeof GLOBAL_REGISTRY['freebusy_adjusted'][this.focus_bean.fields.id] != 'undefined') { is_loaded = true; } var in_current = false; for(var i=0;i < this.timeslots.length; i++) { var cellclassname = 'schedulerSlotCellHour'; var td = tr.insertCell(tr.cells.length); if(typeof(this.timeslots[i]['is_start']) != 'undefined') { in_current = true; cellclassname = 'schedulerSlotCellStartTime'; } if(typeof(this.timeslots[i]['is_end']) != 'undefined') { in_current = false; cellclassname = 'schedulerSlotCellEndTime'; } td.className =cellclassname; if(in_current) { td.style.backgroundColor="#ffffff"; } if(is_loaded) { // iftheres a freebusy stack in this slice if( typeof(GLOBAL_REGISTRY['freebusy_adjusted'][this.focus_bean.fields.id][this.timeslots[i].hash]) != 'undefined') { td.style.backgroundColor="#4D5EAA"; if(in_current) { fb_limit = 1; if(typeof(GLOBAL_REGISTRY.focus.orig_users_arr_hash) != 'undefined' && typeof(GLOBAL_REGISTRY.focus.orig_users_arr_hash[this.focus_bean.fields.id]) != 'undefined') { fb_limit = 2; } if( GLOBAL_REGISTRY['freebusy_adjusted'][this.focus_bean.fields.id][this.timeslots[i].hash] >= fb_limit) { td.style.backgroundColor="#AA4D4D"; } else { td.style.backgroundColor="#4D5EAA"; } } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -