module_matrix-1.0.2/js/module-matrix/data-manager.js

js/module-matrix/data-manager.js
/**
 * @file data-manager.js
 * Module data initialization and management
 */

window.ModuleMatrix = window.ModuleMatrix || {};

window.ModuleMatrix.DataManager = {

  /**
   * Initialize module data from unified wrapper
   */
  initializeModuleData(wrapper) {
    const { SELECTORS, DEFAULTS, DATA_STRUCTURE } = window.ModuleMatrix.Constants;
    const data = { ...DATA_STRUCTURE };

    const moduleList = wrapper.querySelector(SELECTORS.listSelector);
    if (!moduleList) return data;

    const moduleItems = Array.from(moduleList.querySelectorAll(SELECTORS.moduleItem));

    moduleItems.forEach((item) => {
      this.processModuleItem(item, data);
    });

    return data;
  },

  /**
   * Process individual module item and update data
   */
  processModuleItem(item, data) {
    const { SELECTORS, DEFAULTS } = window.ModuleMatrix.Constants;
    const namePackage = item.querySelector(SELECTORS.namePackage);

    if (!namePackage) return;

    const moduleInfo = this.extractModuleInfo(namePackage);
    const isEnabled = parseInt(moduleInfo.status) === DEFAULTS.enabledStatus;

    this.updateModuleCounts(data, moduleInfo.packageName, isEnabled);
    this.addModuleToCollection(data, item, moduleInfo);
  },

  /**
   * Extract module information from namePackage element
   */
  extractModuleInfo(namePackage) {
    const { DEFAULTS } = window.ModuleMatrix.Constants;

    return {
      packageName: namePackage.dataset.package || DEFAULTS.unknownPackage,
      name: namePackage.textContent.trim() || '',
      status: namePackage.dataset.status || '',
      date: namePackage.dataset.date || '',
      stability: namePackage.dataset.stability || '',
      lifecycle: namePackage.dataset.lifecycle || ''
    };
  },

  /**
   * Update module counts for packages
   */
  updateModuleCounts(data, packageName, isEnabled) {
    data.totalModules++;
    data.packageCounts[packageName] = (data.packageCounts[packageName] || 0) + 1;

    if (isEnabled) {
      data.totalEnabled++;
      data.packageEnabledCounts[packageName] = (data.packageEnabledCounts[packageName] || 0) + 1;
    } else {
      data.totalDisabled++;
      data.packageDisabledCounts[packageName] = (data.packageDisabledCounts[packageName] || 0) + 1;
    }
  },

  /**
   * Add module to data collection
   */
  addModuleToCollection(data, element, moduleInfo) {
    const moduleData = {
      element,
      packageName: moduleInfo.packageName,
      name: moduleInfo.name,
      date: moduleInfo.date,
      stability: moduleInfo.stability,
      lifecycle: moduleInfo.lifecycle
    };

    data.modules.push(moduleData);
  },

  /**
   * Get package statistics
   */
  getPackageStats(data) {
    const { Utils } = window.ModuleMatrix;

    return {
      totalModules: Utils.calculateTotal(data.packageCounts),
      totalEnabled: Utils.calculateTotal(data.packageEnabledCounts),
      totalDisabled: Utils.calculateTotal(data.packageDisabledCounts)
    };
  },

  /**
   * Get package specific counts
   */
  getPackageCounts(data, packageName) {
    return {
      total: data.packageCounts[packageName] || 0,
      enabled: data.packageEnabledCounts[packageName] || 0,
      disabled: data.packageDisabledCounts[packageName] || 0
    };
  },

  /**
   * Filter modules by package
   */
  getModulesByPackage(data, packageName) {
    const { DEFAULTS } = window.ModuleMatrix.Constants;

    if (packageName === DEFAULTS.activePackage) {
      return data.modules;
    }

    return data.modules.filter(module => module.packageName === packageName);
  },

  /**
   * Get unique package names
   */
  getPackageNames(data) {
    return Object.keys(data.packageCounts).sort();
  },

  /**
   * Validate data structure
   */
  validateData(data) {
    const requiredKeys = ['totalModules', 'packageCounts', 'modules'];
    return requiredKeys.every(key => data.hasOwnProperty(key));
  }
};

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc