Changeset 841c78 in indico


Ignore:
Timestamp:
01/19/10 18:23:47 (3 years ago)
Author:
Pedro Ferreira <jose.pedro.ferreira@…>
Branches:
master, burotel, hello-world-walkthrough, ipv6, new-webex, prov-dual-interface, v0.97-series, v0.98-series, v0.98.2, v0.98.3, v0.98b1, v0.98b2, v0.99, 051b2622c51afb171a1dedb46a0df4fbb0cbd02e, 0da0c1403bae8e51d8229f460181c71b9e6dda72
Children:
6a51d1
Parents:
6f8761
Message:

[IMPROVEMENT] Timetable up/down arrows are back

  • Slight refactoring of the block JS classes;
  • AJAX version of the old arrows;
Location:
indico
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • indico/MaKaC/schedule.py

    r4d6620 r841c78  
    986986        return self.__owner.getAdjustedEndDate(tz) 
    987987 
    988     @Retrieves('MaKaC.schedule.LinkedTimeSchEntry', 'duration', lambda x: str(x)) 
     988    @Retrieves('MaKaC.schedule.LinkedTimeSchEntry', 'duration', Conversion.timedelta) 
    989989    def getDuration(self): 
    990990        return self.__owner.getDuration() 
     
    10891089        return self.getEndDate().astimezone(timezone(tz)) 
    10901090 
    1091     @Retrieves(['MaKaC.schedule.BreakTimeSchEntry'], 'duration', lambda x: str(int(x.seconds / 60))) 
     1091    @Retrieves(['MaKaC.schedule.BreakTimeSchEntry'], 'duration', Conversion.timedelta) 
    10921092    def getDuration(self): 
    10931093        return self.duration 
     
    14651465        genId = entry['id'] 
    14661466 
    1467         entry['duration'] = int(obj.getDuration().seconds / 60) 
    1468  
    14691467        # sessions that are no poster sessions will be expanded 
    14701468        if entry['entryType'] == 'Session': 
     
    14841482 
    14851483    @staticmethod 
    1486     def process(schedule, tz): 
    1487  
    1488         from MaKaC.services.interface.rpc import json 
     1484    def process(schedule, tz, days = None): 
    14891485 
    14901486        scheduleDict={} 
    14911487 
    1492         for day in daysBetween(schedule.getAdjustedStartDate(tz), schedule.getAdjustedEndDate(tz)): 
     1488        if not days: 
     1489            days = daysBetween(schedule.getAdjustedStartDate(tz), schedule.getAdjustedEndDate(tz)) 
     1490 
     1491        for day in days: 
    14931492            dayEntry = {} 
    14941493 
     
    15031502            scheduleDict[day.strftime("%Y%m%d")] = dayEntry 
    15041503 
    1505         return json.encode(scheduleDict) 
     1504        return scheduleDict 
    15061505 
    15071506    @staticmethod 
  • indico/MaKaC/services/implementation/schedule.py

    rd4734e r841c78  
    982982                'autoOps': translateAutoOps(self.getAutoOps())} 
    983983 
     984 
     985class MoveEntryUpDown(ScheduleOperation, conferenceServices.ConferenceModifBase): 
     986    def _checkParams(self): 
     987        conferenceServices.ConferenceModifBase._checkParams(self) 
     988 
     989        pManager = ParameterManager(self._params, timezone = self._conf.getTimezone()) 
     990 
     991        self._schEntryId = pManager.extract("scheduleEntryId", pType=int, allowEmpty=False) 
     992        self._sessionId = pManager.extract("sessionId", pType=str, allowEmpty=True, defaultValue=None) 
     993        self._sessionSlotId = pManager.extract("sessionSlotId", pType=str, allowEmpty=True, defaultValue=None) 
     994        self._direction = pManager.extract("direction", pType=bool, allowEmpty=False) 
     995 
     996    def _performOperation(self): 
     997 
     998        if (self._sessionId != None and self._sessionSlotId != None): 
     999 
     1000            slot = self._conf.getSessionById(self._sessionId).getSlotById(self._sessionSlotId) 
     1001            sched = slot.getSchedule() 
     1002        else: 
     1003            sched = self._conf.getSchedule() 
     1004 
     1005        schEntry = sched.getEntryById(self._schEntryId) 
     1006 
     1007        if self._direction: 
     1008            sched.moveUpEntry(schEntry) 
     1009        else: 
     1010            sched.moveDownEntry(schEntry) 
     1011 
     1012        return schedule.ScheduleToJson.process(sched, self._conf.getTimezone(), days = [ schEntry.getAdjustedStartDate() ]) 
     1013 
     1014 
     1015 
    9841016methodMap = { 
    9851017    "get": ConferenceGetSchedule, 
     
    10251057    "getAllSpeakers": ConferenceGetAllSpeakers, 
    10261058 
    1027     "moveEntry": MoveEntry 
     1059    "moveEntry": MoveEntry, 
     1060    "moveEntryUpDown": MoveEntryUpDown 
    10281061} 
  • indico/MaKaC/webinterface/pages/conferences.py

    r3daa2e r841c78  
    11461146        vars = wcomponents.WTemplated.getVars( self ) 
    11471147        tz = DisplayTZ(self._aw,self._conf).getDisplayTZ() 
    1148         vars["ttdata"] = schedule.ScheduleToJson.process(self._conf.getSchedule(), tz) 
     1148        vars["ttdata"] = simplejson.dumps(schedule.ScheduleToJson.process(self._conf.getSchedule(), tz)) 
    11491149        vars['eventInfo'] = simplejson.dumps(DictPickler.pickle(self._conf, timezone=tz)) 
    11501150        return vars 
     
    31753175        vars['rbActive'] = info.HelperMaKaCInfo.getMaKaCInfoInstance().getRoomBookingModuleActive() 
    31763176 
    3177         vars['ttdata'] = schedule.ScheduleToJson.process(self._conf.getSchedule(), tz) 
     3177        vars['ttdata'] = simplejson.dumps(schedule.ScheduleToJson.process(self._conf.getSchedule(), tz)) 
    31783178        vars['eventInfo'] = simplejson.dumps(DictPickler.pickle(self._conf, timezone=tz)) 
    31793179 
  • indico/MaKaC/webinterface/pages/sessions.py

    r7d3212 r841c78  
    14981498        vars['rbActive'] = info.HelperMaKaCInfo.getMaKaCInfoInstance().getRoomBookingModuleActive() 
    14991499 
    1500         vars['ttdata'] = schedule.ScheduleToJson.process(self._session.getSchedule(), tz) 
     1500        vars['ttdata'] = simplejson.dumps(schedule.ScheduleToJson.process(self._session.getSchedule(), tz)) 
    15011501 
    15021502        eventInfo = DictPickler.pickle(self._session.getConference(), timezone=tz) 
  • indico/MaKaC/webinterface/tpls/js/vars.js.tpl

    ra89437 r841c78  
    7171        star: "<%= iconFileName("star")%>", 
    7272        starGrey: "<%= iconFileName("starGrey")%>", 
    73         warning_yellow: "<%= iconFileName("warning_yellow")%>" 
     73        warning_yellow: "<%= iconFileName("warning_yellow")%>", 
     74        arrow_up: "<%= iconFileName("upArrow")%>", 
     75        arrow_down: "<%= iconFileName("downArrow")%>" 
    7476    }, 
    7577    Urls: { 
  • indico/htdocs/js/indico/Timetable/Base.js

    r7ec8ce r841c78  
    797797    }, 
    798798 
     799    _updateDay: function(dayData) { 
     800 
     801        var data = this.getData(); 
     802 
     803        extend(data, dayData); 
     804 
     805        this.timetableDrawer.redraw(); 
     806    }, 
     807 
    799808    _updateMovedEntry: function(result, oldEntryId) { 
    800809        this._updateEntry(result, oldEntryId, function(data){ 
     
    918927    }, 
    919928 
     929    _updateDay: function(dayData) { 
     930 
     931        var data = this.getData(); 
     932 
     933        extend(data, dayData[keys(dayData)[0]]); 
     934 
     935        this.timetableDrawer.redraw(); 
     936    }, 
     937 
    920938    getTTMenu: function() { 
    921939        var self = this; 
  • indico/htdocs/js/indico/Timetable/Draw.js

    rf25f07 r841c78  
    3636             self.div.dom.style.cursor = 'default'; 
    3737             var cursor = getMousePointerCoordinates(event); 
    38              if (this.managementMode) { 
    39  
    40                  this.popup = new TimetableBlockPopupManagement( 
    41                      self.timetable, 
    42                      this, 
    43                      self.eventData, 
    44                      self.div, 
    45                      function() { 
    46                          self.div.dom.style.cursor = 'pointer'; 
    47                          self.popupActive = false; 
    48                          return self.popupAllowClose; 
    49                       }, 
    50                       self.managementActions); 
    51  
    52             } else { 
    53                 this.popup = new TimetableBlockPopup( 
    54                     self.timetable, 
    55                     self.eventData, 
    56                     self.div, 
    57                     function() { 
    58                         self.div.dom.style.cursor = 'pointer'; 
    59                         self.popupActive = false; 
    60                         return self.popupAllowClose; 
    61                     }, 
    62                     function(color) { 
    63                         var parent = self.div.getParent(); 
    64                         parent.setStyle('backgroundColor', color); 
    65                     } 
    66                 ); 
    67             } 
     38 
     39             this.popup = self._drawPopup(); 
     40 
    6841             this.popup.open(cursor.x, cursor.y); 
    6942         }, 
     
    12497 
    12598             return button; 
     99         }, 
     100 
     101         _getRightSideDecorators: function() 
     102         { 
     103             return Html.span({}); 
    126104         } 
    127105 
    128106     }, 
    129      function(timetable, managementMode, managementActions){ 
     107     function(timetable){ 
    130108         this.timetable = timetable; 
    131          this.managementMode = managementMode; 
    132          this.managementActions = managementActions; 
    133109         this.popupActive = false; 
    134110         this.popupAllowClose = true; 
     
    136112); 
    137113 
    138 type("TimetableBlock", ["TimetableBlockBase"], 
     114type("TimetableBlockNormal", ["TimetableBlockBase"], 
    139115        { 
    140116            _blockDescription: function(block, event) { 
     
    148124                } 
    149125 
    150                 this.titleWrapper = Html.div({}, this.titleDiv); 
     126                this.titleWrapper = Html.div({}, this._getRightSideDecorators(), this.titleDiv); 
    151127 
    152128                this.div = Html.div({style: { width: '100%', height: '100%'}}, this.titleWrapper); 
    153129 
    154                 if (!this.compactMode) { 
     130                if (this.compactMode) { 
     131                    this.timeDiv = Html.div('timetableBlockTimeDiscreet', this.eventData.startDate.time.substring(0,5) +' - '+ this.eventData.endDate.time.substring(0,5)); 
     132                    this.div.insert(this.timeDiv); 
     133                } else { 
    155134                    this.timeDiv = Html.div({className: 'timetableBlockTime'}, this.eventData.startDate.time.substring(0,5) +' - '+ this.eventData.endDate.time.substring(0,5)); 
    156135 
     
    166145                    } 
    167146 
    168                     // If it's a contribtion the add speakers information 
     147                    // If it's a contribution add the speakers information 
    169148                    if (self.eventData.presenters && self.eventData.presenters.length > 0) { 
    170149                        this.presentersDiv = Html.div({className: 'timetableBlockPresenters'}); 
     
    177156 
    178157                    // Add material menu 
    179                     if (!self.managementMode && self.eventData.material && self.eventData.material.length > 0) { 
     158                    if (!self.managementActions && self.eventData.material && self.eventData.material.length > 0) { 
    180159                        this.titleWrapper.insert(this.createMaterialButton(this.eventData.material)); 
    181160                    } 
     
    185164                    this.div.append(this.timeDiv); 
    186165                    this.div.append(this.locationDiv); 
    187                 } else { 
    188                     this.timeDiv = Html.div('timetableBlockTimeDiscreet', this.eventData.startDate.time.substring(0,5) +' - '+ this.eventData.endDate.time.substring(0,5)); 
    189                     this.div.insert(this.timeDiv); 
    190166                } 
    191167 
     
    256232                   this.block.observeClick(function(e) { self.openPopup(e); }); 
    257233                   highlightWithMouse(this.div, this.block); 
     234                   showWithMouse(this.div, this.arrows); 
    258235               } 
    259236 
     
    359336            } 
    360337        }, 
    361      function(timetable, eventData, blockData, compactMode, printableVersion, detailLevel, managementMode, managementActions){ 
    362          this.TimetableBlockBase(timetable, managementMode, managementActions); 
     338     function(timetable, eventData, blockData, compactMode, printableVersion, detailLevel){ 
     339 
     340         this.TimetableBlockBase(timetable); 
    363341 
    364342         this.compactMode = compactMode; 
     
    368346         this.printableVersion = printableVersion; 
    369347         this.detailLevel = detailLevel; 
     348         this.arrows = Html.span({}); 
    370349        } 
    371350   ); 
    372351 
    373352 
    374 type("TimetableBlockWholeDay", ["TimetableBlockBase"], 
     353type("TimetableBlockWholeDayBase", ["TimetableBlockBase"], 
    375354        { 
    376355            _blockDescription: function(block, event) { 
     
    378357 
    379358                this.titleDiv = Html.div({className: 'timetableBlockTitle', style: {fontWeight: this.eventData.fontWeight}}, this.eventData.title); 
    380                 this.titleWrapper = Html.div({}, this.titleDiv); 
     359                this.titleWrapper = Html.div({}, this._getRightSideDecorators(), this.titleDiv); 
    381360 
    382361                this.div = Html.div({style: { width: '100%', height: '100%'}}, this.titleWrapper); 
     
    419398                    block.observeClick(function(e) { self.openPopup(e); }); 
    420399                    highlightWithMouse(this.div, block); 
     400                    showWithMouse(this.div, this.arrows); 
    421401                } 
    422402 
     
    427407            } 
    428408        }, 
    429      function(timetable, eventData, blockData, managementMode, managementActions){ 
    430          this.TimetableBlockBase(timetable, managementMode, managementActions); 
     409     function(timetable, eventData, blockData){ 
     410         this.TimetableBlockBase(timetable); 
    431411 
    432412         this.eventData = eventData; 
    433413         this.blockData = blockData; 
    434414         this.margin = TimetableDefaults.blockMargin; 
     415         this.arrows = Html.span({}); 
    435416     } 
    436417   ); 
     418 
     419 
     420type("TimetableBlockDisplayMixin",[], 
     421     { 
     422         _drawPopup: function() { 
     423 
     424             var self = this; 
     425 
     426             return new TimetableBlockPopup( 
     427                 this.timetable, 
     428                 this.eventData, 
     429                 this.div, 
     430                 function() { 
     431                     self.div.dom.style.cursor = 'pointer'; 
     432                     self.popupActive = false; 
     433                     return self.popupAllowClose; 
     434                 }, 
     435                 function(color) { 
     436                     var parent = self.div.getParent(); 
     437                     parent.setStyle('backgroundColor', color); 
     438                 } 
     439             ); 
     440         } 
     441 
     442     }); 
     443 
     444type("TimetableBlockManagementMixin",[], 
     445     { 
     446         _drawPopup: function() { 
     447 
     448             var self = this; 
     449 
     450             return new TimetableBlockPopupManagement( 
     451                 this.timetable, 
     452                 this, 
     453                 this.eventData, 
     454                 this.div, 
     455                 function() { 
     456                         self.div.dom.style.cursor = 'pointer'; 
     457                         self.popupActive = false; 
     458                         return self.popupAllowClose; 
     459                     }, 
     460                 this.managementActions); 
     461         }, 
     462 
     463         _getRightSideDecorators: function() 
     464         { 
     465             return this.arrows; 
     466         } 
     467 
     468     }, 
     469     function() { 
     470         var arrowUp = Html.img({src: imageSrc('arrow_up'), title: $T('Move up')}); 
     471         var arrowDown = Html.img({src: imageSrc('arrow_down'), style:{paddingLeft: '5px'}, title: $T('Move down')}); 
     472 
     473         var self = this; 
     474 
     475         arrowUp.observeClick( 
     476             function(event) { 
     477                 self.managementActions.moveEntryUpDown(self.eventData, true); 
     478                 event.stopPropagation(); 
     479                 return false; 
     480             }); 
     481 
     482         arrowDown.observeClick( 
     483             function(event) { 
     484                 self.managementActions.moveEntryUpDown(self.eventData, false); 
     485                 event.stopPropagation(); 
     486                 return false; 
     487             }); 
     488 
     489 
     490         this.arrows = Html.div({style: {cssFloat: 'right', padding: '2px'}}, arrowUp, arrowDown); 
     491     }); 
     492 
     493type("TimetableBlockWholeDayDisplay", ["TimetableBlockWholeDayBase", "TimetableBlockDisplayMixin"], 
     494     { 
     495     }, 
     496     function(timetable, eventData, blockData) { 
     497         this.TimetableBlockWholeDayBase(timetable, eventData, blockData); 
     498     }); 
     499 
     500type("TimetableBlockWholeDayManagement", ["TimetableBlockWholeDayBase", "TimetableBlockManagementMixin"], 
     501     { 
     502     }, 
     503     function(timetable, eventData, blockData, managementActions) { 
     504         this.TimetableBlockWholeDayBase(timetable, eventData, blockData); 
     505         this.managementActions = managementActions; 
     506         this.TimetableBlockManagementMixin(); 
     507 
     508         this._getRightSideDecorators = TimetableBlockManagementMixin.prototype._getRightSideDecorators; 
     509 
     510     }); 
     511 
     512 
     513type("TimetableBlockNormalDisplay", ["TimetableBlockNormal", "TimetableBlockDisplayMixin"], 
     514     { 
     515     }, 
     516     function(timetable, eventData, blockData, compactMode, printableVersion, detailLevel) 
     517     { 
     518         this.TimetableBlockNormal(timetable, eventData, blockData, compactMode, printableVersion, detailLevel); 
     519     }); 
     520 
     521type("TimetableBlockNormalManagement", ["TimetableBlockNormal", "TimetableBlockManagementMixin"], 
     522     { 
     523     }, 
     524     function(timetable, eventData, blockData, compactMode, printableVersion, detailLevel, managementActions) 
     525     { 
     526         this.TimetableBlockNormal(timetable, eventData, blockData, compactMode, printableVersion, detailLevel); 
     527         this.managementActions = managementActions; 
     528         this.TimetableBlockManagementMixin(); 
     529 
     530         this._getRightSideDecorators = TimetableBlockManagementMixin.prototype._getRightSideDecorators; 
     531 
     532     }); 
    437533 
    438534 
     
    688784 
    689785 
    690 type("TimetableBlockPopupManagement", ["TimetableBlockPopup"], { 
     786type("TimetableBlockPopupManagement", ["TimetableBlockPopup"], 
     787{ 
    691788 
    692789    _getTime: function() { 
     
    884981         this.managementActions = managementActions; 
    885982         this.TimetableBlockPopup(timetable, eventData, blockDiv, closeHandler); 
    886     } 
    887 ); 
     983     }); 
    888984 
    889985type("ContributionsPopup", ["ExclusivePopup"], { 
     
    10701166             each(blocks, function(blockData) { 
    10711167                 var eventData = data[blockData.id]; 
    1072                  var block = new TimetableBlockWholeDay(self.timetable, eventData, blockData, self.managementMode, self.managementActions); 
     1168 
     1169                 var block; 
     1170                 if (self.managementMode) { 
     1171                     block = new TimetableBlockWholeDayManagement(self.timetable, eventData, blockData, self.managementActions); 
     1172                 } else { 
     1173                     block = new TimetableBlockWholeDayDisplay(self.timetable, eventData, blockData); 
     1174                 } 
    10731175                 wholeDayBlockDiv.append(block.draw(0, 100)); 
    10741176                 blockAdded = true; 
     
    11241226                 //    compactMode = true; 
    11251227 
    1126                  block = new TimetableBlock(self.timetable, eventData, blockData, compactMode, self.printableVersion, self.detail.get(), self.managementMode, self.managementActions); 
     1228                 if (self.managementMode) { 
     1229 
     1230                     block = new TimetableBlockNormalManagement(self.timetable, eventData, blockData, compactMode, self.printableVersion, self.detail.get(), self.managementActions); 
     1231                 } else { 
     1232                     block = new TimetableBlockNormalDisplay(self.timetable, eventData, blockData, compactMode, self.printableVersion, self.detail.get()); 
     1233                 } 
    11271234                 blockDiv.append(block.draw(leftPos, width)); 
    11281235                 self.blocks.push(block); 
  • indico/htdocs/js/indico/Timetable/Management.js

    rf25f07 r841c78  
    469469    }, 
    470470 
     471 
     472    /* 
     473     * Moves entries up or down, according to the "arrows" 
     474     */ 
     475    moveEntryUpDown: function(eventData, direction) { 
     476        /* 
     477         * true - up 
     478         * false - down 
     479         */ 
     480 
     481        info = this._getLocatorParams(eventData); 
     482        info.set('direction', direction); 
     483 
     484        var self = this; 
     485 
     486        var killProgress = IndicoUI.Dialogs.Util.progress(); 
     487 
     488        indicoRequest('schedule.moveEntryUpDown', 
     489                      info, 
     490                      function(result, error){ 
     491                          killProgress(); 
     492                          if (error) { 
     493                              IndicoUtil.errorReport(error); 
     494                          } else { 
     495                              self.timetable._updateDay(result); 
     496                          } 
     497                      }); 
     498 
     499    }, 
     500 
     501 
    471502    /* 
    472503    * Iterates through entries and adds all of them 
     
    491522type("TopLevelTimeTableManagementActions", ["TimetableManagementActions"], 
    492523     { 
     524         _getLocatorParams: function(eventData) { 
     525             var info = new WatchObject(); 
     526             info.set('scheduleEntryId', eventData.scheduleEntryId); 
     527             info.set('conference', eventData.conferenceId); 
     528 
     529             return info; 
     530         } 
     531 
    493532     }, 
    494533     function(timetable, eventInfo, contextInfo, isSessionTimetable) { 
     
    499538type("IntervalTimeTableManagementActions", ["TimetableManagementActions"], 
    500539     { 
     540         _getLocatorParams: function(eventData) { 
     541             var info = new WatchObject(); 
     542             info.set('scheduleEntryId', eventData.scheduleEntryId); 
     543             info.set('conference', eventData.conferenceId); 
     544             info.set('sessionId', eventData.sessionId); 
     545             info.set('sessionSlotId', eventData.sessionSlotId); 
     546 
     547             return info; 
     548         } 
     549 
    501550     }, 
    502551     function(timetable, eventInfo, intervalInfo, isSessionTimetable) { 
Note: See TracChangeset for help on using the changeset viewer.