File "main.js"

Full Path: /home/romayxjt/public_html/wp-content/plugins/orderable/assets/admin/js/main.js
File size: 20.2 KB
MIME-type: text/plain
Charset: utf-8


(function ($, document) {
  'use strict';

  const orderable_layouts = {
    /**
     * On doc ready.
     */
    on_ready() {
      /**
       * On change layout setting.
       */
      $(document.body).on('change', '.orderable-table--product-lists input, .orderable-table--product-lists select', function (e) {
        const $field = $(this),
          $parent = $field.closest('.orderable-table__row--repeatable'),
          $shortcode = $parent.find('.orderable-field--product-list-shortcode');
        const default_shortcode_parameters = {
          categories: '',
          layout: 'grid',
          images: 'true'
        };
        const shortcode_parameters = {
          categories: $parent.find('.orderable-select--categories').val().toString(),
          layout: $parent.find('.orderable-select--layout').val().toString(),
          images: $parent.find('.orderable-checkbox--images').is(':checked').toString()
        };
        let shortcode = '[orderable';
        $.each(shortcode_parameters, function (key, value) {
          if (value === default_shortcode_parameters[key]) {
            return;
          }
          shortcode += ' ' + key + '="' + value + '"';
        });
        shortcode += ']';
        $shortcode.val(shortcode);
      });
    }
  };
  $(document).ready(orderable_layouts.on_ready);
})(jQuery, document);
(function ($, document) {
  'use strict';

  var orderable_multiselects = {
    /**
     * On doc ready.
     */
    on_ready() {
      orderable_multiselects.init($('.orderable-select--multi-select'));

      /**
       * Init multiselects trigger.
       */
      $(document).on('orderable-init-multiselects', function (e, data) {
        if (typeof data.selects === 'undefined') {
          return;
        }
        orderable_multiselects.init(data.selects);
      });

      /**
       * Destroy mutliselects trigger.
       */
      $(document).on('orderable-destroy-multiselects', function (e, data) {
        if (typeof data.selects === 'undefined') {
          return;
        }
        orderable_multiselects.destroy(data.selects);
      });
    },
    /**
     * Init multiselects.
     *
     * @param $selects
     */
    init($selects) {
      $selects.multiSelect();
      $selects.each(function (index, select) {
        const $select = $(select),
          $multi_select = $select.siblings('.multi-select-container'),
          $none_option = $multi_select.find('.multi-select-menuitem--none'),
          none_label = $select.data('orderable-select-none-option');
        $none_option.remove();
        const $labels = $multi_select.find('.multi-select-menuitem'),
          $disabled_labels = $multi_select.find('.multi-select-menuitems input:disabled').parent();
        $labels.show();
        $disabled_labels.hide();
        if ($labels.length === $disabled_labels.length && none_label) {
          $multi_select.find('.multi-select-menuitems').append('<span class="multi-select-menuitem multi-select-menuitem--none">' + none_label + '</span>');
        }
      });
    },
    /**
     * Destroy multiselects.
     *
     * @param $selects
     */
    destroy($selects) {
      const $multi_selects = $selects.siblings('.multi-select-container');
      $multi_selects.remove();
      $selects.data('plugin_multiSelect', false);
    }
  };
  $(document).ready(orderable_multiselects.on_ready);
})(jQuery, document);
(function ($, document) {
  'use strict';

  var orderable_onboard = {
    /**
     * On doc ready.
     */
    on_ready() {
      $(document.body).on('iconic_onboard_wait_complete', orderable_onboard.init.woo_installed);
    },
    /**
     * Onboard methods.
     */
    init: {
      /**
       * After woo installed.
       * @param event
       * @param data
       */
      woo_installed(event, data) {
        if (typeof data === 'undefined') {
          return;
        }
        if ('install_plugin' !== data.wait_event) {
          return;
        }
        if ('woocommerce' !== data.json.plugin_data['repo-slug']) {
          return;
        }
        orderable_onboard.populate_woo_fields();
      }
    },
    /**
     * Populate woo fields.
     */
    populate_woo_fields() {
      const fields = {
        default_country: {
          type: 'select',
          selector: 'select#iconic_onboard_default_country'
        },
        business_name: {
          type: 'text',
          selector: 'input#iconic_onboard_business_name'
        },
        business_address: {
          type: 'text',
          selector: 'input#iconic_onboard_business_address'
        },
        business_address_2: {
          type: 'text',
          selector: 'input#iconic_onboard_business_address_2'
        },
        business_city: {
          type: 'text',
          selector: 'input#iconic_onboard_business_city'
        },
        business_postcode: {
          type: 'text',
          selector: 'input#iconic_onboard_business_postcode'
        }
      };
      const data = {
        action: 'orderable_get_onboard_woo_fields',
        fields
      };
      $.post(ajaxurl, data).done(function (response) {
        try {
          if (response.success) {
            $.each(fields, function (index, field) {
              const $field = $(field.selector);
              if ($field.length <= 0 || typeof response.data[index] === 'undefined') {
                return;
              }
              if ('select' === field.type) {
                $field.html(response.data[index]);
              } else {
                $field.val(response.data[index]);
              }
            });
          }
        } catch (ex) {
          console.log(response);
          console.log(ex);
          alert("Couldn't save.");
        }
      }).fail(function () {
        alert("Couldn't save. Are you connected to the internet? ");
      }).always(function () {});
    }
  };
  $(document).ready(orderable_onboard.on_ready);
})(jQuery, document);
jQuery(document).ready(function () {
  function show_orderable_pointer(id) {
    const pointer = orderable_pointers.pointers[id];
    if (pointer === undefined) {
      return;
    }
    const options = jQuery.extend(pointer.options, {
      pointerClass: 'wp-pointer wc-pointer orderable-pointer',
      close() {
        jQuery.post(orderable_pointers.ajax_url, {
          pointer: id,
          action: 'dismiss-wp-pointer'
        });
        if (pointer && pointer.next && orderable_pointers.pointers[pointer.next]) {
          setTimeout(function () {
            show_orderable_pointer(pointer.next);
          }, 250);
        }
      },
      skip() {
        const active_pointers = document.querySelectorAll('.wp-pointer.orderable-pointer');
        Array.from(active_pointers).forEach(function (active_pointer) {
          active_pointer.remove();
        });
        jQuery.post(orderable_pointers.ajax_url, {
          pointer: 'orderable-tour-dismissed',
          action: 'dismiss-wp-pointer'
        });
      },
      buttons(event, t) {
        const next = pointer && pointer.next && orderable_pointers.pointers[pointer.next] ? orderable_pointers.i18n.next : orderable_pointers.i18n.close,
          button = jQuery('<a class="button button-primary" href="#">' + next + '</a>'),
          wrapper = jQuery('<div class="wc-pointer-buttons" />');
        const skip = orderable_pointers.i18n.skip,
          skipButton = jQuery('<a class="button button-secondary" href="#">' + skip + '</a>');
        button.bind('click.pointer', function (e) {
          e.preventDefault();
          t.element.pointer('close');
        });
        skipButton.bind('click.pointer', function (e) {
          e.preventDefault();
          pointer.options.skip();
        });
        wrapper.append(button);
        wrapper.append(skipButton);
        return wrapper;
      }
    });
    const this_pointer = jQuery(pointer.target).pointer(options);
    this_pointer.pointer('open');
    if (pointer.next_trigger) {
      jQuery(pointer.next_trigger.target).on(pointer.next_trigger.event, function () {
        setTimeout(function () {
          this_pointer.pointer('close');
        }, 400);
      });
    }
  }
  function init_orderable_pointers() {
    if (typeof orderable_pointers === 'undefined') {
      return;
    }
    jQuery.each(orderable_pointers.pointers, function (i) {
      show_orderable_pointer(i);
      return false;
    });
  }
  setTimeout(init_orderable_pointers, 800);
});
(function ($, document) {
  'use strict';

  var orderable_pro = {
    /**
     * On ready.
     */
    on_ready() {
      $(document.body).on('orderable-pro-modal', orderable_pro.trigger_pro_modal);
    },
    /**
     * Trigger pro modal.
     */
    trigger_pro_modal() {
      console.log('Pro only.');
      tb_show('Pro Feature', '#TB_inline?inlineId=orderable-pro-modal');
    }
  };
  $(document).ready(orderable_pro.on_ready);
})(jQuery, document);
(function ($, document) {
  'use strict';

  const orderable_timings = {
    /**
     * On doc ready.
     */
    on_ready() {
      /**
       * On enable day.
       */
      $(document.body).on('change', '.orderable-enable-day', function (e) {
        const $checkbox = $(this),
          day = $checkbox.data('orderable-day'),
          checked = $checkbox.is(':checked'),
          $day_selects = $('.orderable-select--days');
        $day_selects.find('option[value="' + day + '"]').attr('disabled', !checked).attr('selected', false);
        $(document).trigger('orderable-destroy-multiselects', {
          selects: $day_selects
        });
        $(document).trigger('orderable-init-multiselects', {
          selects: $day_selects
        });
      });

      /**
       * Toggle delivery/pickup service hours.
       */
      $(document.body).on('change', '[name*="\\[store_general_services\\]"]', function (e) {
        const $checkbox = $(this),
          service = $checkbox.val(),
          checked = $checkbox.is(':checked'),
          $elements = $('.orderable-toggle-wrapper--' + service + ', button[data-orderable-wrapper="' + service + '"]'),
          visibility_class = 'orderable-ui-hide',
          $select_services_notice = $('.orderable-notice--select-service');

        // Toggle visibility of service hours.
        if (checked) {
          $elements.removeClass(visibility_class);
        } else {
          $elements.addClass(visibility_class);
        }
        const $selected_services = $('[name*="\\[store_general_services\\]"]:checked');

        // If no services selected, show message.
        if ($selected_services.length <= 0) {
          $select_services_notice.removeClass(visibility_class);
        } else {
          $select_services_notice.addClass(visibility_class);

          // Toggle first enabled service.
          const active_service = $selected_services.eq(0).val(),
            $active_service_button = $('button[data-orderable-wrapper="' + active_service + '"]');
          $active_service_button.click();
        }

        // If only pickup selected, toggle "same as delivery" checkbox.
        let $same_as_delivery_checkbox = $('#orderable_settings_store_general_service_hours_pickup_same'),
          default_state = $same_as_delivery_checkbox.data('default-state');
        if (typeof default_state === 'undefined') {
          default_state = $same_as_delivery_checkbox.is(':checked');
          $same_as_delivery_checkbox.data('default-state', default_state);
        }
        if (1 === $selected_services.length && 'pickup' === $selected_services.val()) {
          $same_as_delivery_checkbox.prop('checked', false).parent().addClass(visibility_class);
          $(document.body).trigger('orderable-toggle-element', {
            trigger_element: $same_as_delivery_checkbox[0],
            add_class: false
          });
        } else {
          $same_as_delivery_checkbox.prop('checked', default_state).parent().removeClass(visibility_class);
          $(document.body).trigger('orderable-toggle-element', {
            trigger_element: $same_as_delivery_checkbox[0],
            add_class: default_state
          });
        }
        $(document).trigger('orderable-add-last-row-class');
      });

      /**
       * Set default state of "Same as delivery service hours" checkbox.
       */
      $(document.body).on('change', '#orderable_settings_store_general_service_hours_pickup_same', function (e) {
        $(this).data('default-state', $(this).is(':checked'));
      });

      /**
       * Toggle open hours day.
       */
      $('.orderable-enable-day').on('change', function () {
        const $row = jQuery(this).closest('tr'),
          hidden_class = 'orderable-table__row--hidden';
        $row.toggleClass(hidden_class, !this.checked);
      });
    }
  };
  $(document).ready(orderable_timings.on_ready);
})(jQuery, document);
(function ($, document) {
  'use strict';

  var orderable_triggers = {
    /**
     * On doc ready.
     */
    on_ready() {
      /**
       * On trigger click or change.
       */
      $(document.body).on('click change', '[data-orderable-trigger]', function (e) {
        const $trigger_element = $(this),
          trigger = $trigger_element.data('orderable-trigger');
        if ('click' === e.type && ($trigger_element.is('select') || $trigger_element.is('input') || $trigger_element.is('label'))) {
          return;
        }
        if ($trigger_element.is('button') || $trigger_element.is('a')) {
          e.preventDefault();
        }
        $(document.body).trigger('orderable-' + trigger, {
          trigger_element: $trigger_element
        });
      });

      /**
       * On new row.
       */
      $(document.body).on('orderable-new-row', function (e, data) {
        const $button = $(data.trigger_element),
          $target = $($button.data('orderable-target')),
          $body = $target.find('.orderable-table__body'),
          $row = $body.find('.orderable-table__row--repeatable:last-child'),
          index = parseInt($row.data('orderable-index')),
          time_slot = parseInt($row.data('orderable-time-slot')),
          new_index = index + 1,
          row_html = $row[0]?.outerHTML.replace(/\[\d+\]/gm, '[' + new_index + ']').replace(/data-orderable-index="\d+"/gm, 'data-orderable-index="' + new_index + '"').replace(/data-orderable-time-slot="\d+"/gm, 'data-orderable-time-slot=""');
        $body.append(row_html);
        const $new_row = $body.find('.orderable-table__row--repeatable:last-child');

        // Remove delivery zone rows.
        $new_row.find('.orderable-table-delivery-zones-row__item').remove();
        $new_row.find('.orderable-table-delivery-zones-row__message').remove();
        $new_row.find('.orderable-table-delivery-zones-row__no-items').show();

        // Reset inputs.
        $new_row.find('input').not('input[type="checkbox"]').val('');
        $new_row.find('input[type="hidden"][name^="service_hours"]').val('');

        // Reset datepickers.
        const $datepickers = $new_row.find('.hasDatepicker');
        $datepickers.each(function (index, datepicker) {
          const $datepicker = $(datepicker);

          // Remove datepicker class and datepicker generated ID.
          $datepicker.removeClass('hasDatepicker').attr('id', '');
        });

        // Reset selects.
        const $selects = $new_row.find('select');
        $selects.each(function (index, select) {
          const $select = $(select),
            $blank_option = $select.find('option[value=""]'),
            is_multi_select = $select.hasClass('orderable-select--multi-select'),
            value = $blank_option.length || is_multi_select ? '' : $select.find('option:first-child').val();
          $select.val(value);
          if (is_multi_select) {
            $select.change();
          }
        });

        // Checkboxes.
        $new_row.find('input[type="checkbox"]').prop('checked', false);

        // Remove multi select container and reinit.
        $new_row.find('.multi-select-container').remove();
        $(document).trigger('orderable-init-multiselects', {
          selects: $body.find('.orderable-select--multi-select')
        });

        // Trigger select toggles.
        $body.find('[data-orderable-trigger="toggle-element-select"]').change();
        $(document).trigger('orderable-add-last-row-class');
      });

      /**
       * On remove row.
       */
      $(document.body).on('orderable-remove-row', function (e, data) {
        if (!window.confirm(window.orderable_vars.i18n.confirm_remove_service_hours)) {
          e.stopImmediatePropagation();
          return;
        }
        const $button = $(data.trigger_element),
          $row = $button.closest('tr'),
          $tbody = $button.closest('tbody'),
          row_count = $tbody.find('>tr').length;
        if (row_count === 1) {
          $row.find('input').val('');
          $row.find('input[type="checkbox"], input[type="radio"]').prop('checked', false);
          $row.find('select').each(function () {
            if ($(this).hasClass('orderable-select--multi-select')) {
              return;
            }
            this.selectedIndex = 0;
            $(this).trigger('change');
          });
          $row.find('.multi-select-container input[type="checkbox"]').trigger('change');
        } else {
          $row.remove();
        }
        $(document).trigger('orderable-add-last-row-class');
      });

      /**
       * On toggle element.
       */
      $(document.body).on('orderable-toggle-element', function (e, data) {
        data.add_class = typeof data.add_class !== 'undefined' ? data.add_class : null;
        const $trigger_element = $(data.trigger_element),
          $target = $($trigger_element.data('orderable-target')),
          toggle_class = $trigger_element.data('orderable-toggle-class');
        if (null === data.add_class) {
          $target.toggleClass(toggle_class);
        } else if (true === data.add_class) {
          $target.addClass(toggle_class);
        } else if (false === data.add_class) {
          $target.removeClass(toggle_class);
        }
        $(document).trigger('orderable-add-last-row-class');
      });

      /**
       * On toggle element select.
       */
      $(document.body).on('orderable-toggle-element-select', function (e, data) {
        const $trigger_element = $(data.trigger_element),
          $parent = $trigger_element.closest($trigger_element.data('orderable-parent')),
          targets = $trigger_element.data('orderable-target'),
          selected = $trigger_element.val();
        if ($parent.length <= 0 || typeof targets === 'undefined' || typeof targets[selected] === 'undefined') {
          return;
        }
        $.each(targets[selected], function (index, target) {
          const $target = $parent.find(target);
          if ('show' === index) {
            $target.show();
          } else if ('hide' === index) {
            $target.hide();
          }
        });
        $(document).trigger('orderable-add-last-row-class');
      });

      /**
       * On toggle wrapper.
       */
      $(document.body).on('orderable-toggle-wrapper', function (e, data) {
        const $trigger_element = $(data.trigger_element),
          wrapper = $trigger_element.data('orderable-wrapper'),
          group = $trigger_element.data('orderable-wrapper-group'),
          $target = $('.orderable-toggle-wrapper--' + wrapper + '[data-orderable-wrapper-group="' + group + '"]');
        $('.orderable-toggle-wrapper[data-orderable-wrapper-group="' + group + '"]').removeClass('orderable-toggle-wrapper--active');
        $target.addClass('orderable-toggle-wrapper--active');
        $('[data-orderable-wrapper-group="' + group + '"]').removeClass('orderable-trigger-element--active');
        $('[data-orderable-wrapper="' + wrapper + '"]').addClass('orderable-trigger-element--active');
        $(document).trigger('orderable-add-last-row-class');
      });

      /**
       * Add last row class trigger.
       */
      $(document).on('orderable-add-last-row-class', orderable_triggers.add_last_row_class);

      /**
       * On ready triggers.
       */
      $(document).trigger('orderable-add-last-row-class');
    },
    /**
     * Add last row class.
     */
    add_last_row_class() {
      const $tables = $('.orderable-table'),
        last_row_class = 'orderable-table__row--last',
        $last_rows = $tables.find('.' + last_row_class),
        $last_row = $tables.find('tbody > tr:visible:last');
      $last_rows.removeClass(last_row_class);
      $last_row.addClass(last_row_class);
    }
  };
  window.orderable_triggers_admin = orderable_triggers;
  $(document).ready(orderable_triggers.on_ready);
})(jQuery, document);