Current Directory: /home/astoriaah/www/templates/yootheme-BK/vendor/yootheme/theme/modules/builder
Viewing File: /home/astoriaah/www/templates/yootheme-BK/vendor/yootheme/theme/modules/builder/index.php
<?php
use YOOtheme\Theme\Builder;
use YOOtheme\Theme\ElementRenderer;
use YOOtheme\Theme\StyleRenderer;
use YOOtheme\Util\Arr;
use YOOtheme\Util\Collection;
return [
'name' => 'yootheme/builder',
'main' => function ($app) {
$this['data'] = function () {
return new Collection();
};
$this['builder'] = function () {
$builder = new Builder();
foreach ($this->modules->all() as $module) {
if ($name = Arr::get($module->options, 'builder')) {
$options = $module->options;
if ($render = Arr::get($options, 'render')) {
if ($render instanceof \Closure) {
$options['render'] = $render->bindTo($module, $module);
}
}
$builder->add($name, $options);
}
}
return $builder;
};
$app['builder'] = function () {
return $this['builder'];
};
},
'inject' => [
'option' => 'app.option',
'modules' => 'app.modules',
'scripts' => 'app.scripts',
'customizer' => 'theme.customizer',
],
'include' => [
'../../builder/*/index.php'
],
'routes' => function ($route) {
$route->post('/builder/library', function ($id, $element, $response) {
$this->option->set("library.{$id}", Builder::encode($element, false));
return $response->withJson(['message' => 'success']);
});
$route->delete('/builder/library', function ($id, $response) {
$this->option->remove("library.{$id}");
return $response->withJson(['message' => 'success']);
});
},
'events' => [
'theme.site' => function ($theme) {
if ($this->customizer->isActive()) {
$this->builder->addRenderer(function ($element, $type, $next) {
$content = $next($element, $type);
if ($type['config.element']) {
$content = preg_replace('/(^\s*<[^>]+)(>)/i', "$1 data-id=\"{$element->id}\"$2", $content, 1);
}
return $content;
});
}
$this->builder->addRenderer(new ElementRenderer());
},
'theme.admin' => [function ($theme) {
$this->data->set('library', new Collection($this->option->get('library')));
$this->scripts->add('customizer-builder', "{$this->path}/app/builder.min.js", 'customizer');
}, -10],
'view' => function () {
if ($data = $this->data->all()) {
$this->scripts->add('builder-data', sprintf('var $builder = %s;', json_encode($data)), 'customizer-builder', 'string');
}
}
],
'config' => [
'section' => [
'title' => 'Builder',
'heading' => false,
'width' => 600,
'priority' => 20,
],
'panels' => [
'builder-parallax' => [
'title' => 'Parallax',
'width' => 500,
'fields' => [
'parallax_x' => [
'type' => 'grid',
'fields' => [
'parallax_x_start' => [
'label' => 'Horizontal Start',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => -600,
'max' => 600,
'step' => 10,
],
],
'parallax_x_end' => [
'label' => 'Horizontal End',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => -600,
'max' => 600,
'step' => 10,
],
],
],
],
'parallax_y' => [
'type' => 'grid',
'fields' => [
'parallax_y_start' => [
'label' => 'Vertical Start',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => -600,
'max' => 600,
'step' => 10,
],
],
'parallax_y_end' => [
'label' => 'Vertical End',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => -600,
'max' => 600,
'step' => 10,
],
],
],
],
'parallax_scale' => [
'type' => 'grid',
'fields' => [
'parallax_scale_start' => [
'label' => 'Scale Start',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => 0.5,
'max' => 2,
'step' => 0.1,
],
],
'parallax_scale_end' => [
'label' => 'Scale End',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => 0.5,
'max' => 2,
'step' => 0.1,
],
],
],
],
'parallax_rotate' => [
'type' => 'grid',
'fields' => [
'parallax_rotate_start' => [
'label' => 'Rotate Start',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => 0,
'max' => 360,
'step' => 10,
],
],
'parallax_rotate_end' => [
'label' => 'Rotate End',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => 0,
'max' => 360,
'step' => 10,
],
],
],
],
'parallax_opacity' => [
'type' => 'grid',
'fields' => [
'parallax_opacity_start' => [
'label' => 'Opacity Start',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => 0,
'max' => 1,
'step' => 0.1,
],
],
'parallax_opacity_end' => [
'label' => 'Opacity End',
'width' => '1-2',
'type' => 'range',
'attrs' => [
'min' => 0,
'max' => 1,
'step' => 0.1,
],
],
],
],
'parallax_easing' => [
'label' => 'Easing',
'description' => 'Set the animation easing. A value below 1 is faster in the beginning and slower towards the end while a value above 1 behaves inversely.',
'type' => 'range',
'attrs' => [
'min' => 0.1,
'max' => 2,
'step' => 0.1,
],
],
'parallax_viewport' => [
'label' => 'Viewport',
'description' => 'Set the animation end point relative to viewport height, e.g. <code>0.5</code> for 50% of the viewport',
'type' => 'range',
'attrs' => [
'min' => 0.1,
'max' => 1,
'step' => 0.1,
],
],
'parallax_target' => [
'label' => 'Target',
'type' => 'checkbox',
'text' => 'Animate the element as long as the section is visible',
],
'parallax_zindex' => [
'label' => 'Z Index',
'type' => 'checkbox',
'text' => 'Set a higher stacking order.',
],
'parallax_breakpoint' => [
'label' => 'Breakpoint',
'description' => 'Display the parallax effect only on this device width and larger.',
'type' => 'select',
'default' => '',
'options' => [
'Always' => '',
'Small (Phone)' => 's',
'Medium (Tablet)' => 'm',
'Large (Desktop)' => 'l',
'X-Large (Large Screens)' => 'xl',
],
],
],
],
],
],
];