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!
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

88 行
3.1KB

  1. import { h, Component } from 'preact';
  2. class WBNavbar extends Component {
  3. render({ title, items, rhs, onItemClicked }) {
  4. return (
  5. <nav class="navbar navbar-expand-lg navbar-light bg-light">
  6. <a class="navbar-brand" href="#">{ 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. }) }
  47. </div>
  48. </li>
  49. );
  50. } else {
  51. li_cls = li_cls.join(' ');
  52. a_cls = a_cls.join(' ');
  53. return (
  54. <li class={ li_cls }>
  55. <a class={ a_cls } href="#" onclick={ e => { e.preventDefault(); onItemClicked(i); } }>{ i['name'] }</a>
  56. </li>
  57. );
  58. }
  59. }) }
  60. </ul>
  61. { rhs }
  62. </div>
  63. </nav>
  64. );
  65. }
  66. }
  67. WBNavbar.defaultProps = {
  68. 'title': 'Workbench Advanced',
  69. 'items': [],
  70. 'form': null,
  71. 'onItemClicked': () => {}
  72. }
  73. export default WBNavbar;