'title' => esc_html__( 'Page Shortcuts', 'et_builder' ),
'kbd' => array( 'super', 'z' ),
'desc' => esc_html__( 'Undo', 'et_builder' ),
'kbd' => array( 'super', 'y' ),
'desc' => esc_html__( 'Redo', 'et_builder' ),
'kbd' => array( 'super', 's' ),
'desc' => esc_html__( 'Save Page', 'et_builder' ),
'save_as_draft' => array(
'kbd' => array( 'super', 'shift', 's' ),
'desc' => esc_html__( 'Save Page As Draft', 'et_builder' ),
'kbd' => array( 'super', 'e' ),
'desc' => esc_html__( 'Exit Visual Builder', 'et_builder' ),
'exit_to_backend_builder' => array(
'kbd' => array( 'super', 'shift', 'e' ),
'desc' => esc_html__( 'Exit To Backend Builder', 'et_builder' ),
'toggle_settings_bar' => array(
'desc' => esc_html__( 'Toggle Settings Bar', 'et_builder' ),
'open_page_settings' => array(
'desc' => esc_html__( 'Open Page Settings', 'et_builder' ),
'desc' => esc_html__( 'Open History Window', 'et_builder' ),
'open_portability' => array(
'desc' => esc_html__( 'Open Portability Window', 'et_builder' ),
'kbd' => array( 'super', '+' ),
'desc' => esc_html__( 'Responsive Zoom In', 'et_builder' ),
'kbd' => array( 'super', '-' ),
'desc' => esc_html__( 'Responsive Zoom Out', 'et_builder' ),
'kbd' => array( 'shift', 'w' ),
'desc' => esc_html__( 'Wireframe Mode', 'et_builder' ),
'kbd' => array( 'super', 'shift', 'c' ),
'desc' => esc_html__( 'Click Mode', 'et_builder' ),
'kbd' => array( 'super', 'shift', 'g' ),
'desc' => esc_html__( 'Grid Mode', 'et_builder' ),
'kbd' => array( 'super', 'shift', 'h' ),
'desc' => esc_html__( 'Hover Mode', 'et_builder' ),
'desc' => esc_html__( 'List All Shortcuts', 'et_builder' ),
'title' => esc_html__( 'Inline Editor Shortcuts', 'et_builder' ),
'desc' => esc_html__( 'Exit Inline Editor', 'et_builder' ),
'title' => esc_html__( 'Module Shortcuts', 'et_builder' ),
'kbd' => array( 'super', 'c' ),
'desc' => esc_html__( 'Copy Module', 'et_builder' ),
'kbd' => array( 'super', 'x' ),
'desc' => esc_html__( 'Cut Module', 'et_builder' ),
'kbd' => array( 'super', 'v' ),
'desc' => esc_html__( 'Paste Module', 'et_builder' ),
'module_copy_styles' => array(
'kbd' => array( 'super', 'alt', 'c' ),
'desc' => esc_html__( 'Copy Module Styles', 'et_builder' ),
'module_paste_styles' => array(
'kbd' => array( 'super', 'alt', 'v' ),
'desc' => esc_html__( 'Paste Module Styles', 'et_builder' ),
'module_reset_styles' => array(
'kbd' => array( 'super', 'alt', 'r' ),
'desc' => esc_html__( 'Reset Module Styles', 'et_builder' ),
'kbd' => array( 'super', 'shift', 'l' ),
'desc' => esc_html__( 'Lock Module', 'et_builder' ),
'module_disable' => array(
'kbd' => array( 'super', 'shift', 'd' ),
'desc' => esc_html__( 'Disable Module', 'et_builder' ),
'drag_auto_copy' => array(
'kbd' => array( 'alt', 'module move' ),
'desc' => esc_html__( 'Move and copy module into dropped location', 'et_builder' ),
'column_change_structure' => array(
'kbd' => array( 'c', array( '1', '2', '3', '4', '5', '...' ) ),
'desc' => esc_html__( 'Change Column Structure', 'et_builder' ),
'row_make_fullwidth' => array(
'kbd' => array( 'r', 'f' ),
'desc' => esc_html__( 'Make Row Fullwidth', 'et_builder' ),
'row_edit_gutter' => array(
'kbd' => array( 'g', array( '1', '2', '3', '4' ) ),
'desc' => esc_html__( 'Change Gutter Width', 'et_builder' ),
'kbd' => array( 'r', array( '1', '2', '3', '4', '5', '...' ) ),
'desc' => esc_html__( 'Add New Row', 'et_builder' ),
'add_new_section' => array(
'kbd' => array( 's', array( '1', '2', '3' ) ),
'desc' => esc_html__( 'Add New Section', 'et_builder' ),
'resize_padding_auto_opposite' => array(
'kbd' => array( 'shift', 'Drag Padding' ),
'desc' => esc_html__( 'Restrict padding to 10px increments', 'et_builder' ),
'resize_padding_limited' => array(
'kbd' => array( 'alt', 'Drag Padding' ),
'desc' => esc_html__( 'Padding limited to opposing value', 'et_builder' ),
'resize_padding_10' => array(
'kbd' => array( 'shift', 'alt', 'Drag Padding' ),
'desc' => esc_html__( 'Mirror padding on both sides', 'et_builder' ),
'increase_padding_row' => array(
'kbd' => array( 'r', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Increase Row Padding', 'et_builder' ),
'decrease_padding_row' => array(
'kbd' => array( 'r', 'alt', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Decrease Row Padding', 'et_builder' ),
'increase_padding_section' => array(
'kbd' => array( 's', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Increase Section Padding', 'et_builder' ),
'decrease_padding_section' => array(
'kbd' => array( 's', 'alt', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Decrease Section Padding', 'et_builder' ),
'increase_padding_module' => array(
'kbd' => array( 'm', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Increase Module Padding', 'et_builder' ),
'decrease_padding_module' => array(
'kbd' => array( 'm', 'alt', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Decrease Module Padding', 'et_builder' ),
'increase_padding_row_10' => array(
'kbd' => array( 'r', 'shift', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Increase Row Padding By 10px', 'et_builder' ),
'decrease_padding_row_10' => array(
'kbd' => array( 'r', 'alt', 'shift', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Decrease Row Padding By 10px', 'et_builder' ),
'increase_padding_section_10' => array(
'kbd' => array( 's', 'shift', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Increase Section Padding By 10px', 'et_builder' ),
'decrease_padding_section_10' => array(
'kbd' => array( 's', 'alt', 'shift', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Decrease Section Padding By 10px', 'et_builder' ),
'increase_padding_module_10' => array(
'kbd' => array( 'm', 'shift', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Increase Module Padding By 10px', 'et_builder' ),
'decrease_padding_module_10' => array(
'kbd' => array( 'm', 'alt', 'shift', array( 'left', 'right', 'up', 'down' ) ),
'desc' => esc_html__( 'Decrease Module Padding By 10px', 'et_builder' ),
'title' => esc_html__( 'Modal Shortcuts', 'et_builder' ),
'desc' => esc_html__( 'Close Modal', 'et_builder' ),
'kbd' => array( 'enter' ),
'desc' => esc_html__( 'Save Changes', 'et_builder' ),
'kbd' => array( 'super', 'z' ),
'desc' => esc_html__( 'Undo', 'et_builder' ),
'kbd' => array( 'super', 'shift', 'z' ),
'desc' => esc_html__( 'Redo', 'et_builder' ),
'kbd' => array( 'shift', 'tab' ),
'desc' => esc_html__( 'Switch Tabs', 'et_builder' ),
'toggle_expand' => array(
'kbd' => array( 'super', 'enter' ),
'desc' => esc_html__( 'Expand Modal Fullscreen', 'et_builder' ),
'kbd' => array( 'super', array( 'left', 'right' ) ),
'desc' => esc_html__( 'Snap Modal Left / Right', 'et_builder' ),
'quick_actions' => array(
'kbd' => array( 'shift', 'space' ),
'desc' => esc_html__( 'Quick Actions', 'et_builder' ),
'kbd' => array( 'super', 'l' ),
'desc' => esc_html__( 'Layers View', 'et_builder' ),
$shortcuts = apply_filters( 'et_builder_get_shortcuts', $shortcuts );
$filtered_shortcuts = array();
foreach ( $shortcuts as $group_key => $group ) {
foreach ( $group as $shortcut_key => $shortcut ) {
if ( in_array( $on, $shortcut['on'], true ) ) {
$filtered_shortcuts[ $group_key ][ $shortcut_key ] = $shortcut;
return $filtered_shortcuts;
if ( ! function_exists( 'et_pb_get_responsive_status' ) ) :
* Parsed *_last_edited value and determine wheter the passed string means it has responsive value or not
* *_last_edited holds two values (responsive status and last opened tabs) in the following format: status|last_opened_tab
* @param string $last_edited last_edited data.
function et_pb_get_responsive_status( $last_edited ) {
$parsed_last_edited = is_string( $last_edited ) ? explode( '|', $last_edited ) : array( 'off', 'desktop' );
return isset( $parsed_last_edited[0] ) ? 'on' === $parsed_last_edited[0] : false;
if ( ! function_exists( 'et_pb_get_value_unit' ) ) :
* Get unit of given value
* @param string $value string with unit.
* @param string $default_unit default unit.
* @return string unit name
function et_pb_get_value_unit( $value, $default_unit = 'px' ) {
$value = isset( $value ) ? $value : '';
$valid_one_char_units = array( '%', 'x' );
$valid_two_chars_units = array( 'em', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ex', 'vh', 'vw', 'ms' );
$valid_three_chars_units = array( 'deg', 'rem' );
$important = '!important';
$important_length = strlen( $important );
$value_length = strlen( $value );
if ( '' === $value || is_numeric( $value ) ) {