IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.5KB

  1. import { h, Component } from 'preact';
  2. class WBNavbar extends Component {
  3. render({ title, items, rhs, onItemClicked, onTitleClicked }) {
  4. return (
  5. <nav class="navbar navbar-expand-lg navbar-light bg-light">
  6. <a class="navbar-brand" href="#" onclick={ e => { e.preventDefault(); onTitleClicked(); } }>{ title }</a>
  7. <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
  8. <span class="navbar-toggler-icon"></span>
  9. </button>
  10. <div class="collapse navbar-collapse" id="navbarSupportedContent">
  11. <ul class="navbar-nav mr-auto">
  12. { items.map(i => {
  13. if (typeof(i) === 'string')
  14. return (
  15. <li class="nav-item">
  16. <a class="nav-link" href="#">{ i }</a>
  17. </li>
  18. );
  19. else if (typeof(i) === 'object')
  20. var li_cls = ['nav-item'];
  21. if (i['active'])
  22. li_cls.push('active');
  23. var a_cls = ['nav-link'];
  24. if (i['disabled'])
  25. a_cls.push('disabled');
  26. if ('dropdown' in i) {
  27. li_cls.push('dropdown');
  28. a_cls.push('dropdown-toggle');
  29. li_cls = li_cls.join(' ');
  30. a_cls = a_cls.join(' ');
  31. return (
  32. <li class={ li_cls }>
  33. <a class={ a_cls } href="#" id={ i['name'].replace(' ', '-').toLowerCase() + '-dropdown' }
  34. role="button" data-toggle="dropdown" aria-haspopup="true"
  35. aria-expanded="false">{ i['name'] }</a>
  36. <div class="dropdown-menu" aria-labelledby={ i['name'].replace(' ', '-').toLowerCase() + '-dropdown' }>
  37. { i['dropdown'].map(d => {
  38. if (typeof(d) === 'string')
  39. return (
  40. <a class="dropdown-item" href="#" onclick={ e => { e.preventDefault(); onItemClicked(d); } }>{ d }</a>
  41. );
  42. else if (typeof(d) === 'object' && d['divider'])
  43. return (
  44. <div class="dropdown-divider" />
  45. );
  46. else if (typeof(d) === 'object' && d['name'])
  47. return (
  48. <a class="dropdown-item" href="#" onclick={ e => { e.preventDefault(); onItemClicked(d); } }>{ d['name'] }</a>
  49. );
  50. }) }
  51. </div>
  52. </li>
  53. );
  54. } else {
  55. li_cls = li_cls.join(' ');
  56. a_cls = a_cls.join(' ');
  57. return (
  58. <li class={ li_cls }>
  59. <a class={ a_cls } href="#" onclick={ e => { e.preventDefault(); onItemClicked(i); } }>{ i['name'] }</a>
  60. </li>
  61. );
  62. }
  63. }) }
  64. </ul>
  65. { rhs }
  66. </div>
  67. </nav>
  68. );
  69. }
  70. }
  71. WBNavbar.defaultProps = {
  72. 'title': 'Workbench Advanced',
  73. 'items': [],
  74. 'form': null,
  75. 'onItemClicked': () => {},
  76. 'onTitleClicked': () => {}
  77. }
  78. export default WBNavbar;