@customviews-js/customviews 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @customviews-js/customviews v1.1.3
2
+ * @customviews-js/customviews v1.1.4
3
3
  * (c) 2025 Chan Ger Teck
4
4
  * Released under the MIT License.
5
5
  */
@@ -281,8 +281,12 @@ function ensureFontAwesomeInjected() {
281
281
  document.head.appendChild(link);
282
282
  }
283
283
  function replaceIconShortcodes(text) {
284
- // Handle Font Awesome shortcodes
285
- return text.replace(/:fa-([\w-]+):/g, (_, icon) => `<i class="fa fa-${icon}"></i>`);
284
+ // Matches :fa-*, :fas-*, :fab-* etc.
285
+ return text.replace(/:(fa[b|s|r]?)-([\w-]+):/g, (_, style, icon) => {
286
+ // style = fa, fas, fab, far, etc.
287
+ // Default to "fa" if only "fa-" is given
288
+ return `<i class="${style} fa-${icon}"></i>`;
289
+ });
286
290
  }
287
291
  /** --- Basic renderers --- */
288
292
  function renderImage(el, asset) {
@@ -2038,12 +2042,34 @@ class CustomViewsWidget {
2038
2042
  // Get tab groups
2039
2043
  const tabGroups = this.core.getTabGroups();
2040
2044
  let tabGroupsHTML = '';
2045
+ // Check if any tab group or tab labels contain Font Awesome shortcodes
2046
+ let hasFontAwesomeShortcodes = false;
2047
+ if (this.options.showTabGroups && tabGroups && tabGroups.length > 0) {
2048
+ for (const group of tabGroups) {
2049
+ if (group.label && /:fa-[\w-]+:/.test(group.label)) {
2050
+ hasFontAwesomeShortcodes = true;
2051
+ break;
2052
+ }
2053
+ for (const tab of group.tabs) {
2054
+ if (tab.label && /:fa-[\w-]+:/.test(tab.label)) {
2055
+ hasFontAwesomeShortcodes = true;
2056
+ break;
2057
+ }
2058
+ }
2059
+ if (hasFontAwesomeShortcodes)
2060
+ break;
2061
+ }
2062
+ }
2063
+ // Inject Font Awesome only if shortcodes are found
2064
+ if (hasFontAwesomeShortcodes) {
2065
+ ensureFontAwesomeInjected();
2066
+ }
2041
2067
  if (this.options.showTabGroups && tabGroups && tabGroups.length > 0) {
2042
2068
  const tabGroupControls = tabGroups.map(group => {
2043
- const options = group.tabs.map(tab => `<option value="${tab.id}">${tab.label || tab.id}</option>`).join('');
2069
+ const options = group.tabs.map(tab => `<option value="${tab.id}">${replaceIconShortcodes(tab.label || tab.id)}</option>`).join('');
2044
2070
  return `
2045
2071
  <div class="cv-tab-group-control">
2046
- <label for="tab-group-${group.id}">${group.label || group.id}</label>
2072
+ <label for="tab-group-${group.id}">${replaceIconShortcodes(group.label || group.id)}</label>
2047
2073
  <select id="tab-group-${group.id}" class="cv-tab-group-select" data-group-id="${group.id}">
2048
2074
  ${options}
2049
2075
  </select>