123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?php
- namespace Grav\Plugin;
- use \Grav\Common\Plugin;
- use \Grav\Common\Grav;
- use \Grav\Common\Page\Page;
- class FeatherlightPlugin extends Plugin
- {
- protected $active = false;
- /**
- * @return array
- */
- public static function getSubscribedEvents()
- {
- return [
- 'onPluginsInitialized' => ['onPluginsInitialized', 0]
- ];
- }
- /**
- * Initialize configuration
- */
- public function onPluginsInitialized()
- {
- if ($this->isAdmin()) {
- $this->active = false;
- return;
- }
- $this->enable([
- 'onPageInitialized' => ['onPageInitialized', 0]
- ]);
- }
- /**
- * Initialize configuration
- */
- public function onPageInitialized()
- {
- $defaults = (array) $this->config->get('plugins.featherlight');
- /** @var Page $page */
- $page = $this->grav['page'];
- if (isset($page->header()->featherlight)) {
- $this->config->set('plugins.featherlight', array_merge($defaults, $page->header()->featherlight));
- }
- // take the old legacy `lightbox: true` setting into account
- if (isset($page->header()->lightbox) && $page->header()->lightbox == true) {
- $legacy = true;
- } else {
- $legacy = false;
- }
- $this->active = $this->config->get('plugins.featherlight.active') || $legacy;
- if ($this->active) {
- $this->enable([
- 'onTwigSiteVariables' => ['onTwigSiteVariables', 0]
- ]);
- }
- }
- /**
- * if enabled on this page, load the JS + CSS theme.
- */
- public function onTwigSiteVariables()
- {
- $config = $this->config->get('plugins.featherlight');
- if ($config['requirejs']) {
- $init = "define(\"featherlight\",['jquery', 'plugin/featherlight/js/featherlight.min' ], function($){
- var Lightbox = {
- Init : function() {
- $('a[rel=\"lightbox\"]').featherlight({
- openSpeed: {$config['openSpeed']},
- closeSpeed: {$config['closeSpeed']},
- closeOnClick: '{$config['closeOnClick']}',
- closeOnEsc: '{$config['closeOnEsc']}',
- root: '{$config['root']}'
- });
- }
- };
- return Lightbox;
- });";
- $this->grav['assets']
- ->addCss('plugin://featherlight/css/featherlight.min.css')
- ->addInlineJs($init);
- } elseif ($config['gallery']) {
- $init = $this->getInitJs($config);
- $this->grav['assets']
- ->addCss('plugin://featherlight/css/featherlight.min.css')
- ->addCss('plugin://featherlight/css/featherlight.gallery.min.css')
- ->add('jquery', 101)
- ->addJs('plugin://featherlight/js/featherlight.min.js')
- ->addJs('plugin://featherlight/js/featherlight.gallery.min.js')
- ->addInlineJs($init);
- } else {
- $init = $this->getInitJs($config);
- $this->grav['assets']
- ->addCss('plugin://featherlight/css/featherlight.min.css')
- ->add('jquery', 101)
- ->addJs('plugin://featherlight/js/featherlight.min.js')
- ->addInlineJs($init);
- }
- }
- protected function getInitJs($config) {
- $asset = $this->grav['locator']->findResource($config['initTemplate'], false);
- $init = file_get_contents(ROOT_DIR . $asset);
- $init = str_replace(
- array('{pluginName}', '{openSpeed}', '{closeSpeed}', '{closeOnClick}', '{closeOnEsc}', '{root}'),
- array(
- $config['gallery'] ? 'featherlightGallery' : 'featherlight',
- $config['openSpeed'],
- $config['closeSpeed'],
- $config['closeOnClick'],
- $config['closeOnEsc'],
- $config['root']
- ),
- $init
- );
- return $init;
- }
- }
|