/* global wpforms_builder, wpforms_builder_stripe */ // noinspection ES6ConvertVarToLetConst /** * Stripe builder function. * * @since 1.8.2 */ // eslint-disable-next-line no-var var WPFormsStripe = window.WPFormsStripe || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.8.2 * * @type {Object} */ const app = { /** * Start the engine. * * @since 1.8.2 */ init() { $( app.ready ); }, /** * Initialized once the DOM is fully loaded. * * @since 1.8.2 */ ready() { if ( ! app.isLegacySettings() ) { return; } app.settingsDisplay(); app.settingsConditions(); app.bindUIActions(); }, /** * Process various events as a response to UI interactions. * * @since 1.8.2 */ bindUIActions() { $( document ) .on( 'wpformsFieldDelete', app.disableNotifications ) .on( 'wpformsSaved', app.requiredFieldsCheck ) .on( 'wpformsFieldUpdate', app.settingsDisplay ) .on( 'wpformsFieldUpdate', app.settingsConditions ); }, /** * Toggles visibility of the Stripe settings. * * If a credit card field has been added, then reveal the settings. * Otherwise, hide them. * * @since 1.8.2 */ settingsDisplay() { const $alert = $( '#wpforms-stripe-credit-card-alert' ); const $content = $( '#stripe-provider' ); // Check if any Credit Card fields were added to the form. const ccFieldsAdded = wpforms_builder_stripe.field_slugs.filter( function( fieldSlug ) { const $el = $( '.wpforms-field-option-' + fieldSlug ); return $el.length ? $el : null; } ); if ( ccFieldsAdded.length ) { $alert.hide(); $content.find( '#wpforms-stripe-new-interface-alert, .wpforms-stripe-notice-info, .wpforms-panel-field, .wpforms-conditional-block-panel, h2' ).show(); } else { $alert.show(); $content.find( '#wpforms-stripe-new-interface-alert, .wpforms-stripe-notice-info, .wpforms-panel-field, .wpforms-conditional-block-panel, h2' ).hide(); $content.find( '#wpforms-panel-field-stripe-enable' ).prop( 'checked', false ); } }, /** * Toggles the visibility of the related settings. * * @since 1.8.2 */ settingsConditions() { $( '#wpforms-panel-field-stripe-enable' ).conditions( { conditions: { element: '#wpforms-panel-field-stripe-enable', type: 'checked', operator: 'is', }, actions: { if: { element: '.wpforms-panel-content-section-stripe-body', action: 'show', }, else: { element: '.wpforms-panel-content-section-stripe-body', action: 'hide', }, }, effect: 'appear', } ); $( '#wpforms-panel-field-stripe-recurring-enable' ).conditions( { conditions: { element: '#wpforms-panel-field-stripe-recurring-enable', type: 'checked', operator: 'is', }, actions: { if: { element: '#wpforms-panel-field-stripe-recurring-period-wrap,#wpforms-panel-field-stripe-recurring-conditional_logic-wrap,#wpforms-conditional-groups-payments-stripe-recurring,#wpforms-panel-field-stripe-recurring-email-wrap,#wpforms-panel-field-stripe-recurring-name-wrap', action: 'show', }, else: { element: '#wpforms-panel-field-stripe-recurring-period-wrap,#wpforms-panel-field-stripe-recurring-conditional_logic-wrap,#wpforms-conditional-groups-payments-stripe-recurring,#wpforms-panel-field-stripe-recurring-email-wrap,#wpforms-panel-field-stripe-recurring-name-wrap', action: 'hide', }, }, effect: 'appear', } ); }, /** * On form save notify users about required fields. * * @since 1.8.2 */ requiredFieldsCheck() { if ( ! $( '#wpforms-panel-field-stripe-enable' ).is( ':checked' ) || ! $( '#wpforms-panel-field-stripe-recurring-enable' ).is( ':checked' ) ) { return; } if ( $( '#wpforms-panel-field-stripe-recurring-email' ).val() ) { return; } $.alert( { title: wpforms_builder.heads_up, content: wpforms_builder.stripe_recurring_email, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Disable notifications. * * @since 1.8.2 * * @param {Object} e Event object. * @param {number} id Field ID. * @param {string} type Field type. */ disableNotifications( e, id, type ) { if ( ! wpforms_builder_stripe.field_slugs.includes( type ) ) { return; } const $notificationWrap = $( '.wpforms-panel-content-section-notifications [id*="-stripe-wrap"]' ); $notificationWrap.find( 'input[id*="-stripe"]' ).prop( 'checked', false ); $notificationWrap.addClass( 'wpforms-hidden' ); }, /** * Determine is legacy settings is loaded. * * @since 1.8.4 * * @return {boolean} True is legacy settings loaded. */ isLegacySettings() { return $( '#wpforms-panel-field-stripe-enable' ).length; }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsStripe.init(); /*! elementor - v3.24.0 - 15-10-2024 */ (()=>{var e={38003:e=>{"use strict";e.exports=wp.i18n},78983:e=>{e.exports=function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},42081:(e,t,r)=>{var o=r(74040);function _defineProperties(e,t){for(var r=0;r{var o=r(74040);e.exports=function _defineProperty(e,t,r){return(t=o(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e},e.exports.__esModule=!0,e.exports.default=e.exports},73203:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},56027:(e,t,r)=>{var o=r(7501).default;e.exports=function toPrimitive(e,t){if("object"!=o(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,t||"default");if("object"!=o(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports.default=e.exports},74040:(e,t,r)=>{var o=r(7501).default,i=r(56027);e.exports=function toPropertyKey(e){var t=i(e,"string");return"symbol"==o(t)?t:String(t)},e.exports.__esModule=!0,e.exports.default=e.exports},7501:e=>{function _typeof(t){return e.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,_typeof(t)}e.exports=_typeof,e.exports.__esModule=!0,e.exports.default=e.exports}},t={};function __webpack_require__(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,__webpack_require__),i.exports}(()=>{"use strict";var e=__webpack_require__(38003).__,t=__webpack_require__(73203),r=t(__webpack_require__(78983)),o=t(__webpack_require__(42081)),i=t(__webpack_require__(93231)),n=function(){function Admin(){(0,r.default)(this,Admin),(0,i.default)(this,"KIT_DATA_KEY","elementor-kit-data"),(0,i.default)(this,"cachedKitData",void 0),(0,i.default)(this,"revertButton",void 0),(0,i.default)(this,"activeKitName",void 0),this.activeKitName=this.getActiveKitName(),this.revertButton=document.getElementById("elementor-import-export__revert_kit"),this.revertButton&&(this.revertButton.addEventListener("click",this.onRevertButtonClick.bind(this)),this.maybeAddRevertBtnMargin()),this.maybeShowReferrerKitDialog()}return(0,o.default)(Admin,[{key:"maybeAddRevertBtnMargin",value:function maybeAddRevertBtnMargin(){new URLSearchParams(this.revertButton.href).get("referrer_kit")&&(this.revertButton.style.marginBottom=this.calculateMargin(),this.scrollToBottom())}},{key:"calculateMargin",value:function calculateMargin(){var e=document.getElementById("wpadminbar"),t=e?e.offsetHeight:0,r=this.revertButton.parentElement.offsetHeight;return document.body.clientHeight-t-r-document.getElementById("wpfooter").offsetHeight-15+"px"}},{key:"scrollToBottom",value:function scrollToBottom(){setTimeout((function(){window.scrollTo(0,document.body.scrollHeight)}))}},{key:"onRevertButtonClick",value:function onRevertButtonClick(t){var r=this;t.preventDefault(),elementorCommon.dialogsManager.createWidget("confirm",{headerMessage:e("Are you sure?","elementor"),message:e("Removing %s will permanently delete changes made to the Kit's content and site settings","elementor").replace("%s",this.activeKitName),strings:{confirm:e("Delete","elementor"),cancel:e("Cancel","elementor")},onConfirm:function onConfirm(){return r.onRevertConfirm()}}).show()}},{key:"onRevertConfirm",value:function onRevertConfirm(){var e=new URLSearchParams(this.revertButton.href).get("referrer_kit");this.saveToCache(null!=e?e:""),location.href=this.revertButton.href}},{key:"maybeShowReferrerKitDialog",value:function maybeShowReferrerKitDialog(){var t=this.getDataFromCache().referrerKitId;if(void 0!==t){if(0===t.length)return this.createKitDeletedWidget({message:e("Try a different Kit or build your site from scratch.","elementor"),strings:{confirm:e("OK","elementor"),cancel:e("Kit Library","elementor")},onCancel:function onCancel(){location.href=elementorImportExport.appUrl}}),void this.clearCache();this.createKitDeletedWidget({message:e("You're ready to apply a new Kit!","elementor"),strings:{confirm:e("Continue to new Kit","elementor"),cancel:e("Close","elementor")},onConfirm:function onConfirm(){location.href=elementorImportExport.appUrl+"/preview/"+t}}),this.clearCache()}}},{key:"createKitDeletedWidget",value:function createKitDeletedWidget(t){var r=this.getDataFromCache().activeKitName;elementorCommon.dialogsManager.createWidget("confirm",{id:"e-revert-kit-deleted-dialog",headerMessage:e("%s was successfully deleted","elementor").replace("%s",r),message:t.message,strings:{confirm:t.strings.confirm,cancel:t.strings.cancel},onConfirm:t.onConfirm,onCancel:t.onCancel}).show()}},{key:"getActiveKitName",value:function getActiveKitName(){var t=elementorImportExport.lastImportedSession;return t.kit_title?t.kit_title:t.kit_name?this.convertNameToTitle(t.kit_name):e("Your Kit","elementor")}},{key:"convertNameToTitle",value:function convertNameToTitle(e){return e.split(/[-_]+/).map((function(e){return e[0].toUpperCase()+e.substring(1)})).join(" ")}},{key:"saveToCache",value:function saveToCache(e){sessionStorage.setItem(this.KIT_DATA_KEY,JSON.stringify({referrerKitId:e,activeKitName:this.activeKitName}))}},{key:"getDataFromCache",value:function getDataFromCache(){var e;if(this.cachedKitData)return this.cachedKitData;try{this.cachedKitData=JSON.parse(sessionStorage.getItem(this.KIT_DATA_KEY))}catch(e){return{}}return null!==(e=this.cachedKitData)&&void 0!==e?e:{}}},{key:"clearCache",value:function clearCache(){sessionStorage.removeItem(this.KIT_DATA_KEY)}}]),Admin}();window.addEventListener("load",(function(){new n}))})()})();@import "../start"; @import "modal-common"; @import "deactivation-feedback"; @import "subscription-cancellation"; @import "license-activation"; @import "user-change"; @import "data-debug-mode"; @import "multisite-options"; @import "license-key-resend"; @import "email-address-update"; @import "ajax-loader"; @import "auto-install"; @import "buttons";/* global wpforms_builder, wpforms_addons, wpf */ /** * @param strings.calculation_notice_text * @param strings.calculation_notice_text_grp * @param strings.calculation_notice_tooltip * @param strings.cant_switch_to_rows_alert * @param strings.cl_notice_text * @param strings.cl_notice_text_grp * @param strings.move_to_rows_rejected_alert * @param strings.not_allowed * @param strings.not_allowed_alert_text * @param strings.not_allowed_fields * @param strings.rows_limit_max * @param wpforms_builder.repeater.fields_mapping.title * @param wpforms_builder.repeater.fields_mapping.content * @param wpforms_builder.repeater.addons_requirements * @param wpforms_builder.repeater.wpforms_builder.repeater.addons_requirements_alert */ // noinspection ES6ConvertVarToLetConst /** * Form Builder Field Repeater module. * * @since 1.8.9 */ var WPForms = window.WPForms || {}; // eslint-disable-line no-var WPForms.Admin = WPForms.Admin || {}; WPForms.Admin.Builder = WPForms.Admin.Builder || {}; WPForms.Admin.Builder.FieldRepeater = WPForms.Admin.Builder.FieldRepeater || ( function( document, window, $ ) { /** * Localized Repeater field strings. * * @since 1.8.9 * * @type {Object} */ const strings = wpforms_builder.repeater; /** * Elements holder. * * @since 1.8.9 * * @type {Object} */ let el = {}; /** * Runtime variables. * * @since 1.8.9 * * @type {Object} */ const vars = {}; /** * Public functions and properties. * * @since 1.8.9 * * @type {Object} */ const app = { /** * Start the engine. * * @since 1.8.9 */ init() { $( app.ready ); }, /** * DOM is fully loaded. * * @since 1.8.9 */ ready() { app.setup(); app.hooks(); app.events(); }, /** * Setup. Prepare some variables. * * @since 1.8.9 */ setup() { // Cache DOM elements. el = { $builder: $( '#wpforms-builder' ), }; }, /** * Init all the Repeater fields. * * @since 1.8.9 */ initFields() { el.$builder.find( '.wpforms-field-repeater' ).each( function() { const $field = $( this ); const fieldId = $field.data( 'field-id' ); app.adjustRowsAppearance( fieldId ); } ); }, /** * Hooks. * * @since 1.8.9 */ hooks() { // Determine if we could add a field to the column. wp.hooks.addFilter( 'wpforms.LayoutField.isFieldAllowedDragInColumn', 'wpforms/field-repeater', app.filterIsFieldAllowedDragInColumn ); wp.hooks.addFilter( 'wpforms.LayoutField.isFieldAllowedInColumn', 'wpforms/field-repeater', app.filterIsFieldAllowedInColumn ); // Update alert message modal options when the field is not allowed to be added to the column. wp.hooks.addFilter( 'wpforms.LayoutField.fieldMoveRejectedModalOptions', 'wpforms/field-repeater', app.filterFieldMoveRejectedModalOptions ); // Filter fields in the CL fields dropdown. wp.hooks.addFilter( 'wpforms.ConditionalLogicCore.BeforeRemoveUnsupportedFields', 'wpforms/field-repeater', app.removeRepeaterFieldsAndChildren ); }, /** * Bind events. * * @since 1.8.9 */ events() { el.$builder .on( 'click', '.wpforms-field-option-row-display input', app.handleDisplayClick ) .on( 'change', '.wpforms-field-option-row-display input', app.handleDisplayChange ) .on( 'change', '.wpforms-field-option-row-preset input', app.handlePresetChange ) .on( 'change', '.wpforms-field-option-row-button-type select', app.handleButtonTypeChange ) .on( 'input', '.wpforms-field-option-row-label input', app.handleFieldLabelChange ) .on( 'input', '.wpforms-field-option-row-button-labels input', app.handleButtonLabelsChange ) .on( 'change', '.wpforms-field-option-row-rows-limit input', app.handleRowsLimitChange ) .on( 'wpformsLayoutAfterPresetChange', app.handleAfterPresetChange ) .on( 'wpformsLayoutAfterHeightBalance', app.handleAfterHeightBalance ) .on( 'wpformsFieldAdd', app.handleFieldAdd ) .on( 'wpformsFieldDelete', app.handleFieldDelete ) .on( 'wpformsFieldMoveRejected', app.handleFieldMoveRejected ) .on( 'wpformsFieldDuplicated', app.handleFieldDuplicated ) .on( 'wpformsBuilderReady', app.initFields ) .on( 'wpformsFieldOptionTabToggle', app.handleFieldOptionTabToggle ) .on( 'wpformsFieldMove', app.handleFieldMove ) .on( 'change', '.wpforms-field-option-layout .wpforms-field-option-row-conditional_logic input', app.handleUpdateFieldCLOption ); $( window ) .on( 'resize', _.debounce( app.handleWindowResize, 50 ) ); }, /** * Fields mapping notice. * * @since 1.9.1 * * @param {string} fieldId Field ID. */ // eslint-disable-next-line max-lines-per-function fieldsMappingNotice( fieldId ) { /** * Check if the field is mapped to the select. * * @param {string} selectedFieldID Selected field ID. * * @return {boolean} True if the field is mapped. */ function isFieldMappedToSelect( selectedFieldID ) { return parseInt( selectedFieldID, 10 ) === parseInt( fieldId, 10 ); } /** * Get the section title. * * @param {Object} $select Field map select element. * * @return {string} Section title. */ function getSectionTitle( $select ) { return $select.closest( '.wpforms-panel-content-section' ).find( '.wpforms-panel-content-section-title' )[ 0 ].firstChild.nodeValue.trim(); } /** * Show the confirmation dialog. * * @param {string} sectionTitle Section title. * @param {Object} $field Field element. */ function showConfirmationDialog( sectionTitle, $field ) { el.$builder.on( 'wpformsBeforeFieldMapSelectUpdate', ( e ) => e.preventDefault() ); $.confirm( { title: wpforms_builder.repeater.fields_mapping.title, content: wpforms_builder.repeater.fields_mapping.content.replace( '%s', sectionTitle ), icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: () => { el.$builder.off( 'wpformsBeforeFieldMapSelectUpdate' ); const fields = wpf.getFields( false, true, false, false ); $( document ).trigger( 'wpformsFieldUpdate', [ fields ] ); }, }, cancel: { text: wpforms_builder.cancel, action: () => { WPForms.Admin.Builder.DragFields.revertMoveFieldToColumn( $field ); WPForms.Admin.Builder.FieldLayout.removeFieldFromColumns( $field.data( 'field-id' ) ); app.initFields(); }, }, }, } ); } /** * Check and handle the field mapping. * * @param {Object} $field Field element. */ function checkAndHandleFieldMapping( $field ) { const data = { sections: [], $field: null, }; // Check if the field is mapped to the select. $( 'select[data-field-map-allowed], select.wpforms-builder-provider-connection-field-value' ).each( function() { const $select = $( this ); if ( isFieldMappedToSelect( $select.val() ) ) { data.sections.push( getSectionTitle( $select ) ); data.$field = $field; } } ); if ( data.$field ) { const sectionTitle = [ ...new Set( data.sections ) ].join( ' ' + wpforms_builder.repeater.fields_mapping.and + ' ' ); showConfirmationDialog( sectionTitle, data.$field ); } } /** * Check if the field is inside the repeater and show the notice. */ function showNotice() { const $field = $( '#wpforms-field-' + fieldId ); if ( ! $field.length || $field.hasClass( 'wpforms-field-repeater' ) || $field.hasClass( 'wpforms-field-layout' ) ) { return; } if ( ! $field.closest( '.wpforms-field-repeater' ).length ) { return; } checkAndHandleFieldMapping( $field ); } showNotice(); }, /** * Display click event handler. * * @since 1.8.9 * * @return {boolean} Whether the change is allowed. */ handleDisplayClick() { const $input = $( this ); const display = $input.val(); if ( display !== 'rows' ) { return true; } const fieldId = $input.closest( '.wpforms-field-option-repeater' ).data( 'field-id' ); const columnsData = WPForms.Admin.Builder.FieldLayout.getFieldColumnsData( fieldId ); const allowRows = columnsData.every( ( column ) => { return column?.fields?.length <= 1; } ); if ( ! allowRows ) { // Display alert. app.errorModal( strings.not_allowed, strings.cant_switch_to_rows_alert ); return false; } return true; }, /** * Display change event handler. * * @since 1.8.9 */ handleDisplayChange() { const $input = $( this ); const display = $input.val(); const $fieldOptions = $input.closest( '.wpforms-field-option-repeater' ); const fieldId = $fieldOptions.data( 'field-id' ); const $fieldPreview = $( '#wpforms-field-' + fieldId ); const buttonType = $fieldOptions.find( '.wpforms-field-option-row-button-type select' ).val(); // Show/hide button type and labels options. $fieldOptions .find( '.wpforms-field-option-row-button-type' ) .toggleClass( 'wpforms-hidden', display === 'rows' ); $fieldOptions .find( '.wpforms-field-option-row-button-labels' ) .toggleClass( 'wpforms-hidden', display === 'rows' || buttonType === 'icons' ); // Change field preview class according to selected Display value. $fieldPreview .find( '.wpforms-field-layout-columns' ) .toggleClass( 'wpforms-layout-display-rows', display === 'rows' ) .toggleClass( 'wpforms-layout-display-blocks', display === 'blocks' ); if ( display === 'blocks' ) { $fieldPreview.find( '.wpforms-layout-column-placeholder' ).css( 'top', '' ); } // Show/hide blocks' buttons on the field preview. $fieldPreview .find( '.wpforms-field-repeater-display-rows-buttons' ) .toggleClass( 'wpforms-hidden', display !== 'rows' ); // Show/hide rows' buttons on the field preview. $fieldPreview .find( '.wpforms-field-repeater-display-blocks-buttons' ) .toggleClass( 'wpforms-hidden', display !== 'blocks' ); app.adjustRowsAppearance( fieldId ); }, /** * Preset change event handler. * * @since 1.8.9 */ handlePresetChange() { const $input = $( this ); const preset = $input.val(); const $fieldOptions = $input.closest( '.wpforms-field-option-repeater' ); $fieldOptions .find( '.wpforms-field-option-row-size' ) .toggleClass( 'wpforms-disabled', preset !== '100' ); }, /** * After preset change event handler. * * @since 1.8.9 * * @param {Event} e Event object. * @param {Object} data Event data. */ handleAfterPresetChange( e, data ) { const $fieldPreview = $( '#wpforms-field-' + data.fieldId ); const display = $( `#wpforms-field-option-row-${ data.fieldId }-display input:checked` ).val(); const rowsButtons = wp.template( 'wpforms-repeater-field-display-rows-buttons-template' ); const classHidden = display === 'rows' ? '' : 'wpforms-hidden'; $fieldPreview .find( '.wpforms-field-layout-columns' ) .append( rowsButtons( { class: classHidden } ) ); app.adjustRowsAppearance( data.fieldId ); }, /** * Button Type change event handler. * * @since 1.8.9 */ handleButtonTypeChange() { const $input = $( this ); const buttonType = $input.val(); const $fieldOptions = $input.closest( '.wpforms-field-option-repeater' ); const $fieldPreview = $( '#wpforms-field-' + $fieldOptions.data( 'field-id' ) ); $fieldOptions .find( '.wpforms-field-option-row-button-labels' ) .toggleClass( 'wpforms-hidden', buttonType === 'icons' ); $fieldPreview .find( '.wpforms-field-repeater-display-blocks-buttons' ) .attr( 'data-button-type', buttonType ); }, /** * Field Label change event handler. * * @since 1.8.9 */ handleFieldLabelChange() { const $input = $( this ); const $fieldOptions = $input.closest( '.wpforms-field-option-repeater' ); const fieldId = $fieldOptions.data( 'field-id' ); app.adjustRowsAppearance( fieldId ); }, /** * Window resize event handler. * * @since 1.8.9 */ handleWindowResize() { el.$builder.find( '.wpforms-field-repeater' ).each( function() { app.adjustRowsAppearance( $( this ).data( 'field-id' ) ); } ); }, /** * Button Labels change event handler. * * @since 1.8.9 */ handleButtonLabelsChange() { const $input = $( this ); const $fieldOptions = $input.closest( '.wpforms-field-option-repeater' ); const fieldId = $fieldOptions.data( 'field-id' ); const $fieldPreview = $( '#wpforms-field-' + fieldId ); const buttonLabel = $input.val(); const button = $input.attr( 'class' ); $fieldPreview .find( `.wpforms-field-repeater-display-blocks-buttons-${ button } span` ) .text( buttonLabel ); }, /** * Rows Limit change event handler. * * @since 1.8.9 */ handleRowsLimitChange() { const $input = $( this ); const limit = $input.attr( 'class' ); if ( limit === 'rows-limit-min' ) { app.normalizeLimitMin( $input ); } else { app.normalizeLimitMax( $input ); } // Round the value after normalization. $input.val( Math.round( $input.val() ) ); }, /** * Normalize Rows Limit Minimum value. * * @since 1.8.9 * * @param {jQuery} $input Limit Minimum input element. */ normalizeLimitMin( $input ) { const value = $input.val(); const valueMin = parseInt( value, 10 ) || 0; // Minimal acceptable value of Minimum is 1. if ( value === '' || valueMin < 1 ) { $input.val( 1 ); return; } const $inputMax = $input.closest( '.wpforms-field-option-row-rows-limit' ).find( 'input.rows-limit-max' ); const valueMax = parseInt( $inputMax.val(), 10 ); // The Minimum value should be less than the Maximum value. if ( valueMax <= valueMin ) { $input.val( valueMax - 1 ); } }, /** * Normalize Rows Limit Maximum value. * * @since 1.8.9 * * @param {jQuery} $input Limit Maximum input element. */ normalizeLimitMax( $input ) { const value = $input.val(); const $inputMin = $input.closest( '.wpforms-field-option-row-rows-limit' ).find( 'input.rows-limit-min' ); const valueMin = parseInt( $inputMin.val(), 10 ); // The default Maximum value is relative to the Minimum. // When the Minimum is 1, the Maximum should be 10. if ( value === '' ) { const diff = valueMin === 1 ? 9 : 10; $input.val( valueMin + diff ); return; } const valueMax = parseInt( value, 10 ); // The Maximum value should be greater than the Minimum value. if ( valueMax <= valueMin ) { $input.val( valueMin + 1 ); return; } // Attempt to set enormous maximum value. Limit it to 200. if ( valueMax > strings.rows_limit_max ) { $input.val( strings.rows_limit_max ); } }, /** * After height balance event handler. * * @since 1.8.9 * * @param {Event} e Event object. * @param {Object} data Event data. */ handleAfterHeightBalance( e, data ) { if ( ! data?.$rows ) { return; } const fieldId = data.$rows.closest( '.wpforms-field-repeater' ).data( 'field-id' ); if ( ! fieldId ) { return; } app.adjustRowsAppearance( fieldId ); }, /** * Field add handler. * * @since 1.8.9 * * @param {Event} e Event object. * @param {string} fieldID Field ID. * @param {string} fieldType Field type. */ handleFieldAdd( e, fieldID, fieldType ) { if ( ! fieldID || ! fieldType ) { return; } const $fieldPreview = $( '#wpforms-field-' + fieldID ); const $repeaterField = $fieldPreview.closest( '.wpforms-field-repeater' ); if ( $repeaterField.length === 0 ) { return; } app.adjustRowsAppearance( $repeaterField.data( 'field-id' ) ); }, /** * Field delete event handler. * * @since 1.8.9 * * @param {Object} e Event object. * @param {string} fieldID Field ID. * @param {string} fieldType Field type. * @param {jQuery} $fieldLayoutWrapper Field layout wrapper. */ handleFieldDelete( e, fieldID, fieldType, $fieldLayoutWrapper ) { if ( $fieldLayoutWrapper.length === 0 ) { return; } const $repeaterField = $fieldLayoutWrapper.closest( '.wpforms-field-repeater' ); app.adjustRowsAppearance( $repeaterField.data( 'field-id' ) ); }, /** * Field move rejected handler. * * @since 1.8.9 * * @param {Event} e Event object. * @param {jQuery} $field Field element. */ handleFieldMoveRejected( e, $field ) { app.adjustRowsAppearance( $field.closest( '.wpforms-field-repeater' ).data( 'field-id' ) ); }, /** * The `wpformsFieldDuplicated` event handler. * * @since 1.8.9 * * @param {Event} e Event. * @param {number} fieldId Field ID. * @param {jQuery} $field Field object. * @param {number} newFieldId New field ID. * @param {jQuery} $newField New field object. */ handleFieldDuplicated( e, fieldId, $field, newFieldId, $newField ) { // eslint-disable-line no-unused-vars // Run for the Repeater field only. if ( $field.data( 'field-type' ) !== 'repeater' ) { return; } const display = $( `#wpforms-field-option-${ fieldId } .wpforms-field-option-row-display input:checked` ).val(); // Set the Display option for the duplicated field. $( `#wpforms-field-option-${ newFieldId }-display-${ display }` ).prop( 'checked', true ); // Adjust rows appearance after field duplication. app.adjustRowsAppearance( newFieldId ); }, /** * The `wpformsFieldOptionTabToggle` event handler. * * @since 1.8.9 * * @param {Event} e Event. * @param {number} fieldId Field id. */ handleFieldOptionTabToggle( e, fieldId ) { app.updateFieldCLOption( fieldId ); app.updateFieldCalculationOption( fieldId ); app.updateFieldGeolocationRequirementsAlerts( fieldId ); app.updateFieldSignatureRequirementsAlerts( fieldId ); }, /** * The `wpformsFieldMove` event handler. * * @since 1.8.9 * * @param {Object} e Event object. * @param {Object} ui UI object. */ handleFieldMove( e, ui ) { const fieldId = ui.item.first().data( 'field-id' ); app.updateFieldCLOption( fieldId ); app.updateFieldCalculationOption( fieldId ); app.updateFieldGeolocationRequirementsAlerts( fieldId ); app.updateFieldSignatureRequirementsAlerts( fieldId ); app.fieldsMappingNotice( fieldId ); }, /** * Update the Conditional Logic field option. * * @since 1.9.0 */ handleUpdateFieldCLOption() { const $this = $( this ); const fieldID = $this.parents( '.wpforms-field-option-row' ).data( 'field-id' ); const $field = $( `#wpforms-field-${ fieldID }` ); if ( ! $field.length ) { return; } $field.find( '.wpforms-field' ).each( function() { app.updateFieldCLOption( $( this ).data( 'field-id' ) ); } ); }, /** * Update the Geolocation field option. * * @since 1.8.9 * * @param {number|string} fieldId Field ID. */ updateFieldGeolocationRequirementsAlerts( fieldId ) { const $field = $( `#wpforms-field-${ fieldId }` ); if ( ! $field?.length || $field.hasClass( 'wpforms-field-repeater' ) || app.isInsideRepeaterAddonAllowed( 'wpforms-geolocation' ) || ( typeof wpforms_addons !== 'undefined' && wpforms_addons[ 'wpforms-geolocation' ] ) ) { return; } const isFieldInRepeater = $field.closest( '.wpforms-field-repeater' ).length > 0; const $fieldOptionToggleRow = $( `#wpforms-field-option-row-${ fieldId }-enable_address_autocomplete` ); let $fieldOptionNotice = $fieldOptionToggleRow.siblings( '.wpforms-alert-field-requirements' ); if ( ! $fieldOptionNotice.length ) { $fieldOptionNotice = $( wpforms_builder.repeater.addons_requirements_alert[ 'wpforms-geolocation' ] ); $fieldOptionToggleRow.before( $fieldOptionNotice ); } $fieldOptionNotice.toggleClass( 'wpforms-hidden', ! isFieldInRepeater ); }, /** * Update the Signature field. * * @since 1.8.9 * * @param {number|string} fieldId Field ID. */ updateFieldSignatureRequirementsAlerts( fieldId ) { const $field = $( `#wpforms-field-${ fieldId }` ); if ( ! $field?.length || $field.hasClass( 'wpforms-field-repeater' ) || app.isInsideRepeaterAddonAllowed( 'wpforms-signatures' ) ) { return; } const isFieldInRepeater = $field.closest( '.wpforms-field-repeater' ).length > 0; const $fieldOptionToggleRow = $( `.wpforms-field-option-signature #wpforms-field-option-row-${ fieldId }-label` ); let $fieldOptionNotice = $fieldOptionToggleRow.siblings( '.wpforms-alert-field-requirements' ); if ( ! $fieldOptionNotice.length ) { $fieldOptionNotice = $( wpforms_builder.repeater.addons_requirements_alert[ 'wpforms-signatures' ] ); $fieldOptionToggleRow.before( $fieldOptionNotice ); } $fieldOptionNotice.toggleClass( 'wpforms-hidden', ! isFieldInRepeater ); }, /** * Check if the addon is allowed inside the repeater. * * @param {string} slug Addon slug. * * @return {boolean} True if the addon is allowed. */ isInsideRepeaterAddonAllowed( slug ) { return wpforms_builder.repeater.addons_requirements[ slug ]; }, /** * Update the Calculation field option. * * @since 1.8.9 * * @param {number|string} fieldId Field ID. */ updateFieldCalculationOption( fieldId ) { const $field = $( `#wpforms-field-${ fieldId }` ); if ( ! $field?.length || $field.hasClass( 'wpforms-field-repeater' ) || ( typeof wpforms_addons !== 'undefined' && wpforms_addons[ 'wpforms-calculations' ] ) ) { return; } const isFieldInRepeater = $field.closest( '.wpforms-field-repeater' ).length > 0; const $fieldOptionToggleRow = $( `#wpforms-field-option-row-${ fieldId }-calculation_is_enabled` ); const $fieldOptionToggleInput = $fieldOptionToggleRow.find( 'input' ); let $fieldOptionNotice = $fieldOptionToggleRow.siblings( '.wpforms-notice-field-calculation_is_enabled' ); // Add "Calculation is disabled" notice. if ( ! $fieldOptionNotice.length ) { $fieldOptionNotice = $( `

${ strings.calculation_notice_text }

` ); $fieldOptionToggleRow.before( $fieldOptionNotice ); } // Notice text. $fieldOptionNotice.find( 'p' ).text( $fieldOptionToggleInput.prop( 'checked' ) ? strings.calculation_notice_text_grp : strings.calculation_notice_text ); if ( isFieldInRepeater ) { $fieldOptionToggleInput.prop( 'checked', false ).trigger( 'change' ); } $fieldOptionToggleRow.toggleClass( 'wpforms-disabled', isFieldInRepeater ); $fieldOptionNotice.toggleClass( 'wpforms-hidden', ! isFieldInRepeater ); }, /** * Update the Conditional Logic field option. * * @since 1.8.9 * * @param {number|string} fieldId Field ID. */ updateFieldCLOption( fieldId ) { // eslint-disable-line complexity const $field = $( `#wpforms-field-${ fieldId }` ); if ( ! $field?.length || $field.hasClass( 'wpforms-field-repeater' ) || $field.hasClass( 'wpforms-field-layout' ) ) { return; } const isFieldInRepeater = $field.closest( '.wpforms-field-repeater' ).length > 0; let isFieldInLayout = $field.closest( '.wpforms-field-layout' ).length > 0; const $fieldCLOptionRow = $( `#wpforms-field-option-row-${ fieldId }-conditional_logic` ); const $fieldCLBlock = $fieldCLOptionRow.closest( '.wpforms-conditional-block' ); const parentBlockType = isFieldInRepeater ? 'repeater' : 'layout'; if ( isFieldInLayout && ! app.isLayoutCLEnabled( $field.closest( '.wpforms-field-layout' ) ) ) { isFieldInLayout = false; } let $fieldCLOptionNotice = $fieldCLBlock.siblings( '.wpforms-notice-field-conditional_logic' ); // Add "Conditional Logic is disabled" notice. if ( ! $fieldCLOptionNotice.length ) { $fieldCLOptionNotice = $( `

${ wpforms_builder[ parentBlockType ].cl_notice_text }

` ); $fieldCLBlock.before( $fieldCLOptionNotice ); } const $fieldCLOptionToggle = $fieldCLOptionRow.find( '.wpforms-toggle-control' ); const $fieldCLOptionToggleInput = $fieldCLOptionToggle.find( 'input' ); // Disable Conditional Logic when moved inside the Repeater field. if ( isFieldInRepeater || isFieldInLayout ) { $fieldCLOptionToggleInput.prop( 'checked', false ); } // Enable the Conditional Logic if it exists when moved outside the Repeater field. if ( ! isFieldInRepeater && ! isFieldInLayout && ! $fieldCLOptionToggleInput.is( ':checked' ) ) { const hasCLGroups = $fieldCLOptionRow.siblings( '.wpforms-conditional-groups' ).length; $fieldCLOptionToggleInput.prop( 'checked', hasCLGroups ); } const isCLHasGroups = $fieldCLBlock.find( '.wpforms-conditional-groups' ).length; // Notice text. $fieldCLOptionNotice.find( 'p' ).text( isCLHasGroups ? wpforms_builder[ parentBlockType ].cl_notice_text_grp : wpforms_builder[ parentBlockType ].cl_notice_text ); // Toggle disabled state and notice visibility. $fieldCLBlock.toggleClass( 'wpforms-disabled', isFieldInRepeater || isFieldInLayout ); $fieldCLOptionNotice.toggleClass( 'wpforms-hidden', ! isFieldInRepeater && ! isFieldInLayout ); }, /** * Is the Conditional Logic enabled for the Layout field. * * @since 1.9.0 * * @param {jQuery} $field Layout field. * * @return {boolean} Whether the Conditional Logic is enabled. */ isLayoutCLEnabled( $field ) { const fieldId = $field.data( 'field-id' ); const $fieldCLOptionRow = $( `#wpforms-field-option-row-${ fieldId }-conditional_logic` ); const $fieldCLOptionToggle = $fieldCLOptionRow.find( '.wpforms-toggle-control' ); const $fieldCLOptionToggleInput = $fieldCLOptionToggle.find( 'input' ); return $fieldCLOptionToggleInput.is( ':checked' ); }, /** * Adjust rows appearance: buttons container position, column placeholder visibility. * * @since 1.8.9 * * @param {number|string} fieldId Field ID. */ adjustRowsAppearance( fieldId ) { const $fieldPreview = $( '#wpforms-field-' + fieldId + '.wpforms-field-repeater' ); if ( ! $fieldPreview.length ) { return; } const display = $( `#wpforms-field-option-row-${ fieldId }-display input:checked` ).val(); const $columns = $fieldPreview.find( '.wpforms-layout-column' ); const $rowsButtons = $fieldPreview.find( '.wpforms-field-repeater-display-rows-buttons' ); let inputTopMin = 0; $columns.each( function() { // eslint-disable-line complexity const $column = $( this ); const $field = $column.find( '.wpforms-field' ).first(); const $alert = $column.find( '.wpforms-alert' ); // Toggle column placeholder visibility. $column.toggleClass( 'hide-placeholder', ( $field.length > 0 || $alert.length > 0 ) && display === 'rows' ); // Column without fields shouldn't affect `inputTopMin`. if ( ! $field.length && ! $alert.length ) { return; } let inputTop = $field.find( '.label-title' ).height() || 0; // Determine the top position if there is alert in the column. inputTop = $alert.length > 0 ? ( $alert.height() / 2 ) - ( $rowsButtons.height() / 2 ) - 4 : inputTop; // Determine minimum input's top position in a row. inputTopMin = inputTop < inputTopMin || inputTopMin === 0 ? inputTop : inputTopMin; } ); const labelHeight = $fieldPreview.find( '> .label-title' ).outerHeight() || 20; const fieldTop = labelHeight + 30; $fieldPreview .find( '.wpforms-field-layout-columns' ) .css( 'margin-top', '-' + fieldTop + 'px' ) .find( '.wpforms-layout-column' ) .css( { 'padding-top': fieldTop, 'min-height' : fieldTop + 55, } ); // Update the row buttons' position only if the columns have no drag placeholder (blue rectangle). if ( $columns.find( '.wpforms-field-drag-placeholder' ).length === 0 ) { const $columnPlaceholder = $fieldPreview.find( '.wpforms-layout-display-rows .wpforms-layout-column-placeholder' ); const top = inputTopMin !== 0 ? inputTopMin + labelHeight + 47 : labelHeight + 16; $rowsButtons.css( 'top', top ); $columnPlaceholder.css( 'top', top + 14 ); } // Row with all hidden placeholders shouldn't have extra bottom padding. const $hiddenPlaceholders = $fieldPreview.find( '.wpforms-layout-column.hide-placeholder' ); const $row = $fieldPreview.find( '.wpforms-field-layout-columns' ); $row.toggleClass( 'hidden-placeholders', $hiddenPlaceholders.length === $columns.length ); }, /** * Filter whether the field is allowed in column. * * @since 1.8.9 * * @param {boolean|string} isFieldAllowed Whether the field is allowed to be placed in the column. * @param {string} fieldType Field type. * @param {jQuery} $targetColumn Target column element. * * @return {boolean|string} Whether the field is allowed. */ filterIsFieldAllowedDragInColumn( isFieldAllowed, fieldType, $targetColumn ) { // eslint-disable-line complexity vars.fieldMoveToRowsRejected = false; vars.fieldTypeRejected = ! isFieldAllowed ? fieldType : false; // Skip if the field is not allowed OR the target is not a column, return the original value. if ( ! isFieldAllowed || ! $targetColumn?.length || ! $targetColumn?.hasClass( 'wpforms-layout-column' ) ) { return isFieldAllowed; } const $repeaterField = $targetColumn?.closest( '.wpforms-field-repeater' ); if ( ! $repeaterField?.length ) { return isFieldAllowed; } const repeaterFieldId = $repeaterField.data( 'field-id' ); const display = $( `#wpforms-field-option-row-${ repeaterFieldId }-display input:checked` ).val(); // Allow adding many fields. Skip if the display is not `rows`. if ( display !== 'rows' ) { return isFieldAllowed; } // Allow adding one field. The column doesn't contain fields. if ( ! $targetColumn.find( '.wpforms-field:not(.wpforms-field-dragging)' ).length ) { return isFieldAllowed; } vars.fieldMoveToRowsRejected = true; // Disallow adding field if the column already contains some field. return false; }, /** * Filter the field move rejected alert modal options. * * @since 1.8.9 * * @param {Object} modalOptions Field move rejected alert modal options. * @param {jQuery} $field Field element object. * @param {Object} ui Sortable ui object. * @param {jQuery} $targetColumn Target column element. * * @return {Object} Updated the field move rejected alert modal options. */ filterFieldMoveRejectedModalOptions( modalOptions, $field, ui, $targetColumn ) { const $repeaterField = $targetColumn?.closest( '.wpforms-field-repeater' ); if ( ! $repeaterField?.length ) { return modalOptions; } const updatedModalOptions = { title: strings.not_allowed, content: strings.move_to_rows_rejected_alert, type: 'orange', }; // The field is rejected by type, return the message for the Repeater field. if ( vars.fieldTypeRejected ) { const name = $( `#wpforms-add-fields-${ vars.fieldTypeRejected }` ).text(); updatedModalOptions.content = strings.not_allowed_alert_text.replace( /%s/g, `${ name }` ); return updatedModalOptions; } // The field move to rows is not rejected, return original message. if ( ! vars.fieldMoveToRowsRejected ) { return modalOptions; } updatedModalOptions.content = strings.move_to_rows_rejected_alert; // The field move to rows is rejected, return the message for the Repeater field. return updatedModalOptions; }, /** * Remove the repeater field and its child fields from the fields' data. * * @since 1.8.9 * * @param {Object} fields Fields data. * * @return {Object} Filtered list of fields. */ removeRepeaterFieldsAndChildren( fields ) { // eslint-disable-line complexity if ( ! fields ) { return {}; } for ( const key in fields ) { if ( fields[ key ].type !== 'repeater' ) { continue; } const columns = fields[ key ][ 'columns-json' ]; // Remove the Repeater itself. delete fields[ key ]; if ( ! columns.length ) { continue; } // Remove all child fields. for ( const col of columns ) { if ( ! col.fields?.length ) { continue; } for ( const colField of col.fields ) { delete fields[ colField ]; } } } return fields; }, /** * Display error modal. * * @since 1.8.9 * * @param {string} title Title. * @param {string} message Message text. */ errorModal( title, message ) { $.confirm( { title, content: message, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); }, /** * Whether the field type is allowed to be in column. * * @since 1.8.9 * * @param {string} fieldType Field type to check. * * @return {boolean} True if allowed. */ isFieldAllowedInColum( fieldType ) { return strings.not_allowed_fields.indexOf( fieldType ) < 0; }, /** * Filter the fields which are not allowed. * * @since 1.8.9 * * @param {boolean} isAllowed Whether the field is allowed. * @param {string} fieldType Field type to check. * @param {jQuery} $targetColumn Target column element. * * @return {boolean} True if allowed. */ filterIsFieldAllowedInColumn( isAllowed, fieldType, $targetColumn ) { // Skip if the field is not allowed OR the target is not a column, return the original value. if ( ! isAllowed || ! $targetColumn?.length || ! $targetColumn?.hasClass( 'wpforms-layout-column' ) ) { return isAllowed; } const $repeaterField = $targetColumn?.closest( '.wpforms-field-repeater' ); if ( ! $repeaterField?.length ) { return isAllowed; } return app.isFieldAllowedInColum( fieldType ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPForms.Admin.Builder.FieldRepeater.init(); {"id":2000,"date":"2023-04-21T04:01:13","date_gmt":"2023-04-21T04:01:13","guid":{"rendered":"https:\/\/icanflynow.com\/?p=2000"},"modified":"2023-04-23T04:22:33","modified_gmt":"2023-04-23T04:22:33","slug":"hogwarts-legacy-overhyped","status":"publish","type":"post","link":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/","title":{"rendered":"Hogwarts Legacy – Overhyped?"},"content":{"rendered":"\n
<\/div>\n\n\n\n

As someone who has been playing Hogwarts Legacy for several months now, I wanted to share my thoughts on the game. Being a huge fan of the Harry Potter series, I was excited to finally be able to explore the magical world of Hogwarts in a new way. Despite the long wait and high expectations, I found that the game did have some positive aspects, as well as some shortcomings that can’t be ignored.<\/p>\n\n\n\n

<\/div>\n\n\n\n

First off, the game looks amazing. The graphics are stunning and the attention to detail in recreating the Hogwarts castle and its surrounding areas is impressive. The game also promises a vast open-world filled with secrets to uncover, which is exciting for anyone who loves exploration in games.<\/p>\n\n\n\n

<\/div>\n\n\n\n

One of the aspects that stood out to me in the game is the magic system. The game offers a variety of spells that can be used in combat, puzzles, and exploration. Each spell has its own unique effect, and I found it incredibly satisfying to use them in different situations.<\/p>\n\n\n\n

<\/div>\n\n\n\n

However, there are some shortcomings to the game that I can’t ignore. One of the biggest disappointments for me was the lack of interactivity in the world. While the game offers a vast open-world to explore, the people and students in the game don’t seem to react to the player’s presence or spells. This takes away from the immersion and makes the world feel less alive and dynamic.<\/p>\n\n\n\n

<\/div>\n\n\n\n

Another missed opportunity is the lack of consequence for using magic. In the world of Harry Potter, magic is tightly regulated, and using it in front of muggles or breaking the rules can lead to serious consequences. However, in Hogwarts Legacy, there doesn’t seem to be any real consequence for using magic in public or breaking school rules. This again takes away from the immersion and makes the world feel less authentic.<\/p>\n\n\n\n

<\/div>\n\n\n\n

In conclusion, while Hogwarts Legacy has some great features like its graphics and magic system, there are some shortcomings that can’t be ignored. The lack of interactivity and consequences for using magic take away from the immersion and make the world feel less alive. However, as the game is still in development, there is still hope that these issues will be addressed before its release.<\/p>\n\n\n\n

<\/div>\n","protected":false},"excerpt":{"rendered":"

As someone who has been playing Hogwarts Legacy for several months now, I wanted to share my thoughts on the game. Being a huge fan of the Harry Potter series, I was excited to finally be able to explore the magical world of Hogwarts in a new way. Despite the long wait and high expectations, […]<\/p>\n","protected":false},"author":1,"featured_media":2062,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[8],"tags":[],"class_list":["post-2000","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-currently-playing"],"yoast_head":"\nHogwarts Legacy - Overhyped? -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hogwarts Legacy - Overhyped? -\" \/>\n<meta property=\"og:description\" content=\"As someone who has been playing Hogwarts Legacy for several months now, I wanted to share my thoughts on the game. Being a huge fan of the Harry Potter series, I was excited to finally be able to explore the magical world of Hogwarts in a new way. Despite the long wait and high expectations, […]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-21T04:01:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-23T04:22:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/icanflynow.com\/wp-content\/uploads\/2023\/04\/1299476-1024x576.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"576\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Captain\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Captain\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/\",\"url\":\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/\",\"name\":\"Hogwarts Legacy - Overhyped? -\",\"isPartOf\":{\"@id\":\"https:\/\/icanflynow.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/icanflynow.com\/wp-content\/uploads\/2023\/04\/1299476.png\",\"datePublished\":\"2023-04-21T04:01:13+00:00\",\"dateModified\":\"2023-04-23T04:22:33+00:00\",\"author\":{\"@id\":\"https:\/\/icanflynow.com\/#\/schema\/person\/d948c96678fc91f964aee05207dce338\"},\"breadcrumb\":{\"@id\":\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#primaryimage\",\"url\":\"https:\/\/icanflynow.com\/wp-content\/uploads\/2023\/04\/1299476.png\",\"contentUrl\":\"https:\/\/icanflynow.com\/wp-content\/uploads\/2023\/04\/1299476.png\",\"width\":3840,\"height\":2160},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/icanflynow.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hogwarts Legacy – Overhyped?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/icanflynow.com\/#website\",\"url\":\"https:\/\/icanflynow.com\/\",\"name\":\"\",\"description\":\"The Premier Destination for all things Video Games\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/icanflynow.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/icanflynow.com\/#\/schema\/person\/d948c96678fc91f964aee05207dce338\",\"name\":\"Captain\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/icanflynow.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3306b401a27e77d085e872a2e067d3e4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3306b401a27e77d085e872a2e067d3e4?s=96&d=mm&r=g\",\"caption\":\"Captain\"},\"sameAs\":[\"https:\/\/icanflynow.com\"],\"url\":\"https:\/\/icanflynow.com\/author\/captain\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hogwarts Legacy - Overhyped? -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/","og_locale":"en_US","og_type":"article","og_title":"Hogwarts Legacy - Overhyped? -","og_description":"As someone who has been playing Hogwarts Legacy for several months now, I wanted to share my thoughts on the game. Being a huge fan of the Harry Potter series, I was excited to finally be able to explore the magical world of Hogwarts in a new way. Despite the long wait and high expectations, […]","og_url":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/","article_published_time":"2023-04-21T04:01:13+00:00","article_modified_time":"2023-04-23T04:22:33+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/icanflynow.com\/wp-content\/uploads\/2023\/04\/1299476-1024x576.png","type":"image\/png"}],"author":"Captain","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Captain","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/","url":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/","name":"Hogwarts Legacy - Overhyped? -","isPartOf":{"@id":"https:\/\/icanflynow.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#primaryimage"},"image":{"@id":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#primaryimage"},"thumbnailUrl":"https:\/\/icanflynow.com\/wp-content\/uploads\/2023\/04\/1299476.png","datePublished":"2023-04-21T04:01:13+00:00","dateModified":"2023-04-23T04:22:33+00:00","author":{"@id":"https:\/\/icanflynow.com\/#\/schema\/person\/d948c96678fc91f964aee05207dce338"},"breadcrumb":{"@id":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#primaryimage","url":"https:\/\/icanflynow.com\/wp-content\/uploads\/2023\/04\/1299476.png","contentUrl":"https:\/\/icanflynow.com\/wp-content\/uploads\/2023\/04\/1299476.png","width":3840,"height":2160},{"@type":"BreadcrumbList","@id":"https:\/\/icanflynow.com\/hogwarts-legacy-overhyped\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/icanflynow.com\/"},{"@type":"ListItem","position":2,"name":"Hogwarts Legacy – Overhyped?"}]},{"@type":"WebSite","@id":"https:\/\/icanflynow.com\/#website","url":"https:\/\/icanflynow.com\/","name":"","description":"The Premier Destination for all things Video Games","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/icanflynow.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/icanflynow.com\/#\/schema\/person\/d948c96678fc91f964aee05207dce338","name":"Captain","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/icanflynow.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3306b401a27e77d085e872a2e067d3e4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3306b401a27e77d085e872a2e067d3e4?s=96&d=mm&r=g","caption":"Captain"},"sameAs":["https:\/\/icanflynow.com"],"url":"https:\/\/icanflynow.com\/author\/captain\/"}]}},"_links":{"self":[{"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/posts\/2000","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/comments?post=2000"}],"version-history":[{"count":2,"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/posts\/2000\/revisions"}],"predecessor-version":[{"id":2201,"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/posts\/2000\/revisions\/2201"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/media\/2062"}],"wp:attachment":[{"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/media?parent=2000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/categories?post=2000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/icanflynow.com\/wp-json\/wp\/v2\/tags?post=2000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}