diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..9a73145 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2022-2023 Robert Landers and contributors + +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. diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..037373a --- /dev/null +++ b/readme.md @@ -0,0 +1,53 @@ +# Swytch Framework + +The Swytch Framework is a new, fledgling, but powerful framework allowing you to write HTML inline with your application +logic, including API endpoints. It is built on top of [htmx](https://htmx.org/) for the browser-side heavy-lifting, +and [html5-php](https://github.com/Masterminds/html5-php) to handle the HTML parsing. + +Features: + +- Write HTML inline with your PHP code, relying on context-aware escaping. +- Keep you API logic near the HTML that uses it. +- Application routing via HTML (similar to ReactRouter). +- Automatic CSRF protection. +- Context-Aware escaping. +- Automatic HTML5 validation. +- Authorization and authentication aware routing and rendering. +- Browser cache control. +- Builtin support for translations. + +> NOTE: +> This is currently pre-production software and is not recommended for production use. + +## Example Component + +```php +#[\Bottledcode\SwytchFramework\Template\Attributes\Component('example')] +class ExampleComponent { + use \Bottledcode\SwytchFramework\Template\Traits\RegularPHP; + use \Bottledcode\SwytchFramework\Template\Traits\Htmx; + + #[\Bottledcode\SwytchFramework\Router\Attributes\Route(\Bottledcode\SwytchFramework\Router\Method::POST, '/api/number')] + public function getNumber(string $target_id, array $state): int { + return $this->rerender($target_id, [...$state, 'number' => random_int(0, 100)]); + } + + public function render(string $name, int $number = null): string { + if($number === null) { + $number = random_int(0, 100); + } + + $this->begin(); + ?> +
+

Hello, {}

+
+

Here is a random number: {}

+ +
+
+ end(); + } +} +``` diff --git a/src/Router/Attributes/From.php b/src/Router/Attributes/From.php deleted file mode 100644 index 6357835..0000000 --- a/src/Router/Attributes/From.php +++ /dev/null @@ -1,11 +0,0 @@ -