Вход Регистрация
Файл: library/XenForo/Template/Helper/RightToLeft.php
Строк: 109
<?php

class XenForo_Template_Helper_RightToLeft
{
    public static 
$regex = array
    (
        
'ruleDirection'
            
=> '/(?<=[^a-z0-9-])(?<!rtl-raw.)([a-z-]+)?(left|right)(-(style|width|color|radius))?(s*:)/siU',
        
'valueDirection' // don't do css direction - it's added for constant meaning
            
=> '/(?<=[^a-z0-9-])(?<!rtl-raw.)((text-align|float|clear)s*:s*)(left|right)(s*!importants*)?(s*;|s*}|$)/siU',
        
'compoundDirection'
            
=> '/(?<=[^a-z0-9-])(?<!rtl-raw.)(margin|padding|border-width|border-style|border-color)(s*:s*)([^;}]+)(s*;|s*}|$)/siU',
    );

    public static function 
getRtlCss($css)
    {
        
// switch padding-left, border-left-width etc.
        
$css preg_replace_callback(self::$regex['ruleDirection'], array(__CLASS__'switchRuleDirection'), $css);

        
// switch float: left, text-direction: right etc.
        
$css preg_replace_callback(self::$regex['valueDirection'], array(__CLASS__'switchValueDirection'), $css);

        
// handle margin, padding and border compound rules
        
$css preg_replace_callback(self::$regex['compoundDirection'], array(__CLASS__'handleCompoundDirections'), $css);

        
// negate horizontal box shadow values
        
$css preg_replace_callback(
            
'#(?<=[^a-z0-9])(?<!rtl-raw.)(box-shadows*:s*)(S+?)#siU', array(__CLASS__'handleBoxShadow'), $css
        
);

        
// flip left/right background positions
        
$css preg_replace_callback(
            
'#(?<=[^a-z0-9])(?<!rtl-raw.)(background-positions*:s*)(left|right)([s;}])#siU',
            array(
__CLASS__'handleBackgroundPosition'),
            
$css
        
);
        
$css preg_replace_callback(
            
'#(?<=[^a-z0-9])(?<!rtl-raw.)(backgrounds*:s*[^;]+s+)(left|right)([s;}])#siU',
            array(
__CLASS__'handleBackgroundPosition'),
            
$css
        
);

        return 
$css;
    }

    public static function 
getStandardDirection($direction)
    {
        if (
strtolower($direction) == 'left')
        {
            return 
'right';
        }
        else
        {
            return 
'left';
        }
    }

    public static function 
switchRuleDirection(array $regexMatch)
    {
        return 
$regexMatch[1] . self::getStandardDirection($regexMatch[2]) . $regexMatch[3] . $regexMatch[5];
    }

    public static function 
switchValueDirection(array $regexMatch)
    {
        return 
$regexMatch[1] . self::getStandardDirection($regexMatch[3]) . $regexMatch[4] . $regexMatch[5];
    }

    public static function 
handleCompoundDirections(array $regexMatch)
    {
        
$value trim($regexMatch[3]);

        
preg_match_all('#([a-z0-9-]+([^)]+)|S+?)#siU'$value$matches);
        
$bits = isset($matches) ? $matches[1] : array();

        if (
count($bits) == 4)
        {
            
$value "$bits[0] $bits[3] $bits[2] $bits[1]";
        }

        return 
$regexMatch[1] . $regexMatch[2] . $value $regexMatch[4];
    }

    public static function 
handleBoxShadow(array $regexMatch)
    {
        if (
preg_match('/^(-)?(.?d+.*)$/s'$regexMatch[2], $numberMatch))
        {
            if (
$numberMatch[1])
            {
                
// negative -> positive
                
$value $numberMatch[2];
            }
            else
            {
                
// positive -> negative
                
$value '-' $numberMatch[2];
            }

            return 
$regexMatch[1] . $value;
        }

        
// catches 'none' and other unexpected values
        
return $regexMatch[1] . $regexMatch[2];
    }

    public static function 
handleBackgroundPosition(array $regexMatch)
    {
        
$value strtolower($regexMatch[2]);
        switch (
$value)
        {
            case 
'left'$value 'right'; break;
            case 
'right'$value 'left'; break;
        }

        return 
$regexMatch[1] . $value $regexMatch[3];
    }

    
/**
     * Replaces direction-specific HTML entities with the opposite-facing version if necessary
     *
     * @param string HTML
     *
     * @return string
     */
    
public static function replaceRtlEntities($html)
    {
        return 
strtr($html, array
        (
            
'&larr;' => '&rarr;',
            
'&rarr;' => '&larr;'
        
));
    }
}
Онлайн: 0
Реклама