├── .editorconfig ├── .github ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── Bug_report.md │ └── Feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── dependabot.yml ├── .gitignore ├── .stylelintrc.yml ├── .travis.yml ├── LICENSE ├── README.md ├── composer.json ├── dist └── four-point-nine │ ├── forms │ ├── article │ │ ├── article_listing.txp │ │ ├── default.txp │ │ └── search_results.txp │ ├── comment │ │ ├── comment_form.txp │ │ ├── comments.txp │ │ ├── comments_display.txp │ │ └── popup_comments.txp │ ├── file │ │ └── files.txp │ ├── link │ │ └── plainlinks.txp │ └── misc │ │ ├── body_aside.txp │ │ ├── body_footer.txp │ │ ├── body_header.txp │ │ ├── images.txp │ │ ├── search_display.txp │ │ └── search_input.txp │ ├── manifest.json │ ├── pages │ ├── archive.txp │ ├── default.txp │ └── error_default.txp │ └── styles │ └── default.css ├── package.json ├── src ├── audio │ ├── moonlight_reprise.mp3 │ └── moonlight_reprise.ogg ├── dev-docs │ ├── design-patterns-page.textile │ ├── mockup-rtl.html │ └── mockup.html ├── images │ ├── 1.png │ └── 2.png ├── scss │ ├── default.scss │ ├── modules │ │ ├── _accessibility.scss │ │ ├── _base.scss │ │ ├── _buttons.scss │ │ ├── _comments.scss │ │ ├── _embedded-content.scss │ │ ├── _forms.scss │ │ ├── _internationalization.scss │ │ ├── _layout.scss │ │ ├── _links.scss │ │ ├── _lists.scss │ │ ├── _navigation.scss │ │ ├── _print.scss │ │ ├── _responsive.scss │ │ ├── _tables.scss │ │ └── _typography.scss │ └── setup │ │ ├── _colours.scss │ │ ├── _helpers.scss │ │ └── _settings.scss ├── templates │ ├── forms │ │ ├── article │ │ │ ├── article_listing.txp │ │ │ ├── default.txp │ │ │ └── search_results.txp │ │ ├── comment │ │ │ ├── comment_form.txp │ │ │ ├── comments.txp │ │ │ ├── comments_display.txp │ │ │ └── popup_comments.txp │ │ ├── file │ │ │ └── files.txp │ │ ├── link │ │ │ └── plainlinks.txp │ │ └── misc │ │ │ ├── body_aside.txp │ │ │ ├── body_footer.txp │ │ │ ├── body_header.txp │ │ │ ├── images.txp │ │ │ ├── search_display.txp │ │ │ └── search_input.txp │ ├── manifest.json │ └── pages │ │ ├── archive.txp │ │ ├── default.txp │ │ └── error_default.txp └── video │ ├── big_buck_bunny.jpg │ ├── big_buck_bunny.mp4 │ └── big_buck_bunny.webm └── webpack.config.js /.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}] 19 | indent_size = 2 20 | indent_style = space 21 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our standards 8 | 9 | Examples of behaviour that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behaviour by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behaviour and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behaviour. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviours that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behaviour may be reported by contacting the project team at contact@textpattern.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), [version 1.4](http://contributor-covenant.org/version/1/4/). 44 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Textpattern 2 | 3 | If you want to help with the development of Textpattern, there are plenty of ways to get involved. Please take a moment to review this document in order to make the contribution process easy and effective for everyone. 4 | 5 | ## Who can contribute? 6 | 7 | Anyone can contribute. You do not have to ask for permission. 8 | 9 | ## How can I contribute? 10 | 11 | ### Help with translations 12 | 13 | To make corrections to existing translations, or to add new ones, [please follow these instructions](https://github.com/textpattern/textpacks/blob/master/README.md). 14 | 15 | ### Write documentation 16 | 17 | Want to get involved in the Textpattern CMS user documentation project? Spot any errors? Want to add more documents or fix others? Then [please follow these instructions](https://github.com/textpattern/textpattern.github.io/blob/master/README.md). 18 | 19 | ### Contribute code 20 | 21 | Core developers and project maintainers accept Pull Requests. The [main code repository](https://github.com/textpattern/textpattern) uses [Git](https://www.sitepoint.com/git-for-beginners/) for its version control and is split into at least three branches: 22 | 23 | * `master`: for stable releases only. Core devs only ever merge production-ready code here at release time. 24 | * `maint-x.y.z`: for patching the most recent stable release. 25 | * `dev`: for development of the next major version. 26 | 27 | There may be other branches with partially-completed features awaiting merge, but the above are always present. Once you have cloned/forked the repository, ensure you have checked out the correct branch before submitting a Pull Request. 28 | 29 | The general steps for Pull Requests: 30 | 31 | * Switch to the correct branch (`git checkout branch-name`), where `branch-name` is either `maint-x.y.z` to patch or bug fix the existing stable product, or `dev` for a feature/fix to go in the next major version. 32 | * Pick an [existing issue](https://github.com/textpattern/textpattern/issues) you intend to work on, or [create a new issue](https://github.com/textpattern/textpattern/issues/new) if no existing issue matches your topic. 33 | * Make a new branch for your work. 34 | * Hack along. 35 | * Push your changes to your fork on GitHub. 36 | * Visit your repository's page on GitHub and click the 'Pull Request' button. 37 | * Label the pull request with a clear title and description. 38 | 39 | ### Coding standard 40 | 41 | The project follows the [PSR-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) and [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide-meta.md) standards with PHP 5.3 style namespacing. You can use [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) to make sure your additions follow them, too: 42 | 43 | ~~~ ShellSession 44 | $ ./vendor/bin/phpcs --standard=phpcs.xml *.php textpattern 45 | ~~~ 46 | 47 | ### Versioning 48 | 49 | The project follows [Semantic Versioning](https://semver.org/) and the `major.minor.patch` format. 50 | 51 | ## Increasing the likelihood of code being accepted 52 | 53 | We accept most, but not all code that is submitted for inclusion in the Textpattern core. Sometimes we'll accept part of a patch or pull request, or include a modified or abridged version. 54 | 55 | Textpattern is open source, so you don't need our permission to make your own modifications or extensions. However, if you want to maximize the chances it will be accepted and included in the official distribution, here is a quick guide to the Textpattern development philosophy. 56 | 57 | ### Do the simplest thing that could possibly work 58 | 59 | Is there a shorter or easier way to achieve the same result? Then do it that way. Less code often means fewer bugs and is easier to maintain. 60 | 61 | Don't reinvent the wheel. Is there already a function in PHP or Textpattern that makes your job easier? Use it. 62 | 63 | ### Minimize assumptions 64 | 65 | Don't try to solve a problem unless you've tested it. This is particularly important for performance enhancements: measure the speed before and after - is the improvement really significant? If not, the simplest solution might be to leave it alone. 66 | 67 | Similarly, don't write a bunch of functions or tag attributes on the assumption that they might be useful in the future. Unless you have a use case, leave it out. 68 | 69 | ### Make it testable 70 | 71 | This is the most important part. It makes the development team's job easier if the code is deemed supportable and maintainable - after all, we're the ones who will receive the bug reports and cries for help. The more you can do to help test your code, the better: examples of input and expected output, a test plan, notes on what you have and haven't tested. 72 | 73 | If you have a big patch, consider splitting it into smaller, related chunks. Git branches are ideal for this as you can commit to each branch and hop between them, then submit each as a separate pull request. Also, please ensure your patch has the latest branch from our repo merged into it immediately prior to submission. If you have written the patch against the `dev` branch, for example, do `git merge dev` when on your branch to pull forward any recent changes to dev from other developers, then prepare your pull request. This step makes it easier for us to pull the patch down and test it in our development environments. 74 | 75 | Scripted unit tests are becoming increasingly important in the Textpattern release process. You can make your code more testable by using a [functional design](https://en.wikipedia.org/wiki/Functional_design) with minimal coupling. A function that can be run in isolation, and returns a value based on its arguments, is easy to test. A function that prints output based on global variables, database records and configuration values is much harder to test (conveniently, Textpattern tag handler functions are usually easy to test). 76 | 77 | Sure, we break our own rules sometimes. But, as a rule, we err on the side of simplicity. 78 | 79 | ## License 80 | 81 | [GNU General Public License, version 2](https://github.com/textpattern/textpattern/blob/master/LICENSE.txt) (also known as GPLv2). By contributing to the project, you agree to license your contributions under the GPLv2 license. 82 | 83 | ## Code of conduct 84 | 85 | Please see [Contributor covenant code of conduct](https://github.com/textpattern/textpattern/blob/dev/.github/CODE_OF_CONDUCT.md). 86 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: textpattern 2 | custom: https://textpattern.com/about/302/patrons 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve Textpattern's default theme. 4 | 5 | --- 6 | 7 | ### Expected behaviour 8 | 9 | {Please write here} 10 | 11 | ### Actual behaviour 12 | 13 | {Please write here} 14 | 15 | ### Steps to reproduce 16 | 17 | {Please write here} 18 | 19 | #### Additional information 20 | 21 | Browser version and operating system: {Please write here} 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for Textpattern's default theme. 4 | 5 | --- 6 | 7 | ### Is your feature request related to a problem? 8 | 9 | {Please write here} 10 | 11 | ### What is the feature? 12 | 13 | {Please write here} 14 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | /node_modules 17 | /package-lock.json 18 | /npm-debug.log 19 | /yarn.lock 20 | /yarn-error.log 21 | -------------------------------------------------------------------------------- /.stylelintrc.yml: -------------------------------------------------------------------------------- 1 | ignoreFiles: 2 | - node_modules/**/* 3 | 4 | defaultSeverity: warning 5 | 6 | customSyntax: postcss-scss 7 | 8 | extends: stylelint-config-standard-scss 9 | 10 | plugins: 11 | - stylelint-order 12 | 13 | rules: 14 | # Specify percentage or number notation for alpha-values. 15 | alpha-value-notation: number 16 | 17 | # Disallow unknown annotations. 18 | #annotation-no-unknown: true 19 | 20 | # Specify a list of disallowed at-rules. 21 | at-rule-disallowed-list: 22 | - debug 23 | 24 | # Require or disallow an empty line before at-rules. 25 | at-rule-empty-line-before: 26 | - always 27 | - except: 28 | - blockless-after-blockless 29 | - first-nested 30 | ignore: 31 | - after-comment 32 | ignoreAtRules: 33 | - else 34 | 35 | # Disallow unknown at-rules. 36 | at-rule-no-unknown: 37 | - true 38 | - ignoreAtRules: 39 | - at-root 40 | - each 41 | - else 42 | - debug 43 | - error 44 | - extend 45 | - for 46 | - forward 47 | - function 48 | - if 49 | - include 50 | - mixin 51 | - return 52 | - use 53 | - warn 54 | - while 55 | 56 | # Disallow vendor prefixes for at-rules. 57 | at-rule-no-vendor-prefix: true 58 | 59 | # Specify a whitelist of allowed at-rules. 60 | #at-rule-whitelist: 61 | 62 | # Disallow empty blocks. 63 | block-no-empty: true 64 | 65 | # Specify modern or legacy notation for applicable color-functions. 66 | color-function-notation: legacy 67 | 68 | # Require or disallow alpha channel for hex colors. 69 | #color-hex-alpha: never 70 | 71 | # Specify short or long notation for hexadecimal color values. 72 | color-hex-length: long 73 | 74 | # Require (where possible) or disallow named colors. 75 | color-named: never 76 | 77 | # Disallow hex colors. 78 | #color-no-hex: true 79 | 80 | # Disallow invalid hexadecimal colors. 81 | color-no-invalid-hex: true 82 | 83 | # Require or disallow an empty line before comments. 84 | comment-empty-line-before: null 85 | 86 | # Disallow empty comments. 87 | comment-no-empty: true 88 | 89 | # Specify a pattern for comments. 90 | #comment-pattern: 91 | 92 | # Require or disallow whitespace on the inside of comment markers. 93 | comment-whitespace-inside: always 94 | 95 | # Specify a blacklist of disallowed words within comments. 96 | #comment-word-blacklist: 97 | 98 | # Specify a pattern for custom media query names. 99 | #custom-media-pattern: 100 | 101 | # Require or disallow an empty line before custom properties (Autofixable). 102 | custom-property-empty-line-before: always 103 | 104 | # Disallow missing `var` function for custom properties. 105 | #custom-property-no-missing-var-function: true 106 | 107 | # Specify a pattern for custom properties. 108 | #custom-property-pattern: 109 | 110 | # Disallow duplicate custom properties within declaration blocks. 111 | declaration-block-no-duplicate-custom-properties: true 112 | 113 | # Disallow duplicate properties within declaration blocks. 114 | declaration-block-no-duplicate-properties: true 115 | 116 | # Disallow longhand properties that can be combined into one shorthand property. 117 | declaration-block-no-redundant-longhand-properties: true 118 | 119 | # Disallow shorthand properties that override related longhand properties. 120 | declaration-block-no-shorthand-property-overrides: true 121 | 122 | # Limit the number of declaration within single line declaration blocks. 123 | declaration-block-single-line-max-declarations: 1 124 | 125 | # Require or disallow an empty line before declarations. 126 | #declaration-empty-line-before: 127 | 128 | # Disallow `!important` within declarations. 129 | #declaration-no-important: 130 | 131 | # Limit the number of values for a list of properties within declarations. 132 | #declaration-property-max-values: 133 | 134 | # Disallow unknown values for properties within declarations. 135 | #declaration-property-value-no-unknown: true 136 | 137 | # Specify a blacklist of disallowed property and unit pairs within declarations. 138 | #declaration-property-unit-blacklist: 139 | 140 | # Specify a whitelist of allowed property and unit pairs within declarations. 141 | #declaration-property-unit-whitelist: 142 | 143 | # Specify a blacklist of disallowed property and value pairs within declarations. 144 | #declaration-property-value-blacklist: 145 | 146 | # Specify a whitelist of allowed property and value pairs within declarations. 147 | #declaration-property-value-whitelist: 148 | 149 | # Disallow non-numeric values when interpolating a value with a unit. 150 | #dimension-no-non-numeric-values 151 | 152 | # Specify whether or not quotation marks should be used around font family names. 153 | font-family-name-quotes: always-where-recommended 154 | 155 | # Disallow duplicate font family names. 156 | font-family-no-duplicate-names: true 157 | 158 | # Disallow missing generic families in lists of font family names. 159 | font-family-no-missing-generic-family-keyword: true 160 | 161 | # Require numeric or named (where possible) `font-weight` values. 162 | font-weight-notation: named-where-possible 163 | 164 | # Specify a blacklist of disallowed functions. 165 | #function-blacklist: 166 | 167 | # Disallow an invalid expression within `calc` functions. 168 | #function-calc-no-invalid: true 169 | 170 | # Disallow an unspaced operator within `calc` functions. 171 | function-calc-no-unspaced-operator: true 172 | 173 | # Disallow direction values in `linear-gradient()` calls that are not valid. 174 | function-linear-gradient-no-nonstandard-direction: true 175 | 176 | # Specify lowercase or uppercase for function names. 177 | function-name-case: lower 178 | 179 | # Disallow unknown functions. 180 | #function-no-unknown: true 181 | 182 | # Disallow scheme-relative URLs. 183 | function-url-no-scheme-relative: true 184 | 185 | # Require or disallow quotes for URLs. 186 | function-url-quotes: always 187 | 188 | # Specify a blacklist of disallowed URL schemes. 189 | #function-url-scheme-blacklist: 190 | 191 | # Specify a whitelist of allowed URL schemes. 192 | #function-url-scheme-whitelist: 193 | 194 | # Specify a whitelist of allowed functions. 195 | #function-whitelist: 196 | 197 | # Specify number or angle notation for degree hues. 198 | hue-degree-notation: angle 199 | 200 | # Specify string or URL notation for `@import` rules. 201 | #import-notation: 202 | 203 | # Disallow duplicate selectors within keyframe blocks. 204 | keyframe-block-no-duplicate-selectors: true 205 | 206 | # Disallow `!important` within keyframe declarations. 207 | keyframe-declaration-no-important: true 208 | 209 | # Specify a pattern for keyframe names. 210 | #keyframes-name-pattern: 211 | 212 | # Specify keyword or percentage notation for keyframe selectors. 213 | keyframe-selector-notation: percentage 214 | 215 | # Disallow units for zero lengths. 216 | length-zero-no-unit: true 217 | 218 | # Limit the depth of nesting. 219 | max-nesting-depth: 4 220 | 221 | # Specify a blacklist of disallowed media feature names. 222 | #media-feature-name-blacklist: 223 | 224 | # Disallow unknown media feature names. 225 | media-feature-name-no-unknown: true 226 | 227 | # Disallow vendor prefixes for media feature names. 228 | media-feature-name-no-vendor-prefix: true 229 | 230 | # Specify a list of allowed name and unit pairs within media features. 231 | #media-feature-name-unit-allowed-list: 232 | 233 | # Disallow unknown values for media features. 234 | #media-feature-name-value-no-unknown: 235 | 236 | # Specify a whitelist of allowed media feature name and value pairs. 237 | #media-feature-name-value-whitelist: 238 | 239 | # Specify a whitelist of allowed media feature names. 240 | #media-feature-name-whitelist: 241 | 242 | # Specify context or prefix notation for media feature ranges. 243 | media-feature-range-notation: prefix 244 | 245 | # Disallow invalid media queries. 246 | #media-query-no-invalid: true 247 | 248 | # Disallow invalid named grid areas. 249 | named-grid-areas-no-invalid: true 250 | 251 | # Disallow selectors of lower specificity from coming after overriding selectors of higher specificity. 252 | no-descending-specificity: null 253 | 254 | # Disallow duplicate `@import` rules within a stylesheet. 255 | no-duplicate-at-import-rules: true 256 | 257 | # Disallow duplicate selectors within a stylesheet. 258 | no-duplicate-selectors: null 259 | 260 | # Disallow empty sources. 261 | no-empty-source: true 262 | 263 | # Disallow double-slash comments (`//`) which are not supported by CSS. 264 | #no-invalid-double-slash-comments: true 265 | 266 | # Disallow invalid position `@import` rules within a stylesheet. 267 | no-invalid-position-at-import-rule: null 268 | 269 | # Disallow irregular whitespaces. 270 | no-irregular-whitespace: true 271 | 272 | # Disallow unknown animations. 273 | #no-unknown-animations: 274 | 275 | # Disallow unknown custom properties. 276 | #no-unknown-custom-properties: 277 | 278 | # Limit the number of decimal places allowed in numbers. 279 | number-max-precision: 7 280 | 281 | # Specify a blacklist of disallowed properties. 282 | #property-blacklist: 283 | 284 | # Disallow unknown properties. 285 | property-no-unknown: 286 | - true 287 | - ignoreProperties: 288 | - contains-intrinsic-size 289 | 290 | # Disallow vendor prefixes for properties. 291 | property-no-vendor-prefix: 292 | - true 293 | - ignoreProperties: 294 | - appearance 295 | 296 | # Specify a whitelist of allowed properties. 297 | #property-whitelist: 298 | 299 | # Require or disallow an empty line before rules. 300 | rule-empty-line-before: 301 | - always-multi-line 302 | - except: 303 | - first-nested 304 | 305 | # Specify a list of disallowed properties for selectors within rules. 306 | #rule-selector-property-disallowed-list: 307 | 308 | # Disallow unmatchable An+B selectors. 309 | selector-anb-no-unmatchable: true 310 | 311 | # Specify a list of disallowed attribute names. 312 | #selector-attribute-name-disallowed-list: 313 | 314 | # Specify a blacklist of disallowed attribute operators. 315 | #selector-attribute-operator-blacklist: 316 | 317 | #Specify a whitelist of allowed attribute operators. 318 | #selector-attribute-operator-whitelist: 319 | 320 | # Require or disallow quotes for attribute values. 321 | selector-attribute-quotes: always 322 | 323 | # Specify a pattern for class selectors. 324 | selector-class-pattern: null 325 | 326 | # Specify a blacklist of disallowed combinators. 327 | #selector-combinator-blacklist: 328 | 329 | # Specify a whitelist of allowed combinators. 330 | #selector-combinator-whitelist: 331 | 332 | # Specify a list of disallowed selectors. 333 | #selector-disallowed-list: 334 | 335 | # Specify a pattern for ID selectors. 336 | #selector-id-pattern: 337 | 338 | # Limit the number of attribute selectors in a selector. 339 | selector-max-attribute: 2 340 | 341 | # Limit the number of classes in a selector. 342 | selector-max-class: 4 343 | 344 | # Limit the number of combinators in a selector. 345 | selector-max-combinators: 3 346 | 347 | # Limit the number of compound selectors in a selector. 348 | selector-max-compound-selectors: 4 349 | 350 | # Limit the number of id selectors in a selector. 351 | selector-max-id: 1 352 | 353 | # Limit the number of pseudo-classes in a selector. 354 | selector-max-pseudo-class: 2 355 | 356 | # Limit the specificity of selectors. 357 | selector-max-specificity: 1,2,1 358 | 359 | # Limit the number of type in a selector. 360 | selector-max-type: 3 361 | 362 | # Limit the number of universal selectors in a selector. 363 | selector-max-universal: 1 364 | 365 | # Specify a pattern for the selectors of rules nested within rules. 366 | #selector-nested-pattern: 367 | 368 | # Disallow qualifying a selector by type. 369 | #selector-no-qualifying-type: true 370 | 371 | # Disallow vendor prefixes for selectors. 372 | selector-no-vendor-prefix: true 373 | 374 | # Specify simple or complex notation for `:not()` pseudo-class selectors. 375 | selector-not-notation: complex 376 | 377 | # Specify a blacklist of disallowed pseudo-class selectors. 378 | #selector-pseudo-class-blacklist: 379 | 380 | # Disallow unknown pseudo-class selectors. 381 | selector-pseudo-class-no-unknown: true 382 | 383 | # Specify a whitelist of allowed pseudo-class selectors. 384 | #selector-pseudo-class-whitelist: 385 | 386 | # Specify a blacklist of disallowed pseudo-element selectors. 387 | #selector-pseudo-element-blacklist: 388 | 389 | # Specify single or double colon notation for applicable pseudo-elements. 390 | selector-pseudo-element-colon-notation: double 391 | 392 | # Disallow unknown pseudo-element selectors. 393 | selector-pseudo-element-no-unknown: true 394 | 395 | # Specify a whitelist of allowed pseudo-element selectors. 396 | #selector-pseudo-element-whitelist: 397 | 398 | # Specify lowercase or uppercase for type selector. 399 | selector-type-case: lower 400 | 401 | # Disallow unknown type selectors. 402 | selector-type-no-unknown: true 403 | 404 | # Disallow redundant values in shorthand properties. 405 | shorthand-property-no-redundant-values: true 406 | 407 | # Disallow (unescaped) newlines in strings. 408 | string-no-newline: true 409 | 410 | # Specify the minimum number of milliseconds for time values. 411 | time-min-milliseconds: 100 412 | 413 | # Specify a blacklist of disallowed units. 414 | #unit-blacklist: 415 | 416 | # Disallow unknown units. 417 | unit-no-unknown: true 418 | 419 | # Specify a whitelist of allowed units. 420 | #unit-whitelist: 421 | 422 | # Specify lowercase or uppercase for keywords values. 423 | value-keyword-case: null 424 | 425 | # Disallow vendor prefixes for values. 426 | value-no-vendor-prefix: true 427 | 428 | # SMACSS-like property order rules (stylelint-order plugin). 429 | order/properties-order: 430 | # Heading. 431 | 432 | - content 433 | 434 | # Box. 435 | 436 | - display 437 | - visibility 438 | - backface-visibility 439 | 440 | - position 441 | - z-index 442 | - top 443 | - right 444 | - bottom 445 | - left 446 | 447 | - box-sizing 448 | 449 | - grid 450 | - gap 451 | - grid-area 452 | - grid-template 453 | - grid-template-areas 454 | - grid-template-columns 455 | - grid-template-rows 456 | - grid-auto-columns 457 | - grid-auto-rows 458 | - grid-auto-flow 459 | - grid-column 460 | - grid-column-start 461 | - grid-column-end 462 | - column-gap 463 | - grid-row 464 | - grid-row-start 465 | - grid-row-end 466 | - row-gap 467 | 468 | - flex 469 | - flex-basis 470 | - flex-direction 471 | - flex-flow 472 | - flex-grow 473 | - flex-shrink 474 | - flex-wrap 475 | - align-content 476 | - align-items 477 | - align-self 478 | - justify-content 479 | - justify-items 480 | - justify-self 481 | - place-content 482 | - place-items 483 | - place-self 484 | - order 485 | 486 | - width 487 | - min-width 488 | - max-width 489 | - height 490 | - min-height 491 | - max-height 492 | 493 | - writing-mode 494 | - block-size 495 | - min-block-size 496 | - inline-size 497 | - min-inline-size 498 | - inset 499 | - inset-block 500 | - inset-block-start 501 | - inset-block-end 502 | - inset-inline 503 | - inset-inline-start 504 | - inset-inline-end 505 | - object-fit 506 | - object-position 507 | 508 | - margin 509 | - margin-collapse 510 | - margin-top 511 | - margin-top-collapse 512 | - margin-right 513 | - margin-right-collapse 514 | - margin-bottom 515 | - margin-bottom-collapse 516 | - margin-left 517 | - margin-left-collapse 518 | - margin-block 519 | - margin-block-start 520 | - margin-block-end 521 | - margin-inline 522 | - margin-inline-start 523 | - margin-inline-end 524 | 525 | - padding 526 | - padding-top 527 | - padding-right 528 | - padding-bottom 529 | - padding-left 530 | - padding-block 531 | - padding-block-start 532 | - padding-block-end 533 | - padding-inline 534 | - padding-inline-start 535 | - padding-inline-end 536 | 537 | - float 538 | - clear 539 | 540 | - overflow 541 | - overflow-wrap 542 | - overflow-x 543 | - overflow-y 544 | 545 | - clip 546 | - clip-path 547 | - zoom 548 | - min-zoom 549 | - max-zoom 550 | 551 | - columns 552 | - column-count 553 | - column-gap 554 | - column-fill 555 | - column-rule 556 | - column-rule-width 557 | - column-rule-style 558 | - column-rule-color 559 | - column-span 560 | - column-width 561 | 562 | - table-layout 563 | - empty-cells 564 | - caption-side 565 | 566 | # Manipulations. 567 | 568 | - will-change 569 | 570 | - transform 571 | - transform-box 572 | - transform-origin 573 | - transform-style 574 | - perspective 575 | - perspective-origin 576 | - translate 577 | 578 | - rotate 579 | - scale 580 | 581 | - transition 582 | - transition-property 583 | - transition-duration 584 | - transition-timing-function 585 | - transition-delay 586 | 587 | - perspective 588 | - perspective-origin 589 | 590 | - image-orientation 591 | - image-rendering 592 | 593 | - animation 594 | - animation-name 595 | - animation-duration 596 | - animation-timing-function 597 | - animation-delay 598 | - animation-iteration-count 599 | - animation-direction 600 | - animation-fill-mode 601 | - animation-play-state 602 | 603 | # Border. 604 | 605 | - border 606 | - border-width 607 | - border-style 608 | - border-color 609 | - border-spacing 610 | - border-collapse 611 | - border-top 612 | - border-top-width 613 | - border-top-style 614 | - border-top-color 615 | - border-right 616 | - border-right-width 617 | - border-right-style 618 | - border-right-color 619 | - border-bottom 620 | - border-bottom-width 621 | - border-bottom-style 622 | - border-bottom-color 623 | - border-left 624 | - border-left-width 625 | - border-left-style 626 | - border-left-color 627 | - border-radius 628 | - border-top-left-radius 629 | - border-top-right-radius 630 | - border-bottom-right-radius 631 | - border-bottom-left-radius 632 | - border-block 633 | - border-block-width 634 | - border-block-style 635 | - border-block-color 636 | - border-block-start 637 | - border-block-start-color 638 | - border-block-start-style 639 | - border-block-start-width 640 | - border-block-end 641 | - border-block-end-color 642 | - border-block-end-style 643 | - border-block-end-width 644 | - border-inline 645 | - border-inline-width 646 | - border-inline-style 647 | - border-inline-color 648 | - border-inline-start 649 | - border-inline-start-width 650 | - border-inline-start-style 651 | - border-inline-start-color 652 | - border-inline-end 653 | - border-inline-end-width 654 | - border-inline-end-style 655 | - border-inline-end-color 656 | - border-start-start-radius 657 | - border-start-end-radius 658 | - border-end-start-radius 659 | - border-end-end-radius 660 | - border-image 661 | - border-image-source 662 | - border-image-width 663 | - border-image-outset 664 | - border-image-repeat 665 | - border-image-slice 666 | 667 | - outline 668 | - outline-width 669 | - outline-style 670 | - outline-color 671 | - outline-offset 672 | 673 | - stroke 674 | - stroke-width 675 | - stroke-linecap 676 | - stroke-dasharray 677 | - stroke-dashoffset 678 | 679 | # Background. 680 | 681 | - opacity 682 | 683 | - background 684 | - background-attachment 685 | - background-blend-mode 686 | - background-clip 687 | - background-color 688 | - background-image 689 | - background-origin 690 | - background-position 691 | - background-repeat 692 | - background-size 693 | 694 | - box-shadow 695 | - mix-blend-mode 696 | - isolation 697 | - filter 698 | 699 | - mask 700 | - mask-clip 701 | - mask-composite 702 | - mask-image 703 | - mask-mode 704 | - mask-origin 705 | - mask-position 706 | - mask-repeat 707 | - mask-size 708 | - mask-type 709 | 710 | - shape-image-threshold 711 | - shape-margin 712 | - shape-outside 713 | 714 | - fill 715 | 716 | # Text. 717 | 718 | - color 719 | - direction 720 | 721 | - list-style 722 | - list-style-position 723 | - list-style-type 724 | - list-style-image 725 | 726 | - font 727 | - font-effect 728 | - font-emphasize 729 | - font-emphasize-position 730 | - font-emphasize-style 731 | - font-family 732 | - font-feature-settings 733 | - font-kerning 734 | - font-language-override 735 | - font-optical-sizing 736 | - font-size 737 | - font-size-adjust 738 | - font-smoothing 739 | - font-stretch 740 | - font-style 741 | - font-synthesis 742 | - font-variant 743 | - font-variant-alternates 744 | - font-variant-caps 745 | - font-variant-east-asian 746 | - font-variant-ligatures 747 | - font-variant-numeric 748 | - font-variant-position 749 | - font-variation-settings 750 | - font-weight 751 | - letter-spacing 752 | - line-break 753 | - line-clamp 754 | - line-height 755 | - vertical-align 756 | - hanging-punctuation 757 | - hyphens 758 | - orphans 759 | - widows 760 | - quotes 761 | - speak 762 | - speak-as 763 | - src 764 | 765 | - text-align 766 | - text-align-last 767 | - text-combine-upright 768 | - text-decoration 769 | - text-decoration-color 770 | - text-decoration-line 771 | - text-decoration-skip 772 | - text-decoration-skip-ink 773 | - text-decoration-style 774 | - text-emphasis 775 | - text-emphasis-color 776 | - text-emphasis-style 777 | - text-emphasis-position 778 | - text-indent 779 | - text-justify 780 | - text-orientation 781 | - text-outline 782 | - text-overflow 783 | - text-overflow-ellipsis 784 | - text-overflow-mode 785 | - text-rendering 786 | - text-shadow 787 | - text-size-adjust 788 | - text-transform 789 | - text-underline-position 790 | - text-wrap 791 | 792 | - unicode-bidi 793 | - unicode-range 794 | - word-wrap 795 | - word-break 796 | - word-spacing 797 | - white-space 798 | - tab-size 799 | 800 | # Other. 801 | 802 | - all 803 | - appearance 804 | - additive-symbols 805 | - print-color-adjust 806 | 807 | - counter-reset 808 | - counter-increment 809 | - range 810 | - system 811 | - negative 812 | - symbols 813 | - prefix 814 | - suffix 815 | - pad 816 | - fallback 817 | 818 | - box-decoration-break 819 | - page-break-before 820 | - break-before 821 | - page-break-inside 822 | - break-inside 823 | - page-break-after 824 | - break-after 825 | 826 | - cursor 827 | - caret-color 828 | - pointer-events 829 | - touch-action 830 | - user-select 831 | - user-zoom 832 | - resize 833 | - scroll-behavior 834 | - scroll-margin 835 | - scroll-margin-top 836 | - scroll-margin-right 837 | - scroll-margin-bottom 838 | - scroll-margin-left 839 | - scroll-margin-block 840 | - scroll-margin-block-start 841 | - scroll-margin-block-end 842 | - scroll-margin-inline 843 | - scroll-margin-inline-start 844 | - scroll-margin-inline-end 845 | - scroll-padding 846 | - scroll-padding-top 847 | - scroll-padding-right 848 | - scroll-padding-bottom 849 | - scroll-padding-block 850 | - scroll-padding-left 851 | - scroll-padding-block-start 852 | - scroll-padding-block-end 853 | - scroll-padding-inline 854 | - scroll-padding-inline-start 855 | - scroll-padding-inline-end 856 | - scroll-snap-align 857 | - scroll-snap-stop 858 | - scroll-snap-type 859 | - scrollbar-width 860 | - scrollbar-color 861 | 862 | - nav-index 863 | - nav-up 864 | - nav-right 865 | - nav-down 866 | - nav-left 867 | 868 | - orientation 869 | - size 870 | - marks 871 | 872 | # Additional SCSS rules (stylelint-scss plugin). 873 | 874 | # Require or disallow whitespace after the colon in `$`-variable declarations. 875 | scss/dollar-variable-colon-space-after: null 876 | 877 | # Require an empty line or disallow empty lines before `$`-variable declarations. 878 | scss/dollar-variable-empty-line-before: 879 | - always 880 | - except: 881 | - first-nested 882 | - after-comment 883 | - after-dollar-variable 884 | 885 | # Require or disallow an empty line before `//`-comments. 886 | scss/double-slash-comment-empty-line-before: null 887 | 888 | # Require or disallow whitespace after the `//` in `//`-comments 889 | scss/double-slash-comment-whitespace-inside: null 890 | 891 | # Disallow unspaced operators in Sass operations. 892 | scss/operator-no-unspaced: null 893 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "14" 4 | sudo: false 5 | cache: 6 | directories: 7 | - "$HOME/.npm" 8 | script: 9 | - npm run build 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Textpattern CMS default theme 2 | 3 | [![GitHub Sponsors](https://img.shields.io/github/sponsors/textpattern)](https://github.com/sponsors/textpattern) 4 | 5 | This project is the source for the default theme that ships as standard with [Textpattern CMS](https://textpattern.com/). It is intended as a starting point for new users learning the Textpattern CMS for the first time or existing users that want to adapt their current code for modern standards, and is not intended as a finished production theme (though you could use it as such if you want to). 6 | 7 | ## Features 8 | 9 | 1. The code is commented throughout with helpful information to help you learn some of the techniques and tags available within Textpattern. 10 | 2. Current best practices gathered from all over the web - in particular the [HTML5 Boilerplate](https://html5boilerplate.com/). 11 | 3. Mobile first structure. 12 | 4. Responsive CSS layout adapts to various device screen sizes, from 320px to over 1280px. 13 | 5. Adheres to the [Schema.org microdata format](https://schema.org/). 14 | 6. Includes [Sass](http://sass-lang.com/) version of CSS for rapid development. 15 | 7. No external images used at all. 16 | 8. Tested on a wide range of devices, browsers and operating systems. 17 | 18 | ## Supported web browsers 19 | 20 | * Chrome, Edge, Firefox, Safari and Opera the last two recent stable releases. 21 | * Internet Explorer 11. 22 | * Firefox ESR latest major point release. 23 | 24 | ## Requirements 25 | 26 | Building this repository requires: 27 | 28 | * [Node.js](https://nodejs.org/) 29 | 30 | ## Build setup 31 | 32 | ### Installing required tools 33 | 34 | The project uses [Webpack](https://webpack.github.io/) to run tasks and [Sass](http://sass-lang.com/) for CSS pre-processing. First make sure you have a recent version of [Node.js](https://nodejs.org/) installed. You can install Node.js using the [installer](https://nodejs.org/en/download/) or [package manager](https://nodejs.org/en/download/package-manager/). 35 | 36 | ### Installing dependencies 37 | 38 | After you have Node.js taken care of, you can install the project's dependencies. Navigate to the project's directory, and run the dependency manager: 39 | 40 | ```ShellSession 41 | $ cd textpattern-default-theme 42 | $ npm install 43 | ``` 44 | 45 | **npm** installs Webpack and any necessary JavaScript packages. 46 | 47 | ## Building 48 | 49 | This repository hosts sources and needs to be built before it can be used. After you have installed all dependencies, you will be able to run the build: 50 | 51 | ```ShellSession 52 | $ npm run build 53 | ``` 54 | 55 | ## Pre-built version 56 | 57 | We provide a pre-built version of the theme files within the `dist` directory in case you don't want to build it yourself. 58 | 59 | ### Design patterns Textile/HTML reference page 60 | 61 | The file `src/dev-docs/design-patterns-page.textile` is a reference you can use when authoring themes, it contains many of the HTML tags (and their equivalent [Textile](https://github.com/textile/php-textile) format where available) that should be accounted for in your designs. Paste this code directly into a Textpattern article. 62 | 63 | ## License 64 | 65 | Licensed under the [GPLv2 license](https://github.com/textpattern/textpattern-default-theme/blob/master/LICENSE). 66 | 67 | Some demo site content is licensed under Creative Commons BY-NC 3.0 (audio: "Moonlight Reprise" from "Irsen's Tale" by Kai Engel) and BY 3.0 (video: "Big Buck Bunny"). 68 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "vendor-dir": "themes", 4 | "preferred-install": "dist" 5 | }, 6 | "name": "textpattern/textpattern-default-theme", 7 | "description": "The default theme that ships as standard with Textpattern CMS.", 8 | "keywords": [ 9 | "skin", 10 | "theme", 11 | "template", 12 | "front-end", 13 | "responsive", 14 | "textpattern", 15 | "cms", 16 | "css", 17 | "sass" 18 | ], 19 | "homepage": "https://github.com/textpattern/textpattern-default-theme", 20 | "license": "GPL-2.0", 21 | "type": "textpattern-theme", 22 | "support": { 23 | "issues": "https://github.com/textpattern/textpattern-default-theme/issues", 24 | "source": "https://github.com/textpattern/textpattern-default-theme" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/article/article_listing.txp: -------------------------------------------------------------------------------- 1 |
  • 2 |

    3 | "> 4 | 5 | 6 |

    7 | 8 | 9 | 10 |
    11 | 12 |
    13 |
    14 | 15 |

    16 | 17 | 20 | " /> 21 | · 22 | 23 | 28 |

    29 |
  • 30 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/article/default.txp: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 | 5 |

    6 | 7 |

    8 |

    9 |
    10 | 11 |

    12 | 13 | 14 | 15 | 18 | " /> 19 | 20 | 21 | 22 |
    23 | 24 | 25 | 26 | " itemprop="discussionUrl"> 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
    35 | 36 | 37 | 38 | " itemprop="discussionUrl"> 39 | 40 | 41 | 0 42 | 43 | 44 |
    45 |
    46 |

    47 | 48 | 49 | 50 | 51 | 52 |
    53 | 54 |
    55 | 56 |

    57 | 58 | 59 | 60 | 65 | 66 | 67 | 68 |
    69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
    78 |

    79 | 80 | 81 | 82 | 83 | 84 | 85 |
    86 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/article/search_results.txp: -------------------------------------------------------------------------------- 1 |
  • 2 |

    3 | "> 4 | 5 | 6 |

    7 | 8 | 9 | 10 |
    11 | 12 |
    13 | 14 |

    15 | 16 |

    17 |
    18 | 19 |

    20 | 21 | 24 | " /> 25 | · 26 | 27 | 32 |

    33 |
  • 34 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/comment/comment_form.txp: -------------------------------------------------------------------------------- 1 |

    2 | 3 |

    4 | 5 | 6 | 7 | 8 | 9 | 10 |

    11 | 15 |
    16 | 17 |

    18 | 19 |

    20 | 24 |
    25 | 26 |

    27 | 28 |

    29 | 32 |
    33 | 34 |

    35 | 36 |

    37 | 41 |
    42 | 43 |

    44 | 45 | 47 |

    48 | 49 | 50 |

    51 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/comment/comments.txp: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 |
    6 | 7 |
    8 | 9 | 10 |

    11 | 16 | 17 | 18 | 19 | 20 | () 21 | 22 | 23 | 24 | 25 | 28 | 29 |

    30 | 31 | 32 |

    33 | 37 |

    38 | 39 |
    40 | 41 |
    42 | 43 |
    44 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/comment/comments_display.txp: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 |
    6 |

    7 | 8 |

    9 |
      10 | 11 | 12 | 13 | 14 | 15 |
    1. 16 |

      17 | 18 |

      19 | 20 | 21 | 22 | 23 |
    2. 24 |
      25 | 26 |
    27 | 28 | 29 | 30 | 31 | 32 |
    33 |

    34 | 35 |

    36 |
      37 |
    1. 38 |

      39 | 40 |

      41 | 42 | 43 | 44 | 45 |
    2. 46 |
    47 | 48 | 49 | 50 | 51 | 52 |
    53 |

    54 | 55 |

    56 |

    57 | 58 |

    59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
    68 | 69 | 70 |

    71 | 72 |

    73 | 74 | 75 | 76 | 77 |
    78 | 79 | 80 | 81 | 82 | 83 |

    84 | 85 | 86 | 87 |

    88 |
    89 | 90 |
    91 | 92 | 93 | 94 |
    95 | 96 | 97 |
    98 | 99 | 100 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/comment/popup_comments.txp: -------------------------------------------------------------------------------- 1 | 2 | "> 3 | 4 | 5 | 6 | 7 | <txp:page_title /> 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
    19 |
    20 | 21 | 22 | 23 | 24 |
    25 |
    26 | 27 | 28 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/file/files.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 | · 32 | 33 | 34 | 35 | 36 | 37 | 42 | · 43 | 44 | 45 | 46 | 47 | 48 | 49 | · 50 | 51 | 52 | 53 | 56 | · 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
    68 | 69 |
    70 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/link/plainlinks.txp: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/misc/body_aside.txp: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/misc/body_footer.txp: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/misc/body_header.txp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 32 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/misc/images.txp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |

    8 | <txp:image_info type='alt' default='-' /> 9 | "> 10 | "> 11 |

    12 | 13 | 14 | 15 |
    16 | 17 | <txp:image_info type='alt' default='-' /> 18 | "> 19 | "> 20 | 21 | 22 |
    23 | 24 |
    25 | 26 |
    27 | 28 |
    29 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/misc/search_display.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 | 32 | 42 | 43 | -------------------------------------------------------------------------------- /dist/four-point-nine/forms/misc/search_input.txp: -------------------------------------------------------------------------------- 1 | " itemscope itemtype="https://schema.org/WebSite"> 2 | 3 |
    4 | 5 | 6 | " value=""> 7 |
    8 |
    9 | -------------------------------------------------------------------------------- /dist/four-point-nine/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Four Point Nine", 3 | "txp-type": "textpattern-theme", 4 | "description": "The default theme shipped with Textpattern CMS 4.9.", 5 | "author": "Team Textpattern", 6 | "author_uri": "https://github.com/textpattern/textpattern-default-theme", 7 | "version": "4.9.0-dev" 8 | } -------------------------------------------------------------------------------- /dist/four-point-nine/pages/archive.txp: -------------------------------------------------------------------------------- 1 | 2 | "> 3 | 4 | 5 | 6 | 7 | <txp:page_title /> 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | GMTindex, follow"> 43 | 44 | 45 | 46 | 47 | "> 48 | 49 | 50 | 51 | 52 | "> 53 | "> 54 | "> 55 | 56 | 57 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
    91 |
    92 | 93 | 94 |
    " itemscope itemtype="https://schema.org/Blog"> 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 |

    104 | 105 | 106 | 107 | 108 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 131 | 132 |
    133 |
    134 | 135 |
    136 | 137 | 138 | 139 |
    140 |
    141 | 142 | 143 | 144 | 145 | 146 | -------------------------------------------------------------------------------- /dist/four-point-nine/pages/default.txp: -------------------------------------------------------------------------------- 1 | 2 | "> 3 | 4 | 5 | 6 | 7 | <txp:page_title /> 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
    64 |
    65 | 66 | 67 |
    " itemscope itemtype="https://schema.org/Blog"> 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 |

    83 | 84 | 85 | 86 | 87 |

    88 |
    89 |
    90 | 91 |
    92 | 93 | 94 | 95 | 103 | 104 |
    105 | 106 |
    107 | 108 | 109 | 110 |
    111 |
    112 | 113 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /dist/four-point-nine/pages/error_default.txp: -------------------------------------------------------------------------------- 1 | 2 | "> 3 | 4 | 5 | 6 | 7 | <txp:error_status /> 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
    26 |
    27 | 28 | 29 |
    "> 30 |

    31 |

    32 |
    33 | 34 | 35 | 36 |
    37 |
    38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "textpattern-default-theme", 3 | "title": "Default theme", 4 | "txp-type": "textpattern-theme", 5 | "version": "4.9.0-dev", 6 | "description": "The default theme that ships as standard with Textpattern CMS.", 7 | "author": "Team Textpattern", 8 | "homepage": "https://github.com/textpattern/textpattern-default-theme", 9 | "keywords": [ 10 | "skin", 11 | "theme", 12 | "template", 13 | "front-end", 14 | "responsive", 15 | "textpattern", 16 | "cms", 17 | "css", 18 | "sass" 19 | ], 20 | "repository": { 21 | "type": "git", 22 | "url": "https://github.com/textpattern/textpattern-default-theme" 23 | }, 24 | "bugs": { 25 | "url": "https://github.com/textpattern/textpattern-default-theme/issues" 26 | }, 27 | "devDependencies": { 28 | "autoprefixer": "10.4.21", 29 | "clean-webpack-plugin": "4.0.0", 30 | "copy-webpack-plugin": "13.0.0", 31 | "cross-env": "7.0.3", 32 | "css-loader": "7.1.2", 33 | "mini-css-extract-plugin": "2.9.2", 34 | "postcss": "8.5.3", 35 | "postcss-loader": "8.1.1", 36 | "postcss-scss": "4.0.9", 37 | "sass": "1.87.0", 38 | "sass-loader": "16.0.5", 39 | "stylelint": "16.18.0", 40 | "stylelint-config-standard-scss": "14.0.0", 41 | "stylelint-order": "7.0.0", 42 | "stylelint-webpack-plugin": "5.0.1", 43 | "webpack": "5.99.6", 44 | "webpack-cli": "6.0.1", 45 | "webpack-manifest-version-sync-plugin": "1.0.0" 46 | }, 47 | "browserslist": [ 48 | "> 0.5%", 49 | "Firefox ESR", 50 | "IE 11" 51 | ], 52 | "scripts": { 53 | "build": "webpack --progress" 54 | }, 55 | "license": "GPL-2.0" 56 | } 57 | -------------------------------------------------------------------------------- /src/audio/moonlight_reprise.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-default-theme/8172abf439dde7d363f25bb9ce1db0e015d9f160/src/audio/moonlight_reprise.mp3 -------------------------------------------------------------------------------- /src/audio/moonlight_reprise.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-default-theme/8172abf439dde7d363f25bb9ce1db0e015d9f160/src/audio/moonlight_reprise.ogg -------------------------------------------------------------------------------- /src/dev-docs/design-patterns-page.textile: -------------------------------------------------------------------------------- 1 | Article containing examples of various inline and block elements that should be considered and styled within any theme. 2 | 3 | h2. Typography 4 | 5 | h1. h1 Heading 1 h1 Heading 1 h1 Heading 1 6 | 7 | h2. h2 Heading 2 h2 Heading 2 h2 Heading 2 h2 Heading 2 8 | 9 | h3. h3 Heading 3 h3 Heading 3 h3 Heading 3 h3 Heading 3 h3 Heading 3 10 | 11 | h4. h4 Heading 4 h4 Heading 4 h4 Heading 4 h4 Heading 4 h4 Heading 4 h4 Heading 4 12 | 13 | h5. h5 Heading 5 h5 Heading 5 h5 Heading 5 h5 Heading 5 h5 Heading 5 h5 Heading 5 h5 Heading 5 14 | 15 | h6. h6 Heading 6 h6 Heading 6 h6 Heading 6 h6 Heading 6 h6 Heading 6 h6 Heading 6 h6 Heading 6 h6 Heading 6 16 | 17 | *Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam sit amet elit vitae arcu interdum ullamcorper.* Nullam ultrices, nisi quis scelerisque convallis, augue neque tempor enim, et mattis justo nibh eu elit. 18 | 19 | Quisque ultrices gravida pede. Mauris accumsan vulputate tellus. Phasellus condimentum bibendum dolor. Mauris sed ipsum. Phasellus in diam. Nam sapien ligula, consectetuer id, hendrerit in, cursus sed, leo. Nam tincidunt rhoncus urna. Aliquam id massa ut nibh bibendum imperdiet. Curabitur neque mauris, porta vel, lacinia quis, placerat ultrices, orci. 20 | 21 | This text has a reference in the footnote[1]. 22 | 23 | fn1. Here is the footnote. 24 | 25 | h3. Addresses 26 | 27 | notextile.
    Address: somewhere, world
    28 | 29 | h2. Text-level semantics 30 | 31 | The "a element":http://codeispottery.com/ example 32 | The abbr element and abbr element with title examples 33 | The **b element** example 34 | The ??cite element?? example 35 | The @code element@ example 36 | The -del element- example 37 | The dfn element and dfn element with title examples 38 | The _em element_ example 39 | The __i element__ example 40 | The +ins element+ example 41 | The kbd element example 42 | The mark element example 43 | The q element inside a q element example 44 | The s element example 45 | The samp element example 46 | The small element example 47 | The %span element% example 48 | The *strong element* example 49 | The ~sub element~ example 50 | The ^sup element^ example 51 | The u element example 52 | The var element example 53 | 54 | h2. Block text-level semantics 55 | 56 | h3. Disclosure (details/summary) 57 | 58 | notextile.
    59 | System requirements 60 |

    Requires a computer running an operating system. The computer must have some memory and ideally some kind of long-term storage.

    61 |

    An input device as well as some form of output device is recommended.

    62 |
    63 | 64 | h3. Pre-formatted text blocks 65 | 66 | pre. This is an example of a non-code 67 | pre-formatted text block 68 | preserving white spaces 69 | 70 | h3. Pre-formatted code blocks 71 | 72 | bc. 77 | 78 | h3. Blockquotes 79 | 80 | bq.:https://textpattern.com/ Here is an example of a block quote. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 81 | 82 | h3. Thematic break (hr tag) 83 | 84 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam sit amet elit vitae arcu interdum ullamcorper. 85 | 86 |
    87 | 88 | Nullam ultrices, nisi quis scelerisque convallis, augue neque tempor enim, et mattis justo nibh eu elit. 89 | 90 | h2. Embedded content 91 | 92 | Remember that all images and videos in the theme are @max-width:100%;@ for flexibility and accommodation of responsive design, so parent containers are what control a given desired image/video width in layout, except when they are at their maximum width already (100%). *Images/video width and height attribute values should _never_ be used.* 93 | 94 | h3. Images 95 | 96 | !https://default-theme.textpattern.com/images/1.png (160×160 Image Example)! 97 | 98 | h3. Images with links 99 | 100 | 160×160 Image Example 101 | 102 | h3. Figures 103 | 104 | notextile.
    105 | 480×240 Image Example 106 |
    Figcaption content
    107 |
    108 | 109 | h3. Left ranged image 110 | 111 | Aenean vehicula posuere neque. Nam nibh lectus, laoreet non, convallis sed, vulputate consectetuer, enim. Pellentesque arcu. Vestibulum consequat nisi a ipsum vulputate vehicula. Aliquam lacus diam, ultricies vel, interdum eget, posuere non, tellus. Donec vel ligula. Sed felis. !https://default-theme.textpattern.com/images/1.png (160×160 Image Example)! Quisque ultrices gravida pede. Mauris accumsan vulputate tellus. Phasellus condimentum bibendum dolor. Mauris sed ipsum. Phasellus in diam. Nam sapien ligula, consectetuer id, hendrerit in, cursus sed, leo. Nam tincidunt rhoncus urna. Aliquam id massa ut nibh bibendum imperdiet. Curabitur neque mauris, porta vel, lacinia quis, placerat ultrices, orci. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In lectus nisl, porttitor eget, fermentum et, viverra a, odio. Sed semper. Praesent vulputate nibh eget nisi. Sed ligula. Aenean vehicula posuere neque. Nam nibh lectus, laoreet non, convallis sed, vulputate consectetuer, enim. Pellentesque arcu. Vestibulum consequat nisi a ipsum vulputate vehicula. Aliquam lacus diam, ultricies vel, interdum eget, posuere non, tellus. Donec vel ligula. Sed felis. 116 | 117 | h3. Centred image 118 | 119 | Aenean vehicula posuere neque. Nam nibh lectus, laoreet non, convallis sed, vulputate consectetuer, enim. Pellentesque arcu. Vestibulum consequat nisi a ipsum vulputate vehicula. Aliquam lacus diam, ultricies vel, interdum eget, posuere non, tellus. Donec vel ligula. Sed felis. !=https://default-theme.textpattern.com/images/1.png (160×160 Image Example)! Quisque ultrices gravida pede. Mauris accumsan vulputate tellus. Phasellus condimentum bibendum dolor. Mauris sed ipsum. Phasellus in diam. Nam sapien ligula, consectetuer id, hendrerit in, cursus sed, leo. Nam tincidunt rhoncus urna. Aliquam id massa ut nibh bibendum imperdiet. Curabitur neque mauris, porta vel, lacinia quis, placerat ultrices, orci. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In lectus nisl, porttitor eget, fermentum et, viverra a, odio. Sed semper. Praesent vulputate nibh eget nisi. Sed ligula. Aenean vehicula posuere neque. Nam nibh lectus, laoreet non, convallis sed, vulputate consectetuer, enim. Pellentesque arcu. Vestibulum consequat nisi a ipsum vulputate vehicula. Aliquam lacus diam, ultricies vel, interdum eget, posuere non, tellus. Donec vel ligula. Sed felis. 120 | 121 | h3. Videos 122 | 123 | notextile. 128 | 129 | Video copyright 2008, Blender Foundation / www.bigbuckbunny.org 130 | 131 | h3. Audio 132 | 133 | notextile. 138 | 139 | "Moonlight Reprise" from "Irsen's Tale" by Kai Engel. License: "Attribution-NonCommercial 3.0 International License":https://creativecommons.org/licenses/by-nc/3.0/ 140 | 141 | h2. Lists 142 | 143 | # this is an example 144 | # of a numbered 145 | # (ordered) list 146 | ## and a second level 147 | ## numbered list example 148 | 149 | * this is an example 150 | * of a bulletpoint 151 | * (unordered) list 152 | ** and a second level 153 | ** bulletpoint list example 154 | 155 | ; This is a definition list term 1 156 | : Definition of term 1 here 157 | : Another definition of term 1 158 | ;; A sub term 159 | :: With 160 | :: Subs 161 | 162 | h2. Tables 163 | 164 | Table with @@, @@ and @@ included. 165 | 166 | |=. This is a table caption 167 | |^. 168 | |_. Planet |_. Population |_. Government | 169 | |-. 170 | | Diso | 4.1 B | Democracy | 171 | | Lave | 2.5 B | Dictatorship | 172 | | Leesti | 5.0 B | Corporate State | 173 | | Reorte | 3.1 B | Dictatorship | 174 | | Zaonce | 5.3 B | Corporate State | 175 | |~. 176 | |\3. This is the tfoot | 177 | 178 | h2. Forms 179 | 180 | notextile.
    181 |

    182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 |

    191 |

    192 | 193 | 194 | 195 | 196 | 197 | 198 |

    199 |

    200 |
    201 | 218 | 219 | 220 |

    221 |

    222 |
    223 | 240 | 241 | 242 |

    243 |

    244 |
    245 | 246 | 247 |

    248 |

    249 |
    250 | 267 |

    268 |

    269 |
    270 | 271 |

    272 |

    273 |
    274 | 275 |

    276 |

    277 |
    278 | 279 |

    280 |

    281 |
    282 | 283 |

    284 |

    285 |
    286 | 287 |

    288 |

    289 |
    290 | 291 |

    292 |

    293 |
    294 | 295 |

    296 |

    297 |
    298 | 299 |

    300 |

    301 |
    302 | 303 |

    304 |

    305 |
    306 | 307 |

    308 |

    309 |
    310 | 311 |

    312 |

    313 |
    314 | 315 |

    316 |

    317 |
    318 | 319 | 320 | 326 |

    327 |

    328 |
    329 | 330 |

    331 |

    332 |
    333 | 334 |

    335 |

    336 |
    337 | 338 |

    339 |

    340 | 341 |   342 | 343 |   344 | 345 |   346 | 347 |

    348 |

    349 | 350 |   351 | 352 |

    353 |
    354 | -------------------------------------------------------------------------------- /src/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-default-theme/8172abf439dde7d363f25bb9ce1db0e015d9f160/src/images/1.png -------------------------------------------------------------------------------- /src/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/textpattern/textpattern-default-theme/8172abf439dde7d363f25bb9ce1db0e015d9f160/src/images/2.png -------------------------------------------------------------------------------- /src/scss/default.scss: -------------------------------------------------------------------------------- 1 | @use "setup/settings"; 2 | @use "setup/helpers"; 3 | @use "setup/colours"; 4 | 5 | /* ========================================================================== 6 | Styling and layout for all media 7 | ========================================================================== */ 8 | 9 | @import "modules/base"; 10 | 11 | /* ========================================================================== 12 | Styling and layout for screen media (mobile first) 13 | ========================================================================== */ 14 | 15 | @media screen { 16 | @import "modules/layout"; 17 | @import "modules/navigation"; 18 | @import "modules/links"; 19 | @import "modules/typography"; 20 | @import "modules/internationalization"; 21 | @import "modules/embedded-content"; 22 | @import "modules/tables"; 23 | @import "modules/lists"; 24 | @import "modules/forms"; 25 | @import "modules/buttons"; 26 | @import "modules/comments"; 27 | } 28 | 29 | @import "modules/responsive"; 30 | 31 | /* ========================================================================== 32 | Additional accessibility for screen media 33 | ========================================================================== */ 34 | 35 | @import "modules/accessibility"; 36 | 37 | /* ========================================================================== 38 | Styling and layout for print media 39 | ========================================================================== */ 40 | 41 | @media print { 42 | @import "modules/print"; 43 | } 44 | -------------------------------------------------------------------------------- /src/scss/modules/_accessibility.scss: -------------------------------------------------------------------------------- 1 | @media screen and (prefers-reduced-motion: reduce), (update: slow) { 2 | search input[type="search"] { 3 | transition-duration: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/scss/modules/_base.scss: -------------------------------------------------------------------------------- 1 | /* Reset 2 | ========================================================================== */ 3 | 4 | /** 5 | * Add the correct display in IE 11 and Firefox. 6 | */ 7 | 8 | details, 9 | main, 10 | search { 11 | display: block; 12 | } 13 | 14 | /** 15 | * Add the correct vertical alignment in Chrome, Edge, Firefox, and Opera. 16 | */ 17 | 18 | progress { 19 | vertical-align: baseline; 20 | } 21 | 22 | /** 23 | * Add the correct display in all browsers. 24 | */ 25 | 26 | summary { 27 | display: list-item; 28 | } 29 | 30 | /* Clearfix 31 | ========================================================================== */ 32 | 33 | header, 34 | footer, 35 | nav ul, 36 | nav ol, 37 | .container { 38 | &::after { 39 | content: ""; 40 | display: table; 41 | clear: both; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/scss/modules/_buttons.scss: -------------------------------------------------------------------------------- 1 | @use "sass:color"; 2 | @use "../setup/colours"; 3 | @use "../setup/helpers"; 4 | 5 | /* Buttons 6 | ========================================================================== */ 7 | 8 | /** 9 | * 1. Address `overflow` set to `hidden` in IE 11. 10 | * 2. Remove the inheritance of text transform in Edge, Firefox, and IE 11. 11 | */ 12 | 13 | button { 14 | /* 1 */ 15 | overflow: visible; 16 | /* 2 */ 17 | text-transform: none; 18 | } 19 | 20 | /** 21 | * Remove the inner border and padding in Firefox. 22 | */ 23 | 24 | button::-moz-focus-inner, 25 | [type="button"]::-moz-focus-inner, 26 | [type="reset"]::-moz-focus-inner, 27 | [type="submit"]::-moz-focus-inner { 28 | padding: 0; 29 | border-style: none; 30 | } 31 | 32 | /** 33 | * 1. Remove browser-specific default styling. 34 | * 2. Improve usability and consistency of cursor style between image-type 35 | * `input` and others. 36 | */ 37 | 38 | button, 39 | [type="button"], 40 | [type="reset"], 41 | [type="submit"] { 42 | @include helpers.gradient-linear( 43 | colours.$color-button-gradient-from, 44 | colours.$color-button-gradient-to 45 | ); 46 | 47 | display: inline-block; 48 | position: relative; 49 | width: auto; 50 | height: 2em; // 32px / 16px 51 | padding: 0.25em 1em; // 4px / 16px 52 | border: 1px solid colours.$color-button-border; 53 | border-radius: 1em; 54 | background-clip: padding-box; 55 | box-shadow: 0 2px 0 colours.$color-button-shadow; 56 | color: colours.$color-text-button; 57 | font-weight: normal; 58 | text-align: center; 59 | /* 1 */ 60 | appearance: none; 61 | /* 2 */ 62 | cursor: pointer; 63 | 64 | &:hover { 65 | @include helpers.gradient-linear( 66 | color.adjust(colours.$color-button-gradient-from, $lightness: 4%), 67 | color.adjust(colours.$color-button-gradient-to, $lightness: 4%) 68 | ); 69 | 70 | border-color: color.adjust( 71 | colours.$color-button-border, 72 | $lightness: -13% 73 | ); 74 | color: colours.$color-text-button-hover; 75 | text-decoration: none; 76 | } 77 | 78 | &:active { 79 | top: 2px; 80 | border-color: color.adjust( 81 | colours.$color-button-border, 82 | $lightness: -13% 83 | ); 84 | box-shadow: none; 85 | color: colours.$color-text-button-active; 86 | text-decoration: none; 87 | } 88 | 89 | &:focus { 90 | border-color: colours.$color-link-focus; 91 | outline: 1px solid transparent; // Allows for repainting in high contrast modes. 92 | } 93 | } 94 | 95 | /** 96 | * Disbaled button additional styling. 97 | */ 98 | 99 | button[disabled], 100 | [type="button"][disabled], 101 | [type="reset"][disabled], 102 | [type="submit"][disabled] { 103 | top: 2px !important; 104 | } 105 | -------------------------------------------------------------------------------- /src/scss/modules/_comments.scss: -------------------------------------------------------------------------------- 1 | @use "sass:color"; 2 | @use "../setup/colours"; 3 | @use "../setup/settings"; 4 | 5 | /* Comments 6 | ========================================================================== */ 7 | 8 | /** 9 | * Styling for user comments. 10 | * 11 | * Example HTML: 12 | * 13 | *
    14 | */ 15 | 16 | .comments { 17 | margin-bottom: 1em; 18 | padding: 1px 1em; 19 | border-radius: settings.$border-radius; 20 | background: colours.$color-background-box; 21 | word-wrap: break-word; 22 | 23 | h4 { 24 | .is-author { 25 | font-weight: normal; 26 | } 27 | 28 | .comment-anchor { 29 | float: right; 30 | font-weight: normal; 31 | } 32 | } 33 | } 34 | 35 | /** 36 | * Additional styling for article author's comments. 37 | * 38 | * Example HTML: 39 | * 40 | *
    41 | */ 42 | 43 | .comments-author { 44 | background: color.adjust(colours.$color-background-box, $lightness: -3%); 45 | } 46 | 47 | /** 48 | * Styling for user comments preview. 49 | */ 50 | 51 | #cpreview { 52 | margin-bottom: 2px; 53 | padding: 1em; 54 | border-radius: settings.$border-radius; 55 | background-color: colours.$color-highlight-box; 56 | } 57 | 58 | /** 59 | * Highlight text colour for comment errors. 60 | */ 61 | 62 | .error_message li { 63 | color: colours.$color-error-text; 64 | } 65 | 66 | /** 67 | * Highlighting for comment form errors. 68 | */ 69 | 70 | .comments_error { 71 | border-color: colours.$color-error-text; 72 | } 73 | 74 | /* Popup comments (can be removed if you don't use popups) 75 | ========================================================================== */ 76 | 77 | /** 78 | * Restrict maximum width of popup container. 79 | */ 80 | 81 | #popup-page .container { 82 | max-width: 52em; 83 | } 84 | -------------------------------------------------------------------------------- /src/scss/modules/_embedded-content.scss: -------------------------------------------------------------------------------- 1 | /* Embedded content 2 | ========================================================================== */ 3 | 4 | /** 5 | * Add the correct display in IE 11. 6 | */ 7 | 8 | video { 9 | display: inline-block; 10 | } 11 | 12 | /** 13 | * Make embedded elements responsive. 14 | */ 15 | 16 | img, 17 | video { 18 | max-width: 100%; 19 | height: auto; 20 | } 21 | 22 | /** 23 | * Images. 24 | * 25 | * 1. Remove the gap between images and the bottom of their containers. 26 | * 27 | * Image alignment (compatible with Textile markup syntax). 28 | * 29 | * Example HTML: 30 | * 31 | * 32 | * 33 | * 34 | */ 35 | 36 | img { 37 | /* 1 */ 38 | vertical-align: middle; 39 | 40 | &.align-left { 41 | margin: 1em 1em 1em 0; 42 | float: left; 43 | } 44 | 45 | &.align-right { 46 | margin: 1em 0 1em 1em; 47 | float: right; 48 | } 49 | 50 | &.align-center { 51 | display: block; 52 | margin: 1em auto; 53 | } 54 | } 55 | 56 | /** 57 | * Consistent margins on `figure`. 58 | */ 59 | 60 | figure { 61 | margin: 1em 0; 62 | } 63 | -------------------------------------------------------------------------------- /src/scss/modules/_forms.scss: -------------------------------------------------------------------------------- 1 | @use "../setup/colours"; 2 | @use "../setup/settings"; 3 | 4 | /* Forms 5 | ========================================================================== */ 6 | 7 | /** 8 | * 1. Address width being affected by wide descendants in Chrome, Firefox. 9 | * 2. Define consistent fieldset border, margin, and padding. 10 | */ 11 | 12 | fieldset { 13 | /* 1 */ 14 | min-width: 0; 15 | /* 2 */ 16 | margin: 1em 0; 17 | padding: 1px 1em; 18 | border: 1px solid colours.$color-border; 19 | } 20 | 21 | /** 22 | * Normalize styling of `legend`. 23 | * 24 | * 1. Correct wrapping not present in IE 11 and Edge 12/13. 25 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 26 | * 3. Correct `color` not being inherited from fieldset in IE 11. 27 | */ 28 | 29 | legend { 30 | /* 1 */ 31 | display: table; 32 | /* 1 */ 33 | box-sizing: border-box; 34 | /* 1 */ 35 | max-width: 100%; 36 | /* 2 */ 37 | padding: 0; 38 | /* 3 */ 39 | color: inherit; 40 | /* 1 */ 41 | white-space: normal; 42 | } 43 | 44 | /** 45 | * 1. Show the overflow in Edge. 46 | * 2. Remove tap delay in modern browsers. 47 | */ 48 | 49 | button, 50 | input { 51 | /* 1 */ 52 | overflow: visible; 53 | /* 2 */ 54 | touch-action: manipulation; 55 | } 56 | 57 | /** 58 | * 1. Prevent elements from spilling out of their parent. 59 | * 2. Address margins set differently in Firefox 4+, Safari, and Chrome. 60 | * 3. Correct font properties not being inherited. 61 | */ 62 | 63 | button, 64 | input, 65 | optgroup, 66 | select, 67 | textarea { 68 | box-sizing: border-box; 69 | /* 1 */ 70 | max-width: 100%; 71 | /* 2 */ 72 | margin: 0; 73 | color: colours.$color-text-form; 74 | font-family: settings.$font-form; 75 | /* 3 */ 76 | font-size: 1rem; 77 | line-height: 1.375; // 22px / 16px 78 | vertical-align: baseline; 79 | } 80 | 81 | /** 82 | * Styling of form input fields. 83 | * 84 | * 1. Remove browser-specific default styling. 85 | */ 86 | 87 | [type="color"], 88 | [type="date"], 89 | [type="datetime"], 90 | [type="datetime-local"], 91 | [type="email"], 92 | [type="month"], 93 | [type="number"], 94 | [type="password"], 95 | [type="search"], 96 | [type="tel"], 97 | [type="text"], 98 | [type="time"], 99 | [type="url"], 100 | [type="week"], 101 | select, 102 | textarea { 103 | height: 2em; // 32px / 16px 104 | padding: 0.25em 0.1875em; // 8px / 16px + 3px / 16px 105 | border: 1px solid colours.$color-border; 106 | border-radius: 0; 107 | background: colours.$color-background-form; 108 | /* 1 */ 109 | appearance: none; 110 | 111 | &:focus { 112 | border-color: colours.$color-link-focus; 113 | outline: 1px solid transparent; // Allows for repainting in high contrast modes. 114 | } 115 | } 116 | 117 | /** 118 | * 1. Remove any excess padding. 119 | * 2. Correct margins for inline checkbox/radio labels. 120 | */ 121 | 122 | [type="checkbox"], 123 | [type="radio"] { 124 | /* 1 */ 125 | padding: 0; 126 | 127 | + label { 128 | /* 2 */ 129 | margin: 0 0.5em 0 0; 130 | 131 | &:last-of-type { 132 | /* 2 */ 133 | margin: 0; 134 | } 135 | } 136 | } 137 | 138 | /** 139 | * Correct the cursor style of increment and decrement buttons in Safari. 140 | */ 141 | 142 | [type="number"]::-webkit-inner-spin-button, 143 | [type="number"]::-webkit-outer-spin-button { 144 | height: auto; 145 | } 146 | 147 | /** 148 | * Remove the inner padding in Chrome and Safari on macOS. 149 | */ 150 | 151 | [type="search"]::-webkit-search-decoration { 152 | /* autoprefixer: off */ 153 | appearance: none; 154 | } 155 | 156 | /** 157 | * Use indicator icon to signify the drop-down ability of `select`. 158 | */ 159 | 160 | select { 161 | padding-right: 1.5em; // 24px / 16px 162 | background: colours.$color-background-form 163 | url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='5' viewBox='0 0 17 5'%3E%3Cpolygon fill='%23333' points='0,0 5,5 10,0'/%3E%3C/svg%3E") 164 | right center no-repeat; 165 | background-size: 1.0625em 0.3125em; // 17px / 16px, 5px / 16px 166 | text-transform: none; 167 | } 168 | 169 | /** 170 | * Remove browser-specific `select` UI in IE 11. 171 | */ 172 | 173 | select::-ms-expand { 174 | opacity: 0; 175 | } 176 | 177 | /** 178 | * Override height and background set in a previous rule and allow auto height. 179 | */ 180 | 181 | select[size], 182 | select[multiple] { 183 | height: auto; 184 | padding-right: 0.5em; 185 | background-image: none; 186 | } 187 | 188 | /** 189 | * Override height set in rule above and restrict to one line field. 190 | */ 191 | 192 | select[size="0"], 193 | select[size="1"] { 194 | height: 2em; // 32px / 16px 195 | } 196 | 197 | /** 198 | * Normalize styling of `optgroup`. 199 | */ 200 | 201 | optgroup { 202 | font-style: normal; 203 | font-weight: bold; 204 | } 205 | 206 | /** 207 | * 1. Remove default vertical scrollbar in IE 11. 208 | * 2. Remove unwanted space below `textarea` in Safari, Chrome, Opera. 209 | * 3. Restrict to vertical resizing to prevent layout breakage. 210 | */ 211 | 212 | textarea { 213 | width: 100%; 214 | height: auto; 215 | min-height: 3em; 216 | /* 1 */ 217 | overflow: auto; 218 | /* 2 */ 219 | vertical-align: top; 220 | /* 3 */ 221 | resize: vertical; 222 | } 223 | 224 | /** 225 | * Make sure disabled elements really are disabled and styled appropriately. 226 | * 227 | * 1. Override default iOS opacity setting. 228 | * 2. Re-set default cursor for disabled elements. 229 | */ 230 | 231 | [disabled], 232 | [disabled] option, 233 | [disabled] optgroup, 234 | span.disabled { 235 | border-color: colours.$color-border-light !important; 236 | /* 1 */ 237 | opacity: 1; 238 | background: colours.$color-background-form-disabled !important; 239 | box-shadow: none !important; 240 | color: colours.$color-text-form-disabled !important; 241 | text-shadow: none !important; 242 | /* 2 */ 243 | cursor: default !important; 244 | } 245 | 246 | /** 247 | * Width display options for `input` fields. Height display options 248 | * for textareas. 249 | * 250 | * Example HTML: 251 | * 252 | * 253 | * 254 | */ 255 | 256 | .small { 257 | input { 258 | width: 25%; 259 | min-width: 151px; 260 | } 261 | 262 | textarea { 263 | height: 5.5em; 264 | } 265 | } 266 | 267 | .large { 268 | input { 269 | width: 50%; 270 | min-width: 302px; 271 | } 272 | 273 | textarea { 274 | height: 9.75em; 275 | } 276 | } 277 | 278 | /** 279 | * Styling for form field validation. 280 | */ 281 | 282 | input, 283 | select, 284 | textarea { 285 | &:focus:invalid { 286 | border-color: colours.$color-error-text; 287 | box-shadow: none; // Normalize Firefox styling 288 | } 289 | } 290 | 291 | /** 292 | * Styling for Firefox-specfic form field validation. 293 | */ 294 | 295 | input, 296 | select, 297 | textarea { 298 | &:-moz-ui-invalid { 299 | border-color: colours.$color-error-text; 300 | box-shadow: none; 301 | } 302 | } 303 | 304 | /** 305 | * Normalize form placeholder style across browsers. 306 | * 307 | * 1. Fix placeholder font properties inheritance. 308 | */ 309 | 310 | ::placeholder { 311 | opacity: 1; 312 | color: colours.$color-text-form-placeholder; 313 | /* 1 */ 314 | font: inherit; 315 | } 316 | 317 | /** 318 | * Styling for required field indicators. 319 | * 320 | * Example HTML: 321 | * 322 | * * 323 | */ 324 | 325 | .required { 326 | border: 0; 327 | color: colours.$color-error-text; 328 | } 329 | -------------------------------------------------------------------------------- /src/scss/modules/_internationalization.scss: -------------------------------------------------------------------------------- 1 | /* Support for non-latin languages (can be removed if not required) 2 | ========================================================================== */ 3 | 4 | /** 5 | * Bidirectional (bidi) text support. 6 | * See: https://www.w3.org/International/articles/inline-bidi-markup/#cssshim 7 | */ 8 | 9 | [dir="ltr"], 10 | [dir="rtl"] { 11 | unicode-bidi: isolate; 12 | } 13 | 14 | bdo[dir="ltr"], 15 | bdo[dir="rtl"] { 16 | unicode-bidi: isolate-override; 17 | } 18 | 19 | /** 20 | * Preferred font for Japanese language. 21 | */ 22 | 23 | :lang(ja) { 24 | font-family: "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Meiryo UI", 25 | sans-serif; 26 | font-weight: 300; 27 | } 28 | 29 | /** 30 | * Preferred font for Korean language. 31 | */ 32 | 33 | :lang(ko) { 34 | font-family: GulimChe, Gulim, sans-serif; 35 | } 36 | 37 | /** 38 | * Preferred font for simplified Chinese (PRC) language. 39 | */ 40 | 41 | :lang(zh-cn) { 42 | font-family: "PingFang SC", SimHei, sans-serif; 43 | } 44 | 45 | /** 46 | * Preferred font for traditional Chinese (Taiwan, Hong Kong) language. 47 | */ 48 | 49 | :lang(zh-tw) { 50 | font-family: "PingFang TC", PMingLiU, sans-serif; 51 | } 52 | 53 | /** 54 | * Suppress `text-decoration` in some RTL languages for better legibility. 55 | */ 56 | 57 | [lang|="ar"], 58 | [lang|="fa"], 59 | [lang|="ur"] { 60 | a:hover { 61 | text-decoration: none; 62 | } 63 | } 64 | 65 | /** 66 | * Computer code should be LTR. 67 | */ 68 | 69 | [dir="rtl"] code { 70 | direction: ltr; 71 | } 72 | 73 | /** 74 | * Swap image alignment right/left positions in RTL languages. 75 | */ 76 | 77 | [dir="rtl"] img { 78 | &.align-left { 79 | margin: 1em 0 1em 1em; 80 | float: right; 81 | } 82 | 83 | &.align-right { 84 | margin: 1em 1em 1em 0; 85 | float: left; 86 | } 87 | } 88 | 89 | /** 90 | * Swap table caption alignment in RTL languages. 91 | */ 92 | 93 | [dir="rtl"] caption { 94 | text-align: right; 95 | } 96 | 97 | /** 98 | * Swap table cell text alignments in RTL languages. 99 | */ 100 | 101 | [dir="rtl"] { 102 | th, 103 | td { 104 | text-align: right; 105 | } 106 | } 107 | 108 | /** 109 | * Swap menu/list padding positions in RTL languages. 110 | */ 111 | 112 | [dir="rtl"] { 113 | menu, 114 | ol, 115 | ul { 116 | padding: 0 2em 0 0; 117 | } 118 | } 119 | 120 | [dir="rtl"] { 121 | .site-navigation ul, 122 | .article-list { 123 | padding: 0; 124 | } 125 | } 126 | 127 | /** 128 | * Swap definition description margin positions in RTL languages. 129 | */ 130 | 131 | [dir="rtl"] dd { 132 | margin: 0 2em 0 0; 133 | } 134 | 135 | /** 136 | * Swap checkbox/radio margin positions in RTL languages. 137 | */ 138 | 139 | [dir="rtl"] { 140 | input[type="checkbox"], 141 | input[type="radio"] { 142 | + label { 143 | margin: 0 0 0 0.5em; 144 | 145 | &:last-of-type { 146 | margin: 0; 147 | } 148 | } 149 | } 150 | } 151 | 152 | /** 153 | * Swap `select` icon position in RTL languages. 154 | */ 155 | 156 | [dir="rtl"] { 157 | select { 158 | padding-right: 0.1875em; // 3px / 16px 159 | padding-left: 1.5em; // 24px / 16px 160 | background-position: 0.5em center; // 8px / 16px 161 | } 162 | } 163 | 164 | /** 165 | * Swap ‘skip links’ position in RTL languages. 166 | */ 167 | 168 | [dir="rtl"] .skip-link { 169 | right: 1px; 170 | left: auto; 171 | } 172 | 173 | /** 174 | * Swap anchor float position on comments. 175 | */ 176 | 177 | [dir="rtl"] .comments h4 .comment-anchor { 178 | float: left; 179 | } 180 | -------------------------------------------------------------------------------- /src/scss/modules/_layout.scss: -------------------------------------------------------------------------------- 1 | @use "../setup/colours"; 2 | @use "../setup/settings"; 3 | 4 | /* Layout 5 | ========================================================================== */ 6 | 7 | /** 8 | * 1. Prevent adjustments of font size after orientation changes in 9 | * IE on Windows Phone and in iOS. 10 | */ 11 | 12 | html { 13 | /* 1 */ 14 | text-size-adjust: 100%; 15 | } 16 | 17 | /** 18 | * 1. Set `body` to `relative` to allow positioning of absolute elements. 19 | * 2. Remove default margin. 20 | */ 21 | 22 | body { 23 | /* 1 */ 24 | position: relative; 25 | /* 2 */ 26 | margin: 0; 27 | background: colours.$color-background-box; 28 | } 29 | 30 | /** 31 | * Outer wrapper for main layouts. 32 | * 33 | * Example HTML: 34 | * 35 | *
    36 | *
    37 | * Content 38 | *
    39 | *
    40 | */ 41 | 42 | .wrapper { 43 | padding: 1px 0; 44 | border-bottom: 1px solid colours.$color-border; 45 | background: colours.$color-background; 46 | } 47 | 48 | /** 49 | * Wrapper for layouts, and for site header/footer. 50 | * 51 | * Example HTML: 52 | * 53 | *
    54 | *
    55 | * Content 56 | *
    57 | *
    58 | */ 59 | 60 | .site-header, 61 | .site-footer, 62 | .container { 63 | width: 88%; 64 | max-width: settings.$container-max-width; 65 | margin: 0 auto; 66 | } 67 | 68 | /** 69 | * Additional styling for child content within site header. 70 | */ 71 | 72 | .site-header { 73 | padding: 1em 0; 74 | 75 | h2 { 76 | margin: 0; 77 | } 78 | 79 | h3 { 80 | margin: 0.5em 0 0; // 12px margin top 81 | font-family: settings.$font-serif; 82 | font-size: 1.25rem; // 20px / 16px 83 | font-style: italic; 84 | font-weight: normal; 85 | line-height: 1.4; // 28px / 20px 86 | } 87 | } 88 | 89 | /** 90 | * Additional styling for child content within site footer. 91 | */ 92 | 93 | .site-footer { 94 | padding: 0.5em 0; 95 | } 96 | 97 | /** 98 | * Styling for articles. 99 | * 100 | * 1. Prevent really, really long words in article from breaking layout. 101 | */ 102 | 103 | .article { 104 | margin-bottom: 2em; 105 | /* 1 */ 106 | word-wrap: break-word; 107 | } 108 | 109 | /** 110 | * Styling for complementary content. 111 | * 112 | * Initially the sidebar appears under main content, it is then repositioned 113 | * with media queries at 2nd breakpoint. 114 | * 115 | * 1. Prevent really, really long words in article from breaking layout. 116 | */ 117 | 118 | .complementary-content { 119 | margin: 2em -6% 0; 120 | padding: 0 6%; 121 | border-top: 2px dashed colours.$color-border; 122 | /* 1 */ 123 | word-wrap: break-word; 124 | } 125 | 126 | /** 127 | * Hide text but still allow screen reader access. 128 | * 129 | * Example HTML: 130 | * 131 | *

    132 | */ 133 | 134 | .accessibility { 135 | position: absolute; 136 | width: 1px; 137 | height: 1px; 138 | margin: -1px; 139 | padding: 0; 140 | overflow: hidden; 141 | clip: rect(0 0 0 0); // TODO: Deprecated, use `clip-path` when IE11 dropped. 142 | //clip-path: inset(50%); 143 | border: 0; 144 | white-space: nowrap; 145 | } 146 | -------------------------------------------------------------------------------- /src/scss/modules/_links.scss: -------------------------------------------------------------------------------- 1 | @use "sass:color"; 2 | @use "../setup/colours"; 3 | @use "../setup/settings"; 4 | 5 | /* Links 6 | ========================================================================== */ 7 | 8 | /** 9 | * 1. Specify link colour. 10 | * 2. Remove default underline style from non-hover state links. 11 | * 3. Interrupt the decoration line to let the shape of the text show through 12 | * in supported browsers. 13 | * 4. Remove tap delay in modern browsers. 14 | */ 15 | 16 | a { 17 | /* 1 */ 18 | color: colours.$color-link; 19 | /* 2 */ 20 | text-decoration: none; 21 | /* 3 */ 22 | text-decoration-skip-ink: auto; 23 | /* 4 */ 24 | touch-action: manipulation; 25 | 26 | &:hover, 27 | &:active { 28 | outline: 0; 29 | color: colours.$color-link-hover; 30 | text-decoration: underline; 31 | } 32 | 33 | &:focus { 34 | outline: 1px solid colours.$color-link-focus; 35 | } 36 | } 37 | 38 | /** 39 | * Additional styling for `h1`-`h3` heading links. 40 | * 41 | * 1. Expanded CSS level 3 `text-decoration-color` property in supported 42 | * browsers, older browsers ignore this addition. 43 | */ 44 | 45 | h1, 46 | h2, 47 | h3, 48 | h4, 49 | h5, 50 | h6 { 51 | a { 52 | color: colours.$color-text-heading; 53 | 54 | &:hover, 55 | &:active { 56 | color: colours.$color-text-heading; 57 | /* 1 */ 58 | text-decoration-color: rgba(colours.$color-text, 0.5); 59 | } 60 | } 61 | } 62 | 63 | /** 64 | * Paginator (prev/next) navigation links on articles/article lists. 65 | * 66 | * Example HTML: 67 | * 68 | *