D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
psa
/
admin
/
htdocs
/
modules
/
xovi
/
js
/
Filename :
rankTracker.jquery.js
back
Copy
(function ($) { var rankTracker = { availableKeys: 0, settings: { suggestionUrl: '', competitorAllow: 0 }, keywordsData: { "available": { "value": 0 }, "total": { "value": 0 } }, competitorsData: { "added": {}, "addedNum": 0 }, suggestionsData: { "competitors": { "public": {}, "more": {} }, "keywords": { "public": {}, "more": {} } }, inputSettings: { "keywords": {}, "competitors": {} }, messages: {}, /** * Set added competitors to read only */ setAddedCompetitors: function () { if (rankTracker.competitorsData.addedNum > 0) { $('#competitors_tagsinput').find('a:lt(' + rankTracker.competitorsData.addedNum + ')').remove(); $('#competitors_tagsinput .tag:lt(' + rankTracker.competitorsData.addedNum + ')').addClass('readonlyTag'); } }, /** * Adding the possibility to adding tags into your input * * @param name The id of your input (keywords or competitors). If you need more, add to inputSettings var. */ initInputSettings: function (name) { var inputSettings = { 'keywords': { 'minChars': 2, 'onAddTag': $.getCountKeys }, 'competitors': { 'minChars': 4 } }; var defaultOptions = { 'height': 'auto', 'width': '100%', 'unique': true, 'minChars': 2, 'maxChars': 100, 'minInputWidth': '250px', 'onRemoveTag': rankTracker.removeTags }; if (typeof rankTracker.inputSettings[name] === 'object' && rankTracker.inputSettings[name] !== null) { $.each(rankTracker.inputSettings[name], function (id, value) { inputSettings[name][id] = value; }); } $('#' + name).tagsInput($.extend(defaultOptions, inputSettings[name])); $('#' + name + '_tagsinput').css('min-height', '100px'); }, /** * Adding the suggested data as tags * * @param name Input id * @param dataName Name of a key in the data array * @param data Data array */ initSuggestedData: function (name) { let $input = $('#suggested-' + name); if (name === 'competitors' && !rankTracker.settings.competitorAllow) { $('.competitors-message').show(); $('#competitors_tag').attr('disabled', 'disabled'); } else { $input.append('<div class="data-loader">\n' + ' <img src="/modules/xovi/images/icons/indicator.gif" width="30" height="30">\n' + ' </div>'); } }, getSuggestedData: function (methods) { $.each(methods, function (i, method) { $.ajax({ type: 'POST', cache: false, url: rankTracker.settings.suggestionUrl, data: {'methods': [method]}, dataType: 'json', success: function (response) { let $input = $('#suggested-' + method); $input.empty(); if (typeof response === 'object' && response.data !== undefined && response.data[method] !== undefined && response.data[method]['public'] !== undefined) { rankTracker.suggestionsData[method]['more'] = response.data[method]['more']; $.each(response.data[method]['public'], function (i, row) { $input.append('<span class="tag"><span>' + row + '</span> <a class="suggested-remove" href="#">x</a></span>'); }); if (method === 'competitors' && rankTracker.settings.competitorAllow) { if (response.data.addedCompetitors !== undefined && typeof response.data.addedCompetitors === 'object') { $('#competitors').importTags(''); rankTracker.competitorsData.addedNum = response.data.addedCompetitors.length; $.each(response.data.addedCompetitors, function (i, comp) { $('#competitors').addTag(comp, {'type': 'readOnly'}); }); rankTracker.setAddedCompetitors(); } } $input.unbind('click'); if (method !== 'competitors' || rankTracker.settings.competitorAllow) { $input.on('click', '.tag > span', function () { let proposal = $(this).text(), $tagSelector = $('#' + method); if (!$tagSelector.tagExist(proposal)) { $tagSelector.addTag(proposal); showNewTag($input, method); } $(this).parent().remove(); }); } $input.on('click', ' .tag > a', function () { $(this).parent().remove(); showNewTag($input, method); return false; }); } else if (typeof rankTracker.messages === 'object' && rankTracker.messages.no_suggestions !== undefined) { $input.html('<span>' + rankTracker.messages.no_suggestions + '.</span>'); } function showNewTag($input, name) { if (typeof rankTracker.suggestionsData[name].more === 'object' && rankTracker.suggestionsData[name].more.length > 0) { $input.append('<span class="tag"><span>' + rankTracker.suggestionsData[name].more.pop() + '</span> <a class="suggested-remove" href="#">x</a></span>'); } else if ($('#suggested-' + name + ' span.tag:visible').length === 0 && typeof rankTracker.messages === 'object' && rankTracker.messages.no_more_suggestions !== undefined) { $input.append('<span>' + rankTracker.messages.no_more_suggestions + '</span>') } } } }); }); }, removeTags: function () { if ($(this).attr('name') === 'competitors') { rankTracker.setAddedCompetitors(); } else { $.getCountKeys(); } } }; /** * Set own setting for the tags input * * @param settings Object like {Input id: {Setting name: Setting value}} */ $.setInputSettings = function (settings) { if (typeof settings === 'object' && settings !== null) { $.each(settings, function (name, params) { if (rankTracker.inputSettings[name] !== undefined) { rankTracker.inputSettings[name] = params; rankTracker.initInputSettings(name); } }); } }; /** * Init messages on the page * * @param messages Object like {Message name: Message value} */ $.setMessages = function (messages) { if (messages !== undefined && typeof messages === 'object' && messages !== null) { rankTracker.messages = messages; } }; /** * Set the competitors, keywords and suggestions data * * @param settings Object * Contains general settings * @param suggestionNames Array * Contains the names of needs suggestions. * @param keywordsData Object like rankTracker.keywordsData var. * Contains the available and total numbers of keywords. */ $.setFormData = function (settings, suggestionNames, keywordsData) { rankTracker.settings = $.extend(rankTracker.settings, settings); if (keywordsData !== null) { rankTracker.keywordsData = keywordsData; if (keywordsData.available !== undefined) { rankTracker.availableKeys = keywordsData.available.value; } } $.getCountKeys(); $('#totalKeys').html(' / ' + rankTracker.keywordsData.total.value); if (suggestionNames !== null) { $.each(suggestionNames, function (i, name) { rankTracker.initSuggestedData(name); }); rankTracker.getSuggestedData(suggestionNames); } }; /** * Updating the available keywords on the page */ $.getCountKeys = function () { if (rankTracker.keywordsData.available !== undefined) { let addedKeywrods = $('#keywords_tagsinput span.tag:visible').length; rankTracker.availableKeys = rankTracker.keywordsData.available.value - (addedKeywrods * $('div.seRow:visible').length); if (rankTracker.availableKeys < 0) { $('#availableKeys').html('<span style="color: red;">' + rankTracker.availableKeys + '</span>'); if (addedKeywrods > 0 && $('div.msg-warning').length < 1) { if (typeof rankTracker.messages === 'object' && rankTracker.messages.upgrade_keywords !== undefined) { Jsw.addStatusMessage('warning', rankTracker.messages.upgrade_keywords); } } $('#apply-form').attr("disabled", true); } else { $('#availableKeys').html(rankTracker.availableKeys); $('#apply-form').attr("disabled", false); } } }; })(jQuery);