Changeset 51


Ignore:
Timestamp:
10/28/07 00:40:42 (6 years ago)
Author:
Lantash
Message:

Action symbol that are shown when the side menu isn't visible are observed in a much more efficient way. Introduced a single event handler that is attached to the whole table that handles this. [Closes #27]

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/javascript/klassenbuch.tasks.js

    r38 r51  
    490490                ); 
    491491                 
    492                 this._taskTable.addColumn("Aktionen", (function() { 
     492                this._taskTable.addColumn("Aktionen", (function(task) { 
    493493                                /** 
    494494                                 * Der HTML-Text für die Aktionssymbole, die angezeigt werden, wenn das Seitenmenü ausgeblendet ist. 
     
    499499                                 * @memberof TaskManagement.View 
    500500                                */ 
    501                                 this._getContent5Cache = this._getContent5Cache || "<div class=\"taskTableActions\">" + 
     501                                this._getContent5Cache = this._getContent5Cache || 
    502502                                        new Sprite("smallIcons", 0).toHTML("actionIcon iconShowComments") + ((User.signedIn) ?  
    503503                                        new Sprite("smallIcons", 2).toHTML("actionIcon iconEditTask") + 
    504504                                        new Sprite("smallIcons", 4).toHTML("actionIcon iconDeleteTask") : 
    505505                                        new Sprite("smallIcons", 3).toHTML() + 
    506                                         new Sprite("smallIcons", 5).toHTML()) + "</div>"; 
    507                                  
    508                                 return this._getContent5Cache; 
     506                                        new Sprite("smallIcons", 5).toHTML()); 
     507                                 
     508                                return "<div class=\"taskTableActions\" name=\"" + task.id + "\">" + this._getContent5Cache + "</div>"; 
    509509                        }).bind(this), { 
    510510                                width: "80px", 
     
    518518        this._taskTable.on("sort", this._onSort, this); 
    519519                this._taskTable.on("highlightRow", this._onHighlightTask, this); 
    520                 this._taskTable.on("refresh", this._onRefreshTable, this); 
     520                 
     521                this._taskTable.on("refresh", function() { 
     522                        this._getContent5Cache = ""; 
     523                }, this); 
    521524                 
    522525                // Wird auf eine Aufgabe doppelt geklickt, wird das Kommentarfenster zu dieser Aufgabe geöffnet. 
     
    524527                        this.reportNavigation(task.id + "/kommentare"); 
    525528                }, this); 
     529                 
     530                this._taskTable.element.observe("click", (function(event) { 
     531                        if (!this._sideMenu.visible()) { 
     532                                var element = event.element(); 
     533                                 
     534                                if (element.hasClassName("actionIcon")) { 
     535                                        var taskId = $(element.parentNode).readAttribute("name"); 
     536                                         
     537                                        if (taskId) { 
     538                                                if (element.hasClassName("iconShowComments")) { 
     539                                                        this.reportNavigation(taskId + "/kommentare"); 
     540                                                } else if (element.hasClassName("iconEditTask")) { 
     541                                                        this.reportNavigation(taskId + "/bearbeiten") 
     542                                                } else if (element.hasClassName("iconDeleteTask")) { 
     543                                                        this.removeTask(TaskManagement.Tasks.find(function(task) { 
     544                                                                return task.id == taskId; 
     545                                                        })); 
     546                                                } 
     547                                        } 
     548                                } 
     549                        } 
     550                }).bindAsEventListener(this)); 
    526551                 
    527552                // Zeichnet die Tabelle 
     
    681706                        this._sideMenu.items[1].enable(); 
    682707                        this._sideMenu.items[2].enable(); 
    683                 } 
    684         }, 
    685  
    686         /** 
    687          * Wird aufgerufen, wenn die Tabelle mit den Aufgaben neu "gezeichnet" wird, sei dies nun weil der Benutzer eine 
    688          * andere Sortierung gewählt hat oder weil die Aufgaben aktualisiert worden sind usw.<br /><br />Einerseits ist die 
    689          * Methode dafür verantwortlich, dass für den Fall, dass das Seitenmenü ausgeblendet ist, die Aktionssymbole in der 
    690          * Tabelle mit den entsprechenden Funktionen verknüpft werden. Andererseits erkennt die Funktion, wenn gar keine 
    691          * Aufgaben darzustellen sind, versteckt in diesem Fall die verbliebenen Spaltenüberschriften und zeigt einen Hinweis 
    692          * an, dass keine Aufgaben vorhanden sind. 
    693          * @memberof TaskManagement.View 
    694         */               
    695         _onRefreshTable: function() { 
    696                 this._getContent5Cache = ""; 
    697                  
    698                 // Aktionssymbole werden nur sichtbar, wenn das Seitenmenü versteckt ist. 
    699                 if (!this._sideMenu.visible()) { 
    700                         var icons = this._taskTable.select(".actionIcon"); 
    701                          
    702                         // Wie viele Symbole gibt es pro Aufgabe 
    703                         var f = icons.length / this._taskTable.sortedRows.length; 
    704                          
    705                         icons.each(function(icon, i) { 
    706                                 var task = this._taskTable.rows.get(this._taskTable.sortedRows[Math.floor(i / f)]); 
    707                                  
    708                                 if (icon.hasClassName("iconShowComments")) { 
    709                                         icon.observe("click", this.reportNavigation.bind(this, task.id + "/kommentare")); 
    710                                 } else if (icon.hasClassName("iconEditTask")) { 
    711                                         icon.observe("click", this.reportNavigation.bind(this, task.id + "/bearbeiten")); 
    712                                 } else if (icon.hasClassName("iconDeleteTask")) { 
    713                                         icon.observe("click", this.removeTask.bind(this, task)); 
    714                                 } 
    715                         }, this); 
    716708                } 
    717709        }, 
Note: See TracChangeset for help on using the changeset viewer.