227 lines
No EOL
5.9 KiB
PHP
Executable file
227 lines
No EOL
5.9 KiB
PHP
Executable file
<?php
|
|
// no direct access
|
|
defined('ABSPATH') or die();
|
|
|
|
/**
|
|
* MEC Kses Class.
|
|
*
|
|
*/
|
|
class MEC_kses extends MEC_base
|
|
{
|
|
static $allowed_html_form = NULL;
|
|
static $allowed_html_element = NULL;
|
|
static $allowed_html_rich = NULL;
|
|
static $allowed_html_embed = NULL;
|
|
static $allowed_html_page = NULL;
|
|
static $allowed_html_full = NULL;
|
|
static $allowed_attrs = array(
|
|
'data-*' => 1,
|
|
'aria-*' => 1,
|
|
'type' => 1,
|
|
'value' => 1,
|
|
'class' => 1,
|
|
'id' => 1,
|
|
'for' => 1,
|
|
'style' => 1,
|
|
'src' => 1,
|
|
'alt' => 1,
|
|
'title' => 1,
|
|
'placeholder' => 1,
|
|
'href' => 1,
|
|
'rel' => 1,
|
|
'target' => 1,
|
|
'novalidate' => 1,
|
|
'name' => 1,
|
|
'tabindex' => 1,
|
|
'action' => 1,
|
|
'method' => 1,
|
|
'width' => 1,
|
|
'height' => 1,
|
|
'selected' => 1,
|
|
'checked' => 1,
|
|
'readonly' => 1,
|
|
'disabled' => 1,
|
|
'required' => 1,
|
|
'autocomplete' => 1,
|
|
'min' => 1,
|
|
'max' => 1,
|
|
'step' => 1,
|
|
'cols' => 1,
|
|
'rows' => 1,
|
|
'lang' => 1,
|
|
'dir' => 1,
|
|
'enctype' => 1,
|
|
'multiple' => 1,
|
|
'frameborder' => 1,
|
|
'allow' => 1,
|
|
'allowfullscreen' => 1,
|
|
'label' => 1,
|
|
'align' => 1,
|
|
'accept-charset' => 1,
|
|
'itemtype' => 1,
|
|
'itemscope' => 1,
|
|
'itemprop' => 1,
|
|
'content' => 1,
|
|
'onclick' => 1,
|
|
'onsubmit' => 1,
|
|
'onchange' => 1,
|
|
'xmlns' => 1,
|
|
'viewbox' => 1,
|
|
'd' => 1,
|
|
'transform' => 1,
|
|
'fill' => 1,
|
|
'enable-background' => 1,
|
|
'version' => 1,
|
|
'xml:space' => 1,
|
|
'xmlns:xlink' => 1,
|
|
'onkeydown' => 1,
|
|
);
|
|
|
|
public function __construct()
|
|
{
|
|
}
|
|
|
|
public static function full($html)
|
|
{
|
|
if(is_null($html)) return '';
|
|
|
|
if(is_null(self::$allowed_html_full))
|
|
{
|
|
$allowed = wp_kses_allowed_html('post');
|
|
self::$allowed_html_full = apply_filters('mec_kses_tags', $allowed, 'full');
|
|
}
|
|
|
|
if(defined('MEC_NO_JS_CSS_IN_HTML') && MEC_NO_JS_CSS_IN_HTML) return wp_kses($html, self::$allowed_html_full);
|
|
else return $html;
|
|
}
|
|
|
|
public static function page($html)
|
|
{
|
|
if(is_null($html)) return '';
|
|
|
|
if(is_null(self::$allowed_html_page))
|
|
{
|
|
$allowed = wp_kses_allowed_html('post');
|
|
self::$allowed_html_page = apply_filters('mec_kses_tags', $allowed, 'page');
|
|
}
|
|
|
|
return wp_kses($html, self::$allowed_html_page);
|
|
}
|
|
|
|
public static function form($html)
|
|
{
|
|
if(is_null($html)) return '';
|
|
|
|
if(is_null(self::$allowed_html_form))
|
|
{
|
|
$allowed = wp_kses_allowed_html('post');
|
|
self::$allowed_html_form = apply_filters('mec_kses_tags', $allowed, 'form');
|
|
}
|
|
|
|
return wp_kses($html, self::$allowed_html_form);
|
|
}
|
|
|
|
public static function element($html)
|
|
{
|
|
if(is_null($html)) return '';
|
|
|
|
if(is_null(self::$allowed_html_element))
|
|
{
|
|
$allowed = wp_kses_allowed_html('post');
|
|
self::$allowed_html_element = apply_filters('mec_kses_tags', $allowed, 'element');
|
|
}
|
|
|
|
return wp_kses($html, self::$allowed_html_element);
|
|
}
|
|
|
|
/**
|
|
* Element + Embed
|
|
* @param $html
|
|
* @return string
|
|
*/
|
|
public static function rich($html)
|
|
{
|
|
if(is_null($html)) return '';
|
|
|
|
if(is_null(self::$allowed_html_rich))
|
|
{
|
|
$allowed = wp_kses_allowed_html('post');
|
|
self::$allowed_html_rich = apply_filters('mec_kses_tags', $allowed, 'rich');
|
|
}
|
|
|
|
return wp_kses($html, self::$allowed_html_rich);
|
|
}
|
|
|
|
/**
|
|
* Only Embed
|
|
* @param $html
|
|
* @return string
|
|
*/
|
|
public static function embed($html)
|
|
{
|
|
if(is_null($html)) return '';
|
|
|
|
if(is_null(self::$allowed_html_embed))
|
|
{
|
|
self::$allowed_html_embed = apply_filters('mec_kses_tags', array(), 'embed');
|
|
}
|
|
|
|
return wp_kses($html, self::$allowed_html_embed);
|
|
}
|
|
|
|
public static function tags($tags, $context)
|
|
{
|
|
foreach(array(
|
|
'svg',
|
|
'path',
|
|
'div',
|
|
'span',
|
|
'ul',
|
|
'li',
|
|
'a',
|
|
'button',
|
|
'progress',
|
|
'dt',
|
|
'dl',
|
|
) as $tag)
|
|
{
|
|
$tags[$tag] = self::$allowed_attrs;
|
|
}
|
|
|
|
if(in_array($context, array('form', 'page', 'full')))
|
|
{
|
|
$tags['form'] = self::$allowed_attrs;
|
|
$tags['label'] = self::$allowed_attrs;
|
|
$tags['input'] = self::$allowed_attrs;
|
|
$tags['select'] = self::$allowed_attrs;
|
|
$tags['option'] = self::$allowed_attrs;
|
|
$tags['optgroup'] = self::$allowed_attrs;
|
|
$tags['textarea'] = self::$allowed_attrs;
|
|
$tags['button'] = self::$allowed_attrs;
|
|
$tags['fieldset'] = self::$allowed_attrs;
|
|
$tags['output'] = self::$allowed_attrs;
|
|
}
|
|
|
|
if(in_array($context, array('embed', 'rich', 'full')))
|
|
{
|
|
if(!isset($tags['iframe'])) $tags['iframe'] = self::$allowed_attrs;
|
|
if(!isset($tags['canvas'])) $tags['canvas'] = self::$allowed_attrs;
|
|
}
|
|
|
|
if($context === 'full')
|
|
{
|
|
if(!isset($tags['script'])) $tags['script'] = self::$allowed_attrs;
|
|
if(!isset($tags['style'])) $tags['style'] = self::$allowed_attrs;
|
|
}
|
|
|
|
return $tags;
|
|
}
|
|
|
|
public static function styles($styles)
|
|
{
|
|
$styles[] = 'display';
|
|
$styles[] = 'opacity';
|
|
|
|
return $styles;
|
|
}
|
|
} |