AutorÃa | Ultima modificación | Ver Log |
var DIALOGUE_SELECTOR = ' [role=dialog]',MENUBAR_SELECTOR = '[role=menubar]',DOT = '.',HAS_ZINDEX = 'moodle-has-zindex';/*** Add some custom methods to the node class to make our lives a little* easier within this module.*/Y.mix(Y.Node.prototype, {/*** Gets the value of the first option in the select box*/firstOptionValue: function() {if (this.get('nodeName').toLowerCase() !== 'select') {return false;}return this.one('option').get('value');},/*** Gets the value of the last option in the select box*/lastOptionValue: function() {if (this.get('nodeName').toLowerCase() !== 'select') {return false;}return this.all('option').item(this.optionSize() - 1).get('value');},/*** Gets the number of options in the select box*/optionSize: function() {if (this.get('nodeName').toLowerCase() !== 'select') {return false;}return parseInt(this.all('option').size(), 10);},/*** Gets the value of the selected option in the select box*/selectedOptionValue: function() {if (this.get('nodeName').toLowerCase() !== 'select') {return false;}return this.all('option').item(this.get('selectedIndex')).get('value');}});M.form = M.form || {};M.form.dateselector = {panel: null,calendar: null,currentowner: null,hidetimeout: null,repositiontimeout: null,init_date_selectors: function(config) {if (this.panel === null) {this.initPanel(config);}Y.all('.fdate_time_selector').each(function() {config.node = this;new CALENDAR(config);});Y.all('.fdate_selector').each(function() {config.node = this;new CALENDAR(config);});},initPanel: function(config) {this.panel = new Y.Overlay({visible: false,bodyContent: Y.Node.create('<div id="dateselector-calendar-content"></div>'),id: 'dateselector-calendar-panel',constrain: true // constrain panel to viewport.});this.panel.render(document.body);// Determine the correct zindex by looking at all existing dialogs and menubars in the page.this.panel.on('focus', function() {var highestzindex = 0;Y.all(DIALOGUE_SELECTOR + ', ' + MENUBAR_SELECTOR + ', ' + DOT + HAS_ZINDEX).each(function(node) {var zindex = this.findZIndex(node);if (zindex > highestzindex) {highestzindex = zindex;}}, this);// Only set the zindex if we found a wrapper.var zindexvalue = (highestzindex + 1).toString();Y.one('#dateselector-calendar-panel').setStyle('zIndex', zindexvalue);}, this);this.panel.on('heightChange', this.fix_position, this);Y.one('#dateselector-calendar-panel').on('click', function(e) {e.halt();});Y.one(document.body).on('click', this.document_click, this);this.calendar = new MOODLECALENDAR({contentBox: "#dateselector-calendar-content",width: "300px",showPrevMonth: true,showNextMonth: true,firstdayofweek: parseInt(config.firstdayofweek, 10),WEEKDAYS_MEDIUM: [config.sun,config.mon,config.tue,config.wed,config.thu,config.fri,config.sat]});},findZIndex: function(node) {// In most cases the zindex is set on the parent of the dialog.var zindex = node.getStyle('zIndex') || node.ancestor().getStyle('zIndex');if (zindex) {return parseInt(zindex, 10);}return 0;},cancel_any_timeout: function() {if (this.hidetimeout) {clearTimeout(this.hidetimeout);this.hidetimeout = null;}if (this.repositiontimeout) {clearTimeout(this.repositiontimeout);this.repositiontimeout = null;}},delayed_reposition: function() {if (this.repositiontimeout) {clearTimeout(this.repositiontimeout);this.repositiontimeout = null;}this.repositiontimeout = setTimeout(this.fix_position, 500);},fix_position: function() {if (this.currentowner) {var alignpoints = [Y.WidgetPositionAlign.BL,Y.WidgetPositionAlign.TL];// Change the alignment if this is an RTL language.if (window.right_to_left()) {alignpoints = [Y.WidgetPositionAlign.BR,Y.WidgetPositionAlign.TR];}this.panel.set('align', {node: this.currentowner.get('node').one('select'),points: alignpoints});}},document_click: function(e) {if (this.currentowner) {if (this.currentowner.get('node').ancestor('div').contains(e.target)) {setTimeout(function() {M.form.dateselector.cancel_any_timeout();}, 100);} else {this.currentowner.release_calendar(e);}}}};