OrgChartTree
by Matthew Vasallo
HTML
<div id="orgChart">
</div>
JavaScript
function Employee(name, title, manager) {
var directReports = [];
if (manager) {
manager.addDirectReport(this);
}
this.addDirectReport = function(employee) {
directReports.push(employee);
};
this.getDirectReports = function() {
return directReports;
};
this.getName = function() {
return name;
};
this.getTitle = function() {
return title;
};
}
Employee.prototype.getReportingChain = function(level) {
var currentLevel = !level ? 1 : level;
var reportChainSymbols = Array(currentLevel).join(Employee.ReportingChainSymbol);
var reportChain = ReportStartSymbol + this.getName() + " (" + this.getTitle() + ")" + ReportingEndSymbol;
currentLevel++;
this.getDirectReports().forEach(function(empl) {
reportChain += empl.getReportingChain(currentLevel);
});
return reportChain;
};
Employee.ReportStartSymbol = "-";
Employee.ReportingEndSymbol = "-";
var chuck = new Employee("Chuck Norris", "CEO", undefined);
var tom = new Employee("Tom Clancy", "Director", chuck);
var william = new Employee("William Wallace", "Director", chuck);
var jack = new Employee("Jack Bauer", "Manager", tom);
var indiana = new Employee("Indiana Jones", "Manager", william);
var darth = new Employee("Darth Vader", "Developer", jack);
var luke = new Employee("Luke Skywalker", "Developer", jack);
var han = new Employee("Han Solo", "Developer", indiana);
var james = new Employee("James Bond", "Intern", luke);
var frodo = new Employee("Frodo Baggins", "Intern", han);
document.getElementById("orgChart").innerHTML = chuck.getReportingChain();
Employee.ReportingChainSymbol = ">";
console.log(chuck.getReportingChain());