From 771c753760ab75cb5ca1335f9a850dbb43ca4074 Mon Sep 17 00:00:00 2001 From: Prisca Date: Sat, 19 Oct 2024 16:36:42 +0200 Subject: [PATCH] docs: add base documentations (README, LICENSE, ...) --- CHANGELOG.md | 45 ++++++++++++++++++++++++ CODE_OF_CONDUCT.md | 64 ++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 85 +++++++++++++++++++++++++++++++++++++++++++++ LICENSE | 21 +++++++++++ README.md | 68 ++++++++++++++++++++++++++++++++++++ snappy_banner.png | Bin 0 -> 13602 bytes 6 files changed, 283 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 snappy_banner.png diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..a0ffa0db --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,45 @@ +## 1.1.0 + +* Add bypass-proxy-for option added in 0.12.3 (see [#302](https://github.com/KnpLabs/snappy/pull/302)) +* Fix symfony/process 4.2 deprecation notice (see [#331](https://github.com/KnpLabs/snappy/pull/331)) +* Drop suppor for unmaintained PHP versions (5.6 and 7.0, see [#337](https://github.com/KnpLabs/snappy/pull/337) +* Drop support for unmaintained symfony/process versions (see [#337](https://github.com/KnpLabs/snappy/pull/337)) +* Pass on error code in checkProcessStatus (see [#328](https://github.com/KnpLabs/snappy/pull/328)) + +Thanks to @joshpme, @drigani, @fbourigault, @NiR- and @leimd for their work. + +## 1.0.4 + +* Support cache-dir for Image generation (see [#297](https://github.com/KnpLabs/snappy/pull/297)). + +Thank you @dimitrilahaye for their work. + +## 1.0.3 + +* Add support to Symfony 4 ([#290](https://github.com/KnpLabs/snappy/pull/290)) +* Use PHPUnit\Framework\TestCase instead of PHPUnit_Framework_TestCase ([#287](https://github.com/KnpLabs/snappy/pull/287)) + +Credits go to @michaelperrin and @carusogabriel. + +## 1.0.2 + +*A BC break was introduced in v1.0.0: using objects castable to string with a cyclic dependency to the generator +as option value would break `setOption()` / `setOptions()` methods.* + +* Use logger context rather than `var_export` to log option values (see [#283](https://github.com/KnpLabs/snappy/pull/283)) + +Credits go to: @barryvdh. + +## 1.0.1 + +* Fix `Call to a member function debug() on null` logger (see [#270](https://github.com/KnpLabs/snappy/pull/270)) + +## 1.0.0 + +* Don't check if it's a file when the path is bigger than `PHP_MAXPATHLEN` (see [#224](https://github.com/KnpLabs/snappy/pull/224)) +* Pass `image-dpi` and `image-quality` options as integer (see [#251](https://github.com/KnpLabs/snappy/pull/251)) +* Improve documentation readability (see [#255](https://github.com/KnpLabs/snappy/pull/255)) +* Add logging capabilities to generators (see [#264](https://github.com/KnpLabs/snappy/pull/264)) +* Add some more frequent questions/issues to the FAQ (see [#263](https://github.com/KnpLabs/snappy/pull/263), [#265](https://github.com/KnpLabs/snappy/pull/265), [#266](https://github.com/KnpLabs/snappy/pull/266)) + +Credits go to: @wouterbulten, @martinssipenko, @Herz3h, @akovalyov, @NiR-. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..45ac77b9 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,64 @@ + +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +## Contact +If you have any questions or feedback, [please ping us](https://twitter.com/KNPLabs) ! diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..472c0515 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,85 @@ + +# Thanks for contributing! + +:+1: First of all, thanks for contributing! The team is happy to help if you +have any questions. Have a look to this contributing guide and also to the +[FAQ section](https://github.com/KnpLabs/snappy/blob/master/doc/faq.md). :feet: +The following is a set of guidelines for contributing to Snappy, which is hosted +by the [KNP Labs Organization](https://github.com/KnpLabs) on GitHub. These are +mostly guidelines, not rules. Use your best judgment, and feel free to propose +changes to this document opening a pull request. :shipit: + +## Code of Conduct + +This project and everyone participating in it is governed by the following +[Code of Conduct](https://github.com/KnpLabs/snappy/blob/master/CODE_OF_CONDUCT.md). +By participating, you are expected to uphold this code. + +## Reporting a bug + +#### Before submitting a bug +- Verify that you are using the latest Snappy version; +- Double-check the [documentation](https://github.com/KnpLabs/snappy/blob/master/README.md) +and the [FAQ section](https://github.com/KnpLabs/snappy/blob/master/doc/faq.md) +to see if you're not misusing the library; +- Check if the issue is a Snappy issue and not a wkhtmltopdf issue (see [how to](#how-to-verify-if-the-issue-is-a-snappy-issue)); +- Check if the issue has already been reported. If it has and the issue is still +open, add a comment to the existing issue instead of opening a new one. + +##### How to verify if the issue is a Snappy issue +In order to verify that the issue is a Snappy issue and not a wkhtmltopdf issue, +simply copy paste the command displayed in the error message in your command prompt. +If the same error appears on the command line, then it's a wkhtmltopdf issue and +you'll have more chance to resolve your issue [there](https://github.com/wkhtmltopdf/wkhtmltopdf/issues). + +#### How to submit a (good) bug report +To report a Snappy bug please open a [GitHub issue](https://github.com/KnpLabs/snappy/issues) +following the rules below. + +- Use a clear and descriptive title for the issue to identify the problem; +- Describe the steps needed to reproduce the bug including a code example when +possible; +- Give as much detail as possible about your environment (OS, PHP version, +Snappy configuration, ...); + +## Suggesting enhancements + +To suggest Snappy enhancements please open a [GitHub issue](https://github.com/KnpLabs/snappy/issues) +following the rules below. + +- Use a clear and descriptive title for the issue to identify the problem; +- Provide a step-by-step description of the suggested enhancement in as many +details as possible; +- Explain why this enhancement would be useful with one or more use cases; + +## Contributing to the code + +A pull request, is the best way to provide a bug fix or to propose enhancements to Snappy. + +When submitting a pull request please be sure to follow the same rules described +above in [Reporting a bug](#reporting-a-bug) and [Suggesting enhancements](suggesting-enhancements) +sections depending on the nature of your change. + +> Before starting to work on a large change please open an issue to ask the +maintainers if they are fine with it (no one likes to work for nothing!). + +1. Fork the repository +2. Once the repository has been forked clone it locally +``` +git clone git@github.com:USERNAME/snappy.git +``` +3. Create a new branch +``` +git checkout -b BRANCH_NAME master +``` +4. Code!!! +5. Add/Update tests (if needed) +6. Update documentation (if needed) +7. Run the tests and make sure that they are passing +``` +composer unit-tests +composer static-analysis +``` +8. Squash your commits +9. Rebase your branch on master and fix merge conflicts +10. Open the pull request diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..cbdf8a91 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2010 Matthieu Bontemps + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..38c951c4 --- /dev/null +++ b/README.md @@ -0,0 +1,68 @@ +
+ Snappy Banner +

A PHP library for generating PDF files from HTML

+
+ +

+ Build Status + Contributors + License + Tested with PHPUnit +

+ +
+ +## About Snappy + +Snappy is a PHP library that allows you to generate PDF files from HTML. + +## Table of contents + +- [Installation](#installation) +- [Usage](#usage) +- [Examples of use](#examples-of-use) +- [Bugs and Support](#bugs-and-support) +- [License](#license) +- [Contributing](#contributing) +- [Contributors](#contributors) + +## Installation + +`TO BE DEFINED` + +## Usage + +`TO BE DEFINED` + +## Examples of use + +`TO BE DEFINED` + +## Bugs and Support + +If you have any questions or problems with Snappy, please open a **detailed** issue and we will be happy to help you ! + +## Contributing + +Any contribution is welcome, whether it is a bug report, a feature request, a pull request or simply a question. + +### Contributing Guide + +Read the [CONTRIBUTING.md](CONTRIBUTING.md) file to learn how to contribute to Snappy. + +### Code of Conduct + +This project and everyone participating in it is governed by the [Code of Conduct](CODE_OF_CONDUCT.md). + +Contributing to Snappy means you agree to uphold this code. + +## Contributors + +![Contributors][gh-contributors-image] + +[gh-contributors-image]: https://contrib.rocks/image?repo=KnpLabs/snappy + + +## License + +Snappy is released under the MIT License. See the bundled [LICENSE](LICENSE) file for details. diff --git a/snappy_banner.png b/snappy_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..74e2878a0e5ffd43487bb6939e4e641f8e4854b1 GIT binary patch literal 13602 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 literal 0 HcmV?d00001