;(function($){ $( document ).on( 'change', '#report_type,#report_period,#input_based', function(){ var url = quads_localize_data.rest_url + 'quads-adsense/get_report_adsense'; var report_type = $('#report_type').val(); var report_period = $('#report_period').val(); var input_based = (typeof $('#input_based').val() !== "undefined")?$('#input_based').val():''; var pub_id = $('#pub_id').val(); var data ={account_id:pub_id,report_type:report_type,report_period:report_period,input_based:input_based}; if($.trim(report_type) !='' & $.trim(report_period) !='' ) { $('#quads_reports_canvas').html('
'); $.ajax({ url: url, type: 'post', data: JSON.stringify(data), headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'X-WP-Nonce': quads_localize_data.nonce, }, success: function (response, status, XHR) { quads_display_report(response); }, error: function (request, status, error) { }, }); }else{ $('#quads_reports_canvas').html('

Please select Report type and Duration

'); } } ); $( document ).on( 'click', '#quads-connect-adsense', function(){ if ( $( this ).hasClass( 'disabled_adsense_link' ) ) return; if ( 'undefined' != typeof window.quadsMapiConnect ) { window.quadsMapiConnect(); } } ); // Unique instance of "quadsMapiConnectClass" var INSTANCE = null; var quadsMapiConnectClass = function( content, options ) { this.options = {}; this.AUTH_WINDOW = null; this.modal = $( '#gadsense-modal' ); this.frame = null; if ( 'undefined' == typeof content || ! content ) { content = 'confirm-code'; } this.setOptions( options ); this.init(); this.show( content ); return this; }; quadsMapiConnectClass.prototype = { constructor: quadsMapiConnectClass, // Set options, for re-use of existing instance for a different purpose. setOptions: function( options ) { var defaultOptions = { autoads: false, onSuccess: false, onError: false, }; if ( 'undefined' == typeof options ) { options = defaultOptions; } this.options = $.extend( {}, defaultOptions, options); }, // Tasks to do after a successful connection. exit: function(){ if ( this.options.onSuccess ) { if ( 'function' == typeof this.options.onSuccess ) { this.options.onSuccess( this ); } } else { window.location.reload(); } }, // Initialization - mostly binding events. init: function(){ var that = this; // Close the modal and hide errors. $( document ).on( 'click', '#gadsense-modal .dashicons-dismiss', function(){ $( '#mapi-code' ).val( '' ); $( '#gadsense-modal, #gadsense-modal-error' ).css( 'display', 'none' ); } ); // Confirm code for account connection. $( document ).on( 'click', '#quads-mapi-confirm-code', function(){ var code = $( '#mapi-code' ).val(); if ( '' == code ) return; $( '.gadsense-overlay' ).css( 'display', 'block' ); $( '#gadsense-modal-error' ).hide(); var data = { action: 'quads_gadsense_mapi_confirm_code', code: code, nonce: quads.nonce, }; $.ajax({ url: ajaxurl, type: 'post', data: data, success:function(response, status, XHR){ if ( null !== that.AUTH_WINDOW ) { that.AUTH_WINDOW.close(); } $( '#mapi-code' ).val( '' ); if ( response.status && true === response.status && response['token_data'] ) { that.getAccountDetails( response['token_data'] ); } else { /** * Connection error handling. */ $( '.gadsense-overlay' ).css( 'display', 'none' ); $( '#mapi-code' ).val( '' ); $( '#mapi-autoads' ).prop( 'checked', false ); $( '#gadsense-modal-content-inner .dashicons-dismiss' ).trigger( 'click' ); if ($.parseJSON(response.response_body).error === 'invalid_grant') { $('#gadsense-modal-error').show(); $('#gadsense-reopen-connect').one('click', function (event) { event.preventDefault(); $('#gadsense-modal-error').hide(); that.show(); }); } } }, error:function(request, status, error){ $( '#gadsense-loading-overlay' ).css( 'display', 'none' ); }, }); } ); // Account selection $( document ).on( 'click', '.gadsense-modal-content-inner[data-content="account-selector"] button', function( ev ) { var adsenseID = $( '#mapi-select-account' ).val(); var tokenData = false; var tokenString = $( '.gadsense-modal-content-inner[data-content="account-selector"] input.token-data' ).val(); var details = false; var detailsString = $( '.gadsense-modal-content-inner[data-content="account-selector"] input.accounts-details' ).val(); try { tokenData = JSON.parse( tokenString ); } catch ( Ex ) { console.error( 'Bad token data : ' + tokenString ); } try { details = JSON.parse( detailsString ); } catch ( Ex ) { console.error( 'Bad account details : ' + detailsString ); } if ( details && JSON ) { $( '.gadsense-overlay' ).css( 'display', 'block' ); var data = { action: 'quads_gadsense_mapi_select_account', nonce: quads.nonce, account : details[ adsenseID ], 'token_data': tokenData, }; if ( $( '#mapi-autoads' ).prop( 'checked' ) ) { data['autoads'] = 1; } $.ajax({ url: ajaxurl, type: 'post', data: data, success:function(response, status, XHR){ if ( response.status && true === response.status ) { INSTANCE.exit(); } else { console.log( response ); } }, error:function(request, status, error){ $( '#gadsense-loading-overlay' ).css( 'display', 'none' ); }, }); } } ); }, show: function( content ) { if ( 'undefined' == typeof content ) { content = 'confirm-code'; } this.switchContent( content ); if ( 'confirm-code' == content ) { // Open Google authentication in a child window. this.modal.css( 'display', 'block' ); var oW = $( window ).width(), oH = $( window ).height(), w = Math.min( oW, oH ) * 0.8, h = Math.min( oW, oH ) * 0.8, l = (oW - w) / 2, t = (oH - h) / 2, args = 'resize=1,titlebar=1,width=' + w + ',height=' + h + ',left=' + l + ',top=' + t; this.AUTH_WINDOW = window.open( quads_adsense.auth_url, 'quadsOAuth2', args ); } }, // Get account info based on a newly obtained token. getAccountDetails: function( tokenData ){ var data = { action: 'quads_gadsense_mapi_get_details', nonce: quads.nonce, }; data['token_data'] = tokenData; if ( $( '#mapi-autoads' ).prop( 'checked' ) ) { data['autoads'] = 1; } $.ajax({ url: ajaxurl, type: 'post', data: data, success:function(response, status, XHR){ if ( response.status && true === response.status ) { if ( response['adsense_id'] ) { INSTANCE.exit(); } else if ( response['token_data'] ) { INSTANCE.switchContent( 'account-selector' ); INSTANCE.frame.find( 'select' ).html( response.html ); INSTANCE.frame.find( 'input.token-data' ).val( JSON.stringify( response['token_data'] ) ); INSTANCE.frame.find( 'input.accounts-details' ).val( JSON.stringify( response['details'] ) ); } else { INSTANCE.switchContent( 'error' ); INSTANCE.frame.find( '.error-message' ).text( JSON.stringify( response ) ); } } else { if ( response['raw']['errors'][0]['message'] ) { INSTANCE.switchContent( 'error' ); INSTANCE.frame.find( '.error-message' ).text( response['raw']['errors'][0]['message'] ); if ( 'undefined' != typeof quads.connectErrorMsg[response['raw']['errors'][0]['reason']] ) { INSTANCE.frame.find( '.error-description' ).html( quads.connectErrorMsg[response['raw']['errors'][0]['reason']] ); } else { INSTANCE.frame.find( '.error-message' ).append( ' (' + response['raw']['errors'][0]['reason'] + ')' ); } } else if ( response['raw']['message'] ) { INSTANCE.frame.find( '.error-message' ).text( response['raw']['errors'][0]['message'] ); } } }, error:function(request, status, error){ $( '#gadsense-loading-overlay' ).css( 'display', 'none' ); }, }); }, // Switch between frames in the modal container. switchContent: function( content ) { if ( this.modal.find( '.gadsense-modal-content-inner[data-content="' + content + '"]' ).length ) { this.modal.find( '.gadsense-modal-content-inner' ).css( 'display', 'none' ); this.frame = this.modal.find( '.gadsense-modal-content-inner[data-content="' + content + '"]' ); this.frame.css( 'display', 'block' ); $( '.gadsense-overlay' ).css( 'display', 'none' ); } }, // Show the modal frame with a given content. // Hide the modal frame hide: function(){ this.switchContent( 'confirm-code' ); this.modal.css( 'display', 'none' ); }, }; window.quadsMapiConnectClass = quadsMapiConnectClass; // Shortcut function. window.quadsMapiConnect = function( content, options ) { if ( 'undefined' == typeof content || ! content ) { content = 'confirm-code'; } if ( 'undefined' == typeof options ) { options = {}; } if ( null === INSTANCE ) { INSTANCE = new quadsMapiConnectClass( content, options ); } else { INSTANCE.show( content, options ); } } $(function(){ // Move the the pop-up outside of any form. $( '#wpwrap' ).append( $( '#gadsense-modal' ) ); }); })(window.jQuery); function quads_display_report(response){ var report_type = document.getElementById('report_type').value; if(report_type == 'top_device_type') { var data_length = response.length; var datasets =[]; var dates_array = []; var desktop_total =0; var tablet_total =0; var mobile_total =0; for (index = 0; index < data_length; ++index) { if(!dates_array.includes(response[index][0]) ) { dates_array.push(response[index][0]); } if (response[index][1] == 'Desktop') { desktop_total += parseFloat(response[index][2]); } else if (response[index][1] == 'Tablet') { tablet_total += parseFloat(response[index][2]); } else if (response[index][1] == 'HighEndMobile') { mobile_total += parseFloat(response[index][2]); } } datasets= [{ data: [ desktop_total.toFixed(2),tablet_total.toFixed(2),mobile_total.toFixed(2) ], backgroundColor: [ 'red', 'green', 'blue', ], label: 'Top Earning Device type' }]; var config = { type: 'pie', data: { datasets: datasets, labels: [ 'Desktop', 'Tablet', 'Mobile', ] }, options: { legend: { position: 'bottom', }, hover: { mode: 'nearest', intersect: true }, responsive: true } }; }else { var data_length = response.length; var dates_array = []; var data = []; for (index = 0; index < data_length; ++index) { var date = new Date((response[index][0])); var month = date.toLocaleString('default', { month: 'short' }); var New_date_formate = date.getDate()+' '+month+' '+date.getUTCFullYear(); if (!dates_array.includes(New_date_formate)) { dates_array.push(New_date_formate); } data.push(response[index][1]); } datasets = [{ label: 'Earnings', backgroundColor: 'red', borderColor: 'red', data: data, fill: false, }]; var config = { type: 'line', data: { labels: dates_array, datasets: datasets }, options: { legend: { position: 'bottom', }, hover: { mode: 'nearest', intersect: true }, responsive: true, tooltips: { mode: 'index', intersect: false, }, plugins: { title: { display: true, text: 'Chart.js Line Chart' }, }, scales: { xAxes: { display: true, scaleLabel: { display: true, labelString: 'Month' } }, yAxes: { display: true, scaleLabel: { display: true, labelString: 'Value' } } } } }; } quadsDrawChart(config); } function quadsDrawChart(config){ if(document.getElementById("quads_canvas")) document.getElementById("quads_canvas").outerHTML = ""; var new_canvas = "" + " "; document.getElementById('quads_reports_canvas').innerHTML = new_canvas; if(window.myPieChart ) { window.myPieChart.update(); } // Get the context of the canvas element we want to select var ctx = document.getElementById('quads_canvas'); // ctx.clearRect(0, 0, canvas.width, canvas.height); window.myPieChart = new Chart(ctx, config); }import countryTranslations from "./countries.js"; import interfaceTranslations from "./interface.js"; export { countryTranslations, interfaceTranslations }; const allTranslations = { ...countryTranslations, ...interfaceTranslations }; export default allTranslations; .redux-container-datetime .redux-datetime-container .input_wrapper, .redux-container-datetime .redux-datetime-container .single_wrapper { display: block; position: relative; margin: 0 4px 0 5px; padding: 0; width: 25%; max-width: 25%; min-width: 70px; float: left; clear: none; height: 57px; -webkit-box-sizing: border-box; box-sizing: border-box; vertical-align: baseline; } .redux-container-datetime .redux-datetime-container .single_wrapper { width: 50% !important; max-width: 50% !important; } .redux-container-datetime .redux-datetime-container label { display: block; position: relative; font-size: 12px !important; text-align: left; color: #999999; margin: 4px 0 2px 0 !important; cursor: default; } .redux-container-datetime .redux-datetime-container .redux-date-picker { width: 100%; } .redux-container-datetime .redux-datetime-container .redux-time-picker { width: 100%; } .ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; } .ui-timepicker-div .ui-widget-header { margin-bottom: 8px; } .ui-timepicker-div dl { text-align: left; } .ui-timepicker-div dl dt { float: left; clear: left; padding: 0 0 0 5px; } .ui-timepicker-div dl dd { margin: 0 10px 10px 40%; } .ui-timepicker-div td { font-size: 90%; } .ui-timepicker-div .ui_tpicker_unit_hide { display: none; } .ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input { background: none; color: inherit; border: none; outline: none; border-bottom: solid 1px #555; width: 95%; } .ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus { border-bottom-color: #aaa; } .ui-timepicker-div.ui-timepicker-oneLine { padding-right: 2px; } .ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time, .ui-timepicker-div.ui-timepicker-oneLine dt { display: none; } .ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label { display: block; padding-top: 2px; } .ui-timepicker-div.ui-timepicker-oneLine dl { text-align: right; } .ui-timepicker-div.ui-timepicker-oneLine dl dd, .ui-timepicker-div.ui-timepicker-oneLine dl dd > div { display: inline-block; margin: 0; } .ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before, .ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before { content: "."; display: inline-block; } .ui-timepicker-div.ui-timepicker-oneLine dd.ui_tpicker_minute:before, .ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before { content: ":"; display: inline-block; } .ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide, .ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before { display: none; } .ui-timepicker-div .ui-widget-header { margin-bottom: 8px; } .ui-timepicker-div .ui-slider { position: relative; text-align: left; } .ui-timepicker-div .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; -ms-touch-action: none; touch-action: none; } .ui-timepicker-div .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: 0.7em; display: block; border: 0; background-position: 0 0; } .ui-timepicker-div .ui-slider.ui-state-disabled .ui-slider-handle, .ui-timepicker-div .ui-slider.ui-state-disabled .ui-slider-range { -webkit-filter: inherit; filter: inherit; } .ui-timepicker-div .ui-slider-horizontal { height: 0.8em; } .ui-timepicker-div .ui-slider-horizontal .ui-slider-handle { top: -0.3em; margin-left: -0.6em; } .ui-timepicker-div .ui-slider-horizontal .ui-slider-handle { top: -0.3em; margin-left: -0.6em; } .ui-timepicker-div .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-timepicker-div .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-timepicker-div .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-timepicker-div .ui-slider-vertical { width: 0.8em; height: 100px; } .ui-timepicker-div .ui-slider-vertical .ui-slider-handle { left: -0.3em; margin-left: 0; margin-bottom: -0.6em; } .ui-timepicker-div .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-timepicker-div .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-timepicker-div .ui-slider-vertical .ui-slider-range-max { top: 0; } .ui-timepicker-rtl { direction: rtl; } .ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; } .ui-timepicker-rtl dl dt { float: right; clear: right; } .ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; } /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlZHV4LWRhdGV0aW1lLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRVE7QUFBQTtDQUVJO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7QUFHSjtDQUNJO0NBQ0E7O0FBR0o7Q0FDRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7QUFHRjtDQUNJOztBQUdKO0NBQ0k7OztBQU1aO0NBQ0k7Q0FDQTtDQUNBO0NBQ0E7OztBQUlBO0NBQ0k7O0FBR0o7Q0FDSTs7QUFFQTtDQUNJO0NBQ0E7Q0FDQTs7QUFHSjtDQUNJOztBQUlSO0NBQ0k7O0FBR0o7Q0FDSTs7QUFHSjtDQUNHO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7QUFFQTtDQUNJOztBQUlQO0NBQ0k7O0FBRUE7QUFBQTtDQUVJOztBQUdKO0NBQ0k7Q0FBZ0I7O0FBR3BCO0NBQ0k7O0FBRUE7QUFBQTtDQUVJO0NBQ0E7O0FBR0o7QUFBQTtDQUVJO0NBQ0E7O0FBS1I7QUFBQTtDQUVJO0NBQ0E7O0FBR0o7QUFBQTtDQUVJOztBQUlSO0NBQ0k7O0FBR0E7Q0FDSTtDQUNBOztBQUVBO0NBQ0k7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0FBR0o7Q0FDSTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7O0FBR0o7Q0FFSTs7QUFJUjtDQUNJOztBQUVBO0NBQ0k7Q0FDQTs7QUFHSjtDQUNJO0NBQ0E7O0FBR0o7Q0FDSTtDQUNBOztBQUdKO0NBQ0k7O0FBR0o7Q0FDSTs7QUFJWjtDQUNJO0NBQ0E7O0FBRUE7Q0FDSTtDQUNBO0NBQ0E7O0FBR0o7Q0FDSTtDQUNBOztBQUdKO0NBQ0k7O0FBR0o7Q0FDSTs7O0FBS1o7Q0FDSTs7QUFFQTtDQUNJO0NBQ0E7O0FBRUE7Q0FDSTtDQUNBOztBQUdKO0NBQ0kiLCJmaWxlIjoicmVkdXgtZGF0ZXRpbWUuY3NzIn0= */ /*# sourceMappingURL=redux-datetime.css.map */ AJIO – CompareInsight https://compareinsight.com Your Shortcut to the Best Deals. Sun, 16 Aug 2026 10:14:14 +0000 en-US hourly 1 https://compareinsight.com/wp-content/uploads/2025/04/Favicon-100x100.png AJIO – CompareInsight https://compareinsight.com 32 32 AJIO https://compareinsight.com/abelssoft/ https://compareinsight.com/abelssoft/#respond Mon, 30 Jun 2025 10:17:48 +0000 https://compareinsight.com/abelssoft/

]]>
https://compareinsight.com/abelssoft/feed/ 0
Selfies from the sky made simple by Yuneec Breeze https://compareinsight.com/selfies-from-the-sky-made-simple-by-yuneec-breeze/ https://compareinsight.com/selfies-from-the-sky-made-simple-by-yuneec-breeze/#comments Wed, 23 Aug 2017 20:38:45 +0000 http://recompare.wpsoul.net/?p=223

The Yuneec Breeze perfect for people who want a camera drone for aerial photos and video, but have almost no interest in actually piloting a drone.

Genry o Dean

With little more than some taps on your phone’s screen, you can put the Breeze in the air and have it perform a handful of automated camera moves to grab photos and video clips of you and your friends and family. Then you just download them to your phone, edit, and share – all from within the drone’s app.

You can also fly it around manually with onscreen controls if you want to get specific aerial shots, but the range is limited to a maximum height of 80 meters (262.5 feet) and a maximum distance of 100 meters (328.1 feet). Flight times tap out at 12 minutes, so you won’t want to fly it too far away from you anyway.

The Breeze is not a toy, though. Its price tag pretty much quells that notion: $500 in the US and AU$700 or £450 in Australia and the UK, respectively. It’s not for racing around, either, and it’s also not going to compete with something like the DJI Phantom 3 Standard, which is priced similarly, but has a better camera stabilized with a three-axis gimbal and far greater range and capabilities.

However, the DJI isn’t going to slip into a shoulder bag or backpack and is not nearly as discreet as the Breeze. It’s basically a point-and-shoot camera attached to a flying robot — a selfie drone.

The mobile app, available for iOS and Android, is split into two sections: Tasks and Gallery. Tap on Tasks and you’re given five options to choose from: Pilot, Selfie, Orbit, Journey and Follow Me. The pilot has the manual controls for flying around the way any other drone would with a regular controller. However, the Breeze is designed to have the camera pointed at you and not away from you like other camera drones, so the controls are reversed. (An onscreen toggle quickly switches this to what experienced pilots would consider normal.)

Selfie mode takes away the traditional stick controls and uses sliders instead to get the camera into just the right position for your photo or video. Orbit lets you set up the Breeze to automatically circle you or another subject, while Journey sets the copter to fly away from you and back again using the camera’s angle to calculate its trajectory.

Follow Me uses GPS and your phone to track you and follow you around. If you’re close to the drone, the movements can be jerky. In my experience, the best way to use this is to have it fly over top of you or from behind with it far away to take advantage of the camera’s wide-angle lens.

The Breeze performed really well overall and each mode has instructions for how to use it, so you’re never left guessing how to set up your shots. And when you get the video or photo you’re after, you can tap back out of Tasks and head to the Gallery for editing and sharing.

If you’re used to the smooth, stabilized aerial video from drones with cameras on motorized gimbals, you’re likely going to be disappointed by the Breeze’s video or at least its 4K-resolution video. Other than some vibration dampeners in the body there is nothing to stabilize the video at its highest resolution, 2160p at 30fps, so the slightest wind or drone movements cause shake and jerkiness in videos.

Drop down to 1080p at 30fps or 720p at 60fps, though, and you get digital image stabilization that works pretty well. It won’t take out all movement, but even in high winds the video looked fairly stable. It is no replacement for a gimbal, but as long as the drone is performing one of its automated moves or you’re just flying it, it looks good. At least good enough to share on social or when viewed on a phone or tablet. The quality won’t blow people away, but the fact that it’s from a flying camera will.

And really, that’s what the Breeze is all about: getting a great aerial shot of you and your friends to share online so that people can view it on their phones or tablets.

[affegg id=1]

]]>
https://compareinsight.com/selfies-from-the-sky-made-simple-by-yuneec-breeze/feed/ 4