/** * Sanitize MetaBox name * * @param meta_box * @returns {*|void|string|never} * @see https://www.designcise.com/web/tutorial/how-to-replace-all-occurrences-of-a-word-in-a-javascript-string */ wps_js.sanitize_meta_box_name = function (meta_box) { return (meta_box.replace(new RegExp('-', 'g'), "_")); }; /** * Get Meta Box Method name */ wps_js.get_meta_box_method = function (meta_box) { return this.sanitize_meta_box_name(meta_box) + '_meta_box'; }; /** * Get Meta Box Tags ID */ wps_js.getMetaBoxKey = function (key) { return 'wp-statistics-' + key + '-widget'; }; /** * Show No Data Error if Meta Box is Empty */ wps_js.no_meta_box_data = function () { return '
' + wps_js._('no_data') + '
'; }; /** * Show Error Connection if Meta Box is Empty */ wps_js.error_meta_box_data = function (xhr) { if (typeof xhr !== 'undefined') { try { let data = JSON.parse(xhr); if (wps_js.isset(data, 'message')) { return '
' + data['message'] + '
'; } } catch (error) { console.log('An unexpected error occurred: ', xhr, error); } } return '
' + wps_js._('rest_connect') + '
'; }; /** * Get MetaBox information by key */ wps_js.get_meta_box_info = function (key) { if (key in wps_js.global.meta_boxes) { return wps_js.global.meta_boxes[key]; } return []; }; /** * Get MetaBox Lang */ wps_js.meta_box_lang = function (meta_box, lang) { if (lang in wps_js.global.meta_boxes[meta_box]['lang']) { return wps_js.global.meta_boxes[meta_box]['lang'][lang]; } return ''; }; /** * Get MetaBox inner text selector */ wps_js.meta_box_inner = function (key) { return "#" + wps_js.getMetaBoxKey(key) + " div.inside"; }; /** * Get MetaBox name by tag ID * ex: wp-statistics-summary-widget -> summary */ wps_js.meta_box_name_by_id = function (ID) { return ID.split('statistics-').pop().split('-widget')[0]; }; /** * Create Custom Button for Meta Box */ wps_js.meta_box_button = function (key) { let selector = "#" + wps_js.getMetaBoxKey(key) + " .handle-actions button:first"; let meta_box_info = wps_js.get_meta_box_info(key); // Gutenberg Button Style let gutenberg_style = 'z-index: 9999;position: absolute;top: 1px;display:none;right: calc(44px + 3.24rem) !important;height: 44px !important;'; let position_gutenberg = 'right'; if (wps_js.is_active('rtl')) { position_gutenberg = 'left'; } // Clean Button jQuery("#" + wps_js.getMetaBoxKey(key) + " button[class*=wps-refresh]").remove(); // Add Refresh Button jQuery(``).insertBefore(selector); if (wps_js.is_active('gutenberg')){ jQuery('body').addClass('wps-gutenberg'); } jQuery("#" + wps_js.getMetaBoxKey(key) + " .hndle, #" + wps_js.getMetaBoxKey(key) + " .handlediv").on('click', function() { jQuery(this).closest('.postbox').addClass('handle'); }); }; wps_js.meta_box_tooltip = function (key) { let selector = "#" + wps_js.getMetaBoxKey(key) + " h2.hndle"; let meta_box_info = wps_js.get_meta_box_info(key); if (meta_box_info.hasOwnProperty('description')) { const title = jQuery(selector).text(); const tooltip = meta_box_info.description; const newTitle = ''; if (tooltip) jQuery(selector).append(newTitle); } } /** * Run Meta Box * * @param key * @param params * @param button */ wps_js.run_meta_box = function (key, params = false, button = true) { // Check Exist Meta Box div if (wps_js.exist_tag("#" + wps_js.getMetaBoxKey(key)) && (wps_js.is_active('gutenberg') || (!wps_js.is_active('gutenberg') && jQuery("#" + wps_js.getMetaBoxKey(key)).is(":visible")))) { // Meta Box Main let main = jQuery(wps_js.meta_box_inner(key)); // Get Meta Box Method let method = wps_js.get_meta_box_method(key); // Add tooltip wps_js.meta_box_tooltip(key); // Check Exist Method name if (method in wps_js) { // Check PlaceHolder Method if ("placeholder" in wps_js[method]) { main.html(wps_js[method]["placeholder"]()); } else { main.html(wps_js.placeholder()); } // Add Custom Button if (button === true) { wps_js.meta_box_button(key); } // Get Meta Box Data let arg = {'name': key}; if (params !== false) { arg = Object.assign(params, arg); } // Check Request Params in Meta box if ("params" in wps_js[method]) { arg = Object.assign(arg, wps_js[method]['params']()); } // Run wps_js.ajaxQ('metabox', arg, method, 'error_meta_box_data'); } } }; wps_js.prepare_date_filter_data = function (args) { let data = {'ago': ''}; if (args.hasOwnProperty('footer_options')) { const selectedDateFilter = args.footer_options.default_date_filter; if (selectedDateFilter.length) { let dateFilterSplted = selectedDateFilter.split('|'); if (dateFilterSplted[0] == 'filter') { data.ago = dateFilterSplted[1]; } else { let customDateRange = dateFilterSplted[1].split(':'); data.ago = ''; data.from = customDateRange[1]; data.to = customDateRange[2]; } } } return data; } /** * Load all Meta Boxes */ wps_js.run_meta_boxes = function (list = false) { if (list === false) { list = Object.keys(wps_js.global.meta_boxes); } list.forEach(function (value) { let args = wps_js.global.meta_boxes[value]; // Check Date Filter let data = wps_js.prepare_date_filter_data(args); // Run Meta Box wps_js.run_meta_box(value, data); }); }; /** * Render Meta Box Footer */ wps_js.meta_box_footer = function (key, data) { let params = { 'footer_options': { 'filter_by_date': false, 'default_date_filter': '', 'display_more_link': false, 'more_link_title': '' } }; const args = wps_js.global.meta_boxes[key]; if (args.hasOwnProperty('footer_options')) { Object.assign(params.footer_options, args.footer_options); } let selectedDateFilter = ''; if (data.hasOwnProperty('filter')) { selectedDateFilter = data.filter; } else if (typeof params.footer_options.default_date_filter != 'undefined') { selectedDateFilter = params.footer_options.default_date_filter; } let selectedStartDate = ''; if (data.hasOwnProperty('filter_start_date')) { selectedStartDate = data.filter_start_date; } let selectedEndDate = ''; if (data.hasOwnProperty('filter_end_date')) { selectedEndDate = data.filter_end_date; } let fromDate = ''; if (data.hasOwnProperty('from')) { fromDate = data.from; } let toDate = ''; if (data.hasOwnProperty('to')) { toDate = data.to; } if (!params.footer_options.filter_by_date && !params.footer_options.display_more_link) return; let html = '`; jQuery(wps_js.meta_box_inner(key)).append(html); const datePickerElement = jQuery(wps_js.meta_box_inner(key)).find('.js-datepicker-input').first(); datePickerElement.daterangepicker({"autoApply": true}); datePickerElement.on('apply.daterangepicker', function (ev, picker) { wps_js.run_meta_box(key, { 'from': picker.startDate.format('YYYY-MM-DD'), 'to': picker.endDate.format('YYYY-MM-DD') }); }); /** * Add click event to filters toggle */ jQuery('.js-filters-toggle:not(.is-ready)').on('click', function () { jQuery('.js-widget-filters').removeClass('is-active'); jQuery('.postbox').removeClass('has-focus'); jQuery(this).closest('.js-widget-filters').toggleClass('is-active'); jQuery(this).closest('.postbox').toggleClass('has-focus') /** * Open filters to the downside if there's not enough space. */ if (!jQuery(this).hasClass('is-active')) { const targetTopPosition = jQuery(this)[0].getBoundingClientRect().top; if (targetTopPosition < 350) { jQuery(this).closest('.js-widget-filters').addClass('is-down'); } } }); jQuery('.js-filters-toggle:not(.is-ready)').addClass('is-ready'); wps_js.set_date_filter_as_selected(key, selectedDateFilter, selectedStartDate, selectedEndDate, fromDate, toDate); }; /** * Set As Selected Date Filter */ wps_js.set_date_filter_as_selected = function (key, selectedDateFilter = "30days", selectedStartDate, selectedEndDate, fromDate, toDate) { const metaBoxInner = jQuery(wps_js.meta_box_inner(key)); const filterBtn = jQuery(metaBoxInner).find('.c-footer__filter__btn'); const filterList = jQuery(metaBoxInner).find('.c-footer__filters__list'); const currentFilterTitle = jQuery(metaBoxInner).find('.c-footer__current-filter__title'); const currentFilterRange = jQuery(metaBoxInner).find('.c-footer__current-filter__date-range'); if (!selectedDateFilter) { selectedDateFilter = "30days" } if (selectedDateFilter.length) { filterList.find('button[data-filter]').removeClass('is-selected'); filterList.find('button[data-filter="' + selectedDateFilter + '"').addClass('is-selected'); filterBtn.text(wps_js._('str_' + selectedDateFilter)); currentFilterTitle.text(wps_js._('str_' + selectedDateFilter)); if (selectedDateFilter == 'custom') { filterBtn.text(selectedStartDate + ' - ' + selectedEndDate); const datePickerElement = jQuery(wps_js.meta_box_inner(key)).find('.js-datepicker-input').first(); datePickerElement.data('daterangepicker').setStartDate(moment(fromDate).format('MM/DD/YYYY')); datePickerElement.data('daterangepicker').setEndDate(moment(toDate).format('MM/DD/YYYY')); } } if (selectedStartDate.length && selectedEndDate.length) { currentFilterRange.text(selectedStartDate + ' - ' + selectedEndDate); } } /** * Meta Box Footer Handle Date Filter */ jQuery(document).on("click", 'button[data-filter]:not(.c-footer__filters__list-item--custom)', function () { wps_js.run_meta_box(jQuery(this).attr('data-metabox-key'), {'ago': jQuery(this).attr('data-filter')}); }); /** * Disable Close WordPress Post ox for Meta Box Button * * @see wp-admin/js/postbox.js:107 */ jQuery(document).on('mouseenter mouseleave', '.wps-refresh, .wps-more', function (ev) { if (ev.type === 'mouseenter') { wps_js.wordpress_postbox_ajax('disable'); } else { wps_js.wordpress_postbox_ajax('enable'); } }); /** * Watch Show/Hide Meta Box in WordPress Dashboard * We dont Use PreventDefault Because WordPress Core uses Checked checkbox. */ jQuery(document).on("click", 'input[type=checkbox][id^="wp-statistics-"][id$="-widget-hide"]', function () { // Check is Checked For Show Post Box if (jQuery(this).is(':checked')) { // Get Meta Box name By ID let ID = jQuery(this).attr("id"); let meta_box_name = wps_js.meta_box_name_by_id(ID); // Run Meta Box wps_js.run_meta_box(meta_box_name); } }); /** * Show Select Date Time For Chart MetaBox */ wps_js.btn_group_chart = function (chart, args = false) { // Datetime Select List let select_list = { 7: wps_js._('str_week'), 30: wps_js._('str_month'), 365: wps_js._('str_year') }; // Check Active time var active; if (args.type == "ago") { active = parseInt(args.days); } // Create Html Data let html = `
`; // Show Data Object.keys(select_list).forEach(function (key) { html += ``; }); // Add Custom html += ``; html += `
`; // Show Jquery Date Picker html += `
` + wps_js._('to') + `
`; // Show HTMl return html; }; /** * Seat Active Class after Click Btn Group */ jQuery(document).on("click", '.wps-btn-group button', function () { jQuery('.wps-btn-group button').attr('class', 'btn btn-default'); jQuery(this).attr('class', 'btn btn-primary'); }); /** * SlideToggle Click on Custom Date Range */ jQuery(document).on("click", 'button[data-custom-date-picker]', function () { jQuery('div[data-chart-date-picker= ' + jQuery(this).attr('data-custom-date-picker') + ']').slideDown(); }); /** * Button Group Handle Chart time Show */ jQuery(document).on("click", 'button[data-chart-time]', function () { wps_js.run_meta_box(jQuery(this).attr('data-chart-time'), {'ago': jQuery(this).attr('data-time'), 'no-data': 'no'}); }); /** * Send From/To Chart */ jQuery(document).on("click", 'input[data-between-chart-show]', function () { let chart = jQuery(this).attr('data-between-chart-show'); wps_js.run_meta_box(chart, { 'from': jQuery("div[data-chart-date-picker=" + chart + "] input[id=date-from]").val(), 'to': jQuery("div[data-chart-date-picker=" + chart + "] input[id=date-to]").val(), 'no-data': 'no' }); }); /** * Close filters when clicking outside the filters * */ jQuery(document).on("click", function (event) { if (!jQuery(event.target).closest(".js-widget-filters").length) { jQuery('.js-widget-filters').removeClass('is-active'); jQuery('.postbox.has-focus').removeClass('has-focus'); jQuery('.c-footer__filter__btn.is-active').removeClass('is-active'); setTimeout(function () { jQuery('.js-widget-filters').removeClass('is-down'); }, 500) } else { const targetClasses = event.target.classList; if (targetClasses.contains('c-footer__filter__btn') && targetClasses.contains('is-active')) { event.target.classList.remove('is-active'); jQuery('.js-widget-filters').removeClass('is-active'); jQuery('.postbox.has-focus').removeClass('has-focus'); setTimeout(function () { jQuery('.js-widget-filters').removeClass('is-down'); }, 500) } else if (targetClasses.contains('c-footer__filter__btn') && !targetClasses.contains('is-active')) { event.target.classList.add('is-active'); } } }); const wpsAoutWidget = document.getElementById('wp-statistics-about-widget'); if (wpsAoutWidget) { if (!wpsAoutWidget.querySelector('.js-wps-widget-customization-empty') && !wpsAoutWidget.querySelector('.wps-about-widget__premium')) { wpsAoutWidget.classList.add('wp-statistics-about-widget__customize'); } }