HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux bsx-1-dev 6.8.0-101-generic #101-Ubuntu SMP PREEMPT_DYNAMIC Mon Feb 9 10:15:05 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/bsx/ass/js/overviewPreferenceToggle.js
/**
 * Overview Page Quick Toggle Component
 * Handles preference toggles in campaign/Cassandra overview lists
 */

class OverviewPreferenceToggle {
  constructor(preferencesManager) {
    this.manager = preferencesManager;
  }

  /**
   * Initialize the overview toggles
   */
  async init() {
    await this.renderToggles();
    this.setupEventListeners();
  }

  /**
   * Render preference toggles for all items in the overview
   */
  async renderToggles() {
    // Find all overview rows (campaigns and Cassandras)
    const overviewRows = document.querySelectorAll('[data-overview-item]');

    overviewRows.forEach(row => {
      const itemId = row.dataset.overviewItem;
      const itemType = row.dataset.overviewType;

      // Check if toggle already exists
      if (row.querySelector('.preference-toggle')) {
        this.updateToggleState(row, itemId, itemType);
        return;
      }

      // Create and add toggle
      const toggle = this.createToggle(itemId, itemType);
      
      // Insert at the beginning of the row
      row.insertBefore(toggle, row.firstChild);
    });
  }

  /**
   * Create a preference toggle element
   */
  createToggle(itemId, itemType) {
    const toggle = document.createElement('div');
    toggle.className = 'preference-toggle';
    
    const isActive = this.manager.isInPreferences(itemId, itemType);
    
    toggle.innerHTML = `
      <button 
        class="preference-toggle-btn ${isActive ? 'preference-active' : ''}"
        data-preference-toggle="${itemId}"
        data-preference-type="${itemType}"
        title="${isActive ? 'Aus Präferenzen entfernen' : 'Zu Präferenzen hinzufügen'}"
      >
        <svg class="toggle-icon" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path class="icon-outline" d="M9.99 2.5C5.86 2.5 2.5 5.86 2.5 9.99C2.5 14.12 5.86 17.49 9.99 17.49C14.13 17.49 17.5 14.13 17.5 10C17.5 5.87 14.13 2.5 9.99 2.5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
          <path class="icon-star" d="M10 6.25L10.9099 8.6901L13.5 9.125L11.75 10.875L12.2697 13.5L10 12.25L7.73026 13.5L8.25 10.875L6.5 9.125L9.0901 8.6901L10 6.25Z" fill="currentColor"/>
        </svg>
      </button>
    `;

    return toggle;
  }

  /**
   * Update toggle state based on current preferences
   */
  updateToggleState(row, itemId, itemType) {
    const toggleBtn = row.querySelector('.preference-toggle-btn');
    if (!toggleBtn) return;

    const isActive = this.manager.isInPreferences(itemId, itemType);
    
    if (isActive) {
      toggleBtn.classList.add('preference-active');
      toggleBtn.title = 'Aus Präferenzen entfernen';
    } else {
      toggleBtn.classList.remove('preference-active');
      toggleBtn.title = 'Zu Präferenzen hinzufügen';
    }
  }

  /**
   * Setup event listeners
   */
  setupEventListeners() {
    // Listen for preference changes
    document.addEventListener('preferenceToggled', (e) => {
      const { itemId, type } = e.detail;
      const row = document.querySelector(`[data-overview-item="${itemId}"][data-overview-type="${type}"]`);
      if (row) {
        this.updateToggleState(row, itemId, type);
      }
    });

    document.addEventListener('preferenceDeleted', () => {
      this.renderToggles();
    });

    // Visual feedback on hover
    document.addEventListener('mouseover', (e) => {
      if (e.target.closest('.preference-toggle-btn')) {
        const row = e.target.closest('[data-overview-item]');
        if (row) {
          row.classList.add('preference-hover');
        }
      }
    });

    document.addEventListener('mouseout', (e) => {
      if (e.target.closest('.preference-toggle-btn')) {
        const row = e.target.closest('[data-overview-item]');
        if (row) {
          row.classList.remove('preference-hover');
        }
      }
    });
  }

  /**
   * Batch update toggles (useful after bulk operations)
   */
  updateAllToggles() {
    const overviewRows = document.querySelectorAll('[data-overview-item]');
    overviewRows.forEach(row => {
      const itemId = row.dataset.overviewItem;
      const itemType = row.dataset.overviewType;
      this.updateToggleState(row, itemId, itemType);
    });
  }
}

// Export for use in other modules
if (typeof module !== 'undefined' && module.exports) {
  module.exports = OverviewPreferenceToggle;
}