should_load() ) { return; } wp_enqueue_style( 'feel-accessibility', FEEL_ACC_URL . 'assets/css/page.css', array(), FEEL_ACC_VERSION ); wp_register_script( 'feel-accessibility', FEEL_ACC_URL . 'assets/js/widget.js', array(), FEEL_ACC_VERSION, array( 'in_footer' => true, 'strategy' => 'defer', ) ); wp_add_inline_script( 'feel-accessibility', 'window.FeelAccessibility=' . wp_json_encode( $this->config(), JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT ) . ';', 'before' ); wp_enqueue_script( 'feel-accessibility' ); } /** * Aplica las preferencias guardadas antes del primer pintado (evita el "salto" de estilos). * Solo escribe atributos del con valores de una lista cerrada. * * @return void */ public function print_boot_script() { if ( ! $this->should_load() ) { return; } $settings = Feel_Accessibility_Settings::get(); if ( empty( $settings['remember'] ) ) { return; } $allowed = array( 'text' => array( 1, 2, 3, 4 ), 'spacing' => array( 1, 2, 3 ), 'font' => array( 'legible', 'dyslexia' ), 'align' => array( 1 ), 'contrast' => array( 'dark', 'light', 'mono' ), 'links' => array( 1 ), 'headings' => array( 1 ), 'images' => array( 1 ), 'motion' => array( 1 ), 'cursor' => array( 1 ), 'focus' => array( 1 ), ); foreach ( Feel_Accessibility_Settings::features() as $id => $key ) { if ( null !== $key && empty( $settings['features'][ $id ] ) ) { unset( $allowed[ $key ] ); } } if ( empty( $allowed ) ) { return; } $js = '(function(){try{var A=' . wp_json_encode( $allowed ) . ',s=JSON.parse(localStorage.getItem(' . wp_json_encode( self::STORAGE_KEY ) . ')),d=document.documentElement;if(!s)return;for(var k in A){if(Object.prototype.hasOwnProperty.call(A,k)&&A[k].indexOf(s[k])>-1){d.setAttribute("data-feel-acc-"+k,s[k]);}}}catch(e){}})();'; wp_print_inline_script_tag( $js, array( 'id' => 'feel-accessibility-boot', 'data-cfasync' => 'false', 'data-no-optimize' => '1', 'data-no-defer' => '1', ) ); } /** * URL de la declaración de accesibilidad en el idioma del visitante. * Si es una página de este sitio y Polylang tiene su traducción, se enlaza esa; * en cualquier otro caso se devuelve la URL tal cual. * * @param string $url URL guardada en los ajustes. * @param string $lang Idioma actual. * @return string */ private function statement_url( $url, $lang ) { if ( '' === $url || ! function_exists( 'pll_get_post' ) ) { return $url; } $post_id = url_to_postid( $url ); if ( ! $post_id ) { return $url; } $translated = (int) pll_get_post( $post_id, $lang ); $link = $translated ? get_permalink( $translated ) : false; return $link ? $link : $url; } /** * Configuración que recibe el JavaScript. * * @return array */ private function config() { $settings = Feel_Accessibility_Settings::get(); $lang = Feel_Accessibility_I18n::lang(); $sizes = Feel_Accessibility_Settings::sizes(); $features = array(); foreach ( array_keys( Feel_Accessibility_Settings::features() ) as $id ) { $features[ $id ] = ! empty( $settings['features'][ $id ] ); } $contact_url = '' !== $settings['contact_url'] ? $settings['contact_url'] : Feel_Accessibility_I18n::default_contact_url( $lang ); $config = array( 'version' => FEEL_ACC_VERSION, 'lang' => $lang, 'cssUrl' => add_query_arg( 'ver', FEEL_ACC_VERSION, FEEL_ACC_URL . 'assets/css/widget.css' ), 'position' => $settings['position'], 'offsetX' => (int) $settings['offset_x'], 'offsetY' => (int) $settings['offset_y'], 'size' => (int) $sizes[ $settings['size'] ], 'color' => $settings['color'], 'iconColor' => Feel_Accessibility_Settings::icon_color( $settings['color'] ), 'showTrigger' => ! empty( $settings['show_trigger'] ), 'features' => $features, 'remember' => ! empty( $settings['remember'] ), 'respectMotion' => ! empty( $settings['respect_motion'] ), 'statementUrl' => $this->statement_url( $settings['statement_url'], $lang ), 'showCredit' => ! empty( $settings['show_credit'] ), 'contact' => array( 'enabled' => ! empty( $settings['contact_cta'] ), 'url' => $contact_url, 'label' => $settings['contact_text'], ), 'strings' => Feel_Accessibility_I18n::widget_strings( $lang ), ); return apply_filters( 'feel_accessibility_config', $config ); } }