* Created on: 17/10/2018
*
* @package Amp.php
*/
namespace Neve\Compatibility;
/**
* Class Amp
*
* @package Neve\Compatibility
*/
class Amp {
/**
* Run the hooks and filters.
*/
public function init() {
add_filter( 'neve_nav_toggle_data_attrs', array( $this, 'add_nav_toggle_attrs' ) );
add_filter( 'neve_caret_wrap_filter', array( $this, 'amp_dropdowns' ), 10, 2 );
add_filter( 'neve_body_data_attrs', array( $this, 'add_body_attributes' ) );
add_filter(
'neve_woocommerce_sidebar_filter_btn_data_attrs',
array(
$this,
'add_woo_sidebar_filter_btn_attrs',
)
);
add_filter(
'neve_filter_sidebar_close_button_data_attrs',
array(
$this,
'sidebar_close_button_attrs',
),
10,
2
);
add_filter( 'neve_sidebar_data_attrs', array( $this, 'add_woo_sidebar_attrs' ), 10, 2 );
add_action( 'neve_after_header_hook', array( $this, 'render_amp_states' ) );
}
/**
* Add body attributes to make sure sidebar works fine.
*
* @param string $input the incoming string.
*
* @return string
*/
public function add_body_attributes( $input ) {
if ( ! neve_is_amp() ) {
return $input;
}
$body_classes = join( ' ', get_body_class() ) . ' ';
$input .= ' [class]="\'' . $body_classes . '\' + ( nvAmpMenuExpanded ? \'is-menu-sidebar\' : \'\' )" ';
return $input;
}
/**
* Add amp states to the dom.
*/
public function render_amp_states() {
if ( ! neve_is_amp() ) {
return;
}
echo '';
echo '';
echo '';
echo '';
echo '';
echo '';
}
/**
* Add the nav toggle data attributes.
*
* @param string $input the data attrs already existing in nav toggle.
*
* @return string
*/
public function add_nav_toggle_attrs( $input ) {
if ( ! neve_is_amp() ) {
return $input;
}
$input .= ' on="tap:AMP.setState( { nvAmpMenuExpanded: ! nvAmpMenuExpanded } )" ';
$input .= ' role="button" ';
$input .= ' tabindex="0" ';
$input .= ' aria-expanded="false" ';
$input .= ' [aria-expanded]="nvAmpMenuExpanded ? \'true\' : \'false\'" ';
return $input;
}
/**
* Add filter button amp attrs.
*
* @param string $input input.
*
* @return string
*/
public function add_woo_sidebar_filter_btn_attrs( $input ) {
if ( ! neve_is_amp() ) {
return $input;
}
$input .= ' on="tap:AMP.setState( { nvAmpWooSidebarExpanded: true } )" ';
$input .= ' role="button" ';
$input .= ' tabindex="0" ';
return $input;
}
/**
* Add woo sidebar amp attrs.
*
* @param string $input input.
* @param string $slug sidebar slug.
*
* @return string
*/
public function add_woo_sidebar_attrs( $input, $slug ) {
if ( ! neve_is_amp() ) {
return $input;
}
if ( $slug !== 'shop-sidebar' ) {
return $input;
}
$input .= ' [class]="\'nv-sidebar-wrap col-sm-12 left shop-sidebar \' + ( nvAmpWooSidebarExpanded ? \'sidebar-open\' : \'\' )" ';
$input .= ' aria-expanded="false" [aria-expanded]="nvAmpWooSidebarExpanded ? \'true\' : \'false\'" ';
return $input;
}
/**
* Add amp attributes to sidebar close button.
*
* @param string $input empty string.
* @param string $slug sidebar slug.
*
* @return string
*/
public function sidebar_close_button_attrs( $input, $slug ) {
if ( ! neve_is_amp() ) {
return $input;
}
if ( $slug !== 'shop-sidebar' ) {
return $input;
}
$input .= ' on="tap:AMP.setState( { nvAmpWooSidebarExpanded: false } )" ';
$input .= ' role="button" ';
$input .= ' tabindex="0" ';
return $input;
}
/**
* Implement AMP integration on drop-downs.
*
* @param string $output the output.
* @param string $id menu item order.
*
* @return mixed
*/
public function amp_dropdowns( $output, $id ) {
// Bail if not AMP.
if ( ! neve_is_amp() ) {
return $output;
}
// Generate a unique id for drop-down items.
$state = 'neveMenuItemExpanded' . $id;
$attrs = '';
$attrs .= '
';
$attrs .= '
';
$output = str_replace( '
', $attrs, $output );
return $output;
}
}