Initial shortcode implementation
This commit is contained in:
153
classes/Shortcode.php
Normal file
153
classes/Shortcode.php
Normal file
@ -0,0 +1,153 @@
|
||||
<?php namespace Sensory5\Shortcode\Classes;
|
||||
|
||||
/**
|
||||
* Shortcodes
|
||||
*
|
||||
* Original idea from Pingpong Labs (https://github.com/pingpong-labs/shortcode)
|
||||
*
|
||||
* Changed to fit closer to the Thunderer\Shortcode syntax.
|
||||
*/
|
||||
|
||||
use Countable;
|
||||
use Thunder\Shortcode\HandlerContainer\HandlerContainer;
|
||||
use Thunder\Shortcode\Parser\RegexParser;
|
||||
use Thunder\Shortcode\Processor\Processor;
|
||||
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
|
||||
|
||||
class Shortcode implements Countable
|
||||
{
|
||||
/** @var HandlerContainer */
|
||||
private $handlers;
|
||||
|
||||
/**
|
||||
* The constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->handlers = new HandlerContainer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the names for all registered shortcodes.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getNames()
|
||||
{
|
||||
return $this->handlers->getNames();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new shortcode to the handler container.
|
||||
*
|
||||
* @param string $name
|
||||
* @param mixed $callback
|
||||
*/
|
||||
public function add($name, $callback)
|
||||
{
|
||||
$this->handlers->add($name, $callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified shortcode name from the handler.
|
||||
*
|
||||
* @param string $name
|
||||
*/
|
||||
public function remove($name)
|
||||
{
|
||||
if ($this->exists($name)) {
|
||||
$this->handlers->remove($name);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all registered shortcodes
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function destroyAll()
|
||||
{
|
||||
$this->handlers = new HandlerContainer();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip any shortcodes from the content.
|
||||
*
|
||||
* @param string $content
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function strip($content)
|
||||
{
|
||||
$handlers = new HandlerContainer();
|
||||
$handlers->setDefault(function(ShortcodeInterface $s) { return $s->getContent(); });
|
||||
$processor = new Processor(new RegexParser(), $handlers);
|
||||
|
||||
return $processor->process($content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get count from all shortcodes.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return count($this->handlers->getNames());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true is the given name exist in shortcodes array.
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function exists($name)
|
||||
{
|
||||
return $this->handlers->has($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true is the given content contains the named shortcode.
|
||||
*
|
||||
* @param string $content
|
||||
* @param string $name
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function contains($content, $name)
|
||||
{
|
||||
$hasShortcode = false;
|
||||
|
||||
$handlers = new HandlerContainer();
|
||||
$handlers->setDefault(function(ShortcodeInterface $s) use($name, &$hasShortcode) {
|
||||
if($s->getName() === $name) {
|
||||
$hasShortcode = true;
|
||||
}
|
||||
});
|
||||
$processor = new Processor(new RegexParser(), $handlers);
|
||||
$processor->process($content);
|
||||
|
||||
return $hasShortcode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse content and replace parts of it using registered handlers
|
||||
*
|
||||
* @param $content
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function parse($content)
|
||||
{
|
||||
$processor = new Processor(new RegexParser(), $this->handlers);
|
||||
|
||||
return $processor->process($content);
|
||||
}
|
||||
}
|
||||
|
17
classes/ShortcodeFacade.php
Normal file
17
classes/ShortcodeFacade.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php namespace Sensory5\Shortcode\Classes;
|
||||
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
class ShortcodeFacade extends Facade
|
||||
{
|
||||
/**
|
||||
* Get the registered name of the component.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return 'shortcode';
|
||||
}
|
||||
}
|
||||
|
35
classes/ShortcodeServiceProvider.php
Normal file
35
classes/ShortcodeServiceProvider.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php namespace Sensory5\Shortcode\Classes;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class ShortcodeServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Indicates if loading of the provider is deferred.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $defer = false;
|
||||
|
||||
/**
|
||||
* Register the service provider.
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->app['shortcode'] = $this->app->share(function ($app) {
|
||||
return new Shortcode();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the services provided by the provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provides()
|
||||
{
|
||||
return array('shortcode');
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user