Plugin Directory

Changeset 2915284


Ignore:
Timestamp:
05/20/2023 10:09:10 PM (3 years ago)
Author:
poweredcache
Message:

Update to version 3.0.2 from GitHub

Location:
powered-cache
Files:
44 added
88 edited
1 copied

Legend:

Unmodified
Added
Removed
  • powered-cache/tags/3.0.2/includes/classes/Config.php

    r2912480 r2915284  
    587587         */
    588588        if ( apply_filters( 'powered_cache_browser_cache', true ) ) {
    589             $contents .= 'location ~* .(jpg|jpeg|png|gif|ico|css|js|svg|eot|woff|woff2|ttf|otf)$ {' . PHP_EOL;
     589            $contents .= 'location ~* .(js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg|webp|avif)$ {' . PHP_EOL;
    590590            $contents .= '  expires 6M;' . PHP_EOL;
    591591            $contents .= '}' . PHP_EOL . PHP_EOL;
     
    606606
    607607        $contents .= '# Don\'t use the cache for rejected agents' . PHP_EOL;
    608         $contents .= 'if ($http_user_agent ~* "(' . implode( '|', $rejected_user_agents ) . '")) {' . PHP_EOL;
     608        $contents .= 'if ($http_user_agent ~* "(' . implode( '|', $rejected_user_agents ) . ')") {' . PHP_EOL;
    609609        $contents .= '  set $cache_uri \'null cache\';' . PHP_EOL;
    610610        $contents .= '}' . PHP_EOL . PHP_EOL;
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/CssSelectorConverter.php

    r2912480 r2915284  
    2727class CssSelectorConverter
    2828{
    29     private Translator $translator;
    30     private array $cache;
     29    private $translator;
     30    private $cache;
    3131
    32     private static array $xmlCache = [];
    33     private static array $htmlCache = [];
     32    private static $xmlCache = [];
     33    private static $htmlCache = [];
    3434
    3535    /**
     
    6060     * Optionally, a prefix can be added to the resulting XPath
    6161     * expression with the $prefix parameter.
     62     *
     63     * @return string
    6264     */
    63     public function toXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string
     65    public function toXPath(string $cssExpr, string $prefix = 'descendant-or-self::')
    6466    {
    65         return $this->cache[$prefix][$cssExpr] ??= $this->translator->cssToXPath($cssExpr, $prefix);
     67        return $this->cache[$prefix][$cssExpr] ?? $this->cache[$prefix][$cssExpr] = $this->translator->cssToXPath($cssExpr, $prefix);
    6668    }
    6769}
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php

    r2912480 r2915284  
    2424class SyntaxErrorException extends ParseException
    2525{
    26     public static function unexpectedToken(string $expectedValue, Token $foundToken): self
     26    /**
     27     * @return self
     28     */
     29    public static function unexpectedToken(string $expectedValue, Token $foundToken)
    2730    {
    2831        return new self(sprintf('Expected %s, but %s found.', $expectedValue, $foundToken));
    2932    }
    3033
    31     public static function pseudoElementFound(string $pseudoElement, string $unexpectedLocation): self
     34    /**
     35     * @return self
     36     */
     37    public static function pseudoElementFound(string $pseudoElement, string $unexpectedLocation)
    3238    {
    3339        return new self(sprintf('Unexpected pseudo-element "::%s" found %s.', $pseudoElement, $unexpectedLocation));
    3440    }
    3541
    36     public static function unclosedString(int $position): self
     42    /**
     43     * @return self
     44     */
     45    public static function unclosedString(int $position)
    3746    {
    3847        return new self(sprintf('Unclosed/invalid string at %s.', $position));
    3948    }
    4049
    41     public static function nestedNot(): self
     50    /**
     51     * @return self
     52     */
     53    public static function nestedNot()
    4254    {
    4355        return new self('Got nested ::not().');
    4456    }
    4557
    46     public static function stringAsFunctionArgument(): self
     58    /**
     59     * @return self
     60     */
     61    public static function stringAsFunctionArgument()
    4762    {
    4863        return new self('String not allowed as function argument.');
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/AbstractNode.php

    r2912480 r2915284  
    2424abstract class AbstractNode implements NodeInterface
    2525{
    26     private string $nodeName;
     26    /**
     27     * @var string
     28     */
     29    private $nodeName;
    2730
    2831    public function getNodeName(): string
    2932    {
    30         return $this->nodeName ??= preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class);
     33        if (null === $this->nodeName) {
     34            $this->nodeName = preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class);
     35        }
     36
     37        return $this->nodeName;
    3138    }
    3239}
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/AttributeNode.php

    r2912480 r2915284  
    2424class AttributeNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private ?string $namespace;
    28     private string $attribute;
    29     private string $operator;
    30     private ?string $value;
     26    private $selector;
     27    private $namespace;
     28    private $attribute;
     29    private $operator;
     30    private $value;
    3131
    3232    public function __construct(NodeInterface $selector, ?string $namespace, string $attribute, string $operator, ?string $value)
     
    6464    }
    6565
     66    /**
     67     * {@inheritdoc}
     68     */
    6669    public function getSpecificity(): Specificity
    6770    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/ClassNode.php

    r2912480 r2915284  
    2424class ClassNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private string $name;
     26    private $selector;
     27    private $name;
    2828
    2929    public function __construct(NodeInterface $selector, string $name)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/CombinedSelectorNode.php

    r2912480 r2915284  
    2424class CombinedSelectorNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private string $combinator;
    28     private NodeInterface $subSelector;
     26    private $selector;
     27    private $combinator;
     28    private $subSelector;
    2929
    3030    public function __construct(NodeInterface $selector, string $combinator, NodeInterface $subSelector)
     
    5050    }
    5151
     52    /**
     53     * {@inheritdoc}
     54     */
    5255    public function getSpecificity(): Specificity
    5356    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/ElementNode.php

    r2912480 r2915284  
    2424class ElementNode extends AbstractNode
    2525{
    26     private ?string $namespace;
    27     private ?string $element;
     26    private $namespace;
     27    private $element;
    2828
    2929    public function __construct(string $namespace = null, string $element = null)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/FunctionNode.php

    r2912480 r2915284  
    2626class FunctionNode extends AbstractNode
    2727{
    28     private NodeInterface $selector;
    29     private string $name;
    30     private array $arguments;
     28    private $selector;
     29    private $name;
     30    private $arguments;
    3131
    3232    /**
     
    5858    }
    5959
     60    /**
     61     * {@inheritdoc}
     62     */
    6063    public function getSpecificity(): Specificity
    6164    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/HashNode.php

    r2912480 r2915284  
    2424class HashNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private string $id;
     26    private $selector;
     27    private $id;
    2828
    2929    public function __construct(NodeInterface $selector, string $id)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/NegationNode.php

    r2912480 r2915284  
    2424class NegationNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private NodeInterface $subSelector;
     26    private $selector;
     27    private $subSelector;
    2828
    2929    public function __construct(NodeInterface $selector, NodeInterface $subSelector)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/PseudoNode.php

    r2912480 r2915284  
    2424class PseudoNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private string $identifier;
     26    private $selector;
     27    private $identifier;
    2828
    2929    public function __construct(NodeInterface $selector, string $identifier)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/SelectorNode.php

    r2912480 r2915284  
    2424class SelectorNode extends AbstractNode
    2525{
    26     private NodeInterface $tree;
    27     private ?string $pseudoElement;
     26    private $tree;
     27    private $pseudoElement;
    2828
    2929    public function __construct(NodeInterface $tree, string $pseudoElement = null)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/Specificity.php

    r2912480 r2915284  
    3030    public const C_FACTOR = 1;
    3131
    32     private int $a;
    33     private int $b;
    34     private int $c;
     32    private $a;
     33    private $b;
     34    private $c;
    3535
    3636    public function __construct(int $a, int $b, int $c)
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/CommentHandler.php

    r2912480 r2915284  
    2727class CommentHandler implements HandlerInterface
    2828{
     29    /**
     30     * {@inheritdoc}
     31     */
    2932    public function handle(Reader $reader, TokenStream $stream): bool
    3033    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/HashHandler.php

    r2912480 r2915284  
    3030class HashHandler implements HandlerInterface
    3131{
    32     private TokenizerPatterns $patterns;
    33     private TokenizerEscaping $escaping;
     32    private $patterns;
     33    private $escaping;
    3434
    3535    public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping)
     
    3939    }
    4040
     41    /**
     42     * {@inheritdoc}
     43     */
    4144    public function handle(Reader $reader, TokenStream $stream): bool
    4245    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/IdentifierHandler.php

    r2912480 r2915284  
    3030class IdentifierHandler implements HandlerInterface
    3131{
    32     private TokenizerPatterns $patterns;
    33     private TokenizerEscaping $escaping;
     32    private $patterns;
     33    private $escaping;
    3434
    3535    public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping)
     
    3939    }
    4040
     41    /**
     42     * {@inheritdoc}
     43     */
    4144    public function handle(Reader $reader, TokenStream $stream): bool
    4245    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/NumberHandler.php

    r2912480 r2915284  
    2929class NumberHandler implements HandlerInterface
    3030{
    31     private TokenizerPatterns $patterns;
     31    private $patterns;
    3232
    3333    public function __construct(TokenizerPatterns $patterns)
     
    3636    }
    3737
     38    /**
     39     * {@inheritdoc}
     40     */
    3841    public function handle(Reader $reader, TokenStream $stream): bool
    3942    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/StringHandler.php

    r2912480 r2915284  
    3232class StringHandler implements HandlerInterface
    3333{
    34     private TokenizerPatterns $patterns;
    35     private TokenizerEscaping $escaping;
     34    private $patterns;
     35    private $escaping;
    3636
    3737    public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping)
     
    4141    }
    4242
     43    /**
     44     * {@inheritdoc}
     45     */
    4346    public function handle(Reader $reader, TokenStream $stream): bool
    4447    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/WhitespaceHandler.php

    r2912480 r2915284  
    2828class WhitespaceHandler implements HandlerInterface
    2929{
     30    /**
     31     * {@inheritdoc}
     32     */
    3033    public function handle(Reader $reader, TokenStream $stream): bool
    3134    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Parser.php

    r2912480 r2915284  
    2828class Parser implements ParserInterface
    2929{
    30     private Tokenizer $tokenizer;
     30    private $tokenizer;
    3131
    3232    public function __construct(Tokenizer $tokenizer = null)
     
    3535    }
    3636
     37    /**
     38     * {@inheritdoc}
     39     */
    3740    public function parse(string $source): array
    3841    {
     
    240243                    }
    241244
    242                     if (!$arguments) {
     245                    if (empty($arguments)) {
    243246                        throw SyntaxErrorException::unexpectedToken('at least one argument', $next);
    244247                    }
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Reader.php

    r2912480 r2915284  
    2424class Reader
    2525{
    26     private string $source;
    27     private int $length;
    28     private int $position = 0;
     26    private $source;
     27    private $length;
     28    private $position = 0;
    2929
    3030    public function __construct(string $source)
     
    6161    }
    6262
    63     public function findPattern(string $pattern): array|false
     63    /**
     64     * @return array|false
     65     */
     66    public function findPattern(string $pattern)
    6467    {
    6568        $source = substr($this->source, $this->position);
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Shortcut/ClassParser.php

    r2912480 r2915284  
    2929class ClassParser implements ParserInterface
    3030{
     31    /**
     32     * {@inheritdoc}
     33     */
    3134    public function parse(string $source): array
    3235    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Shortcut/ElementParser.php

    r2912480 r2915284  
    2828class ElementParser implements ParserInterface
    2929{
     30    /**
     31     * {@inheritdoc}
     32     */
    3033    public function parse(string $source): array
    3134    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Shortcut/EmptyStringParser.php

    r2912480 r2915284  
    3232class EmptyStringParser implements ParserInterface
    3333{
     34    /**
     35     * {@inheritdoc}
     36     */
    3437    public function parse(string $source): array
    3538    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Shortcut/HashParser.php

    r2912480 r2915284  
    2929class HashParser implements ParserInterface
    3030{
     31    /**
     32     * {@inheritdoc}
     33     */
    3134    public function parse(string $source): array
    3235    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Token.php

    r2912480 r2915284  
    3232    public const TYPE_STRING = 'string';
    3333
    34     private ?string $type;
    35     private ?string $value;
    36     private ?int $position;
     34    private $type;
     35    private $value;
     36    private $position;
    3737
    3838    public function __construct(?string $type, ?string $value, ?int $position)
     
    6969        }
    7070
    71         if (!$values) {
     71        if (empty($values)) {
    7272            return true;
    7373        }
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/TokenStream.php

    r2912480 r2915284  
    3030     * @var Token[]
    3131     */
    32     private array $tokens = [];
     32    private $tokens = [];
    3333
    3434    /**
    3535     * @var Token[]
    3636     */
    37     private array $used = [];
     37    private $used = [];
    3838
    39     private int $cursor = 0;
    40     private ?Token $peeked;
    41     private bool $peeking = false;
     39    /**
     40     * @var int
     41     */
     42    private $cursor = 0;
     43
     44    /**
     45     * @var Token|null
     46     */
     47    private $peeked;
     48
     49    /**
     50     * @var bool
     51     */
     52    private $peeking = false;
    4253
    4354    /**
     
    4657     * @return $this
    4758     */
    48     public function push(Token $token): static
     59    public function push(Token $token): self
    4960    {
    5061        $this->tokens[] = $token;
     
    5869     * @return $this
    5970     */
    60     public function freeze(): static
     71    public function freeze(): self
    6172    {
    6273        return $this;
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Tokenizer/Tokenizer.php

    r2912480 r2915284  
    3232     * @var Handler\HandlerInterface[]
    3333     */
    34     private array $handlers;
     34    private $handlers;
    3535
    3636    public function __construct()
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerEscaping.php

    r2912480 r2915284  
    2424class TokenizerEscaping
    2525{
    26     private TokenizerPatterns $patterns;
     26    private $patterns;
    2727
    2828    public function __construct(TokenizerPatterns $patterns)
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerPatterns.php

    r2912480 r2915284  
    2424class TokenizerPatterns
    2525{
    26     private string $unicodeEscapePattern;
    27     private string $simpleEscapePattern;
    28     private string $newLineEscapePattern;
    29     private string $escapePattern;
    30     private string $stringEscapePattern;
    31     private string $nonAsciiPattern;
    32     private string $nmCharPattern;
    33     private string $nmStartPattern;
    34     private string $identifierPattern;
    35     private string $hashPattern;
    36     private string $numberPattern;
    37     private string $quotedStringPattern;
     26    private $unicodeEscapePattern;
     27    private $simpleEscapePattern;
     28    private $newLineEscapePattern;
     29    private $escapePattern;
     30    private $stringEscapePattern;
     31    private $nonAsciiPattern;
     32    private $nmCharPattern;
     33    private $nmStartPattern;
     34    private $identifierPattern;
     35    private $hashPattern;
     36    private $numberPattern;
     37    private $quotedStringPattern;
    3838
    3939    public function __construct()
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/AbstractExtension.php

    r2912480 r2915284  
    2424abstract class AbstractExtension implements ExtensionInterface
    2525{
     26    /**
     27     * {@inheritdoc}
     28     */
    2629    public function getNodeTranslators(): array
    2730    {
     
    2932    }
    3033
     34    /**
     35     * {@inheritdoc}
     36     */
    3137    public function getCombinationTranslators(): array
    3238    {
     
    3440    }
    3541
     42    /**
     43     * {@inheritdoc}
     44     */
    3645    public function getFunctionTranslators(): array
    3746    {
     
    3948    }
    4049
     50    /**
     51     * {@inheritdoc}
     52     */
    4153    public function getPseudoClassTranslators(): array
    4254    {
     
    4456    }
    4557
     58    /**
     59     * {@inheritdoc}
     60     */
    4661    public function getAttributeMatchingTranslators(): array
    4762    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php

    r2912480 r2915284  
    2727class AttributeMatchingExtension extends AbstractExtension
    2828{
     29    /**
     30     * {@inheritdoc}
     31     */
    2932    public function getAttributeMatchingTranslators(): array
    3033    {
    3134        return [
    32             'exists' => $this->translateExists(...),
    33             '=' => $this->translateEquals(...),
    34             '~=' => $this->translateIncludes(...),
    35             '|=' => $this->translateDashMatch(...),
    36             '^=' => $this->translatePrefixMatch(...),
    37             '$=' => $this->translateSuffixMatch(...),
    38             '*=' => $this->translateSubstringMatch(...),
    39             '!=' => $this->translateDifferent(...),
     35            'exists' => [$this, 'translateExists'],
     36            '=' => [$this, 'translateEquals'],
     37            '~=' => [$this, 'translateIncludes'],
     38            '|=' => [$this, 'translateDashMatch'],
     39            '^=' => [$this, 'translatePrefixMatch'],
     40            '$=' => [$this, 'translateSuffixMatch'],
     41            '*=' => [$this, 'translateSubstringMatch'],
     42            '!=' => [$this, 'translateDifferent'],
    4043        ];
    4144    }
     
    107110    }
    108111
     112    /**
     113     * {@inheritdoc}
     114     */
    109115    public function getName(): string
    110116    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/CombinationExtension.php

    r2912480 r2915284  
    2626class CombinationExtension extends AbstractExtension
    2727{
     28    /**
     29     * {@inheritdoc}
     30     */
    2831    public function getCombinationTranslators(): array
    2932    {
    3033        return [
    31             ' ' => $this->translateDescendant(...),
    32             '>' => $this->translateChild(...),
    33             '+' => $this->translateDirectAdjacent(...),
    34             '~' => $this->translateIndirectAdjacent(...),
     34            ' ' => [$this, 'translateDescendant'],
     35            '>' => [$this, 'translateChild'],
     36            '+' => [$this, 'translateDirectAdjacent'],
     37            '~' => [$this, 'translateIndirectAdjacent'],
    3538        ];
    3639    }
     
    5962    }
    6063
     64    /**
     65     * {@inheritdoc}
     66     */
    6167    public function getName(): string
    6268    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php

    r2912480 r2915284  
    3131class FunctionExtension extends AbstractExtension
    3232{
     33    /**
     34     * {@inheritdoc}
     35     */
    3336    public function getFunctionTranslators(): array
    3437    {
    3538        return [
    36             'nth-child' => $this->translateNthChild(...),
    37             'nth-last-child' => $this->translateNthLastChild(...),
    38             'nth-of-type' => $this->translateNthOfType(...),
    39             'nth-last-of-type' => $this->translateNthLastOfType(...),
    40             'contains' => $this->translateContains(...),
    41             'lang' => $this->translateLang(...),
     39            'nth-child' => [$this, 'translateNthChild'],
     40            'nth-last-child' => [$this, 'translateNthLastChild'],
     41            'nth-of-type' => [$this, 'translateNthOfType'],
     42            'nth-last-of-type' => [$this, 'translateNthLastOfType'],
     43            'contains' => [$this, 'translateContains'],
     44            'lang' => [$this, 'translateLang'],
    4245        ];
    4346    }
     
    159162    }
    160163
     164    /**
     165     * {@inheritdoc}
     166     */
    161167    public function getName(): string
    162168    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php

    r2912480 r2915284  
    3737    }
    3838
     39    /**
     40     * {@inheritdoc}
     41     */
    3942    public function getPseudoClassTranslators(): array
    4043    {
    4144        return [
    42             'checked' => $this->translateChecked(...),
    43             'link' => $this->translateLink(...),
    44             'disabled' => $this->translateDisabled(...),
    45             'enabled' => $this->translateEnabled(...),
    46             'selected' => $this->translateSelected(...),
    47             'invalid' => $this->translateInvalid(...),
    48             'hover' => $this->translateHover(...),
    49             'visited' => $this->translateVisited(...),
     45            'checked' => [$this, 'translateChecked'],
     46            'link' => [$this, 'translateLink'],
     47            'disabled' => [$this, 'translateDisabled'],
     48            'enabled' => [$this, 'translateEnabled'],
     49            'selected' => [$this, 'translateSelected'],
     50            'invalid' => [$this, 'translateInvalid'],
     51            'hover' => [$this, 'translateHover'],
     52            'visited' => [$this, 'translateVisited'],
    5053        ];
    5154    }
    5255
     56    /**
     57     * {@inheritdoc}
     58     */
    5359    public function getFunctionTranslators(): array
    5460    {
    5561        return [
    56             'lang' => $this->translateLang(...),
     62            'lang' => [$this, 'translateLang'],
    5763        ];
    5864    }
     
    172178    }
    173179
     180    /**
     181     * {@inheritdoc}
     182     */
    174183    public function getName(): string
    175184    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php

    r2912480 r2915284  
    3232    public const ATTRIBUTE_VALUE_IN_LOWER_CASE = 4;
    3333
    34     private int $flags;
     34    private $flags;
    3535
    3636    public function __construct(int $flags = 0)
     
    4242     * @return $this
    4343     */
    44     public function setFlag(int $flag, bool $on): static
     44    public function setFlag(int $flag, bool $on): self
    4545    {
    4646        if ($on && !$this->hasFlag($flag)) {
     
    6060    }
    6161
     62    /**
     63     * {@inheritdoc}
     64     */
    6265    public function getNodeTranslators(): array
    6366    {
    6467        return [
    65             'Selector' => $this->translateSelector(...),
    66             'CombinedSelector' => $this->translateCombinedSelector(...),
    67             'Negation' => $this->translateNegation(...),
    68             'Function' => $this->translateFunction(...),
    69             'Pseudo' => $this->translatePseudo(...),
    70             'Attribute' => $this->translateAttribute(...),
    71             'Class' => $this->translateClass(...),
    72             'Hash' => $this->translateHash(...),
    73             'Element' => $this->translateElement(...),
     68            'Selector' => [$this, 'translateSelector'],
     69            'CombinedSelector' => [$this, 'translateCombinedSelector'],
     70            'Negation' => [$this, 'translateNegation'],
     71            'Function' => [$this, 'translateFunction'],
     72            'Pseudo' => [$this, 'translatePseudo'],
     73            'Powered_Cache_Attribute' => [$this, 'translateAttribute'],
     74            'Class' => [$this, 'translateClass'],
     75            'Hash' => [$this, 'translateHash'],
     76            'Element' => [$this, 'translateElement'],
    7477        ];
    7578    }
     
    180183    }
    181184
     185    /**
     186     * {@inheritdoc}
     187     */
    182188    public function getName(): string
    183189    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php

    r2912480 r2915284  
    2727class PseudoClassExtension extends AbstractExtension
    2828{
     29    /**
     30     * {@inheritdoc}
     31     */
    2932    public function getPseudoClassTranslators(): array
    3033    {
    3134        return [
    32             'root' => $this->translateRoot(...),
    33             'first-child' => $this->translateFirstChild(...),
    34             'last-child' => $this->translateLastChild(...),
    35             'first-of-type' => $this->translateFirstOfType(...),
    36             'last-of-type' => $this->translateLastOfType(...),
    37             'only-child' => $this->translateOnlyChild(...),
    38             'only-of-type' => $this->translateOnlyOfType(...),
    39             'empty' => $this->translateEmpty(...),
     35            'root' => [$this, 'translateRoot'],
     36            'first-child' => [$this, 'translateFirstChild'],
     37            'last-child' => [$this, 'translateLastChild'],
     38            'first-of-type' => [$this, 'translateFirstOfType'],
     39            'last-of-type' => [$this, 'translateLastOfType'],
     40            'only-child' => [$this, 'translateOnlyChild'],
     41            'only-of-type' => [$this, 'translateOnlyOfType'],
     42            'empty' => [$this, 'translateEmpty'],
    4043        ];
    4144    }
     
    110113    }
    111114
     115    /**
     116     * {@inheritdoc}
     117     */
    112118    public function getName(): string
    113119    {
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Translator.php

    r2912480 r2915284  
    3131class Translator implements TranslatorInterface
    3232{
    33     private ParserInterface $mainParser;
     33    private $mainParser;
    3434
    3535    /**
    3636     * @var ParserInterface[]
    3737     */
    38     private array $shortcutParsers = [];
     38    private $shortcutParsers = [];
    3939
    4040    /**
    4141     * @var Extension\ExtensionInterface[]
    4242     */
    43     private array $extensions = [];
    44 
    45     private array $nodeTranslators = [];
    46     private array $combinationTranslators = [];
    47     private array $functionTranslators = [];
    48     private array $pseudoClassTranslators = [];
    49     private array $attributeMatchingTranslators = [];
     43    private $extensions = [];
     44
     45    private $nodeTranslators = [];
     46    private $combinationTranslators = [];
     47    private $functionTranslators = [];
     48    private $pseudoClassTranslators = [];
     49    private $attributeMatchingTranslators = [];
    5050
    5151    public function __construct(ParserInterface $parser = null)
     
    8888    }
    8989
     90    /**
     91     * {@inheritdoc}
     92     */
    9093    public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string
    9194    {
     
    104107    }
    105108
     109    /**
     110     * {@inheritdoc}
     111     */
    106112    public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string
    107113    {
     
    112118     * @return $this
    113119     */
    114     public function registerExtension(Extension\ExtensionInterface $extension): static
     120    public function registerExtension(Extension\ExtensionInterface $extension): self
    115121    {
    116122        $this->extensions[$extension->getName()] = $extension;
     
    140146     * @return $this
    141147     */
    142     public function registerParserShortcut(ParserInterface $shortcut): static
     148    public function registerParserShortcut(ParserInterface $shortcut): self
    143149    {
    144150        $this->shortcutParsers[] = $shortcut;
     
    201207    {
    202208        if (!isset($this->attributeMatchingTranslators[$operator])) {
    203             throw new ExpressionErrorException(sprintf('Attribute matcher operator "%s" not supported.', $operator));
     209            throw new ExpressionErrorException(sprintf('Powered_Cache_Attribute matcher operator "%s" not supported.', $operator));
    204210        }
    205211
     
    215221            $tokens = $shortcut->parse($css);
    216222
    217             if ($tokens) {
     223            if (!empty($tokens)) {
    218224                return $tokens;
    219225            }
  • powered-cache/tags/3.0.2/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/XPathExpr.php

    r2912480 r2915284  
    2424class XPathExpr
    2525{
    26     private string $path;
    27     private string $element;
    28     private string $condition;
     26    private $path;
     27    private $element;
     28    private $condition;
    2929
    3030    public function __construct(string $path = '', string $element = '*', string $condition = '', bool $starPrefix = false)
     
    4747     * @return $this
    4848     */
    49     public function addCondition(string $condition): static
     49    public function addCondition(string $condition): self
    5050    {
    5151        $this->condition = $this->condition ? sprintf('(%s) and (%s)', $this->condition, $condition) : $condition;
     
    6262     * @return $this
    6363     */
    64     public function addNameTest(): static
     64    public function addNameTest(): self
    6565    {
    6666        if ('*' !== $this->element) {
     
    7575     * @return $this
    7676     */
    77     public function addStarPrefix(): static
     77    public function addStarPrefix(): self
    7878    {
    7979        $this->path .= '*/';
     
    8787     * @return $this
    8888     */
    89     public function join(string $combiner, self $expr): static
     89    public function join(string $combiner, self $expr): self
    9090    {
    9191        $path = $this->__toString().$combiner;
  • powered-cache/tags/3.0.2/includes/dropins/page-cache.php

    r2912480 r2915284  
    445445
    446446        header( 'X-Powered-Cache: PHP' );
     447        header( 'X-Cache-Enabled: true' );
     448        header( sprintf( "age: %d",  time() - filemtime( $file_path ) ) );
    447449
    448450        if ( function_exists( 'gzencode' ) && $GLOBALS['powered_cache_options']['gzip_compression'] ) {
     
    565567        parse_str( $_SERVER['QUERY_STRING'], $query_string );
    566568        $qs_variable = '';
     569        sort( $powered_cache_cache_query_strings );
    567570        foreach ( $powered_cache_cache_query_strings as $query_parameter ) {
    568571            if ( isset( $query_string[ $query_parameter ] ) ) {
     572                $qs_variable .= '_' . $query_parameter;
    569573                $qs_variable .= is_array( $query_string[ $query_parameter ] ) ? implode( '|', $query_string[ $query_parameter ] ) : $query_string[ $query_parameter ];
    570574            }
  • powered-cache/tags/3.0.2/languages/powered-cache.pot

    r2912697 r2915284  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Powered Cache 3.0.1\n"
     5"Project-Id-Version: Powered Cache 3.0.2\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/powered-cache\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2023-05-15T21:57:14+00:00\n"
     12"POT-Creation-Date: 2023-05-20T22:04:42+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.7.1\n"
  • powered-cache/tags/3.0.2/powered-cache.php

    r2912697 r2915284  
    44 * Plugin URI:        https://poweredcache.com
    55 * Description:       Powered Cache is the most powerful caching and performance suite for WordPress, designed to easily improve your PageSpeed and Web Vitals Score.
    6  * Version:           3.0.1
     6 * Version:           3.0.2
    77 * Requires at least: 5.7
    8  * Requires PHP:      7.2
     8 * Requires PHP:      7.2.5
    99 * Author:            Powered Cache
    1010 * Author URI:        https://poweredcache.com
     
    2626
    2727// Useful global constants.
    28 define( 'POWERED_CACHE_VERSION', '3.0.1' );
     28define( 'POWERED_CACHE_VERSION', '3.0.2' );
    2929define( 'POWERED_CACHE_DB_VERSION', '3.0' );
    3030define( 'POWERED_CACHE_PLUGIN_FILE', __FILE__ );
  • powered-cache/tags/3.0.2/readme.txt

    r2912697 r2915284  
    44Requires at least:  5.7
    55Tested up to:  6.2
    6 Stable tag:  3.0.1
     6Stable tag:  3.0.2
    77License: GPLv2 (or later)
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
    99Donate link: https://poweredcache.com/donate/
    10 Requires PHP: 7.2
     10Requires PHP: 7.2.5
    1111
    1212The most powerful caching and performance suite for WordPress. Easily Improve PageSpeed & Web Vitals Score.
     
    170170
    171171== Changelog ==
     172
     173= 3.0.2 (May 21, 2023) =
     174- Fix: Html Minification error below PHP 8.1
     175- Added: x-cache-enabled and age headers
     176- Added: sorting for cache query strings
     177- nginx configuration tweaking
    172178
    173179= 3.0.1 (May 16, 2023) =
  • powered-cache/trunk/includes/classes/Config.php

    r2912480 r2915284  
    587587         */
    588588        if ( apply_filters( 'powered_cache_browser_cache', true ) ) {
    589             $contents .= 'location ~* .(jpg|jpeg|png|gif|ico|css|js|svg|eot|woff|woff2|ttf|otf)$ {' . PHP_EOL;
     589            $contents .= 'location ~* .(js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg|webp|avif)$ {' . PHP_EOL;
    590590            $contents .= '  expires 6M;' . PHP_EOL;
    591591            $contents .= '}' . PHP_EOL . PHP_EOL;
     
    606606
    607607        $contents .= '# Don\'t use the cache for rejected agents' . PHP_EOL;
    608         $contents .= 'if ($http_user_agent ~* "(' . implode( '|', $rejected_user_agents ) . '")) {' . PHP_EOL;
     608        $contents .= 'if ($http_user_agent ~* "(' . implode( '|', $rejected_user_agents ) . ')") {' . PHP_EOL;
    609609        $contents .= '  set $cache_uri \'null cache\';' . PHP_EOL;
    610610        $contents .= '}' . PHP_EOL . PHP_EOL;
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/CssSelectorConverter.php

    r2912480 r2915284  
    2727class CssSelectorConverter
    2828{
    29     private Translator $translator;
    30     private array $cache;
     29    private $translator;
     30    private $cache;
    3131
    32     private static array $xmlCache = [];
    33     private static array $htmlCache = [];
     32    private static $xmlCache = [];
     33    private static $htmlCache = [];
    3434
    3535    /**
     
    6060     * Optionally, a prefix can be added to the resulting XPath
    6161     * expression with the $prefix parameter.
     62     *
     63     * @return string
    6264     */
    63     public function toXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string
     65    public function toXPath(string $cssExpr, string $prefix = 'descendant-or-self::')
    6466    {
    65         return $this->cache[$prefix][$cssExpr] ??= $this->translator->cssToXPath($cssExpr, $prefix);
     67        return $this->cache[$prefix][$cssExpr] ?? $this->cache[$prefix][$cssExpr] = $this->translator->cssToXPath($cssExpr, $prefix);
    6668    }
    6769}
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php

    r2912480 r2915284  
    2424class SyntaxErrorException extends ParseException
    2525{
    26     public static function unexpectedToken(string $expectedValue, Token $foundToken): self
     26    /**
     27     * @return self
     28     */
     29    public static function unexpectedToken(string $expectedValue, Token $foundToken)
    2730    {
    2831        return new self(sprintf('Expected %s, but %s found.', $expectedValue, $foundToken));
    2932    }
    3033
    31     public static function pseudoElementFound(string $pseudoElement, string $unexpectedLocation): self
     34    /**
     35     * @return self
     36     */
     37    public static function pseudoElementFound(string $pseudoElement, string $unexpectedLocation)
    3238    {
    3339        return new self(sprintf('Unexpected pseudo-element "::%s" found %s.', $pseudoElement, $unexpectedLocation));
    3440    }
    3541
    36     public static function unclosedString(int $position): self
     42    /**
     43     * @return self
     44     */
     45    public static function unclosedString(int $position)
    3746    {
    3847        return new self(sprintf('Unclosed/invalid string at %s.', $position));
    3948    }
    4049
    41     public static function nestedNot(): self
     50    /**
     51     * @return self
     52     */
     53    public static function nestedNot()
    4254    {
    4355        return new self('Got nested ::not().');
    4456    }
    4557
    46     public static function stringAsFunctionArgument(): self
     58    /**
     59     * @return self
     60     */
     61    public static function stringAsFunctionArgument()
    4762    {
    4863        return new self('String not allowed as function argument.');
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/AbstractNode.php

    r2912480 r2915284  
    2424abstract class AbstractNode implements NodeInterface
    2525{
    26     private string $nodeName;
     26    /**
     27     * @var string
     28     */
     29    private $nodeName;
    2730
    2831    public function getNodeName(): string
    2932    {
    30         return $this->nodeName ??= preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class);
     33        if (null === $this->nodeName) {
     34            $this->nodeName = preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class);
     35        }
     36
     37        return $this->nodeName;
    3138    }
    3239}
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/AttributeNode.php

    r2912480 r2915284  
    2424class AttributeNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private ?string $namespace;
    28     private string $attribute;
    29     private string $operator;
    30     private ?string $value;
     26    private $selector;
     27    private $namespace;
     28    private $attribute;
     29    private $operator;
     30    private $value;
    3131
    3232    public function __construct(NodeInterface $selector, ?string $namespace, string $attribute, string $operator, ?string $value)
     
    6464    }
    6565
     66    /**
     67     * {@inheritdoc}
     68     */
    6669    public function getSpecificity(): Specificity
    6770    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/ClassNode.php

    r2912480 r2915284  
    2424class ClassNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private string $name;
     26    private $selector;
     27    private $name;
    2828
    2929    public function __construct(NodeInterface $selector, string $name)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/CombinedSelectorNode.php

    r2912480 r2915284  
    2424class CombinedSelectorNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private string $combinator;
    28     private NodeInterface $subSelector;
     26    private $selector;
     27    private $combinator;
     28    private $subSelector;
    2929
    3030    public function __construct(NodeInterface $selector, string $combinator, NodeInterface $subSelector)
     
    5050    }
    5151
     52    /**
     53     * {@inheritdoc}
     54     */
    5255    public function getSpecificity(): Specificity
    5356    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/ElementNode.php

    r2912480 r2915284  
    2424class ElementNode extends AbstractNode
    2525{
    26     private ?string $namespace;
    27     private ?string $element;
     26    private $namespace;
     27    private $element;
    2828
    2929    public function __construct(string $namespace = null, string $element = null)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/FunctionNode.php

    r2912480 r2915284  
    2626class FunctionNode extends AbstractNode
    2727{
    28     private NodeInterface $selector;
    29     private string $name;
    30     private array $arguments;
     28    private $selector;
     29    private $name;
     30    private $arguments;
    3131
    3232    /**
     
    5858    }
    5959
     60    /**
     61     * {@inheritdoc}
     62     */
    6063    public function getSpecificity(): Specificity
    6164    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/HashNode.php

    r2912480 r2915284  
    2424class HashNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private string $id;
     26    private $selector;
     27    private $id;
    2828
    2929    public function __construct(NodeInterface $selector, string $id)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/NegationNode.php

    r2912480 r2915284  
    2424class NegationNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private NodeInterface $subSelector;
     26    private $selector;
     27    private $subSelector;
    2828
    2929    public function __construct(NodeInterface $selector, NodeInterface $subSelector)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/PseudoNode.php

    r2912480 r2915284  
    2424class PseudoNode extends AbstractNode
    2525{
    26     private NodeInterface $selector;
    27     private string $identifier;
     26    private $selector;
     27    private $identifier;
    2828
    2929    public function __construct(NodeInterface $selector, string $identifier)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/SelectorNode.php

    r2912480 r2915284  
    2424class SelectorNode extends AbstractNode
    2525{
    26     private NodeInterface $tree;
    27     private ?string $pseudoElement;
     26    private $tree;
     27    private $pseudoElement;
    2828
    2929    public function __construct(NodeInterface $tree, string $pseudoElement = null)
     
    4343    }
    4444
     45    /**
     46     * {@inheritdoc}
     47     */
    4548    public function getSpecificity(): Specificity
    4649    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Node/Specificity.php

    r2912480 r2915284  
    3030    public const C_FACTOR = 1;
    3131
    32     private int $a;
    33     private int $b;
    34     private int $c;
     32    private $a;
     33    private $b;
     34    private $c;
    3535
    3636    public function __construct(int $a, int $b, int $c)
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/CommentHandler.php

    r2912480 r2915284  
    2727class CommentHandler implements HandlerInterface
    2828{
     29    /**
     30     * {@inheritdoc}
     31     */
    2932    public function handle(Reader $reader, TokenStream $stream): bool
    3033    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/HashHandler.php

    r2912480 r2915284  
    3030class HashHandler implements HandlerInterface
    3131{
    32     private TokenizerPatterns $patterns;
    33     private TokenizerEscaping $escaping;
     32    private $patterns;
     33    private $escaping;
    3434
    3535    public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping)
     
    3939    }
    4040
     41    /**
     42     * {@inheritdoc}
     43     */
    4144    public function handle(Reader $reader, TokenStream $stream): bool
    4245    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/IdentifierHandler.php

    r2912480 r2915284  
    3030class IdentifierHandler implements HandlerInterface
    3131{
    32     private TokenizerPatterns $patterns;
    33     private TokenizerEscaping $escaping;
     32    private $patterns;
     33    private $escaping;
    3434
    3535    public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping)
     
    3939    }
    4040
     41    /**
     42     * {@inheritdoc}
     43     */
    4144    public function handle(Reader $reader, TokenStream $stream): bool
    4245    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/NumberHandler.php

    r2912480 r2915284  
    2929class NumberHandler implements HandlerInterface
    3030{
    31     private TokenizerPatterns $patterns;
     31    private $patterns;
    3232
    3333    public function __construct(TokenizerPatterns $patterns)
     
    3636    }
    3737
     38    /**
     39     * {@inheritdoc}
     40     */
    3841    public function handle(Reader $reader, TokenStream $stream): bool
    3942    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/StringHandler.php

    r2912480 r2915284  
    3232class StringHandler implements HandlerInterface
    3333{
    34     private TokenizerPatterns $patterns;
    35     private TokenizerEscaping $escaping;
     34    private $patterns;
     35    private $escaping;
    3636
    3737    public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping)
     
    4141    }
    4242
     43    /**
     44     * {@inheritdoc}
     45     */
    4346    public function handle(Reader $reader, TokenStream $stream): bool
    4447    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Handler/WhitespaceHandler.php

    r2912480 r2915284  
    2828class WhitespaceHandler implements HandlerInterface
    2929{
     30    /**
     31     * {@inheritdoc}
     32     */
    3033    public function handle(Reader $reader, TokenStream $stream): bool
    3134    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Parser.php

    r2912480 r2915284  
    2828class Parser implements ParserInterface
    2929{
    30     private Tokenizer $tokenizer;
     30    private $tokenizer;
    3131
    3232    public function __construct(Tokenizer $tokenizer = null)
     
    3535    }
    3636
     37    /**
     38     * {@inheritdoc}
     39     */
    3740    public function parse(string $source): array
    3841    {
     
    240243                    }
    241244
    242                     if (!$arguments) {
     245                    if (empty($arguments)) {
    243246                        throw SyntaxErrorException::unexpectedToken('at least one argument', $next);
    244247                    }
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Reader.php

    r2912480 r2915284  
    2424class Reader
    2525{
    26     private string $source;
    27     private int $length;
    28     private int $position = 0;
     26    private $source;
     27    private $length;
     28    private $position = 0;
    2929
    3030    public function __construct(string $source)
     
    6161    }
    6262
    63     public function findPattern(string $pattern): array|false
     63    /**
     64     * @return array|false
     65     */
     66    public function findPattern(string $pattern)
    6467    {
    6568        $source = substr($this->source, $this->position);
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Shortcut/ClassParser.php

    r2912480 r2915284  
    2929class ClassParser implements ParserInterface
    3030{
     31    /**
     32     * {@inheritdoc}
     33     */
    3134    public function parse(string $source): array
    3235    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Shortcut/ElementParser.php

    r2912480 r2915284  
    2828class ElementParser implements ParserInterface
    2929{
     30    /**
     31     * {@inheritdoc}
     32     */
    3033    public function parse(string $source): array
    3134    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Shortcut/EmptyStringParser.php

    r2912480 r2915284  
    3232class EmptyStringParser implements ParserInterface
    3333{
     34    /**
     35     * {@inheritdoc}
     36     */
    3437    public function parse(string $source): array
    3538    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Shortcut/HashParser.php

    r2912480 r2915284  
    2929class HashParser implements ParserInterface
    3030{
     31    /**
     32     * {@inheritdoc}
     33     */
    3134    public function parse(string $source): array
    3235    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Token.php

    r2912480 r2915284  
    3232    public const TYPE_STRING = 'string';
    3333
    34     private ?string $type;
    35     private ?string $value;
    36     private ?int $position;
     34    private $type;
     35    private $value;
     36    private $position;
    3737
    3838    public function __construct(?string $type, ?string $value, ?int $position)
     
    6969        }
    7070
    71         if (!$values) {
     71        if (empty($values)) {
    7272            return true;
    7373        }
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/TokenStream.php

    r2912480 r2915284  
    3030     * @var Token[]
    3131     */
    32     private array $tokens = [];
     32    private $tokens = [];
    3333
    3434    /**
    3535     * @var Token[]
    3636     */
    37     private array $used = [];
     37    private $used = [];
    3838
    39     private int $cursor = 0;
    40     private ?Token $peeked;
    41     private bool $peeking = false;
     39    /**
     40     * @var int
     41     */
     42    private $cursor = 0;
     43
     44    /**
     45     * @var Token|null
     46     */
     47    private $peeked;
     48
     49    /**
     50     * @var bool
     51     */
     52    private $peeking = false;
    4253
    4354    /**
     
    4657     * @return $this
    4758     */
    48     public function push(Token $token): static
     59    public function push(Token $token): self
    4960    {
    5061        $this->tokens[] = $token;
     
    5869     * @return $this
    5970     */
    60     public function freeze(): static
     71    public function freeze(): self
    6172    {
    6273        return $this;
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Tokenizer/Tokenizer.php

    r2912480 r2915284  
    3232     * @var Handler\HandlerInterface[]
    3333     */
    34     private array $handlers;
     34    private $handlers;
    3535
    3636    public function __construct()
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerEscaping.php

    r2912480 r2915284  
    2424class TokenizerEscaping
    2525{
    26     private TokenizerPatterns $patterns;
     26    private $patterns;
    2727
    2828    public function __construct(TokenizerPatterns $patterns)
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerPatterns.php

    r2912480 r2915284  
    2424class TokenizerPatterns
    2525{
    26     private string $unicodeEscapePattern;
    27     private string $simpleEscapePattern;
    28     private string $newLineEscapePattern;
    29     private string $escapePattern;
    30     private string $stringEscapePattern;
    31     private string $nonAsciiPattern;
    32     private string $nmCharPattern;
    33     private string $nmStartPattern;
    34     private string $identifierPattern;
    35     private string $hashPattern;
    36     private string $numberPattern;
    37     private string $quotedStringPattern;
     26    private $unicodeEscapePattern;
     27    private $simpleEscapePattern;
     28    private $newLineEscapePattern;
     29    private $escapePattern;
     30    private $stringEscapePattern;
     31    private $nonAsciiPattern;
     32    private $nmCharPattern;
     33    private $nmStartPattern;
     34    private $identifierPattern;
     35    private $hashPattern;
     36    private $numberPattern;
     37    private $quotedStringPattern;
    3838
    3939    public function __construct()
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/AbstractExtension.php

    r2912480 r2915284  
    2424abstract class AbstractExtension implements ExtensionInterface
    2525{
     26    /**
     27     * {@inheritdoc}
     28     */
    2629    public function getNodeTranslators(): array
    2730    {
     
    2932    }
    3033
     34    /**
     35     * {@inheritdoc}
     36     */
    3137    public function getCombinationTranslators(): array
    3238    {
     
    3440    }
    3541
     42    /**
     43     * {@inheritdoc}
     44     */
    3645    public function getFunctionTranslators(): array
    3746    {
     
    3948    }
    4049
     50    /**
     51     * {@inheritdoc}
     52     */
    4153    public function getPseudoClassTranslators(): array
    4254    {
     
    4456    }
    4557
     58    /**
     59     * {@inheritdoc}
     60     */
    4661    public function getAttributeMatchingTranslators(): array
    4762    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php

    r2912480 r2915284  
    2727class AttributeMatchingExtension extends AbstractExtension
    2828{
     29    /**
     30     * {@inheritdoc}
     31     */
    2932    public function getAttributeMatchingTranslators(): array
    3033    {
    3134        return [
    32             'exists' => $this->translateExists(...),
    33             '=' => $this->translateEquals(...),
    34             '~=' => $this->translateIncludes(...),
    35             '|=' => $this->translateDashMatch(...),
    36             '^=' => $this->translatePrefixMatch(...),
    37             '$=' => $this->translateSuffixMatch(...),
    38             '*=' => $this->translateSubstringMatch(...),
    39             '!=' => $this->translateDifferent(...),
     35            'exists' => [$this, 'translateExists'],
     36            '=' => [$this, 'translateEquals'],
     37            '~=' => [$this, 'translateIncludes'],
     38            '|=' => [$this, 'translateDashMatch'],
     39            '^=' => [$this, 'translatePrefixMatch'],
     40            '$=' => [$this, 'translateSuffixMatch'],
     41            '*=' => [$this, 'translateSubstringMatch'],
     42            '!=' => [$this, 'translateDifferent'],
    4043        ];
    4144    }
     
    107110    }
    108111
     112    /**
     113     * {@inheritdoc}
     114     */
    109115    public function getName(): string
    110116    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/CombinationExtension.php

    r2912480 r2915284  
    2626class CombinationExtension extends AbstractExtension
    2727{
     28    /**
     29     * {@inheritdoc}
     30     */
    2831    public function getCombinationTranslators(): array
    2932    {
    3033        return [
    31             ' ' => $this->translateDescendant(...),
    32             '>' => $this->translateChild(...),
    33             '+' => $this->translateDirectAdjacent(...),
    34             '~' => $this->translateIndirectAdjacent(...),
     34            ' ' => [$this, 'translateDescendant'],
     35            '>' => [$this, 'translateChild'],
     36            '+' => [$this, 'translateDirectAdjacent'],
     37            '~' => [$this, 'translateIndirectAdjacent'],
    3538        ];
    3639    }
     
    5962    }
    6063
     64    /**
     65     * {@inheritdoc}
     66     */
    6167    public function getName(): string
    6268    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php

    r2912480 r2915284  
    3131class FunctionExtension extends AbstractExtension
    3232{
     33    /**
     34     * {@inheritdoc}
     35     */
    3336    public function getFunctionTranslators(): array
    3437    {
    3538        return [
    36             'nth-child' => $this->translateNthChild(...),
    37             'nth-last-child' => $this->translateNthLastChild(...),
    38             'nth-of-type' => $this->translateNthOfType(...),
    39             'nth-last-of-type' => $this->translateNthLastOfType(...),
    40             'contains' => $this->translateContains(...),
    41             'lang' => $this->translateLang(...),
     39            'nth-child' => [$this, 'translateNthChild'],
     40            'nth-last-child' => [$this, 'translateNthLastChild'],
     41            'nth-of-type' => [$this, 'translateNthOfType'],
     42            'nth-last-of-type' => [$this, 'translateNthLastOfType'],
     43            'contains' => [$this, 'translateContains'],
     44            'lang' => [$this, 'translateLang'],
    4245        ];
    4346    }
     
    159162    }
    160163
     164    /**
     165     * {@inheritdoc}
     166     */
    161167    public function getName(): string
    162168    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php

    r2912480 r2915284  
    3737    }
    3838
     39    /**
     40     * {@inheritdoc}
     41     */
    3942    public function getPseudoClassTranslators(): array
    4043    {
    4144        return [
    42             'checked' => $this->translateChecked(...),
    43             'link' => $this->translateLink(...),
    44             'disabled' => $this->translateDisabled(...),
    45             'enabled' => $this->translateEnabled(...),
    46             'selected' => $this->translateSelected(...),
    47             'invalid' => $this->translateInvalid(...),
    48             'hover' => $this->translateHover(...),
    49             'visited' => $this->translateVisited(...),
     45            'checked' => [$this, 'translateChecked'],
     46            'link' => [$this, 'translateLink'],
     47            'disabled' => [$this, 'translateDisabled'],
     48            'enabled' => [$this, 'translateEnabled'],
     49            'selected' => [$this, 'translateSelected'],
     50            'invalid' => [$this, 'translateInvalid'],
     51            'hover' => [$this, 'translateHover'],
     52            'visited' => [$this, 'translateVisited'],
    5053        ];
    5154    }
    5255
     56    /**
     57     * {@inheritdoc}
     58     */
    5359    public function getFunctionTranslators(): array
    5460    {
    5561        return [
    56             'lang' => $this->translateLang(...),
     62            'lang' => [$this, 'translateLang'],
    5763        ];
    5864    }
     
    172178    }
    173179
     180    /**
     181     * {@inheritdoc}
     182     */
    174183    public function getName(): string
    175184    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php

    r2912480 r2915284  
    3232    public const ATTRIBUTE_VALUE_IN_LOWER_CASE = 4;
    3333
    34     private int $flags;
     34    private $flags;
    3535
    3636    public function __construct(int $flags = 0)
     
    4242     * @return $this
    4343     */
    44     public function setFlag(int $flag, bool $on): static
     44    public function setFlag(int $flag, bool $on): self
    4545    {
    4646        if ($on && !$this->hasFlag($flag)) {
     
    6060    }
    6161
     62    /**
     63     * {@inheritdoc}
     64     */
    6265    public function getNodeTranslators(): array
    6366    {
    6467        return [
    65             'Selector' => $this->translateSelector(...),
    66             'CombinedSelector' => $this->translateCombinedSelector(...),
    67             'Negation' => $this->translateNegation(...),
    68             'Function' => $this->translateFunction(...),
    69             'Pseudo' => $this->translatePseudo(...),
    70             'Attribute' => $this->translateAttribute(...),
    71             'Class' => $this->translateClass(...),
    72             'Hash' => $this->translateHash(...),
    73             'Element' => $this->translateElement(...),
     68            'Selector' => [$this, 'translateSelector'],
     69            'CombinedSelector' => [$this, 'translateCombinedSelector'],
     70            'Negation' => [$this, 'translateNegation'],
     71            'Function' => [$this, 'translateFunction'],
     72            'Pseudo' => [$this, 'translatePseudo'],
     73            'Powered_Cache_Attribute' => [$this, 'translateAttribute'],
     74            'Class' => [$this, 'translateClass'],
     75            'Hash' => [$this, 'translateHash'],
     76            'Element' => [$this, 'translateElement'],
    7477        ];
    7578    }
     
    180183    }
    181184
     185    /**
     186     * {@inheritdoc}
     187     */
    182188    public function getName(): string
    183189    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php

    r2912480 r2915284  
    2727class PseudoClassExtension extends AbstractExtension
    2828{
     29    /**
     30     * {@inheritdoc}
     31     */
    2932    public function getPseudoClassTranslators(): array
    3033    {
    3134        return [
    32             'root' => $this->translateRoot(...),
    33             'first-child' => $this->translateFirstChild(...),
    34             'last-child' => $this->translateLastChild(...),
    35             'first-of-type' => $this->translateFirstOfType(...),
    36             'last-of-type' => $this->translateLastOfType(...),
    37             'only-child' => $this->translateOnlyChild(...),
    38             'only-of-type' => $this->translateOnlyOfType(...),
    39             'empty' => $this->translateEmpty(...),
     35            'root' => [$this, 'translateRoot'],
     36            'first-child' => [$this, 'translateFirstChild'],
     37            'last-child' => [$this, 'translateLastChild'],
     38            'first-of-type' => [$this, 'translateFirstOfType'],
     39            'last-of-type' => [$this, 'translateLastOfType'],
     40            'only-child' => [$this, 'translateOnlyChild'],
     41            'only-of-type' => [$this, 'translateOnlyOfType'],
     42            'empty' => [$this, 'translateEmpty'],
    4043        ];
    4144    }
     
    110113    }
    111114
     115    /**
     116     * {@inheritdoc}
     117     */
    112118    public function getName(): string
    113119    {
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/Translator.php

    r2912480 r2915284  
    3131class Translator implements TranslatorInterface
    3232{
    33     private ParserInterface $mainParser;
     33    private $mainParser;
    3434
    3535    /**
    3636     * @var ParserInterface[]
    3737     */
    38     private array $shortcutParsers = [];
     38    private $shortcutParsers = [];
    3939
    4040    /**
    4141     * @var Extension\ExtensionInterface[]
    4242     */
    43     private array $extensions = [];
    44 
    45     private array $nodeTranslators = [];
    46     private array $combinationTranslators = [];
    47     private array $functionTranslators = [];
    48     private array $pseudoClassTranslators = [];
    49     private array $attributeMatchingTranslators = [];
     43    private $extensions = [];
     44
     45    private $nodeTranslators = [];
     46    private $combinationTranslators = [];
     47    private $functionTranslators = [];
     48    private $pseudoClassTranslators = [];
     49    private $attributeMatchingTranslators = [];
    5050
    5151    public function __construct(ParserInterface $parser = null)
     
    8888    }
    8989
     90    /**
     91     * {@inheritdoc}
     92     */
    9093    public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string
    9194    {
     
    104107    }
    105108
     109    /**
     110     * {@inheritdoc}
     111     */
    106112    public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string
    107113    {
     
    112118     * @return $this
    113119     */
    114     public function registerExtension(Extension\ExtensionInterface $extension): static
     120    public function registerExtension(Extension\ExtensionInterface $extension): self
    115121    {
    116122        $this->extensions[$extension->getName()] = $extension;
     
    140146     * @return $this
    141147     */
    142     public function registerParserShortcut(ParserInterface $shortcut): static
     148    public function registerParserShortcut(ParserInterface $shortcut): self
    143149    {
    144150        $this->shortcutParsers[] = $shortcut;
     
    201207    {
    202208        if (!isset($this->attributeMatchingTranslators[$operator])) {
    203             throw new ExpressionErrorException(sprintf('Attribute matcher operator "%s" not supported.', $operator));
     209            throw new ExpressionErrorException(sprintf('Powered_Cache_Attribute matcher operator "%s" not supported.', $operator));
    204210        }
    205211
     
    215221            $tokens = $shortcut->parse($css);
    216222
    217             if ($tokens) {
     223            if (!empty($tokens)) {
    218224                return $tokens;
    219225            }
  • powered-cache/trunk/includes/classes/Dependencies/Symfony/Component/CssSelector/XPath/XPathExpr.php

    r2912480 r2915284  
    2424class XPathExpr
    2525{
    26     private string $path;
    27     private string $element;
    28     private string $condition;
     26    private $path;
     27    private $element;
     28    private $condition;
    2929
    3030    public function __construct(string $path = '', string $element = '*', string $condition = '', bool $starPrefix = false)
     
    4747     * @return $this
    4848     */
    49     public function addCondition(string $condition): static
     49    public function addCondition(string $condition): self
    5050    {
    5151        $this->condition = $this->condition ? sprintf('(%s) and (%s)', $this->condition, $condition) : $condition;
     
    6262     * @return $this
    6363     */
    64     public function addNameTest(): static
     64    public function addNameTest(): self
    6565    {
    6666        if ('*' !== $this->element) {
     
    7575     * @return $this
    7676     */
    77     public function addStarPrefix(): static
     77    public function addStarPrefix(): self
    7878    {
    7979        $this->path .= '*/';
     
    8787     * @return $this
    8888     */
    89     public function join(string $combiner, self $expr): static
     89    public function join(string $combiner, self $expr): self
    9090    {
    9191        $path = $this->__toString().$combiner;
  • powered-cache/trunk/includes/dropins/page-cache.php

    r2912480 r2915284  
    445445
    446446        header( 'X-Powered-Cache: PHP' );
     447        header( 'X-Cache-Enabled: true' );
     448        header( sprintf( "age: %d",  time() - filemtime( $file_path ) ) );
    447449
    448450        if ( function_exists( 'gzencode' ) && $GLOBALS['powered_cache_options']['gzip_compression'] ) {
     
    565567        parse_str( $_SERVER['QUERY_STRING'], $query_string );
    566568        $qs_variable = '';
     569        sort( $powered_cache_cache_query_strings );
    567570        foreach ( $powered_cache_cache_query_strings as $query_parameter ) {
    568571            if ( isset( $query_string[ $query_parameter ] ) ) {
     572                $qs_variable .= '_' . $query_parameter;
    569573                $qs_variable .= is_array( $query_string[ $query_parameter ] ) ? implode( '|', $query_string[ $query_parameter ] ) : $query_string[ $query_parameter ];
    570574            }
  • powered-cache/trunk/languages/powered-cache.pot

    r2912697 r2915284  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Powered Cache 3.0.1\n"
     5"Project-Id-Version: Powered Cache 3.0.2\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/powered-cache\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2023-05-15T21:57:14+00:00\n"
     12"POT-Creation-Date: 2023-05-20T22:04:42+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.7.1\n"
  • powered-cache/trunk/powered-cache.php

    r2912697 r2915284  
    44 * Plugin URI:        https://poweredcache.com
    55 * Description:       Powered Cache is the most powerful caching and performance suite for WordPress, designed to easily improve your PageSpeed and Web Vitals Score.
    6  * Version:           3.0.1
     6 * Version:           3.0.2
    77 * Requires at least: 5.7
    8  * Requires PHP:      7.2
     8 * Requires PHP:      7.2.5
    99 * Author:            Powered Cache
    1010 * Author URI:        https://poweredcache.com
     
    2626
    2727// Useful global constants.
    28 define( 'POWERED_CACHE_VERSION', '3.0.1' );
     28define( 'POWERED_CACHE_VERSION', '3.0.2' );
    2929define( 'POWERED_CACHE_DB_VERSION', '3.0' );
    3030define( 'POWERED_CACHE_PLUGIN_FILE', __FILE__ );
  • powered-cache/trunk/readme.txt

    r2912697 r2915284  
    44Requires at least:  5.7
    55Tested up to:  6.2
    6 Stable tag:  3.0.1
     6Stable tag:  3.0.2
    77License: GPLv2 (or later)
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
    99Donate link: https://poweredcache.com/donate/
    10 Requires PHP: 7.2
     10Requires PHP: 7.2.5
    1111
    1212The most powerful caching and performance suite for WordPress. Easily Improve PageSpeed & Web Vitals Score.
     
    170170
    171171== Changelog ==
     172
     173= 3.0.2 (May 21, 2023) =
     174- Fix: Html Minification error below PHP 8.1
     175- Added: x-cache-enabled and age headers
     176- Added: sorting for cache query strings
     177- nginx configuration tweaking
    172178
    173179= 3.0.1 (May 16, 2023) =
Note: See TracChangeset for help on using the changeset viewer.