File "main.js"

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

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

  var orderable_layouts = {
    /**
     * On doc ready.
     */
    on_ready() {
      orderable_layouts.builder.init();
    },
    /**
     * Helper functions.
     */
    helpers: {
      /**
       * Get field type.
       * @param $field
       */
      get_field_type($field) {
        const tag = $field.get(0).tagName;
        if ('SELECT' === tag) {
          return 'select';
        }
        return $field.attr('type');
      },
      /**
       * Strip "orderable_" prefix.
       *
       * @param  string
       * @return {*}
       */
      strip_prefix(string) {
        return string.replace('orderable_', '');
      }
    },
    /**
     * Builder.
     */
    builder: {
      /**
       * Init builder.
       */
      init() {
        orderable_layouts.builder.watch();
      },
      /**
       * Watch builder fields.
       */
      watch() {
        $(document.body).on('change', '#orderable-layout-settings-metabox input, #orderable-layout-settings-metabox select', function () {
          let $parent = $(this).closest('#orderable-layout-settings-metabox'),
            data = {},
            reload_preview = true;
          $parent.find('.form-field > input, .form-field > select:enabled').each(function (index, field) {
            let $field = $(field),
              type = orderable_layouts.helpers.get_field_type($field),
              value = '';
            if ('checkbox' === type) {
              value = $(this).is(':checked');
            } else if ('select' === type && 'multiple' === $field.attr('multiple')) {
              value = $field.val();
            } else {
              value = $field.val();
            }

            // Has a "pro_" prefix.
            if (typeof value === 'string' && 0 === value.indexOf('pro_')) {
              reload_preview = false;
              $(document.body).trigger('orderable-pro-modal');
            }
            data[orderable_layouts.helpers.strip_prefix(this.name.replace('[]', ''))] = value;
          });
          if (reload_preview) {
            orderable_layouts.builder.reload_preview(data);
          }
        });
      },
      /**
       * Reload preview.
       *
       * @param preview_data
       */
      reload_preview(preview_data) {
        const data = {
          action: 'orderable_preview',
          data: preview_data
        };
        $.post(ajaxurl, data, function (response) {
          if (!response.success) {
            return;
          }
          $('#orderable-layout-preview-metabox .orderable-main-wrap').html(response.data.shortcode);
        });
      }
    }
  };
  $(document).ready(orderable_layouts.on_ready);
})(jQuery, document);