UNPKG

orgchart

Version:

Simple and direct organization chart(tree-like hierarchy) plugin based on pure DOM and jQuery.

128 lines (121 loc) 4 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Organization Chart Plugin</title> <link rel="icon" href="img/logo.png"> <link rel="stylesheet" href="css/jquery.orgchart.css"> <link rel="stylesheet" href="css/style.css"> <style type="text/css"> .hidden { display: none; } .orgchart .drill-icon { transition: opacity .5s; opacity: 0; right: -8px; top: -8px; z-index: 2; position: absolute; } .orgchart .drill-icon::before { background-color: rgba(68, 157, 68, 0.5); } .orgchart .drill-icon:hover::before { background-color: #449d44; } .orgchart .node:hover .drill-icon { opacity: 1; } </style> </head> <body> <div id="chart-container"></div> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.orgchart.js"></script> <script type="text/javascript" src="js/jquery.mockjax.min.js"></script> <script type="text/javascript"> $.mockjax({ url: '/orgchart/root-node', responseTime: 1000, contentType: 'application/json', responseText: { 'className': 'root-node', 'name': 'Lao Lao', 'dept': 'president office', 'children': [ { 'name': 'Bo Miao', 'dept': 'product dept' }, { 'className': 'drill-down asso-rd', 'name': 'Su Miao', 'dept': 'R&D dept' }, { 'name': 'Hong Miao', 'dept': 'finance dept' }, { 'name': 'Chun Miao', 'dept': 'HR dept' } ] } }); $.mockjax({ url: '/orgchart/asso-rd', responseTime: 1000, contentType: 'application/json', responseText: { 'className': 'asso-rd drill-up', 'name': 'Su Miao', 'dept': 'R&D dept', 'children': [ { 'name': 'Tie Hua', 'dept': 'backend group' }, { 'className': 'drill-down asso-frontend', 'name': 'Hei Hei', 'dept': 'frontend group' } ] } }); $.mockjax({ url: '/orgchart/asso-frontend', responseTime: 1000, contentType: 'application/json', responseText: { 'className': 'asso-frontend drill-up', 'name': 'Hei Hei', 'dept': 'frontend group', 'children': [ { 'name': 'Pang Pang', 'dept': 'frontend group' }, { 'name': 'Xiang Xiang', 'dept': 'frontend group', 'children': [ { 'name': 'Xiao Xiao', 'dept': 'frontend group' }, { 'name': 'Dan Dan', 'dept': 'frontend group' }, { 'name': 'Zai Zai', 'dept': 'frontend group' } ] } ] } }); function initOrgchart(rootClass) { $('#chart-container').orgchart({ 'chartClass': rootClass, 'data' : '/orgchart/' + rootClass, 'nodeContent': 'dept', 'createNode': function($node, data) { if ($node.is('.drill-down')) { var assoClass = data.className.match(/asso-\w+/)[0]; var drillDownIcon = $('<i>', { 'class': 'oci oci-arrow-square-down drill-icon', 'click': function() { $('#chart-container').find('.orgchart:visible').addClass('hidden'); if (!$('#chart-container').find('.orgchart.' + assoClass).length) { initOrgchart(assoClass); } else { $('#chart-container').find('.orgchart.' + assoClass).removeClass('hidden'); } } }); $node.append(drillDownIcon); } else if ($node.is('.drill-up')) { var assoClass = data.className.match(/asso-\w+/)[0]; var drillUpIcon = $('<i>', { 'class': 'oci oci-arrow-square-up drill-icon', 'click': function() { $('#chart-container').find('.orgchart:visible').addClass('hidden').end() .find('.drill-down.' + assoClass).closest('.orgchart').removeClass('hidden'); } }); $node.append(drillUpIcon); } } }); } $(function() { initOrgchart('root-node'); }); </script> </body> </html>