HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //proc/self/cwd/wp-content/saphali-woocommerce-lite/js/saphali-admin-block.js
(function ($) {
  "use strict";

  // ======== Логика скрытия/отображения полей в классическом Checkout ========

  if (typeof saphaliSettings.saphaliKeys !== "undefined") {
    var $keys = saphaliSettings.saphaliKeys || [];
  }
  if (typeof saphaliSettings.saphaliSkeys !== "undefined") {
    var $skeys = saphaliSettings.saphaliSkeys || [];
  }

  // ======== Логика админ-панели (Drag & Drop) ========

  // инициализация TableDnD

  $(".myTable").tableDnD({
    onDragClass: "sorthelper",
    onDrop: function (table, row) {
      var data = new Object();
      data.data = new Object();
      data.key = $(table).find("tr td input").attr("rel");
      $(row).fadeOut("fast").fadeIn("slow");

      $(table)
        .find("tr:not('.nodrop')")
        .each(function (i, e) {
          var el_class = $(e).find("td input.order_count").attr("class");
          data.data[i] = el_class;
          $(e)
            .find("input." + el_class)
            .val(i);
        });
    },
    onAllowDrop: function (draggedRow, row) {
      // console.log('draggedRow', draggedRow.length, 'row', $(row).length);
      // return true;
      const option_tr = draggedRow.attr("class").indexOf("td_option") !== -1
      const diff_group = draggedRow.find("input").attr("name").match(/^[^\[]+/)[0] !== (!$(row).hasClass('nodrop') ? $(row).find("input").attr("name").match(/^[^\[]+/)[0] : '');
      const nodrag = $(row).hasClass('nodrop')
      console.log('option_tr ,  nodrag , diff_group', option_tr ,  nodrag , diff_group);
      
      return !(option_tr || nodrag || diff_group);
    },
  });
  var options_payment_method = "",
    options_shipping_method = "";
  $.each($keys, function (i, e) {
    options_payment_method += '<option value="' + i + '">' + e + "</option>";
  });

  $.each($skeys, function (i, e) {
    options_shipping_method += '<option value="' + i + '">' + e + "</option>";
  });
  // добавить строку
  ["billing", "shipping", "order", "account"].forEach(function (val) {
    $("#add_" + val + "_field").on("click", function () {
      // alert(val);
      var counter = $(this)
        .closest("tbody")
        .find('[name*="' + val + '["].order_count').length
        ? $(this)
            .closest("tbody")
            .find('[name*="' + val + '["].order_count:last')
            .val()
        : 0;
      var row =
        "<tr>" +
        '<td><input type="text" name="' +
        val +
        '[new][key][]" value="' +
        val +
        "_new" +
        (parseInt(counter, 10) + 1) +
        '" /></td>' +
        '<td><input type="text" name="' +
        val +
        '[new][label][]" value="" /></td>' +
        // '<td><input type="text" name="' +
        // val +
        // '[new][placeholder][]" value="" /></td>' +
        // '<td><input type="checkbox" name="' +
        // val +
        // '[new][clear][]" value="1" /></td>' +
        // '<td><input type="text" name="' +
        // val +
        // '[new][class][]" value="" /></td>' +
        '<td><div class="type-element">Select <input type="radio" name="' +
        val +
        '[new][type]" value="select"></div>' +
        '<div class="type-element">Radio <input type="radio" name="' +
        val +
        '[new][type]" value="radio"></div>' +
        '<div class="type-element">Checkbox <input type="radio" name="' +
        val +
        '[new][type]" value="checkbox"></div>' +
        '<div class="type-element">Textarea <input type="radio" name="' +
        val +
        '[new][type]" value="textarea"></div>' +
        '<div class="type-element">Text <input type="radio" checked name="' +
        val +
        '[new][type]" value="text"></div>' +
        (val !== "account"
          ? '<div class="type-element">Date&time <input type="radio" name="' +
            val +
            '[new][type]" value="date"></div>'
          : "") +
        '<input type="hidden" name="' +
        val +
        '[new][order][]" value="' +
        (parseInt(counter, 10) + 1) +
        '" class="order_count" /></td>' +
        '<td><input type="checkbox" name="' +
        val +
        '[new][required][]" /></td>' +
        '<td><input type="checkbox" name="' +
        val +
        '[new][public][]" checked /></td>' +
        '<td>'+  (val !== 'account' ?
          '<select multiple="multiple" width="120px" name="' +
          val +
          '[new][payment_method][]">\
                                <option selected value="0">'+saphaliSettings.all+'</option>' +
          options_payment_method +
          '</select>' : '') + '</td>' +
          '<td>'+  (val !== 'account' ? '<select multiple="multiple" width="120px" name="' +
          val +
          '[new][shipping_method][]">\
                                <option selected value="0">'+saphaliSettings.all+'</option>' +
           options_shipping_method +
          '</select>' : '') +
        '</td>' +
        '<td><button class="button remove-row">X</button></td>' +
        "</tr>";
      // $('#billing_fields_table .myTable').append(row);
      $(this).closest("tr").before(row);
      $(".myTable").tableDnDUpdate();
    });
  });

  // удалить строку
  $("table").on("click", ".remove-row", function (e) {
    e.preventDefault();
    var val = $(this)
      .closest("tr")
      .find("input")
      .attr("name")
      .match(/^[^\[]+/)[0];
    var obj_r = $(this).closest("tbody");
    $(this).closest("tr").remove();
    obj_r.find('[name*="' + val + '["].order_count').each(function (i, e) {
      $(e).val(i);
    });
  });

  // ======== Другое ========
  $.fn.tipTip = function (options) {
    var defaults = {
      activation: "hover",
      keepAlive: false,
      maxWidth: "200px",
      edgeOffset: 3,
      defaultPosition: "bottom",
      delay: 400,
      fadeIn: 200,
      fadeOut: 200,
      attribute: "title",
      content: false,
      enter: function () {},
      exit: function () {},
    };
    var opts = $.extend(defaults, options);
    if ($("#tiptip_holder").length <= 0) {
      var tiptip_holder = $(
        '<div id="tiptip_holder" style="max-width:' +
          opts.maxWidth +
          ';"></div>'
      );
      var tiptip_content = $('<div id="tiptip_content"></div>');
      var tiptip_arrow = $('<div id="tiptip_arrow"></div>');
      $("body").append(
        tiptip_holder
          .html(tiptip_content)
          .prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>'))
      );
    } else {
      var tiptip_holder = $("#tiptip_holder");
      var tiptip_content = $("#tiptip_content");
      var tiptip_arrow = $("#tiptip_arrow");
    }
    return this.each(function () {
      var org_elem = $(this);
      if (opts.content) {
        var org_title = opts.content;
      } else {
        var org_title = org_elem.attr(opts.attribute);
      }
      if (org_title != "") {
        if (!opts.content) {
          org_elem.removeAttr(opts.attribute);
        }
        var timeout = false;
        if (opts.activation == "hover") {
          org_elem.hover(
            function () {
              active_tiptip();
            },
            function () {
              if (!opts.keepAlive) {
                deactive_tiptip();
              }
            }
          );
          if (opts.keepAlive) {
            tiptip_holder.hover(
              function () {},
              function () {
                deactive_tiptip();
              }
            );
          }
        } else if (opts.activation == "focus") {
          org_elem
            .focus(function () {
              active_tiptip();
            })
            .blur(function () {
              deactive_tiptip();
            });
        } else if (opts.activation == "click") {
          org_elem
            .click(function () {
              active_tiptip();
              return false;
            })
            .hover(
              function () {},
              function () {
                if (!opts.keepAlive) {
                  deactive_tiptip();
                }
              }
            );
          if (opts.keepAlive) {
            tiptip_holder.hover(
              function () {},
              function () {
                deactive_tiptip();
              }
            );
          }
        }
        function active_tiptip() {
          opts.enter.call(this);
          tiptip_content.html(org_title);
          tiptip_holder.hide().removeAttr("class").css("margin", "0");
          tiptip_arrow.removeAttr("style");
          var top = parseInt(org_elem.offset()["top"]);
          var left = parseInt(org_elem.offset()["left"]);
          var org_width = parseInt(org_elem.outerWidth());
          var org_height = parseInt(org_elem.outerHeight());
          var tip_w = tiptip_holder.outerWidth();
          var tip_h = tiptip_holder.outerHeight();
          var w_compare = Math.round((org_width - tip_w) / 2);
          var h_compare = Math.round((org_height - tip_h) / 2);
          var marg_left = Math.round(left + w_compare);
          var marg_top = Math.round(top + org_height + opts.edgeOffset);
          var t_class = "";
          var arrow_top = "";
          var arrow_left = Math.round(tip_w - 12) / 2;
          if (opts.defaultPosition == "bottom") {
            t_class = "_bottom";
          } else if (opts.defaultPosition == "top") {
            t_class = "_top";
          } else if (opts.defaultPosition == "left") {
            t_class = "_left";
          } else if (opts.defaultPosition == "right") {
            t_class = "_right";
          }
          var right_compare =
            w_compare + left < parseInt($(window).scrollLeft());
          var left_compare = tip_w + left > parseInt($(window).width());
          if (
            (right_compare && w_compare < 0) ||
            (t_class == "_right" && !left_compare) ||
            (t_class == "_left" && left < tip_w + opts.edgeOffset + 5)
          ) {
            t_class = "_right";
            arrow_top = Math.round(tip_h - 13) / 2;
            arrow_left = -12;
            marg_left = Math.round(left + org_width + opts.edgeOffset);
            marg_top = Math.round(top + h_compare);
          } else if (
            (left_compare && w_compare < 0) ||
            (t_class == "_left" && !right_compare)
          ) {
            t_class = "_left";
            arrow_top = Math.round(tip_h - 13) / 2;
            arrow_left = Math.round(tip_w);
            marg_left = Math.round(left - (tip_w + opts.edgeOffset + 5));
            marg_top = Math.round(top + h_compare);
          }
          var top_compare =
            top + org_height + opts.edgeOffset + tip_h + 8 >
            parseInt($(window).height() + $(window).scrollTop());
          var bottom_compare =
            top + org_height - (opts.edgeOffset + tip_h + 8) < 0;
          if (
            top_compare ||
            (t_class == "_bottom" && top_compare) ||
            (t_class == "_top" && !bottom_compare)
          ) {
            if (t_class == "_top" || t_class == "_bottom") {
              t_class = "_top";
            } else {
              t_class = t_class + "_top";
            }
            arrow_top = tip_h;
            marg_top = Math.round(top - (tip_h + 5 + opts.edgeOffset));
          } else if (
            bottom_compare | (t_class == "_top" && bottom_compare) ||
            (t_class == "_bottom" && !top_compare)
          ) {
            if (t_class == "_top" || t_class == "_bottom") {
              t_class = "_bottom";
            } else {
              t_class = t_class + "_bottom";
            }
            arrow_top = -12;
            marg_top = Math.round(top + org_height + opts.edgeOffset);
          }
          if (t_class == "_right_top" || t_class == "_left_top") {
            marg_top = marg_top + 5;
          } else if (t_class == "_right_bottom" || t_class == "_left_bottom") {
            marg_top = marg_top - 5;
          }
          if (t_class == "_left_top" || t_class == "_left_bottom") {
            marg_left = marg_left + 5;
          }
          tiptip_arrow.css({
            "margin-left": arrow_left + "px",
            "margin-top": arrow_top + "px",
          });
          tiptip_holder
            .css({
              "margin-left": marg_left + "px",
              "margin-top": marg_top + "px",
            })
            .attr("class", "tip" + t_class);
          if (timeout) {
            clearTimeout(timeout);
          }
          timeout = setTimeout(function () {
            tiptip_holder.stop(true, true).fadeIn(opts.fadeIn);
          }, opts.delay);
        }
        function deactive_tiptip() {
          opts.exit.call(this);
          if (timeout) {
            clearTimeout(timeout);
          }
          tiptip_holder.fadeOut(opts.fadeOut);
        }
      }
    });
  };
  $(".tips, .help_tip").tipTip({
    attribute: "data-tip",
    fadeIn: 50,
    fadeOut: 50,
    delay: 200,
  });
  $('input[value="billing_booking_delivery_t"]').closest("tr").hide();

  $("body").on("click", ".delete-option", function () {
    $(this).closest("span:not('.delete-option')").remove();
  });
  $("body").on("click", ".button.add_option", function () {
    var val = $(this)
      .closest("tr")
      .find("input")
      .attr("name")
      .match(/^[^\[]+/)[0];

    $(this).before(
      ' <span><br /><input type="text" class="options" value="" name="' +
        val +
        "[" +
        $(this).attr("rel") +
        "][options][option-" +
        ($(this).closest("td").find("input").length + 1) +
        ']"/><span class="delete-option" style="cursor:pointer;border:1px solid">' +
        saphaliSettings.delete +
        "</span></span>"
    );
  });
  $("body").on("click", 'input[type="radio"]', function () {
    if ($(this).val() == "select" || $(this).val() == "radio") {
      if (
        !(
          typeof $(this).closest("tr").find("td:first input") != "undefined" &&
          $(this).closest("tr").find("td:first input").attr("disabled") ===
            "disabled"
        )
      ) {
        var obj = $(this).closest("tr");
        obj;
        obj.find("td").css("border-bottom", "none");
        var val = obj
          .find("input")
          .attr("name")
          .match(/^[^\[]+/)[0];
        var indx_ = obj.attr("class");
        if (indx_) {
          var indx = indx_.split(" ")[0].replace("parrent_td_option", "");
        }

        if (!obj.closest("tbody").find("tr.tr_td_option" + indx).length) {
          obj.addClass("parrent_td_option" + $(".button.add_option").length);
          var firstInput = obj.find("td:first input");
          console.log(firstInput.val(), firstInput);

          if (val + "[new][key][]" === firstInput.attr("name"))
            obj.after(
              '<tr style="border-top:0" class="tr_td_option' +
                $(".button.add_option").length +
                '" ><td  style="border-top:0;" colspan="9"> <span><input class="options" type="text" value="" name="' +
                val +
                "[" +
                firstInput.val() +
                '][options][option-1]"/><span class="delete-option" style="cursor:pointer;border:1px solid">' +
                saphaliSettings.delete +
                '</span></span> <div class="button add_option" rel="' +
                firstInput.val() +
                '">' +
                saphaliSettings.add2 +
                "</div></td></tr>"
            );
          else
            obj.after(
              '<tr style="border-top:0" class="tr_td_option' +
                $(".button.add_option").length +
                '" ><td  style="border-top:0;" colspan="9"> <span><input class="options" type="text" value="" name="' +
                val +
                '[new][options][option-1]"/><span class="delete-option" style="cursor:pointer;border:1px solid">' +
                saphaliSettings.delete +
                '</span></span> <div class="button add_option" rel="new">' +
                saphaliSettings.add2 +
                "</div></td></tr>"
            );
        }
      }
    } else {
      var obj = $(this).closest("tr");
      if (obj.find("td").attr("style") != "") {
        obj.find("td").attr("style", "");
        var text = obj.attr("class"); //parrent_td_option
        if (typeof text != "undefined") {
          text = text.replace(/parrent_td_option/g, "");
          $("tr.tr_td_option" + text).remove();
          obj.attr("class", "");
        }
      }
    }
  });

  $("body").on("blur", "input.options", function () {
    var is_dissabled =
      typeof $(this).closest("tr").find("td:first input") != "undefined" &&
      $(this).closest("tr").find("td:first input").attr("disabled") ===
        "disabled";
    var $input = $(this);
    var baseName = $input.data("base-name");

    // Сохранение исходного имени, если ещё не сохранено
    if (!baseName) {
      baseName = $input.attr("name");
      $input.data("base-name", baseName);
    }

    var enteredValue = $input.val().trim();

    if (enteredValue !== "") {
      // Подсчёт количества существующих опций
      // var optionCount = $('input.options').filter(function() {
      //     return $(this).data('base-name') === baseName;
      // }).length;

      // Формируем новое имя с уникальным индексом
      if (is_dissabled) {
        var newName =
          baseName.replace(/\[option-\d+\]/, "[" +
          enteredValue +
          "]");
      } else {
        var newName =
          baseName +
          "[" +
          enteredValue +
          "]"; /* [option-" + optionCount + "] */
      }

      // Обновляем атрибут name
      $input.attr("name", newName);
      
    } else {
      // Восстановление исходного имени, если поле пустое
      $input.attr("name", baseName);
    }
  });
})(jQuery);