File: /home/dtptviut/public_html/wp-content/plugins/comparisonfeed-wp/js/compare-admin.js
var filterAvailable = false;
var usingCustomOrder = false;
var usingIframe = false;
var feedOperators = [
{
operator: "lessThan",
name: "less than or equal to"
}, {
operator: "greaterThan",
name: "greater than or equal to"
}, {
operator: "equals",
name: "equal to"
}, {
operator: "notEquals",
name: "not equal to"
}, {
operator: "contains",
name: "contains"
}, {
operator: "notContains",
name: "not contains"
}
];
var feedFields = [];
var feedFieldsCache = {};
jQuery(document).ready(function() {
if (jQuery('#use-iframe').val() == 1) {
usingIframe = true;
jQuery('#use-iframe').prop('checked', true);
jQuery('#as-iframe-options').show();
} else {
jQuery('#use-iframe').prop('checked', false);
}
if (jQuery('#show-filter').val() == 1) {
jQuery('#show-filter').prop('checked', true);
} else {
jQuery('#show-filter').prop('checked', false);
}
if (jQuery('#include-new-campaigns').val() === 'true') {
jQuery('#include-new-campaigns').prop('checked', true);
} else {
jQuery('#include-new-campaigns').prop('checked', false);
}
if (jQuery('#lazy-loading').val() === 'true') {
jQuery('#lazy-loading').prop('checked', true);
} else {
jQuery('#lazy-loading').prop('checked', false);
}
initTpl();
jQuery('#adservice-comparison-feed select#compare-account, #adservice-comparison-feed select#compare-template').change(function() {
// Reset conditions when changing account/template.
jQuery('#conditions').html('');
jQuery('#adminTableHolder').attr('data-conditions', '');
initTpl();
});
jQuery('.as-tab, .as-tab-link').click(function(){
var anchor = jQuery(this).data('anchor');
jQuery('.as-tab').removeClass('active');
jQuery(anchor + '-tab').addClass('active');
jQuery('.as-anchor').removeClass('active');
jQuery(anchor).addClass('active');
if (anchor === '#as-feed-builder') {
// Hide the regular shortcode.
jQuery('#adservice-comparison-feed .code-generated').hide();
jQuery('#adservice-comparison-feed .legal-notice').hide();
} else {
// Show regular shortcode again if available.
var account = jQuery('select#compare-account option:selected').data('country');
var template = jQuery('select#compare-template option:selected').val();
if ((account !== '' || account > 0) && template !== '0') {
jQuery('#adservice-comparison-feed .code-generated').slideDown();
jQuery('#adservice-comparison-feed .legal-notice').slideDown();
}
}
});
});
function initTpl() {
var publisher = jQuery('select#compare-account option:selected').val();
var account = jQuery('select#compare-account option:selected').data('country');
var accountName = jQuery('select#compare-account option:selected').data('accountname');
var template = jQuery('select#compare-template option:selected').val();
var country = jQuery('select#compare-account option:selected').data('country');
var countryName = jQuery('select#compare-account option:selected').data('countryname');
var creditcard = jQuery('select#compare-template option#creditcard');
var quickloan = jQuery('select#compare-template option#quickloan');
var socialsecurity = jQuery('select#compare-template option#socialSecurity');
var loan = jQuery('select#compare-template option#loan');
var allLoans = jQuery('select#compare-template option#allLoans');
var dating = jQuery('select#compare-template option#dating');
var hosting = jQuery('select#compare-template option#hosting');
var broadband = jQuery('select#compare-template option#broadband');
var casino = jQuery('select#compare-template option#casino');
var magazine = jQuery('select#compare-template option#magazine');
var mobilesubscription = jQuery('select#compare-template option#mobileSubscription');
filterAvailable = false;
if (template === '180,147' || template === '180' || template === '147' || template === '167' || template === '153') {
// Show filter shortcode for feeds that have one. Don't show for iframe.
filterAvailable = true;
if (!usingIframe) {
jQuery('#adservice-comparison-feed .categoryFilter').hide();
}
} else {
jQuery('#adservice-comparison-feed .categoryFilter').slideUp();
}
var feedID = jQuery('#adservice-comparison-feed #feed-id').val();
if (account !== '' && template !== '0') {
if (feedID !== undefined && feedID.length > 0) {
jQuery('#export-feed-completed-section').find('span:eq(0)').text(feedID);
jQuery('#export-feed-completed-section').find('span:eq(1)').text(accountName);
jQuery('#export-feed-completed-section').find('span:eq(2)').text(countryName);
jQuery('#export-feed-completed-section').find('code')
.text('[adservice-comparison-feed feed=' + feedID + ']');
jQuery('#adservice-comparison-feed #export-feed-completed-section').slideDown();
jQuery('#adservice-comparison-feed .code-generated').slideUp();
jQuery('#adservice-comparison-feed .legal-notice').slideUp();
} else {
jQuery('#adservice-comparison-feed #export-feed-section').slideDown();
jQuery('#adservice-comparison-feed .code-generated').slideDown();
jQuery('#adservice-comparison-feed .legal-notice').slideDown();
}
jQuery('#adservice-comparison-feed .change-order').prop('disabled', false);
jQuery('#adservice-comparison-feed .change-order').removeClass('disabled');
renderTpl(publisher, template);
initConditions(publisher, template);
} else if (account > 0 && template !== '0') {
if (feedID !== undefined && feedID.length > 0) {
jQuery('#export-feed-completed-section').find('span:eq(0)').text(feedID);
jQuery('#export-feed-completed-section').find('span:eq(1)').text(accountName);
jQuery('#export-feed-completed-section').find('span:eq(2)').text(countryName);
jQuery('#export-feed-completed-section').find('code')
.text('[adservice-comparison-feed feed=' + feedID + ']');
jQuery('#adservice-comparison-feed #export-feed-completed-section').slideDown();
jQuery('#adservice-comparison-feed .code-generated').slideUp();
jQuery('#adservice-comparison-feed .legal-notice').slideUp();
} else {
jQuery('#adservice-comparison-feed #export-feed-section').slideDown();
jQuery('#adservice-comparison-feed .code-generated').show();
jQuery('#adservice-comparison-feed .legal-notice').show();
}
jQuery('#adservice-comparison-feed .change-order').prop('disabled', false);
jQuery('#adservice-comparison-feed .change-order').removeClass('disabled');
renderTpl(publisher, template);
initConditions(publisher, template);
} else {
jQuery('#adservice-comparison-feed .code-generated').slideUp();
jQuery('#adservice-comparison-feed .legal-notice').slideUp();
jQuery('#adservice-comparison-feed #try-feed-builder-section').slideDown();
jQuery('#adservice-comparison-feed .change-order').prop('disabled', true);
jQuery('#adservice-comparison-feed .change-order').addClass('disabled');
}
// Show/hide data categories for the corresponding countries.
if (country === 'dk') {
creditcard.show();
loan.show();
allLoans.show();
quickloan.show();
socialsecurity.show();
hosting.show();
dating.show();
broadband.show();
casino.show();
magazine.show();
mobilesubscription.show();
} else if (country === 'fi') {
creditcard.show();
quickloan.show();
loan.show();
allLoans.show();
socialsecurity.hide();
hosting.hide();
dating.hide();
broadband.hide();
casino.hide();
magazine.show();
mobilesubscription.show();
} else if (country === 'no') {
quickloan.hide();
creditcard.show();
loan.show();
allLoans.hide();
socialsecurity.hide();
hosting.hide();
dating.hide();
broadband.hide();
casino.hide();
magazine.hide();
mobilesubscription.show();
} else if (country === 'se') {
quickloan.show();
creditcard.show();
loan.show();
allLoans.show();
socialsecurity.hide();
hosting.hide();
dating.hide();
broadband.hide();
casino.hide();
magazine.hide();
mobilesubscription.show();
} else if (country === 'pl') {
quickloan.show();
creditcard.hide();
loan.hide();
allLoans.hide();
socialsecurity.hide();
hosting.hide();
dating.hide();
broadband.hide();
casino.hide();
magazine.hide();
mobilesubscription.hide();
} else if (country === 'es') {
quickloan.show();
creditcard.hide();
loan.hide();
allLoans.hide();
socialsecurity.hide();
hosting.hide();
dating.hide();
broadband.hide();
casino.hide();
magazine.hide();
mobilesubscription.hide();
} else if (country === 'mx') {
quickloan.show();
creditcard.hide();
loan.hide();
allLoans.hide();
socialsecurity.hide();
hosting.hide();
dating.hide();
broadband.hide();
casino.hide();
magazine.hide();
mobilesubscription.hide();
} else if (country === 'de') {
quickloan.hide();
creditcard.hide();
loan.show();
allLoans.hide();
socialsecurity.hide();
hosting.hide();
dating.hide();
broadband.hide();
casino.hide();
magazine.hide();
mobilesubscription.hide();
} else {
quickloan.hide();
creditcard.hide();
loan.hide();
allLoans.hide();
socialsecurity.hide();
hosting.hide();
dating.hide();
broadband.hide();
casino.hide();
magazine.hide();
mobilesubscription.hide();
}
}
function renderTpl(pid, cid) {
jQuery('#adminTableHolder').attr('data-publisherId', pid);
jQuery('#adminTableHolder').attr('data-categoryId', cid);
// Reload a new template if pid and cid are valid.
if (Number(pid) > 0 && (Number(cid) > 0 || cid.toString().trim().length > 0)) {
var disabledItems = getDisabledItems();
var customOrder = getCustomOrder();
// Check if a custom order is already defined.
if (Object.keys(customOrder).length > 0) {
usingCustomOrder = true;
jQuery('#using-custom-order').removeClass('hidden');
}
jQuery('#adminTableHolder').adserviceFeed({reload:true});
jQuery('#adminTableHolder').off().on("renderedTemplate", function() {
// Mark removed items as disabled.
markAsDisabled(disabledItems, customOrder);
// Sortable
jQuery( "#sortable" ).disableSelection();
var total = jQuery('#sortable li').length;
makeSortable(total);
createRating(total);
// Add reset button click handler.
resetData('.bottom-bar .button.reset');
// Add 'Save & Update' button click handler.
jQuery('.bottom-bar .button.update').click(function(e) {
e.preventDefault();
if (jQuery('#publish').length > 0) {
jQuery('#publish').click();
} else {
jQuery('.components-button.editor-post-publish-button').click();
}
});
// Initialize star rating.
jQuery('input[type="rating"]').rating({
showClear: false,
showCaption: false
});
// Add remove/add click handler.
removeOrAddCampaign();
// Mark low EPC campaigns.
markAsLowEPC();
}); // end of renderedTemplate
}
}
/*
Initializes feed conditions by fetching the fields for the specific
publisher / category combination and saves results to a cache.
* pid - Publisher ID
* cid - Category ID
*/
function initConditions(pid, cid) {
// Only make requests for fields if we don't have them cached.
if (feedFieldsCache[pid] && feedFieldsCache[pid][cid] &&
feedFieldsCache[pid][cid].length > 0) {
renderConditions(feedFieldsCache[pid][cid]);
} else {
jQuery.getJSON("https://feedcontentcloud.com/cgi-bin/publisher/API/ComparisonFeed/Data.pl/fields?pid=" + pid + "&cid=" + cid, function(response) {
if (response.status === 'OK') {
if (feedFieldsCache[pid] === undefined) {
feedFieldsCache[pid] = {};
}
feedFieldsCache[pid][cid] = response.fields; // Cache response.
renderConditions(response.fields);
} else {
// Failed to load data fields.
jQuery('#as-conditions-error').removeClass('hidden');
jQuery('#as-create-condition').attr('onclick', '');
}
}).fail(function() {
// Failed to execute request.
jQuery('#as-conditions-error').removeClass('hidden');
jQuery('#as-create-condition').attr('onclick', '');
});
}
}
/*
Renders the conditions table with the specified fields as selectable options.
Previously saved conditions are also loaded.
*/
function renderConditions(fields) {
feedFields = fields; // Update global fields reference.
var conditions = getConditions();
// Add field types and potential values to conditions
// which are needed for showing only relevant operatos.
for (var i = 0; i < conditions.length; i++) {
for (var j = 0; j < fields.length; j++) {
if (fields[j].name === conditions[i].name) {
conditions[i]['fieldType'] = fields[j].fieldType;
var values = fields[j].potentialValues;
try {
values = JSON.parse(values);
} catch (e) {
// Potential values is probably empty.
}
conditions[i]['potentialValues'] = values;
}
}
}
var data = [{
conditions: conditions,
fields: fields,
operators: feedOperators
}];
var output = jQuery('#conditions-table-template').render(data);
jQuery('#as-conditions-table').html(output);
if (conditions.length > 0) {
// Show that conditions are applied in campaign list.
jQuery('#conditions-applied').removeClass('hidden');
} else {
// Conditions are empty. Hide label from campaign list.
jQuery('#conditions-applied').addClass('hidden');
}
}
/*
Creates a new feed condition row and adds it to the table.
*/
function createCondition() {
var data = {
fields: feedFields,
operators: feedOperators
};
var condition = jQuery('#condition-template').render(data);
jQuery('#as-conditions-table').append(condition);
}
/*
Deletes the feed condition row containing the element.
*/
function deleteCondition(element) {
// Remove the condition table row.
jQuery(element).closest('tr').remove();
}
/*
Handles updating the operator and value inputs/selects
whenever the selected field changes to only show relevant
options and values.
* element - The select element for the field
*/
function changeConditionField(element) {
// Find the selected option and get its field type.
var option = jQuery(element).find(":selected");
var type = option.attr('data-type');
// Parse potential values.
var values = [];
try {
values = JSON.parse(option.attr('data-values'));
} catch (e) {
// Potential values is probably empty.
}
// Find and empty operator and value containers.
var operatorContainer = jQuery(element).closest('tr').find(".as-condition-operator");
operatorContainer.html('');
var valueContainer = jQuery(element).closest('tr').find(".as-condition-value");
valueContainer.html('');
// Initialize operator select since we will always need one.
var selectOperator = jQuery('<select>').attr('name', 'condition-operator')
.appendTo(operatorContainer);
if (type === 'ENUM') {
// Update operator container. Only needs equals and notEquals for ENUM.
selectOperator.append(jQuery('<option>').attr('value', 'equals').text('equal to'));
selectOperator.append(jQuery('<option>').attr('value', 'notEquals').text('not equal to'));
// Update value container.
var selectValue = jQuery('<select>').attr('name', 'condition-value')
.appendTo(valueContainer);
values.forEach(function(element) {
selectValue.append(jQuery('<option>').attr('value', element).text(element));
});
} else if (type === 'NUMBER') {
// Update operator container. Doesn't need 'contains' and 'notContains' for NUMBER.
feedOperators.forEach(function(element) {
if (element.operator !== 'contains' && element.operator !== 'notContains') {
selectOperator.append(jQuery('<option>').attr('value', element.operator)
.text(element.name));
}
});
// Update value container.
jQuery('<input>').attr('name', 'condition-value').attr('type', 'text')
.attr('title', 'Please enter numbers like this: 1000, 75.50, 4.2').appendTo(valueContainer);
} else if (type === 'BOOLEAN') {
// Update operator container. Only needs equals and notEquals for BOOLEAN.
selectOperator.append(jQuery('<option>').attr('value', 'equals').text('equal to'));
selectOperator.append(jQuery('<option>').attr('value', 'notEquals').text('not equal to'));
// Update value container.
var select = jQuery('<select>').attr('name', 'condition-value')
.appendTo(valueContainer);
select.append(jQuery('<option>').attr('value', 0).text('No'));
select.append(jQuery('<option>').attr('value', 1).text('Yes'));
} else { // type = TEXT
// Update operator container. Show all operators.
feedOperators.forEach(function(element) {
selectOperator.append(jQuery('<option>').attr('value', element.operator)
.text(element.name));
});
// Update value container.
jQuery('<input>').attr('name', 'condition-value').attr('type', 'text')
.appendTo(valueContainer);
}
}
/*
Resets the feed conditions to the latest saved configuration.
*/
function resetConditions() {
// Re-render conditions.
var publisher = jQuery('select#compare-account option:selected').val();
var template = jQuery('select#compare-template option:selected').val();
initConditions(publisher, template);
}
/*
Saves the configured conditions and updates the feed table to reflect the changes.
*/
function saveConditions(parent) {
var conditions = [];
var invalidNumber = false;
// Generate conditions array based on input fields.
jQuery('#as-conditions-table .as-condition-row').each(function() {
var row = jQuery(this);
var type = row.find("[name='condition-field'] option:selected").attr('data-type');
var input = row.find("[name='condition-value']");
// Get value and remove single quotes as they cause problems.
var value = input.val().toString().replace("'", "").replace("\"", "");
// Check if numbers are invalid.
if (type === 'NUMBER') {
var newValue = Number(value); // Convert to number.
if (isNaN(newValue)) {
invalidNumber = true;
input.css('border', '1px solid red');
} else {
value = newValue;
input.css('border', '');
}
}
input.val(value); // Update input value in case we changed it.
var condition = {
name: row.find("[name='condition-field']").val(),
operator: row.find("[name='condition-operator']").val(),
value: value
};
conditions.push(condition);
});
if (invalidNumber) {
alert('An invalid number was entered. Please enter numbers like this: 1000, 75.50, 4.2');
return;
}
// Save to hidden textarea.
jQuery('#conditions').html(JSON.stringify(conditions));
// Add conditions to feed table holder and reload.
jQuery('#adminTableHolder').attr('data-conditions', JSON.stringify(conditions));
jQuery('#adminTableHolder').adserviceFeed({reload:true});
if (conditions.length > 0) {
// Show that conditions are applied in campaign list.
jQuery('#conditions-applied').removeClass('hidden');
} else {
// Conditions are empty. Hide label from campaign list.
jQuery('#conditions-applied').addClass('hidden');
}
parent.tb_remove(); // Close conditions modal.
}
function getDisabledItems() {
var disabledItems = [];
try {
disabledItems = JSON.parse(jQuery('#removed-items').html());
} catch (e) {
// Try parsing using old format.
try {
disabledItems = JSON.parse('[' + jQuery('#removed-items').html() + ']');
} catch (e) {
// Default to empty array.
}
}
return disabledItems;
}
function getCustomOrder() {
var customOrder = {};
try {
customOrder = JSON.parse(jsonFix(jQuery('#custom-order').html()));
} catch (e) {
// Try parsing using old format.
try {
customOrder = JSON.parse(jsonFix('{' + jQuery('#custom-order').html() + '}'));
} catch (e) {
// Default to empty object.
}
}
return customOrder;
}
function getCustomRating() {
var customRating = {};
try {
customRating = JSON.parse(jsonFix(jQuery('#custom-rating').html()));
} catch (e) {
// Try parsing using old format.
try {
customRating = JSON.parse(jsonFix('{' + jQuery('#custom-rating').html() + '}'));
} catch (e) {
// Default to empty object.
}
}
return customRating;
}
function getConditions() {
var conditions = [];
try {
conditions = JSON.parse(jQuery('#conditions').html());
} catch (e) {
// Conditions is most likely empty.
}
return conditions;
}
function showLoadingIcon() {
jQuery('#TB_ajaxContent #loading').removeClass('hide').addClass('show');
}
function hideLoadingIcon() {
jQuery('#TB_ajaxContent #loading').removeClass('show').addClass('hide');
}
function resetData(clickElm){
jQuery(clickElm).click(function(e) {
e.preventDefault();
usingCustomOrder = false;
jQuery('#custom-rating').html('');
jQuery('#custom-order').html('');
jQuery('#removed-items').html('');
jQuery('#include-new-campaigns').val('true');
jQuery('#include-new-campaigns').prop('checked', true);
jQuery('#new-campaign-available').addClass('hidden');
jQuery('#using-custom-order').addClass('hidden');
jQuery('#adminTableHolder').attr('data-customRating', '');
jQuery('#adminTableHolder').attr('data-customOrder', '');
jQuery('#adminTableHolder').adserviceFeed({reload:true});
jQuery('#adminTableHolder').off().on("renderedTemplate", function() {
// Sortable
jQuery( "#sortable" ).disableSelection();
var total = jQuery('#sortable li').length;
makeSortable(total);
// Rating
createRating(total);
jQuery('input[type="rating"]').rating({
showClear: false,
showCaption: false
});
removeOrAddCampaign();
markAsLowEPC();
});
});
}
function createRating(total) {
jQuery('input[type="rating"]').on('rating.change', function(event, value, caption) {
var new_value = value;
var new_value_in_percentage = value/5*100;
jQuery(this).attr('value', new_value);
jQuery(this).parent().parent().parent().find('input.amount').attr('value', new_value_in_percentage);
var customRating = '';
jQuery( "#sortable li" ).each(function(index) {
var campId = jQuery(this).data('id');
var rating = jQuery(this).find('.three-up input.amount').val();
customRating += campId + ':' + rating + ', ';
});
// Trim away final ','.
customRating = customRating.substr(0, customRating.length - 2);
jQuery('#custom-rating').html('{' + customRating + '}');
// Using a custom rating means we should also use a custom order
// Run updateOrder() once to save it.
if (!usingCustomOrder) {
updateOrder();
}
});
}
function makeSortable() {
jQuery( "#sortable" ).sortable({
items : '> li',
handle: '.move',
opacity: '.7',
placeholder: "ui-state-highlight",
update: function(event, ui) {
updateOrder();
} // end of update
});
}
function updateOrder() {
var total = jQuery('#sortable li').length;
var customOrder = '';
var removedItems = [];
jQuery( "#sortable li" ).each(function(index) {
var campId = jQuery(this).data('id');
var reverseIndex = total - index;
customOrder += campId + ':' + reverseIndex + ', ';
// If item is disabled then add to removed items.
if (jQuery(this).hasClass('disabled')) removedItems.push(campId);
// Don't show 'new' tags after updating the order.
jQuery(this).find('.new-tag').addClass('hidden');
});
// Trim away final ','.
customOrder = customOrder.substr(0, customOrder.length - 2);
jQuery('#custom-order').html('{' + customOrder + '}');
// Update removed items.
jQuery('#removed-items').html(JSON.stringify(removedItems));
// Flag as using custom order.
usingCustomOrder = true;
jQuery('#using-custom-order').removeClass('hidden');
// Updating the order means you recognized the potential
// new campaigns, so don't show the bottom tag anymore.
jQuery('#new-campaign-available').addClass('hidden');
}
function removeOrAddCampaign() {
jQuery('.ui-state-default .removeOrAddCampaign').click(function() {
var removedItems = [];
// Toggle classes to reflect change in UI.
jQuery(this).parent().find('.three-up').toggleClass('removed');
jQuery(this).find('i').toggleClass('fa-check');
jQuery(this).find('i').toggleClass('fa-trash-o');
jQuery(this).parent().toggleClass('disabled');
// Loop through campaigns and find the disabled ones.
jQuery( "#sortable li" ).each(function(index) {
var campId = jQuery(this).data('id');
if (jQuery(this).hasClass('disabled')) removedItems.push(campId);
});
jQuery('#removed-items').html(JSON.stringify(removedItems));
});
};
function markAsDisabled(_disItems, customOrder) {
var items = _disItems;
var existingCampaigns = Object.keys(customOrder);
var includeNewCampaigns = (jQuery('#include-new-campaigns').val() !== 'false');
var newCampaignAvailable = false;
jQuery( "#sortable li" ).each(function(index) {
// Parse id as int since array only contains integers.
var item = parseInt(jQuery(this).attr('data-id'));
if (jQuery.inArray(item,items) !== -1) {
jQuery(this).addClass('disabled');
jQuery(this).find('.three-up').addClass('removed');
jQuery(this).find('.removeOrAddCampaign i').addClass( 'fa-check' );
jQuery(this).find('.removeOrAddCampaign i').removeClass( 'fa-trash-o' );
} else if (existingCampaigns.length > 0 &&
existingCampaigns.indexOf(item.toString()) === -1) {
// We have defined a custom order and this item is not in it.
// Show the item as new to make it easy to identify.
jQuery(this).find('.new-tag').removeClass('hidden');
newCampaignAvailable = true;
if (!includeNewCampaigns) {
// We have disabled inclusion of new campaigns so the item
// should be marked as disabled.
jQuery(this).addClass('disabled');
jQuery(this).find('.three-up').addClass('removed');
jQuery(this).find('.removeOrAddCampaign i').addClass( 'fa-check' );
jQuery(this).find('.removeOrAddCampaign i').removeClass( 'fa-trash-o' );
} else {
// New items should be included so show them as enabled.
jQuery(this).removeClass('disabled');
jQuery(this).find('.three-up').removeClass('removed');
jQuery(this).find('.removeOrAddCampaign i').removeClass( 'fa-check' );
jQuery(this).find('.removeOrAddCampaign i').addClass( 'fa-trash-o' );
}
}
});
// Show that a new campaign is available in the bottom bar.
if (newCampaignAvailable) {
jQuery('#new-campaign-available').removeClass('hidden');
} else {
jQuery('#new-campaign-available').addClass('hidden');
}
};
function markAsLowEPC() {
jQuery( "#sortable li" ).each(function(index) {
var campEpc = parseFloat(jQuery(this).attr('data-campEpc'));
var epcLimit = parseFloat(jQuery(this).attr('data-epcLimit'));
if (campEpc >= 0 && epcLimit > 0 && campEpc < epcLimit) {
// Show that the item has a low EPC as is being filtered.
jQuery(this).find('.low-epc-tag').removeClass('hidden');
}
});
}
function updateMinRating(input) {
var rating = jQuery(input).val();
jQuery('#adminTableHolder').attr('data-minRating', rating);
jQuery('#adminTableHolder').adserviceFeed({reload:true});
}
function updateUseIframe(input) {
var checkbox = jQuery(input);
if (checkbox.prop('checked')) {
usingIframe = true;
checkbox.val('1');
jQuery('#adservice-comparison-feed .categoryFilter').slideUp();
jQuery('#as-iframe-options').slideDown();
jQuery('#as-feed-shortcode').html('[adservice-comparison-feed-iframe]');
} else {
usingIframe = false;
checkbox.val('0');
if (filterAvailable) {
jQuery('#adservice-comparison-feed .categoryFilter').slideDown();
}
jQuery('#as-iframe-options').slideUp();
jQuery('#as-feed-shortcode').html('[adservice-comparison-feed]');
}
}
function updateShowFilter(input) {
var checkbox = jQuery(input);
if (checkbox.prop('checked')) {
checkbox.val('1');
} else {
checkbox.val('0');
}
}
function updateIncludeNewCampaigns(input) {
var checkbox = jQuery(input);
if (checkbox.prop('checked')) {
checkbox.val('true');
} else {
checkbox.val('false');
// When not including new campaigns we should also use a custom order
// since it's used to filter the feed data.
// Run updateOrder() once to save it.
if (!usingCustomOrder) {
updateOrder();
}
}
var disabledItems = getDisabledItems();
var customOrder = getCustomOrder();
// Mark items as disabled/enabled.
// This is to make sure new campaigns are marked correctly.
markAsDisabled(disabledItems, customOrder);
}
function updateLazyLoading(input) {
var checkbox = jQuery(input);
if (checkbox.prop('checked')) {
checkbox.val('true');
} else {
checkbox.val('false');
}
}
function jsonFix(json) {
return json.replace(/(\d*\.*\d+):/gm, "\"$1\":");
}
function exportFeed(pid, token) {
var name = jQuery('#feedName').val().trim();
var id = jQuery('#feedID').val().trim();
jQuery('#feedName').css('border', '');
jQuery('#feedID').css('border', '');
if (name.length < 4 || name.length > 32) {
jQuery('#feedName').css('border', '1px solid red');
jQuery('#export-feed-error').find('span').text('Name must be between 4 and 32 characters.');
jQuery('#export-feed-error').css('display', '');
return;
}
if (id.length < 4 || id.length > 32) {
jQuery('#feedID').css('border', '1px solid red');
jQuery('#export-feed-error').find('span').text('Feed ID must be between 4 and 32 characters.');
jQuery('#export-feed-error').css('display', '');
return;
}
var regex = new RegExp(/(^[a-z])([a-z]|\-|\d)*([a-z\d]$)/g);
var result = regex.exec(id);
if (result === null) {
jQuery('#feedID').css('border', '1px solid red');
jQuery('#export-feed-error').find('span').text('Feed ID can have lowercase letters (no special characters), digits, or hyphens. It must start with a lowercase letter and end with a letter or number.');
jQuery('#export-feed-error').css('display', '');
return;
}
// Authentication data.
var data = {
PID: pid,
LoginToken: token
};
jQuery.getJSON('https://feedcontentcloud.com/cgi-bin/publisher/API/ComparisonFeed/Feed.pl/' + id + '/available', data, function(response) {
if (response && response.available === false) {
jQuery('#feedID').css('border', '1px solid red');
jQuery('#export-feed-error').find('span').text('Feed ID is already in use.');
jQuery('#export-feed-error').css('display', '');
return;
} else if (response && response.error) {
jQuery('#feedID').css('border', '1px solid red');
jQuery('#export-feed-error').find('span').text('Checking feed ID availability failed.');
jQuery('#export-feed-error').css('display', '');
return;
} else {
jQuery('#feedID').css('border', '');
jQuery('#export-feed-error').find('span').text('');
jQuery('#export-feed-error').css('display', 'none');
var accountName = jQuery('select#compare-account option:selected').data('accountname');
var countryName = jQuery('select#compare-account option:selected').data('countryname');
// Build feed settings.
var feedSettings = {
id: id,
name: name,
agentId: parseInt(jQuery('select#compare-account option:selected').val()),
categoryId: jQuery('select#compare-template option:selected').val(),
type: (usingIframe) ? 'IFRAME' : 'REGULAR',
settings: {
showFilter: (jQuery('#using-filter-shortcode').val() == 1 || (jQuery('#show-filter').val() == 1 && usingIframe)) ? 1 : 0,
includeNewCampaigns: (jQuery('#include-new-campaigns').val() === 'true') ? true : false,
lazyLoading: (jQuery('#lazy-loading').val() === 'true') ? true : false,
color: jQuery('#button-color').val().substr(1),
hColor: jQuery('#button-hover-color').val().substr(1),
fontUrl: jQuery('#font-url').val(),
fontName: jQuery('#font-name').val(),
removedItems: getDisabledItems(),
conditions: getConditions(),
customOrder: getCustomOrder(),
customRating: getCustomRating(),
initialRows: jQuery('#initial-rows').val(),
maxRows: jQuery('#max-rows').val(),
minRating: jQuery('#min-rating').val(),
sub: jQuery('#subID').val(),
media_id: Number(jQuery('#mediaID').val())
}
};
// Save feed.
var payload = jQuery.extend(true, {}, feedSettings, data);
payload.settings = JSON.stringify(payload.settings);
jQuery.ajax({
method: 'POST',
url: 'https://feedcontentcloud.com/cgi-bin/publisher/API/ComparisonFeed/Feed.pl/' + payload.id,
data: payload
})
.done(function (response) {
if (response && response.status === 'OK') {
// Successfully saved feed.
jQuery('#export-feed-completed-section').find('span:eq(0)').text(payload.id);
jQuery('#export-feed-completed-section').find('span:eq(1)').text(accountName);
jQuery('#export-feed-completed-section').find('span:eq(2)').text(countryName);
jQuery('#export-feed-completed-section').find('code')
.text('[adservice-comparison-feed feed=' + payload.id + ']');
jQuery('#export-feed-section').hide();
jQuery('#export-feed-completed-section').show();
jQuery('#feed-id').val(payload.id);
jQuery('#feed-id').attr('value', payload.id);
alert("Feed '" + payload.id + "' was successfully exported.");
// Update the post to save feed ID.
if (jQuery('#publish') > 0) {
jQuery('#publish').click();
} else {
jQuery('.components-button.editor-post-publish-button').click();
}
} else if (response && response.status === 'ERROR') {
// API responded with an error. Most likely due to invalid data.
alert('Received the following error when trying to export the feed: ' + response.msg);
} else {
// Unknown API error.
alert('Something went wrong when trying to export the feed.');
}
})
.fail(function (response) {
// Request failed.
alert('Request to export feed failed.');
});
}
});
}