Merge pull request #1 from woocommerce/master

Pulling from WooCommerce
This commit is contained in:
grigorijurasov 2020-03-05 18:36:23 +01:00 committed by GitHub
commit f69649884b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1217 changed files with 66821 additions and 130912 deletions

View File

@ -1,9 +0,0 @@
{
"presets": [
"es2015",
"stage-2"
],
"plugins": [
"add-module-exports"
]
}

View File

@ -18,13 +18,11 @@ ratings:
- "includes/*"
exclude_paths:
- "tests/"
- "apigen/"
- "sample-data/"
- "i18n/"
- "includes/api/legacy/"
- "includes/libraries/"
- "includes/updates/"
- "includes/gateways/simplify-commerce/"
- "includes/shipping/legacy-*"
- "includes/wc-deprecated-functions.php"
- "assets/js/accounting/"

View File

@ -8,7 +8,7 @@ coverage:
range: "50...100"
status:
project: yes
project: off
patch: off
changes: off
@ -20,7 +20,4 @@ parsers:
method: no
macro: no
comment:
layout: "files"
behavior: default
require_changes: yes
comment: false

View File

@ -2,17 +2,39 @@
"root": true,
"env": {
"browser": true,
"node": true
"es6": true,
"node": true,
"jest/globals": true
},
"globals": {
"wp": true,
"wpApiSettings": true,
"wcSettings": true
"wcSettings": true,
"es6": true,
"page": true,
"browser": true,
"context": true,
"jestPuppeteer": true
},
"rules": {
"camelcase": 0,
"indent": 0,
"max-len": [ 2, { "code": 140 } ],
"no-console": 1
},
"plugins": [
"jest"
],
"extends": [
"plugin:jest/recommended"
],
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 8,
"ecmaFeatures": {
"modules": true,
"experimentalObjectRestSpread": true,
"jsx": true
}
}
}

3
.gitattributes vendored
View File

@ -1,5 +1,5 @@
/.* export-ignore
apigen* export-ignore
bin export-ignore
CODE_OF_CONDUCT.md export-ignore
CHANGELOG.txt export-ignore
composer.* export-ignore
@ -10,3 +10,4 @@ phpcs.xml export-ignore
phpunit.* export-ignore
README.md export-ignore
tests export-ignore
renovate.json export-ignore

View File

@ -1,94 +1,54 @@
# Contributing to WooCommerce ✨
There are many ways to contribute to the WooCommerce project!
WooCommerce powers many online stores across the internet, and your help making it even more awesome will be greatly appreciated :)
- Translating strings into your language.
- Answering questions on GitHub and within the various WooCommerce communities.
There are many ways to contribute to the project!
- [Translating strings into your language](https://github.com/woocommerce/woocommerce/wiki/Translating-WooCommerce).
- Answering questions on the various WooCommerce communities like the [WP.org support forums](https://wordpress.org/support/plugin/woocommerce/).
- Testing open [issues](https://github.com/woocommerce/woocommerce/issues) or [pull requests](https://github.com/woocommerce/woocommerce/pulls) and sharing your findings in a comment.
- Testing WooCommerce beta versions and release candidates. Those are announced in the [WooCommerce development blog](https://woocommerce.wordpress.com/).
- Submitting fixes, improvements, and enhancements.
- To disclose a security issue to our team, [please submit a report via HackerOne](https://hackerone.com/automattic/).
WooCommerce currently powers 30% of all online stores across the internet, and your help making it even more awesome will be greatly appreciated :)
If you wish to contribute code, please read the information in the sections below. Then [fork](https://help.github.com/articles/fork-a-repo/) WooCommerce, commit your changes, and [submit a pull request](https://help.github.com/articles/using-pull-requests/) 🎉
If you think something can be improved and you wish to contribute code,
[fork](https://help.github.com/articles/fork-a-repo/) WooCommerce, commit your changes,
and [send a pull request](https://help.github.com/articles/using-pull-requests/). We'll be happy to review your changes!
We use the `good first issue` label to mark issues that are suitable for new contributors. You can find all the issues with this label [here](https://github.com/woocommerce/woocommerce/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22).
## Feature Requests
WooCommerce is licensed under the GPLv3+, and all contributions to the project will be released under the same license. You maintain copyright over any contribution you make, and by submitting a pull request, you are agreeing to release that contribution under the GPLv3+ license.
Feature requests can be [submitted to our issue tracker](https://github.com/woocommerce/woocommerce/issues/new?template=Feature_request.md). Be sure to include a description of the expected behavior and use case, and before submitting a request, please search for similar ones in the closed issues.
If you have questions about the process to contribute code or want to discuss details of your contribution, you can contact WooCommerce core developers on the #core channel in the [WooCommerce community Slack](https://woocommerce.com/community-slack/).
## Getting started
- [How to set up WooCommerce development environment](https://github.com/woocommerce/woocommerce/wiki/How-to-set-up-WooCommerce-development-environment)
- [Git Flow](https://github.com/woocommerce/woocommerce/wiki/WooCommerce-Git-Flow)
- [Minification of SCSS and JS](https://github.com/woocommerce/woocommerce/wiki/Minification-of-SCSS-and-JS)
- [Naming conventions](https://github.com/woocommerce/woocommerce/wiki/Naming-conventions)
- [String localisation guidelines](https://github.com/woocommerce/woocommerce/wiki/String-localisation-guidelines)
- [Running unit tests](https://github.com/woocommerce/woocommerce/blob/master/tests/README.md)
- [Running e2e tests](https://github.com/woocommerce/woocommerce/wiki/End-to-end-Testing)
## Coding Guidelines and Development 🛠
- Ensure you stick to the [WordPress Coding Standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/)
- Run our build process described in the document on [how to set up WooCommerce development environment](https://github.com/woocommerce/woocommerce/wiki/How-to-set-up-WooCommerce-development-environment), it will install our pre-commit hook, code sniffs, dependencies, and more.
- Whenever possible please fix pre-existing code standards errors in the files that you change. It is ok to skip that for larger files or complex fixes.
- Ensure you use LF line endings in your code editor. Use [EditorConfig](http://editorconfig.org/) if your editor supports it so that indentation, line endings and other settings are auto configured.
- When committing, reference your issue number (#1234) and include a note about the fix.
- Ensure that your code supports the minimum supported versions of PHP and WordPress; this is shown at the top of the `readme.txt` file.
- Push the changes to your fork and submit a pull request on the master branch of the WooCommerce repository.
- Make sure to write good and detailed commit messages (see [this post](https://chris.beams.io/posts/git-commit/) for more on this) and follow all the applicable sections of the pull request template.
- Please avoid modifying the changelog directly or updating the .pot files. These will be updated by the WooCommerce team.
If you are contributing code to the REST API or editor blocks, these are developed in external packages.
- [WooCommerce REST API package](https://github.com/woocommerce/woocommerce-rest-api)
- [Blocks](https://github.com/woocommerce/woocommerce-gutenberg-products-block)
## Feature Requests 🚀
Feature requests can be [submitted to our issue tracker](https://github.com/woocommerce/woocommerce/issues/new?template=6-Feature-request.md). Be sure to include a description of the expected behavior and use case, and before submitting a request, please search for similar ones in the closed issues.
Feature request issues will remain closed until we see sufficient interest via comments and [👍 reactions](https://help.github.com/articles/about-discussions-in-issues-and-pull-requests/) from the community.
You can see a [list of current feature requests which require votes here](https://github.com/woocommerce/woocommerce/issues?q=label%3A%22votes+needed%22+label%3Aenhancement+sort%3Areactions-%2B1-desc+is%3Aclosed).
## Technical Support / Questions
We don't offer technical support on GitHub so we recommend using the following:
**Reading our documentation**
Usage docs can be found here: https://docs.woocommerce.com/
If you have a problem, you may want to start with the self help guide here: https://docs.woocommerce.com/document/woocommerce-self-service-guide/
**Technical support for premium extensions or if you're a WooCommerce.com customer**
from a human being - submit a ticket via the helpdesk
https://woocommerce.com/contact-us/
**General usage and development questions**
- WooCommerce Slack Community: https://woocommerce.com/community-slack/
- WordPress.org Forums: https://wordpress.org/support/plugin/woocommerce
- The WooCommerce Help and Share Facebook group
**Customizations**
- [WooExperts](https://woocommerce.com/experts/)
- [Codeable](https://codeable.io/)
## Coding Guidelines
- **Ensure you stick to the [WordPress Coding Standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/)**
- Install our pre-commit hook using composer. It'll help with the Coding Standards. To install run `composer install` from the command line within the woocommerce plugin directory.
- Ensure you use LF line endings in your code editor. Use [EditorConfig](http://editorconfig.org/) if your editor supports it so that indentation, line endings and other settings are auto configured.
- When committing, reference your issue number (#1234) and include a note about the fix.
- Ensure that your code is compatible with PHP 5.2+.
- Push the changes to your fork and submit a pull request on the master branch of the WooCommerce repository. Existing maintenance branches will be maintained by WooCommerce developers.
Please **don't** modify the changelog or update the .pot files. These will be maintained by the WooCommerce team.
## Translating WooCommerce
We have a [project on translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/woocommerce). You can join the localization team of your language and help by translating WooCommerce. [Find more about using joining a language team and using GlotPress](https://make.wordpress.org/polyglots/handbook/tools/glotpress-translate-wordpress-org/).
If WooCommerce is already 100% translated for your language, join the team anyway! We regularly update our language files and there will definitely be need of your help soon.
### Glossary & Style Guide
Please refer to this page on the [Translator Handbook](https://make.wordpress.org/polyglots/handbook/translating/glossary-style-guide/) for information about the glossary and the style guide.
We maintain the WooCommerce glossary [on this shared Google Sheet](https://docs.google.com/spreadsheets/d/1Pobl2nNWieaSpZND9-Bwa4G8pnMU7QYceKsXuWCwSxQ/edit?usp=sharing). You can use it as a template for creating your own glossary.
Please download the file by going to **File > Download as > Comma-separated values (.csv, current sheet)** and save it on your computer/Mac. Open it with your favourite CSV editor (or re-upload it on your own Google Drive) and edit it.
Make sure to edit the second columns header by using your own languages code (eg. for Italian you would use `it`, for Portuguese (Brazil) you would use `pt-BR`).
Write the translated entry in this column and translate the entry description as well.
Dont change other columns headers and value, but feel free to add new entries.
When your CSV is ready, import it on GlotPress.
_**Warning**: Importing a CSV does not replace existing items, they will be created again. We suggest to import them only when first creating the glossary._
Each translation editor will take care of updating the glossary on GlotPress by editing/adding items when needed.
_**Note**: Only editors can create/import and edit glossaries and glossary items on GlotPress. Anyone can suggest new items to add to the glossary or translate them._
**Style Guides Available**
We dont have a Style Guide template available, so feel free to create your own. Here are the style guides available at the moment:
* [Italian](https://docs.google.com/document/d/1rspopHOiTL-5-PjyG5eJxjkYk6JkzqVbyS24OdA052o/edit?usp=sharing)
If you created a style guide for your language, please let us know so we can add it in the list above. You can also add it by yourself by submitting a PR for this file.
### Translating Video Tutorials
Another valuable way to help is by translating our growing library of WooCommerce video tutorials. Check out the [Translating Our Videos](https://docs.woocommerce.com/document/translating-our-videos/) doc and join in!
By translating video tutorials you'll be helping non-English speaking users and people affected by disabilities to get to grips with using WooCommerce for the first time, and to go on and create their businesses and make a living! That's something to be proud of and if you choose to dive into this area, we salute you.

View File

@ -0,0 +1,12 @@
---
name: "\U0001F46E Security issue"
about: Please report security issues *only* via https://www.hackerone.com
title: ''
labels: ''
assignees: ''
---
For security reasons, please report all security issues via https://hackerone.com/automattic/. Also, if the issue is valid, a bug bounty will be paid out to you.
Please disclose responsibly and not via GitHub (which allows for exploiting issues in the wild before the patch is released).

View File

@ -0,0 +1,10 @@
---
name: "\U0001F47D External issues"
about: Please report WooCommerce REST API or WooCommerce Gutenberg Products Blocks issues directly to their respective repositories.
title: ''
labels: ''
assignees: ''
---
Please report WooCommerce REST API (https://github.com/woocommerce/woocommerce-rest-api) or WooCommerce Gutenberg Products Blocks (https://github.com/woocommerce/woocommerce-gutenberg-products-block) issues directly to their respective repositories.

View File

@ -1,22 +1,25 @@
---
name: "❓ Support Question"
about: "If you have a question \U0001F4AC please see our docs or use our forums, helpdesk,
or Slack Community!"
---
We don't offer technical support on GitHub so we recommend using the following:
**Reading our documentation**
Usage docs can be found here: https://docs.woocommerce.com/
If you have a problem, you may want to start with the self help guide here: https://docs.woocommerce.com/document/woocommerce-self-service-guide/
**Technical support for premium extensions or if you're a WooCommerce.com customer**
from a human being - submit a ticket via the helpdesk
https://woocommerce.com/contact-us/
**General usage and development questions**
- WooCommerce Slack Community: https://woocommerce.com/community-slack/
- WordPress.org Forums: https://wordpress.org/support/plugin/woocommerce
- The WooCommerce Help and Share Facebook group
---
name: "❓ Support Question"
about: "If you have a question \U0001F4AC please see our docs or use our forums, helpdesk,
or Slack Community!"
title: ''
labels: ''
assignees: ''
---
We don't offer technical support on GitHub so we recommend using the following:
**Reading our documentation**
Usage docs can be found here: https://docs.woocommerce.com/
If you have a problem, you may want to start with the self help guide here: https://docs.woocommerce.com/document/woocommerce-self-service-guide/
**Technical support for premium extensions or if you're a WooCommerce.com customer**
from a human being - submit a ticket via the helpdesk
https://woocommerce.com/contact-us/
**General usage and development questions**
- WooCommerce Slack Community: https://woocommerce.com/community-slack/
- WordPress.org Forums: https://wordpress.org/support/plugin/woocommerce
- The WooCommerce Help and Share Facebook group

View File

@ -1,34 +1,37 @@
---
name: "\U0001F41E Bug report"
about: Report a bug if something isn't working as expected in the core WooCommerce
plugin.
---
**Describe the bug**
A clear and concise description of what the bug is. Please be as descriptive as possible; issues lacking detail, or for any other reason than to report a bug, may be closed without action.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Isolating the problem (mark completed items with an [x]):**
- [ ] I have deactivated other plugins and confirmed this bug occurs when only WooCommerce plugin is active.
- [ ] This bug happens with a default WordPress theme active, or [Storefront](https://woocommerce.com/storefront/).
- [ ] I can reproduce this bug consistently using the steps above.
**WordPress Environment**
<details>
```
Copy and paste the system status report from **WooCommerce > System Status** in WordPress admin.
```
</details>
---
name: "\U0001F41E Bug report"
about: Report a bug if something isn't working as expected in the core WooCommerce
plugin.
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is. Please be as descriptive as possible; issues lacking detail, or for any other reason than to report a bug, may be closed without action.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Isolating the problem (mark completed items with an [x]):**
- [ ] I have deactivated other plugins and confirmed this bug occurs when only WooCommerce plugin is active.
- [ ] This bug happens with a default WordPress theme active, or [Storefront](https://woocommerce.com/storefront/).
- [ ] I can reproduce this bug consistently using the steps above.
**WordPress Environment**
<details>
```
Copy and paste the system status report from **WooCommerce > System Status** in WordPress admin.
```
</details>

View File

@ -1,6 +1,10 @@
---
name: "✨ New Enhancement"
about: "If you have an idea to improve an existing feature in core or need something for development (such as a new hook) please let us know or submit a Pull Request!"
about: If you have an idea to improve an existing feature in core or need something
for development (such as a new hook) please let us know or submit a Pull Request!
title: ''
labels: ''
assignees: ''
---

View File

@ -1,17 +1,21 @@
---
name: "\U0001F680 Feature request"
about: "Suggest a new feature \U0001F389 We'll consider building it if it receives sufficient interest! \U0001F44D"
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
---
name: "\U0001F680 Feature request"
about: "Suggest a new feature \U0001F389 We'll consider building it if it receives
sufficient interest! \U0001F44D"
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@ -10,7 +10,7 @@
### Changes proposed in this Pull Request:
<!-- Describe the changes made to this Pull Request, and the reason for such changes. -->
<!-- Describe the changes made to this Pull Request and the reason for such changes. -->
Closes # .
@ -24,10 +24,10 @@ Closes # .
* [ ] Have you added an explanation of what your changes do and why you'd like us to include them?
* [ ] Have you written new tests for your changes, as applicable?
* [ ] Have you successfully ran tests with your changes locally?
* [ ] Have you successfully run tests with your changes locally?
<!-- Mark completed items with an [x] -->
### Changelog entry
> Enter a short summary of all changes on this Pull Request. This will appear in the changelog if accepted.
> Enter a summary of all changes on this Pull Request. This will appear in the changelog if accepted.

18
.gitignore vendored
View File

@ -18,15 +18,20 @@ none
# Sass
.sass-cache/
# Compiled CSS
/assets/css/*.css
/assets/css/photoswipe/**/*.min.css
# Minified JS
/assets/js/admin/*.min.js
/assets/js/frontend/*.min.js
# OS X metadata
.DS_Store
# Windows junk
Thumbs.db
# ApiGen
/wc-apidocs/
# Behat/CLI Tests
tests/cli/installer
tests/cli/composer.phar
@ -47,5 +52,12 @@ tests/cli/vendor
/vendor/
contributors.md
# Packages
/packages/*
!/packages/README.md
# Screenshots for e2e tests failures
/screenshots/
# Language files
i18n/languages/woocommerce.pot

View File

@ -12,6 +12,7 @@
"trailing": true,
"undef": true,
"unused": true,
"multistr": true,
"browser": true,

View File

@ -23,11 +23,9 @@ checks:
verify_property_names: false
filter:
excluded_paths:
- apigen/
- sample-data/
- i18n/
- includes/api/legacy/
- includes/gateways/simplify-commerce/includes/
- includes/legacy/
- includes/libraries/
- includes/shipping/legacy-*

View File

@ -1,60 +1,3 @@
{
"rules": {
"indentation": "tab",
"color-hex-case": "lower",
"color-no-invalid-hex": true,
"function-calc-no-unspaced-operator": true,
"function-comma-space-after": "always-single-line",
"function-comma-space-before": "never",
"function-name-case": "lower",
"function-url-quotes": "always",
"function-whitespace-after": "always",
"number-leading-zero": "always",
"number-no-trailing-zeros": true,
"length-zero-no-unit": true,
"string-no-newline": true,
"string-quotes": "single",
"unit-case": "lower",
"unit-no-unknown": true,
"unit-whitelist": ["px", "%", "deg", "ms", "em", "vh", "vw", "rem", "s", "ex", "pt", "cm"],
"value-list-comma-space-after": "always-single-line",
"value-list-comma-space-before": "never",
"shorthand-property-no-redundant-values": true,
"property-case": "lower",
"declaration-block-no-duplicate-properties": [true, { "severity": "warning" } ],
"declaration-block-no-ignored-properties": [true, { "severity": "warning" } ],
"declaration-block-trailing-semicolon": "always",
"declaration-block-single-line-max-declarations": 0,
"declaration-block-semicolon-space-before": "never",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-block-semicolon-newline-before": "never-multi-line",
"declaration-block-semicolon-newline-after": "always-multi-line",
"block-closing-brace-newline-after": "always",
"block-closing-brace-newline-before": "always-multi-line",
"block-no-empty": true,
"block-opening-brace-newline-after": "always-multi-line",
"block-opening-brace-space-before": "always",
"selector-attribute-brackets-space-inside": "never",
"selector-attribute-operator-space-after": "never",
"selector-attribute-operator-space-before": "never",
"selector-combinator-space-after": "always",
"selector-combinator-space-before": "always",
"selector-pseudo-class-case": "lower",
"selector-pseudo-class-parentheses-space-inside": "always",
"selector-pseudo-element-case": "lower",
"selector-pseudo-element-colon-notation": "double",
"selector-pseudo-element-no-unknown": true,
"selector-type-case": "lower",
"selector-no-id": [true, { "severity": "warning" } ]
}
"extends": "stylelint-config-wordpress",
}

View File

@ -1,42 +1,61 @@
language: php
dist: xenial
addons:
chrome: stable
apt:
packages:
- nginx
# Since Xenial services are not started by default, we need to instruct it below to start.
services:
- xvfb
- mysql
- docker
- docker-compose
sudo: false
cache:
directories:
- vendor
- $HOME/.composer/cache
# Test main supported versions of PHP against latest WP.
php:
- 5.6
- 7.0
- 7.1
- 7.2
- 7.3
- 7.4
env:
- WP_VERSION=latest WP_MULTISITE=0
# Additional tests against stable PHP (min recommended version is 5.6) and past supported versions of WP
# Additional tests against stable PHP (min version is 5.6)
# and code coverage report.
matrix:
fast_finish: true
include:
- php: 5.3
dist: precise
- php: 5.2
dist: precise
- php: 7.2
env: WP_VERSION=latest WP_MULTISITE=0 RUN_PHPCS=1 RUN_E2E=1
- php: 7.1
- name: "Coding standard check"
php: 7.4
env: WP_VERSION=latest WP_MULTISITE=0 RUN_PHPCS=1
- name: "E2E tests"
php: 7.4
script:
- composer require wp-cli/i18n-command
- npm run build
- docker-compose up --build -d
- bash tests/bin/run-e2e-CI.sh
after_script:
- docker-compose down -v
- name: "Unit tests code coverage"
php: 7.4
env: WP_VERSION=latest WP_MULTISITE=0 RUN_CODE_COVERAGE=1
- php: 7.3
env: WP_VERSION=5.0-beta5 WP_MULTISITE=0
- name: "WooCommerce unit tests using WordPress nightly"
php: 7.4
env: WP_VERSION=nightly WP_MULTISITE=0
allow_failures:
- php: 7.1
- php: 7.4
env: WP_VERSION=latest WP_MULTISITE=0 RUN_CODE_COVERAGE=1
before_script:
- export PATH="$HOME/.composer/vendor/bin:$PATH"
- |
# Remove Xdebug for a huge performance increase:
if [ -f ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini ]; then
@ -44,14 +63,20 @@ before_script:
else
echo "xdebug.ini does not exist"
fi
- export PATH="$HOME/.config/composer/vendor/bin:$PATH"
- bash tests/bin/install.sh woocommerce_test root '' localhost $WP_VERSION
- bash tests/bin/travis.sh before
- nvm install 10
- npm install
- composer install --no-dev
- |
# Install WP Test suite, install PHPUnit globally:
if [[ ! -z "$WP_VERSION" ]]; then
bash tests/bin/install.sh woocommerce_test root '' localhost $WP_VERSION
composer global require "phpunit/phpunit=5.7.*|7.5.*"
fi
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16"
script:
- bash tests/bin/phpunit.sh
- bash tests/bin/phpcs.sh
- travis_retry bash tests/bin/run-e2e-CI.sh
after_script:
- bash tests/bin/travis.sh after

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

View File

@ -1,5 +1,862 @@
== Changelog ==
= 3.9.2 - 2020-02-13 =
* Security - Show a notice when a logged-in customer pays for a guest order.
* Security - Disallow links in coupon error messages.
* Fix - Restored the default behavior of the "Shipping destination" option. #25571
= 3.9.1 - 2020-01-28 =
* Tweak - Trim whitespaces and strip slashes from MaxMind License Key.
* Dev - Prevent empty notices to get displayed on frontend.
* Fix - Show "-" instead of "0" when tax isn't applicable to a product.
* Fix - Fixed fatal error on the thank you page if order is not specified.
* REST API - Fixed - Product and variations schema to allow remove sale prices, dimensions and weight.
= 3.9.0 - 2020-01-21 =
* Enhancement - Added a "Show" button next to the password field on the login fields. #24915
* Enhancement - New WooCommerce Onboarding experience (shows to only 10% of new users). #24991
* Enhancement - Introduced Payment Gateway API to support "pay button". #25000
* Enhancement - Includes WooCommerce Blocks 2.5.3, introducing an "All Products" block, a new block listing products using client side rendering (requires WordPress 5.3), and more. #25181
* Tweak - Updated PayPal standard "Thank you" page message to comply with PayPal Guidelines. #24756
* Tweak - Account for non-EU countries that collect VAT and rename tax to VAT on the frontend. #24999
* Tweak - Cache checkout fragments and update DOM on change only. #24227
* Tweak - Eliminate extra update order AJAX request on checkout page load. #24271
* Tweak - Prevent billing address from being updated on shipping update. #24374
* Tweak - Added a tooltip in the "Coupon expity date" field. #24749
* Tweak - Make phone numbers clickable in emails. #24786
* Tweak - Prevent PHP warnings in tracker if order doesn't have a created date yet. #24846
* Tweak - Capitalize "T" in "Move to Trash" phrase on order page in wp-admin to be consistent with product and coupon pages. #24867
* Tweak - Changed `wp_cache` invalidation from using increment to using microtime. #24961
* Tweak - Made the usage tracking link on the setup wizard more transparent. #25026
* Tweak - Fixed menu highlight of My Account page when browsing "Add payment method" page. #25041
* Tweak - Prevent creating products before registering related post types and taxonomies. #25049
* Tweak - Include processing orders in tracker data when opted in. #25071
* Tweak - Centralize check for default themes to fix Storefront appearance in the Setup Wizard. #25216
* Tweak - Adds a WordPress version check before recommending the WooCommerce Admin plugin during setup. #25260
* Fix - Added license key support recent changes from MaxMind GeoLite2. #25378
* Fix - Honor tax rounding preference in edit item and refund flows. #24208
* Fix - Prevent incorrect number of decimal points in prices. #24281
* Fix - Fixed initial support for Gutenberg's Experimental Legacy Widget block. #24292
* Fix - Fix overriding of query when using orderby on archives with a static homepage. #24683
* Fix - Use of `wp_unslash()` function when escaping admin settings values. #24793
* Fix - Do not set the tracking cookie when doing ajax requests. #24798
* Fix - Display button to delete images from product galleries in the admin when using a mobile device. #24840
* Fix - Fixed order note's date format. #24843
* Fix - Refactored `WC_Order_Factory::get_order()` to remove function deprecated in PHP 7.0. #24852
* Fix - Fixed product stock status changes on Bulk Edit save when "Enable stock management" is disabled. #24876
* Fix - Fixed default country code fallback in wc_get_customer_default_location(). #24884
* Fix - Fixed misleading message for Shipping options in cart. #24914
* Fix - Customizer not loading when viewing from WordPress.com. #24935
* Fix - Prevent notice when a variable product has no images. #24986
* Fix - Adjusted the slug generation for duplicated variable products to prevent performance degradation when using templates. #25064
* Fix - Added appropriate minification to photoswipe.css. #25074
* Fix - Corrected the sorting behavior for the "products" shortcode when manually sorting products. #25084
* Fix - Fixed invalid backlinks for in-app purchases. #25098
* Fix - Corrected the media element player initialization for product variation descriptions. #25103
* Fix - Enable WooCommerce.com Site API on installations not using permalink. #25131
* Fix - WooCommerce.com Site API now returns success if the plugin was previously installed. #25140
* Fix - WooCommerce.com Site API checks to `move_product` case to make sure result array contains `folder_exists` item and doesn't return a warning. #25160
* Fix - Ensure that categories containing only private products are selectable in the product exporter. #25132
* Fix - Prevent variable product parents from being added to orders. #25162
* Fix - Use sorting settings as a default to product shortcodes. #25180
* Fix - Applied setup wizard CSS fixes to the respective WP versions. #25197
* Fix - Fixed "account erasure request" URL in WordPress 5.3. #25208
* Fix - Ensure all cache get removed on webhook deletion. #25164
* Fix - Adjusted the checkout email validation regex to be more accurate. #25251
* Template - Introduced `woocommerce_product_related_products_heading` filter. #25059
* Template - Introduced `woocommerce_before_lost_password_confirmation_message` and `woocommerce_after_lost_password_confirmation_message` hooks. #25096
* REST API - Fixed `date_created` and `date_created_gmt` for customers v2. #25181
* REST API - Fixed Restored "Total post count" section on System Status endpoint v2 and v3. #25181
* REST API - Filter empty objects from results before loop. #25181
* Dev - Introduce new PHP 7.0 minimum requirement.
* Dev - Introduce new WordPress 5.0 minimum requirement.
* Dev - Check for max discount to be "-ve" to prevent overwriting refunded fee amount. #24341
* Dev - Add unload event to the checkout page to prevent reloading during checkout after placing an order. #24609
* Dev - Only toggle form field description if element exists. #24752
* Dev - Introduced `woocommerce_{$export_type}_export_delimiter` filter to change separator string while exporting CSV files. #24759
* Dev - Introduced `woocommerce_after_order_refund_item_name` hook. #24760
* Dev - Introduced `woocommerce_kses_notice_allowed_tags` filter. #24849
* Dev - Introduced `woocommerce_shipping_not_enabled_on_cart_html` filter. #24914
* Dev - Introduced `woocommerce_show_invalid_variations_notice` filter. #24934
* Dev - Introduced `woocommerce_upsells_order` filter. #25017
* Dev - Introduced `woocommerce_before_settings_{current_tab}` and `woocommerce_after_settings_{current_tab}` hooks. #25028
* Dev - Included third parameter `$order` to `woocommerce_order_get_formatted_billing_address` and `woocommerce_order_get_formatted_shipping_address` filters. #24870
* Dev - Pass the `$clear_persistent_cart` variable to the `woocommerce_before_cart_emptied` and `woocommerce_cart_emptied actions`. #24930
* Dev - Made variables in `assets/css/_variables.scss` default. #24822
* Dev - Refactor to use the same rounding logic in orders and cart. #24828
* Dev - Add order note immediately after status change before the `woocommerce_order_status_changed action. #24879
* Dev - Added support for custom attributes in `wc_placeholder_img()`. #24937
* Dev - Added initial support for inline notices on checkout. #25001
* Dev - Introduced wc_get_product_object() helper. #25031
* Dev - Pass the correct `$this->updated_props` variable to the `woocommerce_coupon_object_updated_props` action's second paramater. #25077
* Dev - Remove a few calls to `func_get_args()` and `call_user_func_array()` with the spread operator for better code legibility and performance gains. #25101
* Dev - New `woocommerce_valid_order_statuses_for_payment` hook that triggers when an order is paid. Use this new hook instead of `woocommerce_order_status_changed` or woocommerce_order_status_{old_status}}_to_{new_status}` to trigger code for payment completion. #25158
* Dev - Ability to exclude certain product types from product search calls. #25162
* Dev - Raise exception when `WC_Product_Variation` is instantiated with an ID that belongs to an object that is not a variation. #25178
* Localization - Add subdivisions of Laos. #24765
* Localization - Fixed translatable string in WooCommerce's libraries. #24892 #24894
* Localization - Fixed translatable string comments for translators. #24928
* Localization - Add postcode validation for Slovenia. #25174
= 3.8.0 - 2019-11-05 =
* Enhancement - Show error message in "My Account - view order" if order does not exist. #24435
* Enhancement - Add support to allow connect and install for in-app purchase flow. #24451
* Enhancement - Declared support to Unicode CLDR. #24564
* Enhancement - Declared support for PHP 7.4 in CI by removing PHP 7.4 from list of allowed failures. #24668
* Enhancement - Update the recommended PHP version to 7.0 and the recommended WP version to 5.0. #24730
* Enhancement - Change On Boarding Wizard to opt out of usage tracking by default. #24680
* Enhancement - Add `Available on backorder` message for products available on backorder. #24559
* Tweak - Hide Vietnam's state field. #24158
* Tweak - Better wording when no downloads are available on My Account > Downloads. #24172
* Tweak - Only consider orders created via checkout to hold stock. #24159
* Tweak - Stop to load order data twice in "View order" screen on "My Account" page. #24437
* Tweak - Prevent PHP warnings in tracker if order doesn't have a created date yet. #24441
* Tweak - Use `wc_get_checkout_url()` to get checkout URL. #24544
* Tweak - Maintain value of select fields in credit card form. #24720
* Tweak - Prevent filter per category while exporting product variations. #24517
* Tweak - Better wording for subtotal of items in cart and review order. #24440
* Tweak - Prevent new lines in product quantity in checkout details. #24311
* Tweak - Add a tooltip in the "Coupon expity date" field. #24749
* Tweak - CSS styling changes for WP 5.3. #24832
* Template - Moved HTML for displaying product price filter widget to a new template `product price filter widget`. #23384
* Accessibility - Make $subtext color darker. #24739
* Dev - Consistent register/login submit button css class names. Preserve old class names as well for backwards compatibility. #23701
* Dev - Added woocommerce_disable_password_change_notification filter, set to false by default. #24154
* Dev - Add filter `woocommerce_cart_item_removed_message` and `woocommerce_cart_product_cannot_be_purchased_message` to filter notice content when an item is removed from cart, or when a product cannot be purchased. #24176
* Dev - Prevent fatal error if trying to run `wc_load_cart()` before `before_woocommerce_init`. #24198
* Dev - Add woocommerce_get_zone_criteria filter hook to add custom criteria for matching zone ID. #24199
* Dev - Fire actions `woocommerce_before_delete_product_variation`, `woocommerce_delete_product_variation` and `woocommerce_trash_product_variation` appropriately when deleting or trashing product variations. #24239
* Dev - In filter `woocommerce_update_product_stock_query` use `$new_stock` instead of `$stock_quantity`. #24229
* Dev - Introduced woocommerce_prevent_adjust_line_item_product_stock filter. #24279
* Dev - Introduced `woocommerce_logout_default_redirect_url` filter to allow custom default URL. #24282
* Dev - Added woocommerce_sort_fees_callback filter. #24280
* Dev - Remove deprecated i18n/states directory. #24364
* Dev - Add filter `woocommerce_shipping_show_shipping_calculator` for showing shipping calculator. #24375
* Dev - Corrected UG states location. #24388
* Dev - Remove deprecations notices with PHP 7.4 by changing parameter order for `implode`. #24396
* Dev - Add ``$this` param to email filter for additional_content added in 3.7. #24399
* Dev - Add `woocommerce_product_import_process_item_data` filter to allow modifying a row before importing. #24412
* Dev - Fixed warnings when error_get_last() returns null. #24442
* Dev - Use brackets instead of braces to avoid deprecation notice in PHP 7.4. #24460
* Dev - Implement Puppeteer's architecture for running E2E tests locally. #24479
* Dev - Remove call to get_magic_quotes_runtime() as it is deprecated as of PHP 7.4. #24485
* Dev - Return value of `$mailer->send()` in `wc_mail` function. #24505
* Dev - Remove Selenium e2e tests & add Puppeteer new product e2e test. #24513
* Dev - Add a filter `woocommerce_ajax_add_order_item_validation` to allow validations in `add_order_item` function. #24518
* Dev - Use `wc_get_cart_url` instead of `wc_get_page_permalink( 'cart' )` because former has a filter `woocommerce_get_cart_url` to allow customization. #24530
* Dev - New `woocommerce_product_after_tabs` action hook added. #24694
* Dev - Enable append hashes on custom events (like ajax requests) #24665
* Dev - Introduced `woocommerce_order_get_formatted_billing_address` and `woocommerce_order_get_formatted_shipping_address` filters. #24677
* Dev - WC_Abstract_Order::recalculate_coupons() is public now. #24740
* Dev - Added 'applied_coupon' trigger to checkout.js. #24406
* Dev - Introduced woocommerce_output_cart_shortcode_content filter. #24738
* Dev - Add WPML compatibility to the geolocation URL. #24722
* Dev - Validate server requirements in WCCCOM Site Installer endpoints. #24690
* Dev - Introduced woocommerce_payment_token_class filter. #24542
* Dev - Add support for post type count to system status report. #24536
* Dev - Check for max discount to be -ve to prevent overwriting refunded fee amount. #24341
* Dev - Add filter woocommerce_european_union_countries to the method WC_Countries::get_european_union_countries(). #24741
* Dev - Allow WC_Product_Query sort products by include order. #24294
* Dev - Removed duplicated include of WC_Admin_Importers. #24751
* Dev - Refactor minimum requirement notice to use constant for easier changes in the future. #24830
* Dev - Fixed number of arguments in filters on WC_Emails class. #25312
* Fix - Clean products transients when term is removed. #23991
* Fix - Only add the image node to structured data if product has image. #24191
* Fix - Product attribute terms endpoint in legacy REST API v3 by converting `attribute_id` to int. #24203
* Fix - Prevent duplicate processing/stock reduction when IPN or PDT notifications are enabled by checking if order is not already in `processing` or `completed` status. #24249
* Fix - Position of ID section in mobile rows actions when displaying the list of products in the admin. #24277
* Fix - Endpoints URLs to follow slashes preferences from WordPress permalinks. #24283
* Fix - Ensure that postcode validation doesn't return any whitespace on beginning and end of a postcode. #24284
* Fix - Shipping classes sort under products alphabetically. #24291
* Fix - Shipping rates layout in admin settings. #24327
* Fix - Retain the focus on the select box when product variation is changed. #24339
* Fix - Prevent PHP notice in WC_Order_Item_Data_Store::get_order_item_type() when there is no entry in the database for the order item ID passed. #24353
* Fix - Add translation in class-wc-shipping.php for matching zone message. #24366
* Fix - Previewing email template. #24380
* Fix - Check if order exist before generate hash for downloads. #24384
* Fix - Ensure WC_Product_Data_Store_CPT::is_existing_sku() return boolean. #24385
* Fix - `function_exists` check for wc_hex_is_light(). #24391
* Fix - Removed Emoji from default additional email content due problem on some database that doesn't allow Emojis. #24450
* Fix - Fixed escaping on an attribute in `class-wc-admin-menus.php`. #24466
* Fix - Add translation for image alt attribute text in multiple places. #24467, #24468, #24469
* Fix - Uneven padding in the input field with class "location-input" in on boarding wizard. #24476
* Fix - Duplicate id in pages settings. #24478
* Fix - Use `esc_attr_e` instead of `esc_html_e` for escaping an attribute in multiple places. #24481, #24520, #24521, #24522, #24523, #24524
* Fix - Use `esc_attr__` instead of `esc_html__` in escaping attributes string. #24525, #24529
* Fix - Typo fix in payment captured error message. #24501
* Fix - Documentation URL in failed order email content. #24535
* Fix - "Add to cart" links in feed. #24545
* Fix - Escaping in Storefront banner. #24546
* Fix - Use `wp_kses_post` to allow certain html tags in extensions page. #24589
* Fix - Escape `$prefix` in item download links. #24601
* Fix - Use `esc_attr` instead of `esc_html` in multiple places for proper escaping. #24613, #24614
* Fix - Use `esc_html` instead of `esc_attr` in multiple places for proper escaping. #24616
* Fix - Use `esc_html_e` instead of `_e` in multiple places for proper escaping. #24615, #24618, #24630
* Fix - Use `esc_html__` instead of `esc_html` for proper escaping and some typo fixes. #24639
* Fix - Add no-store and remove max-age header (no longer needed). #24652
* Fix - Use correct meta value for `downloadable` column in product lookup table regenerate function. #24681
* Fix - Admin sub-menus becoming unaligned when scrolling down in the orders page when there are no orders. #24688
* Fix - OWB country and sell in person alignment. #24700
* Fix - Domain replacement script now replaces both double and single quoted `woo-gutenberg-products-block` with `woocommerce` in both PHP and JavaScript files. #24696
* Fix - Convert `current_user_id` to string in some places to prevent unnecessary session database updates. #24016
* Fix - Fixed description of failed order emails. #24737
* Fix - Fixed Photoswipe styles. #24296
* Fix - Also consider refunded item when updating order and adjusting stocks. #24745
* Fix - Handle 0 attribute value for variations correctly. #24750
* Fix - Fixed spaces in form fields of External Products. #24295
* Fix - Removed links to downloadable products from refund emails. #24952
* Fix - Fixed button HTML element in the OBW. #25056
* Localization - Add Zambia's Provinces to the list of states. #24307
* Localization - Adaptation of the order of last name and first name and addresses in Japan. #24336
* Localization - Fixed Namibian dollar symbol. #24438
* Localization - Change localization tag `action-scheduler` to `woocommerce`. #24474
* Localization - Fixed missing US Minor Outlying Islands states. #24826
* Security - Add an exit after the redirect when checking author archive capabilities for customers.
* Security - Ensure 404 pages with single product urls cannot be exploited using Open Redirect.
= 3.7.1 - 2019-10-09
* Security - Add an exit after the redirect when checking author archive capabilities for customers.
* Security - Ensure 404 pages with single product urls cannot be exploited using Open Redirect.
= 3.7.0 - 2019-08-12 =
* Enhancement - Added table ENGINE to system status report for debugging purposes. #23101
* Enhancement - Format empty cart message as information notice. #23152
* Enhancement - Add taxonomy-specific classes to active filters widget. #23122
* Enhancement - Allow emails `Thanks` wording to be modified via the email settings. #22927
* Enhancement - Move tax classes from WordPress Options to a new `wc_tax_rate_classes` table. #23093
* Enhancement - Make WooCommerce shop roles translatable. #23150
* Enhancement - Prevent the Cart, Checkout and My Account pages from being set to the same pages. #23479
* Enhancement - New coupon code generate button on the coupon page. #24069
* Enhancement - Add `tag_operator` paramater to the `[products]` shortcode for use with the `tag` paramater ie. `[products tag='tag1,tag2' tag_operator='AND']`. #24111
* Tweak - When cleaning up variations due to product type change, force delete them instead of trashing. #23478
* Tweak - Change wording on the link to change the address so reflect if an address is already present or not. #23532
* Tweak - If variations are missing prices, show a notice in the product data panel. #23133
* Tweak - Use `determine_locale()` to properly load custom translation files. #23785
* Tweak - OBW: Switch shipping labels and shipping zones placement. #23781
* Tweak - Show the quantity refunded on customer facing order screens. #23038
* Tweak - CSV product import now allows true/false values for the published field, as well as the original 0 (private), -1 (draft), 1 (publish) values. #23207
* Tweak - Update product attribute sorting tooltip to clarify usage. #23222
* Tweak - Store tax rate percentage in the tax line items on orders. #23268
* Tweak - Remove the left and right margin from the logo in emails. #23360
* Tweak - Use the high res version of the WP spinner in the coupon Block UI. #23364
* Tweak - Improve user registration validation messages. #23468
* Tweak - Auto generate a new username when a username is blacklisted by WordPress. #23672
* Tweak - Guest cart sessions now gets deleted when a user logs in, preventing duplicate cart sessions. #23687
* Tweak - Include the store's base postcode and city when calculating order taxes. #23695
* Tweak - Update the generate username setting description label to reflect how the username is actually generated. #23911
* Tweak - OBW: Adjust plugin highlight container sizes to avoid overlap. #23997
* Tweak - Round tax amounts late when the round at subtotal level setting is enabled to reduce rounding errors. #24024
* Tweak - OBW: Now includes WooCommerce Admin as a recommended plugin. #24058
* Template - Review and update all template files escaping. #23460
* Template - Remove mention of shipping section from the checkout/form-login.php template as shipping is not always a requirement for an order. #23941
* Template - Add new filter `woocommerce_before_thankyou` to the checkout/thankyou.php template. #23538
* Template - Add new `woocommerce_widget_shopping_cart_total` hook to replace hardcoded subtotal in cart/mini-cart.php template. #24145
* Template - Add new `woocommerce_widget_shopping_cart_after_buttons` hook in cart/mini-cart.php template. #24145
* Template - Add new `woocommerce_before_cart_collaterals` hook in cart/cart.php template. #24145
* Template - Correct the plural forms usage in loop/result-count.php template. #24005
* Dev - Introduce new PHP 5.6 minimum requirement. #23924
* Dev - Introduce new WordPress 4.9 minimum requirement. #24156
* Dev - Move the settings save functionality from the `settings_page_init` function to the `wp_loaded` action so it is not saved after the settings page renders. #23091
* Dev - Add quantity input action hooks `woocommerce_before_add_to_cart_quantity` and `woocommerce_after_add_to_cart_quantity`. #23166
* Dev - Add `$this` parameter to email class filters. #23250
* Dev - Add new `WC_Abstract_Order::get_coupons()` method for returning all coupon line item objects on an order. #23663
* Dev - Added new action `woocommerce_product_read` to `WC_Product_Data_Store_CPT::read()`. #23181
* Dev - Add new filter `woocommerce_admin_order_buyer_name` to the `WC_Admin_List_Table_Orders::render_order_number_column()` method to change the buyer name in orders list screen. #23741
* Dev - Add new actions to `WC_Helper` class for when WooCommerce.com Product Subscription statuses change `woocommerce_helper_subscription_activate_success`, `woocommerce_helper_subscription_activate_error`, `woocommerce_helper_subscription_deactivate_success`, and `woocommerce_helper_subscription_deactivate_error`. #23041
* Dev - Extend usage and event tracking (if opted in) to system status, admin order and admin coupon pages. #23190 #23189 #23883
* Dev - Add `woocommerce_after_X_object_save` actions, and passed objects to `woocommerce_new_x` and `woocommerce_update_x` actions. #23338
* Dev - Update customer order and lifetime spend totals in `wc_update_new_customer_past_orders()` to trigger `customer.updated` webhooks for paid orders. #23402
* Dev - Preserve the State field's custom css classes when selecting an option from the Country dropdown. #23433
* Dev - Add new `woocommerce_product_related_posts_shuffle` filter in `wc_get_related_products()` to enable/disable related product shuffling, defaults to true. #23562
* Dev - Deprecate the `WC_Abstract_Order::get_used_coupons()` method and replace it with a new method `WC_Abstract_Order::get_coupon_codes()`. #23689
* Dev - Add new `woocommerce_prices_include_tax` filter in the `wc_prices_include_tax()` function. #23697
* Dev - Add new `woocommerce_admin_after_product_gallery_item` filter in the `WC_Meta_Box_Product_Images::output()` method for adding additional markup after product gallery items. #23743
* Dev - Remove unused images `assets/images/klarna-white.png` and `assets/images/square-white.png`. #23748
* Dev - Move Free Shipping method JavaScript code from outputting on all shipping setting pages to just the Free Shipping page using the `admin_footer` hook. #23776
* Dev - Prevent PHP fatal error while throwing exceptions in `woocommerce_rest_insert_{post_type}_object` hooks. #23793
* Dev - Add new `woocommerce_enforce_password_strength_meter_on_checkout` filter in the `WC_Frontend_Scripts::get_script_data()` method to allow enforcing the password strength meter on checkout. #23811
* Dev - Add new `woocommerce_search_products_post_statuses` filter in the `WC_Product_Data_Store_CPT::search_products()` method for controlling what post statuses to include in product searches. #23838
* Dev - Allow filtering `woocommerce_order_formatted_shipping_address` even when no shipping address is defined. #23859
* Dev - Change the query in the `WC_Product_Data_Store::find_matching_product_variation()` method to always respect the ordering of variations. #23881
* Dev - Move all feature plugin features out from the WooCommerce codebase and utilize composer and an autoloader for including it in WooCommerce core, affects WC REST API and WC Blocks. #23957
* Dev - Allow displaying multiple error messages through the registration validation. #23968
* Dev - Add new `woocommerce_cart_item_removed_notice_type`, `woocommerce_cart_updated_notice_type` and `woocommerce_add_to_cart_notice_type` filters for changing the default notice types for cart notices. #24021
* Dev - Add namespaced support for Jetpack 7.5 tracking library. #24140
* Dev - Add support for an improved WooCommerce.com Marketplace browse and purchase experience (in progress). #24075 #24123
* Dev - Added `$order` and `$product` as parameters to the `woocommerce_ajax_order_item` filter in `WC_Ajax::add_order_item()`. #24108
* Dev - Add new `woocommerce_product_import_image_separator` filter in `WC_Product_CSV_Importer::parse_images_field()` for adjusting the product images seperator. #24120
* Dev - Add new `woocommerce_widget_shopping_cart_subtotal()` template function that hooks into the `woocommerce_widget_shopping_cart_total` action to output the mini cart subtotal. #24145
* Dev - Deprecate the `woocommerce_before_cart_item_quantity_zero` action from `WC_Cart::restore_cart_item()` in favor of existing `woocommerce_cart_item_removed` action. #23112
* Dev - Deprecate WC_Tax::maybe_remove_tax_class_rates which hooked into the WP Options update hook for taxes in favor of new function WC_Tax::delete_tax_class_by which works on the new tax classes table. #24213
* Fix - Use version_compare for determining the maximum WooCommerce database version number. #23092
* Fix - Missing space and closing `<strong>` tag in WooCommerce.com disconnect message. #24073
* Fix - CSV Importer - Skip rows during update if a SKU column exists, but the value is empty. #23262
* Fix - Allow matching `Any` attributes when calling `WC_Product_Data_Store::find_matching_product_variation()`. #23067
* Fix - Switch coupon amount validation based on decimal seperator setting. #23137
* Fix - Show the correct results for shortcodes on static homepages when sorting. #23159
* Fix - Queue AJAX add to cart events to avoid overwriting session data. #23293
* Fix - Wrong subtotals when changing tax classes via the `woocommerce_product_get_tax_class` filter. #23344
* Fix - Fatal error on plain text order emails where products were deleted. #23754
* Fix - Do not pass the `no_shipping` argument to PayPal when the order contains shippable items. #23773
* Fix - Product review form does respects the `require_name_email` WordPress core option. #23786
* Fix - Do not cache expired sessions, negative expiry causes errors in some caching modules. #23863
* Fix - WC_Log_Handler_DB logs now uses the same timestamp format as text logs, Y-m-d H:i:s. #23863
* Fix - Display line breaks for customer notes in emails, and order details. #23969
* Fix - Correct plural forms usage in `WC_Admin_Report` class. #24020
* Fix - System status database info section throwing a PHP notice on some DB environments. #24023
* Fix - On the system status database info section display a message informing users that WooCommerce was unable to get database information instead of an error, when a database sharding plugin is active. #24034
* Fix - Usage and event tracking (if opted in) was not working correctly in the OBW. #24056
* Fix - Fatal error on downloads report when some download files were missing. #24118
* Fix - Prevents the taxes columns from being removed when the order is no longer editable in admin. #23884
* Performance - Improve the speed of the admin dashboard by only updating transients once per class. #23011
* Performance - Reduce number of queries needed to populate variations data by priming post caches. #23272
* Performance - Persistant cart improvements, only update the persistent cart if the cart items actually change. #23112
* Performance - Exclude `action_log` comment types from `wp_count_comments`. #24071
* Localization - Added validation for Italian postcodes. #23269
* Localization - Remove unused tax locale defaults since we now promote auto tax services instead. #23431
* Localization - Define correct address format for Uganda. #23178
* Localization - Hide the postcode and update the state label to "Province" for Mozambique. #23764
* Localization - OBW: Make postal code optional based on locale data. #23915
* Localization - Add new currency for São Tomé, Príncipe dobra and Mauritanian ouguiya. #23950
* Localization - Change Canada poscode label to `Postal code`. #23740
= 3.6.5 - 2019-07-02 =
* Security - Introduce file type check for tax rate importer.
* Security - Added nonce check to CSV importer actions.
* Enhancement - WordPress & PHP upgrade nudges when running older versions. #23975
* Fix - "Filter by price" widget excludes category when combined with a product attribute. #23720
* Fix - Add query parameter (GET) forwarding when processing batch API requests. #23769
* Fix - Fixed query of top rated products shortcode. #23771
* Fix - Typo in customers endpoint schema. #23812
* Fix - Update Emogrifier library to fix problem with nth-child pseudo selector. #23824
* Fix - Avoid outputting a rating of zero when product has comments without a review rating. #23828
* Fix - Do not throw a PHP notice if including the rest API handlers manually. #23840
* Fix - WooCommerce Tracker review count. #23849
* Fix - Coupon usage limit issue when applying coupon to order in the backend. #23851
* Fix - Fatal error when trying to apply virtual coupons to guest orders. #23877
* Fix - AJAX update order review doesn't reload the page. #23891
* Fix - Variation matching returns incorrect values when using a large number of variations combined with 0 values attributes. #23909
* Fix - Password mismatch when user registered with password containing a double quote. #23926
* Fix - Minor Shipping Zone UI issue due to conflict with some browser extensions. #23789
* Fix - Make Products->Categories active when clicked on "Make Default" link under any product category. #23936
* Fix - Update URL describing how to increase PHP memory limit on system status page. #23919
* Fix - Sets the position of the tracking image to fixed, so it doesn't affect page layout. #23953
* Fix - Button to manually update database in WooCommerce > Status > Tools. #23966
* Fix - Tracks blog ID retrieval from Jetpack options. #24028
* Fix - Fixed support to parentheses in phone numbers validation. #23967
* Tweak - Improve tooltip text describing the product sale dates in the product admin page. #23935
* Tweak - Made NL postcode validation more flexible, allowing lowercase and missing space. #23837
* Localization - Display city field as optional for Singapore addresses. #23878
* Dev - Add filters to file paths passed to the different xsendfile like backends. #23814
= 3.6.4 - 2019-05-27 =
* Enhancement - Add notice to install WooCommerce Admin. #23659
* Fix - Tracks: Add check for OBW is-opting-in. #23772
* Fix - Use HTTP protocol for schema.org's availability. #23774
* Fix - Coupon usage limit checks based on email never ran when orders are created via wp-admin. #23775
* Fix - Duplicate out of stock notices when navigating from cart to checkout and back to cart. #23791
* Fix - Remove sensitive information from refund reason when manually refunding an order, and move it to an order note. #23739
* Tweak - Tracks: set cookie on admin_init instead of wp_loaded. #23787
* Dev - Fixed number of arguments for all occurrences of the woocommerce_valid_order_statuses_for_cancel filter. #23704
* Dev - REST API - Stop order creation if invalid data is sent. #23325
* Dev - Introduce new wc_load_cart function for dynamically loading and initializing the cart. #23794
= 3.6.3 - 2019-05-16 =
* Fix - State not required for Serbia. #23430
* Fix - # symbol in product category name broke product export. #23454
* Fix - XML export caused fatal errors due to Action Scheduler adding invalid characters. #23456
* Fix - Invalid password messages when password contains backslashes. #23499
* Fix - Dismiss button in WC admin notices "legacy_shipping" and "no_shipping_methods" were not clickable. #23517
* Fix - WC $wpdb->tables not defined early enough. #23529
* Fix - Tracks JS not printed on last page of OBW. #23519
* Fix - Error in the logic used to build fields for external products when the query string contained full-stops, pluses or spaces in the values of the parameters. #23535
* Fix - UI page width issue on OBW. #23526
* Fix - Customer address not auto populated on checkout after registering and filling in address prior. #23528
* Fix - Available WooCommerce extension updates not showing in System Status report. #23601
* Fix - wc_change_get_terms_defaults throwing undefined index notices. #23611
* Fix - System Status report alway showing checkmark next to Connected to WooCommerce.com. #23617
* Fix - State field never populated when loading customer address on order via wp-admin. #23615
* Fix - Order sorting not working in wp-admin when Yoast SEO active. #23590
* Fix - Attribute ordering not working in product edit screen. #23625
* Fix - Tracks reporting incorrect order totals due to refunds being excluded in calculation. #23671
* Fix - Reload state options when creating a new order in WP-Admin and changing country. #23602
* Fix - New webhooks not showing in the webhook admin list page when you have object caching enabled. #23713
* Fix - Missing coupon expiry dates, restore coupons expiry_date backward compatibility. #23714
* Fix - Bulk stock update could result in all products set to out of stock, change ensures consistency between db and Product instance in memory. #23534
* Fix - Dashboard stats widget including unpublished products in out of stock and low in stock counts. #23734
* Fix - PayPal payment not captured when you transition an order from a custom order status to completed or processing. #23634
* Tweak - Confirm before saving empty list of countries to sell to in settings. #23597
* Tweak - Change default WC API version used when creating webhooks to the latest WC API version. #23515
* Tweak - Report a bug button now points to the new issue template in GitHub. #23580
* Tweak - Do not display taxes in totals columns when taxes not enabled. #23579
* Tweak - WC WP-CLI upgrade routine mimics wp-admin upgrade when no updates found by setting DB version to current version. #23666
* Tweak - Template caching now cache based on WC_VERSION to avoid issues with symlinked plugin folders. #23546
* Tweak - OBW payment gateway selection defaults. #23690
* Localization - Add Serbia locale defaults. #23428
* Localization - Add address format for Serbia. #23429
= 3.6.2 - 2019-04-24 =
* Fix - Fix CSS classname conflict with themes due to missing product object global. #23377
* Fix - Fix security check on email template preview page. #23356
* Fix - Prevent `wc_ascii_uasort_comparison` throwing notices in some server configs. #23363
* Fix - `is_request_to_rest_api` should check for wc endpoints only. #23372
* Fix - Fixed use of get_term_meta in REST API endpoints. #23457
* Fix - Fixed missing closing tag for log-in link for reviews. #23445
* Fix - Fixed average_rating in the db upgrade routine for lookup table. #23465
* Fix - More useful update notices if cron is disabled. #23383
* Fix - Prevent term ordering queries inserted by wc_terms_clauses from conflicting with custom where clauses. #23449
* Fix - When product lookup table is generating for the first time, avoid wrong stock statuses being set for variable products. #23455
* Fix - Ensure webhooks respect registered order args. #23444
* Fix - REST API - Return custom attribute with defined name instead of lowercase name. #23482
* Fix - Fix 3.6 conflict with Woo Blocks plugin 1.4. #23399
* Fix - Allow default sorting of WC taxonomies to be overwritten by get_terms orderby. #23477
* Fix - Improve wc_rating_count lookup table generation with large numbers of posts. #23486
* Fix - Avoid recurring event for suggestions updates. #23484
* Fix - Revert selectWoo escaping change and instead escape user names. Avoids issues displaying slash characters. #23334
* Fix - If an empty array is passed to the v3 API for images, images should be unset. #23339
* Fix - Fix attribute renaming when dealing with unicode characters. #23132
* Fix - Preserve full-stops in external product URLs. #23196
* Fix - Add check for VAT exemption inside `display_prices_including_tax`. #23201
* Fix - Avoid post update in `wc_update_product_stock` to prevent product titles being updated. #23249
* Fix - Updated Back to Items link when editing attribute terms. #23238
* Fix - Network orders widget not showing orders when installed as a network plugin. #23270
* Fix - Correctly map attributes in CSV when the number is not at the end of the cell. #23251
* Fix - Fixed highlighting of Orders list item in My Account when looking at individual order. #23236
* Fix - Applies `wp_strip_all_tags` to the line item name when building PayPal request URL. #23297
* Fix - Non int value handling in `wc_let_to_num`. #23329
* Fix - Style span.description elements after select2 boxes. #23252
* Fix - Switch to subquery for sale products to prevent large query errors on some hosting environments. #23266
* Fix - Add offerCount to variable product structured data. #23349
* Fix - Cart widget - Allow title to be removed. #23370
* Fix - Prevent order data being escaped incorrectly on save when using quotes. #23380
* Fix - Prevent plugins causing notices by calling get_catalog_ordering_args incorrectly. #23451
* Fix - Product list view shipping class filter display correct products. #23446
* Fix - Twenty Seventeen On Sale badge hidden behind product image. #23450
* Fix - Correct postcode validation on my-account page. #23483
* Fix - Fixed compatibility with the Jetpack Beta Tester plugin when loading the Tracks client library. #23397
* Fix - Updated anchor for "How to create a child theme" with the correct target address in the Codex. #23469
* Tweak - Update action scheduler to version 2.2.5. #23489
* Tweak - Removed 2 old admin notices for featured moved in past versions. #23263
* Localization - Make the state/county field optional at checkout for Greece. #23365
= 3.6.1 - 2019-04-18 =
* Fix - Remove calls to 'header_register_callback' to prevent conflicts with some hosting providers and PHP versions.
= 3.6.0 - 2019-04-17 =
* Enhancement - Merged WooCommerce Gutenberg Products Block feature plugin. Adds blocks for the new editor, including
hand picked products, featured products, products by category/attribute, sale products, new products, top rated
products, and best selling products. #22954
* Enhancement - Only include order erasure bulk action if erasure is enabled in settings. #22354
* Enhancement - Customer notes containing URLs now automatically converts to clickable links. #21927
* Enhancement - Add increase and decrease stock options to bulk edit form. #22475
* Enhancement - Allow states in zones to be searched by country name. #22339
* Enhancement - Added registration success notices to account pages. #22650
* Enhancement - Store notice is visible again if the notice text is changed. #22645
* Enhancement - Add aria-label attribute to shop orderby selector to improve accessibility. #22683
* Enhancement - When adding, editing, and deleting items manually from orders, the corresponding product stock will be
updated to reflect the event and an order note will log the event. #22329
* Enhancement - Added suggestions for official extensions to Products, Edit Product and Orders screens.
* Enhancement - Store attribute values as post_excerpt for variations to support easier searching for variations. #22083
* Enhancement - Improved username generation and introduced wc_create_new_customer_username function. #23145
* Enhancement - Allow opting out of Marketplace Suggestions 23218
* Tweak - Generalize shipping estimate text on cart page. #22467
* Tweak - Include auto draft orders in order list filters. #22380
* Tweak - Only include the network orders widget on the main site dashboard. #22318
* Tweak - Only show available shipping continents when selecting shipping zone region. #22131
* Tweak - Use Shortcode block on default WooCommerce pages. #21817
* Tweak - Show full category hierarchy in product URLs when term IDs are not sequential. #22526
* Tweak - Make sure account and checkout endpoints only work under account and checkout pages. #22631
* Tweak - Show loading graphic when order form is submitted. #22664
* Tweak - Add alt text to gallery images #22863
* Tweak - Improved `display_name` generation during checkout. #22786
* Tweak - Send correct calling code and phone number to PayPal standard when using non-US addresses. #22693
* Tweak - Added tooltip to refund-amount input box and made it readonly when taxes are enabled. #22820
* Tweak - Remove admin alert for the WooCommerce Gutenberg Products Block feature plugin. #22982
* Tweak - Setup Wizard: support keyboard navigation to toggle on/off features. #22936
* Tweak - Set reply-to address for all emails. #22979
* Tweak - Setup wizard redirection improvements. #22977
* Tweak - Simplify display of discount amounts within orders. #22949
* Tewak - Remove Marketplace Suggestions from product listing page. #23211
* Template - Moved the order of rememberme checkboxes for accessibility so they tab in order. #21454
* Template - New structure for attributes template, including new `woocommerce_display_product_attributes` filter. #22480
* Template - Admin cancelled order email reworded. #22971
* Dev - Update action scheduler to version 2.2.2. #23162
* Dev - Update action scheduler to version 2.2.1. #23016
* Dev - Use ActionScheduler for database updates. Improved update notice. #22904
* Dev - Introduce `woocommerce_reviews_title` filter. #22216
* Dev - Added `woocommerce_cheque_process_payment_order_status` filter allowing plugins to change the order status to the Cheque gateway. #21402
* Dev - Add the current coupon object to the `woocommerce_get_shop_coupon_data` filter. #21442
* Dev - New filter `woocommerce_gallery_image_html_attachment_image_params` for manipulating gallery images. #22005
* Dev - New filter `woocommerce_widget_get_current_page_url` for manipulating links in widgets. #21537
* Dev - Move wc_get_template filter to allow plugins to register locations for template files that do not exist in WooCommerce core. #21764
* Dev - Add support for custom classes on global/quantity-input.php. #21553
* Dev - Pass product object to `woocommerce_add_to_cart_redirect` filter where appropriate. #22123
* Dev - Add support for forgetting the cart contents and user session when switching between accounts using the User Switching plugin. #21991
* Dev - Added a consistent form class to the Track Order Form. #21991
* Dev - Add $orderby and $order params to filter `woocommerce_get_catalog_ordering_args`. #22257
* Dev - Add new pre query filter to WC_Product_Data_Store_CPT::search_products(). #22165
* Dev - Added additional parameters to the `woocommerce_variation_option_name` filter. #21153
* Dev - Added new filter `woocommerce_get_min_max_price_meta_query`. #22255
* Dev - Added a filter to WC_REST_CRUD_Controller::get_collection_params method to allow developers to change params in
the same way as WP_Rest_Posts_controller::get_collection_params. #21562
* Dev - Add $zone param to woocommerce_shipping_zone_before_methods_table and woocommerce_shipping_zone_after_methods_table actions. #21961
* Dev - Added `woocommerce_geolocation_ajax_get_location_hash` filter. #22350
* Dev - Added `woocommerce_variation_prices_array` filter. #21003
* Dev - Added `wc_emptied_cart` javascript event when cart is emptied. #22469
* Dev - Switched `woocommerce_ordered_again` hook to ref_array. #22425
* Dev - `woocommerce_checkout_before_order_review_heading` action added in checkout form template. #22481
* Dev - Added `woocommerce_variation_header` hook in variations list. #21341
* Dev - Add a filter, woocommerce_current_user_can_edit_customer_meta_fields, to bypass manage_woocommerce when editing customer meta fields. #22277
* Dev - Adds filter on the return value of function 'get_item_tax_rates'. This gives developers the possibility to
prevent the mandatory caching of tax rates. #22488
* Dev - Add filters for mail callback in WC_Email::send method. #22394
* Dev - Add an instance method to WC_Admin_Taxonomies. #21884
* Dev - Added `woocommerce_order_is_pending_statuses` filter and `wc_get_is_pending_statuses` function. #22409
* Dev - Filter save_payment_method_checkbox to allow "Save to account" checkbox to be removed from the checkout form. #21859
* Dev - Added triggers to the gallery script to allow 3rd parties to run scripts before and after initialization. #22501
* Dev - Added `woocommerce_add_to_cart_qty_html` filter. #21069
* Dev - Prevent extract from polluting hook arguments in wc_get_template(). #21722
* Dev - Add `woocommerce_pre_remove_cart_item_from_session` hook to allow removal of cart items when the cart is loaded from the session. #22290
* Dev - Add `$attribute` to `woocommerce_product_option_terms` filter. #21648
* Dev - Added error handling and timeout to cart fragment ajax call. #21043
* Dev - Remove unused legacy 'woocommerce_lock_down_admin' option and use filter only instead. #17796
* Dev - Allow custom settings sections in the Shipping tab. #21719
* Dev - Update Emogrifier library to 2.1. #22342
* Dev - Moved core state codes to a single file. #22339
* Dev - Adds filter for product categories displayed by `product_categories` shortcode. #22571
* Dev - Moves cart hash calculation to WC_Cart class. #21050
* Dev - Removed deprecated Simplify gateway. #22410
* Dev - Added `woocommerce_paypal_force_one_line_item` filter to control how items are sent to PayPal. #22653
* Dev - Added `woocommerce_update_product_stock_query` to filter the direct sql query to update product stock. #22672
* Dev - Added `woocommerce_product_loop_title_classes` filter to modify product title loop classes. #22717
* Dev - Delay `woocommerce_loaded` hook until all plugins are loaded. #22536
* Dev - Added `woocommerce_product_price_class` filter to modify product price classes. #22748
* Dev - `woocommerce_product_stock_status_options` filter added for stock status options. #22834
* Dev - `woocommerce_before_cart_emptied` action before cart is emptied. #22846
* Dev - Added filters for shipping options - `woocommerce_shipping_ID_option` and `woocommerce_shipping_ID_instance_option`. #22771
* Dev - Refactor comment/rating update functions. #22909
* Dev - Introduced wc_sanitize_phone_number() function. #22962
* Dev - Added `woocommerce_get_product_subcategories_cache_key` filter to allow the cache to be renamed if for instance
the site runs in multiple languages and needs a unique cache per language. #22915
* Dev - Inactive, MU, Dropin plugins and WooCommerce.com account connection status added to System Status Report. #22887
* Dev - Make error handling consistent in payment processing for pay page and checkout. #22916
* Dev - Improved usage and event tracking (if opted in). #22955
* Dev - Pass class context to woocommerce_email_styles filter. #23027
* Fix - Use correct address for taxes when applying/removing coupons. #22802
* Fix - Hide ratings on the shop page when reviews are disabled. #22476
* Fix - Fix W3C validation of single product page quantity input. #22333
* Fix - Give product variations a unique guid after creation. #22324
* Fix - Deduct correct refunded amounts in calculated net daily sales export CSV. #22518
* Fix - Country sorting for stores which use a language that uses a lot of accented characters, e.g. Spanish. #22417
* Fix - Customer VAT exempt status now carries through to order when placed via checkout. #22458
* Fix - Handle full refunds for taxes by code report. #21843
* Fix - Option "Used for variations" should show only for variable products when saving attributes. #22524
* Fix - Allow pa_ in product attribute slugs. #22112
* Fix - Fix customer creation dates in API. #22269
* Fix - Get widget instance setting defaults so it shows in customiser before save. #22345
* Fix - PR state codes. #22339
* Fix - Allow selecting states from the Country / State drop-down for your store address when you have the option
enabled to sell to specific countries. #22339
* Fix - Restrict the price filter widget to filtering the main product query. #22621
* Fix - Default placeholder image resizing. #22443
* Fix - HTML tags should be stripped from description in Structured Data of Product. #22596
* Fix - For logged in customers, pull default address fields from customer object, not session object, to avoid incorrect mixes of data. #22392
* Fix - Misc tax rounding improvements. #22420
* Fix - Respect shop page subcategories setting when `page/N/` is added to the URL. #22589
* Fix - Check for decoded taxonomy name when unsetting product terms. #22740
* Fix - If date paid is not set but payment complete status has passed, set it. #22735
* Fix - Prevent webhooks for drafts, and correct create vs updated for manual orders. #22731
* Fix - Ignore invalid default customer locations. #22357
* Fix - The state select field was missing a placeholder. #22357
* Fix - Fix state field rendering when customer address is not in a valid selling country. #22357
* Fix - Correctly handle negative fees when using the REST API. #22782
* Fix - Make sure local_pickup taxes do not hang around when local_pickup is not available for the selected location during checkout. #22826
* Fix - Remove Plugin and Theme background installer hooks, cannot run as there are no events scheduled for it. #22799
* Fix - Trigger zoom if moving cursor over image quickly in product gallery. #22784
* Fix - PayPal: Add meta data, before changing order status. #22892
* Fix - Make price filter widget tax aware when you have excl prices entered but show prices incl of tax. #22540
* Fix - Loop attribute panels to disable options rather than look at values to prevent notices. #22891
* Fix - When deleting zone methods, also remove setting options. #22867
* Fix - Correctly show state fields after posting the edit address form. #22948
* Fix - Validate coupon usage limit for manual orders correctly before order is saved. #22980
* Fix - Make coupon code sanitization match post_title sanitization. #22945
* Fix - Ensure WC_Helper sees plugin activation events via CLI. #22972
* Fix - Setup wizard redirection improvements. #22977
* Fix - Correctly show stock status for products when manually creating an order in the admin. #22997
* Fix - After logging in update customer session ID. #23001
* Fix - Narrow viewport css in setup wizard. #23033
* Fix - Allow entering of date only ( no time ) when placing a singular product on sale. #22973
* Fix - Download link URL in helper. #23146
* Fix - Completed email wording update. #23128
* Fix - REST API: Allow filtering by future status #23138
* Fix - Update refund reason to make it clear process is manual. #23149
* Fix - Hide stock status for variations when the parent is managing stock. #23069
* Fix - Force variation product type in WC_Ajax::add_variation. #23131
* Fix - WooCommerce writes current_theme_supports_woocommerce option on every regular page view. #23035
* Fix - Update the rating request text in the footer to be friendlier for screen reader users. #23039
* Fix - Null check variable before accessing its properties on checkout page. #23047
* Fix - Recognize all input fields with ID for checkout fields. #23050
* Fix - Avoid regenerating thumbnails on every page load. #21800
* Fix - Changed 'private' methods on WC_Breadcrumb class to 'protected'. #23057
* Fix - Jumping to top of page when dismissing store notice. #23066
* Fix - Backwards compatibility issues with wc_get_template #23197
* Fix - Remove date restriction of Facebook Plugin feature in OBW #23210
* Fix - Updates to usage tracking logic #23231
* Fix - Add get_post_status helper method and ensure prefix gets added for most statuses #23203
* Fix - Add link to suggstions management #23229
* Fix - Make usage tracking opt-out text more clear #23216
* Fix - CSS Issues with suggestions display #23241
* Fix - Product search may fail to return valid results when using the 'include' flag to search within a limited set.
* Fix - Change aria-labelledby to aria-label on quantity input. #23186
* Performance - Product meta data lookup table used for sorting and slow queries. #22718
* Performance - Prime caches when reading variations. #22587
* Performance - Only include REST API classes and objects during `rest_api_init` hook. #22615
* Performance - Improved how versioned transients are set/cleanup to avoid cron. #22511
* Performance - Optimized product CSS class functions to avoid multiple product reads and duplication. #22610
* Performance - Improved caching of template loader, product types, and layered nav widget. #22612
* Performance - Remove external lookup of IP addresses on localhost. #22608
* Performance - Improved speed of the `find_matching_product_variation` variation lookup function. #22423
* Performance - Prevent frontend code from being loaded during REST API. #21090
* Performance - Load only active webhooks on pages and allow limits to be set by developers. #22760
* Performance - Index on downloadable_product_permissions to improve speed when fetching downloads for customers. #22906
* Performance - Improved term ordering queries, making the sorting apply by default via the DB query rather than sorting
all terms with PHP. Removed legacy term meta table usage. #22570
* Performance - Use day, not time, in status widget for caching. #22950
* Performance - Improve slow term ordering by using queries instead of php. #22570
* Performance - Removes legacy woocomerce_termmeta table and swap out all calls to legacy term meta functions to the new WP ones. #22570
* Performance - Apply term sorting using get_terms_defaults hook instead of custom parameters. #22570
* Performance - Use pre_get_terms hook to detect menu_order sorting param and apply to the term query. Meta sorting is now possible through WP. #22570
* Performance - Use terms_clauses hook to support numeric name sorting and to improve the menu order sorting so it works if meta is missing. #22570
* Performance - Added caching to System Status Report. #22887
* Performance - Delete empty meta on update in data-stores. #22773
* Performance - Image regeneration edge cases. #22818
* Performance - Dont query for an order count unnecessarily. #22984
* Performance - Add caching to attribute functions. #22938
* Performance - Add ability to run product lookup table updates via WP CLI. #23031
* Localization - Modify administrative regions of Greece to default to their english ISO 3166-2 names, instead of using the native GR names. #21945
* Localization - Added US Minor Outlying Islands as states to avoid confusion with US. #22468
* Localization - Dutch postcode validation. #22316
* Localization - Made municipality address field optional for Latvia. #22487
* Localization - Added new Venezuelan currency Bs S. #22435
* Localization - Added Danish locale. #22495
* Localization - Update Peruvian currency. #22602
* Localization - Update CA address format. #22692
* Localization - Updated JP field order. #22774
= 3.5.8 - 2019-04-16 =
* Security - Added escaping for states on the user profile screen.
* Security - Added escaping for PhotoSwipe captions.
* Security - Added escaping for SelectWoo selected options.
= 3.5.7 - 2019-03-19 =
* Security - Improved the way in which state fields are regenerated by JavaScript to ensure values are properly escaped.
= 3.5.6 - 2019-03-07 =
* Fix - Removes invalid product structured data from archives, and include more data on single product pages. #22925
Product structured data should only be generated for visible data, and not on archives when there are single
product pages available, as per the documentation.
Since this change removes structured data from archives, the filters `woocommerce_structured_data_product_limit`
and `woocommerce_structured_data_product_limited` have also been removed.
To customize product structured data, for example adding custom fields or include on archives, see this article:
https://github.com/woocommerce/woocommerce/wiki/Structured-data-for-products.
* Fix - Fix last item in breadcrumb structured data, and include on shop page. #22925
* Fix - Get insert ID before running actions in `_insert_tax_rate`. #22868
* Fix - Add precision to tax in the discount class so min spend checks work correctly. #22888
* Fix - Update troubleshooting link in failed order email. #22943
* Fix - Update Flexslider to 2.7.2.
* Fix - Fill user's account first name and last name only when those fields are empty. #22783
= 3.5.5 - 2019-02-20 =
* Fix - Fix allow product low stock threshold be the WC settings default. #22777
* Fix - Fix error on product category when sorting by multiple fields. #22066
* Fix - Recalculate coupon totals after adding a coupon to an order. #22580
* Fix - Include refunded orders in top sellers, earners sales by product. #22581
* Fix - Fix issue where "Any" attributes on variable products not always selectable on front end. #22067
* Fix - Ensure partial refunds fire order.updated webhooks. #22072
* Fix - Reload the cart page when the cart is empty. #22114
* Fix - Always show the price filter widget when filtering products by price. #22303
* Fix - Added body `{padding: 0;}` CSS rule to the email-styles.php to fix the iOS emails layout issue. #22309
* Fix - Update variable product default attributes to reflect attribute terms slug edit. #22398
* Fix - Adds all 3 callback arguments to the `woocommerce_order_item_display_meta_value` filter called from the `get_formatted_legacy` method of the WC_Order_Item_Meta class. #22411
* Fix - Remove html from add coupon error alert during manual order entry. #22424
* Fix - Include tax in subtotals when validating coupon minimum and maximum in manual order entry. #22464
* Fix - Fix ssl check in case shop page no longer exists. #22531
* Fix - Exclude `paged` from price slider and rating filter. #22533
* Fix - Limit bulk variation percentage price adjustment to decimal places in pricing settings. #22537
* Fix - Fix category image `name` field to be used for API POST/PUT. #22553
* Fix - Fix remote request test in `get_environment_info()`. #22551
* Fix - Fix notices when images have no metadata or their metadata is removed. #22562
* Fix - Check for presence of 'save' entry in post data when determining whether to save settings. #22572
* Fix - Additional CSS support for more input types on variations panel in admin. #22590
* Fix - Over escaping rating widget html. #22593
* Fix - Update cron sale price removal to remove the price at midnight after the sale ends. #22609
* Fix - WC_Log_Handler_File::remove - fix for MS Windows #22624
* Fix - Only require flat shipping rate when shipping method is enabled in the On-Boarding Wizard. #22599
* Fix - Fix wrong variable check in `add_uncropped_metadata`. #22638
* Fix - No alert for mis-matched password reset. #22642
* Fix - Hold-stock behavior between simple products and variable products was different. #22646
* Fix - OBW: Offer Storefront when WP 5.0 default theme is active #22649
* Fix - Add novalidate attribute to payment form to prevent hidden fields preventing submission. #22662
* Fix - Switch span to paragraph for descriptions in admin user profile view to correct spacing. #22663
* Fix - Added POST variable check in product data meta box. #22681
* Fix - PayPal item name encoding. #22684
* Fix - Move PayPal BN partner ID. #22763
* Fix - The "for" attribute of a label for a radio input is invalid in `woocommerce_form_field`. #22690
* Fix - Custom payment options sections was not loading settings. #22704
* Fix - Breadcrumbs on custom post types was using the singular name instead of plural. #22705
* Fix - Fixed generate webhook signature when secret contains special chars. #22722
* Fix - Set correct item meta after restocking items with refunds. #22729
* Fix - Sales by Product to consistently calculate net sales counts and amounts. #22711
* Fix - Importer - Variations cannot be drafts so set to private. #22736
* Fix - Next/previous links for orders REST endpoint when `status` query parameter is present. #22741
* Fix - Default value passed to sorting dropdown #22677
* Tweak - Updates Mailchimp branding in setup wizard. #22514
* Tweak - Refactor `@id` generation for product structured data to prevent plugin conflicts. #22554
* Tweak - Keep count of the number of times custom coupons apply. #22529
* Tweak - Change WooCommerce emails footer from `Powered by WooCommerce` to `Built with WooCommerce`. #22530
* Security - Improved escaping for Photoswipe captions.
* Security - Improved escaping for JSON attributes and structured data.
= 3.5.4 - 2019-01-21 =
* Tweak - Allow limited html in woocommerce_rating_filter_count filter. #21904
* Tweak - Remove 'on-hold' orders from admin tax reports for more logical reporting. #22419
* Tweak - Remove payment phrases from processing emails. #22418
* Tweak - Removed display of cost for local pickup when free. #22446
* Fix - Unescape CSV formulas in product attributes in CSV importer/exporter. #21938
* Fix - Remove use of non-existing `WC_REST_Dev_Setting_Options_Controller` class. #22121
* Fix - Fix edge case where `get_plugins` would not have the custom WooCommerce plugin headers if `get_plugins` was called early. #21669
* Fix - Prevent PHP warning when deprecated user meta starts with uppercase. #21943
* Fix - Fixed support for multiple query parameters translated to meta queries via REST API requests. #22108
* Fix - Prevent PHP errors when trying to access non-existant report tabs. #22183
* Fix - Filter by attributes dropdown placeholder text should not be wrapped in quotes. #22185
* Fix - Apply sale price until end of closing sale date. #22189
* Fix - Allow empty schema again when registering a custom field for the API. #22204
* Fix - Don't display escaped html on checkout when javascript is disabled. #22214
* Fix - Fixed formatted address in uppercase for languages that use accents. #22096
* Fix - Reload the cart page when the cart is empty when there is a hash in the URL. #22114
* Fix - Do not schedule duplicate webhooks within 10 minutes of each other to maintain previous behavior. #22088
* Fix - Return correct next scheduled date for items in queue by fixing date instantiation in WC_Action_Queue::get_next(). #22104
* Fix - Allow products to use default low stock threshold. #22084
* Fix - Fix 0 value attribute permalink calculation, property population in REST api. #22026
* Fix - Ensure cache delete on coupon trash or delete. #22053
* Fix - Ensure product parent exists before getting its image. #22074
* Fix - Correctly use wildcard character on email restrictions on coupons. #22167
* Fix - Avoids Warnings in Action Scheduler Library for PHP 5.2. #22160
* Fix - Don't include product in BreadcrumbList structured data so Google will recognize stand-alone Product structured data. #22344
* Fix - Fix Product widget showing hidden products when hide out of stock was enabled. #22230
* Fix - Run webhook status updates through new wc_is_webhook_valid_status functions when doing API requests. #22205
* Fix - Correct quote handling in tax class names. #22270
* Fix - Prevent style side-effects on notices on the Extensions pages. #22330
* Fix - Check stock status of items when 'ordering again' from the account page. #22331
* Fix - Improve rounding when rounding at subtotal level in cart. #21217
* Fix - Restores an opportunity to print non-cart related notices that a few extensions are relying on. #22337
* Fix - Correct order item meta alignment in order emails when using an RTL language. #22376
* Fix - Fix bug where product status was erroneously going to draft status in some circumstances on new published variable products. #20667
* Fix - Load customer data for logged in users regardless of being member of sub-site to avoid errors. #22448
* Fix - Use slug sanitization on product export category slugs for better foreign character support. #22320
* Fix - Correct item subtotal rounding when multiple taxes are applied so it matches the cart. #22416
* Fix - Prevent fatal errors when retrieving network orders for sites that do not have WooCommerce activated. #22439
* Fix - Numerous bug fixes around checkout field locales on first load. #22444
* Fix - Correct position of admin notices on my-account pages. #22445
* Fix - Fixed padding of addresses in email template. #22466
* Fix - Prevent payment method descriptions sliding up/down if selected after ajax updates. #22459
* Fix - Fixed formatted address in uppercase for languages that use accents. #22096
* Fix - Fix product updating on import for SKUs with special characters. #22071
* Fix - Ensure cache_delete on coupon deletion. #22053
* Fix - Make product edit form aware publish was pressed. #20667
* Fix - Unescape imported CSV formulas in product attributes. #21938
* Fix - Warning when deprecated user meta starts with uppercase. #21943
* Fix - Filter out buttons from the onRowClick event on the Orders list view page. #21966
* Fix - Update "Filter Products by Attribute" widget when product stock quantity changes via "Quick Edit" or WC API. #22029
* Fix - Ensure product parent exists before getting its image. #22074
* Fix - Fixed support for multiple query parameters translated to meta queries via REST API requests. #22108
* Fix - Strip hash from URL when reload refunds in the dashboard. #22116
* Fix - Prevent notice when using non existing value for tabs in WooCommerce > Reports > Stock. #22183
* Fix - Filter by attributes dropdown placeholder text wrapped in quotes. #22185
* Fix - Fix escaped html on checkout when javascript is disabled. #22214
* Fix - Allow empty schema again when registering a custom field for the API. #22204
* Fix - Fix import & export of newline characters in product description fields. #22298
* Fix - Allow quotes in tax class names. #22270
* Fix - Sale price applies to end of closing sale date. #22189
* Fix - Product export by unicode product categories. #22320
* Fix - Check stock status of items when 'ordering again' from the account page. #22331
* Fix - Issue where images offloaded to external servers caused errors and broken images when changing aspect ratios. #22461
* Fix - Remove block comments from shop page description. #22334
* Dev - REST API - 0 value attribute permalink calculation, property population in REST api. #22026
* Dev - REST API - Fixed support to order results by slugs. #22168
* Dev - REST API - Removed extra inherited filters from product endpoint in variations endpoint. #22452
= 3.5.3 - 2018-12-20 =
* Fix - Fix orders list in the admin after a change introduced in WordPress 5.0.2. #22273
= 3.5.2 - 2018-11-29 =
* Enhancement - Added compatibility for Twenty Nineteen theme. #21970
* Update - Prepare WooCommerce for PHP 7.3. #22009
* Tweak - Updates the signature field type to "password" in PayPal settings for increased security. #21715
* Tweak - Change the filter name in the /myaccount/lost-password-confirmation.php template to differentiate between other filter with same name and different message. #21829
* Tweak - Reintroduce Preview button by popular demand with the understanding that the Preview will only work on some product fields. It was removed from pubished products in 3.5.0 to prevent confusion. #21838
* Tweak - Add tool to systems status tools for running the DB update routine. #21923
* Tweak - Revert default behavior for `woocommerce_formatted_address_force_country_display` filter to maintain backwards compatibility. #21865
* Tweak - Update products block notice for WP 5.0. #21930
* Tweak - Use wp_kses_post instead of esc_html for sanitizing product titles to allow minimal HTML in product titles. #21936
* Tweak - Use dedicated woocommerce_add_order_again_cart_item to filter cart item data when ordering again. Prevents issues with applying woocommerce_add_cart_item out of context. #21947
* Tweak - Remove postal code for Angola, São Tomé and Príncipe since they don't use postal codes and update locale info. #21984 #21985 #21987
* Fix - Metadata with array key of 0 can save properly. #21641
* Fix - Prevent deleting the default product category via REST API. #21696
* Fix - Fix 'Table does not exist' messages on System Status Report in multisite. #21706
* Fix - Add dynamic SSL check to dashboard SSL notice to prevent misdiagnosing that sites aren't set up with SSL. #21738
* Fix - Don't show escaped HTML in admin order item details for fees. #21769
* Fix - Don't include draft variable products in on sale product results. #21778
* Fix - Add woocommerce_hold_stock_minutes check back to stock check in cart/checkout. #21797 #22050
* Fix - Fix potential undefined index notice on checkout fields when comparing the sort order. #21801
* Fix - Throw an error when trying to set a variation as the parent of a variation in the CSV importer. #21810
* Fix - Make "account erasure request" text translatable. #21812
* Fix - Display notices on Order Pay page. #21821
* Fix - Fix tax rate uploading by file path. #21831
* Fix - Make wc_download_log_permission_id constraint creation work better on multisites and multiple sites using the same DB. #21836 #21940
* Fix - Don't render undecoded HTML entities in variations dimensions. #21844
* Fix - Do not check for stock when not managing stock or have backorders enabled when paying through the order-pay page. #21849
* Fix - Apply priority field sorting on additional filters to make it apply on the edit address pages as well. #21856
* Fix - Fix export and edit of attribute labels with html encoded special characters in product CSV exporter. #21864
* Fix - Prevent fatal error when rendering plaintext customer invoice email. #21879
* Fix - Prevent fatal error when delivering webhooks using v3 API. #21921
* Fix - Prevent undefined variable notice in wc_increase_stock_levels. #21928
* Fix - Fix overescaping image output on product widget. #21929
* Fix - Croatian Kuna symbol should be lowercase. #21934
* Fix - Fixed an error when deleting logged entries when using the 'WC_Log_Handler_DB' handler. #21949
* Fix - Update ShipStation plugin info so install works through setup wizard. #21953
* Fix - Use dynamic DB table name in product list table shipping class query. #21954
* Fix - Log file date/time should be in UTC and not site timezone as per the +00:00:00 string appended to it. #21981
* Fix - Set customer's country to selling country when only selling to one country and default customer location is 'none'. #21995
* Fix - Change new account email copy to be compatible with auto-generated accounts. #21999
* Fix - Correct Aria-Labelledby attribute for quantity selectors. #22000
* Fix - Show notices on lost password page. #22001
* Fix - Fix authentication errors when using the REST API with 3rd-party authentication. #22013
* Fix - Fix issues where potentially not all active plugins were included on the system status report. #22057
* Fix - Make PDT validation use the same rounding as the IPN validation to prevent erroneous totals mismatch. #21729
= 3.5.1 - 2018-10-31 =
* Fix - Use CRUD method to get product images to fix custom tables missing images. #21608
* Fix - Use HTML entity for times sign when outputting dimensions to fix RTL support. #21633
* Fix - Fix India address format to look nice in the shipping calculator. #21647
* Fix - Don't default gallery variation images to gallery thumbnail size if flexslider is disabled. #21655
* Fix - Revert show shipping behavior change to prevent missing shipping line on Cart page. #21658
* Fix - Removed non-existing WC_Product_Simple->set_date_created_gmt method. #21675
* Fix - Use correct comment_type when fetching recent reviews for widget. #21689
* Fix - Do not include strong tags as part of translation string on subscriptions disconnect message. #21690
* Fix - Make it possible to send webhooks with the v3 API. #21745
* Fix - Fix get_cart_from_session infinite loop when filters used. #21749
* Fix - Use array instead of string to define class for address line 2 input on checkout. #21757
* Fix - Make checkout fields priority work correctly again. #21763
* Tweak - Remove mentions of deprecated live shipping rates from setup wizard. #21645
* Tweak- Update product block editor hook for WP 5.0. #21703
* Tweak - Merged similar strings to reduce number of translateable strings. #21704
* Tweak - Remove hated "Over to you" text from emails. #21709
* Tweak - Revert problematiic customer as post author change. #21740
= 3.5.0 - 2018-10-17 =
* Feature - REST API v3. #20111
* Feature - Option has been added on the inventory tab of the edit product page to set a low stock threshold for individual products. #20260
@ -3043,7 +3900,7 @@
* Feature - Allow setting the product post type slug to a static (non-translatable) text, mainly to be used for translating and WPML setups.
* Feature - Added lost password shortcode / email notification (thanks Max Rice).
* Feature - Simplified permalink/base settings now found in Settings > Permalinks.
* Feature - Support more permalink structures (from https://codex.wordpress.org/Using_Permalinks)
* Feature - Support more permalink structures (from https://wordpress.org/support/article/using-permalinks/)
* Feature - Added option to resend order emails, checkboxes select which one.
* Feature - New layered nav current filters widget. This lists active filters from all layered nav for de-selection.
* Feature - Added the option to sell products individually (only allow 1 in the cart).

1
Dockerfile Normal file
View File

@ -0,0 +1 @@
FROM wordpress:5.3.2

View File

@ -1,6 +1,7 @@
/* jshint node:true */
module.exports = function( grunt ) {
'use strict';
var sass = require( 'node-sass' );
grunt.initConfig({
@ -9,7 +10,8 @@ module.exports = function( grunt ) {
css: 'assets/css',
fonts: 'assets/fonts',
images: 'assets/images',
js: 'assets/js'
js: 'assets/js',
php: 'includes'
},
// JavaScript linting with JSHint.
@ -18,13 +20,10 @@ module.exports = function( grunt ) {
jshintrc: '.jshintrc'
},
all: [
'Gruntfile.js',
'<%= dirs.js %>/admin/*.js',
'!<%= dirs.js %>/admin/*.min.js',
'<%= dirs.js %>/frontend/*.js',
'!<%= dirs.js %>/frontend/*.min.js',
'includes/gateways/simplify-commerce/assets/js/*.js',
'!includes/gateways/simplify-commerce/assets/js/*.min.js'
'!<%= dirs.js %>/frontend/*.min.js'
]
},
@ -75,9 +74,13 @@ module.exports = function( grunt ) {
'<%= dirs.js %>/jquery-flot/jquery.flot.time.min.js': ['<%= dirs.js %>/jquery-flot/jquery.flot.time.js'],
'<%= dirs.js %>/jquery-payment/jquery.payment.min.js': ['<%= dirs.js %>/jquery-payment/jquery.payment.js'],
'<%= dirs.js %>/jquery-qrcode/jquery.qrcode.min.js': ['<%= dirs.js %>/jquery-qrcode/jquery.qrcode.js'],
'<%= dirs.js %>/jquery-serializejson/jquery.serializejson.min.js': ['<%= dirs.js %>/jquery-serializejson/jquery.serializejson.js'],
'<%= dirs.js %>/jquery-serializejson/jquery.serializejson.min.js': [
'<%= dirs.js %>/jquery-serializejson/jquery.serializejson.js'
],
'<%= dirs.js %>/jquery-tiptip/jquery.tipTip.min.js': ['<%= dirs.js %>/jquery-tiptip/jquery.tipTip.js'],
'<%= dirs.js %>/jquery-ui-touch-punch/jquery-ui-touch-punch.min.js': ['<%= dirs.js %>/jquery-ui-touch-punch/jquery-ui-touch-punch.js'],
'<%= dirs.js %>/jquery-ui-touch-punch/jquery-ui-touch-punch.min.js': [
'<%= dirs.js %>/jquery-ui-touch-punch/jquery-ui-touch-punch.js'
],
'<%= dirs.js %>/prettyPhoto/jquery.prettyPhoto.init.min.js': ['<%= dirs.js %>/prettyPhoto/jquery.prettyPhoto.init.js'],
'<%= dirs.js %>/prettyPhoto/jquery.prettyPhoto.min.js': ['<%= dirs.js %>/prettyPhoto/jquery.prettyPhoto.js'],
'<%= dirs.js %>/flexslider/jquery.flexslider.min.js': ['<%= dirs.js %>/flexslider/jquery.flexslider.js'],
@ -85,6 +88,8 @@ module.exports = function( grunt ) {
'<%= dirs.js %>/photoswipe/photoswipe.min.js': ['<%= dirs.js %>/photoswipe/photoswipe.js'],
'<%= dirs.js %>/photoswipe/photoswipe-ui-default.min.js': ['<%= dirs.js %>/photoswipe/photoswipe-ui-default.js'],
'<%= dirs.js %>/round/round.min.js': ['<%= dirs.js %>/round/round.js'],
'<%= dirs.js %>/selectWoo/selectWoo.full.min.js': ['<%= dirs.js %>/selectWoo/selectWoo.full.js'],
'<%= dirs.js %>/selectWoo/selectWoo.min.js': ['<%= dirs.js %>/selectWoo/selectWoo.js'],
'<%= dirs.js %>/stupidtable/stupidtable.min.js': ['<%= dirs.js %>/stupidtable/stupidtable.js'],
'<%= dirs.js %>/zeroclipboard/jquery.zeroclipboard.min.js': ['<%= dirs.js %>/zeroclipboard/jquery.zeroclipboard.js']
}
@ -112,6 +117,7 @@ module.exports = function( grunt ) {
sass: {
compile: {
options: {
implementation: sass,
sourceMap: 'none'
},
files: [{
@ -142,11 +148,29 @@ module.exports = function( grunt ) {
// Minify all .css files.
cssmin: {
minify: {
expand: true,
cwd: '<%= dirs.css %>/',
src: ['*.css'],
dest: '<%= dirs.css %>/',
ext: '.css'
files: [
{
expand: true,
cwd: '<%= dirs.css %>/',
src: ['*.css'],
dest: '<%= dirs.css %>/',
ext: '.css'
},
{
expand: true,
cwd: '<%= dirs.css %>/photoswipe/',
src: ['*.css', '!*.min.css'],
dest: '<%= dirs.css %>/photoswipe/',
ext: '.min.css'
},
{
expand: true,
cwd: '<%= dirs.css %>/photoswipe/default-skin/',
src: ['*.css', '!*.min.css'],
dest: '<%= dirs.css %>/photoswipe/default-skin/',
ext: '.min.css'
}
]
}
},
@ -177,77 +201,12 @@ module.exports = function( grunt ) {
}
},
// Generate POT files.
makepot: {
options: {
type: 'wp-plugin',
domainPath: 'i18n/languages',
potHeaders: {
'report-msgid-bugs-to': 'https://github.com/woocommerce/woocommerce/issues',
'language-team': 'LANGUAGE <EMAIL@ADDRESS>'
}
},
dist: {
options: {
potFilename: 'woocommerce.pot',
exclude: [
'apigen/.*',
'vendor/.*',
'tests/.*',
'tmp/.*'
]
}
}
},
// Check textdomain errors.
checktextdomain: {
options:{
text_domain: 'woocommerce',
keywords: [
'__:1,2d',
'_e:1,2d',
'_x:1,2c,3d',
'esc_html__:1,2d',
'esc_html_e:1,2d',
'esc_html_x:1,2c,3d',
'esc_attr__:1,2d',
'esc_attr_e:1,2d',
'esc_attr_x:1,2c,3d',
'_ex:1,2c,3d',
'_n:1,2,4d',
'_nx:1,2,4c,5d',
'_n_noop:1,2,3d',
'_nx_noop:1,2,3c,4d'
]
},
files: {
src: [
'**/*.php', // Include all files
'!apigen/**', // Exclude apigen/
'!includes/libraries/**', // Exclude libraries/
'!node_modules/**', // Exclude node_modules/
'!tests/**', // Exclude tests/
'!vendor/**', // Exclude vendor/
'!tmp/**' // Exclude tmp/
],
expand: true
}
},
// Exec shell commands.
shell: {
options: {
stdout: true,
stderr: true
},
apidocs: {
command: [
'vendor/bin/apigen generate -q',
'cd apigen',
'php hook-docs.php'
].join( '&&' )
},
e2e_test: {
command: 'npm run --silent test:single tests/e2e-tests/' + grunt.option( 'file' )
},
@ -260,7 +219,9 @@ module.exports = function( grunt ) {
contributors: {
command: [
'echo "Generating contributor list since <%= fromDate %>"',
'./node_modules/.bin/githubcontrib --owner woocommerce --repo woocommerce --fromDate <%= fromDate %> --authToken <%= authToken %> --cols 6 --sortBy contributions --format md --sortOrder desc --showlogin true > contributors.md'
'./node_modules/.bin/githubcontrib --owner woocommerce --repo woocommerce --fromDate <%= fromDate %>' +
' --authToken <%= authToken %> --cols 6 --sortBy contributions --format md --sortOrder desc' +
' --showlogin true --sha <%= sha %> --filter renovate-bot > contributors.md'
].join( '&&' )
}
},
@ -274,23 +235,22 @@ module.exports = function( grunt ) {
type: 'input',
message: 'What date (YYYY-MM-DD) should we get contributions since?'
},
{
config: 'sha',
type: 'input',
message: 'What branch should we get contributors from?'
},
{
config: 'authToken',
type: 'input',
message: '(optional) Provide a personal access token. This will allow 5000 requests per hour rather than 60 - use if nothing is generated.'
message: '(optional) Provide a personal access token.' +
' This will allow 5000 requests per hour rather than 60 - use if nothing is generated.'
}
]
}
}
},
// Clean the directory.
clean: {
apidocs: {
src: [ 'wc-apidocs' ]
}
},
// PHP Code Sniffer.
phpcs: {
options: {
@ -298,15 +258,13 @@ module.exports = function( grunt ) {
},
dist: {
src: [
'**/*.php', // Include all files
'!apigen/**', // Exclude apigen/
'!includes/api/legacy/**', // Exclude legacy REST API
'!includes/gateways/simplify-commerce/includes/Simplify/**', // Exclude simplify commerce SDK
'!includes/libraries/**', // Exclude libraries/
'!node_modules/**', // Exclude node_modules/
'!tests/cli/**', // Exclude tests/cli/
'!tmp/**', // Exclude tmp/
'!vendor/**' // Exclude vendor/
'**/*.php', // Include all php files.
'!includes/api/legacy/**',
'!includes/libraries/**',
'!node_modules/**',
'!tests/cli/**',
'!tmp/**',
'!vendor/**'
]
}
},
@ -315,13 +273,7 @@ module.exports = function( grunt ) {
postcss: {
options: {
processors: [
require( 'autoprefixer' )({
browsers: [
'> 0.1%',
'ie 8',
'ie 9'
]
})
require( 'autoprefixer' )
]
},
dist: {
@ -339,12 +291,11 @@ module.exports = function( grunt ) {
grunt.loadNpmTasks( 'grunt-rtlcss' );
grunt.loadNpmTasks( 'grunt-postcss' );
grunt.loadNpmTasks( 'grunt-stylelint' );
grunt.loadNpmTasks( 'grunt-wp-i18n' );
grunt.loadNpmTasks( 'grunt-checktextdomain' );
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
grunt.loadNpmTasks( 'grunt-contrib-concat' );
grunt.loadNpmTasks( 'grunt-contrib-copy' );
grunt.loadNpmTasks( 'grunt-contrib-watch' );
grunt.loadNpmTasks( 'grunt-contrib-clean' );
grunt.loadNpmTasks( 'grunt-prompt' );
@ -352,15 +303,13 @@ module.exports = function( grunt ) {
// Register tasks.
grunt.registerTask( 'default', [
'js',
'css',
'i18n'
'css'
]);
grunt.registerTask( 'js', [
'jshint',
'uglify:admin',
'uglify:frontend',
'uglify:flexslider'
'uglify:frontend'
]);
grunt.registerTask( 'css', [
@ -371,9 +320,16 @@ module.exports = function( grunt ) {
'concat'
]);
grunt.registerTask( 'docs', [
'clean:apidocs',
'shell:apidocs'
grunt.registerTask( 'assets', [
'js',
'css'
]);
grunt.registerTask( 'e2e-build', [
'uglify:admin',
'uglify:frontend',
'uglify:flexslider',
'css'
]);
grunt.registerTask( 'contributors', [
@ -386,11 +342,6 @@ module.exports = function( grunt ) {
'default'
]);
grunt.registerTask( 'i18n', [
'checktextdomain',
'makepot'
]);
grunt.registerTask( 'e2e-tests', [
'shell:e2e_tests'
]);

View File

@ -16,6 +16,7 @@ If you are not a developer, please use the [WooCommerce plugin page](https://wor
## Documentation
* [WooCommerce Documentation](https://docs.woocommerce.com/documentation/plugins/woocommerce/)
* [WooCommerce Developer Documentation](https://github.com/woocommerce/woocommerce/wiki)
* [WooCommerce Code Reference](https://docs.woocommerce.com/wc-apidocs/)
* [WooCommerce REST API Docs](https://woocommerce.github.io/woocommerce-rest-api-docs/)
@ -25,13 +26,13 @@ To disclose a security issue to our team, [please submit a report via HackerOne
## Support
This repository is not suitable for support. Please don't use our issue tracker for support requests, but for core WooCommerce issues only. Support can take place through the appropriate channels:
* The [WooCommerce premium support portal](https://woocommerce.com/my-account/create-a-ticket/) for customers who have purchased themes or extensions.
* If you have a problem, you may want to start with the [self help guide](https://docs.woocommerce.com/document/woocommerce-self-service-guide/).
* The [WooCommerce.com premium support portal](https://woocommerce.com/contact-us/ ) for customers who have purchased themes or extensions.
* [Our community forum on wp.org](https://wordpress.org/support/plugin/woocommerce) which is available for all WooCommerce users.
* The WooCommerce Help and Share Facebook group.
* For customizations, you may want to check our list of [WooExperts](https://woocommerce.com/experts/) or [Codeable](https://codeable.io/).
Support requests in issues on this repository will be closed on sight.
## Contributing to WooCommerce
If you have a patch or have stumbled upon an issue with WooCommerce core, you can contribute this back to the code. Please read our [contributor guidelines](https://github.com/woocommerce/woocommerce/blob/master/.github/CONTRIBUTING.md) for more information how you can do this.
## Contributing new features to the WooCommerce REST API
If you'd like to add a feature to the next version of the REST API, contribute here: https://github.com/woocommerce/wc-api-dev

View File

@ -1,20 +0,0 @@
destination: wc-apidocs
templateConfig: apigen/theme-woocommerce/config.neon
extensions: [php]
source:
- woocommerce.php
- includes
exclude:
- includes/libraries/
- includes/api/legacy/
charset: [UTF-8]
main: WC
title: WooCommerce Code Reference
baseUrl: https://docs.woocommerce.com/wc-apidocs/
templateTheme: default
php: false
sourceCode: true
tree: true
deprecated: true
todo: true
download: false

View File

@ -1,226 +0,0 @@
<?php
/**
* Generate documentation for hooks in WC
*/
class WC_HookFinder {
private static $current_file = '';
private static $files_to_scan = array();
private static $pattern_custom_actions = '/do_action(.*?);/i';
private static $pattern_custom_filters = '/apply_filters(.*?);/i';
private static $found_files = array();
private static $custom_hooks_found = '';
private static function get_files( $pattern, $flags = 0, $path = '' ) {
if ( ! $path && ( $dir = dirname( $pattern ) ) != '.' ) {
if ( '\\' == $dir || '/' == $dir ) {
$dir = '';
}
return self::get_files( basename( $pattern ), $flags, $dir . '/' );
} // End IF Statement
$paths = glob( $path . '*', GLOB_ONLYDIR | GLOB_NOSORT );
$files = glob( $path . $pattern, $flags );
if ( is_array( $paths ) ) {
foreach ( $paths as $p ) {
$found_files = array();
$retrieved_files = (array) self::get_files( $pattern, $flags, $p . '/' );
foreach ( $retrieved_files as $file ) {
if ( ! in_array( $file, self::$found_files ) ) {
$found_files[] = $file;
}
}
self::$found_files = array_merge( self::$found_files, $found_files );
if ( is_array( $files ) && is_array( $found_files ) ) {
$files = array_merge( $files, $found_files );
}
} // End FOREACH Loop
}
return $files;
}
private static function get_hook_link( $hook, $details = array() ) {
if ( ! empty( $details['class'] ) ) {
$link = 'http://docs.woocommerce.com/wc-apidocs/source-class-' . $details['class'] . '.html#' . $details['line'];
} elseif ( ! empty( $details['function'] ) ) {
$link = 'http://docs.woocommerce.com/wc-apidocs/source-function-' . $details['function'] . '.html#' . $details['line'];
} else {
$link = 'https://github.com/woocommerce/woocommerce/search?utf8=%E2%9C%93&q=' . $hook;
}
return '<a href="' . $link . '">' . $hook . '</a>';
}
public static function process_hooks() {
self::$files_to_scan = array();
self::$files_to_scan['Template Files'] = self::get_files( '*.php', GLOB_MARK, '../templates/' );
self::$files_to_scan['Template Functions'] = array( '../includes/wc-template-functions.php', '../includes/wc-template-hooks.php' );
self::$files_to_scan['Shortcodes'] = self::get_files( '*.php', GLOB_MARK, '../includes/shortcodes/' );
self::$files_to_scan['Widgets'] = self::get_files( '*.php', GLOB_MARK, '../includes/widgets/' );
self::$files_to_scan['Data Stores'] = self::get_files( '*.php', GLOB_MARK, '../includes/data-stores' );
self::$files_to_scan['Core Classes'] = array_merge(
self::get_files( '*.php', GLOB_MARK, '../includes/' ),
self::get_files( '*.php', GLOB_MARK, '../includes/abstracts/' ),
self::get_files( '*.php', GLOB_MARK, '../includes/customizer/' ),
self::get_files( '*.php', GLOB_MARK, '../includes/emails/' ),
self::get_files( '*.php', GLOB_MARK, '../includes/export/' ),
self::get_files( '*.php', GLOB_MARK, '../includes/gateways/' ),
self::get_files( '*.php', GLOB_MARK, '../includes/import/' ),
self::get_files( '*.php', GLOB_MARK, '../includes/shipping/' )
);
self::$files_to_scan = array_filter( self::$files_to_scan );
$scanned = array();
ob_start();
$index = array();
foreach ( self::$files_to_scan as $heading => $files ) {
$index[] = '<a href="#hooks-' . str_replace( ' ', '-', strtolower( $heading ) ) . '">' . $heading . '</a>';
}
echo '<div id="content">';
echo '<h1>Action and Filter Hook Reference</h1>';
echo '<div class="description">
<p>This is simply a list of action and filter hooks found within WooCommerce files. View the source to see supported params and usage.</p>
<p>' . implode( ', ', $index ) . '</p>
</div>';
foreach ( self::$files_to_scan as $heading => $files ) {
self::$custom_hooks_found = array();
foreach ( $files as $f ) {
self::$current_file = basename( $f );
$tokens = token_get_all( file_get_contents( $f ) );
$token_type = false;
$current_class = '';
$current_function = '';
if ( in_array( self::$current_file, $scanned ) ) {
continue;
}
$scanned[] = self::$current_file;
foreach ( $tokens as $index => $token ) {
if ( is_array( $token ) ) {
$trimmed_token_1 = trim( $token[1] );
if ( T_CLASS == $token[0] ) {
$token_type = 'class';
} elseif ( T_FUNCTION == $token[0] ) {
$token_type = 'function';
} elseif ( 'do_action' === $token[1] ) {
$token_type = 'action';
} elseif ( 'apply_filters' === $token[1] ) {
$token_type = 'filter';
} elseif ( $token_type && ! empty( $trimmed_token_1 ) ) {
switch ( $token_type ) {
case 'class' :
$current_class = $token[1];
break;
case 'function' :
$current_function = $token[1];
break;
case 'filter' :
case 'action' :
$hook = trim( $token[1], "'" );
$hook = str_replace( '_FUNCTION_', strtoupper( $current_function ), $hook );
$hook = str_replace( '_CLASS_', strtoupper( $current_class ), $hook );
$hook = str_replace( '$this', strtoupper( $current_class ), $hook );
$hook = str_replace( array( '.', '{', '}', '"', "'", ' ', ')', '(' ), '', $hook );
$loop = 0;
// Keep adding to hook until we find a comma or colon
while ( 1 ) {
$loop ++;
$prev_hook = is_string( $tokens[ $index + $loop - 1 ] ) ? $tokens[ $index + $loop - 1 ] : $tokens[ $index + $loop - 1 ][1];
$next_hook = is_string( $tokens[ $index + $loop ] ) ? $tokens[ $index + $loop ] : $tokens[ $index + $loop ][1];
if ( in_array( $next_hook, array( '.', '{', '}', '"', "'", ' ', ')', '(' ) ) ) {
continue;
}
if ( in_array( $next_hook, array( ',', ';' ) ) ) {
break;
}
$hook_first = substr( $next_hook, 0, 1 );
$hook_last = substr( $next_hook, -1, 1 );
if ( '{' === $hook_first || '}' === $hook_last || '$' === $hook_first || ')' === $hook_last || '>' === substr( $prev_hook, -1, 1 ) ) {
$next_hook = strtoupper( $next_hook );
}
$next_hook = str_replace( array( '.', '{', '}', '"', "'", ' ', ')', '(' ), '', $next_hook );
$hook .= $next_hook;
}
if ( isset( self::$custom_hooks_found[ $hook ] ) ) {
self::$custom_hooks_found[ $hook ]['file'][] = self::$current_file;
} else {
self::$custom_hooks_found[ $hook ] = array(
'line' => $token[2],
'class' => $current_class,
'function' => $current_function,
'file' => array( self::$current_file ),
'type' => $token_type,
);
}
break;
}
$token_type = false;
}
}
}
}
foreach ( self::$custom_hooks_found as $hook => $details ) {
if ( ! strstr( $hook, 'woocommerce' ) && ! strstr( $hook, 'product' ) && ! strstr( $hook, 'wc_' ) ) {
//unset( self::$custom_hooks_found[ $hook ] );
}
}
ksort( self::$custom_hooks_found );
if ( ! empty( self::$custom_hooks_found ) ) {
echo '<div class="panel panel-default"><div class="panel-heading"><h2 id="hooks-' . str_replace( ' ', '-', strtolower( $heading ) ) . '">' . $heading . '</h2></div>';
echo '<table class="summary table table-bordered table-striped"><thead><tr><th>Hook</th><th>Type</th><th>File(s)</th></tr></thead><tbody>';
foreach ( self::$custom_hooks_found as $hook => $details ) {
echo '<tr>
<td>' . self::get_hook_link( $hook, $details ) . '</td>
<td>' . $details['type'] . '</td>
<td>' . implode( ', ', array_unique( $details['file'] ) ) . '</td>
</tr>' . "\n";
}
echo '</tbody></table></div>';
}
}
echo '</div><div id="footer">';
$html = file_get_contents( '../wc-apidocs/tree.html' );
$header = explode( '<div id="content">', $html );
$header = str_replace( '<li class="active">', '<li>', current( $header ) );
$header = str_replace( '<li class="hooks">', '<li class="active">', $header );
$header = str_replace( 'Tree | ', 'Hook Reference | ', $header );
$footer = explode( '<div id="footer">', $html );
file_put_contents( '../wc-apidocs/hook-docs.html', $header . ob_get_clean() . end( $footer ) );
echo "Hook docs generated :)\n";
}
}
WC_HookFinder::process_hooks();

View File

@ -1,13 +0,0 @@
{layout '@layout.latte'}
{var $robots = false}
{block title}Page not found{/block}
{block content}
<div id="content">
<h1>{include title}</h1>
<p>The requested page could not be found.</p>
<p>You have probably clicked on a link that is outdated and points to a page that does not exist any more or you have made an typing error in the address.</p>
<p>To continue please try to find requested page in the menu,{if $config->tree} take a look at <a href="tree.html">the tree view</a> of the whole project{/if} or use search field on the top.</p>
</div>
{/block}

View File

@ -1,60 +0,0 @@
{define elements}
<tr n:foreach="$elements as $element">
<td class="name"><a href="{$element|elementUrl}" n:class="$element->deprecated ? deprecated, !$element->valid ? invalid">{if $namespace}{$element->shortName}{else}{$element->name}{/if}</a></td>
<td>{$element|shortDescription|noescape}</td>
</tr>
{/define}
{if $classes}
<div class="panel panel-default">
<div class="panel-heading"><h2>Classes summary</h2></div>
<table class="summary table table-bordered table-striped" id="classes">
{include elements, elements => $classes}
</table>
</div>
{/if}
{if $interfaces}
<div class="panel panel-default">
<div class="panel-heading"><h2>Interfaces summary</h2></div>
<table class="summary table table-bordered table-striped" id="interfaces">
{include elements, elements => $interfaces}
</table>
</div>
{/if}
{if $traits}
<div class="panel panel-default">
<div class="panel-heading"><h2>Traits summary</h2></div>
<table class="summary table table-bordered table-striped" id="traits">
{include elements, elements => $traits}
</table>
</div>
{/if}
{if $exceptions}
<div class="panel panel-default">
<div class="panel-heading"><h2>Exceptions summary</h2></div>
<table class="summary table table-bordered table-striped" id="exceptions">
{include elements, elements => $exceptions}
</table>
</div>
{/if}
{if $constants}
<div class="panel panel-default">
<div class="panel-heading"><h2>Constants summary</h2></div>
<table class="summary table table-bordered table-striped" id="constants">
{include elements, elements => $constants}
</table>
</div>
{/if}
{if $functions}
<div class="panel panel-default">
<div class="panel-heading"><h2>Functions summary</h2></div>
<table class="summary table table-bordered table-striped" id="functions">
{include elements, elements => $functions}
</table>
</div>
{/if}

View File

@ -1,185 +0,0 @@
{default $robots = true}
{default $active = ''}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex" n:if="!$robots">
<title>{include title}{if 'overview' !== $active && $config->title} | {$config->title}{/if}</title>
<link rel="stylesheet" href="{='resources/bootstrap.min.css'|staticFile}">
<link rel="stylesheet" href="{='resources/style.css'|staticFile}">
<link n:if="$config->googleCseId" rel="search" type="application/opensearchdescription+xml" title="{$config->title}" href="{$config->baseUrl}/opensearch.xml">
<script n:if="$config->googleAnalytics">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', {$config->googleAnalytics}]);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<nav id="navigation" class="navbar navbar-default navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<a href="index.html" class="navbar-brand">{if $config->title}{$config->title}{else}Overview{/if}</a>
</div>
<div class="collapse navbar-collapse">
<form{if $config->googleCseId} action="http://www.google.com/cse"{/if} id="search" class="navbar-form navbar-left" role="search">
<input type="hidden" name="cx" value="{$config->googleCseId}">
<input type="hidden" name="ie" value="UTF-8">
<div class="form-group">
<input type="text" name="q" class="search-query form-control" placeholder="Search"{if 'overview' === $active} autofocus{/if}>
</div>
</form>
<ul class="nav navbar-nav">
<li n:class="'package' === $active ? active" n:if="$packages">
<a n:tag-if="'package' !== $active && $package" href="{$package|packageUrl}" title="Summary of {$package}"><span>Package</span></a>
</li>
<li n:class="'namespace' === $active ? active" n:if="$namespaces">
<a n:tag-if="'namespace' !== $active && $namespace" href="{$namespace|namespaceUrl}" title="Summary of {$namespace}"><span>Namespace</span></a>
</li>
<li n:class="'class' === $active ? active" n:if="!$function && !$constant">
<a n:tag-if="'class' !== $active && $class" href="{$class|classUrl}" title="Summary of {$class->name}"><span>Class</span></a>
</li>
<li n:class="'function' === $active ? active" n:if="$function">
<a n:tag-if="'function' !== $active" href="{$function|functionUrl}" title="Summary of {$function->name}"><span>Function</span></a>
</li>
<li n:class="'constant' === $active ? active" n:if="$constant">
<a n:tag-if="'constant' !== $active" href="{$constant|constantUrl}" title="Summary of {$constant->name}"><span>Constant</span></a>
</li>
<li class="divider-vertical" n:if="$config->tree || $config->deprecated || $config->todo"></li>
<li n:class="'tree' === $active ? active" n:if="$config->tree">
<a n:tag-if="'tree' !== $active" href="tree.html" title="Tree view of classes, interfaces, traits and exceptions"><span>Tree</span></a>
</li>
{foreach $annotationGroups as $annotation}
<li n:class="$active === 'annotation-group-' . $annotation ? active">
<a n:tag-if="$active !== 'annotation-group-' . $annotation" href="annotation-group-{$annotation}.html" title="List of elements with {$annotation} annotation">
<span>{$annotation|firstUpper}</span>
</a>
</li>
{/foreach}
<li class="divider-vertical"></li>
<li class="hooks">
<a href="hook-docs.html" title="Hooks"><span>Hook Reference</span></a>
</li>
<li class="woocommerce-com-docs">
<a href="https://docs.woocommerce.com/"><span>WooCommerce Docs</span></a>
</li>
<li class="api">
<a href="https://woocommerce.github.io/woocommerce-rest-api-docs/"><span>REST API Docs</span></a>
</li>
<li class="divider-vertical" n:if="$config->download"></li>
<li n:if="$config->download">
<a href="{$archive}" title="Download documentation as ZIP archive"><span>Download</span></a>
</li>
</ul>
</div>
</div>
</nav>
<div id="left">
<div id="menu">
{define group}
<ul>
{foreach $groups as $group}
{var $nextLevel = substr_count($iterator->nextValue, '\\') > substr_count($group, '\\')}
<li n:class="$actualGroup === $group || 0 === strpos($actualGroup, $group . '\\') ? active, $config->main && 0 === strpos($group, $config->main) ? main">
<a href="{if $groupBy === 'package'}{$group|packageUrl}{else}{$group|namespaceUrl}{/if}">
{$group|subgroupName}<span n:tag-if="$nextLevel"></span>
</a>
{if $nextLevel}
<ul>
{else}
</li>
{if substr_count($iterator->nextValue, '\\') < substr_count($group, '\\')}
{='</ul></li>'|repeat:substr_count($group, '\\') - substr_count($iterator->nextValue, '\\')|noescape}
{/if}
{/if}
{/foreach}
</ul>
{/define}
<div id="groups">
{if $namespaces}
<h3>Namespaces</h3>
{include group, groups => $namespaces, actualGroup => $namespace, groupBy => 'namespace'}
{elseif $packages}
<h3>Packages</h3>
{include group, groups => $packages, actualGroup => $package, groupBy => 'package'}
{/if}
</div>
{define elements}
<ul>
<li n:foreach="$elements as $element" n:class="$activeElement === $element ? active"><a n:class="$element->deprecated ? deprecated, !$element->valid ? invalid" href="{$element|elementUrl}">{if $namespace}{$element->shortName}{else}{$element->name}{/if}</a></li>
</ul>
{/define}
<div id="elements">
{if $classes}
<h3>Classes</h3>
{include elements, elements => $classes, activeElement => $class}
{/if}
{if $interfaces}
<h3>Interfaces</h3>
{include elements, elements => $interfaces, activeElement => $class}
{/if}
{if $traits}
<h3>Traits</h3>
{include elements, elements => $traits, activeElement => $class}
{/if}
{if $exceptions}
<h3>Exceptions</h3>
{include elements, elements => $exceptions, activeElement => $class}
{/if}
{if $constants}
<h3>Constants</h3>
{include elements, elements => $constants, activeElement => $constant}
{/if}
{if $functions}
<h3>Functions</h3>
{include elements, elements => $functions, activeElement => $function}
{/if}
</div>
</div>
</div>
<div id="splitter"></div>
<div id="right">
<div id="rightInner">
{include content}
</div>
<div id="footer">
{$config->title} API documentation generated by <a href="http://apigen.org">ApiGen</a>
</div>
</div>
<script src="{='resources/combined.js'|staticFile}"></script>
<script src="{='elementlist.js'|staticFile}"></script>
</body>
</html>

View File

@ -1,149 +0,0 @@
{layout '@layout.latte'}
{var $active = 'annotation-group-' . $annotation}
{block title}{$annotation|firstUpper}{/block}
{block content}
<div id="content">
<h1>{include title}</h1>
{if $hasElements}
{if $annotationClasses}
<div class="panel panel-default">
<div class="panel-heading"><h2>Classes summary</h2></div>
<table class="summary table table-bordered table-striped" id="classes">
{include classes, items => $annotationClasses}
</table>
</div>
{/if}
{if $annotationInterfaces}
<div class="panel panel-default">
<div class="panel-heading"><h2>Interfaces summary</h2></div>
<table class="summary table table-bordered table-striped" id="interfaces">
{include classes, items => $annotationInterfaces}
</table>
</div>
{/if}
{if $annotationTraits}
<div class="panel panel-default">
<div class="panel-heading"><h2>Traits summary</h2></div>
<table class="summary table table-bordered table-striped" id="traits">
{include classes, items => $annotationTraits}
</table>
</div>
{/if}
{if $annotationExceptions}
<div class="panel panel-default">
<div class="panel-heading"><h2>Exceptions summary</h2></div>
<table class="summary table table-bordered table-striped" id="exceptions">
{include classes, items => $annotationExceptions}
</table>
</div>
{/if}
{if $annotationMethods}
<div class="panel panel-default">
<div class="panel-heading"><h2>Methods summary</h2></div>
<table class="summary table table-bordered table-striped" id="methods">
<tr n:foreach="$annotationMethods as $method">
<td class="name"><a href="{$method->declaringClassName|classUrl}">{$method->declaringClassName}</a></td>
<td class="name"><code><a href="{$method|methodUrl}">{$method->name}()</a></code></td>
<td>
{if $method->hasAnnotation($annotation)}
{foreach $method->annotations[$annotation] as $description}
{if $description}
{$description|annotation:$annotation:$method|noescape}<br>
{/if}
{/foreach}
{/if}
</td>
</tr>
</table>
</div>
{/if}
{if $annotationConstants}
<div class="panel panel-default">
<div class="panel-heading"><h2>Constants summary</h2></div>
<table class="summary table table-bordered table-striped" id="constants">
<tr n:foreach="$annotationConstants as $constant">
{if $constant->declaringClassName}
<td class="name"><a href="{$constant->declaringClassName|classUrl}">{$constant->declaringClassName}</a></td>
<td class="name"><code><a href="{$constant|constantUrl}"><b>{$constant->name}</b></a></code></td>
{else}
<td class="name" n:if="$namespaces || $classes || $interfaces || $traits || $exceptions"><a n:if="$constant->namespaceName" href="{$constant->namespaceName|namespaceUrl}">{$constant->namespaceName}</a></td>
<td n:class="name"><code><a href="{$constant|constantUrl}"><b>{$constant->shortName}</b></a></code></td>
{/if}
<td>
{foreach $constant->annotations[$annotation] as $description}
{if $description}
{$description|annotation:$annotation:$constant|noescape}<br>
{/if}
{/foreach}
</td>
</tr>
</table>
</div>
{/if}
{if $annotationProperties}
<div class="panel panel-default">
<div class="panel-heading"><h2>Properties summary</h2></div>
<table class="summary table table-bordered table-striped" id="properties">
<tr n:foreach="$annotationProperties as $property">
<td class="name"><a href="{$property->declaringClassName|classUrl}">{$property->declaringClassName}</a></td>
<td class="name"><a href="{$property|propertyUrl}"><var>${$property->name}</var></a></td>
<td>
{foreach $property->annotations[$annotation] as $description}
{if $description}
{$description|annotation:$annotation:$property|noescape}<br>
{/if}
{/foreach}
</td>
</tr>
</table>
</div>
{/if}
{if $annotationFunctions}
<div class="panel panel-default">
<div class="panel-heading"><h2>Functions summary</h2></div>
<table class="summary table table-bordered table-striped" id="functions">
<tr n:foreach="$annotationFunctions as $function">
<td class="name" n:if="$namespaces"><a n:if="$function->namespaceName" href="{$function->namespaceName|namespaceUrl}">{$function->namespaceName}</a></td>
<td class="name"><code><a href="{$function|functionUrl}">{$function->shortName}</a></code></td>
<td>
{foreach $function->annotations[$annotation] as $description}
{if $description}
{$description|annotation:$annotation:$function|noescape}<br>
{/if}
{/foreach}
</td>
</tr>
</table>
</div>
{/if}
{else}
<p>No elements with <code>@{$annotation}</code> annotation found.</p>
{/if}
</div>
{/block}
{define classes}
<tr n:foreach="$items as $class">
<td class="name"><a href="{$class|classUrl}">{$class->name}</a></td>
<td>
{foreach $class->annotations[$annotation] as $description}
{if $description}
{$description|annotation:$annotation:$class|noescape}<br>
{/if}
{/foreach}
</td>
</tr>
{/define}

View File

@ -1,462 +0,0 @@
{layout '@layout.latte'}
{var $active = 'class'}
{block title}{if $class->deprecated}Deprecated {/if}{if $class->interface}Interface{elseif $class->trait}Trait{else}Class{/if} {$class->name}{/block}
{block content}
<div id="content" class="class">
<h1 n:class="$class->deprecated ? deprecated">{if $class->interface}Interface{elseif $class->trait}Trait{else}Class{/if} {$class->shortName}</h1>
{if $class->valid}
<div class="description" n:if="$template->longDescription($class)">
{$class|longDescription|noescape}
</div>
<dl class="tree well" n:if="$class->parentClass || $class->ownInterfaces || $class->ownTraits">
<dd n:foreach="$tree as $item" style="padding-left:{($iterator->counter - 1) * 30}px">
<img src="resources/inherit.png" alt="Extended by" n:if="$iterator->counter > 1">
{if $item->documented}
<a href="{$item|classUrl}" n:tag-if="!$iterator->last">{last}<b>{/last}<span n:class="$item->deprecated ? deprecated, !$item->valid ? invalid">{$item->name}</span>{last}</b>{/last}</a>
{else}{$item->name}{/if}
{var $itemOwnInterfaces = $item->ownInterfaces}
{if $itemOwnInterfaces} implements {foreach $itemOwnInterfaces as $interface}
<a href="{$interface|classUrl}" n:tag-if="$interface->documented"><span n:class="$interface->deprecated ? deprecated, !$interface->valid ? invalid">{$interface->name}</span></a>{sep}, {/sep}
{/foreach}{/if}
{var $itemOwnTraits = $item->ownTraits}
{if $itemOwnTraits} uses {foreach $itemOwnTraits as $trait}
{if is_string($trait)}
{$trait} (not available)
{else}
<a href="{$trait|classUrl}" n:tag-if="$trait->documented"><span n:class="$trait->deprecated ? deprecated, !$trait->valid ? invalid">{$trait->name}</span></a>{sep}, {/sep}
{/}
{/foreach}{/if}
</dd>
</dl>
{define children}
<p class="elementList">
{foreach $children as $child}
<code><a href="{$child|classUrl}" n:tag-if="$child->documented"><span n:tag-if="$child->deprecated" class="deprecated">{$child->name}</span></a></code>{sep}, {/sep}
{/foreach}
</p>
{/define}
<div n:if="$directSubClasses">
<h3>Direct known subclasses</h3>
{include children, children => $directSubClasses}
</div>
<div n:if="$indirectSubClasses">
<h3>Indirect known subclasses</h3>
{include children, children => $indirectSubClasses}
</div>
<div n:if="$directImplementers">
<h3>Direct known implementers</h3>
{include children, children => $directImplementers}
</div>
<div n:if="$indirectImplementers">
<h3>Indirect known implementers</h3>
{include children, children => $indirectImplementers}
</div>
<div n:if="$directUsers">
<h3>Direct Known Users</h3>
{include children, children => $directUsers}
</div>
<div n:if="$indirectUsers">
<h3>Indirect Known Users</h3>
{include children, children => $indirectUsers}
</div>
<div class="alert alert-info">
{if !$class->interface && !$class->trait && ($class->abstract || $class->final)}<b>{if $class->abstract}Abstract{else}Final{/if}</b><br>{/if}
{if $class->internal}<b>PHP Extension:</b> <a href="{$class->extension|manualUrl}" title="Go to PHP documentation">{$class->extension->name|firstUpper}</a><br>{/if}
{if $class->inNamespace()}<b>Namespace:</b> {$class->namespaceName|namespaceLinks|noescape}<br>{/if}
{if $class->inPackage()}<b>Package:</b> {$class->packageName|packageLinks|noescape}<br>{/if}
{foreach $template->annotationSort($template->annotationFilter($class->annotations)) as $annotation => $values}
{foreach $values as $value}
<b>{$annotation|annotationBeautify}{if $value}:{/if}</b>
{$value|annotation:$annotation:$class|noescape}<br>
{/foreach}
{/foreach}
{if $class->internal}
<b>Documented at</b> <a href="{$class|manualUrl}" title="Go to PHP documentation">php.net</a>
{else}
<b>Located at</b> <a n:tag-if="$config->sourceCode" href="{$class|sourceUrl}" title="Go to source code">{$class->fileName|relativePath}</a>
{/if}
<br>
</div>
{var $ownMethods = $class->ownMethods}
{var $inheritedMethods = $class->inheritedMethods}
{var $usedMethods = $class->usedMethods}
{var $ownMagicMethods = $class->ownMagicMethods}
{var $inheritedMagicMethods = $class->inheritedMagicMethods}
{var $usedMagicMethods = $class->usedMagicMethods}
{if $ownMethods || $inheritedMethods || $usedMethods || $ownMagicMethods || $usedMagicMethods}
{define method}
<tr data-order="{$method->name}" id="{if $method->magic}m{/if}_{$method->name}">
{var $annotations = $method->annotations}
<td class="attributes"><code>
{if !$class->interface && $method->abstract}abstract{elseif $method->final}final{/if} {if $method->protected}protected{elseif $method->private}private{else}public{/if} {if $method->static}static{/if}
{ifset $annotations['return']}{$annotations['return'][0]|typeLinks:$method|noescape}{/ifset}
{if $method->returnsReference()}&amp;{/if}
</code>
</td>
<td class="name"><div>
<a class="anchor" href="#{if $method->magic}m{/if}_{$method->name}">#</a>
<code n:class="$method->deprecated ? deprecated">{block|strip}
{if $class->internal}
<a href="{$method|manualUrl}" title="Go to PHP documentation">{$method->name}</a>(
{else}
<a n:tag-if="$config->sourceCode" href="{$method|sourceUrl}" title="Go to source code">{$method->name}</a>(
{/if}
{foreach $method->parameters as $parameter}
<span>{$parameter->typeHint|typeLinks:$method|noescape}
<var>{if $parameter->passedByReference}&amp; {/if}${$parameter->name}</var>{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$class|noescape}{elseif $parameter->unlimited},…{/if}</span>{sep}, {/sep}
{/foreach}
){/block}</code>
{if $config->template['options']['elementDetailsCollapsed']}
<div class="description short">
{$method|shortDescription:true|noescape}
</div>
{/if}
<div n:class="description, detailed, $config->template['options']['elementDetailsCollapsed'] ? hidden">
{$method|longDescription|noescape}
{if !$class->deprecated && $method->deprecated}
<h4>Deprecated</h4>
{ifset $annotations['deprecated']}
<div class="list">
{foreach $annotations['deprecated'] as $description}
{if $description}
{$description|annotation:'deprecated':$method|noescape}<br>
{/if}
{/foreach}
</div>
{/ifset}
{/if}
{if $method->parameters && isset($annotations['param'])}
<h4>Parameters</h4>
<div class="list"><dl>
{foreach $method->parameters as $parameter}
<dt><var>${$parameter->name}</var>{if $parameter->unlimited},…{/if}</dt>
<dd>{$parameter->description|description:$method|noescape}</dd>
{/foreach}
</dl></div>
{/if}
{if isset($annotations['return']) && 'void' !== $annotations['return'][0]}
<h4>Returns</h4>
<div class="list">
{foreach $annotations['return'] as $description}
{$description|annotation:'return':$method|noescape}{sep}<br>{/}
{/foreach}
</div>
{/if}
{ifset $annotations['throws']}
<h4>Throws</h4>
<div class="list">
{foreach $annotations['throws'] as $description}
{$description|annotation:'throws':$method|noescape}{sep}<br>{/}
{/foreach}
</div>
{/ifset}
{foreach $template->annotationSort($template->annotationFilter($annotations, array('deprecated', 'param', 'return', 'throws'))) as $annotation => $descriptions}
<h4>{$annotation|annotationBeautify}</h4>
<div class="list">
{foreach $descriptions as $description}
{if $description}
{$description|annotation:$annotation:$method|noescape}<br>
{/if}
{/foreach}
</div>
{/foreach}
{var $overriddenMethod = $method->overriddenMethod}
{if $overriddenMethod}
<h4>Overrides</h4>
<div class="list"><code><a n:tag-if="$template->getClass($overriddenMethod->declaringClassName)" href="{$overriddenMethod|methodUrl}">{$overriddenMethod->declaringClassName}::{$overriddenMethod->name}</a></code></div>
{/if}
{var $implementedMethod = $method->implementedMethod}
{if $implementedMethod}
<h4>Implementation of</h4>
<div class="list"><code><a n:tag-if="$template->getClass($implementedMethod->declaringClassName)" href="{$implementedMethod|methodUrl}">{$implementedMethod->prettyName}</a></code></div>
{/if}
</div>
</div></td>
</tr>
{/define}
<div class="panel panel-default">
<div class="panel-heading"><h2>Methods summary</h2></div>
<table class="summary table table-bordered table-striped methods" id="methods" n:if="$ownMethods">
{foreach $ownMethods as $method}
{include method, method => $method}
{/foreach}
</table>
</div>
{foreach $inheritedMethods as $parentName => $methods}
<div class="panel panel-default">
<div class="panel-heading"><h3>Methods inherited from <a href="{$parentName|classUrl}#methods" n:tag-if="$template->getClass($parentName)">{$parentName}</a></h3></div>
<p class="elementList">
{foreach $methods as $method}
<code><a href="{$method|methodUrl}" n:tag-if="$template->getClass($parentName)"><span n:tag-if="$method->deprecated" class="deprecated">{$method->name}()</span></a></code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{foreach $usedMethods as $traitName => $methods}
<div class="panel panel-default">
<div class="panel-heading"><h3>Methods used from <a href="{$traitName|classUrl}#methods" n:tag-if="$template->getClass($traitName)">{$traitName}</a></h3></div>
<p class="elementList">
{foreach $methods as $data}
<code><a href="{$data['method']|methodUrl:$data['method']->declaringTrait}" n:tag-if="$template->getClass($traitName)"><span n:tag-if="$data['method']->deprecated" class="deprecated">{$data['method']->name}()</span></a>{if $data['aliases']}(as {foreach $data['aliases'] as $alias}<span n:tag-if="$data['method']->deprecated" class="deprecated">{$alias->name}()</span>{sep}, {/sep}{/foreach}){/if}</code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{if $ownMagicMethods}
<div class="panel panel-default">
<div class="panel-heading"><h3>Magic methods summary</h3></div>
<table class="summary table table-bordered table-striped methods" id="magicMethods" n:if="$ownMagicMethods">
{foreach $ownMagicMethods as $method}
{include method, method => $method}
{/foreach}
</table>
</div>
{/if}
{foreach $inheritedMagicMethods as $parentName => $methods}
<div class="panel panel-default">
<div class="panel-heading"><h3>Magic methods inherited from <a href="{$parentName|classUrl}#methods" n:tag-if="$template->getClass($parentName)">{$parentName}</a></h3></div>
<p class="elementList">
{foreach $methods as $method}
<code><a href="{$method|methodUrl}" n:tag-if="$template->getClass($parentName)"><span n:tag-if="$method->deprecated" class="deprecated">{$method->name}()</span></a></code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{foreach $usedMagicMethods as $traitName => $methods}
<div class="panel panel-default">
<div class="panel-heading"><h3>Magic methods used from <a href="{$traitName|classUrl}#methods" n:tag-if="$template->getClass($traitName)">{$traitName}</a></h3></div>
<p class="elementList">
{foreach $methods as $data}
<code><a href="{$data['method']|methodUrl:$data['method']->declaringTrait}" n:tag-if="$template->getClass($traitName)"><span n:tag-if="$data['method']->deprecated" class="deprecated">{$data['method']->name}()</span></a>{if $data['aliases']}(as {foreach $data['aliases'] as $alias}<span n:tag-if="$data['method']->deprecated" class="deprecated">{$alias->name}()</span>{sep}, {/sep}{/foreach}){/if}</code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{/if}
{var $ownConstants = $class->ownConstants}
{var $inheritedConstants = $class->inheritedConstants}
{if $ownConstants || $inheritedConstants}
<div class="panel panel-default">
<div class="panel-heading"><h2>Constants summary</h2></div>
<table class="summary table table-bordered table-striped constants" id="constants" n:if="$ownConstants">
<tr n:foreach="$ownConstants as $constant" data-order="{$constant->name}" id="{$constant->name}">
{var $annotations = $constant->annotations}
<td class="attributes"><code>{$constant->typeHint|typeLinks:$constant|noescape}</code></td>
<td class="name">
<code>
{if $class->internal}
<a href="{$constant|manualUrl}" title="Go to PHP documentation"><b>{$constant->name}</b></a>
{else}
<a n:tag-if="$config->sourceCode" href="{$constant|sourceUrl}" title="Go to source code"><b>{$constant->name}</b></a>
{/if}
</code>
<div n:if="$config->template['options']['elementDetailsCollapsed']" class="description short">
{$constant|shortDescription:true|noescape}
</div>
<div n:class="description, detailed, $config->template['options']['elementDetailsCollapsed'] ? hidden">
{$constant|longDescription|noescape}
{foreach $template->annotationSort($template->annotationFilter($annotations, array('var'))) as $annotation => $descriptions}
<h4>{$annotation|annotationBeautify}</h4>
<div class="list">
{foreach $descriptions as $description}
{if $description}
{$description|annotation:$annotation:$constant|noescape}<br>
{/if}
{/foreach}
</div>
{/foreach}
</div>
</td>
<td class="value">
<div>
<a href="#{$constant->name}" class="anchor">#</a>
<code>{$constant->valueDefinition|highlightValue:$class|noescape}</code>
</div>
</td>
</tr>
</table>
</div>
{foreach $inheritedConstants as $parentName => $constants}
<div class="panel panel-default">
<div class="panel-heading"><h3>Constants inherited from <a href="{$parentName|classUrl}#constants" n:tag-if="$template->getClass($parentName)">{$parentName}</a></h3></div>
<p class="elementList">
{foreach $constants as $constant}
<code><a href="{$constant|constantUrl}" n:tag-if="$template->getClass($parentName)"><b><span n:tag-if="$constant->deprecated" class"deprecated">{$constant->name}</span></b></a></code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{/if}
{var $ownProperties = $class->ownProperties}
{var $inheritedProperties = $class->inheritedProperties}
{var $usedProperties = $class->usedProperties}
{var $ownMagicProperties = $class->ownMagicProperties}
{var $inheritedMagicProperties = $class->inheritedMagicProperties}
{var $usedMagicProperties = $class->usedMagicProperties}
{if $ownProperties || $inheritedProperties || $usedProperties || $ownMagicProperties || $inheritedMagicProperties || $usedMagicProperties}
{define property}
<tr data-order="{$property->name}" id="{if $property->magic}m{/if}${$property->name}">
<td class="attributes"><code>
{if $property->protected}protected{elseif $property->private}private{else}public{/if} {if $property->static}static{/if} {if $property->readOnly}read-only{elseif $property->writeOnly}write-only{/if}
{$property->typeHint|typeLinks:$property|noescape}
</code></td>
<td class="name">
{if $class->internal}
<a href="{$property|manualUrl}" title="Go to PHP documentation"><var>${$property->name}</var></a>
{else}
<a n:tag-if="$config->sourceCode" href="{$property|sourceUrl}" title="Go to source code"><var>${$property->name}</var></a>
{/if}
<div n:if="$config->template['options']['elementDetailsCollapsed']" class="description short">
{$property|shortDescription:true|noescape}
</div>
<div n:class="description, detailed, $config->template['options']['elementDetailsCollapsed'] ? hidden">
{$property|longDescription|noescape}
{foreach $template->annotationSort($template->annotationFilter($property->annotations, array('var'))) as $annotation => $descriptions}
<h4>{$annotation|annotationBeautify}</h4>
<div class="list">
{foreach $descriptions as $description}
{if $description}
{$description|annotation:$annotation:$property|noescape}<br>
{/if}
{/foreach}
</div>
{/foreach}
</div>
</td>
<td n:if="!$property->magic" class="value">
<div>
<a href="#{if $property->magic}m{/if}${$property->name}" class="anchor">#</a>
<code>{$property->defaultValueDefinition|highlightValue:$class|noescape}</code>
</div>
</td>
</tr>
{/define}
<div class="panel panel-default">
<div class="panel-heading"><h2>Properties summary</h2></div>
<table class="summary table table-bordered table-striped properties" id="properties" n:if="$ownProperties">
{foreach $ownProperties as $property}
{include property, property => $property}
{/foreach}
</table>
</div>
{foreach $inheritedProperties as $parentName => $properties}
<div class="panel panel-default">
<div class="panel-heading"><h3>Properties inherited from <a href="{$parentName|classUrl}#properties" n:tag-if="$template->getClass($parentName)">{$parentName}</a></h3></div>
<p class="elementList">
{foreach $properties as $property}
<code><a href="{$property|propertyUrl}" n:tag-if="$template->getClass($parentName)"><var><span n:tag-if="$property->deprecated" class="deprecated">${$property->name}</span></var></a></code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{foreach $usedProperties as $traitName => $properties}
<div class="panel panel-default">
<div class="panel-heading"><h3>Properties used from <a href="{$traitName|classUrl}#properties" n:tag-if="$template->getClass($traitName)">{$traitName}</a></h3></div>
<p class="elementList">
{foreach $properties as $property}
<code><a href="{$property|propertyUrl:$property->declaringTrait}" n:tag-if="$template->getClass($traitName)"><var><span n:tag-if="$property->deprecated" class="deprecated">${$property->name}</span></var></a></code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{if $ownMagicProperties}
<div class="panel panel-default">
<div class="panel-heading"><h3>Magic properties</h3></div>
<table class="summary table table-bordered table-striped properties" id="magicProperties">
{foreach $ownMagicProperties as $property}
{include property, property => $property}
{/foreach}
</table>
</div>
{/if}
{foreach $inheritedMagicProperties as $parentName => $properties}
<div class="panel panel-default">
<div class="panel-heading"><h3>Magic properties inherited from <a href="{$parentName|classUrl}#properties" n:tag-if="$template->getClass($parentName)">{$parentName}</a></h3></div>
<p class="elementList">
{foreach $properties as $property}
<code><a href="{$property|propertyUrl}" n:tag-if="$template->getClass($parentName)"><var><span n:tag-if="$property->deprecated" class="deprecated">${$property->name}</span></var></a></code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{foreach $usedMagicProperties as $traitName => $properties}
<div class="panel panel-default">
<div class="panel-heading"><h3>Magic properties used from <a href="{$traitName|classUrl}#properties" n:tag-if="$template->getClass($traitName)">{$traitName}</a></h3></div>
<p class="elementList">
{foreach $properties as $property}
<code><a href="{$property|propertyUrl:$property->declaringTrait}" n:tag-if="$template->getClass($traitName)"><var><span n:tag-if="$property->deprecated" class="deprecated">${$property->name}</span></var></a></code>{sep}, {/sep}
{/foreach}
</p>
</div>
{/foreach}
{/if}
{else}
<div class="alert alert-error">
<p>
Documentation of this class could not be generated.
</p>
<p>
Class was originally declared in {$class->fileName|relativePath} and is invalid because of:
</p>
<ul>
<li n:foreach="$class->reasons as $reason">Class was redeclared in {$reason->getSender()->getFileName()|relativePath}.</li>
</ul>
</div>
{/if}
</div>
{/block}

View File

@ -1,10 +0,0 @@
{contentType javascript}
var ApiGen = ApiGen || {};
ApiGen.config = {$config->template};
{var $scripts = ['jquery.min.js', 'jquery.cookie.js', 'jquery.sprintf.js', 'jquery.autocomplete.js', 'jquery.sortElements.js', 'main.js']}
{foreach $scripts as $script}
{file_get_contents("$basePath/js/$script")|noescape}
{/foreach}

View File

@ -1 +0,0 @@
name: "Twitter Bootstrap theme"

View File

@ -1,60 +0,0 @@
{layout '@layout.latte'}
{var $active = 'constant'}
{block title}{if $constant->deprecated}Deprecated {/if}Constant {$constant->name}{/block}
{block content}
<div id="content" class="constant">
<h1 n:class="$constant->deprecated ? deprecated">Constant {$constant->shortName}</h1>
{if $constant->valid}
<div class="description" n:if="$template->longDescription($constant)">
{$constant|longDescription|noescape}
</div>
<div class="alert alert-info">
{if $constant->inNamespace()}<b>Namespace:</b> {$constant->namespaceName|namespaceLinks|noescape}<br>{/if}
{if $constant->inPackage()}<b>Package:</b> {$constant->packageName|packageLinks|noescape}<br>{/if}
{foreach $template->annotationSort($template->annotationFilter($constant->annotations, array('var'))) as $annotation => $values}
{foreach $values as $value}
<b>{$annotation|annotationBeautify}{if $value}:{/if}</b>
{$value|annotation:$annotation:$constant|noescape}<br>
{/foreach}
{/foreach}
<b>Located at</b>
<a n:tag-if="$config->sourceCode" href="{$constant|sourceUrl}" title="Go to source code">
{$constant->fileName|relativePath}
</a><br>
</div>
{var $annotations = $constant->annotations}
<div class="panel panel-default">
<div class="panel-heading"><h2>Value summary</h2></div>
<table class="summary table table-bordered table-striped" id="vars">
<tr>
<td class="name"><code>{$constant->typeHint|typeLinks:$constant|noescape}</code></td>
<td class="value">{block|strip}
{var $element = $template->resolveElement($constant->valueDefinition, $constant)}
{if $element}<a href="{$element|constantUrl}">{$constant->valueDefinition}</a>{else}<code>{$constant->valueDefinition|highlightValue:$constant|noescape}</code>{/if}
{/block}</td>
</tr>
</table>
</div>
{else}
<div class="alert alert-error">
<p>
Documentation of this constant could not be generated.
</p>
<p>
Constant was originally declared in {$constant->fileName|relativePath} and is invalid because of:
</p>
<ul>
<li n:foreach="$constant->reasons as $reason">Constant was redeclared in {$reason->getSender()->getFileName()|relativePath}.</li>
</ul>
</div>
{/if}
</div>
{/block}

View File

@ -1,4 +0,0 @@
{contentType javascript}
var ApiGen = ApiGen || {};
ApiGen.elements = {$elements};

View File

@ -1,94 +0,0 @@
{layout '@layout.latte'}
{var $active = 'function'}
{block title}{if $function->deprecated}Deprecated {/if}Function {$function->name}{/block}
{block content}
<div id="content" class="function">
<h1 n:class="$function->deprecated ? deprecated">Function {$function->shortName}</h1>
{if $function->valid}
<div class="description" n:if="$template->longDescription($function)">
{$function|longDescription|noescape}
</div>
<div class="alert alert-info">
{if $function->inNamespace()}<b>Namespace:</b> {$function->namespaceName|namespaceLinks|noescape}<br>{/if}
{if $function->inPackage()}<b>Package:</b> {$function->packageName|packageLinks|noescape}<br>{/if}
{foreach $template->annotationSort($template->annotationFilter($function->annotations, array('param', 'return', 'throws'))) as $annotation => $values}
{foreach $values as $value}
<b>{$annotation|annotationBeautify}{if $value}:{/if}</b>
{$value|annotation:$annotation:$function|noescape}<br>
{/foreach}
{/foreach}
<b>Located at</b>
<a n:tag-if="$config->sourceCode" href="{$function|sourceUrl}" title="Go to source code">
{$function->fileName|relativePath}
</a><br>
</div>
{var $annotations = $function->annotations}
{if count($function->parameters)}
<div class="panel panel-default">
<div class="panel-heading"><h2>Parameters summary</h2></div>
<table class="summary table table-bordered table-striped" id="parameters">
<tr n:foreach="$function->parameters as $parameter" id="${$parameter->name}">
<td class="name"><code>{$parameter->typeHint|typeLinks:$function|noescape}</code></td>
<td class="value"><code>{block|strip}
<var>{if $parameter->passedByReference}&amp; {/if}${$parameter->name}</var>{if $parameter->defaultValueAvailable} = {$parameter->defaultValueDefinition|highlightPHP:$function|noescape}{elseif $parameter->unlimited},…{/if}
{/block}</code></td>
<td>{$parameter->description|description:$function}</td>
</tr>
</table>
</div>
{/if}
{if isset($annotations['return']) && 'void' !== $annotations['return'][0]}
<div class="panel panel-default">
<div class="panel-heading"><h2>Return value summary</h2></div>
<table class="summary table table-bordered table-striped" id="returns">
<tr>
<td class="name"><code>
{$annotations['return'][0]|typeLinks:$function|noescape}
</code></td>
<td>
{$annotations['return'][0]|description:$function|noescape}
</td>
</tr>
</table>
</div>
{/if}
{if isset($annotations['throws'])}
<div class="panel panel-default">
<div class="panel-heading"><h2>Thrown exceptions summary</h2></div>
<table class="summary table table-bordered table-striped" id="throws">
<tr n:foreach="$annotations['throws'] as $throws">
<td class="name"><code>
{$throws|typeLinks:$function|noescape}
</code></td>
<td>
{$throws|description:$function|noescape}
</td>
</tr>
</table>
</div>
{/if}
{else}
<div class="alert alert-error">
<p>
Documentation of this function could not be generated.
</p>
<p>
Function was originally declared in {$function->fileName|relativePath} and is invalid because of:
</p>
<ul>
<li n:foreach="$function->reasons as $reason">Function was redeclared in {$reason->getSender()->getFileName()|relativePath}.</li>
</ul>
</div>
{/if}
</div>
{/block}

View File

@ -1,841 +0,0 @@
/*
* jQuery Autocomplete plugin 1.2.3
*
* Copyright (c) 2009 Jörn Zaefferer
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* With small modifications by Alfonso Gómez-Arzola.
* See changelog for details.
*
*/
;(function($) {
'use strict';
$.fn.extend({
autocomplete: function(urlOrData, options) {
var isUrl = typeof urlOrData == "string";
options = $.extend({}, $.Autocompleter.defaults, {
url: isUrl ? urlOrData : null,
data: isUrl ? null : urlOrData,
delay: isUrl ? $.Autocompleter.defaults.delay : 10,
max: options && !options.scroll ? 10 : 150,
noRecord: "No Records."
}, options);
// if highlight is set to false, replace it with a do-nothing function
options.highlight = options.highlight || function(value) { return value; };
// if the formatMatch option is not specified, then use formatItem for backwards compatibility
options.formatMatch = options.formatMatch || options.formatItem;
return this.each(function() {
new $.Autocompleter(this, options);
});
},
result: function(handler) {
return this.bind("result", handler);
},
search: function(handler) {
return this.trigger("search", [handler]);
},
flushCache: function() {
return this.trigger("flushCache");
},
setOptions: function(options){
return this.trigger("setOptions", [options]);
},
unautocomplete: function() {
return this.trigger("unautocomplete");
}
});
$.Autocompleter = function(input, options) {
var KEY = {
UP: 38,
DOWN: 40,
DEL: 46,
TAB: 9,
RETURN: 13,
ESC: 27,
COMMA: 188,
PAGEUP: 33,
PAGEDOWN: 34,
BACKSPACE: 8
};
var globalFailure = null;
if(options.failure != null && typeof options.failure == "function") {
globalFailure = options.failure;
}
// Create $ object for input element
var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
var timeout;
var previousValue = "";
var cache = $.Autocompleter.Cache(options);
var hasFocus = 0;
var lastKeyPressCode;
var config = {
mouseDownOnSelect: false
};
var select = $.Autocompleter.Select(options, input, selectCurrent, config);
var blockSubmit;
// prevent form submit in opera when selecting with return key
navigator.userAgent.indexOf("Opera") != -1 && $(input.form).bind("submit.autocomplete", function() {
if (blockSubmit) {
blockSubmit = false;
return false;
}
});
// older versions of opera don't trigger keydown multiple times while pressed, others don't work with keypress at all
$input.bind((navigator.userAgent.indexOf("Opera") != -1 && !'KeyboardEvent' in window ? "keypress" : "keydown") + ".autocomplete", function(event) {
// a keypress means the input has focus
// avoids issue where input had focus before the autocomplete was applied
hasFocus = 1;
// track last key pressed
lastKeyPressCode = event.keyCode;
switch(event.keyCode) {
case KEY.UP:
if ( select.visible() ) {
event.preventDefault();
select.prev();
} else {
onChange(0, true);
}
break;
case KEY.DOWN:
if ( select.visible() ) {
event.preventDefault();
select.next();
} else {
onChange(0, true);
}
break;
case KEY.PAGEUP:
if ( select.visible() ) {
event.preventDefault();
select.pageUp();
} else {
onChange(0, true);
}
break;
case KEY.PAGEDOWN:
if ( select.visible() ) {
event.preventDefault();
select.pageDown();
} else {
onChange(0, true);
}
break;
// matches also semicolon
case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
case KEY.TAB:
case KEY.RETURN:
if( selectCurrent() ) {
// stop default to prevent a form submit, Opera needs special handling
event.preventDefault();
blockSubmit = true;
return false;
}
break;
case KEY.ESC:
select.hide();
break;
default:
clearTimeout(timeout);
timeout = setTimeout(onChange, options.delay);
break;
}
}).focus(function(){
// track whether the field has focus, we shouldn't process any
// results if the field no longer has focus
hasFocus++;
}).blur(function() {
hasFocus = 0;
if (!config.mouseDownOnSelect) {
hideResults();
}
}).click(function() {
// show select when clicking in a focused field
// but if clickFire is true, don't require field
// to be focused to begin with; just show select
if( options.clickFire ) {
if ( !select.visible() ) {
onChange(0, true);
}
} else {
if ( hasFocus++ > 1 && !select.visible() ) {
onChange(0, true);
}
}
}).bind("search", function() {
var fn = (arguments.length > 1) ? arguments[1] : null;
function findValueCallback(q, data) {
var result;
if( data && data.length ) {
for (var i=0; i < data.length; i++) {
if( data[i].result.toLowerCase() == q.toLowerCase() ) {
result = data[i];
break;
}
}
}
if( typeof fn == "function" ) fn(result);
else $input.trigger("result", result && [result.data, result.value]);
}
$.each(trimWords($input.val()), function(i, value) {
request(value, findValueCallback, findValueCallback);
});
}).bind("flushCache", function() {
cache.flush();
}).bind("setOptions", function() {
$.extend(true, options, arguments[1]);
// if we've updated the data, repopulate
if ( "data" in arguments[1] )
cache.populate();
}).bind("unautocomplete", function() {
select.unbind();
$input.unbind();
$(input.form).unbind(".autocomplete");
});
function selectCurrent() {
var selected = select.selected();
if( !selected )
return false;
var v = selected.result;
previousValue = v;
if ( options.multiple ) {
var words = trimWords($input.val());
if ( words.length > 1 ) {
var seperator = options.multipleSeparator.length;
var cursorAt = $(input).selection().start;
var wordAt, progress = 0;
$.each(words, function(i, word) {
progress += word.length;
if (cursorAt <= progress) {
wordAt = i;
return false;
}
progress += seperator;
});
words[wordAt] = v;
//$.Autocompleter.Selection(input, progress + seperator, progress + seperator);
v = words.join( options.multipleSeparator );
}
v += options.multipleSeparator;
}
$input.val(v);
hideResultsNow();
$input.trigger("result", [selected.data, selected.value]);
return true;
}
function onChange(crap, skipPrevCheck) {
if( lastKeyPressCode == KEY.DEL ) {
select.hide();
return;
}
var currentValue = $input.val();
if ( !skipPrevCheck && currentValue == previousValue )
return;
previousValue = currentValue;
currentValue = lastWord(currentValue);
if ( currentValue.length >= options.minChars) {
$input.addClass(options.loadingClass);
if (!options.matchCase)
currentValue = currentValue.toLowerCase();
request(currentValue, receiveData, hideResultsNow);
} else {
stopLoading();
select.hide();
}
};
function trimWords(value) {
if (!value)
return [""];
if (!options.multiple)
return [$.trim(value)];
return $.map(value.split(options.multipleSeparator), function(word) {
return $.trim(value).length ? $.trim(word) : null;
});
}
function lastWord(value) {
if ( !options.multiple )
return value;
var words = trimWords(value);
if (words.length == 1)
return words[0];
var cursorAt = $(input).selection().start;
if (cursorAt == value.length) {
words = trimWords(value)
} else {
words = trimWords(value.replace(value.substring(cursorAt), ""));
}
return words[words.length - 1];
}
// fills in the input box w/the first match (assumed to be the best match)
// q: the term entered
// sValue: the first matching result
function autoFill(q, sValue){
// autofill in the complete box w/the first match as long as the user hasn't entered in more data
// if the last user key pressed was backspace, don't autofill
if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
// fill in the value (keep the case the user has typed)
$input.val($input.val() + sValue.substring(lastWord(previousValue).length));
// select the portion of the value not typed by the user (so the next character will erase)
$(input).selection(previousValue.length, previousValue.length + sValue.length);
}
};
function hideResults() {
clearTimeout(timeout);
timeout = setTimeout(hideResultsNow, 200);
};
function hideResultsNow() {
var wasVisible = select.visible();
select.hide();
clearTimeout(timeout);
stopLoading();
if (options.mustMatch) {
// call search and run callback
$input.search(
function (result){
// if no value found, clear the input box
if( !result ) {
if (options.multiple) {
var words = trimWords($input.val()).slice(0, -1);
$input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
}
else {
$input.val( "" );
$input.trigger("result", null);
}
}
}
);
}
};
function receiveData(q, data) {
if ( data && data.length && hasFocus ) {
stopLoading();
select.display(data, q);
autoFill(q, data[0].value);
select.show();
} else {
hideResultsNow();
}
};
function request(term, success, failure) {
if (!options.matchCase)
term = term.toLowerCase();
var data = cache.load(term);
// recieve the cached data
if (data) {
if(data.length) {
success(term, data);
}
else{
var parsed = options.parse && options.parse(options.noRecord) || parse(options.noRecord);
success(term,parsed);
}
// if an AJAX url has been supplied, try loading the data now
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
var extraParams = {
timestamp: +new Date()
};
$.each(options.extraParams, function(key, param) {
extraParams[key] = typeof param == "function" ? param() : param;
});
$.ajax({
// try to leverage ajaxQueue plugin to abort previous requests
mode: "abort",
// limit abortion to this input
port: "autocomplete" + input.name,
dataType: options.dataType,
url: options.url,
data: $.extend({
q: lastWord(term),
limit: options.max
}, extraParams),
success: function(data) {
var parsed = options.parse && options.parse(data) || parse(data);
cache.add(term, parsed);
success(term, parsed);
}
});
} else {
// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
select.emptyList();
if(globalFailure != null) {
globalFailure();
}
else {
failure(term);
}
}
};
function parse(data) {
var parsed = [];
var rows = data.split("\n");
for (var i=0; i < rows.length; i++) {
var row = $.trim(rows[i]);
if (row) {
row = row.split("|");
parsed[parsed.length] = {
data: row,
value: row[0],
result: options.formatResult && options.formatResult(row, row[0]) || row[0]
};
}
}
return parsed;
};
function stopLoading() {
$input.removeClass(options.loadingClass);
};
};
$.Autocompleter.defaults = {
inputClass: "ac_input",
resultsClass: "ac_results",
loadingClass: "ac_loading",
minChars: 1,
delay: 400,
matchCase: false,
matchSubset: true,
matchContains: false,
cacheLength: 100,
max: 1000,
mustMatch: false,
extraParams: {},
selectFirst: true,
formatItem: function(row) { return row[0]; },
formatMatch: null,
autoFill: false,
width: 0,
multiple: false,
multipleSeparator: " ",
inputFocus: true,
clickFire: false,
highlight: function(value, term) {
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
},
scroll: true,
scrollHeight: 180,
scrollJumpPosition: true
};
$.Autocompleter.Cache = function(options) {
var data = {};
var length = 0;
function matchSubset(s, sub) {
return (new RegExp(sub.toUpperCase().replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1").replace(/[A-Z0-9]/g, function(m, offset) {
return offset === 0 ? '(?:' + m + '|^' + m.toLowerCase() + ')' : '(?:.*' + m + '|' + m.toLowerCase() + ')';
}))).test(s); // find by initials
};
function add(q, value) {
if (length > options.cacheLength){
flush();
}
if (!data[q]){
length++;
}
data[q] = value;
}
function populate(){
if( !options.data ) return false;
// track the matches
var stMatchSets = {},
nullData = 0;
// no url was specified, we need to adjust the cache length to make sure it fits the local data store
if( !options.url ) options.cacheLength = 1;
// track all options for minChars = 0
stMatchSets[""] = [];
// loop through the array and create a lookup structure
for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
var rawValue = options.data[i];
// if rawValue is a string, make an array otherwise just reference the array
rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
var value = options.formatMatch(rawValue, i+1, options.data.length);
if ( typeof(value) === 'undefined' || value === false )
continue;
var firstChar = value.charAt(0).toLowerCase();
// if no lookup array for this character exists, look it up now
if( !stMatchSets[firstChar] )
stMatchSets[firstChar] = [];
// if the match is a string
var row = {
value: value,
data: rawValue,
result: options.formatResult && options.formatResult(rawValue) || value
};
// push the current match into the set list
stMatchSets[firstChar].push(row);
// keep track of minChars zero items
if ( nullData++ < options.max ) {
stMatchSets[""].push(row);
}
};
// add the data items to the cache
$.each(stMatchSets, function(i, value) {
// increase the cache size
options.cacheLength++;
// add to the cache
add(i, value);
});
}
// populate any existing data
setTimeout(populate, 25);
function flush(){
data = {};
length = 0;
}
return {
flush: flush,
add: add,
populate: populate,
load: function(q) {
if (!options.cacheLength || !length)
return null;
/*
* if dealing w/local data and matchContains than we must make sure
* to loop through all the data collections looking for matches
*/
if( !options.url && options.matchContains ){
// track all matches
var csub = [];
// loop through all the data grids for matches
for( var k in data ){
// don't search through the stMatchSets[""] (minChars: 0) cache
// this prevents duplicates
if( k.length > 0 ){
var c = data[k];
$.each(c, function(i, x) {
// if we've got a match, add it to the array
if (matchSubset(x.value, q)) {
csub.push(x);
}
});
}
}
return csub;
} else
// if the exact item exists, use it
if (data[q]){
return data[q];
} else
if (options.matchSubset) {
for (var i = q.length - 1; i >= options.minChars; i--) {
var c = data[q.substr(0, i)];
if (c) {
var csub = [];
$.each(c, function(i, x) {
if (matchSubset(x.value, q)) {
csub[csub.length] = x;
}
});
return csub;
}
}
}
return null;
}
};
};
$.Autocompleter.Select = function (options, input, select, config) {
var CLASSES = {
ACTIVE: "ac_over"
};
var listItems,
active = -1,
data,
term = "",
needsInit = true,
element,
list;
// Create results
function init() {
if (!needsInit)
return;
element = $("<div/>")
.hide()
.addClass(options.resultsClass)
.css("position", "absolute")
.appendTo(document.body)
.hover(function(event) {
// Browsers except FF do not fire mouseup event on scrollbars, resulting in mouseDownOnSelect remaining true, and results list not always hiding.
if($(this).is(":visible")) {
input.focus();
}
config.mouseDownOnSelect = false;
});
list = $("<ul/>").appendTo(element).mouseover( function(event) {
if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
$(target(event)).addClass(CLASSES.ACTIVE);
}
}).click(function(event) {
$(target(event)).addClass(CLASSES.ACTIVE);
select();
if( options.inputFocus )
input.focus();
return false;
}).mousedown(function() {
config.mouseDownOnSelect = true;
}).mouseup(function() {
config.mouseDownOnSelect = false;
});
if( options.width > 0 )
element.css("width", options.width);
needsInit = false;
}
function target(event) {
var element = event.target;
while(element && element.tagName != "LI")
element = element.parentNode;
// more fun with IE, sometimes event.target is empty, just ignore it then
if(!element)
return [];
return element;
}
function moveSelect(step) {
listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
movePosition(step);
var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
if(options.scroll) {
var offset = 0;
listItems.slice(0, active).each(function() {
offset += this.offsetHeight;
});
if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
} else if(offset < list.scrollTop()) {
list.scrollTop(offset);
}
}
};
function movePosition(step) {
if (options.scrollJumpPosition || (!options.scrollJumpPosition && !((step < 0 && active == 0) || (step > 0 && active == listItems.length - 1)) )) {
active += step;
if (active < 0) {
active = listItems.length - 1;
} else if (active >= listItems.length) {
active = 0;
}
}
}
function limitNumberOfItems(available) {
return options.max && options.max < available
? options.max
: available;
}
function fillList() {
list.empty();
var max = limitNumberOfItems(data.length);
for (var i=0; i < max; i++) {
if (!data[i])
continue;
var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
if ( formatted === false )
continue;
var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
$.data(li, "ac_data", data[i]);
}
listItems = list.find("li");
if ( options.selectFirst ) {
listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
active = 0;
}
// apply bgiframe if available
if ( $.fn.bgiframe )
list.bgiframe();
}
return {
display: function(d, q) {
init();
data = d;
term = q;
fillList();
},
next: function() {
moveSelect(1);
},
prev: function() {
moveSelect(-1);
},
pageUp: function() {
if (active != 0 && active - 8 < 0) {
moveSelect( -active );
} else {
moveSelect(-8);
}
},
pageDown: function() {
if (active != listItems.length - 1 && active + 8 > listItems.length) {
moveSelect( listItems.length - 1 - active );
} else {
moveSelect(8);
}
},
hide: function() {
element && element.hide();
listItems && listItems.removeClass(CLASSES.ACTIVE);
active = -1;
},
visible : function() {
return element && element.is(":visible");
},
current: function() {
return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
},
show: function() {
var offset = $(input).offset();
element.css({
width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
top: offset.top + input.offsetHeight,
left: offset.left
}).show();
if(options.scroll) {
list.scrollTop(0);
list.css({
maxHeight: options.scrollHeight,
overflow: 'auto'
});
if(navigator.userAgent.indexOf("MSIE") != -1 && typeof document.body.style.maxHeight === "undefined") {
var listHeight = 0;
listItems.each(function() {
listHeight += this.offsetHeight;
});
var scrollbarsVisible = listHeight > options.scrollHeight;
list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
if (!scrollbarsVisible) {
// IE doesn't recalculate width when scrollbar disappears
listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
}
}
}
},
selected: function() {
var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
return selected && selected.length && $.data(selected[0], "ac_data");
},
emptyList: function (){
list && list.empty();
},
unbind: function() {
element && element.remove();
}
};
};
$.fn.selection = function(start, end) {
if (start !== undefined) {
return this.each(function() {
if( this.createTextRange ){
var selRange = this.createTextRange();
if (end === undefined || start == end) {
selRange.move("character", start);
selRange.select();
} else {
selRange.collapse(true);
selRange.moveStart("character", start);
selRange.moveEnd("character", end);
selRange.select();
}
} else if( this.setSelectionRange ){
this.setSelectionRange(start, end);
} else if( this.selectionStart ){
this.selectionStart = start;
this.selectionEnd = end;
}
});
}
var field = this[0];
if ( field.createTextRange ) {
var range = document.selection.createRange(),
orig = field.value,
teststring = "<->",
textLength = range.text.length;
range.text = teststring;
var caretAt = field.value.indexOf(teststring);
field.value = orig;
this.selection(caretAt, caretAt + textLength);
return {
start: caretAt,
end: caretAt + textLength
}
} else if( field.selectionStart !== undefined ){
return {
start: field.selectionStart,
end: field.selectionEnd
}
}
};
})(jQuery);

View File

@ -1,114 +0,0 @@
/*!
* jQuery Cookie Plugin v1.4.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2006, 2014 Klaus Hartl
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD (Register as an anonymous module)
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node/CommonJS
module.exports = factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {
var pluses = /\+/g;
function encode(s) {
return config.raw ? s : encodeURIComponent(s);
}
function decode(s) {
return config.raw ? s : decodeURIComponent(s);
}
function stringifyCookieValue(value) {
return encode(config.json ? JSON.stringify(value) : String(value));
}
function parseCookieValue(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape...
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
// Replace server-side written pluses with spaces.
// If we can't decode the cookie, ignore it, it's unusable.
// If we can't parse the cookie, ignore it, it's unusable.
s = decodeURIComponent(s.replace(pluses, ' '));
return config.json ? JSON.parse(s) : s;
} catch(e) {}
}
function read(s, converter) {
var value = config.raw ? s : parseCookieValue(s);
return $.isFunction(converter) ? converter(value) : value;
}
var config = $.cookie = function (key, value, options) {
// Write
if (arguments.length > 1 && !$.isFunction(value)) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
}
return (document.cookie = [
encode(key), '=', stringifyCookieValue(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// Read
var result = key ? undefined : {},
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling $.cookie().
cookies = document.cookie ? document.cookie.split('; ') : [],
i = 0,
l = cookies.length;
for (; i < l; i++) {
var parts = cookies[i].split('='),
name = decode(parts.shift()),
cookie = parts.join('=');
if (key === name) {
// If second argument (value) is a function it's a converter...
result = read(cookie, value);
break;
}
// Prevent storing a cookie that we couldn't decode.
if (!key && (cookie = read(cookie)) !== undefined) {
result[name] = cookie;
}
}
return result;
};
config.defaults = {};
$.removeCookie = function (key, options) {
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
return !$.cookie(key);
};
}));

File diff suppressed because one or more lines are too long

View File

@ -1,69 +0,0 @@
/**
* jQuery.fn.sortElements
* --------------
* @author James Padolsey (http://james.padolsey.com)
* @version 0.11
* @updated 18-MAR-2010
* --------------
* @param Function comparator:
* Exactly the same behaviour as [1,2,3].sort(comparator)
*
* @param Function getSortable
* A function that should return the element that is
* to be sorted. The comparator will run on the
* current collection, but you may want the actual
* resulting sort to occur on a parent or another
* associated element.
*
* E.g. $('td').sortElements(comparator, function(){
* return this.parentNode;
* })
*
* The <td>'s parent (<tr>) will be sorted instead
* of the <td> itself.
*/
jQuery.fn.sortElements = (function(){
var sort = [].sort;
return function(comparator, getSortable) {
getSortable = getSortable || function(){return this;};
var placements = this.map(function(){
var sortElement = getSortable.call(this),
parentNode = sortElement.parentNode,
// Since the element itself will change position, we have
// to have some way of storing it's original position in
// the DOM. The easiest way is to have a 'flag' node:
nextSibling = parentNode.insertBefore(
document.createTextNode(''),
sortElement.nextSibling
);
return function() {
if (parentNode === this) {
throw new Error(
"You can't sort elements if any one is a descendant of another."
);
}
// Insert before flag:
parentNode.insertBefore(this, nextSibling);
// Remove flag:
parentNode.removeChild(nextSibling);
};
});
return sort.call(this, comparator).each(function(i){
placements[i].call(getSortable.call(this));
});
};
})();

View File

@ -1,8 +0,0 @@
/*!
* sprintf and vsprintf for jQuery
* somewhat based on http://jan.moesen.nu/code/javascript/sprintf-and-printf-in-javascript/
* Copyright (c) 2008 Sabin Iacob (m0n5t3r) <iacobs@m0n5t3r.info>
* @license http://www.gnu.org/licenses/gpl.html
* @project jquery.sprintf
*/
(function(d){var a={b:function(e){return parseInt(e,10).toString(2)},c:function(e){return String.fromCharCode(parseInt(e,10))},d:function(e){return parseInt(e,10)},u:function(e){return Math.abs(e)},f:function(f,e){e=parseInt(e,10);f=parseFloat(f);if(isNaN(e&&f)){return NaN}return e&&f.toFixed(e)||f},o:function(e){return parseInt(e,10).toString(8)},s:function(e){return e},x:function(e){return(""+parseInt(e,10).toString(16)).toLowerCase()},X:function(e){return(""+parseInt(e,10).toString(16)).toUpperCase()}};var c=/%(?:(\d+)?(?:\.(\d+))?|\(([^)]+)\))([%bcdufosxX])/g;var b=function(f){if(f.length==1&&typeof f[0]=="object"){f=f[0];return function(i,h,k,j,g,m,l){return a[g](f[j])}}else{var e=0;return function(i,h,k,j,g,m,l){if(g=="%"){return"%"}return a[g](f[e++],k)}}};d.extend({sprintf:function(f){var e=Array.apply(null,arguments).slice(1);return f.replace(c,b(e))},vsprintf:function(f,e){return f.replace(c,b(e))}})})(jQuery);

View File

@ -1,308 +0,0 @@
$(window).load(function() {
var $document = $(document);
var $navigation = $('#navigation');
var navigationHeight = $navigation.height();
var $left = $('#left');
var $right = $('#right');
var $rightInner = $('#rightInner');
var $splitter = $('#splitter');
var $groups = $('#groups');
var $content = $('#content');
// Menu
// Hide deep packages and namespaces
$('ul span', $groups).click(function(event) {
event.preventDefault();
event.stopPropagation();
$(this)
.toggleClass('collapsed')
.parent()
.next('ul')
.toggleClass('collapsed');
}).click();
$active = $('ul li.active', $groups);
if ($active.length > 0) {
// Open active
$('> a > span', $active).click();
} else {
$main = $('> ul > li.main', $groups);
if ($main.length > 0) {
// Open first level of the main project
$('> a > span', $main).click();
} else {
// Open first level of all
$('> ul > li > a > span', $groups).click();
}
}
// Content
// Search autocompletion
var autocompleteFound = false;
var autocompleteFiles = {'c': 'class', 'co': 'constant', 'f': 'function', 'm': 'class', 'mm': 'class', 'p': 'class', 'mp': 'class', 'cc': 'class'};
var $search = $('#search input[name=q]');
$search
.autocomplete(ApiGen.elements, {
matchContains: true,
scrollHeight: 200,
max: 20,
width: 300,
noRecord: '',
highlight: function(value, term) {
var term = term.toUpperCase().replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1").replace(/[A-Z0-9]/g, function(m, offset) {
return offset === 0 ? '(?:' + m + '|^' + m.toLowerCase() + ')' : '(?:(?:[^<>]|<[^<>]*>)*' + m + '|' + m.toLowerCase() + ')';
});
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)"), "<strong>$1</strong>");
},
formatItem: function(data) {
return data.length > 1 ? data[1].replace(/^(.+\\)(.+)$/, '<span><small>$1</small>$2</span>') : data[0];
},
formatMatch: function(data) {
return data[1];
},
formatResult: function(data) {
return data[1];
},
show: function($list) {
var $items = $('li span', $list);
var maxWidth = Math.max.apply(null, $items.map(function() {
return $(this).width();
}));
// 10px padding
$list.width(Math.max(maxWidth + 10, $search.innerWidth()));
}
}).result(function(event, data) {
autocompleteFound = true;
var location = window.location.href.split('/');
location.pop();
var parts = data[1].split(/::|$/);
var file = $.sprintf(ApiGen.config.templates[autocompleteFiles[data[0]]].filename, parts[0].replace(/\(\)/, '').replace(/[^\w]/g, '.'));
if (parts[1]) {
file += '#' + ('mm' === data[0] || 'mp' === data[0] ? 'm' : '') + parts[1].replace(/([\w]+)\(\)/, '_$1');
}
location.push(file);
window.location = location.join('/');
// Workaround for Opera bug
$(this).closest('form').attr('action', location.join('/'));
}).closest('form')
.submit(function() {
var query = $search.val();
if ('' === query) {
return false;
}
return !autocompleteFound && '' !== $('#search input[name=cx]').val();
});
// Save natural order
$('table.summary tr[data-order]', $content).each(function(index) {
do {
index = '0' + index;
} while (index.length < 3);
$(this).attr('data-order-natural', index);
});
// Switch between natural and alphabetical order
var $caption = $('table.summary', $content)
.filter(':has(tr[data-order])')
.prev('h2');
$caption
.click(function() {
var $this = $(this);
var order = $this.data('order') || 'natural';
order = 'natural' === order ? 'alphabetical' : 'natural';
$this.data('order', order);
$.cookie('order', order, {expires: 365});
var attr = 'alphabetical' === order ? 'data-order' : 'data-order-natural';
$this
.next('table')
.find('tr').sortElements(function(a, b) {
return $(a).attr(attr) > $(b).attr(attr) ? 1 : -1;
});
return false;
})
.addClass('switchable')
.attr('title', 'Switch between natural and alphabetical order');
if ((null === $.cookie('order') && 'alphabetical' === ApiGen.config.options.elementsOrder) || 'alphabetical' === $.cookie('order')) {
$caption.click();
}
// Open details
if (ApiGen.config.options.elementDetailsCollapsed) {
$(document.body).on('click', 'tr', function(ev) {
var short = this.querySelector('.short')
, detailed = this.querySelector('.detailed')
if (!short || !detailed) return
$(short).toggleClass('hidden')
$(detailed).toggleClass('hidden')
})
}
// Splitter
var splitterWidth = $splitter.width();
var splitterPosition = $.cookie('splitter') ? parseInt($.cookie('splitter')) : null;
var splitterPositionBackup = $.cookie('splitterBackup') ? parseInt($.cookie('splitterBackup')) : null;
function setSplitterPosition(position)
{
splitterPosition = position;
$left.width(position);
$right.css('margin-left', position + splitterWidth);
$splitter.css('left', position);
}
function setNavigationPosition()
{
var height = $(window).height() - navigationHeight;
$left.height(height);
$splitter.height(height);
$right.height(height);
}
function setContentWidth()
{
var width = $rightInner.width();
$rightInner
.toggleClass('medium', width <= 960)
.toggleClass('small', width <= 650);
}
$splitter.mousedown(function() {
$splitter.addClass('active');
$document.mousemove(function(event) {
if (event.pageX >= 230 && $document.width() - event.pageX >= 600 + splitterWidth) {
setSplitterPosition(event.pageX);
setContentWidth();
}
});
$()
.add($splitter)
.add($document)
.mouseup(function() {
$splitter
.removeClass('active')
.unbind('mouseup');
$document
.unbind('mousemove')
.unbind('mouseup');
$.cookie('splitter', splitterPosition, {expires: 365});
});
return false;
});
$splitter.dblclick(function() {
if (splitterPosition) {
splitterPositionBackup = $left.width();
setSplitterPosition(0);
} else {
setSplitterPosition(splitterPositionBackup);
splitterPositionBackup = null;
}
setContentWidth();
$.cookie('splitter', splitterPosition, {expires: 365});
$.cookie('splitterBackup', splitterPositionBackup, {expires: 365});
});
if (null !== splitterPosition) {
setSplitterPosition(splitterPosition);
}
setNavigationPosition();
setContentWidth();
$(window)
.resize(setNavigationPosition)
.resize(setContentWidth);
// Select selected lines
var matches = window.location.hash.substr(1).match(/^\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*$/);
if (null !== matches) {
var lists = matches[0].split(',');
for (var i = 0; i < lists.length; i++) {
var lines = lists[i].split('-');
lines[0] = parseInt(lines[0]);
lines[1] = parseInt(lines[1] || lines[0]);
for (var j = lines[0]; j <= lines[1]; j++) {
$('#' + j).addClass('selected');
}
}
var $firstLine = $('#' + parseInt(matches[0]));
if ($firstLine.length > 0) {
$right.scrollTop($firstLine.position().top);
}
}
// Save selected lines
var lastLine;
$('.l a').click(function(event) {
event.preventDefault();
var selectedLine = $(this).parent().index() + 1;
var $selectedLine = $('pre.code .l').eq(selectedLine - 1);
if (event.shiftKey) {
if (lastLine) {
for (var i = Math.min(selectedLine, lastLine); i <= Math.max(selectedLine, lastLine); i++) {
$('#' + i).addClass('selected');
}
} else {
$selectedLine.addClass('selected');
}
} else if (event.ctrlKey) {
$selectedLine.toggleClass('selected');
} else {
var $selected = $('.l.selected')
.not($selectedLine)
.removeClass('selected');
if ($selected.length > 0) {
$selectedLine.addClass('selected');
} else {
$selectedLine.toggleClass('selected');
}
}
lastLine = $selectedLine.hasClass('selected') ? selectedLine : null;
// Update hash
var lines = $('.l.selected')
.map(function() {
return parseInt($(this).attr('id'));
})
.get()
.sort(function(a, b) {
return a - b;
});
var hash = [];
var list = [];
for (var j = 0; j < lines.length; j++) {
if (0 === j && j + 1 === lines.length) {
hash.push(lines[j]);
} else if (0 === j) {
list[0] = lines[j];
} else if (lines[j - 1] + 1 !== lines[j] && j + 1 === lines.length) {
hash.push(list.join('-'));
hash.push(lines[j]);
} else if (lines[j - 1] + 1 !== lines[j]) {
hash.push(list.join('-'));
list = [lines[j]];
} else if (j + 1 === lines.length) {
list[1] = lines[j];
hash.push(list.join('-'));
} else {
list[1] = lines[j];
}
}
hash = hash.join(',');
$backup = $('#' + hash).removeAttr('id');
window.location.hash = hash;
$backup.attr('id', hash);
});
});

View File

@ -1,23 +0,0 @@
{layout '@layout.latte'}
{var $active = 'namespace'}
{block title}{if $namespace != 'None'}Namespace {$namespace}{else}No namespace{/if}{/block}
{block content}
<div id="content" class="namespace">
<h1>{if $namespace != 'None'}Namespace {$namespace|namespaceLinks:false|noescape}{else}No namespace{/if}</h1>
{if $subnamespaces}
<div class="panel panel-default">
<div class="panel-heading"><h2>Namespaces summary</h2></div>
<table class="summary table table-bordered table-striped" id="namespaces">
<tr n:foreach="$subnamespaces as $namespace">
<td class="name"><a href="{$namespace|namespaceUrl}">{$namespace}</a></td>
</tr>
</table>
</div>
{/if}
{include '@elementlist.latte'}
</div>
{/block}

View File

@ -1,11 +0,0 @@
{contentType xml}
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>{$config->title}</ShortName>
<Description>{$config->title} Documentation</Description>
<Url type="text/html" method="GET" template="http://www.google.com/cse?cx={$config->googleCseId|url}&amp;ie=UTF-8&amp;q={l}searchTerms{r}"/>
<Image width="16" height="16">{$config->baseUrl}/favicon.ico</Image>
<SyndicationRight>open</SyndicationRight>
<InputEncoding>UTF-8</InputEncoding>
<OutputEncoding>UTF-8</OutputEncoding>
</OpenSearchDescription>

View File

@ -1,48 +0,0 @@
{layout '@layout.latte'}
{var $active = 'overview'}
{block title}{$config->title ?: 'Overview'}{/block}
{block content}
<div id="content">
<h1>{include title}</h1>
{var $group = false}
{if count($namespaces)}
<div class="panel panel-default">
<div class="panel-heading"><h2>Namespaces summary</h2></div>
<table class="summary table table-bordered table-striped" id="namespaces">
{foreach $namespaces as $namespace}
{continueIf $config->main && 0 !== strpos($namespace, $config->main)}
<tr>
{var $group = true}
<td class="name"><a href="{$namespace|namespaceUrl}">{$namespace}</a></td>
</tr>
{/foreach}
</table>
</div>
{/if}
{if count($packages)}
<div class="panel panel-default">
<div class="panel-heading"><h2>Packages summary</h2></div>
<table class="summary table table-bordered table-striped" id="packages">
{foreach $packages as $package}
{continueIf $config->main && 0 !== strpos($package, $config->main)}
<tr>
{var $group = true}
<td class="name">
<a href="{$package|packageUrl}">{$package}</a>
</td>
</tr>
{/foreach}
</table>
</div>
{/if}
{if ! $group}
{include '@elementlist.latte'}
{/if}
</div>
{/block}

View File

@ -1,23 +0,0 @@
{layout '@layout.latte'}
{var $active = 'package'}
{block title}{if $package != 'None'}Package {$package}{else}No package{/if}{/block}
{block content}
<div id="content" class="package">
<h1>{if $package != 'None'}Package {$package|packageLinks:false|noescape}{else}No package{/if}</h1>
{if $subpackages}
<div class="panel panel-default">
<div class="panel-heading"><h2>Packages summary</h2></div>
<table class="summary table table-bordered table-striped" id="packages">
<tr n:foreach="$subpackages as $package">
<td class="name"><a href="{$package|packageUrl}">{$package}</a></td>
</tr>
</table>
</div>
{/if}
{include '@elementlist.latte'}
</div>
{/block}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 B

View File

@ -1,569 +0,0 @@
/* Normal styles */
body {
padding: 50px 0 0 0;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
}
h2 {
font-size: 1.5em;
margin: 0.83em 0;
}
h3 {
font-size: 1.17em;
margin: 1em 0 0.2em 0;
}
h4 {
font-size: 100%;
margin: 0;
padding: 0;
}
.panel-heading h2,
.panel-heading h3 {
margin-top: 0;
margin-bottom: 0;
}
.panel > p {
margin: 10px;
}
ul, ol {
margin-bottom: 0;
}
a, a:hover {
text-decoration: none;
}
var {
font-weight: bold;
font-style: normal;
color: #c09853;
}
code {
color: #000;
white-space: nowrap;
border: none;
background: transparent;
padding: 0
}
code:empty {
display: none;
}
code a b {
color: #000;
}
pre code {
white-space: pre;
}
.deprecated {
text-decoration: line-through;
opacity: .5;
}
.invalid {
color: #dd1144;
}
.hidden {
display: none;
}
/* Left side */
#left {
overflow: auto;
width: 270px;
height: 100%;
position: fixed;
}
/* Menu */
#menu {
padding: 10px;
overflow-x: hidden;
}
#menu h3 {
border-bottom: 1px solid #E7E7E7;
margin-left: -10px;
margin-right: -10px;
padding: 0 10px 5px 10px;
}
#menu ul {
list-style: none;
padding: 0;
margin: 0;
}
#menu ul ul {
padding-left: 10px;
}
#menu li {
white-space: nowrap;
position: relative;
}
#menu a {
display: block;
padding: 3px;
border-radius: 3px;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
}
#menu a:hover {
background-color: #a46497;
color: #fff !important;
}
#menu .active > a {
font-weight: bold;
color: #000;
}
#menu .active > a.invalid {
color: #dd1144;
}
#menu #groups span {
position: absolute;
top: 6px;
right: 3px;
cursor: pointer;
display: block;
width: 12px;
height: 12px;
background: url('collapsed.png') transparent 0 0 no-repeat;
}
#menu #groups span:hover {
background-position: -12px 0;
}
#menu #groups span.collapsed {
background-position: 0 -12px;
}
#menu #groups span.collapsed:hover {
background-position: -12px -12px;
}
#menu #groups ul.collapsed {
display: none;
}
/* Autocomplete */
.ac_results {
border-radius: 4px;
margin-top: 2px;
background-color: #fff;
border: 1px solid #E7E7E7;
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
overflow: hidden;
z-index: 99999;
}
.ac_results ul {
display: block;
list-style: none;
padding: 0;
margin: 0;
}
.ac_results li {
margin: 0;
padding: 0 5px;
line-height: 2;
cursor: default;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.ac_results li strong {
color: #000;
}
.ac_over {
background-color: #a46497;
color: #fff;
}
.ac_results li.ac_over strong {
color: #fff;
}
/* Right side */
#right {
overflow: auto;
margin-left: 275px;
height: 100%;
position: relative;
left: 0;
right: 0;
}
#rightInner {
max-width: 1000px;
min-width: 350px;
}
/* Navigation */
#navigation {
margin-bottom: 0;
}
.navbar .nav > li > span {
position: relative;
display: block;
color: #777;
line-height: 20px;
padding: 15px;
}
.navbar .nav > li.active > span {
background-color: #E7E7E7;
color: #555;
}
/* Content */
#content {
clear: both;
padding: 5px 15px;
}
#content > .description {
margin: 1.2em 0;
}
#content .alert-info {
margin-top: 18px;
}
dl.tree {
margin: 1.2em 0;
padding: 10px;
}
dl.tree dd {
margin: 0;
padding: 0;
line-height: 18px;
}
.elementList {
line-height: 24px;
}
h2.switchable {
background: transparent url('sort.png') no-repeat center right;
cursor: pointer;
}
.summary td:first-child {
text-align: right;
}
.summary td hr {
margin: 8px -8px;
}
#packages.summary td:first-child, #namespaces.summary td:first-child, .inherited.summary td:first-child, .used.summary td:first-child {
text-align: left;
}
.summary tr:hover td {
background: #f6f6f4;
}
.summary .description p {
margin: 0;
}
.class #methods.summary .description p:first-child, .summary .description.detailed h4:first-child {
margin-top: 8px;
}
.summary .description p + p, .summary .description ul, .summary .description pre, .summary .description.detailed h4 {
margin-top: 4px;
}
.summary dl {
margin: 0;
}
.summary dd {
margin: 0 0 0 25px;
}
.summary dt, dd {
line-height: 24px;
}
.name, .attributes {
white-space: nowrap;
}
.value code {
white-space: pre-wrap;
}
td.name, td.attributes {
width: 1%;
}
.class .methods .name, .class .properties .name, .class .constants .name {
width: auto;
white-space: normal;
}
.class .methods .name > div > code {
white-space: pre-wrap;
}
.class .methods .name > div > code span, .function .value > code {
white-space: nowrap;
display: inline-block;
}
.class .methods td.name > div, .class td.value > div {
position: relative;
padding-right: 1em;
}
.attributes code, .name code, dd code {
color: #468847;
}
.anchor {
position: absolute;
top: 0;
right: 0;
line-height: 1;
font-size: 85%;
margin: 0;
color: #a46497 !important;
}
.list {
margin: 0 0 5px 25px;
line-height: 24px;
}
/* Splitter */
#splitter {
position: fixed;
height: 100%;
width: 5px;
left: 270px;
background: #E7E7E7 url('resize.png') left center no-repeat;
cursor: e-resize;
}
#splitter.active {
opacity: .5;
}
/* Footer */
#footer {
border-top: 1px solid #e5e5e5;
clear: both;
color: #808080;
text-align: right;
padding: 2em 1em;
margin: 3em 0 40px 0;
}
/* Tree */
div.tree ul {
list-style: none;
background: url('tree-vertical.png') left repeat-y;
padding: 0;
margin-left: 20px;
}
div.tree li {
margin: 0;
padding: 0;
}
div.tree div {
padding-left: 30px;
}
div.tree div.notlast {
background: url('tree-hasnext.png') left 10px no-repeat;
}
div.tree div.last {
background: url('tree-last.png') left -240px no-repeat;
}
div.tree li.last {
background: url('tree-cleaner.png') left center repeat-y;
}
div.tree span.padding {
padding-left: 15px;
}
/* Source code */
#source {
margin: 1em 0 1em 1em;
border: 1px solid #ccc;
border-radius: 4px;
overflow: auto;
}
#source pre {
padding: 0;
border: none;
overflow: visible;
}
#source .numbers {
float: left;
background-color: transparent;
}
#source .code {
}
.php-keyword1 {
color: #468847;
font-weight: bold;
}
.php-keyword2 {
font-weight: bold;
}
.php-var {
color: #c09853;
font-weight: bold;
}
.php-num {
color: #006dcc;
}
.php-quote {
color: #006dcc;
}
.php-comment {
color: #929292;
}
.xlang {
color: #468847;
font-weight: bold;
}
span.l {
display: block;
}
span.l.selected {
background: #f9f2d2;
}
span.l a {
color: #333333;
}
span.l a:hover, span.l a:active, span.l a:focus {
background: transparent;
color: #333333 !important;
}
span.l .php-var a {
color: #c09853;
}
span.l .php-var a:hover, span.l .php-var a:active, span.l .php-var a:focus {
color: #c09853 !important;
}
span.l a.l {
background: #fbfbfc;
margin-right: 8px;
padding: 2px 2px 2px 8px;
color: #c0c0c0;
}
span.l a.l:hover, span.l a.l:active, span.l a.l:focus {
background: #fbfbfc;
color: #c0c0c0 !important;
}
/* Small screens */
#rightInner.medium .name, #rightInner.medium .attributes {
white-space: normal;
}
/* global style */
.left, .summary td.left {
text-align: left;
}
.right, .summary td.right {
text-align: right;
}
/* Custom styles for Woo */
.navbar-header {
padding: 10px;
}
.navbar-brand {
background: url(woocommerce_logo_white.png) no-repeat left top;
background-size: 149px 30px;
width: 159px;
padding: 30px 0 0 0;
overflow: hidden;
height: 0;
}
#navigation {
background: #3c3c3c;
color: #fff;
}
#navigation a {
color: #fff;
}
.navbar .nav > li > span {
color: #999;
}
.navbar .nav > li > a:hover > span {
color: #a46497;
}
.navbar .nav > li.active > span, .navbar .nav > li.active > a {
background: #a46497;
color: #fff;
}
a {
color: #a46497;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -1,4 +0,0 @@
{contentType text}
User-agent: *
Disallow:
Sitemap: {$config->baseUrl}/sitemap.xml

View File

@ -1,26 +0,0 @@
{contentType xml}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>{$config->baseUrl}/index.html</loc>
</url>
<url n:foreach="$namespaces as $namespace">
<loc>{$config->baseUrl}/{$namespace|namespaceUrl}</loc>
</url>
<url n:foreach="$packages as $package">
<loc>{$config->baseUrl}/{$package|packageUrl}</loc>
</url>
{define elements}
<url n:foreach="$elements as $element">
<loc>{$config->baseUrl}/{$element|elementUrl}</loc>
</url>
{/define}
{include elements, elements => $classes}
{include elements, elements => $interfaces}
{include elements, elements => $traits}
{include elements, elements => $exceptions}
{include elements, elements => $constants}
{include elements, elements => $functions}
</urlset>

View File

@ -1,12 +0,0 @@
{layout '@layout.latte'}
{var $robots = false}
{block title}File {$fileName}{/block}
{block content}
<div id="source">
{var $lineRegex = '~<span class="line">(\s*)(\d+):(\s*)</span>([^\\n]*(?:\\n|$))~'}
<pre class="numbers"><code>{$source|replaceRE:$lineRegex,'<span class="l"><a href="#$2">$1$2$3</a></span>'|noescape}</code></pre>
<pre class="code"><code>{$source|replaceRE:$lineRegex,'<span id="$2" class="l">$4</span>'|noescape}</code></pre>
</div>
{/block}

View File

@ -1,67 +0,0 @@
{layout '@layout.latte'}
{var $active = 'tree'}
{block title}Tree{/block}
{define tree}
<div class="tree">
<ul>
{var $level = -1}
{foreach $tree as $reflectionName => $reflection|noiterator}
{if $level === $tree->getDepth()}
</li>
{elseif $level > $tree->getDepth()}
{='</ul></li>'|repeat:$level - $tree->getDepth()|noescape}
{elseif -1 !== $level}
<ul>
{/if}
<li n:class="!$tree->hasSibling() ? last"><div class="{if $tree->hasSibling()}not{/if}last"><a href="{$reflectionName|classUrl}" n:tag-if="$reflection->documented"><span n:class="$reflection->deprecated ? deprecated, !$reflection->valid ? invalid">{$reflectionName}</span></a>
{var $interfaces = $reflection->ownInterfaces}
{if $interfaces} implements {foreach $interfaces as $interface}
<a href="{$interface|classUrl}" n:tag-if="$interface->documented"><span n:class="$interface->deprecated ? deprecated, !$interface->valid ? invalid">{$interface->name}</span></a>{sep}, {/sep}
{/foreach}{/if}
{var $traits = $reflection->ownTraits}
{if $traits}{if $interfaces}<br><span class="padding"></span>{/if} uses {foreach $traits as $trait}
{if is_string($trait)}
{$trait} (not available)
{else}
<a href="{$trait|classUrl}" n:tag-if="$trait->documented"><span n:class="$trait->deprecated ? deprecated, !$trait->valid ? invalid">{$trait->name}</span></a>{sep}, {/sep}
{/}
{/foreach}{/if}
</div>
{var $level = $tree->getDepth()}
{/foreach}
</li>
{='</ul></li>'|repeat:$level|noescape}
</ul>
</div>
{/define}
{block content}
<div id="content">
<h1>{include title}</h1>
{if $classTree->valid()}
<h2>Classes</h2>
{include tree, tree => $classTree}
{/if}
{if $interfaceTree->valid()}
<h2>Interfaces</h2>
{include tree, tree => $interfaceTree}
{/if}
{if $traitTree->valid()}
<h2>Traits</h2>
{include tree, tree => $traitTree}
{/if}
{if $exceptionTree->valid()}
<h2>Exceptions</h2>
{include tree, tree => $exceptionTree}
{/if}
</div>
{/block}

View File

@ -2,20 +2,20 @@
* WooCommerce CSS Variables
*/
$woocommerce: #a46497;
$green: #7ad03a;
$red: #a00;
$orange: #ffba00;
$blue: #2ea2cc;
$woocommerce: #a46497 !default;
$green: #7ad03a !default;
$red: #a00 !default;
$orange: #ffba00 !default;
$blue: #2ea2cc !default;
$primary: #a46497; // Primary color for buttons (alt)
$primarytext: desaturate(lighten($primary, 50%), 18%); // Text on primary color bg
$primary: #a46497 !default; // Primary color for buttons (alt)
$primarytext: desaturate(lighten($primary, 50%), 18%) !default; // Text on primary color bg
$secondary: desaturate(lighten($primary, 40%), 21%); // Secondary buttons
$secondarytext: desaturate(darken($secondary, 60%), 21%); // Text on secondary color bg
$secondary: desaturate(lighten($primary, 40%), 21%) !default; // Secondary buttons
$secondarytext: desaturate(darken($secondary, 60%), 21%) !default; // Text on secondary color bg
$highlight: adjust-hue($primary, 150deg); // Prices, In stock labels, sales flash
$highlightext: desaturate(lighten($highlight, 50%), 18%); // Text on highlight color bg
$highlight: adjust-hue($primary, 150deg) !default; // Prices, In stock labels, sales flash
$highlightext: desaturate(lighten($highlight, 50%), 18%) !default; // Text on highlight color bg
$contentbg: #fff; // Content BG - Tabs (active state)
$subtext: #777; // small, breadcrumbs etc
$contentbg: #fff !default; // Content BG - Tabs (active state)
$subtext: #767676 !default; // small, breadcrumbs etc

View File

@ -1 +0,0 @@
div.woocommerce-message{overflow:hidden;position:relative;border-right-color:#cc99c2!important}div.woocommerce-message p{max-width:700px}div.woocommerce-message p:last-child{max-width:inherit}.woocommerce-message .button-primary,p.woocommerce-actions .button-primary{background:#bb77ae;border-color:#a36597;box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 0 #a36597;color:#fff;text-shadow:0 -1px 1px #a36597,-1px 0 1px #a36597,0 1px 1px #a36597,1px 0 1px #a36597}.woocommerce-message .button-primary:active,.woocommerce-message .button-primary:focus,.woocommerce-message .button-primary:hover,p.woocommerce-actions .button-primary:active,p.woocommerce-actions .button-primary:focus,p.woocommerce-actions .button-primary:hover{background:#a36597;border-color:#a36597;box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 0 #a36597}.woocommerce-message a.woocommerce-message-close,p.woocommerce-actions a.woocommerce-message-close{position:static;float:left;top:0;left:0;padding:0 28px 10px 15px;margin-top:-10px;font-size:13px;line-height:1.23076923;text-decoration:none}.woocommerce-message a.woocommerce-message-close::before,p.woocommerce-actions a.woocommerce-message-close::before{position:relative;top:18px;right:-20px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.woocommerce-message .button-primary,.woocommerce-message .button-secondary,p.woocommerce-actions .button-primary,p.woocommerce-actions .button-secondary{text-decoration:none!important}.woocommerce-message .twitter-share-button,p.woocommerce-actions .twitter-share-button{margin-top:-3px;margin-right:3px;vertical-align:middle}.woocommerce-about-text,p.woocommerce-actions{margin-bottom:1em!important}div.woocommerce-legacy-shipping-notice,div.woocommerce-no-shipping-methods-notice{overflow:hidden;padding:1px 12px}div.woocommerce-legacy-shipping-notice p,div.woocommerce-no-shipping-methods-notice p{position:relative;z-index:1;max-width:700px;line-height:1.5em;margin:12px 0}div.woocommerce-legacy-shipping-notice p.main,div.woocommerce-no-shipping-methods-notice p.main{font-size:1.1em}div.woocommerce-legacy-shipping-notice::before,div.woocommerce-no-shipping-methods-notice::before{content:'\e01b';font-family:WooCommerce;text-align:center;line-height:1;color:#f7f1f6;display:block;width:1em;font-size:20em;top:36px;left:12px;position:absolute}

View File

@ -1 +0,0 @@
div.woocommerce-message{overflow:hidden;position:relative;border-left-color:#cc99c2!important}div.woocommerce-message p{max-width:700px}div.woocommerce-message p:last-child{max-width:inherit}.woocommerce-message .button-primary,p.woocommerce-actions .button-primary{background:#bb77ae;border-color:#a36597;box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 0 #a36597;color:#fff;text-shadow:0 -1px 1px #a36597,1px 0 1px #a36597,0 1px 1px #a36597,-1px 0 1px #a36597}.woocommerce-message .button-primary:active,.woocommerce-message .button-primary:focus,.woocommerce-message .button-primary:hover,p.woocommerce-actions .button-primary:active,p.woocommerce-actions .button-primary:focus,p.woocommerce-actions .button-primary:hover{background:#a36597;border-color:#a36597;box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 0 #a36597}.woocommerce-message a.woocommerce-message-close,p.woocommerce-actions a.woocommerce-message-close{position:static;float:right;top:0;right:0;padding:0 15px 10px 28px;margin-top:-10px;font-size:13px;line-height:1.23076923;text-decoration:none}.woocommerce-message a.woocommerce-message-close::before,p.woocommerce-actions a.woocommerce-message-close::before{position:relative;top:18px;left:-20px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.woocommerce-message .button-primary,.woocommerce-message .button-secondary,p.woocommerce-actions .button-primary,p.woocommerce-actions .button-secondary{text-decoration:none!important}.woocommerce-message .twitter-share-button,p.woocommerce-actions .twitter-share-button{margin-top:-3px;margin-left:3px;vertical-align:middle}.woocommerce-about-text,p.woocommerce-actions{margin-bottom:1em!important}div.woocommerce-legacy-shipping-notice,div.woocommerce-no-shipping-methods-notice{overflow:hidden;padding:1px 12px}div.woocommerce-legacy-shipping-notice p,div.woocommerce-no-shipping-methods-notice p{position:relative;z-index:1;max-width:700px;line-height:1.5em;margin:12px 0}div.woocommerce-legacy-shipping-notice p.main,div.woocommerce-no-shipping-methods-notice p.main{font-size:1.1em}div.woocommerce-legacy-shipping-notice::before,div.woocommerce-no-shipping-methods-notice::before{content:'\e01b';font-family:WooCommerce;text-align:center;line-height:1;color:#f7f1f6;display:block;width:1em;font-size:20em;top:36px;right:12px;position:absolute}

View File

@ -10,16 +10,11 @@ div.woocommerce-message {
overflow: hidden;
position: relative;
border-left-color: #cc99c2 !important;
p {
max-width: 700px;
}
p:last-child {
max-width: inherit;
}
}
p.woocommerce-actions,
.woocommerce-message {
.button-primary {
background: #bb77ae;
border-color: #a36597;
@ -27,7 +22,9 @@ p.woocommerce-actions,
color: #fff;
text-shadow: 0 -1px 1px #a36597, 1px 0 1px #a36597, 0 1px 1px #a36597, -1px 0 1px #a36597;
&:hover, &:focus, &:active {
&:hover,
&:focus,
&:active {
background: #a36597;
border-color: #a36597;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 0 #a36597;
@ -39,11 +36,12 @@ p.woocommerce-actions,
float: right;
top: 0;
right: 0;
padding: 0px 15px 10px 28px;
padding: 0 15px 10px 28px;
margin-top: -10px;
font-size: 13px;
line-height: 1.23076923;
text-decoration: none;
&::before {
position: relative;
top: 18px;
@ -68,33 +66,3 @@ p.woocommerce-actions,
.woocommerce-about-text {
margin-bottom: 1em !important;
}
div.woocommerce-legacy-shipping-notice,
div.woocommerce-no-shipping-methods-notice {
overflow: hidden;
padding: 1px 12px;
p {
position: relative;
z-index: 1;
max-width: 700px;
line-height: 1.5em;
margin: 12px 0;
&.main {
font-size: 1.1em;
}
}
&::before {
content: '\e01b';
font-family: 'WooCommerce';
text-align: center;
line-height: 1;
color: #f7f1f6;
display: block;
width: 1em;
font-size: 20em;
top: 36px;
right: 12px;
position: absolute;
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
body{background:#f1f1f1;box-shadow:none;margin:100px auto 24px;padding:0}#wc-logo{border:0;margin:0 0 24px;padding:0;text-align:center}#wc-logo img{max-width:50%}.wc-auth-content{background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.13);overflow:hidden;padding:24px 24px 0;zoom:1}.wc-auth-content h1,.wc-auth-content h2,.wc-auth-content h3,.wc-auth-content table{border:0;clear:none;color:#666;margin:0 0 24px;padding:0}.wc-auth-content p,.wc-auth-content ul{color:#666;font-size:1em;line-height:1.75em;margin:0 0 24px}.wc-auth-content p{padding:0}.wc-auth-content a{color:#a16696}.wc-auth-content a:focus,.wc-auth-content a:hover{color:#111}.wc-auth-content .wc-auth-login label{color:#999;display:block;margin-bottom:.5em}.wc-auth-content .wc-auth-login input{box-sizing:border-box;font-size:1.3em;padding:.5em;width:100%}.wc-auth-content .wc-auth-login .wc-auth-actions{padding:0}.wc-auth-content .wc-auth-login .wc-auth-actions .wc-auth-login-button{float:none;width:100%}.wc-auth-permissions{list-style:disc inside;padding:0}.wc-auth-permissions li{font-size:1em}.wc-auth-logged-in-as{background:#f5f5f5;border-bottom:2px solid #eee;line-height:70px;margin:0 0 24px;padding:0 0 0 1em}.wc-auth-logged-in-as p{margin:0;line-height:70px}.wc-auth-logged-in-as img{float:right;height:70px;margin:0 0 0 1em}.wc-auth-logged-in-as .wc-auth-logout{float:left}.wc-auth .wc-auth-actions{overflow:hidden;padding-right:24px}.wc-auth .wc-auth-actions .button{background:#f7f7f7;border-bottom-width:2px;border:1px solid #d7d7d7;box-sizing:border-box;color:#777;float:left;font-size:1.25em;height:auto;line-height:1em;padding:1em 2em;text-align:center;width:50%}.wc-auth .wc-auth-actions .button:focus,.wc-auth .wc-auth-actions .button:hover{background:#fcfcfc}.wc-auth .wc-auth-actions .button-primary{background:#ad6ea1;border-color:#a16696;box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 0 rgba(0,0,0,.15);color:#fff;float:left;opacity:1;text-shadow:0 -1px 1px #8a4f7f,-1px 0 1px #8a4f7f,0 1px 1px #8a4f7f,1px 0 1px #8a4f7f}.wc-auth .wc-auth-actions .button-primary:focus,.wc-auth .wc-auth-actions .button-primary:hover{background:#b472a8;color:#fff}.wc-auth .wc-auth-actions .wc-auth-approve{float:left}.wc-auth .wc-auth-actions .wc-auth-deny{float:right;margin-right:-24px}

View File

@ -1 +0,0 @@
body{background:#f1f1f1;box-shadow:none;margin:100px auto 24px;padding:0}#wc-logo{border:0;margin:0 0 24px;padding:0;text-align:center}#wc-logo img{max-width:50%}.wc-auth-content{background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.13);overflow:hidden;padding:24px 24px 0;zoom:1}.wc-auth-content h1,.wc-auth-content h2,.wc-auth-content h3,.wc-auth-content table{border:0;clear:none;color:#666;margin:0 0 24px;padding:0}.wc-auth-content p,.wc-auth-content ul{color:#666;font-size:1em;line-height:1.75em;margin:0 0 24px}.wc-auth-content p{padding:0}.wc-auth-content a{color:#a16696}.wc-auth-content a:focus,.wc-auth-content a:hover{color:#111}.wc-auth-content .wc-auth-login label{color:#999;display:block;margin-bottom:.5em}.wc-auth-content .wc-auth-login input{box-sizing:border-box;font-size:1.3em;padding:.5em;width:100%}.wc-auth-content .wc-auth-login .wc-auth-actions{padding:0}.wc-auth-content .wc-auth-login .wc-auth-actions .wc-auth-login-button{float:none;width:100%}.wc-auth-permissions{list-style:disc inside;padding:0}.wc-auth-permissions li{font-size:1em}.wc-auth-logged-in-as{background:#f5f5f5;border-bottom:2px solid #eee;line-height:70px;margin:0 0 24px;padding:0 1em 0 0}.wc-auth-logged-in-as p{margin:0;line-height:70px}.wc-auth-logged-in-as img{float:left;height:70px;margin:0 1em 0 0}.wc-auth-logged-in-as .wc-auth-logout{float:right}.wc-auth .wc-auth-actions{overflow:hidden;padding-left:24px}.wc-auth .wc-auth-actions .button{background:#f7f7f7;border-bottom-width:2px;border:1px solid #d7d7d7;box-sizing:border-box;color:#777;float:right;font-size:1.25em;height:auto;line-height:1em;padding:1em 2em;text-align:center;width:50%}.wc-auth .wc-auth-actions .button:focus,.wc-auth .wc-auth-actions .button:hover{background:#fcfcfc}.wc-auth .wc-auth-actions .button-primary{background:#ad6ea1;border-color:#a16696;box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 0 rgba(0,0,0,.15);color:#fff;float:right;opacity:1;text-shadow:0 -1px 1px #8a4f7f,1px 0 1px #8a4f7f,0 1px 1px #8a4f7f,-1px 0 1px #8a4f7f}.wc-auth .wc-auth-actions .button-primary:focus,.wc-auth .wc-auth-actions .button-primary:hover{background:#b472a8;color:#fff}.wc-auth .wc-auth-actions .wc-auth-approve{float:right}.wc-auth .wc-auth-actions .wc-auth-deny{float:left;margin-left:-24px}

View File

@ -1 +0,0 @@
@charset "UTF-8";@font-face{font-family:star;src:url(../fonts/star.eot);src:url(../fonts/star.eot?#iefix) format("embedded-opentype"),url(../fonts/star.woff) format("woff"),url(../fonts/star.ttf) format("truetype"),url(../fonts/star.svg#star) format("svg");font-weight:400;font-style:normal}@font-face{font-family:WooCommerce;src:url(../fonts/WooCommerce.eot);src:url(../fonts/WooCommerce.eot?#iefix) format("embedded-opentype"),url(../fonts/WooCommerce.woff) format("woff"),url(../fonts/WooCommerce.ttf) format("truetype"),url(../fonts/WooCommerce.svg#WooCommerce) format("svg");font-weight:400;font-style:normal}ul.woocommerce_stats{overflow:hidden;zoom:1}ul.woocommerce_stats li{width:25%;padding:0 1em;text-align:center;float:right;font-size:.8em;border-right:1px solid #fff;border-left:1px solid #ececec;box-sizing:border-box}ul.woocommerce_stats li:first-child{border-right:0}ul.woocommerce_stats li:last-child{border-left:0}ul.woocommerce_stats strong{font-family:Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size:4em;line-height:1.2em;font-weight:400;text-align:center;display:block}#woocommerce_dashboard_status .inside{padding:0;margin:0}#woocommerce_dashboard_status .best-seller-this-month a strong{margin-left:48px}#woocommerce_dashboard_status .wc_status_list{overflow:hidden;margin:0}#woocommerce_dashboard_status .wc_status_list li{width:50%;float:right;padding:0;box-sizing:border-box;margin:0;border-top:1px solid #ececec;color:#aaa}#woocommerce_dashboard_status .wc_status_list li a{display:block;color:#aaa;padding:9px 12px;-webkit-transition:all ease .5s;transition:all ease .5s;position:relative;font-size:12px}#woocommerce_dashboard_status .wc_status_list li a .wc_sparkline{width:4em;height:2em;display:block;float:left;position:absolute;left:0;top:50%;margin-left:12px;margin-top:-1.25em}#woocommerce_dashboard_status .wc_status_list li a strong{font-size:18px;line-height:1.2em;font-weight:400;display:block;color:#21759b}#woocommerce_dashboard_status .wc_status_list li a:hover{color:#2ea2cc}#woocommerce_dashboard_status .wc_status_list li a:hover strong,#woocommerce_dashboard_status .wc_status_list li a:hover::before{color:#2ea2cc!important}#woocommerce_dashboard_status .wc_status_list li a::before{font-family:WooCommerce;speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;margin:0;text-indent:0;position:absolute;top:0;right:0;width:100%;height:100%;text-align:center;content:"";font-size:2em;position:relative;width:auto;line-height:1.2em;color:#464646;float:right;margin-left:12px;margin-bottom:12px}#woocommerce_dashboard_status .wc_status_list li:first-child{border-top:0}#woocommerce_dashboard_status .wc_status_list li.sales-this-month{width:100%}#woocommerce_dashboard_status .wc_status_list li.sales-this-month a::before{font-family:Dashicons;content:'\f185'}#woocommerce_dashboard_status .wc_status_list li.best-seller-this-month{width:100%}#woocommerce_dashboard_status .wc_status_list li.best-seller-this-month a::before{content:'\e006'}#woocommerce_dashboard_status .wc_status_list li.processing-orders{border-left:1px solid #ececec}#woocommerce_dashboard_status .wc_status_list li.processing-orders a::before{content:'\e011';color:#7ad03a}#woocommerce_dashboard_status .wc_status_list li.on-hold-orders a::before{content:'\e033';color:#999}#woocommerce_dashboard_status .wc_status_list li.low-in-stock{border-left:1px solid #ececec}#woocommerce_dashboard_status .wc_status_list li.low-in-stock a::before{content:'\e016';color:#ffba00}#woocommerce_dashboard_status .wc_status_list li.out-of-stock a::before{content:'\e013';color:#a00}#woocommerce_dashboard_recent_reviews li{line-height:1.5em;margin-bottom:12px}#woocommerce_dashboard_recent_reviews h4.meta{line-height:1.4;margin:-.2em 0 0 0;font-weight:400;color:#999}#woocommerce_dashboard_recent_reviews blockquote{padding:0;margin:0}#woocommerce_dashboard_recent_reviews .avatar{float:right;margin:0 0 5px 10px}#woocommerce_dashboard_recent_reviews .star-rating{float:left;overflow:hidden;position:relative;height:1.5em;line-height:1.5;margin-right:.5em;width:5.4em;font-family:WooCommerce!important}#woocommerce_dashboard_recent_reviews .star-rating::before{content:'\e021\e021\e021\e021\e021';color:#b3b2b2;float:right;top:0;right:0;position:absolute;letter-spacing:.1em}#woocommerce_dashboard_recent_reviews .star-rating span{overflow:hidden;float:right;top:0;right:0;position:absolute;padding-top:1.5em}#woocommerce_dashboard_recent_reviews .star-rating span::before{content:'\e020\e020\e020\e020\e020';top:0;position:absolute;right:0;letter-spacing:.1em;color:#9c5d90}#dash-right-now li.product-count a::before{font-family:WooCommerce;content:'\e01d'}

View File

@ -1 +0,0 @@
@charset "UTF-8";@font-face{font-family:star;src:url(../fonts/star.eot);src:url(../fonts/star.eot?#iefix) format("embedded-opentype"),url(../fonts/star.woff) format("woff"),url(../fonts/star.ttf) format("truetype"),url(../fonts/star.svg#star) format("svg");font-weight:400;font-style:normal}@font-face{font-family:WooCommerce;src:url(../fonts/WooCommerce.eot);src:url(../fonts/WooCommerce.eot?#iefix) format("embedded-opentype"),url(../fonts/WooCommerce.woff) format("woff"),url(../fonts/WooCommerce.ttf) format("truetype"),url(../fonts/WooCommerce.svg#WooCommerce) format("svg");font-weight:400;font-style:normal}ul.woocommerce_stats{overflow:hidden;zoom:1}ul.woocommerce_stats li{width:25%;padding:0 1em;text-align:center;float:left;font-size:.8em;border-left:1px solid #fff;border-right:1px solid #ececec;box-sizing:border-box}ul.woocommerce_stats li:first-child{border-left:0}ul.woocommerce_stats li:last-child{border-right:0}ul.woocommerce_stats strong{font-family:Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size:4em;line-height:1.2em;font-weight:400;text-align:center;display:block}#woocommerce_dashboard_status .inside{padding:0;margin:0}#woocommerce_dashboard_status .best-seller-this-month a strong{margin-right:48px}#woocommerce_dashboard_status .wc_status_list{overflow:hidden;margin:0}#woocommerce_dashboard_status .wc_status_list li{width:50%;float:left;padding:0;box-sizing:border-box;margin:0;border-top:1px solid #ececec;color:#aaa}#woocommerce_dashboard_status .wc_status_list li a{display:block;color:#aaa;padding:9px 12px;-webkit-transition:all ease .5s;transition:all ease .5s;position:relative;font-size:12px}#woocommerce_dashboard_status .wc_status_list li a .wc_sparkline{width:4em;height:2em;display:block;float:right;position:absolute;right:0;top:50%;margin-right:12px;margin-top:-1.25em}#woocommerce_dashboard_status .wc_status_list li a strong{font-size:18px;line-height:1.2em;font-weight:400;display:block;color:#21759b}#woocommerce_dashboard_status .wc_status_list li a:hover{color:#2ea2cc}#woocommerce_dashboard_status .wc_status_list li a:hover strong,#woocommerce_dashboard_status .wc_status_list li a:hover::before{color:#2ea2cc!important}#woocommerce_dashboard_status .wc_status_list li a::before{font-family:WooCommerce;speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;margin:0;text-indent:0;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;content:"";font-size:2em;position:relative;width:auto;line-height:1.2em;color:#464646;float:left;margin-right:12px;margin-bottom:12px}#woocommerce_dashboard_status .wc_status_list li:first-child{border-top:0}#woocommerce_dashboard_status .wc_status_list li.sales-this-month{width:100%}#woocommerce_dashboard_status .wc_status_list li.sales-this-month a::before{font-family:Dashicons;content:'\f185'}#woocommerce_dashboard_status .wc_status_list li.best-seller-this-month{width:100%}#woocommerce_dashboard_status .wc_status_list li.best-seller-this-month a::before{content:'\e006'}#woocommerce_dashboard_status .wc_status_list li.processing-orders{border-right:1px solid #ececec}#woocommerce_dashboard_status .wc_status_list li.processing-orders a::before{content:'\e011';color:#7ad03a}#woocommerce_dashboard_status .wc_status_list li.on-hold-orders a::before{content:'\e033';color:#999}#woocommerce_dashboard_status .wc_status_list li.low-in-stock{border-right:1px solid #ececec}#woocommerce_dashboard_status .wc_status_list li.low-in-stock a::before{content:'\e016';color:#ffba00}#woocommerce_dashboard_status .wc_status_list li.out-of-stock a::before{content:'\e013';color:#a00}#woocommerce_dashboard_recent_reviews li{line-height:1.5em;margin-bottom:12px}#woocommerce_dashboard_recent_reviews h4.meta{line-height:1.4;margin:-.2em 0 0 0;font-weight:400;color:#999}#woocommerce_dashboard_recent_reviews blockquote{padding:0;margin:0}#woocommerce_dashboard_recent_reviews .avatar{float:left;margin:0 10px 5px 0}#woocommerce_dashboard_recent_reviews .star-rating{float:right;overflow:hidden;position:relative;height:1.5em;line-height:1.5;margin-left:.5em;width:5.4em;font-family:WooCommerce!important}#woocommerce_dashboard_recent_reviews .star-rating::before{content:'\e021\e021\e021\e021\e021';color:#b3b2b2;float:left;top:0;left:0;position:absolute;letter-spacing:.1em}#woocommerce_dashboard_recent_reviews .star-rating span{overflow:hidden;float:left;top:0;left:0;position:absolute;padding-top:1.5em}#woocommerce_dashboard_recent_reviews .star-rating span::before{content:'\e020\e020\e020\e020\e020';top:0;position:absolute;left:0;letter-spacing:.1em;color:#9c5d90}#dash-right-now li.product-count a::before{font-family:WooCommerce;content:'\e01d'}

View File

@ -6,9 +6,9 @@
/**
* Imports
*/
@import 'mixins';
@import 'variables';
@import 'fonts';
@import "mixins";
@import "variables";
@import "fonts";
/**
* Styling begins
@ -37,7 +37,7 @@ ul.woocommerce_stats {
}
strong {
font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;
font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
font-size: 4em;
line-height: 1.2em;
font-weight: normal;
@ -47,13 +47,16 @@ ul.woocommerce_stats {
}
#woocommerce_dashboard_status {
.inside {
padding: 0;
margin: 0;
}
.best-seller-this-month {
a {
strong {
margin-right: 48px;
}
@ -111,6 +114,7 @@ ul.woocommerce_stats {
}
&::before {
@include icon();
font-size: 2em;
position: relative;
@ -132,8 +136,8 @@ ul.woocommerce_stats {
width: 100%;
a::before {
font-family: 'Dashicons';
content: '\f185';
font-family: "Dashicons";
content: "\f185";
}
}
@ -141,7 +145,7 @@ ul.woocommerce_stats {
width: 100%;
a::before {
content: '\e006';
content: "\e006";
}
}
@ -149,14 +153,15 @@ ul.woocommerce_stats {
border-right: 1px solid #ececec;
a::before {
content: '\e011';
content: "\e011";
color: $green;
}
}
li.on-hold-orders {
a::before {
content: '\e033';
content: "\e033";
color: #999;
}
}
@ -165,14 +170,15 @@ ul.woocommerce_stats {
border-right: 1px solid #ececec;
a::before {
content: '\e016';
content: "\e016";
color: $orange;
}
}
li.out-of-stock {
a::before {
content: '\e013';
content: "\e013";
color: $red;
}
}
@ -180,6 +186,7 @@ ul.woocommerce_stats {
}
#woocommerce_dashboard_recent_reviews {
li {
line-height: 1.5em;
margin-bottom: 12px;
@ -210,11 +217,11 @@ ul.woocommerce_stats {
line-height: 1.5;
margin-left: 0.5em;
width: 5.4em;
font-family: 'WooCommerce' !important;
font-family: "WooCommerce" !important;
&::before {
content: '\e021\e021\e021\e021\e021';
color: darken( #ccc, 10% );
content: "\e021\e021\e021\e021\e021";
color: darken(#ccc, 10%);
float: left;
top: 0;
left: 0;
@ -233,7 +240,7 @@ ul.woocommerce_stats {
}
span::before {
content: '\e020\e020\e020\e020\e020';
content: "\e020\e020\e020\e020\e020";
top: 0;
position: absolute;
left: 0;
@ -245,6 +252,6 @@ ul.woocommerce_stats {
}
#dash-right-now li.product-count a::before {
font-family: 'WooCommerce';
content: '\e01d';
font-family: "WooCommerce";
content: "\e01d";
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,23 +2,23 @@
General table styling
------------------------------------------------------------------------------*/
$white: #ffffff;
$white: #fff;
// Grays
$gray: #87a6bc;
$gray-light: lighten( $gray, 33% ); //#f3f6f8
$gray-dark: darken( $gray, 38% ); //#2e4453
$gray-light: lighten($gray, 33%); //#f3f6f8
$gray-dark: darken($gray, 38%); //#2e4453
// $gray-text: ideal for standard, non placeholder text
// $gray-text-min: minimum contrast needed for WCAG 2.0 AA on white background
$gray-text: $gray-dark;
$gray-text-min: darken( $gray, 18% ); //#537994
$gray-text-min: darken($gray, 18%); //#537994
$woo_pink1: #955a89;
$woo_pink2: #bb77ae;
$color_text_blue: #0073AA;
$color_text_blue: #0073aa;
$color_button_primary: $woo_pink1;
$color_button_secondary: $woo_pink2;
@ -26,11 +26,13 @@ $color_button_secondary: $woo_pink2;
Tab navigation
------------------------------------------------------------------------------*/
.wc-helper {
.nav-tab-wrapper {
margin-bottom: 22px;
}
@media only screen and (max-width : 784px) {
@media only screen and (max-width: 784px) {
.nav-tab {
max-width: 40%;
overflow: hidden;
@ -45,7 +47,11 @@ $color_button_secondary: $woo_pink2;
------------------------------------------------------------------------------*/
.wc-helper {
.button, .button:hover, .button:focus, .button:active{
.button,
.button:hover,
.button:focus,
.button:active {
background-color: $color_button_primary;
border-width: 0;
box-shadow: none;
@ -56,7 +62,7 @@ $color_button_secondary: $woo_pink2;
text-align: center;
white-space: normal !important;
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
line-height: 2;
}
@ -73,7 +79,7 @@ $color_button_secondary: $woo_pink2;
}
.wc-helper .subscription-filter {
color: #2E4453;
color: #2e4453;
font-size: 13px;
line-height: 13px;
margin: 22px 0;
@ -83,17 +89,18 @@ $color_button_secondary: $woo_pink2;
position: relative;
.chevron {
color: #E1E1E1;
color: #e1e1e1;
border-bottom-width: 0;
line-height: 1;
padding: 0;
position: absolute;
top: 10px;
right: 14px;
top: 10px;
right: 14px;
}
}
li {
color: #0073AA;
color: #0073aa;
display: inline-block;
padding: 0 4px 0 8px;
position: relative;
@ -102,37 +109,38 @@ $color_button_secondary: $woo_pink2;
background-color: #979797;
content: " ";
position: absolute;
top: 0;
left: 0;
bottom: 0;
top: 0;
left: 0;
bottom: 0;
width: 1px;
}
&:first-of-type {
&::before {
display: none;
}
}
}
a{
color: #0073AA;
a {
color: #0073aa;
text-decoration: none;
&.current{
&.current {
color: #000;
font-weight: 600;
}
}
.count{
.count {
color: #555d66;
font-weight: 400;
}
@media only screen and (max-width : 600px) {
@media only screen and (max-width: 600px) {
background-color: #fff;
border: 1px solid #E1E1E1;
border: 1px solid #e1e1e1;
border-radius: 4px;
font-size: 14px;
@ -148,7 +156,7 @@ $color_button_secondary: $woo_pink2;
}
li {
border-bottom: 1px solid #E1E1E1;
border-bottom: 1px solid #e1e1e1;
}
label,
@ -165,6 +173,7 @@ $color_button_secondary: $woo_pink2;
}
li {
&::before {
display: none;
}
@ -175,7 +184,7 @@ $color_button_secondary: $woo_pink2;
}
span.chevron {
color: #555555;
color: #555;
opacity: 0.5;
transform: rotateX(180deg);
}
@ -185,7 +194,7 @@ $color_button_secondary: $woo_pink2;
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
label {
border-bottom: 1px solid #E1E1E1;
border-bottom: 1px solid #e1e1e1;
}
li {
@ -205,6 +214,7 @@ $color_button_secondary: $woo_pink2;
------------------------------------------------------------------------------*/
.wc-helper {
.subscriptions-header {
margin: 3em 0 0;
position: relative;
@ -217,8 +227,10 @@ $color_button_secondary: $woo_pink2;
}
}
.button-update, .button-update:hover {
background-color: #E6E6E6;
.button-update,
.button-update:hover {
background-color: #e6e6e6;
border-radius: 4px;
color: #333;
font-weight: 800;
@ -243,16 +255,16 @@ $color_button_secondary: $woo_pink2;
.user-info {
background-color: #fff;
border: 1px solid #E1E1E1;
border: 1px solid #e1e1e1;
border-radius: 4px;
font-size: 12px;
line-height: 26px;
position: absolute;
top: -10px;
right: 0;
transition: all .1s ease-in;
top: -10px;
right: 0;
transition: all 0.1s ease-in;
@media only screen and (max-width : 600px) {
@media only screen and (max-width: 600px) {
position: relative;
width: 100%;
}
@ -263,11 +275,11 @@ $color_button_secondary: $woo_pink2;
}
&:hover {
box-shadow: 0 3px 5px rgba(0,0,0,.2);
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
}
header {
color: #555555;
color: #555;
font-weight: 600;
padding: 6px 14px;
position: relative;
@ -279,8 +291,8 @@ $color_button_secondary: $woo_pink2;
.dashicons {
opacity: 0.5;
position: absolute;
top: 9px;
right: 14px;
top: 9px;
right: 14px;
}
&:hover {
@ -292,18 +304,18 @@ $color_button_secondary: $woo_pink2;
display: none;
p {
border-top: 1px solid #E1E1E1;
border-top: 1px solid #e1e1e1;
padding: 6px 14px;
text-align: center;
}
.actions {
border-top: 1px solid #E1E1E1;
border-top: 1px solid #e1e1e1;
display: flex;
}
a {
color: #A26897;
color: #a26897;
cursor: pointer;
font-weight: 600;
line-height: 38px;
@ -319,17 +331,17 @@ $color_button_secondary: $woo_pink2;
}
&:first-child {
border-right: 1px solid #E1E1E1;
border-right: 1px solid #e1e1e1;
}
&:hover {
background-color: #A26897;
background-color: #a26897;
color: #fff;
}
}
.avatar {
border: 1px solid #ECE1EA;
border: 1px solid #ece1ea;
border-radius: 50%;
height: auto;
margin-right: 6px;
@ -342,11 +354,13 @@ $color_button_secondary: $woo_pink2;
.user-info:hover,
.user-info:focus,
.user-info:active {
header .dashicons {
transform: rotateX(180deg);
}
section {
display: block
display: block;
}
}
}
@ -356,10 +370,11 @@ $color_button_secondary: $woo_pink2;
------------------------------------------------------------------------------*/
.wc-helper {
.striped > tbody > :nth-child(odd),
ul.striped > :nth-child(odd),
.alternate {
background-color: #ffffff;
background-color: #fff;
}
table.widefat,
@ -396,23 +411,24 @@ $color_button_secondary: $woo_pink2;
}
.button {
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
font-size: 11px;
}
}
.wp-list-table__row {
background-color: rgba(0,0,0,0);
background-color: rgba(0, 0, 0, 0);
td {
align-items: center;
background-color: #fff;
border: 0px;
border: 0;
//border-top: 1px solid #e5e5e5;
padding: 16px 22px;
vertical-align: middle;
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
padding: 16px;
}
}
@ -424,10 +440,10 @@ $color_button_secondary: $woo_pink2;
&.is-ext-header {
td {
border-top: 1px solid #E1E1E1;
border-top: 1px solid #e1e1e1;
}
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
display: inline-flex;
flex-flow: row wrap;
width: 100%;
@ -436,6 +452,7 @@ $color_button_secondary: $woo_pink2;
display: block;
flex: 2;
}
.wp-list-table__ext-actions {
display: block;
flex: 1;
@ -445,8 +462,8 @@ $color_button_secondary: $woo_pink2;
}
&:last-child td {
border-bottom: 24px solid #F1F1F1;
box-shadow: inset 0 -1px 0 #E1E1E1;
border-bottom: 24px solid #f1f1f1;
box-shadow: inset 0 -1px 0 #e1e1e1;
}
}
@ -458,82 +475,84 @@ $color_button_secondary: $woo_pink2;
width: 100%;
&::before {
background-color: #E1E1E1;
background-color: #e1e1e1;
content: " ";
position: absolute;
top: 0;
bottom: 0;
left: 0 !important;
top: 0;
bottom: 0;
left: 0 !important;
width: 1px !important;
}
}
.wp-list-table__ext-details {
display: flex;
display: flex;
@media only screen and (max-width : 782px) {
display: table;
}
@media only screen and (max-width: 782px) {
display: table;
}
}
.wp-list-table__ext-title {
color: $color_text_blue;
font-size: 18px;
font-weight: 600;
width: 60%;
width: 60%;
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
margin-bottom: 12px;
width: 100%;
}
@media only screen and (max-width : 320px) {
@media only screen and (max-width: 320px) {
max-width: 120px;
}
}
.wp-list-table__ext-description {
color: #333;
padding-left: 12px;
width: 40%;
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
padding-left: 0;
width: 100%;
}
}
.wp-list-table__ext-status {
position: relative;
&.update-available::after {
background-color: #FFC322;
background-color: #ffc322;
content: " ";
position: absolute;
top: 0;
left: 0;
bottom: 0;
top: 0;
left: 0;
bottom: 0;
width: 5px;
}
&.expired::after {
background-color: #B81C23;
background-color: #b81c23;
content: " ";
position: absolute;
top: 0;
left: 0;
bottom: 0;
top: 0;
left: 0;
bottom: 0;
width: 5px;
}
.dashicons-update {
color: #FFC322;
color: #ffc322;
}
.dashicons-info {
color: #B81C23;
color: #b81c23;
}
p {
color: #333333;
color: #333;
margin: 0;
}
@ -549,34 +568,36 @@ $color_button_secondary: $woo_pink2;
text-align: right;
&::after {
background-color: #E1E1E1;
background-color: #e1e1e1;
content: " ";
position: absolute;
top: 0;
bottom: 0;
right: 0;
top: 0;
bottom: 0;
right: 0;
width: 1px;
}
}
.wp-list-table__ext-updates,
.wp-list-table__ext-licence {
td {
position: relative;
&::before {
background-color: #E1E1E1;
background-color: #e1e1e1;
content: " ";
height: 1px;
position: absolute;
top: 0;
left: 0;
right: 0;
top: 0;
left: 0;
right: 0;
}
}
td.wp-list-table__ext-status,
td.wp-list-table__licence-container {
&::before {
left: 22px !important;
width: auto !important;
@ -587,7 +608,7 @@ $color_button_secondary: $woo_pink2;
right: 22px;
}
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
display: flex;
.wp-list-table__ext-status {
@ -604,9 +625,9 @@ $color_button_secondary: $woo_pink2;
min-width: 0;
&::before {
left: 0 !important;
right: 0 !important;
width: 100% !important;
left: 0 !important;
right: 0 !important;
width: 100% !important;
}
}
}
@ -616,13 +637,13 @@ $color_button_secondary: $woo_pink2;
padding: 0 !important;
&::after {
background-color: #E1E1E1;
content: " ";
position: absolute;
top: 0;
bottom: 0;
right: 0;
width: 1px;
background-color: #e1e1e1;
content: " ";
position: absolute;
top: 0;
bottom: 0;
right: 0;
width: 1px;
}
}
@ -630,20 +651,20 @@ $color_button_secondary: $woo_pink2;
display: flex;
padding: 16px 22px;
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
display: block;
}
&::before {
background-color: #E1E1E1;
content: " ";
background-color: #e1e1e1;
content: " ";
height: 1px;
position: absolute;
top: 0;
right: 22px;
left: 22px;
position: absolute;
top: 0;
right: 22px;
left: 22px;
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
right: 0;
left: 0;
}
@ -653,7 +674,7 @@ $color_button_secondary: $woo_pink2;
padding-right: 16px;
vertical-align: middle;
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
padding: 0;
}
}
@ -664,6 +685,7 @@ $color_button_secondary: $woo_pink2;
}
.wp-list-table__licence-label {
label {
color: #23282d;
font-weight: 600;
@ -672,15 +694,16 @@ $color_button_secondary: $woo_pink2;
}
.wp-list-table__licence-field {
input {
height: 32px;
@media only screen and (max-width : 480px) {
@media only screen and (max-width: 480px) {
width: 100%;
}
}
@media only screen and (max-width : 782px) {
@media only screen and (max-width: 782px) {
padding: 8px 0 16px !important;
}
}
@ -692,12 +715,13 @@ $color_button_secondary: $woo_pink2;
.button {
margin-right: 8px;
}
.button-secondary {
float: right;
margin: 0 0 0 8px;
}
@media only screen and (max-width : 480px) {
@media only screen and (max-width: 480px) {
text-align: right;
}
}
@ -708,12 +732,13 @@ $color_button_secondary: $woo_pink2;
------------------------------------------------------------------------------*/
.wc-helper {
td.color-bar {
border-left: solid 4px transparent;
}
td.color-bar.expired {
border-left-color: #B81C23;
border-left-color: #b81c23;
}
td.color-bar.expiring {
@ -721,11 +746,11 @@ $color_button_secondary: $woo_pink2;
}
td.color-bar.update-available {
border-left-color: #8FAE1B;
border-left-color: #8fae1b;
}
td.color-bar.expiring.update-available {
border-left-color: #8FAE1B;
border-left-color: #8fae1b;
}
}
@ -734,6 +759,7 @@ $color_button_secondary: $woo_pink2;
------------------------------------------------------------------------------*/
.wc-helper {
.connect-wrapper {
background-color: #fff;
border: 1px solid #e5e5e5;
@ -776,7 +802,7 @@ $color_button_secondary: $woo_pink2;
}
}
@media only screen and (max-width : 784px) {
@media only screen and (max-width: 784px) {
display: block;
strong {
@ -802,7 +828,7 @@ $color_button_secondary: $woo_pink2;
}
.chevron {
color: #E1E1E1;
color: #e1e1e1;
display: block;
margin: 10px;
transform: rotateX(0deg);
@ -810,7 +836,7 @@ $color_button_secondary: $woo_pink2;
.buttons {
display: none;
border-top: 1px solid #E1E1E1;
border-top: 1px solid #e1e1e1;
padding: 10px 20px;
&.active {
@ -827,8 +853,9 @@ $color_button_secondary: $woo_pink2;
------------------------------------------------------------------------------*/
.wc-helper {
.start-container {
background-color: #ffffff;
background-color: #fff;
border-left: 4px solid #cc99c2;
padding: 45px 20px 20px 30px;
position: relative;
@ -848,8 +875,8 @@ $color_button_secondary: $woo_pink2;
font-size: 192px;
line-height: 1;
position: absolute;
top: 65%;
right: -3%;
top: 65%;
right: -3%;
text-align: center;
width: 1em;
}
@ -866,7 +893,7 @@ $color_button_secondary: $woo_pink2;
position: relative;
}
.button-primary {
.button-helper-connect {
height: 37px;
line-height: 37px;
min-width: 124px;
@ -898,10 +925,10 @@ $color_button_secondary: $woo_pink2;
cursor: pointer;
display: block;
position: absolute;
top: 0;
bottom: -1px;
left: 0;
right: 0;
top: 0;
bottom: -1px;
left: 0;
right: 0;
text-align: left;
text-indent: -100000px;
z-index: 2;
@ -917,7 +944,7 @@ $color_button_secondary: $woo_pink2;
.form-toggle__switch {
align-self: flex-start;
background: lighten( $gray, 20% );
background: lighten($gray, 20%);
border-radius: 12px;
box-sizing: border-box;
display: inline-block;
@ -926,7 +953,7 @@ $color_button_secondary: $woo_pink2;
position: relative;
width: 40px;
height: 24px;
transition: all .4s ease, box-shadow 0s;
transition: all 0.4s ease, box-shadow 0s;
vertical-align: middle;
&::before,
@ -942,7 +969,7 @@ $color_button_secondary: $woo_pink2;
border-radius: 50%;
background: $white;
left: 0;
transition: all .2s ease;
transition: all 0.2s ease;
}
&::before {
@ -961,42 +988,47 @@ $color_button_secondary: $woo_pink2;
z-index: 1;
.form-toggle__label-content {
color: #87a6bc;
color: #87a6bc;
flex: 0 1 100%;
font-size: 13px;
line-height: 16px;
font-size: 13px;
line-height: 16px;
margin-left: 12px;
margin-right: 8px;
vertical-align: top;
text-transform: uppercase;
margin-right: 8px;
vertical-align: top;
text-transform: uppercase;
@media only screen and (max-width : 480px) {
@media only screen and (max-width: 480px) {
display: none;
}
}
}
.form-toggle {
.accessible-focus &:focus {
+ .form-toggle__label .form-toggle__switch {
box-shadow: 0 0 0 2px $woo_pink1;
}
&:checked + .form-toggle__label .form-toggle__switch {
box-shadow: 0 0 0 2px $woo_pink2;
}
}
& + .form-toggle__label .form-toggle__switch {
background: lighten( $gray, 10% );
background: lighten($gray, 10%);
}
&:not( :disabled ) {
&:not(:disabled) {
+ .form-toggle__label:hover .form-toggle__switch {
background: lighten( $gray, 20% );
background: lighten($gray, 20%);
}
}
&.active {
+ .form-toggle__label .form-toggle__switch {
background: $woo_pink1;
@ -1011,6 +1043,7 @@ $color_button_secondary: $woo_pink2;
}
&.disabled {
+ label.form-toggle__label span.form-toggle__switch {
opacity: 0.25;
}
@ -1019,17 +1052,21 @@ $color_button_secondary: $woo_pink2;
// Classes for toggle state before action is complete (updating plugin or something)
.form-toggle.is-toggling {
+ .form-toggle__label .form-toggle__switch {
background: $woo_pink1;
}
&:checked {
+ .form-toggle__label .form-toggle__switch {
background: lighten( $gray, 20% );
background: lighten($gray, 20%);
}
}
}
.form-toggle.is-compact {
+ .form-toggle__label .form-toggle__switch {
border-radius: 8px;
width: 24px;
@ -1041,8 +1078,11 @@ $color_button_secondary: $woo_pink2;
width: 12px;
}
}
&:checked {
+ .form-toggle__label .form-toggle__switch {
&::after {
left: 8px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 B

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

After

Width:  |  Height:  |  Size: 74 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 B

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 B

After

Width:  |  Height:  |  Size: 89 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 B

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Some files were not shown because too many files have changed in this diff Show More