WordPress.org

Plugin Directory

Changeset 571800


Ignore:
Timestamp:
07/13/12 15:32:56 (5 years ago)
Author:
raulillana
Message:

tagged v1.2.1 and uploaded v2.0 to trunk

Location:
awebsome-browser-selector
Files:
5 added
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • awebsome-browser-selector/trunk/awebsome-browser-selector.php

    r567718 r571800  
    33    Plugin Name: Awebsome! Browser Selector 
    44    Plugin URI: http://plugins.awebsome.com 
    5     Description: Empower your CSS selectors. Write specific CSS code for each OS/Browser the right way. 
    6     Version: 1.2.1 
     5    Description: Empower your CSS selectors. Write specific CSS code for each Platform/Browser/Version the right way. 
     6    Version: 2.0 
    77    Author: Raul Illana <r@awebsome.com> 
    88    Author URI: http://raulillana.com 
    99    License: GPLv2 
    1010*/ 
     11if( !class_exists('Awebsome_Browser_Selector') ): 
     12/** 
     13 * Awebsome Browser Selector 
     14 *  
     15 * @since 2.0 
     16 */ 
     17class Awebsome_Browser_Selector 
     18{ 
     19    /** 
     20     * PHP5 Constructor 
     21     */ 
     22    public function __construct() 
     23    { 
     24        add_filter('body_class', array(&$this, 'add_body_classes')); 
     25         
     26        // BuddyPress support 
     27        add_action('bp_include', 'bp_activate'); 
     28    } 
     29     
     30    /** 
     31     * Only load code that needs BuddyPress to run once BP is loaded and initialized 
     32     *  
     33     * @since 2.0 
     34     */ 
     35    public function bp_activate() 
     36    { 
     37        require(dirname(__FILE__) .'/'. __FILE__); 
     38    } 
     39     
     40    /** 
     41     * Parses the User Agent (UA) String 
     42     *  
     43     * Code based in https://github.com/raulillana/PhpUserAgent 
     44     *  
     45     * @param $ua string Server User Agent 
     46     * @return string    Human Readable String (platform + browser + version) 
     47     *  
     48     * @since 2.0 
     49     */ 
     50    public function parse_UA_string($ua = null) 
     51    { 
     52        if( is_null($ua) ) $ua = $_SERVER['HTTP_USER_AGENT']; 
     53     
     54        $data = array( 
     55            'platform' => '', 
     56            'browser'  => '', 
     57            'version'  => '', 
     58        ); 
     59     
     60        if( preg_match('/\((.*?)\)/im', $ua, $regs) ) 
     61        { 
     62            # (?<platform>Android|iPhone|iPad|Windows|Linux|Macintosh|Windows Phone OS|Silk|linux-gnu|BlackBerry)(?: x86_64)?(?: NT)?(?:[ /][0-9._]+)*(;|$) 
     63            preg_match_all('%(?P<platform>Android|iPhone|iPad|Windows|Linux|Macintosh|Windows Phone OS|Silk|linux-gnu|BlackBerry)(?: x86_64)?(?: NT)?(?:[ /][0-9._]+)*(;|$)%im', $regs[1], $result, PREG_PATTERN_ORDER); 
     64             
     65            $result['platform'] = array_unique($result['platform']); 
     66             
     67            if( count($result['platform']) > 1 ) 
     68            { 
     69                if( ($key = array_search('Android', $result['platform'])) !== false ) $data['platform']  = $result['platform'][$key]; 
     70            } 
     71            elseif( isset($result['platform'][0]) ) 
     72            { 
     73                $data['platform'] = $result['platform'][0]; 
     74            } 
     75        } 
     76         
     77        # (?<browser>Camino|Kindle|Firefox|Safari|MSIE|AppleWebKit|Chrome|IEMobile|Opera|Silk|Lynx|Version|Wget)(?:[/ ])(?<version>[0-9.]+) 
     78        preg_match_all('%(?P<browser>Camino|Kindle|Firefox|Safari|MSIE|AppleWebKit|Chrome|IEMobile|Opera|Silk|Lynx|Version|Wget|curl)(?:[/ ])(?P<version>[0-9.]+)%im', $ua, $result, PREG_PATTERN_ORDER); 
     79         
     80        if( $data['platform'] == 'linux-gnu' ) $data['platform'] = 'Linux'; 
     81         
     82        if( ($key = array_search('Kindle', $result['browser'])) !== false || ($key = array_search('Silk', $result['browser'])) !== false ) 
     83        { 
     84            $data['browser']  = $result['browser'][$key]; 
     85            $data['platform'] = 'Kindle'; 
     86            $data['version']  = $result['version'][$key]; 
     87        } 
     88        elseif( $result['browser'][0] == 'AppleWebKit' ) 
     89        { 
     90            if( ($data['platform'] == 'Android' && !($key = 0)) || $key = array_search('Chrome', $result['browser']) ) 
     91            { 
     92                $data['browser'] = 'Chrome'; 
     93                 
     94                if( ($vkey = array_search('Version', $result['browser'])) !== false ) $key = $vkey; 
     95            } 
     96            elseif( $data['platform'] == 'BlackBerry' ) 
     97            { 
     98                $data['browser'] = 'BlackBerry Browser'; 
     99                 
     100                if( ($vkey = array_search('Version', $result['browser'])) !== false ) $key = $vkey; 
     101            } 
     102            elseif( $key = array_search('Kindle', $result['browser']) ) $data['browser'] = 'Kindle'; 
     103            elseif( $key = array_search('Safari', $result['browser']) ) 
     104            { 
     105                $data['browser'] = 'Safari'; 
     106                 
     107                if( ($vkey = array_search('Version', $result['browser'] )) !== false ) $key = $vkey; 
     108            } 
     109            else $key = 0; 
     110             
     111            $data['version'] = $result['version'][$key]; 
     112        } 
     113        elseif( ($key = array_search('Opera', $result['browser'])) !== false ) 
     114        { 
     115            $data['browser'] = $result['browser'][$key]; 
     116            $data['version'] = $result['version'][$key]; 
     117             
     118            if( ($key = array_search('Version', $result['browser'])) !== false ) $data['version'] = $result['version'][$key]; 
     119        } 
     120        elseif( $result['browser'][0] == 'MSIE' ) 
     121        { 
     122            if( $key = array_search('IEMobile', $result['browser']) ) $data['browser'] = 'IEMobile'; 
     123            else 
     124            { 
     125                $data['browser'] = 'MSIE'; 
     126                $key = 0; 
     127            } 
     128             
     129            $data['version'] = $result['version'][$key]; 
     130        } 
     131        elseif( $key = array_search('Kindle', $result['browser']) ) 
     132        { 
     133            $data['browser'] = 'Kindle'; 
     134            $data['platform'] = 'Kindle'; 
     135        } 
     136        else 
     137        { 
     138            $data['browser'] = $result['browser'][0]; 
     139            $data['version'] = $result['version'][0]; 
     140        } 
     141         
     142        return $data; 
     143    } 
     144     
     145    /** 
     146     * Converts the parsed User Agent string to CSS classes 
     147     *  
     148     * @param $data array Server User Agent parsed 
     149     * @return string     Parsed CSS classes (platform + browser + version) 
     150     *  
     151     * @since 2.0 
     152     */ 
     153    public function parse_UA_to_classes($data) 
     154    { 
     155        $css['platform'] = self::filter_platform($data['platform']); 
     156        $css['browser']  = self::filter_browser($data['browser']); 
     157        $css['version']  = self::filter_version($data['version']); 
     158         
     159        return join(' ', $css); 
     160    } 
     161     
     162    /** 
     163     * Filters the Platform CSS string 
     164     *  
     165     * @param $platform string Server User Agent Platform parsed 
     166     * @return string          CSS Platform class 
     167     *  
     168     * @since 2.0 
     169     */ 
     170    public function filter_platform($platform) 
     171    { 
     172        $p = ''; 
     173         
     174        switch($platform) 
     175        { 
     176            // desktop 
     177            case 'Windows'   : $p = 'win'; break; 
     178            case 'Linux'     : $p = 'lnx'; break; 
     179            case 'Macintosh' : $p = 'mac'; break; 
     180             
     181            // mobile 
     182            case 'Android'          : $p = 'android';    break; 
     183            case 'iPhone'           : $p = 'iphone';     break; 
     184            case 'iPad'             : $p = 'ipad';       break; 
     185            case 'Windows Phone OS' : $p = 'winphone';   break; 
     186            case 'Kindle'           : $p = 'kindle';     break; 
     187            case 'Kindle Fire'      : $p = 'kindlefire'; break; 
     188            case 'BlackBerry'       : $p = 'blackberry'; break; 
     189             
     190            default : break; 
     191        } 
     192         
     193        return $p; 
     194    } 
     195     
     196    /** 
     197     * Filters the Browser CSS string 
     198     *  
     199     * @param $browser string Server User Agent Browser parsed 
     200     * @return string         CSS Browser class 
     201     *  
     202     * @since 2.0 
     203     */ 
     204    public function filter_browser($browser) 
     205    { 
     206        $b = ''; 
     207         
     208        switch($browser) 
     209        { 
     210            case 'Camino'            : $b = 'camino';   break; 
     211            case 'Kindle'            : $b = 'kindle';   break; 
     212            case 'Firefox'           : $b = 'gecko';    break; 
     213            case 'Safari'            : $b = 'safari';   break; 
     214            case 'Internet Explorer' : $b = 'ie';       break; 
     215            case 'IEMobile'          : $b = 'iemobile'; break; 
     216            case 'Chrome'            : $b = 'chrome';   break; 
     217            case 'Opera'             : $b = 'opera';    break; 
     218            case 'Silk'              : $b = 'silk';     break; 
     219            case 'Lynx'              : $b = 'lynx';     break; 
     220            case 'Wget'              : $b = 'wget';     break; 
     221            case 'Curl'              : $b = 'curl';     break; 
     222             
     223            default : break; 
     224        } 
     225         
     226        return $b; 
     227    } 
     228     
     229    /** 
     230     * Filters the Version CSS string 
     231     *  
     232     * @param $browser string Server User Agent Version parsed 
     233     * @return string         CSS Version class 
     234     *  
     235     * @since 2.0 
     236     */ 
     237    public function filter_version($version) 
     238    { 
     239        $v = explode('.', $version); 
     240         
     241        return 'v'. $v[0]; 
     242    } 
     243     
     244    /** 
     245     * Callback function for the body_class filter 
     246     *  
     247     * @param $classes array Body tag classes 
     248     * @return array         Body tag classes + parsed UA classes 
     249     *  
     250     * @since 2.0 
     251     */ 
     252    function add_body_classes($classes) 
     253    { 
     254        $classes[] = self::parse_UA_to_classes( self::parse_UA_string() ); 
     255         
     256        return $classes; 
     257    } 
     258} // class 
     259endif; 
    11260 
    12261/** 
    13  * Add specific CSS classes to body tag by filter 
    14  *  
    15  * @uses awebsome_browsel_filter_UA for parsing UA classes 
    16  * @return array CSS classes for body tag 
    17  *  
    18  * @since 1.0 
     262 * Enable the plugin 
    19263 */ 
    20 function awebsome_browsel_class_names( $classes ) 
    21 { 
    22     $classes[] = awebsome_browsel_filter_UA(); 
    23      
    24     return $classes; 
    25 } 
    26  
    27 /** 
    28  * Parses the User Agent (UA) 
    29  *  
    30  * @param $ua string Server User Agent 
    31  * @return string CSS classes for specific OS/Browser 
    32  *  
    33  * @since 1.0 
    34  */ 
    35 function awebsome_browsel_filter_UA( $ua=null ) 
    36 { 
    37     $ua = ($ua) ? strtolower($ua) : strtolower($_SERVER['HTTP_USER_AGENT']);         
    38     $g  = 'gecko'; 
    39     $w  = 'webkit'; 
    40     $s  = 'safari'; 
    41     $b  = array(); 
    42      
    43     // platforms (SO)            
    44     if( strstr($ua, 'j2me') )           $b[] = 'mobile'; 
    45     elseif( strstr($ua, 'iphone') )     $b[] = 'iphone'; 
    46     elseif( strstr($ua, 'ipod') )       $b[] = 'ipod';       
    47     elseif( strstr($ua, 'mac') )        $b[] = 'mac'; 
    48     elseif( strstr($ua, 'darwin') )     $b[] = 'mac'; 
    49     elseif( strstr($ua, 'webtv') )      $b[] = 'webtv'; 
    50     elseif( strstr($ua, 'win') )        $b[] = 'win'; 
    51     elseif( strstr($ua, 'freebsd') )    $b[] = 'freebsd'; 
    52     elseif( strstr($ua, 'x11') ||  
    53             strstr($ua, 'linux') )      $b[] = 'linux'; 
    54      
    55     // browsers 
    56     if( !preg_match('/opera|webtv/i', $ua)  
    57         && preg_match('/msie\s(\d)/', $ua, $array) )            $b[] = 'ie ie' . $array[1]; 
    58     elseif( strstr($ua, 'firefox/2') )                          $b[] = $g . ' ff2'; 
    59     elseif( strstr($ua, 'firefox/3.5') )                        $b[] = $g . ' ff3 ff3_5'; 
    60     elseif( strstr($ua, 'firefox/3') )                          $b[] = $g . ' ff3'; 
    61     elseif( strstr($ua, 'firefox/3') )                          $b[] = $g . ' ff4'; 
    62     elseif( strstr($ua, 'firefox/3') )                          $b[] = $g . ' ff5'; 
    63     elseif( strstr($ua, 'gecko/') )                             $b[] = $g; 
    64     elseif( preg_match('/opera(\s|\/)(\d+)/', $ua, $array) )    $b[] = 'opera opera' . $array[2]; 
    65     elseif( strstr($ua, 'konqueror') )                          $b[] = 'konqueror'; 
    66     elseif( strstr($ua, 'chrome') )                             $b[] = $w . ' ' . $s . ' chrome'; 
    67     elseif( strstr($ua, 'iron') )                               $b[] = $w . ' ' . $s . ' iron'; 
    68     elseif( strstr($ua, 'applewebkit/') )                       $b[] = (preg_match('/version\/(\d+)/i', $ua, $array)) ?  
    69                                                                         $w . ' ' . $s . ' ' . $s . $array[1] :  
    70                                                                         $w . ' ' . $s; 
    71     elseif( strstr($ua, 'mozilla/') )                           $b[] = $g; 
    72      
    73     return join(' ', $b); 
    74 } 
    75  
    76 /** 
    77  * Starts the plugin on init 
    78  *  
    79  * @since 1.2 
    80  */ 
    81 function awebsome_init_check_cache() 
    82 { 
    83     include_once(ABSPATH .'wp-admin/includes/plugin.php'); 
    84      
    85     $res = false; 
    86     $bp = 'buddypress/buddypress.php'; 
    87     $plugins = array( 
    88         'wp-super-cache/wp-cache.php', 
    89         'w3-total-cache/w3-total-cache.php' 
    90     ); 
    91      
    92     foreach( $plugins as $plugin ) if( is_plugin_active($plugin) ) $res == true; 
    93      
    94     // caching is enabled - add browser classes using AJAX calls 
    95     if( $res ) 
    96     { 
    97         add_action('init', 'enqueue_awebsome_browsel_scripts'); // this does the ajax request 
    98              
    99         // allow both logged in and not logged in users to send this AJAX request 
    100         add_action('wp_ajax_nopriv_awebsome-browsel', 'awebsome_browsel_ajax'); 
    101         add_action('wp_ajax_awebsome-browsel', 'awebsome_browsel_ajax'); 
    102     } 
    103     else // caching is disabled 
    104     { 
    105         add_filter('body_class','awebsome_browsel_class_names'); 
    106         if( is_plugin_active($bp) ) add_filter('bp_get_the_body_class','awebsome_browsel_class_names'); // BuddyPress support! 
    107     } 
    108 } 
    109 add_action('init', 'awebsome_init_check_cache'); 
    110  
    111 /** 
    112  * Wrapper function for the AJAX call 
    113  *  
    114  * @since 1.1 
    115  */ 
    116 function awebsome_browsel_ajax() 
    117 { 
    118     print awebsome_browsel_filter_UA(); 
    119     exit(); 
    120 } 
    121  
    122 /** 
    123  * Inits AJAX scripts 
    124  *  
    125  * @since 1.1 
    126  */ 
    127 function enqueue_awebsome_browsel_scripts() 
    128 { 
    129     $ajaxurl = admin_url('admin-ajax.php'); 
    130     $ajaxurl = array_filter(explode('/', $ajaxurl)); 
    131     array_shift($ajaxurl); 
    132     array_shift($ajaxurl); 
    133     $ajaxurl = '/'. implode('/',$ajaxurl); 
    134      
    135     wp_enqueue_script('awebsome_browsel-ajax', plugin_dir_url(__FILE__) .'js/helper-ajax.js', array('jquery')); 
    136     wp_localize_script('awebsome_browsel-ajax', 'AwebsomeBrowserSelector', array('ajaxurl' => $ajaxurl)); 
    137 } 
    138  
    139 /** 
    140  * Prints scripts 
    141  *  
    142  * @since 1.1 
    143  */ 
    144 function print_awebsome_browsel_scripts() 
    145 { 
    146     wp_print_scripts('awebsome_browsel'); 
    147 } 
    148  
     264new Awebsome_Browser_Selector; 
    149265?> 
  • awebsome-browser-selector/trunk/readme.txt

    r567718 r571800  
    88Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=G442YSKBRKTJ2 
    99 
    10 Empower your CSS selectors!   
    11 Write specific CSS code for each OS/Browser the right way. 
     10Empower your CSS selectors! Write specific CSS code for each Platform/Browser/Version the right way. 
    1211 
    1312== Description == 
    1413 
    15 Modifies the body tag classes adding some OS/Browser codes, so you can add quick and clean CSS patches. 
     14Modifies the body tag classes adding some Platform/Browser/Version codes, so you can add quick and clean CSS patches. 
    1615 
    17 = Based in = 
     16= Inspired by = 
    1817 
    1918* [PHP CSS Browser Selector](http://bastian-allgeier.de/css_browser_selector "PHP CSS Browser Selector") from [Bastian Allgeier](http://bastian-allgeier.de "Bastian Allgeier") 
    2019* [JS CSS Browser Selector](http://rafael.adm.br/css_browser_selector) from [Rafael Lima](http://rafael.adm.br "Rafael Lima") 
    2120 
    22 = Available OS Codes = 
     21Based in the code from [PHP User Agent Parser](http://donatstudios.com/PHP-Parser-HTTP_USER_AGENT "PHP User Agent Parser") from [Jesse Donat](http://donatstudios.com "Jesse Donat") and [fork'd by me](https://github.com/donatj/PhpUserAgent "PHP User Agent Parser fork by Raul Illana"). 
    2322 
    24 * **win** - Microsoft Windows (all versions) 
    25 * **vista** - Microsoft Windows Vista 
    26 * **linux** - x11 and Linux distros 
    27 * **mac** - MacOS 
    28 * **freebsd** - FreeBSD 
    29 * **mobile** - All mobile devices 
    30 * **android** - Google Android 
    31 * **iphone** - iPhone 
    32 * **ipod** - iPod Touch 
    33 * **ipad** - iPad 
    34 * **webtv** - WebTV 
    35 * **j2me** - J2ME Devices (like Opera mini) 
    36 * **blackberry** - Blackberry 
     23= Available Platform Codes = 
     24 
     25*Desktop* 
     26* *win* - Microsoft Windows (all versions) 
     27* *lnx* - x11 and Linux distros 
     28* *mac* - MacOS 
     29 
     30*Mobile* 
     31* *android* - Android 
     32* *iphone* - iPhone 
     33* *ipad* - iPad 
     34* *blackberry* - Blackberry 
     35* *winphone* - Windows Phone OS 
     36* *kindle* - Kindle 
     37* *kindlefire* - Kindle Fire 
    3738 
    3839= Available Browser Codes = 
    3940 
    40 * **ie** - Internet Explorer (All Versions) 
    41 * **ie5** - Internet Explorer 5.x 
    42 * **ie6** - Internet Explorer 6.x 
    43 * **ie7** - Internet Explorer 7.x 
    44 * **ie8** - Internet Explorer 8.x 
    45 * **ie9** - Internet Explorer 9.x 
    46 * **gecko** - Mozilla, Firefox (All Versions), Camino 
    47 * **ff2** - Firefox 2 
    48 * **ff3** - Firefox 3 
    49 * **ff3_5** - Firefox 3.5 
    50 * **ff3_6** - Firefox 3.6 
    51 * **ff4** - Firefox 4 
    52 * **ff5** - Firefox 5 
    53 * **opera** - Opera (All Versions) 
    54 * **opera8** - Opera 8.x 
    55 * **opera9** - Opera 9.x 
    56 * **opera10** - Opera 10.x 
    57 * **webkit** - Safari, NetNewsWire, OmniWeb, Shiira, Google Chrome 
    58 * **safari** - Safari, NetNewsWire, OmniWeb, Shiira, Google Chrome 
    59 * **safari3** - Safari 3.x 
    60 * **chrome** - Google Chrome 
    61 * **konqueror** - Konqueror 
    62 * **iron** - SRWare Iron 
     41* *ie* - Internet Explorer 
     42* *iemobile* - IEMobile 
     43* *gecko* - Mozilla, Firefox 
     44* *camino* - Camino 
     45* *opera* - Opera 
     46* *webkit* - Safari, NetNewsWire, OmniWeb, Shiira, Google Chrome 
     47* *safari* - Safari, NetNewsWire, OmniWeb, Shiira, Google Chrome 
     48* *chrome* - Google Chrome 
     49* *kindle* - Kindle 
     50* *silk* - Silk 
     51* *lynx* - Lynx 
     52* *wget* - Wget 
     53* *curl* - Curl 
    6354 
    6455== Installation == 
     
    7364At the end of your theme CSS file will be fine.  
    7465 
    75 = How can I apply a patch for specific OS/Browser? = 
     66= How can I apply a patch for specific Platform/Browser/version? = 
    7667 
    77 1. Filtering by OS: `.mac` 
     681. Filtering by Platform: `.kindle` 
    78691. Filtering by Browser: `.opera` 
    79 1. Filtering by OS and Browser: `.win.ie7` 
     701. Filtering by Browser and Version: `.ie.v7` 
     711. Filtering by Platform and Browser: `.win.ie` 
     721. Filtering by Platform, Browser and Version: `.win.ie.v8` 
    8073 
    81 `.OS.Browser #element .class { display:block; }` 
     74`.Platform.Browser.Version #id .class { display:block; }` 
    8275 
    8376So, this way you can apply CSS3 patches seamlessly... 
     
    10699= Future Release = 
    107100 
     101* Codes managing UI. 
     102 
     103= 2.0 = 
     104 
    108105* Revamped code using WP API's and OOPHP. 
    109 * Codes managing UI. 
     106* Revamped UA parsing code. 
     107* Revamped docs. 
     108* Removed all the cache messy stuff added on v1.1 (sorry [@jrevillini](http://profiles.wordpress.org/jrevillini/ "@jrevillini")!). 
    110109 
    111110= 1.2.1 = 
Note: See TracChangeset for help on using the changeset viewer.