# sync-basalam/1.10.5/assets/js/round.js

ووسلام – همگام سازی ووکامرس و باسلام, version 1.10.5. 183 lines.

- Page: https://pluginprobe.com/plugins/sync-basalam/1.10.5/code/assets/js/round.js
- Raw: https://pluginprobe.com/plugins/sync-basalam/1.10.5/raw/assets/js/round.js
- Modified: 2026-08-05T14:13:10+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/sync-basalam/1.10.5/code/assets/js/round.js#L10-L20`.

```javascript
document.addEventListener("DOMContentLoaded", function () {
  const COMMISSION_VALUE = "commission";
  // Range in which a value is read as a percentage; outside it the value is a fixed Toman amount
  const PERCENT_RANGE_MIN = -100;
  const PERCENT_RANGE_MAX = 100;
  // Maximum allowed increase and decrease percentage
  const MAX_PERCENT = 35;
  const MIN_PERCENT = -35;

  // Parses the raw input text into an integer, keeping a leading minus sign
  const parseValue = function (rawText) {
    const isNegative = /^\s*-/.test(rawText);
    const digits = rawText.replace(/[^\d]/g, "");

    if (digits === "") {
      return { raw: isNegative ? "-" : "", value: 0, empty: true };
    }

    const value = (isNegative ? -1 : 1) * parseInt(digits, 10);

    return { raw: digits, value: value, empty: false };
  };

  const formatValue = function (value) {
    return value.toLocaleString("en-US");
  };

  const isPercent = function (value) {
    return value >= PERCENT_RANGE_MIN && value <= PERCENT_RANGE_MAX;
  };

  const groups = document.querySelectorAll(
    ".basalam-form-group, .basalam-form-group-full"
  );

  groups.forEach(function (group) {
    const checkbox = group.querySelector(".toggle-percentage");
    if (!checkbox) {
      return;
    }

    const input =
      group.querySelector('[data-role="price-change-input"]') ||
      group.querySelector(
        'input.percentage-input[type="text"][name="sync_basalam_settings[price_change_value]"]'
      );
    const unit = group.querySelector(".percentage-unit");
    const hiddenInput =
      group.querySelector('[data-role="price-change-hidden"]') ||
      group.querySelector(
        'input[type="hidden"][name="sync_basalam_settings[price_change_value]"]'
      );

    if (!input || !unit || !hiddenInput) {
      return;
    }

    const normalizeInput = function () {
      const parsed = parseValue(input.value);

      if (parsed.empty) {
        input.value = parsed.raw;
        unit.textContent = "درصد";

        return "";
      }

      input.value = formatValue(parsed.value);
      unit.textContent = isPercent(parsed.value) ? "درصد" : "تومان";

      return String(parsed.value);
    };

    const updateHiddenValue = function (value) {
      if (hiddenInput.value === String(value)) {
        return;
      }

      hiddenInput.value = String(value);
      hiddenInput.dispatchEvent(new Event("input", { bubbles: true }));
      hiddenInput.dispatchEvent(new Event("change", { bubbles: true }));
    };

    const syncHiddenInput = function () {
      if (checkbox.checked) {
        updateHiddenValue(COMMISSION_VALUE);
        return;
      }

      updateHiddenValue(normalizeInput());
    };

    input.disabled = checkbox.checked;
    syncHiddenInput();

    input.addEventListener("input", function () {
      if (!checkbox.checked) {
        syncHiddenInput();
      }
    });

    checkbox.addEventListener("change", function () {
      input.disabled = checkbox.checked;

      if (checkbox.checked) {
        input.value = "";
        updateHiddenValue(COMMISSION_VALUE);
        unit.textContent = "درصد";
        return;
      }

      syncHiddenInput();
    });

    const form = group.closest("form");
    if (form && !form.dataset.priceChangeBound) {
      form.addEventListener("submit", function () {
        const toggles = form.querySelectorAll(".toggle-percentage");
        let clampedNotice = false;

        toggles.forEach(function (toggle) {
          const toggleGroup =
            toggle.closest(".basalam-form-group") ||
            toggle.closest(".basalam-form-group-full");

          if (!toggleGroup) {
            return;
          }

          const toggleInput =
            toggleGroup.querySelector('[data-role="price-change-input"]') ||
            toggleGroup.querySelector(
              'input.percentage-input[type="text"][name="sync_basalam_settings[price_change_value]"]'
            );
          const toggleHidden =
            toggleGroup.querySelector('[data-role="price-change-hidden"]') ||
            toggleGroup.querySelector(
              'input[type="hidden"][name="sync_basalam_settings[price_change_value]"]'
            );

          if (!toggleInput || !toggleHidden) {
            return;
          }

          if (toggle.checked) {
            toggleHidden.value = COMMISSION_VALUE;
            return;
          }

          const parsed = parseValue(toggleInput.value);

          if (parsed.empty) {
            toggleHidden.value = "";
            return;
          }

          let numberValue = parsed.value;

          if (isPercent(numberValue) && (numberValue > MAX_PERCENT || numberValue < MIN_PERCENT)) {
            clampedNotice = true;
            numberValue = numberValue > MAX_PERCENT ? MAX_PERCENT : MIN_PERCENT;
            toggleInput.value = formatValue(numberValue);
            const unitEl = toggleGroup.querySelector(".percentage-unit");
            if (unitEl) {
              unitEl.textContent = "درصد";
            }
          }

          toggleHidden.value = String(numberValue);
        });

        if (clampedNotice) {
          BasalamToast.info(
            "مقدار تغییر قیمت در حالت درصد نمی‌تواند بیشتر از ۳۵٪ افزایش یا ۳۵٪ کاهش باشد. مقدار وارد شده به سقف مجاز تغییر داده شد و ذخیره می‌شود."
          );
        }
      });

      form.dataset.priceChangeBound = "1";
    }
  });
});

```
