├── src ├── img-originals │ ├── .gitignore │ ├── article-832w │ │ └── .gitignore │ ├── showcase-teaser-318w212h │ │ ├── .gitignore │ │ └── 76.png │ ├── showcase-teaser-450w300h │ │ └── .gitignore │ └── 76.png ├── templates │ ├── pages │ │ ├── .gitignore │ │ ├── version.txp │ │ ├── sitemap.txp │ │ ├── error_default.txp │ │ ├── sticky_only.txp │ │ ├── contact.txp │ │ ├── standard.txp │ │ ├── blog.txp │ │ └── showcase.txp │ ├── forms │ │ ├── file │ │ │ ├── .gitignore │ │ │ └── files.txp │ │ ├── link │ │ │ ├── .gitignore │ │ │ └── plainlinks.txp │ │ ├── misc │ │ │ ├── .gitignore │ │ │ ├── email_body.txp │ │ │ ├── ads_webinformer.txp │ │ │ ├── images_type.txp │ │ │ ├── sidebar.txp │ │ │ ├── head.txp │ │ │ ├── pagination.txp │ │ │ ├── language_table.txp │ │ │ ├── body_crumbs.txp │ │ │ ├── body_header.txp │ │ │ ├── body_footer.txp │ │ │ └── images.txp │ │ ├── article │ │ │ ├── .gitignore │ │ │ ├── default.txp │ │ │ ├── article_listing.txp │ │ │ ├── blog.txp │ │ │ └── article_listing_blog.txp │ │ ├── comment │ │ │ ├── .gitignore │ │ │ ├── comment_form.txp │ │ │ ├── comments.txp │ │ │ └── comments_display.txp │ │ └── shortcodes │ │ │ ├── .gitignore │ │ │ ├── media_image.txp │ │ │ ├── media_file.txp │ │ │ └── media_video.txp │ ├── sections │ │ ├── .gitignore │ │ ├── sitemap.json │ │ ├── version.json │ │ ├── contact.json │ │ ├── weblog.json │ │ ├── showcase.json │ │ ├── default.json │ │ ├── start.json │ │ ├── license.json │ │ ├── privacy.json │ │ └── about.json │ ├── styles │ │ ├── .gitignore │ │ └── default.css │ └── manifest.json ├── assets │ ├── sass │ │ ├── setup │ │ │ ├── _index.scss │ │ │ ├── _settings.scss │ │ │ └── _mixins.scss │ │ ├── modules │ │ │ ├── _http-errors.scss │ │ │ ├── _animation-keyframes.scss │ │ │ ├── _disclosure.scss │ │ │ ├── _index.scss │ │ │ ├── _breadcrumbs.scss │ │ │ ├── _misc.scss │ │ │ ├── _accessibility.scss │ │ │ ├── _fonts.scss │ │ │ ├── _embedded-content.scss │ │ │ ├── _pagination.scss │ │ │ ├── _cards.scss │ │ │ ├── _alerts.scss │ │ │ ├── _blog.scss │ │ │ ├── _links.scss │ │ │ ├── _social.scss │ │ │ ├── _tables.scss │ │ │ ├── _progress.scss │ │ │ ├── _code-highlighting.scss │ │ │ ├── _buttons.scss │ │ │ ├── _navigation.scss │ │ │ ├── _forms.scss │ │ │ ├── _typography.scss │ │ │ └── _lists.scss │ │ ├── print.scss │ │ ├── designpatterns.scss │ │ └── screen.scss │ ├── img │ │ ├── 160x160.png │ │ ├── 480x240.png │ │ ├── 832x554.png │ │ ├── carver.png │ │ ├── error.jxl │ │ ├── error.png │ │ ├── error.webp │ │ ├── carver@2x.png │ │ ├── error@2x.jxl │ │ ├── error@2x.png │ │ ├── error@2x.webp │ │ ├── index-docs.jxl │ │ ├── index-docs.png │ │ ├── index-docs.webp │ │ ├── index-themes.jxl │ │ ├── index-themes.png │ │ ├── index-docs@2x.jxl │ │ ├── index-docs@2x.png │ │ ├── index-docs@2x.webp │ │ ├── index-features.jxl │ │ ├── index-features.png │ │ ├── index-plugins.jxl │ │ ├── index-plugins.png │ │ ├── index-showcase.png │ │ ├── readme-footer.jpg │ │ ├── readme-footer.png │ │ ├── index-animation.png │ │ ├── index-blog-header.jxl │ │ ├── index-blog-header.png │ │ ├── index-features.webp │ │ ├── index-features@2x.jxl │ │ ├── index-features@2x.png │ │ ├── index-plugins@2x.jxl │ │ ├── index-plugins@2x.png │ │ ├── index-showcase@2x.png │ │ ├── index-themes@2x.jxl │ │ ├── index-themes@2x.png │ │ ├── ad-300x250-fallback.png │ │ ├── index-blog-header.webp │ │ ├── index-device-screen.jxl │ │ ├── index-device-screen.png │ │ ├── index-features@2x.webp │ │ ├── ad-300x250-fallback@2x.png │ │ ├── ad-300x250-placeholder.png │ │ ├── dark-index-blog-header.jxl │ │ ├── dark-index-blog-header.png │ │ ├── digitalocean-300x250.avif │ │ ├── digitalocean-300x250.png │ │ ├── digitalocean-300x250.webp │ │ ├── index-blog-header@2x.jxl │ │ ├── index-blog-header@2x.png │ │ ├── index-blog-header@2x.webp │ │ ├── index-device-screens.jxl │ │ ├── index-device-screens.png │ │ ├── index-device-screens.webp │ │ ├── index-plugins-showcase.png │ │ ├── index-themes-showcase.png │ │ ├── readme-device-screens.jpg │ │ ├── readme-device-screens.png │ │ ├── dark-ad-300x250-fallback.png │ │ ├── dark-index-blog-header.webp │ │ ├── dark-index-device-screen.jxl │ │ ├── dark-index-device-screen.png │ │ ├── digitalocean-300x250@2x.avif │ │ ├── digitalocean-300x250@2x.png │ │ ├── digitalocean-300x250@2x.webp │ │ ├── index-animation-fallback.jxl │ │ ├── index-animation-fallback.png │ │ ├── index-device-screens@2x.jxl │ │ ├── index-device-screens@2x.png │ │ ├── index-device-screens@2x.webp │ │ ├── index-themes-showcase@2x.png │ │ ├── ad-300x250-placeholder@2x.png │ │ ├── dark-ad-300x250-fallback@2x.png │ │ ├── dark-ad-300x250-placeholder.png │ │ ├── dark-index-blog-header@2x.jxl │ │ ├── dark-index-blog-header@2x.png │ │ ├── dark-index-blog-header@2x.webp │ │ ├── dark-index-device-screens.jxl │ │ ├── dark-index-device-screens.png │ │ ├── dark-index-device-screens.webp │ │ ├── index-animation-fallback.avif │ │ ├── index-animation-fallback.webp │ │ ├── index-plugins-showcase@2x.png │ │ ├── dark-index-device-screens@2x.jxl │ │ ├── dark-index-device-screens@2x.png │ │ ├── dark-index-device-screens@2x.webp │ │ └── dark-ad-300x250-placeholder@2x.png │ ├── fonts │ │ ├── pt-serif-v18-latin-700.woff2 │ │ ├── pt-serif-v18-latin-italic.woff2 │ │ ├── pt-serif-v18-latin-700italic.woff2 │ │ ├── pt-serif-v18-latin-regular.woff2 │ │ └── License.txt │ └── js │ │ ├── detect.js │ │ └── main.js └── docs │ └── textpattern-htaccess.txt ├── public ├── themes │ └── .htaccess ├── robots.txt ├── .gitignore ├── assets │ └── .htaccess ├── site.webmanifest └── humans.txt ├── .github ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── ISSUE_TEMPLATE.md └── CODE_OF_CONDUCT.md ├── .gitignore ├── .editorconfig ├── package.json └── README.md /src/img-originals/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/pages/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/forms/file/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/forms/link/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/forms/misc/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/sections/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/styles/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/forms/article/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/forms/comment/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/img-originals/article-832w/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/forms/shortcodes/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/styles/default.css: -------------------------------------------------------------------------------- 1 | /* Unused */ 2 | -------------------------------------------------------------------------------- /src/img-originals/showcase-teaser-318w212h/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/img-originals/showcase-teaser-450w300h/.gitignore: -------------------------------------------------------------------------------- 1 | /_* -------------------------------------------------------------------------------- /src/templates/forms/comment/comment_form.txp: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/templates/forms/comment/comments.txp: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/templates/forms/comment/comments_display.txp: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/sass/setup/_index.scss: -------------------------------------------------------------------------------- 1 | @forward "settings"; 2 | @forward "mixins"; 3 | -------------------------------------------------------------------------------- /public/themes/.htaccess: -------------------------------------------------------------------------------- 1 | Options -Indexes 2 | 3 | 4 | RedirectMatch 403 .* 5 | -------------------------------------------------------------------------------- /src/assets/img/160x160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/160x160.png -------------------------------------------------------------------------------- /src/assets/img/480x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/480x240.png -------------------------------------------------------------------------------- /src/assets/img/832x554.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/832x554.png -------------------------------------------------------------------------------- /src/assets/img/carver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/carver.png -------------------------------------------------------------------------------- /src/assets/img/error.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/error.jxl -------------------------------------------------------------------------------- /src/assets/img/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/error.png -------------------------------------------------------------------------------- /src/assets/img/error.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/error.webp -------------------------------------------------------------------------------- /src/img-originals/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/img-originals/76.png -------------------------------------------------------------------------------- /src/assets/img/carver@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/carver@2x.png -------------------------------------------------------------------------------- /src/assets/img/error@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/error@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/error@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/error@2x.png -------------------------------------------------------------------------------- /src/assets/img/error@2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/error@2x.webp -------------------------------------------------------------------------------- /src/assets/img/index-docs.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-docs.jxl -------------------------------------------------------------------------------- /src/assets/img/index-docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-docs.png -------------------------------------------------------------------------------- /src/assets/img/index-docs.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-docs.webp -------------------------------------------------------------------------------- /src/assets/img/index-themes.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-themes.jxl -------------------------------------------------------------------------------- /src/assets/img/index-themes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-themes.png -------------------------------------------------------------------------------- /src/assets/img/index-docs@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-docs@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/index-docs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-docs@2x.png -------------------------------------------------------------------------------- /src/assets/img/index-docs@2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-docs@2x.webp -------------------------------------------------------------------------------- /src/assets/img/index-features.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-features.jxl -------------------------------------------------------------------------------- /src/assets/img/index-features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-features.png -------------------------------------------------------------------------------- /src/assets/img/index-plugins.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-plugins.jxl -------------------------------------------------------------------------------- /src/assets/img/index-plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-plugins.png -------------------------------------------------------------------------------- /src/assets/img/index-showcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-showcase.png -------------------------------------------------------------------------------- /src/assets/img/readme-footer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/readme-footer.jpg -------------------------------------------------------------------------------- /src/assets/img/readme-footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/readme-footer.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: /file_download/ 3 | Disallow: /textpattern/ 4 | Sitemap: https://textpattern.com/sitemap.xml 5 | -------------------------------------------------------------------------------- /src/assets/img/index-animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-animation.png -------------------------------------------------------------------------------- /src/assets/img/index-blog-header.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-blog-header.jxl -------------------------------------------------------------------------------- /src/assets/img/index-blog-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-blog-header.png -------------------------------------------------------------------------------- /src/assets/img/index-features.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-features.webp -------------------------------------------------------------------------------- /src/assets/img/index-features@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-features@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/index-features@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-features@2x.png -------------------------------------------------------------------------------- /src/assets/img/index-plugins@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-plugins@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/index-plugins@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-plugins@2x.png -------------------------------------------------------------------------------- /src/assets/img/index-showcase@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-showcase@2x.png -------------------------------------------------------------------------------- /src/assets/img/index-themes@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-themes@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/index-themes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-themes@2x.png -------------------------------------------------------------------------------- /src/assets/img/ad-300x250-fallback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/ad-300x250-fallback.png -------------------------------------------------------------------------------- /src/assets/img/index-blog-header.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-blog-header.webp -------------------------------------------------------------------------------- /src/assets/img/index-device-screen.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-device-screen.jxl -------------------------------------------------------------------------------- /src/assets/img/index-device-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-device-screen.png -------------------------------------------------------------------------------- /src/assets/img/index-features@2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-features@2x.webp -------------------------------------------------------------------------------- /src/assets/img/ad-300x250-fallback@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/ad-300x250-fallback@2x.png -------------------------------------------------------------------------------- /src/assets/img/ad-300x250-placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/ad-300x250-placeholder.png -------------------------------------------------------------------------------- /src/assets/img/dark-index-blog-header.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-blog-header.jxl -------------------------------------------------------------------------------- /src/assets/img/dark-index-blog-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-blog-header.png -------------------------------------------------------------------------------- /src/assets/img/digitalocean-300x250.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/digitalocean-300x250.avif -------------------------------------------------------------------------------- /src/assets/img/digitalocean-300x250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/digitalocean-300x250.png -------------------------------------------------------------------------------- /src/assets/img/digitalocean-300x250.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/digitalocean-300x250.webp -------------------------------------------------------------------------------- /src/assets/img/index-blog-header@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-blog-header@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/index-blog-header@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-blog-header@2x.png -------------------------------------------------------------------------------- /src/assets/img/index-blog-header@2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-blog-header@2x.webp -------------------------------------------------------------------------------- /src/assets/img/index-device-screens.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-device-screens.jxl -------------------------------------------------------------------------------- /src/assets/img/index-device-screens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-device-screens.png -------------------------------------------------------------------------------- /src/assets/img/index-device-screens.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-device-screens.webp -------------------------------------------------------------------------------- /src/assets/img/index-plugins-showcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-plugins-showcase.png -------------------------------------------------------------------------------- /src/assets/img/index-themes-showcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-themes-showcase.png -------------------------------------------------------------------------------- /src/assets/img/readme-device-screens.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/readme-device-screens.jpg -------------------------------------------------------------------------------- /src/assets/img/readme-device-screens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/readme-device-screens.png -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Changes proposed in this pull request: 2 | 3 | - {Please write here} 4 | - {Please write here} 5 | - {Please write here} 6 | -------------------------------------------------------------------------------- /src/assets/img/dark-ad-300x250-fallback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-ad-300x250-fallback.png -------------------------------------------------------------------------------- /src/assets/img/dark-index-blog-header.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-blog-header.webp -------------------------------------------------------------------------------- /src/assets/img/dark-index-device-screen.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-device-screen.jxl -------------------------------------------------------------------------------- /src/assets/img/dark-index-device-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-device-screen.png -------------------------------------------------------------------------------- /src/assets/img/digitalocean-300x250@2x.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/digitalocean-300x250@2x.avif -------------------------------------------------------------------------------- /src/assets/img/digitalocean-300x250@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/digitalocean-300x250@2x.png -------------------------------------------------------------------------------- /src/assets/img/digitalocean-300x250@2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/digitalocean-300x250@2x.webp -------------------------------------------------------------------------------- /src/assets/img/index-animation-fallback.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-animation-fallback.jxl -------------------------------------------------------------------------------- /src/assets/img/index-animation-fallback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-animation-fallback.png -------------------------------------------------------------------------------- /src/assets/img/index-device-screens@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-device-screens@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/index-device-screens@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-device-screens@2x.png -------------------------------------------------------------------------------- /src/assets/img/index-device-screens@2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-device-screens@2x.webp -------------------------------------------------------------------------------- /src/assets/img/index-themes-showcase@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-themes-showcase@2x.png -------------------------------------------------------------------------------- /src/assets/fonts/pt-serif-v18-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/fonts/pt-serif-v18-latin-700.woff2 -------------------------------------------------------------------------------- /src/assets/img/ad-300x250-placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/ad-300x250-placeholder@2x.png -------------------------------------------------------------------------------- /src/assets/img/dark-ad-300x250-fallback@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-ad-300x250-fallback@2x.png -------------------------------------------------------------------------------- /src/assets/img/dark-ad-300x250-placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-ad-300x250-placeholder.png -------------------------------------------------------------------------------- /src/assets/img/dark-index-blog-header@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-blog-header@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/dark-index-blog-header@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-blog-header@2x.png -------------------------------------------------------------------------------- /src/assets/img/dark-index-blog-header@2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-blog-header@2x.webp -------------------------------------------------------------------------------- /src/assets/img/dark-index-device-screens.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-device-screens.jxl -------------------------------------------------------------------------------- /src/assets/img/dark-index-device-screens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-device-screens.png -------------------------------------------------------------------------------- /src/assets/img/dark-index-device-screens.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-device-screens.webp -------------------------------------------------------------------------------- /src/assets/img/index-animation-fallback.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-animation-fallback.avif -------------------------------------------------------------------------------- /src/assets/img/index-animation-fallback.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-animation-fallback.webp -------------------------------------------------------------------------------- /src/assets/img/index-plugins-showcase@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/index-plugins-showcase@2x.png -------------------------------------------------------------------------------- /src/templates/forms/shortcodes/media_image.txp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/fonts/pt-serif-v18-latin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/fonts/pt-serif-v18-latin-italic.woff2 -------------------------------------------------------------------------------- /src/assets/img/dark-index-device-screens@2x.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-device-screens@2x.jxl -------------------------------------------------------------------------------- /src/assets/img/dark-index-device-screens@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-device-screens@2x.png -------------------------------------------------------------------------------- /src/assets/img/dark-index-device-screens@2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-index-device-screens@2x.webp -------------------------------------------------------------------------------- /src/assets/fonts/pt-serif-v18-latin-700italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/fonts/pt-serif-v18-latin-700italic.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/pt-serif-v18-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/fonts/pt-serif-v18-latin-regular.woff2 -------------------------------------------------------------------------------- /src/assets/img/dark-ad-300x250-placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/assets/img/dark-ad-300x250-placeholder@2x.png -------------------------------------------------------------------------------- /src/img-originals/showcase-teaser-318w212h/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-com-website/HEAD/src/img-originals/showcase-teaser-318w212h/76.png -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | open-pull-requests-limit: 10 8 | -------------------------------------------------------------------------------- /src/templates/forms/link/plainlinks.txp: -------------------------------------------------------------------------------- 1 |

  • Donate using PayPal

  • 2 | -------------------------------------------------------------------------------- /public/.gitignore: -------------------------------------------------------------------------------- 1 | /.htaccess 2 | /assets/*/ 3 | /css.php 4 | /design-patterns.html 5 | /files 6 | /images 7 | /img 8 | /index.php 9 | /mockups 10 | /textpattern 11 | /themes/*/ 12 | /vendor 13 | /video 14 | /*.ico 15 | /*.png 16 | /*.svg 17 | -------------------------------------------------------------------------------- /src/templates/sections/sitemap.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sitemap", 3 | "title": "Sitemap", 4 | "page": "sitemap", 5 | "css": "default", 6 | "is_default": false, 7 | "in_rss": false, 8 | "on_frontpage": false, 9 | "searchable": false 10 | } 11 | -------------------------------------------------------------------------------- /src/templates/sections/version.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "version", 3 | "title": "Version", 4 | "page": "version", 5 | "css": "default", 6 | "is_default": false, 7 | "in_rss": false, 8 | "on_frontpage": false, 9 | "searchable": false 10 | } 11 | -------------------------------------------------------------------------------- /src/docs/textpattern-htaccess.txt: -------------------------------------------------------------------------------- 1 | 2 | Header set Content-Security-Policy "default-src 'self'; font-src 'self'; img-src 'self' data: * https://*; media-src 'self' * https://*; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'" 3 | 4 | -------------------------------------------------------------------------------- /src/templates/forms/shortcodes/media_file.txp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/templates/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Textpattern.com", 3 | "txp-type": "textpattern-theme", 4 | "version": "@@version", 5 | "description": "Textpattern.com site theme.", 6 | "author": "Phil Wareham", 7 | "author_uri": "https://github.com/textpattern/textpattern-com-website" 8 | } 9 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_http-errors.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | /* HTTP error pages 4 | ========================================================================== */ 5 | 6 | .http-status-code { 7 | font-size: 3em; 8 | } 9 | 10 | .http-status-description { 11 | display: inline-block; 12 | } 13 | -------------------------------------------------------------------------------- /src/templates/sections/contact.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "contact", 3 | "title": "Contact", 4 | "description": "Use this online enquiry form to contact the Textpattern Development Team.", 5 | "page": "contact", 6 | "css": "default", 7 | "is_default": false, 8 | "in_rss": false, 9 | "on_frontpage": false, 10 | "searchable": false 11 | } 12 | -------------------------------------------------------------------------------- /src/templates/forms/misc/email_body.txp: -------------------------------------------------------------------------------- 1 | Message received via the Textpattern.com website 2 | ------------------------------------------------ 3 | 4 | Name: 5 | Website: 6 | 7 | Message: 8 | 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS generated files # 2 | ###################### 3 | ._* 4 | .DS_Store 5 | .DS_Store? 6 | .nova 7 | .Spotlight-V100 8 | .Trashes 9 | .vscode 10 | Icon? 11 | ehthumbs.db 12 | Thumbs.db 13 | 14 | # Development files # 15 | ###################### 16 | /composer.lock 17 | /node_modules 18 | /package-lock.json 19 | /npm-debug.log 20 | /yarn.lock 21 | /yarn-error.log 22 | -------------------------------------------------------------------------------- /src/templates/sections/weblog.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "weblog", 3 | "title": "Blog", 4 | "description": "Latest blogs from Team Textpattern and guests; Textpattern news and other tidbits of info that we find of interest.", 5 | "page": "blog", 6 | "css": "default", 7 | "is_default": true, 8 | "in_rss": true, 9 | "on_frontpage": true, 10 | "searchable": true 11 | } 12 | -------------------------------------------------------------------------------- /public/assets/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Header append Cache-Control "public" 3 | 4 | 5 | 6 | ExpiresActive On 7 | ExpiresDefault "access plus 1 year" 8 | 9 | 10 | 11 | RewriteEngine On 12 | RewriteRule ^(js|css)/([a-z0-9]+)\.([0-9]+)\.(js|css)$ $1/$2.$4 [L] 13 | 14 | -------------------------------------------------------------------------------- /src/templates/sections/showcase.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "showcase", 3 | "title": "Site showcase", 4 | "description": "Feast your eyes on some of the awesome websites powered by Textpattern CMS in our site showcase section.", 5 | "page": "showcase", 6 | "css": "default", 7 | "is_default": false, 8 | "in_rss": true, 9 | "on_frontpage": false, 10 | "searchable": true 11 | } 12 | -------------------------------------------------------------------------------- /src/templates/sections/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "default", 3 | "title": "Default", 4 | "description": "Textpattern CMS is a free, open source content management system with a browser-based interface in over 50 languages.", 5 | "page": "default", 6 | "css": "default", 7 | "is_default": false, 8 | "in_rss": false, 9 | "on_frontpage": true, 10 | "searchable": false 11 | } 12 | -------------------------------------------------------------------------------- /src/templates/sections/start.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "start", 3 | "title": "Get started", 4 | "description": "Getting started with Textpattern CMS. How to install, upgrade and get involved with the content management system.", 5 | "page": "sticky_only", 6 | "css": "default", 7 | "is_default": false, 8 | "in_rss": false, 9 | "on_frontpage": false, 10 | "searchable": false 11 | } 12 | -------------------------------------------------------------------------------- /src/templates/sections/license.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "license", 3 | "title": "Software license", 4 | "description": "Textpattern CMS is free, open source software, distributed under the GNU General Public License Version 2 (GPLv2).", 5 | "page": "sticky_only", 6 | "css": "default", 7 | "is_default": false, 8 | "in_rss": false, 9 | "on_frontpage": false, 10 | "searchable": false 11 | } 12 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_animation-keyframes.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | /* Animation `keyframes` need to appear outside of `screen` rules. 4 | ========================================================================== */ 5 | 6 | @keyframes progressbar-stripes { 7 | 0% { 8 | background-position: 0 0; 9 | } 10 | 11 | 100% { 12 | background-position: 48px 0; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/templates/sections/privacy.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "privacy", 3 | "title": "Privacy policy", 4 | "description": "This privacy policy governs the manner in which Textpattern collects, uses, maintains and discloses information collected from users.", 5 | "page": "sticky_only", 6 | "css": "default", 7 | "is_default": false, 8 | "in_rss": false, 9 | "on_frontpage": false, 10 | "searchable": false 11 | } 12 | -------------------------------------------------------------------------------- /src/templates/sections/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "about", 3 | "title": "About", 4 | "description": "Designers, developers and bloggers love Textpattern for its flexibility. It's powerful engine can be tuned to suit whatever type of site you can imagine.", 5 | "page": "standard", 6 | "css": "default", 7 | "is_default": false, 8 | "in_rss": false, 9 | "on_frontpage": false, 10 | "searchable": true 11 | } 12 | -------------------------------------------------------------------------------- /src/templates/forms/misc/ads_webinformer.txp: -------------------------------------------------------------------------------- 1 | 2 | if (!gps('txpreview')) { 3 | $opts = array('http' => array('timeout' => 1.6)); 4 | $url = 'https://website.informer.com/widget/textpattern.com-2'; 5 | $context = stream_context_create($opts); 6 | $widget = file_get_contents($url, false, $context); 7 | 8 | if ($widget) { 9 | echo $widget; 10 | } 11 | } 12 | 13 | -------------------------------------------------------------------------------- /src/templates/forms/misc/images_type.txp: -------------------------------------------------------------------------------- 1 | .avif, .avif 2x" type="image/avif"> 2 | .webp, .webp 2x" type="image/webp"> 3 | , 2x" type=""> 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # For more information about the properties used in 2 | # this file, please see the EditorConfig documentation: 3 | # https://editorconfig.org/ 4 | 5 | root = true 6 | 7 | [*] 8 | charset = utf-8 9 | end_of_line = lf 10 | indent_size = 4 11 | indent_style = space 12 | insert_final_newline = true 13 | trim_trailing_whitespace = true 14 | 15 | [*.md] 16 | trim_trailing_whitespace = false 17 | 18 | [{*.json,*.yml,humans.txt}] 19 | indent_size = 2 20 | indent_style = space 21 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_disclosure.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | /* Disclosure boxes (summary/details) 4 | ========================================================================== */ 5 | 6 | /** 7 | * Example HTML: 8 | * 9 | *
    10 | * Summary text 11 | *

    Detailed content.

    12 | *
    13 | */ 14 | 15 | summary { 16 | cursor: pointer; 17 | 18 | &:focus { 19 | outline: 1px solid var(--clr-focus); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Textpattern", 3 | "name": "Textpattern CMS Homepage", 4 | "start_url": "https://textpattern.com", 5 | "scope": "https://textpattern.com", 6 | "icons": [ 7 | { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable any" }, 8 | { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable any" } 9 | ], 10 | "background_color": "#ffffff", 11 | "theme_color": "#ffda44", 12 | "display": "minimal-ui" 13 | } 14 | -------------------------------------------------------------------------------- /src/templates/pages/version.txp: -------------------------------------------------------------------------------- 1 | { 2 | "textpattern-version": { 3 | "release": "", 4 | "prerelease": ""null 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_index.scss: -------------------------------------------------------------------------------- 1 | @use "fonts"; 2 | @use "layout"; 3 | @use "navigation"; 4 | @use "links"; 5 | @use "typography"; 6 | @use "alerts"; 7 | @use "embedded-content"; 8 | @use "tables"; 9 | @use "lists"; 10 | @use "forms"; 11 | @use "buttons"; 12 | @use "progress"; 13 | @use "disclosure"; 14 | @use "code-highlighting"; 15 | @use "pagination"; 16 | @use "breadcrumbs"; 17 | @use "social"; 18 | @use "misc"; 19 | @use "http-errors"; 20 | @use "blog"; 21 | @use "cards"; 22 | @use "icons"; 23 | @use "responsive"; 24 | @use "accessibility"; 25 | @use "animation-keyframes"; 26 | -------------------------------------------------------------------------------- /src/assets/sass/setup/_settings.scss: -------------------------------------------------------------------------------- 1 | // typography grid 2 | $base-font-size: 16px !default; 3 | $base-line-height: 1.5 !default; 4 | $small-line-height: 1.375 !default; 5 | $code-font-size: 0.875rem !default; // 14px / 16px 6 | $small-font-size: 0.75rem !default; // 12px / 16px 7 | 8 | // layout grid 9 | $container-max-width: 72rem !default; // 1152px / 16px 10 | $breakpoint-3: 60rem !default; // 960px / 16px 11 | $breakpoint-2: 48rem !default; // 768px / 16px 12 | $breakpoint-1: 30rem !default; // 480px / 16px 13 | 14 | // borders 15 | $border-radius: 0.5em !default; // 8px / 16px 16 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_breadcrumbs.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | /* Breadcrumb links 4 | ========================================================================== */ 5 | 6 | /** 7 | * Lists as breadcrumbs 8 | * 9 | * Example HTML: 10 | * 11 | * 15 | */ 16 | 17 | .breadcrumbs { 18 | margin: 0 -1.3333333em; 19 | padding: 0.5em 1.3333333em; // 6px / 12px + 16px / 12px 20 | background-color: var(--clr-bkgd-box); 21 | list-style: none; 22 | font-size: setup.$small-font-size; 23 | 24 | li { 25 | display: inline-block; 26 | } 27 | 28 | // Path-like breadcrumb styling. 29 | 30 | > li + li::before { 31 | content: "\00A0" "\002F" "\00A0"; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_misc.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | /* Miscellaneous 4 | ========================================================================== */ 5 | 6 | /** 7 | * Hide text but still allow screen reader access. 8 | * 9 | * Example HTML: 10 | * 11 | *

    12 | */ 13 | 14 | .accessibility { 15 | position: absolute; 16 | width: 1px; 17 | height: 1px; 18 | margin: -1px; 19 | padding: 0; 20 | overflow: hidden; 21 | clip: rect(0 0 0 0); // TODO: Deprecated - use `clip-path` when browser support is better. 22 | //clip-path: inset(50%); // TODO: Currently causes severe performance issues in Chrome. 23 | border: 0; 24 | white-space: nowrap; 25 | } 26 | 27 | /** 28 | * Hide completely. 29 | */ 30 | 31 | .not-shown { 32 | display: none; 33 | } 34 | -------------------------------------------------------------------------------- /src/templates/pages/sitemap.txp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_accessibility.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | @media (prefers-reduced-motion: reduce), (update: slow) { 4 | body { 5 | scroll-behavior: auto; 6 | } 7 | 8 | .js #site-navigation, 9 | #site-navigation.site-navigation-open, 10 | .search-form [type="search"] { 11 | transition-duration: 0; 12 | } 13 | 14 | progress::-webkit-progress-value { 15 | animation: none; 16 | background-image: none; 17 | } 18 | 19 | progress:indeterminate::-webkit-progress-bar { 20 | animation: none; 21 | background-image: none; 22 | } 23 | 24 | progress::-moz-progress-bar { 25 | animation: none; 26 | background-image: none; 27 | } 28 | 29 | progress:indeterminate::-moz-progress-bar { 30 | animation: none; 31 | background-image: none; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve the Textpattern.com website. 4 | --- 5 | 6 | **Describe the bug** 7 | A clear and concise description of what the bug is. 8 | 9 | **To reproduce** 10 | Steps to reproduce the behaviour: 11 | 1. Go to '...' 12 | 2. Click on '....' 13 | 3. Scroll down to '....' 14 | 4. See error 15 | 16 | **Expected behaviour** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Desktop (please complete the following information):** 23 | - OS: [e.g. iOS] 24 | - Browser [e.g. chrome, safari] 25 | - Version [e.g. 22] 26 | 27 | **Smartphone (please complete the following information):** 28 | - Device: [e.g. iPhone6] 29 | - OS: [e.g. iOS8.1] 30 | - Browser [e.g. stock browser, safari] 31 | - Version [e.g. 22] 32 | 33 | **Additional context** 34 | Add any other context about the problem here. 35 | -------------------------------------------------------------------------------- /src/templates/forms/file/files.txp: -------------------------------------------------------------------------------- 1 |

    2 |
    File download
    3 |

    button-large" href="" itemprop="contentUrl" download>

    4 |
    5 | 6 |
    SHA256 checksum
    7 |
    8 | File size 9 | 10 | | 11 | Created 12 | 13 |
    14 |
    15 | -------------------------------------------------------------------------------- /src/templates/forms/shortcodes/media_video.txp: -------------------------------------------------------------------------------- 1 |
    2 | 6 | "> 7 | "> 8 | "> 9 | "> 10 | S"> 11 |
    12 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_fonts.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | /* Fonts 4 | ========================================================================== */ 5 | 6 | /** 7 | * 'PT Serif' font. 8 | */ 9 | 10 | // Regular 11 | @font-face { 12 | font-family: "PT Serif"; 13 | font-style: normal; 14 | font-weight: 400; 15 | font-display: optional; 16 | src: url("https://textpattern.com/assets/fonts/pt-serif-v18-latin-regular.woff2") format("woff2"); 17 | } 18 | 19 | // Regular Italic 20 | @font-face { 21 | font-family: "PT Serif"; 22 | font-style: italic; 23 | font-weight: 400; 24 | font-display: swap; 25 | src: url("https://textpattern.com/assets/fonts/pt-serif-v18-latin-italic.woff2") format("woff2"); 26 | } 27 | 28 | // Bold 29 | @font-face { 30 | font-family: "PT Serif"; 31 | font-style: normal; 32 | font-weight: 700; 33 | font-display: optional; 34 | src: url("https://textpattern.com/assets/fonts/pt-serif-v18-latin-700.woff2") format("woff2"); 35 | } 36 | 37 | // Bold Italic 38 | @font-face { 39 | font-family: "PT Serif"; 40 | font-style: italic; 41 | font-weight: 700; 42 | font-display: swap; 43 | src: url("https://textpattern.com/assets/fonts/pt-serif-v18-latin-700italic.woff2") format("woff2"); 44 | } 45 | -------------------------------------------------------------------------------- /src/templates/forms/misc/sidebar.txp: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_embedded-content.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | /* Embedded content 4 | ========================================================================== */ 5 | 6 | /** 7 | * Make embedded elements responsive. 8 | */ 9 | 10 | img, 11 | video { 12 | max-width: 100%; 13 | height: auto; 14 | } 15 | 16 | /** 17 | * Images. 18 | * 19 | * 1. Remove the gap between images and the bottom of their containers. 20 | * 21 | * Image alignment (compatible with Textile markup syntax). 22 | * 23 | * Example HTML: 24 | * 25 | * 26 | * 27 | * 28 | */ 29 | 30 | img { 31 | vertical-align: middle; /* 1 */ 32 | 33 | &.align-left { 34 | margin: 1em 1em 1em 0; 35 | float: left; 36 | } 37 | 38 | &.align-right { 39 | margin: 1em 0 1em 1em; 40 | float: right; 41 | } 42 | 43 | &.align-center { 44 | display: block; 45 | margin: 1em auto; 46 | } 47 | } 48 | 49 | /** 50 | * Bordered images. 51 | * 52 | * Example HTML: 53 | * 54 | * 55 | */ 56 | 57 | .img--bordered { 58 | border: 1px solid var(--clr-brdr-lite); 59 | } 60 | 61 | /** 62 | * Consistent margins on `figure`. 63 | */ 64 | 65 | figure { 66 | margin: 1em 0; 67 | } 68 | -------------------------------------------------------------------------------- /src/assets/sass/setup/_mixins.scss: -------------------------------------------------------------------------------- 1 | @use "settings"; 2 | 3 | // Dark Mode shorthand. 4 | 5 | @mixin dark-mode { 6 | @media (prefers-color-scheme: dark) { 7 | @content; 8 | } 9 | } 10 | 11 | // higher resolution background images for high resolution displays. 12 | // TODO: harness image-set `type` (instead of the second mixin) when browser support is better. 13 | 14 | @mixin hires-graphic($hdfile, $hdtype, $hdwidth, $hdheight) { 15 | $filename: $hdfile + "." + $hdtype; 16 | $hdfilename: $hdfile + "@2x." + $hdtype; 17 | 18 | background-image: image-set(url("../img/" + $filename) 1x, url("../img/" + $hdfilename) 2x); 19 | background-size: $hdwidth $hdheight; 20 | } 21 | 22 | @mixin hires-graphic-modern($hdfile, $hdtype) { 23 | $filename: $hdfile + "." + $hdtype; 24 | $hdfilename: $hdfile + "@2x." + $hdtype; 25 | 26 | background-image: image-set(url("../img/" + $filename) 1x, url("../img/" + $hdfilename) 2x); 27 | } 28 | 29 | // standard gradients. 30 | 31 | @mixin gradient-linear($color-gradient-from, $color-gradient-to) { 32 | background-color: $color-gradient-to; 33 | background-image: linear-gradient($color-gradient-from, $color-gradient-to); 34 | } 35 | 36 | // hide text. 37 | 38 | @mixin hide-text { 39 | overflow: hidden; 40 | text-indent: 110%; 41 | text-transform: capitalize; 42 | white-space: nowrap; 43 | } 44 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "textpattern-com", 3 | "description": "Official website of the Textpattern project.", 4 | "version": "1.8.6", 5 | "repository": { 6 | "type": "git", 7 | "url": "https://github.com/textpattern/textpattern-com-website" 8 | }, 9 | "bugs": { 10 | "url": "https://github.com/textpattern/textpattern-com-website/issues" 11 | }, 12 | "devDependencies": { 13 | "@lodder/grunt-postcss": "3.1.1", 14 | "autoprefixer": "10.4.23", 15 | "cssnano": "7.1.2", 16 | "grunt": "1.6.1", 17 | "grunt-cli": "1.5.0", 18 | "grunt-concurrent": "3.0.0", 19 | "grunt-contrib-clean": "2.0.1", 20 | "grunt-contrib-copy": "1.0.0", 21 | "grunt-contrib-jshint": "3.2.0", 22 | "grunt-contrib-watch": "1.1.0", 23 | "grunt-replace-regex": "1.0.3", 24 | "grunt-sass": "4.0.1", 25 | "grunt-stylelint": "0.20.1", 26 | "grunt-terser": "2.0.0", 27 | "load-grunt-tasks": "5.1.0", 28 | "postcss": "8.5.6", 29 | "sass": "1.97.0", 30 | "stylelint": "16.26.1", 31 | "stylelint-config-standard-scss": "16.0.0", 32 | "stylelint-order": "7.0.0" 33 | }, 34 | "dependencies": { 35 | "prismjs": "1.30.0", 36 | "textpattern-branding": "0.3.3" 37 | }, 38 | "optionalDependencies": { 39 | "fibers": "5.0.3" 40 | }, 41 | "browserslist": [ 42 | "> 0.5%", 43 | "Firefox ESR", 44 | "not IE 11" 45 | ], 46 | "license": "GPL-2.0" 47 | } 48 | -------------------------------------------------------------------------------- /src/templates/forms/misc/head.txp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/templates/forms/article/default.txp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

    10 | "> 11 | "> 12 | 13 |
    14 | 15 |
    16 |
    17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
    29 | 30 |
    31 | -------------------------------------------------------------------------------- /src/assets/js/detect.js: -------------------------------------------------------------------------------- 1 | document.documentElement.className='js'; 2 | 3 | // Test browser for modern image format support (for use in CSS). 4 | (function(document) { 5 | function setHTMLClass(height, className) { 6 | if (height === 2) { 7 | document.documentElement.className += ' ' + className; 8 | } else { 9 | document.documentElement.className += ' not-' + className; 10 | } 11 | } 12 | 13 | var AVIF = new Image(); 14 | AVIF.onload = AVIF.onerror = function () { 15 | setHTMLClass(AVIF.height, 'avif'); 16 | }; 17 | AVIF.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A='; 18 | 19 | var JXL = new Image(); 20 | JXL.onload = JXL.onerror = function() { 21 | setHTMLClass(JXL.height, 'jxl'); 22 | }; 23 | JXL.src = 'data:image/jxl;base64,/woIELASCAgQAFwASxLFgkWAHL0xqnCBCV0qDp901Te/5QM='; 24 | 25 | var WebP = new Image(); 26 | WebP.onload = WebP.onerror = function() { 27 | setHTMLClass(WebP.height, 'webp'); 28 | }; 29 | WebP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA'; 30 | })(window.sandboxApi && window.sandboxApi.parentWindow && window.sandboxApi.parentWindow.document || document); 31 | -------------------------------------------------------------------------------- /src/templates/forms/misc/pagination.txp: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /src/templates/forms/misc/language_table.txp: -------------------------------------------------------------------------------- 1 | 2 | $key = parse(''); 3 | 4 | try { 5 | $xml = new SimpleXMLElement('https://api.crowdin.com/api/project/textpattern-cms-textpacks/status?key='.$key.'&xml', 0, TRUE); 6 | } catch (Exception $e) { 7 | return; 8 | } 9 | 10 | echo << 12 |

    List current of languages translation for Textpattern CMS

    13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | EOHTML; 29 | 30 | foreach ($xml->language as $languageElement) { 31 | $name = htmlspecialchars($languageElement->name); 32 | $code = htmlspecialchars($languageElement->code); 33 | $progress = htmlspecialchars($languageElement->translated_progress); 34 | 35 | echo << 37 | 38 | 39 | 40 | 41 | 42 | EOHTML; 43 | } 44 | 45 | echo << 47 |
    LanguageCodeTranslation status
    {$name}{$code} {$progress}% Translate
    48 | 49 | EOHTML; 50 |
    51 | -------------------------------------------------------------------------------- /src/assets/js/main.js: -------------------------------------------------------------------------------- 1 | (function () 2 | { 3 | 'use strict'; 4 | 5 | // Load objects as variables. 6 | 7 | var code = document.querySelectorAll('pre code'), 8 | endnote = document.querySelector('.footnotes'), 9 | navmenu = document.getElementById('site-navigation'); 10 | 11 | // Syntax highlighting, via 'Prism'. 12 | // Applies syntax highlighting to `code` HTML elements. 13 | // More info - https://prismjs.com. 14 | 15 | if (code.length) { 16 | var elems = document.querySelectorAll('.language-txp'); 17 | 18 | [].forEach.call(elems, function(el) { 19 | el.classList.add('language-html'); 20 | el.classList.remove('language-txp'); 21 | }); 22 | 23 | Prism.highlightAll(); 24 | } 25 | 26 | // Inject a heading into endnotes regions. 27 | 28 | if (endnote) { 29 | endnote.insertAdjacentHTML('afterbegin', '

    Endnotes

    '); 30 | } 31 | 32 | // Responsive navigation menu. 33 | 34 | if (navmenu) { 35 | var navtoggle = document.getElementById('site-navigation-toggle'), 36 | navlist = document.getElementById('site-navigation-list'); 37 | 38 | navtoggle.addEventListener('click', function(e) 39 | { 40 | e.preventDefault(); 41 | navtoggle.classList.toggle('site-navigation-toggle-active'); 42 | navmenu.classList.toggle('site-navigation-open'); 43 | }); 44 | 45 | navlist.addEventListener('focusin', function() 46 | { 47 | navtoggle.classList.add('site-navigation-toggle-active'); 48 | navmenu.classList.add('site-navigation-open'); 49 | }); 50 | 51 | navlist.addEventListener('focusout', function() 52 | { 53 | navtoggle.classList.remove('site-navigation-toggle-active'); 54 | navmenu.classList.remove('site-navigation-open'); 55 | }); 56 | } 57 | })(); 58 | -------------------------------------------------------------------------------- /src/assets/sass/modules/_pagination.scss: -------------------------------------------------------------------------------- 1 | @use "../setup"; 2 | 3 | /* Pagination links 4 | ========================================================================== */ 5 | 6 | /** 7 | * Paginator (prev/next) navigation links on article lists. 8 | * 9 | * Example HTML: 10 | * 11 | *