���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC get_settings(); $this->init_cache(); if ( $this->loader_enabled() ) { add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); add_action( 'wp_head', array( $this, 'loader_custom_styles' ), 100 ); add_action( 'wp_footer', array( $this, 'load_inline_js' ), 99 ); add_filter( 'loftloader_modify_html', array( $this, 'show_loader_html' ) ); add_filter( 'body_class', array( $this, 'body_class' ) ); } } /** * Init cache for outputing */ public function init_cache() { // Only for front view if ( ! is_admin() ) { add_action( 'template_redirect', array( $this, 'start_cache' ), 2 ); } } /** * Start cache for outputing */ public function start_cache() { if ( ! wp_doing_ajax() ) { // Start cache the output with callback function ob_start( array( $this, 'modify_html' ) ); } } /** * Will be called when flush cache * * @param string cached string * @return string modified cached string */ public function modify_html( $html ) { if ( $this->site_header_loaded && $this->site_footer_loaded ) { return apply_filters( 'loftloader_modify_html', $html ); } else { return $html; } } /** * @description get the plugin settings */ public function get_settings() { global $loftloader_default_settings; $this->defaults = $loftloader_default_settings; do_action( 'loftloader_settings' ); $this->type = esc_attr( $this->get_loader_setting( 'loftloader_loader_type' ) ); add_action( 'wp_head', array( $this, 'set_header_loaded' ) ); add_action( 'wp_footer', array( $this, 'set_footer_loaded' ) ); } /** * @description enqueue the scripts and styles for front end */ public function enqueue_scripts() { $loadJSStyle = $this->get_loader_setting( 'loftloader_inline_js' ); if ( ! is_customize_preview() && ( 'inline' !== $loadJSStyle ) ) { wp_enqueue_script( 'loftloader-lite-front-main', LOFTLOADER_URI . 'assets/js/loftloader.min.js', array(), LOFTLOADER_ASSET_VERSION, true ); } wp_enqueue_style('loftloader-lite-animation', LOFTLOADER_URI . 'assets/css/loftloader.min.css', array(), LOFTLOADER_ASSET_VERSION); } /** * Load inline JavaScript code if set */ public function load_inline_js() { $loadJSStyle = $this->get_loader_setting( 'loftloader_inline_js' ); if ( ( 'inline' === $loadJSStyle ) && ! is_customize_preview() ) { ?> get_loader_setting( 'loftloader_loader_color' ) ); $bgColor = esc_attr( $this->get_loader_setting( 'loftloader_bg_color' ) ); $bgOpacity = intval( $this->get_loader_setting('loftloader_bg_opacity' ) ) / 100; $styles = $this->generate_style( 'loftloader-lite-custom-bg-color', '#loftloader-wrapper .loader-section {' . PHP_EOL . "\t" . 'background: ' . $bgColor . ';' . PHP_EOL . '}' . PHP_EOL ); $styles .= $this->generate_style( 'loftloader-lite-custom-bg-opacity', '#loftloader-wrapper .loader-section {' . PHP_EOL . "\t" . 'opacity: ' . $bgOpacity . ';' . PHP_EOL . '}' . PHP_EOL ); $css = ''; switch ( $this->type ) { case 'sun': $css = '#loftloader-wrapper.pl-sun #loader {' . PHP_EOL . "\t" . 'color: ' . $color . ';' . PHP_EOL . '}' . PHP_EOL; break; case 'circles': $css = '#loftloader-wrapper.pl-circles #loader {' . PHP_EOL . "\t" . 'color: ' . $color . ';' . PHP_EOL . '}' . PHP_EOL; break; case 'wave': $css = '#loftloader-wrapper.pl-wave #loader {' . PHP_EOL . "\t" . 'color: ' . $color . ';' . PHP_EOL . '}' . PHP_EOL; break; case 'square': $css = '#loftloader-wrapper.pl-square #loader span {' . PHP_EOL . "\t" . 'border: 4px solid ' . $color . ';' . PHP_EOL . '}' . PHP_EOL; break; case 'frame': $css = '#loftloader-wrapper.pl-frame #loader {' . PHP_EOL . "\t" . 'color: ' . $color . ';' . PHP_EOL . '}' . PHP_EOL; break; case 'imgloading': $width = absint($this->get_loader_setting('loftloader_img_width')); $image = esc_url($this->get_loader_setting('loftloader_custom_img')); $css = empty($width) ? '' : '#loftloader-wrapper.pl-imgloading #loader {' . PHP_EOL . "\t" . 'width: ' . $width . 'px;' . PHP_EOL . '}' . PHP_EOL; $css .= '#loftloader-wrapper.pl-imgloading #loader span {' . PHP_EOL . "\t" . 'background-size: cover;' . PHP_EOL . "\t" . 'background-image: url(' . $image . ');' . PHP_EOL . '}' . PHP_EOL; break; case 'beating': $css = '#loftloader-wrapper.pl-beating #loader {' . PHP_EOL . "\t" . 'color: ' . $color . ';' . PHP_EOL . '}' . PHP_EOL; break; } $styles .= $this->generate_style( 'loftloader-lite-custom-loader', $css ); echo wp_kses( $styles, array( 'style' => array( 'type' => array(), 'id' => array(), 'media' => array() ) ) ); } /** * @description loftloader html */ public function show_loader_html( $origin ) { if ( ! empty( $origin ) ) { $regexp ='/(]*>)/i'; $split = preg_split( $regexp, $origin, 3, PREG_SPLIT_DELIM_CAPTURE ); if ( is_array( $split ) && ( 3 <= count( $split ) ) ) { $image = esc_url($this->get_loader_setting('loftloader_custom_img')); $ending = esc_attr($this->get_loader_setting('loftloader_bg_animation')); $wrap_class = array( 'pl-' . $this->type ); $html = '
loader_attributes() . '>'; switch( $ending ) { case 'fade': $html .= '
'; break; case 'up': $html .= '
'; break; case 'split-v': $html .= '
'; $html .= '
'; break; case 'no-animation': $html .= '
'; break; default: $html .= '
'; $html .= '
'; } $html .= '
'; if ( ! empty( $image ) ) { // if ( in_array( $this->type, array( 'imgloading' ) ) ) { $html .= $this->get_loader_type_loading_bg_image( $image ); } if ( in_array( $this->type, array( 'frame', 'imgloading' ) ) ) { $html .= $this->get_loader_image( $image, $this->type ); } } $html .= in_array( $this->type, array( 'imgloading' ) ) ? '' : ''; $html .= '
'; if ( ! is_customize_preview() ) { $close_description = $this->get_loader_setting( 'loftloader_show_close_tip' ); $html .= sprintf( '', esc_html__('Close', 'loftloader'), empty($close_description) ? '' : sprintf('%s', $close_description) ); } $html .= '
'; return $split[0] . $split[1] . $html . implode( '', array_slice( $split, 2 ) ); } } return $origin; } /** * Background image for loader type loading with custom image * * @param url image url * @return string html */ private function get_loader_type_loading_bg_image( $image ) { return sprintf( '
', esc_url( $image ) ); } /** * Helper function to add manual loader settings */ private function loader_attributes() { $attrs = ''; $show_close_time = $this->get_loader_setting( 'loftloader_show_close_timer' ); $show_close_time = number_format( $show_close_time, 0, '.', '' ); $attrs .= sprintf( ' data-show-close-time="%s"', esc_js( esc_attr( $show_close_time * 1000 ) ) ); $max_load_time = $this->get_loader_setting( 'loftloader_max_load_time' ); $max_load_time = number_format( $max_load_time, 1, '.', '' ); if ( ! empty( $max_load_time ) ) { $attrs .= sprintf( ' data-max-load-time="%s"', esc_js( esc_attr( $max_load_time * 1000 ) ) ); } return apply_filters( 'loftloader_loader_attributes', $attrs ); } /** * Helper function to test whether show loftloader * @return boolean return true if loftloader enabled and display on current page, otherwise false */ private function loader_enabled() { if ( $this->test_builder() ) { return false; } else { if ( ( $this->get_loader_setting( 'loftloader_main_switch' ) === 'on' ) ) { $range = $this->get_loader_setting( 'loftloader_show_range' ); if ( ( $range === 'sitewide' ) || ( ( $range === 'homepage' ) && is_front_page() ) ) { return true; } else { return false; } } else { return apply_filters( 'loftloader_loader_enabled', false ); } } } /** * Helper function get setting option */ private function get_loader_setting( $setting_id ) { return apply_filters( 'loftloader_get_loader_setting', get_option( $setting_id, $this->defaults[ $setting_id ] ), $setting_id ); } /** * Helper function generate styles */ private function generate_style( $id, $style ) { return ''; } /** * Make the head loaded flag */ public function set_header_loaded() { $this->site_header_loaded = true; } /** * Make the footer loaded flag */ public function set_footer_loaded() { $this->site_footer_loaded = true; } /** * Not show loader in builder and theme customizer */ protected function test_builder() { if ( defined( 'ELEMENTOR_PATH' ) && isset( $_GET['elementor-preview'] ) && ! empty( sanitize_text_field( wp_unslash( $_GET['elementor-preview'] ) ) ) ) { return true; } else if ( class_exists( 'FLBuilderLoader' ) && isset( $_GET['fl_builder'] ) ) { return true; } else if ( defined( 'WPB_VC_VERSION' ) && ( ! empty( $_GET['vc_editable'] ) ) ) { return true; } else if ( is_customize_preview() && ( empty( $_GET['plugin'] ) || ( 'loftloader-lite' != sanitize_text_field( wp_unslash( $_GET['plugin'] ) ) ) ) ) { return true; } return false; } /** * Identify from loftloader lite */ public function body_class( $class ) { array_push( $class, 'loftloader-lite-enabled' ); return $class; } /** * Get loader image */ protected function get_loader_image( $img, $type ) { if ( empty( $img ) ) return ''; $width = 80; $height = 80; $is_frame = ( 'frame' == $type ); $pid = attachment_url_to_postid( $img ); $has_valid_image_attrs = false; $image_attrs = array(); if ( empty( $pid ) ) { $info = getimagesize( $img ); if ( $has_valid_image_attrs = ( ! empty( $info[1] ) ) && ( $info[0] > 1 ) ) { $image_attrs = array( 'width' => $info[0], 'height' => $info[1] ); } } else { $image = wp_get_attachment_image_src( $pid, 'full' ); if ( $has_valid_image_attrs = ( $image[1] > 1 ) ) { $image_attrs = array( 'width' => $image[1], 'height' => $image[2] ); } } if ( $is_frame ) { if ( $has_valid_image_attrs ) { $width = $image_attrs['width']; $height = $image_attrs['height']; } } else { $width = intval( $this->get_loader_setting( 'loftloader_img_width' ) ); $width = ( $width > 0 ) ? $width : 76; $height = $has_valid_image_attrs ? ( $image_attrs['height'] / $image_attrs['width'] * $width ) : $width; } return sprintf( '%1$s', esc_attr__( 'loader image', 'loftloader' ), esc_url( $img ), esc_attr( $width ), esc_attr( intval( $height ) ) ); } } new LoftLoader_Front(); }