| Server IP : 37.27.51.148 / Your IP : 216.73.217.84 Web Server : nginx/1.14.1 System : Linux libra 4.18.0-553.51.1.el8_10.x86_64 #1 SMP Wed Apr 30 20:24:04 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.3.31 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/html/wp-content/plugins/luckywp-table-of-contents/front/ |
Upload File : |
<?php
namespace luckywp\tableOfContents\front;
use DOMXPath;
use luckywp\tableOfContents\core\Core;
use luckywp\tableOfContents\core\front\BaseFront;
use luckywp\tableOfContents\core\helpers\ArrayHelper;
use luckywp\tableOfContents\plugin\dom\Dom;
use luckywp\tableOfContents\plugin\PostSettings;
use luckywp\tableOfContents\plugin\Shortcode;
class Front extends BaseFront
{
public $defaultThemeViewsDir = 'luckywp-table-of-contents';
public function init()
{
parent::init();
if (Core::isFront()) {
add_action('wp_enqueue_scripts', [$this, 'registerAssets']);
add_action('init', function () {
if (Core::$plugin->settings->getPostTypesForProcessingHeadings()) {
add_filter('the_content', [$this, 'autoInsert'], 998);
}
});
add_action('wp_footer', [$this, 'overrideColors'], 21);
}
}
private $_assetsRegistred = false;
public function registerAssets()
{
if (!$this->_assetsRegistred) {
wp_register_style('lwptoc-main', Core::$plugin->url . '/front/assets/main.min.css', [], Core::$plugin->version);
wp_register_script('lwptoc-main', Core::$plugin->url . '/front/assets/main.min.js', [], Core::$plugin->version);
$this->_assetsRegistred = true;
}
}
private $_assetsEnqueued = false;
public function enqueueAssets()
{
if (!$this->_assetsEnqueued) {
$this->registerAssets();
if (apply_filters('lwptoc_enqueue_style', true)) {
wp_enqueue_style('lwptoc-main');
}
if (apply_filters('lwptoc_enqueue_script', true)) {
wp_enqueue_script('lwptoc-main');
}
$this->_assetsEnqueued = true;
}
}
public function overrideColors()
{
if (Toc::$overrideColors) {
$styles = [];
$iStyles = [];
if ($color = ArrayHelper::getValue(Toc::$overrideColors, 'backgroundColor')) {
$iStyles[] = 'background-color:' . $color . ';';
}
if ($color = ArrayHelper::getValue(Toc::$overrideColors, 'borderColor')) {
$iStyles[] = 'border:1px solid ' . $color . ';';
}
if ($iStyles) {
$styles[] = '.lwptoc .lwptoc_i{' . implode($iStyles) . '}';
}
if ($color = ArrayHelper::getValue(Toc::$overrideColors, 'titleColor')) {
$styles[] = '.lwptoc_header{color:' . $color . ';}';
}
if ($color = ArrayHelper::getValue(Toc::$overrideColors, 'linkColor')) {
$styles[] = '.lwptoc .lwptoc_i A{color:' . $color . ';}';
}
if ($color = ArrayHelper::getValue(Toc::$overrideColors, 'hoverLinkColor')) {
$styles[] = '.lwptoc .lwptoc_i A:hover,.lwptoc .lwptoc_i A:focus,.lwptoc .lwptoc_i A:active{color:' . $color . ';border-color:' . $color . ';}';
}
if ($color = ArrayHelper::getValue(Toc::$overrideColors, 'visitedLinkColor')) {
$styles[] = '.lwptoc .lwptoc_i A:visited{color:' . $color . ';}';
}
if ($styles) {
echo '<style>' . implode('', $styles) . '</style>';
}
}
}
/**
* @param string $content
* @return string
*/
public function autoInsert($content)
{
global $post;
if (!Shortcode::allow()) {
return $content;
}
if (!in_array($post->post_type, Core::$plugin->settings->getPostTypesForProcessingHeadings())) {
return $content;
}
if (Core::$plugin->shortcode->hasShorcode($content)) {
return $content;
}
if (apply_filters('lwptoc_disable_autoinsert', false)) {
return $content;
}
$settings = new PostSettings($post->ID);
if (!$settings->enabled) {
return $content;
}
$attrs = [];
$attrs['min'] = $settings->min;
$attrs['depth'] = $settings->depth;
$attrs['hierarchical'] = $settings->hierarchical;
$attrs['numeration'] = $settings->numeration;
$attrs['numerationSuffix'] = $settings->numerationSuffix;
$attrs['title'] = $settings->title;
$attrs['toggle'] = $settings->toggle;
$attrs['labelShow'] = $settings->labelShow;
$attrs['labelHide'] = $settings->labelHide;
$attrs['hideItems'] = $settings->hideItems;
$attrs['smoothScroll'] = $settings->smoothScroll;
$attrs['smoothScrollOffset'] = $settings->smoothScrollOffset;
$attrs['width'] = $settings->width;
$attrs['float'] = $settings->float;
$attrs['titleFontSize'] = $settings->titleFontSize;
$attrs['titleFontWeight'] = $settings->titleFontWeight;
$attrs['itemsFontSize'] = $settings->itemsFontSize;
$attrs['colorScheme'] = $settings->colorScheme;
$attrs['backgroundColor'] = $settings->backgroundColor;
$attrs['borderColor'] = $settings->borderColor;
$attrs['titleColor'] = $settings->titleColor;
$attrs['linkColor'] = $settings->linkColor;
$attrs['hoverLinkColor'] = $settings->hoverLinkColor;
$attrs['visitedLinkColor'] = $settings->visitedLinkColor;
$attrs['wrapNoindex'] = $settings->wrapNoindex;
$attrs['useNofollow'] = $settings->useNofollow;
$attrs['skipHeadingLevel'] = $settings->skipHeadingLevel;
$attrs['skipHeadingText'] = $settings->skipHeadingText;
$attrs['containerClass'] = $settings->containerClass;
$shortcode = Core::$plugin->shortcode->make($attrs, true);
$position = $settings->position ? $settings->position : Core::$plugin->settings->autoInsertPosition;
switch ($position) {
case 'beforefirstheading':
case 'afterfirstheading':
default:
$dom = Dom::make($content);
if ($dom === false) {
return $shortcode . $content;
}
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//h1|//h2|//h3|//h4|//h5|//h6');
if (!$nodes->length) {
return $shortcode . $content;
}
if ($position == 'afterfirstheading') {
Dom::afterNodeInsertShortcode($nodes->item(0), $shortcode);
} else {
Dom::beforeNodeInsertShortcode($nodes->item(0), $shortcode);
}
return Dom::getBody($dom);
case 'afterfirstblock':
$dom = Dom::make($content);
if ($dom === false) {
return $shortcode . $content;
}
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//h1|//h2|//h3|//h4|//h5|//h6|//p');
if (!$nodes->length) {
return $shortcode . $content;
}
Dom::afterNodeInsertShortcode($nodes->item(0), $shortcode);
return Dom::getBody($dom);
case 'bottom':
return $content . $shortcode;
case 'top':
return $shortcode . $content;
}
}
}