UNPKG

orgchart

Version:

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

72 lines (68 loc) 2.6 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>OrgChart Drag and Drop Demo</title> <link rel="icon" href="img/logo.png"> <link rel="stylesheet" href="css/orgchart.css"> <link rel="stylesheet" href="css/style.css"> <style type="text/css"> #chart-container { height: 600px; } .orgchart { background: #fff; } </style> </head> <body> <section class="demo-notes"> <h1>Drag and Drop Demo</h1> <p>This demo enables node drag and drop and uses dropCriteria to reject invalid moves between branches.</p> </section> <div id="chart-container"></div> <script type="text/javascript" src="js/orgchart.js"></script> <script type="text/javascript" src="js/json-digger.js"></script> <script type="text/javascript"> document.addEventListener('DOMContentLoaded', () => { const datasource = { 'name': 'Lao Lao', 'title': 'general manager', 'children': [ { 'name': 'Bo Miao', 'title': 'department manager', 'children': [{ 'name': 'Li Xin', 'title': 'senior engineer' }] }, { 'name': 'Su Miao', 'title': 'department manager', 'children': [ { 'name': 'Tie Hua', 'title': 'senior engineer' }, { 'name': 'Hei Hei', 'title': 'senior engineer', 'children': [ { 'name': 'Pang Pang', 'title': 'engineer' }, { 'name': 'Dan Dan', 'title': 'UE engineer' } ] } ] }, { 'name': 'Hong Miao', 'title': 'department manager' } ] }; const oc = new OrgChart({ chartContainer: '#chart-container', 'data' : datasource, 'nodeContent': 'title', 'draggable': true, 'dropCriteria': function(draggedNode, dragZone, dropZone) { const draggedContent = draggedNode.querySelector('.content')?.textContent || ''; const dropContent = dropZone.querySelector('.content')?.textContent || ''; if (draggedContent.indexOf('manager') > -1 && dropContent.indexOf('engineer') > -1) { return false; } return true; } }); oc.chart.addEventListener('nodedrop.orgchart', (event) => { const extraParams = event.detail; console.log('draggedNode:' + extraParams.draggedNode.querySelector('.title').textContent + ', dragZone:' + extraParams.dragZone.querySelector('.title').textContent + ', dropZone:' + extraParams.dropZone.querySelector('.title').textContent); }); }); </script> </body> </html>