moodle/calendar/calendar.js
Sam Hemelryk 53fc3e7040 javascript MDL-21503 Removed use of the global Y from dock, navigation and calendar
Also included in this patch the ability to switch the dock from the left to right side of the screen.
Altered js_object_init to deliver Y like js_init_call does now.
Several minor tweaks made to the dock and navigation as well at the same time.
2010-02-05 06:36:09 +00:00

88 lines
3.1 KiB
JavaScript

/**
* Define a blocks namespace if it has not already been defined
* @namespace
*/
M = M || {};
/**
* A calendar namespace for the calendar block
* @namespace
*/
M.core_calendar = {
// The seconds to delay the show of a calendar event by
showdelaysecs: 1,
// The calendar event currently pending display
showdelayevent: null,
// An array containing all calendar events
events : [],
init : function(Y, properties) {
var id = properties.id;
this.events[id] = (function(Y, properties){
// Prepares an event object that this function will return
var event = {
id : properties.id,
title : properties.title,
content : properties.content,
displayed : false,
panel : null,
node : Y.one('#'+properties.id),
/**
* Initialises the calendar event to show after the given delay
* @function
* @param {Event} e
*/
show_init : function(e) {
if (M.core_calendar.showdelayevent !== this.id) {
if (M.core_calendar.showdelayevent !== null) {
M.core_calendar.events[M.blocks.calendar.showdelayevent].hide(e);
}
M.core_calendar.showdelayevent = this.id;
setTimeout(M.core_calendar.show_event_callback, M.core_calendar.showdelaysecs*1000);
}
},
/**
* Hides the events panel if it is being displayed
* @function
* @param {Event} e
*/
hide : function(e) {
M.core_calendar.showdelayevent = null;
if (this.displayed) {
this.displayed = false;
this.panel.hide();
}
},
/**
* Shows the calendar event
* @function
*/
show : function() {
this.panel = new YAHOO.widget.Panel(this.id+'_panel', {
width:"240px",
visible:false,
draggable:false,
close:false,
constraintoviewport:true
});
this.panel.setHeader(this.title);
this.panel.setBody(this.content);
this.panel.render(this.id);
this.panel.show();
this.displayed = true;
}
}
event.node.on('mouseenter', event.show_init, event);
event.node.on('mouseleave', event.hide, event);
return event;
})(Y, properties);
},
/**
* Callback function for the showback method
* @function
*/
show_event_callback : function() {
if (M.core_calendar.showdelayevent !== null) {
M.core_calendar.events[M.core_calendar.showdelayevent].show();
}
}
}