芝麻web文件管理V1.00
编辑当前文件:/home/freeclou/optimyar/wp-content/plugins/wp-statistics/assets/dev/javascript/helper.js
/** * Check Exist Dom */ wps_js.exist_tag = function (tag) { return (jQuery(tag).length); }; /** * Loading button */ wps_js.loading_button = function (btn) { btn.classList.add('wps-loading-button'); }; /** * Jquery UI Picker */ wps_js.date_picker = function () { const datePickerField = jQuery('input[data-wps-date-picker]'); if (datePickerField.length) { datePickerField.daterangepicker({ singleDatePicker: true, showDropdowns: true, minYear: 1998, drops: 'up', opens: document.getElementById('TB_window') ? 'center' : 'right', maxYear: parseInt(new Date().getFullYear() + 1), locale: { format: 'YYYY-MM-DD' } }); datePickerField.on('show.daterangepicker', function (ev, picker) { const correspondingPicker = picker.container; jQuery(correspondingPicker).addClass(ev.target.className); }); } }; wps_js.formatNumber = function (num, fixed = 0) { if (num === null) { return null; } num = parseFloat(num.toString().trim().replace(/[, ]/g, '')); if (isNaN(num)) { return null; } if (num === 0) { return '0'; } fixed = (!fixed || fixed < 0) ? 0 : fixed; var b = (parseInt(num)).toPrecision(2).split("e"), k = b.length === 1 ? 0 : Math.floor(Math.min(b[1].slice(1), 14) / 3), c = k < 1 ? num.toFixed(0 + fixed) : (num / Math.pow(10, k * 3)).toFixed(1 + fixed), d = c < 0 ? c : Math.abs(c), e = d + ['', 'K', 'M', 'B', 'T'][k]; return e; } wps_js.vectorMap = function (data) { let pin = Array(); let colors = {}; if (data?.codes?.length > 0) { const geoCountryData = {}; data.codes.forEach((code, index) => { const visitors_raw = Number(data.raw_data[index]) || 0; const visitors = data.data[index]; geoCountryData[code.toLowerCase()] = { label: data.labels[index], flag: data.flags[index], visitors_raw, visitors }; }); const maxVisitors = Math.max(1, ...Object.values(geoCountryData).map(country => country.visitors_raw)); Object.keys(geoCountryData).forEach(code => { const country = geoCountryData[code]; const intensity = country.visitors_raw / maxVisitors; // #EBF5FF to #3288D7 const r = Math.round(235 - (185 * intensity)); // From 235 to 50 const g = Math.round(245 - (109 * intensity)); // From 245 to 136 const b = Math.round(255 - (40 * intensity)); // From 255 to 215 colors[code] = `rgb(${r}, ${g}, ${b})`; pin[code] = `
${country.label}
${wps_js._('visitors')}
${country.visitors}
`; }); } jQuery('#wp-statistics-visitors-map').vectorMap({ map: 'world_en', backgroundColor: '#fff', borderColor: '#fff', borderOpacity: 0.6, color: '#e6e6e6', selectedColor: '#596773', hoverColor: '#596773', colors: colors, onLabelShow: function (element, label, code) { const lowerCode = code.toLowerCase(); if (pin[lowerCode]) { label.html(pin[lowerCode]); return; } const imageUrl = `${wps_js.global.assets_url}/images/flags/${lowerCode}.svg`; const countryName = label.text(); fetch(imageUrl) .then(response => { const flagImage = response.ok ? `
` : ''; label.html(`
${flagImage}
${countryName}
${wps_js._('visitors')}
0
`); }) .catch(error => { console.error('Error fetching the image:', error); label.html(`
${countryName}
${wps_js._('visitors')}
0
`); }); }, }); } /** * Set Select2 */ wps_js.select2 = function () { jQuery("select[data-type-show=select2]").select2(); } const wpsSelect2 = jQuery('.wps-select2'); const wpsBody = jQuery('body'); const wpsDropdown = jQuery('.wps-dropdown'); if (wpsSelect2.length) { const wpsFilterPage = jQuery('.wps-filter-page'); const wpsFilterVisitor = jQuery('.wps-filter-visitor'); const dirValue = wpsBody.hasClass('rtl') ? 'rtl' : 'ltr'; const dropdownParent = wpsFilterPage.length ? wpsFilterPage : wpsFilterVisitor; const initializeSelect2 = (parentElement, ajaxAction) => { wpsSelect2.select2({ dropdownParent: parentElement, dir: dirValue, dropdownAutoWidth: true, dropdownCssClass: 'wps-select2-filter-dropdown', minimumInputLength: 1, ajax: { delay: 500, url: wps_js.global.ajax_url, dataType: 'json', data: function (params) { const query = { wps_nonce: wps_js.global.rest_api_nonce, search: params.term, // The term to search for action: ajaxAction, paged: params.page || 1 }; if (wps_js.isset(wps_js.global, 'request_params')) { const requestParams = wps_js.global.request_params; if (requestParams.author_id) query.author_id = requestParams.author_id; if (requestParams.page) query.page = requestParams.page; if (requestParams.pt) query.post_type = requestParams.pt; if (requestParams.pid) query.post_id = requestParams.pid; } return query; }, processResults: function (data) { if (data && Array.isArray(data.results)) { return { results: data.results.map(item => ({ id: item.id, text: item.text })), pagination: { more: false } }; } else { console.error('Expected an array of results but got:', data); return {results: []}; } }, error: function (xhr, status, error) { console.error('AJAX request error:', status, error); } } }); }; // Initial select2 setup without AJAX wpsSelect2.select2({ dropdownParent: dropdownParent, dir: dirValue, dropdownAutoWidth: true, dropdownCssClass: 'wps-select2-filter-dropdown' }); // Event listeners wpsSelect2.on('select2:open', () => wpsDropdown.addClass('active')); wpsSelect2.on('select2:close', () => wpsDropdown.removeClass('active')); wpsSelect2.on('change', function () { const selectedOption = jQuery(this).find('option:selected'); const url = selectedOption.val(); if (url) { window.location.href = url; } }); // Conditional initialization based on filter page or visitor if (wpsFilterPage.length) { initializeSelect2(wpsFilterPage, 'wp_statistics_get_page_filter_items'); wpsFilterPage.on('click', () => wpsSelect2.select2('open')); } if (wpsFilterVisitor.length) { initializeSelect2(wpsFilterVisitor, 'wp_statistics_search_visitors'); wpsFilterVisitor.on('click', () => wpsSelect2.select2('open')); } } /** * Set Tooltip */ wps_js.tooltip = function () { jQuery('.wps-tooltip').tooltipster({ theme: 'tooltipster-shadow', contentCloning: true }); jQuery('body').on('mouseenter touchstart', '.wps-tooltip:not(.tooltipstered)', function () { $(this).tooltipster({ theme: 'tooltipster-shadow' }).tooltipster('open'); }); }; /** * Execute Tooltip */ wps_js.tooltip(); /** * Redirect To Custom Url * * @param url */ wps_js.redirect = function (url) { window.location.replace(url); }; /** * Create Horizontal Bar Chart */ wps_js.horizontal_bar = function (tag_id, labels, data, imageUrls, percentages = []) { // Get Element By ID let element = document.getElementById(tag_id); if (element) { let parent = element.parentNode; let nextSibling = element.nextSibling; parent.removeChild(element); if (!Array.isArray(data) && typeof data === 'object' && data !== null) { data = Object.values(data); } else if (!Array.isArray(data)) { data = []; } data = data?.map(Number); let total; if (Array.isArray(data)) { total = data.reduce((sum, item) => sum + item, 0); } else if (typeof data === 'object' && data !== null) { total = Object.values(data).reduce((sum, item) => sum + item, 0); } else { total = 0; } let blockDiv = document.createElement('div'); blockDiv.classList.add('wps-horizontal-bar'); for (let i = 0; i < data.length; i++) { // Calculate percentage as a float with two decimal places let percentage = percentages[i] ?? (total ? ((data[i] / total) * 100) : 0); // Format the percentage let percentageText = percentage % 1 === 0 ? percentage.toFixed(0) : percentage.toFixed(1); // If percentage ends with .0, remove it if (percentageText.endsWith('.0')) { percentageText = percentageText.slice(0, -2); } let itemDiv = document.createElement('div'); itemDiv.classList.add('wps-horizontal-bar__item'); let labelImageDiv = document.createElement('div'); labelImageDiv.classList.add('wps-horizontal-bar__label-image-container'); if (imageUrls && imageUrls[i] && imageUrls[i] !== 'undefined') { let img = document.createElement('img'); img.src = imageUrls[i]; img.alt = labels[i] + ' icon'; img.classList.add('wps-horizontal-bar__image'); labelImageDiv.appendChild(img); } let labelDiv = document.createElement('div'); labelDiv.innerHTML = labels[i]; labelDiv.setAttribute('aria-label', labels[i]); labelDiv.classList.add('wps-horizontal-bar__label'); labelImageDiv.appendChild(labelDiv); itemDiv.appendChild(labelImageDiv); let dataPercentDiv = document.createElement('div'); dataPercentDiv.classList.add('wps-horizontal-bar__data-percent-container'); let dataDiv = document.createElement('div'); dataDiv.innerHTML = `
${wps_js.formatNumber(data[i])}
${percentageText}%
`; dataDiv.classList.add('wps-horizontal-bar__data'); dataPercentDiv.appendChild(dataDiv); itemDiv.appendChild(dataPercentDiv); let backgroundDiv = document.createElement('div'); backgroundDiv.classList.add('wps-horizontal-bar__background'); backgroundDiv.style.width = `${percentage}%`; // Set width according to percentage itemDiv.appendChild(backgroundDiv); blockDiv.appendChild(itemDiv); } if (nextSibling) { parent.insertBefore(blockDiv, nextSibling); } else { parent.appendChild(blockDiv); } } }; window.renderHorizontalBar = (id, label, data, icons, percentages = []) => { wps_js.horizontal_bar(id, label, data, icons, percentages); } /** * Create Chart ID by Meta Box name * * @param meta_box */ wps_js.chart_id = function (meta_box) { return 'wp-statistics-' + meta_box + '-meta-box-chart'; }; /** * Enable/Disable WordPress Admin PostBox Ajax Request * * @param type */ wps_js.wordpress_postbox_ajax = function (type = 'enable') { let wordpress_postbox = jQuery('.postbox .hndle, .postbox .handlediv'); if (type === 'enable') { wordpress_postbox.on('click', window.postboxes.handle_click); } else { wordpress_postbox.off('click', window.postboxes.handle_click); } }; /** * Isset Property in Object * * @param obj */ wps_js.isset = function (obj) { let args = Array.prototype.slice.call(arguments, 1); for (let i = 0; i < args.length; i++) { if (!obj || !obj.hasOwnProperty(args[i])) { return false; } obj = obj[args[i]]; } return true; }; /** * Number Format * * @param number * @param decimals * @param dec_point * @param thousands_point * @returns {*} */ wps_js.number_format = function (number, decimals, dec_point, thousands_point) { if (number == null || !isFinite(number)) { throw new TypeError("number is not valid"); } if (!decimals) { let len = number.toString().split('.').length; decimals = len > 1 ? len : 0; } if (!dec_point) { dec_point = '.'; } if (!thousands_point) { thousands_point = ','; } number = parseFloat(number).toFixed(decimals); number = number.replace(".", dec_point); let splitNum = number.split(dec_point); splitNum[0] = splitNum[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousands_point); number = splitNum.join(dec_point); return number; }; /** * Set Equal Bigger Div Height For WordPress PostBox * * @param Dom_1 * @param Dom_2 */ wps_js.set_equal_height = function (Dom_1, Dom_2) { let tbl_h = jQuery(Dom_1).height(); let ch_h = jQuery(Dom_2).height(); let ex = Dom_2; let val = tbl_h; if (tbl_h < ch_h) { ex = Dom_1; val = ch_h; } jQuery(ex).css('height', val + 'px'); }; /** * Create Half WordPress Post Box * * @param div_class * @param div_id * @returns {string} */ wps_js.Create_Half_PostBox = function (div_class, div_id) { return `
`; }; /** * Check IS IP * * @param str * @returns {boolean} */ wps_js.isIP = function (str) { const octet = '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]?|0)'; const regex = new RegExp(`^${octet}\\.${octet}\\.${octet}\\.${octet}$`); return regex.test(str); }; /** * Get Link Params */ wps_js.getLinkParams = function (param, link = false) { if (!link) { link = window.location.href; } let v = link.match(new RegExp('(?:[\?\&]' + param + '=)([^&]+)')); return v ? v[1] : null; }; /** * Sum array Of Item * * @param array * @returns {*} */ wps_js.sum = function (array) { return array.reduce(function (a, b) { return a + b; }, 0); }; /** * Show empty data */ wps_js.no_results = function () { return '
' + wps_js._('no_result') + '
'; }; wps_js.isTodayOrFutureDate = function (dateString) { if (!dateString) return false; const today = new Date(); const target = new Date(dateString); return target >= new Date(today.getFullYear(), today.getMonth(), today.getDate()); } wps_js.placeholder_txt = function (noDataMessage) { const randomIndex = Math.floor(Math.random() * 4) + 1; const src = `${wps_js.global.assets_url}/images/no-data/vector-${randomIndex}.svg`; return `
${noDataMessage}
`; }; wps_js.allValuesZero = function (data) { if (!data || data.length === 0) return true; return data.every(value => value === 0 || value === null || value === undefined || value === '0'); }; wps_js.allDatasetsZero = function (currentDatasets, previousDatasets = null) { const currentAllZero = !currentDatasets || currentDatasets.length === 0 || currentDatasets.every(dataset => wps_js.allValuesZero(dataset.data)); if (!previousDatasets || previousDatasets.length === 0) { return currentAllZero; } const previousAllZero = previousDatasets.every(dataset => wps_js.allValuesZero(dataset.data)); return currentAllZero && previousAllZero; }; // Head filters drop down jQuery(document).ready(function () { var dropdowns = document.querySelectorAll(".wps-head-filters__item"); dropdowns.forEach(function (dropdown) { dropdown.classList.remove('loading'); dropdown.addEventListener("click", function (event) { var dropdownContent = dropdown.querySelector(".dropdown-content"); if (dropdownContent) { if (!event.target.classList.contains('disabled')) { dropdownContent.classList.toggle("show"); } } }); }); var searchInputs = jQuery(".wps-search-dropdown"); searchInputs.on("click", function (event) { event.stopPropagation(); }); searchInputs.on("input", function () { let filter = jQuery(this).val().toLowerCase(); let items = jQuery(this).parent().find(".dropdown-item"); items.each(function () { let text = jQuery(this).text() || jQuery(this).innerText; if (text.toLowerCase().indexOf(filter) > -1) { jQuery(this).show(); } else { jQuery(this).hide(); } }); }); window.addEventListener("click", function (event) { dropdowns.forEach(function (dropdown) { let dropdownContent = dropdown.querySelector(".dropdown-content") if (dropdownContent && !dropdown.contains(event.target)) { dropdownContent.classList.remove("show"); } }); }); }); if (wps_js.isset(wps_js.global, 'request_params', 'page') && wps_js.global.request_params.page === "help-center") { const body = document.body; const targetClass = 'statistics_page_wps_help-center_page'; if (!body.classList.contains(targetClass)) { body.classList.add(targetClass); } } jQuery(document).ready(function () { const targetElement = document.querySelector('.wp-header-end'); const noticeElement = document.querySelector('.notice.notice-warning.update-nag'); // Check if both targetElement and noticeElement exist if (targetElement && noticeElement) { // Move the notice element after the target element targetElement.parentNode.insertBefore(noticeElement, targetElement.nextSibling); } document.querySelectorAll('.wp-has-submenu.menu-top.toplevel_page_wps_overview_page li a') .forEach(link => { if (link.querySelector('.wps-text-warning')) { link.classList.add('addon-menu'); } }); }); window.renderFormatNum = function (data) { return wps_js.formatNumber(data) } window.renderWPSSelect2 = function (class_name) { jQuery("select[data-type-show=select2]").select2({ dropdownCssClass: class_name, }); }