File: /var/www/novotecs.com/wp-content/plugins/xagio-seo/modules/projectplanner/projectplanner.js
let requestsRemaining = 0;
let currentSiloGroups = [];
let siloInitialized = false;
let currentProjectID = 0;
let currentProjectName = 0;
let nextProjectID = 0;
let nextProjectName = 0;
let modal_block = '';
let moveToProject = false;
let activeChanges = false;
var groupNoticeTimeout = null;
let keywordGroupID = false;
let taxonomiesTable;
let taxonomiesTableCreate;
let postsTable;
let postsTable2;
let selectedPosts;
let selectedTaxonomies;
let pTypes;
let tTypes;
let batchCron;
let volCpcBatchCron;
let alertProjectID;
let pong = false;
let KWS_Origin = 'https://app.keywordsupremacy.com';
let aiStatusTimeout = null
let ai_keywords = [];
let isOriginalOrder = true;
var average_prices = null;
var lastSeedGroupId = null;
let selected_seed_keywords = [];
Array.prototype.remove = function (data) {
const dataIdx = this.indexOf(data)
if (dataIdx >= 0) {
this.splice(dataIdx, 1);
}
return this.length;
}
window.onbeforeunload = function (e) {
let message = "Are you sure you want to leave without saving your changes?";
e = window.event;
// For IE and Firefox
if (activeChanges) {
if (e) {
e.returnValue = message;
}
// For Safari
return message;
}
};
let cf_templates = {
Default : {
name: "Default",
data: {
volume_red : 20,
volume_green: 100,
cpc_red : 0.59,
cpc_green: 1.00,
intitle_red : 1000,
intitle_green: 250,
inurl_red : 1000,
inurl_green: 250,
title_ratio_red : 1,
title_ratio_green: 0.25,
url_ratio_red : 1,
url_ratio_green: 0.25,
tr_goldbar_volume : 1000,
tr_goldbar_intitle: 20,
ur_goldbar_volume : 1000,
ur_goldbar_intitle: 20
}
},
Affiliate: {
name: "Affiliate",
data: {
volume_red : 100,
volume_green: 1000,
cpc_red : 1.00,
cpc_green: 2.00,
intitle_red : 10000,
intitle_green: 1000,
inurl_red : 10000,
inurl_green: 1000,
title_ratio_red : 1,
title_ratio_green: 0.25,
url_ratio_red : 1,
url_ratio_green: 0.25,
tr_goldbar_volume : 1000,
tr_goldbar_intitle: 20,
ur_goldbar_volume : 1000,
ur_goldbar_intitle: 20
}
},
Local : {
name: "Local",
data: {
volume_red : 10,
volume_green: 100,
cpc_red : 2.00,
cpc_green: 5.00,
intitle_red : 1000,
intitle_green: 100,
inurl_red : 1000,
inurl_green: 100,
title_ratio_red : 1,
title_ratio_green: 0.25,
url_ratio_red : 1,
url_ratio_green: 0.25,
tr_goldbar_volume : 1000,
tr_goldbar_intitle: 20,
ur_goldbar_volume : 1000,
ur_goldbar_intitle: 20
}
}
};
let cf_default_template = 'Default';
let cf_template = cf_templates[cf_default_template].data;
(function ($) {
'use strict';
var matcher;
matcher = function (params, data) {
var terms, text;
if (params.term == null) {
return data;
}
terms = params.term.toUpperCase().split(' ');
text = data.text.toUpperCase();
if (terms.every(function (term) {
if (text.indexOf(term) > -1) {
return true;
}
})) {
return data;
} else {
return null;
}
};
$(window).scroll(function () {
if ($(this).scrollTop()) {
$('#move-to-top').css('display', 'grid');
} else {
$('#move-to-top').hide();
}
});
window.addEventListener("message", (event) => {
if (event.origin == KWS_Origin) {
if (event.data == 'pong') {
pong = true;
} else {
try {
let data = btoa(encodeURI(event.data));
if (currentProjectID == 0) {
xagioNotify("danger", "Please load a project first and try again to import data from KeywordSupremacy!", 10);
return;
}
$.post(xagio_data.wp_post, 'action=xagio_import_kws&project_id=' + currentProjectID + '&data=' +
data, function (d) {
actions.loadProjectManually();
xagioNotify("success", "Data from KeywordSupremacy has been successfully imported!");
});
} catch (error) {
}
}
}
}, false);
let $grid;
$(document).ready(function () {
// init Masonry
$grid = $('.data').masonry({
itemSelector : '.xagio-group',
horizontalOrder: true,
percentPosition: true,
// fitWidth: true,
gutter: 40
});
actions.allowances = {
xags_allowance: $('#xags-allowance'),
xags : $('#xags'),
cost : []
};
$(document).on('mouseenter', '[data-xagio-option-show]', function () {
let hover = $(this).data('xagio-option-show');
$('.csv-option-hover').hide();
$(`#${hover}`).show();
});
actions.manageProjects();
actions.loadCfTemplates();
actions.changeCfTemplate();
actions.saveCfTemplate();
actions.addCfTemplate();
actions.applyCfTemplate();
actions.deleteCfTemplate();
actions.cfValidation();
actions.newKeyword();
actions.deleteKeywords();
actions.deleteDuplicate();
actions.createPagePost();
actions.deleteGroup();
actions.deleteGroups();
actions.createPagePostMulti();
actions.updateGroup();
actions.newGroup();
actions.modalEvents();
actions.newProject();
actions.removeProject();
actions.renameProject();
actions.loadProjects();
actions.loadProject();
actions.runAgent();
actions.duplicateProject();
actions.removeAlertProjectID();
actions.backToProjects();
actions.editGroupSettings();
actions.initSliders();
actions.selectAllKeywords();
actions.retrieveVolumeAndCPC();
actions.getAi();
actions.retrieveKeywordData();
actions.copyKeywords();
actions.refreshXags();
actions.exportProject();
actions.importProject();
actions.importKWS();
actions.trackRankings();
actions.submitKeywordsForRanking();
actions.submitKeywordsForGetVolAndCPC();
actions.refreshVolAndCpcValues();
actions.refreshCompetitionValues();
actions.selectKeyword();
actions.minimizeGroup();
actions.loadRedirects();
actions.addNewRedirect();
actions.deleteRedirect();
actions.onURLEdit();
actions.goToPagePost();
actions.attachToPagePost();
actions.dettachPagePost();
actions.loadPostTypes();
actions.changePostTypes();
actions.attachToTaxonomy();
actions.loadTaxonomyTypes();
actions.goToTaxonomy();
actions.changeTaxonomyTypes();
actions.auditWebsite();
actions.moveKeywords();
actions.phraseMatch();
actions.previewCluster();
actions.seedKeyword();
actions.moveToProject();
actions.moveSelectedGroups();
actions.selectAllGroups();
actions.consolidateKeywords();
actions.addGroupFromExisting();
actions.addGroupFromExistingTaxonomy();
actions.keywordInputKeypress();
actions.selectAllPagePosts();
actions.filterByPostType();
actions.expandCollapseFunctions();
actions.formatSEO();
actions.wordCountCloud();
actions.switchToSilo();
actions.removeSilo();
actions.saveSilo();
actions.getSavedKeywordSettingsLanguageAndCountry();
actions.volumeAndCpcOnChangeLanguage();
actions.volumeAndCpcOnChangeCountry();
actions.competitionChangeLanguage();
actions.competitionChangeCountry();
actions.setDefaultAuditLocation();
actions.setDefaultAiWizardSearchEngine();
actions.setDefaultAiWizardLocation();
actions.openNotes();
actions.saveGroupClick();
actions.saveProject();
actions.showShortcodes();
actions.exportGroups();
actions.exportKeywords();
actions.exportAllProjects();
actions.loadProjectIdFromURL();
actions.aiwizard();
actions.shareProject();
actions.getXagioLinks();
$.tablesorter.addParser({
id : "fancyNumber",
is : function (s) {
// return false so this parser is not auto detected
return false;
},
format: function (s) {
return $.tablesorter.formatFloat(s.replace(/,/g, ''));
},
type : "numeric"
});
/*Get default settings*/
$.post(xagio_data.wp_post, 'action=xagio_get_default_search_engine', function (d) {
if (d.status == 'success') {
for (let i = 0; i < d.data.length; i++) {
let id = d.data[i].id;
if ($('#search_engine').find("option[value='" + id + "']").length) {
$("#search_engine").find("option[value=" + id + "]").attr('selected', true);
}
}
}
});
/* Get Alert Project ID*/
$.post(xagio_data.wp_post, 'action=xagio_get_alert_project_id', function (d) {
if (d.status == 'success') {
alertProjectID = d.project_id;
}
});
/* AI Functions */
actions.ai.init();
$("#move-to-top").click(function () {
$("html").animate({scrollTop: 0});
});
$(document).mouseup(function (e) {
var container = $(".xagio-button-dropdown");
if (!container.is(e.target) && container.has(e.target).length === 0 &&
!$('.group-connect-group > button').is(e.target)) {
container.prev('button.xagio-on').removeClass('xagio-on');
container.hide();
}
});
$(document).on('click', '.group-connect-group > button', function (e) {
let btn = $(this);
let dropdown = btn.next('.xagio-button-dropdown');
if (btn.hasClass('xagio-on')) {
btn.removeClass('xagio-on')
dropdown.hide();
} else {
btn.addClass('xagio-on');
dropdown.show();
}
});
});
let actions = {
ai : {
init : function () {
actions.ai.helper.modalAccordion();
actions.ai.helper.disableDefaultOnLableClick();
actions.ai.openAiModal();
actions.ai.openAiWizardModal();
actions.ai.useSelectedSuggestionEvent();
actions.ai.modifyAiSuggestion();
actions.ai.viewSEOSuggestions();
},
openAiWizardModal : function () {
$(document).on('click', '.aiWizardBtn', function () {
let btn = $(this);
btn.disable();
if (!xagio_data.connected) {
xagioConnectModal();
return;
}
$('#aiwizard')[0].showModal();
btn.disable();
});
},
openAiModal : function () {
$(document).on('click', '.optimize-ai', function (e) {
e.preventDefault();
if (!xagio_data.connected) {
xagioConnectModal();
return;
}
ai_keywords = [];
let btn = $(this);
let regenerate = btn.attr('data-regenerate');
let current_group = btn.parents('.xagio-group');
let group_id = current_group.find('input[name="group_id"]').val();
btn.parents('.xag-ai-tools-button').find('.xag-ai-tools i.xagio-icon.xagio-icon-robot').removeClass().addClass('xagio-icon xagio-icon-sync xagio-icon-spin');
let group_tr = current_group.find('.updateKeywords').find('.keywords').find('.keywords-data tr');
let keywords = [];
let all_competition_present = true;
group_tr.each(function () {
if ($(this).find('div.keywordInput[data-target="intitle"]').html() !== "" ||
$(this).find('div.keywordInput[data-target="inurl"]').html() !== "") {
ai_keywords.push([
$(this).find('div.keywordInput[data-target="keyword"]').text(),
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="volume"]').html())),
$(this).find('div.keywordInput[data-target="intitle"]').html() ??
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="intitle"]').html())),
$(this).find('div.keywordInput[data-target="inurl"]').html() ??
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="inurl"]').html()))
]);
} else {
all_competition_present = false;
}
let tmp = {
'keyword': {
'value': $(this).find('div.keywordInput[data-target="keyword"]').text(),
},
'volume' : {
'class': $(this).find('div.keywordInput[data-target="volume"]').parents('td').attr('class'),
'value': parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="volume"]').html())),
},
'intitle': {
'class': $(this).find('div.keywordInput[data-target="intitle"]').parents('td').attr('class'),
'value': $(this).find('div.keywordInput[data-target="intitle"]').html() ??
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="intitle"]').html())),
},
'inurl' : {
'class': $(this).find('div.keywordInput[data-target="inurl"]').parents('td').attr('class'),
'value': $(this).find('div.keywordInput[data-target="inurl"]').html() ??
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="inurl"]').html()))
}
};
if (typeof $(this).find('div.keywordInput[data-target="keyword"]').html() !== 'undefined') {
keywords.push(tmp);
}
});
if (keywords.length < 1) {
xagioNotify("danger", "Please make sure that group has at least one keyword.");
return false;
}
if (!all_competition_present) ai_keywords = [];
let aiSuggestionOptions = $('#aiSuggestionOptions');
let tr = '';
for (let i = 0; i < keywords.length; i++) {
let k = keywords[i];
let input = '';
if (ai_keywords.length > 0) {
input = `<input type="radio" id="keyword_${i}" name="suggestion_keyword" /> `;
}
tr += `<tr>`;
tr += `<td>${input}<label for="keyword_${i}">${k.keyword.value}</label></td>`;
tr += `<td class="text-center ${k.volume.class}">${k.volume.value}</td>`;
if (k.intitle.value !== '') {
tr += `<td class="text-center ${k.intitle.class}">${k.intitle.value}</td>`;
} else {
tr += `<td class="text-center"><i class="xagio-icon xagio-icon-warning uk-text-warning icon-warning" data-toggle="tooltip" title="Please fetch competition data for better results"></i></td>`;
}
if (k.inurl.value !== '') {
tr += `<td class="text-center ${k.inurl.class}">${k.inurl.value}</td>`;
} else {
tr += `<td class="text-center"><i class="xagio-icon xagio-icon-warning uk-text-warning icon-warning" data-toggle="tooltip" title="Please fetch competition data for better results"></i></td>`;
}
tr += `</tr>`;
}
aiSuggestionOptions.find('.ai-suggestion-keywords-table tbody').html(tr);
if (ai_keywords.length < 1) {
aiSuggestionOptions.find('.ai-optimization-alert').show();
aiSuggestionOptions.find('.ai-optimization-alert-message').html(`You are about to optimize without competition metrics in consideration.<br>This will provide a lower quality result. Please fetch metrics first if you wish for optimal optimizations.`);
} else {
aiSuggestionOptions.find('.ai-optimization-alert').hide();
}
aiSuggestionOptions.find('.ai-suggestion-keywords-table').DataTable(
{
"dom" : 't<"xagio-table-bottom"lp><"clear">',
"responsive": true,
"bDestroy" : true,
"bAutoWidth": false,
"aaSorting" : [
[
1,
'desc'
]
],
});
aiSuggestionOptions.find('.aiSuggestionNext').attr('data-group', group_id).attr('data-regenerate', regenerate);
setTimeout(function () {
aiSuggestionOptions[0].showModal();
}, 500);
});
$(document).on('change', '#prompt_id', function (e) {
e.preventDefault();
let selected_value = $(this).val();
let selected_prompt = null;
let input = $('#aiPrice').attr('data-target');
for (let i = 0; i < average_prices[input].length; i++) {
const pagecontentElement = average_prices[input][i];
if (pagecontentElement.id == selected_value) {
selected_prompt = pagecontentElement;
break;
}
}
$('#aiPrice').find('.average-price').html(parseFloat(selected_prompt.price.toFixed(3)));
});
$(document).on('click', '.aiSuggestionNext ', function () {
let btn = $(this);
btn.disable();
$.post(xagio_data.wp_post, `action=xagio_ai_get_average_prices`, function (d) {
btn.disable();
if (d.status == 'error') {
xagioNotify('danger', 'There was a problem establishing connection, please contact Support.');
return;
}
let defaultPrompt = null;
let aiPriceModal = $('#aiPrice');
let prompt_id = aiPriceModal.find('#prompt_id');
prompt_id.empty();
if (average_prices == null) {
average_prices = d.data.average_prices;
}
let input = 'SEO_SUGGESTIONS';
if (ai_keywords.length > 0) {
input = 'SEO_SUGGESTIONS_MAIN_KW';
}
for (let i = 0; i < average_prices[input].length; i++) {
const pagecontentElement = average_prices[input][i];
prompt_id.append(`<option value="${pagecontentElement.id}">${pagecontentElement.title}</option>`)
if (pagecontentElement.default) {
defaultPrompt = pagecontentElement;
prompt_id.val(pagecontentElement.id);
}
}
let settings_modal = btn.parents('#aiSuggestionOptions');
let main_keyword = settings_modal.find('#ai-suggestion-main-keyword').val();
let regenerate = btn.attr('data-regenerate');
let group_id = btn.attr('data-group');
aiPriceModal.find('.input-name').html('AI SEO Optimization');
aiPriceModal.find('#suggestion-main-keyword').val($.trim(main_keyword));
aiPriceModal.find('.average-price').html(parseFloat(defaultPrompt.price.toFixed(3)));
aiPriceModal.find('.ai-credits').html(parseFloat(d.data.credits.toFixed(3)));
aiPriceModal.find('.makeAiRequest').attr('data-group', group_id).attr('data-regenerate', regenerate);
aiPriceModal.attr('data-target', input);
settings_modal[0].close();
aiPriceModal[0].showModal();
});
});
$(document).on('change', 'input[name="suggestion_keyword"]', function () {
$('#ai-suggestion-main-keyword').val($(this).next('label').html());
$('.ai-main-keyword-holder').slideDown();
});
$('#aiSuggestionOptions')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('.ai-suggestion-keywords-table tbody').empty();
modal.find('#ai-suggestion-main-keyword').val('');
modal.find('.ai-main-keyword-holder').hide();
modal.find('.ai-suggestion-keywords-table').DataTable().destroy();
});
$('#ai-suggest-modal').on('close', function () {
let labels = $('.ai-block .ai-content ul li label');
$('.mini-table').empty();
labels.each(function (index) {
let current_label = $(this);
current_label.unhighlight();
});
});
$(document).on('click', '.table_hightligh_also', function (e) {
let labels = $('.ai-block .ai-content ul li label');
let word_el = $(this).find('.ai-cluster-word');
let word = word_el.text();
if (word_el.hasClass('highlightCloud')) {
word_el.removeClass('highlightCloud');
labels.each(function (index) {
let current_label = $(this);
let label_matches = current_label.html().match(new RegExp(`\\b(${word})\\b`, 'gi'));
if (label_matches !== null) {
for (let j = 0; j < label_matches.length; j++) {
const labelMatch = label_matches[j];
const labelReg = new RegExp(`<b class="highlightCloud">(${labelMatch})</b>`, "g");
let label_replace = current_label.html().replace(labelReg, labelMatch);
current_label.html(label_replace);
}
}
current_label.html(current_label.html().replace(new RegExp(`<b class="highlightCloud">(${word})<\\/b>`, 'gi'), word));
});
} else {
word_el.addClass('highlightCloud');
labels.each(function (index) {
let current_label = $(this);
let label_matches = current_label.html().match(new RegExp(`\\b(${word})\\b`, 'gi'));
if (label_matches !== null) {
for (let j = 0; j < label_matches.length; j++) {
const labelMatch = label_matches[j];
const labelReg = new RegExp(`\\b(${labelMatch})\\b`, "g");
let label_replace = current_label.html().replace(labelReg, '<b class="highlightCloud">' +
labelMatch + '</b>');
current_label.html(label_replace);
}
}
});
}
});
$(document).on('click', '.word-highlight', function (e) {
let labels = $('.ai-block .ai-content ul li label');
let word_el = $(this).find('.ai-cluster-word');
let word = word_el.text();
if (word_el.hasClass('highlightCloud')) {
word_el.removeClass('highlightCloud');
labels.each(function (index) {
let current_label = $(this);
let label_matches = current_label.html().match(new RegExp(`\\b(${word})\\b`, 'gi'));
if (label_matches !== null) {
for (let j = 0; j < label_matches.length; j++) {
const labelMatch = label_matches[j];
const labelReg = new RegExp(`<b class="highlightCloud">(${labelMatch})</b>`, "g");
let label_replace = current_label.html().replace(labelReg, labelMatch);
current_label.html(label_replace);
}
}
current_label.html(current_label.html().replace(new RegExp(`<b class="highlightCloud">(${word})<\\/b>`, 'gi'), word));
});
} else {
word_el.addClass('highlightCloud');
labels.each(function (index) {
let current_label = $(this);
let label_matches = current_label.html().match(new RegExp(`\\b(${word})\\b`, 'gi'));
if (label_matches !== null) {
for (let j = 0; j < label_matches.length; j++) {
const labelMatch = label_matches[j];
const labelReg = new RegExp(`\\b(${labelMatch})\\b`, "g");
let label_replace = current_label.html().replace(labelReg, '<b class="highlightCloud">' +
labelMatch + '</b>');
current_label.html(label_replace);
}
}
});
}
});
$(document).on('click', '.makeAiRequest', function (e) {
let btn = $(this);
let group_id = btn.attr('data-group');
let regenerate = btn.attr('data-regenerate');
let current_group = $(`input[name="group_id"][value="${group_id}"]`).parents('.xagio-group');
let modal = btn.parents('#aiPrice');
let main_keyword = modal.find('#suggestion-main-keyword').val();
let group_tr = current_group.find('.updateKeywords').find('.keywords').find('.keywords-data tr');
btn.disable();
let tbody_keywords = current_group.find('.updateKeywords').find('.keywords').find('.keywords-data tr').find('div.keywordInput[data-target="keyword"]');
let table_keywords = [];
group_tr.each(function () {
let tmp = {
'keyword': {
'value': $(this).find('div.keywordInput[data-target="keyword"]').text(),
},
'volume' : {
'class': $(this).find('div.keywordInput[data-target="volume"]').parents('td').attr('class'),
'value': parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="volume"]').html())),
},
'intitle': {
'class': $(this).find('div.keywordInput[data-target="intitle"]').parents('td').attr('class'),
'value': $(this).find('div.keywordInput[data-target="intitle"]').html() ??
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="intitle"]').html())),
},
'inurl' : {
'class': $(this).find('div.keywordInput[data-target="inurl"]').parents('td').attr('class'),
'value': $(this).find('div.keywordInput[data-target="inurl"]').html() ??
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="inurl"]').html()))
}
};
if (typeof $(this).find('div.keywordInput[data-target="keyword"]').html() !== 'undefined') {
table_keywords.push(tmp);
}
});
let keywords = [];
tbody_keywords.each(function () {
keywords.push($(this).text());
});
//send only top 50 keywords
keywords.splice(50);
let words_table = actions.ai.helper.calculateWordWeight(keywords);
let mini_table = '<div class="xagio-alert xagio-alert-primary xagio-margin-top-medium xagio-margin-bottom-medium"><i class="xagio-icon xagio-icon-info"></i> ' +
'In table below you can click on any keyword to highlight entire keyword used by AI suggestions ' +
'to help you visually see optimization results</div>';
mini_table += '<table class="uk-table ai-keyword-cloud-table">';
mini_table += '<thead>';
mini_table += '<tr>';
mini_table += '<td width="55%">Keyword</td>' +
'<td class="text-center" width="15%">Volume</td>' +
'<td class="text-center" width="15%">inTitle</td>' +
'<td class="text-center" width="15%">inURL</td>';
mini_table += '</tr>';
mini_table += '</thead>';
mini_table += '<tbody>';
for (let i = 0; i < table_keywords.length; i++) {
let k = table_keywords[i];
mini_table += '<tr>';
mini_table += `<td class="table_hightligh_also"><span class="ai-cluster-word">${k.keyword.value}</span></td>`;
mini_table += `<td class="text-center ${k.volume.class}">${k.volume.value}</td>`;
mini_table += `<td class="text-center ${k.intitle.class}">${k.intitle.value}</td>`;
mini_table += `<td class="text-center ${k.inurl.class}">${k.inurl.value}</td>`;
mini_table += '</tr>';
}
mini_table += '</tbody>';
mini_table += '</table>';
mini_table += '<div class="xagio-alert xagio-alert-primary xagio-margin-top-medium xagio-margin-bottom-medium"><i class="xagio-icon xagio-icon-info"></i> Below you can see separated keywords by words and their weights (<b>word (weight)</b>). You can click on any word to highlight words used by AI suggestions ' +
'to help you visually see optimization results</div>';
mini_table += '<div class="ai-keyword-cloud">';
for (let i = 0; i < words_table.length; i++) {
let word = words_table[i];
mini_table += '<div class="word-highlight">';
mini_table += `<span class="ai-cluster-word">${word.text}</span> <span>(${word.weight})</span>`;
mini_table += '</div>';
}
mini_table += '</div>';
let aiModal = $('#ai-suggest-modal');
let input = 'SEO_SUGGESTIONS';
let target_id = group_id;
let prompt_id = $("#prompt_id").val();
if (ai_keywords.length > 0) {
input = 'SEO_SUGGESTIONS_MAIN_KW';
words_table = actions.ai.helper.generateAiKeywordCluster(ai_keywords);
} else {
words_table = JSON.stringify(words_table);
}
aiModal.find('.mini-table').html(mini_table);
aiModal.find('.ai-keyword-cloud-table').DataTable(
{
"dom" : 't<"xagio-table-bottom"lp><"clear">',
"responsive": true,
"bDestroy" : true,
"bAutoWidth": false,
"aaSorting" : [
[
1,
'desc'
]
],
});
aiModal.find('.use-ai-suggested').attr('data-group-id', group_id);
aiModal.find('.use-ai-suggested').attr('data-ai-input', input);
aiModal.find('.ai-block').addClass('grad');
modal[0].close();
aiModal[0].showModal();
btn.disable();
let r = "";
if (regenerate === 'yes') {
r = "®enerate=yes";
$.post(xagio_data.wp_post, `action=xagio_ai_suggest&prompt_id=${prompt_id}&keyword_group=${words_table}&group_id=${target_id}&main_keyword=${main_keyword}&input=${input}${r}`, (d) => {
if (d.status == 'upgrade') {
// show aiUpgrade modal
$('#aiUpgrade')[0].showModal();
return;
}
if (d.status === 'success') {
actions.ai.checkAiStatus(input, target_id, aiModal, words_table);
}
xagioNotify(d.status, d.message);
});
return false;
}
$.post(xagio_data.wp_post, `action=xagio_ai_output&input=${input}&target_id=${target_id}`, (d) => {
let status = d.status;
if (status === 'running') {
setTimeout(function () {
aiModal.find('.ai-alert-info').slideDown();
}, 12000);
actions.ai.checkAiStatus(input, target_id, aiModal, words_table);
} else if (status === 'completed') {
clearTimeout(aiStatusTimeout);
let suggestions = d.data;
actions.ai.helper.displaySeoSuggestionsInModal(aiModal, suggestions, d.id);
} else {
// If status is none, send request for AI
$.post(xagio_data.wp_post, `action=xagio_ai_suggest&prompt_id=${prompt_id}&keyword_group=${JSON.stringify(words_table)}&group_id=${target_id}&main_keyword=${main_keyword}&input=${input}`, (d) => {
if (d.status === 'success') {
actions.ai.checkAiStatus(input, target_id, aiModal, words_table);
}
xagioNotify(d.status, d.message);
});
}
});
});
},
viewSEOSuggestions : function () {
$(document).on('click', '.view-ai-suggestions', function (e) {
e.preventDefault();
let btn = $(this);
let current_group = btn.parents('.xagio-group');
let group_id = current_group.find('input[name="group_id"]').val();
let ai_input = btn.data('ai-input');
let group_tr = current_group.find('.updateKeywords').find('.keywords').find('.keywords-data tr');
let tbody_keywords = current_group.find('.updateKeywords').find('.keywords').find('.keywords-data tr').find('div.keywordInput[data-target="keyword"]');
let keywords = [];
tbody_keywords.each(function () {
keywords.push($(this).text());
});
let table_keywords = [];
group_tr.each(function () {
let tmp = {
'keyword': {
'value': $(this).find('div.keywordInput[data-target="keyword"]').text(),
},
'volume' : {
'class': $(this).find('div.keywordInput[data-target="volume"]').parents('td').attr('class'),
'value': parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="volume"]').html())),
},
'intitle': {
'class': $(this).find('div.keywordInput[data-target="intitle"]').parents('td').attr('class'),
'value': $(this).find('div.keywordInput[data-target="intitle"]').html() ??
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="intitle"]').html())),
},
'inurl' : {
'class': $(this).find('div.keywordInput[data-target="inurl"]').parents('td').attr('class'),
'value': $(this).find('div.keywordInput[data-target="inurl"]').html() ??
parseFloat(actions.cleanComma($(this).find('div.keywordInput[data-target="inurl"]').html()))
}
};
if (typeof $(this).find('div.keywordInput[data-target="keyword"]').html() !== 'undefined') {
table_keywords.push(tmp);
}
});
let words_table = actions.ai.helper.calculateWordWeight(keywords);
let mini_table = '<div class="xagio-alert xagio-alert-primary xagio-margin-top-medium xagio-margin-bottom-medium"><i class="xagio-icon xagio-icon-info"></i> ' +
'In table below you can click on any keyword to highlight entire keyword used by AI suggestions ' +
'to help you visually see optimization results</div>';
mini_table += '<table class="uk-table ai-keyword-cloud-table">';
mini_table += '<thead>';
mini_table += '<tr>';
mini_table += '<td width="55%">Keyword</td>' +
'<td class="text-center" width="15%">Volume</td>' +
'<td class="text-center" width="15%">inTitle</td>' +
'<td class="text-center" width="15%">inURL</td>';
mini_table += '</tr>';
mini_table += '</thead>';
mini_table += '<tbody>';
for (let i = 0; i < table_keywords.length; i++) {
let k = table_keywords[i];
mini_table += '<tr>';
mini_table += `<td class="table_hightligh_also"><span class="ai-cluster-word">${k.keyword.value}</span></td>`;
mini_table += `<td class="text-center ${k.volume.class}">${k.volume.value}</td>`;
mini_table += `<td class="text-center ${k.intitle.class}">${k.intitle.value}</td>`;
mini_table += `<td class="text-center ${k.inurl.class}">${k.inurl.value}</td>`;
mini_table += '</tr>';
}
mini_table += '</tbody>';
mini_table += '</table>';
mini_table += '<div class="xagio-alert xagio-alert-primary xagio-margin-top-medium xagio-margin-bottom-medium"><i class="xagio-icon xagio-icon-info"></i> Below you can see separated keywords by words and their weights (<b>word (weight)</b>). You can click on any word to highlight words used by AI suggestions ' +
'to help you visually see optimization results</div>';
mini_table += '<div class="ai-keyword-cloud">'
for (let i = 0; i < words_table.length; i++) {
let word = words_table[i];
mini_table += '<div class="word-highlight">';
mini_table += `<span class="ai-cluster-word">${word.text}</span> <span>(${word.weight})</span>`
mini_table += '</div>';
}
mini_table += '</div>';
let aiModal = $('#ai-suggest-modal');
aiModal.find('.mini-table').html(mini_table);
aiModal.find('.ai-keyword-cloud-table').DataTable(
{
"dom" : 't<"xagio-table-bottom"lp><"clear">',
"responsive": true,
"bDestroy" : true,
"bAutoWidth": false,
"aaSorting" : [
[
1,
'desc'
]
],
});
aiModal.find('.use-ai-suggested').attr('data-group-id', group_id);
aiModal.find('.use-ai-suggested').attr('data-ai-input', ai_input);
aiModal.find('.ai-block').addClass('grad');
aiModal[0].showModal();
$.post(xagio_data.wp_post, `action=xagio_ai_output&input=${ai_input}&target_id=${group_id}`, (d) => {
let status = d.status;
if (status === 'completed') {
clearTimeout(aiStatusTimeout);
let suggestions = d.data;
actions.ai.helper.displaySeoSuggestionsInModal(aiModal, suggestions, d.id);
}
});
});
},
checkAiStatus : function (input, target_id, aiModal, words_table) {
let template = $(`input[name="group_id"][value="${target_id}"]`).parents('.xagio-group');
aiStatusTimeout = setTimeout(function () {
$.post(xagio_data.wp_post, `action=xagio_ai_output&input=${input}&target_id=${target_id}`, (d) => {
let status = d.status;
if (status === 'running') {
actions.ai.checkAiStatus(input, target_id, aiModal, words_table);
template.find('.xag-ai-tools-button').attr('title', 'Getting AI Suggestions');
template.find('.xag-ai-tools i.xagio-icon.xagio-icon-robot').removeClass().addClass('xagio-icon xagio-icon-sync xagio-icon-spin');
template.find('.optimize-ai i').removeClass().addClass('xagio-icon xagio-icon-sync xagio-icon-spin');
} else if (status === 'completed') {
clearTimeout(aiStatusTimeout);
let suggestions = d.data;
actions.ai.helper.displaySeoSuggestionsInModal(aiModal, suggestions, d.id);
template.find('.xag-ai-tools-button').attr('title', 'AI Suggestions Ready');
template.find('.xag-ai-tools').addClass('xag-ai-complete').html(`<i class="xagio-icon xagio-icon-ai"></i> <i class="xagio-icon xagio-icon-check"></i>`);
template.find('.optimize-ai').attr('data-regenerate', 'yes').html(`<i class="xagio-icon xagio-icon-brain"></i> Regenerate AI Suggestions`);
template.find('.createPostPageAi').show();
template.find('.view-ai-suggestions').attr('data-ai-input', input);
template.find('.view-ai-li').show();
} else {
$.post(xagio_data.wp_post, `action=xagio_ai_suggest&keyword_group=${JSON.stringify(words_table)}&group_id=${target_id}`, (d) => {
actions.ai.checkAiStatus(input, target_id, aiModal, words_table);
xagioNotify(d.status, d.message);
});
}
});
}, 4000);
},
useSelectedSuggestionEvent: function () {
$(document).on('click', '.use-ai-suggested', function () {
let btn = $(this);
let aiModal = $('#ai-suggest-modal');
let group_id = btn.attr('data-group-id');
let group = $(`input[name='group_id'][value='${group_id}']`).parents('.xagio-group');
let header = btn.parents('#ai-suggest-modal').find('.ai-block.ai-headers .select-suggestion:checked').next().text().trim();
let title = btn.parents('#ai-suggest-modal').find('.ai-block.ai-titles .select-suggestion:checked').next().text().trim();
let desc = btn.parents('#ai-suggest-modal').find('.ai-block.ai-desc .select-suggestion:checked').next().text().trim();
if (aiModal.find('#include_h1').val() === '1') {
group.find('.updateGroup input[name="h1"]').val(header);
group.find('.updateGroup div.prs-h1tag').html(header);
}
if (aiModal.find('#include_titles').val() === '1') {
group.find('.updateGroup input[name="title"]').val(title);
group.find('.updateGroup .prs-editor.prs-title').html(title).trigger('input');
}
if (aiModal.find('#include_desc').val() === '1') {
group.find('.updateGroup input[name="description"]').val(desc);
group.find('.updateGroup .prs-editor.prs-description').html(desc).trigger('input');
}
aiModal[0].close();
group.addClass('uk-animation-shake');
setTimeout(() => {
group.removeClass('uk-animation-shake');
}, 500);
group.find('.updateGroup').submit();
});
},
modifyAiSuggestion : function () {
$(document).on('click', '.modify-suggestion', function () {
let btn = $(this);
let modal = btn.parents('#ai-suggest-modal');
let group_id = modal.find('.use-ai-suggested').attr('data-group-id');
let ai_input = modal.find('.use-ai-suggested').attr('data-ai-input');
let newText = btn.prev().text();
let type = btn.data('index');
let data_id = btn.data('id');
btn.disable();
$.post(xagio_data.wp_post, `action=xagio_modify_suggestion&group_id=${group_id}&ai_input=${ai_input}&type=${type}&row_id=${data_id}&text=${encodeURIComponent(newText)}`, function (d) {
btn.disable();
xagioNotify(d.status, d.message);
});
});
},
helper : {
disableDefaultOnLableClick : function () {
$(document).on('click', '.ai-block label', function (e) {
e.preventDefault();
$(this).prev().prop('checked', true);
});
},
displaySeoSuggestionsInModal : function (aiModal, suggestions, id) {
let headers = [];
let titles = [];
let descriptions = [];
if (suggestions == null) {
aiModal.find('.ai-headers .ai-content').html(`<div class="failed-suggestions"><i class="xagio-icon xagio-icon-info"></i> Failed to retrieve H1 Suggestions, please try again</div>`);
aiModal.find('.ai-titles .ai-content').html(`<div class="failed-suggestions"><i class="xagio-icon xagio-icon-info"></i> Failed to retrieve Title Suggestions, please try again</div>`);
aiModal.find('.ai-desc .ai-content').html(`<div class="failed-suggestions"><i class="xagio-icon xagio-icon-info"></i> Failed to retrieve Description Suggestions, please try again</div>`);
} else {
for (let i = 0; i < suggestions.length; i++) {
let item = suggestions[i];
headers.push(item['h1']);
titles.push(item['title']);
descriptions.push(item['description']);
}
aiModal.find('.ai-headers .ai-content').html(actions.ai.helper.generateAISuggestionULElement(headers, 'header', id));
aiModal.find('.ai-titles .ai-content').html(actions.ai.helper.generateAISuggestionULElement(titles, 'title', id));
aiModal.find('.ai-desc .ai-content').html(actions.ai.helper.generateAISuggestionULElement(descriptions, 'desc', id));
}
aiModal.find('.ai-block').removeClass('grad');
},
generateAISuggestionULElement: function (data, type, id) {
// type = header, title, desc
let ul = '<ul>';
for (let i = 0; i < data.length; i++) {
let item = data[i].trim();
item = item.replace(/^[0-9]\.\s?/, '');
item = item.replace(/^"|"$/g, '');
let checked = '';
if (i === 0) checked = 'checked';
ul += `<li>
<input type="radio" class="select-suggestion" id="${type}${i}" name="${type}" ${checked}>
<label for="${type}${i}" contenteditable="true">${item}</label>
<button class="xagio-button xagio-button-primary xagio-button-mini modify-suggestion" data-index="${type}-${i}" data-id="${id}"><i class="xagio-icon xagio-icon-save"></i></button>
</li>`;
}
ul += '</ul>';
return ul;
},
generateAiKeywordCluster : function (keywords) {
let table = '';
for (let i = 0; i < keywords.length; i++) {
let row = keywords[i];
let keyword = encodeURIComponent(row[0]);
table += `${keyword}, ${row[1]}, ${row[2]}, ${row[3]} \n `;
}
return table;
},
calculateWordWeight : function (keywords) {
let words_split = [];
for (let i = 0; i < keywords.length; i++) {
words_split.push(keywords[i].split(' '));
}
words_split = [].concat.apply([], words_split);
let words = [];
for (let i = 0; i < words_split.length; i++) {
if (words_split[i].length < 2) continue;
if (words_split[i] === "&") continue;
let check = 0;
let final = {
text : '',
weight: 0
};
for (let j = 0; j < words.length; j++) {
if (words_split[i] == words[j].text) {
check = 1;
++words[j].weight;
}
}
if (check == 0) {
final.text = words_split[i];
final.weight = 1;
words.push(final);
}
check = 0;
}
words.sort(function (a, b) {
let a1 = a.weight,
b1 = b.weight;
if (a1 == b1) return 0;
return a1 < b1 ? 1 : -1;
});
return words;
},
modalAccordion : function () {
$(document).on('click', '.ai-accordion-title', function (e) {
if ($(this).hasClass('open')) {
$(this).removeClass('open');
$(this).find('i').removeClass().addClass('xagio-icon xagio-icon-arrow-up');
$('.mini-table').slideUp();
} else {
$(this).addClass('open');
$(this).find('i').removeClass().addClass('xagio-icon xagio-icon-arrow-down');
$('.mini-table').slideDown();
}
});
}
}
},
allowances : null,
escapeRegExp : function (string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
},
getXagioLinks : function () {
$.post(xagio_data.wp_post, 'action=xagio_get_links', function (d) {
if (d !== false) {
let projectplanner_btn = $('.xagio-button-dashboard-link');
projectplanner_btn.html(`<i class="xagio-icon xagio-icon-store"></i> ${d.projectplanner.text}`);
projectplanner_btn.attr('href', d.projectplanner.url);
}
});
},
shareProject : function () {
$('#confirmShareModal')[0].addEventListener("close", (event) => {
let modal = $(event.target);
let project_id = modal.find('#shareProjectId').val();
let sliderStatus = modal.find('#sliderStatus').val();
let checkbox = $('.share_btn_cell').find(`input[data-id="${project_id}"]`);
checkbox.prop("checked", !parseInt(sliderStatus));
modal.find('#shareProjectId').val(0);
modal.find('#sliderStatus').val(0);
modal.find('.link-share-message').val('');
});
$(document).on('click', '.add-share-link', function () {
let btn = $(this);
let modal_show = $('#shared_project_link');
let modal = btn.parents('.xagio-modal');
let project_id = modal.find('#shareProjectId').val();
let isActive = modal.find('#sliderStatus').val();
let checkbox = $('.share_btn_cell').find(`input[data-id="${project_id}"]`);
modal[0].close();
if (project_id == 0) {
xagioNotify("danger", "Please open any project to share");
return false;
}
btn.disable();
isActive = parseInt(isActive);
$.post(xagio_data.wp_post, `action=xagio_share_project&project_id=${project_id}&share=${isActive}`, function (d) {
let shared_url = d.data;
btn.disable();
if (isActive) {
checkbox.prop("checked", true);
modal_show.find('.share-modal-link a').attr('href', shared_url).html(shared_url);
modal_show.find('.view-shared-url').attr('href', shared_url);
modal_show[0].showModal();
} else {
checkbox.prop("checked", false);
}
actions.loadProjects();
xagioNotify("success", d.message);
});
});
$(document).on('click', '.copy-shared-url', function () {
let btn = $(this);
let modal = btn.parents('.xagio-modal');
let link = modal.find('.share-modal-link a').attr('href');
copyTextToClipboard(link);
modal[0].close();
xagioNotify("success", "Link Copied");
});
$(document).on('click', '.on-off-share', function (e) {
let checkbox = $(this);
let modal = $('#confirmShareModal');
let project_id = checkbox.data('id');
let checked = checkbox.prop('checked');
let isActive;
let msg = '';
if (checked === true) {
isActive = 1;
msg = "This action will generate unique sharable link for this project";
} else {
isActive = 0;
msg = "This action will remove sharing for this project. You can always share it again later";
}
modal.find('#shareProjectId').val(project_id);
modal.find('#sliderStatus').val(isActive);
modal.find('.link-share-message').html(msg);
modal[0].showModal();
});
$(document).on('click', '.shared_project_link', function (e) {
let btn = $(this);
let shared_url = btn.attr('data-shared-url');
let modal = $('#shared_project_link');
modal.find('.share-modal-link a').attr('href', shared_url).html(shared_url);
modal.find('.view-shared-url').attr('href', shared_url);
modal[0].showModal();
});
},
loadProjectIdFromURL: function () {
if (actions.getUrlParameters('pid')) {
currentProjectID = actions.getUrlParameters('pid');
if (currentProjectID != 0)
actions.loadProjectManually();
}
},
getUrlParameters : function (sParam) {
let sPageURL = window.location.search.substring(1);
let sURLVariables = sPageURL.split('&');
for (let i = 0; i < sURLVariables.length; i++) {
let sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam) {
return sParameterName[1];
}
}
},
parseUrl : function (url) {
let a = $('<a>', {
href: url
});
return a;
},
aiwizard : function () {
$(document).on('change', '#top-ten-language-select', function (e) {
e.preventDefault();
$('#top-ten-language').val($(this).find('option:selected').attr('data-lang-code'));
});
let project_ids = [];
let domains_length = 0;
function auditWebsite(type, domains) {
let generating_el = $('.generating-project-loading');
let next_btn = generating_el.parents('#step-2').find('.next-step');
let back_btn = generating_el.parents('#step-2').find('.prev-step');
let step_4 = $('#step-4');
project_ids = [];
back_btn.hide();
next_btn.disable('Working...');
step_4.find('a.finish').hide();
step_4.find('.ai-wizard-cost-label').hide();
step_4.find('a.prev-step').disable();
$('.top-ten-options').hide();
let top_ten_options = step_4.find('.top-ten-options');
let lang_code = top_ten_options.find('#top-ten-language').val();
let lang = top_ten_options.find('#top-ten-language-select option:selected').val();
let keyword_contain = top_ten_options.find('#keyword_contain').val();
let keyword_contain_text = top_ten_options.find('.main_keyword_contain').val();
let is_relative = top_ten_options.find('#is_relative').val();
requestsRemaining = domains.length * 2; // Counter for remaining requests
domains_length = domains.length;
generating_el.html(`Finding & Clustering Your Keywords...`);
domains.forEach(function (domain) {
$.ajaxq('ProjectQueue', {
type : 'POST',
url : xagio_data.wp_post,
data : `action=xagio_generate_audit&type=${type}&website=${domain}&lang_code=${lang_code}&lang=${lang}&keyword_contain=${keyword_contain}&keyword_contain_text=${keyword_contain_text}&is_relative=${is_relative}`,
success : function (d) {
console.log('finish ' + domain);
if (d.status === 'credits') {
$.ajaxq.clear('ProjectQueue');
generating_el.html(d.message);
xagioNotify("warning", d.message, false, 15);
setTimeout(function () {
document.location.reload();
}, 5000);
} else {
if (d.hasOwnProperty('project_id')) {
generating_el.html(`Processing... ${domain}...`);
processProject(d.project_id);
}
}
},
complete: completeRequests
});
});
}
function completeRequests() {
requestsRemaining--; // Decrement the counter on each completion
if (requestsRemaining === 0) {
console.log('finished all');
// If all requests are completed, redirect
setTimeout(function () {
finalProcessing();
}, 15000);
}
}
function processProject(project_id) {
$.ajaxq('ProjectQueue', {
type : 'POST',
url : xagio_data.wp_post,
data : `action=xagio_generate_phrasematch&project_id=${project_id}`,
success: function (dd) {
project_id = dd.project_id;
project_ids.push(project_id);
},
complete: completeRequests
});
}
function finalProcessing() {
if (domains_length > 1) {
if (project_ids.length < 1) {
let generating_el = $('.generating-project-loading');
generating_el.html(`No keywords found for any of selected websites.`);
return;
}
$.ajaxq('ProjectQueue', {
type : 'POST',
url : xagio_data.wp_post,
data : `action=xagio_combine_projects&project_ids=${project_ids.join(',')}`,
success: function (d) {
if (d.status !== 'error') {
let final_project_id = d.project_id;
$.ajaxq('ProjectQueue', {
type : 'POST',
url : xagio_data.wp_post,
data : `action=xagio_generate_phrasematch&project_id=${final_project_id}`,
success: function (dd) {
redirectToProject(dd.project_id);
}
});
} else {
xagioNotify("warning", d.message, 15);
}
}
});
} else {
redirectToProject(project_ids[project_ids.length - 1]);
}
}
function redirectToProject(project_id) {
setTimeout(function () {
window.location = xagio_data.wp_admin +
'admin.php?page=xagio-projectplanner&pid=' +
project_id;
}, 2000); // Delay for UI effect or final processing
}
$(document).ready(function () {
$(document).on('click', '.sort-groups-asc', function (e) {
$(this).hide();
$('.sort-groups-desc').show();
let groups = $('.project-groups .xagio-group');
let sortedGroups = groups.toArray().sort(function (a, b) {
let valueA = $(a).find('input[name="group_name"]').val().toLowerCase().trim();
let valueB = $(b).find('input[name="group_name"]').val().toLowerCase().trim();
return valueA.localeCompare(valueB);
});
$('.project-groups .data').empty().append(sortedGroups);
actions.updateGrid();
actions.updateElements();
});
$(document).on('click', '.sort-groups-desc', function (e) {
$(this).hide();
$('.sort-groups-asc').show();
let groups = $('.project-groups .xagio-group');
let sortedGroups = groups.toArray().sort(function (a, b) {
let valueA = $(a).find('input[name="group_name"]').val().toLowerCase().trim();
let valueB = $(b).find('input[name="group_name"]').val().toLowerCase().trim();
return valueB.localeCompare(valueA);
});
$('.project-groups .data').empty().append(sortedGroups);
actions.updateGrid();
actions.updateElements();
});
$(document).on('click', '.select-all-recommended-websites', function () {
let current_page_view = $('.show-page.active').data('page');
if ($(`.top-ten-result.recommended.page-${current_page_view}`).length > 0) {
$(`.top-ten-result.recommended.page-${current_page_view}`).each(function () {
$(this).find('.select-website').prop('checked', true).trigger('change');
});
}
});
$(document).on('change', '.select-website', function () {
let count_checked = 0;
$('.top-ten-results .select-website').each(function () {
let checkbox = $(this);
if (checkbox.prop('checked')) {
count_checked++;
}
});
let aiWizardCost = count_checked * actions.allowances.cost.wizards;
let output = actions.xagsCostOutput(aiWizardCost);
$('.ai-wizard-cost-label').find('#xagsCost').html(`This action will cost you ${output}`);
let parsed = actions.parseUrl($(this).val());
let path = parsed.prop('pathname');
if (path === '/') {
$('#is_relative').val(0);
$('span[data-element="is_relative"]').removeClass('on');
} else {
$('#is_relative').val(1);
$('span[data-element="is_relative"]').addClass('on');
}
});
let aiwizard = $('#aiwizard');
$('#top-ten-language-select').select2({
dropdownParent: aiwizard,
matcher : matcher,
placeholder : "Select a Search Engine"
});
$('#top_ten_search_engine').select2({
dropdownParent: aiwizard,
matcher : matcher,
placeholder : "Select a Search Engine"
});
$('#top_ten_search_location').select2({
dropdownParent: aiwizard,
matcher : matcher,
placeholder : "Select a Search Location"
});
$(document).on('select2:open', () => {
let el = $('.select2-search__field:visible');
if (el.hasOwnProperty(0)) {
el[0].focus();
}
});
$(document).on('click', '.show-page', function () {
let btn = $(this);
let show_page = btn.data('page');
let active_page = $('.show-page.active').data('page');
$('.show-page').removeClass('active');
btn.addClass('active');
$(`.page-${active_page}`).fadeOut();
$(`.page-${show_page}`).fadeIn();
});
$(document).on('keyup paste', '#top-ten-location-text, #top-ten-keyword', function () {
let location = $('#top-ten-location-text').val().trim();
let keyword = $('#top-ten-keyword').val().trim();
// if (keyword.indexOf("$") >= 0) {
// keyword = keyword.replace("$", location);
// } else {
// keyword = keyword + " " + location;
// }
if (isOriginalOrder) {
keyword = keyword + " " + location;
} else {
keyword = location + " " + keyword;
}
$('.main-keyword').val(keyword.trim());
$('.keyword-example').html(keyword.trim());
});
$(document).on('click', '#swap-words', function () {
let location = $('#top-ten-location-text').val().trim();
let keyword = $('#top-ten-keyword').val().trim();
let mainKeyword;
if (isOriginalOrder) {
mainKeyword = location + " " + keyword;
} else {
mainKeyword = keyword + " " + location;
}
$('.keyword-example').html(mainKeyword);
$('.main-keyword').val(mainKeyword.trim());
isOriginalOrder = !isOriginalOrder;
});
$(document).on('click', '#step-4 .finish', function (e) {
e.preventDefault();
// Get all checked checkboxes that belong to the class 'select-website'
let selected_websites = $('.top-ten-results input[name="select-website"]:checked');
// Check if at least one website is selected
if (selected_websites.length < 1) {
xagioNotify("warning", "Please select at least one website in table above");
return;
}
let balance = parseInt(actions.allowances.xags_allowance.find('.value').html()) +
parseInt(actions.allowances.xags.find('.value').html());
if (balance < selected_websites.length) {
xagioNotify("warning", "You do not have enough XAGS to perform this operation!");
return;
}
// Collect all selected domains
let domains = selected_websites.map(function () {
return $(this).val();
}).get(); // Assuming you want to send the domains as a comma-separated string
// Hide elements during processing
$(".top-ten-pagination-container").hide();
$(".ai-wizard-buttons").hide();
$('.top-ten-results-info').slideUp();
// Show a loading message
$('.top-ten-results').html(`
<div class="lds-facebook"><div></div><div></div><div></div></div>
<p class="xagio-text-center generating-project-loading">Finding & Clustering Your Keywords for you... (Please do not close, refresh or leave this page) <br> Once completed you will be redirected to your project.</p>
`);
// Call the auditWebsite function with the collected domains
auditWebsite('Wizard', domains);
});
$(document).on('click', '.search-top-ten', function (e) {
e.preventDefault();
let websites_holder = $('.top-ten-results');
let btn = $(this);
let main_keyword = $('.main-keyword').val();
let keyword = $('.top-websites-keyword').val();
let location = $('#top-ten-location-text').val();
let search_engine = $('#top_ten_search_engine').val();
let search_engine_text = $('#top_ten_search_engine option:selected').text();
let search_location = $('#top_ten_search_location').val();
let search_location_text = $('#top_ten_search_location option:selected').text();
let top_ten_results_info = $('.top-ten-results-info');
let step_4 = $('#step-4');
step_4.find('a.finish').hide();
step_4.find('.ai-wizard-cost-label').hide();
step_4.find('a.prev-step').hide();
top_ten_results_info.hide();
if (main_keyword.length < 1) {
xagioNotify("warning", "Please enter any keyword that best describes your business");
return false;
}
if (main_keyword.length > 80) {
xagioNotify("warning", "Keyword phrase must be lower then 80 characters long");
return false;
}
websites_holder.html(`
<div class="lds-facebook"><div></div><div></div><div></div></div>
<p class="xagio-text-center xag-loading-plugins">Loading... (Please do not close, refresh or leave this page)</p>
`);
$('.main_keyword_contain').val(location);
$('#top-ten-language-select option').each(function () {
$(this).attr('selected', false);
if ($(this).text().includes(search_location_text)) {
$(this).attr('selected', true);
$('#top-ten-language-select').trigger('change');
}
});
btn.disable();
$.post(xagio_data.wp_post, `action=xagio_get_top_ten&main-keyword=${main_keyword}&location=${location}&keyword=${keyword}&search_engine=${search_engine}&search_location=${search_location}&search_engine_text=${search_engine_text}&search_location_text=${search_location_text}`, function (d) {
top_ten_results_info.slideDown();
btn.disable();
step_4.find('a.finish').show();
step_4.find('.ai-wizard-cost-label').show();
step_4.find('a.prev-step').show();
if (d.status === 'error') {
xagioNotify("danger", d.message);
return;
}
let html = '';
let page = 1;
let pages = [];
for (let i = 0; i < d.data.length; i++) {
let website_row = $('.top-ten-result-template.template').clone().removeClass('template');
let for_id = `select-website${i + 1}`;
let website = d.data[i];
website_row.find('.website-position').html(`#${website['position']}`);
website_row.find('.select-website').attr('id', for_id).val(website['url']);
website_row.find('.g-url').html(website['url']).attr('href', website['url']);
website_row.find('.g-title').html(website['title']).attr('for', for_id);
website_row.find('.g-desc').html(website['snippet']);
if (website['recommended'] === true) {
website_row.find('.top-ten-result').addClass('recommended');
}
if (website['listing'] === true) {
website_row.find('.top-ten-result').addClass('not-recommended');
//website_row.find('.select-website').remove();
}
if (i % 10 === 0) {
pages.push((i / 10) + 1);
page = (i / 10) + 1;
}
website_row.find('.top-ten-result').addClass(`page-${page}`);
html += website_row.html();
}
let pagination = '<div class="top-ten-pagination">';
for (let i = 0; i < pages.length; i++) {
pagination += `<span class="show-page ${i ===
0 ? 'active' : ''}" data-page="${pages[i]}">${pages[i]}</span>`;
}
pagination += '</div>';
$('.top-ten-pagination-container').html(pagination);
websites_holder.html(html);
$('.top-ten-options').slideDown();
});
});
$(document).on('click', '.mistake', function (e) {
e.preventDefault();
$('.aiwizard').hide();
$('.aiwizard-start').fadeIn();
window.history.replaceState({}, document.title, document.location.href.replace(/#.+/, ""));
});
$(document).on('click', '.stop-aiwizard', function (e) {
e.preventDefault();
let modal = $("#aiwizard");
window.history.replaceState({}, document.title, document.location.href.replace(/#.+/, ""));
modal[0].close();
});
$('#aiwizard')[0].addEventListener("close", (event) => {
$('.aiwizard-wizard').smartWizard("reset");
$('.top-ten-options').hide();
$('.aiwizard-start').show();
$('.aiwizard').hide();
});
$(document).on('click', '.option-picker', function () {
let option = $(this).attr('data-type');
$('#aiwizard-type').val(option);
let step1 = $('#step-1');
let step2 = $('#step-2');
if (option === 'affiliate') {
$('.step-1-header').html('Main Niche');
$('.step-2-header').html('Site Type');
if (step1.find('.step-input #top-ten-location-text').length > 0) {
step1.find('.step-text').html(`What is the main <b>niche</b> of your website`);
step1.find('.help').html(``);
step2.find('.step-text').html(`What type of site are you building`);
let input1 = step1.find('.step-input #top-ten-location-text').clone().remove();
let input2 = step2.find('.step-input #top-ten-keyword').clone().remove();
input1.attr('placeholder', 'e.g. review, bonus...');
input2.attr('placeholder', 'e.g. weight loss, dedicated hosting...');
step1.find('.step-input').html(input2);
step2.find('.step-input').html(input1);
$('#keyword_contain').val(1);
$('span[data-element="keyword_contain"]').addClass('on');
}
} else {
$('.step-1-header').html('Location');
$('.step-2-header').html('Services');
if (step1.find('.step-input #top-ten-keyword').length > 0) {
step1.find('.step-text').html(`In what <b class="with-underscore">City</b> is your Business located at?`);
step1.find('.help').html(`You can leave this empty, however, it is always recommended to include City for your Businesses.`);
step2.find('.step-text').html(`Enter a <b class="with-underscore">Keyword</b> that best describes your Business`);
let input1 = step1.find('.step-input #top-ten-keyword').clone().remove();
let input2 = step2.find('.step-input #top-ten-location-text').clone().remove();
input1.attr('placeholder', 'e.g. pool cleaning');
input2.attr('placeholder', 'e.g. austin');
step1.find('.step-input').html(input2);
step2.find('.step-input').html(input1);
$('#keyword_contain').val(0);
$('span[data-element="keyword_contain"]').removeClass('on');
}
}
$('.aiwizard-start').fadeOut(function () {
$('.aiwizard').fadeIn();
});
});
$(document).on('click', '.select-type', function () {
$('.aiwizard').fadeOut(function () {
$('.aiwizard-start').fadeIn();
});
$('.aiwizard-wizard').smartWizard("reset");
});
$('.aiwizard-wizard').smartWizard({
theme : 'arrows',
toolbar : {
position : 'none',
showNextButton : false,
showPreviousButton: false,
},
autoAdjustHeight: false
});
$(document).on('keydown', '#top-ten-keyword, #top-ten-location-text', function (e) {
e.stopPropagation();
let input = $(this);
let keyword = input.val();
if (e.keyCode === 13) {
e.preventDefault();
if (keyword.length < 1) {
let message = 'Please enter main niche of your website!';
if (input.attr('id') === 'top-ten-location-text') {
message = 'Please enter location of your business!';
}
xagioNotify("warning", message);
return false;
}
if ($('#step-2').is(':visible')) {
$('.search-top-ten').trigger('click');
}
let w = $('.aiwizard-wizard');
w.smartWizard("next");
}
});
$(document).on('click', '.next-step', function (e) {
e.preventDefault();
let parent = $(this).parents('.tab-pane');
let input = parent.find('#top-ten-location-text');
if (input.length < 1) {
input = parent.find('#top-ten-keyword');
}
let keyword = input.val();
if (keyword.length < 1) {
let message = 'Please enter main niche of your website!';
if (input.attr('id') === 'top-ten-location-text') {
message = 'Please enter location of your business!';
}
xagioNotify("warning", message);
return false;
}
let w = $('.aiwizard-wizard');
w.smartWizard("next");
});
$(document).on('click', '.prev-step', function (e) {
e.preventDefault();
let w = $('.aiwizard-wizard');
w.smartWizard("prev");
});
});
},
showShortcodes: function () {
$(document).on('click', '.groupInput[name="h1"]', function (e) {
e.preventDefault();
if (typeof $(this).attr('value-shortcoded') == 'undefined') return;
if ($(this).val() !== $(this).attr('value-original')) {
$(this).val($(this).attr('value-original'));
}
});
$(document).on('mouseenter', '.groupInput[name="h1"]', function (e) {
e.preventDefault();
if (typeof $(this).attr('value-shortcoded') == 'undefined') return;
$(this).val($(this).attr('value-shortcoded'));
});
$(document).on('mouseleave', '.groupInput[name="h1"]', function (e) {
e.preventDefault();
if (typeof $(this).attr('value-shortcoded') == 'undefined') return;
$(this).val($(this).attr('value-original'));
});
$(document).on('keyup', '.groupInput[name="h1"]', function (e) {
e.preventDefault();
if (typeof $(this).attr('value-shortcoded') == 'undefined') return;
$(this).attr('value-original', $(this).val());
});
$(document).on('keyup', '.prs-h1tag', function (e) {
e.preventDefault();
$(this).prev().val($(this).html());
});
$(document).on('keyup', '.prs-editor', function (e) {
e.preventDefault();
if (typeof $(this).prev().attr('value-shortcoded') == 'undefined') return;
$(this).prev().attr('value-original', $(this).html());
});
$(document).on('click', '.prs-editor', function (e) {
e.preventDefault();
if (typeof $(this).prev().attr('value-shortcoded') == 'undefined') return;
if ($(this).html() !== $(this).prev().attr('value-original')) {
$(this).html($(this).prev().attr('value-original'));
}
});
$(document).on('mouseenter', '.prs-editor', function (e) {
e.preventDefault();
if (typeof $(this).prev().attr('value-shortcoded') == 'undefined') return;
$(this).html($(this).prev().attr('value-shortcoded'));
});
$(document).on('mouseleave', '.prs-editor', function (e) {
e.preventDefault();
if (typeof $(this).prev().attr('value-shortcoded') == 'undefined') return;
$(this).html($(this).prev().attr('value-original'));
});
},
runBatchCron: function () {
clearTimeout(batchCron);
batchCron = setTimeout(function () {
$.post(xagio_data.wp_post, 'action=xagio_checkBatchCron', function (d) {
if (d.status == 'change' || d.status == 'done') {
actions.loadProjectManually();
}
if (d.status != 'done') {
actions.runBatchCron();
}
});
}, 5000);
},
runVolCPCBatchCron: function () {
clearTimeout(volCpcBatchCron);
volCpcBatchCron = setTimeout(function () {
$.post(xagio_data.wp_post, 'action=xagio_checkVolCPCBatchCron', function (d) {
if (d.status == 'change' || d.status == 'done') {
actions.loadProjectManually();
}
if (d.status != 'done') {
actions.runVolCPCBatchCron();
}
});
}, 5000);
},
initGlobalCloud: function () {
let btn = $('.global-wordCloud');
$('.xagio-keyword-cloud-global').removeClass('generated').empty();
$('.seed-keywords-global').hide();
btn.removeClass('open');
btn.attr('data-xagio-title', 'Open Global Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud');
$('.xagio-tooltip').remove();
$('.keywords-action-button').html('Keywords <i class="xagio-icon xagio-icon-arrow-down"></i>');
$('.seedKeyword').html('Seed Keywords');
selected_seed_keywords = [];
$('.seed-keywords-inputs').empty();
$('.seed-keywords-panel-start').show();
$('.seed-keywords-panel-select').hide();
},
wordCountCloud : function () {
$(document).on('click', '.global-wordCloud', function (e) {
e.preventDefault();
let cloudBoxTemplate = $('.cloud.template.hide').clone();
cloudBoxTemplate.removeClass('hide').show().addClass('seen');
let btn = $(this);
let cloudKeyword = $('.xagio-keyword-cloud-global');
if (btn.hasClass('open')) {
$('.seed-keywords-global').hide();
if (cloudKeyword.hasClass('generated')) {
btn.removeClass('open');
btn.attr('data-xagio-title', 'Open Global Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud');
$('.xagio-tooltip').remove();
$('.keywords-action-button').html('Keywords <i class="xagio-icon xagio-icon-arrow-down"></i>');
$('.seedKeyword').html('Seed Keywords');
// Remove b tag from keywords
$('.xagio-group').find('.updateKeywords').find('.keywordInput[data-target="keyword"]').each(function () {
$(this).html($(this).html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
});
// remove selected from the table
$('.xagio-group').find('tr.selected').each(function () {
$(this).removeClass('selected');
$(this).find("input.keyword-selection").prop('checked', false);
});
$('.seed-keywords-inputs').empty();
selected_seed_keywords = [];
$('.seed-keywords-panel-start').show();
$('.seed-keywords-panel-select').hide();
cloudKeyword.toggle();
setTimeout(function () {
$(".jqcloud").css("display", "block").resize();
}, 500);
}
} else {
$('.seed-keywords-global').show();
if (!cloudKeyword.hasClass("generated")) {
let tbody_keywords = $('.xagio-group').find('.updateKeywords').find('.keywords').find('.keywords-data tr').find('div.keywordInput[data-target="keyword"]');
let keywords = [];
tbody_keywords.each(function () {
keywords.push($(this).text());
});
if (keywords.length > 0) {
cloudKeyword.html(cloudBoxTemplate);
cloudBoxTemplate.jQCloud(actions.calculateAndTrim(keywords), {
colors : [
"#ffffff",
"#FAF9F6",
"#F1F0ED",
"#E5E4E2",
"#D9D8D6"
],
autoResize: true,
height : 300,
fontSize : {
from: 0.07,
to : 0.02
}
});
setTimeout(function () {
$(".jqcloud").css("display", "block").resize();
}, 500);
cloudKeyword.addClass('generated');
btn.addClass('open');
btn.attr('data-xagio-title', 'Close Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud-o');
$('.xagio-tooltip').remove();
} else {
btn.removeClass('open');
xagioNotify("warning", "No keywords for this group");
}
} else {
btn.addClass('open');
btn.attr('data-xagio-title', 'Close Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud-o');
$('.xagio-tooltip').remove();
cloudKeyword.toggle();
$(".jqcloud").css("display", "block").resize();
}
}
actions.updateGrid();
});
$(document).on('click', '.wordCloud', function () {
let cloudBoxTemplate = $('.cloud.template.hide').clone();
cloudBoxTemplate.removeClass('hide').show().addClass('seen');
let btn = $(this);
let cloudKeyword = btn.parents('.xagio-group').find('.xagio-keyword-cloud');
if (btn.hasClass('open')) {
if (cloudKeyword.hasClass('generated')) {
btn.removeClass('open');
btn.attr('data-xagio-title', 'Open Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud');
$('.xagio-tooltip').remove();
for (let m = 0; m < 15; m++) {
// Remove b tag from title, desciption, url, H1
btn.parents('.xagio-group').find('.prs-title').html(btn.parents('.xagio-group').find('.prs-title').html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
btn.parents('.xagio-group').find('.prs-description').html(btn.parents('.xagio-group').find('.prs-description').html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
btn.parents('.xagio-group').find('.url-edit').html(btn.parents('.xagio-group').find('.url-edit').html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
btn.parents('.xagio-group').find('.prs-h1tag').html(btn.parents('.xagio-group').find('.prs-h1tag').html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
// Remove b tag from keywords
btn.parents('.xagio-group').find('.updateKeywords').find('.keywordInput[data-target="keyword"]').each(function () {
$(this).html($(this).html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
});
}
cloudKeyword.toggle();
$(".jqcloud").css("display", "block").resize();
}
// let thisCont = btn.parents('.xagio-group').find('.cloud.template.seen.jqcloud');
// if (thisCont.length > 0) {
// thisCont.jQCloud('destroy');
// thisCont.slideUp("normal", function () {
// $(this).remove();
// actions.updateGrid();
// });
// }
} else {
if (!cloudKeyword.hasClass("generated")) {
let tbody_keywords = btn.parents('.xagio-group').find('.updateKeywords').find('.keywords').find('.keywords-data tr').find('div.keywordInput[data-target="keyword"]');
let keywords = [];
tbody_keywords.each(function () {
keywords.push($(this).text());
});
if (keywords.length > 0) {
btn.parents('.xagio-group').find('.xagio-keyword-cloud').html(cloudBoxTemplate);
cloudBoxTemplate.jQCloud(actions.calculateAndTrim(keywords), {
colors : [
"#ffffff",
"#FAF9F6",
"#F1F0ED",
"#E5E4E2",
"#D9D8D6"
],
autoResize: true,
height : 350,
fontSize : {
from: 0.07,
to : 0.02
}
});
$(".jqcloud").css("display", "block").resize();
cloudKeyword.addClass('generated');
btn.addClass('open');
btn.attr('data-xagio-title', 'Close Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud-o');
$('.xagio-tooltip').remove();
} else {
btn.removeClass('open');
xagioNotify("warning", "No keywords for this group");
}
} else {
btn.addClass('open');
btn.attr('data-xagio-title', 'Close Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud-o');
$('.xagio-tooltip').remove();
cloudKeyword.toggle();
$(".jqcloud").css("display", "block").resize();
}
}
actions.updateGrid();
});
},
expandCollapseFunctions: function () {
$(document).on('click', '.collapseAllGroups', function (e) {
e.preventDefault();
actions.collapseKeywordGroups();
actions.collapseSettingsBody();
actions.updateGrid();
// $('.data').trigger('display.uk.check');
});
$(document).on('click', '.expandAllGroups', function (e) {
e.preventDefault();
$(this).disable();
actions.expandKeywordGroups();
actions.expandGroupNotes();
actions.expandGroupWordCount();
actions.expandSettingsBody();
actions.updateGrid();
// $('.data').trigger('display.uk.check');
$(this).disable();
});
$(document).on('click', '.expandKeywordGroups', function (e) {
e.preventDefault();
actions.expandKeywordGroups();
$('.minimizeGroup').each(function () {
let btn = $(this);
btn.removeClass('kw-opened');
btn.attr('data-xagio-title', 'Hide Keywords');
btn.find('i').removeClass('xagio-icon-eye').addClass('xagio-icon-eye-o');
$('.xagio-tooltip').remove();
});
actions.updateGrid();
// $('.data').trigger('display.uk.check');
});
$(document).on('click', '.collapseKeywordGroups', function (e) {
e.preventDefault();
actions.collapseKeywordGroups();
$('.minimizeGroup').each(function () {
let btn = $(this);
btn.addClass('kw-opened');
btn.attr('data-xagio-title', 'Show Keywords');
btn.find('i').removeClass('xagio-icon-eye-o').addClass('xagio-icon-eye');
$('.xagio-tooltip').remove();
});
// $('.data').trigger('display.uk.check');
});
},
expandKeywordGroups : function () {
$('.updateKeywords').each(function () {
$(this).removeClass('hidden');
});
$('.minimizeGroup').each(function () {
$(this).attr('data-xagio-title', 'Hide Keywords').find('i').removeClass('xagio-icon-eye').addClass('xagio-icon-eye-o');
});
},
expandGroupNotes : function () {
$('.notes-row').each(function () {
$(this).show();
});
$('.openNotes').each(function () {
$(this).addClass('notesOpened');
$(this).attr('data-xagio-title', 'Close Notes');
$(this).find('i').removeClass().addClass('xagio-icon xagio-icon-note-o');
});
},
expandGroupWordCount : function () {
$('.wordCloud').each(function () {
let btn = $(this);
if (btn.hasClass('open')) return;
let cloudBoxTemplate = $('.cloud.template.hide').clone();
cloudBoxTemplate.removeClass('hide').show().addClass('seen');
let cloudKeyword = btn.parents('.xagio-group').find('.xagio-keyword-cloud');
if (!cloudKeyword.hasClass("generated")) {
cloudKeyword.addClass('generated');
btn.addClass('open');
btn.attr('data-xagio-title', 'Close Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud-o');
let tbody_keywords = btn.parents('.xagio-group').find('.updateKeywords').find('.keywords').find('.keywords-data tr').find('div.keywordInput[data-target="keyword"]');
let keywords = [];
tbody_keywords.each(function () {
keywords.push($(this).text());
});
if (keywords.length > 0) {
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud-o');
btn.parents('.xagio-group').find('.xagio-keyword-cloud').html(cloudBoxTemplate);
cloudBoxTemplate.jQCloud(actions.calculateAndTrim(keywords), {
delay : 50,
colors : [
"#ffffff",
"#FAF9F6",
"#F1F0ED",
"#E5E4E2",
"#D9D8D6"
],
autoResize: true,
height : 350,
fontSize : {
from: 0.1,
to : 0.03
}
});
actions.updateGrid();
$(".jqcloud").css("display", "block").resize();
}
} else {
btn.addClass('open');
btn.attr('data-xagio-title', 'Close Word Cloud');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud-o');
$(".jqcloud").css("display", "block").resize();
cloudKeyword.show();
}
});
},
collapseKeywordGroups : function () {
$('.updateKeywords').each(function () {
$(this).removeClass('hidden').addClass('hidden');
$(this).parents('.xagio-group').find('.minimizeGroup').attr('data-xagio-title', 'Hide Keywords').find('i').removeClass('xagio-icon-eye-o').addClass('xagio-icon-eye');
});
$('.minimizeGroup').each(function () {
$(this).attr('data-xagio-title', 'Hide Keywords').find('i').removeClass('xagio-icon-eye-o').addClass('xagio-icon-eye');
});
actions.updateGrid();
},
expandSettingsBody : function () {
$('.groupSettingsTbody').each(function () {
$(this).css('display', 'table-row-group');
});
},
collapseSettingsBody : function () {
$('.xagio-group').each(function () {
$(this).find('.notes-row').hide();
let notes_btn = $(this).find('.openNotes');
notes_btn.removeClass('notesOpened');
notes_btn.attr('data-xagio-title', 'Open Notes');
notes_btn.find('i').removeClass().addClass('xagio-icon xagio-icon-note');
let cloudBtn = $(this).find('.wordCloud');
cloudBtn.attr('data-xagio-title', 'Open Word Cloud');
cloudBtn.removeClass('open');
cloudBtn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud');
cloudBtn.parents('.xagio-group').find('.updateKeywords').find('.keywordInput[data-target="keyword"]').unhighlight();
cloudBtn.parents('.xagio-group').find('.prs-title').unhighlight();
cloudBtn.parents('.xagio-group').find('.prs-description').unhighlight();
cloudBtn.parents('.xagio-group').find('.xagio-keyword-cloud').hide();
//
// let thisCont = cloudBtn.parents('.xagio-group').find('.cloud.template.seen.jqcloud');
//
// if (thisCont.length > 0) {
// thisCont.jQCloud('destroy');
// thisCont.slideUp("normal", function () {
// $(this).remove();
// actions.updateGrid();
// });
// }
});
},
keywordInputKeypress : function () {
$(document).on('keypress', '.keywordInput', function () {
activeChanges = true;
});
$(document).on('keypress', '[contenteditable="true"]', function () {
activeChanges = true;
});
},
addGroupFromExistingTaxonomy: function () {
$(document).on('click', '.addGroupFromExistingTaxonomy', function (e) {
e.preventDefault();
selectedTaxonomies = [];
$('.selected-taxonomies').html('');
let addGroupModal = $('#addGroupFromExistingTaxonomyModal');
addGroupModal[0].showModal();
});
$(document).on('change', '.select-taxonomy', function () {
let checked = $(this).is(':checked');
let val = $(this).val();
if (checked) {
selectedTaxonomies.push(val);
} else {
selectedTaxonomies.splice($.inArray(val, selectedTaxonomies), 1);
}
if (selectedTaxonomies.length < 1) {
$('.selected-taxonomies').html('');
} else {
$('.selected-taxonomies').html(`(${selectedTaxonomies.length})`);
}
});
$(document).on('change', '.select-taxonomies-all', function () {
let checked = $(this).is(':checked');
$('.taxonomiesTableCreate').find('.select-taxonomy').each(function () {
$(this).prop('checked', checked);
$(this).trigger('change');
});
});
$(document).on('click', '.add-group-from-existing-taxonomy', function (e) {
e.preventDefault();
let btn = $(this);
btn.disable();
if (selectedTaxonomies.length < 1) {
xagioNotify("danger", "You must first select some taxonomies first!");
return;
}
$.post(xagio_data.wp_post, 'action=xagio_make_groups_from_taxonomies&ids=' +
selectedTaxonomies.join(',') + '&project_id=' +
currentProjectID, function (d) {
$('#addGroupFromExistingTaxonomyModal')[0].close();
btn.disable();
xagioNotify("success", d.message);
actions.loadProjectManually();
});
});
},
addGroupFromExisting : function () {
$(document).on('click', '.addGroupFromExisting', function (e) {
e.preventDefault();
selectedPosts = [];
$('.selected-posts').html('');
let addGroupModal = $('#addGroupFromExistingModal');
addGroupModal[0].showModal();
});
$(document).on('change', '.select-post', function () {
let checked = $(this).is(':checked');
let val = $(this).val();
if (checked) {
selectedPosts.push(val);
} else {
selectedPosts.splice($.inArray(val, selectedPosts), 1);
}
if (selectedPosts.length < 1) {
$('.selected-posts').html('');
} else {
$('.selected-posts').html(`(${selectedPosts.length})`);
}
});
$(document).on('change', '.select-posts-all', function () {
let checked = $(this).is(':checked');
$('.postsTable2').find('.select-post').each(function () {
$(this).prop('checked', checked);
$(this).trigger('change');
});
});
$(document).on('click', '.add-group-from-existing', function (e) {
e.preventDefault();
let btn = $(this);
btn.disable();
if (selectedPosts.length < 1) {
xagioNotify("danger", "You must select some posts first!");
return;
}
$.post(xagio_data.wp_post, 'action=xagio_make_groups&ids=' + selectedPosts.join(',') + '&project_id=' +
currentProjectID, function (d) {
$('#addGroupFromExistingModal')[0].close();
btn.disable();
xagioNotify("success", d.message);
actions.loadProjectManually();
});
});
},
selectAllPagePosts : function () {
$(document).on('click', '.select-all-page-posts', function () {
let btn = $(this);
if (btn.hasClass('selected')) {
$("#posts_pages > option").removeAttr("selected").trigger("change");
btn.removeClass('uk-button-danger selected').addClass('uk-button-success');
btn.html('<i class="xagio-icon xagio-icon-plus"></i> Select All');
} else {
$('#posts_pages > option').prop("selected", "selected").trigger("change");
btn.removeClass('uk-button-success').addClass('uk-button-danger selected');
btn.html('<i class="xagio-icon xagio-icon-minus"></i> Deselect All');
}
});
},
deleteRedirect : function () {
$(document).on('click', '.delete-redirect', function (e) {
e.preventDefault();
let button = $(this);
let id = $(this).data('id');
button.disable();
xagioModal("Are you sure?", "Are you sure that you want to delete this redirect?", function (yes) {
if (yes) {
$.post(xagio_data.wp_post, 'action=xagio_delete_redirect&id=' + id, function (d) {
button.disable();
actions.loadRedirects();
});
} else {
button.disable();
}
});
});
},
addNewRedirect : function () {
$(document).on('click', '.add-new-redirect', function (e) {
e.preventDefault();
let button = $(this);
xagioPromptModal("Confirm", "Old URL (use the /oldurl/ format):", function (result) {
if (result) {
let old_url = result;
xagioPromptModal("Confirm", "Redirect to URL (use the /newurl/ format) (DANGER: Creating invalid redirects may result in breaking of your website):", function (result) {
if (result) {
button.disable('Saving...');
let new_url = result;
$.post(xagio_data.wp_post, 'action=xagio_add_redirect&oldURL=' + old_url + '&newURL=' +
new_url, function (d) {
button.disable();
actions.loadRedirects();
});
}
});
}
});
});
},
loadRedirects : function () {
let messages = {
empty : '<tr><td colspan="4">Can\'t find any active redirects.</td></tr>',
loading: '<tr><td colspan="4"><i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i> Loading ...</td></tr>'
};
let table = $('.table-redirects');
let tbody = table.find('tbody');
tbody.empty().append(messages.loading);
$.post(xagio_data.wp_post, 'action=xagio_get_redirects', function (d) {
if (d.status == 'success') {
if (d.data.length == 0) {
tbody.empty().append(messages.empty);
} else {
tbody.empty();
for (let i = 0; i < d.data.length; i++) {
let data = d.data[i];
let html = '<tr>' + '<td><a target="_blank" href="/' + data.old + '">/' + data.old +
'</a></td>' + '<td><a target="_blank" href="/' + data.new + '">/' + data.new +
'</a></td>' +
'<td><button type="button" class="xagio-button xagio-button-danger xagio-button-mini delete-redirect" data-id="' +
data.id +
'" title="Delete this redirect"><i class="xagio-icon xagio-icon-delete"></i></button></td>' +
'</tr>';
tbody.append(html);
}
}
} else {
xagioNotify("danger", "An unknown error has occurred.");
}
});
},
minimizeGroup : function () {
$(document).on('click', '.minimizeGroup', function () {
let i = $(this).find('i');
let kw = $(this).parents('.xagio-group').find('.updateKeywords');
let btn = $(this);
if (btn.hasClass('kw-opened')) {
btn.removeClass('kw-opened');
btn.attr('data-xagio-title', 'Hide Keywords');
$('.xagio-tooltip').remove();
} else {
btn.addClass('kw-opened');
btn.attr('data-xagio-title', 'Show Keywords');
$('.xagio-tooltip').remove();
}
i.toggleClass('xagio-icon-eye xagio-icon-eye-o');
kw.toggleClass('hidden');
actions.updateGrid();
// btn.parents('.xagio-group').trigger('display.uk.check');
});
},
selectKeyword : function () {
$(document).on('change', '.keyword-selection', function () {
let tr = $(this).parents('tr');
if (!tr.hasClass('selected')) {
tr.addClass('selected');
}
});
},
submitKeywordsForRanking : function () {
$(document).on('submit', '#rankTrackingForm', function (e) {
e.preventDefault();
let btn = $(this).find('.submitKeywords');
btn.attr('disabled', true);
let ranking_modal = $('#rankTrackingModal');
let form_data = $(this).serialize();
// add location name
let loc_name = $('#search_location').val() == null ? $('#search_country option:selected').text() : $('#search_location option:selected').text();
let loc_name_query = '&locname=' + loc_name;
$.post(xagio_data.wp_post, 'action=xagio_track_keywords_add&' + form_data +
loc_name_query, function (d) {
btn.attr('disabled', false);
ranking_modal[0].close();
actions.loadProjectManually();
actions.refreshXags();
if (d.status == 'error') {
xagioNotify("danger", d.message);
} else {
xagioNotify("success", d.message);
}
});
});
},
trackRankings : function () {
$(document).on('click', '.track_rankings', function (e) {
e.preventDefault();
if (!xagio_data.connected) {
xagioConnectModal();
return;
}
let group = $(this).parents('.xagio-group');
let ids = [];
let keywords = [];
let btn = $(this);
let type = btn.data('type');
if (type === "all") {
let checked = $('.keyword-selection:checked');
let checkboxesToUse = checked.length > 0
? checked
: $('.keyword-selection');
checkboxesToUse.each(function () {
let tr = $(this).parents('tr');
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').text().trim();
let id = tr.data('id');
if (kw != '') {
ids.push(id);
keywords.push(kw);
}
});
} else {
let selectedCheckboxes = group.find('.keyword-selection:checked');
let checkboxesToUse = selectedCheckboxes.length >
0 ? selectedCheckboxes : group.find('.keyword-selection');
checkboxesToUse.each(function () {
let tr = $(this).parents('tr');
let kw = tr.find('.keywordInput[data-target="keyword"]').text().trim();
let id = tr.data('id');
if (kw !== '') {
ids.push(id);
keywords.push(kw);
}
});
selectedCheckboxes.prop('checked', false);
}
if (keywords.length < 1) {
xagioNotify("danger", "No keywords found!");
return false;
}
let rank_insert_cost = parseFloat(keywords.length * actions.allowances.cost.rank_insert).toFixed(2);
let output = actions.xagsCostOutput(rank_insert_cost);
let ranking_modal = $('#rankTrackingModal');
ranking_modal.find('#xagsCost').html(`This action will cost you ${output}`);
ranking_modal[0].showModal();
ranking_modal.find('input[name="keywords"]').val(keywords.join(','));
ranking_modal.find('#search_engine').select2({
matcher: matcher,
dropdownParent: ranking_modal,
placeholder: "Select a Search Engine",
width: '100%'
});
ranking_modal.find('#search_country').select2({
dropdownParent: ranking_modal,
placeholder: "Select a Country",
width: '100%'
});
ranking_modal.find('#search_location').select2({
dropdownParent: ranking_modal,
width: "100%",
placeholder: "Select a Location",
allowClear: true,
ajax: {
url: xagio_data.wp_post,
type: 'POST',
dataType: 'json',
delay: 250,
data: function (params) {
return {
action: 'xagio_get_cities',
q: params.term,
countryCode: $('#search_country').find('option:selected').data('countrycode'),
page: params.page || 1,
_xagio_nonce: xagio_data.nonce
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.data.items,
pagination: {
more: data.data.more
}
}
},
cache: true
},
minimumInputLength: 3,
});
});
$(document).on('click', '.ranking-kw-select', function () {
let checkbox = $(this);
let keyword_id = checkbox.data('value');
let keyword = checkbox.data('keyword');
let modal = checkbox.parents('#rankTrackingModal');
let keyword_names_input = modal.find('#keywords')
let keyword_names = keyword_names_input.val();
keyword_names = keyword_names.split(',');
if (jQuery.inArray(keyword.toString(), keyword_names) !== -1) {
keyword_names.splice($.inArray(keyword.toString(), keyword_names), 1);
} else {
keyword_names.push(keyword);
}
keyword_names_input.val(keyword_names.join(','));
});
$('#rankTrackingModal').on({
'hide.uk.modal': function () {
let ranking_modal = $('#rankTrackingModal');
ranking_modal.find('.tagsinput').remove();
}
});
$(document).on('submit', '#rankTrackingDefaultCountryForm', function (e) {
e.preventDefault();
let form = $(this);
let btn = form.find('.submitDefaultCountry')
let modal = form.parents('.xagio-modal');
btn.disable("Saving...");
let country = form.find('#search_country_data').val();
let params = new FormData();
params.append('action', 'xagio_set_default_country');
params.append('data', country);
$.ajax({
url : xagio_data.wp_post,
type : 'POST',
data : params,
processData: false, // Necessary for FormData
contentType: false, // Necessary for FormData
success : function (d) {
btn.disable(); // Properly disable the button
if (modal.length > 0) { // Assuming 'modal' is correctly initialized
modal[0].close(); // Close the modal if it's open
}
form.find('#search_country_data').val('').trigger('change'); // Clear Select2
xagioNotify(d.status, d.message);
}
});
});
$(document).on('submit', '#rankTrackingDefaultForm', function (e) {
e.preventDefault();
let form = $(this);
let btn = form.find('.submitDefaultEngine')
let modal = form.parents('.xagio-modal');
btn.disable("Saving...");
let engines = form.find('#search_engine_data').val();
try {
engines = JSON.parse(engines);
} catch (error) {
engines = [];
}
let params = new FormData();
params.append('action', 'xagio_set_default_search_engine');
for (let i = 0; i < engines.length; i++) {
const engine = engines[i];
params.append(`data[${i}][id]`, engine.id);
params.append(`data[${i}][text]`, engine.text);
}
$.ajax({
url : xagio_data.wp_post,
type : 'POST',
data : params,
processData: false, // Necessary for FormData
contentType: false, // Necessary for FormData
success : function (d) {
btn.disable();
// btn.prop('disabled', true); // Properly disable the button
if (modal.length > 0) { // Assuming 'modal' is correctly initialized
modal[0].close(); // Close the modal if it's open
}
form.find('#search_engine_data').val('').trigger('change'); // Clear Select2
xagioNotify(d.status, d.message);
}
});
});
$(document).on('change', '#search_country', function (e) {
let changeDefaultCountryModal = $('#rankTrackingDefaultCountry');
let country = $(this).val();
if (country != '') {
changeDefaultCountryModal.find('#search_country_data').val(country);
$("#search_location").empty().trigger('change');
changeDefaultCountryModal[0].showModal();
}
});
$(document).on('change', '#search_engine', function () {
let select = $(this);
let data = select.select2('data');
let se = [];
let local = true;
let changeDefaultEngineModal = $('#rankTrackingDefault');
if (data.length >= 1) {
let searchEngine = [];
for (let i = 0; i < data.length; i++) {
let id = data[i].id;
let text = data[i].text;
let sd = {
'id' : id,
'text': text
}
searchEngine.push(sd);
}
changeDefaultEngineModal.find('#search_engine_data').val(JSON.stringify(searchEngine));
changeDefaultEngineModal[0].showModal();
}
for (let i = 0; i < data.length; i++) {
let selected = data[i].text;
se.push(selected);
}
for (let k = 0; k < se.length; k++) {
if (se[k].indexOf('Google') == -1) {
local = false;
}
}
if (data.length < 1) {
local = false;
}
if (local) {
$('#local_track').attr('disabled', false);
$('#local_fieldset').attr('disabled', false);
} else {
$('#local_track').attr('disabled', true).attr('checked', false);
$('#local_track').removeClass('on').addClass('off');
$('.local_fieldset').attr('disabled', true).fadeOut();
}
});
$(document).on('click', '#local_track', function () {
let checkbox = $(this);
let local_fields = $('.local_fieldset');
if (checkbox.attr('disabled') == 'disabled') {
return false;
}
if ($(this).hasClass('on')) {
$(this).removeClass('on').addClass('off');
local_fields.attr('disabled', true).fadeOut();
} else {
$(this).removeClass('off').addClass('on');
local_fields.attr('disabled', false).fadeIn();
}
});
},
selectAllGroups : function () {
$(document).on('click', '.selectAllGroups', function (e) {
e.preventDefault();
$('.project-groups .groupSelect').prop('checked', !$('.project-groups .groupSelect').prop('checked'));
});
},
moveSelectedGroups : function () {
$(document).on('click', '.moveSelectedGroups', function (e) {
e.preventDefault();
let input = $('#moveToProjectInput');
let ids = [];
$('.groupSelect:checked').each(function () {
let group = $(this).parents('.xagio-group');
ids.push(group.find('[name="group_id"]').val());
});
if (ids.length > 0) {
input.data('group-id', ids.join(','));
} else {
xagioNotify('error', 'Please select at least one group.');
return;
}
moveToProject = $('#moveToProjectGroup');
$.post(xagio_data.wp_post, 'action=xagio_get_projects', function (d) {
input.empty();
input.append('<option value="">Select a Project / Create a new Project</option>');
for (let i = 0; i < d.aaData.length; i++) {
let o = d.aaData[i];
input.append('<option value="' + o.id + '">' + o.project_name + '</option>');
}
input.select2({
dropdownParent: moveToProject,
placeholder : "Select a Project / Create a new Project",
tags : true
});
moveToProject[0].showModal();
});
});
$('#moveToProjectGroup').on('close', function () {
$('#moveToProjectForm #keep_copy').val('0');
$('#moveToProjectForm .xagio-slider-button').removeClass('on');
});
},
moveToProject : function () {
$(document).on('click', '.moveToProject', function (e) {
e.preventDefault();
let input = $('#moveToProjectInput');
let group_id = $(this).parents('.xagio-group').find('.updateGroup').find('input[name="group_id"]').val();
input.data('group-id', group_id);
moveToProject = $('#moveToProjectGroup');
$.post(xagio_data.wp_post, 'action=xagio_get_projects', function (d) {
input.empty();
input.append('<option value="">Select a Project / Create a new Project</option>');
for (let i = 0; i < d.aaData.length; i++) {
let o = d.aaData[i];
input.append('<option value="' + o.id + '">' + o.project_name + '</option>');
}
input.select2({
dropdownParent: moveToProject,
placeholder : "Select a Project / Create a new Project",
tags : true
});
moveToProject[0].showModal();
});
//
});
$(document).on('submit', '#moveToProjectForm', function (e) {
e.preventDefault();
let form = $(this);
let btn = form.find('button[type="submit"]');
let group_id = $('#moveToProjectInput').data('group-id');
btn.disable();
if (typeof group_id == "undefined" || group_id === "") {
btn.disable();
xagioNotify("danger", "Please select at least one group");
moveToProject[0].close();
return false;
}
$.post(xagio_data.wp_post, 'action=xagio_moveToProject&' + form.serialize() + '&group_id=' +
group_id, function (d) {
btn.disable();
if (d.status == 'success') {
moveToProject[0].close();
actions.loadProjects();
actions.loadProjectManually();
}
xagioNotify(d.status, d.message);
});
});
$(document).on('click', '.groupToProject', function (e) {
let group_ids = [];
$('.groupSelect:checked').each(function () {
let group = $(this).parents('.xagio-group');
group_ids.push(group.find('[name="group_id"]').val());
});
if (group_ids.length == 0) {
let group_id = $('#moveToProjectInput').data('group-id');
if (group_id !== undefined) {
group_ids.push(group_id);
}
}
if (group_ids.length == 0) {
xagioNotify("danger", "Please select at least one group");
return false;
}
let modal = $('#newProject');
modal.find('.moveGroupsIds').val(group_ids);
modal[0].showModal();
});
},
consolidateKeywords : function () {
$('#phraseMatchModal')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('#group_name_phr').val('');
});
$(document).on('click', '.consolidateKeywords', function (e) {
e.preventDefault();
let consolidateModal = $('#consolidateModal');
consolidateModal[0].showModal();
});
$(document).on('submit', '#consolidateForm', function (e) {
e.preventDefault();
let form = $(this);
let btn = $(this).find('.consolidateBtn');
let consolidateModal = $('#consolidateModal');
btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_consolidateKeywords&' + form.serialize() + '&project_id=' +
currentProjectID, function (d) {
btn.disable();
consolidateModal[0].close();
if (d.status === 'error') {
xagio_notify("danger", d.message);
} else {
xagioNotify("success", d.message);
if ($('#XAGIO_REMOVE_EMPTY_GROUPS').val() == 1) {
$.post(xagio_data.wp_post, 'action=xagio_deleteEmptyGroups&project_id=' +
currentProjectID, function (d) {
xagioNotify("success", "Successfully deleted Empty groups.");
actions.loadProjectManually();
});
} else {
actions.loadProjectManually();
}
}
});
})
},
clearSeedKeywordModal : function () {
let modal = $('#seedKeywordsModal');
modal.find('.seed-word-match').val(0);
modal.find('.seed-word-match').parents('.xagio-slider-container').find('.xagio-slider-button').removeClass('on');
modal.find('.seed-word-match').parents('.xagio-slider-container').find('.word_match_label').html(`Broad Match ( <span class="phrase-match-underline">cat</span>, <span class="phrase-match-underline">cat</span>s, <span class="phrase-match-underline">cat</span>apult, wild<span class="phrase-match-underline">cat</span> )`);
modal.find(".seed_group_container_template").remove();
modal.find("input[type='text']").val("");
$('.seedKeyword').html('Seed Keywords');
$('.keywords-action-button').html('Keywords <i class="xagio-icon xagio-icon-arrow-down"></i>');
$('.jqcloud-word').removeClass('highlightWordInCloud');
$('.seed-keywords-inputs').empty();
$('.seed-keywords-panel-select').hide();
$('.seed-keywords-panel-start').show();
$('.xagio-keyword-cloud-global').hide();
$('.seed-keywords-global').hide();
let global_could_btn = $('.global-wordCloud');
global_could_btn.removeClass('open');
global_could_btn.attr('data-xagio-title', 'Open Global Word Cloud');
global_could_btn.find('i').removeClass().addClass('xagio-icon xagio-icon-cloud');
$('.xagio-tooltip').remove();
selected_seed_keywords = [];
},
seedKeyword : function () {
let phrase_match_labels = [
`Broad Match ( <span class="phrase-match-underline">cat</span>, <span class="phrase-match-underline">cat</span>s, <span class="phrase-match-underline">cat</span>apult, wild<span class="phrase-match-underline">cat</span> )`,
`Phrase Match ( <span class="phrase-match-underline">cat</span> )`
];
$(document).on('change', '.seed-word-match', function () {
let input = $(this);
if (input.val() == "1") {
input.parent().find('.word_match_label').html(phrase_match_labels[1]);
} else {
input.parent().find('.word_match_label').html(phrase_match_labels[0]);
}
});
$(document).on('click', '.seed-keywords-panel-global', function () {
let btn = $(this);
let form = $('#seedPanelForm');
btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_seedKeywords&' + form.serialize() + '&project_id=' +
currentProjectID +
'&delete_empty_groups=true&word_match=0&group_id=0', function (d) {
btn.disable();
if (d.status === 'error') {
xagioNotify("danger", d.message);
} else {
actions.clearSeedKeywordModal();
xagioNotify("success", d.message);
actions.loadProjectManually();
}
});
});
$(document).on('click', '.seedKeyword', function (e) {
e.preventDefault();
let group_id = $(this).data('group-id');
let seedKeywordModal = $('#seedKeywordsModal');
seedKeywordModal.find('input[name="group_id"]').val(group_id);
if (group_id != lastSeedGroupId) {
lastSeedGroupId = group_id;
seedKeywordModal.find(".seed_group_container_template").remove();
seedKeywordModal.find("input[type='text']").val("");
}
seedKeywordModal[0].showModal();
});
$(document).on("click", "#add_multiple_groups", function () {
let template = $(".seed_group_container_template.xagio-hidden").clone().removeClass('xagio-hidden');
$("#seed_group_container").append(template);
});
$(document).on('click', '.delete_seed_row', function () {
$(this).parents(".seed_group_container_template").remove();
});
$(document).on('submit', '#seedKeywordsForm', function (e) {
e.preventDefault();
let seedKeywordModal = $('#seedKeywordsModal');
let form = $(this);
let btn = form.find('.autoGenerateGroupsBtn');
btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_seedKeywords&' + form.serialize() + '&project_id=' +
currentProjectID, function (d) {
btn.disable();
if (d.status === 'error') {
xagioNotify("danger", d.message);
} else {
seedKeywordModal[0].close();
xagioNotify("success", d.message);
actions.loadProjectManually();
}
});
});
},
previewCluster : function () {
$(document).on('click', '.previewCluster', function (e) {
e.preventDefault();
let form = $(this).parents('#phraseMatchForm');
let btn = $(this);
let preview_panel = $('.cluster-preview');
preview_panel.addClass('loading-cluster').html('Loading cluster preview <i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i>');
btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_preview_phrasematch&' + form.serialize(), function (d) {
btn.disable();
if (d.status == 'error') {
xagioNotify("danger", d.message);
preview_panel.removeClass('loading-cluster').html('');
return false;
} else {
let groups = d.data;
let groups_html = '';
for (const group_name in groups) {
let template_groups = $('.cluster_preview_template.template.hide').clone().removeClass('template').removeClass('hide');
template_groups.find('.cluster_group_name').html(group_name);
let keywords = '';
for (let i = 0; i < groups[group_name].length; i++) {
let keyword = groups[group_name][i];
keywords += `<li>${keyword}</li>`;
}
template_groups.find('.cluster_group_keywords').html(keywords);
groups_html += $.trim(template_groups.html());
}
preview_panel.removeClass('loading-cluster').html(groups_html);
$('.cluster_group_keywords').multisortable({
items : "li",
selectedClass: "selected",
click : function (event, elem) {
let parent = elem.parent();
if (elem.hasClass('prev-selected')) {
elem.removeClass('prev-selected').removeClass('selected').removeClass('multiselectable-previous');
} else {
parent.find('.prev-selected').removeClass('prev-selected');
elem.addClass('prev-selected');
}
}
});
$('.cluster_group_keywords').sortable({
connectWith: ".uk-sortable",
placeholder: "drop-placeholder",
scrollSpeed: 100,
cursorAt : {left: 20},
opacity : 0.8
});
}
});
});
},
moveKeywords: function () {
$(document).on('click', '.moveKeywords', function (e) {
let modal = $('#moveKeywordsModal');
let group = $(this).parents('.xagio-group');
let ids = [];
let btn = $(this);
let type = btn.data('type');
if (type === "all") {
$('.keyword-selection:checked').each(function () {
let tr = $(this).parents('tr');
$(this).removeAttr('checked');
let id = tr.data('id');
if (id != '') {
ids.push(id);
}
});
} else {
let selectedCheckboxes = group.find('.keyword-selection:checked');
selectedCheckboxes.each(function () {
$(this).removeAttr('checked');
let tr = $(this).parents('tr');
let id = tr.data('id');
if (id != '') {
ids.push(id);
}
});
}
if (ids.length < 1) {
xagioNotify("error", "No selected keywords!");
return false;
}
modal.find('input.ids').val(ids);
modal[0].showModal();
});
$(document).on('click', '#submitMoveKeywords', function (e) {
let modal = $('#moveKeywordsModal');
let ids = modal.find("input.ids").val();
let group_id = modal.find("#moveKeywordGroupSelect").val();
if (group_id == "") {
xagioNotify("error", "Please select group!");
return false;
}
$.post(xagio_data.wp_post, `action=xagio_move_keywords_to_group&target_group_id=${group_id}&ids=${ids}` , function (d) {
if (d.status === "success") {
modal[0].close();
xagioNotify(d.status, d.message);
actions.loadProjectManually();
}
});
})
},
phraseMatch : function () {
$(document).on('change', '#cluster_in_new_project', function () {
if ($(this).prop('checked')) {
$('.pm-project-name').slideDown();
} else {
$('.pm-project-name').slideUp();
}
});
$('#phraseMatchModal')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('.cluster-preview').empty();
modal.find('#cluster_in_new_project').prop('checked', false);
modal.find('.pm-project-name').hide();
});
$(document).on('click', '.phraseMatchSelectAll', function (e) {
let el = $('.phrase_keyword').find('input');
el.prop('checked', !el.prop('checked'));
});
$(document).on('click', '.phraseMatch', function (e) {
e.preventDefault();
let btn = $(this);
let group_id = btn.data('group-id');
let keywordContainer = $('.phraseMatchingKeywords'),
kwGroup1 = keywordContainer.find('.kw-group-1'),
kwGroup2 = keywordContainer.find('.kw-group-2');
kwGroup1.empty();
kwGroup2.empty();
let allKeywords = $('.keywordInput[data-target="keyword"]');
let allGroups = $('.project-groups .updateGroup input[name="group_id"]');
let group_ids = [];
if (group_id != "0") {
allKeywords = btn.parents('.xagio-group').find('.keywordInput[data-target="keyword"]');
} else {
allGroups.each(function () {
group_ids.push($(this).val());
});
group_id = group_ids.join(',');
}
let keywords = [];
allKeywords.each(function () {
let value = $(this).text().trim();
if (value != '') {
keywords.push(value);
}
});
// Get top 3 keywords based on weight
let a = actions.calculateKeywordWeight(keywords);
let sortedArr = a.sort(function (a, b) {
return b.weight - a.weight;
});
let top3 = sortedArr.slice(0, 3);
let exclude_suggestion = '';
for (let i = 0; i < top3.length; i++) {
if (top3[i].weight > 2) {
exclude_suggestion += top3[i].text + ',';
}
}
exclude_suggestion = exclude_suggestion.slice(0, -1);
if (keywords.length == 0) {
xagioNotify("danger", "Please add some keywords first before trying to Cluster!");
return;
}
keywords.sort();
let groupSplit = Math.ceil(keywords.length / 2);
for (let i = 0; i < keywords.length; i++) {
let keyword = keywords[i];
if (i >= groupSplit) {
kwGroup2.append('<label class="phrase_keyword"><input checked type="checkbox" class="xagio-input-checkbox xagio-input-checkbox-mini" name="keywords[]" value="' +
keyword + '"/> ' + keyword + '</label>');
} else {
kwGroup1.append('<label class="phrase_keyword"><input checked type="checkbox" class="xagio-input-checkbox xagio-input-checkbox-mini" name="keywords[]" value="' +
keyword + '"/> ' + keyword + '</label>');
}
}
let phraseMatch = $('#phraseMatchModal');
phraseMatch.find('#excluded_words').val(exclude_suggestion);
phraseMatch.find('input[name="group_id"]').val(group_id);
phraseMatch[0].showModal();
let form = phraseMatch.find('#phraseMatchForm');
let cluster_btn = form.find('.previewCluster');
let preview_panel = $('.cluster-preview');
preview_panel.addClass('loading-cluster').html('Loading cluster preview <i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i>');
cluster_btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_preview_phrasematch&' + form.serialize(), function (d) {
cluster_btn.disable();
let groups = d.data;
let groups_html = '';
for (const group_name in groups) {
let template_groups = $('.cluster_preview_template.template.hide').clone().removeClass('template').removeClass('hide');
template_groups.find('.cluster_group_name').html(group_name);
let keywords = '';
for (let i = 0; i < groups[group_name].length; i++) {
let keyword = groups[group_name][i];
keywords += `<li>${keyword}</li>`;
}
template_groups.find('.cluster_group_keywords').html(keywords);
groups_html += $.trim(template_groups.html());
}
preview_panel.removeClass('loading-cluster').html(groups_html);
$('.cluster_group_keywords').multisortable({
items : "li",
selectedClass: "selected",
click : function (event, elem) {
let parent = elem.parent();
if (elem.hasClass('prev-selected')) {
elem.removeClass('prev-selected').removeClass('selected').removeClass('multiselectable-previous');
} else {
parent.find('.prev-selected').removeClass('prev-selected');
elem.addClass('prev-selected');
}
}
});
$('.cluster_group_keywords').sortable({
connectWith: ".uk-sortable",
placeholder: "drop-placeholder",
scrollSpeed: 100,
cursorAt : {left: 20},
opacity : 0.8
});
});
});
$(document).on('click', '.cluster-accordion-title', function (e) {
if ($(this).hasClass('open')) {
$(this).removeClass('open');
$(this).find('i').removeClass().addClass('xagio-icon xagio-icon-arrow-up');
$('.clustering-keywords').slideUp();
} else {
$(this).addClass('open');
$(this).find('i').removeClass().addClass('xagio-icon xagio-icon-arrow-down');
$('.clustering-keywords').slideDown();
}
});
$(document).on('submit', '#phraseMatchForm', function (e) {
e.preventDefault();
let phraseMatch = $('#phraseMatchModal');
let form = $(this);
let btn = form.find('.autoGenerateGroupsBtn');
let groupedKeywords = {};
$('.cluster-preview').find('.cluster_group').each(function () {
let groupName = $(this).find('.cluster_group_name').text().trim();
let keywords = [];
$(this).find('.cluster_group_keywords li').each(function () {
keywords.push($(this).text().trim());
});
if (groupName !== '') {
groupedKeywords[groupName] = keywords;
}
});
let formData = form.serialize();
formData += '&action=xagio_phraseMatch';
formData += '&project_id=' + currentProjectID;
formData += '&groupedKeywords=' + encodeURIComponent(JSON.stringify(groupedKeywords));
btn.disable();
$.post(xagio_data.wp_post, formData, function (d) {
phraseMatch[0].close();
if (d.status == 'error') {
xagioNotify("danger", d.message);
} else {
nextProjectName = d.data.name;
nextProjectID = d.data.id;
currentProjectID = nextProjectID;
currentProjectName = nextProjectName;
actions.loadProjectManually();
actions.loadProjects();
xagioNotify("success", d.message);
if (activeChanges) {
$('.saveProject').trigger('click');
}
}
btn.disable();
});
});
},
auditWebsite : function () {
$(document).on('change keyup paste', '#auditWebsite_domain', function () {
let domain = $(this);
let currentDomain = domain.data('host');
if (currentDomain.indexOf(domain.val()) < 0) {
$('#auditWebsite_ignoreLocal').attr('checked', true);
} else {
$('#auditWebsite_ignoreLocal').attr('checked', false);
}
});
$(document).on('click', '#auditWebsite_trackKeywords', function (e) {
let selectHolder = $('.auditWebsite_rankHolder');
if (selectHolder.hasClass('open')) {
selectHolder.removeClass('open').hide();
} else {
selectHolder.addClass('open').show();
}
});
$('#auditWebsite_searchEngine').select2({
matcher : matcher,
placeholder: "Select a Search Engine"
});
/**
* Migrate Yoast
*/
$(document).on('click', '.migration-yoast', function (e) {
e.preventDefault();
var btn = $(this);
btn.disable('Working ...');
$.post(xagio_data.wp_post, 'action=xagio_migrate_yoast', function (d) {
btn.disable();
xagioNotify("success", "Yoast data successfully migrated.");
});
});
/**
* Migrate RankMath
*/
$(document).on('click', '.migration-rankmath', function (e) {
e.preventDefault();
var btn = $(this);
btn.disable('Working ...');
$.post(xagio_data.wp_post, 'action=xagio_migrate_rankmath', function (d) {
btn.disable();
xagioNotify("success", "RankMath SEO data successfully migrated.");
});
});
/**
* Migrate AIO
*/
$(document).on('click', '.migration-aio', function (e) {
e.preventDefault();
var btn = $(this);
btn.disable('Working ...');
$.post(xagio_data.wp_post, 'action=xagio_migrate_aio', function (d) {
btn.disable();
xagioNotify("success", "AIO data successfully migrated.");
});
});
let auditModal = $('#auditWebsiteModal');
let auditModalInternal = $('#auditWebsiteModalInternal');
$('#auditWebsite_limit').select2({
dropdownParent: auditModal,
width : '100%',
placeholder : "Select Limit"
});
$('#auditWebsite_limit-internal').select2({
dropdownParent: auditModalInternal,
width : '100%',
placeholder : "Select Limit"
});
$(document).on('click', '.auditWebsiteMigration', function (e) {
e.preventDefault();
if (!xagio_data.connected) {
xagioConnectModal();
return;
}
let btn = $(this);
let audit_type = btn.data('modal');
let audit_button = $('.auditWebsite');
audit_button.data('target', audit_type);
if ($('.migration-visible').length < 1) {
let auditWebsite = document.getElementById('auditWebsiteModal');
if (audit_type === 'internal') {
auditWebsite = document.getElementById('auditWebsiteModalInternal');
}
auditWebsite.showModal();
} else {
let migrationModal = document.getElementById('migrationModal');
migrationModal.showModal();
}
});
$(document).on('click', '.auditWebsite', function (e) {
e.preventDefault();
if (!xagio_data.connected) {
xagioConnectModal();
return;
}
// close this modal
let migrationModal = $('#migrationModal');
migrationModal[0].close();
let auditWebsite = $('#auditWebsiteModal');
if ($(this).data('target') === 'internal') {
auditWebsite = $('#auditWebsiteModalInternal');
$(this).data('target', 'external');
}
auditWebsite[0].showModal();
});
$(document).on('change', '#auditWebsite_lang', function (e) {
e.preventDefault();
$('#auditWebsite_langCode').val($(this).find('option:selected').attr('data-lang-code'));
});
$(document).on('change', '#auditWebsite_lang_internal', function (e) {
e.preventDefault();
$('#auditWebsite_langCode_internal').val($(this).find('option:selected').attr('data-lang-code'));
});
$(document).on('submit', '#auditWebsiteForm', function (e) {
e.preventDefault();
let auditWebsite = $('#auditWebsiteModal');
let form = $(this);
let btn = $(this).find('.auditWebsiteBtn');
btn.disable();
let balance = parseInt(actions.allowances.xags_allowance.find('.value').html()) +
parseInt(actions.allowances.xags.find('.value').html());
if (balance < 1) {
xagioNotify("danger", "You do not have enough XAGS to perform this operation. You can either upgrade your account or buy some XAGS at the Xagio store");
btn.disable();
return;
}
$.post(xagio_data.wp_post, 'action=xagio_auditWebsite&type=Audit&' + form.serialize(), function (d) {
btn.disable();
auditWebsite[0].close();
if (d.status == 'success') {
currentProjectID = d.data;
actions.loadProjectManually();
actions.refreshXags();
// balance.html(parseInt(balance.html()) - 1);
actions.loadProjects();
}
xagioNotify(d.status, d.message);
});
});
$(document).on('submit', '#auditWebsiteInternalForm', function (e) {
e.preventDefault();
let auditWebsite = $('#auditWebsiteModalInternal');
let form = $(this);
let btn = $(this).find('.auditWebsiteBtn');
btn.disable();
let balance = parseInt(actions.allowances.xags_allowance.find('.value').html()) +
parseInt(actions.allowances.xags.find('.value').html());
if (balance < 1) {
xagioNotify("danger", "You do not have enough Xags to perform this operation. You can either upgrade your account or buy some Xags at the Xagio store");
btn.disable();
return;
}
$.post(xagio_data.wp_post, 'action=xagio_auditWebsite&type=Audit&' + form.serialize() +
`&project_id=${currentProjectID}`, function (d) {
btn.disable();
auditWebsite[0].close();
if (d.status == 'success') {
currentProjectID = d.data;
actions.loadProjectManually();
balance.html(parseInt(balance.html()) - 1);
actions.loadProjects();
}
xagioNotify(d.status, d.message);
});
});
},
xagsCostOutput: function (cost) {
let xReview = parseFloat(actions.allowances.xags_allowance.find('.value').html().trim());
let xBank = parseFloat(actions.allowances.xags.find('.value').html().trim());
let output = "";
if (cost <= xReview) {
output = `<div><img class="xags" src="${siteUrl}/assets/img/logos/xRenew.png" alt="xRenew"/><span>${cost}</span></div>`;
} else if (xReview == 0) {
output = `<div><img class="xags" src="${siteUrl}/assets/img/logos/xBanks.png" alt="xBanks"/><span>${cost}</span></div>`;
} else if (xBank > cost) {
let remaining_cost = parseFloat(cost - xReview).toFixed(2);
output = `<div><img class="xags" src="${siteUrl}/assets/img/logos/xRenew.png" alt="xRenew"/><span>${xReview}</span></div> and <div><img class="xags" src="${siteUrl}/assets/img/logos/xBanks.png" alt="xBanks"/><span>${remaining_cost}</span></div>`;
}
return output;
},
refreshXags : function () {
$.post(xagio_data.wp_post, 'action=xagio_refreshXags', function (d) {
if (d.status == 'error') {
actions.allowances.xags.find('.value').html(0);
actions.allowances.xags_allowance.find('.value').html(0);
} else {
actions.allowances.xags_allowance.find('.value').html(parseFloat(d.data.xags_allowance).toFixed(2));
if (d.data['xags'] > 0) {
actions.allowances.xags.find('.value').html(parseFloat(d.data.xags).toFixed(2));
} else {
actions.allowances.xags.find('.value').html(0);
actions.allowances.xags.hide();
$('.xags-divider').hide();
}
actions.allowances.cost = d.data.xags_cost;
actions.allowances.xags_total = d.data.xags_total;
let output = actions.xagsCostOutput(actions.allowances.cost.audits);
$("#auditWebsiteInternalForm").find("#xagsCost").html(`This action will cost you ${output}`);
$("#auditWebsiteForm").find("#xagsCost").html(`This action will cost you ${output}`);
}
});
},
getAi : function () {
$(document).on('click', '.get-ai', function (e) {
e.preventDefault();
// open a new tab to https://xagio.net/ai
window.open('https://xagio.net/ai', '_blank');
});
},
retrieveVolumeAndCPC : function () {
$(document).on('click', '.getVolumeAndCPC', function (e) {
e.preventDefault();
if (!xagio_data.connected) {
xagioConnectModal();
return;
}
let group = $(this).parents('.xagio-group');
let ids = [];
let keywords = [];
let btn = $(this);
let type = btn.data('type');
let icon = '<i class="xagio-icon xagio-icon-sync xagio-icon-spin" title="This value is currently under analysis. Please wait until results are gathered."></i>';
if (type === 'all') {
if ($('.xagio-refresh-vol-cpc-values').hasClass('hide')) {
$('.xagio-refresh-vol-cpc-values').removeClass('hide');
}
if ($('#XAGIO_REFRESH_VOL_CPC_VALUES').val() === '0') {
$('.keyword-selection').each(function () {
let tr = $(this).parents('tr');
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').text().trim().replace(/,/g, '');
let volume = tr.find('.keywordInput[data-target="volume"]').text().trim();
let cpc = tr.find('.keywordInput[data-target="cpc"]').text().trim();
let id = tr.data('id');
if (kw != '') {
if (volume == "" || cpc == "") {
ids.push(id);
keywords.push(kw);
}
}
});
} else {
$('.keyword-selection').each(function () {
let tr = $(this).parents('tr');
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').text().trim().replace(/,/g, '');
let id = tr.data('id');
if (kw != '') {
ids.push(id);
keywords.push(kw);
}
});
}
} else {
$('.xagio-refresh-vol-cpc-values').addClass('hide');
let selectedCheckboxes = group.find('.keyword-selection:checked');
let checkboxesToUse = selectedCheckboxes.length >
0 ? selectedCheckboxes : group.find('.keyword-selection');
checkboxesToUse.each(function () {
let tr = $(this).parents('tr');
let kw = tr.find('.keywordInput[data-target="keyword"]').text().trim().replace(/,/g, '');
let id = tr.data('id');
if (kw !== '') {
ids.push(id);
keywords.push(kw);
}
});
selectedCheckboxes.prop('checked', false);
}
if (keywords.length < 1) {
xagioNotify("danger", "No keywords found!");
return false;
}
actions.volAndCpcProgressBar(keywords);
let vol_cpc_modal = $('#VolumeAndCPCModal');
vol_cpc_modal.find('input[name="ids"]').val(ids.join(','));
vol_cpc_modal.find('input[name="keywords"]').val(keywords.join(','));
$('#getVolAndCpc_languageCode').select2({
matcher : matcher,
dropdownParent: vol_cpc_modal,
placeholder : "Select Language"
});
$('#getVolAndCpc_locationCode').select2({
matcher : matcher,
dropdownParent: vol_cpc_modal,
placeholder : "Select Country"
});
});
$(document).on('click', '.vol-cpc-kw-select', function () {
let checkbox = $(this);
let keyword_id = checkbox.data('value');
let keyword = checkbox.data('keyword');
let modal = checkbox.parents('#VolumeAndCPCModal');
let keyword_ids_input = modal.find('#ids')
let keyword_names_input = modal.find('#keywords')
let keyword_ids = keyword_ids_input.val();
let keyword_names = keyword_names_input.val();
keyword_ids = keyword_ids.split(',');
keyword_names = keyword_names.split(',');
if (jQuery.inArray(keyword_id.toString(), keyword_ids) !== -1) {
keyword_ids.splice($.inArray(keyword_id.toString(), keyword_ids), 1);
} else {
keyword_ids.push(keyword_id);
}
if (jQuery.inArray(keyword.toString(), keyword_names) !== -1) {
keyword_names.splice($.inArray(keyword.toString(), keyword_names), 1);
} else {
keyword_names.push(keyword);
}
modal.find('.keyword_volume_cost').html(keyword_ids.length);
modal.find('.progress-keywords-volume span:last-child').html(`-${keyword_ids.length}`);
keyword_ids_input.val(keyword_ids.join(','));
keyword_names_input.val(keyword_names.join(','));
});
$('#VolumeAndCPCModal').on({
'hide.uk.modal': function () {
let vol_cpc_modal = $('#VolumeAndCPCModal');
vol_cpc_modal.find('.tagsinput').remove();
}
});
},
refreshVolAndCpcValues: function () {
$(document).on('change', "#XAGIO_REFRESH_VOL_CPC_VALUES", function () {
let ids = [];
let keywords = [];
let btn = $('.getVolumeAndCPC');
let type = btn.data('type');
if (type === 'all') {
if ($('#XAGIO_REFRESH_VOL_CPC_VALUES').val() === '0') {
$('.keyword-selection').each(function () {
let tr = $(this).parents('tr');
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').text().trim();
let volume = tr.find('.keywordInput[data-target="volume"]').text().trim();
let cpc = tr.find('.keywordInput[data-target="cpc"]').text().trim();
let id = tr.data('id');
if (kw != '') {
if (volume == "" || cpc == "") {
ids.push(id);
keywords.push(kw);
}
}
});
} else {
$('.keyword-selection').each(function () {
let tr = $(this).parents('tr');
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').text().trim();
let id = tr.data('id');
if (kw != '') {
ids.push(id);
keywords.push(kw);
}
});
}
}
actions.volAndCpcProgressBar(keywords);
let vol_cpc_modal = $('#VolumeAndCPCModal');
vol_cpc_modal.find('input[name="ids"]').val(ids.join(','));
vol_cpc_modal.find('input[name="keywords"]').val(keywords.join(','));
})
},
volAndCpcProgressBar: function (keywords) {
let vol_cpc_modal = $('#VolumeAndCPCModal');
let vol_cpc_cost = keywords.length * actions.allowances.cost.vol_cpc;
vol_cpc_cost = vol_cpc_cost.toFixed(2);
vol_cpc_modal.find('.keyword_competition_cost_text').hide();
vol_cpc_modal.find('.keyword_volume_cost').html(vol_cpc_cost);
let output = actions.xagsCostOutput(vol_cpc_cost);
// Apply price on Modal
vol_cpc_modal.find('#xagsCost').html(`This action will cost you ${output}`);
vol_cpc_modal[0].showModal();
},
submitKeywordsForGetVolAndCPC: function () {
$(document).on('submit', '#VolumeAndCPCForm', function (e) {
e.preventDefault();
let btn = $(this).find('.submitKeywords');
btn.disable();
let vol_cpc_modal = $('#VolumeAndCPCModal');
let dataArray = $(this).serializeArray();
let len = dataArray.length;
let dataObj = {};
for (let i = 0; i < len; i++) {
dataObj[dataArray[i].name] = dataArray[i].value;
}
if (dataObj['language'] == '0000') {
xagioNotify("danger", "Please select a language!");
e.stopImmediatePropagation();
btn.disable();
return false;
}
if (dataObj['keywords'] == '') {
xagioNotify("danger", "All keywords have Volume and CPC. Click on refresh button to refresh values.");
e.stopImmediatePropagation();
btn.disable();
return false;
}
if (dataObj['ids'] == '') {
xagioNotify("danger", "Something went wrong please select keywords again!");
e.stopImmediatePropagation();
btn.disable();
return false;
}
let data = [
{
name : 'action',
value: 'xagio_getVolumeAndCPC'
},
{
name : 'ids',
value: dataObj['ids']
},
{
name : 'keywords',
value: dataObj['keywords']
},
{
name : 'language',
value: dataObj['language']
},
{
name : 'location',
value: dataObj['location']
},
{
name : 'disable_cache',
value: dataObj['disable_cache']
}
];
// Send them for analysis
$.postq('keywordApi', xagio_data.wp_post, data, function (d) {
btn.disable();
vol_cpc_modal[0].close()
actions.refreshXags();
actions.runVolCPCBatchCron();
let ids = dataObj['ids'].split(",");
if (d.status == 'success') {
for (let i = 0; i < ids.length; i++) {
let k = ids[i];
let tr = $('tr[data-id="' + k + '"]');
tr.find('.keywordInput[data-target="volume"]').attr('title', 'This value is currently under analysis. Please check back later to see the results.').html('<i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i>');
tr.find('.keywordInput[data-target="cpc"]').attr('title', 'This value is currently under analysis. Please check back later to see the results.').html('<i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i>');
}
xagio_notify("success", "You have successfully queued selected keywords for analysis. You will receive an e-mail when the analysis is completed, or you can simply just check back later for results.");
} else if (d.status == 'results') {
for (let i = 0; i < d.data.length; i++) {
let k = d.data[i];
let tr = $('tr[data-id="' + k.id + '"]');
let volume_color = '';
if (k.search_volume == 0) {
volume_color = 'tr_green';
} else if (parseFloat(cf_template.volume_red) >= parseInt(k.search_volume)) {
volume_color = 'tr_red';
} else if (parseFloat(cf_template.volume_red) < parseInt(k.search_volume) &&
parseInt(cf_template.volume_green) > parseInt(k.search_volume)) {
volume_color = 'tr_yellow';
} else if (parseFloat(cf_template.volume_green) <= parseInt(k.search_volume)) {
volume_color = 'tr_green';
}
let cpc_color = '';
if (k.cost_per_click == 0) {
cpc_color = 'tr_green';
} else if (parseFloat(cf_template.cpc_red) >= parseFloat(k.cost_per_click)) {
cpc_color = 'tr_red';
} else if (parseFloat(cf_template.cpc_red) < parseFloat(k.cost_per_click) &&
parseFloat(cf_template.cpc_green) > parseFloat(k.cost_per_click)) {
cpc_color = 'tr_yellow';
} else if (parseFloat(cf_template.cpc_green) <= parseFloat(k.cost_per_click)) {
cpc_color = 'tr_green';
}
tr.find('.keywordInput[data-target="volume"]').html(parseInt(k.search_volume).toLocaleString()).removeClass('xagio-text-center').parents('td').addClass(volume_color);
tr.find('.keywordInput[data-target="cpc"]').html(k.cost_per_click).removeClass('xagio-text-center').parents('td').addClass(cpc_color);
}
xagioNotify("success", d.message);
} else if (d.status == 'error') {
xagioNotify("danger", d.message);
}
});
});
},
copyKeywords : function () {
$(document).on('click', '.copyKeywordsButton', function (e) {
e.preventDefault();
copyTextToClipboard($('#copiedKeywords').val());
xagioNotify("success", "Keywords are successfully copied to your clipboard.");
$("#copyKeywords")[0].close();
});
$(document).on('click', '.copyKeywords', function (e) {
e.preventDefault();
let group = $(this).parents('.xagio-group');
let keywords = [];
if (group.find('.keyword-selection:checked').length < 1) {
group.find('.keywordInput[data-target="keyword"]').each(function () {
keywords.push($(this).text().trim());
});
} else {
group.find('.keyword-selection:checked').each(function () {
let tr = $(this).parents('tr');
let kw = tr.find('.keywordInput[data-target="keyword"]').html().trim();
keywords.push(kw);
});
}
keywords = keywords.join("\r\n");
$('#copiedKeywords').val(keywords);
$("#copyKeywords")[0].showModal();
});
},
retrieveKeywordData : function () {
$(document).on('click', '.getKeywordData', function (e) {
e.preventDefault();
let group = $(this).parents('.xagio-group');
let ids = [];
let keywords = [];
let btn = $(this);
let type = btn.data('type');
let competition_modal = $('#getCompetitionModal');
if (!xagio_data.connected) {
xagioConnectModal();
return;
}
if (type === 'all') {
if ($('.xagio-refresh-competition-values').hasClass('hide')) {
$('.xagio-refresh-competition-values').removeClass('hide');
}
if ($('#XAGIO_REFRESH_COMPETITION_VALUES').val() === '0') {
let checked = $('.keyword-selection:checked');
let checkboxesToUse = checked.length > 0
? checked
: $('.keyword-selection');
checkboxesToUse.each(function () {
let tr = $(this).parents('tr');
if (tr.data('queued') != 1) {
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').html().trim();
let inTitle = tr.find('.keywordInput[data-target="intitle"]').html().trim();
let inUrl = tr.find('.keywordInput[data-target="inurl"]').html().trim();
let id = tr.data('id');
if (kw != '') {
if (inTitle == "" || inUrl == "") {
ids.push(id);
keywords.push(kw);
}
}
}
});
} else {
$('.keyword-selection').each(function () {
let tr = $(this).parents('tr');
if (tr.data('queued') != 1) {
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').html().trim();
let id = tr.data('id');
if (kw != '') {
ids.push(id);
keywords.push(kw);
}
}
});
}
} else {
$('.xagio-refresh-competition-values').addClass('hide');
let selectedCheckboxes = group.find('.keyword-selection:checked').filter(function () {
return $(this).parents('tr').data('queued') != 1;
});
let checkboxesToUse = selectedCheckboxes.length > 0
? selectedCheckboxes
: group.find('.keyword-selection').filter(function () {
return $(this).parents('tr').data('queued') != 1;
});
checkboxesToUse.each(function () {
let tr = $(this).parents('tr');
let kw = tr.find('.keywordInput[data-target="keyword"]').html().trim();
let id = tr.data('id');
if (kw !== '') {
ids.push(id);
keywords.push(kw);
}
});
selectedCheckboxes.prop('checked', false);
}
if (keywords.length < 1) {
xagioNotify("danger", "No keywords found!");
return false;
}
actions.competitionProgressBar(keywords);
competition_modal.find('#keywords_cmp').val(keywords.join(','));
competition_modal.find('#ids_cmp').val(ids.join(','));
$('#getCompetition_languageCode').select2({
matcher : matcher,
dropdownParent: competition_modal,
placeholder : "Select Language"
});
$('#getCompetition_locationCode').select2({
matcher : matcher,
dropdownParent: competition_modal,
placeholder : "Select Country"
});
});
$(document).on('submit', '#getCompetitionForm', function (e) {
e.preventDefault();
let kwallow = parseInt(actions.allowances.xags_allowance.find('.value').html().trim()) +
parseInt(actions.allowances.xags.find('.value').html().trim());
let form = $(this);
let btn = form.find('.submitCompetitionKeywords');
btn.disable();
let modal = form.parents('.xagio-modal');
let ids = form.find('#ids_cmp').val();
let keywords = form.find('#keywords_cmp').val();
if (keywords == "") {
xagioNotify("danger", "All keywords have Competition value. Please click on refresh keywords to refresh values.");
btn.disable();
return;
}
ids = ids.split(',');
keywords = keywords.split(',');
let cost = parseInt(actions.allowances.cost.comp) * keywords.length;
if (cost > kwallow) {
xagioNotify("danger", "You do not have enough XAGS.");
btn.disable();
return;
}
let data = [
{
name : 'action',
value: 'xagio_getKeywordData'
},
{
name : 'ids',
value: ids
},
{
name : 'keywords',
value: keywords
},
{
name : 'language',
value: $('#getCompetition_languageCode').val()
},
{
name : 'location',
value: $('#getCompetition_locationCode').val()
}
];
// Send them for analysis
$.post(xagio_data.wp_post, data, function (d) {
xagioNotify((d.status == 'success') ? d.status : 'danger', d.message);
if (d.status == 'success') {
actions.refreshXags();
actions.runBatchCron();
for (let i = 0; i < ids.length; i++) {
let id = ids[i];
let el = $('.keyword-selection[value="' + id + '"]');
let tr = el.parents('tr');
tr.attr('data-queued', 1);
let tm = '<i class="xagio-icon xagio-icon-sync xagio-icon-spin" title="This value is currently under analysis. Please check back later to see the results."></i>';
let values = [
'.keywordInput[data-target="intitle"]',
'.keywordInput[data-target="inurl"]'
];
for (let z = 0; z < values.length; z++) {
let td = tr.find(values[z]).parent();
td.removeClass();
td.addClass('xagio-text-center');
td.html(tm);
}
}
}
btn.disable();
modal[0].close();
});
});
$('#getCompetitionModal')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('#ids_cmp').val('');
modal.find('#keywords_cmp').val('');
});
},
refreshCompetitionValues: function () {
$(document).on('change', "#XAGIO_REFRESH_COMPETITION_VALUES", function () {
let ids = [];
let keywords = [];
let btn = $('.getKeywordData');
let type = btn.data('type');
if (type === 'all') {
if ($('#XAGIO_REFRESH_COMPETITION_VALUES').val() === '0') {
$('.keyword-selection').each(function () {
let tr = $(this).parents('tr');
if (tr.data('queued') != 1) {
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').html().trim();
let inTitle = tr.find('.keywordInput[data-target="intitle"]').html().trim();
let inUrl = tr.find('.keywordInput[data-target="inurl"]').html().trim();
let id = tr.data('id');
if (kw != '') {
if (inTitle == "" || inUrl == "") {
ids.push(id);
keywords.push(kw);
}
}
}
});
} else {
$('.keyword-selection').each(function () {
let tr = $(this).parents('tr');
if (tr.data('queued') != 1) {
$(this).removeAttr('checked');
let kw = tr.find('.keywordInput[data-target="keyword"]').html().trim();
let id = tr.data('id');
if (kw != '') {
ids.push(id);
keywords.push(kw);
}
}
});
}
}
actions.competitionProgressBar(keywords);
let competition_modal = $('#getCompetitionModal');
competition_modal.find('#keywords_cmp').val(keywords.join(','));
competition_modal.find('#ids_cmp').val(ids.join(','));
})
},
competitionProgressBar: function (keywords) {
let competition_modal = $('#getCompetitionModal');
let competition_cost = keywords.length * actions.allowances.cost.comp;
competition_cost = competition_cost.toFixed(2);
let output = actions.xagsCostOutput(competition_cost);
// Apply price on Modal
competition_modal.find('#xagsCost').html(`This action will cost you ${output}`);
competition_modal[0].showModal();
},
/*CF Templates*/
loadCfTemplates : function () {
$.post(xagio_data.wp_post, 'action=xagio_getCfTemplates', function (d) {
if (d.status == 'success') {
cf_templates = $.extend(cf_templates, d.data)
}
let template = cf_templates[d.default];
// Set default template globally
cf_template = template.data;
cf_default_template = d.default;
let template_names = '';
for (let key in cf_templates) {
if (key == d.default) {
// Star if it's default template
template_names += '<option value="' + key + '">' + key + ' *</option>';
} else {
template_names += '<option value="' + key + '">' + key + '</option>';
}
}
$('#cf-templates').html(template_names);
$('#cf-templates').val(template.name);
for (let key in template.data) {
$('#' + key).val(template.data[key]);
$('.' + key).val(template.data[key]);
}
}, 'json');
},
changeCfTemplate: function () {
$("#cf-templates").change(function () {
let templateName = $(this).val();
for (let key in cf_templates[templateName].data) {
$('#' + key).val(cf_templates[templateName].data[key]);
$('.' + key).val(cf_templates[templateName].data[key]);
}
});
},
saveCfTemplate : function () {
$(document).on('click', '#saveCfTemplate', function (e) {
// Disable button to prevent multiple sending
let btn = $(this);
btn.disable();
e.preventDefault();
let data = $('#conditional-formatting-local-form').serialize();
let selected_template = $('#cf-templates').val();
$.post(xagio_data.wp_post, 'action=xagio_saveCfTemplate&' + data + '&name=' +
selected_template, function (d) {
xagioNotify(d.status, d.message);
// Update CF Templates data
cf_templates = d.data;
cf_template = cf_templates[cf_default_template].data;
// When saving is done, enable button again
btn.disable();
}, 'json');
});
},
addCfTemplate : function () {
$(document).on('click', '#addCfTemplate', function (e) {
let btn = $(this);
btn.attr('disabled', true);
e.preventDefault();
let data = $('#conditional-formatting-local-form').serialize();
xagioPromptModal("Confirm", `<span style="font-size: 20px;"><i class="xagio-icon xagio-icon-save"></i> Please enter name for new template:</span>`, function (result) {
if (result) {
let new_name = result;
if (new_name.length < 1) {
xagioNotify("danger", "Please enter a name for new template!");
btn.attr('disabled', false);
return false;
}
$.post(xagio_data.wp_post, 'action=xagio_createCfTemplate&' + data + '&name=' +
new_name, function (d) {
btn.attr('disabled', false);
$('#applyCfTemplate').attr('disabled', false);
if (d.status == 'error') {
xagioNotify("danger", d.message);
return false;
} else {
xagioNotify(d.status, d.message);
}
// Update CF Templates data
actions.loadCfTemplates();
}, 'json');
} else {
btn.attr('disabled', false);
}
});
})
},
applyCfTemplate : function () {
$(document).on('click', '#applyCfTemplate', function (e) {
e.preventDefault();
let btn = $(this);
// btn.attr('disabled', true);
btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_applyCfTemplate&templateName=' +
$('#cf-templates').val(), function (d) {
xagioNotify(d.status, d.message);
// When saving is done, enable button again
// btn.attr('disabled', false);
btn.disable();
actions.loadCfTemplates();
actions.loadProjectManually();
}, 'json');
})
},
deleteCfTemplate: function () {
$(document).on('click', '#deleteCfTemplate', function (e) {
e.preventDefault();
let btn = $(this);
let template_name = $('#cf-templates').val();
if (template_name === "Default" || template_name === "Affiliate" || template_name === "Local") {
xagioNotify("danger", "You cannot delete XAGIO default conditional formatting templates");
return;
}
btn.disable();
xagioModal("Are you sure?", "Are you sure that you want to delete selected template?", function (yes) {
if (yes) {
$.post(xagio_data.wp_post, 'action=xagio_deleteCfTemplate&templateName=' +
template_name, function (d) {
xagioNotify(d.status, d.message);
// When saving is done, enable button again
btn.disable();
actions.loadCfTemplates();
}, 'json');
} else {
btn.disable();
}
})
})
},
cfValidation : function () {
let inputs = [
'volume',
'cpc'
];
let inputs2 = [
'intitle',
'inurl',
'title_ratio',
'url_ratio'
];
$.each(inputs, function (index, value) {
let input_type = value;
$('#' + input_type + '_red').change(function () {
let value1 = $(this).val();
let value2 = $('#' + input_type + '_green').val();
value1 = parseFloat(value1);
value2 = parseFloat(value2);
if (value1 >= value2) {
xagioNotify("warning", "Please input correct condition!");
$(this).val('');
$(this).focus();
return false;
}
$('.' + input_type + '_yellow_1').val(value1);
$('.' + input_type + '_yellow_2').val(value2);
});
$('#' + input_type + '_green').change(function () {
let value1 = $(this).val();
let value2 = $('#' + input_type + '_red').val();
value1 = parseFloat(value1);
value2 = parseFloat(value2);
if (value1 <= value2) {
xagioNotify("warning", "Please input correct condition!");
$(this).val('');
$(this).focus();
return false;
}
$('.' + input_type + '_yellow_1').val(value2);
$('.' + input_type + '_yellow_2').val(value1);
});
});
$.each(inputs2, function (index, value) {
let input_type = value;
$('#' + input_type + '_red').change(function () {
let value1 = $(this).val();
let value2 = $('#' + input_type + '_green').val();
value1 = parseFloat(value1);
value2 = parseFloat(value2);
if (value1 <= value2) {
xagioNotify("warning", "Please input correct condition!");
$(this).val('');
$(this).focus();
return false;
}
$('.' + input_type + '_yellow_1').val(value1);
$('.' + input_type + '_yellow_2').val(value2);
});
$('#' + input_type + '_green').change(function () {
let value1 = $(this).val();
let value2 = $('#' + input_type + '_red').val();
value1 = parseFloat(value1);
value2 = parseFloat(value2);
if (value1 >= value2) {
xagioNotify("warning", "Please input correct condition!");
$(this).val('');
$(this).focus();
return false;
}
$('.' + input_type + '_yellow_1').val(value2);
$('.' + input_type + '_yellow_2').val(value1);
});
});
},
/*Munja Menu*/
newKeyword : function () {
$(document).on('click', '.add-keywords', function (e) {
e.preventDefault();
let keywords = $('#keywords-input').val();
// remove commas
keywords = keywords.replace(/,/g, '');
if (keywords == '') {
xagioNotify("danger", "You must insert some keywords first.");
return;
}
$.post(xagio_data.wp_post, 'action=xagio_addKeyword&group_id=' + keywordGroupID + '&keywords=' +
encodeURIComponent(keywords), function (d) {
$("#addKeywords")[0].close();
xagioNotify("success", "Successfully added keywords.");
actions.loadProjectManually();
});
});
$(document).on('click', '.addKeyword', function (e) {
e.preventDefault();
let group = $(this).parents('.xagio-group');
keywordGroupID = group.find('[name="group_id"]').val();
let modal = $("#addKeywords")[0];
modal.showModal();
});
},
deleteKeywords : function () {
$(document).on('click', '.deleteKeywords', function (e) {
e.preventDefault();
let keyword_ids = $(this).parents('.xagio-group').find('.updateKeywords').serialize();
let keywords_length = $(this).parents('.xagio-group').find('.updateKeywords').serializeArray().length;
if (keywords_length < 1) {
xagioNotify("danger", "Please select some keywords!");
return false;
}
let modal = $('#deleteKeywords');
modal.find('.delete-keywords-number').html(keywords_length);
modal.find('#keywordIds').val(keyword_ids);
modal[0].showModal();
});
$(document).on('click', '.delete-keywords', function () {
let btn = $(this);
let modal = btn.parents('.xagio-modal');
let deleteRanks = $('.xagio-modal #deleteRanks').is(':checked');
let keyword_ids = modal.find('#keywordIds').val();
$.post(xagio_data.wp_post, 'action=xagio_deleteKeywords&' + keyword_ids + '&deleteRanks=' +
deleteRanks, function (d) {
xagioNotify("success", "Keywords successfully deleted.");
modal[0].close();
actions.loadProjectManually();
})
});
$('#deleteKeywords')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('#keywordIds').val(0);
modal.find('#deleteRanks').val(0).prop('checked', false);
modal.find('.delete-keywords-number').text('-');
});
},
deleteDuplicate : function () {
/*Delete Duplicate keywords from current project*/
$(document).on('click', '.deleteDuplicate', function (e) {
e.preventDefault();
let updateGroup = $('.updateGroup');
let modal = $('#removeDuplicateKeywords');
let project_id = updateGroup.find('[name="project_id"]').val();
modal.find('#projectId').val(project_id);
modal[0].showModal();
});
$(document).on('click', '.remove-duplicate-keywords', function () {
let btn = $(this);
let modal = btn.parents('.xagio-modal');
let project_id = modal.find('#projectId').val();
btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_deleteDuplicate&project_id=' + project_id, function (d) {
btn.disable();
xagioNotify(d.status, d.message);
modal[0].close();
actions.loadProjectManually();
});
});
$('#removeDuplicateKeywords')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('#projectId').val(0);
});
},
createPagePost : function () {
/*Create New Page or Post*/
$(document).on('click', '.createNewPagePost', function (e) {
e.preventDefault();
let btn = $(this);
let btn_type = btn.attr('data-type');
let form = btn.parents('.xagio-group').find('form.updateGroup');
let form_post = form.serialize().replace('action=xagio_updateGroup&', '');
let group_name = btn.parents('.xagio-group').find('input[name="group_name"]').val();
let block_modal = $('#creating_block');
block_modal[0].showModal();
$.post(xagio_data.wp_post, `action=xagio_create_page_post&type=${btn_type}&${form_post}&group_name=${group_name}`, function (d) {
block_modal[0].close();
if (d.status == 'error') {
xagioNotify("danger", d.message);
return false;
}
let modal_template = $('#resultsPagePost');
if (d.status == 'warning') {
modal_template.find('.pagePostResultsMessage').html('<i class="xagio-icon xagio-icon-warning"></i> Page is already created, you can access it below!')
}
if (d.data.post_type == 'page' && d.status == 'success') {
$.post(xagio_data.wp_post, 'action=xagio_get_page_post_parent', function (pdata) {
let pageOption = [];
pageOption.push("<option dataid='" + d.data.page_id + "' value='0'>( No Parent )</option>");
for (let i = 0; i < pdata.length; i++) {
let id = pdata[i].id;
let title = pdata[i].title;
pageOption.push("<option dataid='" + d.data.page_id + "' value='" + id + "'>" + title +
"</option>");
}
let pageOptions = pageOption.join('');
modal_template.find('.update_parent_page #parentPage').append(pageOptions);
})
} else {
modal_template.find('.update_parent_page').html('');
}
if (d.status == 'success') {
$.post(xagio_data.wp_post, 'action=xagio_get_page_post_status', function (sData) {
modal_template.find('.update_page_post_status #pagePostStatus').empty();
let statusOption = [];
for (let i = 0; i < sData.length; i++) {
let value = sData[i].value;
let title = sData[i].title;
statusOption.push("<option dataid='" + d.data.page_id + "' value='" + value + "'>" +
title + "</option>");
}
let statusOptions = statusOption.join('');
modal_template.find('.update_page_post_status #pagePostStatus').append(statusOption);
})
} else {
modal_template.find('.update_page_post_status').html('');
}
actions.loadProjectManually();
modal_template.find('.edit_page_post_link').html('<a href="' + d.data.url + '" target="_blank">' +
d.data.url + '</a>');
modal_template[0].showModal();
})
});
$(document).on('change', '.update_page_post_status #pagePostStatus', function (e) {
e.preventDefault();
let value = this.value;
let pageID = $('option:selected', this).attr('dataid');
if (value != '' && pageID != '') {
$.post(xagio_data.wp_post, 'action=xagio_update_page_post_status&page_id=' + pageID + '&value=' +
value, function (d) {
xagioNotify("success", "Status successfully updated.");
})
}
});
$(document).on('change', '.update_parent_page #parentPage', function (e) {
e.preventDefault();
let value = this.value;
let pageID = $('option:selected', this).attr('dataid');
if (value != '' && pageID != '') {
$.post(xagio_data.wp_post, 'action=xagio_update_page_parent&page_id=' + pageID + '&value=' +
value, function (d) {
xagioNotify("success", "Parent successfully updated.");
})
}
});
},
deleteGroup : function () {
$(document).on('click', '.deleteGroup', function (e) {
e.preventDefault();
let group = $(this).parents('.xagio-group');
let group_id = group.find('[name="group_id"]').val();
let modal = $('#deleteGroup');
modal.find('#groupId').val(group_id);
modal[0].showModal();
});
$(document).on('click', '.delete-group', function () {
let btn = $(this);
let modal = btn.parents('.xagio-modal');
let group_id = modal.find('#groupId').val();
let delete_ranks = modal.find('#deleteGroupRanks').is(':checked');
$.post(xagio_data.wp_post, 'action=xagio_deleteGroup&group_id=' + group_id + '&deleteRanks=' +
delete_ranks, function (d) {
modal[0].close();
actions.loadProjects();
actions.loadProjectManually();
xagioNotify("success", "Group successfully deleted.");
})
});
$('#deleteGroup')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('#groupId').val(0);
modal.find('#deleteGroupRanks').val(0).prop('checked', false);
});
},
deleteGroups : function () {
$(document).on('click', '.deleteGroups', function (e) {
e.preventDefault();
let modal = $('#deleteSelectedGroups');
let group_names = [];
let ids = [];
$('.project-groups .groupSelect:checked').each(function () {
let group = $(this).parents('.xagio-group');
group_names.push('<li>' + group.data('name') + '</li>');
ids.push(group.find('[name="group_id"]').val());
});
if (ids.length < 1) {
xagioNotify("warning", "Please select at least one group to delete");
return false;
}
modal.find('.delete-selected-groups-ul').html(group_names.join(''));
modal[0].showModal();
});
$(document).on('click', '.delete-selected-groups', function () {
let btn = $(this);
let modal = btn.parents('.xagio-modal');
let delete_ranks = modal.find('#deleteSelectedGroupRanks').is(':checked');
btn.disable();
let ids = [];
$('.project-groups .groupSelect:checked').each(function () {
let group = $(this).parents('.xagio-group');
ids.push(group.find('[name="group_id"]').val());
});
$.post(xagio_data.wp_post, 'action=xagio_deleteGroups&group_ids=' + ids.join(',') + '&deleteRanks=' +
delete_ranks, function (d) {
btn.disable();
modal[0].close();
actions.loadProjectManually();
actions.loadProjects();
xagioNotify("success", "Groups successfully deleted.");
});
});
$('#deleteSelectedGroups')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('.delete-selected-groups-ul').html('');
modal.find('#deleteSelectedGroupRanks').prop('checked', false);
});
$(document).on('click', '.deleteEmptyGroups', function (e) {
e.preventDefault();
let modal = $('#deleteEmptyGroups');
modal[0].showModal();
});
$(document).on('click', '.delete-empty-groups', function () {
let btn = $(this);
let modal = btn.parents('.xagio-modal');
let skip_groups = modal.find('#skipGroups').is(':checked');
btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_deleteEmptyGroups&project_id=' + currentProjectID +
'&skipGroups=' + skip_groups, function (d) {
btn.disable();
modal[0].close();
actions.loadProjectManually();
actions.loadProjects();
xagioNotify("success", "Successfully deleted Empty groups.");
});
});
$('#deleteEmptyGroups')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('#skipGroups').prop('checked', false);
});
},
selectAllKeywords: function () {
$(document).on('click', '.select-all', function () {
let table = $(this).parents('table.keywords');
table.find('.keyword-selection').each(function () {
$(this).prop("checked", !$(this).prop("checked"));
});
});
},
newGroup : function () {
$(document).on('click', '.addGroup', function (e) {
e.preventDefault();
let modal = $('#newGroup');
modal[0].showModal();
});
$(document).on('click', '.newGroupsButton', function () {
let btn = $(this);
let modal = btn.parents('.xagio-modal');
let group_name = modal.find('#newGroupInput').val();
btn.disable();
if (group_name == '') {
btn.disable();
xagioNotify("danger", "Group Name cannot be empty!");
} else {
$.post(xagio_data.wp_post, 'action=xagio_newGroup&project_id=' + currentProjectID + '&group_name=' +
group_name, function (d) {
xagioNotify("success", `Group ${group_name} has been created.`);
btn.disable();
modal[0].close();
actions.loadProjectManually();
});
}
});
$('#newGroup')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('#newGroupInput').val('');
});
$(document).on('click', '.add-empty-group', function (e) {
e.preventDefault();
$.post(xagio_data.wp_post, 'action=xagio_newGroup&project_id=' + currentProjectID +
'&group_name=xagio-empty', function (d) {
xagioNotify("success", "Empty group has been created.");
actions.loadProjectManually();
});
});
},
openNotes : function () {
$(document).on('click', '.openNotes', function (e) {
e.preventDefault();
let btn = $(this);
let notes_row = btn.parents('.xagio-group').find('.notes-row');
if (btn.hasClass('notesOpened')) {
notes_row.hide();
btn.removeClass('notesOpened');
btn.attr('data-xagio-title', 'Open Notes');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-note');
} else {
notes_row.show();
btn.addClass('notesOpened');
btn.attr('data-xagio-title', 'Close Notes');
btn.find('i').removeClass().addClass('xagio-icon xagio-icon-note-o');
}
$('.xagio-tooltip').remove();
actions.updateGrid();
// btn.parents('.xagio-group').trigger('display.uk.check');
})
},
saveProject : function () {
$(document).on('click', '.saveProject', function (e) {
e.preventDefault();
let btn = $(this);
btn.disable();
$('.project-groups').find('.updateGroup').each(function () {
$(this).trigger('submit');
});
var checker = setInterval(function () {
if (false !== $.ajaxq.isRunning('groupUpdate')) {
btn.disable();
clearInterval(checker);
if (nextProjectID !== 0) {
currentProjectID = nextProjectID;
currentProjectName = nextProjectName;
nextProjectID = 0;
nextProjectName = 0;
actions.loadProjectManually();
}
}
}, 500);
});
},
saveGroupClick : function () {
$(document).on('click', '.saveGroup', function (e) {
e.preventDefault();
let btn = $(this);
let form = btn.parents('.xagio-group').find('.updateGroup');
form.submit();
})
},
updateGroup : function () {
$(document).on('submit', '.updateGroup', function (e) {
e.preventDefault();
e.stopPropagation();
let button = $(this).prev().find('.saveGroup');
let group_id = $(this).find('[name="group_id"]').val();
let data = $(this).serialize();
let kw_data = $(this).parents('.xagio-group').find('.keywords-data');
let group_name = $(this).parents('.xagio-group').find('input[name="group_name"]').val();
data = data + '&group_name=' + group_name;
button.disable();
// First update the group settings
$.postq('groupUpdate', xagio_data.wp_post, data, function (d) {
button.disable();
// Now update all keywords
let keywords = [];
let position = 1;
kw_data.find('tr').each(function () {
let keyword = {};
keyword['id'] = $(this).data('id');
keyword['position'] = position;
position++;
let allNull = true;
$(this).find('td div.keywordInput').each(function () {
let value = $(this).text();
if (value != '') {
keyword[$(this).data('target')] = value;
allNull = false;
}
});
if (!allNull) keywords.push(keyword);
});
if (keywords.length > 1) {
let data = [
{
name : 'action',
value: 'xagio_updateKeywords'
},
{
name : 'group_id',
value: group_id
}
];
keywords.forEach((keyword, index) => {
Object.keys(keyword).forEach(key => {
data.push({
name : `keywords[${index}][${key}]`,
value: keyword[key]
});
});
});
$.postq('groupUpdate', xagio_data.wp_post, data, function (d) {
activeChanges = false;
clearTimeout(groupNoticeTimeout);
groupNoticeTimeout = setTimeout(function () {
xagioNotify("success", "Changes saved successfully.");
}, 300);
});
} else {
activeChanges = false;
clearTimeout(groupNoticeTimeout);
groupNoticeTimeout = setTimeout(function () {
xagioNotify("success", "Changes saved successfully.");
}, 300);
}
});
});
},
editGroupSettings: function () {
$(document).on('click', '.editGroupSettings', function (e) {
e.preventDefault();
let groupSettings = $(this).parents('.groupSettings');
let tbody = groupSettings.find('tbody.groupSettingsTbody');
tbody.toggle();
actions.updateGrid();
});
},
renderSliders : function () {
// Enable sliders
$('.prs-slider-frame .slider-button').toggle(function () {
$(this).addClass('on');
}, function () {
$(this).removeClass('on');
});
},
initSliders : function () {
const rangeContainers = document.querySelectorAll(".hunter-range-container");
rangeContainers.forEach(container => {
const rangevalue = container.querySelector(".hunter-slider-container .price-slider");
const rangeInputvalue = container.querySelectorAll(".range-input input");
const priceInputvalue = container.querySelectorAll(`.xagio-slider-input input`);
let priceGap = parseFloat(rangeInputvalue[0].step);
// Debounce function to delay execution until user stops typing
function debounce(func, delay) {
let timeout;
return function (...args) {
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), delay);
};
}
// Function to update the display of the price slider color and range fill
function updateSliderDisplay(minVal, maxVal) {
rangevalue.style.left = `${(minVal / rangeInputvalue[0].max) * 100}%`;
rangevalue.style.right = `${100 - (maxVal / rangeInputvalue[1].max) * 100}%`;
}
// Main function to handle input validation and updates
function handleInput(e) {
let minp = parseFloat(priceInputvalue[0].value);
let maxp = parseFloat(priceInputvalue[1].value);
const validate_max = rangeInputvalue[1].max;
const validate_min = rangeInputvalue[0].min;
// Separate logic for min and max inputs
if (e.target.classList.contains("min-input")) {
if (minp < validate_min) minp = validate_min;
else if (minp > maxp - priceGap) minp = maxp - priceGap;
rangeInputvalue[0].value = minp;
} else {
if (maxp > validate_max) maxp = validate_max;
else if (maxp < minp + priceGap) maxp = minp + priceGap;
rangeInputvalue[1].value = maxp;
}
// Update the display of the range slider based on minp and maxp
updateSliderDisplay(minp, maxp);
// Reflect changes in price input values
priceInputvalue[0].value = minp;
priceInputvalue[1].value = maxp;
}
// Debounced version of handleInput
const debouncedHandleInput = debounce(handleInput, 500); // 500ms delay
// Attach debounced function to input events for min and max input elements
priceInputvalue.forEach(input => input.addEventListener("input", debouncedHandleInput));
// Immediate event listener for range slider inputs
rangeInputvalue.forEach(input => {
input.addEventListener("input", e => {
let minVal = parseFloat(rangeInputvalue[0].value);
let maxVal = parseFloat(rangeInputvalue[1].value);
let diff = maxVal - minVal;
if (diff < priceGap) {
if (e.target.classList.contains("min-input")) {
rangeInputvalue[0].value = maxVal - priceGap;
minVal = maxVal - priceGap;
} else {
rangeInputvalue[1].value = minVal + priceGap;
maxVal = minVal + priceGap;
}
}
// Update price inputs and range slider display
priceInputvalue[0].value = minVal;
priceInputvalue[1].value = maxVal;
updateSliderDisplay(minVal, maxVal);
});
});
});
},
renameProject : function () {
$(document).on('click', '.rename_project', function (e) {
e.preventDefault();
let project_id = $(this).data('id');
let project_name = $(this).data('name');
let modal = $('#newProject')[0];
$(modal).find('input').val(project_name);
$(modal).find('.xagio-modal-title').text('Edit Your Project Name');
$(modal).find('.editProjectName').val(project_id);
modal.showModal();
});
},
modalEvents : function () {
$('#newProject')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('input').val('');
modal.find('.xagio-modal-title').text('Name Your New Project');
modal.find('.editProjectName').val(0);
});
},
manageProjects : function () {
$(document).on('change', '.select-all-projects', function (e) {
e.preventDefault();
let checked = $(this).prop('checked');
$('.select-project').prop('checked', checked).trigger('change');
});
$(document).on('change', '.select-project', function (e) {
e.preventDefault();
let any_checked = $('.select-project:checked').length > 0;
if (any_checked) {
$('.delete-projects').removeClass('xagio-hidden');
} else {
$('.delete-projects').addClass('xagio-hidden');
}
});
$(document).on('click', '.delete-projects', function (e) {
e.preventDefault();
let ids = [];
$('.select-project:checked').each(function () {
ids.push($(this).attr('data-id'));
});
ids = ids.join(',');
xagioModal("Are you sure?", "You are about to delete selected Projects. Continue?", function (yes) {
if (yes) {
$.post(xagio_data.wp_post, `action=xagio_remove_projects&project_ids=${ids}`, function (d) {
actions.loadProjects();
});
}
})
});
},
newProject : function () {
$(document).on('click', '.new-project', function (e) {
e.preventDefault();
let modal = $('#newProject')[0];
modal.showModal();
});
$(document).on('submit', '#newProjectForm', function (e) {
e.preventDefault();
let project_name = $(this).find('#newProjectInput').val();
let project_id = $(this).find('.editProjectName').val();
let group_ids = $(this).find('.moveGroupsIds').val();
let btn = $(this).find('.newProjectButton');
let modal = $(this).parents('.xagio-modal')[0];
btn.disable();
if (parseInt(project_id) === 0) {
if (project_name == '') {
xagioNotify("danger", "Project Name cannot be empty!");
btn.disable();
} else {
// NEW PROJECT
if (group_ids === '') {
$.post(xagio_data.wp_post, 'action=xagio_new_project&project_name=' +
project_name, function (d) {
btn.disable();
modal.close();
actions.loadProjects();
xagioNotify("success", `Project ${project_name} has been created.`);
});
} else {
// Move Groups to a new project
$.post(xagio_data.wp_post, 'action=xagio_groupToProject&group_id=' + group_ids +
'&projectName=' + project_name, function (d) {
if (d.status == 'success') {
btn.disable();
modal.close();
moveToProject[0].close();
actions.loadProjects();
}
xagioNotify(d.status, d.message);
});
}
}
} else {
// RENAME PROJECT
if (project_name == '') {
xagioNotify("danger", "Project Name cannot be empty!");
btn.disable();
} else {
$.post(xagio_data.wp_post, 'action=xagio_rename_project&project_id=' + project_id +
'&project_name=' + project_name, function (d) {
btn.disable();
modal.close();
actions.loadProjects();
xagioNotify("success", `Project ${project_name} has been renamed`);
});
}
}
});
},
updateGrid : function () {
$grid.masonry('reloadItems');
$grid.masonry('layout');
},
updateElements : function () {
let table_sort_config = {
headers: {
0: {
sorter: false
},
2: {
sorter: 'fancyNumber'
},
3: {
sorter: 'fancyNumber'
},
4: {
sorter: 'fancyNumber'
},
5: {
sorter: 'fancyNumber'
},
6: {
sorter: 'fancyNumber'
},
7: {
sorter: 'fancyNumber'
},
8: {
sorter: 'fancyNumber'
}
}
};
// Table sorting
$(".keywords").tablesorter(table_sort_config);
let kw_data = $('.keywords-data');
$(document).on('keyup', function (event) {
if (event.key === "Escape") {
$('.keywords-data tr').removeClass('selected multiselectable-previous');
}
});
kw_data.multisortable({
items : "tr",
selectedClass: "selected",
stop : function (e) {
if ($(e.target).find('tr').length < 1) {
$(e.target).html('<tr><td colspan="11"><div class="empty-keywords"><i class="xagio-icon xagio-icon-warning"></i> No added keywords yet... <button type="button" class="xagio-button xagio-button-primary addKeyword"><i class="xagio-icon xagio-icon-plus"></i>Add Keyword(s)</button></div></td></tr>');
}
$('.xagio-group .jqcloud').each(function (index) {
let jscloud = $(this);
let current_cloud_keywords = jscloud.parents('.xagio-group').find('.keywords-data tr').find('div.keywordInput[data-target="keyword"]');
let keywords = [];
current_cloud_keywords.each(function () {
keywords.push($(this).text());
});
jscloud.jQCloud('update', actions.calculateAndTrim(keywords));
jscloud.css("display", "block").resize();
});
}
});
// Drag and Drop
kw_data.sortable({
connectWith: ".uk-sortable",
cancel : "input,textarea,button,select,option,[contenteditable]",
placeholder: "drop-placeholder",
cursorAt : {left: 20},
opacity : 0.8,
stop : function () {
// Update tablesorter on both source and target tables
$(".keywords").trigger("update");
}
}).on("sortreceive", function (event, ui) {
let target = $(this);
let original_group = $(ui.sender).parents('.xagio-group').find('[name="group_id"]').val();
let target_group = target.parents('.xagio-group').find('[name="group_id"]').val();
let original_table = $(`input[name="group_id"][value="${original_group}"]`).parents('.xagio-group').find('table.keywords');
let target_table = $(`input[name="group_id"][value="${target_group}"]`).parents('.xagio-group').find('table.keywords');
$('.keywordInput[data-target="keyword"]').unhighlight();
if (target_table.find('.empty-keywords').length > 0) {
target_table.find('.keywords-data').find('.empty-keywords').parents('tr').remove();
}
original_table.trigger("update");
target_table.trigger("update");
let original_table_keywords = original_table.find('.keywords-data tr').find('div.keywordInput[data-target="keyword"]');
let target_table_keywords = target_table.find('.keywords-data tr').find('div.keywordInput[data-target="keyword"]');
let original_keywords = [];
let target_keywords = [];
original_table_keywords.each(function () {
original_keywords.push($(this).text());
});
target_table_keywords.each(function () {
target_keywords.push($(this).text());
});
let original_table_cloud = original_table.parents('.xagio-group').find('.jqcloud');
let target_table_cloud = target_table.parents('.xagio-group').find('.jqcloud');
if (original_table_cloud.length > 0) {
original_table_cloud.jQCloud('update', actions.calculateAndTrim(original_keywords));
original_table_cloud.css("display", "block").resize();
}
if (target_table_cloud.length > 0) {
target_table_cloud.jQCloud('update', actions.calculateAndTrim(target_keywords));
target_table_cloud.css("display", "block").resize();
}
if ($(`input[name="group_id"][value="${original_group}"]`).parents('.xagio-group').find('table.keywords').find('.keywords-data tr').length <
1) {
original_table.find('.keywords-data').html('<tr><td colspan="11"><div class="empty-keywords"><i class="xagio-icon xagio-icon-warning"></i> No added keywords yet... <button type="button" class="xagio-button xagio-button-primary addKeyword"><i class="xagio-icon xagio-icon-plus"></i>Add Keyword(s)</button></div></td></tr>');
}
setTimeout(function () {
let keyword_ids = [];
target.find('tr.selected').each(function () {
let id = $(this).data('id');
keyword_ids.push(id);
});
$.post(xagio_data.wp_post, 'action=xagio_keywordChangeGroup&keyword_ids=' + keyword_ids.join(',') +
'&original_group_id=' + original_group + '&target_group_id=' +
target_group, function (d) {
actions.updateGrid();
xagioNotify("success", "Group change successful.");
});
}, 250);
});
},
prepareURL : function (url) {
if (url == null || url == '') {
return {
pre : '/',
name: ''
};
}
let hasSlash = 2;
if (url.substr(-1) != '/') {
hasSlash = 1;
}
url = url.split('/');
let name = url[url.length - hasSlash];
let cat = url.slice(0, -hasSlash).join('/') + '/';
return {
pre : cat,
name: name
};
},
changeTaxonomyTypes: function () {
$(document).on('change', '#TaxonomyType', function (e) {
taxonomiesTable.fnDraw();
});
$(document).on('change', '#TaxonomyType2', function (e) {
taxonomiesTableCreate.fnDraw();
});
},
changePostTypes : function () {
$(document).on('change', '#PostsType', function (e) {
postsTable.fnDraw();
});
$(document).on('change', '#PostsType2', function (e) {
postsTable2.fnDraw();
});
},
filterByPostType : function () {
$(document).on('change', '#filterPostTypes', function () {
let value = $(this).val() != '' ? ' (<b>' + $(this).val().charAt(0).toUpperCase() +
$(this).val().slice(1) + 's' + ')</b>' : '';
$(this).prev().html('<i class="xagio-icon xagio-icon-filter"></i> ' + value);
actions.loadProjectManually();
});
},
loadPostTypes : function () {
$.post(xagio_data.wp_post, 'action=xagio_get_post_types', function (d) {
if (d.status == 'success') {
pTypes = d.data;
let postTypes = [];
for (let i = 0; i < pTypes.length; i++) {
let type = pTypes[i];
postTypes.push("<option value='" + type + "'>" + type.charAt(0).toUpperCase() + type.slice(1) +
"s</option>");
}
pTypes = postTypes.join('');
// Insert into filters
$('#filterPostTypes').append(pTypes);
// $('#filterPostTypes').trigger('change');
// Load the Datatable for posts
actions.loadPostsPages();
}
});
},
loadPostsPages : function () {
postsTable = $('.postsTable').dataTable({
language : {
search : "_INPUT_",
searchPlaceholder: "Search posts...",
processing : "Loading Posts...",
emptyTable : "No posts found on this website.",
info : "_START_ to _END_ of _TOTAL_ results",
infoEmpty : "0 to 0 of 0 results",
infoFiltered : "(from _MAX_ total results)"
},
"dom" : '<"posts-actions"f>rt<"xagio-table-bottom"lp><"clear">',
"bDestroy" : true,
"searchDelay" : 350,
"bPaginate" : true,
"bAutoWidth" : false,
"bFilter" : true,
"bProcessing" : true,
"sServerMethod" : "POST",
"bServerSide" : true,
"sAjaxSource" : xagio_data.wp_post,
"iDisplayLength": 5,
"aLengthMenu" : [
[
5,
10,
50,
100
],
[
5,
10,
50,
100
]
],
"aaSorting" : [
[
1,
'desc'
]
],
"aoColumns" : [
{
"sClass" : "text-left",
"bSortable": false,
"mData" : 'ID',
"mRender" : function (data, type, row) {
return '<span class="post-id">' + data + '</span>';
}
},
{
"sClass" : "text-left",
"bSortable": true,
"mData" : 'post_title',
"mRender" : function (data, type, row) {
return "<b class='post-title'>" + data + "</b>" +
"<a href='" + row.permalink +
"' target='_blank'>" + row.permalink +
"</a>" +
"<div class='row-actions'>" +
"<a href='#' data-id='" + row.ID +
"' class='attach-to-page-post'>Attach</a>"
+ " <span>|</span> "
+ "<a href='" + xagio_data.wp_admin +
'post.php?post=' + row.ID + '&action=edit' +
"' target='_blank' class='edit'>Edit</a>"
+ " <span>|</span> "
+ "<a href='" + row.page_url +
"' target='_blank' class='view'>View</a>" +
"</div>";
},
"asSorting": [
"desc",
"asc"
]
},
{
"bSortable": true,
"mData" : 'post_date',
"mRender" : function (data, type, row) {
return '<b>' +
row.post_status.charAt(0).toUpperCase() +
row.post_status.slice(1) + 'ed</b>' +
'<br>' + '<abbr title="' + data + '">' +
new Date(data).toUTCString().split(' ').splice(0, 4).join(' ') +
'</abbr>';
},
"asSorting": [
"desc",
"asc"
]
}
],
"fnServerParams": function (aoData) {
aoData.push({
name : 'action',
value: 'xagio_get_posts'
});
if ($('#PostsType').length > 0) {
aoData.push({
name : 'PostsType',
value: $('#PostsType').val()
});
}
},
"fnCreatedRow" : function (row, data, index) {
let modal = $("#attachToPagePost");
let value = modal.find('[name="post_id"]').val();
if (data.ID == value) {
$(row).addClass('attached-pt');
$(row).attr('data-xagio-tooltip', '').attr('data-xagio-title', 'Attached');
}
},
fnInitComplete: function () {
$('.posts-actions').find('input[type="search"]').before('<div class="modal-label">Search</div>');
$('.posts-actions').find('input[type="search"]').addClass('xagio-input-text-mini');
$('.posts-actions').prepend(
'<div class="xagio-flex xagio-flex-gap-medium">' +
'<div><div class="modal-label">Filter Type</div><select class="xagio-input-select xagio-input-select-gray" id="PostsType">' +
'<option value="">– Filter Type –</option>' + pTypes +
'</select></div>'
+
'<div><div class="modal-label">Import From</div><select class="xagio-input-select xagio-input-select-gray" id="AttachType">' +
'<option value="page" selected>Page fields (WordPress)</option>' +
'<option value="group">Group fields (Xagio Project Planner)</option>'
+ '</select></div></div>');
}
});
postsTable2 = $('.postsTable2').dataTable({
language: {
search : "_INPUT_",
searchPlaceholder: "Search posts...",
processing : "Loading Posts...",
emptyTable : "No posts found on this website.",
info : "_START_ to _END_ of _TOTAL_ results",
infoEmpty : "0 to 0 of 0 results",
infoFiltered : "(from _MAX_ total results)"
},
"dom" : '<"posts-actions2"f>rt<"xagio-table-bottom"lp><"clear">',
"bDestroy" : true,
"searchDelay" : 350,
"bPaginate" : true,
"bAutoWidth" : false,
"bFilter" : true,
"bProcessing" : true,
"sServerMethod" : "POST",
"bServerSide" : true,
"sAjaxSource" : xagio_data.wp_post,
"iDisplayLength": 5,
"aLengthMenu" : [
[
5,
10,
50,
100
],
[
5,
10,
50,
100
]
],
"aaSorting" : [
[
1,
'desc'
]
],
"aoColumns" : [
{
"sClass" : "text-left",
"bSortable" : false,
"bSearchable": false,
"mRender" : function (data, type, row) {
let checked = '';
if ($.inArray(row.ID, selectedPosts) != -1) {
checked = 'checked';
}
return '<input ' + checked +
' class="xagio-input-checkbox xagio-input-checkbox-mini select-post" type="checkbox" data-value="' +
row.ID + '" value="' + row.ID + '">';
}
},
{
"sClass" : "text-left",
"bSortable": false,
"mData" : 'ID',
"mRender" : function (data, type, row) {
return '<span class="post-id">' + data +
'</span>';
}
},
{
"sClass" : "text-left",
"bSortable": true,
"mData" : 'post_title',
"mRender" : function (data, type, row) {
return "<b class='post-title'>" + data + "</b>" +
"<div class='row-actions'>"
+ "<a href='" + xagio_data.wp_admin +
'post.php?post=' + row.ID +
'&action=edit' +
"' target='_blank' class='edit'>Edit</a>"
+ " <span>|</span> "
+ "<a href='" + row.page_url +
"' target='_blank' class='view'>View</a>" +
"</div>";
},
"asSorting": [
"desc",
"asc"
]
},
{
"bSortable": true,
"mData" : 'post_date',
"mRender" : function (data, type, row) {
return '<b>' +
row.post_status.charAt(0).toUpperCase() +
row.post_status.slice(1) + 'ed</b>' +
'<br>' + '<abbr title="' + data + '">' +
new Date(data).toUTCString().split(' ').splice(0, 4).join(' ') +
'</abbr>';
},
"asSorting": [
"desc",
"asc"
]
}
],
"fnServerParams": function (aoData) {
aoData.push({
name : 'action',
value: 'xagio_get_posts'
});
if ($('#PostsType2').length > 0) {
aoData.push({
name : 'PostsType',
value: $('#PostsType2').val()
});
}
},
fnInitComplete: function () {
$('.posts-actions2').find('input[type="search"]').before('<div class="modal-label">Search</div>');
$('.posts-actions2').find('input[type="search"]').addClass('xagio-input-text-mini');
$('.posts-actions2').prepend('<div class="modal-label">Filter Type</div><select class=" xagio-input-select xagio-input-select-gray" id="PostsType2">' +
'<option value="">Post Type</option>' +
pTypes + '</select>');
}
});
},
dettachPagePost : function () {
$(document).on('click', '.detachPagePost', function (e) {
e.preventDefault();
let btn = $(this);
let form = btn.parents('.xagio-group').find('.updateGroup');
let group_id = form.find('[name="group_id"]').val();
xagioModal("Are you sure?", "You are about to detach this group from the connected Page/Post. Continue?", function (yes) {
if (yes) {
$.post(xagio_data.wp_post, `action=xagio_detach_from_group&group_id=${group_id}`, function (d) {
actions.loadProjectManually();
});
}
})
});
},
attachToPagePost: function () {
$(document).on('click', '.attach-to-page-post', function (e) {
e.preventDefault();
let button = $(this);
let modal = $("#attachToPagePost");
let post_id = button.data('id');
let attach_t = $('#AttachType').val();
let group_id = modal.find('[name="group_id"]').val();
if (attach_t == "") {
xagioNotify("danger", "Please select first where to import the data from (Title / Description / H1)! You can select your Group's SEO Title and Description, or your Page/Post's SEO Title, Descriptions and H1.");
return;
}
button.disable('Attaching ...');
$.post(xagio_data.wp_post, 'action=xagio_attach_to_page_post&group_id=' + group_id + '&post_id=' +
post_id + '&attach_type=' + attach_t, function (d) {
button.disable();
if (d.status == 'success') {
xagioNotify(d.status, d.message, true);
actions.loadProjectManually();
modal[0].close();
} else {
xagioNotify("danger", d.message);
}
});
});
$(document).on('click', '.attachToPagePost', function (e) {
e.preventDefault();
let group_id = $(this).parents('.xagio-group').find('input[name="group_id"]').val();
let post_id = $(this).data('post-id');
let modal = $("#attachToPagePost");
modal.find('[name="group_id"]').val(group_id);
modal.find('[name="post_id"]').val(post_id);
postsTable.fnDraw();
modal[0].showModal();
});
},
goToPagePost : function () {
$(document).on('click', '.goToPagePost', function (e) {
if ($(this).attr('href') == '#') {
e.preventDefault();
xagioNotify("warning", "You must first attach a page in order to use Go to Page/Post.");
}
});
},
loadTaxonomyTypes: function () {
$.post(xagio_data.wp_post, 'action=xagio_get_taxonomy_types', function (d) {
if (d.status == 'success') {
tTypes = d.data;
let taxTypes = [];
for (let i = 0; i < tTypes.length; i++) {
let type = tTypes[i];
taxTypes.push("<option value='" + type + "'>" + type.charAt(0).toUpperCase() + type.slice(1) +
"</option>");
}
tTypes = taxTypes.join('');
// Load the Datatable for posts
actions.loadTaxonomies();
}
});
},
loadTaxonomies : function () {
taxonomiesTable = $('.taxonomiesTable').dataTable({
language : {
search : "_INPUT_",
searchPlaceholder: "Search taxonomies...",
processing : "Loading taxonomies...",
emptyTable : "No taxonomies found on this website.",
info : "_START_ to _END_ of _TOTAL_ results",
infoEmpty : "0 to 0 of 0 results",
infoFiltered : "(from _MAX_ total results)"
},
"dom" : '<"taxonomies-actions"f>rt<"xagio-table-bottom"lp><"clear">',
"bDestroy" : true,
"searchDelay" : 350,
"bPaginate" : true,
"bAutoWidth" : false,
"bFilter" : true,
"bProcessing" : true,
"sServerMethod" : "POST",
"bServerSide" : true,
"sAjaxSource" : xagio_data.wp_post,
"iDisplayLength": 5,
"aLengthMenu" : [
[
5,
10,
50,
100
],
[
5,
10,
50,
100
]
],
"aaSorting" : [
[
1,
'desc'
]
],
"aoColumns" : [
{
"sClass" : "xagio-text-center",
"bSortable": false,
"mData" : 'term_id',
"mRender" : function (data, type, row) {
return '<span class="taxonomy-id">' +
data + '</span>';
}
},
{
"sClass" : "",
"bSortable": true,
"mData" : 'name',
"mRender" : function (data, type, row) {
return "<b class='taxonomy-name'>" +
data + "</b>" +
"<div class='row-actions'>" +
"<a href='#' data-id='" +
row.term_id +
"' class='attach-to-taxonomy'>Attach</a>"
+ " <span>|</span> "
+ "<a href='" +
xagio_data.wp_admin +
'term.php?taxonomy=' +
row.taxonomy + '&tag_ID=' +
row.term_id +
"' target='_blank' class='edit'>Edit</a>"
},
"asSorting": [
"desc",
"asc"
]
},
{
"bSortable": true,
"mData" : 'taxonomy',
"mRender" : function (data, type, row) {
return data;
},
"asSorting": [
"desc",
"asc"
]
}
],
"fnServerParams": function (aoData) {
aoData.push({
name : 'action',
value: 'xagio_get_taxonomies'
});
if ($('#TaxonomyType').length > 0) {
aoData.push({
name : 'taxonomy',
value: $('#TaxonomyType').val()
});
}
},
"fnCreatedRow" : function (row, data, index) {
let modal = $("#attachToTaxonomy");
let value = modal.find('[name="taxonomy_id"]').val();
if (data.term_id == value) {
$(row).addClass('attached-pt');
$(row).attr('data-xagio-tooltip', '').attr('data-xagio-title', 'Attached')
}
},
fnInitComplete: function () {
$('.taxonomies-actions').find('input[type="search"]').before('<div class="modal-label">Search</div>');
$('.taxonomies-actions').find('input[type="search"]').addClass('xagio-input-text-mini');
$('.taxonomies-actions').append('<div class="xagio-flex xagio-flex-gap-medium">' +
'<div><div class="modal-label">Filter Type</div><select class=" xagio-input-select xagio-input-select-gray" id="TaxonomyType">' +
'<option value="">– Filter Type –</option>' +
tTypes +
'</select></div>'
+
'<div><div class="modal-label">Import Data From</div><select class=" xagio-input-select xagio-input-select-gray" id="AttachTypeTax">' +
'<option value="" selected>Import data from ...</option>' +
'<option value="taxonomy">Taxonomy fields (WordPress)</option>' +
'<option value="group">Group fields (Xagio Project Planner)</option>' +
'</select></div></div>');
}
});
taxonomiesTableCreate = $('.taxonomiesTableCreate').dataTable({
language : {
search : "_INPUT_",
searchPlaceholder: "Search taxonomies...",
processing : "Loading taxonomies...",
emptyTable : "No taxonomies found on this website.",
info : "_START_ to _END_ of _TOTAL_ results",
infoEmpty : "0 to 0 of 0 results",
infoFiltered : "(from _MAX_ total results)"
},
"dom" : '<"taxonomies-actions2"f>rt<"xagio-table-bottom"lp><"clear">',
"bDestroy" : true,
"searchDelay" : 350,
"bPaginate" : true,
"bAutoWidth" : false,
"bFilter" : true,
"bProcessing" : true,
"sServerMethod" : "POST",
"bServerSide" : true,
"sAjaxSource" : xagio_data.wp_post,
"iDisplayLength": 5,
"aLengthMenu" : [
[
5,
10,
50,
100
],
[
5,
10,
50,
100
]
],
"aaSorting" : [
[
1,
'desc'
]
],
"aoColumns" : [
{
"sClass" : "xagio-text-center",
"bSortable" : false,
"bSearchable": false,
"mRender" : function (data, type, row) {
let checked = '';
if ($.inArray(row.term_id, selectedTaxonomies) !=
-1) {
checked = 'checked';
}
return '<input ' + checked +
' class="xagio-input-checkbox xagio-input-checkbox-mini select-taxonomy" type="checkbox" data-value="' +
row.term_id +
'" value="' +
row.term_id + '">';
}
},
{
"sClass" : "xagio-text-center",
"bSortable": false,
"mData" : 'term_id',
"mRender" : function (data, type, row) {
return '<span class="taxonomy-id">' +
data + '</span>';
}
},
{
"sClass" : "",
"bSortable": true,
"mData" : 'name',
"mRender" : function (data, type, row) {
return "<b class='taxonomy-name'>" +
data + "</b>" +
"<div class='row-actions'>"
+ "<a href='" +
xagio_data.wp_admin +
'term.php?taxonomy=' +
row.taxonomy +
'&tag_ID=' +
row.term_id +
"' target='_blank' class='edit'>Edit</a>"
},
"asSorting": [
"desc",
"asc"
]
},
{
"bSortable": true,
"mData" : 'taxonomy',
"mRender" : function (data, type, row) {
return data;
},
"asSorting": [
"desc",
"asc"
]
}
],
"fnServerParams": function (aoData) {
aoData.push({
name : 'action',
value: 'xagio_get_taxonomies'
});
if ($('#TaxonomyType2').length > 0) {
aoData.push({
name : 'taxonomy',
value: $('#TaxonomyType2').val()
});
}
},
fnInitComplete: function () {
$('.taxonomies-actions2').find('input[type="search"]').addClass('xagio-input-text-mini');
$('.taxonomies-actions2').prepend('<select class=" xagio-input-select xagio-input-select-gray" id="TaxonomyType2">' +
'<option value="">– Filter Type –</option>' +
tTypes +
'</select>');
}
});
},
attachToTaxonomy : function () {
$(document).on('click', '.attach-to-taxonomy', function (e) {
e.preventDefault();
let button = $(this);
let modal = $("#attachToTaxonomy");
let taxonomy_id = button.data('id');
let attach_t = $('#AttachTypeTax').val();
let group_id = modal.find('[name="group_id"]').val();
if (attach_t == "") {
xagioNotify("danger", "Please select first where to import the data from (Title / Description / H1)! You can select your Group's SEO Title and Description, or your Taxonomy's SEO Title, Descriptions and H1.");
return;
}
button.disable('Attaching ...');
$.post(xagio_data.wp_post, 'action=xagio_attach_to_taxonomy&group_id=' + group_id + '&taxonomy_id=' +
taxonomy_id + '&attach_type=' + attach_t, function (d) {
button.disable();
if (d.status == 'success') {
xagioNotify(d.status, d.message);
actions.loadProjectManually();
modal[0].close();
} else {
xagioNotify("danger", d.message);
}
});
});
$(document).on('click', '.attachToTaxonomy', function (e) {
e.preventDefault();
let group_id = $(this).parents('.xagio-group').find('input[name="group_id"]').val();
let taxonomy_id = $(this).data('taxonomy-id');
let modal = $("#attachToTaxonomy");
modal.find('[name="group_id"]').val(group_id);
modal.find('[name="taxonomy_id"]').val(taxonomy_id);
taxonomiesTable.fnDraw();
modal[0].showModal();
});
},
goToTaxonomy : function () {
$(document).on('click', '.goToTaxonomy', function (e) {
if ($(this).attr('href') == '#') {
e.preventDefault();
xagioNotify("warning", "You must first attach a page in order to use Go to Page/Post.");
}
});
},
onURLEdit : function () {
$(document).on('focus', '[contenteditable="true"]', function () {
let $this = $(this);
$this.data('before', $this.html());
return $this;
}).on('blur keyup input', '[contenteditable="true"]', function (e) {
let $this = $(this);
if ($this.data('before') != $this.html()) {
$this.data('before', $this.html());
}
return $this;
});
$(document).on('paste', '[contenteditable="true"]', function (e) {
e.preventDefault();
let $this = $(this);
let input = $('<input>');
let text = e.originalEvent.clipboardData.getData("text/plain");
input.val(text);
let pasted_text = input.val();
pasted_text = pasted_text.trim();
if ($this.data('before') != pasted_text) {
$this.data('before', pasted_text);
}
document.execCommand("insertHTML", false, pasted_text);
});
$(document).on('input', '.url-edit', function (e) {
let cont = $(this).parents('.url-container');
let pre = $(this).prev('.pre-url').html();
let name = $(this).html().replace(/\//g, '');
let post = $(this).next('.post-url').html();
cont.find('[name="url"]').val(pre + name + post);
});
$(document).on('click', '.pre-url', function (e) {
e.preventDefault();
$(this).next().focus().select();
});
$(document).on('click', '.post-url', function (e) {
e.preventDefault();
$(this).prev().focus().select();
});
},
parseNumber : function (num) {
if (num === null || num === "") {
return '';
} else {
if (typeof num === 'string') {
num = num.replaceAll(',', '');
}
return parseInt(num).toLocaleString();
}
},
cleanComma : function (num) {
if (typeof num === 'string') {
num = num.replaceAll(',', '');
}
return num;
},
decodeHtml : function (html) {
var txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
},
loadProjectManually : function (button) {
if (currentProjectID == 0) return;
$('.xagio-header-actions-in-project').show();
$('.xagio-header-actions').hide();
let project_dashboard = $('.project-dashboard');
$.post(xagio_data.wp_post, 'action=xagio_get_project_info&project_id=' + currentProjectID, function (d) {
project_dashboard.find('.project-name').html("<i class='xagio-icon xagio-icon-file'></i> #" +
d.data.id +
": " + d.data.name);
});
$.post(xagio_data.wp_post, 'action=xagio_getGroups&project_id=' + currentProjectID + '&post_type=' +
$('#filterPostTypes').val(), function (d) {
if (typeof button === 'object') {
button.disable();
}
d.sort((a, b) => {
if (a.group_name == null) a.group_name = '';
if (b.group_name == null) b.group_name = '';
let aa = a.group_name.toLowerCase(),
bb = b.group_name.toLowerCase();
let matchA = aa.match(/^(\d+)\.\s*(.+)/);
let matchB = bb.match(/^(\d+)\.\s*(.+)/);
if (matchA && matchB) {
let numA = parseInt(matchA[1], 10);
let numB = parseInt(matchB[1], 10);
if (numA === numB) {
let alphaA = matchA[2];
let alphaB = matchB[2];
return alphaA.localeCompare(alphaB);
}
return numA - numB;
}
return aa.localeCompare(bb);
});
let projects_table = $('.projects-table');
let project_groups = $('.project-groups');
let project_empty = $('.project-empty');
if (d.length > 0) {
project_empty.hide();
project_groups.show();
let data = project_groups.find('.data');
let groups = [];
// Remove old loaded groups
data.empty();
// for move keywords select
let select = $("#moveKeywordsModal").find("#moveKeywordGroupSelect");
select.empty();
select.append($('<option>'));
// Render new groups
for (let i = 0; i < d.length; i++) {
let row = d[i];
let template = $('.xagio-group.template').clone();
template.removeClass('template');
// add options for moveKeywords dropdown
select.append(
$('<option>', {
value: row.id,
text: row.group_name
})
);
select.select2({
dropdownParent: $("#moveKeywordsModal"),
placeholder: 'Select group',
width: "100%"
})
//html entity decode
row.title = actions.decodeHtml(row.title);
row.group_name = actions.decodeHtml(row.group_name);
row.h1 = actions.decodeHtml(row.h1);
row.description = actions.decodeHtml(row.description);
let magicPage = row.id_taxonomy != null && row.id_taxonomy != '' && row.id_taxonomy != 0 &&
row.id_taxonomy_term != null && row.id_taxonomy_term.taxonomy == 'location';
// Set the Post Type
if (row.post_type != false) {
if (row.post_type !== null) {
template.addClass('hasAttachedPost');
if (row.id_page_post != null && row.id_page_post != '' && row.id_page_post != 0) {
template.find('.group-seo').addClass('page-attached');
template.find('.attachToPagePost').parents('li').addClass('li-attached');
template.find('.attachToTaxonomy').parents('li').addClass('li-attached');
template.find('.attached').show().html(`<a href="${xagio_data.wp_admin}post.php?post=${row.id_page_post}&action=edit" target="_blank">edit ${row.post_type.replace("_", " ")}</a>`);
}
if (row.id_taxonomy != null && row.id_taxonomy != '' && row.id_taxonomy != 0 &&
row.id_taxonomy_term != null) {
template.find('.group-seo').addClass('page-attached');
template.find('.attachToPagePost').parents('li').addClass('li-attached');
template.find('.attachToTaxonomy').parents('li').addClass('li-attached');
template.find('.attached').show().html(`<a href="${xagio_data.wp_admin}term.php?taxonomy=${row.id_taxonomy_term.taxonomy}&tag_ID=${row.id_taxonomy}" target="_blank">edit ${row.post_type.replace("_", " ")}</a>`);
}
}
}
// Append the Group ID
template.find('[name="group_id"]').val(row.id);
template.find('.seedKeyword').attr('data-group-id', row.id);
template.find('.phraseMatch').attr('data-group-id', row.id);
template.find('[name="project_id"]').val(currentProjectID);
// Change the Group Name
template.find('[name="group_name"]').val(row.group_name);
template.attr('data-name', row.group_name);
let ai_status = row.ai_status;
let ai_input = row.ai_input;
if (ai_status == 'running') {
template.find('.xag-ai-tools-button').attr('title', 'Getting AI Suggestions');
template.find('.xag-ai-tools i.xagio-icon.xagio-icon-robot').removeClass().addClass('xagio-icon xagio-icon-sync xagio-icon-spin');
template.find('.optimize-ai i').removeClass().addClass('xagio-icon xagio-icon-sync xagio-icon-spin');
} else if (ai_status == 'failed') {
template.find('.xag-ai-tools-button').attr('title', 'AI Suggestions Failed');
template.find('.xag-ai-tools').addClass('xag-ai-failed').html(`<i class="xagio-icon xagio-icon-ai"></i> <i class="xagio-icon xagio-icon-close"></i>`);
template.find('.optimize-ai').attr('data-regenerate', 'yes').html(`<i class="xagio-icon xagio-icon-brain"></i> Regenerate AI Suggestions`);
template.find('.createPostPageAi').show();
} else if (ai_status == 'completed') {
template.find('.xag-ai-tools-button').attr('title', 'AI Suggestions Ready');
template.find('.xag-ai-tools').addClass('xag-ai-complete').html(`<i class="xagio-icon xagio-icon-ai"></i> <i class="xagio-icon xagio-icon-check"></i>`);
template.find('.optimize-ai').attr('data-regenerate', 'yes').html(`<i class="xagio-icon xagio-icon-brain"></i> Regenerate AI Suggestions`);
template.find('.view-ai-suggestions').attr('data-ai-input', ai_input);
template.find('.createPostPageAi').show();
template.find('.view-ai-li').show();
}
// Prepare the URL
let pURL = actions.prepareURL(row.url);
template.find('.attachToPagePost').attr('data-post-id', row.id_page_post);
// Go to Page/Post
if (row.id_page_post != null && row.id_page_post != '' && row.id_page_post != 0 &&
row.post_type !== null) {
template.find('.goToPagePost').attr('href', xagio_data.wp_admin + "post.php?post=" +
row.id_page_post + "&action=edit");
template.find('.attachToPagePost').html('Attach to Page/Post (<i title="Attached to an existing Page/Post already." class="uk-text-success xagio-icon xagio-icon-check"></i>)');
template.find('.attachToPagePost').attr('data-group-id', row.id);
} else {
template.find('.goToPagePost').addClass('hidden');
template.find('.detachPagePost').addClass('hidden');
}
template.find('.attachToTaxonomy').attr('data-taxonomy-id', row.id_taxonomy);
// Go to Taxonomy
if (row.id_taxonomy != null && row.id_taxonomy != '' && row.id_taxonomy != 0 &&
row.id_taxonomy_term != null) {
template.find('.goToTaxonomy').attr('href', xagio_data.wp_admin + "term.php?taxonomy=" +
row.id_taxonomy_term.taxonomy + "&tag_ID=" +
row.id_taxonomy);
template.find('.attachToTaxonomy').html('<i class="xagio-icon xagio-icon-target"></i> Attach to Taxonomy (<i title="Attached to an existing Taxonomy already." class="uk-text-success xagio-icon xagio-icon-check"></i>)');
template.find('.attachToTaxonomy').attr('data-group-id', row.id);
} else {
template.find('.goToTaxonomy').addClass('hidden');
}
// Change the rest of the Group Settings
template.find('[name="h1"]').val(row.h1 != null ? row.h1 : '');
// Set to read only if location
if (magicPage) {
template.find('[name="h1"]').attr('disabled', 'disabled');
// template.find('.prs-title').attr('contenteditable', 'false');
// template.find('.prs-description').attr('contenteditable', 'false');
template.find('.url-edit').attr('contenteditable', 'false');
}
template.find('[name="title"]').val(row.title != null ? row.title : '');
template.find('[name="description"]').val(row.description != null ? row.description : '');
if (row.h1_sh != row.h1) {
template.find('[name="h1"]').attr('value-shortcoded', row.h1_sh);
template.find('[name="h1"]').attr('value-original', row.h1);
}
if (row.title_sh != row.title) {
template.find('[name="title"]').attr('value-shortcoded', row.title_sh);
template.find('[name="title"]').attr('value-original', row.title);
}
if (row.description_sh != row.description) {
template.find('[name="description"]').attr('value-shortcoded', row.description_sh);
template.find('[name="description"]').attr('value-original', row.description);
}
template.find('[name="notes"]').val(row.notes != null ? row.notes : '');
template.find('[name="url"]').val(row.url != null ? row.url : '');
if (row.external_domain != null) {
if (row.external_domain != '') {
template.find('.host-url').html(`http://${row.external_domain}`);
}
}
template.find('.pre-url').html(pURL.pre);
template.find('.url-edit').html(pURL.name);
template.find('.post-url').html('/');
template.find('[name="oriUrl"]').val(row.url != null ? row.url : '');
template.find('[data-target="title"]').text(row.title != null ? row.title : '');
template.find('[data-target="description"]').text(row.description !=
null ? row.description : '');
template.find('[data-target="h1tag"]').text(row.h1 != null ? row.h1 : '');
// Calculate Counting
let count_seo_title, count_seo_title_mobile, count_seo_description,
count_seo_description_mobile = 0;
if (row.title != null) {
count_seo_title = row.title.length;
count_seo_title_mobile = row.title.length;
}
if (count_seo_title > 70) {
count_seo_title = `<span class="xagio-seo-count-danger">${count_seo_title}</span>`;
}
if (count_seo_title_mobile > 78) {
count_seo_title_mobile = `<span class="xagio-seo-count-danger">${count_seo_title_mobile}</span>`;
}
if (row.description != null) {
count_seo_description = row.description.length;
count_seo_description_mobile = row.description.length;
}
if (count_seo_description > 300) {
count_seo_description = `<span class="xagio-seo-count-danger">${count_seo_description}</span>`;
}
if (count_seo_description_mobile > 120) {
count_seo_description_mobile = `<span class="xagio-seo-count-danger">${count_seo_description_mobile}</span>`;
}
template.find('.count-seo-title').html(count_seo_title);
template.find('.count-seo-title-mobile').html(count_seo_title_mobile);
template.find('.count-seo-description').html(count_seo_description);
template.find('.count-seo-description-mobile').html(count_seo_description_mobile);
// Go through keywords
if (row.keywords.length > 0) {
let kwData = template.find('.keywords-data');
kwData.empty();
let groupKeywords = [];
for (let k = 0; k < row.keywords.length; k++) {
let keyword = row.keywords[k];
// remove null values
for (let key in keyword) {
if (keyword.hasOwnProperty(key)) {
if (keyword[key] == null) {
keyword[key] = '';
}
}
}
// Is queued
let alsoQueued = false;
if (keyword.inurl == -1 && keyword.intitle == -1) {
alsoQueued = true;
keyword.inurl = null;
keyword.intitle = null;
}
/**
*
* CONDITIONAL FORMATTING
*
*/
let volume_color,
cpc_color,
intitle_color,
inurl_color,
tr_color,
ur_color;
keyword.volume = actions.cleanComma(keyword.volume);
keyword.cpc = actions.cleanComma(keyword.cpc);
keyword.intitle = actions.cleanComma(keyword.intitle);
keyword.inurl = actions.cleanComma(keyword.inurl);
let title_ratio = "";
if (keyword.intitle == 0 && keyword.intitle !== "") {
title_ratio = "0";
} else if (keyword.volume != "" && keyword.intitle != "") {
if (keyword.volume != 0) {
title_ratio = keyword.intitle / keyword.volume;
}
}
let url_ratio = "";
if (keyword.inurl == 0 && keyword.inurl !== "") {
url_ratio = "0";
} else if (keyword.volume !== "" && keyword.inurl !== "") {
if (keyword.volume != 0) {
url_ratio = keyword.inurl / keyword.volume;
}
}
if (keyword.volume === "") {
volume_color = '';
} else if (parseFloat(cf_template.volume_red) >= parseFloat(keyword.volume)) {
volume_color = 'tr_red';
} else if (parseFloat(cf_template.volume_red) < parseFloat(keyword.volume) &&
parseFloat(cf_template.volume_green) > parseFloat(keyword.volume)) {
volume_color = 'tr_yellow';
} else if (parseFloat(cf_template.volume_green) <= parseFloat(keyword.volume)) {
volume_color = 'tr_green';
}
if (keyword.cpc === "") {
cpc_color = '';
} else if (parseFloat(cf_template.cpc_red) >= parseFloat(keyword.cpc)) {
cpc_color = 'tr_red';
} else if (parseFloat(cf_template.cpc_red) < parseFloat(keyword.cpc) &&
parseFloat(cf_template.cpc_green) > parseFloat(keyword.cpc)) {
cpc_color = 'tr_yellow';
} else if (parseFloat(cf_template.cpc_green) <= parseFloat(keyword.cpc)) {
cpc_color = 'tr_green';
}
if (keyword.intitle === "") {
intitle_color = '';
} else if (parseFloat(cf_template.intitle_red) <= parseFloat(keyword.intitle)) {
intitle_color = 'tr_red';
} else if (parseFloat(cf_template.intitle_red) > parseFloat(keyword.intitle) &&
parseFloat(cf_template.intitle_green) < parseFloat(keyword.intitle)) {
intitle_color = 'tr_yellow';
} else if (parseFloat(cf_template.intitle_green) >= parseFloat(keyword.intitle)) {
intitle_color = 'tr_green';
}
if (keyword.inurl === "") {
inurl_color = '';
} else if (parseFloat(cf_template.inurl_red) <= parseFloat(keyword.inurl)) {
inurl_color = 'tr_red';
} else if (parseFloat(cf_template.inurl_red) > parseFloat(keyword.inurl) &&
parseFloat(cf_template.inurl_green) < parseFloat(keyword.inurl)) {
inurl_color = 'tr_yellow';
} else if (parseFloat(cf_template.inurl_green) >= parseFloat(keyword.inurl)) {
inurl_color = 'tr_green';
}
if (title_ratio === "") {
tr_color = '';
} else if (parseFloat(title_ratio) >= parseFloat(cf_template.title_ratio_red)) {
tr_color = 'tr_red';
} else if (parseFloat(title_ratio) < parseFloat(cf_template.title_ratio_red) &&
parseFloat(title_ratio) > parseFloat(cf_template.title_ratio_green)) {
tr_color = 'tr_yellow';
} else if (parseFloat(title_ratio) <= parseFloat(cf_template.title_ratio_green)) {
tr_color = 'tr_green';
}
if (url_ratio === "") {
ur_color = '';
} else if (parseFloat(url_ratio) >= parseFloat(cf_template.url_ratio_red)) {
ur_color = 'tr_red';
} else if (parseFloat(url_ratio) < parseFloat(cf_template.url_ratio_red) &&
parseFloat(url_ratio) > parseFloat(cf_template.url_ratio_green)) {
ur_color = 'tr_yellow';
} else if (parseFloat(url_ratio) <= parseFloat(cf_template.url_ratio_green)) {
ur_color = 'tr_green';
}
/**
*
* CONDITIONAL FORMATTING
*
*/
let tr = $('<tr data-queued="' + keyword.queued + '" data-id="' + keyword.id +
'"></tr>');
tr.append('<td class="xagio-text-center"><div class="drag-cursor"></div> <input type="checkbox" class="keyword-selection" value="' +
keyword.id + '" name="keywords[]" /></td>');
tr.append('<td><div contenteditable="true" class="keywordInput" data-target="keyword">' +
keyword.keyword + '</div></td>');
if (keyword.queued == 2) {
tr.append('<td data-target="volume" title="This value is currently under analysis. Please check back later to see the results."><i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i></td>');
tr.append('<td data-target="cpc" title="This value is currently under analysis. Please check back later to see the results."><i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i></td>');
} else {
tr.append('<td class="' + volume_color +
'"><div contenteditable="true" class="keywordInput" data-target="volume">' +
actions.parseNumber(keyword.volume) + '</div></td>');
tr.append('<td class="' + cpc_color +
'"><div contenteditable="true" class="keywordInput" data-target="cpc">' +
keyword.cpc + '</div></td>');
}
if (keyword.queued == 1 || alsoQueued == true) {
actions.runBatchCron();
tr.append('<td data-target="intitle" title="This value is currently under analysis. Please check back later to see the results."><i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i></td>');
tr.append('<td data-target="inurl" title="This value is currently under analysis. Please check back later to see the results."><i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i></td>');
} else {
tr.append('<td data-target="intitle" class="' + intitle_color +
'"><div contenteditable="true" class="keywordInput" data-target="intitle">' +
actions.parseNumber(keyword.intitle) + '</div></td>');
tr.append('<td data-target="inurl" class="' + inurl_color +
'"><div contenteditable="true" class="keywordInput" data-target="inurl">' +
actions.parseNumber(keyword.inurl) + '</div></td>');
}
if (title_ratio != "") {
if (tr_color == "tr_green" &&
(parseFloat(cf_template.tr_goldbar_volume) >= parseFloat(keyword.volume) &&
parseFloat(cf_template.tr_goldbar_intitle) >= parseFloat(keyword.intitle))) {
tr.append('<td class="xagio-text-center ' + tr_color +
'" data-target="tr"><div contenteditable="false" class="keywordInput" data-target="tr" data-xagio-tooltip data-xagio-title="Value: ' +
parseFloat(title_ratio).toFixed(3) + '"><img src="' +
xagio_data.plugins_url + 'assets/img/gold.webp"></div></td>');
} else {
tr.append('<td class="xagio-text-center ' + tr_color +
'" data-target="tr"><div contenteditable="true" class="keywordInput" data-target="tr" data-xagio-tooltip data-xagio-title="Value: ' +
parseFloat(title_ratio).toFixed(3) + '">' +
parseFloat(title_ratio).toFixed(3) + '</div></td>');
}
} else {
tr.append('<td class="xagio-text-center ' + tr_color +
'" data-target="tr"><div contenteditable="true" class="keywordInput" data-target="tr" data-xagio-tooltip data-xagio-title="Search Volume and InTitle metrics must be retrieved first to see the Title Ratio."><i class="xagio-icon xagio-icon-minus"></i></div></td>');
}
if (url_ratio != "") {
if (ur_color == "tr_green" &&
(parseFloat(cf_template.ur_goldbar_volume) >= parseFloat(keyword.volume) &&
parseFloat(cf_template.ur_goldbar_intitle) >= parseFloat(keyword.inurl))) {
tr.append('<td class="xagio-text-center ' + ur_color +
'" data-target="ur"><div contenteditable="false" class="keywordInput" data-target="ur" data-xagio-tooltip data-xagio-title="Value: ' +
parseFloat(url_ratio).toFixed(3) + '"><img src="' +
xagio_data.plugins_url + 'assets/img/gold.webp"></div></td>');
} else {
tr.append('<td class="xagio-text-center ' + ur_color +
'" data-target="ur"><div contenteditable="true" class="keywordInput" data-target="ur" data-xagio-tooltip data-xagio-title="Value: ' +
parseFloat(url_ratio).toFixed(3) + '">' +
parseFloat(url_ratio).toFixed(3) + '</div></td>');
}
} else {
tr.append('<td class="xagio-text-center ' + ur_color +
'" data-target="ur"><div contenteditable="true" class="keywordInput" data-target="ur" data-xagio-tooltip data-xagio-title="Search Volume and InURL metrics must be retrieved first to see the URL Ratio."><i class="xagio-icon xagio-icon-minus"></i></div></td>');
}
let rank = keyword.rank.isJSON();
let rank_cell = '';
if (rank == 0) {
rank_cell = '<span data-xagio-tooltip data-xagio-title="Not Added"><i class="xagio-icon xagio-icon-minus"></i><span style="display: none;">99999</span></span>';
} else if (rank == 501) {
rank_cell = '<span data-xagio-tooltip data-xagio-title="Analysing..."><i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i><span style="display: none;">99998</span></span>';
} else {
let max = 501;
let rank_title = '';
if ($.isNumeric(rank)) max = rank;
for (let j = 0; j < rank.length; j++) {
let obj = rank[j];
if (obj.rank != 'NTH' || obj.rank == null) {
if (max > obj.rank) {
max = obj.rank;
}
if (typeof obj.rank == 'undefined') {
obj.rank = "<i class='xagio-icon xagio-icon-ban'></i>";
}
rank_title += obj.engine + ' : ' + obj.rank + '<br>';
} else {
rank_title += obj.engine +
' : <i class=\'xagio-icon xagio-icon-ban\'></i><br>';
}
}
if (max == 501) {
rank_cell = '<a href="https://app.xagio.net/rank_tracker?domain=' +
xagio_data.domain +
'&keyword=' + encodeURIComponent(keyword.keyword) +
'" target="_blank" data-xagio-tooltip data-xagio-title="' +
rank_title +
'"><i class=\'xagio-icon xagio-icon-ban\'></i><span style="display: none;">99997</span></a>';
} else {
if ($.isNumeric(rank)) {
rank_cell = max;
} else {
rank_cell = '<a href="https://app.xagio.net/rank_tracker?domain=' +
xagio_data.domain +
'&keyword=' + encodeURIComponent(keyword.keyword) +
'" target="_blank" data-xagio-tooltip data-xagio-title="' +
rank_title + '">' + max + '</a>';
}
}
}
tr.append('<td class="text-center">' + rank_cell + '</td>');
groupKeywords.push(tr);
}
kwData.append(groupKeywords);
}
groups.push(template);
}
data.append(groups);
} else {
project_empty.show();
project_groups.hide();
}
projects_table.slideUp("fast", function () {
actions.updateElements();
actions.updateGrid();
});
project_dashboard.slideDown("fast", function () {
setTimeout(function () {
if (actions.getUrlParameters('gid')) {
let view_group_id = actions.getUrlParameters('gid');
var target = $(`input[name="group_id"][value="${view_group_id}"]`).parents('.xagio-group');
if (target.length) {
var top = target.offset().top - 120;
$('html,body').animate({scrollTop: top}, 1000);
}
}
}, 500);
});
});
},
runAgent : function () {
$(document).on('click', '.run_agent', function (e) {
e.preventDefault();
let ProjectID = $(this).data('id');
xagioModal('Agent X', 'This will redirect you to Agent X and preselect this project for Agent X to process. Continue?', function (yes) {
if (yes) {
$.post(xagio_data.wp_post, 'action=xagio_ocw_save_project_id&project_id=' + ProjectID, function (d) {
document.location.href = xagio_data.wp_admin + `admin.php?page=xagio-ocw`;
});
}
});
});
},
loadProject : function () {
$(document).on('click', '.load_project', function (e) {
e.preventDefault();
currentProjectID = $(this).data('id');
currentProjectName = $(this).data('name');
let button = $(this);
button.disable();
$('.sort-groups-asc').removeClass('uk-active').hide();
$('.uk-active').removeClass('uk-active').addClass('uk-active').show();
$('.logo-paragraph.uk-block-xagio').slideUp();
actions.importKeywordPlanner();
actions.loadProjectManually(button);
actions.initGlobalCloud();
});
},
duplicateProject : function () {
$(document).on('click', '.duplicate_project', function () {
let button = $(this);
let project_id = button.data('id');
button.disable();
$.post(xagio_data.wp_post, 'action=xagio_duplicate_project&project_id=' + project_id, function (d) {
button.disable();
actions.loadProjects();
xagioNotify(d.status, d.message);
});
});
},
removeAlertProjectID: function () {
$.post(xagio_data.wp_post, 'action=xagio_remove_alert_project_id', function (d) {
// actions.removeAlertProjectID();
});
},
backToProjects : function () {
$(document).on('click', '.closeProject', function (e) {
let currentUrl = window.location.href;
let newUrl = currentUrl.replace(/(\?|&)(pid=\d+|gid=\d+)(&|$)/g, function (match, p1, p2, p3) {
if (p1 === '?' && p3 === '&') {
return '?';
} else if (p1 === '&' && p3 === '&') {
return '&';
} else {
return '';
}
});
newUrl = newUrl.replace(/(\?|&)$/, '');
window.history.pushState({}, '', newUrl);
function runBack() {
$('.xagio-header-actions-in-project').hide();
$('.xagio-header-actions').show();
let project_dashboard = $('.project-dashboard');
let projects_table = $('.projects-table');
$('.logo-paragraph.uk-block-xagio').slideDown();
projects_table.slideDown();
project_dashboard.slideUp();
currentProjectID = 0;
}
if (activeChanges) {
xagioModal("Unsaved Changes", "You have unsaved changes in your Project! Continue?", function (result) {
if (result) runBack();
});
} else {
runBack();
}
});
},
removeProject : function () {
$(document).on('click', '.remove_project', function (e) {
e.preventDefault();
let id = $(this).data('id');
let modal = $('#deleteProject');
modal.find('#projectId').val(id);
modal[0].showModal();
});
$(document).on('click', '.delete-project', function () {
let btn = $(this);
let modal = btn.parents('.xagio-modal');
let deleteRanks = modal.find('#deleteProjectRanks').is(':checked');
let project_id = modal.find('#projectId').val();
btn.disable();
$.post(xagio_data.wp_post, 'action=xagio_remove_project&project_id=' + project_id + '&deleteRanks=' +
deleteRanks, function (d) {
modal[0].close();
btn.disable();
actions.loadProjects();
xagioNotify("success", "Project has been removed.");
});
});
$('#deleteProject')[0].addEventListener("close", (event) => {
let modal = $(event.target);
modal.find('#deleteProjectRanks').val(0).prop('checked', false);
modal.find('#projectId').val('');
});
},
loadProjects : function () {
let project_table = $('.pTable').dataTable({
"dom" : '<"clear">rt<"xagio-table-bottom"lp><"clear">',
"bDestroy" : true,
"bPaginate" : true,
"bAutoWidth" : false,
"bFilter" : true,
"sServerMethod" : "POST",
"sAjaxSource" : xagio_data.wp_post,
"iDisplayLength": 10,
"language" : {
"emptyTable": "<div class='xagio-buttons-flex xagio-flex-align-center'><a href='#' class='xagio-button xagio-button-primary new-project'><i class='xagio-icon xagio-icon-plus'></i> Create My First Project</a>" +
"<a class='xagio-button xagio-button-primary' data-xagio-modal='importProject'><i class='xagio-icon xagio-icon-download'></i> Import Existing Project</a></div>"
},
"aLengthMenu" : [
[
5,
10,
50,
100,
-1
],
[
5,
10,
50,
100,
"All"
]
],
"aaSorting" : [
[
0,
'desc'
]
],
"aoColumns" : [
{
"sClass" : "",
"bSortable": true,
"mData" : "id",
"mRender" : function (data, type, row) {
return '<input data-id="' + data +
'" type="checkbox" class="select-project"/>';
}
},
{
"sClass" : "",
"bSortable": true,
"mData" : "project_name",
"mRender" : function (data, type, row) {
return `<b>${data.replace(/\\/g, '')}</b> <i title="Rename Project" class="xagio-icon xagio-icon-edit rename_project" data-id="${row.id}" data-name="${data.replace(/\\/g, '')}"></i>`;
}
},
{
"sClass" : "",
"bSortable": true,
"mData" : "date_created",
"mRender" : function (data, type, row) {
return new Date(data).toDateString();
}
},
{
"sClass" : "xagio-text-center",
"bSortable": true,
"mData" : "groups",
"mRender" : function (data, type, row) {
if (data ===
"0") return `<i class="xagio-icon xagio-icon-minus"></i>`;
return `<b>${data}</b>`;
}
},
{
"sClass" : "xagio-text-center",
"bSortable": true,
"mData" : "keywords",
"mRender" : function (data, type, row) {
if (data ===
"0") return `<i class="xagio-icon xagio-icon-minus"></i>`;
return `<b>${data}</b>`;
}
},
{
"sClass" : "xagio-text-center",
"bSortable": true,
"mData" : "shared",
"mRender" : function (data, type, row) {
let buttons = '';
let share_button = '';
let share_enabled = 0;
let share_checked = '';
if (data != null) {
let share_url = xagio_data.wp_admin.replace('wp-admin/', '') +
'shared-seo-report?hash=' +
data;
share_enabled = 1;
share_checked = 'checked="checked"';
share_button += `<button data-shared-url="${share_url}" title="Shared link" data-toggle="tooltip" data-placement="top" class="xagio-button xagio-button-primary xagio-button-mini shared_project_link"><i class="xagio-icon xagio-icon-external-link"></i> </button> `;
}
buttons += `<label class="switch" title="Enable/Disable"><input type="checkbox" data-id="${row.id}" value="${share_enabled}" class="on-off-share" ${share_checked}><div class="slider round"></div></label>`;
buttons += share_button;
buttons = `<div class="share_btn_cell">${buttons}</div>`
return buttons;
}
},
{
"sClass" : "xagio-text-center",
"bSortable": false,
"mRender" : function (data, type, row) {
if (row.status != 'queued') {
let buttons = '';
buttons += '<div class="xagio-cell-actions-row xagio-flex-align-center">';
if (alertProjectID === row.id) {
buttons += '<div data-name="' +
row.project_name +
'" data-id="' + row.id +
'" class="project-alert" style="display:inline;" ><img src="' +
xagio_data.plugins_url +
'assets/img/logo-nag-xagio.webp" alt="Alert logo" width="30" height="30"></div> ';
} else {
buttons += '<div data-name="' +
row.project_name +
'" data-id="' + row.id +
'" class="project-alert" style="display:none;" ><img src="' +
xagio_data.plugins_url +
'assets/img/logo-nag-xagio.webp" alt="Alert logo" width="30" height="30"></div> ';
}
buttons += '<button data-name="' +
row.project_name +
'" data-id="' + row.id +
'" data-xagio-tooltip data-xagio-title="Load this project" type="button" class="xagio-button xagio-button-primary xagio-button-mini load_project"><i class="xagio-icon xagio-icon-folder-open"></i></button> ';
buttons += '<button data-name="' +
row.project_name +
'" data-id="' + row.id +
'" data-xagio-tooltip data-xagio-title="Run Agent X for this project" type="button" class="xagio-button xagio-button-primary xagio-button-mini run_agent"><i class="xagio-icon xagio-icon-ai"></i></button> ';
buttons += `<button data-name="${row.project_name}" data-id="${row.id}" data-xagio-tooltip data-xagio-title="Duplicate this project" type="button" class="xagio-button xagio-button-primary xagio-button-mini duplicate_project"><i class="xagio-icon xagio-icon-copy"></i></button> `;
buttons += '<button data-id="' + row.id +
'" data-xagio-tooltip data-xagio-title="Export this project" type="button" class="xagio-button xagio-button-primary xagio-button-mini export_project"><i class="xagio-icon xagio-icon-download"></i></button> ';
buttons += '<button data-id="' + row.id +
'" data-xagio-tooltip data-xagio-title="Remove this project permanently" type="button" class="xagio-button xagio-button-danger xagio-button-mini remove_project"><i class="xagio-icon xagio-icon-delete"></i></button> ';
buttons += '</div>';
return buttons;
} else {
return '<i class="xagio-icon xagio-icon-sync xagio-icon-spin"></i> Automatically generating groups... ' +
'<button data-id="' + row.id +
'" data-xagio-tooltip data-xagio-title="Cancel this operation" type="button" class="xagio-button xagio-button-danger xagio-button-mini remove_project"><i class="xagio-icon xagio-icon-delete"></i></button> '
}
}
}
],
"fnServerParams": function (aoData) {
aoData.push({
name : 'action',
value: 'xagio_get_projects'
});
},
});
$(document).on('keyup', '.search-projects', function () {
$('.pTable').dataTable().fnFilter($(this).val());
});
},
/*Export Selected Groups*/
exportAllProjects: function () {
$(document).on('click', '.export-all-projects', function (e) {
e.preventDefault();
window.location = xagio_data.wp_post + '?action=xagio_export_projects' + '&_xagio_nonce=' +
xagio_data.nonce;
})
},
/*Export Selected Groups*/
exportGroups: function () {
$(document).on('click', '.exportGroups', function () {
let ids = [];
$('.project-groups .xagio-group .groupSelect:checked').each(function () {
let group = $(this).parents('.xagio-group');
ids.push(group.find('[name="group_id"]').val());
});
if (ids.length < 1) {
xagioNotify("warning", "Please select at least one group");
return false;
}
ids = ids.join(",");
window.location = xagio_data.wp_post + '?action=xagio_export_groups&group_ids=' + ids +
'&_xagio_nonce=' + xagio_data.nonce;
})
},
/*Export Selected Keywords*/
exportKeywords: function () {
$(document).on('click', '.exportKeywords', function () {
let keywordIds = [];
$('.xagio-group:not(.template) .keyword-selection:checked').each(function () {
keywordIds.push($(this).val());
});
if (keywordIds.length < 1) {
xagioNotify("warning", "Please select at least one keyword");
return false;
}
keywordIds = keywordIds.join(",");
window.location = xagio_data.wp_post + '?action=xagio_export_keywords&keyword_ids=' + keywordIds +
'&_xagio_nonce=' + xagio_data.nonce;
})
},
/*Export Import Projects*/
exportProject : function () {
$(document).on('click', '.export_project', function () {
let project_id = $(this).attr('data-id');
window.location = xagio_data.wp_post + '?action=xagio_export_project&project_id=' + project_id +
'&_xagio_nonce=' + xagio_data.nonce;
})
},
importProject : function () {
$('#importProject').xagio_uploader('xagio_import_project', actions.loadProjects);
},
importKWS : function () {
$(document).on('click', '.importKWS', function () {
pong = false;
let popup = window.open(KWS_Origin + "?redirect=/results_area");
let interval = setInterval(function () {
if (popup && !popup.closed && pong == false) {
popup.postMessage("ping-" + document.location.origin, KWS_Origin);
} else {
clearInterval(interval);
}
}, 500);
});
},
importKeywordPlanner : function () {
$('#importKeywordPlanner').xagio_uploader('xagio_import_keyword_planner&project=' +
currentProjectID, actions.loadProjectManually);
},
createPagePostMulti : function () {
$(document).on('click', '.createPagesPosts', function (e) {
e.preventDefault();
let table = $('.pagePostAllTableTemplate.xagio-hidden').clone().removeClass('xagio-hidden');
let tr = table.find('.tr_template');
let body = table.find('.body_template').html('');
table.find('.body_template').html('');
let counter = 0;
$('.project-groups .xagio-group').each(function () {
let group_name = $(this).find('input[name="group_name"]').val();
let group_id = $(this).find('input[name="group_id"]').val();
tr.find('.group_name').html(group_name).attr('data-id', group_id);
tr.find('.xagio-radio-btn-holder input[type="radio"]').attr('name', `post_or_page_${counter}`);
tr.find('.page_selection input[type="radio"]').attr('id', `select_page_${counter}`);
tr.find('.page_selection label').attr('for', `select_page_${counter}`);
tr.find('.post_selection input[type="radio"]').attr('id', `select_post_${counter}`);
tr.find('.post_selection label').attr('for', `select_post_${counter}`);
body.append('<tr>' + tr.html() + '</tr>');
counter++;
});
let mod = $('#pagePostMulti');
mod.find('.table_holder_all').html(table);
mod[0].showModal();
});
$(document).on('click', '.pagePostMultiBtn', function (e) {
e.preventDefault();
let modal = $(this).parents('#pagePostMulti');
let table = modal.find('.pagePostAllTableTemplate');
let tr = table.find('.body_template tr');
tr.each(function () {
let current_tr = $(this);
let group_id = current_tr.find('.group_name').attr('data-id');
let type = current_tr.find('.createMultiResults input[type="radio"]:checked').val();
current_tr.find('.createMultiResults').html('<i class="xagio-icon xagio-icon-gear xagio-icon-spin"></i>');
let data = {
action : 'xagio_create_page_post',
group_id : group_id,
type : type,
request_type: 'multi'
};
$.ajaxq("pagePostMulti", {
url : xagio_data.wp_post,
type : 'post',
data : data,
cache : false,
success: function (d) {
// let group_id = d.group_id;
let icon = '';
let info_class = '';
if (d.status == 'error') {
icon = '<i class="xagio-icon xagio-icon-warning uk-text-warning"></i>';
info_class = 'tr_danger';
}
let url = '';
if (d.status == 'success') {
icon = '<i class="xagio-icon xagio-icon-check uk-text-success"></i>';
url = '<br><a href="' + d.data.url + '" target="_blank">' + d.data.url + '</a>';
info_class = 'tr_check';
}
if (d.status == 'warning') {
icon = '<i class="xagio-icon xagio-icon-warning uk-text-warning"></i>';
url = '<br><a href="' + d.data.url + '" target="_blank">' + d.data.url + '</a>';
info_class = 'tr_danger';
}
$('td[data-id="' + group_id +
'"]').parents('tr').addClass(info_class).find('.createMultiResults').html(icon + ' ' +
d.message +
url);
}
});
});
});
$(document).on('click', 'div[data-uk-button-radio] button[aria-checked]', function (e) {
e.preventDefault();
});
},
calculateAndTrim : function (t) {
let words_split = [];
for (let i = 0; i < t.length; i++) {
words_split.push(t[i].split(' '));
}
words_split = [].concat.apply([], words_split);
let words = [];
for (let i = 0; i < words_split.length; i++) {
let check = 0;
let final = {
text : '',
weight : 0,
html : {
'data-xagio-title' : 0,
'data-xagio-tooltip': ''
},
handlers: {
click: function (e) {
e.preventDefault();
const $clicked = $(e.currentTarget);
const word = $clicked.text().trim();
const isGlobal = $clicked.closest('.xagio-keyword-cloud-global').length > 0;
let seed_panel = $('.seed-keywords-inputs');
// Toggle highlight class on the clicked element
if ($clicked.hasClass('highlightWordInCloud')) {
if (isGlobal) {
selected_seed_keywords = jQuery.grep(selected_seed_keywords, function (value) {
return value != word;
});
}
$clicked.removeClass('highlightWordInCloud');
} else {
if (isGlobal) {
selected_seed_keywords.push(word);
}
$clicked.addClass('highlightWordInCloud');
}
seed_panel.empty();
for (let j = 0; j < selected_seed_keywords.length; j++) {
let kw = selected_seed_keywords[j];
let template_panel = $(".seed_panel_container_template.xagio-hidden").clone().removeClass('xagio-hidden');
seed_panel.append(template_panel);
seed_panel.find('[name="seed_group_name[]"]').eq(j).val(kw);
seed_panel.find('[name="seed_keywords[]"]').eq(j).val(kw);
}
if (isGlobal && selected_seed_keywords.length > 0) {
$('.seed-keywords-panel-start').hide();
$('.seed-keywords-panel-select').show();
} else {
$('.seed-keywords-panel-start').show();
$('.seed-keywords-panel-select').hide();
}
// Determine groups: all groups for global, or just the current group
let groups = isGlobal ? $('.project-groups').find('.xagio-group') : $clicked.closest('.xagio-group');
groups.each(function () {
const group = $(this);
// Set last seed group id from this group
lastSeedGroupId = group.find('[name="group_id"]').val();
// Clear all seed group containers and reset inputs
const seedKeywordModal = $('#seedKeywordsModal');
seedKeywordModal.find(".seed_group_container_template").remove();
seedKeywordModal.find("input[type='text']").val("");
//Vars
let title = group.find('.prs-title');
let desc = group.find('.prs-description');
let url = group.find('.url-edit');
let h1Tag = group.find('.prs-h1tag');
// Remove b tag from title, description, url, H1
group.find('.updateGroup b').each(function () {
title.html(title.html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
desc.html(desc.html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
url.html(url.html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
h1Tag.html(h1Tag.html().replace(/<b class="highlightCloud">(.+)<\/b>/gi, "$1"));
});
// Remove any existing highlight for this word in the group's keywords
group.find('.keywordInput[data-target="keyword"]').each(function () {
const $kwElem = $(this);
const newHtml = $kwElem.html().replace(
new RegExp(`<b\\s+class="highlightCloud">\\s*${actions.escapeRegExp(word)}\\s*<\\/b>`, "gi"),
word
);
$kwElem.html(newHtml);
const tr = $kwElem.closest(".ui-sortable-handle");
if($kwElem.find('b').length < 1) {
tr.find("input.keyword-selection").prop('checked', false);
tr.removeClass("selected");
}
});
// If the clicked word is now highlighted, add highlighting and update seed form containers
if ($clicked.hasClass('highlightWordInCloud')) {
let forms = $('#seedKeywordsForm');
// Get the cloud container that holds highlighted words
let cloud;
if (isGlobal) {
cloud = $('.xagio-keyword-cloud-global').find('.cloud.template.seen.jqcloud').find('.highlightWordInCloud');
} else {
cloud = group.find('.cloud.template.seen.jqcloud').find('.highlightWordInCloud');
}
// Loop through each highlighted word in the cloud to update the seed form
cloud.each(function (i) {
const t = $(this).text().trim();
if (i > 0) {
let template = $(".seed_group_container_template.xagio-hidden").clone().removeClass('xagio-hidden');
$("#seed_group_container").append(template);
}
forms.find('[name="seed_group_name[]"]').eq(i).val(t);
forms.find('[name="seed_keywords[]"]').eq(i).val(t);
// Add b tag in title, desciption, url, keywords, H1
let title_matches = title.html().match(new RegExp($(this).text(), 'gi'));
let desc_matches = desc.html().match(new RegExp($(this).text(), 'gi'));
let url_matches = url.html().match(new RegExp($(this).text(), 'gi'));
let h1Tag_matches = h1Tag.html().match(new RegExp($(this).text(), 'gi'));
if (title_matches !== null) {
for (let j = 0; j < title_matches.length; j++) {
const titleMatch = title_matches[j];
const titleReg = new RegExp(`\\b(${titleMatch})\\b`, "g");
title.html(title.html().replace(titleReg, '<b class="highlightCloud">' + titleMatch + '</b>'));
}
}
if (desc_matches !== null) {
for (let j = 0; j < desc_matches.length; j++) {
const descMatch = desc_matches[j];
const descReg = new RegExp(`\\b(${descMatch})\\b`, "g");
desc.html(desc.html().replace(descReg, '<b class="highlightCloud">' + descMatch + '</b>'));
}
}
if (url_matches !== null) {
for (let j = 0; j < url_matches.length; j++) {
const urlMatch = url_matches[j];
const urlReg = new RegExp(`\\b(${urlMatch})\\b`, "g");
url.html(url.html().replace(urlReg, '<b class="highlightCloud">' + urlMatch + '</b>'));
}
}
if (h1Tag_matches !== null) {
for (let j = 0; j < h1Tag_matches.length; j++) {
const h1TagMatch = h1Tag_matches[j];
const h1TagReg = new RegExp(`\\b(${h1TagMatch})\\b`, "g");
h1Tag.html(h1Tag.html().replace(h1TagReg, '<b class="highlightCloud">' + h1TagMatch + '</b>'));
}
}
});
// For each keyword in this group, wrap matching occurrences of the clicked word with <b>
group.find('.keywordInput[data-target="keyword"]').each(function () {
const $kwElem = $(this);
let html = $kwElem.html();
let newHtml = html.replace(
new RegExp(`\\b(${actions.escapeRegExp(word)})\\b`, "gi"),
'<b class="highlightCloud">$1</b>'
);
$kwElem.html(newHtml);
const tr = $kwElem.closest(".ui-sortable-handle");
if (newHtml.indexOf('<b class="highlightCloud">') !== -1) {
tr.find("input.keyword-selection").prop('checked', true);
tr.addClass("selected");
}
});
}
});
// Update the text of the keywords-action-button based on the count of highlighted keywords
let cloud;
if (isGlobal) {
lastSeedGroupId = 0;
cloud = $('.xagio-keyword-cloud-global').find('.cloud.template.seen.jqcloud').find('.highlightWordInCloud');
} else {
cloud = $clicked.parents('.cloud.template.seen.jqcloud').find('.highlightWordInCloud');
}
let selectedKeywordsCount = cloud.length;
if (selectedKeywordsCount > 0) {
$('.seedKeyword').html(`Seed Keywords <span class="seed_keywords_selected">(${selectedKeywordsCount})</span>`);
$('.keywords-action-button').html(`Keywords<span class="seed_keywords_selected">Seed (${selectedKeywordsCount})</span> <i class="xagio-icon xagio-icon-arrow-down"></i>`);
} else {
$('.seedKeyword').html('Seed Keywords');
$('.keywords-action-button').html('Keywords <i class="xagio-icon xagio-icon-arrow-down"></i>');
}
}
}
};
for (let j = 0; j < words.length; j++) {
if (words_split[i] == words[j].text && words_split[i].length >= 2) {
check = 1;
++words[j].weight;
++words[j].html['data-xagio-title'];
}
}
if (check == 0 && words_split[i].length >= 2) {
final.text = words_split[i];
final.weight = 1;
final.html["data-xagio-title"] = 1;
words.push(final);
}
check = 0;
}
return words;
},
calculateKeywordWeight: function (t) {
let words_split = [];
for (let i = 0; i < t.length; i++) {
words_split.push(t[i].split(' '));
}
words_split = [].concat.apply([], words_split);
let words = [];
for (let i = 0; i < words_split.length; i++) {
let check = 0;
let final = {
text : '',
weight: 0
};
for (let j = 0; j < words.length; j++) {
if (words_split[i] == words[j].text && words_split[i].length >= 2) {
check = 1;
++words[j].weight;
}
}
if (check == 0 && words_split[i].length >= 2) {
final.text = words_split[i];
final.weight = 1;
words.push(final);
}
check = 0;
}
return words;
},
formatSEO : function (t) {
$(document).on('change, paste, keyup, input', '.prs-title', function (e) {
$(this).prev('input').val($(this).text());
let wordCount = $(this).html().replace(/\ \;/g, ' ').replace(/\s+/g, ' ').trim().length;
if (wordCount > 70) {
$(this).parents('.group-seo').find('.count-seo-title').html('<span class="xagio-seo-count-danger">' +
wordCount +
'</span>');
} else {
$(this).parents('.group-seo').find('.count-seo-title').html(wordCount);
}
if (wordCount > 78) {
$(this).parents('.group-seo').find('.count-seo-title-mobile').html('<span class="xagio-seo-count-danger">' +
wordCount + '</span>');
} else {
$(this).parents('.group-seo').find('.count-seo-title-mobile').html(wordCount);
}
});
$(document).on('change, paste, keyup, input', '.prs-description', function (e) {
$(this).prev('input').val($(this).text());
let wordCount = $(this).html().replace(/\ \;/g, ' ').replace(/\s+/g, ' ').trim().length;
if (wordCount > 300) {
$(this).parents('.group-seo').find('.count-seo-description').html('<span class="xagio-seo-count-danger">' +
wordCount + '</span>');
} else {
$(this).parents('.group-seo').find('.count-seo-description').html(wordCount);
}
if (wordCount > 120) {
$(this).parents('.group-seo').find('.count-seo-description-mobile').html('<span class="xagio-seo-count-danger">' +
wordCount + '</span>');
} else {
$(this).parents('.group-seo').find('.count-seo-description-mobile').html(wordCount);
}
});
},
switchToSilo: function () {
$(document).on('click', '.switch-to-silo', function (e) {
e.preventDefault();
if ($('.project-silo').hasClass('xagio-hidden')) {
$(this).html('<i class="xagio-icon xagio-icon-link-off"></i> Project Planner');
$('.project-dashboard').addClass('xagio-hidden');
$('.projects-table').addClass('xagio-hidden');
$('.project-silo').removeClass('xagio-hidden');
actions.initSilo();
} else {
$(this).html('<i class="xagio-icon xagio-icon-link"></i> Silo Builder');
$('.project-dashboard').removeClass('xagio-hidden');
$('.projects-table').removeClass('xagio-hidden');
$('.project-silo').addClass('xagio-hidden');
}
});
},
getOperatorData: function ($element) {
let data = {
properties: {
title : $element.data('text'),
inputs : {},
outputs: {}
}
};
let type = $element.data('type');
if (type == 'page') {
data.properties.inputs['ins'] = {
label : 'Child',
multiple: true
};
data.properties.outputs['output_1'] = {
label: 'Parent'
};
} else if (type == 'post') {
data.properties.outputs['outs'] = {
label : 'Parent',
multiple: true
};
} else if (type == 'tag') {
data.properties.inputs['ins'] = {
label : 'Post',
multiple: true
};
} else if (type == 'category') {
data.properties.inputs['ins'] = {
label : 'Post',
multiple: true
};
}
let uniqueID = ' op-' + type + '-' + $element.data('id');
data.properties.class = 'operator-' + type + uniqueID;
data.properties.ID = uniqueID;
data.properties.realID = $element.data('id');
return data;
},
createSilo: function (element) {
let $flowchart = $(element);
let $container = $flowchart.parent();
// Panzoom initialization...
$flowchart.panzoom();
// Panzoom zoom handling...
let possibleZooms = [
0,
0.5,
1
];
let currentZoom = 1;
$container.on('mousewheel.focal', function (e) {
e.preventDefault();
let delta = (e.delta || e.originalEvent.wheelDelta) || e.originalEvent.detail;
let zoomOut = !(delta ? delta < 0 : e.originalEvent.deltaY > 0); // natural scroll direciton
currentZoom = Math.max(0, Math.min(possibleZooms.length - 1, (currentZoom + (zoomOut * 2 - 1))));
$flowchart.flowchart('setPositionRatio', possibleZooms[currentZoom]);
$flowchart.panzoom('zoom', possibleZooms[currentZoom], {
animate: false,
focal : e
});
});
// Apply the plugin on a standard, empty div...
$flowchart.flowchart({
defaultLinkColor: '#559acc',
onOperatorCreate: function (operatorId, operatorData, fullElement) {
let uniqueID = '.' + operatorData.properties.ID.trim();
let flowchart = actions.siloGetFlowchart();
if (flowchart.find(uniqueID).length > 0) {
xagioNotify("warning", "Invalid operation, element is already added to the Silo.");
return false;
}
return true;
}
});
},
redrawLinks: function () {
$('.silo.pages').flowchart('redrawLinksLayer');
$('.silo.posts').flowchart('redrawLinksLayer');
},
initSilo: function () {
if (siloInitialized) return;
siloInitialized = true;
actions.loadSiloPagesPosts();
actions.addToSilo();
actions.loadTagsCategoriesSilo();
actions.createSilo('.silo.pages');
actions.createSilo('.silo.posts')
actions.loadSilo();
$(document).on('click', '.uk-tab > li > a', function (e) {
e.preventDefault();
actions.redrawLinks();
});
},
loadSilo: function () {
$.post(xagio_data.wp_post, 'action=xagio_load_silo', function (d) {
$('.silo.pages').flowchart('setData', JSON.parse(d.data.pages));
$('.silo.posts').flowchart('setData', JSON.parse(d.data.posts));
});
},
loadTagsCategoriesSilo: function () {
$.post(xagio_data.wp_post, 'action=xagio_get_tags_categories', function (d) {
let cats = $('.silo-category');
let tags = $('.silo-tag');
cats.empty();
tags.empty();
for (let i = 0; i < d.data.tags.length; i++) {
let tag = d.data.tags[i];
tags.append('<div class="draggable_operator" data-id="' + tag.name +
'" data-type="tag" data-text="' + tag.name + '">' + tag.name + '</div>');
}
for (let i = 0; i < d.data.categories.length; i++) {
let cat = d.data.categories[i];
cats.append('<div class="draggable_operator" data-id="' + cat.term_id +
'" data-type="category" data-text="' + cat.name + '">' + cat.name + '</div>');
}
actions.initDrag($('.draggable_operator'));
});
},
addToSilo: function () {
$(document).on('click', '.silo-add', function (e) {
e.preventDefault();
let $element = $(this);
let data = {
properties: {
title : $element.data('text'),
inputs : {},
outputs: {}
}
};
let type = $element.data('type');
if (type == 'page') {
data.properties.inputs['ins'] = {
label : 'Child',
multiple: true
};
data.properties.outputs['output_1'] = {
label: 'Parent'
};
} else if (type == 'post') {
data.properties.outputs['outs'] = {
label : 'Parent',
multiple: true
};
}
let uniqueID = ' op-' + type + '-' + $element.data('id');
data.properties.class = 'operator-' + type + uniqueID;
data.properties.ID = uniqueID;
data.properties.realID = $element.data('id');
$('.silo.' + type + 's').flowchart('addOperator', data);
});
},
siloGetFlowchart: function (elements) {
if (typeof elements != 'undefined') {
return elements.parents('.tab').find('.silo');
} else {
let pages = $('.silo.pages');
let posts = $('.silo.posts');
if (pages.is(':visible')) {
return pages;
} else {
return posts;
}
}
},
removeSilo: function () {
$(document).on('click', '.silo-remove', function (e) {
e.preventDefault();
let $flowchart = actions.siloGetFlowchart();
$flowchart.flowchart('deleteSelected');
});
document.addEventListener('keydown', function (event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Delete") {
let $flowchart = actions.siloGetFlowchart();
$flowchart.flowchart('deleteSelected');
}
});
},
initDrag: function (elements) {
let $flowchart = actions.siloGetFlowchart(elements);
let $container = $flowchart.parent();
elements.draggable({
cursor : "move",
opacity: 0.7,
appendTo: 'body',
zIndex : 1000,
helper: function (e) {
let $this = $(this);
let data = actions.getOperatorData($this);
return $flowchart.flowchart('getOperatorElement', data);
},
stop : function (e, ui) {
let $this = $(this);
let elOffset = ui.offset;
let containerOffset = $container.offset();
if (elOffset.left > containerOffset.left && elOffset.top > containerOffset.top &&
elOffset.left < containerOffset.left + $container.width() && elOffset.top <
containerOffset.top + $container.height()) {
let flowchartOffset = $flowchart.offset();
let relativeLeft = elOffset.left - flowchartOffset.left;
let relativeTop = elOffset.top - flowchartOffset.top;
let positionRatio = $flowchart.flowchart('getPositionRatio');
relativeLeft /= positionRatio;
relativeTop /= positionRatio;
let data = actions.getOperatorData($this);
data.left = relativeLeft;
data.top = relativeTop;
$flowchart.flowchart('addOperator', data);
}
}
});
},
loadSiloPagesPosts: function () {
$('.siloPagesTable').dataTable({
language : {
search : "_INPUT_",
searchPlaceholder: "Search pages...",
processing : "Loading Pages...",
emptyTable : "No pages found on this website.",
info : "_START_ to _END_ of _TOTAL_ pages",
infoEmpty : "0 to 0 of 0 pages",
infoFiltered : "(from _MAX_ total pages)"
},
"dom" : '<fl>rt<ip>',
"bDestroy" : true,
"searchDelay" : 350,
"bPaginate" : true,
"bAutoWidth" : false,
"bFilter" : true,
"bProcessing" : true,
"sServerMethod" : "POST",
"bServerSide" : true,
"sAjaxSource" : xagio_data.wp_post,
"iDisplayLength": 5,
"aLengthMenu" : [
[
5,
10,
50,
100
],
[
5,
10,
50,
100
]
],
"aaSorting" : [
[
1,
'desc'
]
],
"aoColumns" : [
{
"sClass" : "text-left",
"bSortable": true,
"mData" : 'post_title',
"mRender" : function (data, type, row) {
return "<b class='post-title'>" + data + "</b>" +
"<div class='row-actions'>"
+ "<a href='" + row.guid +
"' target='_blank' class='view'><i class='xagio-icon xagio-icon-search'></i></a>"
+ " <span>|</span> "
+ "<a href='" + xagio_data.wp_admin +
'post.php?post=' + row.ID + '&action=edit' +
"' target='_blank' class='edit'><i class='xagio-icon xagio-icon-edit'></i></a>"
+ " <span>|</span> "
+ "<a href='#' class='silo-add' data-id='" + row.ID +
"' data-text='" + data +
"' data-type='page'><i class='xagio-icon xagio-icon-arrows'></i> Add</a>"
+ "</div>";
},
"asSorting": [
"desc",
"asc"
]
},
{
"bSortable": true,
"mData" : 'post_date',
"mRender" : function (data, type, row) {
return '<b>' + row.post_status.charAt(0).toUpperCase() +
row.post_status.slice(1) + 'ed</b>' + '<br>' +
'<abbr title="' + data + '">' +
new Date(data).toUTCString().split(' ').splice(0, 4).join(' ') +
'</abbr>';
},
"asSorting": [
"desc",
"asc"
]
}
],
"fnServerParams": function (aoData) {
aoData.push({
name : 'action',
value: 'xagio_get_posts'
});
aoData.push({
name : 'PostsType',
value: 'page'
});
},
"fnDrawCallback": function (oSettings) {
actions.initDrag($(this).find('tr.draggable-row'));
},
"fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
$(nRow).addClass('draggable-row').attr('data-type', 'page').attr('data-text', aData.post_title).attr('data-id', aData.ID);
}
});
$('.siloPostsTable').dataTable({
language : {
search : "_INPUT_",
searchPlaceholder: "Search posts...",
processing : "Loading Posts...",
emptyTable : "No posts found on this website.",
info : "_START_ to _END_ of _TOTAL_ posts",
infoEmpty : "0 to 0 of 0 posts",
infoFiltered : "(from _MAX_ total posts)"
},
"dom" : '<fl>rt<ip>',
"bDestroy" : true,
"searchDelay" : 350,
"bPaginate" : true,
"bAutoWidth" : false,
"bFilter" : true,
"bProcessing" : true,
"sServerMethod" : "POST",
"bServerSide" : true,
"sAjaxSource" : xagio_data.wp_post,
"iDisplayLength": 5,
"aLengthMenu" : [
[
5,
10,
50,
100
],
[
5,
10,
50,
100
]
],
"aaSorting" : [
[
1,
'desc'
]
],
"aoColumns" : [
{
"sClass" : "text-left",
"bSortable": true,
"mData" : 'post_title',
"mRender" : function (data, type, row) {
return "<b class='post-title'>" + data + "</b>" +
"<div class='row-actions'>"
+ "<a href='" + row.guid +
"' target='_blank' class='view'><i class='xagio-icon xagio-icon-search'></i></a>"
+ " <span>|</span> "
+ "<a href='" + xagio_data.wp_admin +
'post.php?post=' + row.ID + '&action=edit' +
"' target='_blank' class='edit'><i class='xagio-icon xagio-icon-edit'></i></a>"
+ " <span>|</span> "
+ "<a href='#' class='silo-add' data-id='" + row.ID +
"' data-text='" + data +
"' data-type='post'><i class='xagio-icon xagio-icon-arrows'></i> Add</a>"
+ "</div>";
},
"asSorting": [
"desc",
"asc"
]
},
{
"bSortable": true,
"mData" : 'post_date',
"mRender" : function (data, type, row) {
return '<b>' + row.post_status.charAt(0).toUpperCase() +
row.post_status.slice(1) + 'ed</b>' + '<br>' +
'<abbr title="' + data + '">' +
new Date(data).toUTCString().split(' ').splice(0, 4).join(' ') +
'</abbr>';
},
"asSorting": [
"desc",
"asc"
]
}
],
"fnServerParams": function (aoData) {
aoData.push({
name : 'action',
value: 'xagio_get_posts'
});
aoData.push({
name : 'PostsType',
value: 'post'
});
},
"fnDrawCallback": function (oSettings) {
actions.initDrag($(this).find('tr.draggable-row'));
},
"fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
$(nRow).addClass('draggable-row').attr('data-type', 'post').attr('data-text', aData.post_title).attr('data-id', aData.ID);
}
});
},
// Save Silo functionality
saveSilo: function () {
$(document).on('click', '.silo-save', function (e) {
e.preventDefault();
let silo_pages = $('.silo.pages').flowchart('getData');
let silo_posts = $('.silo.posts').flowchart('getData');
$.post(xagio_data.wp_post, {
action: 'xagio_save_silo',
pages : JSON.stringify(silo_pages),
posts : JSON.stringify(silo_posts)
}, function (d) {
if (d.status == 'success') {
xagioNotify("success", "Silo Builder has been successfully saved.");
}
});
});
},
getSavedKeywordSettingsLanguageAndCountry: function () {
let saved_language = $('#getCompetition_languageCode').attr('data-default');
let saved_country = $('#getCompetition_locationCode').attr('data-default');
if (saved_language != '') {
$('#getVolAndCpc_languageCode').val(saved_language).trigger('change');
$('#getCompetition_languageCode').val(saved_language).trigger('change');
}
if (saved_country != '') {
$('#getVolAndCpc_locationCode').val(saved_country).trigger('change');
$('#getCompetition_locationCode').val(saved_country).trigger('change');
}
},
volumeAndCpcOnChangeLanguage: function () {
$("#getVolAndCpc_languageCode").on('change', function () {
let language = $(this).val();
xagioModal("Save Default Language", "Do you want to make this as a default language?", function (yes) {
if (yes) {
$.post(xagio_data.wp_post, `action=xagio_set_default_keyword_language&language=${language}`, function (d) {
xagioNotify((d.status == 'success') ? d.status : 'danger', d.message);
});
}
})
})
},
volumeAndCpcOnChangeCountry: function () {
$("#getVolAndCpc_locationCode").on('change', function () {
let country = $(this).val();
xagioModal("Save Default Country", "Do you want to make this as a default country?", function (yes) {
if (yes) {
$.post(xagio_data.wp_post, `action=xagio_set_default_keyword_country&country=${country}`, function (d) {
xagioNotify((d.status == 'success') ? d.status : 'danger', d.message);
});
}
})
})
},
competitionChangeLanguage: function () {
$("#getCompetition_languageCode").on('change', function () {
let language = $(this).val();
xagioModal("Save Default Language", "Do you want to make this as a default language?", function (yes) {
if (yes) {
$.post(xagio_data.wp_post, `action=xagio_set_default_keyword_language&language=${language}`, function (d) {
xagioNotify((d.status == 'success') ? d.status : 'danger', d.message);
});
}
})
})
},
competitionChangeCountry: function () {
$("#getCompetition_locationCode").on('change', function () {
let country = $(this).val();
xagioModal("Save Default Country", "Do you want to make this as a default country?", function (yes) {
if (yes) {
$.post(xagio_data.wp_post, `action=xagio_set_default_keyword_country&country=${country}`, function (d) {
xagioNotify((d.status == 'success') ? d.status : 'danger', d.message);
});
}
})
})
},
setDefaultAuditLocation: function () {
let auditLanguageSelect = $("#auditWebsite_lang");
let data = auditLanguageSelect.data('default');
if (data) {
let splitData = data.split(',');
let value = splitData[0];
let locationCode = splitData[1];
// set also hidden input field value
$("#auditWebsite_langCode").val(locationCode);
$('#auditWebsite_lang option').removeAttr('selected');
$(`#auditWebsite_lang option[value=${value}][data-lang-code=${locationCode}]`).attr('selected', true);
let auditModal = $('#auditWebsiteModal');
$('#auditWebsite_lang').select2({
matcher : matcher,
dropdownParent: auditModal,
width : '100%',
placeholder : "Select Location"
});
// set also hidden input field value
$("#auditWebsite_langCode_internal").val(locationCode);
$('#auditWebsite_lang_internal option').removeAttr('selected');
$(`#auditWebsite_lang_internal option[value=${value}][data-lang-code=${locationCode}]`).attr('selected', true);
let auditModalInternal = $('#auditWebsiteModalInternal');
$('#auditWebsite_lang_internal').select2({
matcher : matcher,
dropdownParent: auditModalInternal,
width : '100%',
placeholder : "Select Location"
});
}
},
setDefaultAiWizardSearchEngine: function () {
let engineSelect = $("#top_ten_search_engine");
let value = engineSelect.data('default');
if (value) {
$('#top_ten_search_engine option').removeAttr('selected');
$(`#top_ten_search_engine option[value=${value}]`).attr('selected', true);
}
},
setDefaultAiWizardLocation: function () {
let engineSelect = $("#top_ten_search_location");
let value = engineSelect.data('default');
if (value) {
$('#top_ten_search_location option').removeAttr('selected');
$(`#top_ten_search_location option[value=${value}]`).attr('selected', true);
}
},
};
})(jQuery);
function tst() {
var splitRegex = /\s|[:\?\!\.,'"\$]+\s?/;
var splittedKeywords = this.keywords.split(/\n/g);
if (void 0 !==
this.stemmerLanguages[this.selectedLang]) var c = t(95).newStemmer(this.stemmerLanguages[this.selectedLang]);
for (var holderObject = {}, index = 0; index < splittedKeywords.length; index++) {
var words = splittedKeywords[index].split(splitRegex);
if (void 0 !== this.seed) {
var d = this.seed.split(splitRegex);
this.keywordTokens = d
} else {
d = [];
var v = m[this.selectedLang] || [];
if (words = i.tokens.removeWords(words, b(v)), words = i.tokens.removeWords(words, b(d)), void 0 !==
this.stemmerLanguages[this.selectedLang]) {
var p = [];
for (const n in words) p.push(c.stem(words[n]));
this.stemmedTokens.push(p)
} else p = words;
for (const n in p) this.stems[p[n]] = words[n];
for (var s = l(2)(words).concat(l(3)(p)), g = 0; g < s.length; g++) {
var f = s[g].join(" ");
void 0 === holderObject[f] && (holderObject[f] = []), holderObject[f].push(splittedKeywords[index])
}
}
}
var u = u = Object.keys(holderObject);
u.sort((function (n, a) {
return holderObject[a].length - holderObject[n].length
}));
for (var h = [], x = 0; x < u.length; x++) {
var w = u[x].split(splitRegex),
k = [];
for (var y in w) k.push(this.stems[w[y]] || w[y]);
var z = k.join(" ");
holderObject[u[x]].length < 50 && holderObject[u[x]].length > 2 && h.push({
title : z,
keywords: holderObject[u[x]]
})
}
return this.keywordgroups = holderObject, this.cachedgroups = h, h
}