shell bypass 403
;(function ($) {
var RSPlaceholder = function ($el, options) {
this._defaults = {};
this.element = $el;
this._options = $.extend(true, {}, this._defaults, options);
this.options = function (options) {
return (options) ?
$.extend(true, this._options, options) :
this._options;
};
this.addDropdown = function (element) {
var $plugin = this;
var $html = '',
$filter_src,
$action,
$skip,
$array,
$el = $(element);
$action = $el.attr('data-filter-type') ? $el.attr('data-filter-type') : '';
$filter_src = $el.attr('data-filter') ? $el.attr('data-filter').split(',') : [];
$skip = $el.attr('data-skip') ? $el.attr('data-skip').split(',') : [];
var $filter = {
action: $action,
filter: $filter_src,
skip : $skip
};
$array = $plugin.filterPlaceholders($filter, RSFormPro.Placeholders);
$.each($array, function () {
$html += '<li><a href="javascript:void(0)" class="rsfp-dropdown-placeholder" data-value="' + this + '">' + this + '</a></li>'
});
var classes = ['placeholders-input-append', 'btn', 'btn-primary'];
if (!$el.hasClass('form-control'))
{
classes.push('btn-sm');
}
$el.after('<div class="rsfp-dropdown-list-container"><button class="' + classes.join(' ') + '" id="' + $el.attr('id') + '-list" type="button">▼</button><ul class="rsfp-dropdown-list" data-target="' + $el.attr('id') + '-list">' + $html + '</ul></div>');
var escapedId = CSS.escape($el.attr('id'));
this.initDropdowns($('#' + escapedId + '-list'));
};
this.initDropdowns = function (element) {
var $id = $(element).attr('id'),
$dropdown = $('[data-target="' + $id + '"]');
$(element).on('click', function (e) {
e.preventDefault();
$('.rsfp-dropdown-list').hide();
$dropdown.toggle();
});
$dropdown.find('li > a').on('click', function () {
var $inputField = $(this).parents('.rsfp-dropdown-list-container').siblings('input');
var $val = $inputField.val();
$val += $inputField.val() ? $inputField.attr('data-delimiter') + $(this).attr('data-value') : $(this).attr('data-value');
$inputField.val($val)
});
};
this.filterPlaceholders = function (filter, placeholders) {
$.each(filter.skip, function (e, value) {
var $filter = value;
placeholders = $.grep(placeholders, function (value, index) {
return !String(value).match($filter);
});
});
switch (filter.action) {
case 'include':
var $newArray = [];
$.each(filter.filter, function () {
var $filter = this;
$.each(placeholders, function (e, value) {
if (String(value).match($filter)) {
$newArray.push(this);
}
});
});
placeholders = $newArray;
break;
case 'exclude':
$.each(filter.filter, function (e, value) {
var $filter = value;
placeholders = $.grep(placeholders, function (value, index) {
return !String(value).match($filter);
});
});
break;
}
return placeholders;
};
};
$.fn.rsplaceholder = function (methodOrOptions) {
var method = (typeof methodOrOptions === 'string') ? methodOrOptions : undefined;
if (method) {
var rsplaceholders = [];
function getRSPlaceholders() {
var $el = $(this);
var rsplaceholder = $el.data('rsplaceholder');
rsplaceholders.push(rsplaceholder);
}
this.each(getRSPlaceholders);
var args = (arguments.length > 1) ? Array.prototype.slice.call(arguments, 1) : undefined;
var results = [];
function applyMethod(index) {
var rsplaceholder = rsplaceholders[index];
if (!rsplaceholder) {
console.warn('$.rsplaceholder not instantiated yet');
console.info(this);
results.push(undefined);
return;
}
if (typeof rsplaceholder[method] === 'function') {
var result = rsplaceholder[method].apply(rsplaceholder, args);
results.push(result);
} else {
console.warn('Method \'' + method + '\' not defined in $.rsplaceholder');
}
}
this.each(applyMethod);
return (results.length > 1) ? results : results[0];
} else {
var options = (typeof methodOrOptions === 'object') ? methodOrOptions : undefined;
function init() {
var $el = $(this);
var rsplaceholder = new RSPlaceholder($el, options);
$el.data('rsplaceholder', rsplaceholder);
rsplaceholder.addDropdown($el);
}
$('html').click(function (e) {
if (!e.target.classList.contains('placeholders-input-append')) {
$('.rsfp-dropdown-list').hide();
}
});
return this.each(init);
}
};
})(jQuery);