/** * Renders and caches the JavaScript for a builder layout. * * @since 1.0 * @return void */ public static function render_js() { // Delete the old file. FLBuilderModel::delete_asset_cache('js'); // Get info on the new file. $nodes = FLBuilderModel::get_categorized_nodes(); $global_settings = FLBuilderModel::get_global_settings(); $rows = FLBuilderModel::get_nodes('row'); $asset_info = FLBuilderModel::get_asset_info(); $compiled = array(); $js = ''; // Layout config object. ob_start(); include FL_BUILDER_DIR . 'includes/layout-js-config.php'; $js .= ob_get_clean(); // Main JS $js .= file_get_contents(FL_BUILDER_DIR . 'js/fl-builder-layout.js'); // Loop through the rows. foreach ($nodes['rows'] as $row) { // Setup row vars $settings = $row->settings; $id = $row->node; // Include the row instance JS ob_start(); include FL_BUILDER_DIR . 'includes/row-js.php'; $js .= ob_get_clean(); } // Loop through the modules. foreach ($nodes['modules'] as $module) { // Global module JS $file = $module->dir . 'js/frontend.js'; if (file_exists($file) && !in_array($module->settings->type, $compiled)) { $js .= "\n" . file_get_contents($file); $compiled[] = $module->settings->type; } // Instance module JS $file = $module->dir . 'includes/frontend.js.php'; $settings = $module->settings; $id = $module->node; if (file_exists($file)) { ob_start(); include $file; $js .= ob_get_clean(); } } // Add the path legacy vars (FLBuilderLayoutConfig.paths should be used instead). $js .= "var wpAjaxUrl = '" . admin_url('admin-ajax.php') . "';"; $js .= "var flBuilderUrl = '" . FL_BUILDER_URL . "';"; // Call the FLBuilder._renderLayoutComplete method if we're currently editing. if (stristr($asset_info['js'], '-draft.js') || stristr($asset_info['js'], '-preview.js')) { $js .= "; if(typeof FLBuilder !== 'undefined' && typeof FLBuilder._renderLayoutComplete !== 'undefined') FLBuilder._renderLayoutComplete();"; } // Include FLJSMin if (!class_exists('FLJSMin')) { include FL_BUILDER_DIR . 'classes/class-fl-jsmin.php'; } // Save the js if (!empty($js)) { file_put_contents($asset_info['js'], FLJSMin::minify($js)); } }
/** * Checks to see if all modules in a node support partial refresh. * * @since 1.7 * @access private * @param object $node The node to check. * @return bool */ private static function node_modules_support_partial_refresh($node) { $nodes = FLBuilderModel::get_categorized_nodes(); if ('row' == $node->type) { $template_post_id = FLBuilderModel::is_node_global($node); foreach ($nodes['groups'] as $group) { if ($node->node == $group->parent || $template_post_id && $node->template_node_id == $group->parent) { foreach ($nodes['columns'] as $column) { if ($group->node == $column->parent) { foreach ($nodes['modules'] as $module) { if ($column->node == $module->parent) { if (!$module->partial_refresh) { return false; } } } } } } } } else { if ('column-group' == $node->type) { foreach ($nodes['columns'] as $column) { if ($node->node == $column->parent) { foreach ($nodes['modules'] as $module) { if ($column->node == $module->parent) { if (!$module->partial_refresh) { return false; } } } } } } else { if ('column' == $node->type) { foreach ($nodes['modules'] as $module) { if ($node->node == $module->parent) { if (!$module->partial_refresh) { return false; } } } } } } return true; }
/** * Renders the JavaScript for all modules in a single column. * * @since 1.7 * @param string|object $col_id A column ID or object. * @return string */ public static function render_column_modules_js($col_id) { $col = is_object($col_id) ? $col_id : FLBuilderModel::get_node($col_id); $nodes = FLBuilderModel::get_categorized_nodes(); $compiled = array(); $js = ''; // Render the JS. foreach ($nodes['modules'] as $module) { if ($col->node == $module->parent) { $js .= self::render_module_js($module, $compiled); } } // Return the JS. return $js; }