* @param {CreateTabRequest} request
(request)
| 767 | * @param {CreateTabRequest} request |
| 768 | */ |
| 769 | function createTab(request) { |
| 770 | if (!request?.id) { |
| 771 | console.error("createTab() error - id is required", Error().stack) |
| 772 | return |
| 773 | } |
| 774 | |
| 775 | if (!request.label) { |
| 776 | console.error("createTab() error - label is required", Error().stack) |
| 777 | return |
| 778 | } |
| 779 | |
| 780 | if (!request.icon) { |
| 781 | console.error("createTab() error - icon is required", Error().stack) |
| 782 | return |
| 783 | } |
| 784 | |
| 785 | if (!request.content && !request.onOpen) { |
| 786 | console.error("createTab() error - content or onOpen required", Error().stack) |
| 787 | return |
| 788 | } |
| 789 | |
| 790 | const tabsContainer = document.querySelector(".tab-container") |
| 791 | if (!tabsContainer) { |
| 792 | return |
| 793 | } |
| 794 | |
| 795 | const tabsContentWrapper = document.querySelector("#tab-content-wrapper") |
| 796 | if (!tabsContentWrapper) { |
| 797 | return |
| 798 | } |
| 799 | |
| 800 | // console.debug('creating tab: ', request) |
| 801 | |
| 802 | if (request.css) { |
| 803 | document |
| 804 | .querySelector("body") |
| 805 | .insertAdjacentElement( |
| 806 | "beforeend", |
| 807 | createElement("style", { id: `tab-${request.id}-css` }, undefined, request.css) |
| 808 | ) |
| 809 | } |
| 810 | |
| 811 | const label = typeof request.label === "function" ? request.label() : request.label |
| 812 | const labelElement = label instanceof Node ? label : createElement("span", undefined, undefined, label) |
| 813 | |
| 814 | const tab = createElement( |
| 815 | "span", |
| 816 | { id: `tab-${request.id}`, "data-times-opened": 0 }, |
| 817 | ["tab"], |
| 818 | createElement("span", undefined, undefined, [ |
| 819 | createElement("i", { style: "margin-right: 0.25em" }, [ |
| 820 | "fa-solid", |
| 821 | `${request.icon.startsWith("fa-") ? "" : "fa-"}${request.icon}`, |
| 822 | "icon", |
| 823 | ]), |
| 824 | labelElement, |
| 825 | ]) |
| 826 | ) |
no test coverage detected