linksderisar / clay
Create Json Blueprints for the Vue.js Clay Renderer
Installs: 6
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/linksderisar/clay
Requires
- php: ^7.2
- ext-json: *
Requires (Dev)
- orchestra/testbench: ^3.7
- phpunit/phpunit: ^7.5
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2021-02-10 16:06:09 UTC
README
Installation
composer require linksderisar/clay
Basic Usage
\Linksderisar\Clay\Components\Base\Component::make('div')->toJson(); // Or return it directly from the Controller Route::get('/', function () { return \Linksderisar\Clay\Components\Base\Component::make('div'); });
Add Attributes
You can add all html Attributes like id, class, placeholder... with the attribute() or attributes() function from the Base/Component
\Linksderisar\Clay\Components\Base\Component::make('div') ->attribute('id', 'identifier'); // Or add multiple Attributes at once with attributes(array) \Linksderisar\Clay\Components\Base\Component::make('div') ->attributes(['id' => 'identifier']);
Add Classes
You can add classes to your tag using the attribute('class','my-css-class') or you use the
classes() function. The classes() function excepts strings and arrays.
\Linksderisar\Clay\Components\Base\Component::make('div') ->classes('my-css-class my-other-css-class'); \Linksderisar\Clay\Components\Base\Component::make('div') ->classes(['my-css-class', 'my-other-css-class']); \Linksderisar\Clay\Components\Base\Component::make('div') ->classes([ 'my-css-class' => true, 'css-class-who-wont-be-added-in-the-dom' => false ]);
Add Props
You can add vue props using the prop('class','my-css-class') function.
\Linksderisar\Clay\Components\Base\Component::make('div') ->prop('my-Prop', 'prop-value'); \Linksderisar\Clay\Components\Base\Component::make('div') ->props(['my-Prop'=> 'prop-value']);
Examples
An overwhelming example
PHP Code:
return Page::create( Component::make('div') ->key('someKey') ->ref('ref') ->refInFor() ->classes('some-class') ->prop('staticProp', 'value') ->if('a === b') ->show('c === b') ->loop('array/object') ->style('background-color', 'black') ->children( Component::make('span')->text('Some Text between the Tags'), Component::make('some-component') ->scopedSlots(function ($scope) { return [Component::make('div') ->on('someEvent', $scope('scoped.method()')) ->bind(function ($component) use ($scope) { return $component->prop('boundProp', $scope('scoped.value')); })]; }) ) ) ->store(['variable' => 'value']) ->header([ 'title' => 'Titel der seite', 'link' => ['rel' => 'stylesheet', 'href' => '/some/css.css'] ]);
Generated Json Blueprint:
{
"store": {
"variable": "value"
},
"meta": {
"version": "1.0.0"
},
"head": {
"title": "Titel der seite",
"link": {
"rel": "stylesheet",
"href": "/some/css.css"
}
},
"componentTree": {
"id": "ERX1cc5HWzDuKUMF",
"type": "div",
"attributes": {
"key": "someKey",
"ref": "ref",
"refInFor": true,
"style": {
"background-color": "black"
},
"props": {
"staticProp": "value"
},
"class": [
"some-class"
]
},
"loop": "array/object",
"if": "a === b",
"show": "c === b",
"children": [
{
"id": "nMkHWwpuogLFqZwE",
"type": "span",
"children": {
"id": "Sr6cm4i2ojUH48KW",
"type": "$text",
"value": "Some Text between the Tags"
}
},
{
"id": "X4XzTHudtT6kxxzi",
"type": "some-component",
"scopedSlots": [
{
"id": "lPusFpNEW0LxSsGr",
"type": "div",
"attributes": {
"props": {
":boundProp": "$_slot_props.X4XzTHudtT6kxxzi.scoped.value"
},
"on": {
"someEvent": "$_slot_props.X4XzTHudtT6kxxzi.scoped.method()"
}
}
}
]
}
]
}
}
Blueprints
- protected generateId()
- public clone()
- public static create(...$attributes)
- public toArray()
- public toJson()
- public __toString()