diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1cfa0f9..4a510b4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+# v2.4.0
+## 02/11/2020
+
+1. [](#new)
+ * Pass phpstan level 1 tests
+ * Requires shortcode-core plugin v4.2.0
+ * Twig 2.0 compatibility
+1. [](#improved)
+ * Code cleanup
+
# v2.3.0
## 02/06/2019
diff --git a/blueprints.yaml b/blueprints.yaml
index 3cea1ad..8e6c9db 100644
--- a/blueprints.yaml
+++ b/blueprints.yaml
@@ -1,5 +1,5 @@
name: Shortcode UI
-version: 2.3.0
+version: 2.4.0
description: "This plugin provides several UI shortcodes"
icon: code
author:
@@ -13,7 +13,8 @@ bugs: https://github.com/getgrav/grav-plugin-shortcode-ui/issues
license: MIT
dependencies:
- - shortcode-core
+ - { name: grav, version: '>=1.6.4' }
+ - { name: shortcode-core, version: '>=4.2.0' }
form:
validation: strict
diff --git a/twig/ShortcodeUITwigExtension.php b/classes/plugin/ShortcodeUiTwigExtension.php
similarity index 78%
rename from twig/ShortcodeUITwigExtension.php
rename to classes/plugin/ShortcodeUiTwigExtension.php
index 1243fcd..4a7f43e 100644
--- a/twig/ShortcodeUITwigExtension.php
+++ b/classes/plugin/ShortcodeUiTwigExtension.php
@@ -1,5 +1,5 @@
'top:'.$matches[1].';left:'.$matches[2].';',
- 'coords' => isset($matches[3]) ? $matches[3] : 'nw',
+ 'location' => 'top:' . $matches[1] . ';left:' . $matches[2] . ';',
+ 'coords' => $matches[3] ?? 'nw',
];
return $position;
diff --git a/shortcodes/AccordionsShortcode.php b/classes/shortcodes/AccordionsShortcode.php
similarity index 66%
rename from shortcodes/AccordionsShortcode.php
rename to classes/shortcodes/AccordionsShortcode.php
index a9c1955..4583cdd 100644
--- a/shortcodes/AccordionsShortcode.php
+++ b/classes/shortcodes/AccordionsShortcode.php
@@ -2,15 +2,14 @@
namespace Grav\Plugin\Shortcodes;
+use Grav\Plugin\ShortcodeCore\Shortcode;
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
-
class AccordionsShortcode extends Shortcode
{
public function init()
{
$this->shortcode->getHandlers()->add('ui-accordion', function(ShortcodeInterface $sc) {
-
// Add assets
$this->shortcode->addAssets('css', 'plugin://shortcode-ui/css/ui-accordion.css');
@@ -18,12 +17,15 @@ public function init()
$independent = filter_var($sc->getParameter('independent', false), FILTER_VALIDATE_BOOLEAN);
- $output = $this->twig->processTemplate('partials/ui-accordion.html.twig', [
- 'hash' => $hash,
- 'open' => $sc->getParameter('open'),
- 'type' => $independent ? 'checkbox' : 'radio',
- 'accordion_items' => $this->shortcode->getStates($hash),
- ]);
+ $output = $this->twig->processTemplate(
+ 'partials/ui-accordion.html.twig',
+ [
+ 'hash' => $hash,
+ 'open' => $sc->getParameter('open'),
+ 'type' => $independent ? 'checkbox' : 'radio',
+ 'accordion_items' => $this->shortcode->getStates($hash),
+ ]
+ );
return $output;
});
@@ -32,7 +34,8 @@ public function init()
// Add accordion to accordion state using parent accordion id
$hash = $this->shortcode->getId($sc->getParent());
$this->shortcode->setStates($hash, $sc);
- return;
+
+ return '';
});
}
}
\ No newline at end of file
diff --git a/shortcodes/AnimatedTextShortcode.php b/classes/shortcodes/AnimatedTextShortcode.php
similarity index 64%
rename from shortcodes/AnimatedTextShortcode.php
rename to classes/shortcodes/AnimatedTextShortcode.php
index 4949ab8..d37adce 100644
--- a/shortcodes/AnimatedTextShortcode.php
+++ b/classes/shortcodes/AnimatedTextShortcode.php
@@ -3,15 +3,14 @@
namespace Grav\Plugin\Shortcodes;
use Grav\Common\Utils;
+use Grav\Plugin\ShortcodeCore\Shortcode;
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
-
class AnimatedTextShortcode extends Shortcode
{
public function init()
{
$this->shortcode->getHandlers()->add('ui-animated-text', function(ShortcodeInterface $sc) {
-
// Add assets
$this->shortcode->addAssets('css', 'plugin://shortcode-ui/css/ui-atext.css');
$this->shortcode->addAssets('js', 'plugin://shortcode-ui/js/ui-atext.js');
@@ -30,20 +29,21 @@ public function init()
$content = (array) $content;
}
- if (intval($visible) > count($words)) {
+ if ((int)$visible > count($words)) {
$visible = 1;
}
- $output = $this->twig->processTemplate('partials/ui-atext.html.twig', [
- 'content' => $content,
- 'words' => $words,
- 'animation' => $animation,
- 'element' => $sc->getParameter('element', 'h1'),
- 'wrapper_extra' => Utils::contains($animation, 'type') ? ' waiting' : '',
- 'visible' => $visible,
- ]);
-
- return $output;
+ return $this->twig->processTemplate(
+ 'partials/ui-atext.html.twig',
+ [
+ 'content' => $content,
+ 'words' => $words,
+ 'animation' => $animation,
+ 'element' => $sc->getParameter('element', 'h1'),
+ 'wrapper_extra' => Utils::contains($animation, 'type') ? ' waiting' : '',
+ 'visible' => $visible,
+ ]
+ );
});
}
}
diff --git a/shortcodes/BrowserShortcode.php b/classes/shortcodes/BrowserShortcode.php
similarity index 56%
rename from shortcodes/BrowserShortcode.php
rename to classes/shortcodes/BrowserShortcode.php
index d6aea7c..b76e785 100644
--- a/shortcodes/BrowserShortcode.php
+++ b/classes/shortcodes/BrowserShortcode.php
@@ -2,24 +2,24 @@
namespace Grav\Plugin\Shortcodes;
+use Grav\Plugin\ShortcodeCore\Shortcode;
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
-
class BrowserShortcode extends Shortcode
{
public function init()
{
$this->shortcode->getHandlers()->add('ui-browser', function(ShortcodeInterface $sc) {
-
// Add assets
$this->shortcode->addAssets('css', 'plugin://shortcode-ui/css/ui-browser.css');
- $output = $this->twig->processTemplate('partials/ui-browser.html.twig', [
- 'address' => $sc->getParameter('address', 'http://localhost'),
- 'shortcode' => $sc,
- ]);
-
- return $output;
+ return $this->twig->processTemplate(
+ 'partials/ui-browser.html.twig',
+ [
+ 'address' => $sc->getParameter('address', 'http://localhost'),
+ 'shortcode' => $sc,
+ ]
+ );
});
}
}
\ No newline at end of file
diff --git a/shortcodes/CalloutShortcode.php b/classes/shortcodes/CalloutShortcode.php
similarity index 70%
rename from shortcodes/CalloutShortcode.php
rename to classes/shortcodes/CalloutShortcode.php
index faa2beb..7a0f16a 100644
--- a/shortcodes/CalloutShortcode.php
+++ b/classes/shortcodes/CalloutShortcode.php
@@ -2,15 +2,14 @@
namespace Grav\Plugin\Shortcodes;
+use Grav\Plugin\ShortcodeCore\Shortcode;
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
-
class CalloutShortcode extends Shortcode
{
public function init()
{
$this->shortcode->getHandlers()->add('ui-callout', function(ShortcodeInterface $sc) {
-
// Add assets
$this->shortcode->addAssets('js', ['jquery', 101]);
$this->shortcode->addAssets('js', 'plugin://shortcode-ui/js/ui-tooltips.js');
@@ -19,12 +18,15 @@ public function init()
$hash = $this->shortcode->getId($sc);
- $output = $this->twig->processTemplate('partials/ui-callouts.html.twig', [
- 'hash' => $hash,
- 'shortcode' => $sc,
- 'classes' => $sc->getParameter('class'),
- 'callouts' => $this->shortcode->getStates($hash),
- ]);
+ $output = $this->twig->processTemplate(
+ 'partials/ui-callouts.html.twig',
+ [
+ 'hash' => $hash,
+ 'shortcode' => $sc,
+ 'classes' => $sc->getParameter('class'),
+ 'callouts' => $this->shortcode->getStates($hash),
+ ]
+ );
return $output;
});
@@ -33,7 +35,8 @@ public function init()
// Add tab to tab state using parent tabs id
$hash = $this->shortcode->getId($sc->getParent());
$this->shortcode->setStates($hash, $sc);
- return;
+
+ return '';
});
}
}
\ No newline at end of file
diff --git a/shortcodes/ImageCompareShortcode.php b/classes/shortcodes/ImageCompareShortcode.php
similarity index 65%
rename from shortcodes/ImageCompareShortcode.php
rename to classes/shortcodes/ImageCompareShortcode.php
index 85f22ee..922955c 100644
--- a/shortcodes/ImageCompareShortcode.php
+++ b/classes/shortcodes/ImageCompareShortcode.php
@@ -2,15 +2,14 @@
namespace Grav\Plugin\Shortcodes;
+use Grav\Plugin\ShortcodeCore\Shortcode;
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
-
class ImageCompareShortcode extends Shortcode
{
public function init()
{
$this->shortcode->getHandlers()->add('ui-image-compare', function(ShortcodeInterface $sc) {
-
// Add assets
$this->shortcode->addAssets('css', 'plugin://shortcode-ui/css/ui-cslider.css');
$this->shortcode->addAssets('js', 'plugin://shortcode-ui/js/ui-cslider.js');
@@ -19,13 +18,16 @@ public function init()
preg_match_all('//', $content, $matches);
- if (sizeof($matches) == 2 && sizeof($matches[0]) == 2) {
- $output = $this->twig->processTemplate('partials/ui-cslider.html.twig', [
- 'matches' => $matches,
- ]);
-
- return $output;
+ if (count($matches) === 2 && count($matches[0]) === 2) {
+ return $this->twig->processTemplate(
+ 'partials/ui-cslider.html.twig',
+ [
+ 'matches' => $matches,
+ ]
+ );
}
+
+ return '';
});
}
}
\ No newline at end of file
diff --git a/shortcodes/PolaroidShortcode.php b/classes/shortcodes/PolaroidShortcode.php
similarity index 63%
rename from shortcodes/PolaroidShortcode.php
rename to classes/shortcodes/PolaroidShortcode.php
index 6d9b2e2..548445e 100644
--- a/shortcodes/PolaroidShortcode.php
+++ b/classes/shortcodes/PolaroidShortcode.php
@@ -2,23 +2,23 @@
namespace Grav\Plugin\Shortcodes;
+use Grav\Plugin\ShortcodeCore\Shortcode;
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
-
class PolaroidShortcode extends Shortcode
{
public function init()
{
$this->shortcode->getHandlers()->add('ui-polaroid', function(ShortcodeInterface $sc) {
-
// Add assets
$this->shortcode->addAssets('css', 'plugin://shortcode-ui/css/ui-polaroid.css');
- $output = $this->twig->processTemplate('partials/ui-polaroid.html.twig', [
- 'shortcode' => $sc,
- ]);
-
- return $output;
+ return $this->twig->processTemplate(
+ 'partials/ui-polaroid.html.twig',
+ [
+ 'shortcode' => $sc,
+ ]
+ );
});
}
}
\ No newline at end of file
diff --git a/shortcodes/TabsShortcode.php b/classes/shortcodes/TabsShortcode.php
similarity index 59%
rename from shortcodes/TabsShortcode.php
rename to classes/shortcodes/TabsShortcode.php
index c244327..7be0942 100644
--- a/shortcodes/TabsShortcode.php
+++ b/classes/shortcodes/TabsShortcode.php
@@ -2,15 +2,14 @@
namespace Grav\Plugin\Shortcodes;
+use Grav\Plugin\ShortcodeCore\Shortcode;
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
-
class TabsShortcode extends Shortcode
{
public function init()
{
$this->shortcode->getHandlers()->add('ui-tabs', function(ShortcodeInterface $sc) {
-
// Add assets
$this->shortcode->addAssets('js', ['jquery', 101]);
$this->shortcode->addAssets('js', 'plugin://shortcode-ui/js/ui-tabs.js');
@@ -18,22 +17,24 @@ public function init()
$hash = $this->shortcode->getId($sc);
- $output = $this->twig->processTemplate('partials/ui-tabs.html.twig', [
- 'hash' => $hash,
- 'active' => $sc->getParameter('active', 0),
- 'position' => $sc->getParameter('position', 'top-left'),
- 'theme' => $sc->getParameter('theme', $this->config->get('plugins.shortcode-ui.theme.tabs', 'default')),
- 'child_tabs' => $this->shortcode->getStates($hash),
- ]);
-
- return $output;
+ return $this->twig->processTemplate(
+ 'partials/ui-tabs.html.twig',
+ [
+ 'hash' => $hash,
+ 'active' => $sc->getParameter('active', 0),
+ 'position' => $sc->getParameter('position', 'top-left'),
+ 'theme' => $sc->getParameter('theme', $this->config->get('plugins.shortcode-ui.theme.tabs', 'default')),
+ 'child_tabs' => $this->shortcode->getStates($hash),
+ ]
+ );
});
$this->shortcode->getHandlers()->add('ui-tab', function(ShortcodeInterface $sc) {
// Add tab to tab state using parent tabs id
$hash = $this->shortcode->getId($sc->getParent());
$this->shortcode->setStates($hash, $sc);
- return;
+
+ return '';
});
}
}
\ No newline at end of file
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..98c79a7
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,31 @@
+{
+ "name": "grav-plugin-shortcode-ui",
+ "type": "grav-plugin",
+ "description": "Shortcode UI plugin for Grav CMS",
+ "keywords": ["shortcode"],
+ "homepage": "https://github.com/getgrav/grav-plugin-shortcode-ui/",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Team Grav",
+ "email": "devs@getgrav.org",
+ "homepage": "http://getgrav.org",
+ "role": "Developer"
+ }
+ ],
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "autoload": {
+ "psr-4": {
+ "Grav\\Plugin\\ShortcodeUi\\": "classes/plugin",
+ "Grav\\Plugin\\Shortcodes\\": "classes/shortcodes"
+ },
+ "classmap": ["shortcode-ui.php"]
+ },
+ "config": {
+ "platform": {
+ "php": "7.1.3"
+ }
+ }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..4b69a2d
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,22 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "7cbbfa0979b5a795056e1e3d3d558992",
+ "packages": [],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=7.1.3"
+ },
+ "platform-dev": [],
+ "platform-overrides": {
+ "php": "7.1.3"
+ }
+}
diff --git a/shortcode-ui.php b/shortcode-ui.php
index 75da8ec..ace0cc1 100644
--- a/shortcode-ui.php
+++ b/shortcode-ui.php
@@ -1,8 +1,9 @@
[
+ ['autoload', 100001],
+ ],
'onShortcodeHandlers' => ['onShortcodeHandlers', 0],
'onTwigExtensions' => ['onTwigExtensions', 0],
'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0],
];
}
+ /**
+ * [onPluginsInitialized:100000] Composer autoload.
+ *
+ * @return ClassLoader
+ */
+ public function autoload()
+ {
+ return require __DIR__ . '/vendor/autoload.php';
+ }
+
/**
* Add current directory to twig lookup paths.
*/
@@ -28,7 +42,6 @@ public function onTwigTemplatePaths()
public function onTwigExtensions()
{
- require_once(__DIR__ . '/twig/ShortcodeUITwigExtension.php');
$this->grav['twig']->twig->addExtension(new ShortcodeUiTwigExtension());
}
@@ -37,6 +50,6 @@ public function onTwigExtensions()
*/
public function onShortcodeHandlers()
{
- $this->grav['shortcode']->registerAllShortcodes(__DIR__.'/shortcodes');
+ $this->grav['shortcode']->registerAllShortcodes(__DIR__ . '/classes/shortcodes');
}
}
diff --git a/templates/partials/ui-polaroid.html.twig b/templates/partials/ui-polaroid.html.twig
index f9561b2..585366a 100644
--- a/templates/partials/ui-polaroid.html.twig
+++ b/templates/partials/ui-polaroid.html.twig
@@ -2,7 +2,7 @@
- {% if gloss is sameas(true) %}
+ {% if gloss is same as(true) %}
{% endif %}
{{ shortcode.getContent()|raw }}
diff --git a/vendor/autoload.php b/vendor/autoload.php
new file mode 100644
index 0000000..cfa3f51
--- /dev/null
+++ b/vendor/autoload.php
@@ -0,0 +1,7 @@
+
+ * Jordi Boggiano
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier
+ * @author Jordi Boggiano
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath.'\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ if (file_exists($file = $dir . $pathEnd)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
new file mode 100644
index 0000000..f27399a
--- /dev/null
+++ b/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+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/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000..343b13d
--- /dev/null
+++ b/vendor/composer/autoload_classmap.php
@@ -0,0 +1,10 @@
+ $baseDir . '/shortcode-ui.php',
+);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000..b7fc012
--- /dev/null
+++ b/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+ array($baseDir . '/classes/shortcodes'),
+ 'Grav\\Plugin\\ShortcodeUi\\' => array($baseDir . '/classes/plugin'),
+);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
new file mode 100644
index 0000000..65b6cf9
--- /dev/null
+++ b/vendor/composer/autoload_real.php
@@ -0,0 +1,52 @@
+= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitb986228ed042d16922a036b3668f596c::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
new file mode 100644
index 0000000..903998e
--- /dev/null
+++ b/vendor/composer/autoload_static.php
@@ -0,0 +1,41 @@
+
+ array (
+ 'Grav\\Plugin\\Shortcodes\\' => 23,
+ 'Grav\\Plugin\\ShortcodeUi\\' => 24,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'Grav\\Plugin\\Shortcodes\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/classes/shortcodes',
+ ),
+ 'Grav\\Plugin\\ShortcodeUi\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/classes/plugin',
+ ),
+ );
+
+ public static $classMap = array (
+ 'Grav\\Plugin\\ShortcodeUiPlugin' => __DIR__ . '/../..' . '/shortcode-ui.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitb986228ed042d16922a036b3668f596c::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitb986228ed042d16922a036b3668f596c::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitb986228ed042d16922a036b3668f596c::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
new file mode 100644
index 0000000..fe51488
--- /dev/null
+++ b/vendor/composer/installed.json
@@ -0,0 +1 @@
+[]