bs-buttonbar.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. define(['jquery', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js'], function (jQuery) {
  2. 'use strict';
  3. function Control() {}
  4. Control.prototype.draw = function (oControlHost) {
  5. var o = oControlHost.configuration;
  6. this.m_sCardNames = [];
  7. var aButtons = o.Tabs || this.generateTabsFromDataStore(oControlHost);
  8. var sID = oControlHost.container.id;
  9. var sInputName = sID + '__bs-buttonbar__';
  10. var aHtml = [];
  11. aHtml.push('<div class="btn-group" data-toggle="buttons" role="group">');
  12. for (var i = 0; i < aButtons.length; i++) {
  13. var oButton = aButtons[i];
  14. this.m_sCardNames[i] = oButton.card;
  15. aHtml.push(
  16. '<input type="radio" class="btn-check" name="buttonitems" id="' + sInputName + i + '" autocomplete="off" cardIndex="' + i + '" checked />' +
  17. '<label class="btn btn-outline-primary" for="' + sInputName + i + '">' + oButton.label + '</label>'
  18. );
  19. }
  20. aHtml.push('</div>');
  21. oControlHost.container.innerHTML = aHtml.join('');
  22. var nl = oControlHost.container.querySelectorAll('INPUT');
  23. for (var i = 0; i < aButtons.length; i++) {
  24. var el = nl.item(i);
  25. el.onclick = this.onTabClick.bind(this, el, oControlHost.page);
  26. }
  27. jQuery('.btn-group input:eq(0)').click();
  28. };
  29. Control.prototype.onTabClick = function (el, oPage) {
  30. jQuery(el).button('toggle');
  31. var iCardIndex = +el.getAttribute('cardIndex');
  32. if (this.m_sCards) {
  33. var a = oPage.getControlsByName(this.m_sCards);
  34. for (var i = 0; i < a.length; i++) {
  35. a[i].setDisplay(i === iCardIndex);
  36. }
  37. return;
  38. }
  39. for (var i = 0; i < this.m_sCardNames.length; i++) {
  40. oPage.getControlByName(this.m_sCardNames[i]).setDisplay(i === iCardIndex);
  41. }
  42. };
  43. Control.prototype.generateTabsFromDataStore = function (oControlHost) {
  44. var oDataStore = this.m_oDataStore;
  45. if (!oDataStore) {
  46. return null;
  47. }
  48. var iLabelColumn = oDataStore.getColumnIndex('Label') || 0;
  49. this.m_sCards = oControlHost.configuration.Cards;
  50. var aButtons = [];
  51. var iRowCount = oDataStore.rowCount;
  52. for (var iRow = 0; iRow < iRowCount; iRow++) {
  53. aButtons.push({
  54. label: oDataStore.getFormattedCellValue(iRow, iLabelColumn),
  55. card: this.m_sCards
  56. });
  57. }
  58. return aButtons;
  59. };
  60. Control.prototype.setData = function (oControlHost, oDataStore) {
  61. this.m_oDataStore = oDataStore;
  62. };
  63. return Control;
  64. });