diff --git a/.buildignore b/.buildignore
index 6b201f42..0040e5e8 100644
--- a/.buildignore
+++ b/.buildignore
@@ -24,6 +24,7 @@ webpack.config.js
.browserslistrc
.eslintignore
.eslintrc.js
+.prettierrc
.npmrc
.stylelintrc
diff --git a/.eslintrc.js b/.eslintrc.js
index 0e995642..b7323d07 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,146 +1,44 @@
module.exports = {
- extends: [
- 'plugin:react/recommended',
- 'plugin:no-jquery/deprecated',
- 'plugin:@wordpress/eslint-plugin/recommended-with-formatting',
- ],
- plugins: [
- 'babel',
- 'react',
- 'no-jquery',
- ],
- parser: '@babel/eslint-parser',
- globals: {
- wp: true,
- window: true,
- document: true,
- _: false,
- jQuery: false,
- JSON: false,
- elementorFrontend: true,
- require: true,
- elementor: true,
- DialogsManager: true,
- module: true,
- React: true,
- PropTypes: true,
- __: true,
- },
- parserOptions: {
- ecmaVersion: 2017,
- sourceType: 'module',
- ecmaFeatures: {
- jsx: true,
- },
- },
- rules: {
- // custom canceled rules
- 'no-var': 'off',
- 'vars-on-top': 'off',
- 'wrap-iife': 'off',
- 'computed-property-spacing': [ 'error', 'always' ],
- 'comma-dangle': [ 'error', 'always-multiline' ],
- 'no-undef': 'off',
- 'no-unused-vars': [ 'warn', { ignoreRestSiblings: true } ],
- 'dot-notation': 'error',
- 'no-shadow': 'error',
- 'no-lonely-if': 'error',
- 'no-mixed-operators': 'error',
- 'no-nested-ternary': 'error',
- 'no-cond-assign': 'error',
- 'space-in-parens': [ 'error', 'always', { exceptions: [ 'empty' ] } ],
- 'no-multi-spaces': 'error',
- 'semi-spacing': 'error',
- 'quote-props': [ 'error', 'as-needed' ],
- indent: [ 'off', 'tab', { SwitchCase: 1 } ],
- 'no-mixed-spaces-and-tabs': 'error',
- 'padded-blocks': [ 'error', 'never' ],
- 'one-var-declaration-per-line': 'error',
- 'no-extra-semi': 'error',
- 'key-spacing': 'error',
- 'array-bracket-spacing': [ 'error', 'always' ],
- 'no-else-return': 'error',
- 'no-console': 'warn',
- //end of custom canceled rules
- 'arrow-parens': [ 'error', 'always' ],
- 'arrow-spacing': 'error',
- 'brace-style': [ 'error', '1tbs' ],
- camelcase: [ 'error', { properties: 'never' } ],
- 'comma-spacing': 'error',
- 'comma-style': 'error',
- 'eol-last': 'error',
- eqeqeq: 'error',
- 'func-call-spacing': 'error',
- 'jsx-quotes': 'error',
- 'keyword-spacing': 'error',
- 'lines-around-comment': 'off',
- 'no-bitwise': [ 'error', { allow: [ '^' ] } ],
- 'no-caller': 'error',
- 'no-debugger': 'warn',
- 'no-dupe-args': 'error',
- 'no-dupe-keys': 'error',
- 'no-duplicate-case': 'error',
- 'no-eval': 'error',
- 'no-multiple-empty-lines': [ 'error', { max: 1 } ],
- 'no-multi-str': 'off',
- 'no-negated-in-lhs': 'error',
- 'no-redeclare': 'error',
- 'no-restricted-syntax': [
- 'error',
- {
- selector: 'CallExpression[callee.name=/^__|_n|_x$/]:not([arguments.0.type=/^Literal|BinaryExpression$/])',
- message: 'Translate function arguments must be string literals.',
- },
- {
- selector: 'CallExpression[callee.name=/^_n|_x$/]:not([arguments.1.type=/^Literal|BinaryExpression$/])',
- message: 'Translate function arguments must be string literals.',
- },
- {
- selector: 'CallExpression[callee.name=_nx]:not([arguments.2.type=/^Literal|BinaryExpression$/])',
- message: 'Translate function arguments must be string literals.',
- },
- ],
- 'no-trailing-spaces': 'error',
- 'no-undef-init': 'error',
- 'no-unreachable': 'error',
- 'no-unsafe-negation': 'error',
- 'no-unused-expressions': 'error',
- 'no-useless-return': 'error',
- 'no-whitespace-before-property': 'error',
- 'object-curly-spacing': [ 'error', 'always' ],
- 'prefer-const': 'warn',
- quotes: [ 'error', 'single', { allowTemplateLiterals: true, avoidEscape: true } ],
- semi: 'error',
- 'space-before-blocks': [ 'error', 'always' ],
- 'space-before-function-paren': [ 'error', {
- anonymous: 'never',
- named: 'never',
- asyncArrow: 'always',
- } ],
- 'space-infix-ops': [ 'error', { int32Hint: false } ],
- 'space-unary-ops': [ 'error', {
- overrides: {
- '!': true,
- yield: true,
- },
- } ],
- 'valid-typeof': 'error',
- yoda: [ 'error', 'always', {
- onlyEquality: true,
- } ],
- 'react/react-in-jsx-scope': 'off',
- 'babel/semi': 1,
- // 'react/display-name': 'off',
- // 'react/jsx-curly-spacing': [ 'error', {
- // when: 'always',
- // children: true,
- // } ],
- // 'react/jsx-equals-spacing': 'error',
- // 'react/jsx-indent': [ 'error', 'tab' ],
- // 'react/jsx-indent-props': [ 'error', 'tab' ],
- // 'react/jsx-key': 'error',
- // 'react/jsx-tag-spacing': 'error',
- // 'react/no-children-prop': 'off',
- // 'react/prop-types': 'off',
- },
+ extends: [
+ 'plugin:react/recommended',
+ 'plugin:no-jquery/deprecated',
+ 'plugin:@wordpress/eslint-plugin/recommended-with-formatting',
+ 'plugin:prettier/recommended',
+ ],
+ plugins: ['babel', 'react', 'no-jquery'],
+ parser: '@babel/eslint-parser',
+ globals: {
+ wp: true,
+ window: true,
+ document: true,
+ _: false,
+ jQuery: false,
+ JSON: false,
+ elementorFrontend: true,
+ require: true,
+ elementor: true,
+ DialogsManager: true,
+ module: true,
+ React: true,
+ PropTypes: true,
+ __: true,
+ },
+ parserOptions: {
+ ecmaVersion: 2017,
+ sourceType: 'module',
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ rules: {
+ 'no-undef': 'off',
+ 'no-unused-vars': 'off',
+ yoda: [
+ 'error',
+ 'always',
+ {
+ onlyEquality: true,
+ },
+ ],
+ },
};
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..9da595c9
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,10 @@
+{
+ "useTabs": true,
+ "printWidth": 80,
+ "semi": true,
+ "singleQuote": true,
+ "endOfLine": "auto",
+ "arrowParens": "always",
+ "proseWrap": "always",
+ "bracketSpacing": true
+}
diff --git a/dev/js/editor/component.js b/dev/js/editor/component.js
index d9ef0d53..34c98c99 100644
--- a/dev/js/editor/component.js
+++ b/dev/js/editor/component.js
@@ -7,7 +7,6 @@ export default class extends $e.modules.ComponentBase {
}
defaultHooks() {
- return this.importHooks( { ControlsHook } );
+ return this.importHooks({ ControlsHook });
}
}
-
diff --git a/dev/js/editor/hello-editor.js b/dev/js/editor/hello-editor.js
index c9a4818e..a9468857 100644
--- a/dev/js/editor/hello-editor.js
+++ b/dev/js/editor/hello-editor.js
@@ -1,4 +1,3 @@
import HelloComponent from './component';
-$e.components.register( new HelloComponent() );
-
+$e.components.register(new HelloComponent());
diff --git a/dev/js/editor/hooks/ui/controls-hook.js b/dev/js/editor/hooks/ui/controls-hook.js
index b60aa949..dec5e608 100644
--- a/dev/js/editor/hooks/ui/controls-hook.js
+++ b/dev/js/editor/hooks/ui/controls-hook.js
@@ -25,141 +25,209 @@ export default class ControlsHook extends $e.modules.hookUI.After {
return {
hello_header_logo_display: {
selector: '.site-header .site-logo, .site-header .site-title',
- callback: ( $element, args ) => {
- this.toggleShowHideClass( $element, args.settings.hello_header_logo_display );
+ callback: ($element, args) => {
+ this.toggleShowHideClass(
+ $element,
+ args.settings.hello_header_logo_display,
+ );
},
},
hello_header_menu_display: {
- selector: '.site-header .site-navigation, .site-header .site-navigation-toggle-holder',
- callback: ( $element, args ) => {
- this.toggleShowHideClass( $element, args.settings.hello_header_menu_display );
+ selector:
+ '.site-header .site-navigation, .site-header .site-navigation-toggle-holder',
+ callback: ($element, args) => {
+ this.toggleShowHideClass(
+ $element,
+ args.settings.hello_header_menu_display,
+ );
},
},
hello_header_tagline_display: {
selector: '.site-header .site-description',
- callback: ( $element, args ) => {
- this.toggleShowHideClass( $element, args.settings.hello_header_tagline_display );
+ callback: ($element, args) => {
+ this.toggleShowHideClass(
+ $element,
+ args.settings.hello_header_tagline_display,
+ );
},
},
hello_header_logo_type: {
selector: '.site-header .site-branding',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const classPrefix = 'show-',
- inputOptions = args.container.controls.hello_header_logo_type.options,
+ inputOptions =
+ args.container.controls.hello_header_logo_type.options,
inputValue = args.settings.hello_header_logo_type;
- this.toggleLayoutClass( $element, classPrefix, inputOptions, inputValue );
+ this.toggleLayoutClass(
+ $element,
+ classPrefix,
+ inputOptions,
+ inputValue,
+ );
},
},
hello_header_layout: {
selector: '.site-header',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const classPrefix = 'header-',
inputOptions = args.container.controls.hello_header_layout.options,
inputValue = args.settings.hello_header_layout;
- this.toggleLayoutClass( $element, classPrefix, inputOptions, inputValue );
+ this.toggleLayoutClass(
+ $element,
+ classPrefix,
+ inputOptions,
+ inputValue,
+ );
},
},
hello_header_width: {
selector: '.site-header',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const classPrefix = 'header-',
inputOptions = args.container.controls.hello_header_width.options,
inputValue = args.settings.hello_header_width;
- this.toggleLayoutClass( $element, classPrefix, inputOptions, inputValue );
+ this.toggleLayoutClass(
+ $element,
+ classPrefix,
+ inputOptions,
+ inputValue,
+ );
},
},
hello_header_menu_layout: {
selector: '.site-header',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const classPrefix = 'menu-layout-',
- inputOptions = args.container.controls.hello_header_menu_layout.options,
+ inputOptions =
+ args.container.controls.hello_header_menu_layout.options,
inputValue = args.settings.hello_header_menu_layout;
// No matter what, close the mobile menu
- $element.find( '.site-navigation-toggle-holder' ).removeClass( 'elementor-active' );
- $element.find( '.site-navigation-dropdown' ).removeClass( 'show' );
+ $element
+ .find('.site-navigation-toggle-holder')
+ .removeClass('elementor-active');
+ $element.find('.site-navigation-dropdown').removeClass('show');
- this.toggleLayoutClass( $element, classPrefix, inputOptions, inputValue );
+ this.toggleLayoutClass(
+ $element,
+ classPrefix,
+ inputOptions,
+ inputValue,
+ );
},
},
hello_header_menu_dropdown: {
selector: '.site-header',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const classPrefix = 'menu-dropdown-',
- inputOptions = args.container.controls.hello_header_menu_dropdown.options,
+ inputOptions =
+ args.container.controls.hello_header_menu_dropdown.options,
inputValue = args.settings.hello_header_menu_dropdown;
- this.toggleLayoutClass( $element, classPrefix, inputOptions, inputValue );
+ this.toggleLayoutClass(
+ $element,
+ classPrefix,
+ inputOptions,
+ inputValue,
+ );
},
},
hello_footer_logo_display: {
selector: '.site-footer .site-logo, .site-footer .site-title',
- callback: ( $element, args ) => {
- this.toggleShowHideClass( $element, args.settings.hello_footer_logo_display );
+ callback: ($element, args) => {
+ this.toggleShowHideClass(
+ $element,
+ args.settings.hello_footer_logo_display,
+ );
},
},
hello_footer_tagline_display: {
selector: '.site-footer .site-description',
- callback: ( $element, args ) => {
- this.toggleShowHideClass( $element, args.settings.hello_footer_tagline_display );
+ callback: ($element, args) => {
+ this.toggleShowHideClass(
+ $element,
+ args.settings.hello_footer_tagline_display,
+ );
},
},
hello_footer_menu_display: {
selector: '.site-footer .site-navigation',
- callback: ( $element, args ) => {
- this.toggleShowHideClass( $element, args.settings.hello_footer_menu_display );
+ callback: ($element, args) => {
+ this.toggleShowHideClass(
+ $element,
+ args.settings.hello_footer_menu_display,
+ );
},
},
hello_footer_copyright_display: {
selector: '.site-footer .copyright',
- callback: ( $element, args ) => {
- const $footerContainer = $element.closest( '#site-footer' ),
+ callback: ($element, args) => {
+ const $footerContainer = $element.closest('#site-footer'),
inputValue = args.settings.hello_footer_copyright_display;
- this.toggleShowHideClass( $element, inputValue );
+ this.toggleShowHideClass($element, inputValue);
- $footerContainer.toggleClass( 'footer-has-copyright', 'yes' === inputValue );
+ $footerContainer.toggleClass(
+ 'footer-has-copyright',
+ 'yes' === inputValue,
+ );
},
},
hello_footer_logo_type: {
selector: '.site-footer .site-branding',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const classPrefix = 'show-',
- inputOptions = args.container.controls.hello_footer_logo_type.options,
+ inputOptions =
+ args.container.controls.hello_footer_logo_type.options,
inputValue = args.settings.hello_footer_logo_type;
- this.toggleLayoutClass( $element, classPrefix, inputOptions, inputValue );
+ this.toggleLayoutClass(
+ $element,
+ classPrefix,
+ inputOptions,
+ inputValue,
+ );
},
},
hello_footer_layout: {
selector: '.site-footer',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const classPrefix = 'footer-',
inputOptions = args.container.controls.hello_footer_layout.options,
inputValue = args.settings.hello_footer_layout;
- this.toggleLayoutClass( $element, classPrefix, inputOptions, inputValue );
+ this.toggleLayoutClass(
+ $element,
+ classPrefix,
+ inputOptions,
+ inputValue,
+ );
},
},
hello_footer_width: {
selector: '.site-footer',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const classPrefix = 'footer-',
inputOptions = args.container.controls.hello_footer_width.options,
inputValue = args.settings.hello_footer_width;
- this.toggleLayoutClass( $element, classPrefix, inputOptions, inputValue );
+ this.toggleLayoutClass(
+ $element,
+ classPrefix,
+ inputOptions,
+ inputValue,
+ );
},
},
hello_footer_copyright_text: {
selector: '.site-footer .copyright',
- callback: ( $element, args ) => {
+ callback: ($element, args) => {
const inputValue = args.settings.hello_footer_copyright_text;
- $element.find( 'p' ).text( inputValue );
+ $element.find('p').text(inputValue);
},
},
};
@@ -173,8 +241,11 @@ export default class ControlsHook extends $e.modules.hookUI.After {
* @param {jQuery} element
* @param {string} inputValue
*/
- toggleShowHideClass( element, inputValue ) {
- element.removeClass( 'hide' ).removeClass( 'show' ).addClass( inputValue ? 'show' : 'hide' );
+ toggleShowHideClass(element, inputValue) {
+ element
+ .removeClass('hide')
+ .removeClass('show')
+ .addClass(inputValue ? 'show' : 'hide');
}
/**
@@ -187,15 +258,15 @@ export default class ControlsHook extends $e.modules.hookUI.After {
* @param {Object} inputOptions
* @param {string} inputValue
*/
- toggleLayoutClass( element, classPrefix, inputOptions, inputValue ) {
+ toggleLayoutClass(element, classPrefix, inputOptions, inputValue) {
// Loop through the possible classes and remove the one that's not in use
- Object.entries( inputOptions ).forEach( ( [ key ] ) => {
- element.removeClass( classPrefix + key );
- } );
+ Object.entries(inputOptions).forEach(([key]) => {
+ element.removeClass(classPrefix + key);
+ });
// Append the class which we want to use onto the element
- if ( '' !== inputValue ) {
- element.addClass( classPrefix + inputValue );
+ if ('' !== inputValue) {
+ element.addClass(classPrefix + inputValue);
}
}
@@ -204,20 +275,22 @@ export default class ControlsHook extends $e.modules.hookUI.After {
*
* @param {Object} args
*/
- getConditions( args ) {
+ getConditions(args) {
const isKit = 'kit' === elementor.documents.getCurrent().config.type,
- changedControls = Object.keys( args.settings ),
+ changedControls = Object.keys(args.settings),
isSingleSetting = 1 === changedControls.length;
// If the document is not a kit, or there are no changed settings, or there is more than one single changed
// setting, don't run the hook.
- if ( ! isKit || ! args.settings || ! isSingleSetting ) {
+ if (!isKit || !args.settings || !isSingleSetting) {
return false;
}
// If the changed control is in the list of theme controls, return true to run the hook.
// Otherwise, return false so the hook doesn't run.
- return !! Object.keys( this.getHelloThemeControls() ).includes( changedControls[ 0 ] );
+ return !!Object.keys(this.getHelloThemeControls()).includes(
+ changedControls[0],
+ );
}
/**
@@ -225,14 +298,14 @@ export default class ControlsHook extends $e.modules.hookUI.After {
*
* @param {Object} args
*/
- apply( args ) {
+ apply(args) {
const allThemeControls = this.getHelloThemeControls(),
// Extract the control ID from the passed args
- controlId = Object.keys( args.settings )[ 0 ],
- controlConfig = allThemeControls[ controlId ],
+ controlId = Object.keys(args.settings)[0],
+ controlConfig = allThemeControls[controlId],
// Find the element that needs to be targeted by the control.
- $element = elementor.$previewContents.find( controlConfig.selector );
+ $element = elementor.$previewContents.find(controlConfig.selector);
- controlConfig.callback( $element, args );
+ controlConfig.callback($element, args);
}
}
diff --git a/dev/js/frontend/hello-frontend.js b/dev/js/frontend/hello-frontend.js
index 8807085e..35db2c4a 100644
--- a/dev/js/frontend/hello-frontend.js
+++ b/dev/js/frontend/hello-frontend.js
@@ -1,76 +1,101 @@
class elementorHelloThemeHandler {
- constructor() {
- this.initSettings();
- this.initElements();
- this.bindEvents();
- }
+ constructor() {
+ this.initSettings();
+ this.initElements();
+ this.bindEvents();
+ }
- initSettings() {
- this.settings = {
- selectors: {
- menuToggle: '.site-header .site-navigation-toggle',
- menuToggleHolder: '.site-header .site-navigation-toggle-holder',
- dropdownMenu: '.site-header .site-navigation-dropdown',
- },
- };
- }
+ initSettings() {
+ this.settings = {
+ selectors: {
+ menuToggle: '.site-header .site-navigation-toggle',
+ menuToggleHolder: '.site-header .site-navigation-toggle-holder',
+ dropdownMenu: '.site-header .site-navigation-dropdown',
+ },
+ };
+ }
- initElements() {
- this.elements = {
- window,
- menuToggle: document.querySelector( this.settings.selectors.menuToggle ),
- menuToggleHolder: document.querySelector( this.settings.selectors.menuToggleHolder ),
- dropdownMenu: document.querySelector( this.settings.selectors.dropdownMenu ),
- };
- }
+ initElements() {
+ this.elements = {
+ window,
+ menuToggle: document.querySelector(this.settings.selectors.menuToggle),
+ menuToggleHolder: document.querySelector(
+ this.settings.selectors.menuToggleHolder,
+ ),
+ dropdownMenu: document.querySelector(
+ this.settings.selectors.dropdownMenu,
+ ),
+ };
+ }
- bindEvents() {
- if ( ! this.elements.menuToggleHolder || this.elements.menuToggleHolder?.classList.contains( 'hide' ) ) {
- return;
- }
+ bindEvents() {
+ if (
+ !this.elements.menuToggleHolder ||
+ this.elements.menuToggleHolder?.classList.contains('hide')
+ ) {
+ return;
+ }
- this.elements.menuToggle.addEventListener( 'click', () => this.handleMenuToggle() );
+ this.elements.menuToggle.addEventListener('click', () =>
+ this.handleMenuToggle(),
+ );
- this.elements.dropdownMenu.querySelectorAll( '.menu-item-has-children > a' )
- .forEach( ( anchorElement ) => anchorElement.addEventListener( 'click', ( event ) => this.handleMenuChildren( event ) ) );
- }
+ this.elements.dropdownMenu
+ .querySelectorAll('.menu-item-has-children > a')
+ .forEach((anchorElement) =>
+ anchorElement.addEventListener('click', (event) =>
+ this.handleMenuChildren(event),
+ ),
+ );
+ }
- closeMenuItems() {
- this.elements.menuToggleHolder.classList.remove( 'elementor-active' );
- this.elements.window.removeEventListener( 'resize', () => this.closeMenuItems() );
- }
+ closeMenuItems() {
+ this.elements.menuToggleHolder.classList.remove('elementor-active');
+ this.elements.window.removeEventListener('resize', () =>
+ this.closeMenuItems(),
+ );
+ }
- handleMenuToggle() {
- const isDropdownVisible = ! this.elements.menuToggleHolder.classList.contains( 'elementor-active' );
+ handleMenuToggle() {
+ const isDropdownVisible =
+ !this.elements.menuToggleHolder.classList.contains('elementor-active');
- this.elements.menuToggle.setAttribute( 'aria-expanded', isDropdownVisible );
- this.elements.dropdownMenu.setAttribute( 'aria-hidden', ! isDropdownVisible );
- this.elements.dropdownMenu.inert = ! isDropdownVisible;
- this.elements.menuToggleHolder.classList.toggle( 'elementor-active', isDropdownVisible );
+ this.elements.menuToggle.setAttribute('aria-expanded', isDropdownVisible);
+ this.elements.dropdownMenu.setAttribute('aria-hidden', !isDropdownVisible);
+ this.elements.dropdownMenu.inert = !isDropdownVisible;
+ this.elements.menuToggleHolder.classList.toggle(
+ 'elementor-active',
+ isDropdownVisible,
+ );
- // Always close all sub active items.
- this.elements.dropdownMenu.querySelectorAll( '.elementor-active' ).forEach( ( item ) => item.classList.remove( 'elementor-active' ) );
+ // Always close all sub active items.
+ this.elements.dropdownMenu
+ .querySelectorAll('.elementor-active')
+ .forEach((item) => item.classList.remove('elementor-active'));
- if ( isDropdownVisible ) {
- this.elements.window.addEventListener( 'resize', () => this.closeMenuItems() );
- } else {
- this.elements.window.removeEventListener( 'resize', () => this.closeMenuItems() );
- }
- }
+ if (isDropdownVisible) {
+ this.elements.window.addEventListener('resize', () =>
+ this.closeMenuItems(),
+ );
+ } else {
+ this.elements.window.removeEventListener('resize', () =>
+ this.closeMenuItems(),
+ );
+ }
+ }
- handleMenuChildren( event ) {
- const anchor = event.currentTarget;
- const parentLi = anchor.parentElement;
+ handleMenuChildren(event) {
+ const anchor = event.currentTarget;
+ const parentLi = anchor.parentElement;
- if ( ! parentLi?.classList ) {
- return;
- }
+ if (!parentLi?.classList) {
+ return;
+ }
- parentLi.classList.toggle( 'elementor-active' );
- }
+ parentLi.classList.toggle('elementor-active');
+ }
}
-document.addEventListener( 'DOMContentLoaded', () => {
- new elementorHelloThemeHandler();
-} );
-
+document.addEventListener('DOMContentLoaded', () => {
+ new elementorHelloThemeHandler();
+});
diff --git a/modules/admin-home/assets/js/components/dynamic-icon.js b/modules/admin-home/assets/js/components/dynamic-icon.js
index 3e1b1378..91c6569a 100644
--- a/modules/admin-home/assets/js/components/dynamic-icon.js
+++ b/modules/admin-home/assets/js/components/dynamic-icon.js
@@ -1,41 +1,41 @@
import React, { useState, useEffect } from 'react';
const componentMap = {
- BrandYoutubeIcon: () => import( '../icons/youtube.tsx' ),
- BrandElementorIcon: () => import( '../icons/elementor.tsx' ),
- ThemeBuilderIcon: () => import( '@elementor/icons/ThemeBuilderIcon' ),
- SettingsIcon: () => import( '@elementor/icons/SettingsIcon' ),
- BrandFacebookIcon: () => import( '@elementor/icons/BrandFacebookIcon' ),
- StarIcon: () => import( '@elementor/icons/StarIcon' ),
- HelpIcon: () => import( '@elementor/icons/HelpIcon' ),
- SpeakerphoneIcon: () => import( '@elementor/icons/SpeakerphoneIcon' ),
- TextIcon: () => import( '@elementor/icons/TextIcon' ),
- PhotoIcon: () => import( '@elementor/icons/PhotoIcon' ),
- AppsIcon: () => import( '@elementor/icons/AppsIcon' ),
- BrushIcon: () => import( '@elementor/icons/BrushIcon' ),
- UnderlineIcon: () => import( '@elementor/icons/UnderlineIcon' ),
- PagesIcon: () => import( '@elementor/icons/PagesIcon' ),
- PageTypeIcon: () => import( '@elementor/icons/PageTypeIcon' ),
- HeaderTemplateIcon: () => import( '@elementor/icons/HeaderTemplateIcon' ),
- FooterTemplateIcon: () => import( '@elementor/icons/FooterTemplateIcon' ),
+ BrandYoutubeIcon: () => import('../icons/youtube.tsx'),
+ BrandElementorIcon: () => import('../icons/elementor.tsx'),
+ ThemeBuilderIcon: () => import('@elementor/icons/ThemeBuilderIcon'),
+ SettingsIcon: () => import('@elementor/icons/SettingsIcon'),
+ BrandFacebookIcon: () => import('@elementor/icons/BrandFacebookIcon'),
+ StarIcon: () => import('@elementor/icons/StarIcon'),
+ HelpIcon: () => import('@elementor/icons/HelpIcon'),
+ SpeakerphoneIcon: () => import('@elementor/icons/SpeakerphoneIcon'),
+ TextIcon: () => import('@elementor/icons/TextIcon'),
+ PhotoIcon: () => import('@elementor/icons/PhotoIcon'),
+ AppsIcon: () => import('@elementor/icons/AppsIcon'),
+ BrushIcon: () => import('@elementor/icons/BrushIcon'),
+ UnderlineIcon: () => import('@elementor/icons/UnderlineIcon'),
+ PagesIcon: () => import('@elementor/icons/PagesIcon'),
+ PageTypeIcon: () => import('@elementor/icons/PageTypeIcon'),
+ HeaderTemplateIcon: () => import('@elementor/icons/HeaderTemplateIcon'),
+ FooterTemplateIcon: () => import('@elementor/icons/FooterTemplateIcon'),
};
-const DynamicIcon = ( { componentName, ...rest } ) => {
- const [ Component, setComponent ] = useState( null );
+const DynamicIcon = ({ componentName, ...rest }) => {
+ const [Component, setComponent] = useState(null);
- useEffect( () => {
- if ( componentMap[ componentName ] ) {
- componentMap[ componentName ]().then( ( module ) => {
- setComponent( () => module.default );
- } );
+ useEffect(() => {
+ if (componentMap[componentName]) {
+ componentMap[componentName]().then((module) => {
+ setComponent(() => module.default);
+ });
}
- }, [ componentName ] );
+ }, [componentName]);
- if ( ! Component ) {
- return null;
- }
+ if (!Component) {
+ return null;
+ }
- return ;
+ return ;
};
export default DynamicIcon;
diff --git a/modules/admin-home/assets/js/components/link/link-or-title.js b/modules/admin-home/assets/js/components/link/link-or-title.js
index 6ddc379a..7c2e929c 100644
--- a/modules/admin-home/assets/js/components/link/link-or-title.js
+++ b/modules/admin-home/assets/js/components/link/link-or-title.js
@@ -3,25 +3,25 @@ import Typography from '@elementor/ui/Typography';
import Link from '@elementor/ui/Link';
import { decode } from 'html-entities';
-const LinkOrTitle = ( { title, link, sublinks, onClick, target } ) => (
+const LinkOrTitle = ({ title, link, sublinks, onClick, target }) => (
- { link && 0 === sublinks.length ? (
+ {link && 0 === sublinks.length ? (
- { decode( title ) }
+ {decode(title)}
) : (
-
- { decode( title ) }
+
+ {decode(title)}
- ) }
+ )}
);
diff --git a/modules/admin-home/assets/js/components/link/link-with-icon-and-title.js b/modules/admin-home/assets/js/components/link/link-with-icon-and-title.js
index 3b032578..9443a441 100644
--- a/modules/admin-home/assets/js/components/link/link-with-icon-and-title.js
+++ b/modules/admin-home/assets/js/components/link/link-with-icon-and-title.js
@@ -3,34 +3,34 @@ import SublinksList from './sub-links-list';
import LinkOrTitle from './link-or-title';
import DynamicIcon from '../dynamic-icon';
-export const LinkWithIconAndTitle = ( {
+export const LinkWithIconAndTitle = ({
title,
link = null,
icon = 'SettingsIcon',
sublinks = [],
onClick = () => {},
target = '',
-} ) => {
+}) => {
return (
-
+
- { sublinks.length > 0 && (
-
- ) }
+ {sublinks.length > 0 && (
+
+ )}
);
diff --git a/modules/admin-home/assets/js/components/link/promotion-link.js b/modules/admin-home/assets/js/components/link/promotion-link.js
index 3d8fb6c3..fc8c8f62 100644
--- a/modules/admin-home/assets/js/components/link/promotion-link.js
+++ b/modules/admin-home/assets/js/components/link/promotion-link.js
@@ -6,59 +6,82 @@ import Image from '@elementor/ui/Image';
import { Feature } from '../promotions/feature';
import UpgradeIcon from '@elementor/icons/UpgradeIcon';
-export const PromotionLink = (
- {
- image,
- alt,
- title,
- messages,
- button,
- url,
- features,
- target = '_blank',
- width = 100,
- height = 100,
- horizontalLayout = false,
- upgrade = false,
- backgroundImage = false,
- backgroundColor = false,
- buttonBgColor = false,
- } ) => {
+export const PromotionLink = ({
+ image,
+ alt,
+ title,
+ messages,
+ button,
+ url,
+ features,
+ target = '_blank',
+ width = 100,
+ height = 100,
+ horizontalLayout = false,
+ upgrade = false,
+ backgroundImage = false,
+ backgroundColor = false,
+ buttonBgColor = false,
+}) => {
const backgroundFallback = backgroundImage ? 'transparent' : null;
const paperSx = horizontalLayout
- ? { display: 'flex', alignItems: 'center', justifyContent: 'space-between', p: 3, gap: 4, maxWidth: 600 }
+ ? {
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ p: 3,
+ gap: 4,
+ maxWidth: 600,
+ }
: { p: 3 };
- paperSx.backgroundImage = backgroundImage ? `url(${ backgroundImage })` : null;
- paperSx.backgroundColor = backgroundColor ? backgroundColor : backgroundFallback;
- paperSx.color = ( backgroundImage || backgroundColor ) ? 'rgb(12, 13, 14)' : null;
+ paperSx.backgroundImage = backgroundImage ? `url(${backgroundImage})` : null;
+ paperSx.backgroundColor = backgroundColor
+ ? backgroundColor
+ : backgroundFallback;
+ paperSx.color = backgroundImage || backgroundColor ? 'rgb(12, 13, 14)' : null;
const stackSx = horizontalLayout
? { flex: 0.6, alignItems: 'center', justifyContent: 'center' }
: { alignItems: 'center', justifyContent: 'center' };
- const featuresStackSx = horizontalLayout
- ? { flex: 0.4, mt: 4 }
- : { mt: 4 };
+ const featuresStackSx = horizontalLayout ? { flex: 0.4, mt: 4 } : { mt: 4 };
const startIcon = upgrade ? : null;
return (
-
-
-
- { title }
- { messages.map( ( message, i ) => {
- return { message };
- } ) }
-
+
+
+
+
+ {title}
+
+ {messages.map((message, i) => {
+ return (
+
+ {message}
+
+ );
+ })}
+
- { features && (
-
- { features.map( ( feature, i ) => {
- return ;
- } ) }
- ) }
+ {features && (
+
+ {features.map((feature, i) => {
+ return ;
+ })}
+
+ )}
);
};
diff --git a/modules/admin-home/assets/js/components/link/sub-links-list.js b/modules/admin-home/assets/js/components/link/sub-links-list.js
index 1a55ba2b..c0f4bc38 100644
--- a/modules/admin-home/assets/js/components/link/sub-links-list.js
+++ b/modules/admin-home/assets/js/components/link/sub-links-list.js
@@ -3,23 +3,23 @@ import Typography from '@elementor/ui/Typography';
import Link from '@elementor/ui/Link';
import { decode } from 'html-entities';
-const SublinksList = ( { sublinks, target } ) => (
-
+const SublinksList = ({ sublinks, target }) => (
+
- { sublinks.map( ( sublink, index ) => (
-
- { index > 0 && | }
+ {sublinks.map((sublink, index) => (
+
+ {index > 0 && |}
- { decode( sublink.title ) }
+ href={sublink.link}
+ target={sublink.target || target}
+ sx={{ lineHeight: 'initial', fontWeight: 'normal' }}
+ >
+ {decode(sublink.title)}
- ) ) }
+ ))}
);
diff --git a/modules/admin-home/assets/js/components/linkGroup/column-link-group.js b/modules/admin-home/assets/js/components/linkGroup/column-link-group.js
index 61cfe3f9..77713e36 100644
--- a/modules/admin-home/assets/js/components/linkGroup/column-link-group.js
+++ b/modules/admin-home/assets/js/components/linkGroup/column-link-group.js
@@ -2,19 +2,26 @@ import Stack from '@elementor/ui/Stack';
import { LinkWithIconAndTitle } from '../link/link-with-icon-and-title';
import Typography from '@elementor/ui/Typography';
-export const ColumnLinkGroup = ( { links = [], title = '', noLinksMessage, sx = {} } ) => {
- if ( ! links.length ) {
+export const ColumnLinkGroup = ({
+ links = [],
+ title = '',
+ noLinksMessage,
+ sx = {},
+}) => {
+ if (!links.length) {
return null;
}
return (
-
- { title && ( { title } ) }
- { links.map( ( link ) => {
- return ( );
- } ) }
+
+ {title && {title}}
+ {links.map((link) => {
+ return ;
+ })}
- { ! links.length && noLinksMessage && ( { noLinksMessage } ) }
+ {!links.length && noLinksMessage && (
+ {noLinksMessage}
+ )}
);
};
diff --git a/modules/admin-home/assets/js/components/paper/base-admin-paper.js b/modules/admin-home/assets/js/components/paper/base-admin-paper.js
index 060ae2cd..3c19964f 100644
--- a/modules/admin-home/assets/js/components/paper/base-admin-paper.js
+++ b/modules/admin-home/assets/js/components/paper/base-admin-paper.js
@@ -1,9 +1,9 @@
import Paper from '@elementor/ui/Paper';
-export const BaseAdminPaper = ( { children, sx = { px: 4, py: 3 } } ) => {
+export const BaseAdminPaper = ({ children, sx = { px: 4, py: 3 } }) => {
return (
-
- { children }
+
+ {children}
);
};
diff --git a/modules/admin-home/assets/js/components/paper/quick-links.js b/modules/admin-home/assets/js/components/paper/quick-links.js
index a1dc6b23..1e0268bc 100644
--- a/modules/admin-home/assets/js/components/paper/quick-links.js
+++ b/modules/admin-home/assets/js/components/paper/quick-links.js
@@ -10,17 +10,19 @@ export const QuickLinks = () => {
return (
- { __( 'Quick Links', 'hello-elementor' ) }
-
- { __( 'These quick actions will get your site airborne in a flash.', 'hello-elementor' ) }
+
+ {__('Quick Links', 'hello-elementor')}
-
- { Object.keys( quickLinks ).map( ( key ) => {
- return (
-
- );
- } ) }
-
+
+ {__(
+ 'These quick actions will get your site airborne in a flash.',
+ 'hello-elementor',
+ )}
+
+
+ {Object.keys(quickLinks).map((key) => {
+ return ;
+ })}
);
diff --git a/modules/admin-home/assets/js/components/paper/resources.js b/modules/admin-home/assets/js/components/paper/resources.js
index 167a01fd..fa77887c 100644
--- a/modules/admin-home/assets/js/components/paper/resources.js
+++ b/modules/admin-home/assets/js/components/paper/resources.js
@@ -5,20 +5,24 @@ import { ColumnLinkGroup } from '../linkGroup/column-link-group';
import { useAdminContext } from '../../hooks/use-admin-context';
export const Resources = () => {
- const { adminSettings: { resourcesData: { community = [], resources = [] } = {} } = {} } = useAdminContext();
+ const {
+ adminSettings: {
+ resourcesData: { community = [], resources = [] } = {},
+ } = {},
+ } = useAdminContext();
return (
-
+
diff --git a/modules/admin-home/assets/js/components/paper/site-parts.js b/modules/admin-home/assets/js/components/paper/site-parts.js
index 31767d08..4d07a129 100644
--- a/modules/admin-home/assets/js/components/paper/site-parts.js
+++ b/modules/admin-home/assets/js/components/paper/site-parts.js
@@ -5,25 +5,29 @@ import { __ } from '@wordpress/i18n';
import { useAdminContext } from '../../hooks/use-admin-context';
export const SiteParts = () => {
- const { adminSettings: { siteParts: { siteParts = [], sitePages = [], general = [] } = {} } = {} } = useAdminContext();
+ const {
+ adminSettings: {
+ siteParts: { siteParts = [], sitePages = [], general = [] } = {},
+ } = {},
+ } = useAdminContext();
return (
-
+
diff --git a/modules/admin-home/assets/js/components/paper/welcome.js b/modules/admin-home/assets/js/components/paper/welcome.js
index 952ea419..4b75466f 100644
--- a/modules/admin-home/assets/js/components/paper/welcome.js
+++ b/modules/admin-home/assets/js/components/paper/welcome.js
@@ -8,117 +8,159 @@ import { useEffect, useRef, useState } from 'react';
import Box from '@elementor/ui/Box';
import CircularProgress from '@elementor/ui/CircularProgress';
-export const Welcome = ( { sx, dismissable = false } ) => {
- const { adminSettings: {
- config: { nonceInstall = '', disclaimer = '', slug = '' } = {},
- welcome: { title = '', text = '', buttons = [], image: { src = '', alt = '' } = {} } = {},
- } = {},
+export const Welcome = ({ sx, dismissable = false }) => {
+ const {
+ adminSettings: {
+ config: { nonceInstall = '', disclaimer = '', slug = '' } = {},
+ welcome: {
+ title = '',
+ text = '',
+ buttons = [],
+ image: { src = '', alt = '' } = {},
+ } = {},
+ } = {},
} = useAdminContext();
- const [ isLoading, setIsLoading ] = useState( false );
- const [ visible, setVisible ] = useState( true );
- const [ imageWidth, setImageWidth ] = useState( 578 );
- const parentRef = useRef( null );
+ const [isLoading, setIsLoading] = useState(false);
+ const [visible, setVisible] = useState(true);
+ const [imageWidth, setImageWidth] = useState(578);
+ const parentRef = useRef(null);
- useEffect( () => {
+ useEffect(() => {
const handleResize = () => {
- if ( parentRef.current ) {
+ if (parentRef.current) {
const parentWidth = parentRef.current.offsetWidth;
- setImageWidth( parentWidth < 800 ? 400 : 578 );
+ setImageWidth(parentWidth < 800 ? 400 : 578);
}
};
handleResize();
- window.addEventListener( 'resize', handleResize );
+ window.addEventListener('resize', handleResize);
return () => {
- window.removeEventListener( 'resize', handleResize );
+ window.removeEventListener('resize', handleResize);
};
- }, [] );
+ }, []);
- if ( ! title || ! visible ) {
+ if (!title || !visible) {
return null;
}
return (
-
- { dismissable && (
- {
- try {
- await wp.ajax.post( 'ehe_dismiss_theme_notice', { nonce: window.ehe_cb.nonce } );
- setVisible( false );
- } catch ( e ) {
- }
- } }>
- { __( 'Dismiss this notice.', 'hello-elementor' ) }
+
+ {dismissable && (
+ {
+ try {
+ await wp.ajax.post('ehe_dismiss_theme_notice', {
+ nonce: window.ehe_cb.nonce,
+ });
+ setVisible(false);
+ } catch (e) {}
+ }}
+ >
+
+ {__('Dismiss this notice.', 'hello-elementor')}
+
- ) }
-
-
- { title }
-
- { text }
+ )}
+
+
+
+ {title}
-
- {
- buttons.map( ( { linkText, link, variant, color, target = '' } ) => {
- const onClick = async () => {
- if ( 'install' === link ) {
- try {
- const data = {
- _wpnonce: nonceInstall,
- slug,
- };
+
+ {text}
+
+
+ {buttons.map(({ linkText, link, variant, color, target = '' }) => {
+ const onClick = async () => {
+ if ('install' === link) {
+ try {
+ const data = {
+ _wpnonce: nonceInstall,
+ slug,
+ };
- setIsLoading( true );
+ setIsLoading(true);
- const response = await wp.ajax.post( 'ehe_install_elementor', data );
+ const response = await wp.ajax.post(
+ 'ehe_install_elementor',
+ data,
+ );
- if ( response.activateUrl ) {
- window.location.href = response.activateUrl;
- } else {
- throw new Error();
+ if (response.activateUrl) {
+ window.location.href = response.activateUrl;
+ } else {
+ throw new Error();
+ }
+ } catch (error) {
+ // eslint-disable-next-line no-alert
+ alert(
+ __(
+ 'Currently the plugin isn’t available. Please try again later. You can also contact our support at: wordpress.org/plugins/hello-plus',
+ 'hello-elementor',
+ ),
+ );
+ } finally {
+ setIsLoading(false);
}
- } catch ( error ) {
- // eslint-disable-next-line no-alert
- alert( __( 'Currently the plugin isn’t available. Please try again later. You can also contact our support at: wordpress.org/plugins/hello-plus', 'hello-elementor' ) );
- } finally {
- setIsLoading( false );
+ } else {
+ window.open(link, target || '_self');
}
- } else {
- window.open( link, target || '_self' );
- }
- };
+ };
- return (
-
+ );
+ })}
- { disclaimer && (
- { disclaimer }
- ) }
+ {disclaimer && (
+
+ {disclaimer}
+
+ )}
- { src && ( ) }
+ {src && (
+
+ )}
);
diff --git a/modules/admin-home/assets/js/components/promotions/feature.js b/modules/admin-home/assets/js/components/promotions/feature.js
index 4137747a..a9f864b8 100644
--- a/modules/admin-home/assets/js/components/promotions/feature.js
+++ b/modules/admin-home/assets/js/components/promotions/feature.js
@@ -2,13 +2,11 @@ import Stack from '@elementor/ui/Stack';
import CheckedCircleIcon from '@elementor/icons/CheckedCircleIcon';
import Typography from '@elementor/ui/Typography';
-export const Feature = ( { text } ) => {
+export const Feature = ({ text }) => {
return (
-
+
-
- { text }
-
+ {text}
);
};
diff --git a/modules/admin-home/assets/js/components/promotions/list.js b/modules/admin-home/assets/js/components/promotions/list.js
index 50fe106e..1f987d20 100644
--- a/modules/admin-home/assets/js/components/promotions/list.js
+++ b/modules/admin-home/assets/js/components/promotions/list.js
@@ -6,10 +6,10 @@ export const PromotionsList = () => {
const { promotionsLinks } = useAdminContext();
return (
-
- { promotionsLinks.map( ( link, i ) => {
- return ;
- } ) }
+
+ {promotionsLinks.map((link, i) => {
+ return ;
+ })}
);
};
diff --git a/modules/admin-home/assets/js/components/settings/changelog.js b/modules/admin-home/assets/js/components/settings/changelog.js
index 72e824f8..b61ec71e 100644
--- a/modules/admin-home/assets/js/components/settings/changelog.js
+++ b/modules/admin-home/assets/js/components/settings/changelog.js
@@ -9,34 +9,32 @@ import Divider from '@elementor/ui/Divider';
import { PlusIcon } from './plus-icon';
import { Fragment } from 'react';
-export const ChangelogDialog = ( { open, onClose, whatsNew } ) => {
+export const ChangelogDialog = ({ open, onClose, whatsNew }) => {
return (
-