inline_css_footer = essb_option_bool_value('load_css_footer');
// dynamic CSS in footer
$precompiled_mode = false;
$precompiled_mode_css = false;
$precompiled_mode_js = false;
if (defined('ESSB3_PRECOMPILED_RESOURCE')) {
$precompiled_mode_resources = essb_option_value('precompiled_mode');
if ($precompiled_mode_resources == '' || $precompiled_mode_resources == 'css') {
$precompiled_mode_css = true;
}
if ($precompiled_mode_resources == '' || $precompiled_mode_resources == 'js') {
$precompiled_mode_js = true;
}
if ($precompiled_mode_css) {
$this->inline_css_footer = true;
}
$precompiled_mode = true;
$this->precompile_css = $precompiled_mode_css;
$this->precompile_js = $precompiled_mode_js;
}
add_action('wp_head', array($this, 'header'));
add_action('wp_footer', array($this, 'footer'), 999);
if (!$precompiled_mode_css) {
if ($this->inline_css_footer) {
add_action('essb_rs_footer', array($this, 'generate_custom_css'), 997);
}
else {
add_action('essb_rs_head', array($this, 'generate_custom_css'));
}
add_action('essb_rs_footer', array($this, 'generate_custom_footer_css'), 998);
}
else {
add_action('essb_rs_footer', array($this, 'generate_custom_css_precompiled'), 996);
}
add_action('essb_rs_head', array($this, 'generate_custom_js'));
if (!$precompiled_mode_js) {
add_action('essb_rs_footer', array($this, 'generate_custom_footer_js'), 998);
}
else {
add_action('essb_rs_footer', array($this, 'generte_custom_js_precompiled'), 996);
}
// static CSS and javascripts sources enqueue
add_action ( 'wp_enqueue_scripts', array ($this, 'register_front_assets' ), 10 );
add_action ( 'wp_enqueue_scripts', array ($this, 'check_optimized_load' ), 1 );
// initalize resource builder options based on settings
$this->js_head = essb_option_bool_value('scripts_in_head');
$this->js_async = essb_option_bool_value('load_js_async');
$this->js_defer = essb_option_bool_value('load_js_defer');
$remove_ver_resource = essb_option_bool_value('remove_ver_resource');
if ($remove_ver_resource) {
$this->resource_version = '';
}
}
public function check_optimized_load() {
if ($this->is_optimized_deactivated()) {
$this->deactivate_actions();
}
}
public function is_optimized_deactivated() {
$r = false;
if (essb_option_value('optimize_load') == 'selected') {
$active_types = essb_option_value('display_in_types');
$active_type = get_post_type();
if ($active_type == '') {
$active_type = 'post';
}
if (!is_array($active_types)) {
$active_types = array();
}
if (!in_array($active_type, $active_types)) {
$r = true;
}
// deactivating plugin resources on list pages if the option is not activated
if (is_archive() || is_front_page() || is_search() || is_tag() || is_post_type_archive() || is_home()) {
if (!in_array('all_lists', $active_types)) {
$r = true;
}
}
}
return $r;
}
public function header() {
do_action('essb_rs_head');
}
public function footer() {
// since version 4 we introduce new mail form code added here
if ($this->is_activated('mail')) {
essb_depend_load_function('essb_rs_mailform_build', 'lib/core/resource-snippets/essb_rs_code_mailform.php');
}
do_action('essb_rs_footer');
}
/**
* Cloning disabled
*/
public function __clone() {
}
/**
* Serialization disabled
*/
public function __sleep() {
}
/**
* De-serialization disabled
*/
public function __wakeup() {
}
public function deactivate_actions() {
remove_action('wp_head', array($this, 'header'));
remove_action('wp_footer', array($this, 'footer'), 999);
remove_action ('wp_enqueue_scripts', array ($this, 'register_front_assets' ), 10 );
}
public function activate_resource($key) {
$this->active_resources[$key] = 'loaded';
}
public function is_activated($key) {
return isset($this->active_resources[$key]) ? true : false;
}
/**
* add_static_resource
*
* @param unknown_type $file_with_path
* @param unknown_type $key
* @param unknown_type $type
*/
public function add_static_resource($file_with_path, $key, $type = '', $noasync = false) {
if ($type == 'css') {
$this->css_static[$key] = $file_with_path;
}
if ($type == 'js') {
if ($noasync) {
$this->js_static_nonasync[$key] = $file_with_path;
}
else {
$this->js_static[$key] = $file_with_path;
}
}
}
public function add_static_resource_footer($file_with_path, $key, $type = '', $noasync = false) {
if ($type == 'css') {
$this->css_static_footer[$key] = $file_with_path;
}
if ($type == 'js') {
if ($noasync) {
// @since 3.0.4 - double check for the twice counter load script
if (!isset($this->js_static_nonasync[$key])) {
$this->js_static_noasync_footer[$key] = $file_with_path;
}
}
else {
// @since 3.0.4 - double check for the twice counter load script
if (!isset($this->js_static[$key])) {
$this->js_static_footer[$key] = $file_with_path;
}
}
}
}
public function add_static_footer_css($file_with_path, $key) {
$this->css_static_footer[$key] = $file_with_path;
}
/**
* add_css
*
* @param string $code
* @param string $key
* @param string $location
*/
public function add_css($code, $key = '', $location = 'head') {
if ($key != '') {
if ($location == 'head') {
$this->css_head[$key] = $code;
}
else {
$this->css_footer[$key] = $code;
}
}
else {
if ($location == 'head') {
$this->css_head[] = $code;
}
else {
$this->css_footer[] = $code;
}
}
}
public function add_social_api($key) {
$this->js_social_apis[$key] = 'loaded';
}
/**
* add_js
*
* @param string $code
* @param bool $minify
* @param string $key
* @param string $position
*/
public function add_js($code, $minify = false, $key = '', $position = 'footer', $noncachble = false) {
if ($minify) {
$code = trim(preg_replace('/\s+/', ' ', $code));
}
if ($key != '') {
if ($position == 'footer') {
if ($noncachble) {
$this->js_code_noncachable[$key] = $code;
}
else {
$this->js_code[$key] = $code;
}
}
else {
$this->js_code_head[$key] = $code;
}
}
else {
if ($position == 'footer') {
if ($noncachble) {
$this->js_code_noncachable[] = $code;
}
else {
$this->js_code[] = $code;
}
}
else {
$this->js_code_head[] = $code;
}
}
}
/*
* Enqueue all front CSS and javascript files
*/
function enqueue_style_single_css($key, $file, $version) {
if (!$this->precompile_css) {
wp_enqueue_style ( $key, $file, false, $this->resource_version, 'all' );
}
else {
$this->precompiled_css_queue[$key] = $file;
}
}
function register_front_assets() {
if (essb_is_plugin_deactivated_on()) {
return;
}
$load_in_footer = ($this->js_head) ? false : true;
if (!essb_option_bool_value('use_stylebuilder')) {
// enqueue all css registered files
foreach ($this->css_static as $key => $file) {
if ($key == 'easy-social-share-buttons-profles') {
if (!essb_is_module_deactivated_on('profiles')) {
$this->enqueue_style_single_css($key, $file, $this->resource_version);
}
}
else if ($key == 'easy-social-share-buttons-nativeskinned' || $key == 'essb-fontawsome' || $key == 'essb-native-privacy') {
if (!essb_is_module_deactivated_on('native')) {
$this->enqueue_style_single_css($key, $file, $this->resource_version);
}
}
else {
$this->enqueue_style_single_css($key, $file, $this->resource_version);
}
}
}
else {
// using build in builder styles
$user_styles = essb_option_value('stylebuilder_css');
if (!is_array($user_styles)) {
$user_styles = array();
}
if (count($user_styles) > 0) {
$this->enqueue_style_single_css('essb-userstyles', content_url('easysocialsharebuttons-assets/essb-userselection.min.css'), $this->resource_version);
}
}
foreach ($this->js_static_nonasync as $key => $file) {
wp_enqueue_script ( $key, $file, array ( 'jquery' ), $this->resource_version, $load_in_footer );
}
// load scripts when no async or deferred is selected
if (!$this->js_async && !$this->js_defer) {
foreach ($this->js_static as $key => $file) {
if (!$this->precompile_js) {
wp_enqueue_script ( $key, $file, array ( 'jquery' ), $this->resource_version, $load_in_footer );
}
else {
$this->precompiled_js_queue[$key] = $file;
}
}
}
}
/*
* Code generation functions: CSS
*/
/**
* generate_custom_css
*/
function generate_custom_css() {
global $post;
if (essb_is_plugin_deactivated_on ()) {
return;
}
//$this->add_css ( ESSBResourceBuilderSnippets::css_build_customizer (), 'essb-customcss-header' );
$cache_slug = 'essb-css-head';
if (defined ( 'ESSB3_CACHE_ACTIVE_RESOURCE' )) {
if (isset ( $post )) {
$cache_key = $cache_slug . $post->ID;
if (essb_dynamic_cache_load_css ( $cache_key )) {
return;
}
}
}
// if (count($this->css_head) > 0) {
$css_code = '';
foreach ( $this->css_head as $single ) {
$css_code .= $single;
}
$css_code = apply_filters ( 'essb_css_buffer_head', $css_code );
//print "header css = ".$css_code;
$css_code = trim ( preg_replace ( '/\s+/', ' ', $css_code ) );
if ($css_code != '') {
if (defined ( 'ESSB3_CACHE_ACTIVE_RESOURCE' )) {
if (isset ( $post )) {
$cache_key = $cache_slug . $post->ID;
ESSBDynamicCache::put_resource ( $cache_key, $css_code, 'css' );
essb_dynamic_cache_load_css ( $cache_key );
return;
}
}
echo '';
}
// }
}
function generate_custom_footer_css() {
global $post;
if (essb_is_plugin_deactivated_on ()) {
return;
}
//$this->add_css ( ESSBResourceBuilderSnippets::css_build_footer_css (), 'essb-footer-css', 'footer' );
if (count ( $this->css_static_footer ) > 0) {
foreach ( $this->css_static_footer as $key => $file ) {
printf ( '', $key, $file );
}
}
$cache_slug = 'essb-css-footer';
if (isset ( $post )) {
if (defined ( 'ESSB3_CACHE_ACTIVE_RESOURCE' )) {
$cache_key = $cache_slug . $post->ID;
if (essb_dynamic_cache_load_css ( $cache_key )) {
return;
}
}
}
// $css_code = implode(" ", $this->css_footer);
$css_code = '';
foreach ( $this->css_footer as $single ) {
$css_code .= $single;
}
//print "footer code = ".$css_code;
$css_code = apply_filters ( 'essb_css_buffer_footer', $css_code );
$css_code = trim ( preg_replace ( '/\s+/', ' ', $css_code ) );
if ($css_code != '') {
if (isset ( $post )) {
if (defined ( 'ESSB3_CACHE_ACTIVE_RESOURCE' )) {
$cache_key = $cache_slug . $post->ID;
ESSBDynamicCache::put_resource ( $cache_key, $css_code, 'css' );
essb_dynamic_cache_load_css ( $cache_key );
return;
}
}
echo '';
}
}
function generate_custom_css_precompiled() {
if (essb_is_plugin_deactivated_on()) {
return;
}
$cache_key = 'essb-precompiled'.(essb_is_mobile() ? '-mobile': '');
$cached_data = ESSBPrecompiledResources::get_resource($cache_key, 'css');
if ($cached_data != '') {
echo "";
return;
}
// generation of all styles
//$this->add_css(ESSBResourceBuilderSnippets::css_build_customizer(), 'essb-customcss-header');
//$this->add_css(ESSBResourceBuilderSnippets::css_build_footer_css(), 'essb-footer-css', 'footer');
$static_content = array();
$styles = array();
/*if (count($this->css_head) > 0) {
$css_code = implode(" ", $this->css_head);
$css_code = trim(preg_replace('/\s+/', ' ', $css_code));
$styles[] = $css_code;
}*/
$css_code = '';
foreach ( $this->css_head as $single ) {
$css_code .= $single;
}
$css_code = apply_filters ( 'essb_css_buffer_head', $css_code );
$css_code = trim ( preg_replace ( '/\s+/', ' ', $css_code ) );
$styles[] = $css_code;
// parsing inlinde enqueue styles
$current_site_url = get_site_url();
foreach ($this->precompiled_css_queue as $key => $file) {
$relative_path = ESSBPrecompiledResources::get_asset_relative_path($current_site_url, $file);
$css_code = file_get_contents( ABSPATH . $relative_path );
$css_code = trim(preg_replace('/\s+/', ' ', $css_code));
if ($key == "essb-social-image-share") {
$css_code = str_replace('../', ESSB3_PLUGIN_URL . '/lib/modules/social-image-share/assets/', $css_code);
}
if ($key == "easy-social-share-buttons-profiles" || $key == "easy-social-share-buttons-display-methods" || $key == 'easy-social-share-buttons') {
$css_code = str_replace('../', ESSB3_PLUGIN_URL . '/assets/', $css_code);
}
if ($key == "essb-social-followers-counter") {
$css_code = str_replace('../', ESSB3_PLUGIN_URL . '/lib/modules/social-followers-counter/assets/', $css_code);
}
$styles[] = $css_code;
$static_content[$key] = $file;
}
foreach ($this->css_static_footer as $key => $file) {
$relative_path = ESSBPrecompiledResources::get_asset_relative_path($current_site_url, $file);
$css_code = file_get_contents( ABSPATH . $relative_path );
$css_code = trim(preg_replace('/\s+/', ' ', $css_code));
if ($key == "essb-social-image-share") {
$css_code = str_replace('../', ESSB3_PLUGIN_URL . '/lib/modules/social-image-share/assets/', $css_code);
}
if ($key == "easy-social-share-buttons-profiles" || $key == "easy-social-share-buttons-display-methods" || $key == 'easy-social-share-buttons') {
$css_code = str_replace('../', ESSB3_PLUGIN_URL . '/assets/', $css_code);
}
if ($key == "essb-social-followers-counter") {
$css_code = str_replace('../', ESSB3_PLUGIN_URL . '/lib/modules/social-followers-counter/assets/', $css_code);
}
$styles[] = $css_code;
$static_content[$key] = $file;
}
/*if (count($this->css_footer) > 0) {
$css_code = implode(" ", $this->css_footer);
$css_code = trim(preg_replace('/\s+/', ' ', $css_code));
$styles[] = $css_code;
}*/
$css_code = '';
foreach ( $this->css_footer as $single ) {
$css_code .= $single;
}
$css_code = apply_filters ( 'essb_css_buffer_footer', $css_code );
$css_code = trim ( preg_replace ( '/\s+/', ' ', $css_code ) );
$styles[] = $css_code;
$toc = array();
foreach ( $static_content as $handle => $item_content )
$toc[] = sprintf( ' - %s', $handle.'-'.$item_content );
$styles[] = sprintf( "\n\n\n/* TOC:\n%s\n*/", implode( "\n", $toc ) );
ESSBPrecompiledResources::put_resource($cache_key, implode(' ', $styles), 'css');
$cached_data = ESSBPrecompiledResources::get_resource($cache_key, 'css');
if ($cached_data != '') {
echo "";
return;
}
}
/*
* Code generation functions: Javascript
*/
/**
* generate_custom_js
*
* Generate custom javascript code in head of page that will not be cached
*/
function generte_custom_js_precompiled() {
if (essb_is_plugin_deactivated_on()) {
return;
}
// -- loading non cachble and noasync code first
if (count($this->js_social_apis) > 0) {
if (!essb_is_module_deactivated_on('native')) {
essb_depend_load_function('essb_load_social_api_code', 'lib/core/resource-snippets/essb-rb-socialapi.php');
foreach ($this->js_social_apis as $network => $loaded) {
essb_load_social_api_code($network);
}
}
}
if (count($this->js_static_noasync_footer)) {
foreach ($this->js_static_noasync_footer as $key => $file) {
$this->manual_script_load($key, $file);
}
}
// loading in precompiled cache mode
$cache_key = "essb-precompiled".(essb_is_mobile() ? "-mobile": "");
$cached_data = ESSBPrecompiledResources::get_resource($cache_key, 'js');
if ($cached_data != '') {
echo "";
return;
}
$static_content = array();
$scripts = array();
$current_site_url = get_site_url();
$scripts[] = implode(" ", $this->js_code);
if (count($this->js_static) > 0) {
foreach ($this->js_static as $key => $file) {
$relative_path = ESSBPrecompiledResources::get_asset_relative_path($current_site_url, $file);
$code = file_get_contents( ABSPATH . $relative_path );
$scripts[] = $code;
$static_content[$key] = $file;
}
}
if (count($this->js_static_footer)) {
foreach ($this->js_static_footer as $key => $file) {
$relative_path = ESSBPrecompiledResources::get_asset_relative_path($current_site_url, $file);
$code = file_get_contents( ABSPATH . $relative_path );
$scripts[] = $code;
$static_content[$key] = $file;
}
}
$js_code = '';
$js_code = apply_filters('essb_js_buffer_footer', $js_code);
$scripts[] = $js_code;
$toc = array();
foreach ( $static_content as $handle => $item_content )
$toc[] = sprintf( ' - %s', $handle.'-'.$item_content );
$scripts[] = sprintf( "\n\n\n/* TOC:\n%s\n*/", implode( "\n", $toc ) );
ESSBPrecompiledResources::put_resource($cache_key, implode(' ', $scripts), 'js');
$cached_data = ESSBPrecompiledResources::get_resource($cache_key, 'js');
if ($cached_data != '') {
echo "";
}
}
function generate_custom_js() {
if (essb_is_plugin_deactivated_on()) {
return;
}
$js_code = '';
if (count($this->js_code_head) > 0) {
//$js_code = implode(" ", $this->js_code_head);
$js_code = '';
foreach ($this->js_code_head as $code) {
$js_code .= $code;
}
}
$js_code = apply_filters('essb_js_buffer_head', $js_code);
if ($js_code != '') {
print "\n";
printf('', $js_code);
}
}
function generate_custom_footer_js() {
global $post;
if (essb_is_plugin_deactivated_on()) {
return;
}
$cache_slug = "essb-js-footer";
if (count($this->js_social_apis) > 0) {
if (!essb_is_module_deactivated_on('native')) {
essb_depend_load_function('essb_load_social_api_code', 'lib/core/resource-snippets/essb-rb-socialapi.php');
foreach ($this->js_social_apis as $network => $loaded) {
essb_load_social_api_code($network);
}
}
}
// load of static scripts async or deferred
if (count($this->js_static) > 0) {
if ($this->js_defer || $this->js_async) {
essb_load_static_script($this->js_static, $this->js_async);
}
}
if (count($this->js_static_footer)) {
if ($this->js_defer || $this->js_async) {
essb_load_static_script($this->js_static_footer, $this->js_async);
}
else {
foreach ($this->js_static_footer as $key => $file) {
$this->manual_script_load($key, $file);
}
}
}
if (count($this->js_static_noasync_footer)) {
foreach ($this->js_static_noasync_footer as $key => $file) {
$this->manual_script_load($key, $file);
}
}
if (count($this->js_code_noncachable)) {
echo implode(" ", $this->js_code_noncachable);
}
// dynamic footer javascript that can be cached
$cache_slug = "essb-js-footer";
if (isset($post)) {
if (defined('ESSB3_CACHE_ACTIVE_RESOURCE')) {
$cache_key = $cache_slug.$post->ID;
if (essb_dynamic_cache_load_js($cache_key)) { return; }
}
}
//$js_code = implode(" ", $this->js_code);
$js_code = '';
foreach ($this->js_code as $single) {
$js_code .= $single;
}
$js_code = apply_filters('essb_js_buffer_footer', $js_code);
if (isset($post)) {
if (defined('ESSB3_CACHE_ACTIVE_RESOURCE')) {
$cache_key = $cache_slug.$post->ID;
ESSBDynamicCache::put_resource($cache_key, $js_code, 'js');
essb_dynamic_cache_load_js($cache_key);
return;
}
}
echo '';
}
public function manual_script_load($key, $file) {
$ver_string = "";
if (!empty($this->resource_version)) {
$ver_string = "?ver=".$this->resource_version;
}
essb_manual_script_load($key, $file, $ver_string);
}
}
/** static called functions for resource generation **/
function essb_manual_script_load($key, $file, $ver_string = '') {
echo '';
}
function essb_dynamic_cache_load_css($cache_key = '') {
$cached_data = ESSBDynamicCache::get_resource($cache_key, 'css');
if ($cached_data != '') {
echo "";
return true;
}
else {
return false;
}
}
function essb_dynamic_cache_load_js($cache_key) {
$cached_data = ESSBDynamicCache::get_resource($cache_key, 'js');
if ($cached_data != '') {
echo "";
return true;
}
else {
return false;
}
}
function essb_load_static_script($list, $async) {
$result = '';
$load_mode = ($async) ? "po.async=true;" : "po.defer=true;";
foreach ($list as $key => $file) {
$result .= ('
(function() {
var po = document.createElement(\'script\'); po.type = \'text/javascript\'; '.$load_mode.';
po.src = \''.$file.'\';
var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(po, s);
})();');
}
if ($result != '') {
echo '';
}
}
?>