Full Code of Automattic/wp-super-cache for AI

trunk 29a906b2dae0 cached
152 files
1.8 MB
566.9k tokens
474 symbols
1 requests
Download .txt
Showing preview only (2,098K chars total). Download the full file or copy to clipboard to get everything.
Repository: Automattic/wp-super-cache
Branch: trunk
Commit: 29a906b2dae0
Files: 152
Total size: 1.8 MB

Directory structure:
gitextract_1t__d7yp/

├── .eslintignore
├── .gitattributes
├── .github/
│   ├── files/
│   │   ├── autorelease.sh
│   │   └── wp-svn-autopublish.sh
│   └── workflows/
│       ├── autorelease.yml
│       ├── autotagger.yml
│       ├── changelogger.yml
│       ├── e2e-tests.yml
│       ├── linting.yml
│       ├── php-tests.yml
│       └── wp-svn-autopublish.yml
├── .gitignore
├── .phan/
│   ├── baseline.php
│   ├── config.php
│   └── stubs/
│       └── amp-stubs.php
├── .phpcs.xml.dist
├── .w.org-assets/
│   ├── README.md
│   └── blueprints/
│       └── blueprint.json
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── SECURITY.md
├── advanced-cache.php
├── changelog/
│   ├── .gitkeep
│   ├── add-check-type-for-supercache-last-cached-option
│   ├── add-live-preview-blueprint
│   ├── fix-audit_json_encode_flags_part_trois
│   ├── fix-more-json-encode-flags
│   ├── fix-null-wp-cache-home-path
│   ├── fix-phpcompatibility-dev-run
│   ├── remove-wpsc-outside-dep-device-detection
│   ├── renovate-cheerio-1.x
│   ├── renovate-js-unit-testing-packages
│   ├── renovate-js-unit-testing-packages#2
│   ├── renovate-lock-file-maintenance
│   ├── renovate-lock-file-maintenance#2
│   ├── renovate-lock-file-maintenance#3
│   ├── renovate-major-definitelytyped
│   ├── renovate-npm-axios-vulnerability
│   ├── renovate-wikimedia-testing-access-wrapper-4.x
│   ├── update-composer-2.9
│   ├── update-gpl-license-address
│   ├── update-minimum-wp-to-6.8
│   ├── update-node-24
│   ├── update-switch-to-tsgo
│   ├── update-tooling-update_stable_tag_in_backport
│   └── update-tsgo-fix-type-errors-in-e2e-projects
├── composer.json
├── eslint.config.mjs
├── inc/
│   ├── boost.php
│   ├── delete-cache-button.js
│   ├── delete-cache-button.php
│   └── preload-notification.php
├── js/
│   ├── admin.js
│   └── preload-notification.js
├── languages/
│   ├── wp-super-cache-be_BY.mo
│   ├── wp-super-cache-be_BY.po
│   ├── wp-super-cache-de_DE.mo
│   ├── wp-super-cache-de_DE.po
│   ├── wp-super-cache-es_ES.mo
│   ├── wp-super-cache-es_ES.po
│   ├── wp-super-cache-fr_FR.mo
│   ├── wp-super-cache-fr_FR.po
│   ├── wp-super-cache-it_IT.mo
│   ├── wp-super-cache-it_IT.po
│   ├── wp-super-cache-ja.mo
│   ├── wp-super-cache-ja.po
│   ├── wp-super-cache-lt_LT.mo
│   ├── wp-super-cache-lt_LT.po
│   ├── wp-super-cache-ro_RO.mo
│   ├── wp-super-cache-ro_RO.po
│   ├── wp-super-cache-ru_RU.mo
│   ├── wp-super-cache-ru_RU.po
│   ├── wp-super-cache-sr_RS.mo
│   ├── wp-super-cache-sr_RS.po
│   ├── wp-super-cache-sv_SE.mo
│   ├── wp-super-cache-sv_SE.po
│   ├── wp-super-cache-tr_TR.mo
│   ├── wp-super-cache-tr_TR.po
│   ├── wp-super-cache-ua_UA.mo
│   ├── wp-super-cache-ua_UA.po
│   ├── wp-super-cache-uk.mo
│   ├── wp-super-cache-uk.po
│   ├── wp-super-cache-zh_CN.mo
│   ├── wp-super-cache-zh_CN.po
│   ├── wp-super-cache-zh_TW.mo
│   └── wp-super-cache-zh_TW.po
├── ossdl-cdn.php
├── package.json
├── partials/
│   ├── advanced.php
│   ├── debug.php
│   ├── easy.php
│   ├── lockdown.php
│   ├── preload.php
│   ├── rejected_user_agents.php
│   ├── restore.php
│   └── tracking_parameters.php
├── phpunit.11.xml.dist
├── phpunit.12.xml.dist
├── phpunit.9.xml.dist
├── plugins/
│   ├── awaitingmoderation.php
│   ├── badbehaviour.php
│   ├── domain-mapping.php
│   ├── dynamic-cache-test.php
│   ├── jetpack.php
│   ├── multisite.php
│   └── wptouch.php
├── readme.txt
├── rest/
│   ├── class.wp-super-cache-rest-delete-cache.php
│   ├── class.wp-super-cache-rest-get-cache.php
│   ├── class.wp-super-cache-rest-get-plugins.php
│   ├── class.wp-super-cache-rest-get-settings.php
│   ├── class.wp-super-cache-rest-get-stats.php
│   ├── class.wp-super-cache-rest-get-status.php
│   ├── class.wp-super-cache-rest-preload.php
│   ├── class.wp-super-cache-rest-test-cache.php
│   ├── class.wp-super-cache-rest-update-plugins.php
│   ├── class.wp-super-cache-rest-update-settings.php
│   ├── class.wp-super-cache-settings-map.php
│   └── load.php
├── src/
│   └── device-detection/
│       ├── class-device-detection.php
│       ├── class-user-agent-info.php
│       └── functions.php
├── styling/
│   └── dashboard.css
├── tests/
│   ├── e2e/
│   │   ├── Dockerfile
│   │   ├── docker-compose.yml
│   │   ├── eslint.config.mjs
│   │   ├── jest.config.js
│   │   ├── lib/
│   │   │   ├── CheerioForm.ts
│   │   │   ├── docker-tools.ts
│   │   │   ├── plugin-settings.ts
│   │   │   ├── plugin-tools.ts
│   │   │   ├── system-tools.ts
│   │   │   ├── test-tools.ts
│   │   │   └── wordpress-tools.ts
│   │   ├── package.json
│   │   ├── specs/
│   │   │   ├── activation.test.ts
│   │   │   ├── default-settings.test.ts
│   │   │   └── settings/
│   │   │       ├── cache-compression.test.ts
│   │   │       ├── mod-rewrite.test.ts
│   │   │       ├── no-cache-for-get.test.ts
│   │   │       └── not-logged-in.test.ts
│   │   ├── tools/
│   │   │   ├── apache2-wrapper.sh
│   │   │   ├── htaccess.txt
│   │   │   └── mu-test-helpers.php
│   │   └── tsconfig.json
│   └── php/
│       └── bootstrap.php
├── wp-cache-base.php
├── wp-cache-config-sample.php
├── wp-cache-phase1.php
├── wp-cache-phase2.php
└── wp-cache.php

================================================
FILE CONTENTS
================================================

================================================
FILE: .eslintignore
================================================
# Our standard eslint config reads .gitignore and .eslintignore to determine what to ignore.

# @todo: Files below ignored as part of Automattic/jetpack/pull/25449
# They can be removed here as lint errors are addressed.
/inc/delete-cache-button.js
/inc/preload-notification.js


================================================
FILE: .gitattributes
================================================
# Files not needed in the release zip.
/.git*             export-ignore
.gitattributes     export-ignore
.github/           export-ignore
package.json       export-ignore
tests/             export-ignore
.phan/             export-ignore
phpunit.*.xml.dist export-ignore
.phpcs.*           export-ignore
.eslintignore      export-ignore
eslint.config.mjs  export-ignore
changelog/         export-ignore
.w.org-assets/     export-ignore


================================================
FILE: .github/files/autorelease.sh
================================================
#!/usr/bin/env bash

set -eo pipefail

: "${GH_TOKEN:?Build argument needs to be set and non-empty.}"
: "${GITHUB_REF:?Build argument needs to be set and non-empty.}"
: "${GITHUB_SHA:?Build argument needs to be set and non-empty.}"

if [[ ! -f composer.json ]]; then
	echo '::error::No composer.json. Did it get excluded from the mirror?'
	exit 1
fi

## Determine tag
ROLLING_MODE=
if [[ "$GITHUB_REF" =~ ^refs/tags/v?[0-9]+(\.[0-9]+)+(-[a-z0-9._-]+)?$ ]]; then
	TAG="${GITHUB_REF#refs/tags/}"

	## Check for alphas
	if [[ "$TAG" =~ -(alpha|a\.[0-9]*[02468])$ ]]; then
		echo "Not creating a release for alpha version $TAG"
		exit 0
	fi
elif [[ "$GITHUB_REF" == "refs/heads/trunk" ]]; then
	if ! jq -e '.extra.autorelease["rolling-release"]? // false' composer.json > /dev/null; then
		echo "::notice::Skipping trunk release because autorelease rolling mode is not enabled."
		exit 0
	fi
	ROLLING_MODE=true
	CURRENT_VER=$( sed -nEe 's/^## \[?([^]]*)\]? - .*/\1/;T;p;q' CHANGELOG.md || true )
	if [[ "$CURRENT_VER" != *-alpha ]]; then
		# Bump a non-alpha release to the next alpha to avoid confusing version_compare.
		CURRENT_VER=${CURRENT_VER%%-*}
		CURRENT_VER=${CURRENT_VER%.*}.$(( ${CURRENT_VER##*.} + 1 ))-alpha
	fi
	GIT_SUFFIX=$( git log -1 --format="%ct.g%h" . )
	TAG="$CURRENT_VER+rolling.$GIT_SUFFIX"
else
	echo "::error::Expected GITHUB_REF like \`refs/tags/v1.2.3\` or \`refs/tags/1.2.3\` or \`refs/heads/trunk\` for rolling releases, got \`$GITHUB_REF\`"
	exit 1
fi

# Don't auto-release if there's a kill switch tag in place.
kill_switch_tag_name='autorelease_kill_switch'
kill_switch_tag=$( git ls-remote --tags origin "$kill_switch_tag_name" )
if [[ -n "$kill_switch_tag" ]]; then
	echo "::notice::Kill switch tag found ('$kill_switch_tag_name'); aborting auto-release."
	exit 0
fi

echo "Creating release for $TAG"

## Determine slug and title format.
SLUG="$(jq -r '.extra.autorelease.slug? // .extra["wp-plugin-slug"] // .extra["beta-plugin-slug"] // ( .name | sub( "^.*/"; "" ) )' composer.json)"
if [[ -z "$SLUG" ]]; then
	echo '::error::Failed to get slug from composer.json.'
	exit 1
fi
echo "Using slug $SLUG"

TITLEFMT="$(jq -r '.extra.autorelease.titlefmt? // "%s"' composer.json)"
if [[ "$TITLEFMT" != *"%s"* ]]; then
	echo '::error::Missing or invalid `.extra.autorelease.titlefmt`'
	exit 1
fi
printf -v TITLE "$TITLEFMT" "${TAG#v}"
echo "Creating release \"$TITLE\""

## Create the archive artifact.
echo "::group::Creating $SLUG.zip"
git archive -v --output="$SLUG.zip" --prefix="$SLUG/" HEAD 2>&1
echo "::endgroup::"

if [[ -z "$ROLLING_MODE" ]]; then
	## Create the release note.
	# Extract the changelog section.
	echo "::group::Extracting release notes"
	if [[ ! -f CHANGELOG.md ]]; then
		echo '::endgroup::'
		echo '::error::No CHANGELOG.md for release notes.'
		exit 1
	fi
	SCRIPT="
		/^## \\[?$(sed 's/[.\[\]\\*^$\/()+?{}|]/\\&/g' <<<"${TAG#v}")\\]? - / {
			bc
			:a
			n
			/^## / {
				q
			}
			:c
			s/^## \[([^]]+)\]/## \1/
			p
			ba
		}
	"
	ENTRY=$(sed -n -E -e "$SCRIPT" CHANGELOG.md)
	if [[ -z "$ENTRY" ]]; then
		echo '::endgroup::'
		echo "::error::Failed to find section for ${TAG#v} in CHANGELOG.md"
		exit 1
	fi

	# Strip unwanted sections.
	SCRIPT="
		:a
		/^### .* This section will not be copied to readme\.txt/ {
			:b
			n
			/^#/ ba
			bb
		}
		p
	"
	ENTRY=$(sed -n -E -e "$SCRIPT" <<<"$ENTRY")

	echo "Release notes:"
	echo "-----"
	echo "$ENTRY"
	echo "-----"
	echo "::endgroup::"
else
	## Using a brief explanation for the rolling release note.
	ENTRY="### Rolling release based on the trunk branch."
fi

if [[ -n "$ROLLING_MODE" ]]; then
	echo "::group::Deleting stale rolling release"

	for R in $( gh release list --limit 1000000 --json tagName,publishedAt --jq '.[] | select( ( .tagName | contains( "+rolling" ) ) and ( .publishedAt | fromdateiso8601 < now - 86400 ) ) | .tagName' ); do
		echo "Found $R, deleting"
		gh release delete "$R" --cleanup-tag --yes
	done

	echo "::endgroup::"
fi


echo "::group::Creating release"
gh release create "$TAG" "$SLUG.zip" \
	--notes "$ENTRY" \
	--target "$GITHUB_SHA" \
	--title "$TITLE"

echo "::endgroup::"


================================================
FILE: .github/files/wp-svn-autopublish.sh
================================================
#!/usr/bin/env bash

set -eo pipefail

: "${GITHUB_REF:?Build argument needs to be set and non-empty.}"
if [[ -n "$CI" ]]; then
	: "${WPSVN_USERNAME:?Build argument needs to be set and non-empty.}"
	: "${WPSVN_PASSWORD:?Build argument needs to be set and non-empty.}"
fi

## Determine tag
if [[ ! "$GITHUB_REF" =~ ^refs/tags/v?[0-9]+(\.[0-9]+)+(-[a-z0-9._-]+)?$ ]]; then
	echo "::error::Expected GITHUB_REF like \`refs/tags/v1.2.3\` or \`refs/tags/1.2.3\`, got \`$GITHUB_REF\`"
	exit 1
fi
TAG="${GITHUB_REF#refs/tags/}"
TAG="${TAG#v}"

## Determine slug
WPSLUG=$(jq -r '.extra["wp-plugin-slug"] // ""' "src/composer.json")
if [[ -z "$WPSLUG" ]]; then
	echo '::error::Failed to determine plugin slug.'
	exit 1
fi

echo "Publishing $WPSLUG version $TAG"

mkdir svn
cd svn

echo '::group::Checking out SVN (shallowly)'
svn checkout "https://plugins.svn.wordpress.org/$WPSLUG/" --depth=empty .
echo '::endgroup::'

echo '::group::Checking out SVN trunk'
svn up trunk
echo '::endgroup::'

echo "::group::Checking out SVN tags (shallowly)"
svn up tags --depth=immediates
echo '::endgroup::'

if [[ -e "tags/$TAG" ]]; then
	echo "::error::Tag $TAG already exists in SVN. Aborting."
	exit 1
fi

echo "::group::Deleting everything in trunk except for .svn directories"
find trunk ! \( -path '*/.svn/*' -o -path "*/.svn" \) \( ! -type d -o -empty \) -delete
[[ -e trunk ]] || mkdir -p trunk # If there were no .svn directories, trunk itself might have been removed.
echo '::endgroup::'

echo "::group::Copying git repo into trunk"
git clone ../src trunk/
echo '::endgroup::'

echo "::group::Removing .git files and empty directories"
find trunk -name '.git*' -print -exec rm -rf {} +
find trunk -type d -empty -print -delete
echo '::endgroup::'

echo "::group::Adding and removing SVN files"
while IFS= read -r LINE; do
	FLAGS="${LINE:0:7}"
	FILE="${LINE:8}"
	if [[ "$FLAGS" != ?'      ' ]]; then
		echo "Unexpected svn flags: $LINE"
	fi
	# The appending of an `@` to the filename here avoids problems with filenames containing `@` being interpreted as "peg revisions".
	if [[ "${FLAGS:0:1}" == '!' ]]; then
		svn rm "${FILE}@"
	elif [[ "${FLAGS:0:1}" == "?" ]]; then
		svn add "${FILE}@"
	fi
done < <( svn status )
echo '::endgroup::'

# Check that the stable tag in trunk/readme.txt is not being changed. If it is, try to undo the change.
CHECK="$(svn diff trunk/readme.txt | grep '^[+-]Stable tag:' || true)"
if [[ -n "$CHECK" ]]; then
	LINE="$(grep --line-number --max-count=1 '^Stable tag:' trunk/readme.txt)"
	if grep -q '^+' <<<"$CHECK" && ! grep -q '^-' <<<"$CHECK"; then
		# On the initial commit, it seems there's no way to specify not to immediately have that commit served as the stable version.
		# So just print a notice pointing that out in case anyone is looking and leave it as-is.
		echo "::notice::This appears to be the initial release of the plugin, which will unavoidably set the stable tag to the version being released now."
	elif [[ -n "$LINE" ]]; then
		echo "::warning::Stable tag must be updated manually! Update would change it, attempting to undo the change.%0A%0A${CHECK/$'\n'/%0A}"
		nl=$'\n'
		patch -R trunk/readme.txt <<<"@@ -${LINE%%:*},1 +${LINE%%:*},1 @@$nl$CHECK"
		CHECK2="$(svn diff trunk/readme.txt | grep '^[+-]Stable tag:' || true)"
		if [[ -n "$CHECK2" ]]; then
			echo "::error::Attempt to revert stable tag change failed! Remaining diff:%0A%0A${CHECK2/$'\n'/%0A}"
			exit 1
		fi
	else
		echo "::error::Stable tag must be updated manually! Update would change it.%0A%0A${CHECK/$'\n'/%0A}"
		exit 1
	fi
fi

if [[ -n "$CI" ]]; then
	echo "::group::Committing to SVN"
	svn commit -m "Update to version $TAG from GitHub" --no-auth-cache --non-interactive  --username "$WPSVN_USERNAME" --password "$WPSVN_PASSWORD"
	echo '::endgroup::'
else
	echo "----"
	echo "Not running in CI, skipping commit"
	echo "  svn commit -m \"Update to version $TAG from GitHub\" --no-auth-cache --non-interactive  --username \"\$WPSVN_USERNAME\" --password \"\$WPSVN_PASSWORD\""
	echo "----"
fi

if [[ -n "$CI" ]]; then
	echo "::group::Creating tag"
	svn cp "^/$WPSLUG/trunk" "^/$WPSLUG/tags/$TAG" --no-auth-cache --non-interactive  --username "$WPSVN_USERNAME" --password "$WPSVN_PASSWORD" -m "Tagging version $TAG"
	echo '::endgroup::'
else
	echo "----"
	echo "Not running in CI, skipping commit"
	echo "  svn cp \"^/$WPSLUG/trunk\" \"^/$WPSLUG/tags/$TAG\" --no-auth-cache --non-interactive  --username \"\$WPSVN_USERNAME\" --password \"\$WPSVN_PASSWORD\" -m \"Tagging version $TAG\""
	echo "----"
fi

# Update the "Stable tag" in the tag if it's not a beta version.
if [[ "$TAG" =~ ^[0-9]+(\.[0-9]+)+$ ]]; then
	if [[ -n "$CI" ]]; then
		echo "::group::Checking out new tag"
		svn up "tags/$TAG"
		echo '::endgroup::'
		sed -i -e "s/^Stable tag: .*/Stable tag: $TAG/" "tags/$TAG/readme.txt"
		echo "::group::Committing to SVN"
		svn commit -m "Updating stable tag in version $TAG" --no-auth-cache --non-interactive  --username "$WPSVN_USERNAME" --password "$WPSVN_PASSWORD"
		echo '::endgroup::'
	else
		echo "----"
		echo "Not running in CI, skipping tag \"Stable tag\" update"
		echo "  svn up \"tags/$TAG\""
		echo "  sed -i -e \"s/^Stable tag: .*/Stable tag: $TAG/\" \"tags/$TAG/readme.txt\""
		echo "  svn commit -m \"Updating stable tag in version $TAG\" --no-auth-cache --non-interactive  --username \"\$WPSVN_USERNAME\" --password \"\$WPSVN_PASSWORD\""
		echo "----"
	fi
else
	echo "This is a prerelease version, not updating \"Stable tag\" in tag."
fi


================================================
FILE: .github/workflows/autorelease.yml
================================================
name: Auto-release

on:
  push:
    tags:
      - 'v?[0-9]+.[0-9]+'
      - 'v?[0-9]+.[0-9]+-*'
      - 'v?[0-9]+.[0-9]+.[0-9]+'
      - 'v?[0-9]+.[0-9]+.[0-9]+-*'
      - 'v?[0-9]+.[0-9]+.[0-9]+.[0-9]+'
      - 'v?[0-9]+.[0-9]+.[0-9]+.[0-9]+-*'
    branches:
      - 'trunk'
  workflow_dispatch:

permissions:
  # read: actions/checkout
  # write: `gh release`
  contents: write

jobs:
  publish:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Create release
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: ./.github/files/autorelease.sh


================================================
FILE: .github/workflows/autotagger.yml
================================================
name: Auto-tagger

on:
  push:
    branches:
      - trunk
      - prerelease
      - '*/branch-*'
  workflow_dispatch:

# We use secrets.API_TOKEN_GITHUB for everything here, so no need for permissions.
permissions: {}

jobs:
  tag:
    name: Tag
    runs-on: ubuntu-latest
    steps:
      - name: Check that the secret is set
        env:
          TOKEN: ${{ secrets.API_TOKEN_GITHUB }}
        run: |
          if [[ -z "$TOKEN" ]]; then
            echo '::error::The secret API_TOKEN_GITHUB must be set.'
            exit 1
          fi

      - uses: actions/checkout@v6
        with:
          # We want to potentially trigger "tag" events, but the default GITHUB_TOKEN
          # explicitly does not trigger events.
          token: ${{ secrets.API_TOKEN_GITHUB }}

      - name: Check branch
        id: check-branch
        run: |
          PREFIXES=
          if [[ -e composer.json ]]; then
            PREFIXES=$(jq -r '.extra["release-branch-prefix"] // "" | if type == "array" then .[] else . end' composer.json)
          fi
          if [[ -z "$PREFIXES" && "$GITHUB_REF" != "refs/heads/trunk" && "$GITHUB_REF" != "refs/heads/prerelease" ]]; then
            echo "::error::Expected to be called for \"refs/heads/trunk\" or \"refs/heads/prerelease\", not \"$GITHUB_REF\""
            exit 1
          elif [[ -n "$PREFIXES" && ( "$GITHUB_REF" == "refs/heads/trunk" || "$GITHUB_REF" == "refs/heads/prerelease" ) ]]; then
            echo "::notice::Ignoring push to $GITHUB_REF, as this project has a release branch prefix set (\"${PREFIXES//$'\n'/'" "'}\")"
            echo "run=false" >> "$GITHUB_OUTPUT"
          else
            if [[ -n "$PREFIXES" ]]; then
              OK=false
              while IFS= read -r P; do
                [[ "$GITHUB_REF" == "refs/heads/$P/branch-"* ]] && OK=true
              done <<<"$PREFIXES"
              if ! $OK; then
                echo "::error::Expected to be called for \"refs/heads/\$PREFIX/branch-*\" for a prefix in \"${PREFIXES//$'\n'/'" "'}\", not \"$GITHUB_REF\""
                exit 1
              fi
            fi

            echo "Push to \"$GITHUB_REF\" ok"
            echo "run=true" >> "$GITHUB_OUTPUT"
          fi

      - name: Check version
        id: version
        if: steps.check-branch.outputs.run == 'true'
        run: |
          VER=$(sed -nEe 's/^## \[?([^]]*)\]? - .*/\1/;T;p;q' CHANGELOG.md || true)
          echo "Version from changelog is ${VER:-<unknown>}"
          echo "version=$VER" >> "$GITHUB_OUTPUT"
          if [[ "$VER" =~ ^[0-9]+(\.[0-9]+)+(-[a-z0-9._-]+)?$ && ! "$VER" =~ -(alpha|a\.[0-9]*[02468])$ ]]; then
            echo "Version $VER ok to tag"
            echo "run=true" >> "$GITHUB_OUTPUT"
          else
            echo "::notice::Not tagging version $VER"
            echo "run=false" >> "$GITHUB_OUTPUT"
          fi

      - name: Check deps
        id: check-deps
        if: steps.check-branch.outputs.run == 'true' && steps.version.outputs.run == 'true'
        run: |
          RUN=true
          if [[ -e composer.json ]]; then
            TMP=$(jq -r '.require // {} | to_entries[] | select( .value | test( "-(alpha|a\\.[0-9]*[02468])$" ) ) | "\(.key) (\(.value))"' composer.json)
            if [[ -n "$TMP" ]]; then
              echo "::notice::Not tagging due to -alpha deps on ${TMP//$'\n'/ }"
              RUN=false
            fi
          fi
          echo "run=$RUN" >> "$GITHUB_OUTPUT"

      - name: Tag
        if: steps.check-branch.outputs.run == 'true' && steps.version.outputs.run == 'true' && steps.check-deps.outputs.run == 'true'
        env:
          VER: ${{ steps.version.outputs.version }}
        run: |
          export GIT_AUTHOR_NAME=matticbot
          export GIT_AUTHOR_EMAIL=matticbot@users.noreply.github.com
          export GIT_COMMITTER_NAME=matticbot
          export GIT_COMMITTER_EMAIL=matticbot@users.noreply.github.com
          if [[ -e composer.json ]] && ! jq -e 'if try ( .extra.autotagger | has("v") ) catch false then .extra.autotagger.v else true end' composer.json >/dev/null; then
            TAG="$VER"
          else
            TAG="v$VER"
          fi
          echo "::notice::Tagging $TAG"
          git tag "$TAG"
          git push origin "$TAG"
          if [[ -e composer.json ]] && jq -e '.extra.autotagger.major?' composer.json >/dev/null; then
            echo "::notice::Tagging ${TAG%%.*}"
            git tag --force "${TAG%%.*}"
            git push --force origin "${TAG%%.*}"
          fi


================================================
FILE: .github/workflows/changelogger.yml
================================================
name: Changelogger

on:
  pull_request:

jobs:
  validate:
    name: Validate changelog
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.4'
          tools: composer
          coverage: none
      - run: composer install --no-progress
      - name: Check for changelog entry
        run: |
          BASE_SHA=${{ github.event.pull_request.base.sha }}
          HEAD_SHA=${{ github.event.pull_request.head.sha }}
          CHANGELOG_FILES=$(git diff --name-only "$BASE_SHA" "$HEAD_SHA" -- 'changelog/*')
          if [ -z "$CHANGELOG_FILES" ]; then
            echo "::warning::No changelog entry found. If this change is user-facing, please add one with: vendor/bin/changelogger add"
          fi


================================================
FILE: .github/workflows/e2e-tests.yml
================================================
name: E2E Tests

on:
  pull_request:
  push:
    branches: [trunk]

jobs:
  e2e:
    name: E2E Tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: pnpm/action-setup@v4
        with:
          version: latest

      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: pnpm
          cache-dependency-path: tests/e2e/pnpm-lock.yaml

      - name: Install dependencies
        working-directory: tests/e2e
        run: pnpm install --frozen-lockfile

      - name: Start Docker environment
        working-directory: tests/e2e
        run: docker compose up -d --build --wait

      - name: Wait for WordPress
        run: |
          echo "Waiting for WordPress to be ready..."
          for i in $(seq 1 30); do
            if curl -sf http://localhost:2022/ > /dev/null 2>&1; then
              echo "WordPress is ready."
              exit 0
            fi
            echo "Attempt $i/30 - waiting 5s..."
            sleep 5
          done
          echo "WordPress did not become ready in time."
          docker compose -f tests/e2e/docker-compose.yml --project-directory tests/e2e logs
          exit 1

      - name: Run e2e tests
        working-directory: tests/e2e
        run: pnpm test:run

      - name: Docker logs
        if: failure()
        working-directory: tests/e2e
        run: docker compose logs

      - name: Tear down Docker environment
        if: always()
        working-directory: tests/e2e
        run: docker compose down -v


================================================
FILE: .github/workflows/linting.yml
================================================
name: Linting

on:
  pull_request:
  push:
    branches: [trunk]

jobs:
  phpcs:
    name: PHPCS
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.4'
          tools: composer
          coverage: none
      - run: composer install --no-progress
      - name: Run PHPCS (changed lines only)
        run: |
          if [ "${{ github.event_name }}" = "pull_request" ]; then
            BASE="${{ github.event.pull_request.base.sha }}"
          else
            BASE="${{ github.event.before }}"
          fi
          FILES=$(git diff --name-only --diff-filter=d "$BASE" HEAD -- '*.php')
          if [ -z "$FILES" ]; then
            echo "No PHP files changed, skipping PHPCS."
            exit 0
          fi
          echo "Changed PHP files:"
          echo "$FILES"
          echo "$FILES" | xargs vendor/bin/phpcs-changed --git --git-base "$BASE"


================================================
FILE: .github/workflows/php-tests.yml
================================================
name: PHP Tests

on:
  pull_request:
  push:
    branches: [trunk]

jobs:
  phpunit:
    name: PHPUnit (PHP ${{ matrix.php }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        php: ['8.2', '8.3', '8.4', '8.5']
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          tools: composer
          coverage: none
      - name: Install dependencies
        run: |
          if composer install --no-progress 2>&1; then
            echo "Updating PHPUnit for best match with PHP ${{ matrix.php }}"
            composer update -W --no-progress phpunit/phpunit
          else
            echo "Platform reqs failed, running composer update for dev dependencies"
            composer update --no-progress
          fi
      - run: composer test-php


================================================
FILE: .github/workflows/wp-svn-autopublish.yml
================================================
name: WordPress SVN auto-publisher

on:
  push:
    tags:
      - 'v?[0-9]+.[0-9]+'
      - 'v?[0-9]+.[0-9]+-*'
      - 'v?[0-9]+.[0-9]+.[0-9]+'
      - 'v?[0-9]+.[0-9]+.[0-9]+-*'
      - 'v?[0-9]+.[0-9]+.[0-9]+.[0-9]+'
      - 'v?[0-9]+.[0-9]+.[0-9]+.[0-9]+-*'

permissions:
  # actions/checkout
  contents: read

jobs:
  publish:
    name: Publish
    runs-on: ubuntu-latest
    steps:
      - name: Check that the secret is set
        env:
          WPSVN_USERNAME: ${{ secrets.WPSVN_USERNAME }}
          WPSVN_PASSWORD: ${{ secrets.WPSVN_PASSWORD }}
        run: |
          EXIT=0
          if [[ -z "$WPSVN_USERNAME" ]]; then
            echo '::error::The secret WPSVN_USERNAME must be set.'
            EXIT=1
          fi
          if [[ -z "$WPSVN_PASSWORD" ]]; then
            echo '::error::The secret WPSVN_PASSWORD must be set.'
            EXIT=1
          fi
          exit $EXIT

      - name: Install svn
        run: command -v svn || sudo apt-get install -y subversion

      - uses: actions/checkout@v6
        with:
          path: src

      - name: Publish
        env:
          WPSVN_USERNAME: ${{ secrets.WPSVN_USERNAME }}
          WPSVN_PASSWORD: ${{ secrets.WPSVN_PASSWORD }}
        run: ./src/.github/files/wp-svn-autopublish.sh


================================================
FILE: .gitignore
================================================
vendor/
node_modules/


================================================
FILE: .phan/baseline.php
================================================
<?php
/**
 * This is an automatically generated baseline for Phan issues.
 * When Phan is invoked with --load-baseline=path/to/baseline.php,
 * The pre-existing issues listed in this file won't be emitted.
 *
 * This file can be updated by invoking Phan with --save-baseline=path/to/baseline.php
 * (can be combined with --load-baseline)
 */
return [
    // # Issue statistics:
    // PhanPluginSimplifyExpressionBool : 80+ occurrences
    // PhanUndeclaredGlobalVariable : 45+ occurrences
    // PhanPossiblyUndeclaredVariable : 20+ occurrences
    // PhanUndeclaredVariable : 20+ occurrences
    // PhanTypeMismatchArgument : 10+ occurrences
    // PhanTypeMismatchArgumentNullableInternal : 10+ occurrences
    // PhanTypeMismatchReturn : 10+ occurrences
    // PhanTypeNonVarPassByRef : 10+ occurrences
    // PhanTypePossiblyInvalidDimOffset : 10+ occurrences
    // PhanUndeclaredFunctionInCallable : 10+ occurrences
    // PhanTypeMismatchArgumentProbablyReal : 9 occurrences
    // PhanUndeclaredFunction : 8 occurrences
    // PhanSuspiciousValueComparison : 6 occurrences
    // PhanTypeArraySuspiciousNull : 6 occurrences
    // PhanTypeInvalidDimOffset : 6 occurrences
    // PhanUndeclaredVariableDim : 6 occurrences
    // PhanTypeArraySuspiciousNullable : 5 occurrences
    // PhanTypeMismatchArgumentInternalProbablyReal : 4 occurrences
    // PhanTypeMismatchArgumentInternalReal : 4 occurrences
    // PhanPluginDuplicateConditionalNullCoalescing : 3 occurrences
    // PhanTypeInvalidLeftOperandOfNumericOp : 3 occurrences
    // PhanTypeSuspiciousNonTraversableForeach : 3 occurrences
    // PhanUndeclaredClassMethod : 3 occurrences
    // PhanPluginDuplicateAdjacentStatement : 2 occurrences
    // PhanPluginDuplicateExpressionAssignmentOperation : 2 occurrences
    // PhanPluginNeverReturnFunction : 2 occurrences
    // PhanPluginUnreachableCode : 2 occurrences
    // PhanPossiblyUndeclaredGlobalVariable : 2 occurrences
    // PhanTypeMismatchArgumentNullable : 2 occurrences
    // PhanTypeSuspiciousStringExpression : 2 occurrences
    // PhanCommentParamWithoutRealParam : 1 occurrence
    // PhanTypeConversionFromArray : 1 occurrence
    // PhanTypeInvalidLeftOperandOfBitwiseOp : 1 occurrence
    // PhanTypeInvalidRightOperandOfAdd : 1 occurrence
    // PhanTypeInvalidRightOperandOfBitwiseOp : 1 occurrence
    // PhanTypeMismatchArgumentInternal : 1 occurrence
    // PhanTypeMismatchDimAssignment : 1 occurrence
    // PhanTypeMismatchProperty : 1 occurrence
    // PhanTypeMissingReturn : 1 occurrence
    // PhanUndeclaredConstant : 1 occurrence

    // Currently, file_suppressions and directory_suppressions are the only supported suppressions
    'file_suppressions' => [
        'advanced-cache.php' => ['PhanPluginSimplifyExpressionBool'],
        'inc/delete-cache-button.php' => ['PhanPluginNeverReturnFunction', 'PhanTypeMismatchArgument'],
        'ossdl-cdn.php' => ['PhanUndeclaredClassMethod'],
        'partials/advanced.php' => ['PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanTypeMismatchArgument', 'PhanTypeNonVarPassByRef', 'PhanUndeclaredGlobalVariable'],
        'partials/debug.php' => ['PhanTypeNonVarPassByRef', 'PhanUndeclaredGlobalVariable'],
        'partials/easy.php' => ['PhanPluginSimplifyExpressionBool', 'PhanTypeArraySuspiciousNull', 'PhanTypeInvalidDimOffset', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredConstant', 'PhanUndeclaredGlobalVariable'],
        'partials/lockdown.php' => ['PhanUndeclaredGlobalVariable'],
        'partials/preload.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanTypeMismatchDimAssignment', 'PhanUndeclaredGlobalVariable'],
        'partials/tracking_parameters.php' => ['PhanUndeclaredGlobalVariable'],
        'plugins/domain-mapping.php' => ['PhanUndeclaredFunction'],
        'plugins/jetpack.php' => ['PhanPluginSimplifyExpressionBool'],
        'plugins/wptouch.php' => ['PhanPluginSimplifyExpressionBool', 'PhanUndeclaredFunction'],
        'rest/class.wp-super-cache-rest-get-cache.php' => ['PhanPluginSimplifyExpressionBool'],
        'rest/class.wp-super-cache-rest-get-settings.php' => ['PhanPluginSimplifyExpressionBool', 'PhanSuspiciousValueComparison', 'PhanTypeMismatchReturn', 'PhanUndeclaredFunctionInCallable', 'PhanUndeclaredVariable'],
        'rest/class.wp-super-cache-rest-get-status.php' => ['PhanPluginSimplifyExpressionBool', 'PhanSuspiciousValueComparison', 'PhanTypeNonVarPassByRef', 'PhanUndeclaredVariable'],
        'rest/class.wp-super-cache-rest-test-cache.php' => ['PhanPluginSimplifyExpressionBool', 'PhanTypeConversionFromArray', 'PhanTypePossiblyInvalidDimOffset', 'PhanUndeclaredVariableDim'],
        'rest/class.wp-super-cache-rest-update-settings.php' => ['PhanCommentParamWithoutRealParam', 'PhanPluginSimplifyExpressionBool', 'PhanTypeMissingReturn'],
        'src/device-detection/class-user-agent-info.php' => ['PhanPluginSimplifyExpressionBool', 'PhanTypeMismatchProperty', 'PhanTypeMismatchReturn'],
        'tests/e2e/tools/mu-test-helpers.php' => ['PhanTypeMismatchArgument'],
        'wp-cache-base.php' => ['PhanTypeMismatchArgumentNullableInternal'],
        'wp-cache-phase1.php' => ['PhanTypeNonVarPassByRef'],
        'wp-cache-phase2.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnreachableCode', 'PhanPossiblyUndeclaredVariable', 'PhanSuspiciousValueComparison', 'PhanTypeArraySuspiciousNullable', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternalProbablyReal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeNonVarPassByRef', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeSuspiciousNonTraversableForeach', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredVariableDim'],
        'wp-cache.php' => ['PhanPluginDuplicateAdjacentStatement', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginNeverReturnFunction', 'PhanPluginSimplifyExpressionBool', 'PhanPossiblyUndeclaredVariable', 'PhanSuspiciousValueComparison', 'PhanTypeArraySuspiciousNullable', 'PhanTypeInvalidDimOffset', 'PhanTypeInvalidLeftOperandOfBitwiseOp', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeInvalidRightOperandOfAdd', 'PhanTypeInvalidRightOperandOfBitwiseOp', 'PhanTypeMismatchArgument', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentInternalProbablyReal', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeNonVarPassByRef', 'PhanTypePossiblyInvalidDimOffset', 'PhanTypeSuspiciousNonTraversableForeach', 'PhanUndeclaredFunction', 'PhanUndeclaredVariable', 'PhanUndeclaredVariableDim'],
    ],
    // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed.
    // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases)
];


================================================
FILE: .phan/config.php
================================================
<?php
/**
 * Phan configuration for WP Super Cache.
 */

return [
	'minimum_target_php_version' => '7.2',
	'target_php_version'         => '8.5',

	'backward_compatibility_checks' => false,
	'enable_class_alias_support'    => false,
	'redundant_condition_detection' => true,

	'directory_list' => [
		'.',
	],

	'file_list' => [
		__DIR__ . '/stubs/amp-stubs.php',
	],

	'exclude_analysis_directory_list' => [
		'vendor/',
		'node_modules/',
		'tests/e2e/node_modules/',
		'jetpack_vendor/',
	],

	'autoload_internal_extension_signatures' => [],

	'stubs' => [
		'vendor/php-stubs/wordpress-stubs/wordpress-stubs.php',
		'vendor/php-stubs/wp-cli-stubs/wp-cli-stubs.php',
	],

	'plugins' => [
		'AddNeverReturnTypePlugin',
		'DuplicateArrayKeyPlugin',
		'DuplicateExpressionPlugin',
		'LoopVariableReusePlugin',
		'PHPUnitNotDeadCodePlugin',
		'PregRegexCheckerPlugin',
		'RedundantAssignmentPlugin',
		'SimplifyExpressionPlugin',
		'UnreachableCodePlugin',
		'UseReturnValuePlugin',
		'UnusedSuppressionPlugin',
	],
];


================================================
FILE: .phan/stubs/amp-stubs.php
================================================
<?php
/**
 * Stubs automatically generated from AMP 2.5.5 and AMP for WP 1.1.12
 * using the definition file `tools/stubs/amp-stub-defs.php` in the Jetpack monorepo.
 *
 * Do not edit this directly! Run tools/stubs/update-stubs.sh to regenerate it.
 */

/**
 * Whether this is in 'canonical mode'.
 *
 * Themes can register support for this with `add_theme_support( AMP_Theme_Support::SLUG )`:
 *
 * ```php
 * add_theme_support( AMP_Theme_Support::SLUG );
 * ```
 *
 * This will serve templates in AMP-first, allowing you to use AMP components in your theme templates.
 * If you want to make available in transitional mode, where templates are served in AMP or non-AMP documents, do:
 *
 * ```php
 * add_theme_support( AMP_Theme_Support::SLUG, array(
 *     'paired' => true,
 * ) );
 * ```
 *
 * Transitional mode is also implied if you define a `template_dir`:
 *
 * ```php
 * add_theme_support( AMP_Theme_Support::SLUG, array(
 *     'template_dir' => 'amp',
 * ) );
 * ```
 *
 * If you want to have AMP-specific templates in addition to serving AMP-first, do:
 *
 * ```php
 * add_theme_support( AMP_Theme_Support::SLUG, array(
 *     'paired'       => false,
 *     'template_dir' => 'amp',
 * ) );
 * ```
 *
 * @see AMP_Theme_Support::read_theme_support()
 * @return boolean Whether this is in AMP 'canonical' mode, that is whether it is AMP-first and there is not a separate (paired) AMP URL.
 */
function amp_is_canonical()
{
}
/**
 * Determines whether the legacy AMP post templates are being used.
 *
 * @since 2.0
 * @return bool
 */
function amp_is_legacy()
{
}
/**
 * Determine whether AMP is available for the current URL.
 *
 * @since 2.0
 *
 * @return bool Whether there is an AMP version for the provided URL.
 * @global string $pagenow
 * @global WP_Query $wp_query
 */
function amp_is_available()
{
}
/**
 * Retrieves the full AMP-specific permalink for the given post ID.
 *
 * On a site in Standard mode, this is the same as `get_permalink()`.
 *
 * @since 0.1
 *
 * @param int $post_id Post ID.
 * @return string AMP permalink.
 */
function amp_get_permalink($post_id)
{
}
/**
 * Determine whether the current request is for an AMP page.
 *
 * This function cannot be called before the parse_query action because it needs to be able
 * to determine the queried object is able to be served as AMP. If 'amp' theme support is not
 * present, this function returns true just if the query var is present. If theme support is
 * present, then it returns true in transitional mode if an AMP template is available and the query
 * var is present, or else in standard mode if just the template is available.
 *
 * @since 2.0 Formerly known as is_amp_endpoint().
 *
 * @return bool Whether it is the AMP endpoint.
 * @global WP_Query $wp_query
 */
function amp_is_request()
{
}
/**
 * Determine whether the current response being served as AMP.
 *
 * This function cannot be called before the parse_query action because it needs to be able
 * to determine the queried object is able to be served as AMP. If 'amp' theme support is not
 * present, this function returns true just if the query var is present. If theme support is
 * present, then it returns true in transitional mode if an AMP template is available and the query
 * var is present, or else in standard mode if just the template is available.
 *
 * @since 0.1
 * @since 2.0 Renamed to AMP-prefixed version, amp_is_request().
 * @deprecated Use amp_is_request() instead.
 *
 * @return bool Whether it is the AMP endpoint.
 */
function is_amp_endpoint()
{
}
/**
 * Class AMP_Options_Manager
 *
 * @internal
 */
class AMP_Options_Manager
{
    /**
     * Get plugin option.
     *
     * @param string $option  Plugin option name.
     * @param bool   $default Default value.
     *
     * @return mixed Option value.
     */
    public static function get_option($option, $default = \false)
    {
    }
}
/**
 * Registers a submenu page to access the AMP template editor panel in the Customizer.
 *
 * @internal
 */
function amp_add_customizer_link()
{
}
// AMP endpoint Verifier
/**
 * @phan-return mixed Dummy doc for stub.
 */
function ampforwp_is_amp_endpoint()
{
}


================================================
FILE: .phpcs.xml.dist
================================================
<?xml version="1.0"?>
<ruleset name="WP Super Cache">
	<description>PHPCS ruleset for WP Super Cache</description>

	<file>.</file>

	<exclude-pattern>/vendor/*</exclude-pattern>
	<exclude-pattern>/node_modules/*</exclude-pattern>
	<exclude-pattern>/tests/e2e/*</exclude-pattern>
	<exclude-pattern>/jetpack_vendor/*</exclude-pattern>

	<rule ref="Jetpack">
		<exclude name="WordPress.Files.FileName.InvalidClassFileName"/>
		<exclude name="WordPress.Files.FileName.NotHyphenatedLowercase"/>
	</rule>

	<rule ref="WordPress.WP.I18n">
		<properties>
			<property name="text_domain" type="array">
				<element value="wp-super-cache" />
			</property>
		</properties>
	</rule>
	<rule ref="Jetpack.Functions.I18n">
		<properties>
			<property name="text_domain" value="wp-super-cache" />
		</properties>
	</rule>

	<rule ref="WordPress.Utils.I18nTextDomainFixer">
		<properties>
			<property name="old_text_domain" type="array" />
			<property name="new_text_domain" value="wp-super-cache" />
		</properties>
	</rule>

	<rule ref="Squiz.Commenting.FileComment">
		<exclude name="Squiz.Commenting.FileComment.Missing"/>
	</rule>
	<rule ref="Squiz.Commenting.ClassComment">
		<exclude name="Squiz.Commenting.ClassComment.Missing"/>
	</rule>
	<rule ref="Squiz.Commenting.FunctionComment">
		<exclude name="Squiz.Commenting.FunctionComment.Missing"/>
		<exclude name="Squiz.Commenting.FunctionComment.MissingParamComment"/>
	</rule>
	<rule ref="Generic.Commenting.DocComment">
		<exclude name="Generic.Commenting.DocComment.MissingShort"/>
	</rule>
	<rule ref="Squiz.Commenting.VariableComment">
		<exclude name="Squiz.Commenting.VariableComment.Missing"/>
	</rule>

	<rule ref="VariableAnalysis.CodeAnalysis.VariableAnalysis">
		<properties>
			<property name="ignoreUnusedRegexp" value="/^_/"/>
		</properties>
	</rule>
</ruleset>


================================================
FILE: .w.org-assets/README.md
================================================
# WordPress.org Assets

This directory is intended to hold assets meant for w.org plugins SVN.

There is no auto-deployment of these assets, so once you make changes, please ping the plugin's team or ask the Monorepo team to deploy them.


================================================
FILE: .w.org-assets/blueprints/blueprint.json
================================================
{
	"landingPage": "/wp-admin/options-general.php?page=wpsupercache",
	"steps": [
		{
			"step": "installPlugin",
			"pluginData": {
				"resource": "wordpress.org/plugins",
				"slug": "wp-super-cache"
			},
			"options": {
				"activate": true
			}
		},
		{
			"step": "runPHP",
			"code": "<?php @chmod('/wordpress/wp-content', 0755);"
		}
	]
}


================================================
FILE: CHANGELOG.md
================================================
# Changelog

### This is a list detailing changes for all Super Cache releases.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [4.0.0-alpha] - unreleased

This is an alpha version! The changes listed here are not final.

### Added
- Add a WordPress.org Live Preview Blueprint.

### Changed
- Device Detection: use an embedded version instead of the Composer dependency
- Switch to Native TypeScript compiler based on Go.
- Update package dependencies.

### Removed
- General: Update minimum WordPress version to 6.8.

### Fixed
- Ensure proper flags are used with `json_encode()`.
- Fix a PHP warning when the newest cached pages list is unavailable.
- Fix TS errors detected by tsgo.
- Fix `str_starts_with()` PHP 8.1+ deprecation when `$wp_cache_home_path` is null in `get_current_url_supercache_dir()`.
- Remove `.eslintignore` and fix JS linting errors in `delete-cache-button.js`.

## [3.0.3] - 2025-11-11
### Added
- Tested up to WordPress 6.9. [#45571]

### Changed
- Update package dependencies. [#45478] [#45652]

### Fixed
- Phan: Address PhanRedundantCondition, PhanRedundantArrayValuesCall, and PhanPluginRedundantAssignment violations. [#45681]
- Remove redundant code. [#45733]

## [3.0.2] - 2025-10-10
### Added
- Add typecheck support for E2E tests. [#44788]

### Changed
- Update package dependencies. [#44725] [#44873] [#44898] [#45096] [#45097] [#45159]
- Use `wp_rand()` instead of `rand()` and `mt_rand()`. [#44964]

### Fixed
- Code: Resolve PhanImpossibleCondition violations. [#44869]

## [3.0.1] - 2025-08-05
### Added
- Caching: Ignore Yandex parameters so those visitors are served from the cache. [#44618]

### Changed
- Update package dependencies. [#44206] [#44506]

## [3.0.0] - 2025-06-10
### Changed
- Code: First pass of style coding standards. [#42734]
- Update package dependencies. [#43425] [#43766] [#43839]

### Removed
- General: Update minimum WordPress version to 6.7. [#43192]

### Fixed
- Code: Update stylesheets to use hex instead of named colors. [#42920]
- General: Improve WP CLI support by making variables global. [#43286]
- Linting: Fix more Stylelint violations. [#43213]

## [2.0.1] - 2025-04-04
### Changed
- Code: Use function-style `exit()` and `die()` with a default status code of 0. [#41167]
- Update package dependencies. [#40980] [#41659] [#42180] [#42308] [#42762] [#42815]

## [2.0.0] - 2025-01-10
### Added
- Enable test coverage. [#39961]

### Changed
- General: Indicate compatibility with the upcoming version of WordPress - 6.7. [#39786]
- Update package dependencies. [#38822] [#38870] [#39004] [#39278] [#39288] [#39653] [#40116] [#40515]

### Removed
- Cleaned up legacy code. [#40200]
- General: Update minimum PHP version to 7.2. [#40147]
- General: Update minimum WordPress version to 6.6. [#40146]

### Fixed
- Caching: make sure there is cache content to serve, even if the cache file was found [#40342]
- Ensure homepage cache gets flushed when a post is unpublished. [#40879]
- Lossless image optimization for images (should improve performance with no visible changes). [#38750] [#38981]
- Move trailing space out of i18n message. [#39305]
- Fix apache_request_headers fallback so it works when that command is disabled. [#39951]

## [1.12.4] - 2024-07-17
### Removed
- General: update WordPress version requirements to WordPress 6.5. [#38382]

### Fixed
- Fixed problem with is_utf8_charset missing in WP 6.6 [#38383]

## [1.12.3] - 2024-07-10
### Fixed
- Don't delete the log viewer when doing garbage collection [#38276]
- Fix clearing the cache when scheduled posts are published [#38263]

## [1.12.2] - 2024-06-27
### Added
- add an admin notice to encourage migration to Jetpack Boost [#37933]
- modify boost install code so it can be used by multiple buttons [#37824]
- notify Boost of migration to that plugin [#37797]

### Changed
- General: indicate compatibility with the upcoming version of WordPress - 6.6. [#37962]
- tell user that Cache module of Boost must be deactivated to use WPSC [#37265]
- WP Updated banner designs, added auto-install Jetpack Boost buttons [#37963]

### Fixed
- Detect when WP_CACHE is defined with "const" in wp-config.php [#38022]
- Align detection of Boost installs with activation of that plugin [#37896]
- create the cache directory before creating the config file [#38028]
- do not show migration notice if already using Boost Cache [#38005]
- fixed a PHP warning when deactivating the plugin. [#37968]
- make sure plugins links is an array before using it. [#37604]
- remove the preload interval based on the post count. Preload as often as you want. [#37618]
- renamed WPSC_VERSION because it conflicted with other plugins [#38007]

## [1.12.1] - 2024-05-09
### Changed
- General: update WordPress version requirements to WordPress 6.4. [#37047]
- General: use wp_admin_notice function introduced in WP 6.4 to display notices. [#37051]

### Fixed
- Fix the CDN functionality when cache is disabled [#37112]
- Do not define DONOTCACHEPAGE if it is already defined [#36423]

## [1.12.0] - 2024-03-11
### Added
- Setup: Detect Jetpack Boost cache and suggest troubleshooting steps [#36018]
- WP Super Cache: added WPSC_PRELOAD_POST_INTERVAL and WPSC_PRELOAD_LOOP_INTERVAL to modify preload timings [#36246]

### Changed
- Code Modernization: Replace usage of strpos() with str_contains() [#34137]
- Code Modernization: Replace usage of strpos() with str_starts_with(). [#34135]
- Code Modernization: Replace usage of substr() with str_starts_with() and str_ends_with(). [#34207]
- Fix blurry Automattic logo. [#34985]
- General: avoid deprecation warnings when trying to get URLs in PHP 8.2 [#34962]
- General: indicate compatibility with the upcoming version of WordPress, 6.5. [#35820]
- General: updated PHP requirement to PHP 7.0+ [#34126]
- General: update WordPress version requirements to WordPress 6.3. [#34127]
- WP Super Cache: check for Boost Cache when creating advanced-cache.php [#36027]
- WP Super Cache: fixed labels on advanced settings page [#36067]
- WP Super Cache: remove notifications that preload started working again. [#35960]

### Fixed
- Supercache: add "days" to "Next preload scheduled" message. [#34509]
- Super Cache: with rebuild enabled, apply that to subdirectories instead of deleting them. [#35032]
- WP Super Cache - fix the wp_super_cache_clear_post_cache filter so the homepage cache isn't deleted too. [#36069]
- WP Super Cache: bail if the request uri isn't set. It means the plugin isn't configured yet. [#36024]
- WP Super Cache: don't create an output buffer if there's already one active [#36124]
- WP Super Cache: fixed serving a cached page on POST with late init enabled. [#36211]
- WP Super Cache: fix the output buffer check, and make debug logs pre-formatted. [#36158]
- WP Super Cache: if the preload number of posts is not in the list, then add it [#36249]

## [1.11.0] - 2023-11-08
### Added
- Super Cache: fix "accept header" check, and add new "wpsc_accept_headers" filter on accept header list [#33972]

### Changed
- General: indicate full compatibility with the latest version of WordPress, 6.4. [#33776]
- General: update WordPress version requirements to WordPress 6.2. [#32762]
- Overhauled visual styling to match Jetpack branding [#32981]
- Updated package dependencies. [#32307]
- Updated package dependencies. [#32605]
- Updated package dependencies. [#32966]
- Updated package dependencies. [#33498]

### Fixed
- Caching: make sure $wp_cache_request_uri is defined to avoid warnings about "NULL" parameters. [#32629]
- super-cache: fixed null parameter warning when using $supercachedir [#33970]
- Super Cache: cancel the full preload job correctly. [#33560]

## [1.10.0] - 2023-08-16
### Added
- Caching: Added support for the 'Accept' HTTP Header. Prevent caching JSON content. [#29456]
- Preload: Improved preload notification panel shows the last 5 preloaded URLs. [#31017]

### Changed
- General: Indicate full compatibility with the latest version of WordPress, 6.3. [#31910]
- General: Update Boost install / activate card styles. [#31311]
- General: Update documentation links to point to Jetpack.com docs. [#32164]
- General: Update the contributors list. [#29241]
- Preload: Faster and more robust preloading slower hosts. [#30450]

### Removed
- Cleanup: Removes unwanted development environment files from production version of the plugin. [#30216]
- Cleanup: Remove unused "object cache" code. [#31783]

### Fixed
- Cache Compression: Fix PHP warning appearing in gzip output stream. [#31487]
- Caching: Reject unknown or malformed URIs to prevent PHP warnings. [#31786]
- Dynamic Caching: Fixed incorrect encoding headers when using dynamic caching with compression. [#32106]
- Setting page: Fixed boost banner getting oversized when zoomed out
- General: Fix incorrect Debug Log URL for nested WordPress installations. [#29985]
- General: Fix links to cache directory on sites that are in a sub directory. [#30872]
- General: Updated Nginx documentation hyperlink. [#31420]
- Preload: No longer deletes child taxonomies during preload. [#30830]
- Preload: Use a constant instead of hard-coded email numbers in preload dropdown. [#30713]
- Caching: Prevent Super Cache from attempting to gunzip content which is not zipped
- General: Fix null/false warning in PHP8.1

## [1.9.4] - 2023-02-28
### Added
- Added new filter which controls cache clearing on post edit. [#28556]
- Added a check to ensure preload cronjobs exist when updating preload settings. [#28545]

### Changed
- Updated contributors list. [#28891]

### Fixed
- Fixed undefined PHP variable when trying to delete a protected folder. [#28524]
- Fixed deprecation warnings on PHP 8.1+. [#28959]

## [1.9.3] - 2023-01-23
### Added
- Added new filters to set mod_expires rules and HTTP headers in the cache htaccess file. [#28031]

### Fixed
- Fixed an issue that caused wp-config.php file permissions to change. [#28164]
- Fixed missing missing action 'wp_cache_cleared' when clearing the cache on post update. [#28481]

## [1.9.2] - 2022-12-09
### Added
- Added a dismissable option to install Jetpack Boost. [#26702]
- Improved stability with the start of an end-to-end test suite. [#26462]
- Tested with v6.1 of WordPress. [#26831]

### Changed
- Updated package dependencies.

### Fixed
- Compatibility: Avoid use of QUERY_STRING value, which is not available in all environments. [#26251]
- Updated links to related plugins to remove click-tracking redirects. [#26757]

## [1.9.1] - 2022-11-02
### Fixed
- Fixes crash when using the “Jetpack Mobile Theme” plugin alongside Jetpack 11.5.

## [1.9.0] - 2022-09-16
### Added
- Cache deletion: add new hook to trigger actions after a successful cache deletion from the admin bar. [#26202]

### Fixed
- Fixes to URL parsing to prevent cache pollution issues around URLs with double-slashes. [#26247]

## [1.8] - 2022-08-16
### Added
- PHP 8 Support: Ensure the expected value for the $auto_release in sem_get is used.
- Added a link to give feedback on WP Super Cache
- Added information on Jetpack Boost

### Fixed
- Fixed jQuery deprecated notice
- Fixed replacing dirname(__FILE__) with __DIR__

## 1.7.9 - 2022-06-07

- Fix nonces used by "Delete Cache" button and remove JS from it on the frontend admin bar.
- Define the constant WPSCDISABLEDELETEBUTTON to disable the "Delete Cache" button in the admin bar.

## 1.7.8 - 2022-06-07

* Change the admin bar "Delete Cache" button into an AJAX link #808 #810
* Fix link to log file in custom WordPress structure #807
* Add an auto updating preload message. #811 #816
* Use REQUEST_URI instead of GET to check GET status. #813
* Add commonWP and disclaimer to "recommended links" #812
* Hide warnings in case files deleted #814
* Remove the GET param when removing tracking params #818
* Check that post is private to unpublish it and clear cache 2249e58e6f585d936c0993e9d18e6382fa976a66
* Check $gc_flag was opened before closing it. #819

## 1.7.7 - 2022-02-01

* Fixes to settings page

## 1.7.6 - 2022-01-31

* Fix for PHP < 7.3

## 1.7.5 - 2022-01-31

* Move the text of the settings pages into separate files. #791
* Allow editors to delete all the cache files. #793
* Only clear the cache from the current site, not the whole network (admin bar link). #794
* Check $cache_path is somewhat sane. #797
* realpath returns false if directory not found. #798
* Don't reject bots for new installs. They "preload pages" too. #800

## 1.7.4 - 2021-07-08

* Make config file path configurable, props @sebastianpopp #755
* Stop a very rare/difficult attack when updating wp-config.php, props @guyasyou for reporting. #780
* Add textbox to add tracking parameters to ignore when caching. props @markfinst, @radex02 #777
* Add "Rejected Cookies" setting to the advanced settings page. #774

## 1.7.3 - 2021-04-28

* Sanitize the settings that are written to the config file #763
* Fix the display of "direct cached" example urls in some circumstance. #766

## 1.7.2 - 2021-03-15

* Fixed authenticated RCE in the settings page. Props @m0ze
* Small bug fixes.

## 1.7.1 - 2020-01-30

* Minor fixes to docs. #709 #645
* Fixed typo on cache contents page. #719
* Fixed array index warning. #724
* Updated yellow box links. #725

## 1.7.0 - 2020-01-27

* Added "wpsc_cdn_urls" filter to modify the URLs used to rewrite URLs. #697
* Fixed CDN functionality for logged in users. #698
* Disable settings that don't work in Expert mode. #699
* Don't enable mobile support by default, but it can still be enabled manually. #700
* Change "admin bar" to "Toolbar". Props @garrett-eclipse. #701
* Show settings enabled by "easy" settings page. #703

## 1.6.9 - 2019-07-25

* Improve the variables and messaging used by advanced-cache.php code. #687
* Add a warning message to the debug log viewer. #688
* Disable raw viewing of the debug log. #691
* Clean up the debug log. #692 #694
* Added wpsc_update_check() in 9659af156344a77ae247dc582d52053d95c79b93.

## 1.6.8 - 2019-06-27

* Added new constants, WPSC_SERVE_DISABLED (disable serving of cached files) and WPSC_SUPERCACHE_ONLY (only serve supercache cache files). #682 and #672
* Hide get_post() warning on some sites. #684
* Check if WPCACHEHOME is set correctly before maybe updating it. #683
* Remove object cache support as it never worked properly. #681
* Add "logged in users" to the  "do not cache for users" setting and rename that setting to "Cache Restrictions" #657

## 1.6.7 - 2019-05-30

* wp_cache_setting() can now save boolean values since many of the settings are bools. #676
* Check if $super_cache_enabled is true in a less strict way because it might be '1' rather than true. #677

## 1.6.6 - 2019-05-28

* Fix problems with saving settings. Returns false ONLY when there's an issue with the config file, not when the setting isn't changed. Change other code to cope with that, including updating WPCACHEHOME (#670)
* When saving settings rename the temporary config file correctly, and delete wp-admin/.php if it exists. (#673)
* Fix adding WPCACHEHOME to wp-config.php when advanced-cache.php is not found and wp-config.php is RO. (#674)

## 1.6.5 - 2019-05-27

* Check advanced-cache.php was created by the plugin before modifying/deleting it. (#666)
* When saving settings, save blank lines. Fixes problems with WP_CACHE and WPCACHEHOME in wp-config.php. Related to #652. (#667)
* Update outdated code and use is_multisite() (#600)
* Fix the delete cache button in the Toolbar. (#603)
* Code cleanup in #602
* Use get_post_status instead of post_status (#623)
* Fixes button - Update Direct Pages (#622)
* Removes apache_response_headers and uses only headers_list (#618)
* Function is_site_admin has been deprecated (#611)
* Fixes action urls in wp_cache_manager (#610)
* Remove the link to the HibbsLupusTrust tweet. (#635)
* Don't load wp-cache-config.php if it's already loaded (#605)
* PHPCS fixes and optimization for plugins/domain-mapping.php (#615)
* Introduces PHP_VERSION_ID for faster checking (#604)
* Fixes regex and optimizes ossdl-cdn.php (#596)
* Only update new settings and use a temporary file to avoid corruption. (#652)
* Serve cached files to rejected user agents, don't cache them. (#658)
* Combine multiple headers with the same name (#641)
* Open ‘Delete Cache’ link in same window (#656)
* Promote the Jetpack Site Accelerator on the CDN page. (#636)

## 1.6.4 - 2018-08-22

* Changes between [1.6.3 and 1.6.4](https://github.com/Automattic/wp-super-cache/compare/1.6.3...1.6.4)
* Fixes for WP-CLI (#587) (#592)
* Bumped the minimum WordPress version to 3.1 to use functions introduced then. (#591)
* Fixes to wpsc_post_transition to avoid a fatal error using get_sample_permalink. (#595)
* Fixed the Toolbar "Delete Cache" link. (#589)
* Fixed the headings used in the settings page. (#597)

## 1.6.3 - 2018-08-10

* Changes between [1.6.2 and 1.6.3](https://github.com/Automattic/wp-super-cache/compare/1.6.2...1.6.3)
* Added cookie helper functions (#580)
* Added plugin helper functions (#574)
* Added actions to modify cookie and plugin lists. (#582)
* Really disable garbage collection when timeout = 0 (#571)
* Added warnings about DISABLE_WP_CRON (#575)
* Don't clean expired cache files after preload if garbage collection is disabled (#572)
* On preload, if deleting a post don't delete the sub directories if it's the homepage. (#573)
* Fix generation of semaphores when using WP CLI (#576)
* Fix deleting from the Toolbar (#578)
* Avoid a strpos() warning. (#579)
* Improve deleting of cache in edit/delete/publish actions (#577)
* Fixes to headers code (#496)

## 1.6.2 - 2018-06-19

* Fixed serving expired supercache files (#562)
* Write directly to the config file to avoid permission problems with wp-content. (#563)
* Correctly set the .htaccess rules on the main site of a multisite. (#557)
* Check if set_transient() exists before using it. (#565)
* Removed searchengine.php example plugin as it sets a cookie to track users. Still available [here](https://github.com/Automattic/wp-super-cache/blob/4cda5c0f2218e40e118232b5bf22d227fb3206b7/plugins/searchengine.php). (#567)
* For advanced users only. Change the vary and cache control headers. See https://github.com/Automattic/wp-super-cache/pull/555 (#555)

## 1.6.1 - 2018-05-15

* Fix the name of the WP Crontrol plugin. (#549)
* Handle errors during deactivation/uninstall by email rather than exiting. (#551)
* Add a notice when settings can't be updated. (#552 and #553)

## 1.6.0 - 2018-04-30

* Fix issues in multisite plugin (#501)
* Fixes wp-cli plugin deactivate/activate (#499)
* Cleanup - change quotes. (#495)
* $htaccess_path defines the path to the global .htacess file. (#507)
* Fix 'cannot redeclare gzip_accepted()' (#511)
* Correct the renaming of tmp_wpcache_filename (removed unnecessary slash in path) which caused renaming to fail. (#516)
* Add check for Jetpack mobile theme cookie (#515)
* Optimize wp_cache_phase2 and create wpsc_register_post_hooks (#508)
* WPCACHEHOME has a trailing slash (#513)
* Cleanup cache enable/disable and update_mod_rewrite_rules (#500)
* Post Update now clears category cache (#519)
* Various fixes for saving the debug page form (#542)
* Expert-caching and empty parameters, like ?amp, should not serve cached page (#533)
* Tiny Yslow description fix (#527)
* Add ipad to mobile list (#525)
* Hide opcache_invalidate() warnings since it's disabled some places. (#543)
* Check that HTTP_REFERER exists before checking it. (#544)
* Replace Cron View" with WP Crontrol because it's still updated. (#546)
* adding hook (wp_cache_cleared) for full cache purges (#537)

## 1.5.9 - 2017-12-15

* Fixed fatal error if the debug log was deleted while debugging was enabled and a visitor came to the site.
* Fixed the dynamic caching test plugin because of PHP7 changes. Dynamic cache mode must be enabled now.
* Lots of WordPress coding style formatting fixes to the code.
* All changes: https://github.com/Automattic/wp-super-cache/compare/1.5.8...1.5.9

## 1.5.8 - 2017-10-31

* PHP 7 fixes. (#429)
* Fix debug comments checkbox. (#433)
* Only register uninstall function in admin pages to save queries. (#430)
* Check that wp-cache-phase1.php is loaded before saving settings page. (#428)
* If a url has a "?" in it then don't delete the associated cache. It'll delete the whole cache after stripping out ?... part. (#427 & #420)
* Allow static functions in classes to be used in cacheactions. (#425)
* Don't make AJAX requests anonymous. (#423)
* Fixed link to chmod explanation. (#421)
* Add more escaping to the CDN settings page. (#416)
* Use SERVER_PROTOCOL to determine http protocol. (#412 & #413)
* If preload stalls only send one email per day, but do display an admin notice. (#432)
* Fixed more PHP warnings in #438 and #437
* Hide mod_rewrite warnings for Nginx users. #434

## 1.5.7.1 - 2017-10-11

* If the HTTP HOST is empty then don't use it in strpos to avoid a PHP warning. (#408)
* Don't preload posts with permalinks that contain rejected strings. (#407)
* Generate a list of archive feeds that can be deleted when the site is updated. Also fixes corrupted config file issue and fatal error with older versions of WordPress. (#403)

## 1.5.7 - 2017-10-06

* Fix fatal error in plugins/searchengine.php (#398)

## 1.5.6 - 2017-10-04

* REST API: Added /plugins endpoint to handle the plugins settings page. (#382)
* Minor changes to indentaion and spaces to tabs conversion (#371) (#395)
* Don't set $wp_super_cache_comments here as it's not saved. (#379)
* realpath() only works on directories. The cache_file wasn't set correctly. (#377)
* Fix problem deleting cache from Toolbar because of realpath() (#381)
* Use trigger_error() instead of echoing to the screen if a config file isn't writeable. (#394)
* Added the "wpsc_enable_wp_config_edit" filter to disable editing the wp-config.php (#392)
* Fix some PHP notices when comments are edited/published/maintained. (#386)
* Minor changes to description on plugins page. (#393)

## 1.5.5 - 2017-08-29

* Catch fatal errors so they're not cached, improve code that catches unknown page types. (#367)
* Fix caching on older WP installs, and if the plugin is inactive on a blog, but still caching, give feeds a short TTL to ensure they're fresh. (#366)
* When preloading don't delete sub-directories, or child pages, when caching pages. (#363)
* Avoid PHP warnings from the REST API for settings that are not yet defined. (#361)
* Added missing settings to the config file. (#360)

## 1.5.4 - 2017-08-23

* Fix messages related to creating advanced-cache.php (#355, #354)
* Deleting the plugin doesn't need to delete the cache directory as it's already done on deactivation. (#323)
* Disable Jetpack mobile detection if Jetpack Beta is detected. (#298)
* Add more checks on directories to make sure they exist before deleting them. (#324)
* Add siteurl setting to CDN page for users who have WordPress in it's own directory. (#332)
* Don't enable and then not save debug comments when toggling logging. (#334)
* Show plugin activity html comments to users who disable caching for logged in users. (#335)
* Better notifications on Preload page, and redo sql to fetch posts. Added "wpsc_preload_post_types_args" filter on post visibility, and wpsc_preload_post_types filter on post types used. (#336)
* Use a cached feed if it is newer than the last time a post was updated. (#337)
* Better define a sitemap (#340) but when the content type is unknown add more checks to find out what it is. (#346)
* Save cache location correctly on the advanced settings page. (#345)
* Make sure the debug log exists before toggling it on/off to ensure the http auth code is added to it.
* Return the correct cache type to the REST API. Ignore supercache enabled status. (#352)
* Fix cache contents in REST API showing double count of supercache files. (#353)
* Move the nonce in the CDN page back into a function. (#346)
* Use realpath to compare directories when loading the sample config file to account for symlinked directories. (#342)
* Other minor changes to html or typos
(Numbers are [pull requests](https://github.com/Automattic/wp-super-cache/pulls) on Github.)

## 1.5.3 - 2017-07-26

* Fix a critical bug that caused unlink to be run on null while deleting the plugin.

## 1.5.2 - 2017-07-26

* Add a trailing slash to home path. Fixes problems with finding the .htaccess file.
* Delete WPCACHEHOME and WP_CACHE from wp-config.php when plugin deactivated.
* Check that WPCACHEHOME is the right path on each load of the settings page.
* Load the REST API code without using WPCACHEHOME.
* Fixed mobile browser caching when using WP-Cache caching.
* Fixed directory checks on Windows machines.
* Reverted CDN changes in 1.5.0 as they caused problems in older "WordPress in a separate directory" installs.
* Added note to CDN page when site url != home url. Site owners can use a filter to adjust the URL used.
* Stop preload quicker when requested while preloading taxonomies.
* Added more information for when updating the .htaccess file fails.
* "Served by" header is now optional. Enable it by setting $wpsc_served_header to true in the config file.

## 1.5.1 - 2017-07-20

* Don't use anonymous functions in REST API
* Check that REST API Controller is available before loading the REST API.
* Don't use multibyte string functions because some sites don't have it enabled.

## 1.5.0 - 2017-07-19

* REST API settings endpoints.
* Simplified settings page.
* WP-Cache files reorganised.
* Caching of more http headers.
* Lots of bug fixes.

## 1.4.9 - 2017-06-01

* Fixed bug when not running sem_remove after sem_release. See https://github.com/Automattic/wp-super-cache/issues/85
* Fixed a PHP error impacting PHP 7.1.
* Fixed a bug where we cached PUT and DELETE requests. We're treating them like POST requests now.
* Delete supercache cache files, even when supercache is disabled, because mod_rewrite rules might still be active.
* Updated the settings page, moving things around. [#173](https://github.com/Automattic/wp-super-cache/pull/173)
* Make file locking less attractive on the settings page and fixed the WPSC_DISABLE_LOCKING constant so it really disables file locking even if the user has enabled it already.
* Added a WPSC_REMOVE_SEMAPHORE constant that must be defined if sem_remove() is to be used as it may cause problems.  [#174](https://github.com/Automattic/wp-super-cache/pull/174)
* Added a "wpsc_delete_related_pages_on_edit" filter that on returning 0 will disable deletion of pages outside of page being edited. [#175](https://github.com/Automattic/wp-super-cache/pull/175)
* Fixed plugin deleting all cached pages when a site had a static homepage. [#175](https://github.com/Automattic/wp-super-cache/pull/175)
* Make sure $cache_path has a trailing slash [#177](https://github.com/Automattic/wp-super-cache/pull/77)
* Remove flush() [#127](https://github.com/Automattic/wp-super-cache/pull/127) but also check if headers are empty and flush and get headers again. [#179](https://github.com/Automattic/wp-super-cache/pull/179)
* Add fix for customizer [#161](https://github.com/Automattic/wp-super-cache/pull/161) and don't cache PUT AND DELETE requests [#178](https://github.com/Automattic/wp-super-cache/pull/178)
* Check for superglobals before using them. [#131](https://github.com/Automattic/wp-super-cache/pull/131)

## 1.4.8 - 2017-01-11

* Removed malware URL in a code comment. (harmless to operation of plugin but gets flagged by A/V software)
* Updated translation file.

## 1.4.7 - 2016-12-09

* Update the settings page for WordPress 4.4. layout changes.

## 1.4.6 - 2015-10-09

* Generate the file cache/.htaccess even when one exists so gzip rules are created and gzipped pages are served correctly. Props Tigertech. https://wordpress.org/support/topic/all-website-pages-downloading-gz-file-after-latest-update?replies=36#post-7494087

## 1.4.5 - 2015-09-25

* Enhancement: Only preload public post types. Props webaware.
* Added an uninstall function that deletes the config file. Deactivate function doesn't delete it any more.
* Possible to deactivate the plugin without visiting the settings page now.
* Fixed the cache rebuild system. Rebuild files now survive longer than the request that generate them.
* Minor optimisations: prune_super_cache() exits immediately if the file doesn't exist. The output of wp_cache_get_cookies_values() is now cached.
* Added PHP pid to the debug log to aid debugging.
* Various small bug fixes.
* Fixed reset of expiry time and GC settings when updating advanced settings.
* Removed CacheMeta class to avoid APC errors. It's not used any more.
* Fixed reset of advanced settings when using "easy" settings page.
* Fixed XSS in settings page.
* Hide cache files when servers display directory indexes.
* Prevent PHP object injection through use of serialize().

## 1.4.4 - 2015-05-15

* Fixed fatal error in output handler if GET parameters present in query. Props webaware.
* Fixed debug log. It wasn't logging the right message.

## 1.4.3 - 2015-04-03

* Security release fixing an XSS bug in the settings page. Props Marc Montpas from Sucuri.
* Added wp_debug_log(). Props Jen Heilemann.
* Minor fixes.

## 1.4.2 - 2014-12-18

* Fixed "acceptable file list".
* Fixed "Don't cache GET requests" feature.
* Maybe fixed "304 not modified" problem for some users.
* Fixed some PHP warnings.

## 1.4.1 - 2014-08-07

* Fixed XSS in settings page. Props Simon Waters, Surevine Limited.
* Fix to object cache so entries may now be deleted when posts updated. (object cache still experimental)
* Documentation updates and cleanup of settings page.

## 1.4 - 2014-04-17

* Replace legacy mfunc/mnclude/dynamic-cached-content functionality with a "wpsc_cachedata" cacheaction filter.
* Added dynamic-cache-test.php plugin example wpsc_cachedata filter plugin.
* Delete post, tag and category cache when a post changes from draft to publish or vice versa. Props @Biranit.
* Update advanced-cache.php and wp-config.php if wp-cache-phase1.php doesn't load, usually happening after migrating to a new hosting service.
* Misc bugfixes.

## 1.3.2 - 2013-08-19

* Any mfunc/mclude/dynamic-cached-content tags in comments are now removed.
* Dynamic cached content feature disabled by default and must be enabled on the Advanced Settings page.
* Support for the mobile theme in Jetpack via helper plugin on script's Plugins tab.

## 1.3.1 - 2013-04-12

* Minor updates to documentation
* Fixed XSS in settings page.

## 1.3 - 2013-04-11

* mfunc tags could be executed in comments. Fixed.
* More support for sites that use the LOGGED_IN_COOKIE constant and custom cookies.

## 1.2 - 2012-12-13

* Garbage collection of old cache files is significantly improved. I added a scheduled job that keeps an eye on things and restarts the job if necessary. Also, if you enable caching from the Easy page garbage collection will be enabled too.
* Editors can delete single cached files from the Toolbar now.
* Fixed the cached page counter on the settings page.
* Some sites that updated to 1.0 experienced too much garbage collection. There are still stragglers out there who haven't upgraded but that's fixed now!
* Supercached mobile files are now used as there was a tiny little typo that needed fixing.
* If your site is in a directory and you saw problems updating a page then that should be fixed now.
* The deactivate hook has been changed so your configuration isn.t hosed when you upgrade. Unfortunately this will only happen after you do this upgrade.
* Some sites use custom cookies with the LOGGED_IN_COOKIE constant. Added support for that.
* Added support for WPTouch Pro, but it appears to be flaky still. Anyone have time to work on that? I don.t.
* Some sites had problems with scheduled posts. For some reason the plugin thought the post was in draft mode and then because it only checked the same post once, when the post magically became published the cache wasn.t cleared. That.s fixed, thanks to the debug logging of several patient users.
* And more bug fixes and translation updates.

## 1.1 - 2012-06-13

* Use $_SERVER[ 'SERVER_NAME' ] to create cache directories.
* Only create blogs cached directories if valid requests and blogs exist.
* Only clear current blog's cache files if navigation menu is modified
* Added clean_post_cache action to clear cache on post actions
* Removed garbage collection details on Contents tab
* Added wp_cache_check_mobile cacheaction filter to shortcircuit mobile device check.
* Don't delete cache files for draft posts
* Added action on wp_trash_post to clear the cache when trashed posts are deleted
* Show a warning when 304 browser caching is disabled (because mod_rewrite caching is on)
* New check for safe mode if using less that PHP 5.3.0
* Added wp_supercache_remove_cookies filter to disable anonymous browsing mode.
* Fixed garbage collection schedule dropdown
* Fixed preload problem clearing site's cache on "page on front" sites.
* Fix for PHP variable not defined warnings
* Fixed problem refreshing cache when comments made as siteurl() sometimes didn't work
* Preloading of taxonomies is now optional
* Domain mapping fixes.
* Better support for https sites. Remove https:// to get cache paths.
* Added AddDefaultCharset .htaccess rule back in and added an option to remove it if required.
* Added multisite plugin that adds a "Cached" column to Network->Sites to disable caching on a per site basis.
* Added WPTouch plugin to modify browser and prefix list in mobile detection code. Added support for that plugin's exclude list.
* Fixed cache tester
* Filter the tags that are used to detect end-of-page using the wp_cache_eof_tags filter.
* Removed debug level from logging as it wasn't helpful.
* Removed mention of wp-minify.

## 1.0 - 2012-01-30

* Removed AddDefaultCharset .htaccess rule
* Fixed problem with blogs in a folder and don't have a trailing slash
* New scheduling of garbage collection
* Added a "Delete cache" link to Toolbar to delete cache of current page.
* Updated documentation
* Sorry Digg, Stephen Fry power now!
* Updated translations
* Preload taxonomies and all post types except revisionsand nav menu items
* Fixed previews by logged in users.
* Added option to make logged in users anonymous
* Use WP 3.0 variables to detect multisite installs
* Hash filenames so files are served from the same CDNs

## 0.9.9.9 - 2011-07-12

* Fixed typo, is_front_page.
* Serve repeated static files from the same CDN hostname.
* Updated translations.
* Make supercache dir lowercase to avoid problems with unicode URLs.
* Add option to skip https loaded static content.
* Remove 5 second check on age of existing cache files. Should help with posts that get lots of comments and traffic.
* Lots of bugs fixed.

## 0.9.9.8 - 2011-01-07

* CDN updates: can be switched off, multiple CNAMEs.
* Uninstall process improved. It removes generated files and fixes edited files.
* Cached dynamic pages can now be stored in Supercache files and compressed.
* 1and1 Webhosting fix (/kunden/)
* Remove log by email functionality as it caused problems for users who were inundated by email
* Many more minor fixes and changes.

## 0.9.9.6 - 2010-09-29

* Fixed problem serving cached files with PHP
* Added support for 304 "file not modified" header to help browser caching. (PHP caching only)
* Added French & German translations, updated Italian translation and fixed translation strings.
* Sleep 4 seconds between preload urls to reduce load on the server
* Updated docs and FAQs.

## 0.9.9.5 - 2010-09-24

* Disable compression on on easy setup page. Still causes problems on some hosts.
* Remove footerlink on easy setup page.
* Don't delete mod_rewrite rules when caching is disabled.
* Don't stop users using settings page when in safe mode.

## 0.9.9.4 - 2010-09-22

* Settings page split into tabbed pages.
* Added new "Easy" settings page for new users.
* New PHP caching mode to serve supercached files.
* Mobile support fixes.
* Added Domain mapping support plugin.
* Added "awaiting moderation" plugin that removes that text from posts.
* Terminology change. Changed "half on" to "legacy caching".
* Fixed cache tester on some installs of WordPress.
* Updated documentation
* Added $wp_super_cache_lock_down config variable to hide lockdown and directly cached pages admin items.
* Preloaded checks if it has stalled and reschedules the job to continue.
* Serve the gzipped page when first cached if the client supports compression.
* Lots more bug fixes..

## 0.9.9.3 - 2010-06-16

* Fixed division by zero error in half on mode.
* Always show "delete cache" button.
* Fixed "Update mod_rewrite rules" button.
* Minor text changes to admin page.

## 0.9.9.2 - 2010-06-15

* Forgot to change version number in wp-cache.php

## 0.9.9.1 - 2010-06-15

* Added preloading of static cache.
* Better mobile plugin support
* .htaccess rules can be updated now. Added wpsc_update_htaccess().
* Fixed "page on front" cache clearing bug.
* Check for wordpress_logged_in cookie so test cookie isn't detected.
* Added clear_post_supercache() to clear supercache for a single post.
* Put quotes around rewrite rules in case paths have spaces.

## 0.9.9 - 2010-02-08

* Added experimental object cache support.
* Added Chinese(Traditional) translation by Pseric.
* Added FAQ on WP-Cache vs Supercache files.
* Use Supercache file if WP-Cache file not found. Useful if mod_rewrite rules are broken or not working.
* Get mobile browser list from WP Mobile Edition if found. Warn user if .htaccess out of date.
* Make sure writer lock is unlocked after writing cache files.
* Added link to developer docs in readme.
* Added Ukranian translation by Vitaly Mylo.
* Added Upgrade Notice section to readme.
* Warn if zlib compression in PHP is enabled.
* Added compression troubleshooting answer. Props Vladimir (http://blog.sjinks.pro/)
* Added Japanese translation by Tai (http://tekapo.com/)
* Updated Italian translation.
* Link to WP Mobile Edition from admin page for mobile support.

## 0.9.8 - 2009-11-18

* Added Spanish translation by Omi.
* Added Italian translation by Gianni Diurno.
* Addded advanced debug code to check front page for category problem. Enable by setting $wp_super_cache_advanced_debug to 1 in the config file.
* Fixed wordpress vs wordpress_logged_in cookie mismatch in cookie checking function.
* Correctly check if WP_CACHE is set or not. PHP is weird.
* Added wp_cache_clear_cache() to clear out cache directory.
* Only show logged in message when debugging enabled.
* Added troubleshooting point 20. PHP vs Apache user.
* Fixed problem deleting cache file.
* Don't delete cache files when moderated comments are deleted.

## 0.9.7 - 2009-10-02

* Fixed problem with blogs in folders.
* Added cache file listing and delete links to admin page.
* Added "Newest Cached Pages" listing in sidebox.
* Made admin page translatable.
* Added "How do I make certain parts of the page stay dynamic?" to FAQ.
* Advanced: added "late init" feature so that plugin activates on "init". Set $wp_super_cache_late_init to true in config file to use.
* Disable supercaching when GET parameters present instead of disabling all caching. Disable on POST (as normal) and preview.
* Fixed problem with cron job and mutex filename.
* Warn users they must enable mobile device support if rewrite rules detected. Better detection of when to warn that .htaccess rules must be updated (no need when rewrite rules not present)
* Advanced: Added "wpsupercache_404" filter. Return true to cache 404 error pages.
* Use the wordpress_test_cookie in the cache key.
* Show correct number of cache files when compression off.
* Fixed problem with PHP safe_mode detection.
* Various bugfixes and documentation updates. See Changelog.txt

## 0.9.6.1 - 2009-07-29

* Move "not logged in" message init below check for POST.
* Add is_admin() check so plugin definitely can't cache the backend.
* Add "do not cache" page type to admin page.

## 0.9.6 - 2009-07-27

* Add uninstall.php uninstall script.
* Updated cache/.htaccess rules (option to upgrade that)
* Added FAQ about category and static homepage problem.
* Add wp_cache_user_agent_is_rejected() back to wp-cache-phase2.php
* Show message for logged in users when caching disable for them.
* Check filemtime on correct supercache file

## 0.9.5 - 2009-07-17

* Show next and last GC times in minutes, not local time.
* Don't serve wp_cache cache files to rejected user agents. Supercache files are still served to them.
* If enabled, mobile support now serves php cached files to mobile clients and static cached files to everyone else.
* Added checks for "WPSC_DISABLE_COMPRESSION" and "WPSC_DISABLE_LOCKING" constants to disable compression and file locking. For hosting companies primarily.
* Added check for DONOTCACHEPAGE constant to avoid caching a page.
* Use PHP_DOCUMENT_ROOT when creating .htaccess if necessary.

## 0.9.4.3 - 2009-04-25

1. Added "Don't cache for logged in users" option.
2. Display file size stats on admin page.
3. Clear the cache when profile page is updated.
4. Don't cache post previews.
5. Added backslashes to rejected URI regex list.
6. Fixed problems with posts and comments not refreshing.

Misc fixes

[4.0.0-alpha]: https://github.com/Automattic/wp-super-cache/compare/v3.0.3...v4.0.0-alpha
[3.0.3]: https://github.com/Automattic/wp-super-cache/compare/v3.0.2...v3.0.3
[3.0.2]: https://github.com/Automattic/wp-super-cache/compare/v3.0.1...v3.0.2
[3.0.1]: https://github.com/Automattic/wp-super-cache/compare/v3.0.0...v3.0.1
[3.0.0]: https://github.com/Automattic/wp-super-cache/compare/v2.0.1...v3.0.0
[2.0.1]: https://github.com/Automattic/wp-super-cache/compare/v2.0.0...v2.0.1
[2.0.0]: https://github.com/Automattic/wp-super-cache/compare/v1.12.4...v2.0.0
[1.12.4]: https://github.com/Automattic/wp-super-cache/compare/v1.12.3...v1.12.4
[1.12.3]: https://github.com/Automattic/wp-super-cache/compare/v1.12.2...v1.12.3
[1.12.2]: https://github.com/Automattic/wp-super-cache/compare/v1.12.1...v1.12.2
[1.12.1]: https://github.com/Automattic/wp-super-cache/compare/v1.12.0...v1.12.1
[1.12.0]: https://github.com/Automattic/wp-super-cache/compare/v1.11.0...v1.12.0
[1.11.0]: https://github.com/Automattic/wp-super-cache/compare/v1.10.0...v1.11.0
[1.10.0]: https://github.com/Automattic/wp-super-cache/compare/v1.9.4...v1.10.0
[1.9.4]: https://github.com/Automattic/wp-super-cache/compare/v1.9.3...v1.9.4
[1.9.3]: https://github.com/Automattic/wp-super-cache/compare/v1.9.2...v1.9.3
[1.9.2]: https://github.com/Automattic/wp-super-cache/compare/v1.9.1...v1.9.2
[1.9.1]: https://github.com/Automattic/wp-super-cache/compare/v1.9.0...v1.9.1
[1.9.0]: https://github.com/Automattic/wp-super-cache/compare/v1.8...v1.9
[1.8]: https://github.com/Automattic/wp-super-cache/compare/v1.7.9...v1.8


================================================
FILE: LICENSE.txt
================================================
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses/>.


===================================


                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Moe Ghoul>, 1 April 1989
  Moe Ghoul, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.


================================================
FILE: README.md
================================================
# WP Super Cache

A very fast caching engine for WordPress that produces static HTML files.

[![WordPress Plugin](https://img.shields.io/wordpress/plugin/v/wp-super-cache)](https://wordpress.org/plugins/wp-super-cache/)
[![License: GPLv2+](https://img.shields.io/badge/License-GPLv2%2B-blue.svg)](./LICENSE.txt)
[![PHP 7.4+](https://img.shields.io/badge/PHP-7.4%2B-7A86B8.svg)](https://www.php.net/)
[![PHP Tests](https://github.com/Automattic/wp-super-cache/actions/workflows/php-tests.yml/badge.svg)](https://github.com/Automattic/wp-super-cache/actions/workflows/php-tests.yml)

This plugin generates static HTML files from your dynamic WordPress site. After a file is generated, the web server serves that file directly instead of processing WordPress PHP scripts, dramatically reducing load and response times.

For user-facing documentation, see the [WordPress.org plugin page](https://wordpress.org/plugins/wp-super-cache/). For extended documentation, see the [wiki](https://github.com/Automattic/wp-super-cache/wiki).

## Project structure

```
wp-cache.php              Main plugin entry point
wp-cache-phase1.php       Early-loading caching phase (runs before WordPress)
wp-cache-phase2.php       Main caching logic (runs during WordPress init)
advanced-cache.php        Drop-in loaded by WordPress when WP_CACHE is enabled
ossdl-cdn.php             CDN URL rewriting (OSSDL off-linker integration)

inc/                      Core includes (Boost integration, admin UI helpers)
rest/                     REST API endpoint classes for cache management
src/                      Source modules (device detection)
plugins/                  WP Super Cache's own plugin system (loaded early, before WP)
partials/                 Admin settings page tab templates

tests/php/                PHPUnit tests
tests/e2e/                End-to-end tests (Docker + Jest)

changelog/                Individual changelog entries (Jetpack Changelogger format)
.phan/                    Phan static analysis configuration and stubs
```

## Development setup

### Prerequisites

- PHP 7.4+
- [Composer](https://getcomposer.org/)

### Installation

```bash
composer install
```

### Running tests

```bash
# PHP unit tests
composer test-php

# With coverage
composer test-coverage
```

### Linting

```bash
# PHPCS (WordPress/Jetpack coding standards)
vendor/bin/phpcs
```

### Static analysis

```bash
# Phan
vendor/bin/phan
```

### End-to-end tests

E2E tests use Docker and Jest. See `tests/e2e/` for setup details:

```bash
cd tests/e2e
pnpm install
docker compose up -d
pnpm test
```

## Contributing

1. Branch from `trunk`.
2. Make your changes.
3. Add a changelog entry:
   ```bash
   vendor/bin/changelogger add
   ```
4. Push and open a pull request against `trunk`.

CI will automatically run:
- **PHP tests** across PHP 8.2, 8.3, 8.4, and 8.5
- **PHPCS linting** on changed lines
- **Changelog validation** (warns if no entry is included)

### Translations

Help translate WP Super Cache on the [WordPress.org translation page](https://translate.wordpress.org/projects/wp-plugins/wp-super-cache).

## Security

To report a security vulnerability, visit [automattic.com/security](https://automattic.com/security/) or the [HackerOne bug bounty program](https://hackerone.com/automattic).

## License

WP Super Cache is licensed under the [GNU General Public License v2 (or later)](./LICENSE.txt).


================================================
FILE: SECURITY.md
================================================
# Security Policy

Full details of the Automattic Security Policy can be found on [automattic.com](https://automattic.com/security/).

## Supported Versions

Generally, only the latest version of Jetpack and its associated plugins have continued support. If a critical vulnerability is found in the current version of a plugin, we may opt to backport any patches to previous versions. 

## Reporting a Vulnerability

Our HackerOne program covers the below plugin software, as well as a variety of related projects and infrastructure:

* [Jetpack](https://jetpack.com/)
* Jetpack Backup
* Jetpack Boost
* Jetpack CRM
* Jetpack Protect
* Jetpack Search
* Jetpack Social
* Jetpack VideoPress

**For responsible disclosure of security issues and to be eligible for our bug bounty program, please submit your report via the [HackerOne](https://hackerone.com/automattic) portal.**

Our most critical targets are:

* Jetpack and the Jetpack composer packages (all within this repo)
* Jetpack.com -- the primary marketing site.
* cloud.jetpack.com -- a management site.
* wordpress.com -- the shared management site for both Jetpack and WordPress.com sites.

For more targets, see the `In Scope` section on [HackerOne](https://hackerone.com/automattic).

_Please note that the **WordPress software is a separate entity** from Automattic. Please report vulnerabilities for WordPress through [the WordPress Foundation's HackerOne page](https://hackerone.com/wordpress)._

## Guidelines

We're committed to working with security researchers to resolve the vulnerabilities they discover. You can help us by following these guidelines:

*   Follow [HackerOne's disclosure guidelines](https://www.hackerone.com/disclosure-guidelines).
*   Pen-testing Production:
    *   Please **setup a local environment** instead whenever possible. Most of our code is open source (see above).
    *   If that's not possible, **limit any data access/modification** to the bare minimum necessary to reproduce a PoC.
    *   **_Don't_ automate form submissions!** That's very annoying for us, because it adds extra work for the volunteers who manage those systems, and reduces the signal/noise ratio in our communication channels.
    *   To be eligible for a bounty, all of these guidelines must be followed.
*   Be Patient - Give us a reasonable time to correct the issue before you disclose the vulnerability.

We also expect you to comply with all applicable laws. You're responsible to pay any taxes associated with your bounties.


================================================
FILE: advanced-cache.php
================================================
<?php
// WP SUPER CACHE 1.2
function wpcache_broken_message() {
	global $wp_cache_config_file;
	if ( isset( $wp_cache_config_file ) == false ) {
		return '';
	}

	$doing_ajax     = defined( 'DOING_AJAX' ) && DOING_AJAX;
	$xmlrpc_request = defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST;
	$rest_request   = defined( 'REST_REQUEST' ) && REST_REQUEST;
	$robots_request = strpos( $_SERVER['REQUEST_URI'], 'robots.txt' ) != false;

	$skip_output = ( $doing_ajax || $xmlrpc_request || $rest_request || $robots_request );
	if ( false == strpos( $_SERVER['REQUEST_URI'], 'wp-admin' ) && ! $skip_output ) {
		echo '<!-- WP Super Cache is installed but broken. The constant WPCACHEHOME must be set in the file wp-config.php and point at the WP Super Cache plugin directory. -->';
	}
}

if ( false == defined( 'WPCACHEHOME' ) ) {
	define( 'ADVANCEDCACHEPROBLEM', 1 );
} elseif ( ! include_once WPCACHEHOME . 'wp-cache-phase1.php' ) {
	if ( ! @is_file( WPCACHEHOME . 'wp-cache-phase1.php' ) ) {
		define( 'ADVANCEDCACHEPROBLEM', 1 );
	}
}
if ( defined( 'ADVANCEDCACHEPROBLEM' ) ) {
	register_shutdown_function( 'wpcache_broken_message' );
}


================================================
FILE: changelog/.gitkeep
================================================


================================================
FILE: changelog/add-check-type-for-supercache-last-cached-option
================================================
Significance: patch
Type: fixed

Fix a PHP warning when the newest cached pages list is unavailable.


================================================
FILE: changelog/add-live-preview-blueprint
================================================
Significance: minor
Type: added

Add a WordPress.org Live Preview Blueprint.


================================================
FILE: changelog/fix-audit_json_encode_flags_part_trois
================================================
Significance: patch
Type: fixed

Ensure proper flags are used with `json_encode()`.


================================================
FILE: changelog/fix-more-json-encode-flags
================================================
Significance: patch
Type: fixed
Comment: Add more missing json_encode flags.




================================================
FILE: changelog/fix-null-wp-cache-home-path
================================================
Significance: patch
Type: fixed

Fix `str_starts_with()` PHP 8.1+ deprecation when `$wp_cache_home_path` is null in `get_current_url_supercache_dir()`.


================================================
FILE: changelog/fix-phpcompatibility-dev-run
================================================
Significance: patch
Type: fixed
Comment: Suppress phpcompatibility sniffs that apply to code that is properly guarded with a version check.




================================================
FILE: changelog/remove-wpsc-outside-dep-device-detection
================================================
Significance: patch
Type: changed

Device Detection: use an embedded version instead of the Composer dependency


================================================
FILE: changelog/renovate-cheerio-1.x
================================================
Significance: patch
Type: changed

Update package dependencies.


================================================
FILE: changelog/renovate-js-unit-testing-packages
================================================
Significance: patch
Type: changed

Update package dependencies.


================================================
FILE: changelog/renovate-js-unit-testing-packages#2
================================================
Significance: patch
Type: changed

Update package dependencies.


================================================
FILE: changelog/renovate-lock-file-maintenance
================================================
Significance: patch
Type: changed

Update package dependencies.


================================================
FILE: changelog/renovate-lock-file-maintenance#2
================================================
Significance: patch
Type: changed

Update package dependencies.


================================================
FILE: changelog/renovate-lock-file-maintenance#3
================================================
Significance: patch
Type: changed

Update package dependencies.


================================================
FILE: changelog/renovate-major-definitelytyped
================================================
Significance: patch
Type: changed

Update package dependencies.


================================================
FILE: changelog/renovate-npm-axios-vulnerability
================================================
Significance: patch
Type: changed

Update package dependencies.


================================================
FILE: changelog/renovate-wikimedia-testing-access-wrapper-4.x
================================================
Significance: patch
Type: changed
Comment: Update composer.lock.




================================================
FILE: changelog/update-composer-2.9
================================================
Significance: patch
Type: changed
Comment: Update composer.lock for composer 2.9.




================================================
FILE: changelog/update-gpl-license-address
================================================
Significance: patch
Type: changed
Comment: Update GPL license notices. The FSF moved out of 59 Temple Place back in 2005.




================================================
FILE: changelog/update-minimum-wp-to-6.8
================================================
Significance: major
Type: removed

General: Update minimum WordPress version to 6.8.


================================================
FILE: changelog/update-node-24
================================================
Significance: patch
Type: changed
Comment: Bump `@types/node` to v24.




================================================
FILE: changelog/update-switch-to-tsgo
================================================
Significance: patch
Type: changed

Switch to Native TypeScript compiler based on Go.


================================================
FILE: changelog/update-tooling-update_stable_tag_in_backport
================================================
Significance: patch
Type: fixed
Comment: Update stable tag in trunk.




================================================
FILE: changelog/update-tsgo-fix-type-errors-in-e2e-projects
================================================
Significance: patch
Type: fixed

Fix TS errors detected by tsgo.


================================================
FILE: composer.json
================================================
{
	"name": "automattic/wp-super-cache",
	"description": "A very fast caching engine for WordPress that produces static html files.",
	"type": "wordpress-plugin",
	"license": "GPL-2.0-or-later",
	"require-dev": {
		"yoast/phpunit-polyfills": "^4.0.0",
		"automattic/jetpack-changelogger": "^6.0.14",
		"automattic/phpunit-select-config": "^1.0.4",
		"phan/phan": "^5.4",
		"php-stubs/wordpress-stubs": "^6.8",
		"php-stubs/wp-cli-stubs": "^2.10",
		"automattic/jetpack-codesniffer": "^4.0",
		"sirbrillig/phpcs-changed": "^2.11"
	},
	"autoload": {
		"classmap": [
			"src/"
		]
	},
	"scripts": {
		"phpunit": [
			"phpunit-select-config phpunit.#.xml.dist --colors=always"
		],
		"test-coverage": [
			"php -dpcov.directory=. ./vendor/bin/phpunit-select-config phpunit.#.xml.dist --coverage-php \"$COVERAGE_DIR/php.cov\""
		],
		"test-php": [
			"@composer phpunit"
		],
		"test-e2e": [
			"cd tests/e2e && pnpm i && pnpm env:up && pnpm test:run"
		],
		"build-production": "echo 'Add your build step to composer.json, please!'",
		"build-development": "echo 'Add your build step to composer.json, please!'"
	},
	"minimum-stability": "dev",
	"prefer-stable": true,
	"extra": {
		"autorelease": true,
		"autotagger": true,
		"changelogger": {
			"link-template": "https://github.com/Automattic/wp-super-cache/compare/v${old}...v${new}"
		},
		"release-branch-prefix": "super-cache",
		"wp-plugin-slug": "wp-super-cache",
		"wp-svn-autopublish": true
	},
	"config": {
		"autoloader-suffix": "6fe342bc02f0b440f7b3c8d8ade42286_super_cacheⓥ4_0_0_alpha",
		"allow-plugins": {
			"dealerdirect/phpcodesniffer-composer-installer": true
		}
	}
}


================================================
FILE: eslint.config.mjs
================================================
import js from '@eslint/js';
import globals from 'globals';

export default [
	js.configs.recommended,
	{
		languageOptions: {
			globals: {
				...globals.browser,
				...globals.jquery,
			},
		},
	},
];


================================================
FILE: inc/boost.php
================================================
<?php
/**
 * Code to handle migration from WP Super Cache to Jetpack Boost.
 *
 * @package WP_Super_Cache
 */

// Minimum version of Jetpack Boost required for compatibility.
if ( ! defined( 'MINIMUM_BOOST_VERSION' ) ) {
	define( 'MINIMUM_BOOST_VERSION', '3.4.5' );
}

/**
 * Get shared configuration for each migration button.
 */
function wpsc_get_boost_migration_config() {
	return array(
		'install_url'  => wp_nonce_url( admin_url( 'update.php?action=install-plugin&plugin=jetpack-boost' ), 'install-plugin_jetpack-boost' ),
		'activate_url' => admin_url( 'plugins.php' ),
		'is_installed' => wpsc_is_boost_installed(),
	);
}

/**
 * Display an admin notice to install Jetpack Boost.
 */
function wpsc_jetpack_boost_notice() {
	if ( ! isset( $_GET['page'] ) || $_GET['page'] !== 'wpsupercache' ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		return;
	}

	// hide the admin notice if Jetpack Boost Cache is already used.
	if ( 'BOOST' === wpsc_identify_advanced_cache() ) {
		return;
	}

	// Don't show the banner if the banner has been dismissed.
	$is_dismissed = '1' === get_user_option( 'wpsc_dismissed_boost_admin_notice' );
	if ( $is_dismissed ) {
		return;
	}

	// Don't show the admin notice if Jetpack Boost is too old.
	if ( ! wpsc_is_boost_current() ) {
		return;
	}

	// Don't show the banner if Super Cache is using features that Boost doesn't support.
	if ( ! wpsc_is_boost_compatible() ) {
		return;
	}

	$config       = wpsc_get_boost_migration_config();
	$button_url   = $config['is_installed'] ? $config['activate_url'] : $config['install_url'];
	$button_class = $config['is_installed'] ? 'wpsc-activate-boost-button' : 'wpsc-install-boost-button';

	?>
	<div id="wpsc-notice-boost-migrate" class="notice boost-notice notice-success is-dismissible">
	<h3>
		<?php esc_html_e( 'Migrate to Jetpack Boost', 'wp-super-cache' ); ?>
	</h3>
	<p>
		<?php esc_html_e( 'Your WP Super Cache setup is compatible with Boost\'s new caching feature. Continue to cache as you currently do and enhance your site\'s speed using our highly-rated performance solutions.', 'wp-super-cache' ); ?>
	</p>

	<p>
		<div class="wpsc-boost-migration-error" style="display:none; color:red; margin-bottom: 20px;"></div>
		<a data-source='notice' class='wpsc-boost-migration-button button button-primary <?php echo esc_attr( $button_class ); ?>' href="<?php echo esc_url( $button_url ); ?>">
			<div class="spinner" style="display:none; margin-top: 8px"></div>
			<label><?php esc_html_e( 'Migrate now', 'wp-super-cache' ); ?></label>
		</a>
	</p>
	</div>
	<?php
}
add_action( 'admin_notices', 'wpsc_jetpack_boost_notice' );

/**
 * Dismiss the migration admin notice by setting a user option flag.
 */
function wpsc_dismiss_boost_notice() {
	update_user_option( get_current_user_id(), 'wpsc_dismissed_boost_admin_notice', '1' );
}

/**
 * Handler called by AJAX to dismiss the admin notice.
 */
function wpsc_dismiss_boost_notice_ajax_handler() {
	check_ajax_referer( 'wpsc_dismiss_boost_notice', 'nonce' );
	wpsc_dismiss_boost_notice();
	wp_die();
}
add_action( 'wp_ajax_wpsc_dismiss_boost_notice', 'wpsc_dismiss_boost_notice_ajax_handler' );

/**
 * Dismiss the admin notice if the Jetpack Boost plugin is activated.
 */
function wpsc_dismiss_notice_on_activation() {
	if ( ! current_user_can( 'activate_plugins' ) ) {
		return;
	}

	wpsc_dismiss_boost_notice();
}
add_action( 'wp_ajax_wpsc_activate_boost', 'wpsc_dismiss_notice_on_activation' );
/**
 * Add a notice to the settings page if the Jetpack Boost cache module is detected.
 * The notice contains instructions on how to disable the Boost Cache module.
 */
function wpsc_deactivate_boost_cache_notice() {
	global $wpsc_advanced_cache_filename;
	?>
	<div style="width: 50%" class="notice notice-error"><h2><?php esc_html_e( 'Warning! Jetpack Boost Cache Detected', 'wp-super-cache' ); ?></h2>
		<?php // translators: %s is the filename of the advanced-cache.php file ?>
		<p><?php printf( esc_html__( 'The file %s was created by the Jetpack Boost plugin.', 'wp-super-cache' ), esc_html( $wpsc_advanced_cache_filename ) ); ?></p>
		<p><?php esc_html_e( 'You can use Jetpack Boost and WP Super Cache at the same time but only if the Cache Site Pages module in Boost is disabled. To use WP Super Cache for caching:', 'wp-super-cache' ); ?></p>
		<ol>
			<?php // translators: %s is a html link to the Boost settings page ?>
			<li><?php printf( esc_html__( 'Deactivate the "Cache Site Pages" module of Jetpack Boost on the %s page.', 'wp-super-cache' ), '<a href="' . esc_url( admin_url( 'admin.php?page=jetpack-boost' ) ) . '">' . esc_html__( 'Boost Settings', 'wp-super-cache' ) . '</a>' ); ?></li>
			<li><?php esc_html_e( 'Reload this page to configure WP Super Cache.', 'wp-super-cache' ); ?></li>
			<li><?php esc_html_e( 'You can continue to use the other features of Jetpack Boost.', 'wp-super-cache' ); ?></li>
		</ol>
	</div>
	<?php
	set_transient( 'wpsc_boost_cache_notice_displayed', true, WEEK_IN_SECONDS );
}

/**
 * Tell Jetpack when the cache is moved from Jetpack Boost to WP Super Cache.
 */
function wpsc_track_move_from_boost() {
	if ( ! get_transient( 'wpsc_boost_cache_notice_displayed' ) ) {
		return;
	}
	delete_transient( 'wpsc_boost_cache_notice_displayed' );

	do_action( 'jb_cache_moved_to_wpsc' );
}
add_action( 'wpsc_created_advanced_cache', 'wpsc_track_move_from_boost' );

/**
 * Notify Jetpack Boost that Boost Cache will be used instead of WP Super Cache.
 *
 * @param string $source The source of the migration: 'notice', 'banner', 'try_button'.
 */
function wpsc_notify_migration_to_boost( $source ) {
	if ( ! in_array( $source, array( 'notice', 'banner', 'try_button' ), true ) ) {
		return;
	}
	set_transient( 'jb_cache_moved_to_boost', $source, WEEK_IN_SECONDS );
}

/**
 * Check if Jetpack Boost is compatible with WP Super Cache.
 *
 * @return bool
 */
function wpsc_is_boost_compatible() {
	if ( ! empty( $GLOBALS['wp_cache_mobile_enabled'] ) ) {
		return false;
	}

	if ( isset( $GLOBALS['wp_super_cache_late_init'] ) && $GLOBALS['wp_super_cache_late_init'] === 1 ) {
		return false;
	}

	if ( ! empty( $GLOBALS['wpsc_rejected_cookies'] ) ) {
		return false;
	}

	if ( isset( $GLOBALS['wp_cache_not_logged_in'] ) && $GLOBALS['wp_cache_not_logged_in'] !== 2 ) {
		return false;
	}

	if ( isset( $GLOBALS['wp_cache_preload_on'] ) && $GLOBALS['wp_cache_preload_on'] === 1 ) {
		return false;
	}

	if ( ! empty( $GLOBALS['wp_cache_no_cache_for_get'] ) ) {
		return false;
	}

	if ( ! empty( $GLOBALS['wpsc_save_headers'] ) ) {
		return false;
	}

	if ( isset( $GLOBALS['wp_cache_make_known_anon'] ) && $GLOBALS['wp_cache_make_known_anon'] === 1 ) {
		return false;
	}

	if ( ! empty( $GLOBALS['wp_cache_mfunc_enabled'] ) ) {
		return false;
	}

	if ( isset( $GLOBALS['wp_cache_clear_on_post_edit'] ) && $GLOBALS['wp_cache_clear_on_post_edit'] === 1 ) {
		return false;
	}

	if ( ! empty( $GLOBALS['wp_cache_front_page_checks'] ) ) {
		return false;
	}

	if ( is_array( $GLOBALS['wp_cache_pages'] ) && array_sum( $GLOBALS['wp_cache_pages'] ) ) {
		return false;
	}

	$default_cache_acceptable_files = array( 'wp-comments-popup.php', 'wp-links-opml.php', 'wp-locations.php' );
	if ( is_array( $GLOBALS['cache_acceptable_files'] ) && array_diff( $GLOBALS['cache_acceptable_files'], $default_cache_acceptable_files ) ) {
		return false;
	}

	$default_cache_rejected_uri = array( 'wp-.*\\.php', 'index\\.php' );
	if ( is_array( $GLOBALS['cache_rejected_uri'] ) && array_diff( $GLOBALS['cache_rejected_uri'], $default_cache_rejected_uri ) ) {
		return false;
	}

	if ( is_array( $GLOBALS['cache_rejected_user_agent'] ) && array_diff( $GLOBALS['cache_rejected_user_agent'], array( '' ) ) ) {
		return false;
	}

	return true;
}

/**
 * Check if the Jetpack Boost that is installed is current.
 *
 * @return bool True if Jetpack Boost is same as or newer than version 3.4.0
 */
function wpsc_is_boost_current() {
	if ( defined( 'JETPACK_BOOST_VERSION' ) ) {
		return version_compare( (string) JETPACK_BOOST_VERSION, MINIMUM_BOOST_VERSION, '>=' );
	} else {
		return true; // don't care if Boost is not installed
	}
}

================================================
FILE: inc/delete-cache-button.js
================================================
/* global wpsc_ajax */
( function ( $ ) {
	$( document ).ready( function () {
		$( '#wp-admin-bar-delete-cache' ).on( 'click', function () {
			$( '#wp-admin-bar-delete-cache' ).fadeOut( 'slow' );
			$.ajax( {
				type: 'post',
				dataType: 'json',
				url: wpsc_ajax.ajax_url,
				data: {
					// wp ajax action
					action: 'ajax-delete-cache',

					path: wpsc_ajax.path,
					admin: wpsc_ajax.admin,

					// send the nonce along with the request
					nonce: wpsc_ajax.nonce,
				},
				success: function () {
					if ( wpsc_ajax.admin === '1' ) {
						// eslint-disable-next-line no-console
						console.log( 'Deleted entire cache' );
					} else {
						// eslint-disable-next-line no-console
						console.log( 'Deleted cache for this page and reloading' );
					}
					window.location.reload();
				},
				complete: function () {
					$( '#wp-admin-bar-delete-cache' ).fadeIn( 'slow' );
				},
			} );
			return false;
		} );
	} );
} )( jQuery );


================================================
FILE: inc/delete-cache-button.php
================================================
<?php
if ( defined( 'WPSCDISABLEDELETEBUTTON' ) ) {
	return;
}

/**
 * Adds "Delete Cache" button in WP Toolbar.
 */
function wpsc_admin_bar_render( $wp_admin_bar ) {

	if ( ! function_exists( 'current_user_can' ) || ! is_user_logged_in() ) {
		return false;
	}

	$path_to_home = rtrim( (string) parse_url( get_option( 'home' ), PHP_URL_PATH ), '/' );
	if ( ( is_singular() || is_archive() || is_front_page() || is_search() ) && current_user_can(  'delete_others_posts' ) ) {

		$site_regex = preg_quote( $path_to_home, '`' );
		$req_uri    = preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', $_SERVER[ 'REQUEST_URI' ] );
		$path       = preg_replace( '`^' . $site_regex . '`', '', $req_uri );

		$wp_admin_bar->add_menu( array(
					'parent' => '',
					'id' => 'delete-cache',
					'title' => __( 'Delete Cache', 'wp-super-cache' ),
					'meta' => array( 'title' => __( 'Delete cache of the current page', 'wp-super-cache' ) ),
					'href' => wp_nonce_url( admin_url( 'index.php?action=delcachepage&path=' . rawurlencode( $path ) ), 'delete-cache-' . $path . '_0', 'nonce' )
					) );
	}

	if ( is_admin() && ( wpsupercache_site_admin() || current_user_can( 'delete_others_posts' ) ) ) {
		$wp_admin_bar->add_menu( array(
					'parent' => '',
					'id' => 'delete-cache',
					'title' => __( 'Delete Cache', 'wp-super-cache' ),
					'meta' => array( 'title' => __( 'Delete Super Cache cached files', 'wp-super-cache' ) ),
					'href' => wp_nonce_url( admin_url( 'index.php?admin=1&action=delcachepage&path=' . rawurlencode( trailingslashit( $path_to_home ) ) ), 'delete-cache-' . trailingslashit( $path_to_home ) . '_1', 'nonce'  )
					) );
	}
}
add_action( 'admin_bar_menu', 'wpsc_admin_bar_render', 99 );

function wpsc_delete_cache_scripts() {
	if ( ! is_user_logged_in() ) {
		return;
	}

	if (
		is_plugin_active( 'amp/amp.php' ) ||
		( function_exists( 'ampforwp_is_amp_endpoint' ) && ampforwp_is_amp_endpoint() )
	) {
		wp_cache_debug( 'AMP detected. Not loading Delete Cache button JavaScript.' );
		return;
	}

	$path_to_home = rtrim( (string) parse_url( get_option( 'home' ), PHP_URL_PATH ), '/' );

	wp_enqueue_script( 'delete-cache-button', plugins_url( '/delete-cache-button.js', __FILE__ ), array('jquery'), '1.0', 1 );

	if ( ( is_singular() || is_archive() || is_front_page() || is_search() ) && current_user_can(  'delete_others_posts' ) ) {
		$site_regex   = preg_quote( $path_to_home, '`' );
		$req_uri      = preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', $_SERVER[ 'REQUEST_URI' ] );
		$path_to_home = preg_replace( '`^' . $site_regex . '`', '', $req_uri );
		$admin        = 0;
	} else {
		$admin = 1;
	}

	if ( $path_to_home === '' ) {
		$path_to_home = '/';
	}

	$nonce = wp_create_nonce( 'delete-cache-' . $path_to_home . '_' . $admin );
	wp_localize_script( 'delete-cache-button', 'wpsc_ajax', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'path' => $path_to_home, 'admin' => $admin, 'nonce' => $nonce ) );
}
add_action( 'wp_ajax_ajax-delete-cache', 'wpsc_admin_bar_delete_cache_ajax' );
add_action( 'admin_enqueue_scripts', 'wpsc_delete_cache_scripts' );

/**
 * Delete cache for a specific page.
 */
function wpsc_admin_bar_delete_cache_ajax() {
	// response output
	header( "Content-Type: application/json" );
	if ( ! wpsc_delete_cache_directory() ) {
		if ( defined( 'WPSCDELETEERROR' ) ) {
			return json_decode( constant( 'WPSCDELETEERROR' ) );
		} else {
			return false;
		}
	}
}

function wpsc_admin_bar_delete_cache() {
	$referer = wp_get_referer();

	if ( ! isset( $_GET['admin'] ) ) {
		$_GET['admin'] = 0;
	}

	foreach( array( 'path', 'nonce', 'admin' ) as $part ) {
		if ( isset( $_GET[ $part ] ) ) {
			$_POST[ $part ] = $_GET[ $part ];
		}
	}
	wpsc_delete_cache_directory();

	$req_path = isset( $_POST['path'] ) ? sanitize_text_field( stripslashes( $_POST['path'] ) ) : '';
	$valid_nonce = ( $req_path && isset( $_POST['nonce'] ) ) ? wp_verify_nonce( $_POST['nonce'], 'delete-cache-' . $_POST['path'] . '_' . $_POST['admin'] ) : false;

	if (
		$valid_nonce
		&& $referer
		&& $req_path
		&& (
			false !== stripos( $referer, $req_path )
			|| 0 === stripos( $referer, wp_login_url() )
		)
	) {
		/**
		 * Hook into the cache deletion process after a successful cache deletion from the admin bar button.
		 *
		 * @since 1.9
		 *
		 * @param string $req_path Path of the page where the cache flush was requested.
		 * @param string $referer  Referer URL.
		 */
		do_action( 'wpsc_after_delete_cache_admin_bar', $req_path, $referer );

		if ( $_POST['admin'] ) {
			wp_safe_redirect( $referer );
		} else {
			wp_safe_redirect( esc_url_raw( home_url( $req_path ) ) );
		}
		exit( 0 );
	} else {
		die( "Oops. Problem with nonce. Please delete cached page from settings page." );
	}
}

if ( 'delcachepage' === filter_input( INPUT_GET, 'action' ) ) {
	add_action( 'admin_init', 'wpsc_admin_bar_delete_cache' );
}

function wpsc_delete_cache_directory() {
	if ( ! current_user_can( 'delete_others_posts' ) ) {
		return false;
	}

	$req_path    = isset( $_POST['path'] ) ? sanitize_text_field( stripslashes( $_POST['path'] ) ) : '';
	$valid_nonce = ( $req_path && isset( $_POST['nonce'] ) ) ? wp_verify_nonce( $_POST['nonce'], 'delete-cache-' . $_POST['path'] . '_' . $_POST['admin'] ) : false;

	if ( ! $valid_nonce ) {
		wp_cache_debug( 'wpsc_delete_cache_directory: nonce was not valid' );
		return false;
	}

	$path = realpath( trailingslashit( get_supercache_dir() . str_replace( '..', '', preg_replace( '/:.*$/', '', $req_path ) ) ) );

	if ( $path ) {
		if ( isset( $_POST['admin'] ) && (int) $_POST['admin'] === 1 ) {
			global $file_prefix;
			wp_cache_debug( 'Cleaning cache for this site.' );
			wp_cache_clean_cache( $file_prefix );
			return;
		}
		$path           = trailingslashit( $path );
		$supercachepath = realpath( get_supercache_dir() );

		if ( false === wp_cache_confirm_delete( $path ) || ! str_starts_with( $path, $supercachepath ) ) {
			wp_cache_debug( 'Could not delete directory: ' . $path );
			define( 'WPSCDELETEERROR', 'Could not delete directory' );
			return false;
		}

		wp_cache_debug( 'Deleting cache files in directory: ' . $path );
		wpsc_delete_files( $path );
		return;
	} else {
		wp_cache_debug( 'wpsc_delete_cache_directory: Could not delete directory. It does not exist: ' . esc_attr( $_POST['path'] ) );
	}
}


================================================
FILE: inc/preload-notification.php
================================================
<?php

// phpcs:disable WordPress.Security.NonceVerification.Recommended

function wpsc_preload_notification_scripts() {
	if (
		isset( $_GET['page'] ) && $_GET['page'] === 'wpsupercache' &&
		isset( $_GET['tab'] ) && $_GET['tab'] === 'preload'
	) {
		wp_enqueue_script(
			'preload-notification',
			plugins_url( '/js/preload-notification.js', __DIR__ ),
			array( 'jquery', 'wp-i18n' ),
			WPSC_VERSION_ID,
			true
		);

		wp_localize_script(
			'preload-notification',
			'wpsc_preload_ajax',
			array(
				'ajax_url'       => admin_url( 'admin-ajax.php' ),
				'nonce'          => wp_create_nonce( 'wpsc-get-preload-status' ),
				'preload_status' => wpsc_get_preload_status( true ),
			)
		);
	}
}

add_action( 'admin_footer', 'wpsc_preload_notification_scripts' );


================================================
FILE: js/admin.js
================================================
/**
 * Handle the buttons for the Boost migration.
 * @param {jQuery} $ - jQuery
 */
( $ => {
	$( document ).ready( function () {
		// Don't run on versions of WordPress too old for the block editor and the translation methods it brings.
		// All the install / activate options are plain links with meaningful destinations anyway.
		if ( ! window.wp || ! window.wp.i18n ) {
			return;
		}

		const { __, sprintf } = window.wp.i18n;
		const ajaxurl = window.ajaxurl;
		const wpscAdmin = window.wpscAdmin;

		const setupBoostButton = $target => {
			if ( ! $target.hasClass( 'wpsc-boost-migration-button' ) ) {
				// eslint-disable-next-line no-console
				console.warn( 'Unexpected button clicked for Boost migration.' );
				return;
			}
			const $label = $target.find( 'label' );
			const $spinner = $target.find( '.spinner' );
			const $errorMessage = $target.prev( '.wpsc-boost-migration-error' );
			const source = $target.attr( 'data-source' );
			const originalText = $label.text();

			// Helper function to show an error.
			const showError = err => {
				reset();

				$errorMessage
					.text(
						err ||
							__( 'An error occurred while trying to activate Jetpack Boost', 'wp-super-cache' )
					)
					.show();
			};
			// Helper function to show Boost Banner work in progress.
			const showBusy = action => {
				$target.attr( 'disabled', true );
				$label.text( action );
				$spinner.addClass( 'is-active' ).show();
			};

			// Helper function to reset Boost Banner button.
			const reset = () => {
				$target.attr( 'disabled', false );
				$label.text( originalText );
				$spinner.removeClass( 'is-active' ).hide();
			};

			// Activate Jetpack Boost.
			const activateBoost = () => {
				showBusy( __( 'Activating…', 'wp-super-cache' ) );

				$.post( ajaxurl, {
					action: 'wpsc_activate_boost',
					_ajax_nonce: wpscAdmin.boostActivateNonce,
					source: source,
				} )
					.done( response => {
						if ( response.success ) {
							$label.text( 'Success! Sending you to Jetpack Boost...' );
							$spinner.hide();
							window.location.href = 'admin.php?page=jetpack-boost';
						} else {
							showError( response.data );
						}
					} )
					.fail( response => {
						showError(
							sprintf(
								/* translators: %d is an HTTP error code */
								__( 'Failed to activate Jetpack Boost: HTTP %d error received', 'wp-super-cache' ),
								response.status
							)
						);
					} );
			};

			const installBoost = () => {
				showBusy( __( 'Installing…', 'wp-super-cache' ) );
				$.post( ajaxurl, {
					action: 'wpsc_install_plugin',
					_ajax_nonce: wpscAdmin.boostInstallNonce,
					slug: 'jetpack-boost',
				} )
					.done( response => {
						if ( response.success ) {
							activateBoost();
						} else {
							showError( response.data );
						}
					} )
					.fail( response => {
						showError(
							sprintf(
								/* translators: %d is an HTTP error code */
								__( 'Failed to install Jetpack Boost: HTTP %d error received', 'wp-super-cache' ),
								response.status
							)
						);
					} );
			};

			return {
				installBoost,
				activateBoost,
			};
		};

		// One-click install for Boost.
		$( '.wpsc-install-boost-button' ).on( 'click', event => {
			event.preventDefault();
			const boostActivation = setupBoostButton( $( event.currentTarget ) );
			boostActivation.installBoost();
		} );

		// Handle activate button click.
		$( '.wpsc-activate-boost-button' ).on( 'click', event => {
			event.preventDefault();
			const boostActivation = setupBoostButton( $( event.currentTarget ) );
			boostActivation.activateBoost();
		} );

		// Dismiss Boost banner.
		$( '.wpsc-boost-dismiss' ).on( 'click', () => {
			$( '.wpsc-boost-banner' ).fadeOut( 'slow' );
			$.post( ajaxurl, {
				action: 'wpsc-hide-boost-banner',
				nonce: wpscAdmin.boostDismissNonce,
			} );
		} );

		// Dismiss admin notice
		$( '.boost-notice' ).on( 'click', '.notice-dismiss', event => {
			event.preventDefault();
			$.post( ajaxurl, {
				action: 'wpsc_dismiss_boost_notice',
				_ajax_nonce: wpscAdmin.boostNoticeDismissNonce,
			} );
		} );
	} );
} )( jQuery );


================================================
FILE: js/preload-notification.js
================================================
jQuery( document ).ready( function () {
	const { __, sprintf } = window.wp.i18n;

	// Set how often to check when a preload job is running
	const ACTIVE_INTERVAL = 3000;

	// Set how often to check when no preload job is running
	const INACTIVE_INTERVAL = 30000;

	// Get a reference to the log element and the previous log entry
	const preloadInfoPanel = jQuery( '#wpsc-preload-status' );

	// Abort early if no info panel exists.
	if ( ! preloadInfoPanel.length ) {
		return;
	}

	update_preload_status( window.wpsc_preload_ajax.preload_status );

	/**
	 * Schedule the next preload status update.
	 *
	 * @param {number} time - time in milliseconds to wait before updating.
	 */
	function schedule_preload_update( time ) {
		setTimeout( () => {
			jQuery.post(
				window.wpsc_preload_ajax.ajax_url,
				{
					action: 'wpsc_get_preload_status',
					_ajax_nonce: window.wpsc_preload_ajax.nonce,
				},
				json => {
					if ( ! json || ! json.success ) {
						return;
					}

					update_preload_status( json.data );
				}
			);
		}, time );
	}

	/**
	 * Update displayed preload status using the provided data.
	 *
	 * @param {object} data - description of the preload status.
	 */
	function update_preload_status( data ) {
		// Bail early if no data is available. But try again in a few seconds.
		if ( ! data || ( ! data.running && ! data.next && ! data.previous ) ) {
			schedule_preload_update( ACTIVE_INTERVAL );
			return;
		}

		preloadInfoPanel.empty();
		let nextPreloadTime = data.running ? ACTIVE_INTERVAL : INACTIVE_INTERVAL;

		if ( data.running ) {
			const panel = jQuery( '<div class="notice notice-warning">' );

			panel.append(
				jQuery( '<p>' ).append( jQuery( '<b>' ).text( __( 'Preloading', 'wp-super-cache' ) ) )
			);
			panel.append(
				jQuery( '<p>' ).text( __( 'Preloading is currently running.', 'wp-super-cache' ) )
			);

			const ul = panel.append( jQuery( '<ul>' ) );
			for ( const entry of data.history ) {
				ul.append( jQuery( '<li>' ).text( entry.group + ' ' + entry.progress + ': ' + entry.url ) );
			}

			preloadInfoPanel.append( panel );
		} else if ( data.next || data.previous ) {
			const panel = jQuery( '<div class="notice notice-info">' );

			if ( data.next ) {
				const diff = Math.max( 0, data.next - Math.floor( Date.now() / 1000 ) );
				const seconds = diff % 60;
				const minutes = Math.floor( diff / 60 ) % 60;
				const hours = Math.floor( diff / 3600 ) % 24;
				const days = Math.floor( diff / 86400 );

				// If we're preloading within the next minute, start loading faster.
				if ( minutes + hours === 0 ) {
					nextPreloadTime = ACTIVE_INTERVAL;
				}

				const p = jQuery( '<p>' );
				p.append(
					jQuery( '<b>' ).html(
						sprintf(
							/* Translators: 1: Number of days, 2: Number of hours, 3: Number of minutes, 4: Number of seconds */
							__(
								'<b>Next preload scheduled</b> in %1$s days, %2$s hours, %3$s minutes and %4$s seconds.',
								'wp-super-cache'
							),
							days,
							hours,
							minutes,
							seconds
						)
					)
				);

				panel.append( p );
			}

			if ( data.previous ) {
				const p = jQuery( '<p>' );
				p.append( jQuery( '<b>' ).text( __( 'Last preload finished:', 'wp-super-cache' ) + ' ' ) );
				p.append( jQuery( '<span>' ).text( new Date( data.previous * 1000 ).toLocaleString() ) );
				panel.append( p );
			}

			preloadInfoPanel.append( panel );
		}

		schedule_preload_update( nextPreloadTime );
	}
} );


================================================
FILE: languages/wp-super-cache-be_BY.po
================================================
# Translation of the WordPress plugin   by .
# Copyright (C) 2010
# This file is distributed under the same license as the  package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: WP Super Cache\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-super-cache\n"
"POT-Creation-Date: 2010-09-27 13:58+0000\n"
"PO-Revision-Date: 2011-08-10 18:25+0200\n"
"Last-Translator: \n"
"Language-Team: Alexandr Alexandrov <yuzver@gmx.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Belarusian\n"
"X-Poedit-Country: BELARUS\n"

#: plugins/awaitingmoderation.php:4
msgid "Your comment is awaiting moderation."
msgstr "Ваш каментар чакае пацверджання."

#: plugins/awaitingmoderation.php:23
#: plugins/awaitingmoderation.php:38
#: plugins/badbehaviour.php:47
#: plugins/badbehaviour.php:65
#: plugins/domain-mapping.php:47
#: plugins/domain-mapping.php:62
#: plugins/searchengine.php:61
#: plugins/searchengine.php:76
#: wp-cache.php:1114
msgid "Disable"
msgstr "Адключыць"

#: plugins/awaitingmoderation.php:29
#: plugins/badbehaviour.php:55
#: plugins/domain-mapping.php:53
#: plugins/searchengine.php:67
msgid "disabled"
msgstr "Адключаны"

#: plugins/awaitingmoderation.php:31
#: plugins/badbehaviour.php:57
#: plugins/domain-mapping.php:55
#: plugins/searchengine.php:69
#: wp-cache.php:1460
msgid "enabled"
msgstr "Уключаны"

#: plugins/awaitingmoderation.php:33
#, php-format
msgid "Awaiting Moderation plugin is %s"
msgstr "Статут ўбудовы \" Awaiting Moderation\": %s"

#: plugins/awaitingmoderation.php:34
msgid "(Remove the text \"Your comment is awaiting moderation.\" when someone leaves a moderated comment.) "
msgstr "(Прыбірае тэкст \" Ваш каментар чакае праверкі\" калі хто-то размяшчае каментар да запісу)"

#: plugins/awaitingmoderation.php:36
#: plugins/badbehaviour.php:63
#: plugins/domain-mapping.php:60
#: plugins/searchengine.php:74
#: wp-cache.php:1114
msgid "Enable"
msgstr "Дазволіць"

#: plugins/badbehaviour.php:45
msgid "Bad Behaviour not found. Please check your install."
msgstr "Плагін \" Bad Behaviour\" не быў знойдзены. Праверце, завяршылі Ці Вы яго ўстаноўку."

#: plugins/badbehaviour.php:60
#, php-format
msgid "Bad Behaviour support is %s."
msgstr "Статут ўбудовы \" Bad Behaviour\": %s."

#: plugins/badbehaviour.php:61
#, php-format
msgid "(Only legacy caching supported, disabled compression and requires <a href=\"http://www.bad-behavior.ioerror.us/\">Bad Behavior</a> in \"%s/plugins/bad-behavior/\") "
msgstr "(Гэты дадатковы модуль будзе функцыянаваць толькі ў рэжыме сярэдняга кэшавання, адключыце сціск і ўсталюйце ўбудова \"<a href=\"http://www.bad-behavior.ioerror.us/\">Bad Behavior</a>\" у \"%s/plugins/bad-behavior/\")"

#: plugins/badbehaviour.php:69
#: wp-cache.php:1191
#: wp-cache.php:1193
msgid "Warning!"
msgstr "Увага!"

#: plugins/domain-mapping.php:57
#, php-format
msgid "<a href=\"http://wordpress.org/extend/plugins/wordpress-mu-domain-mapping/\">Domain Mapping</a> support plugin is %s"
msgstr "Статут ўбудовы \" <a href=\"http://wordpress.org/extend/plugins/wordpress-mu-domain-mapping/\">Domain Mapping</a>\": %s"

#: plugins/domain-mapping.php:58
msgid "(support for multiple domains on multisite websites) "
msgstr "(Падтрымка для MU - сэрвісу блогаў)"

#: plugins/domain-mapping.php:72
msgid "Domain Mapping plugin detected! Please go to the Supercache plugins page and enable the domain mapping helper plugin."
msgstr "Выяўленая падтрымка сэрвісу мультиблогов! Каб палегчыць і паскорыць працу плагіна, Вам трэба ўключыць падтрымку мультиблогов ў наладах."

#: plugins/searchengine.php:71
#, php-format
msgid "<a href=\"http://ocaoimh.ie/no-adverts-for-friends/\">No Adverts for Friends</a> plugin is %s."
msgstr "Статут ўбудовы \" <a href=\"http://ocaoimh.ie/no-adverts-for-friends/\">No Adverts for Friends</a>\":% s."

#: plugins/searchengine.php:72
msgid "(requires <a href=\"http://ocaoimh.ie/no-adverts-for-friends/\">friendsadverts.php</a> too) "
msgstr "(Патрабуе ўсталёўкі <a href=\"http://ocaoimh.ie/no-adverts-for-friends/\">friendsadverts.php</a> ) "

#: wp-cache.php:87
#, php-format
msgid "Please create %s /wp-cache-config.php from wp-super-cache/wp-cache-config-sample.php"
msgstr "Калі ласка, стварыце файл% s / wp-cache-config.php з wp-super-cache/wp-cache-config-sample.php"

#: wp-cache.php:138
msgid "Warning! PHP Safe Mode Enabled!"
msgstr "Увага! Уключаны рэжым PHP Safe Mode!"

#: wp-cache.php:139
msgid "You may experience problems running this plugin because SAFE MODE is enabled."
msgstr "Пры працы з убудовай могуць узнікнуць праблемы, так як PHP Safe Mode уключаны на Вашым серверы."

#: wp-cache.php:143
msgid "Your server is set up to check the owner of PHP scripts before allowing them to read and write files."
msgstr "Ваш сервер настроены так, што правярае ўладальніка для ўсіх PHP скрыптоў перад тым як дазволіць ім чытанне або запіс у файл."

#: wp-cache.php:144
#, php-format
msgid "You or an administrator may be able to make it work by changing the group owner of the plugin scripts to match that of the web server user. The group owner of the %s/cache/ directory must also be changed. See the <a href=\"http://php.net/features.safe-mode\">safe mode manual page</a> for further details."
msgstr "Вы або Адміністратар можаце выправіць памылкі, змяніўшы групу ўладальніка скрыптоў плагіна праз налады вэб-сервера. Таксама трэба змяніць уладальніка для тэчкі% s / cache /. Для больш падрабязнай інфармацыі глядзіце <a href=\"http://php.net/features.safe-mode\">старонку дапамогі па рэжыму safe mode</a> (на англ.). "

#: wp-cache.php:146
msgid "You or an administrator must disable this. See the <a href=\"http://php.net/features.safe-mode\">safe mode manual page</a> for further details. This cannot be disabled in a .htaccess file unfortunately. It must be done in the php.ini config file."
msgstr "Вы або Адміністратар павінны адключыць гэта. Для больш падрабязнай інфармацыі глядзіце <a href=\"http://php.net/features.safe-mode\">старонку дапамогі па рэжыму safe mode</a> (на англ.). Дадзеныя налады НЕ могуць быць адключаныя праз файл. htaccess, для вырашэння праблемы трэба рэдагаваць php.ini ў наладах вэб-сервера. "

#: wp-cache.php:152
msgid "Permlink Structure Error"
msgstr "Памылка структуры спасылак"

#: wp-cache.php:153
msgid "A custom url or permalink structure is required for this plugin to work correctly. Please go to the <a href=\"options-permalink.php\">Permalinks Options Page</a> to configure your permalinks."
msgstr "Для карэктнай працы ўбудовы неабходная карэктная налада структуры спасылак. Каб наладзіць іх, наведайце старонку <a href=\"options-permalink.php\">Сталыя спасылкі</a> . "

#: wp-cache.php:165
#, php-format
msgid "Warning! Your hostname \"%s\" resolves to %s"
msgstr "Увага! Ваша hostname \"% s\"пераўтворана ў% s"

#: wp-cache.php:166
#, php-format
msgid "Your server thinks your hostname resolves to %s. Some services such as garbage collection by this plugin, and WordPress scheduled posts may not operate correctly."
msgstr "Ваш вэб-сервер вырашыў, што hostname зменена на% s. Некаторыя опцыі ўбудовы (напрыклад, \" Ачыстка смецця \") і сам WordPress могуць працаваць некарэктна."

#: wp-cache.php:167
#: wp-cache.php:181
#, php-format
msgid "Please see entry 16 in the <a href=\"%s\">Troubleshooting section</a> of the readme.txt"
msgstr "Каб даведацца больш, наведайце раздзел 16 ст <a href=\"%s\">Апісанні праблем</a> у файле readme.txt (на англ.) "

#: wp-cache.php:180
msgid "Unfortunately WordPress cannot find the file wp-cron.php. This script is required for the the correct operation of garbage collection by this plugin, WordPress scheduled posts as well as other critical activities."
msgstr "На жаль, файл wp-cron.php не быў знойдзены. Гэты скрыпт неабходны для карэктнай працы опциии \" Ачыстка смецця \"і самога WordPress."

#: wp-cache.php:195
msgid "Cannot continue... fix previous problems and retry."
msgstr "Немагчыма працягнуць ... перш чым паўтарыць спробу, выпраўце папярэднія памылкі."

#: wp-cache.php:204
msgid "Zlib Output Compression Enabled!"
msgstr "Сціск Zlib Output ўключана!"

#: wp-cache.php:205
msgid "PHP is compressing the data sent to the visitors of your site. Disabling this is recommended as the plugin caches the compressed output once instead of compressing the same page over and over again. Also see #21 in the Troubleshooting section. See <a href=\"http://php.net/manual/en/zlib.configuration.php\">this page</a> for instructions on modifying your php.ini."
msgstr "PHP выкарыстоўвае сціск для сціснутых старонкі Вашага сайта. Адключэнне дадзенай опцыі рэкамендуецца, каб пазбегнуць шматразовага сціску старонак убудовай. Даведацца больш, наведаўшы профіль 16 ст \" Апісанне праблем \"у файле readme.txt (на англ.). Таксама азнаёмцеся з <a href=\"http://php.net/manual/en/zlib.configuration.php\">гэтай старонкай</a> (на англ.) па php.ini. "

#: wp-cache.php:209
msgid "Mod rewrite may not be installed!"
msgstr "Здаецца, модуль mod_rewrite не ўстаноўлены!"

#: wp-cache.php:210
msgid "It appears that mod_rewrite is not installed. Sometimes this check isn&#8217;t 100% reliable, especially if you are not using Apache. Please verify that the mod_rewrite module is loaded. It is required for serving Super Cache static files. You will still be able to use legacy or PHP modes."
msgstr "Узнікла памылка, звязаная з тым, што модуль mod_rewrite адсутнічае ці не ўсталяваны. Калі ласка, праверце наяўнасць модуля mod_rewrite ў канфігурацыях сервера. Модуль неабходны для карэктнай працы ўбудовы з статычнымі файламі. Без падлучанага mod_rewrite Вы можаце выкарыстоўваць толькі рэжымы з падтрымкай PHP або сярэднюю кэшаванне . "

#: wp-cache.php:215
msgid "Read Only Mode. Configuration cannot be changed."
msgstr "Рэжым \" только_чтение \". Налады не могуць быць зменены."

#: wp-cache.php:216
#, php-format
msgid "The WP Super Cache configuration file is <code>%s/wp-cache-config.php</code> and cannot be modified. That file must be writeable by the webserver to make any changes."
msgstr "Канфігурацыйны файл плагіна WP Super Cache <code>%s/wp-cache-config.php</code> не можа быць зменены. Каб працягнуць, Вы павінны ўсталяваць правы на запіс для файла. "

#: wp-cache.php:217
msgid "A simple way of doing that is by changing the permissions temporarily using the CHMOD command or through your ftp client. Make sure it&#8217;s globally writeable and it should be fine."
msgstr "Самы просты спосаб выправіць гэта - змяніць правы доступу, выкарыстоўваючы CHMOD, праз FTP-кліент. Дастаткова ўсталяваць глабальныя правы на запіс."

#: wp-cache.php:218
msgid "Writeable:"
msgstr "Даступна для запісу:"

#: wp-cache.php:219
msgid "Readonly:"
msgstr "Толькі чытанне:"

#: wp-cache.php:231
#, php-format
msgid "Warning! %s is writeable!"
msgstr "Увага! Тэчка% s даступная для запісу!"

#: wp-cache.php:232
#, php-format
msgid "You should change the permissions on %s and make it more restrictive. Use your ftp client, or the following command to fix things:"
msgstr "Вы павінны змяніць правы на тэчку% s. Каб зрабіць гэта - скарыстайцеся FTP-кліента або наступнай камандай:"

#: wp-cache.php:240
msgid "Mobile rewrite rules detected"
msgstr "Выяўленая падтрымка мабільных прылад"

#: wp-cache.php:241
msgid "For best performance you should enable \"Mobile device support\" or delete the mobile rewrite rules in your .htaccess. Look for the 2 lines with the text \"2.0\\ MMP|240x320\" and delete those."
msgstr "Для больш прадуктыўнай працы сайта, Вам варта ўключыць опцыю \" Падтрымка мабільных прылад \"або выдаліць гэтую запіс з правілаў ст. Htaccess. Знайдзіце наступны тэкст (два радкі) \"2.0\\ MMP|240x320\" і выдаліце яго."

#: wp-cache.php:241
msgid "This will have no affect on ordinary users but mobile users will see uncached pages."
msgstr "На Вашых звычайных наведвальніках гэта ніяк не адаб'ецца, а вось якія выкарыстоўваюць мабільныя прылады для вэб-серфінгу не будуць атрымліваць кэшаваныя старонкі (калі опцыя адключаная)."

#: wp-cache.php:247
#: wp-cache.php:258
msgid "Rewrite rules must be updated"
msgstr "Правы на запіс павінны быць абноўленыя"

#: wp-cache.php:248
#: wp-cache.php:259
msgid "The rewrite rules required by this plugin have changed or are missing. "
msgstr "Неабходныя для працы ўбудовы правы былі змененыя або отсуствіі."

#: wp-cache.php:249
msgid "Mobile support requires extra rules in your .htaccess file, or you can set the plugin to legacy mode. Here are your options (in order of difficulty):"
msgstr "Падтрымка блогам мабільных прылад патрабуе прысутнасці асаблівых правілаў у файле. Htaccess, інакш Вы не зможаце выкарыстоўваць гэтую опцыю. Ніжэй прадстаўлены магчымы спосабы (у парадку складанасці):"

#: wp-cache.php:250
msgid "Set the plugin to legacy mode and enable mobile support."
msgstr "Перакладзіце убудова ў рэжым сярэдняга кэшавання і ўключыце падтрымку мобмльных прылад."

#: wp-cache.php:251
#: wp-cache.php:260
msgid "Scroll down the Advanced Settings page and click the <strong>Update Mod_Rewrite Rules</strong> button."
msgstr "Пракруціць старонку ўніз і націсніце кнопку <strong>Абнавіць правілы Mod_Rewrite.\"</strong>"

#: wp-cache.php:252
#, php-format
msgid "Delete the plugin mod_rewrite rules in %s.htaccess enclosed by <code># BEGIN WPSuperCache</code> and <code># END WPSuperCache</code> and let the plugin regenerate them by reloading this page."
msgstr "Выдаліце ​​ўсе правілы mod_rewrite з файла% s.htaccess, паміж <code># BEGIN WPSuperCache</code> і <code># END WPSuperCache</code> і абновіце старонку (аднаўленне правілаў запусціцца аўтаматычна). "

#: wp-cache.php:253
#, php-format
msgid "Add the rules yourself. Edit %s.htaccess and find the block of code enclosed by the lines <code># BEGIN WPSuperCache</code> and <code># END WPSuperCache</code>. There are two sections that look very similar. Just below the line <code>%%{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$</code> add these lines: (do it twice, once for each section)"
msgstr "Дадайце правілы самастойна. Для гэтага адкрыйце у рэдактары файл% s.htaccess і знайдзіце код паміж <code># BEGIN WPSuperCache</code> і <code># END WPSuperCache</code> . Вы ўбачыце два падобных блока кода. Адразу пасля радка <code>%%{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$</code> дадайце наступнае (такіх радкоў дзве, дадайце код і пасля другой): "

#: wp-cache.php:266
msgid "Required to serve compressed supercache files properly."
msgstr "Неабходна для правільнага сціску файлаў."

#: wp-cache.php:266
msgid "Required to set caching information on supercache pages. IE7 users will see old pages without this module."
msgstr "Неабходна наладзіць кэшаванне на старонцы ўбудовы. Карыстальнікі браўзэра IE7 будуць бачыць необновленные старонкі з кэша без падтрымкі дадзенага модуля."

#: wp-cache.php:266
msgid "Set the expiry date on supercached pages. Visitors may not see new pages when they refresh or leave comments without this module."
msgstr "Усталюйце дату заканчэння актуальнасці старонак. Карыстальнікі могуць не ўбачыць новую версію кэшаваныя старонкі без дадзенага модуля."

#: wp-cache.php:273
msgid "Missing Apache Modules"
msgstr "Адсутныя модулі Apache"

#: wp-cache.php:274
msgid "The following Apache modules are missing. The plugin will work in legacy mode without them. In full Supercache mode, your visitors may see corrupted pages or out of date content however."
msgstr "Наступныя модулі Apache адсутнічаюць на Вашым серверы. Без іх убудова зможа працаваць толькі ў рэжыме сярэдняга кэшавання. У рэжыме з падтрымкай Super Cache Вашы карыстальнікі могуць бачыць пашкоджаныя старонкі або пратэрмінаваныя іх копіі."

#: wp-cache.php:413
msgid "<strong>Warning!</strong> You attempted to enable compression but <code>zlib.output_compression</code> is enabled. See #21 in the Troubleshooting section of the readme file."
msgstr "<strong>\"Увага!</strong> Вы спрабуеце ўключыць сціск, але модуль <code>zlib.output_compression</code> адключаны. Глядзіце пункт нумар 21 падзелу \"Апісанне праблем \" у файле readme.txt (на англ.) "

#: wp-cache.php:501
msgid "WP Super Cache Settings"
msgstr "Налады WP Super Cache"

#: wp-cache.php:512
msgid "Notice: <em>Mod_rewrite or Legacy caching enabled</em>. Showing Advanced Settings Page by default."
msgstr "Важна: <em>Mod_rewrite або Legacy caching адключаныя.</em> Па змаўчанні будзе загружацца старонка \" Налады \"."

#: wp-cache.php:523
msgid "Configuration file changed, some values might be wrong. Load the page again from the \"Settings\" menu to reset them."
msgstr "Файл канфігурацый быў зменены, некаторыя налады не адпавядаюць патрабаванням ўбудовы. Наведайце старонку \" Налады \"каб выправіць гэта."

#: wp-cache.php:540
#: wp-cache.php:614
msgid "Caching must be enabled to use this feature"
msgstr "Кэшаванне павінна быць уключана, калі Вы хочаце выкарыстоўваць дадзеную опцыю"

#: wp-cache.php:542
msgid "Cache Tester"
msgstr "Праверка кэшавання"

#: wp-cache.php:543
msgid "Test your cached website by clicking the test button below."
msgstr "Праверце наладкі кэшавання свайго блога націскам адной кнопкі."

#: wp-cache.php:550
#, php-format
msgid "Fetching %s to prime cache: "
msgstr "Праверка старонкі% s у кэшы:"

#: wp-cache.php:552
#: wp-cache.php:559
#: wp-cache.php:566
msgid "OK"
msgstr "ЁСЦЬ"

#: wp-cache.php:557
#, php-format
msgid "Fetching first copy of %s: "
msgstr "Праверка першай копіі% s:"

#: wp-cache.php:564
#, php-format
msgid "Fetching second copy of %s: "
msgstr "Праверка второй копіі% s:"

#: wp-cache.php:570
msgid "One or more page requests failed:"
msgstr "Пры працы з кэшам адбыліся памылкі:"

#: wp-cache.php:589
#: wp-cache.php:590
#, php-format
msgid "Page %d: %d (%s)"
msgstr "Старонка% d:% d (% s)"

#: wp-cache.php:596
#, php-format
msgid "Page 1: %s"
msgstr "Старонка 1:% s"

#: wp-cache.php:597
#, php-format
msgid "Page 2: %s"
msgstr "Старонка 2:% s"

#: wp-cache.php:598
msgid "The timestamps on both pages match!"
msgstr "Часовыя штампы абодвух варыянтаў старонкі супадаюць!"

#: wp-cache.php:600
msgid "The pages do not match! Timestamps differ or were not found!"
msgstr "Старонкі не супадаюць! Часавы штамп адрозніваецца ці не быў знойдзены!"

#: wp-cache.php:606
msgid "Send non-secure (non https) request for homepage"
msgstr "Даслаць неабаронены (не па https) запыт для галоўнай старонкі"

#: wp-cache.php:607
msgid "Test Cache"
msgstr "Праверыць"

#: wp-cache.php:632
#: wp-cache.php:755
msgid "Cancel Cache Preload"
msgstr "Адмяніць агульнае кэшаванне"

#: wp-cache.php:638
msgid "Scheduled preloading of cache cancelled. If a job is currently running it will not shutdown until the current 100 pages are complete."
msgstr "Агульнае кэшаванне па раскладзе адключана. Калі служба цяпер запушчана, яна не будзе завершана пакуль бягучыя 100 старонак не кэшаваць."

#: wp-cache.php:649
msgid "Scheduled preloading of cache cancelled."
msgstr "Агульнае кэшаванне па раскладзе адключана."

#: wp-cache.php:675
#: wp-cache.php:753
msgid "Preload Cache Now"
msgstr "Стварыць агульны кэш цяпер"

#: wp-cache.php:678
msgid "Scheduled preloading of cache in 10 seconds."
msgstr "Агульная кэшаванне адбудзецца праз 10 секунд."

#: wp-cache.php:682
#, php-format
msgid "Scheduled preloading of cache in %d minutes"
msgstr "Агульнае кэшаванне адбудзецца праз% d хвілін"

#: wp-cache.php:686
msgid "This will cache every published post and page on your site. It will create supercache static files so unknown visitors (including bots) will hit a cached page. This will probably help your Google ranking as they are using speed as a metric when judging websites now."
msgstr "Пры актывацыі агульнага кэшавання, будзе створана копія для кожнай запісу і старонкі Вашага блога. У гэтым рэжыме ствараюцца статычныя старонкі, якія затым будуць бачыць \" неапазнаныя \"наведвальнікі (напрыклад, пошукавыя боты і іншыя). Гэта можа дапамагчы ў паляпшэнні ўзроўню PR Google, так як у аснове іх алгарытму ляжыць і хуткасць водгуку вэб-сайта. "

#: wp-cache.php:687
msgid "Preloading creates lots of files however. Caching is done from the newest post to the oldest so please consider only caching the newest if you have lots (10,000+) of posts. This is especially important on shared hosting."
msgstr "Аднак, пры выкарыстанні дадзенага віду кэша ствараецца нашмат больш файлаў. Рэкамендуецца выкарыстоўваць такі тып, калі ў Вас вельмі шмат запісаў (10 тысяч і больш) на блогу. Асабліва гэта важна, калі Вы карыстаецеся паслугамі віртуальнага хостынгу."

#: wp-cache.php:688
msgid "In &#8217;Preload Mode&#8217; regular garbage collection will only clean out old legacy files for known users, not the preloaded supercache files. This is a recommended setting when the cache is preloaded."
msgstr "У рэжыме 'Агульнага кэшавання' запланаваная ачыстка смецця будзе выдаляць толькі кэш запісаў простага тыпу (кэш з Super Cache не будзе выдалены). Дадзеная налада рэкамендавана для выкарыстання."

#: wp-cache.php:692
#, php-format
msgid "Refresh preloaded cache files every %s minutes. (0 to disable, minimum %d minutes.)"
msgstr "Перагружаць агульны кэш кожныя% s хвілін (ўвядзіце 0, каб адключыць, мінімальнае дапушчальнае кол-у хвілін% d)."

#: wp-cache.php:705
msgid "all"
msgstr "Ўвесь"

#: wp-cache.php:718
#, php-format
msgid "Preload %s posts."
msgstr "Кэшаваць% s запісу."

#: wp-cache.php:725
msgid "Preload mode (garbage collection only on legacy cache files. Recommended.)"
msgstr "Папярэдні рэжым (ачыстка смецця працуе не цалкам, опцыя рэкамендавана да ўключэння.)"

#: wp-cache.php:728
msgid "Send me status emails when files are refreshed."
msgstr "Адпраўляць мне паведамленні з апавяшчэннямі аб абнаўленні кэша."

#: wp-cache.php:733
msgid "Many emails, 2 emails per 100 posts."
msgstr "Высокі ўзровень: 2 паведамленні на 100 запісаў."

#: wp-cache.php:736
msgid "Medium, 1 email per 100 posts."
msgstr "Сярэдні ўзровень: 1 паведамленне на 100 запісаў."

#: wp-cache.php:739
msgid "Less emails, 1 at the start and 1 at the end of preloading all posts."
msgstr "Нізкі ўзровень: 1 e-mail ў пачатку і 1 у канцы кэшавання."

#: wp-cache.php:743
#, php-format
msgid "Refresh of cache in %d hours %d minutes and %d seconds."
msgstr "Абнаўленне кэша праз% d г% d мін і% d сек."

#: wp-cache.php:744
#, php-format
msgid "Full refresh of cache in %d hours %d minutes and %d seconds."
msgstr "Поўнае кэшаванне проихойдет праз% d г% d мін і% d сек."

#: wp-cache.php:750
#, php-format
msgid "Currently caching from post %d to %d."
msgstr "У дадзены моманты кэшуюцца запісы з% d па% d."

#: wp-cache.php:753
msgid "Update Settings"
msgstr "Абнавіць налады"

#: wp-cache.php:761
msgid "Preloading of cache disabled. Please disable legacy page caching or talk to your host administrator."
msgstr "Агульнае кэшаванне адключана. Калі ласка, уключыце поўны рэжым працы ўбудовы або звернецеся да адміністратара сервера."

#: wp-cache.php:776
#: wp-cache.php:865
msgid "Caching"
msgstr "Статут кэшавання"

#: wp-cache.php:780
msgid "Cache hits to this website for quick access."
msgstr "Кэшаваць хіты сайта для паскарэння доступу."

#: wp-cache.php:780
#: wp-cache.php:781
#: wp-cache.php:795
#: wp-cache.php:799
#: wp-cache.php:802
#: wp-cache.php:803
#: wp-cache.php:868
msgid "Recommended"
msgstr "Рэкамендавана"

#: wp-cache.php:781
msgid "Use mod_rewrite to serve cache files."
msgstr "Выкарыстоўваць mod_rewrite для абслугоўвання кэша."

#: wp-cache.php:782
msgid "Use PHP to serve cache files."
msgstr "Выкарыстоўваць PHP для абслугоўвання кэша."

#: wp-cache.php:783
msgid "Legacy page caching."
msgstr "Спрошчанае кэшаванне."

#: wp-cache.php:784
msgid "Mod_rewrite is fastest, PHP is almost as fast and easier to get working, while legacy caching is slower again, but more flexible and also easy to get working. New users should go with PHP caching."
msgstr "Выкарыстанне mod_rewrite дапаможа зрабіць працу блога хутчэй, чым PHP (хоць і гэты варыянт таксама не такі павольны). Гэты рэжым прасцей і зручней, але пачаткоўцу карыстачу лепш выкарыстоўваць кэшаванне PHP."

#: wp-cache.php:790
msgid "Miscellaneous"
msgstr "Рознае"

#: wp-cache.php:795
msgid "Compress pages so they&#8217;re served more quickly to visitors."
msgstr "Сціскаць файлы кэша каб паскорыць працу."

#: wp-cache.php:796
msgid "Compression is disabled by default because some hosts have problems with compressed files. Switching it on and off clears the cache."
msgstr "Сціск кэша адключана па змаўчанні, так як можа некарэктна працаваць на некаторых хостынгах. Уключэнне або Адключэнне дадзенай опцыі аўтаматычна чысціць часовы кэш."

#: wp-cache.php:799
msgid "304 Not Modified browser caching. Indicate when a page has not been modified since last requested."
msgstr "Памылка 304. Дадзеная памылка ўзнікае тады, калі старонка не была зменена з часу мінулага запыту."

#: wp-cache.php:800
msgid "304 support is disabled by default because in the past GoDaddy had problems with some of the headers used."
msgstr "Падтрымка памылкі 304 адключаная па змаўчанні (з-за праблем некаторых сэрвісаў)."

#: wp-cache.php:802
msgid "Don&#8217;t cache pages for <acronym title=\"Logged in users and those that comment\">known users</acronym>."
msgstr "Не кэшаваць старонкі для <acronym title=\"Зарэгістраваных\" пользователей и авторов комментариев\">вядомых карыстальнікаў.\"</acronym>"

#: wp-cache.php:803
msgid "Cache rebuild. Serve a supercache file to anonymous users while a new file is being generated."
msgstr "Аўта перабудова кэшу. Госці блога ўбачаць састарэлыя версіі старонак кэша пакуль новыя будуць генеравацца."

#: wp-cache.php:804
msgid "Proudly tell the world your server is Digg proof! (places a message in your blog&#8217;s footer)"
msgstr "Расказаць ўсім, што Вы карыстаецеся убудовай WP Super Cache (паведамленне будзе размешчана ў \" склепе \"сайта)!"

#: wp-cache.php:810
#: wp-cache.php:957
#: wp-cache.php:1473
msgid "Advanced"
msgstr "Налады"

#: wp-cache.php:814
msgid "Mobile device support."
msgstr "Падтрымка мабільных прылад"

#: wp-cache.php:815
msgid "Clear all cache files when a post or page is published."
msgstr "Ачышчаць кэш калі новая запіс або старонка апублікаваная."

#: wp-cache.php:816
msgid "Only refresh current page when comments made."
msgstr "Перагружаць старонку пры даданні новага каментара да яе"

#: wp-cache.php:817
msgid "List the newest cached pages on this page."
msgstr "Стварыць спіс старонак у кэшы (выводзіцца на гэтай старонцы)"

#: wp-cache.php:819
msgid "Coarse file locking. You probably don&#8217;t need this but it may help if your server is underpowered. Warning! <em>May cause your server to lock up in very rare cases!</em>"
msgstr "Блакаванне файлаў. Вам хутчэй за ўсё не спатрэбіцца дадзеная опцыя, але яна можа вырашыць праблему маламагутных хостынгаў. Увага! <em>Уключэнне опцыі, у рэдкіх выпадках, можа выклікаць праблемы ў працы блога!\"</em>"

#: wp-cache.php:822
msgid "Use object cache to store cached files."
msgstr "Выкарыстоўваць аб'екты кэша для захоўвання кэшаваных файлаў."

#: wp-cache.php:822
msgid "(Experimental)"
msgstr "(Эксперыментальныя налады)"

#: wp-cache.php:829
msgid "Note:"
msgstr "Важна:"

#: wp-cache.php:831
#, php-format
msgid "If uninstalling this plugin, make sure the directory <em>%s</em> is writeable by the webserver so the files <em>advanced-cache.php</em> and <em>cache-config.php</em> can be deleted automatically. (Making sure those files are writeable too is probably a good idea!)"
msgstr "Деактивируя убудова, пераканайцеся што <em>тэчка% s</em> даступная для запісу ў наладах Вашага сервера, каб файлы плагіна <em>advanced-cache.php</em> і <em>cache-config.php</em> былі выдаленыя ў аўтаматычным рэжыме (таксама праверце наяўнасць правоў на запіс для гэтых двух файлаў)."

#: wp-cache.php:832
#, php-format
msgid "Please see the <a href=\"%1$s/wp-super-cache/readme.txt\">readme.txt</a> for instructions on uninstalling this script. Look for the heading, \"How to uninstall WP Super Cache\"."
msgstr "Для даведкі глядзіце <a href=\"%1$s/wp-super-cache/readme.txt\">readme.txt</a> (дакумент на англ.). Там Вы знойдзеце карысную інфармацыю па выкарыстанню і выдаленню плагіна WP Super Cache. "

#: wp-cache.php:833
#, php-format
msgid "Need help? Check the <a href=\"%1$s\">Super Cache readme file</a>. It includes installation documentation, a FAQ and Troubleshooting tips. The <a href=\"%2$s\">support forum</a> is also available. Your question may already have been answered."
msgstr "Усё яшчэ патрэбна дапамога? Глядзіце афіцыйны <a href=\"%1$s\">чаво па плагіна Super Cache</a> (па-ангельску). Таксама, Вы можаце задаць сваё пытанне на <a href=\"%2$s\">форумах тых. падтрымкі</a> (па-ангельску), або азнаёміцца ​​з праблемамі іншых карыстальнікаў і прапанаванымі ім рашэннямі. "

#: wp-cache.php:836
#: wp-cache.php:883
msgid "Update Status"
msgstr "Абнавіць"

#: wp-cache.php:843
msgid "Accepted Filenames &amp; Rejected URIs"
msgstr "Дапушчальныя імёны & Забароненыя адрасы"

#: wp-cache.php:868
msgid "Caching On"
msgstr "Кэшаванне ўключана"

#: wp-cache.php:869
msgid "Caching Off"
msgstr "Кэшаванне выключана"

#: wp-cache.php:870
msgid "Note: enables PHP caching, cache rebuild, and mobile support"
msgstr "Важна: рэкамендуецца ўключыць PHP кэшаванне, аўто перабудову кэша і падтрымку для мабільных прылад"

#: wp-cache.php:880
msgid "Notice: Supercache mod_rewrite rules detected. Cached files will be served using those rules. Edit the .htaccess file in the root of your install and remove the SuperCache rules."
msgstr "Увага: Сярод правілаў mod_rewrite выяўленыя правілы ад Supercache. Для працы з кэшам будуць выкарыстаны менавіта гэтыя правілы. Каб выдаліць іх, Вам трэба ўручную адрэдагаваць файл. Htaccess."

#: wp-cache.php:892
msgid "Make WordPress Faster"
msgstr "Зрабі свой блог хутчэй!"

#: wp-cache.php:893
#, php-format
msgid "%1$s is maintained and developed by %2$s with contributions from many others."
msgstr "Дадатковы модуль %1$s створаны і абнаўляецца аўтарам %2$s пры падтрымцы многіх іншых."

#: wp-cache.php:894
#, php-format
msgid "He blogs at %1$s and posts photos at %2$s."
msgstr "Наведайце блог аўтара плагіна %1$s і яго фотаблог на %2$s."

#: wp-cache.php:895
#, php-format
msgid "Please say hi to him on %s too!"
msgstr "Калі ласка, наведайце% s аўтара!"

#: wp-cache.php:903
#, php-format
msgid "Cached pages since %1$s : <strong>%2$s</strong>"
msgstr "Старонак ў кэшы з %1$s: <strong>%2$s</strong>"

#: wp-cache.php:904
msgid "Newest Cached Pages:"
msgstr "Новае ў кэшы:"

#: wp-cache.php:908
#, php-format
msgid "Cached %s seconds ago"
msgstr "Паведамленні ў кэш% s секунд назад"

#: wp-cache.php:911
msgid "(may not always be accurate on busy sites)"
msgstr "(Спіс не рэкамендаваны для вялікіх сайтаў)"

#: wp-cache.php:930
msgid "Cache plugins are PHP scripts that live in a plugins folder inside the wp-super-cache folder. They are loaded when Supercache loads, much sooner than regular WordPress plugins."
msgstr "Кэшаванне адбываецца за кошт PHP файлаў, якія захоўваюцца ў тэчцы ўбудовы. Яны загружаюцца пры ўключэнні рэжыму Supercache. Загрузка адбываецца нашмат часцей, чым для астатніх убудоў WordPress."

#: wp-cache.php:931
msgid "This is strictly an advanced feature only and knowledge of both PHP and WordPress actions is required to create them."
msgstr "Для выкарыстання дадзенай опцыі трэба ведаць не толькі PHP, але і WordPress (не на пачатковым узроўні)."

#: wp-cache.php:941
msgid "Available Plugins"
msgstr "Даступныя ўбудовы"

#: wp-cache.php:957
msgid "Easy"
msgstr "Кэш"

#: wp-cache.php:957
msgid "Tester & Contents"
msgstr "Праверка"

#: wp-cache.php:957
msgid "Preload"
msgstr "Агульны кэш"

#: wp-cache.php:957
msgid "Plugins"
msgstr "Даданыя модулі"

#: wp-cache.php:957
msgid "Debug"
msgstr "Абслугоўванне"

#: wp-cache.php:984
#, php-format
msgid "Notice: WP Super Cache mod_rewrite rule checks disabled unless running on <a href=\"%s\">the main site</a> of this network."
msgstr "Увага: Праверка правілаў WP Super Cache mod_rewrite адключаная для блогаў сеткі пакуль не будзе запушчана <a href=\"%s\">на галоўным блогу</a> . "

#: wp-cache.php:986
#, php-format
msgid "Notice: WP Super Cache mod_rewrite rule checks disabled unless running on <a href=\"%s\">on the main site</a> of this network."
msgstr "Увага: Праверка правілаў WP Super Cache mod_rewrite адключаная для блогаў сеткі пакуль не будзе запушчана <a href=\"%s\">на галоўным блогу</a> . "

#: wp-cache.php:996
msgid "Mod Rewrite Rules"
msgstr "Модуль Mod Rewrite"

#: wp-cache.php:1002
msgid "WordPress MU Detected"
msgstr "Знойдзены WordPress MU!"

#: wp-cache.php:1002
msgid "Unfortunately the rewrite rules cannot be updated automatically when running WordPress MU. Please open your .htaccess and add the following mod_rewrite rules above any other rules in that file."
msgstr "На жаль, mod_rewrite немагчыма абнавіць у аўтаматычным рэжыме ў WordPress MU. Вам прыйдзецца ўручную зрабіць гэта: адкрыйце файл. Htaccess (размешчаны ў каранёвай дырэкторыі блога) і дадайце наступныя правілы ў яго."

#: wp-cache.php:1004
msgid "Mod Rewrite rules cannot be updated!"
msgstr "Mod Rewrite не можа быць абноўлены!"

#: wp-cache.php:1005
#, php-format
msgid "You must have <strong>BEGIN</strong> and <strong>END</strong> markers in %s.htaccess for the auto update to work. They look like this and surround the main WordPress mod_rewrite rules:"
msgstr "Для карэктнай працы, у Вашым файле% s.htaccess павінны быць прапісаны маркеры <strong>BEGIN,</strong> і <strong>END.</strong> Паміж імі знаходзяцца асноўныя правілы WordPress mod_rewrite, прыклад:"

#: wp-cache.php:1007
msgid "Refresh this page when you have updated your .htaccess file."
msgstr "Абнавіце старонку калі скончыце рэдагаванне файла. Htaccess."

#: wp-cache.php:1011
msgid "Thank you for upgrading."
msgstr "Дзякуй за абнаўленне."

#: wp-cache.php:1011
#, php-format
msgid "The mod_rewrite rules changed since you last installed this plugin. Unfortunately you must remove the old supercache rules before the new ones are updated. Refresh this page when you have edited your .htaccess file. If you wish to manually upgrade, change the following line: %1$s so it looks like this: %2$s The only changes are \"HTTP_COOKIE\" becomes \"HTTP:Cookie\" and \"wordpressuser\" becomes \"wordpress\". This is a WordPress 2.5 change but it&#8217;s backwards compatible with older versions if you&#8217;re brave enough to use them."
msgstr "З моманту апошняй усталяванай версіі плагіна правілы mod_rewrite былі змененыя. На жаль, Вам давядзецца ўручную выдаліць старыя правілы перш чым новыя запрацуюць. Абнавіце гэтую старонку калі скончыце рэдагаваць файл. Htaccess. Калі Вы жадаеце цалкам абнавіць усе самі, то заменіце наступны радок:%1$s на гэтую:%2$s. Адзінае адрозненне - гэта замена \"HTTP_COOKIE \" на \"HTTP: Cookie \" і \"wordpressuser \" на \"wordpress \". Гэтыя перамены звязаны з новай версіяй WordPress 02/05 . Вядома Вы можаце працягваць працаваць са старымі версіямі, калі хопіць адвагі;) "

#: wp-cache.php:1015
msgid "Trailing slash check required."
msgstr "Патрабуецца праверка trailing slash."

#: wp-cache.php:1015
msgid "It looks like your blog has URLs that end with a \"/\". Unfortunately since you installed this plugin a duplicate content bug has been found where URLs not ending in a \"/\" end serve the same content as those with the \"/\" and do not redirect to the proper URL. To fix, you must edit your .htaccess file and add these two rules to the two groups of Super Cache rules:"
msgstr "Здаецца, усе спасылкі Вашага блога заканчваюцца сімвалам \"/\". На жаль, як толькі Вы ўсталявалі гэты дадатковы модуль, спрацавала опцыя, выявілая копіі спасылак без знака \"/\" на канцы, і цяпер яна не можа ажыццявіць перанакіраванне на верны адрас. Каб гэта выправіць гэта, Вы павінны адрэдагаваць файл. htaccess і дадаць два новыя правілы да групы асноўных правілаў плагіна Supercache: "

#: wp-cache.php:1017
msgid "You can see where the rules go and examine the complete rules by clicking the \"View mod_rewrite rules\" link below."
msgstr "Каб паглядзець поўны спіс якія працуюць правілаў, націсніце кнопку ніжэй \" Паглядзець правілы mod_rewrite \"."

#: wp-cache.php:1031
msgid "Mod Rewrite rules updated!"
msgstr "Правілы mod_rewrite абноўлены!"

#: wp-cache.php:1032
#, php-format
msgid "%s.htaccess has been updated with the necessary mod_rewrite rules. Please verify they are correct. They should look like this:"
msgstr "Файл% s.htaccess быў паспяхова абноўлены, неабходныя правілы mod_rewrite былі дададзеныя. Калі ласка, праверце іх. Яны павінны выглядаць так:"

#: wp-cache.php:1034
msgid "Mod Rewrite rules must be updated!"
msgstr "Правілы mod_rewrite павінны быць абноўлены!"

#: wp-cache.php:1035
#, php-format
msgid "Your %s.htaccess is not writable by the webserver and must be updated with the necessary mod_rewrite rules. The new rules go above the regular WordPress rules as shown in the code below:"
msgstr "Ваш файл% s.htaccess недаступны для запісу (у наладах сервера) і не можа быць абноўлены ў аўтаматычным рэжыме. Вы павінны ўручную дадаць новыя правілы да асноўных правілах WordPress так, як паказана ніжэй:"

#: wp-cache.php:1040
#, php-format
msgid "WP Super Cache mod rewrite rules were detected in your %s.htaccess file.<br /> Click the following link to see the lines added to that file. If you have upgraded the plugin make sure these rules match."
msgstr "Правілы mod_rewrite для плагіна WP Super Cache былі выяўленыя ў файле% s.htaccess. <br /> Націсніце на адпаведную кнопку, каб паглядзець радкі. Калі Вы толькі што абнавілі убудова, праверце ўсе правілы. "

#: wp-cache.php:1043
msgid "A difference between the rules in your .htaccess file and the plugin rewrite rules has been found. This could be simple whitespace differences but you should compare the rules in the file with those below as soon as possible. Click the &#8217;Update Mod_Rewrite Rules&#8217; button to update the rules."
msgstr "Паміж правіламі ў Вашым файле. Htaccess і правіламі самога плагіна выяўленыя неадпаведнасці. Гэта можа быць проста лішні сімвал ў радку, але Вы павінны асабіста параўнаць арыгінальныя правілы са сваімі як мага хутчэй. Націсніце на кнопку 'Абнавіць правілы Mod_Rewrite', каб зрабіць гэта ў аўтаматычным рэжыме. "

#: wp-cache.php:1046
msgid "View Mod_Rewrite Rules"
msgstr "Паглядзець правілы mod_rewrite"

#: wp-cache.php:1050
#: wp-cache.php:2287
#, php-format
msgid "Rules must be added to %s too:"
msgstr "Правілы павінны быць таксама дададзены да% s:"

#: wp-cache.php:1058
#, php-format
msgid "Gzip encoding rules in %s.htaccess created."
msgstr "Правілы для Gzip-сціску дададзеныя ў файл% s.htaccess."

#: wp-cache.php:1065
msgid "Fix Configuration"
msgstr "Аднавіць стандартныя налады"

#: wp-cache.php:1068
msgid "Restore Default Configuration"
msgstr "Аднавіць налады па змаўчанні"

#: wp-cache.php:1076
msgid "Comment moderation is enabled. Your comment may take some time to appear."
msgstr "Праверка каментарыяў ўключана. Перш чым Вашы каментары будуць апублікаваныя пройдзе нейкі час."

#: wp-cache.php:1101
msgid "Lock Down:"
msgstr "Закрыты рэжым:"

#: wp-cache.php:1101
msgid "Disabled"
msgstr "Адключаны"

#: wp-cache.php:1101
msgid "Enabled"
msgstr "Уключаны"

#: wp-cache.php:1102
msgid "Prepare your server for an expected spike in traffic by enabling the lock down. When this is enabled, new comments on a post will not refresh the cached static files."
msgstr "Падрыхтуйце свой блог да запланаваных усплёскаў наведвальнасці, актываваўшы дадзены рэжым. У актыўным стане размяшчэнне новых каментароў і запісаў НЕ будзе абнаўляць статычныя файлы ў кэшы."

#: wp-cache.php:1103
msgid "Developers: Make your plugin lock down compatible by checking the \"WPLOCKDOWN\" constant. The following code will make sure your plugin respects the WPLOCKDOWN setting."
msgstr "Распрацоўнікам: Зрабіце свой уласны убудова закрытага рэжыму сумяшчальным з нашым, дадаўшы зменную \" WPLOCKDOWN\". Прыведзены ніжэй код дапаможа Вам адаптаваць свой ўбудова да налад нашага Рэжыму."

#: wp-cache.php:1105
msgid "Sorry. My blog is locked down. Updates will appear shortly"
msgstr "Выбачайце, мой блог часова недаступны. Зайдзіце пазней"

#: wp-cache.php:1109
msgid "WordPress is locked down. Super Cache static files will not be deleted when new comments are made."
msgstr "Ваш блог выкарыстоўвае Закрыты рэжым. Новыя каментары не абнаўляюць ўсе статычныя элементы кэша."

#: wp-cache.php:1111
msgid "WordPress is not locked down. New comments will refresh Super Cache static files as normal."
msgstr "Ваш блог не выкарыстоўвае Закрыты рэжым. Апошнія каментарыі абнаўляюць ўсе статычныя элементы кэша."

#: wp-cache.php:1117
msgid "Lock Down"
msgstr "Закрыты рэжым"

#: wp-cache.php:1125
msgid "Directly Cached Files"
msgstr "Прамое кэшаванне старонак"

#: wp-cache.php:1183
#, php-format
msgid "%s removed!"
msgstr "%s выдалены!"

#: wp-cache.php:1191
#, php-format
msgid "You must make %s writable to enable this feature. As this is a security risk please make it readonly after your page is generated."
msgstr "Вы павінны дазволіць запіс для% s. Але так як гэта патэнцыйная ўразлівасць, пасля абнаўлення старонкі вярніце правы на чытанне."

#: wp-cache.php:1193
#, php-format
msgid "%s is writable. Please make it readonly after your page is generated as this is a security risk."
msgstr "Директрия% s даступная для запісу. Вам варта змяніць яе права на \" Толькі чытанне \"."

#: wp-cache.php:1207
msgid "Existing direct page"
msgstr "Старонка існуе"

#: wp-cache.php:1207
msgid "Delete cached file"
msgstr "Выдаліць файлы з кэша"

#: wp-cache.php:1212
msgid "Add direct page:"
msgstr "Дадаць старонку ў кэш:"

#: wp-cache.php:1214
#, php-format
msgid "Directly cached files are files created directly off %s where your blog lives. This feature is only useful if you are expecting a major Digg or Slashdot level of traffic to one post or page."
msgstr "Дадзены кэш ствараецца прама з папкі, дзе знаходзіцца Ваш блог (тэчка% s). Гэтая опцыя карысная толькі тады, калі чакаецца вялікі прыток наведвальнікаў з больш папулярнага сайта на пэўную старонку або запіс Вашага."

#: wp-cache.php:1216
#, php-format
msgid "For example: to cache <em>%1$sabout/</em>, you would enter %1$sabout/ or /about/. The cached file will be generated the next time an anonymous user visits that page."
msgstr "Напрыклад: каб дадаць у кэш старонцы <em>на %1$s about /,</em> трэба прапісаць %1$s about / ці / about /. Кэш для старонкі будзе створаны адразу ж пасля першага да яе звароту госцем."

#: wp-cache.php:1217
msgid "Make the textbox blank to remove it from the list of direct pages and delete the cached file."
msgstr "Каб выдаліць старонку з такога кэша, ачысціце тэкставае поле і выдаліце ​​файлы кэша."

#: wp-cache.php:1222
msgid "Update Direct Pages"
msgstr "Абнавіць стрницы"

#: wp-cache.php:1260
msgid "Expiry Time &amp; Garbage Collection"
msgstr "Пратэрмінаваныя старонкі & Ачыстка смецця"

#: wp-cache.php:1262
msgid "Expire time:"
msgstr "Актуальнасць кэшу:"

#: wp-cache.php:1263
msgid "seconds"
msgstr "Секунд"

#: wp-cache.php:1264
msgid "Garbage Collection"
msgstr "Ачыстка смецця"

#: wp-cache.php:1264
msgid "If the expiry time is more than 1800 seconds (half an hour), garbage collection will be done every 10 minutes, otherwise it will happen 10 seconds after the expiry time above."
msgstr "Калі час актуальнасці кэша больш за 1800 секунд (паўгадзіны), то ачыстка смецця будзе запускацца кожныя 10 хвілін."

#: wp-cache.php:1265
msgid "Checking for and deleting expired files is expensive, but it&#8217;s expensive leaving them there too. On a very busy site you should set the expiry time to <em>300 seconds</em>. Experiment with different values and visit this page to see how many expired files remain at different times during the day. If you are using legacy caching aim to have less than 500 cached files if possible. You can have many times more cached files when using mod_rewrite or PHP caching."
msgstr "Паверка і выдаленне пратэрмінаваных старонак кэша займае час, але і пакідаць такія файлы ў сістэме не варта. На вялікіх блогах трэба выстаўляць \" час жыцця \" кожнай копіі <em>300 секунд.</em> Вы можаце паэксперыментаваць з наладай і паглядзець, колькі пратэрмінаваных копій старонак застаецца ў кэшы на працягу дня. Аптымальнае лік такіх старонак не больш за 500. Выкарыстоўваючы кэшаванне з mod_rewrite або PHP, Вы зможаце павялічыць колькасць кэшируемых старонак. "

#: wp-cache.php:1266
msgid "Set the expiry time to 0 seconds to disable garbage collection."
msgstr "Усталюйце значэнне на 0, каб адключыць Ачыстку смецця."

#: wp-cache.php:1267
msgid "Change Expiration"
msgstr "Змяніць час жыцця копіі"

#: wp-cache.php:1311
msgid "Rejected User Agents"
msgstr "Пошукавыя і іншыя боты"

#: wp-cache.php:1312
msgid "Strings in the HTTP &#8217;User Agent&#8217; header that prevent WP-Cache from caching bot, spiders, and crawlers&#8217; requests. Note that super cached files are still sent to these agents if they already exists."
msgstr "Каб забараніць плагіна кэшаваць запыты ад пошукавых ботаў і іншых сеткавых робатаў, увядзіце іх назвы ў полі ніжэй (па адным у радку). Калі копія старонкі ўжо існуе ў кэшы Super Cache, то яна ўсё роўна будзе адпраўлена боту."

#: wp-cache.php:1319
msgid "Save UA Strings"
msgstr "Захаваць наладкі"

#: wp-cache.php:1342
msgid "Do not cache the following page types. See the <a href=\"http://codex.wordpress.org/Conditional_Tags\">Conditional Tags</a> documentation for a complete discussion on each type."
msgstr "Не кэшаваць старонкі наступных тыпаў. Паспрабуйцце звярнуцца да <a href=\"http://codex.wordpress.org/Conditional_Tags\">Артыкулам Кодэкса WP</a> (па-ангельску), каб даведацца больш падрабязна пра тыпы старонак. "

#: wp-cache.php:1345
msgid "Single Posts"
msgstr "Запісы"

#: wp-cache.php:1346
msgid "Pages"
msgstr "Старонкі"

#: wp-cache.php:1347
msgid "Front Page"
msgstr "Асноўная старонка"

#: wp-cache.php:1348
msgid "Home"
msgstr "Хатняя старонка"

#: wp-cache.php:1349
msgid "Archives"
msgstr "Архівы"

#: wp-cache.php:1350
msgid "Tags"
msgstr "Пазнакі"

#: wp-cache.php:1351
msgid "Category"
msgstr "Рубрыкі"

#: wp-cache.php:1352
msgid "Feeds"
msgstr "Фиды"

#: wp-cache.php:1353
msgid "Search Pages"
msgstr "Старонкі пошуку"

#: wp-cache.php:1355
#: wp-cache.php:1483
msgid "Save"
msgstr "Захаваць"

#: wp-cache.php:1372
msgid "Add here strings (not a filename) that forces a page not to be cached. For example, if your URLs include year and you dont want to cache last year posts, it&#8217;s enough to specify the year, i.e. &#8217;/2004/&#8217;. WP-Cache will search if that string is part of the URI and if so, it will not cache that page."
msgstr "Поле ніжэй Вы таксама можаце запоўніць фрагментамі адрасоў старонак (або груп старонак, напрыклад, архіў за год / месяц і г.д.), якія не будуць кэшавацца. Плагін будзе сканаваць адрасы старонак на прадмет наяўнасці ў іх фрагментаў, указаных ніжэй, перад кэшаваннем. "

#: wp-cache.php:1378
msgid "Save Strings"
msgstr "Захаваць спіс забароненых фрагментаў"

#: wp-cache.php:1394
msgid "Add here those filenames that can be cached, even if they match one of the rejected substring specified above."
msgstr "Поле ніжэй Вы можаце запоўніць назвамі файлаў якія будуць кэшаваць, нават калі ў іх назве ёсць забароненых да кэшавання фрагменты."

#: wp-cache.php:1400
msgid "Save Files"
msgstr "Захаваць спіс файлаў"

#: wp-cache.php:1445
msgid "Currently logging to: "
msgstr "Рэжым запісаны на:"

#: wp-cache.php:1455
msgid "Fix problems with the plugin by debugging it here. It can send you debug emails or log them to a file in your cache directory."
msgstr "Тут Вы можаце вырашыць некаторыя праблемы, якія ўзнікаюць пры працы з убудовай, з дапамогай адладкі. Вы можаце запісваць службовую інфармацыю (логі) у файлы дырэкторыі кэша."

#: wp-cache.php:1456
msgid "Logging to a file is easier but faces the problem that clearing the cache will clear the log file."
msgstr "Атрымаць доступ да файла лога проста, але пры ачыстцы кэша лог таксама будзе выдалены."

#: wp-cache.php:1460
msgid "Debugging"
msgstr "Рэжым адладкі"

#: wp-cache.php:1461
msgid "Logging Type"
msgstr "Тып ўваходу"

#: wp-cache.php:1461
msgid "Email"
msgstr "Email"

#: wp-cache.php:1462
msgid "file"
msgstr "Файл"

#: wp-cache.php:1463
msgid "IP Address"
msgstr "Адрас IP"

#: wp-cache.php:1463
#, php-format
msgid "(only log requests from this IP address. Your IP is %s)"
msgstr "(Запісвае звароту толькі з гэтага IP. Ваш IP -% s)"

#: wp-cache.php:1464
msgid "Log level"
msgstr "Узровень логу"

#: wp-cache.php:1470
msgid "(1 = less, 5 = more, may cause severe server load.)"
msgstr "(1 = найменшы, 5 = найбольшы, можа выклікаць болшую нагрузку на сервер)"

#: wp-cache.php:1473
msgid "In very rare cases two problems may arise on some blogs:<ol><li> The front page may start downloading as a zip file.</li><li> The wrong page is occasionally cached as the front page if your blog uses a static front page and the permalink structure is <em>/%category%/%postname%/</em>.</li></ol>"
msgstr "У асабліва рэдкіх выпадках на блогу могуць здарыцца дзве праблемы: <ol><li> Замест галоўнай старонкі карыстальнікі будуць бачыць прапанову загрузіць. Zip архіў з ёй </li><li> Замест галоўнай старонкі можа быць дададзеная ў кэш зусім іншая (толькі ў выпадку, калі Ваш бог выкарыстоўвае наступную структуру спасылак <em>/% category% /% postname% /).</em> </li></ol> "

#: wp-cache.php:1474
#, php-format
msgid "I&#8217;m 99% certain that they aren&#8217;t bugs in WP Super Cache and they only happen in very rare cases but you can run a simple check once every 5 minutes to verify that your site is ok if you&#8217;re worried. You will be emailed if there is a problem."
msgstr "I'm 99% certain! Памылкі, якія могуць паўстаць пры працы з WP Super Cache, не звязаныя з самім убудовай. Яны ўзнікаюць у рэдкіх выпадках, але Вы можаце падстрахавацца, запусціўшы аўтаматычную праверку блога кожныя 5 хвілін. У выпадку памылкі, Вам будзе адпраўлена паведамленне. "

#: wp-cache.php:1476
msgid "Check front page every 5 minutes."
msgstr "Правяраць галоўную старонку кожныя 5 хвілін."

#: wp-cache.php:1477
msgid "Front page text"
msgstr "Ключавой тэкст"

#: wp-cache.php:1477
msgid "Text to search for on your front page. If this text is missing the cache will be cleared. Leave blank to disable."
msgstr "Калі ласка, увядзіце тэкст які ўбудова будзе шукаць на галоўнай старонцы. Калі тэкст не будзе знойдзены, то кэш аўтаматычна ачысціцца. Пакіньце поле пустым каб адключыць опцыю."

#: wp-cache.php:1478
msgid "Clear cache on error."
msgstr "Ачышчаць кэш пры памылцы."

#: wp-cache.php:1479
msgid "Email the blog admin when checks are made. (useful for testing)"
msgstr "Паведаміць адміністратару блога па завяршэння праверкі (карысна пры тэставанні на памылкі)."

#: wp-cache.php:1493
msgid "Error: GZIP compression is enabled, disable it if you want to enable wp-cache."
msgstr "Памылка: сціск GZIP ўключана, адключыце яго калі хочаце запусціць wp-cache."

#: wp-cache.php:1540
#: wp-cache.php:1702
msgid "Warning"
msgstr "Увага"

#: wp-cache.php:1540
msgid "GZIP compression is enabled in WordPress, wp-cache will be bypassed until you disable gzip compression."
msgstr "Сціск GZIP ўключана ў наладах WordPress, убудова не будзе працаваць да таго часу, пакуль Вы не адключыце gzip."

#: wp-cache.php:1598
#: wp-cache.php:1603
#: wp-cache.php:1635
#: wp-cache.php:1640
#: wp-cache.php:1646
msgid "Error"
msgstr "Памылка"

#: wp-cache.php:1598
#, php-format
msgid "Your cache directory (<strong>$cache_path</strong>) did not exist and couldn&#8217;t be created by the web server. Check %s permissions."
msgstr "Тэчка <strong>($ cache_path)</strong> не існуе і не можа быць створана ў аўтаматычным рэжыме. Праверце правы доступу да% s."

#: wp-cache.php:1603
#, php-format
msgid "Your cache directory (<strong>%1$s</strong>) or <strong>%2$s</strong> need to be writable for this plugin to work. Double-check it."
msgstr "Тэчка <strong>(%1$s) або %2$s</strong> павінна быць даступная для запісу. Перепроверьте правы доступу."

#: wp-cache.php:1635
#, php-format
msgid "Your WP-Cache config file (<strong>%s</strong>) is out of date and not writable by the Web server.Please delete it and refresh this page."
msgstr "Канфігурацыйны файл WP-Cache <strong>(% s)</strong> можа быць ня дзейнічае і недаступны для запісу. Калі ласка, выдаліце яго ўручную і абновіце старонку."

#: wp-cache.php:1640
#, php-format
msgid "Configuration file missing and %1$s  directory (<strong>%2$s</strong>) is not writable by the Web server.Check its permissions."
msgstr "Канфігурацыйны файл адсутнічае, а тэчка %1$s <strong>(%2$s)</strong> недаступная для запісу. Праверце правы доступу."

#: wp-cache.php:1646
#, php-format
msgid "Sample WP-Cache config file (<strong>%s</strong>) does not exist.Verify you installation."
msgstr "Файл WP-Cache <strong>(% s)</strong> не быў знойдзены. Праверце, завяршылі Вы ўстаноўку ўбудовы."

#: wp-cache.php:1702
#, php-format
msgid "%s/advanced-cache.php</em> does not exist or cannot be updated."
msgstr "%s/advanced-cache.php не існуе або не можа быць абноўлены ў аўтаматычным рэжыме."

#: wp-cache.php:1703
msgid "1. If it already exists please delete the file first."
msgstr "1. Калі ён ужо існуе ў тэчках Вашага блога, выдаліце ​​яго."

#: wp-cache.php:1704
#, php-format
msgid "2. Make %1$s writable using the chmod command through your ftp or server software. (<em>chmod 777 %1$s</em>) and refresh this page. This is only a temporary measure and you&#8217;ll have to make it read only afterwards again. (Change 777 to 755 in the previous command)"
msgstr "2. Зменіце правы доступу да %1$s, каб можна было запісаць дадзеныя ў аўтаматычным рэжыме (правы павінны быць: <em>chmod 777 %1$s),</em> праверце правільнасць зададзеных правоў і абновіце старонку. Гэта часовае ўмова, пасля абнаўлення старонкі правы доступу трэба вярнуць на ранейшыя (з 777 на 755). "

#: wp-cache.php:1705
#, php-format
msgid "3. Refresh this page to update <em>%s/advanced-cache.php</em>"
msgstr "3. Абнавіце старонку, <em>файл% s / advanced-cache.php</em> абновіцца сам"

#: wp-cache.php:1706
#, php-format
msgid "If that doesn&#8217;t work, make sure the file <em>%s/advanced-cache.php</em> doesn&#8217;t exist:"
msgstr "Калі гэта не спрацавала, пераканайцеся <em>што% s / advanced-cache.php</em> сапраўды не існуе:"

#: wp-cache.php:1707
#, php-format
msgid "<li>1. Open <em>%1$s$wp_cache_file</em> in a text editor.</li><li>2. Change the text <em>CACHEHOME</em> to <em>%2$s</em></li><li>3. Save the file and copy it to <em>%3$s</em> and refresh this page.</li>"
msgstr " <li> 1. Адкрыйце <em>файл %1$s$wp_cache_file</em> ў тэкставым рэдактары. </li><li> 2. Зменіце радок <em>CACHEHOME на %2$s</em> </li><li> 3. Захавайце файл і скапіруйце <em>ў %3$s,</em> затым абновіце старонку. </li> "

#: wp-cache.php:1730
msgid "<h3>WP_CACHE constant set to false</h3><p>The WP_CACHE constant is used by WordPress to load the code that serves cached pages. Unfortunately it is set to false. Please edit your wp-config.php and add or edit the following line above the final require_once command:<br /><br /><code>define('WP_CACHE', true);</code></p>"
msgstr " <h3> Параметр WP_CACHE не актываваны </h3><p> Дадзены параметр павінен быць актываваны для таго, каб WordPress мог карэктна працаваць з файламі кэша. У дадзены момант ён адключаны. Каб уключыць яго, адкрыйце файл wp-config.php і дадайце ў яго наступны радок: <br /><br /> <code>define('WP_CACHE', true);</code> </p> "

#: wp-cache.php:1732
msgid "<strong>Error: WP_CACHE is not enabled</strong> in your <code>wp-config.php</code> file and I couldn&#8217;t modify it."
msgstr "<strong>\"Памылка: Зменная WP_CACHE ня актываваная</strong> ў файле агульных канфігурацый <code>wp-config.php</code> . "

#: wp-cache.php:1733
#, php-format
msgid "Edit <code>%s</code> and add the following line:<br /> <code>define('WP_CACHE', true);</code><br />Otherwise, <strong>WP-Cache will not be executed</strong> by WordPress core. "
msgstr "Выпраўце файл наладак код <code>%s</code> і дадайце наступную пункту: <br /> <code>define('WP_CACHE', true);</code> <br /> Інакш, <strong>WP-Cache не зможа запусціцца.</strong> "

#: wp-cache.php:1737
msgid "<h3>WP_CACHE constant added to wp-config.php</h3><p>If you continue to see this warning message please see point 5 of the <a href=\"http://wordpress.org/extend/plugins/wp-super-cache/faq/\">FAQ</a>. The WP_CACHE line must be moved up."
msgstr " <h3> Пераменная WP_CACHE дададзеная ў файл канфігурацый wp-config.php </h3><p> Калі Вы да гэтага часу бачыце дадзенае паведамленне, то паспрабуйцце звярнуцца з пунктам 5 <a href=\"http://wordpress.org/extend/plugins/wp-super-cache/faq/\">чаво</a> (на англ.). Радок з WP_CACHE павінна быць размешчаная вышэй. "

#: wp-cache.php:1759
msgid "Cache Contents"
msgstr "Стан кэша"

#: wp-cache.php:1762
msgid "Object cache in use. No cache listing available."
msgstr "Спіс кэшавання недаступны."

#: wp-cache.php:1786
#, php-format
msgid "Deleting supercache file: <strong>%s</strong><br />"
msgstr "Выдаленне файлаў Super <strong>Cache:% s</strong> <br /> "

#: wp-cache.php:1803
#, php-format
msgid "Deleting wp-cache file: <strong>%s</strong><br />"
msgstr "Выдаленне файлаў <strong>WP-Cache:% s</strong> <br /> "

#: wp-cache.php:1868
msgid "Cache stats are not automatically generated. You must click the link below to regenerate the stats on this page."
msgstr "Статыстыка аб'ектыў ў кэшы НЕ ствараецца аўтаматычна. Каб абнавіць яе ўручную націсніце на спасылку ніжэй."

#: wp-cache.php:1869
msgid "Regenerate cache stats"
msgstr "Абнавіць статыстыку кэша"

#: wp-cache.php:1871
#, php-format
msgid "Cache stats last generated: %s minutes ago."
msgstr "Статыстыка аб'ектаў у кэшы апошні раз створана:% s мін таму."

#: wp-cache.php:1877
msgid "WP-Cache"
msgstr "Стан WP-Cache"

#: wp-cache.php:1878
#: wp-cache.php:1894
#, php-format
msgid "%s Cached Pages"
msgstr "%s старонак у кэшы"

#: wp-cache.php:1879
#: wp-cache.php:1899
#, php-format
msgid "%s Expired Pages"
msgstr "%s старонак пратэрмінаваны"

#: wp-cache.php:1893
msgid "WP-Super-Cache"
msgstr "Стан WP-Super-Cache"

#: wp-cache.php:1904
msgid "Fresh WP-Cached Files"
msgstr "Новыя файлы WP-Cache"

#: wp-cache.php:1905
#: wp-cache.php:1921
#: wp-cache.php:1937
#: wp-cache.php:1953
msgid "URI"
msgstr "АДРАС"

#: wp-cache.php:1905
#: wp-cache.php:1921
msgid "Key"
msgstr "Ключ"

#: wp-cache.php:1905
#: wp-cache.php:1921
#: wp-cache.php:1937
#: wp-cache.php:1953
msgid "Age"
msgstr "Узрост"

#: wp-cache.php:1905
#: wp-cache.php:1921
#: wp-cache.php:1937
#: wp-cache.php:1953
msgid "Delete"
msgstr "Выдаліць"

#: wp-cache.php:1920
msgid "Stale WP-Cached Files"
msgstr "Старыя файлы WP-Cache"

#: wp-cache.php:1936
msgid "Fresh Super Cached Files"
msgstr "Новыя файлы Super Cache"

#: wp-cache.php:1952
msgid "Stale Super Cached Files"
msgstr "Старыя файлы Super Cache"

#: wp-cache.php:1968
msgid "Hide file list"
msgstr "Прыбраць спіс"

#: wp-cache.php:1970
msgid "Too many cached files, no listing possible."
msgstr "Занадта шмат аб'ектаў у кэшы, стварэнне спісу немагчыма."

#: wp-cache.php:1972
msgid "List all cached files"
msgstr "Спіс кэшаваных файлаў"

#: wp-cache.php:1978
#, php-format
msgid "<strong>Garbage Collection</strong><br />Last GC was <strong>%s</strong> minutes ago<br />"
msgstr "<strong>\"Ачыстка смецця</strong> <br /> Папярэдняя ачыстка <strong>была% s</strong> хвілін назад <br /> "

#: wp-cache.php:1979
#, php-format
msgid "Next GC in <strong>%s</strong> minutes"
msgstr "Наступная ачыстка будзе <strong>праз% s</strong> хвілін"

#: wp-cache.php:1982
#, php-format
msgid "Expired files are files older than %s seconds. They are still used by the plugin and are deleted periodically."
msgstr "Пратэрмінаваны кэш - гэта старонкі, створаныя больш чым% s секунд таму. Не гледзячы на ​​свой статус, яны выкарыстоўваюцца ў агульным кэшы і перыядычна выдаляюцца."

#: wp-cache.php:1993
msgid "Delete Expired"
msgstr "Выдаліць пратэрмінаваны кэш"

#: wp-cache.php:1999
#: wp-cache.php:2011
#: wp-cache.php:2174
msgid "Delete Cache"
msgstr "Выдаліць увесь кэш"

#: wp-cache.php:2011
msgid "Delete Super Cache cached files (opens in new window)"
msgstr "Выдаліць файлы Super Cache (у новым акне)"

#: wp-cache.php:2150
#, php-format
msgid "%1$s is Digg proof thanks to caching by %2$s"
msgstr "%1$s ўдзячны плагіна %2$s за проделаннную працу"

#: wp-cache.php:2183
#, php-format
msgid "WP Super Cache must be configured. Go to <a href=\"%s\">the admin page</a> to enable and configure the plugin."
msgstr "Плагін WP Super Cache павінен быць наладжаны! Каб актываваць яго і наладзіць, перайдзі
Download .txt
gitextract_1t__d7yp/

├── .eslintignore
├── .gitattributes
├── .github/
│   ├── files/
│   │   ├── autorelease.sh
│   │   └── wp-svn-autopublish.sh
│   └── workflows/
│       ├── autorelease.yml
│       ├── autotagger.yml
│       ├── changelogger.yml
│       ├── e2e-tests.yml
│       ├── linting.yml
│       ├── php-tests.yml
│       └── wp-svn-autopublish.yml
├── .gitignore
├── .phan/
│   ├── baseline.php
│   ├── config.php
│   └── stubs/
│       └── amp-stubs.php
├── .phpcs.xml.dist
├── .w.org-assets/
│   ├── README.md
│   └── blueprints/
│       └── blueprint.json
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── SECURITY.md
├── advanced-cache.php
├── changelog/
│   ├── .gitkeep
│   ├── add-check-type-for-supercache-last-cached-option
│   ├── add-live-preview-blueprint
│   ├── fix-audit_json_encode_flags_part_trois
│   ├── fix-more-json-encode-flags
│   ├── fix-null-wp-cache-home-path
│   ├── fix-phpcompatibility-dev-run
│   ├── remove-wpsc-outside-dep-device-detection
│   ├── renovate-cheerio-1.x
│   ├── renovate-js-unit-testing-packages
│   ├── renovate-js-unit-testing-packages#2
│   ├── renovate-lock-file-maintenance
│   ├── renovate-lock-file-maintenance#2
│   ├── renovate-lock-file-maintenance#3
│   ├── renovate-major-definitelytyped
│   ├── renovate-npm-axios-vulnerability
│   ├── renovate-wikimedia-testing-access-wrapper-4.x
│   ├── update-composer-2.9
│   ├── update-gpl-license-address
│   ├── update-minimum-wp-to-6.8
│   ├── update-node-24
│   ├── update-switch-to-tsgo
│   ├── update-tooling-update_stable_tag_in_backport
│   └── update-tsgo-fix-type-errors-in-e2e-projects
├── composer.json
├── eslint.config.mjs
├── inc/
│   ├── boost.php
│   ├── delete-cache-button.js
│   ├── delete-cache-button.php
│   └── preload-notification.php
├── js/
│   ├── admin.js
│   └── preload-notification.js
├── languages/
│   ├── wp-super-cache-be_BY.mo
│   ├── wp-super-cache-be_BY.po
│   ├── wp-super-cache-de_DE.mo
│   ├── wp-super-cache-de_DE.po
│   ├── wp-super-cache-es_ES.mo
│   ├── wp-super-cache-es_ES.po
│   ├── wp-super-cache-fr_FR.mo
│   ├── wp-super-cache-fr_FR.po
│   ├── wp-super-cache-it_IT.mo
│   ├── wp-super-cache-it_IT.po
│   ├── wp-super-cache-ja.mo
│   ├── wp-super-cache-ja.po
│   ├── wp-super-cache-lt_LT.mo
│   ├── wp-super-cache-lt_LT.po
│   ├── wp-super-cache-ro_RO.mo
│   ├── wp-super-cache-ro_RO.po
│   ├── wp-super-cache-ru_RU.mo
│   ├── wp-super-cache-ru_RU.po
│   ├── wp-super-cache-sr_RS.mo
│   ├── wp-super-cache-sr_RS.po
│   ├── wp-super-cache-sv_SE.mo
│   ├── wp-super-cache-sv_SE.po
│   ├── wp-super-cache-tr_TR.mo
│   ├── wp-super-cache-tr_TR.po
│   ├── wp-super-cache-ua_UA.mo
│   ├── wp-super-cache-ua_UA.po
│   ├── wp-super-cache-uk.mo
│   ├── wp-super-cache-uk.po
│   ├── wp-super-cache-zh_CN.mo
│   ├── wp-super-cache-zh_CN.po
│   ├── wp-super-cache-zh_TW.mo
│   └── wp-super-cache-zh_TW.po
├── ossdl-cdn.php
├── package.json
├── partials/
│   ├── advanced.php
│   ├── debug.php
│   ├── easy.php
│   ├── lockdown.php
│   ├── preload.php
│   ├── rejected_user_agents.php
│   ├── restore.php
│   └── tracking_parameters.php
├── phpunit.11.xml.dist
├── phpunit.12.xml.dist
├── phpunit.9.xml.dist
├── plugins/
│   ├── awaitingmoderation.php
│   ├── badbehaviour.php
│   ├── domain-mapping.php
│   ├── dynamic-cache-test.php
│   ├── jetpack.php
│   ├── multisite.php
│   └── wptouch.php
├── readme.txt
├── rest/
│   ├── class.wp-super-cache-rest-delete-cache.php
│   ├── class.wp-super-cache-rest-get-cache.php
│   ├── class.wp-super-cache-rest-get-plugins.php
│   ├── class.wp-super-cache-rest-get-settings.php
│   ├── class.wp-super-cache-rest-get-stats.php
│   ├── class.wp-super-cache-rest-get-status.php
│   ├── class.wp-super-cache-rest-preload.php
│   ├── class.wp-super-cache-rest-test-cache.php
│   ├── class.wp-super-cache-rest-update-plugins.php
│   ├── class.wp-super-cache-rest-update-settings.php
│   ├── class.wp-super-cache-settings-map.php
│   └── load.php
├── src/
│   └── device-detection/
│       ├── class-device-detection.php
│       ├── class-user-agent-info.php
│       └── functions.php
├── styling/
│   └── dashboard.css
├── tests/
│   ├── e2e/
│   │   ├── Dockerfile
│   │   ├── docker-compose.yml
│   │   ├── eslint.config.mjs
│   │   ├── jest.config.js
│   │   ├── lib/
│   │   │   ├── CheerioForm.ts
│   │   │   ├── docker-tools.ts
│   │   │   ├── plugin-settings.ts
│   │   │   ├── plugin-tools.ts
│   │   │   ├── system-tools.ts
│   │   │   ├── test-tools.ts
│   │   │   └── wordpress-tools.ts
│   │   ├── package.json
│   │   ├── specs/
│   │   │   ├── activation.test.ts
│   │   │   ├── default-settings.test.ts
│   │   │   └── settings/
│   │   │       ├── cache-compression.test.ts
│   │   │       ├── mod-rewrite.test.ts
│   │   │       ├── no-cache-for-get.test.ts
│   │   │       └── not-logged-in.test.ts
│   │   ├── tools/
│   │   │   ├── apache2-wrapper.sh
│   │   │   ├── htaccess.txt
│   │   │   └── mu-test-helpers.php
│   │   └── tsconfig.json
│   └── php/
│       └── bootstrap.php
├── wp-cache-base.php
├── wp-cache-config-sample.php
├── wp-cache-phase1.php
├── wp-cache-phase2.php
└── wp-cache.php
Download .txt
SYMBOL INDEX (474 symbols across 39 files)

FILE: .phan/stubs/amp-stubs.php
  function amp_is_canonical (line 47) | function amp_is_canonical()
  function amp_is_legacy (line 56) | function amp_is_legacy()
  function amp_is_available (line 68) | function amp_is_available()
  function amp_get_permalink (line 81) | function amp_get_permalink($post_id)
  function amp_is_request (line 98) | function amp_is_request()
  function is_amp_endpoint (line 116) | function is_amp_endpoint()
  class AMP_Options_Manager (line 124) | class AMP_Options_Manager
    method get_option (line 134) | public static function get_option($option, $default = \false)
  function amp_add_customizer_link (line 143) | function amp_add_customizer_link()
  function ampforwp_is_amp_endpoint (line 150) | function ampforwp_is_amp_endpoint()

FILE: advanced-cache.php
  function wpcache_broken_message (line 3) | function wpcache_broken_message() {

FILE: inc/boost.php
  function wpsc_get_boost_migration_config (line 16) | function wpsc_get_boost_migration_config() {
  function wpsc_jetpack_boost_notice (line 27) | function wpsc_jetpack_boost_notice() {
  function wpsc_dismiss_boost_notice (line 81) | function wpsc_dismiss_boost_notice() {
  function wpsc_dismiss_boost_notice_ajax_handler (line 88) | function wpsc_dismiss_boost_notice_ajax_handler() {
  function wpsc_dismiss_notice_on_activation (line 98) | function wpsc_dismiss_notice_on_activation() {
  function wpsc_deactivate_boost_cache_notice (line 110) | function wpsc_deactivate_boost_cache_notice() {
  function wpsc_track_move_from_boost (line 131) | function wpsc_track_move_from_boost() {
  function wpsc_notify_migration_to_boost (line 146) | function wpsc_notify_migration_to_boost( $source ) {
  function wpsc_is_boost_compatible (line 158) | function wpsc_is_boost_compatible() {
  function wpsc_is_boost_current (line 229) | function wpsc_is_boost_current() {

FILE: inc/delete-cache-button.php
  function wpsc_admin_bar_render (line 9) | function wpsc_admin_bar_render( $wp_admin_bar ) {
  function wpsc_delete_cache_scripts (line 43) | function wpsc_delete_cache_scripts() {
  function wpsc_admin_bar_delete_cache_ajax (line 82) | function wpsc_admin_bar_delete_cache_ajax() {
  function wpsc_admin_bar_delete_cache (line 94) | function wpsc_admin_bar_delete_cache() {
  function wpsc_delete_cache_directory (line 145) | function wpsc_delete_cache_directory() {

FILE: inc/preload-notification.php
  function wpsc_preload_notification_scripts (line 5) | function wpsc_preload_notification_scripts() {

FILE: js/preload-notification.js
  function schedule_preload_update (line 25) | function schedule_preload_update( time ) {
  function update_preload_status (line 49) | function update_preload_status( data ) {

FILE: ossdl-cdn.php
  function scossdl_off_get_options (line 26) | function scossdl_off_get_options() {
  function scossdl_off_default_inc_dirs (line 79) | function scossdl_off_default_inc_dirs() {
  function scossdl_off_exclude_match (line 101) | function scossdl_off_exclude_match( $match, $excludes ) {
  function scossdl_string_mod (line 119) | function scossdl_string_mod( $str, $mod ) {
  function scossdl_off_rewriter (line 134) | function scossdl_off_rewriter( $match ) {
  function scossdl_off_additional_directories (line 165) | function scossdl_off_additional_directories() {
  function scossdl_off_filter (line 183) | function scossdl_off_filter( $content ) {
  function do_scossdl_off_ob_start (line 215) | function do_scossdl_off_ob_start() {
  function scossdl_off_update (line 234) | function scossdl_off_update() {
  function scossdl_off_options (line 264) | function scossdl_off_options() {

FILE: plugins/awaitingmoderation.php
  function awaitingmoderation_action (line 3) | function awaitingmoderation_action( $buffer ) {
  function awaitingmoderation_actions (line 8) | function awaitingmoderation_actions() {
  function wp_supercache_awaitingmoderation_admin (line 17) | function wp_supercache_awaitingmoderation_admin() {
  function wpsc_awaiting_moderation_list (line 55) | function wpsc_awaiting_moderation_list( $list ) {

FILE: plugins/badbehaviour.php
  function wp_supercache_badbehaviour (line 3) | function wp_supercache_badbehaviour( $file ) {
  function wp_supercache_badbehaviour_include (line 14) | function wp_supercache_badbehaviour_include() {
  function get_bb_file_loc (line 21) | function get_bb_file_loc() {
  function wp_supercache_badbehaviour_admin (line 37) | function wp_supercache_badbehaviour_admin() {
  function wpsc_badbehaviour_list (line 89) | function wpsc_badbehaviour_list( $list ) {

FILE: plugins/domain-mapping.php
  function domain_mapping_gc_cache (line 3) | function domain_mapping_gc_cache( $function, $directory ) {
  function domain_mapping_supercachedir (line 31) | function domain_mapping_supercachedir( $dir ) {
  function domain_mapping_actions (line 48) | function domain_mapping_actions() {
  function wp_supercache_domain_mapping_admin (line 61) | function wp_supercache_domain_mapping_admin() {
  function wp_supercache_domain_mapping_notice (line 104) | function wp_supercache_domain_mapping_notice() {
  function wp_supercache_domain_mapping_exists (line 111) | function wp_supercache_domain_mapping_exists() {
  function wpsc_domain_mapping_list (line 128) | function wpsc_domain_mapping_list( $list ) {

FILE: plugins/dynamic-cache-test.php
  function dynamic_cache_test_safety (line 79) | function dynamic_cache_test_safety( $safety ) {
  function dynamic_cache_test_filter (line 84) | function dynamic_cache_test_filter( $cachedata ) {
  function dynamic_cache_test_template_tag (line 89) | function dynamic_cache_test_template_tag() {
  function dynamic_cache_test_init (line 93) | function dynamic_cache_test_init() {
  function dynamic_output_buffer_test (line 155) | function dynamic_output_buffer_test( $cachedata = 0 ) {
  function dynamic_output_buffer_init (line 174) | function dynamic_output_buffer_init() {
  function dynamic_output_buffer_test_safety (line 179) | function dynamic_output_buffer_test_safety( $safety ) {

FILE: plugins/jetpack.php
  function wp_super_cache_jetpack_admin (line 9) | function wp_super_cache_jetpack_admin() {
  function wp_super_cache_jetpack_cookie_check (line 60) | function wp_super_cache_jetpack_cookie_check( $cache_key ) {
  function wpsc_cache_jetpack_list (line 84) | function wpsc_cache_jetpack_list( $list ) {

FILE: plugins/multisite.php
  function wp_super_cache_multisite_init (line 7) | function wp_super_cache_multisite_init() {
  function wp_super_cache_blogs_col (line 13) | function wp_super_cache_blogs_col( $col ) {
  function wp_super_cache_blogs_field (line 18) | function wp_super_cache_blogs_field( $name, $blog_id ) {
  function wp_super_cache_multisite_notice (line 43) | function wp_super_cache_multisite_notice() {
  function wp_super_cache_override_on_flag (line 49) | function wp_super_cache_override_on_flag() {

FILE: plugins/wptouch.php
  function wp_super_cache_wptouch_admin (line 3) | function wp_super_cache_wptouch_admin() {
  function wp_super_cache_wptouch_notice (line 43) | function wp_super_cache_wptouch_notice() {
  function wp_super_cache_wptouch_exists (line 49) | function wp_super_cache_wptouch_exists() {
  function wp_super_cache_maybe_disable_wptouch (line 65) | function wp_super_cache_maybe_disable_wptouch( $t ) {
  function wp_super_cache_wptouch_browsers (line 88) | function wp_super_cache_wptouch_browsers( $browsers ) {
  function wp_super_cache_wptouch_prefixes (line 104) | function wp_super_cache_wptouch_prefixes( $prefixes ) {
  function wp_super_cache_wptouch_cookie_check (line 108) | function wp_super_cache_wptouch_cookie_check( $cache_key ) {
  function wpsc_wptouch_list (line 133) | function wpsc_wptouch_list( $list ) {

FILE: rest/class.wp-super-cache-rest-delete-cache.php
  class WP_Super_Cache_Rest_Delete_Cache (line 3) | class WP_Super_Cache_Rest_Delete_Cache extends WP_REST_Controller {
    method callback (line 11) | public function callback( $request ) {

FILE: rest/class.wp-super-cache-rest-get-cache.php
  class WP_Super_Cache_Rest_Get_Cache (line 3) | class WP_Super_Cache_Rest_Get_Cache extends WP_REST_Controller {
    method callback (line 11) | public function callback( $request ) {

FILE: rest/class.wp-super-cache-rest-get-plugins.php
  class WP_Super_Cache_Rest_Get_Plugins (line 3) | class WP_Super_Cache_Rest_Get_Plugins extends WP_REST_Controller {
    method callback (line 11) | public function callback( $request ) {

FILE: rest/class.wp-super-cache-rest-get-settings.php
  class WP_Super_Cache_Rest_Get_Settings (line 5) | class WP_Super_Cache_Rest_Get_Settings extends WP_REST_Controller {
    method callback (line 13) | public function callback( $request ) {
    method get_ossdl_off_blog_url (line 59) | public function get_ossdl_off_blog_url() {
    method get_cache_path_url (line 69) | public function get_cache_path_url() {
    method get_cache_type (line 78) | public function get_cache_type() {
    method prepare_item_for_response (line 99) | public function prepare_item_for_response( $item, $request ) {
    method make_array_bool (line 130) | public function make_array_bool( &$value, $key ) {
    method get_is_submit_enabled (line 139) | protected function get_is_submit_enabled() {
    method get_is_preload_enabled (line 147) | protected function get_is_preload_enabled() {
    method get_next_gc (line 154) | protected function get_next_gc() {
    method get_is_preload_active (line 161) | protected function get_is_preload_active() {
    method get_minimum_preload_interval (line 172) | protected function get_minimum_preload_interval() {
    method get_is_lock_down_enabled (line 187) | protected function get_is_lock_down_enabled() {
    method get_post_count (line 198) | protected function get_post_count() {
    method get_default_cache_path (line 205) | protected function get_default_cache_path() {

FILE: rest/class.wp-super-cache-rest-get-stats.php
  class WP_Super_Cache_Rest_Get_Stats (line 3) | class WP_Super_Cache_Rest_Get_Stats extends WP_REST_Controller {
    method callback (line 11) | public function callback( $request ) {

FILE: rest/class.wp-super-cache-rest-get-status.php
  class WP_Super_Cache_Rest_Get_Status (line 3) | class WP_Super_Cache_Rest_Get_Status extends WP_REST_Controller {
    method callback (line 11) | public function callback( $request ) {
    method add_preload_status (line 32) | protected function add_preload_status( & $status ) {
    method add_php_mod_rewrite_status (line 51) | protected function add_php_mod_rewrite_status( & $status ) {
    method add_cache_disabled_status (line 67) | protected function add_cache_disabled_status( & $status ) {
    method add_compression_status (line 78) | protected function add_compression_status( & $status ) {
    method add_rewrite_status (line 89) | protected function add_rewrite_status( & $status ) {

FILE: rest/class.wp-super-cache-rest-preload.php
  class WP_Super_Cache_Rest_Preload (line 3) | class WP_Super_Cache_Rest_Preload extends WP_REST_Controller {
    method callback (line 11) | public function callback( $request ) {

FILE: rest/class.wp-super-cache-rest-test-cache.php
  class WP_Super_Cache_Rest_Test_Cache (line 3) | class WP_Super_Cache_Rest_Test_Cache extends WP_REST_Controller {
    method callback (line 11) | public function callback( $request ) {
    method format_error (line 87) | protected function format_error( WP_Error $error ) {

FILE: rest/class.wp-super-cache-rest-update-plugins.php
  class WP_Super_Cache_Rest_Update_Plugins (line 3) | class WP_Super_Cache_Rest_Update_Plugins extends WP_REST_Controller {
    method callback (line 11) | public function callback( $request ) {

FILE: rest/class.wp-super-cache-rest-update-settings.php
  class WP_Super_Cache_Rest_Update_Settings (line 5) | class WP_Super_Cache_Rest_Update_Settings extends WP_REST_Controller {
    method callback (line 14) | public function callback( $request ) {
    method set_value_by_key (line 67) | protected function set_value_by_key( $value, $key ) {
    method set_global (line 112) | protected function set_global( $global_name, $value ) {
    method set_wp_cache_location (line 140) | protected function set_wp_cache_location( $value ) {
    method set_cache_enabled (line 174) | protected function set_cache_enabled( $value ) {
    method set_lock_down (line 187) | protected function set_lock_down( $value ) {
    method set_super_cache_enabled (line 195) | protected function set_super_cache_enabled( $value ) {
    method set_wp_cache_not_logged_in (line 231) | protected function set_wp_cache_not_logged_in( $value ) {
    method set_wp_cache_make_known_anon (line 251) | protected function set_wp_cache_make_known_anon( $value ) {
    method set_wp_cache_object_cache (line 271) | protected function set_wp_cache_object_cache( $value ) {
    method set_cache_compression (line 297) | protected function set_cache_compression( $value ) {
    method set_wp_cache_pages (line 331) | protected function set_wp_cache_pages( $cache_pages ) {
    method set_cache_rejected_uri (line 350) | protected function set_cache_rejected_uri( $value ) {
    method set_cache_acceptable_files (line 358) | protected function set_cache_acceptable_files( $value ) {
    method set_cache_rejected_user_agent (line 366) | protected function set_cache_rejected_user_agent( $value ) {
    method set_ossdl_cname (line 374) | protected function set_ossdl_cname( $value ) {
    method set_ossdl_off_blog_url (line 381) | protected function set_ossdl_off_blog_url( $value ) {
    method set_ossdl_off_cdn_url (line 388) | protected function set_ossdl_off_cdn_url( $value ) {
    method set_ossdl_off_include_dirs (line 395) | protected function set_ossdl_off_include_dirs( $value ) {
    method set_ossdl_off_exclude (line 402) | protected function set_ossdl_off_exclude( $value ) {
    method set_ossdl_https (line 409) | protected function set_ossdl_https( $value ) {
    method set_ossdlcdn (line 416) | protected function set_ossdlcdn( $value ) {
    method set_time_setting (line 427) | protected function set_time_setting( $value, $name ) {
    method set_preload_setting (line 436) | protected function set_preload_setting( $value, $name ) {
    method toggle_easy_caching (line 447) | protected function toggle_easy_caching( $enabled = true ) {
    method save_time_settings (line 507) | protected function save_time_settings( $parameters ) {
    method set_cache_direct_pages (line 541) | protected function set_cache_direct_pages( $list ) {
    method new_direct_page (line 553) | protected function new_direct_page( $value ) {
    method save_preload_settings (line 567) | protected function save_preload_settings() {
    method restore_default_settings (line 600) | protected function restore_default_settings( $parameters ) {
    method set_debug_settings (line 621) | public function set_debug_settings( $parameters ) {

FILE: rest/class.wp-super-cache-settings-map.php
  class WP_Super_Cache_Settings_Map (line 3) | class WP_Super_Cache_Settings_Map {

FILE: rest/load.php
  class WP_Super_Cache_Router (line 14) | class WP_Super_Cache_Router {
    method register_routes (line 25) | public static function register_routes() {
    method get_items_permissions_check (line 116) | public static function get_items_permissions_check( $request ) {
    method get_item_permissions_check (line 126) | public static function get_item_permissions_check( $request ) {
    method create_item_permissions_check (line 136) | public static function create_item_permissions_check( $request ) {
    method update_item_permissions_check (line 146) | public static function update_item_permissions_check( $request ) {
    method delete_item_permissions_check (line 156) | public static function delete_item_permissions_check( $request ) {
  function wpsc_load_rest_api (line 161) | function wpsc_load_rest_api() {

FILE: src/device-detection/class-device-detection.php
  class Device_Detection (line 27) | class Device_Detection {
    method is_phone (line 34) | public static function is_phone() {

FILE: src/device-detection/class-user-agent-info.php
  class User_Agent_Info (line 28) | class User_Agent_Info {
    method __construct (line 176) | public function __construct( $ua = '' ) {
    method get_mobile_user_agent_name (line 189) | public function get_mobile_user_agent_name() {
    method get_platform (line 268) | public function get_platform() {
    method get_desktop_platform (line 322) | public function get_desktop_platform() {
    method get_browser (line 346) | public function get_browser() {
    method get_browser_display_name (line 389) | public function get_browser_display_name() {
    method isTierIphone (line 398) | public function isTierIphone() {
    method isTierRichCss (line 493) | public function isTierRichCss() {
    method is_tablet (line 537) | public function is_tablet() {
    method is_iphoneOrIpod (line 554) | public function is_iphoneOrIpod() {
    method maybe_get_user_agent_from_server (line 577) | private static function maybe_get_user_agent_from_server( $user_agent ...
    method is_iphone_or_ipod (line 600) | public static function is_iphone_or_ipod( $type = 'iphone-any', $user_...
    method is_chrome_for_iOS (line 628) | public static function is_chrome_for_iOS( $user_agent = null ) {
    method is_twitter_for_iphone (line 655) | public static function is_twitter_for_iphone( $user_agent = null ) {
    method is_twitter_for_ipad (line 682) | public static function is_twitter_for_ipad( $user_agent = null ) {
    method is_facebook_for_iphone (line 707) | public static function is_facebook_for_iphone( $user_agent = null ) {
    method is_facebook_for_ipad (line 738) | public static function is_facebook_for_ipad( $user_agent = null ) {
    method is_wordpress_for_ios (line 762) | public static function is_wordpress_for_ios( $user_agent = null ) {
    method is_ipad (line 787) | public static function is_ipad( $type = 'ipad-any', $user_agent = null...
    method is_firefox_mobile (line 816) | public static function is_firefox_mobile( $user_agent = null ) {
    method is_firefox_desktop (line 840) | public static function is_firefox_desktop( $user_agent = null ) {
    method is_firefox_os (line 862) | public static function is_firefox_os( $user_agent = null ) {
    method is_safari_browser (line 882) | public static function is_safari_browser( $user_agent = null ) {
    method is_edge_browser (line 899) | public static function is_edge_browser( $user_agent = null ) {
    method is_ie_browser (line 919) | public static function is_ie_browser( $user_agent = null ) {
    method is_opera_desktop (line 941) | public static function is_opera_desktop( $user_agent = null ) {
    method is_opera_mobile (line 968) | public static function is_opera_mobile( $user_agent = null ) {
    method is_opera_mini (line 998) | public static function is_opera_mini( $user_agent = null ) {
    method is_opera_mini_dumb (line 1019) | public static function is_opera_mini_dumb( $user_agent = null ) {
    method is_samsung_browser (line 1048) | public static function is_samsung_browser( $user_agent = null ) {
    method is_uc_browser (line 1066) | public static function is_uc_browser( $user_agent = null ) {
    method is_yandex_browser (line 1084) | public static function is_yandex_browser( $user_agent = null ) {
    method is_vivaldi_browser (line 1102) | public static function is_vivaldi_browser( $user_agent = null ) {
    method is_miui_browser (line 1120) | public static function is_miui_browser( $user_agent = null ) {
    method is_silk_browser (line 1138) | public static function is_silk_browser( $user_agent = null ) {
    method is_WindowsPhone7 (line 1153) | public static function is_WindowsPhone7( $user_agent = null ) {
    method is_windows_phone_8 (line 1176) | public static function is_windows_phone_8( $user_agent = null ) {
    method is_PalmWebOS (line 1198) | public static function is_PalmWebOS( $user_agent = null ) {
    method is_TouchPad (line 1223) | public static function is_TouchPad( $user_agent = null ) {
    method is_S60_OSSBrowser (line 1252) | public static function is_S60_OSSBrowser( $user_agent = null ) {
    method is_symbian_platform (line 1285) | public static function is_symbian_platform( $user_agent = null ) {
    method is_symbian_s40_platform (line 1321) | public static function is_symbian_s40_platform( $user_agent = null ) {
    method is_J2ME_platform (line 1345) | public static function is_J2ME_platform( $user_agent = null ) {
    method is_MaemoTablet (line 1366) | public static function is_MaemoTablet( $user_agent = null ) {
    method is_MeeGo (line 1396) | public static function is_MeeGo( $user_agent = null ) {
    method is_webkit (line 1418) | public static function is_webkit( $user_agent = null ) {
    method is_android (line 1442) | public static function is_android( $user_agent = null ) {
    method is_android_tablet (line 1469) | public static function is_android_tablet( $user_agent = null ) {
    method is_kindle_fire (line 1502) | public static function is_kindle_fire( $user_agent = null ) {
    method is_kindle_touch (line 1527) | public static function is_kindle_touch( $user_agent = null ) {
    method is_windows8_auth (line 1547) | public static function is_windows8_auth( $user_agent = null ) {
    method is_wordpress_for_win8 (line 1567) | public static function is_wordpress_for_win8( $user_agent = null ) {
    method is_wordpress_desktop_app (line 1587) | public static function is_wordpress_desktop_app( $user_agent = null ) {
    method is_blackberry_tablet (line 1609) | public static function is_blackberry_tablet( $user_agent = null ) {
    method is_blackbeberry (line 1632) | public static function is_blackbeberry( $user_agent = null ) {
    method is_blackberry_10 (line 1657) | public static function is_blackberry_10( $user_agent = null ) {
    method is_linux_desktop (line 1674) | public static function is_linux_desktop( $user_agent = null ) {
    method is_mac_desktop (line 1693) | public static function is_mac_desktop( $user_agent = null ) {
    method is_windows_desktop (line 1712) | public static function is_windows_desktop( $user_agent = null ) {
    method is_chrome_desktop (line 1731) | public static function is_chrome_desktop( $user_agent = null ) {
    method get_blackbeberry_OS_version (line 1761) | public static function get_blackbeberry_OS_version( $user_agent = null...
    method detect_blackberry_browser_version (line 1848) | public static function detect_blackberry_browser_version( $user_agent ...
    method is_mobile_app (line 1904) | public static function is_mobile_app( $user_agent = null ) {
    method is_Nintendo_3DS (line 1939) | public static function is_Nintendo_3DS( $user_agent = null ) {
    method is_bot (line 1959) | public static function is_bot( $user_agent = null ) {
    method is_bot_user_agent (line 1991) | public static function is_bot_user_agent( $ua = null ) {

FILE: src/device-detection/functions.php
  function wp_unslash (line 30) | function wp_unslash( $value ) {

FILE: tests/e2e/lib/CheerioForm.ts
  class CheerioForm (line 8) | class CheerioForm {
    method constructor (line 11) | constructor( private readonly form: Cheerio< AnyNode > ) {
    method setCheckbox (line 23) | public setCheckbox( name: string, value: boolean ): void {
    method setValue (line 37) | public setValue( name: string, value: string ): void {
    method submit (line 46) | public async submit( authCookie: string ): Promise< void > {
    method element (line 50) | private element( name: string ): Cheerio< AnyNode > {

FILE: tests/e2e/lib/docker-tools.ts
  function getContainerId (line 6) | async function getContainerId(): Promise< string > {
  function dockerExec (line 44) | async function dockerExec( ...command: string[] ) {
  function deleteLinesFromContainerFile (line 63) | async function deleteLinesFromContainerFile( filename: string, regex: st...
  function deleteContainerFile (line 72) | async function deleteContainerFile( filename: string ) {
  function deleteContainerDirectory (line 81) | async function deleteContainerDirectory( filename: string ) {
  function readContainerFile (line 90) | async function readContainerFile( filename: string ): Promise< Buffer > {
  function decodeContainerFile (line 102) | async function decodeContainerFile(
  function writeContainerFile (line 115) | async function writeContainerFile( filename: string, data: Buffer | stri...

FILE: tests/e2e/lib/plugin-settings.ts
  type ModRewriteOptions (line 6) | enum ModRewriteOptions {
  type CacheNotLoggedInOptions (line 11) | enum CacheNotLoggedInOptions {
  type SettingName (line 52) | type SettingName = keyof typeof settingsHandlers;
  type SettingMethod (line 53) | type SettingMethod< Name extends SettingName > = ( typeof settingsHandle...
  type SettingParams (line 54) | type SettingParams< Name extends SettingName > = Parameters< SettingMeth...
  type SettingValue (line 55) | type SettingValue< Name extends SettingName > = SettingParams< Name >[ 1 ];
  type Settings (line 57) | type Settings = {
  function updateSettings (line 67) | async function updateSettings( authCookie: string, settings: Partial< Se...
  function submitSettingsForm (line 86) | async function submitSettingsForm(

FILE: tests/e2e/lib/plugin-tools.ts
  function pluginFilePath (line 15) | function pluginFilePath( path: string ) {
  function readPluginFile (line 25) | async function readPluginFile( path: string ): Promise< string > {
  function clearCache (line 32) | async function clearCache(): Promise< void > {
  function getAuthCookie (line 41) | async function getAuthCookie(): Promise< string > {
  function authenticatedRequest (line 66) | async function authenticatedRequest(
  function getSiteUrl (line 94) | function getSiteUrl( path = '/', query: Record< string, string > = {} ):...
  function deleteCacheDirectory (line 104) | async function deleteCacheDirectory(): Promise< void > {

FILE: tests/e2e/lib/system-tools.ts
  function exec (line 13) | function exec( ...command: string[] ) {

FILE: tests/e2e/lib/test-tools.ts
  function loadPage (line 11) | async function loadPage( path = '/', params = {} ): Promise< string > {

FILE: tests/e2e/lib/wordpress-tools.ts
  function wpcli (line 16) | async function wpcli( ...command: string[] ) {
  function resetEnvironmnt (line 23) | async function resetEnvironmnt() {

FILE: tests/e2e/tools/mu-test-helpers.php
  function wpsc_test_inject_footer (line 11) | function wpsc_test_inject_footer() {
  function wpsc_test_header_login (line 23) | function wpsc_test_header_login() {

FILE: wp-cache-phase2.php
  function gzip_accepted (line 11) | function gzip_accepted() {
  function setup_blog_cache_dir (line 22) | function setup_blog_cache_dir() {
  function get_wp_cache_key (line 34) | function get_wp_cache_key( $url = false ) {
  function wpsc_parse_partial_url (line 61) | function wpsc_parse_partial_url( $partial_uri ) {
  function wpsc_remove_tracking_params_from_uri (line 68) | function wpsc_remove_tracking_params_from_uri( $uri ) {
  function wp_super_cache_init (line 103) | function wp_super_cache_init() {
  function wp_cache_serve_cache_file (line 128) | function wp_cache_serve_cache_file() {
  function wp_cache_get_legacy_cache (line 410) | function wp_cache_get_legacy_cache( $cache_file ) {
  function wp_cache_postload (line 414) | function wp_cache_postload() {
  function wp_cache_late_loader (line 439) | function wp_cache_late_loader() {
  function wpsc_get_auth_cookies (line 445) | function wpsc_get_auth_cookies() {
  function wpsc_get_accept_header (line 533) | function wpsc_get_accept_header() {
  function wp_cache_get_cookies_values (line 559) | function wp_cache_get_cookies_values() {
  function add_cacheaction (line 612) | function add_cacheaction( $action, $func ) {
  function do_cacheaction (line 617) | function do_cacheaction( $action, $value = '' ) {
  function wp_cache_mobile_group (line 634) | function wp_cache_mobile_group( $user_agent ) {
  function wp_cache_check_mobile (line 648) | function wp_cache_check_mobile( $cache_key ) {
  function wp_cache_debug (line 722) | function wp_cache_debug( $message, $level = 1 ) {
  function wpsc_dump_get_request (line 773) | function wpsc_dump_get_request() {
  function wpsc_is_backend (line 789) | function wpsc_is_backend() {
  function get_supercache_dir (line 815) | function get_supercache_dir( $blog_id = 0 ) {
  function get_current_url_supercache_dir (line 824) | function get_current_url_supercache_dir( $post_id = 0 ) {
  function wpsc_rebuild_files (line 904) | function wpsc_rebuild_files( $dir ) {
  function wpsc_get_realpath (line 909) | function wpsc_get_realpath( $directory ) {
  function wpsc_is_in_cache_directory (line 931) | function wpsc_is_in_cache_directory( $directory ) {
  function wpsc_delete_files (line 968) | function wpsc_delete_files( $dir, $delete = true ) {
  function get_all_supercache_filenames (line 1030) | function get_all_supercache_filenames( $dir = '' ) {
  function wpsc_is_https (line 1071) | function wpsc_is_https() {
  function supercache_filename (line 1076) | function supercache_filename() {
  function get_oc_version (line 1097) | function get_oc_version() {
  function reset_oc_version (line 1102) | function reset_oc_version( $version = 1 ) {
  function get_oc_key (line 1107) | function get_oc_key( $url = false ) {
  function wp_supercache_cache_for_admins (line 1111) | function wp_supercache_cache_for_admins() {
  function wpsc_is_caching_user_disabled (line 1146) | function wpsc_is_caching_user_disabled() {
  function wp_cache_confirm_delete (line 1161) | function wp_cache_confirm_delete( $dir ) {
  function wpsc_deep_replace (line 1195) | function wpsc_deep_replace( $search, $subject ) {
  function wpsc_get_protected_directories (line 1206) | function wpsc_get_protected_directories() {
  function wpsc_debug_username (line 1223) | function wpsc_debug_username() {
  function wpsc_create_debug_log (line 1231) | function wpsc_create_debug_log( $filename = '', $username = '' ) {
  function wpsc_delete_url_cache (line 1340) | function wpsc_delete_url_cache( $url ) {
  function is_writeable_ACLSafe (line 1360) | function is_writeable_ACLSafe( $path ) {
  function wp_cache_setting (line 1392) | function wp_cache_setting( $field, $value ) {
  function wp_cache_replace_line (line 1410) | function wp_cache_replace_line( $old, $new, $my_file ) {
  function wpsc_shutdown_message (line 1514) | function wpsc_shutdown_message() {
  function wp_cache_phase2 (line 1530) | function wp_cache_phase2() {
  function wpsc_register_post_hooks (line 1612) | function wpsc_register_post_hooks() {
  function wpcache_do_rebuild (line 1654) | function wpcache_do_rebuild( $dir ) {
  function wpcache_logged_in_message (line 1745) | function wpcache_logged_in_message() {
  function wp_cache_user_agent_is_rejected (line 1749) | function wp_cache_user_agent_is_rejected() {
  function wp_cache_get_response_headers (line 1770) | function wp_cache_get_response_headers() {
  function wpsc_is_rejected_cookie (line 1855) | function wpsc_is_rejected_cookie() {
  function wp_cache_is_rejected (line 1870) | function wp_cache_is_rejected( $uri ) {
  function wp_cache_mutex_init (line 1894) | function wp_cache_mutex_init() {
  function wp_cache_writers_entry (line 1922) | function wp_cache_writers_entry() {
  function wp_cache_writers_exit (line 1945) | function wp_cache_writers_exit() {
  function wp_super_cache_query_vars (line 1969) | function wp_super_cache_query_vars() {
  function wpsc_catch_status_header (line 2029) | function wpsc_catch_status_header( $status_header, $code ) {
  function wpsc_catch_http_status_code (line 2038) | function wpsc_catch_http_status_code( $status ) {
  function wpsc_is_fatal_error (line 2052) | function wpsc_is_fatal_error() {
  function wp_cache_ob_callback (line 2067) | function wp_cache_ob_callback( $buffer ) {
  function wp_cache_append_tag (line 2194) | function wp_cache_append_tag( &$buffer ) {
  function wp_cache_add_to_buffer (line 2221) | function wp_cache_add_to_buffer( &$buffer, $text ) {
  function wp_cache_maybe_dynamic (line 2244) | function wp_cache_maybe_dynamic( &$buffer ) {
  function wp_cache_get_ob (line 2255) | function wp_cache_get_ob( &$buffer ) {
  function wp_cache_phase2_clean_cache (line 2601) | function wp_cache_phase2_clean_cache( $file_prefix ) {
  function prune_super_cache (line 2631) | function prune_super_cache( $directory, $force = false, $rename = false ) {
  function wp_cache_rebuild_or_delete (line 2732) | function wp_cache_rebuild_or_delete( $file ) {
  function wp_cache_phase2_clean_expired (line 2794) | function wp_cache_phase2_clean_expired( $file_prefix, $force = false ) {
  function wp_cache_shutdown_callback (line 2846) | function wp_cache_shutdown_callback() {
  function wp_cache_no_postid (line 2996) | function wp_cache_no_postid( $id ) {
  function wp_cache_get_postid_from_comment (line 3000) | function wp_cache_get_postid_from_comment( $comment_id, $status = 'NA' ) {
  function wp_cache_clear_cache_on_menu (line 3065) | function wp_cache_clear_cache_on_menu() {
  function wp_cache_clear_cache (line 3071) | function wp_cache_clear_cache( $blog_id = 0 ) {
  function wpsc_delete_post_archives (line 3087) | function wpsc_delete_post_archives( $post ) {
  function wpsc_delete_cats_tags (line 3139) | function wpsc_delete_cats_tags( $post ) {
  function wpsc_post_transition (line 3171) | function wpsc_post_transition( $new_status, $old_status, $post ) {
  function wp_cache_post_edit (line 3203) | function wp_cache_post_edit( $post_id ) {
  function wp_cache_post_id_gc (line 3246) | function wp_cache_post_id_gc( $post_id, $all = 'all' ) {
  function wp_cache_post_change (line 3276) | function wp_cache_post_change( $post_id ) {
  function wp_cache_microtime_diff (line 3417) | function wp_cache_microtime_diff( $a, $b ) {
  function wp_cache_post_id (line 3423) | function wp_cache_post_id() {
  function maybe_stop_gc (line 3444) | function maybe_stop_gc( $flag ) {
  function get_gc_flag (line 3460) | function get_gc_flag() {
  function wp_cache_gc_cron (line 3465) | function wp_cache_gc_cron() {
  function schedule_wp_gc (line 3515) | function schedule_wp_gc( $forced = 0 ) {
  function wp_cache_gc_watcher (line 3558) | function wp_cache_gc_watcher() {
  function wpsc_is_get_query (line 3565) | function wpsc_is_get_query() {
  function wpsc_apache_request_headers (line 3582) | function wpsc_apache_request_headers() {

FILE: wp-cache.php
  function wpsc_init (line 69) | function wpsc_init() {
  function wp_super_cache_init_action (line 152) | function wp_super_cache_init_action() {
  function wp_cache_set_home (line 160) | function wp_cache_set_home() {
  function wpsc_enqueue_styles (line 168) | function wpsc_enqueue_styles() {
  function get_wpcachehome (line 186) | function get_wpcachehome() {
  function wpsc_remove_advanced_cache (line 202) | function wpsc_remove_advanced_cache() {
  function wpsupercache_uninstall (line 215) | function wpsupercache_uninstall() {
  function wpsupercache_deactivate (line 242) | function wpsupercache_deactivate() {
  function wpsupercache_activate (line 264) | function wpsupercache_activate() {
  function wpsupercache_site_admin (line 288) | function wpsupercache_site_admin() {
  function wp_cache_add_pages (line 292) | function wp_cache_add_pages() {
  function wp_cache_network_pages (line 301) | function wp_cache_network_pages() {
  function wp_super_cache_admin_enqueue_scripts (line 309) | function wp_super_cache_admin_enqueue_scripts( $hook ) {
  function wpsc_is_boost_installed (line 343) | function wpsc_is_boost_installed() {
  function wpsc_is_boost_active (line 358) | function wpsc_is_boost_active() {
  function wpsc_hide_boost_banner (line 365) | function wpsc_hide_boost_banner() {
  function wpsc_ajax_activate_boost (line 376) | function wpsc_ajax_activate_boost() {
  function wpsc_jetpack_boost_install_banner (line 398) | function wpsc_jetpack_boost_install_banner() {
  function wp_cache_manager_error_checks (line 464) | function wp_cache_manager_error_checks() {
  function wp_cache_manager_updates (line 740) | function wp_cache_manager_updates() {
  function wp_cache_manager (line 973) | function wp_cache_manager() {
  function wpsc_plugins_tab (line 1413) | function wpsc_plugins_tab() {
  function wpsc_admin_tabs (line 1438) | function wpsc_admin_tabs( $current = '' ) {
  function wpsc_restore_settings (line 1470) | function wpsc_restore_settings() {
  function comment_form_lockdown_message (line 1478) | function comment_form_lockdown_message() {
  function wp_update_lock_down (line 1484) | function wp_update_lock_down() {
  function wpsc_update_direct_pages (line 1502) | function wpsc_update_direct_pages() {
  function wpsc_lockdown (line 1577) | function wpsc_lockdown() {
  function RecursiveFolderDelete (line 1589) | function RecursiveFolderDelete ( $folderPath ) { // from http://www.php....
  function wp_cache_time_update (line 1608) | function wp_cache_time_update() {
  function wp_cache_sanitize_value (line 1687) | function wp_cache_sanitize_value($text, & $array) {
  function wp_cache_update_rejected_ua (line 1695) | function wp_cache_update_rejected_ua() {
  function wpsc_edit_rejected_ua (line 1709) | function wpsc_edit_rejected_ua() {
  function wp_cache_update_rejected_pages (line 1720) | function wp_cache_update_rejected_pages() {
  function wpsc_update_tracking_parameters (line 1737) | function wpsc_update_tracking_parameters() {
  function wpsc_edit_tracking_parameters (line 1747) | function wpsc_edit_tracking_parameters() {
  function wp_cache_update_rejected_cookies (line 1766) | function wp_cache_update_rejected_cookies() {
  function wp_cache_update_rejected_strings (line 1775) | function wp_cache_update_rejected_strings() {
  function wp_cache_update_accepted_strings (line 1784) | function wp_cache_update_accepted_strings() {
  function wpsc_update_debug_settings (line 1793) | function wpsc_update_debug_settings() {
  function wp_cache_enable (line 1874) | function wp_cache_enable() {
  function wp_cache_disable (line 1896) | function wp_cache_disable() {
  function wp_super_cache_enable (line 1914) | function wp_super_cache_enable() {
  function wp_super_cache_disable (line 1941) | function wp_super_cache_disable() {
  function wp_cache_is_enabled (line 1971) | function wp_cache_is_enabled() {
  function wp_cache_remove_index (line 1989) | function wp_cache_remove_index() {
  function wp_cache_index_notice (line 2020) | function wp_cache_index_notice() {
  function wpsc_config_file_notices (line 2068) | function wpsc_config_file_notices() {
  function wpsc_dismiss_indexhtml_warning (line 2098) | function wpsc_dismiss_indexhtml_warning() {
  function wp_cache_logout_all (line 2110) | function wp_cache_logout_all() {
  function wp_cache_add_index_protection (line 2123) | function wp_cache_add_index_protection() {
  function wp_cache_add_site_cache_index (line 2153) | function wp_cache_add_site_cache_index() {
  function wp_cache_verify_cache_dir (line 2183) | function wp_cache_verify_cache_dir() {
  function wp_cache_verify_config_file (line 2215) | function wp_cache_verify_config_file() {
  function wp_cache_create_advanced_cache (line 2262) | function wp_cache_create_advanced_cache() {
  function wpsc_identify_advanced_cache (line 2332) | function wpsc_identify_advanced_cache() {
  function wpsc_check_advanced_cache (line 2350) | function wpsc_check_advanced_cache() {
  function wp_cache_check_global_config (line 2408) | function wp_cache_check_global_config() {
  function wpsc_generate_sizes_array (line 2452) | function wpsc_generate_sizes_array() {
  function wp_cache_format_fsize (line 2468) | function wp_cache_format_fsize( $fsize ) {
  function wp_cache_regenerate_cache_file_stats (line 2479) | function wp_cache_regenerate_cache_file_stats() {
  function wp_cache_files (line 2518) | function wp_cache_files() {
  function wp_cache_delete_buttons (line 2699) | function wp_cache_delete_buttons() {
  function delete_cache_dashboard (line 2723) | function delete_cache_dashboard() {
  function wpsc_dirsize (line 2738) | function wpsc_dirsize($directory, $sizes) {
  function wp_cache_clean_cache (line 2803) | function wp_cache_clean_cache( $file_prefix, $all = false ) {
  function wpsc_delete_post_cache (line 2830) | function wpsc_delete_post_cache( $id ) {
  function wp_cache_clean_legacy_files (line 2842) | function wp_cache_clean_legacy_files( $dir, $file_prefix ) {
  function wp_cache_clean_expired (line 2876) | function wp_cache_clean_expired($file_prefix) {
  function wpsc_remove_marker (line 2914) | function wpsc_remove_marker( $filename, $marker ) {
  function wp_cache_catch_404 (line 2949) | function wp_cache_catch_404() {
  function wp_cache_favorite_action (line 2960) | function wp_cache_favorite_action( $actions ) {
  function wp_cache_plugin_notice (line 2977) | function wp_cache_plugin_notice( $plugin ) {
  function wp_cache_plugin_actions (line 2984) | function wp_cache_plugin_actions( $links, $file ) {
  function wp_cache_admin_notice (line 2993) | function wp_cache_admin_notice() {
  function wp_cache_check_site (line 3006) | function wp_cache_check_site() {
  function update_cached_mobile_ua_list (line 3052) | function update_cached_mobile_ua_list( $mobile_browsers, $mobile_prefixe...
  function wpsc_update_htaccess (line 3064) | function wpsc_update_htaccess() {
  function wpsc_update_htaccess_form (line 3076) | function wpsc_update_htaccess_form( $short_form = true ) {
  function wpsc_get_logged_in_cookie (line 3112) | function wpsc_get_logged_in_cookie() {
  function wpsc_get_htaccess_info (line 3119) | function wpsc_get_htaccess_info() {
  function clear_post_supercache (line 3304) | function clear_post_supercache( $post_id ) {
  function wpsc_ajax_get_preload_status (line 3325) | function wpsc_ajax_get_preload_status() {
  function wpsc_get_preload_status_file_path (line 3340) | function wpsc_get_preload_status_file_path() {
  function wpsc_get_next_preload_time (line 3348) | function wpsc_get_next_preload_time() {
  function wpsc_get_preload_status (line 3360) | function wpsc_get_preload_status( $include_next = false ) {
  function wpsc_update_active_preload (line 3386) | function wpsc_update_active_preload( $group = null, $progress = null, $u...
  function wpsc_update_idle_preload (line 3414) | function wpsc_update_idle_preload( $finish_time = null ) {
  function wp_cron_preload_cache (line 3431) | function wp_cron_preload_cache() {
  function wpsc_schedule_next_preload (line 3723) | function wpsc_schedule_next_preload() {
  function option_preload_cache_counter (line 3746) | function option_preload_cache_counter( $value ) {
  function check_up_on_preloading (line 3758) | function check_up_on_preloading() {
  function wp_cache_disable_plugin (line 3766) | function wp_cache_disable_plugin( $delete_config_file = true ) {
  function uninstall_supercache (line 3830) | function uninstall_supercache( $folderPath ) { // from http://www.php.ne...
  function supercache_admin_bar_render (line 3851) | function supercache_admin_bar_render() {
  function wpsc_is_preload_active (line 3864) | function wpsc_is_preload_active() {
  function wpsc_reset_preload_counter (line 3908) | function wpsc_reset_preload_counter() {
  function wpsc_reset_preload_settings (line 3921) | function wpsc_reset_preload_settings() {
  function wpsc_cancel_preload (line 3943) | function wpsc_cancel_preload() {
  function wpsc_create_stop_preload_flag (line 3976) | function wpsc_create_stop_preload_flag() {
  function wpsc_enable_preload (line 3984) | function wpsc_enable_preload() {
  function wpsc_get_post_types (line 3990) | function wpsc_get_post_types() {
  function wpsc_post_count (line 4001) | function wpsc_post_count() {
  function wpsc_get_minimum_preload_interval (line 4021) | function wpsc_get_minimum_preload_interval() {
  function wpsc_preload_settings (line 4025) | function wpsc_preload_settings() {
  function wpsc_is_preloading (line 4119) | function wpsc_is_preloading() {
  function wpsc_set_default_gc (line 4127) | function wpsc_set_default_gc( $force = false ) {
  function add_mod_rewrite_rules (line 4161) | function add_mod_rewrite_rules() {
  function remove_mod_rewrite_rules (line 4165) | function remove_mod_rewrite_rules() {
  function update_mod_rewrite_rules (line 4169) | function update_mod_rewrite_rules( $add_rules = true ) {
  function wpsc_feed_update (line 4280) | function wpsc_feed_update( $type, $permalink ) {
  function wpsc_get_plugin_list (line 4294) | function wpsc_get_plugin_list() {
  function wpsc_update_plugin_list (line 4310) | function wpsc_update_plugin_list( $update ) {
  function wpsc_add_plugin (line 4320) | function wpsc_add_plugin( $file ) {
  function wpsc_delete_plugin (line 4337) | function wpsc_delete_plugin( $file ) {
  function wpsc_get_plugins (line 4354) | function wpsc_get_plugins() {
  function wpsc_add_cookie (line 4359) | function wpsc_add_cookie( $name ) {
  function wpsc_delete_cookie (line 4373) | function wpsc_delete_cookie( $name ) {
  function wpsc_get_cookies (line 4387) | function wpsc_get_cookies() {
  function wpsc_get_extra_cookies (line 4392) | function wpsc_get_extra_cookies() {
  function wpsc_update_check (line 4404) | function wpsc_update_check() {
  function wpsc_render_partial (line 4431) | function wpsc_render_partial( $partial, array $page_vars = array() ) {
  function wpsc_render_header (line 4455) | function wpsc_render_header() {
  function wpsc_render_footer (line 4467) | function wpsc_render_footer() {
Condensed preview — 152 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,192K chars).
[
  {
    "path": ".eslintignore",
    "chars": 278,
    "preview": "# Our standard eslint config reads .gitignore and .eslintignore to determine what to ignore.\n\n# @todo: Files below ignor"
  },
  {
    "path": ".gitattributes",
    "chars": 435,
    "preview": "# Files not needed in the release zip.\n/.git*             export-ignore\n.gitattributes     export-ignore\n.github/       "
  },
  {
    "path": ".github/files/autorelease.sh",
    "chars": 4116,
    "preview": "#!/usr/bin/env bash\n\nset -eo pipefail\n\n: \"${GH_TOKEN:?Build argument needs to be set and non-empty.}\"\n: \"${GITHUB_REF:?B"
  },
  {
    "path": ".github/files/wp-svn-autopublish.sh",
    "chars": 5475,
    "preview": "#!/usr/bin/env bash\n\nset -eo pipefail\n\n: \"${GITHUB_REF:?Build argument needs to be set and non-empty.}\"\nif [[ -n \"$CI\" ]"
  },
  {
    "path": ".github/workflows/autorelease.yml",
    "chars": 622,
    "preview": "name: Auto-release\n\non:\n  push:\n    tags:\n      - 'v?[0-9]+.[0-9]+'\n      - 'v?[0-9]+.[0-9]+-*'\n      - 'v?[0-9]+.[0-9]+"
  },
  {
    "path": ".github/workflows/autotagger.yml",
    "chars": 4498,
    "preview": "name: Auto-tagger\n\non:\n  push:\n    branches:\n      - trunk\n      - prerelease\n      - '*/branch-*'\n  workflow_dispatch:\n"
  },
  {
    "path": ".github/workflows/changelogger.yml",
    "chars": 839,
    "preview": "name: Changelogger\n\non:\n  pull_request:\n\njobs:\n  validate:\n    name: Validate changelog\n    runs-on: ubuntu-latest\n    s"
  },
  {
    "path": ".github/workflows/e2e-tests.yml",
    "chars": 1576,
    "preview": "name: E2E Tests\n\non:\n  pull_request:\n  push:\n    branches: [trunk]\n\njobs:\n  e2e:\n    name: E2E Tests\n    runs-on: ubuntu"
  },
  {
    "path": ".github/workflows/linting.yml",
    "chars": 994,
    "preview": "name: Linting\n\non:\n  pull_request:\n  push:\n    branches: [trunk]\n\njobs:\n  phpcs:\n    name: PHPCS\n    runs-on: ubuntu-lat"
  },
  {
    "path": ".github/workflows/php-tests.yml",
    "chars": 869,
    "preview": "name: PHP Tests\n\non:\n  pull_request:\n  push:\n    branches: [trunk]\n\njobs:\n  phpunit:\n    name: PHPUnit (PHP ${{ matrix.p"
  },
  {
    "path": ".github/workflows/wp-svn-autopublish.yml",
    "chars": 1264,
    "preview": "name: WordPress SVN auto-publisher\n\non:\n  push:\n    tags:\n      - 'v?[0-9]+.[0-9]+'\n      - 'v?[0-9]+.[0-9]+-*'\n      - "
  },
  {
    "path": ".gitignore",
    "chars": 22,
    "preview": "vendor/\nnode_modules/\n"
  },
  {
    "path": ".phan/baseline.php",
    "chars": 7134,
    "preview": "<?php\n/**\n * This is an automatically generated baseline for Phan issues.\n * When Phan is invoked with --load-baseline=p"
  },
  {
    "path": ".phan/config.php",
    "chars": 1019,
    "preview": "<?php\n/**\n * Phan configuration for WP Super Cache.\n */\n\nreturn [\n\t'minimum_target_php_version' => '7.2',\n\t'target_php_v"
  },
  {
    "path": ".phan/stubs/amp-stubs.php",
    "chars": 4142,
    "preview": "<?php\n/**\n * Stubs automatically generated from AMP 2.5.5 and AMP for WP 1.1.12\n * using the definition file `tools/stub"
  },
  {
    "path": ".phpcs.xml.dist",
    "chars": 1824,
    "preview": "<?xml version=\"1.0\"?>\n<ruleset name=\"WP Super Cache\">\n\t<description>PHPCS ruleset for WP Super Cache</description>\n\n\t<fi"
  },
  {
    "path": ".w.org-assets/README.md",
    "chars": 238,
    "preview": "# WordPress.org Assets\n\nThis directory is intended to hold assets meant for w.org plugins SVN.\n\nThere is no auto-deploym"
  },
  {
    "path": ".w.org-assets/blueprints/blueprint.json",
    "chars": 347,
    "preview": "{\n\t\"landingPage\": \"/wp-admin/options-general.php?page=wpsupercache\",\n\t\"steps\": [\n\t\t{\n\t\t\t\"step\": \"installPlugin\",\n\t\t\t\"plu"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 42888,
    "preview": "# Changelog\n\n### This is a list detailing changes for all Super Cache releases.\n\nThe format is based on [Keep a Changelo"
  },
  {
    "path": "LICENSE.txt",
    "chars": 18636,
    "preview": "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public Licens"
  },
  {
    "path": "README.md",
    "chars": 3400,
    "preview": "# WP Super Cache\n\nA very fast caching engine for WordPress that produces static HTML files.\n\n[![WordPress Plugin](https:"
  },
  {
    "path": "SECURITY.md",
    "chars": 2506,
    "preview": "# Security Policy\n\nFull details of the Automattic Security Policy can be found on [automattic.com](https://automattic.co"
  },
  {
    "path": "advanced-cache.php",
    "chars": 1128,
    "preview": "<?php\n// WP SUPER CACHE 1.2\nfunction wpcache_broken_message() {\n\tglobal $wp_cache_config_file;\n\tif ( isset( $wp_cache_co"
  },
  {
    "path": "changelog/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "changelog/add-check-type-for-supercache-last-cached-option",
    "chars": 101,
    "preview": "Significance: patch\nType: fixed\n\nFix a PHP warning when the newest cached pages list is unavailable.\n"
  },
  {
    "path": "changelog/add-live-preview-blueprint",
    "chars": 77,
    "preview": "Significance: minor\nType: added\n\nAdd a WordPress.org Live Preview Blueprint.\n"
  },
  {
    "path": "changelog/fix-audit_json_encode_flags_part_trois",
    "chars": 84,
    "preview": "Significance: patch\nType: fixed\n\nEnsure proper flags are used with `json_encode()`.\n"
  },
  {
    "path": "changelog/fix-more-json-encode-flags",
    "chars": 79,
    "preview": "Significance: patch\nType: fixed\nComment: Add more missing json_encode flags.\n\n\n"
  },
  {
    "path": "changelog/fix-null-wp-cache-home-path",
    "chars": 152,
    "preview": "Significance: patch\nType: fixed\n\nFix `str_starts_with()` PHP 8.1+ deprecation when `$wp_cache_home_path` is null in `get"
  },
  {
    "path": "changelog/fix-phpcompatibility-dev-run",
    "chars": 142,
    "preview": "Significance: patch\nType: fixed\nComment: Suppress phpcompatibility sniffs that apply to code that is properly guarded wi"
  },
  {
    "path": "changelog/remove-wpsc-outside-dep-device-detection",
    "chars": 112,
    "preview": "Significance: patch\nType: changed\n\nDevice Detection: use an embedded version instead of the Composer dependency\n"
  },
  {
    "path": "changelog/renovate-cheerio-1.x",
    "chars": 64,
    "preview": "Significance: patch\nType: changed\n\nUpdate package dependencies.\n"
  },
  {
    "path": "changelog/renovate-js-unit-testing-packages",
    "chars": 64,
    "preview": "Significance: patch\nType: changed\n\nUpdate package dependencies.\n"
  },
  {
    "path": "changelog/renovate-js-unit-testing-packages#2",
    "chars": 64,
    "preview": "Significance: patch\nType: changed\n\nUpdate package dependencies.\n"
  },
  {
    "path": "changelog/renovate-lock-file-maintenance",
    "chars": 64,
    "preview": "Significance: patch\nType: changed\n\nUpdate package dependencies.\n"
  },
  {
    "path": "changelog/renovate-lock-file-maintenance#2",
    "chars": 64,
    "preview": "Significance: patch\nType: changed\n\nUpdate package dependencies.\n"
  },
  {
    "path": "changelog/renovate-lock-file-maintenance#3",
    "chars": 64,
    "preview": "Significance: patch\nType: changed\n\nUpdate package dependencies.\n"
  },
  {
    "path": "changelog/renovate-major-definitelytyped",
    "chars": 64,
    "preview": "Significance: patch\nType: changed\n\nUpdate package dependencies.\n"
  },
  {
    "path": "changelog/renovate-npm-axios-vulnerability",
    "chars": 64,
    "preview": "Significance: patch\nType: changed\n\nUpdate package dependencies.\n"
  },
  {
    "path": "changelog/renovate-wikimedia-testing-access-wrapper-4.x",
    "chars": 67,
    "preview": "Significance: patch\nType: changed\nComment: Update composer.lock.\n\n\n"
  },
  {
    "path": "changelog/update-composer-2.9",
    "chars": 84,
    "preview": "Significance: patch\nType: changed\nComment: Update composer.lock for composer 2.9.\n\n\n"
  },
  {
    "path": "changelog/update-gpl-license-address",
    "chars": 124,
    "preview": "Significance: patch\nType: changed\nComment: Update GPL license notices. The FSF moved out of 59 Temple Place back in 2005"
  },
  {
    "path": "changelog/update-minimum-wp-to-6.8",
    "chars": 85,
    "preview": "Significance: major\nType: removed\n\nGeneral: Update minimum WordPress version to 6.8.\n"
  },
  {
    "path": "changelog/update-node-24",
    "chars": 72,
    "preview": "Significance: patch\nType: changed\nComment: Bump `@types/node` to v24.\n\n\n"
  },
  {
    "path": "changelog/update-switch-to-tsgo",
    "chars": 85,
    "preview": "Significance: patch\nType: changed\n\nSwitch to Native TypeScript compiler based on Go.\n"
  },
  {
    "path": "changelog/update-tooling-update_stable_tag_in_backport",
    "chars": 71,
    "preview": "Significance: patch\nType: fixed\nComment: Update stable tag in trunk.\n\n\n"
  },
  {
    "path": "changelog/update-tsgo-fix-type-errors-in-e2e-projects",
    "chars": 65,
    "preview": "Significance: patch\nType: fixed\n\nFix TS errors detected by tsgo.\n"
  },
  {
    "path": "composer.json",
    "chars": 1636,
    "preview": "{\n\t\"name\": \"automattic/wp-super-cache\",\n\t\"description\": \"A very fast caching engine for WordPress that produces static h"
  },
  {
    "path": "eslint.config.mjs",
    "chars": 206,
    "preview": "import js from '@eslint/js';\nimport globals from 'globals';\n\nexport default [\n\tjs.configs.recommended,\n\t{\n\t\tlanguageOpti"
  },
  {
    "path": "inc/boost.php",
    "chars": 8119,
    "preview": "<?php\n/**\n * Code to handle migration from WP Super Cache to Jetpack Boost.\n *\n * @package WP_Super_Cache\n */\n\n// Minimu"
  },
  {
    "path": "inc/delete-cache-button.js",
    "chars": 958,
    "preview": "/* global wpsc_ajax */\n( function ( $ ) {\n\t$( document ).ready( function () {\n\t\t$( '#wp-admin-bar-delete-cache' ).on( 'c"
  },
  {
    "path": "inc/delete-cache-button.php",
    "chars": 6294,
    "preview": "<?php\nif ( defined( 'WPSCDISABLEDELETEBUTTON' ) ) {\n\treturn;\n}\n\n/**\n * Adds \"Delete Cache\" button in WP Toolbar.\n */\nfun"
  },
  {
    "path": "inc/preload-notification.php",
    "chars": 771,
    "preview": "<?php\n\n// phpcs:disable WordPress.Security.NonceVerification.Recommended\n\nfunction wpsc_preload_notification_scripts() {"
  },
  {
    "path": "js/admin.js",
    "chars": 4131,
    "preview": "/**\n * Handle the buttons for the Boost migration.\n * @param {jQuery} $ - jQuery\n */\n( $ => {\n\t$( document ).ready( func"
  },
  {
    "path": "js/preload-notification.js",
    "chars": 3451,
    "preview": "jQuery( document ).ready( function () {\n\tconst { __, sprintf } = window.wp.i18n;\n\n\t// Set how often to check when a prel"
  },
  {
    "path": "languages/wp-super-cache-be_BY.po",
    "chars": 70879,
    "preview": "# Translation of the WordPress plugin   by .\n# Copyright (C) 2010\n# This file is distributed under the same license as t"
  },
  {
    "path": "languages/wp-super-cache-de_DE.po",
    "chars": 79842,
    "preview": "# Translation of the WordPress plugin   by .\n# Copyright (C) 2010\n# This file is distributed under the same license as t"
  },
  {
    "path": "languages/wp-super-cache-es_ES.po",
    "chars": 51846,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: WP Super Cache 0.9.7\\n\"\n\"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-super"
  },
  {
    "path": "languages/wp-super-cache-fr_FR.po",
    "chars": 74885,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: WP Super Cache fr\\n\"\n\"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-super-ca"
  },
  {
    "path": "languages/wp-super-cache-it_IT.po",
    "chars": 81462,
    "preview": "# WP Super Cache Translation File\n# GPL\n# Donncha O Caoimh, http://ocaoimh.ie/\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version:"
  },
  {
    "path": "languages/wp-super-cache-ja.po",
    "chars": 68331,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: ja\\n\"\n\"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-super-cache\\n\"\n\"POT-Cre"
  },
  {
    "path": "languages/wp-super-cache-lt_LT.po",
    "chars": 69760,
    "preview": "# Translation of the WordPress plugin   by .\n# Copyright (C) 2010\n# This file is distributed under the same license as t"
  },
  {
    "path": "languages/wp-super-cache-ro_RO.po",
    "chars": 71836,
    "preview": "# Translation of the WordPress plugin   by .\n# Copyright (C) 2010\n# This file is distributed under the same license as t"
  },
  {
    "path": "languages/wp-super-cache-ru_RU.po",
    "chars": 82079,
    "preview": "# Translation of the WordPress plugin   by .\n# Copyright (C) 2010\n# This file is distributed under the same license as t"
  },
  {
    "path": "languages/wp-super-cache-sr_RS.po",
    "chars": 96637,
    "preview": "# Copyright (C) 2013\n# This file is distributed under the same license as the  package.\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-V"
  },
  {
    "path": "languages/wp-super-cache-sv_SE.po",
    "chars": 69025,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: wp-super-cache 0.9.9.6\\n\"\n\"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-sup"
  },
  {
    "path": "languages/wp-super-cache-tr_TR.po",
    "chars": 79918,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: WP Super Cache\\n\"\n\"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-super-cache"
  },
  {
    "path": "languages/wp-super-cache-ua_UA.po",
    "chars": 70699,
    "preview": "# Translation of the WordPress plugin   by .\n# Copyright (C) 2010\n# This file is distributed under the same license as t"
  },
  {
    "path": "languages/wp-super-cache-uk.po",
    "chars": 50514,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: wp-super-cache\\n\"\n\"Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-super-cache"
  },
  {
    "path": "languages/wp-super-cache-zh_CN.po",
    "chars": 67636,
    "preview": "# Copyright (C) 2012\n# This file is distributed under the same license as the  package.\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-V"
  },
  {
    "path": "languages/wp-super-cache-zh_TW.po",
    "chars": 70443,
    "preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: WP Super Cache (Traditional Chinese)\\n\"\n\"Report-Msgid-Bugs-To: http://wordpress."
  },
  {
    "path": "ossdl-cdn.php",
    "chars": 16492,
    "preview": "<?php\n\n/* Taken from OSSDL CDN off-linker, a plugin by W-Mark Kubacki and used with permission */\n\nif ( ! isset( $ossdlc"
  },
  {
    "path": "package.json",
    "chars": 761,
    "preview": "{\n\t\"name\": \"@automattic/jetpack-super-cache\",\n\t\"version\": \"4.0.0-alpha\",\n\t\"private\": true,\n\t\"description\": \"A very fast "
  },
  {
    "path": "partials/advanced.php",
    "chars": 33859,
    "preview": "<div class=\"wpsc-settings-inner\">\n<?php\nglobal $wp_cache_mod_rewrite, $wp_cache_mfunc_enabled, $wp_cache_mobile_enabled,"
  },
  {
    "path": "partials/debug.php",
    "chars": 5980,
    "preview": "<div class=\"wpsc-settings-inner\">\n<?php\nextract( wpsc_update_debug_settings() ); // $wp_super_cache_debug, $wp_cache_deb"
  },
  {
    "path": "partials/easy.php",
    "chars": 12027,
    "preview": "<div class=\"wpsc-settings-inner\">\n<?php\nglobal $wpsc_promo_links;\necho '<div class=\"wpsc-card\">';\necho '<form name=\"wp_m"
  },
  {
    "path": "partials/lockdown.php",
    "chars": 5093,
    "preview": "<div class=\"wpsc-card\">\n<a name='lockdown'></a>\n\t<fieldset class=\"options\">\n\t<h4><?php _e( 'Lock Down:', 'wp-super-cache"
  },
  {
    "path": "partials/preload.php",
    "chars": 5835,
    "preview": "<div class=\"wpsc-settings-inner\">\n<?php\nglobal $wp_cache_preload_posts;\n\necho '<a name=\"preload\"></a>';\nif ( ! $cache_en"
  },
  {
    "path": "partials/rejected_user_agents.php",
    "chars": 1033,
    "preview": "<div class=\"wpsc-card\">\n<?php\necho '<a name=\"useragents\"></a><fieldset class=\"options\"><h4>' . __( 'Rejected User Agents"
  },
  {
    "path": "partials/restore.php",
    "chars": 586,
    "preview": "<div class=\"wpsc-card\">\n<?php\necho '<fieldset class=\"options\"><h4>' . __( 'Fix Configuration', 'wp-super-cache' ) . '</h"
  },
  {
    "path": "partials/tracking_parameters.php",
    "chars": 1393,
    "preview": "<div class=\"wpsc-card\">\n<?php\necho '<a name=\"trackingparameters\"></a><fieldset class=\"options\"><h4>' . __( 'Tracking Par"
  },
  {
    "path": "phpunit.11.xml.dist",
    "chars": 820,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:noNamespaceSc"
  },
  {
    "path": "phpunit.12.xml.dist",
    "chars": 820,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:noNamespaceSc"
  },
  {
    "path": "phpunit.9.xml.dist",
    "chars": 520,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:noNamespaceSc"
  },
  {
    "path": "plugins/awaitingmoderation.php",
    "chars": 2889,
    "preview": "<?php\n\nfunction awaitingmoderation_action( $buffer ) {\n\t$buffer = str_replace( __( 'Your comment is awaiting moderation."
  },
  {
    "path": "plugins/badbehaviour.php",
    "chars": 3969,
    "preview": "<?php\n\nfunction wp_supercache_badbehaviour( $file ) {\n\tglobal $cache_badbehaviour;\n\n\tif ( 1 !== $cache_badbehaviour ) {\n"
  },
  {
    "path": "plugins/domain-mapping.php",
    "chars": 4570,
    "preview": "<?php\n\nfunction domain_mapping_gc_cache( $function, $directory ) {\n\tglobal $cache_path;\n\n\tif ( ! function_exists( 'domai"
  },
  {
    "path": "plugins/dynamic-cache-test.php",
    "chars": 8265,
    "preview": "<?php\n\n/*\n * On the Advanced Settings page enable \"Enable dynamic caching\" and clear\n * the cache.\n *\n * Plugin authors:"
  },
  {
    "path": "plugins/jetpack.php",
    "chars": 3889,
    "preview": "<?php\n\nif ( defined( 'WPCACHEHOME' ) ) {\n\tif ( file_exists( WPCACHEHOME . '/src/device-detection/class-device-detection."
  },
  {
    "path": "plugins/multisite.php",
    "chars": 2398,
    "preview": "<?php\n\nif ( is_multisite() ) {\n\tadd_cacheaction( 'add_cacheaction', 'wp_super_cache_multisite_init' );\n}\n\nfunction wp_su"
  },
  {
    "path": "plugins/wptouch.php",
    "chars": 5171,
    "preview": "<?php\n\nfunction wp_super_cache_wptouch_admin() {\n\tglobal $cache_wptouch, $wp_cache_config_file, $valid_nonce;\n\n\t$cache_w"
  },
  {
    "path": "readme.txt",
    "chars": 34460,
    "preview": "=== WP Super Cache ===\nContributors: donncha, automattic, adnan007, dilirity, mikemayhem3030, pyronaur, thingalon\nTags: "
  },
  {
    "path": "rest/class.wp-super-cache-rest-delete-cache.php",
    "chars": 926,
    "preview": "<?php\n\nclass WP_Super_Cache_Rest_Delete_Cache extends WP_REST_Controller {\n\n\t/**\n\t * Get a collection of items\n\t *\n\t * @"
  },
  {
    "path": "rest/class.wp-super-cache-rest-get-cache.php",
    "chars": 1183,
    "preview": "<?php\n\nclass WP_Super_Cache_Rest_Get_Cache extends WP_REST_Controller {\n\n\t/**\n\t * Get a collection of items\n\t *\n\t * @par"
  },
  {
    "path": "rest/class.wp-super-cache-rest-get-plugins.php",
    "chars": 369,
    "preview": "<?php\n\nclass WP_Super_Cache_Rest_Get_Plugins extends WP_REST_Controller {\n\n\t/**\n\t * GET a list of plugins through the /p"
  },
  {
    "path": "rest/class.wp-super-cache-rest-get-settings.php",
    "chars": 4920,
    "preview": "<?php\n\nrequire_once __DIR__ . '/class.wp-super-cache-settings-map.php';\n\nclass WP_Super_Cache_Rest_Get_Settings extends "
  },
  {
    "path": "rest/class.wp-super-cache-rest-get-stats.php",
    "chars": 421,
    "preview": "<?php\n\nclass WP_Super_Cache_Rest_Get_Stats extends WP_REST_Controller {\n\n\t/**\n\t * Get the cache stats for the site.\n\t *\n"
  },
  {
    "path": "rest/class.wp-super-cache-rest-get-status.php",
    "chars": 3092,
    "preview": "<?php\n\nclass WP_Super_Cache_Rest_Get_Status extends WP_REST_Controller {\n\n\t/**\n\t * Get any status that might be visible."
  },
  {
    "path": "rest/class.wp-super-cache-rest-preload.php",
    "chars": 947,
    "preview": "<?php\n\nclass WP_Super_Cache_Rest_Preload extends WP_REST_Controller {\n\n\t/**\n\t * Update the cache settings.\n\t *\n\t * @para"
  },
  {
    "path": "rest/class.wp-super-cache-rest-test-cache.php",
    "chars": 2813,
    "preview": "<?php\n\nclass WP_Super_Cache_Rest_Test_Cache extends WP_REST_Controller {\n\n\t/**\n\t * Get a collection of items\n\t *\n\t * @pa"
  },
  {
    "path": "rest/class.wp-super-cache-rest-update-plugins.php",
    "chars": 507,
    "preview": "<?php\n\nclass WP_Super_Cache_Rest_Update_Plugins extends WP_REST_Controller {\n\n\t/**\n\t * Toggle plugins on/off through the"
  },
  {
    "path": "rest/class.wp-super-cache-rest-update-settings.php",
    "chars": 16123,
    "preview": "<?php\n\nrequire_once __DIR__ . '/class.wp-super-cache-settings-map.php';\n\nclass WP_Super_Cache_Rest_Update_Settings exten"
  },
  {
    "path": "rest/class.wp-super-cache-settings-map.php",
    "chars": 6990,
    "preview": "<?php\n\nclass WP_Super_Cache_Settings_Map {\n\t/**\n\t * A map describing how settings transform from their external names\n\t "
  },
  {
    "path": "rest/load.php",
    "chars": 6002,
    "preview": "<?php\n\nrequire_once( __DIR__ . '/class.wp-super-cache-rest-get-settings.php' );\nrequire_once( __DIR__ . '/class.wp-super"
  },
  {
    "path": "src/device-detection/class-device-detection.php",
    "chars": 2315,
    "preview": "<?php\n/**\n * Device detection for Jetpack.\n *\n *  Since WPSC doesn't use an autoloader or composer, this is a simplified"
  },
  {
    "path": "src/device-detection/class-user-agent-info.php",
    "chars": 79858,
    "preview": "<?php\n/**\n * User agent detection for Jetpack.\n *\n * Since WPSC doesn't use an autoloader or composer, this is a simple "
  },
  {
    "path": "src/device-detection/functions.php",
    "chars": 1274,
    "preview": "<?php\n/**\n * Utility functions for device detection.\n *\n *  Since WPSC doesn't use an autoloader or composer, this is a "
  },
  {
    "path": "styling/dashboard.css",
    "chars": 3394,
    "preview": "/* TODO: Migrate to SCSS after adding build step to WPSC */\n\n/* TODO: Migrate CSS from wp-cache.php */\n\n#wpwrap {\n\n\t/* D"
  },
  {
    "path": "tests/e2e/Dockerfile",
    "chars": 477,
    "preview": "FROM wordpress:latest\n\n# Install wp-cli\nRUN curl -o /bin/wp-cli.phar https://raw.githubusercontent.com/wp-cli/builds/gh-"
  },
  {
    "path": "tests/e2e/docker-compose.yml",
    "chars": 1106,
    "preview": "services:\n  db:\n    image: mariadb:latest\n    healthcheck:\n      test: [\"CMD\", \"mariadb-admin\", \"-P\", \"3306\", \"-pwordpre"
  },
  {
    "path": "tests/e2e/eslint.config.mjs",
    "chars": 396,
    "preview": "import { makeBaseConfig, defineConfig } from 'jetpack-js-tools/eslintrc/base.mjs';\n\nexport default defineConfig( makeBas"
  },
  {
    "path": "tests/e2e/jest.config.js",
    "chars": 283,
    "preview": "import { fileURLToPath } from 'url';\nimport { config as dotenvConfig } from 'dotenv';\n\n// Read .env file so variables ar"
  },
  {
    "path": "tests/e2e/lib/CheerioForm.ts",
    "chars": 1653,
    "preview": "import { authenticatedRequest } from './plugin-tools';\nimport type { Cheerio } from 'cheerio';\nimport type { AnyNode } f"
  },
  {
    "path": "tests/e2e/lib/docker-tools.ts",
    "chars": 3101,
    "preview": "import { exec } from './system-tools';\n\n// Cache the docker container id\nlet containerId: string | undefined;\n\nexport as"
  },
  {
    "path": "tests/e2e/lib/plugin-settings.ts",
    "chars": 3466,
    "preview": "import { expect } from '@jest/globals';\nimport { load as parseDom } from 'cheerio';\nimport HtmlForm from './CheerioForm'"
  },
  {
    "path": "tests/e2e/lib/plugin-tools.ts",
    "chars": 3366,
    "preview": "import fsp from 'fs/promises';\nimport pathLib from 'path';\nimport { expect } from '@jest/globals';\nimport axios from 'ax"
  },
  {
    "path": "tests/e2e/lib/system-tools.ts",
    "chars": 453,
    "preview": "import childProcess from 'node:child_process';\nimport util from 'util';\nimport shellEscape from 'shell-escape';\n\nconst e"
  },
  {
    "path": "tests/e2e/lib/test-tools.ts",
    "chars": 608,
    "preview": "import { expect } from '@jest/globals';\nimport axios from 'axios';\nimport { getSiteUrl } from './plugin-tools';\n\n/**\n * "
  },
  {
    "path": "tests/e2e/lib/wordpress-tools.ts",
    "chars": 1582,
    "preview": "import { expect } from '@jest/globals';\nimport {\n\tdockerExec,\n\tdeleteLinesFromContainerFile,\n\tdeleteContainerFile,\n\tdeco"
  },
  {
    "path": "tests/e2e/package.json",
    "chars": 787,
    "preview": "{\n\t\"private\": true,\n\t\"type\": \"module\",\n\t\"scripts\": {\n\t\t\"build\": \"echo 'No build needed'\",\n\t\t\"clean\": \"rm -rf output\",\n\t\t"
  },
  {
    "path": "tests/e2e/specs/activation.test.ts",
    "chars": 1309,
    "preview": "import { describe, beforeAll, expect, test } from '@jest/globals';\nimport { decodeContainerFile, dockerExec } from '../l"
  },
  {
    "path": "tests/e2e/specs/default-settings.test.ts",
    "chars": 2783,
    "preview": "import { describe, expect, beforeAll, test, beforeEach } from '@jest/globals';\nimport { dockerExec } from '../lib/docker"
  },
  {
    "path": "tests/e2e/specs/settings/cache-compression.test.ts",
    "chars": 1483,
    "preview": "import util from 'util';\nimport zlib from 'zlib';\nimport { describe, expect, beforeAll, test } from '@jest/globals';\nimp"
  },
  {
    "path": "tests/e2e/specs/settings/mod-rewrite.test.ts",
    "chars": 2915,
    "preview": "import { describe, expect, beforeAll, test } from '@jest/globals';\nimport { decodeContainerFile } from '../../lib/docker"
  },
  {
    "path": "tests/e2e/specs/settings/no-cache-for-get.test.ts",
    "chars": 1043,
    "preview": "import { describe, expect, beforeAll, test } from '@jest/globals';\nimport { updateSettings } from '../../lib/plugin-sett"
  },
  {
    "path": "tests/e2e/specs/settings/not-logged-in.test.ts",
    "chars": 2805,
    "preview": "import { describe, expect, beforeAll, test } from '@jest/globals';\nimport { CacheNotLoggedInOptions, updateSettings } fr"
  },
  {
    "path": "tests/e2e/tools/apache2-wrapper.sh",
    "chars": 808,
    "preview": "#!/usr/bin/env bash\n\n##\n##  The WordPress base image installs WordPress, then launches apache directly.\n##  See: https:/"
  },
  {
    "path": "tests/e2e/tools/htaccess.txt",
    "chars": 261,
    "preview": "# BEGIN WordPress\n\nRewriteEngine On\nRewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\nRewriteBase /\nRewriteR"
  },
  {
    "path": "tests/e2e/tools/mu-test-helpers.php",
    "chars": 1232,
    "preview": "<?php\n/**\n * Helper tools for testing WP Super Cache.\n *\n * @package none. This line exists to stop the linter wasting e"
  },
  {
    "path": "tests/e2e/tsconfig.json",
    "chars": 212,
    "preview": "{\n\t\"compilerOptions\": {\n\t\t\"allowImportingTsExtensions\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"module\": \"ES2022\",\n\t\t\"module"
  },
  {
    "path": "tests/php/bootstrap.php",
    "chars": 153,
    "preview": "<?php\n/**\n * Bootstrap.\n *\n * @package automattic/\n */\n\n/**\n * Include the composer autoloader.\n */\nrequire_once __DIR__"
  },
  {
    "path": "wp-cache-base.php",
    "chars": 2418,
    "preview": "<?php\nglobal $WPSC_HTTP_HOST, $cache_enabled, $cache_path, $blogcacheid, $blog_cache_dir;\n\n// we need to backup HTTP_HOS"
  },
  {
    "path": "wp-cache-config-sample.php",
    "chars": 3550,
    "preview": "<?php\n/*\nWP-Cache Config Sample File\n\nSee wp-cache.php for author details.\n*/\n\nif ( ! defined('WPCACHEHOME') )\n\tdefine( "
  },
  {
    "path": "wp-cache-phase1.php",
    "chars": 6706,
    "preview": "<?php\n\nif ( ! function_exists( 'wp_cache_phase2' ) ) {\n\trequire_once __DIR__. '/wp-cache-phase2.php';\n}\n\n// error_report"
  },
  {
    "path": "wp-cache-phase2.php",
    "chars": 124921,
    "preview": "<?php\n/*\n * WP Super Cache Phase 2 file.\n * This file is included by the files wp-cache.php and wp-cache-phase1.php\n * I"
  },
  {
    "path": "wp-cache.php",
    "chars": 187608,
    "preview": "<?php\n/*\n * Plugin Name: WP Super Cache\n * Plugin URI: https://wordpress.org/plugins/wp-super-cache/\n * Description: Ver"
  }
]

// ... and 16 more files (download for full content)

About this extraction

This page contains the full source code of the Automattic/wp-super-cache GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 152 files (1.8 MB), approximately 566.9k tokens, and a symbol index with 474 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!