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!
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

116 rindas
3.9KB

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