: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
function serializeJSON() {
return JSON.stringify(serialize());
this.addPairs = addPairs;
this.serialize = serialize;
this.serializeJSON = serializeJSON;
FormSerializer.patterns = patterns;
FormSerializer.serializeObject = function serializeObject() {
serialized = this.serializeArray();
serialized = this.find(':input').serializeArray();
return new FormSerializer($, this)
FormSerializer.serializeJSON = function serializeJSON() {
serialized = this.serializeArray();
serialized = this.find(':input').serializeArray();
return new FormSerializer($, this)
if (typeof $.fn !== "undefined") {
$.fn.pumSerializeObject = FormSerializer.serializeObject;
$.fn.pumSerializeJSON = FormSerializer.serializeJSON;
exports.FormSerializer = FormSerializer;
/*******************************************************************************
* Copyright (c) 2019, Code Atlantic LLC
******************************************************************************/
$('.pum-tabs-container').filter(':not(.pum-tabs-initialized)').each(function () {
var $this = $(this).addClass('pum-tabs-initialized'),
$tabList = $this.find('> ul.tabs'),
$firstTab = $tabList.find('> li:first'),
forceMinHeight = $this.data('min-height');
if ($this.hasClass('vertical-tabs')) {
var minHeight = forceMinHeight && forceMinHeight > 0 ? forceMinHeight : $tabList.eq(0).outerHeight(true);
minHeight: minHeight + 'px'
if ($this.parent().innerHeight < minHeight) {
minHeight: minHeight + 'px'
$firstTab.trigger('click');
window.PUM_Admin = window.PUM_Admin || {};
window.PUM_Admin.tabs = tabs;
.on('pum_init', PUM_Admin.tabs.init)
.on('click', '.pum-tabs-initialized li.tab', function (e) {
$container = $this.parents('.pum-tabs-container:first'),
$tabs = $container.find('> ul.tabs > li.tab'),
$tab_contents = $container.find('> div.tab-content'),
link = $this.find('a').attr('href');
$tabs.removeClass('active');
$tab_contents.removeClass('active');
$this.addClass('active');
$container.find('> div.tab-content' + link).addClass('active');
/*******************************************************************************
* Copyright (c) 2019, Code Atlantic LLC
******************************************************************************/
var I10n = pum_admin_vars.I10n,
render: function (template, data) {
var _template = wp.template(template);
if (data.classes !== undefined && Array.isArray(data.classes)) {
data.classes = data.classes.join(' ');
// Prepare the meta data for templates.
data = PUM_Admin.templates.prepareMeta(data);
renderInline: function (content, data) {
evaluate: /<#([\s\S]+?)#>/g,
interpolate: /\{\{\{([\s\S]+?)\}\}\}/g,
escape: /\{\{([^\}]+?)\}\}(?!\})/g,
template = _.template(content, null, options);
shortcode: function (args) {
var data = $.extend(true, {}, {
template = data.has_content ? 'pum-shortcode-w-content' : 'pum-shortcode';
return PUM_Admin.templates.render(template, data);
var data = $.extend(true, {}, {
cancel_button: I10n.cancel,
return PUM_Admin.templates.render('pum-modal', data);
data = $.extend(true, {}, {
if (typeof data.classes === 'string') {
data.classes = [data.classes];
data.classes.push('pum-tabbed-form');
data.meta['data-tab-count'] = Object.keys(data.tabs).length;
data.classes.push(data.vertical ? 'vertical-tabs' : 'horizontal-tabs');
data.classes = data.classes.join(' ');
return PUM_Admin.templates.render('pum-tabs', data);
section: function (args) {
var data = $.extend(true, {}, {
return PUM_Admin.templates.render('pum-field-section', data);
fieldArgs: function (args) {
data = $.extend(true, {}, PUM_Admin.models.field(args));
if (args.std !== undefined && args.type !== 'checkbox' && (data.value === null || data.value === false)) {
if ('string' === typeof data.classes) {
data.classes = data.classes.split(' ');
if (args.class !== undefined) {
data.classes.push(args.class);
if (args.dependencies !== undefined && typeof args.dependencies === 'object') {
data.dependencies = JSON.stringify(args.dependencies);
data.meta.required = true;
data.classes.push('pum-required');
if (typeof data.dynamic_desc === 'string' && data.dynamic_desc.length) {
data.classes.push('pum-field-dynamic-desc');
data.desc = PUM_Admin.templates.renderInline(data.dynamic_desc, data);
data.classes.push('pum-field-' + data.type + '--html');
if ( typeof data.value === 'string' && data.value !== '' && PUM_Admin.utils.htmlencoder.hasEncoded(data.value)) {
data.value = PUM_Admin.utils.htmlencoder.htmlDecode(data.value);
if (data.options !== undefined) {
_.each(data.options, function (label, value) {
// Check if the label is an object. If so this is a optgroup and the label is sub options array.
// NOTE: The value in the case its an optgroup is the optgroup label.
if (typeof label !== 'object') {
if (data.value !== null) {
if (data.multiple && ((typeof data.value === 'string' && data.value == value) || (Array.isArray(data.value) && data.value.indexOf(value) !== -1) || (!Array.isArray(data.value) && typeof data.value === 'object' && Object.keys(data.value).length && data.value[value] !== undefined))) {
} else if (!data.multiple && data.value == value) {
PUM_Admin.templates.prepareMeta({
// Swap label & value due to group labels being used as keys.
_.each(label, function (label, value) {
if (data.value !== null) {
if (data.multiple && ((typeof data.value === 'string' && data.value == value) || (Array.isArray(data.value) && data.value.indexOf(value) !== -1) || (!Array.isArray(data.value) && typeof data.value === 'object' && Object.keys(data.value).length && data.value[value] !== undefined))) {
} else if (!data.multiple && data.value == value) {
PUM_Admin.templates.prepareMeta({
options: optgroup_options
data.meta.multiple = true;
if (!data.value || !data.value.length) {
if (typeof data.value === 'string') {
data.value = [data.value];
if (args.type !== 'select') {
data.classes.push('pum-field-objectselect');
data.classes.push(args.type === 'postselect' ? 'pum-field-postselect' : 'pum-field-taxonomyselect');
data.meta['data-objecttype'] = args.type === 'postselect' ? 'post_type' : 'taxonomy';
data.meta['data-objectkey'] = args.type === 'postselect' ? args.post_type : args.taxonomy;
data.meta['data-current'] = typeof data.value === 'object' || Array.isArray(data.value) ? JSON.stringify(data.value) : data.value;
data.classes.push('pum-field-select2');
data.meta['data-placeholder'] = data.placeholder;
if (data.options !== undefined) {
_.each(data.options, function (label, value) {
PUM_Admin.templates.prepareMeta({
checked: data.value === value
if (data.options !== undefined) {
if (data.value === false || data.value === null) {
if (typeof data.value === 'string' && data.value.indexOf(',')) {
data.value = data.value.split(',');
_.each(data.options, function (label, value) {
PUM_Admin.templates.prepareMeta({
checked: (Array.isArray(data.value) && data.value.indexOf(value) !== -1) || (!Array.isArray(data.value) && typeof data.value === 'object' && Object.keys(data.value).length && data.value[value] !== undefined)
switch (typeof data.value) {
if (Array.isArray(data.value) && data.value.length === 1 && data.value[0].toString() === '1') {
data.meta.checked = true;
data.meta.checked = true;
if (data.value === 'true' || data.value === 'yes' || data.value === '1') {
data.meta.checked = true;
if (parseInt(data.value, 10) === 1 || parseInt(data.value, 10) > 0) {
data.meta.checked = true;
// data.meta.readonly = true;
data.meta.step = data.step;
data.meta.min = data.min;
data.meta.max = data.max;
data.meta['data-force-minmax'] = data.force_minmax.toString();
data.meta.cols = data.cols;
data.meta.rows = data.rows;
if (typeof data.value === 'string' && data.value !== '') {
data.number = parseInt(data.value);
data.unitValue = data.value.replace(data.number, "");
data.value = data.number;
if (data.units !== undefined) {
_.each(data.units, function (label, value) {
if (data.unitValue == value) {
PUM_Admin.templates.prepareMeta({
if ( typeof data.value === 'string' && data.value !== '') {
data.meta['data-default-color'] = data.value;
data.classes.push('pum-license-' + data.value.status + '-notice');
if (data.value.classes) {
data.classes.push(data.value.classes);
data = PUM_Admin.templates.fieldArgs(args);
fieldTemplate = 'pum-field-' + data.type;
if (data.type === 'objectselfect' || data.type === 'postselect' || data.type === 'taxonomyselect') {
fieldTemplate = 'pum-field-select';
if (!$('#tmpl-' + fieldTemplate).length) {
console.warn('No field template found for type:' + data.type + ' fieldID: ' + data.id);