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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user