class ProjectSelect extends View { constructor(element) { super(element); this.options = { }; OnTime.projectManager.addEventListener("projectadded", this.onProjectAdded.bind(this), true); OnTime.projectManager.addEventListener("projectchanged", this.onProjectChanged.bind(this), true); OnTime.projectManager.addEventListener("projectremoved", this.onProjectRemoved.bind(this), true); } setOptionInformation(option, project) { option.value = project.project_key; option.innerText = project.name; } onProjectAdded(event) { var option = document.createElement("OPTION"); this.setOptionInformation(option, event.project); this.options[event.project.project_key] = option; //Only add the dropdown entry if the project is not completed. if (!event.project.completed) { this.element.appendChild(option); } } onProjectChanged(event) { if (!(event.project.project_key in this.options)) { console.error("Trying to modify a project in a project select that was never added."); return; } var option = this.options[event.project.project_key]; this.setOptionInformation(option, event.project); //Add or remove the option depending on whether the project is completed or not. if (event.project.completed) { if (this.element.contains(option)) { this.element.removeChild(option); } } else { if (!this.element.contains(option)) { this.element.appendChild(option); } } } onProjectRemoved(event) { if (!(event.project.project_key in this.options)) { console.error("Trying to remove a project from a project select that was never added."); return; } var option = this.options[event.project.project_key]; this.element.removeChild(option); delete this.options[event.project.project_key]; } } UIKit.registerViewType(ProjectSelect);