9
.babelrc
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"presets": [
|
||||
"es2015",
|
||||
"stage-2"
|
||||
],
|
||||
"plugins": [
|
||||
"add-module-exports"
|
||||
]
|
||||
}
|
|
@ -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/"
|
||||
|
|
|
@ -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
|
||||
|
|
26
.eslintrc
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 column’s header by using your own language’s 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.
|
||||
Don’t 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 don’t 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.
|
||||
|
|
|
@ -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).
|
|
@ -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.
|
|
@ -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
|
|
@ -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>
|
|
@ -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: ''
|
||||
|
||||
---
|
||||
|
|
@ -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.
|
|
@ -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,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
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
"trailing": true,
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"multistr": true,
|
||||
|
||||
"browser": true,
|
||||
|
||||
|
|
|
@ -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-*
|
||||
|
|
59
.stylelintrc
|
@ -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",
|
||||
}
|
||||
|
|
65
.travis.yml
|
@ -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
|
||||
|
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 236 KiB |
Before Width: | Height: | Size: 106 KiB |
After Width: | Height: | Size: 332 KiB |
Before Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 255 KiB |
Before Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 242 KiB |
Before Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 368 KiB |
Before Width: | Height: | Size: 152 KiB |
After Width: | Height: | Size: 324 KiB |
Before Width: | Height: | Size: 148 KiB |
859
CHANGELOG.txt
|
@ -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 - Don’t 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).
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
FROM wordpress:5.3.2
|
183
Gruntfile.js
|
@ -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'
|
||||
]);
|
||||
|
|
|
@ -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
|
||||
|
|
20
apigen.neon
|
@ -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
|
|
@ -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();
|
|
@ -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}
|
|
@ -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}
|
|
@ -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>
|
|
@ -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}
|
|
@ -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()}&{/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}& {/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}
|
|
@ -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}
|
|
@ -1 +0,0 @@
|
|||
name: "Twitter Bootstrap theme"
|
|
@ -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}
|
|
@ -1,4 +0,0 @@
|
|||
{contentType javascript}
|
||||
|
||||
var ApiGen = ApiGen || {};
|
||||
ApiGen.elements = {$elements};
|
|
@ -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}& {/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}
|
|
@ -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);
|
|
@ -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);
|
||||
};
|
||||
|
||||
}));
|
|
@ -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));
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
})();
|
|
@ -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);
|
|
@ -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);
|
||||
});
|
||||
});
|
|
@ -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}
|
|
@ -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}&ie=UTF-8&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>
|
|
@ -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}
|
|
@ -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}
|
Before Width: | Height: | Size: 288 B |
Before Width: | Height: | Size: 152 B |
Before Width: | Height: | Size: 216 B |
Before Width: | Height: | Size: 171 B |
|
@ -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;
|
||||
}
|
Before Width: | Height: | Size: 126 B |
Before Width: | Height: | Size: 128 B |
Before Width: | Height: | Size: 172 B |
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 6.1 KiB |
|
@ -1,4 +0,0 @@
|
|||
{contentType text}
|
||||
User-agent: *
|
||||
Disallow:
|
||||
Sitemap: {$config->baseUrl}/sitemap.xml
|
|
@ -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>
|
|
@ -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}
|
|
@ -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}
|
|
@ -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
|
||||
|
|
|
@ -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}
|
|
@ -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}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
12930
assets/css/admin.scss
|
@ -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}
|
|
@ -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}
|
|
@ -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'}
|
|
@ -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'}
|
|
@ -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";
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 98 B After Width: | Height: | Size: 86 B |
Before Width: | Height: | Size: 97 B After Width: | Height: | Size: 74 B |
Before Width: | Height: | Size: 113 B After Width: | Height: | Size: 111 B |
Before Width: | Height: | Size: 115 B After Width: | Height: | Size: 89 B |
Before Width: | Height: | Size: 113 B After Width: | Height: | Size: 110 B |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 3.7 KiB |