Skip to content

Commit

Permalink
calendar MDL-23084 Fixed calendar overlay bug preventing events from …
Browse files Browse the repository at this point in the history
…being clicked on and rewrote as YUI3 module
  • Loading branch information
Sam Hemelryk committed Jul 9, 2010
1 parent 74fd6b1 commit 33e48a1
Show file tree
Hide file tree
Showing 7 changed files with 141 additions and 120 deletions.
112 changes: 0 additions & 112 deletions calendar/calendar.js

This file was deleted.

4 changes: 2 additions & 2 deletions calendar/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ function calendar_get_mini($courses, $groups, $users, $cal_month = false, $cal_y
/**
* calendar_get_popup, called at multiple points in from calendar_get_mini.
* Copied and modified from calendar_get_mini.
* @uses OverLib popup.
* @global moodle_page $PAGE
* @param $is_today bool, false except when called on the current day.
* @param $event_timestart mixed, $events[$eventid]->timestart, OR false if there are no events.
* @param $popupcontent string.
Expand All @@ -373,7 +373,7 @@ function calendar_get_popup($is_today, $event_timestart, $popupcontent='') {
$popupcaption .= get_string('eventsfor', 'calendar', userdate($event_timestart, get_string('strftimedayshort')));
}
$id = 'calendar_tooltip_'.$popupcount;
$PAGE->requires->js_init_call("M.core_calendar.init", array(array('id'=>$id,'title'=>$popupcaption, 'content'=>$popupcontent)));
$PAGE->requires->yui_module('moodle-calendar-eventmanager', 'M.core_calendar.add_event', array(array('eventId'=>$id,'title'=>$popupcaption, 'content'=>$popupcontent)));

$popupcount++;
return 'id="'.$id.'"';
Expand Down
2 changes: 1 addition & 1 deletion calendar/renderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public function basic_export_form($allowthisweek, $allownextweek, $allownextmont
$output .= html_writer::tag('div', '', array('id'=>'url', 'style'=>'overflow:scroll;width:650px;'));
$output .= html_writer::end_tag('div');

$this->page->requires->js_init_call('M.core_calendar.init_basic_export', array($allowthisweek, $allownextweek, $allownextmonth, $username, $authtoken));
$this->page->requires->yui_module('moodle-calendar-eventmanager', 'M.core_calendar.init_basic_export', array($allowthisweek, $allownextweek, $allownextmonth, $username, $authtoken));

return $output;
}
Expand Down
4 changes: 4 additions & 0 deletions calendar/yui/eventmanager/assets/skins/sam/eventmanager.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.calendar-event-panel {background-color:#666;border:2px solid #666;border-width: 0 2px 2px 0;}
.calendar-event-panel .yui3-overlay-content {background-color:#fff;border:1px solid #555;margin-top:-5px;margin-left:-5px;}
.calendar-event-panel .yui3-overlay-content h2.eventtitle {margin:3px 5px 2px;padding:0;text-align:center;}
.calendar-event-panel .eventcontent {margin:5px;padding:0;text-align:center;}
133 changes: 133 additions & 0 deletions calendar/yui/eventmanager/eventmanager.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
YUI.add('moodle-calendar-eventmanager', function(Y) {

var ENAME = 'Calendar event',
EVENTID = 'eventId',
EVENTNODE = 'node',
EVENTTITLE = 'title',
EVENTCONTENT = 'content',
EVENTDELAY = 'delay',
SHOWTIMEOUT = 'showTimeout',
HIDETIMEOUT = 'hideTimeout';

var EVENT = function(config) {
EVENT.superclass.constructor.apply(this, arguments);
}
Y.extend(EVENT, Y.Base, {
initializer : function(config){
var id = this.get(EVENTID), node = this.get(EVENTNODE), td = node.ancestor('td'), constraint = td.ancestor('div'), panel;
this.publish('showevent');
this.publish('hideevent');
panel = new Y.Overlay({
constrain : constraint,
align : {
node : td,
points:[Y.WidgetPositionAlign.TL, Y.WidgetPositionAlign.BC]
},
headerContent : Y.Node.create('<h2 class="eventtitle">'+this.get(EVENTTITLE)+'</h2>'),
bodyContent : Y.Node.create('<div class="eventcontent">'+this.get(EVENTCONTENT)+'</div>'),
visible : false,
id : this.get(EVENTID)+'_panel',
width : Math.floor(constraint.get('offsetWidth')*0.9)+"px"
});
panel.get('boundingBox').addClass('calendar-event-panel')
panel.render(td);
this.on('showevent', panel.show, panel);
this.on('hideevent', panel.hide, panel);
td.on('mouseenter', this.startShow, this);
td.on('mouseleave', this.startHide, this);
},
startShow : function() {
if (this.get(SHOWTIMEOUT) !== null) {
this.cancelShow();
}
var self = this;
this.set(SHOWTIMEOUT, setTimeout(function(){self.show();}, this.get(EVENTDELAY)));
},
cancelShow : function() {
clearTimeout(this.get(SHOWTIMEOUT));
},
show : function() {
this.fire('showevent');
},
startHide : function() {
if (this.get(HIDETIMEOUT) !== null) {
this.cancelHide();
}
var self = this;
this.set(HIDETIMEOUT, setTimeout(function(){self.hide();}, this.get(EVENTDELAY)));
},
hide : function() {
this.fire('hideevent');
},
cancelHide : function() {
clearTimeout(this.get(HIDETIMEOUT));
}
}, {
NAME : ENAME,
ATTRS : {
eventId : {
setter : function(nodeid) {
this.set(EVENTNODE, Y.one('#'+nodeid));
return nodeid;
},
validator : Y.Lang.isString
},
node : {
setter : function(node) {
var n = Y.one(node);
if (!n) {
Y.fail(UEP.NAME+': invalid event node set');
}
return n;
}
},
title : {
validator : Y.Lang.isString
},
content : {
validator : Y.Lang.isString
},
delay : {
value : 300,
validator : Y.Lang.isNumber
},
showTimeout : {
value : null
},
hideTimeout : {
value : null
}
}
});
Y.augment(EVENT, Y.EventTarget);

var EVENTMANAGER = {
add_event : function(config) {
new EVENT(config);
},
init_basic_export : function(allowthisweek, allownextweek, allownextmonth, username, authtoken) {
var params = {
preset_what : (Y.one('#pw_course').get('checked'))?'courses':'all',
preset_time : 'recentupcoming',
username : username,
authtoken : authtoken

}
if (allowthisweek && Y.one('#pt_wknow').get('checked')) {
params.presettime = 'weeknow';
} else if (allownextweek && Y.one('#pt_wknext').get('checked')) {
params.presettime = 'weeknext';
} else if (allownextmonth && Y.one('#pt_monnext').get('checked')) {
params.presettime = 'monthnext';
} else if (Y.one('#pt_monnow').get('checked')) {
params.presettime = 'monthnow';
}
Y.one('#url').setContent(M.cfg.wwwroot+'/calendar/export_execute.php?'+build_querystring(params));
Y.one('#urlbox').setStyle('display', 'block');
}
}

M.core_calendar = M.core_calendar || {}
Y.mix(M.core_calendar, EVENTMANAGER);

}, '@VERSION@', {requires:['base', 'node', 'event-mouseenter', 'overlay', 'moodle-calendar-eventmanager-skin']});
5 changes: 0 additions & 5 deletions lib/outputrequirementslib.php
Original file line number Diff line number Diff line change
Expand Up @@ -417,11 +417,6 @@ protected function find_module($component) {
'requires' => array('base', 'node', 'event-custom', 'event-mouseenter', 'event-resize'),
'strings' => array(array('addtodock', 'block'),array('undockitem', 'block'),array('undockall', 'block'),array('thisdirectionvertical', 'langconfig')));
break;
case 'core_calendar':
$module = array('name' => 'core_calendar',
'fullpath' => '/calendar/calendar.js',
'requires' => array('dom', 'event', 'node', 'yui2-container', 'event-mouseenter'));
break;
case 'core_message':
$module = array('name' => 'core_message',
'fullpath' => '/message/module.js');
Expand Down
1 change: 1 addition & 0 deletions theme/standard/style/blocks.css
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
/** Calendar Month **/
.block_calendar_month abbr {border-width:0;}
.block_calendar_month .eventnone a {text-decoration:none;color:black;cursor:text;}
.calendar-event-panel .yui3-widget-hd {background-image:url([[pix:theme|hgradient]]);background-repeat: repeat-x;background-color:#e1e1df;border-bottom:1px solid #ddd;}

/** Calendar Upcoming **/
.block_calendar_upcoming .event .date {text-align:right;}
Expand Down

0 comments on commit 33e48a1

Please sign in to comment.