diff -r 0d9a58d2c515 -r 0d28b7c10758 web/wp-content/themes/thematic/library/extensions/dynamic-classes.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/wp-content/themes/thematic/library/extensions/dynamic-classes.php Fri Mar 12 13:29:04 2010 +0000 @@ -0,0 +1,399 @@ +post->ID; + the_post(); + + // Adds post slug class, prefixed by 'slug-' + $c[] = 'slug-' . $wp_query->post->post_name; + + // Adds 'single' class and class with the post ID + $c[] = 'single postid-' . $postID; + + // Adds classes for the month, day, and hour when the post was published + if ( isset( $wp_query->post->post_date ) ) + thematic_date_classes( mysql2date( 'U', $wp_query->post->post_date ), $c, 's-' ); + + // Adds category classes for each category on single posts + if ( $cats = get_the_category() ) + foreach ( $cats as $cat ) + $c[] = 's-category-' . $cat->slug; + + // Adds tag classes for each tags on single posts + if ( $tags = get_the_tags() ) + foreach ( $tags as $tag ) + $c[] = 's-tag-' . $tag->slug; + + // Adds MIME-specific classes for attachments + if ( is_attachment() ) { + $mime_type = get_post_mime_type(); + $mime_prefix = array( 'application/', 'image/', 'text/', 'audio/', 'video/', 'music/' ); + $c[] = 'attachmentid-' . $postID . ' attachment-' . str_replace( $mime_prefix, "", "$mime_type" ); + } + + // Adds author class for the post author + $c[] = 's-author-' . sanitize_title_with_dashes(strtolower(get_the_author_meta('user_nicename', $post->post_author))); + rewind_posts(); + + // For posts with excerpts + if (has_excerpt()) + $c[] = 's-has-excerpt'; + + // For posts with comments open or closed + if (comments_open()) { + $c[] = 's-comments-open'; + } else { + $c[] = 's-comments-closed'; + } + + // For posts with pings open or closed + if (pings_open()) { + $c[] = 's-pings-open'; + } else { + $c[] = 's-pings-closed'; + } + + // For password-protected posts + if ( $post->post_password ) + $c[] = 's-protected'; + + // For sticky posts + if (is_sticky()) + $c[] = 's-sticky'; + + } + + // Author name classes for BODY on author archives + elseif ( is_author() && apply_filters('thematic_show_bc_authorarchives', TRUE)) { + $author = $wp_query->get_queried_object(); + $c[] = 'author'; + $c[] = 'author-' . $author->user_nicename; + } + + // Category name classes for BODY on category archvies + elseif ( is_category() && apply_filters('thematic_show_bc_categoryarchives', TRUE)) { + $cat = $wp_query->get_queried_object(); + $c[] = 'category'; + $c[] = 'category-' . $cat->slug; + } + + // Tag name classes for BODY on tag archives + elseif ( is_tag() && apply_filters('thematic_show_bc_tagarchives', TRUE)) { + $tags = $wp_query->get_queried_object(); + $c[] = 'tag'; + $c[] = 'tag-' . $tags->slug; + } + + // Page author for BODY on 'pages' + elseif ( is_page() && apply_filters('thematic_show_bc_pages', TRUE)) { + $pageID = $wp_query->post->ID; + $page_children = wp_list_pages("child_of=$pageID&echo=0"); + the_post(); + + // Adds post slug class, prefixed by 'slug-' + $c[] = 'slug-' . $wp_query->post->post_name; + + $c[] = 'page pageid-' . $pageID; + + $c[] = 'page-author-' . sanitize_title_with_dashes(strtolower(get_the_author_meta('user_nicename', $post->post_author))); + + // Checks to see if the page has children and/or is a child page; props to Adam + if ( $page_children ) + $c[] = 'page-parent'; + if ( $wp_query->post->post_parent ) + $c[] = 'page-child parent-pageid-' . $wp_query->post->post_parent; + + // For pages with excerpts + if (has_excerpt()) + $c[] = 'page-has-excerpt'; + + // For pages with comments open or closed + if (comments_open()) { + $c[] = 'page-comments-open'; + } else { + $c[] = 'page-comments-closed'; + } + + // For pages with pings open or closed + if (pings_open()) { + $c[] = 'page-pings-open'; + } else { + $c[] = 'page-pings-closed'; + } + + // For password-protected pages + if ( $post->post_password ) + $c[] = 'page-protected'; + + // Checks to see if the page is using a template + if ( is_page_template() & !is_page_template('default') ) + $c[] = 'page-template page-template-' . str_replace( '.php', '-php', get_post_meta( $pageID, '_wp_page_template', true ) ); + rewind_posts(); + } + + // Search classes for results or no results + elseif ( is_search() && apply_filters('thematic_show_bc_search', TRUE)) { + the_post(); + if ( $wp_query->found_posts > 0 ) { + $c[] = 'search-results'; + } else { + $c[] = 'search-no-results'; + } + rewind_posts(); + } + + if (apply_filters('thematic_show_bc_loggedin', TRUE)) { + // For when a visitor is logged in while browsing + if ( $current_user->ID ) + $c[] = 'loggedin'; + } + + // Paged classes; for 'page X' classes of index, single, etc. + if ( (( ( $page = $wp_query->get('paged') ) || ( $page = $wp_query->get('page') ) ) && $page > 1) && apply_filters('thematic_show_bc_pagex', TRUE)) { + // Thanks to Prentiss Riddle, twitter.com/pzriddle, for the security fix below. + $page = intval($page); // Ensures that an integer (not some dangerous script) is passed for the variable + $c[] = 'paged-' . $page; + if ( is_single() ) { + $c[] = 'single-paged-' . $page; + } elseif ( is_page() ) { + $c[] = 'page-paged-' . $page; + } elseif ( is_category() ) { + $c[] = 'category-paged-' . $page; + } elseif ( is_tag() ) { + $c[] = 'tag-paged-' . $page; + } elseif ( is_date() ) { + $c[] = 'date-paged-' . $page; + } elseif ( is_author() ) { + $c[] = 'author-paged-' . $page; + } elseif ( is_search() ) { + $c[] = 'search-paged-' . $page; + } + } + + if (apply_filters('thematic_show_bc_browser', TRUE)) { + // A little Browser detection shall we? + $browser = $_SERVER[ 'HTTP_USER_AGENT' ]; + + // Mac, PC ...or Linux + if ( preg_match( "/Mac/", $browser ) ){ + $c[] = 'mac'; + + } elseif ( preg_match( "/Windows/", $browser ) ){ + $c[] = 'windows'; + + } elseif ( preg_match( "/Linux/", $browser ) ) { + $c[] = 'linux'; + + } else { + $c[] = 'unknown-os'; + } + + // Checks browsers in this order: Chrome, Safari, Opera, MSIE, FF + if ( preg_match( "/Chrome/", $browser ) ) { + $c[] = 'chrome'; + + preg_match( "/Chrome\/(\d.\d)/si", $browser, $matches); + $ch_version = 'ch' . str_replace( '.', '-', $matches[1] ); + $c[] = $ch_version; + + } elseif ( preg_match( "/Safari/", $browser ) ) { + $c[] = 'safari'; + + preg_match( "/Version\/(\d.\d)/si", $browser, $matches); + $sf_version = 'sf' . str_replace( '.', '-', $matches[1] ); + $c[] = $sf_version; + + } elseif ( preg_match( "/Opera/", $browser ) ) { + $c[] = 'opera'; + + preg_match( "/Opera\/(\d.\d)/si", $browser, $matches); + $op_version = 'op' . str_replace( '.', '-', $matches[1] ); + $c[] = $op_version; + + } elseif ( preg_match( "/MSIE/", $browser ) ) { + $c[] = 'msie'; + + if( preg_match( "/MSIE 6.0/", $browser ) ) { + $c[] = 'ie6'; + } elseif ( preg_match( "/MSIE 7.0/", $browser ) ){ + $c[] = 'ie7'; + } elseif ( preg_match( "/MSIE 8.0/", $browser ) ){ + $c[] = 'ie8'; + } + + } elseif ( preg_match( "/Firefox/", $browser ) && preg_match( "/Gecko/", $browser ) ) { + $c[] = 'firefox'; + + preg_match( "/Firefox\/(\d)/si", $browser, $matches); + $ff_version = 'ff' . str_replace( '.', '-', $matches[1] ); + $c[] = $ff_version; + + } else { + $c[] = 'unknown-browser'; + } + } + + + // Separates classes with a single space, collates classes for BODY + $c = join( ' ', apply_filters( 'body_class', $c ) ); // Available filter: body_class + + // And tada! + return $print ? print($c) : $c; +} + +// Generates semantic classes for each post DIV element +function thematic_post_class( $print = true ) { + global $post, $thematic_post_alt; + + // hentry for hAtom compliace, gets 'alt' for every other post DIV, describes the post type and p[n] + $c = array( 'hentry', "p$thematic_post_alt", $post->post_type, $post->post_status ); + + // Author for the post queried + $c[] = 'author-' . sanitize_title_with_dashes(strtolower(get_the_author('login'))); + + // Category for the post queried + foreach ( (array) get_the_category() as $cat ) + $c[] = 'category-' . $cat->slug; + + // Tags for the post queried; if not tagged, use .untagged + if ( get_the_tags() == null ) { + $c[] = 'untagged'; + } else { + foreach ( (array) get_the_tags() as $tag ) + $c[] = 'tag-' . $tag->slug; + } + + // For posts with excerpts + if (has_excerpt()) + $c[] = 'has-excerpt'; + + // For posts with comments open or closed + if (comments_open()) { + $c[] = 'comments-open'; + } else { + $c[] = 'comments-closed'; + } + + // For posts with pings open or closed + if (pings_open()) { + $c[] = 'pings-open'; + } else { + $c[] = 'pings-closed'; + } + + // For password-protected posts + if ( $post->post_password ) + $c[] = 'protected'; + + // For sticky posts + if (is_sticky()) + $c[] = 'sticky'; + + // Applies the time- and date-based classes (below) to post DIV + thematic_date_classes( mysql2date( 'U', $post->post_date ), $c ); + + // If it's the other to the every, then add 'alt' class + if ( ++$thematic_post_alt % 2 ) + $c[] = 'alt'; + + // Adds post slug class, prefixed by 'slug-' + $c[] = 'slug-' . $post->post_name; + + // Separates classes with a single space, collates classes for post DIV + $c = join( ' ', apply_filters( 'post_class', $c ) ); // Available filter: post_class + + // And tada! + return $print ? print($c) : $c; +} + +// Define the num val for 'alt' classes (in post DIV and comment LI) +$thematic_post_alt = 1; + +// Generates semantic classes for each comment LI element +function thematic_comment_class( $print = true ) { + global $comment, $post, $thematic_comment_alt, $comment_depth, $comment_thread_alt; + + // Collects the comment type (comment, trackback), + $c = array( $comment->comment_type ); + + // Counts trackbacks (t[n]) or comments (c[n]) + if ( $comment->comment_type == 'comment' ) { + $c[] = "c$thematic_comment_alt"; + } else { + $c[] = "t$thematic_comment_alt"; + } + + // If the comment author has an id (registered), then print the log in name + if ( $comment->user_id > 0 ) { + $user = get_userdata($comment->user_id); + // For all registered users, 'byuser'; to specificy the registered user, 'commentauthor+[log in name]' + $c[] = 'byuser comment-author-' . sanitize_title_with_dashes(strtolower( $user->user_login )); + // For comment authors who are the author of the post + if ( $comment->user_id === $post->post_author ) + $c[] = 'bypostauthor'; + } + + // If it's the other to the every, then add 'alt' class; collects time- and date-based classes + thematic_date_classes( mysql2date( 'U', $comment->comment_date ), $c, 'c-' ); + if ( ++$thematic_comment_alt % 2 ) + $c[] = 'alt'; + + // Comment depth + $c[] = "depth-$comment_depth"; + + // Separates classes with a single space, collates classes for comment LI + $c = join( ' ', apply_filters( 'comment_class', $c ) ); // Available filter: comment_class + + // Tada again! + return $print ? print($c) : $c; +} + +// Generates time- and date-based classes for BODY, post DIVs, and comment LIs; relative to GMT (UTC) +function thematic_date_classes( $t, &$c, $p = '' ) { + $t = $t + ( get_option('gmt_offset') * 3600 ); + $c[] = $p . 'y' . gmdate( 'Y', $t ); // Year + $c[] = $p . 'm' . gmdate( 'm', $t ); // Month + $c[] = $p . 'd' . gmdate( 'd', $t ); // Day + $c[] = $p . 'h' . gmdate( 'H', $t ); // Hour +} + +// Remember: Thematic, like The Sandbox, is for play. +?> \ No newline at end of file