From 169168b0fa17a0d9826a4912e0346d0eeaab20f2 Mon Sep 17 00:00:00 2001 From: shammash <shammash@autistici.org> Date: Mon, 10 Oct 2011 21:52:44 +0200 Subject: [PATCH] updated hybrid to 1.0 --- wp-content/themes/hybrid/404.php | 22 +- wp-content/themes/hybrid/archive.php | 30 +- wp-content/themes/hybrid/attachment.php | 53 +- wp-content/themes/hybrid/comment.php | 6 +- wp-content/themes/hybrid/comments.php | 36 +- wp-content/themes/hybrid/css/2c-l-fixed.css | 1 + .../themes/hybrid/css/2c-l-fixed.dev.css | 62 ++ wp-content/themes/hybrid/css/2c-r-fixed.css | 1 + .../themes/hybrid/css/2c-r-fixed.dev.css | 60 ++ wp-content/themes/hybrid/css/3c-c-fixed.css | 1 + .../themes/hybrid/css/3c-c-fixed.dev.css | 84 ++ wp-content/themes/hybrid/css/3c-l-fixed.css | 1 + .../themes/hybrid/css/3c-l-fixed.dev.css | 61 ++ wp-content/themes/hybrid/css/3c-r-fixed.css | 1 + .../themes/hybrid/css/3c-r-fixed.dev.css | 62 ++ .../themes/hybrid/css/holy-grail-fluid.css | 5 + wp-content/themes/hybrid/css/plugins.css | 5 + wp-content/themes/hybrid/css/print.css | 5 + wp-content/themes/hybrid/css/screen.css | 1 + wp-content/themes/hybrid/docs/license.txt | 339 +++++++ wp-content/themes/hybrid/docs/readme.html | 101 ++ wp-content/themes/hybrid/footer.php | 12 +- wp-content/themes/hybrid/functions.php | 403 +++++++- wp-content/themes/hybrid/header.php | 27 +- wp-content/themes/hybrid/index.php | 50 +- .../themes/hybrid/languages/hybrid-en_EN.mo | Bin 554 -> 580 bytes .../themes/hybrid/languages/hybrid-en_EN.po | 923 ++++++++---------- wp-content/themes/hybrid/languages/hybrid.pot | 923 ++++++++---------- .../themes/hybrid/library/admin/admin.php | 90 +- .../library/admin/meta-box-post-seo.php | 114 +++ .../library/admin/meta-box-post-template.php | 117 +++ .../library/admin/meta-box-theme-about.php | 95 ++ .../library/admin/meta-box-theme-footer.php | 68 ++ .../hybrid/library/admin/theme-settings.php | 290 ++++++ .../library/classes/widget-archives.php | 138 ++- .../hybrid/library/classes/widget-authors.php | 179 ++-- .../library/classes/widget-bookmarks.php | 187 ++-- .../library/classes/widget-calendar.php | 77 +- .../library/classes/widget-categories.php | 175 ++-- .../library/classes/widget-nav-menu.php | 138 ++- .../hybrid/library/classes/widget-pages.php | 175 ++-- .../hybrid/library/classes/widget-search.php | 98 +- .../hybrid/library/classes/widget-tags.php | 148 ++- wp-content/themes/hybrid/library/css/18px.css | 2 +- .../themes/hybrid/library/css/18px.dev.css | 308 ++++++ wp-content/themes/hybrid/library/css/20px.css | 2 +- .../themes/hybrid/library/css/20px.dev.css | 308 ++++++ wp-content/themes/hybrid/library/css/21px.css | 2 +- .../themes/hybrid/library/css/21px.dev.css | 308 ++++++ wp-content/themes/hybrid/library/css/22px.css | 2 +- .../themes/hybrid/library/css/22px.dev.css | 308 ++++++ wp-content/themes/hybrid/library/css/24px.css | 2 +- .../themes/hybrid/library/css/24px.dev.css | 308 ++++++ wp-content/themes/hybrid/library/css/25px.css | 2 +- .../themes/hybrid/library/css/25px.dev.css | 308 ++++++ .../themes/hybrid/library/css/2c-l-fixed.css | 64 +- .../themes/hybrid/library/css/2c-r-fixed.css | 62 +- .../themes/hybrid/library/css/3c-c-fixed.css | 79 +- .../themes/hybrid/library/css/3c-l-fixed.css | 64 +- .../themes/hybrid/library/css/3c-r-fixed.css | 64 +- .../themes/hybrid/library/css/admin.css | 58 +- .../themes/hybrid/library/css/admin.dev.css | 76 ++ .../themes/hybrid/library/css/drop-downs.css | 62 +- .../hybrid/library/css/drop-downs.dev.css | 55 ++ .../themes/hybrid/library/css/gallery.css | 1 + .../themes/hybrid/library/css/gallery.dev.css | 68 ++ .../hybrid/library/css/holy-grail-fluid.css | 4 + .../themes/hybrid/library/css/plugins.css | 4 + .../themes/hybrid/library/css/reset.css | 2 +- .../themes/hybrid/library/css/reset.dev.css | 27 + .../themes/hybrid/library/css/screen.css | 610 +----------- .../themes/hybrid/library/css/ui-tabs.css | 20 + .../library/extensions/breadcrumb-trail.php | 416 ++++++-- .../library/extensions/cleaner-caption.php | 87 ++ .../library/extensions/cleaner-gallery.php | 165 ++++ .../extensions/custom-field-series.php | 158 ++- .../hybrid/library/extensions/entry-views.php | 181 ++++ .../library/extensions/get-the-image.php | 391 +++++--- .../library/extensions/loop-pagination.php | 104 ++ .../library/extensions/post-stylesheets.php | 164 ++++ .../library/extensions/theme-layouts.php | 399 ++++++++ .../hybrid/library/functions/comments.php | 150 +-- .../hybrid/library/functions/context.php | 246 +++-- .../hybrid/library/functions/core-seo.php | 231 +++++ .../themes/hybrid/library/functions/core.php | 196 +++- .../hybrid/library/functions/deprecated.php | 550 +++++++++++ .../themes/hybrid/library/functions/media.php | 155 ++- .../themes/hybrid/library/functions/menus.php | 56 +- .../hybrid/library/functions/settings.php | 81 ++ .../hybrid/library/functions/shortcodes.php | 148 +-- .../hybrid/library/functions/sidebars.php | 109 +++ .../library/functions/template-hierarchy.php | 198 ++++ .../hybrid/library/functions/utility.php | 184 ++++ .../hybrid/library/functions/widgets.php | 222 ++--- wp-content/themes/hybrid/library/hybrid.php | 305 ++++++ .../hybrid/library/js/drop-downs.dev.js | 236 +++++ .../themes/hybrid/library/js/drop-downs.js | 78 +- wp-content/themes/hybrid/library/license.txt | 339 +++++++ wp-content/themes/hybrid/loop-error.php | 21 + wp-content/themes/hybrid/loop-meta.php | 130 +++ wp-content/themes/hybrid/loop-nav.php | 37 + wp-content/themes/hybrid/menu-primary.php | 10 +- wp-content/themes/hybrid/page-archives.php | 42 +- wp-content/themes/hybrid/page-authors.php | 29 +- wp-content/themes/hybrid/page-biography.php | 39 +- wp-content/themes/hybrid/page-blog.php | 25 +- wp-content/themes/hybrid/page-bookmarks.php | 25 +- wp-content/themes/hybrid/page-categories.php | 27 +- wp-content/themes/hybrid/page-daily.php | 23 +- wp-content/themes/hybrid/page-logged-in.php | 35 +- wp-content/themes/hybrid/page-monthly.php | 25 +- wp-content/themes/hybrid/page-no-widgets.php | 25 +- .../themes/hybrid/page-post_tag-cloud.php | 29 +- wp-content/themes/hybrid/page-sitemap.php | 59 +- wp-content/themes/hybrid/page-weekly.php | 23 +- wp-content/themes/hybrid/page-widgets.php | 23 +- wp-content/themes/hybrid/page-yearly.php | 23 +- wp-content/themes/hybrid/post-no-widgets.php | 22 +- wp-content/themes/hybrid/screenshot.png | Bin 20764 -> 13244 bytes wp-content/themes/hybrid/search.php | 30 +- wp-content/themes/hybrid/searchform.php | 8 +- .../themes/hybrid/sidebar-after-content.php | 6 +- .../themes/hybrid/sidebar-after-singular.php | 6 +- .../themes/hybrid/sidebar-before-content.php | 6 +- wp-content/themes/hybrid/sidebar-primary.php | 6 +- .../themes/hybrid/sidebar-secondary.php | 6 +- .../themes/hybrid/sidebar-subsidiary.php | 6 +- wp-content/themes/hybrid/singular.php | 22 +- wp-content/themes/hybrid/style.css | 41 +- wp-content/themes/hybrid/style.dev.css | 561 +++++++++++ .../themes/hybrid/taxonomy-link_category.php | 26 +- 131 files changed, 11656 insertions(+), 3833 deletions(-) create mode 100644 wp-content/themes/hybrid/css/2c-l-fixed.css create mode 100644 wp-content/themes/hybrid/css/2c-l-fixed.dev.css create mode 100644 wp-content/themes/hybrid/css/2c-r-fixed.css create mode 100644 wp-content/themes/hybrid/css/2c-r-fixed.dev.css create mode 100644 wp-content/themes/hybrid/css/3c-c-fixed.css create mode 100644 wp-content/themes/hybrid/css/3c-c-fixed.dev.css create mode 100644 wp-content/themes/hybrid/css/3c-l-fixed.css create mode 100644 wp-content/themes/hybrid/css/3c-l-fixed.dev.css create mode 100644 wp-content/themes/hybrid/css/3c-r-fixed.css create mode 100644 wp-content/themes/hybrid/css/3c-r-fixed.dev.css create mode 100644 wp-content/themes/hybrid/css/holy-grail-fluid.css create mode 100644 wp-content/themes/hybrid/css/plugins.css create mode 100644 wp-content/themes/hybrid/css/print.css create mode 100644 wp-content/themes/hybrid/css/screen.css create mode 100644 wp-content/themes/hybrid/docs/license.txt create mode 100644 wp-content/themes/hybrid/docs/readme.html create mode 100644 wp-content/themes/hybrid/library/admin/meta-box-post-seo.php create mode 100644 wp-content/themes/hybrid/library/admin/meta-box-post-template.php create mode 100644 wp-content/themes/hybrid/library/admin/meta-box-theme-about.php create mode 100644 wp-content/themes/hybrid/library/admin/meta-box-theme-footer.php create mode 100644 wp-content/themes/hybrid/library/admin/theme-settings.php create mode 100644 wp-content/themes/hybrid/library/css/18px.dev.css create mode 100644 wp-content/themes/hybrid/library/css/20px.dev.css create mode 100644 wp-content/themes/hybrid/library/css/21px.dev.css create mode 100644 wp-content/themes/hybrid/library/css/22px.dev.css create mode 100644 wp-content/themes/hybrid/library/css/24px.dev.css create mode 100644 wp-content/themes/hybrid/library/css/25px.dev.css create mode 100644 wp-content/themes/hybrid/library/css/admin.dev.css create mode 100644 wp-content/themes/hybrid/library/css/drop-downs.dev.css create mode 100644 wp-content/themes/hybrid/library/css/gallery.css create mode 100644 wp-content/themes/hybrid/library/css/gallery.dev.css create mode 100644 wp-content/themes/hybrid/library/css/reset.dev.css create mode 100644 wp-content/themes/hybrid/library/css/ui-tabs.css create mode 100644 wp-content/themes/hybrid/library/extensions/cleaner-caption.php create mode 100644 wp-content/themes/hybrid/library/extensions/cleaner-gallery.php create mode 100644 wp-content/themes/hybrid/library/extensions/entry-views.php create mode 100644 wp-content/themes/hybrid/library/extensions/loop-pagination.php create mode 100644 wp-content/themes/hybrid/library/extensions/post-stylesheets.php create mode 100644 wp-content/themes/hybrid/library/extensions/theme-layouts.php create mode 100644 wp-content/themes/hybrid/library/functions/core-seo.php create mode 100644 wp-content/themes/hybrid/library/functions/deprecated.php create mode 100644 wp-content/themes/hybrid/library/functions/settings.php create mode 100644 wp-content/themes/hybrid/library/functions/sidebars.php create mode 100644 wp-content/themes/hybrid/library/functions/template-hierarchy.php create mode 100644 wp-content/themes/hybrid/library/functions/utility.php create mode 100644 wp-content/themes/hybrid/library/hybrid.php create mode 100644 wp-content/themes/hybrid/library/js/drop-downs.dev.js create mode 100644 wp-content/themes/hybrid/library/license.txt create mode 100644 wp-content/themes/hybrid/loop-error.php create mode 100644 wp-content/themes/hybrid/loop-meta.php create mode 100644 wp-content/themes/hybrid/loop-nav.php create mode 100644 wp-content/themes/hybrid/style.dev.css diff --git a/wp-content/themes/hybrid/404.php b/wp-content/themes/hybrid/404.php index a550b3e67..c6f1139c9 100644 --- a/wp-content/themes/hybrid/404.php +++ b/wp-content/themes/hybrid/404.php @@ -7,40 +7,38 @@ * is active, its widgets will be displayed instead. This allows users to customize their error * pages in any way they want. * - * For more information on how WordPress handles 404 errors: - * @link http://codex.wordpress.org/Creating_an_Error_404_Page - * * @package Hybrid * @subpackage Template + * @link http://codex.wordpress.org/Creating_an_Error_404_Page */ @header( 'HTTP/1.1 404 Not found', true, 404 ); -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> - <?php if ( is_active_sidebar( 'utility-404' ) ) : ?> + <?php if ( is_active_sidebar( 'error-404-template' ) ) : ?> <div id="utility-404" class="sidebar utility"> - <?php dynamic_sidebar( 'utility-404' ); ?> + <?php dynamic_sidebar( 'error-404-template' ); ?> </div><!-- #utility-404 .utility --> <?php else: ?> <div id="post-0" class="<?php hybrid_entry_class(); ?>"> - <h1 class="error-404-title entry-title"><?php _e( 'Not Found', 'hybrid' ); ?></h1> + <h1 class="error-404-title entry-title"><?php _e( 'Not Found', hybrid_get_textdomain() ); ?></h1> <div class="entry-content"> <p> - <?php printf( __( 'You tried going to %1$s, and it doesn\'t exist. All is not lost! You can search for what you\'re looking for.', 'hybrid' ), '<code>' . site_url( esc_url( $_SERVER['REQUEST_URI'] ) ) . '</code>' ); ?> + <?php printf( __( 'You tried going to %1$s, and it doesn\'t exist. All is not lost! You can search for what you\'re looking for.', hybrid_get_textdomain() ), '<code>' . home_url( esc_url( $_SERVER['REQUEST_URI'] ) ) . '</code>' ); ?> </p> - <?php get_search_form(); ?> + <?php get_search_form(); // Loads the searchform.php template. ?> </div><!-- .entry-content --> @@ -48,8 +46,8 @@ get_header(); ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/archive.php b/wp-content/themes/hybrid/archive.php index a2a50feff..3163f27d3 100644 --- a/wp-content/themes/hybrid/archive.php +++ b/wp-content/themes/hybrid/archive.php @@ -10,37 +10,27 @@ * @subpackage Template */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> - <div class="archive-info"> - - <h1 class="archive-title"><?php _e( 'Archives', 'hybrid' ); ?></h1> - - <div class="archive-description"> - <p> - <?php _e( 'You are browsing the site archives.', 'hybrid' ); ?> - </p> - </div><!-- .archive-description --> - - </div><!-- .archive-info --> + <?php get_template_part( 'loop-meta' ); // Loads the loop-meta.php template. ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php get_the_image( array( 'custom_key' => array( 'Thumbnail' ), 'size' => 'thumbnail' ) ); ?> + <?php get_the_image( array( 'meta_key' => 'Thumbnail', 'size' => 'thumbnail' ) ); ?> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-summary"> <?php the_excerpt(); ?> </div><!-- .entry-summary --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> @@ -48,14 +38,12 @@ get_header(); ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/attachment.php b/wp-content/themes/hybrid/attachment.php index 9a8f6f2a4..b14a3d6ca 100644 --- a/wp-content/themes/hybrid/attachment.php +++ b/wp-content/themes/hybrid/attachment.php @@ -5,59 +5,74 @@ * The attachment template is a general template that displays attachments if no other * attachment-type template is found. Also see application.php, audio.php, image.php, * text.php, and video.php. - * @link http://themehybrid.com/themes/hybrid/attachments - * @link http://codex.wordpress.org/Using_Image_and_File_Attachments * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/attachments + * @link http://codex.wordpress.org/Using_Image_and_File_Attachments */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> - <?php hybrid_attachment(); ?> + <?php if ( wp_attachment_is_image( get_the_ID() ) ) : ?> + + <p class="attachment-image"> + <?php echo wp_get_attachment_image( get_the_ID(), 'full', false, array( 'class' => 'aligncenter' ) ); ?> + </p><!-- .attachment-image --> - <?php the_content( sprintf( __( 'Continue reading %1$s', 'hybrid' ), the_title( ' "', '"', false ) ) ); ?> + <?php else : ?> - <p class="download"> - <a href="<?php echo wp_get_attachment_url(); ?>" title="<?php the_title_attribute(); ?>" rel="enclosure" type="<?php echo get_post_mime_type(); ?>"><?php printf( __( 'Download "%1$s"', 'hybrid' ), the_title( '<span class="fn">', '</span>', false) ); ?></a> - </p><!-- .download --> + <?php hybrid_attachment(); // Function for handling non-image attachments. ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <p class="download"> + <a href="<?php echo wp_get_attachment_url(); ?>" title="<?php the_title_attribute(); ?>" rel="enclosure" type="<?php echo get_post_mime_type(); ?>"><?php printf( __( 'Download "%1$s"', hybrid_get_textdomain() ), the_title( '<span class="fn">', '</span>', false) ); ?></a> + </p><!-- .download --> + + <?php endif; ?> + + <?php the_content( sprintf( __( 'Continue reading %1$s', hybrid_get_textdomain() ), the_title( ' "', '"', false ) ) ); ?> + + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php if ( wp_attachment_is_image( get_the_ID() ) ) : ?> + <p class="navigation-attachment"> + <span class="alignleft"><?php previous_image_link(); ?></span> + <span class="alignright"><?php next_image_link(); ?></span> + </p><!-- .navigation-attachment --> + <?php endif; ?> + + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/comment.php b/wp-content/themes/hybrid/comment.php index 931a887bc..f1b5a4b26 100644 --- a/wp-content/themes/hybrid/comment.php +++ b/wp-content/themes/hybrid/comment.php @@ -15,16 +15,16 @@ <li id="comment-<?php comment_ID(); ?>" class="<?php hybrid_comment_class(); ?>"> - <?php hybrid_before_comment(); // Before comment hook ?> + <?php do_atomic( 'before_comment' ); // hybrid_before_comment ?> <div class="comment-text"> <?php if ( '0' == $comment->comment_approved ) : ?> - <p class="alert moderation"><?php _e( 'Your comment is awaiting moderation.', 'hybrid' ); ?></p> + <p class="alert moderation"><?php _e( 'Your comment is awaiting moderation.', hybrid_get_textdomain() ); ?></p> <?php endif; ?> <?php comment_text( $comment->comment_ID ); ?> </div><!-- .comment-text --> - <?php hybrid_after_comment(); // After comment hook ?> + <?php do_atomic( 'after_comment' ); // hybrid_after_comment ?> <?php /* No closing </li> is needed. WordPress will know where to add it. */ ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/comments.php b/wp-content/themes/hybrid/comments.php index f95a177df..8b93d82c8 100644 --- a/wp-content/themes/hybrid/comments.php +++ b/wp-content/themes/hybrid/comments.php @@ -8,21 +8,15 @@ * @package Hybrid * @subpackage Template */ - if ( 'comments.php' == basename( $_SERVER['SCRIPT_FILENAME'] ) ) - die( __( 'Please do not load this page directly. Thanks!', 'hybrid' ) ); - if ( !post_type_supports( get_post_type(), 'comments' ) || ( !have_comments() && !comments_open() && !pings_open() ) ) - return; +/* Kill the page if trying to access this template directly. */ +if ( 'comments.php' == basename( $_SERVER['SCRIPT_FILENAME'] ) ) + die( __( 'Please do not load this page directly. Thanks!', hybrid_get_textdomain() ) ); - if ( post_password_required() ) : ?> - - <h3 class="comments-header"><?php _e( 'Password Protected', 'hybrid' ); ?></h3> - - <p class="alert password-protected"> - <?php _e( 'Enter the password to view comments.', 'hybrid' ); ?> - </p><!-- .alert .password-protected --> - - <?php endif; ?> +/* If a post password is required or no comments are given and comments/pings are closed, return. */ +if ( post_password_required() || ( !have_comments() && !comments_open() && !pings_open() ) ) + return; +?> <div id="comments-template"> @@ -30,18 +24,18 @@ <div id="comments"> - <h3 id="comments-number" class="comments-header"><?php comments_number( sprintf( __( 'No responses to %1$s', 'hybrid' ), the_title( '“', '”', false ) ), sprintf( __( 'One response to %1$s', 'hybrid' ), the_title( '“', '”', false ) ), sprintf( __( '%1$s responses to %2$s', 'hybrid' ), '%', the_title( '“', '”', false ) ) ); ?></h3> + <h3 id="comments-number" class="comments-header"><?php comments_number( sprintf( __( 'No responses to %1$s', hybrid_get_textdomain() ), the_title( '“', '”', false ) ), sprintf( __( 'One response to %1$s', hybrid_get_textdomain() ), the_title( '“', '”', false ) ), sprintf( __( '%1$s responses to %2$s', hybrid_get_textdomain() ), '%', the_title( '“', '”', false ) ) ); ?></h3> - <?php hybrid_before_comment_list(); // Before comment list hook ?> + <?php do_atomic( 'before_comment_list' ); // Before comment list hook ?> <ol class="comment-list"> <?php wp_list_comments( hybrid_list_comments_args() ); ?> </ol><!-- .comment-list --> - <?php hybrid_after_comment_list(); // After comment list hook ?> + <?php do_atomic( 'after_comment_list' ); // After comment list hook ?> <?php if ( get_option( 'page_comments' ) ) : ?> - <div class="comment-navigation paged-navigation"> + <div class="comment-navigation comment-pagination paged-navigation"> <?php paginate_comments_links(); ?> </div><!-- .comment-navigation --> <?php endif; ?> @@ -53,15 +47,9 @@ <?php if ( pings_open() && !comments_open() ) : ?> <p class="comments-closed pings-open"> - <?php printf( __( 'Comments are closed, but <a href="%1$s" title="Trackback URL for this post">trackbacks</a> and pingbacks are open.', 'hybrid' ), trackback_url( '0' ) ); ?> + <?php printf( __( 'Comments are closed, but <a href="%1$s" title="Trackback URL for this post">trackbacks</a> and pingbacks are open.', hybrid_get_textdomain() ), trackback_url( '0' ) ); ?> </p><!-- .comments-closed .pings-open --> - <?php elseif ( !comments_open() ) : ?> - - <p class="comments-closed"> - <?php _e( 'Comments are closed.', 'hybrid' ); ?> - </p><!-- .comments-closed --> - <?php endif; ?> <?php endif; ?> diff --git a/wp-content/themes/hybrid/css/2c-l-fixed.css b/wp-content/themes/hybrid/css/2c-l-fixed.css new file mode 100644 index 000000000..a71fa92cc --- /dev/null +++ b/wp-content/themes/hybrid/css/2c-l-fixed.css @@ -0,0 +1 @@ +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:left;width:620px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{position:relative;float:right;width:300px}#secondary{position:relative;clear:right;float:right;width:300px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both;overflow:hidden} \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/2c-l-fixed.dev.css b/wp-content/themes/hybrid/css/2c-l-fixed.dev.css new file mode 100644 index 000000000..f9dfd871e --- /dev/null +++ b/wp-content/themes/hybrid/css/2c-l-fixed.dev.css @@ -0,0 +1,62 @@ +/** + * Two columns with content floated left. + * + * @since 0.6 + * @package Hybrid + * @subpackage CSS + */ + +#body-container { + overflow: hidden; + width: 960px; + margin: 0 auto; + } + +#container { + overflow: hidden; + float: left; + width: 960px; + } + +.content { + overflow: hidden; + float: left; + width: 620px; + } +.no-widgets .content, .no-default-widgets .content { + width: 960px; + } + +#primary { + position: relative; + float: right; + width: 300px; + } + +#secondary { + position: relative; + clear: right; + float: right; + width: 300px; + } + +#subsidiary { + overflow: hidden; + } + +#subsidiary .widget { + overflow: hidden; + float: left; + width: 300px; + margin: 0 20px 0 0; + } + +#footer-container { + clear: both; + overflow: hidden; + } + +#footer { + clear: both; + overflow: hidden; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/2c-r-fixed.css b/wp-content/themes/hybrid/css/2c-r-fixed.css new file mode 100644 index 000000000..e4c6e30a0 --- /dev/null +++ b/wp-content/themes/hybrid/css/2c-r-fixed.css @@ -0,0 +1 @@ +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:right;width:620px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{float:left;width:300px}#secondary{clear:left;float:left;width:300px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both;overflow:hidden} \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/2c-r-fixed.dev.css b/wp-content/themes/hybrid/css/2c-r-fixed.dev.css new file mode 100644 index 000000000..18a04ff1c --- /dev/null +++ b/wp-content/themes/hybrid/css/2c-r-fixed.dev.css @@ -0,0 +1,60 @@ +/** + * Two columns with content floated right. + * + * @since 0.6 + * @package Hybrid + * @subpackage CSS + */ + +#body-container { + overflow: hidden; + width: 960px; + margin: 0 auto; + } + +#container { + overflow: hidden; + float: left; + width: 960px; + } + +.content { + overflow: hidden; + float: right; + width: 620px; + } +.no-widgets .content, .no-default-widgets .content { + width: 960px; + } + +#primary { + float: left; + width: 300px; + } + +#secondary { + clear: left; + float: left; + width: 300px; + } + +#subsidiary { + overflow: hidden; + } + +#subsidiary .widget { + overflow: hidden; + float: left; + width: 300px; + margin: 0 20px 0 0; + } + +#footer-container { + clear: both; + overflow: hidden; + } + +#footer { + clear: both; + overflow: hidden; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/3c-c-fixed.css b/wp-content/themes/hybrid/css/3c-c-fixed.css new file mode 100644 index 000000000..5d6550d26 --- /dev/null +++ b/wp-content/themes/hybrid/css/3c-c-fixed.css @@ -0,0 +1 @@ +body{min-width:600px}#body-container{overflow:hidden;width:960px;margin:0 auto}#primary-menu{position:relative;z-index:100}#container{position:relative;clear:both;overflow:hidden;padding-left:240px; padding-right:240px; z-index:1}.no-widgets #container,.no-default-widgets #container{width:960px;padding-left:0;padding-right:0}.content,#primary,#secondary{position:relative;float:left;z-index:1}.content{width:100%}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{width:220px; right:240px; margin-left:-100%}#secondary{width:220px; margin-right:-240px; margin-left:20px}* html #secondary{left:240px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both} \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/3c-c-fixed.dev.css b/wp-content/themes/hybrid/css/3c-c-fixed.dev.css new file mode 100644 index 000000000..3dc274870 --- /dev/null +++ b/wp-content/themes/hybrid/css/3c-c-fixed.dev.css @@ -0,0 +1,84 @@ +/** + * Holy Grail Stylesheet. + * Creates the Holy Grail (fixed width) of three-column layouts. + * Primary / Content / Secondary + * + * @link http://www.alistapart.com/articles/holygrail + * @author Matthew Levine + * + * @since 0.6 + * @package Hybrid + * @subpackage CSS + */ + +body { + min-width: 600px; /* 2x LC width + RC width */ + } +#body-container { + overflow: hidden; + width: 960px; + margin: 0 auto; + } +#primary-menu { + position: relative; + z-index: 100; + } +#container { + position: relative; + clear: both; + overflow: hidden; + padding-left: 240px; /* LC width */ + padding-right: 240px; /* RC width */ + z-index: 1; + } +.no-widgets #container, .no-default-widgets #container { + width: 960px; + padding-left: 0; + padding-right: 0; + } +.content, #primary, #secondary { + position: relative; + float: left; + z-index: 1; + } +.content { + width: 100%; + } +.no-widgets .content, .no-default-widgets .content { + width: 960px; + } +#primary { + width: 220px; /* LC width */ + right: 240px; /* LC width */ + margin-left: -100%; + } +#secondary { + width: 220px; /* RC width */ + margin-right: -240px; /* RC width */ + margin-left: 20px; + } + +/*** IE6 Fix ***/ +* html #secondary { + left: 240px; /* RC width */ + } + +#subsidiary { + overflow: hidden; + } + +#subsidiary .widget { + overflow: hidden; + float: left; + width: 300px; + margin: 0 20px 0 0; + } + +#footer-container { + clear: both; + overflow: hidden; + } + +#footer { + clear: both; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/3c-l-fixed.css b/wp-content/themes/hybrid/css/3c-l-fixed.css new file mode 100644 index 000000000..8c2604419 --- /dev/null +++ b/wp-content/themes/hybrid/css/3c-l-fixed.css @@ -0,0 +1 @@ +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:left;width:520px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{overflow:hidden;float:right;width:190px}#secondary{overflow:hidden;float:right;width:190px;margin-right:20px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both} \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/3c-l-fixed.dev.css b/wp-content/themes/hybrid/css/3c-l-fixed.dev.css new file mode 100644 index 000000000..955dd8459 --- /dev/null +++ b/wp-content/themes/hybrid/css/3c-l-fixed.dev.css @@ -0,0 +1,61 @@ +/** + * Three columns with content floated left. + * + * @since 0.6 + * @package Hybrid + * @subpackage CSS + */ + +#body-container { + overflow: hidden; + width: 960px; + margin: 0 auto; + } + +#container { + overflow: hidden; + float: left; + width: 960px; + } + +.content { + overflow: hidden; + float: left; + width: 520px; + } +.no-widgets .content, .no-default-widgets .content { + width: 960px; + } + +#primary { + overflow: hidden; + float: right; + width: 190px; + } + +#secondary { + overflow: hidden; + float: right; + width: 190px; + margin-right: 20px; + } + +#subsidiary { + overflow: hidden; + } + +#subsidiary .widget { + overflow: hidden; + float: left; + width: 300px; + margin: 0 20px 0 0; + } + +#footer-container { + clear: both; + overflow: hidden; + } + +#footer { + clear: both; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/3c-r-fixed.css b/wp-content/themes/hybrid/css/3c-r-fixed.css new file mode 100644 index 000000000..b24ad193b --- /dev/null +++ b/wp-content/themes/hybrid/css/3c-r-fixed.css @@ -0,0 +1 @@ +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:right;width:520px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{overflow:hidden;float:left;width:190px}#secondary{overflow:hidden;float:left;width:190px;margin-left:20px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both} \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/3c-r-fixed.dev.css b/wp-content/themes/hybrid/css/3c-r-fixed.dev.css new file mode 100644 index 000000000..3dfbb6392 --- /dev/null +++ b/wp-content/themes/hybrid/css/3c-r-fixed.dev.css @@ -0,0 +1,62 @@ +/** + * Three columns with content floated left. + * + * @since 0.6 + * @package Hybrid + * @subpackage CSS + */ + +#body-container { + overflow: hidden; + width: 960px; + margin: 0 auto; + } + +#container { + overflow: hidden; + float: left; + width: 960px; + } + +.content { + overflow: hidden; + float: right; + width: 520px; + } + +.no-widgets .content, .no-default-widgets .content { + width: 960px; + } + +#primary { + overflow: hidden; + float: left; + width: 190px; + } + +#secondary { + overflow: hidden; + float: left; + width: 190px; + margin-left: 20px; + } + +#subsidiary { + overflow: hidden; + } + +#subsidiary .widget { + overflow: hidden; + float: left; + width: 300px; + margin: 0 20px 0 0; + } + +#footer-container { + clear: both; + overflow: hidden; + } + +#footer { + clear: both; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/holy-grail-fluid.css b/wp-content/themes/hybrid/css/holy-grail-fluid.css new file mode 100644 index 000000000..f6f4a47dd --- /dev/null +++ b/wp-content/themes/hybrid/css/holy-grail-fluid.css @@ -0,0 +1,5 @@ +/** + * @deprecated 0.9.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. +*/ +body{min-width:600px}#container{overflow:hidden;padding-left:200px; padding-right:200px}.content,#primary,#secondary{position:relative;float:left;padding-bottom:20010px; margin-bottom:-20000px}.content{width:100%}#primary{width:200px; right:200px; margin-left:-100%}#secondary{width:200px; margin-right:-200px}#footer{clear:both}* html #secondary{left:200px} \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/plugins.css b/wp-content/themes/hybrid/css/plugins.css new file mode 100644 index 000000000..a00030342 --- /dev/null +++ b/wp-content/themes/hybrid/css/plugins.css @@ -0,0 +1,5 @@ +/** + * @deprecated 0.9.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. +*/ +.wp-pagenavi .pages{margin:2px 3px 2px 0;font-style:italic}.wp-pagenavi .current{margin:2px;padding:1px 6px;font-weight:bold}.wp-pagenavi .extend{margin:2px}.wp-pagenavi a{margin:0 2px;padding:1px 6px;font-style:italic;border:1px solid #ccc}.WP-EmailIcon{padding:0;margin:0;border:none}.comment_license{font-style:italic}img#wpstats{overflow:hidden !important;width:0 !important;height:0 !important;padding:0 !important;margin:0 !important}.contact-form{margin-bottom:21px}.contact-form legend{display:none}.contact-form .form-input input{display:block;margin-bottom:6px;padding:3px 6px;width:300px}.contact-form label{font-size:.9em}.contact-form textarea{width:97%;margin-bottom:6px;padding:6px}.contact-form .form-option{margin-bottom:6px}.contact-form .button{width:100px;margin-right:9px;padding:6px 9px}.contact-form .button:hover{cursor:pointer} \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/print.css b/wp-content/themes/hybrid/css/print.css new file mode 100644 index 000000000..326b7ff80 --- /dev/null +++ b/wp-content/themes/hybrid/css/print.css @@ -0,0 +1,5 @@ +/** + * @deprecated 0.9.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. +*/ +@import url('18px.css');body{font:11pt Cambria,Georgia,Times,'Times New Roman',serif}#body-container{margin:0 auto;padding:0}a,a:visited {color:#3C738C;text-decoration:none}h1,h2,h3,h4,h5,h6{font-family:Georgia,Times,"Times New Roman",serif;color:#444}.post ul{margin-left:27px}blockquote{overflow:hidden;font-style:italic;color:#444;margin:0 0 18px 0;padding:18px 18px 0 18px;border:1px solid #999;background:#ddd}blockquote em{font-style:normal}blockquote.pullquote{width:210px;margin-top:6px;margin-bottom:3px;padding:6px 9px;font-size:18px;text-align:center;color:#333;background:transparent;border-top:3px double #ccc;border-bottom:3px double #ccc}.pullquote p{margin:0}code{padding:0 3px;background:#eee}pre{overflow:auto;padding:9px;background:#eee;border:1px solid #ddd}pre code{padding:0;background:transparent}table{width:100%;background:#5F97B1;border:1px solid #eee}caption{font-size:.8em;font-style:italic;text-align:right;color:#666}td{padding:.3em;border:1px solid #35667c}tr{color:#fff;background:#3e7690}tr.alt,tr.even{background:#437f9b}th{padding:.3em;color:#fff;background:#274958;border:1px solid #35667c}td a,th a{font-weight:bold;color:#eee}.drop-cap{float:left;line-height:33px;margin-right:3px;font-size:42px;font-family:"Warnock Pro","Goudy Old Style",Palatino,"Book Antiqua",Cambria,Georgia,serif;color:#666}.note{padding:6px 9px;background:#eee;border:1px solid #ccc}.warning,.alert{padding:6px 9px;background:#fffbbc;border:1px solid #E6DB55}.error{padding:6px 9px;background:#ffebe8;border:1px solid #C00}.download{padding:6px 9px;background:#EDF2F4;border:1px solid #adbabf}.left,.alignleft{float:left;margin:0 18px 0 0}.right,.alignright{float:right;margin:0 0 0 18px}.center,.aligncenter{display:block;margin:0 auto 18px auto}.block,.alignnone{display:block;margin:0 0 18px 0}.clear{clear:both}span.pullquote{float:none;margin:0}img,a img{padding:5px}.post img{max-width:99%}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.wp-caption{padding:6px 1px 0 1px;background:#eee;border:1px solid #ddd;text-align:center}.wp-caption .wp-caption-text{margin:0;padding:0 5px;text-align:right;font-size:.8em;color:#666}.wp-caption img{margin:0 auto;padding:0;border:1px solid #666}.gallery{display:block;text-align:center;margin-bottom:18px !important}.gallery img{border:1px solid #3c738c}.avatar{float:left;width:100px;height:100px;margin-right:18px;background:#3c738c;border:1px solid #999}.thumbnail{float:left;width:100px;height:100px;margin-right:18px;background:#3c738c}#container{margin:0;padding:0}#content{margin:0 auto;padding:0}a:link,a:visited{border-bottom:#999}.entry-title{margin:0 0 5px 0;padding:0}.byline{font-size:10pt;font-style:italic;padding-bottom:10px}.byline .separator{display:none}.entry-meta{font-size:10pt;font-style:italic;color:#333}#footer{padding-top:9px;font-size:9pt;color:#666;border-top:1px solid #eee}.edit{display:none}#footer .credit{display:none}.wp-pagenavi,.navigation-links{display:none}.breadcrumb{display:none}#header{display:none}#navigation{display:none}#primary{display:none}#secondary{display:none}#tertiary{display:none}#subsidiary{display:none}.utility{display:none}.widget{display:none}#comments-template{display:none}.query-count{display:none} \ No newline at end of file diff --git a/wp-content/themes/hybrid/css/screen.css b/wp-content/themes/hybrid/css/screen.css new file mode 100644 index 000000000..2d5a31919 --- /dev/null +++ b/wp-content/themes/hybrid/css/screen.css @@ -0,0 +1 @@ +.sticky,.bypostauthor{}body{font:normal normal normal 15px/21px Georgia,Times,"Times New Roman",serif;color:#000}#body-container{margin:90px auto 21px auto}a{color:#21759b;text-decoration:none}a:visited{color:#551a8b}a:hover,a:active{color:#d54e21;text-decoration:underline}h1,h2,h3,h4,h5,h6{font-family:Arial,Verdana,sans-serif;color:#000;font-weight:bold}h1{font-size:24px}h2{font-size:21px}h3{font-size:19px}h4{font-size:17px}h5{font-size:15px}h6{font-size:13px}ul{list-style:square}blockquote{font-style:italic;color:#555}blockquote blockquote{color:#777}blockquote em{font-style:normal}pre{padding:9px;background:#f9f9f9;border:1px solid #ccc}code{padding:0 3px;background:#eee}pre code{background:transparent}table{width:100%;border-collapse:separate;border-top:1px solid #ccc;border-left:1px solid #ccc}caption{font-size:.9em;font-style:italic;text-align:right}td,th{padding:3px 6px;border-bottom:1px solid #ccc;border-right:1px solid #ccc}th{background:#eee}.drop-cap{float:left;margin:3px 3px 0 0;font:normal normal normal 47px/35px "Warnock Pro","Goudy Old Style",Palatino,"Book Antiqua",Georgia,serif;color:#333}.note{padding:6px 9px;background:#eee;border:1px solid #ccc}.warning,.alert{padding:6px 9px;background:#fffbbc;border:1px solid #E6DB55}.error{padding:6px 9px;background:#ffebe8;border:1px solid #C00}.download{padding:6px 9px;background:#e7f7d3;border:1px solid #6c3}.breadcrumb{margin:0 0 30px 0;font-size:.9em;font-style:italic;color:#666}.breadcrumb a{color:#111;text-decoration:none}.breadcrumb a:hover{color:#d54e21;text-decoration:underline}.hentry img{max-width:610px;height:auto;padding:4px;border:1px solid #ccc}.no-widgets .hentry img{max-width:950px}img.alignleft,img.alignright{margin-bottom:10px}.thumbnail{float:left;width:100px;height:100px;margin:5px 15px 10px 0}img.wp-smiley{max-width:12px;padding:0;background:transparent;border:none}.wp-caption{max-width:616px;margin-top:6px;padding:6px 1px 3px 1px;border:1px solid #ccc;text-align:center}.wp-caption .wp-caption-text{margin:0;padding:0 5px;text-align:right;font-size:.9em;font-style:italic;color:#666}.wp-caption img{max-width:604px;margin:0 auto;padding:0;border:1px solid #666}.no-widgets .wp-caption{max-width:956px}.no-widgets .wp-caption img{max-width:946px}.gallery img{border:1px solid #ccc}.avatar{float:left;width:100px;height:100px;margin:5px 15px 0 0;padding:4px;border:1px solid #ccc}#header{margin:0 0 40px 0}#site-title{font:normal normal bold 35px/35px Arial,Verdana,sans-serif;margin:0 0 10px 0}#site-title a{color:#000}#site-description{font:normal normal normal 16px/20px Georgia,Times,"Times New Roman",serif;margin:0;color:#666}#primary-menu,#navigation{overflow:visible;height:34px;margin:0 0 60px 0;z-index:100}#primary-menu li,#page-nav li{margin-right:15px}#primary-menu li li,#page-nav li li{margin-right:0}#primary-menu li a,#page-nav li a{padding:8px 15px 8px 15px;color:#111;background:#fff;border:1px solid #ccc}#primary-menu li:hover ul,#primary-menu li.sfHover ul,#page-nav li:hover ul,#page-nav li.sfHover ul{top:32px}#primary-menu li li a,#page-nav li li a{border-top:none;margin-right:0}#primary-menu li ul,#page-nav li ul{background:#fff;border-top:1px solid #ccc}#primary-menu li li:hover ul,#primary-menu li li.sfHover ul,#primary-menu li li li:hover ul,#primary-menu li li li.sfHover ul,#page-nav li li:hover ul,#page-nav li li.sfHover ul,#page-nav li li li:hover ul,#page-nav li li li.sfHover ul {top:-1px}#primary-menu li li li,#page-nav li li li{margin-left:-1px}#container{margin-bottom:21px}.content{margin:0 0 21px 0}.no-widgets .content,.page-template-no-widgets .content{width:960px}.hentry{overflow:hidden;margin:0 0 40px 0}.singular .hentry{margin:0}.loop-meta{overflow:hidden;margin:0 0 40px 0}.loop-title{font:normal normal bold 24px/24px Arial,Verdana,sans-serif}.entry-title{font:normal normal bold 24px/24px Arial,Verdana,sans-serif;margin:0 0 12px 0}.archive .entry-title,.search .entry-title{font-size:21px;margin:0 0 5px 0}.singular-page .entry-title,.singular-attachment .entry-title{margin:0 0 21px 0}.entry-title a{color:#000}.byline{margin:0 0 30px 0;font-style:italic;color:#666}.archive .byline,.search .byline{margin:0 0 5px 0}.entry-content{margin:0 0 10px 0}.entry-meta{clear:both;font-style:italic;color:#666}p.page-links,.comment-pagination{clear:both}.comment-pagination{margin-bottom:21px}p.page-links a,.comment-pagination .page-numbers{margin:0 3px;padding:3px 9px 3px 9px;border:1px solid #ccc}.navigation-links{margin-bottom:21px;font-style:italic}.navigation-links .previous{float:left;max-width:50%}.navigation-links .next{float:right;max-width:50%;text-align:right}.navigation-attachment{overflow:hidden}.widget{overflow:hidden;margin:0 0 15px 0;color:#464646}.widget a{color:#464646;text-decoration:underline}.widget a:hover{color:#d54e21;text-decoration:none}.widget-title{font-size:18px;color:#111}#utility-before-content,#utility-after-content,#utility-after-page,#utility-after-single{margin:0 0 21px 0;padding:20px 20px 0 20px;border:1px solid #ccc}#comments-template{clear:both}.comments-header{font-size:1.2em}.comments-closed{font-style:italic}ol.comment-list,ol.comment-list ol.children{list-style:none;margin:0 0 21px 0}li.comment,li li li.comment,li li li li li.comment,li li li li li li li.comment,li li li li li li li li li.comment,li.pingback,li.trackback{overflow:hidden;margin:0 0 21px 0;padding:21px 21px 0 21px;background:#fff;border:1px solid #ccc}li li.comment,li li li li.comment,li li li li li li.comment,li li li li li li li li.comment,li li li li li li li li li li.comment{background:#f9f9f9}#comments-template .avatar{width:40px;height:40px;float:left;margin-right:15px;padding:0;border:1px solid #666}.comment-meta{margin:10px 0 21px 0;font-size:13px;color:#666}.comment-author{font-size:15px;color:#000}.comment-reply-link,.permalink,.comment-edit-link{font-style:italic;color:#666}.comment-text{clear:left;margin:0 15px}.text-input{display:block;padding:3px 6px;width:97%}#comments-template label{font-size:.9em}textarea{width:98%}#submit{display:inline-block;margin-right:15px;padding:7px 15px 8px 15px;background:#fff;border:1px solid #ccc}#submit:hover{cursor:pointer;background:#f9f9f9}#footer-container{clear:both;margin:0 0 21px 0}#subsidiary{margin:0 0 21px 0}#footer{font-style:italic;color:#444}#footer .copyright{display:inline;float:left;margin-right:9px}.content{float:left;width:620px}#primary{float:right;width:300px}#secondary{clear:right;float:right;width:300px} \ No newline at end of file diff --git a/wp-content/themes/hybrid/docs/license.txt b/wp-content/themes/hybrid/docs/license.txt new file mode 100644 index 000000000..63e41a44c --- /dev/null +++ b/wp-content/themes/hybrid/docs/license.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/wp-content/themes/hybrid/docs/readme.html b/wp-content/themes/hybrid/docs/readme.html new file mode 100644 index 000000000..40950eb3e --- /dev/null +++ b/wp-content/themes/hybrid/docs/readme.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> +<title>A guide to the Hybrid theme</title> + +<style type="text/css">body{width:750px;margin:36px auto 60px auto;font:16px/25px Georgia,Times,'Times New Roman',serif}a:link,a:visited{color:#2f6eb9;text-decoration:none}a:hover,a:active{text-decoration:underline}h1,h2,h3,h4,h5,h6{margin:40px 0 30px 0;color:#000;font-weight:bold;font-family:Arial,sans-serif}h1{margin-top:80px;font-size:2.2em}code{padding:0 3px;background:#eee}pre code{padding:0}pre{padding:9px;background:#eee;border:1px solid #ccc}ul{list-style:square}p.first{font-size:21px}p.second{font-size:15px}ul.space li{margin-bottom:10px}.section{overflow:hidden}.columns-2{float:left;width:350px;margin:0 0 21px 25px}.columns-3{float:left;width:230px;margin:0 0 21px 20px}</style> + +</head> +<body> + +<h1>A guide to the Hybrid theme</h1> + +<p class="first"><em>Hybrid</em> is a user-friendly, search-engine optimized <em>parent theme</em>, featuring 15 custom page templates and 8 widget-ready areas, allowing you to create any type of site you want.</p> + +<p class="second">What this means is that the possibilities are endless. It is about rethinking how WordPress themes <em>should</em> work. It looks simple on the outside, but you can do nearly anything with enough creativity. Everyone from first-time WordPress users to advanced developers and designers can take advantage of this theme.</p> + +<h2>What is Hybrid?</h2> + +<p>I've been dabbling in the art of creating WordPress themes since 2005 and Web site design a couple of years longer than that. In that time, I've come to realize that the reuse of code is a cornerstone of good development practice. Why code the same things over and over when I can build off the same codebase, continually making it better?</p> + +<p><em>Hybrid</em> is a parent theme that focuses on code reuse and upgradability. What this means is that all of the core functionality is housed within a single theme. And, any time one wants to make a modification, it should be done within a child theme. By doing this, the <em>Hybrid</em> parent theme can be upgraded (just like WordPress) without any loss of customizations.</p> + +<h2>Features</h2> + +<p>The theme has everything you need to get started building your site. Here's a list of some of the features:</p> + +<ul> + <li>Runs off the brilliant <a href="http://themehybrid.com/hybrid-core" title="Hybrid Core theme framework">Hybrid Core framework</a>.</li> + <li>Makes use of standard WordPress functions so that plugins will integrate easily.</li> + <li>Dynamic global, post, and comment <acronym title="Cascading Style Sheets">CSS</acronym> classes.</li> + <li>Fully localized, so you can run <em>Hybrid</em> in any language.</li> + <li>Uses the built-in WordPress menu system. No need to hack your navigation into place.</li> + <li>Context-aware action and filter hooks, so you don't have to learn WordPress conditional tags.</li> + <li>Some of the most-used filter hooks are shortcode-ready and have accompanying shortcodes.</li> + <li>Theme settings page that allows you to add custom meta boxes and settings.</li> + <li>A redefined template hierarchy that makes larger sites easier to design for.</li> + <li>Ability to create custom templates for any post type in multiple ways.</li> + <li>Highly-configurable widgets that give you full control over their display.</li> + <li>Has the <a href="http://wordpress.org/extend/plugins/get-the-image" title="Get the Image WordPress plugin">Get the Image</a> plugin built in.</li> + <li>Has the <a href="http://wordpress.org/extend/plugins/breadcrumb-trail" title="Breadcrumb Trail WordPress plugin">Breadcrumb Trail</a> plugin built-in.</li> + <li>Comes loaded with eight default widget areas.</li> + <li>Widget areas are content-aware, meaning that they only appear if they contain active widgets.</li> + <li>Widgetized 404 template, which allows you to create a custom 404 error page.</li> + <li>And much, much more!</li> +</ul> + +<p>Remember, those are just <em>some</em> of the features. <em>Hybrid</em> is a foundation that should make it easy to launch nearly any WordPress-powered site.</p> + +<h2>Child Themes</h2> + +<p>When I call <em>Hybrid</em> a parent theme, I mean it. It is <em><strong>meant</strong></em> to be used as a base theme to build from. What this allows us to do is extend it through child themes.</p> + +<p>Yes, you can create your own theme. Even if you're a total <em>noob</em> to WordPress!</p> + +<p>Just create a new theme folder in your <code>/wp-content/themes</code> directory. Call it something like <em>My Hybrid</em> or some other much cooler name. So, you'd have a directory like <code>/wp-content/themes/my-hybrid</code>. Then, create a <code>style.css</code> file within your theme folder. At the top, add this information:</p> + +<pre><code>/** + * Theme Name: My Hybrid + * Theme URI: http://link-to-your-site.com + * Description: Describe what your theme should be like. + * Version: 0.1 + * Author: Your Name + * Author URI: http://link-to-your-site.com + * Tags: Add, Whatever, Tags, You, Want + * Template: hybrid + */</code></pre> + +<p>Now, you have your own theme! Of course, you might want to style it.</p> + +<p>You can import the parent theme's (<em>Hybrid's</em>) default <acronym title="Cascading Style Sheets">CSS</acronym> by adding the following code and modifying from there. Alternatively, you can start completely from scratch.</p> + +<pre><code>/* Import the Hybrid parent theme styles. */ +@import url( '../hybrid/style.css' );</code></pre> + +<h2>Theme Support</h2> + +<p>The most authoritative source for finding out how to use the theme or do some nifty stuff is the <a href="http://themehybrid.com/themes/hybrid" title="Hybrid theme page">theme documentation</a>. I'll constantly update it with tutorials and frequently asked questions.</p> + +<p>We also have a vibrant community at the <a href="http://themehybrid.com/support" title="Theme Hybrid support forums">Theme Hybrid Support Forums</a> where you can get help with <em>Hybrid</em>-related issues.</p> + +<h2>Important Notes</h2> + +<p><strong>Page Templates:</strong> Many of the page templates currently begin with the prefix <code>page-</code>. This may conflict with your pages by overwriting the default template. For example, if you have a page named <em>Bookmarks</em>, the <code>page-bookmarks.php</code> template will be used. Unfortunately, this was a feature added to WordPress <em>after</em> the establishment of a standard template-naming scheme for the theme. These templates will eventually be renamed to have a prefix of <code>page-template-</code> to avoid the rare conflict. Right now, the templates exist for backwards compatibility for the 1,000s of current theme users.</p> + +<h2>Not enough flexibility?</h2> + +<p>The <em>Hybrid</em> theme isn't the greatest invention ever. It has limitations for more experienced developers, the biggest being the lack of control over the theme structure. It is a good base for people looking to just use <acronym title="Cascading Style Sheets">CSS</acronym> to quickly put out sites though.</p> + +<p>If you're looking for more control than just being able to modify the design, you should definitely check out <a href="http://themehybrid.com/hybrid-core" title="Hybrid Core theme framework">Hybrid Core</a>, which is the theme development framework <em>Hybrid</em> and many other themes are built from. It gives you full control over the markup, design, and scripts for your theme projects.</p> + +<h2>Copyright & License</h2> + +<p><em>Hybrid</em> is licensed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html" title="GNU GPL">GNU General Public License</a>, version 2 (<acronym title="GNU General Public License">GPL</acronym>).</p> + +<p>This theme is copyrighted to <a href="http://justintadlock.com" title="Justin Tadlock">Justin Tadlock</a> and <a href="http://themehybrid.com" title="Theme Hybrid">Theme Hybrid</a>.</p> + +<p>2008 – 2011 © Justin Tadlock. All rights reserved.</p> + +</body> +</html> \ No newline at end of file diff --git a/wp-content/themes/hybrid/footer.php b/wp-content/themes/hybrid/footer.php index b705e8003..32aee36ea 100644 --- a/wp-content/themes/hybrid/footer.php +++ b/wp-content/themes/hybrid/footer.php @@ -11,28 +11,28 @@ * @subpackage Template */ ?> - <?php hybrid_after_container(); // After container hook ?> + <?php do_atomic( 'after_container' ); // hybrid_after_container ?> </div><!-- #container --> <div id="footer-container"> - <?php hybrid_before_footer(); // Before footer hook ?> + <?php do_atomic( 'before_footer' ); // hybrid_before_footer ?> <div id="footer"> - <?php hybrid_footer(); // Hybrid footer hook ?> + <?php do_atomic( 'footer' ); // hybrid_footer ?> </div><!-- #footer --> - <?php hybrid_after_footer(); // After footer hook ?> + <?php do_atomic( 'after_footer' ); // hybrid_after_footer ?> </div><!-- #footer-container --> </div><!-- #body-container --> -<?php wp_footer(); // WordPress footer hook ?> -<?php hybrid_after_html(); // After HTML hook ?> +<?php do_atomic( 'after_html' ); // hybrid_after_html ?> +<?php wp_footer(); // wp_footer ?> </body> </html> \ No newline at end of file diff --git a/wp-content/themes/hybrid/functions.php b/wp-content/themes/hybrid/functions.php index e7ea4b4d7..28244ae85 100644 --- a/wp-content/themes/hybrid/functions.php +++ b/wp-content/themes/hybrid/functions.php @@ -1,18 +1,405 @@ <?php /** - * Rather than lumping all theme functions into a single file, this functions file is used for - * initializing the theme framework, which activates files in the order that it needs. Users - * should create a child theme and make changes to its functions.php file (not this one). + * The functions file is used to initialize everything in the theme. It controls how the theme is loaded and + * sets up the supported features, default actions, and default filters. If making customizations, users + * should create a child theme and make changes to its functions.php file (not this one). Friends don't let + * friends modify parent theme files. ;) + * + * Child themes should do their setup on the 'after_setup_theme' hook with a priority of 11 if they want to + * override parent theme features. Use a priority of 9 if wanting to run before the parent theme. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU General Public License along with this program; if not, write + * to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * @package Hybrid * @subpackage Functions + * @version 1.0.0 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2008 - 2011, Justin Tadlock + * @link http://themehybrid.com/themes/hybrid + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + */ + +/* Load the core theme framework. */ +require_once( trailingslashit( TEMPLATEPATH ) . 'library/hybrid.php' ); +$theme = new Hybrid(); + +/* Do theme setup on the 'after_setup_theme' hook. */ +add_action( 'after_setup_theme', 'hybrid_theme_setup_theme' ); + +/** + * Theme setup function. This function adds support for theme features and defines the default theme + * actions and filters. + * + * @since 0.9.0 + */ +function hybrid_theme_setup_theme() { + global $content_width; + + /* Get the theme prefix. */ + $prefix = hybrid_get_prefix(); + + /* Add support for framework features. */ + add_theme_support( 'hybrid-core-menus', array( 'primary' ) ); + add_theme_support( 'hybrid-core-sidebars', array( 'primary', 'secondary', 'subsidiary', 'before-content', 'after-content', 'after-singular' ) ); + add_theme_support( 'hybrid-core-widgets' ); + add_theme_support( 'hybrid-core-shortcodes' ); + add_theme_support( 'hybrid-core-theme-settings', array( 'about', 'footer' ) ); + add_theme_support( 'hybrid-core-drop-downs' ); + add_theme_support( 'hybrid-core-seo' ); + add_theme_support( 'hybrid-core-template-hierarchy' ); + add_theme_support( 'hybrid-core-deprecated' ); + + /* Add support for framework extensions. */ + add_theme_support( 'breadcrumb-trail' ); + add_theme_support( 'custom-field-series' ); + add_theme_support( 'get-the-image' ); + add_theme_support( 'post-stylesheets' ); + + /* Only add cleaner gallery support if not using child theme. Eventually, all child themes should support this. */ + if ( 'hybrid' == get_stylesheet() ) + add_theme_support( 'cleaner-gallery' ); + + /* Add support for WordPress features. */ + add_theme_support( 'automatic-feed-links' ); + + /* Register sidebars. */ + add_action( 'init', 'hybrid_theme_register_sidebars', 11 ); + + /* Disables widget areas. */ + add_filter( 'sidebars_widgets', 'hybrid_theme_remove_sidebars' ); + + /* Header actions. */ + add_action( "{$prefix}_header", 'hybrid_site_title' ); + add_action( "{$prefix}_header", 'hybrid_site_description' ); + + /* Load the primary menu. */ + add_action( "{$prefix}_after_header", 'hybrid_get_primary_menu' ); + + /* Add the primary and secondary sidebars after the container. */ + add_action( "{$prefix}_after_container", 'hybrid_get_primary' ); + add_action( "{$prefix}_after_container", 'hybrid_get_secondary' ); + + /* Add the breadcrumb trail and before content sidebar before the content. */ + add_action( "{$prefix}_before_content", 'hybrid_breadcrumb' ); + add_action( "{$prefix}_before_content", 'hybrid_get_utility_before_content' ); + + /* Add the title, byline, and entry meta before and after the entry. */ + add_action( "{$prefix}_before_entry", 'hybrid_entry_title' ); + add_action( "{$prefix}_before_entry", 'hybrid_byline' ); + add_action( "{$prefix}_after_entry", 'hybrid_entry_meta' ); + + /* Add the after singular sidebar and custom field series extension after singular views. */ + add_action( "{$prefix}_after_singular", 'hybrid_get_utility_after_singular' ); + add_action( "{$prefix}_after_singular", 'custom_field_series' ); + + /* Add the after content sidebar and navigation links after the content. */ + add_action( "{$prefix}_after_content", 'hybrid_get_utility_after_content' ); + add_action( "{$prefix}_after_content", 'hybrid_navigation_links' ); + + /* Add the subsidiary sidebar and footer insert to the footer. */ + add_action( "{$prefix}_before_footer", 'hybrid_get_subsidiary' ); + add_action( "{$prefix}_footer", 'hybrid_footer_insert' ); + + /* Add the comment avatar and comment meta before individual comments. */ + add_action( "{$prefix}_before_comment", 'hybrid_avatar' ); + add_action( "{$prefix}_before_comment", 'hybrid_comment_meta' ); + + /* Add Hybrid theme-specific body classes. */ + add_filter( 'body_class', 'hybrid_theme_body_class' ); + + /* Content width. */ + if ( empty( $content_width ) && !is_active_sidebar( 'primary' ) && !is_active_sidebar( 'secondary' ) ) + $content_width = 960; + elseif ( empty( $content_width ) ) + $content_width = 620; +} + +/** + * Register additional sidebars that are not a part of the core framework and are exclusive to this + * theme. + * + * @since 0.9.0 + */ +function hybrid_theme_register_sidebars() { + + /* Register the widgets template sidebar. */ + register_sidebar( + array( + 'id' => 'widgets-template', + 'name' => __( 'Widgets Template', hybrid_get_textdomain() ), + 'description' => __( 'Used as the content of the Widgets page template.', hybrid_get_textdomain() ), + 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', + 'after_widget' => '</div></div>', + 'before_title' => '<h3 class="widget-title">', + 'after_title' => '</h3>' + ) + ); + + /* Register the 404 template sidebar. */ + register_sidebar( + array( + 'id' => 'error-404-template', + 'name' => __( '404 Template', hybrid_get_textdomain() ), + 'description' => __( 'Replaces the default 404 error page content.', hybrid_get_textdomain() ), + 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', + 'after_widget' => '</div></div>', + 'before_title' => '<h3 class="widget-title">', + 'after_title' => '</h3>' + ) + ); +} + +/** + * Function for adding Hybrid theme <body> classes. + * + * @since 0.9.0 + */ +function hybrid_theme_body_class( $classes ) { + global $wp_query, $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome; + + /* Singular post classes (deprecated). */ + if ( is_singular() ) { + + if ( is_page() ) + $classes[] = "page-{$wp_query->post->ID}"; // Use singular-page-ID + + elseif ( is_singular( 'post' ) ) + $classes[] = "single-{$wp_query->post->ID}"; // Use singular-post-ID + } + + /* Browser detection. */ + $browsers = array( 'gecko' => $is_gecko, 'opera' => $is_opera, 'lynx' => $is_lynx, 'ns4' => $is_NS4, 'safari' => $is_safari, 'chrome' => $is_chrome, 'msie' => $is_IE ); + foreach ( $browsers as $key => $value ) { + if ( $value ) { + $classes[] = $key; + break; + } + } + + /* Hybrid theme widgets detection. */ + foreach ( array( 'primary', 'secondary', 'subsidiary' ) as $sidebar ) + $classes[] = ( is_active_sidebar( $sidebar ) ) ? "{$sidebar}-active" : "{$sidebar}-inactive"; + + if ( in_array( 'primary-inactive', $classes ) && in_array( 'secondary-inactive', $classes ) && in_array( 'subsidiary-inactive', $classes ) ) + $classes[] = 'no-widgets'; + + /* Return the array of classes. */ + return $classes; +} + +/** + * Displays the breadcrumb trail extension if it's supported. + * + * @since 0.1.0 + */ +function hybrid_breadcrumb() { + if ( current_theme_supports( 'breadcrumb-trail' ) ) + breadcrumb_trail( array( 'front_page' => false ) ); +} + +/** + * Displays the post title. + * + * @since 0.5.0 + */ +function hybrid_entry_title() { + echo apply_atomic_shortcode( 'entry_title', '[entry-title]' ); +} + +/** + * Default entry byline for posts. + * + * @since 0.5.0 + */ +function hybrid_byline() { + + $byline = ''; + + if ( 'post' == get_post_type() && 'link_category' !== get_query_var( 'taxonomy' ) ) + $byline = '<p class="byline">' . __( 'By [entry-author] on [entry-published] [entry-edit-link before=" | "]', hybrid_get_textdomain() ) . '</p>'; + + echo apply_atomic_shortcode( 'byline', $byline ); +} + +/** + * Displays the default entry metadata. + * + * @since 0.5.0 + */ +function hybrid_entry_meta() { + + $meta = ''; + + if ( 'post' == get_post_type() ) + $meta = '<p class="entry-meta">' . __( '[entry-terms taxonomy="category" before="Posted in "] [entry-terms taxonomy="post_tag" before="| Tagged "] [entry-comments-link before="| "]', hybrid_get_textdomain() ) . '</p>'; + + elseif ( is_page() && current_user_can( 'edit_page', get_the_ID() ) ) + $meta = '<p class="entry-meta">[entry-edit-link]</p>'; + + echo apply_atomic_shortcode( 'entry_meta', $meta ); +} + +/** + * Function for displaying a comment's metadata. + * + * @since 0.7.0 + */ +function hybrid_comment_meta() { + echo apply_atomic_shortcode( 'comment_meta', '<div class="comment-meta comment-meta-data">[comment-author] [comment-published] [comment-permalink before="| "] [comment-edit-link before="| "] [comment-reply-link before="| "]</div>' ); +} + +/** + * Loads the loop-nav.php template with backwards compability for navigation-links.php. + * + * @since 0.2.0 + * @uses locate_template() Checks for template in child and parent theme. + */ +function hybrid_navigation_links() { + locate_template( array( 'navigation-links.php', 'loop-nav.php' ), true ); +} + +/** + * Displays the footer insert from the theme settings page. + * + * @since 0.2.1 + */ +function hybrid_footer_insert() { + $footer_insert = hybrid_get_setting( 'footer_insert' ); + + if ( !empty( $footer_insert ) ) + echo '<div class="footer-insert">' . do_shortcode( $footer_insert ) . '</div>'; +} + +/** + * Removes all widget areas on the No Widgets page/post template. No widget templates should come in + * the form of $post_type-no-widgets.php. This function also provides backwards compatibility with the old + * no-widgets.php template. + * + * @since 0.9.0 + */ +function hybrid_theme_remove_sidebars( $sidebars_widgets ) { + global $wp_query; + + if ( is_singular() ) { + $template = get_post_meta( $wp_query->post->ID, "_wp_{$wp_query->post->post_type}_template", true ); + + if ( 'no-widgets.php' == $template || "{$wp_query->post->post_type}-no-widgets.php" == $template ) + $sidebars_widgets = array( false ); + } + + return $sidebars_widgets; +} + +/** + * Loads the sidebar-primary.php template. + * + * @since 0.2.2 + * @uses get_sidebar() Checks for the template in the child and parent theme. */ +function hybrid_get_primary() { + get_sidebar( 'primary' ); +} -/* Load the Hybrid class. */ -require_once( TEMPLATEPATH . '/library/classes/hybrid.php' ); +/** + * Loads the sidebar-secondary.php template. + * + * @since 0.2.2 + * @uses get_sidebar() Checks for the template in the child and parent theme. + */ +function hybrid_get_secondary() { + get_sidebar( 'secondary' ); +} -/* Initialize the Hybrid framework. */ -$hybrid = new Hybrid(); -$hybrid->init(); +/** + * Loads the sidebar-subsidiary.php template. + * + * @since 0.3.1 + * @uses get_sidebar() Checks for the template in the child and parent theme. + */ +function hybrid_get_subsidiary() { + get_sidebar( 'subsidiary' ); +} + +/** + * Loads the sidebar-before-content.php template. + * + * @since 0.4.0 + * @uses get_sidebar() Checks for the template in the child and parent theme. + */ +function hybrid_get_utility_before_content() { + get_sidebar( 'before-content' ); +} + +/** + * Loads the sidebar-after-content.php template. + * + * @since 0.4.0 + * @uses get_sidebar() Checks for the template in the child and parent theme. + */ +function hybrid_get_utility_after_content() { + get_sidebar( 'after-content' ); +} + +/** + * Loads the sidebar-after-singular.php template. + * + * @since 0.7.0 + * @uses get_sidebar() Checks for the template in the child and parent theme. + */ +function hybrid_get_utility_after_singular() { + get_sidebar( 'after-singular' ); +} + +/** + * Loads the menu-primary.php template. + * + * @since 0.8.0 + * @uses get_template_part() Checks for template in child and parent theme. + */ +function hybrid_get_primary_menu() { + get_template_part( 'menu', 'primary' ); +} + +/** + * @since 0.7.0 + * @deprecated 0.9.0 + */ +function hybrid_disable_styles() { + _deprecated_function( __FUNCTION__, '0.9.0' ); +} + +/** + * @since 0.4.0 + * @deprecated 0.9.0 + */ +function hybrid_favicon() { + _deprecated_function( __FUNCTION__, '0.9.0' ); +} + +/** + * @since 0.4.0 + * @deprecated 0.9.0 + */ +function hybrid_feed_link( $output, $feed ) { + _deprecated_function( __FUNCTION__, '0.9.0' ); + return $output; +} + +/** + * @since 0.4.0 + * @deprecated 0.9.0 + */ +function hybrid_other_feed_link( $link ) { + _deprecated_function( __FUNCTION__, '0.9.0' ); + return $link; +} ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/header.php b/wp-content/themes/hybrid/header.php index 995a23e72..f8319e9e4 100644 --- a/wp-content/themes/hybrid/header.php +++ b/wp-content/themes/hybrid/header.php @@ -10,39 +10,42 @@ * @package Hybrid * @subpackage Template */ - -hybrid_doctype(); ?> -<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes( 'xhtml' ); ?>> -<head profile="<?php hybrid_profile_uri(); ?>"> +?> +<!DOCTYPE html> +<html <?php language_attributes(); ?>> +<head> +<meta http-equiv="Content-Type" content="<?php bloginfo( 'html_type' ); ?>; charset=<?php bloginfo( 'charset' ); ?>" /> <title><?php hybrid_document_title(); ?></title> -<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>" type="text/css" media="screen" /> +<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>" type="text/css" media="all" /> +<link rel="profile" href="http://gmpg.org/xfn/11" /> +<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> -<?php hybrid_head(); // Hybrid head hook ?> -<?php wp_head(); // WP head hook ?> +<?php do_atomic( 'head' ); // @deprecated 0.9.0. Use 'wp_head'. ?> +<?php wp_head(); // wp_head ?> </head> <body class="<?php hybrid_body_class(); ?>"> -<?php hybrid_before_html(); // Before HTML hook ?> +<?php do_atomic( 'before_html' ); // hybrid_before_html ?> <div id="body-container"> - <?php hybrid_before_header(); // Before header hook ?> + <?php do_atomic( 'before_header' ); // hybrid_before_header ?> <div id="header-container"> <div id="header"> - <?php hybrid_header(); // Header hook ?> + <?php do_atomic( 'header' ); // hybrid_header ?> </div><!-- #header --> </div><!-- #header-container --> - <?php hybrid_after_header(); // After header hook ?> + <?php do_atomic( 'after_header' ); // hybrid_after_header ?> <div id="container"> - <?php hybrid_before_container(); // Before container hook ?> \ No newline at end of file + <?php do_atomic( 'before_container' ); // hybrid_before_container ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/index.php b/wp-content/themes/hybrid/index.php index fe3a524e0..44315f7dc 100644 --- a/wp-content/themes/hybrid/index.php +++ b/wp-content/themes/hybrid/index.php @@ -2,13 +2,53 @@ /** * Index Template * - * This template should not be shown. It is a placeholder. - * Specific templates for each type of content are available. - * @link http://themehybrid.com/themes/hybrid/template-hierarchy + * The index template is the "fallback" template. What this means is that it will be used if a more specific + * template is not found to display the content of a page. * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/template-hierarchy */ -/* Simplicity is bliss. */ -?> \ No newline at end of file +get_header(); // Loads the header.php template. ?> + + <div id="content" class="hfeed content"> + + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> + + <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> + + <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> + + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> + + <div class="entry-content"> + <?php the_content( sprintf( __( 'Continue reading %1$s', hybrid_get_textdomain() ), the_title( ' "', '"', false ) ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> + </div><!-- .entry-content --> + + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> + + </div><!-- .hentry --> + + <?php if ( is_singular() ) { ?> + + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> + + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> + + <?php } ?> + + <?php endwhile; ?> + + <?php else: ?> + + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> + + <?php endif; ?> + + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> + + </div><!-- .content .hfeed --> + +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/languages/hybrid-en_EN.mo b/wp-content/themes/hybrid/languages/hybrid-en_EN.mo index 047cd33a95c6de82f68cf5b8fe62ecd3e86ccca6..259ba528764d19478f6ba8f71b21b7f647cf5c30 100644 GIT binary patch delta 42 ycmZ3*a)f1q3KJL8M73;QLtO()T|-j^LlY}wi;eTT87B)ciLe`5Dd_2OF#rJJ5(#(! delta 32 ocmX@YvWjJb3eyM1iE7!r2D%1jx<*C{Mut{KmK*1FGcqy&0Gu-jr2qf` diff --git a/wp-content/themes/hybrid/languages/hybrid-en_EN.po b/wp-content/themes/hybrid/languages/hybrid-en_EN.po index 27aa8711c..156a7245e 100644 --- a/wp-content/themes/hybrid/languages/hybrid-en_EN.po +++ b/wp-content/themes/hybrid/languages/hybrid-en_EN.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Hybrid Theme Framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-06-22 21:29-0600\n" +"POT-Creation-Date: 2011-09-15 14:38-0600\n" "PO-Revision-Date: \n" "Last-Translator: Justin Tadlock <justin@justintadlock.com>\n" "Language-Team: <justin@justintadlock.com>\n" @@ -14,1121 +14,1060 @@ msgstr "" "X-Poedit-KeywordsList: _e;__;esc_attr_e;esc_attr__;esc_html_e;esc_html__\n" "X-Poedit-Basepath: .\n" "X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPath-1: ..\n" -#: 404.php:35 +#: ../404.php:33 msgid "Not Found" msgstr "" -#: 404.php:40 +#: ../404.php:38 #, php-format msgid "You tried going to %1$s, and it doesn't exist. All is not lost! You can search for what you're looking for." msgstr "" -#: archive.php:21 -msgid "Archives" -msgstr "" - -#: archive.php:25 -msgid "You are browsing the site archives." -msgstr "" - -#: archive.php:52 -#: attachment-application.php:52 -#: attachment-audio.php:54 -#: attachment-image.php:57 -#: attachment-text.php:52 -#: attachment-video.php:52 -#: attachment.php:54 -#: date.php:51 -#: day.php:50 -#: home.php:37 -msgid "Apologies, but no results were found." -msgstr "" - -#: attachment-application.php:29 -#: attachment-audio.php:30 -#: attachment-image.php:33 -#: attachment-text.php:29 -#: attachment-video.php:29 -#: attachment.php:31 -#: home.php:24 +#: ../attachment.php:40 #, php-format -msgid "Continue reading %1$s" +msgid "Download "%1$s"" msgstr "" -#: attachment-application.php:32 -#: attachment-audio.php:34 -#: attachment-text.php:32 -#: attachment-video.php:32 -#: attachment.php:34 +#: ../attachment.php:45 +#: ../index.php:26 #, php-format -msgid "Download "%1$s"" +msgid "Continue reading %1$s" msgstr "" -#: attachment-application.php:35 -#: attachment-audio.php:37 -#: attachment-image.php:35 -#: attachment-text.php:35 -#: attachment-video.php:35 -#: attachment.php:37 -#: home.php:25 +#: ../attachment.php:47 +#: ../index.php:27 +#: ../page-archives.php:51 +#: ../page-authors.php:56 +#: ../page-biography.php:65 msgid "Pages:" msgstr "" -#: comment.php:22 +#: ../comment.php:22 msgid "Your comment is awaiting moderation." msgstr "" -#: comments.php:12 +#: ../comments.php:14 msgid "Please do not load this page directly. Thanks!" msgstr "" -#: comments.php:19 -msgid "Password Protected" -msgstr "" - -#: comments.php:22 -msgid "Enter the password to view comments." -msgstr "" - -#: comments.php:33 +#: ../comments.php:27 #, php-format msgid "No responses to %1$s" msgstr "" -#: comments.php:33 +#: ../comments.php:27 #, php-format msgid "One response to %1$s" msgstr "" -#: comments.php:33 +#: ../comments.php:27 #, php-format msgid "%1$s responses to %2$s" msgstr "" -#: comments.php:56 +#: ../comments.php:50 #, php-format msgid "Comments are closed, but <a href=\"%1$s\" title=\"Trackback URL for this post\">trackbacks</a> and pingbacks are open." msgstr "" -#: comments.php:62 -msgid "Comments are closed." +#: ../functions.php:137 +msgid "Widgets Template" msgstr "" -#: date.php:20 -#: date.php:24 -#: day.php:19 -#: day.php:23 -msgid "F jS, Y" +#: ../functions.php:138 +msgid "Used as the content of the Widgets page template." msgstr "" -#: date.php:24 -#: day.php:23 -#, php-format -msgid "You are browsing the archive for %1$s." +#: ../functions.php:150 +msgid "404 Template" msgstr "" -#: hour.php:18 -#: hour.php:22 -msgid "g a" +#: ../functions.php:151 +msgid "Replaces the default 404 error page content." msgstr "" -#: minute.php:18 -#: minute.php:23 -msgid "g:i a" +#: ../functions.php:227 +msgid "By [entry-author] on [entry-published] [entry-edit-link before=\" | \"]" msgstr "" -#: minute.php:18 -#, php-format -msgid "Minute %1$s" +#: ../functions.php:242 +msgid "[entry-terms taxonomy=\"category\" before=\"Posted in \"] [entry-terms taxonomy=\"post_tag\" before=\"| Tagged \"] [entry-comments-link before=\"| \"]" msgstr "" -#: minute.php:18 -#: minute.php:25 -msgid "i" +#: ../loop-error.php:16 +msgid "Apologies, but no results were found." msgstr "" -#: minute.php:25 +#: ../loop-meta.php:83 #, php-format -msgid "You are browsing the archive for minute %1$s." +msgid "You are browsing the search results for "%1$s"" +msgstr "" + +#: ../loop-meta.php:92 +msgid "Archives by date" +msgstr "" + +#: ../loop-meta.php:96 +msgid "You are browsing the site archives by date." +msgstr "" + +#: ../loop-meta.php:120 +msgid "Archives" msgstr "" -#: navigation-links.php:17 +#: ../loop-meta.php:124 +msgid "You are browsing the site archives." +msgstr "" + +#: ../loop-nav.php:17 msgid "« Return to entry" msgstr "" -#: navigation-links.php:23 -#: navigation-links.php:29 +#: ../loop-nav.php:23 +#: ../loop-nav.php:31 msgid "« Previous" msgstr "" -#: navigation-links.php:24 -#: navigation-links.php:29 +#: ../loop-nav.php:24 +#: ../loop-nav.php:31 msgid "Next »" msgstr "" -#: page-archives.php:43 +#: ../page-archives.php:37 msgid "Archives by category" msgstr "" -#: page-archives.php:46 -#: page-categories.php:30 +#: ../page-archives.php:40 msgid "RSS" msgstr "" -#: page-archives.php:49 +#: ../page-archives.php:43 msgid "Archives by month" msgstr "" -#: page-biography.php:42 +#: ../page-biography.php:41 msgid "Nickname:" msgstr "" -#: page-biography.php:46 +#: ../page-biography.php:45 msgid "Website:" msgstr "" -#: page-biography.php:50 +#: ../page-biography.php:49 msgid "AIM:" msgstr "" -#: page-biography.php:50 -#: page-biography.php:54 -#: page-biography.php:58 +#: ../page-biography.php:49 +#: ../page-biography.php:53 +#: ../page-biography.php:57 #, php-format msgid "IM with %1$s" msgstr "" -#: page-biography.php:54 +#: ../page-biography.php:53 msgid "Jabber:" msgstr "" -#: page-biography.php:58 +#: ../page-biography.php:57 msgid "Yahoo:" msgstr "" -#: page-logged-in.php:51 +#: ../page-logged-in.php:52 #, php-format msgid "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to view the content of this page." msgstr "" -#: page-logged-in.php:53 +#: ../page-logged-in.php:54 #, php-format msgid "If you're not currently a member, please take a moment to <a href=\"%1$s\" title=\"Register\">register</a>." msgstr "" -#: page-sitemap.php:29 +#: ../page-sitemap.php:30 msgid "Feeds" msgstr "" -#: page-sitemap.php:32 +#: ../page-sitemap.php:33 msgid "RDF/RSS 1.0 feed" msgstr "" -#: page-sitemap.php:32 +#: ../page-sitemap.php:33 msgid "<acronym title=\"Resource Description Framework\">RDF</acronym> <acronym title=\"Really Simple Syndication\">RSS</acronym> 1.0 feed" msgstr "" -#: page-sitemap.php:33 +#: ../page-sitemap.php:34 msgid "RSS 0.92 feed" msgstr "" -#: page-sitemap.php:33 +#: ../page-sitemap.php:34 msgid "<acronym title=\"Really Simple Syndication\">RSS</acronym> 0.92 feed" msgstr "" -#: page-sitemap.php:34 +#: ../page-sitemap.php:35 msgid "RSS 2.0 feed" msgstr "" -#: page-sitemap.php:34 +#: ../page-sitemap.php:35 msgid "<acronym title=\"Really Simple Syndication\">RSS</acronym> 2.0 feed" msgstr "" -#: page-sitemap.php:35 +#: ../page-sitemap.php:36 msgid "Atom feed" msgstr "" -#: page-sitemap.php:36 +#: ../page-sitemap.php:37 msgid "Comments RSS 2.0 feed" msgstr "" -#: page-sitemap.php:36 +#: ../page-sitemap.php:37 msgid "Comments <acronym title=\"Really Simple Syndication\">RSS</acronym> 2.0 feed" msgstr "" -#: page-sitemap.php:39 +#: ../page-sitemap.php:40 msgid "Pages" msgstr "" -#: page-sitemap.php:45 +#: ../page-sitemap.php:46 msgid "Category Archives" msgstr "" -#: page-sitemap.php:51 +#: ../page-sitemap.php:52 msgid "Author Archives" msgstr "" -#: page-sitemap.php:57 +#: ../page-sitemap.php:58 msgid "Yearly Archives" msgstr "" -#: page-sitemap.php:63 +#: ../page-sitemap.php:64 msgid "Monthly Archives" msgstr "" -#: page-sitemap.php:69 +#: ../page-sitemap.php:70 msgid "Weekly Archives" msgstr "" -#: page-sitemap.php:75 +#: ../page-sitemap.php:76 msgid "Daily Archives" msgstr "" -#: page-sitemap.php:81 +#: ../page-sitemap.php:82 msgid "Tag Archives" msgstr "" -#: page-sitemap.php:87 +#: ../page-sitemap.php:88 msgid "Blog Posts" msgstr "" -#: page-widgets.php:25 +#: ../page-widgets.php:26 msgid "Edit" msgstr "" -#: search.php:23 -#, php-format -msgid "You are browsing the search results for "%1$s"" -msgstr "" - -#: searchform.php:18 +#: ../searchform.php:18 msgid "Search this site..." msgstr "" -#: searchform.php:19 +#: ../searchform.php:19 msgid "Search" msgstr "" -#: week.php:19 +#: ../library/admin/meta-box-post-seo.php:30 #, php-format -msgid "Week %1$s of %2$s" +msgid "%s SEO" msgstr "" -#: week.php:19 -#: week.php:23 -msgid "W" +#: ../library/admin/meta-box-post-seo.php:47 +msgid "Document Title:" msgstr "" -#: week.php:19 -#: week.php:23 -#: year.php:18 -#: year.php:22 -msgid "Y" +#: ../library/admin/meta-box-post-seo.php:53 +msgid "Meta Description:" msgstr "" -#: week.php:23 -#, php-format -msgid "You are browsing the archive for week %1$s of %2$s." +#: ../library/admin/meta-box-post-seo.php:59 +msgid "Meta Keywords:" msgstr "" -#: library/admin/meta-box.php:33 -#: library/admin/settings-page.php:35 +#: ../library/admin/meta-box-post-template.php:34 #, php-format -msgid "%1$s Settings" -msgstr "" - -#: library/admin/meta-box.php:55 -#: library/classes/widget-archives.php:129 -#: library/classes/widget-authors.php:134 -#: library/classes/widget-bookmarks.php:150 -msgid "Title:" -msgstr "" - -#: library/admin/meta-box.php:56 -#: library/admin/settings-page.php:209 -msgid "Description:" -msgstr "" - -#: library/admin/meta-box.php:57 -msgid "Keywords:" +msgid "%s Template" msgstr "" -#: library/admin/meta-box.php:62 -msgid "Series:" +#: ../library/admin/meta-box-post-template.php:66 +msgid "No templates exist for this post type." msgstr "" -#: library/admin/meta-box.php:65 -msgid "Thumbnail:" -msgstr "" - -#: library/admin/meta-box.php:75 -#: library/admin/meta-box.php:147 -msgid "Template:" -msgstr "" - -#: library/admin/meta-box.php:81 -msgid "Layout:" -msgstr "" - -#: library/admin/settings-page.php:35 -#: library/admin/settings-page.php:305 +#: ../library/admin/meta-box-theme-about.php:27 +#: ../library/admin/meta-box-theme-about.php:32 #, php-format -msgid "%1$s Theme Settings" -msgstr "" - -#: library/admin/settings-page.php:67 -#: library/admin/settings-page.php:72 -msgid "Copyright © [the-year] [site-link]." +msgid "About %1$s" msgstr "" -#: library/admin/settings-page.php:67 -msgid "Powered by [wp-link] and [theme-link]." +#: ../library/admin/meta-box-theme-about.php:62 +msgid "Theme:" msgstr "" -#: library/admin/settings-page.php:72 -msgid "Powered by [wp-link], [theme-link], and [child-link]." +#: ../library/admin/meta-box-theme-about.php:70 +msgid "Version:" msgstr "" -#: library/admin/settings-page.php:162 -#: library/admin/settings-page.php:167 -#, php-format -msgid "About %1$s" +#: ../library/admin/meta-box-theme-about.php:78 +msgid "Author:" msgstr "" -#: library/admin/settings-page.php:171 -msgid "General settings" +#: ../library/admin/meta-box-theme-about.php:86 +msgid "Description:" msgstr "" -#: library/admin/settings-page.php:174 +#: ../library/admin/meta-box-theme-footer.php:24 msgid "Footer settings" msgstr "" -#: library/admin/settings-page.php:201 -msgid "Theme:" +#: ../library/admin/meta-box-theme-footer.php:37 +msgid "You can add custom <acronym title=\"Hypertext Markup Language\">HTML</acronym> and/or shortcodes, which will be automatically inserted into your theme." msgstr "" -#: library/admin/settings-page.php:205 -msgid "Author:" +#: ../library/admin/meta-box-theme-footer.php:46 +#, php-format +msgid "Shortcodes: %s" msgstr "" -#: library/admin/settings-page.php:227 -msgid "Stylesheets:" +#: ../library/admin/theme-settings.php:43 +#: ../library/admin/theme-settings.php:162 +#, php-format +msgid "%1$s Theme Settings" msgstr "" -#: library/admin/settings-page.php:230 -msgid "Select this to have the theme automatically include a print stylesheet." +#: ../library/admin/theme-settings.php:44 +msgid "Theme Settings" msgstr "" -#: library/admin/settings-page.php:234 -msgid "JavaScript:" +#: ../library/admin/theme-settings.php:164 +msgid "Settings saved." msgstr "" -#: library/admin/settings-page.php:237 -msgid "Include the drop-down menu JavaScript." +#: ../library/admin/theme-settings.php:180 +msgid "Update Settings" msgstr "" -#: library/admin/settings-page.php:241 -msgid "Menus:" +#: ../library/admin/theme-settings.php:232 +msgid "Documentation" msgstr "" -#: library/admin/settings-page.php:244 -msgid "Use the WordPress 3.0+ menu system? Child themes built prior to <em>Hybrid</em> 0.8 may need to be updated to use this." +#: ../library/admin/theme-settings.php:236 +msgid "Support" msgstr "" -#: library/admin/settings-page.php:248 -msgid "Feeds:" +#: ../library/classes/widget-archives.php:38 +msgid "An advanced widget that gives you total control over the output of your archives." msgstr "" -#: library/admin/settings-page.php:251 -msgid "If you have an alternate feed address, such as one from <a href=\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, you can enter it here to have the theme redirect your feed links." +#: ../library/classes/widget-archives.php:89 +msgid "Select Year" msgstr "" -#: library/admin/settings-page.php:253 -msgid "Direct category, tag, search, and author feeds to your alternate feed address?" +#: ../library/classes/widget-archives.php:92 +msgid "Select Month" msgstr "" -#: library/admin/settings-page.php:257 -msgid "Search Engine Optimization" +#: ../library/classes/widget-archives.php:95 +msgid "Select Week" msgstr "" -#: library/admin/settings-page.php:257 -msgid "SEO:" +#: ../library/classes/widget-archives.php:98 +msgid "Select Day" msgstr "" -#: library/admin/settings-page.php:260 -msgid "Are you using an <acronym title=\"Search Engine Optimization\">SEO</acronym> plugin? Select this to disable the theme's meta and indexing features." +#: ../library/classes/widget-archives.php:101 +msgid "Select Post" msgstr "" -#: library/admin/settings-page.php:278 -msgid "Footer Insert:" +#: ../library/classes/widget-archives.php:163 +msgid "Alphabetical" msgstr "" -#: library/admin/settings-page.php:280 -msgid "You can add custom <acronym title=\"Hypertext Markup Language\">HTML</acronym> and/or shortcodes, which will be automatically inserted into your theme." +#: ../library/classes/widget-archives.php:163 +msgid "Daily" msgstr "" -#: library/admin/settings-page.php:282 -msgid "Shortcodes:" +#: ../library/classes/widget-archives.php:163 +msgid "Monthly" msgstr "" -#: library/admin/settings-page.php:307 -msgid "Settings saved." +#: ../library/classes/widget-archives.php:163 +msgid "Post By Post" msgstr "" -#: library/admin/settings-page.php:324 -msgid "Update Settings" +#: ../library/classes/widget-archives.php:163 +msgid "Weekly" msgstr "" -#: library/classes/widget-archives.php:30 -msgid "An advanced widget that gives you total control over the output of your archives." +#: ../library/classes/widget-archives.php:163 +msgid "Yearly" msgstr "" -#: library/classes/widget-archives.php:62 -msgid "Select Year" +#: ../library/classes/widget-archives.php:166 +msgid "Custom" msgstr "" -#: library/classes/widget-archives.php:64 -msgid "Select Month" +#: ../library/classes/widget-archives.php:166 +msgid "HTML" msgstr "" -#: library/classes/widget-archives.php:66 -msgid "Select Week" +#: ../library/classes/widget-archives.php:166 +msgid "Option" msgstr "" -#: library/classes/widget-archives.php:68 -msgid "Select Day" +#: ../library/classes/widget-archives.php:171 +#: ../library/classes/widget-authors.php:165 +msgid "Title:" msgstr "" -#: library/classes/widget-archives.php:70 -msgid "Select Post" +#: ../library/classes/widget-archives.php:207 +#: ../library/classes/widget-authors.php:213 +msgid "Show post count?" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Alphabetical" +#: ../library/classes/widget-authors.php:47 +msgid "An advanced widget that gives you total control over the output of your author lists." msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Daily" +#: ../library/classes/widget-authors.php:59 +#: ../library/classes/widget-authors.php:141 +msgid "Authors" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Monthly" +#: ../library/classes/widget-authors.php:158 +msgid "Ascending" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Post By Post" +#: ../library/classes/widget-authors.php:158 +msgid "Descending" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Weekly" +#: ../library/classes/widget-authors.php:159 +msgid "Display Name" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Yearly" +#: ../library/classes/widget-authors.php:159 +msgid "Email" msgstr "" -#: library/classes/widget-archives.php:123 -msgid "Custom" +#: ../library/classes/widget-authors.php:159 +msgid "ID" msgstr "" -#: library/classes/widget-archives.php:123 -msgid "HTML" +#: ../library/classes/widget-authors.php:159 +msgid "Nice Name" msgstr "" -#: library/classes/widget-archives.php:123 -msgid "Option" +#: ../library/classes/widget-authors.php:159 +msgid "Post Count" msgstr "" -#: library/classes/widget-archives.php:165 -#: library/classes/widget-authors.php:162 -msgid "Show post count?" +#: ../library/classes/widget-authors.php:159 +msgid "Registered" msgstr "" -#: library/classes/widget-authors.php:30 -msgid "An advanced widget that gives you total control over the output of your author lists." +#: ../library/classes/widget-authors.php:159 +msgid "URL" msgstr "" -#: library/classes/widget-authors.php:32 -#: library/classes/widget-authors.php:122 -msgid "Authors" +#: ../library/classes/widget-authors.php:159 +msgid "Login" msgstr "" -#: library/classes/widget-authors.php:148 +#: ../library/classes/widget-authors.php:191 msgid "List" msgstr "" -#: library/classes/widget-authors.php:148 +#: ../library/classes/widget-authors.php:191 msgid "None" msgstr "" -#: library/classes/widget-authors.php:158 +#: ../library/classes/widget-authors.php:209 msgid "<acronym title=\"Hypertext Markup Language\">HTML</acronym>?" msgstr "" -#: library/classes/widget-authors.php:166 +#: ../library/classes/widget-authors.php:217 msgid "Exclude admin?" msgstr "" -#: library/classes/widget-authors.php:170 +#: ../library/classes/widget-authors.php:221 msgid "Show full name?" msgstr "" -#: library/classes/widget-authors.php:174 +#: ../library/classes/widget-authors.php:225 msgid "Hide empty?" msgstr "" -#: library/classes/widget-bookmarks.php:30 +#: ../library/classes/widget-bookmarks.php:47 msgid "An advanced widget that gives you total control over the output of your bookmarks (links)." msgstr "" -#: library/classes/widget-bookmarks.php:32 -#: library/classes/widget-bookmarks.php:124 +#: ../library/classes/widget-bookmarks.php:59 +#: ../library/classes/widget-bookmarks.php:158 msgid "Bookmarks" msgstr "" -#: library/classes/widget-bookmarks.php:141 -#: library/classes/widget-bookmarks.php:143 -msgid "Ascending" -msgstr "" - -#: library/classes/widget-bookmarks.php:141 -#: library/classes/widget-bookmarks.php:143 -msgid "Descending" -msgstr "" - -#: library/classes/widget-bookmarks.php:142 +#: ../library/classes/widget-bookmarks.php:189 +#: ../library/classes/widget-categories.php:194 +#: ../library/classes/widget-tags.php:191 msgid "Count" msgstr "" -#: library/classes/widget-bookmarks.php:142 -#: library/classes/widget-bookmarks.php:144 -msgid "ID" -msgstr "" - -#: library/classes/widget-bookmarks.php:142 -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:189 +#: ../library/classes/widget-bookmarks.php:191 +#: ../library/classes/widget-categories.php:194 +#: ../library/classes/widget-tags.php:191 msgid "Name" msgstr "" -#: library/classes/widget-bookmarks.php:142 +#: ../library/classes/widget-bookmarks.php:189 +#: ../library/classes/widget-categories.php:194 +#: ../library/classes/widget-pages.php:170 msgid "Slug" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Description" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Length" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Notes" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Owner" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 +#: ../library/classes/widget-tags.php:190 msgid "Random" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Rating" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Rel" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Target" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Updated" msgstr "" -#: library/classes/widget-bookmarks.php:144 -msgid "URL" -msgstr "" - -#: library/classes/widget-bookmarks.php:252 +#: ../library/classes/widget-bookmarks.php:299 msgid "Categorize?" msgstr "" -#: library/classes/widget-bookmarks.php:256 +#: ../library/classes/widget-bookmarks.php:303 msgid "Show description?" msgstr "" -#: library/classes/widget-bookmarks.php:260 +#: ../library/classes/widget-bookmarks.php:307 msgid "Hide invisible?" msgstr "" -#: library/classes/widget-bookmarks.php:264 +#: ../library/classes/widget-bookmarks.php:311 msgid "Show rating?" msgstr "" -#: library/classes/widget-bookmarks.php:268 +#: ../library/classes/widget-bookmarks.php:315 msgid "Show updated?" msgstr "" -#: library/classes/widget-bookmarks.php:272 +#: ../library/classes/widget-bookmarks.php:319 msgid "Show images?" msgstr "" -#: library/classes/widget-bookmarks.php:276 +#: ../library/classes/widget-bookmarks.php:323 msgid "Show name?" msgstr "" -#: library/classes/widget-bookmarks.php:280 +#: ../library/classes/widget-bookmarks.php:327 msgid "Show private?" msgstr "" -#: library/classes/widget-calendar.php:30 +#: ../library/classes/widget-calendar.php:47 msgid "An advanced widget that gives you total control over the output of your calendar." msgstr "" -#: library/classes/widget-calendar.php:32 -#: library/classes/widget-calendar.php:79 +#: ../library/classes/widget-calendar.php:59 +#: ../library/classes/widget-calendar.php:114 msgid "Calendar" msgstr "" -#: library/classes/widget-calendar.php:91 +#: ../library/classes/widget-calendar.php:128 msgid "One-letter abbreviation?" msgstr "" -#: library/classes/widget-categories.php:30 +#: ../library/classes/widget-categories.php:47 msgid "An advanced widget that gives you total control over the output of your category links." msgstr "" -#: library/classes/widget-categories.php:32 -#: library/classes/widget-categories.php:126 +#: ../library/classes/widget-categories.php:59 +#: ../library/classes/widget-categories.php:163 msgid "Categories" msgstr "" -#: library/classes/widget-categories.php:143 +#: ../library/classes/widget-categories.php:194 msgid "Term Group" msgstr "" -#: library/classes/widget-categories.php:144 +#: ../library/classes/widget-categories.php:195 msgid "Atom" msgstr "" -#: library/classes/widget-categories.php:144 +#: ../library/classes/widget-categories.php:195 msgid "RDF" msgstr "" -#: library/classes/widget-categories.php:144 +#: ../library/classes/widget-categories.php:195 msgid "RSS 2.0" msgstr "" -#: library/classes/widget-categories.php:249 -#: library/classes/widget-pages.php:230 +#: ../library/classes/widget-categories.php:300 +#: ../library/classes/widget-pages.php:281 msgid "Hierarchical?" msgstr "" -#: library/classes/widget-categories.php:253 +#: ../library/classes/widget-categories.php:304 msgid "Use description?" msgstr "" -#: library/classes/widget-categories.php:257 +#: ../library/classes/widget-categories.php:308 msgid "Show last update?" msgstr "" -#: library/classes/widget-categories.php:261 +#: ../library/classes/widget-categories.php:312 msgid "Show count?" msgstr "" -#: library/classes/widget-nav-menu.php:29 +#: ../library/classes/widget-nav-menu.php:46 msgid "An advanced widget that gives you total control over the output of your menus." msgstr "" -#: library/classes/widget-nav-menu.php:31 +#: ../library/classes/widget-nav-menu.php:58 msgid "Navigation Menu" msgstr "" -#: library/classes/widget-nav-menu.php:97 +#: ../library/classes/widget-nav-menu.php:132 msgid "Navigation" msgstr "" -#: library/classes/widget-pages.php:30 +#: ../library/classes/widget-pages.php:41 msgid "An advanced widget that gives you total control over the output of your page links." msgstr "" -#: library/classes/widget-pages.php:118 +#: ../library/classes/widget-pages.php:170 msgid "Author" msgstr "" -#: library/classes/widget-pages.php:118 +#: ../library/classes/widget-pages.php:170 msgid "Date" msgstr "" -#: library/classes/widget-pages.php:118 +#: ../library/classes/widget-pages.php:170 msgid "Menu Order" msgstr "" -#: library/classes/widget-pages.php:118 -#: library/classes/widget-pages.php:119 +#: ../library/classes/widget-pages.php:170 +#: ../library/classes/widget-pages.php:171 msgid "Modified" msgstr "" -#: library/classes/widget-pages.php:118 +#: ../library/classes/widget-pages.php:170 msgid "Title" msgstr "" -#: library/classes/widget-pages.php:119 +#: ../library/classes/widget-pages.php:171 msgid "Created" msgstr "" -#: library/classes/widget-search.php:30 +#: ../library/classes/widget-search.php:47 msgid "An advanced widget that gives you total control over the output of your search form." msgstr "" -#: library/classes/widget-search.php:110 +#: ../library/classes/widget-search.php:158 msgid "Search Label:" msgstr "" -#: library/classes/widget-search.php:114 +#: ../library/classes/widget-search.php:162 msgid "Search Text:" msgstr "" -#: library/classes/widget-search.php:121 +#: ../library/classes/widget-search.php:169 msgid "Search Submit:" msgstr "" -#: library/classes/widget-search.php:126 +#: ../library/classes/widget-search.php:174 msgid "Use theme's <code>searchform.php</code>?" msgstr "" -#: library/classes/widget-tags.php:30 +#: ../library/classes/widget-tags.php:47 msgid "An advanced widget that gives you total control over the output of your tags." msgstr "" -#: library/classes/widget-tags.php:32 -#: library/classes/widget-tags.php:130 +#: ../library/classes/widget-tags.php:59 +#: ../library/classes/widget-tags.php:161 msgid "Tags" msgstr "" -#: library/classes/widget-tags.php:146 +#: ../library/classes/widget-tags.php:188 msgid "View" msgstr "" -#: library/classes/widget-tags.php:147 +#: ../library/classes/widget-tags.php:189 msgid "Flat" msgstr "" -#: library/classes/widget-tags.php:263 +#: ../library/classes/widget-tags.php:305 msgid "Pad counts?" msgstr "" -#: library/extensions/breadcrumb-trail - Copy.php:50 -msgid "Create an Account" +#: ../library/extensions/breadcrumb-trail.php:44 +msgid "Browse:" msgstr "" -#: library/extensions/breadcrumb-trail - Copy.php:52 -msgid "Activate your Account" +#: ../library/extensions/breadcrumb-trail.php:47 +msgid "Home" msgstr "" -#: library/extensions/breadcrumb-trail - Copy.php:56 -#: Copy.php:59 -msgid "Create a Group" +#: ../library/extensions/breadcrumb-trail.php:295 +msgid "g:i a" msgstr "" -#: library/extensions/breadcrumb-trail - Copy.php:63 -msgid "Create a Blog" +#: ../library/extensions/breadcrumb-trail.php:298 +#, php-format +msgid "Minute %1$s" msgstr "" -#: library/extensions/breadcrumb-trail.php:40 -msgid "Browse:" +#: ../library/extensions/breadcrumb-trail.php:298 +msgid "i" msgstr "" -#: library/extensions/breadcrumb-trail.php:43 -msgid "Home" +#: ../library/extensions/breadcrumb-trail.php:301 +msgid "g a" msgstr "" -#: library/extensions/breadcrumb-trail.php:197 -msgid "m" +#: ../library/extensions/breadcrumb-trail.php:312 +#: ../library/extensions/breadcrumb-trail.php:318 +#: ../library/extensions/breadcrumb-trail.php:323 +#: ../library/extensions/breadcrumb-trail.php:328 +#: ../library/extensions/breadcrumb-trail.php:393 +msgid "Y" msgstr "" -#: library/extensions/breadcrumb-trail.php:197 -#: library/extensions/breadcrumb-trail.php:208 +#: ../library/extensions/breadcrumb-trail.php:313 +#: ../library/extensions/breadcrumb-trail.php:324 +#: ../library/extensions/breadcrumb-trail.php:397 msgid "F" msgstr "" -#: library/extensions/breadcrumb-trail.php:198 -msgid "j" +#: ../library/extensions/breadcrumb-trail.php:314 +#: ../library/extensions/breadcrumb-trail.php:401 +msgid "d" msgstr "" -#: library/extensions/breadcrumb-trail.php:203 +#: ../library/extensions/breadcrumb-trail.php:319 #, php-format msgid "Week %1$s" msgstr "" -#: library/extensions/breadcrumb-trail.php:219 -#: library/functions/context.php:369 +#: ../library/extensions/breadcrumb-trail.php:319 +msgid "W" +msgstr "" + +#: ../library/extensions/breadcrumb-trail.php:335 #, php-format msgid "Search results for "%1$s"" msgstr "" -#: library/extensions/breadcrumb-trail.php:223 -#: library/functions/context.php:372 +#: ../library/extensions/breadcrumb-trail.php:339 msgid "404 Not Found" msgstr "" -#: library/extensions/custom-field-series.php:64 +#: ../library/extensions/breadcrumb-trail.php:397 +msgid "F Y" +msgstr "" + +#: ../library/extensions/breadcrumb-trail.php:401 +msgid "F j, Y" +msgstr "" + +#: ../library/extensions/custom-field-series.php:83 msgid "Articles in this series" msgstr "" -#: library/functions/comments.php:147 -msgid "*" +#: ../library/extensions/custom-field-series.php:125 +msgid "Series" msgstr "" -#: library/functions/comments.php:151 -msgid "Email" +#: ../library/extensions/post-stylesheets.php:115 +#, php-format +msgid "%s Stylesheet" +msgstr "" + +#: ../library/extensions/theme-layouts.php:201 +msgid "Default" +msgstr "" + +#: ../library/extensions/theme-layouts.php:202 +msgid "One Column" +msgstr "" + +#: ../library/extensions/theme-layouts.php:203 +msgid "Two Columns, Left" msgstr "" -#: library/functions/comments.php:152 +#: ../library/extensions/theme-layouts.php:204 +msgid "Two Columns, Right" +msgstr "" + +#: ../library/extensions/theme-layouts.php:205 +msgid "Three Columns, Left" +msgstr "" + +#: ../library/extensions/theme-layouts.php:206 +msgid "Three Columns, Right" +msgstr "" + +#: ../library/extensions/theme-layouts.php:207 +msgid "Three Columns, Center" +msgstr "" + +#: ../library/extensions/theme-layouts.php:241 +#: ../library/extensions/theme-layouts.php:344 +msgid "Layout" +msgstr "" + +#: ../library/extensions/theme-layouts.php:272 +msgid "Layout is a theme-specific structure for the single view of the post." +msgstr "" + +#: ../library/functions/comments.php:163 +msgid "*" +msgstr "" + +#: ../library/functions/comments.php:170 msgid "Website" msgstr "" -#: library/functions/comments.php:157 +#: ../library/functions/comments.php:176 msgid "Comment" msgstr "" -#: library/functions/comments.php:158 +#: ../library/functions/comments.php:177 #, php-format msgid "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to post a comment." msgstr "" -#: library/functions/comments.php:159 +#: ../library/functions/comments.php:178 #, php-format msgid "Logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>." msgstr "" -#: library/functions/comments.php:159 +#: ../library/functions/comments.php:178 +#: ../library/functions/shortcodes.php:114 msgid "Log out of this account" msgstr "" -#: library/functions/comments.php:159 +#: ../library/functions/comments.php:178 msgid "Log out »" msgstr "" -#: library/functions/comments.php:164 +#: ../library/functions/comments.php:183 msgid "Leave a Reply" msgstr "" -#: library/functions/comments.php:165 +#: ../library/functions/comments.php:184 #, php-format msgid "Leave a Reply to %s" msgstr "" -#: library/functions/comments.php:166 +#: ../library/functions/comments.php:185 msgid "Click here to cancel reply." msgstr "" -#: library/functions/comments.php:167 -msgid "Submit" +#: ../library/functions/comments.php:186 +msgid "Post Comment" msgstr "" -#: library/functions/context.php:346 -#: library/functions/context.php:352 -#: library/functions/context.php:355 -#: library/functions/context.php:361 -#: library/functions/context.php:364 +#: ../library/functions/context.php:392 +#: ../library/functions/context.php:398 +#: ../library/functions/context.php:401 +#: ../library/functions/context.php:407 +#: ../library/functions/context.php:410 #, php-format msgid "Archive for %1$s" msgstr "" -#: library/functions/context.php:349 +#: ../library/functions/context.php:395 #, php-format msgid "Archive for minute %1$s" msgstr "" -#: library/functions/context.php:358 +#: ../library/functions/context.php:401 +msgid "F jS, Y" +msgstr "" + +#: ../library/functions/context.php:404 #, php-format msgid "Archive for week %1$s of %2$s" msgstr "" -#: library/functions/context.php:376 +#: ../library/functions/context.php:429 #, php-format msgid "%1$s Page %2$s" msgstr "" -#: library/functions/hooks-filters.php:96 -msgid "F Y" -msgstr "" - -#: library/functions/hooks-filters.php:100 +#: ../library/functions/core-seo.php:86 #, php-format msgid "Copyright (c) %1$s" msgstr "" -#: library/functions/hooks-filters.php:113 +#: ../library/functions/core-seo.php:103 +#: ../library/functions/shortcodes.php:193 +#: ../library/functions/shortcodes.php:315 msgid "l, F jS, Y, g:i a" msgstr "" -#: library/functions/hooks-filters.php:273 -msgid "<span class=\"byline-prep byline-prep-author\">By</span> [entry-author] <span class=\"byline-prep byline-prep-published\">on</span> [entry-published] [entry-edit-link before=\"| \"]" +#: ../library/functions/deprecated.php:547 +#, php-format +msgid "<code>%1$s</code> — This function has been removed or replaced by another function." msgstr "" -#: library/functions/hooks-filters.php:293 -msgid "Posted in" +#: ../library/functions/settings.php:70 +#: ../library/functions/settings.php:74 +msgid "Copyright © [the-year] [site-link]." msgstr "" -#: library/functions/hooks-filters.php:293 -msgid "Tagged" +#: ../library/functions/settings.php:70 +msgid "Powered by [wp-link], [theme-link], and [child-link]." msgstr "" -#: library/functions/menus.php:31 -msgid "Primary Menu" +#: ../library/functions/settings.php:74 +msgid "Powered by [wp-link] and [theme-link]." msgstr "" -#: library/functions/shortcodes.php:77 +#: ../library/functions/shortcodes.php:78 msgid "Powered by WordPress, state-of-the-art semantic personal publishing platform" msgstr "" -#: library/functions/shortcodes.php:77 +#: ../library/functions/shortcodes.php:78 msgid "WordPress" msgstr "" -#: library/functions/shortcodes.php:113 +#: ../library/functions/shortcodes.php:114 msgid "Log out" msgstr "" -#: library/functions/shortcodes.php:115 +#: ../library/functions/shortcodes.php:116 msgid "Log into this account" msgstr "" -#: library/functions/shortcodes.php:115 +#: ../library/functions/shortcodes.php:116 msgid "Log in" msgstr "" -#: library/functions/shortcodes.php:128 +#: ../library/functions/shortcodes.php:129 #, php-format msgid "This page loaded in %1$s seconds with %2$s database queries." msgstr "" -#: library/functions/shortcodes.php:179 -#: library/functions/shortcodes.php:368 +#: ../library/functions/shortcodes.php:180 +#: ../library/functions/shortcodes.php:382 #, php-format msgid "Edit %1$s" msgstr "" -#: library/functions/shortcodes.php:206 +#: ../library/functions/shortcodes.php:208 msgid "Leave a response" msgstr "" -#: library/functions/shortcodes.php:206 -msgid "1 Response" +#: ../library/functions/shortcodes.php:208 +#, php-format +msgid "%1$s Response" msgstr "" -#: library/functions/shortcodes.php:206 +#: ../library/functions/shortcodes.php:208 #, php-format msgid "%1$s Responses" msgstr "" -#: library/functions/shortcodes.php:213 -#: library/functions/shortcodes.php:215 -#: library/functions/shortcodes.php:217 +#: ../library/functions/shortcodes.php:215 +#: ../library/functions/shortcodes.php:217 +#: ../library/functions/shortcodes.php:219 #, php-format msgid "Comment on %1$s" msgstr "" -#: library/functions/shortcodes.php:289 +#: ../library/functions/shortcodes.php:278 +msgid "(Untitled)" +msgstr "" + +#: ../library/functions/shortcodes.php:295 msgid "Shortlink" msgstr "" -#: library/functions/shortcodes.php:309 +#: ../library/functions/shortcodes.php:315 #, php-format msgid "%1$s at %2$s" msgstr "" -#: library/functions/shortcodes.php:348 +#: ../library/functions/shortcodes.php:362 #, php-format msgid "Permalink to comment %1$s" msgstr "" -#: library/functions/shortcodes.php:348 +#: ../library/functions/shortcodes.php:362 msgid "Permalink" msgstr "" -#: library/functions/shortcodes.php:386 +#: ../library/functions/shortcodes.php:400 msgid "Reply" msgstr "" -#: library/functions/shortcodes.php:387 +#: ../library/functions/shortcodes.php:401 msgid "Log in to reply." msgstr "" -#: library/functions/widgets.php:52 -msgid "Primary" -msgstr "" - -#: library/functions/widgets.php:52 +#: ../library/functions/sidebars.php:77 msgid "The main (primary) widget area, most often used as a sidebar." msgstr "" -#: library/functions/widgets.php:53 -msgid "Secondary" -msgstr "" - -#: library/functions/widgets.php:53 -msgid "The second most important widget area, most often used as a secondary sidebar" -msgstr "" - -#: library/functions/widgets.php:54 -msgid "Subsidiary" +#: ../library/functions/sidebars.php:81 +msgid "The second most important widget area, most often used as a secondary sidebar." msgstr "" -#: library/functions/widgets.php:54 +#: ../library/functions/sidebars.php:85 msgid "A widget area loaded in the footer of the site." msgstr "" -#: library/functions/widgets.php:57 -msgid "Utility: Before Content" +#: ../library/functions/sidebars.php:89 +msgid "Displayed within the site's header area." msgstr "" -#: library/functions/widgets.php:57 +#: ../library/functions/sidebars.php:93 msgid "Loaded before the page's main content area." msgstr "" -#: library/functions/widgets.php:58 -msgid "Utility: After Content" -msgstr "" - -#: library/functions/widgets.php:58 +#: ../library/functions/sidebars.php:97 msgid "Loaded after the page's main content area." msgstr "" -#: library/functions/widgets.php:59 -msgid "Utility: After Singular" -msgstr "" - -#: library/functions/widgets.php:59 +#: ../library/functions/sidebars.php:101 msgid "Loaded on singular post (page, attachment, etc.) views before the comments area." msgstr "" -#: library/functions/widgets.php:63 -msgid "Widgets Template" -msgstr "" - -#: library/functions/widgets.php:63 -msgid "Used as the content of the Widgets page template." -msgstr "" - -#: library/functions/widgets.php:65 -msgid "404 Template" -msgstr "" - -#: library/functions/widgets.php:65 -msgid "Replaces the default 404 error page content." -msgstr "" - -#: library/legacy/deprecated.php:552 -#, php-format -msgid "<code>%1$s</code> — This function has been removed or replaced by another function." -msgstr "" - diff --git a/wp-content/themes/hybrid/languages/hybrid.pot b/wp-content/themes/hybrid/languages/hybrid.pot index 27aa8711c..156a7245e 100644 --- a/wp-content/themes/hybrid/languages/hybrid.pot +++ b/wp-content/themes/hybrid/languages/hybrid.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Hybrid Theme Framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-06-22 21:29-0600\n" +"POT-Creation-Date: 2011-09-15 14:38-0600\n" "PO-Revision-Date: \n" "Last-Translator: Justin Tadlock <justin@justintadlock.com>\n" "Language-Team: <justin@justintadlock.com>\n" @@ -14,1121 +14,1060 @@ msgstr "" "X-Poedit-KeywordsList: _e;__;esc_attr_e;esc_attr__;esc_html_e;esc_html__\n" "X-Poedit-Basepath: .\n" "X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPath-1: ..\n" -#: 404.php:35 +#: ../404.php:33 msgid "Not Found" msgstr "" -#: 404.php:40 +#: ../404.php:38 #, php-format msgid "You tried going to %1$s, and it doesn't exist. All is not lost! You can search for what you're looking for." msgstr "" -#: archive.php:21 -msgid "Archives" -msgstr "" - -#: archive.php:25 -msgid "You are browsing the site archives." -msgstr "" - -#: archive.php:52 -#: attachment-application.php:52 -#: attachment-audio.php:54 -#: attachment-image.php:57 -#: attachment-text.php:52 -#: attachment-video.php:52 -#: attachment.php:54 -#: date.php:51 -#: day.php:50 -#: home.php:37 -msgid "Apologies, but no results were found." -msgstr "" - -#: attachment-application.php:29 -#: attachment-audio.php:30 -#: attachment-image.php:33 -#: attachment-text.php:29 -#: attachment-video.php:29 -#: attachment.php:31 -#: home.php:24 +#: ../attachment.php:40 #, php-format -msgid "Continue reading %1$s" +msgid "Download "%1$s"" msgstr "" -#: attachment-application.php:32 -#: attachment-audio.php:34 -#: attachment-text.php:32 -#: attachment-video.php:32 -#: attachment.php:34 +#: ../attachment.php:45 +#: ../index.php:26 #, php-format -msgid "Download "%1$s"" +msgid "Continue reading %1$s" msgstr "" -#: attachment-application.php:35 -#: attachment-audio.php:37 -#: attachment-image.php:35 -#: attachment-text.php:35 -#: attachment-video.php:35 -#: attachment.php:37 -#: home.php:25 +#: ../attachment.php:47 +#: ../index.php:27 +#: ../page-archives.php:51 +#: ../page-authors.php:56 +#: ../page-biography.php:65 msgid "Pages:" msgstr "" -#: comment.php:22 +#: ../comment.php:22 msgid "Your comment is awaiting moderation." msgstr "" -#: comments.php:12 +#: ../comments.php:14 msgid "Please do not load this page directly. Thanks!" msgstr "" -#: comments.php:19 -msgid "Password Protected" -msgstr "" - -#: comments.php:22 -msgid "Enter the password to view comments." -msgstr "" - -#: comments.php:33 +#: ../comments.php:27 #, php-format msgid "No responses to %1$s" msgstr "" -#: comments.php:33 +#: ../comments.php:27 #, php-format msgid "One response to %1$s" msgstr "" -#: comments.php:33 +#: ../comments.php:27 #, php-format msgid "%1$s responses to %2$s" msgstr "" -#: comments.php:56 +#: ../comments.php:50 #, php-format msgid "Comments are closed, but <a href=\"%1$s\" title=\"Trackback URL for this post\">trackbacks</a> and pingbacks are open." msgstr "" -#: comments.php:62 -msgid "Comments are closed." +#: ../functions.php:137 +msgid "Widgets Template" msgstr "" -#: date.php:20 -#: date.php:24 -#: day.php:19 -#: day.php:23 -msgid "F jS, Y" +#: ../functions.php:138 +msgid "Used as the content of the Widgets page template." msgstr "" -#: date.php:24 -#: day.php:23 -#, php-format -msgid "You are browsing the archive for %1$s." +#: ../functions.php:150 +msgid "404 Template" msgstr "" -#: hour.php:18 -#: hour.php:22 -msgid "g a" +#: ../functions.php:151 +msgid "Replaces the default 404 error page content." msgstr "" -#: minute.php:18 -#: minute.php:23 -msgid "g:i a" +#: ../functions.php:227 +msgid "By [entry-author] on [entry-published] [entry-edit-link before=\" | \"]" msgstr "" -#: minute.php:18 -#, php-format -msgid "Minute %1$s" +#: ../functions.php:242 +msgid "[entry-terms taxonomy=\"category\" before=\"Posted in \"] [entry-terms taxonomy=\"post_tag\" before=\"| Tagged \"] [entry-comments-link before=\"| \"]" msgstr "" -#: minute.php:18 -#: minute.php:25 -msgid "i" +#: ../loop-error.php:16 +msgid "Apologies, but no results were found." msgstr "" -#: minute.php:25 +#: ../loop-meta.php:83 #, php-format -msgid "You are browsing the archive for minute %1$s." +msgid "You are browsing the search results for "%1$s"" +msgstr "" + +#: ../loop-meta.php:92 +msgid "Archives by date" +msgstr "" + +#: ../loop-meta.php:96 +msgid "You are browsing the site archives by date." +msgstr "" + +#: ../loop-meta.php:120 +msgid "Archives" msgstr "" -#: navigation-links.php:17 +#: ../loop-meta.php:124 +msgid "You are browsing the site archives." +msgstr "" + +#: ../loop-nav.php:17 msgid "« Return to entry" msgstr "" -#: navigation-links.php:23 -#: navigation-links.php:29 +#: ../loop-nav.php:23 +#: ../loop-nav.php:31 msgid "« Previous" msgstr "" -#: navigation-links.php:24 -#: navigation-links.php:29 +#: ../loop-nav.php:24 +#: ../loop-nav.php:31 msgid "Next »" msgstr "" -#: page-archives.php:43 +#: ../page-archives.php:37 msgid "Archives by category" msgstr "" -#: page-archives.php:46 -#: page-categories.php:30 +#: ../page-archives.php:40 msgid "RSS" msgstr "" -#: page-archives.php:49 +#: ../page-archives.php:43 msgid "Archives by month" msgstr "" -#: page-biography.php:42 +#: ../page-biography.php:41 msgid "Nickname:" msgstr "" -#: page-biography.php:46 +#: ../page-biography.php:45 msgid "Website:" msgstr "" -#: page-biography.php:50 +#: ../page-biography.php:49 msgid "AIM:" msgstr "" -#: page-biography.php:50 -#: page-biography.php:54 -#: page-biography.php:58 +#: ../page-biography.php:49 +#: ../page-biography.php:53 +#: ../page-biography.php:57 #, php-format msgid "IM with %1$s" msgstr "" -#: page-biography.php:54 +#: ../page-biography.php:53 msgid "Jabber:" msgstr "" -#: page-biography.php:58 +#: ../page-biography.php:57 msgid "Yahoo:" msgstr "" -#: page-logged-in.php:51 +#: ../page-logged-in.php:52 #, php-format msgid "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to view the content of this page." msgstr "" -#: page-logged-in.php:53 +#: ../page-logged-in.php:54 #, php-format msgid "If you're not currently a member, please take a moment to <a href=\"%1$s\" title=\"Register\">register</a>." msgstr "" -#: page-sitemap.php:29 +#: ../page-sitemap.php:30 msgid "Feeds" msgstr "" -#: page-sitemap.php:32 +#: ../page-sitemap.php:33 msgid "RDF/RSS 1.0 feed" msgstr "" -#: page-sitemap.php:32 +#: ../page-sitemap.php:33 msgid "<acronym title=\"Resource Description Framework\">RDF</acronym> <acronym title=\"Really Simple Syndication\">RSS</acronym> 1.0 feed" msgstr "" -#: page-sitemap.php:33 +#: ../page-sitemap.php:34 msgid "RSS 0.92 feed" msgstr "" -#: page-sitemap.php:33 +#: ../page-sitemap.php:34 msgid "<acronym title=\"Really Simple Syndication\">RSS</acronym> 0.92 feed" msgstr "" -#: page-sitemap.php:34 +#: ../page-sitemap.php:35 msgid "RSS 2.0 feed" msgstr "" -#: page-sitemap.php:34 +#: ../page-sitemap.php:35 msgid "<acronym title=\"Really Simple Syndication\">RSS</acronym> 2.0 feed" msgstr "" -#: page-sitemap.php:35 +#: ../page-sitemap.php:36 msgid "Atom feed" msgstr "" -#: page-sitemap.php:36 +#: ../page-sitemap.php:37 msgid "Comments RSS 2.0 feed" msgstr "" -#: page-sitemap.php:36 +#: ../page-sitemap.php:37 msgid "Comments <acronym title=\"Really Simple Syndication\">RSS</acronym> 2.0 feed" msgstr "" -#: page-sitemap.php:39 +#: ../page-sitemap.php:40 msgid "Pages" msgstr "" -#: page-sitemap.php:45 +#: ../page-sitemap.php:46 msgid "Category Archives" msgstr "" -#: page-sitemap.php:51 +#: ../page-sitemap.php:52 msgid "Author Archives" msgstr "" -#: page-sitemap.php:57 +#: ../page-sitemap.php:58 msgid "Yearly Archives" msgstr "" -#: page-sitemap.php:63 +#: ../page-sitemap.php:64 msgid "Monthly Archives" msgstr "" -#: page-sitemap.php:69 +#: ../page-sitemap.php:70 msgid "Weekly Archives" msgstr "" -#: page-sitemap.php:75 +#: ../page-sitemap.php:76 msgid "Daily Archives" msgstr "" -#: page-sitemap.php:81 +#: ../page-sitemap.php:82 msgid "Tag Archives" msgstr "" -#: page-sitemap.php:87 +#: ../page-sitemap.php:88 msgid "Blog Posts" msgstr "" -#: page-widgets.php:25 +#: ../page-widgets.php:26 msgid "Edit" msgstr "" -#: search.php:23 -#, php-format -msgid "You are browsing the search results for "%1$s"" -msgstr "" - -#: searchform.php:18 +#: ../searchform.php:18 msgid "Search this site..." msgstr "" -#: searchform.php:19 +#: ../searchform.php:19 msgid "Search" msgstr "" -#: week.php:19 +#: ../library/admin/meta-box-post-seo.php:30 #, php-format -msgid "Week %1$s of %2$s" +msgid "%s SEO" msgstr "" -#: week.php:19 -#: week.php:23 -msgid "W" +#: ../library/admin/meta-box-post-seo.php:47 +msgid "Document Title:" msgstr "" -#: week.php:19 -#: week.php:23 -#: year.php:18 -#: year.php:22 -msgid "Y" +#: ../library/admin/meta-box-post-seo.php:53 +msgid "Meta Description:" msgstr "" -#: week.php:23 -#, php-format -msgid "You are browsing the archive for week %1$s of %2$s." +#: ../library/admin/meta-box-post-seo.php:59 +msgid "Meta Keywords:" msgstr "" -#: library/admin/meta-box.php:33 -#: library/admin/settings-page.php:35 +#: ../library/admin/meta-box-post-template.php:34 #, php-format -msgid "%1$s Settings" -msgstr "" - -#: library/admin/meta-box.php:55 -#: library/classes/widget-archives.php:129 -#: library/classes/widget-authors.php:134 -#: library/classes/widget-bookmarks.php:150 -msgid "Title:" -msgstr "" - -#: library/admin/meta-box.php:56 -#: library/admin/settings-page.php:209 -msgid "Description:" -msgstr "" - -#: library/admin/meta-box.php:57 -msgid "Keywords:" +msgid "%s Template" msgstr "" -#: library/admin/meta-box.php:62 -msgid "Series:" +#: ../library/admin/meta-box-post-template.php:66 +msgid "No templates exist for this post type." msgstr "" -#: library/admin/meta-box.php:65 -msgid "Thumbnail:" -msgstr "" - -#: library/admin/meta-box.php:75 -#: library/admin/meta-box.php:147 -msgid "Template:" -msgstr "" - -#: library/admin/meta-box.php:81 -msgid "Layout:" -msgstr "" - -#: library/admin/settings-page.php:35 -#: library/admin/settings-page.php:305 +#: ../library/admin/meta-box-theme-about.php:27 +#: ../library/admin/meta-box-theme-about.php:32 #, php-format -msgid "%1$s Theme Settings" -msgstr "" - -#: library/admin/settings-page.php:67 -#: library/admin/settings-page.php:72 -msgid "Copyright © [the-year] [site-link]." +msgid "About %1$s" msgstr "" -#: library/admin/settings-page.php:67 -msgid "Powered by [wp-link] and [theme-link]." +#: ../library/admin/meta-box-theme-about.php:62 +msgid "Theme:" msgstr "" -#: library/admin/settings-page.php:72 -msgid "Powered by [wp-link], [theme-link], and [child-link]." +#: ../library/admin/meta-box-theme-about.php:70 +msgid "Version:" msgstr "" -#: library/admin/settings-page.php:162 -#: library/admin/settings-page.php:167 -#, php-format -msgid "About %1$s" +#: ../library/admin/meta-box-theme-about.php:78 +msgid "Author:" msgstr "" -#: library/admin/settings-page.php:171 -msgid "General settings" +#: ../library/admin/meta-box-theme-about.php:86 +msgid "Description:" msgstr "" -#: library/admin/settings-page.php:174 +#: ../library/admin/meta-box-theme-footer.php:24 msgid "Footer settings" msgstr "" -#: library/admin/settings-page.php:201 -msgid "Theme:" +#: ../library/admin/meta-box-theme-footer.php:37 +msgid "You can add custom <acronym title=\"Hypertext Markup Language\">HTML</acronym> and/or shortcodes, which will be automatically inserted into your theme." msgstr "" -#: library/admin/settings-page.php:205 -msgid "Author:" +#: ../library/admin/meta-box-theme-footer.php:46 +#, php-format +msgid "Shortcodes: %s" msgstr "" -#: library/admin/settings-page.php:227 -msgid "Stylesheets:" +#: ../library/admin/theme-settings.php:43 +#: ../library/admin/theme-settings.php:162 +#, php-format +msgid "%1$s Theme Settings" msgstr "" -#: library/admin/settings-page.php:230 -msgid "Select this to have the theme automatically include a print stylesheet." +#: ../library/admin/theme-settings.php:44 +msgid "Theme Settings" msgstr "" -#: library/admin/settings-page.php:234 -msgid "JavaScript:" +#: ../library/admin/theme-settings.php:164 +msgid "Settings saved." msgstr "" -#: library/admin/settings-page.php:237 -msgid "Include the drop-down menu JavaScript." +#: ../library/admin/theme-settings.php:180 +msgid "Update Settings" msgstr "" -#: library/admin/settings-page.php:241 -msgid "Menus:" +#: ../library/admin/theme-settings.php:232 +msgid "Documentation" msgstr "" -#: library/admin/settings-page.php:244 -msgid "Use the WordPress 3.0+ menu system? Child themes built prior to <em>Hybrid</em> 0.8 may need to be updated to use this." +#: ../library/admin/theme-settings.php:236 +msgid "Support" msgstr "" -#: library/admin/settings-page.php:248 -msgid "Feeds:" +#: ../library/classes/widget-archives.php:38 +msgid "An advanced widget that gives you total control over the output of your archives." msgstr "" -#: library/admin/settings-page.php:251 -msgid "If you have an alternate feed address, such as one from <a href=\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, you can enter it here to have the theme redirect your feed links." +#: ../library/classes/widget-archives.php:89 +msgid "Select Year" msgstr "" -#: library/admin/settings-page.php:253 -msgid "Direct category, tag, search, and author feeds to your alternate feed address?" +#: ../library/classes/widget-archives.php:92 +msgid "Select Month" msgstr "" -#: library/admin/settings-page.php:257 -msgid "Search Engine Optimization" +#: ../library/classes/widget-archives.php:95 +msgid "Select Week" msgstr "" -#: library/admin/settings-page.php:257 -msgid "SEO:" +#: ../library/classes/widget-archives.php:98 +msgid "Select Day" msgstr "" -#: library/admin/settings-page.php:260 -msgid "Are you using an <acronym title=\"Search Engine Optimization\">SEO</acronym> plugin? Select this to disable the theme's meta and indexing features." +#: ../library/classes/widget-archives.php:101 +msgid "Select Post" msgstr "" -#: library/admin/settings-page.php:278 -msgid "Footer Insert:" +#: ../library/classes/widget-archives.php:163 +msgid "Alphabetical" msgstr "" -#: library/admin/settings-page.php:280 -msgid "You can add custom <acronym title=\"Hypertext Markup Language\">HTML</acronym> and/or shortcodes, which will be automatically inserted into your theme." +#: ../library/classes/widget-archives.php:163 +msgid "Daily" msgstr "" -#: library/admin/settings-page.php:282 -msgid "Shortcodes:" +#: ../library/classes/widget-archives.php:163 +msgid "Monthly" msgstr "" -#: library/admin/settings-page.php:307 -msgid "Settings saved." +#: ../library/classes/widget-archives.php:163 +msgid "Post By Post" msgstr "" -#: library/admin/settings-page.php:324 -msgid "Update Settings" +#: ../library/classes/widget-archives.php:163 +msgid "Weekly" msgstr "" -#: library/classes/widget-archives.php:30 -msgid "An advanced widget that gives you total control over the output of your archives." +#: ../library/classes/widget-archives.php:163 +msgid "Yearly" msgstr "" -#: library/classes/widget-archives.php:62 -msgid "Select Year" +#: ../library/classes/widget-archives.php:166 +msgid "Custom" msgstr "" -#: library/classes/widget-archives.php:64 -msgid "Select Month" +#: ../library/classes/widget-archives.php:166 +msgid "HTML" msgstr "" -#: library/classes/widget-archives.php:66 -msgid "Select Week" +#: ../library/classes/widget-archives.php:166 +msgid "Option" msgstr "" -#: library/classes/widget-archives.php:68 -msgid "Select Day" +#: ../library/classes/widget-archives.php:171 +#: ../library/classes/widget-authors.php:165 +msgid "Title:" msgstr "" -#: library/classes/widget-archives.php:70 -msgid "Select Post" +#: ../library/classes/widget-archives.php:207 +#: ../library/classes/widget-authors.php:213 +msgid "Show post count?" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Alphabetical" +#: ../library/classes/widget-authors.php:47 +msgid "An advanced widget that gives you total control over the output of your author lists." msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Daily" +#: ../library/classes/widget-authors.php:59 +#: ../library/classes/widget-authors.php:141 +msgid "Authors" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Monthly" +#: ../library/classes/widget-authors.php:158 +msgid "Ascending" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Post By Post" +#: ../library/classes/widget-authors.php:158 +msgid "Descending" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Weekly" +#: ../library/classes/widget-authors.php:159 +msgid "Display Name" msgstr "" -#: library/classes/widget-archives.php:122 -msgid "Yearly" +#: ../library/classes/widget-authors.php:159 +msgid "Email" msgstr "" -#: library/classes/widget-archives.php:123 -msgid "Custom" +#: ../library/classes/widget-authors.php:159 +msgid "ID" msgstr "" -#: library/classes/widget-archives.php:123 -msgid "HTML" +#: ../library/classes/widget-authors.php:159 +msgid "Nice Name" msgstr "" -#: library/classes/widget-archives.php:123 -msgid "Option" +#: ../library/classes/widget-authors.php:159 +msgid "Post Count" msgstr "" -#: library/classes/widget-archives.php:165 -#: library/classes/widget-authors.php:162 -msgid "Show post count?" +#: ../library/classes/widget-authors.php:159 +msgid "Registered" msgstr "" -#: library/classes/widget-authors.php:30 -msgid "An advanced widget that gives you total control over the output of your author lists." +#: ../library/classes/widget-authors.php:159 +msgid "URL" msgstr "" -#: library/classes/widget-authors.php:32 -#: library/classes/widget-authors.php:122 -msgid "Authors" +#: ../library/classes/widget-authors.php:159 +msgid "Login" msgstr "" -#: library/classes/widget-authors.php:148 +#: ../library/classes/widget-authors.php:191 msgid "List" msgstr "" -#: library/classes/widget-authors.php:148 +#: ../library/classes/widget-authors.php:191 msgid "None" msgstr "" -#: library/classes/widget-authors.php:158 +#: ../library/classes/widget-authors.php:209 msgid "<acronym title=\"Hypertext Markup Language\">HTML</acronym>?" msgstr "" -#: library/classes/widget-authors.php:166 +#: ../library/classes/widget-authors.php:217 msgid "Exclude admin?" msgstr "" -#: library/classes/widget-authors.php:170 +#: ../library/classes/widget-authors.php:221 msgid "Show full name?" msgstr "" -#: library/classes/widget-authors.php:174 +#: ../library/classes/widget-authors.php:225 msgid "Hide empty?" msgstr "" -#: library/classes/widget-bookmarks.php:30 +#: ../library/classes/widget-bookmarks.php:47 msgid "An advanced widget that gives you total control over the output of your bookmarks (links)." msgstr "" -#: library/classes/widget-bookmarks.php:32 -#: library/classes/widget-bookmarks.php:124 +#: ../library/classes/widget-bookmarks.php:59 +#: ../library/classes/widget-bookmarks.php:158 msgid "Bookmarks" msgstr "" -#: library/classes/widget-bookmarks.php:141 -#: library/classes/widget-bookmarks.php:143 -msgid "Ascending" -msgstr "" - -#: library/classes/widget-bookmarks.php:141 -#: library/classes/widget-bookmarks.php:143 -msgid "Descending" -msgstr "" - -#: library/classes/widget-bookmarks.php:142 +#: ../library/classes/widget-bookmarks.php:189 +#: ../library/classes/widget-categories.php:194 +#: ../library/classes/widget-tags.php:191 msgid "Count" msgstr "" -#: library/classes/widget-bookmarks.php:142 -#: library/classes/widget-bookmarks.php:144 -msgid "ID" -msgstr "" - -#: library/classes/widget-bookmarks.php:142 -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:189 +#: ../library/classes/widget-bookmarks.php:191 +#: ../library/classes/widget-categories.php:194 +#: ../library/classes/widget-tags.php:191 msgid "Name" msgstr "" -#: library/classes/widget-bookmarks.php:142 +#: ../library/classes/widget-bookmarks.php:189 +#: ../library/classes/widget-categories.php:194 +#: ../library/classes/widget-pages.php:170 msgid "Slug" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Description" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Length" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Notes" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Owner" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 +#: ../library/classes/widget-tags.php:190 msgid "Random" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Rating" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Rel" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Target" msgstr "" -#: library/classes/widget-bookmarks.php:144 +#: ../library/classes/widget-bookmarks.php:191 msgid "Updated" msgstr "" -#: library/classes/widget-bookmarks.php:144 -msgid "URL" -msgstr "" - -#: library/classes/widget-bookmarks.php:252 +#: ../library/classes/widget-bookmarks.php:299 msgid "Categorize?" msgstr "" -#: library/classes/widget-bookmarks.php:256 +#: ../library/classes/widget-bookmarks.php:303 msgid "Show description?" msgstr "" -#: library/classes/widget-bookmarks.php:260 +#: ../library/classes/widget-bookmarks.php:307 msgid "Hide invisible?" msgstr "" -#: library/classes/widget-bookmarks.php:264 +#: ../library/classes/widget-bookmarks.php:311 msgid "Show rating?" msgstr "" -#: library/classes/widget-bookmarks.php:268 +#: ../library/classes/widget-bookmarks.php:315 msgid "Show updated?" msgstr "" -#: library/classes/widget-bookmarks.php:272 +#: ../library/classes/widget-bookmarks.php:319 msgid "Show images?" msgstr "" -#: library/classes/widget-bookmarks.php:276 +#: ../library/classes/widget-bookmarks.php:323 msgid "Show name?" msgstr "" -#: library/classes/widget-bookmarks.php:280 +#: ../library/classes/widget-bookmarks.php:327 msgid "Show private?" msgstr "" -#: library/classes/widget-calendar.php:30 +#: ../library/classes/widget-calendar.php:47 msgid "An advanced widget that gives you total control over the output of your calendar." msgstr "" -#: library/classes/widget-calendar.php:32 -#: library/classes/widget-calendar.php:79 +#: ../library/classes/widget-calendar.php:59 +#: ../library/classes/widget-calendar.php:114 msgid "Calendar" msgstr "" -#: library/classes/widget-calendar.php:91 +#: ../library/classes/widget-calendar.php:128 msgid "One-letter abbreviation?" msgstr "" -#: library/classes/widget-categories.php:30 +#: ../library/classes/widget-categories.php:47 msgid "An advanced widget that gives you total control over the output of your category links." msgstr "" -#: library/classes/widget-categories.php:32 -#: library/classes/widget-categories.php:126 +#: ../library/classes/widget-categories.php:59 +#: ../library/classes/widget-categories.php:163 msgid "Categories" msgstr "" -#: library/classes/widget-categories.php:143 +#: ../library/classes/widget-categories.php:194 msgid "Term Group" msgstr "" -#: library/classes/widget-categories.php:144 +#: ../library/classes/widget-categories.php:195 msgid "Atom" msgstr "" -#: library/classes/widget-categories.php:144 +#: ../library/classes/widget-categories.php:195 msgid "RDF" msgstr "" -#: library/classes/widget-categories.php:144 +#: ../library/classes/widget-categories.php:195 msgid "RSS 2.0" msgstr "" -#: library/classes/widget-categories.php:249 -#: library/classes/widget-pages.php:230 +#: ../library/classes/widget-categories.php:300 +#: ../library/classes/widget-pages.php:281 msgid "Hierarchical?" msgstr "" -#: library/classes/widget-categories.php:253 +#: ../library/classes/widget-categories.php:304 msgid "Use description?" msgstr "" -#: library/classes/widget-categories.php:257 +#: ../library/classes/widget-categories.php:308 msgid "Show last update?" msgstr "" -#: library/classes/widget-categories.php:261 +#: ../library/classes/widget-categories.php:312 msgid "Show count?" msgstr "" -#: library/classes/widget-nav-menu.php:29 +#: ../library/classes/widget-nav-menu.php:46 msgid "An advanced widget that gives you total control over the output of your menus." msgstr "" -#: library/classes/widget-nav-menu.php:31 +#: ../library/classes/widget-nav-menu.php:58 msgid "Navigation Menu" msgstr "" -#: library/classes/widget-nav-menu.php:97 +#: ../library/classes/widget-nav-menu.php:132 msgid "Navigation" msgstr "" -#: library/classes/widget-pages.php:30 +#: ../library/classes/widget-pages.php:41 msgid "An advanced widget that gives you total control over the output of your page links." msgstr "" -#: library/classes/widget-pages.php:118 +#: ../library/classes/widget-pages.php:170 msgid "Author" msgstr "" -#: library/classes/widget-pages.php:118 +#: ../library/classes/widget-pages.php:170 msgid "Date" msgstr "" -#: library/classes/widget-pages.php:118 +#: ../library/classes/widget-pages.php:170 msgid "Menu Order" msgstr "" -#: library/classes/widget-pages.php:118 -#: library/classes/widget-pages.php:119 +#: ../library/classes/widget-pages.php:170 +#: ../library/classes/widget-pages.php:171 msgid "Modified" msgstr "" -#: library/classes/widget-pages.php:118 +#: ../library/classes/widget-pages.php:170 msgid "Title" msgstr "" -#: library/classes/widget-pages.php:119 +#: ../library/classes/widget-pages.php:171 msgid "Created" msgstr "" -#: library/classes/widget-search.php:30 +#: ../library/classes/widget-search.php:47 msgid "An advanced widget that gives you total control over the output of your search form." msgstr "" -#: library/classes/widget-search.php:110 +#: ../library/classes/widget-search.php:158 msgid "Search Label:" msgstr "" -#: library/classes/widget-search.php:114 +#: ../library/classes/widget-search.php:162 msgid "Search Text:" msgstr "" -#: library/classes/widget-search.php:121 +#: ../library/classes/widget-search.php:169 msgid "Search Submit:" msgstr "" -#: library/classes/widget-search.php:126 +#: ../library/classes/widget-search.php:174 msgid "Use theme's <code>searchform.php</code>?" msgstr "" -#: library/classes/widget-tags.php:30 +#: ../library/classes/widget-tags.php:47 msgid "An advanced widget that gives you total control over the output of your tags." msgstr "" -#: library/classes/widget-tags.php:32 -#: library/classes/widget-tags.php:130 +#: ../library/classes/widget-tags.php:59 +#: ../library/classes/widget-tags.php:161 msgid "Tags" msgstr "" -#: library/classes/widget-tags.php:146 +#: ../library/classes/widget-tags.php:188 msgid "View" msgstr "" -#: library/classes/widget-tags.php:147 +#: ../library/classes/widget-tags.php:189 msgid "Flat" msgstr "" -#: library/classes/widget-tags.php:263 +#: ../library/classes/widget-tags.php:305 msgid "Pad counts?" msgstr "" -#: library/extensions/breadcrumb-trail - Copy.php:50 -msgid "Create an Account" +#: ../library/extensions/breadcrumb-trail.php:44 +msgid "Browse:" msgstr "" -#: library/extensions/breadcrumb-trail - Copy.php:52 -msgid "Activate your Account" +#: ../library/extensions/breadcrumb-trail.php:47 +msgid "Home" msgstr "" -#: library/extensions/breadcrumb-trail - Copy.php:56 -#: Copy.php:59 -msgid "Create a Group" +#: ../library/extensions/breadcrumb-trail.php:295 +msgid "g:i a" msgstr "" -#: library/extensions/breadcrumb-trail - Copy.php:63 -msgid "Create a Blog" +#: ../library/extensions/breadcrumb-trail.php:298 +#, php-format +msgid "Minute %1$s" msgstr "" -#: library/extensions/breadcrumb-trail.php:40 -msgid "Browse:" +#: ../library/extensions/breadcrumb-trail.php:298 +msgid "i" msgstr "" -#: library/extensions/breadcrumb-trail.php:43 -msgid "Home" +#: ../library/extensions/breadcrumb-trail.php:301 +msgid "g a" msgstr "" -#: library/extensions/breadcrumb-trail.php:197 -msgid "m" +#: ../library/extensions/breadcrumb-trail.php:312 +#: ../library/extensions/breadcrumb-trail.php:318 +#: ../library/extensions/breadcrumb-trail.php:323 +#: ../library/extensions/breadcrumb-trail.php:328 +#: ../library/extensions/breadcrumb-trail.php:393 +msgid "Y" msgstr "" -#: library/extensions/breadcrumb-trail.php:197 -#: library/extensions/breadcrumb-trail.php:208 +#: ../library/extensions/breadcrumb-trail.php:313 +#: ../library/extensions/breadcrumb-trail.php:324 +#: ../library/extensions/breadcrumb-trail.php:397 msgid "F" msgstr "" -#: library/extensions/breadcrumb-trail.php:198 -msgid "j" +#: ../library/extensions/breadcrumb-trail.php:314 +#: ../library/extensions/breadcrumb-trail.php:401 +msgid "d" msgstr "" -#: library/extensions/breadcrumb-trail.php:203 +#: ../library/extensions/breadcrumb-trail.php:319 #, php-format msgid "Week %1$s" msgstr "" -#: library/extensions/breadcrumb-trail.php:219 -#: library/functions/context.php:369 +#: ../library/extensions/breadcrumb-trail.php:319 +msgid "W" +msgstr "" + +#: ../library/extensions/breadcrumb-trail.php:335 #, php-format msgid "Search results for "%1$s"" msgstr "" -#: library/extensions/breadcrumb-trail.php:223 -#: library/functions/context.php:372 +#: ../library/extensions/breadcrumb-trail.php:339 msgid "404 Not Found" msgstr "" -#: library/extensions/custom-field-series.php:64 +#: ../library/extensions/breadcrumb-trail.php:397 +msgid "F Y" +msgstr "" + +#: ../library/extensions/breadcrumb-trail.php:401 +msgid "F j, Y" +msgstr "" + +#: ../library/extensions/custom-field-series.php:83 msgid "Articles in this series" msgstr "" -#: library/functions/comments.php:147 -msgid "*" +#: ../library/extensions/custom-field-series.php:125 +msgid "Series" msgstr "" -#: library/functions/comments.php:151 -msgid "Email" +#: ../library/extensions/post-stylesheets.php:115 +#, php-format +msgid "%s Stylesheet" +msgstr "" + +#: ../library/extensions/theme-layouts.php:201 +msgid "Default" +msgstr "" + +#: ../library/extensions/theme-layouts.php:202 +msgid "One Column" +msgstr "" + +#: ../library/extensions/theme-layouts.php:203 +msgid "Two Columns, Left" msgstr "" -#: library/functions/comments.php:152 +#: ../library/extensions/theme-layouts.php:204 +msgid "Two Columns, Right" +msgstr "" + +#: ../library/extensions/theme-layouts.php:205 +msgid "Three Columns, Left" +msgstr "" + +#: ../library/extensions/theme-layouts.php:206 +msgid "Three Columns, Right" +msgstr "" + +#: ../library/extensions/theme-layouts.php:207 +msgid "Three Columns, Center" +msgstr "" + +#: ../library/extensions/theme-layouts.php:241 +#: ../library/extensions/theme-layouts.php:344 +msgid "Layout" +msgstr "" + +#: ../library/extensions/theme-layouts.php:272 +msgid "Layout is a theme-specific structure for the single view of the post." +msgstr "" + +#: ../library/functions/comments.php:163 +msgid "*" +msgstr "" + +#: ../library/functions/comments.php:170 msgid "Website" msgstr "" -#: library/functions/comments.php:157 +#: ../library/functions/comments.php:176 msgid "Comment" msgstr "" -#: library/functions/comments.php:158 +#: ../library/functions/comments.php:177 #, php-format msgid "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to post a comment." msgstr "" -#: library/functions/comments.php:159 +#: ../library/functions/comments.php:178 #, php-format msgid "Logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>." msgstr "" -#: library/functions/comments.php:159 +#: ../library/functions/comments.php:178 +#: ../library/functions/shortcodes.php:114 msgid "Log out of this account" msgstr "" -#: library/functions/comments.php:159 +#: ../library/functions/comments.php:178 msgid "Log out »" msgstr "" -#: library/functions/comments.php:164 +#: ../library/functions/comments.php:183 msgid "Leave a Reply" msgstr "" -#: library/functions/comments.php:165 +#: ../library/functions/comments.php:184 #, php-format msgid "Leave a Reply to %s" msgstr "" -#: library/functions/comments.php:166 +#: ../library/functions/comments.php:185 msgid "Click here to cancel reply." msgstr "" -#: library/functions/comments.php:167 -msgid "Submit" +#: ../library/functions/comments.php:186 +msgid "Post Comment" msgstr "" -#: library/functions/context.php:346 -#: library/functions/context.php:352 -#: library/functions/context.php:355 -#: library/functions/context.php:361 -#: library/functions/context.php:364 +#: ../library/functions/context.php:392 +#: ../library/functions/context.php:398 +#: ../library/functions/context.php:401 +#: ../library/functions/context.php:407 +#: ../library/functions/context.php:410 #, php-format msgid "Archive for %1$s" msgstr "" -#: library/functions/context.php:349 +#: ../library/functions/context.php:395 #, php-format msgid "Archive for minute %1$s" msgstr "" -#: library/functions/context.php:358 +#: ../library/functions/context.php:401 +msgid "F jS, Y" +msgstr "" + +#: ../library/functions/context.php:404 #, php-format msgid "Archive for week %1$s of %2$s" msgstr "" -#: library/functions/context.php:376 +#: ../library/functions/context.php:429 #, php-format msgid "%1$s Page %2$s" msgstr "" -#: library/functions/hooks-filters.php:96 -msgid "F Y" -msgstr "" - -#: library/functions/hooks-filters.php:100 +#: ../library/functions/core-seo.php:86 #, php-format msgid "Copyright (c) %1$s" msgstr "" -#: library/functions/hooks-filters.php:113 +#: ../library/functions/core-seo.php:103 +#: ../library/functions/shortcodes.php:193 +#: ../library/functions/shortcodes.php:315 msgid "l, F jS, Y, g:i a" msgstr "" -#: library/functions/hooks-filters.php:273 -msgid "<span class=\"byline-prep byline-prep-author\">By</span> [entry-author] <span class=\"byline-prep byline-prep-published\">on</span> [entry-published] [entry-edit-link before=\"| \"]" +#: ../library/functions/deprecated.php:547 +#, php-format +msgid "<code>%1$s</code> — This function has been removed or replaced by another function." msgstr "" -#: library/functions/hooks-filters.php:293 -msgid "Posted in" +#: ../library/functions/settings.php:70 +#: ../library/functions/settings.php:74 +msgid "Copyright © [the-year] [site-link]." msgstr "" -#: library/functions/hooks-filters.php:293 -msgid "Tagged" +#: ../library/functions/settings.php:70 +msgid "Powered by [wp-link], [theme-link], and [child-link]." msgstr "" -#: library/functions/menus.php:31 -msgid "Primary Menu" +#: ../library/functions/settings.php:74 +msgid "Powered by [wp-link] and [theme-link]." msgstr "" -#: library/functions/shortcodes.php:77 +#: ../library/functions/shortcodes.php:78 msgid "Powered by WordPress, state-of-the-art semantic personal publishing platform" msgstr "" -#: library/functions/shortcodes.php:77 +#: ../library/functions/shortcodes.php:78 msgid "WordPress" msgstr "" -#: library/functions/shortcodes.php:113 +#: ../library/functions/shortcodes.php:114 msgid "Log out" msgstr "" -#: library/functions/shortcodes.php:115 +#: ../library/functions/shortcodes.php:116 msgid "Log into this account" msgstr "" -#: library/functions/shortcodes.php:115 +#: ../library/functions/shortcodes.php:116 msgid "Log in" msgstr "" -#: library/functions/shortcodes.php:128 +#: ../library/functions/shortcodes.php:129 #, php-format msgid "This page loaded in %1$s seconds with %2$s database queries." msgstr "" -#: library/functions/shortcodes.php:179 -#: library/functions/shortcodes.php:368 +#: ../library/functions/shortcodes.php:180 +#: ../library/functions/shortcodes.php:382 #, php-format msgid "Edit %1$s" msgstr "" -#: library/functions/shortcodes.php:206 +#: ../library/functions/shortcodes.php:208 msgid "Leave a response" msgstr "" -#: library/functions/shortcodes.php:206 -msgid "1 Response" +#: ../library/functions/shortcodes.php:208 +#, php-format +msgid "%1$s Response" msgstr "" -#: library/functions/shortcodes.php:206 +#: ../library/functions/shortcodes.php:208 #, php-format msgid "%1$s Responses" msgstr "" -#: library/functions/shortcodes.php:213 -#: library/functions/shortcodes.php:215 -#: library/functions/shortcodes.php:217 +#: ../library/functions/shortcodes.php:215 +#: ../library/functions/shortcodes.php:217 +#: ../library/functions/shortcodes.php:219 #, php-format msgid "Comment on %1$s" msgstr "" -#: library/functions/shortcodes.php:289 +#: ../library/functions/shortcodes.php:278 +msgid "(Untitled)" +msgstr "" + +#: ../library/functions/shortcodes.php:295 msgid "Shortlink" msgstr "" -#: library/functions/shortcodes.php:309 +#: ../library/functions/shortcodes.php:315 #, php-format msgid "%1$s at %2$s" msgstr "" -#: library/functions/shortcodes.php:348 +#: ../library/functions/shortcodes.php:362 #, php-format msgid "Permalink to comment %1$s" msgstr "" -#: library/functions/shortcodes.php:348 +#: ../library/functions/shortcodes.php:362 msgid "Permalink" msgstr "" -#: library/functions/shortcodes.php:386 +#: ../library/functions/shortcodes.php:400 msgid "Reply" msgstr "" -#: library/functions/shortcodes.php:387 +#: ../library/functions/shortcodes.php:401 msgid "Log in to reply." msgstr "" -#: library/functions/widgets.php:52 -msgid "Primary" -msgstr "" - -#: library/functions/widgets.php:52 +#: ../library/functions/sidebars.php:77 msgid "The main (primary) widget area, most often used as a sidebar." msgstr "" -#: library/functions/widgets.php:53 -msgid "Secondary" -msgstr "" - -#: library/functions/widgets.php:53 -msgid "The second most important widget area, most often used as a secondary sidebar" -msgstr "" - -#: library/functions/widgets.php:54 -msgid "Subsidiary" +#: ../library/functions/sidebars.php:81 +msgid "The second most important widget area, most often used as a secondary sidebar." msgstr "" -#: library/functions/widgets.php:54 +#: ../library/functions/sidebars.php:85 msgid "A widget area loaded in the footer of the site." msgstr "" -#: library/functions/widgets.php:57 -msgid "Utility: Before Content" +#: ../library/functions/sidebars.php:89 +msgid "Displayed within the site's header area." msgstr "" -#: library/functions/widgets.php:57 +#: ../library/functions/sidebars.php:93 msgid "Loaded before the page's main content area." msgstr "" -#: library/functions/widgets.php:58 -msgid "Utility: After Content" -msgstr "" - -#: library/functions/widgets.php:58 +#: ../library/functions/sidebars.php:97 msgid "Loaded after the page's main content area." msgstr "" -#: library/functions/widgets.php:59 -msgid "Utility: After Singular" -msgstr "" - -#: library/functions/widgets.php:59 +#: ../library/functions/sidebars.php:101 msgid "Loaded on singular post (page, attachment, etc.) views before the comments area." msgstr "" -#: library/functions/widgets.php:63 -msgid "Widgets Template" -msgstr "" - -#: library/functions/widgets.php:63 -msgid "Used as the content of the Widgets page template." -msgstr "" - -#: library/functions/widgets.php:65 -msgid "404 Template" -msgstr "" - -#: library/functions/widgets.php:65 -msgid "Replaces the default 404 error page content." -msgstr "" - -#: library/legacy/deprecated.php:552 -#, php-format -msgid "<code>%1$s</code> — This function has been removed or replaced by another function." -msgstr "" - diff --git a/wp-content/themes/hybrid/library/admin/admin.php b/wp-content/themes/hybrid/library/admin/admin.php index c22c6cc8d..3b2de1804 100644 --- a/wp-content/themes/hybrid/library/admin/admin.php +++ b/wp-content/themes/hybrid/library/admin/admin.php @@ -1,67 +1,109 @@ <?php /** - * The theme administration functions are initialized and set up mainly from this file. It is used to - * launch the theme settings page and allow child themes and plugins to access theme-specific - * features. See meta-box.php for the post meta box functions. + * Theme administration functions used with other components of the framework admin. This file is for + * setting up any basic features and holding additional admin helper functions. * - * @package Hybrid + * @package HybridCore * @subpackage Admin */ -/* Initialize the theme admin functionality. */ -add_action( 'init', 'hybrid_admin_init' ); +/* Add the admin init function to the 'admin_init' hook. */ +add_action( 'admin_init', 'hybrid_admin_init' ); /** - * Initializes the theme administration functions. Makes sure we have a theme settings - * page and a meta box on the edit post/page screen. + * Initializes any admin-related features needed for the framework. * - * @since 0.7 + * @since 0.7.0 */ function hybrid_admin_init() { - $prefix = hybrid_get_prefix(); - /* Initialize the theme settings page. */ - add_action( 'admin_menu', 'hybrid_settings_page_init' ); + /* Load the post meta boxes on the new post and edit post screens. */ + add_action( 'load-post.php', 'hybrid_admin_load_post_meta_boxes' ); + add_action( 'load-post-new.php', 'hybrid_admin_load_post_meta_boxes' ); - /* Save settings page meta boxes. */ - add_action( "{$prefix}_update_settings_page", 'hybrid_save_theme_settings' ); + /* Registers admin stylesheets for the framework. */ + add_action( 'admin_enqueue_scripts', 'hybrid_admin_register_styles', 1 ); - /* Add a new meta box to the post editor. */ - add_action( 'admin_menu', 'hybrid_create_post_meta_box' ); + /* Loads admin stylesheets for the framework. */ + add_action( 'admin_enqueue_scripts', 'hybrid_admin_enqueue_styles' ); +} + +/** + * Loads the core post meta box files on the 'load-post.php' action hook. Each meta box file is only loaded if + * the theme declares support for the feature. + * + * @since 1.2.0 + */ +function hybrid_admin_load_post_meta_boxes() { - /* Saves the post meta box data. */ - add_action( 'save_post', 'hybrid_save_post_meta_box' ); + /* Load the SEO post meta box. */ + require_if_theme_supports( 'hybrid-core-seo', trailingslashit( HYBRID_ADMIN ) . 'meta-box-post-seo.php' ); - /* Load the admin stylesheet for the widgets screen. */ - add_action( 'load-widgets.php', 'hybrid_settings_page_enqueue_style' ); + /* Load the post template meta box. */ + require_if_theme_supports( 'hybrid-core-template-hierarchy', trailingslashit( HYBRID_ADMIN ) . 'meta-box-post-template.php' ); +} + +/** + * Registers the framework's 'admin.css' stylesheet file. The function does not load the stylesheet. It merely + * registers it with WordPress. + * + * @since 1.2.0 + */ +function hybrid_admin_register_styles() { + wp_register_style( 'hybrid-core-admin', trailingslashit( HYBRID_CSS ) . 'admin.css', false, '20110512', 'screen' ); } /** - * Function for getting an array of available custom templates with a specific header. Ideally, - * this function would be used to grab custom singular post (any post type) templates. + * Loads the admin.css stylesheet for admin-related features. * - * @since 0.7 + * @since 1.2.0 + */ +function hybrid_admin_enqueue_styles( $hook_suffix ) { + + /* Load admin styles if on the widgets screen and the current theme supports 'hybrid-core-widgets'. */ + if ( current_theme_supports( 'hybrid-core-widgets' ) && 'widgets.php' == $hook_suffix ) + wp_enqueue_style( 'hybrid-core-admin' ); +} + +/** + * Function for getting an array of available custom templates with a specific header. Ideally, this function + * would be used to grab custom singular post (any post type) templates. It is a recreation of the WordPress + * page templates function because it doesn't allow for other types of templates. + * + * @since 0.7.0 * @param array $args Arguments to check the templates against. * @return array $post_templates The array of templates. */ function hybrid_get_post_templates( $args = array() ) { + /* Parse the arguments with the defaults. */ $args = wp_parse_args( $args, array( 'label' => array( 'Post Template' ) ) ); + /* Get theme and templates variables. */ $themes = get_themes(); $theme = get_current_theme(); $templates = $themes[$theme]['Template Files']; $post_templates = array(); + /* If there's an array of templates, loop through each template. */ if ( is_array( $templates ) ) { + + /* Set up a $base path that we'll use to remove from the file name. */ $base = array( trailingslashit( get_template_directory() ), trailingslashit( get_stylesheet_directory() ) ); + /* Loop through the post templates. */ foreach ( $templates as $template ) { + + /* Remove the base (parent/child theme path) from the template file name. */ $basename = str_replace( $base, '', $template ); + /* Get the template data. */ $template_data = implode( '', file( $template ) ); + /* Make sure the name is set to an empty string. */ $name = ''; + + /* Loop through each of the potential labels and see if a match is found. */ foreach ( $args['label'] as $label ) { if ( preg_match( "|{$label}:(.*)$|mi", $template_data, $name ) ) { $name = _cleanup_header_comment( $name[1] ); @@ -69,11 +111,13 @@ function hybrid_get_post_templates( $args = array() ) { } } + /* If a post template was found, add its name and file name to the $post_templates array. */ if ( !empty( $name ) ) $post_templates[trim( $name )] = $basename; } } + /* Return array of post templates. */ return $post_templates; } diff --git a/wp-content/themes/hybrid/library/admin/meta-box-post-seo.php b/wp-content/themes/hybrid/library/admin/meta-box-post-seo.php new file mode 100644 index 000000000..31b4d26d0 --- /dev/null +++ b/wp-content/themes/hybrid/library/admin/meta-box-post-seo.php @@ -0,0 +1,114 @@ +<?php +/** + * Adds the SEO meta box to the post editing screen for public post types. This feature allows the post author + * to set a custom title, description, and keywords for the post, which will be viewed on the singular post page. + * To use this feature, the theme must support the 'hybrid-core-seo' feature. The functions in this file create + * the SEO meta box and save the settings chosen by the user when the post is saved. + * + * @package HybridCore + * @subpackage Admin + */ + +/* Add the post SEO meta box on the 'add_meta_boxes' hook. */ +add_action( 'add_meta_boxes', 'hybrid_meta_box_post_add_seo' ); + +/* Save the post SEO meta box data on the 'save_post' hook. */ +add_action( 'save_post', 'hybrid_meta_box_post_save_seo', 10, 2 ); + +/** + * Adds the post SEO meta box for all public post types. + * + * @since 1.2.0 + */ +function hybrid_meta_box_post_add_seo() { + + /* Get all available public post types. */ + $post_types = get_post_types( array( 'public' => true ), 'objects' ); + + /* Loop through each post type, adding the meta box for each type's post editor screen. */ + foreach ( $post_types as $type ) + add_meta_box( 'hybrid-core-post-seo', sprintf( __( '%s SEO', hybrid_get_textdomain() ), $type->labels->singular_name ), 'hybrid_meta_box_post_display_seo', $type->name, 'normal', 'high' ); +} + +/** + * Displays the post SEO meta box. + * + * @since 1.2.0 + */ +function hybrid_meta_box_post_display_seo( $object, $box ) { + + $domain = hybrid_get_textdomain(); ?> + + <input type="hidden" name="hybrid-core-post-meta-box-seo" value="<?php echo wp_create_nonce( basename( __FILE__ ) ); ?>" /> + + <div class="hybrid-post-settings"> + + <p> + <label for="hybrid-document-title"><?php _e( 'Document Title:', $domain ); ?></label> + <br /> + <input type="text" name="hybrid-document-title" id="hybrid-document-title" value="<?php echo esc_attr( get_post_meta( $object->ID, 'Title', true ) ); ?>" size="30" tabindex="30" style="width: 99%;" /> + </p> + + <p> + <label for="hybrid-meta-description"><?php _e( 'Meta Description:', $domain ); ?></label> + <br /> + <textarea name="hybrid-meta-description" id="hybrid-meta-description" cols="60" rows="2" tabindex="30" style="width: 99%;"><?php echo esc_textarea( get_post_meta( $object->ID, 'Description', true ) ); ?></textarea> + </p> + + <p> + <label for="hybrid-meta-keywords"><?php _e( 'Meta Keywords:', $domain ); ?></label> + <br /> + <input type="text" name="hybrid-meta-keywords" id="hybrid-meta-keywords" value="<?php echo esc_attr( get_post_meta( $object->ID, 'Keywords', true ) ); ?>" size="30" tabindex="30" style="width: 99%;" /> + </p> + + </div><!-- .form-table --><?php +} + +/** + * Saves the post SEO meta box settings as post metadata. + * + * @since 1.2.0 + * @param int $post_id The ID of the current post being saved. + * @param int $post The post object currently being saved. + */ +function hybrid_meta_box_post_save_seo( $post_id, $post ) { + + $prefix = hybrid_get_prefix(); + + /* Verify the nonce before proceeding. */ + if ( !isset( $_POST['hybrid-core-post-meta-box-seo'] ) || !wp_verify_nonce( $_POST['hybrid-core-post-meta-box-seo'], basename( __FILE__ ) ) ) + return $post_id; + + /* Get the post type object. */ + $post_type = get_post_type_object( $post->post_type ); + + /* Check if the current user has permission to edit the post. */ + if ( !current_user_can( $post_type->cap->edit_post, $post_id ) ) + return $post_id; + + $meta = array( + 'Title' => strip_tags( $_POST['hybrid-document-title'] ), + 'Description' => strip_tags( $_POST['hybrid-meta-description'] ), + 'Keywords' => strip_tags( $_POST['hybrid-meta-keywords'] ) + ); + + foreach ( $meta as $meta_key => $new_meta_value ) { + + /* Get the meta value of the custom field key. */ + $meta_value = get_post_meta( $post_id, $meta_key, true ); + + /* If a new meta value was added and there was no previous value, add it. */ + if ( $new_meta_value && '' == $meta_value ) + add_post_meta( $post_id, $meta_key, $new_meta_value, true ); + + /* If the new meta value does not match the old value, update it. */ + elseif ( $new_meta_value && $new_meta_value != $meta_value ) + update_post_meta( $post_id, $meta_key, $new_meta_value ); + + /* If there is no new meta value but an old value exists, delete it. */ + elseif ( '' == $new_meta_value && $meta_value ) + delete_post_meta( $post_id, $meta_key, $meta_value ); + } +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/admin/meta-box-post-template.php b/wp-content/themes/hybrid/library/admin/meta-box-post-template.php new file mode 100644 index 000000000..bcdfdb64f --- /dev/null +++ b/wp-content/themes/hybrid/library/admin/meta-box-post-template.php @@ -0,0 +1,117 @@ +<?php +/** + * Adds the template meta box to the post editing screen for public post types. This feature allows users and + * devs to create custom templates for any post type, not just pages as default in WordPress core. The + * functions in this file create the template meta box and save the template chosen by the user when the + * post is saved. This file is only used if the theme supports the 'hybrid-core-template-hierarchy' feature. + * + * @package HybridCore + * @subpackage Admin + */ + +/* Add the post template meta box on the 'add_meta_boxes' hook. */ +add_action( 'add_meta_boxes', 'hybrid_meta_box_post_add_template' ); + +/* Save the post template meta box data on the 'save_post' hook. */ +add_action( 'save_post', 'hybrid_meta_box_post_save_template', 10, 2 ); + +/** + * Adds the post template meta box for all public post types, excluding the 'page' post type since WordPress + * core already handles page templates. + * + * @since 1.2.0 + */ +function hybrid_meta_box_post_add_template() { + + /* Get all available public post types. */ + $post_types = get_post_types( array( 'public' => true ), 'objects' ); + + /* Loop through each post type, adding the meta box for each type's post editor screen. */ + foreach ( $post_types as $type ) { + + /* Skip the 'page' post type because WordPress handles this by default. */ + if ( 'page' !== $type->name ) + add_meta_box( 'hybrid-core-post-template', sprintf( __( '%s Template', hybrid_get_textdomain() ), $type->labels->singular_name ), 'hybrid_meta_box_post_display_template', $type->name, 'side', 'default' ); + } +} + +/** + * Displays the post template meta box. + * + * @since 1.2.0 + */ +function hybrid_meta_box_post_display_template( $object, $box ) { + + /* Get the post type object. */ + $post_type_object = get_post_type_object( $object->post_type ); + + /* If the post type object returns a singular name or name. */ + if ( !empty( $post_type_object->labels->singular_name ) || !empty( $post_type_object->name ) ) { + + /* Get a list of available custom templates for the post type. */ + $templates = hybrid_get_post_templates( array( 'label' => array( "{$post_type_object->labels->singular_name} Template", "{$post_type_object->name} Template" ) ) ); + } ?> + + <input type="hidden" name="hybrid-core-post-meta-box-template" value="<?php echo wp_create_nonce( basename( __FILE__ ) ); ?>" /> + + <p> + <?php if ( 0 != count( $templates ) ) { ?> + <select name="hybrid-post-template" id="hybrid-post-template" class="widefat"> + <option value=""></option> + <?php foreach ( $templates as $label => $template ) { ?> + <option value="<?php echo esc_attr( $template ); ?>" <?php selected( esc_attr( get_post_meta( $object->ID, "_wp_{$post_type_object->name}_template", true ) ), esc_attr( $template ) ); ?>><?php echo esc_html( $label ); ?></option> + <?php } ?> + </select> + <?php } else { ?> + <?php _e( 'No templates exist for this post type.', hybrid_get_textdomain() ); ?> + <?php } ?> + </p> +<?php +} + +/** + * Saves the post template meta box settings as post metadata. + * + * @since 1.2.0 + * @param int $post_id The ID of the current post being saved. + * @param int $post The post object currently being saved. + */ +function hybrid_meta_box_post_save_template( $post_id, $post ) { + + /* Verify the nonce before proceeding. */ + if ( !isset( $_POST['hybrid-core-post-meta-box-template'] ) || !wp_verify_nonce( $_POST['hybrid-core-post-meta-box-template'], basename( __FILE__ ) ) ) + return $post_id; + + /* Get the post type object. */ + $post_type = get_post_type_object( $post->post_type ); + + /* Check if the current user has permission to edit the post. */ + if ( !current_user_can( $post_type->cap->edit_post, $post_id ) ) + return $post_id; + + /* Get the posted meta value. */ + if ( !isset( $_POST['hybrid-post-template'] ) ) + return $post_id; + + $new_meta_value = strip_tags( $_POST['hybrid-post-template'] ); + + /* Set the $meta_key variable based off the post type name. */ + $meta_key = "_wp_{$post->post_type}_template"; + + /* Get the meta value of the meta key. */ + $meta_value = get_post_meta( $post_id, $meta_key, true ); + + /* If a new meta value was added and there was no previous value, add it. */ + if ( $new_meta_value && '' == $meta_value ) + add_post_meta( $post_id, $meta_key, $new_meta_value, true ); + + /* If the new meta value does not match the old value, update it. */ + elseif ( $new_meta_value && $new_meta_value != $meta_value ) + update_post_meta( $post_id, $meta_key, $new_meta_value ); + + /* If there is no new meta value but an old value exists, delete it. */ + elseif ( '' == $new_meta_value && $meta_value ) + delete_post_meta( $post_id, $meta_key, $meta_value ); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/admin/meta-box-theme-about.php b/wp-content/themes/hybrid/library/admin/meta-box-theme-about.php new file mode 100644 index 000000000..90cd0a057 --- /dev/null +++ b/wp-content/themes/hybrid/library/admin/meta-box-theme-about.php @@ -0,0 +1,95 @@ +<?php +/** + * Creates a meta box for the theme settings page, which displays information about the theme. If a child theme + * is in use, an additional meta box will be added with its information. To use this feature, the theme must + * support the 'about' argument for 'hybrid-core-theme-settings' feature. + * + * @package HybridCore + * @subpackage Admin + */ + +/* Create the about theme meta box on the 'add_meta_boxes' hook. */ +add_action( 'add_meta_boxes', 'hybrid_meta_box_theme_add_about' ); + +/** + * Adds the core about theme meta box to the theme settings page. + * + * @since 1.2.0 + */ +function hybrid_meta_box_theme_add_about() { + + /* Get theme information. */ + $prefix = hybrid_get_prefix(); + $domain = hybrid_get_textdomain(); + $theme_data = hybrid_get_theme_data(); + + /* Adds the About box for the parent theme. */ + add_meta_box( 'hybrid-core-about-theme', sprintf( __( 'About %1$s', $domain ), $theme_data['Title'] ), 'hybrid_meta_box_theme_display_about', hybrid_get_settings_page_name(), 'side', 'high' ); + + /* If the user is using a child theme, add an About box for it. */ + if ( is_child_theme() ) { + $child_data = hybrid_get_theme_data( 'stylesheet' ); + add_meta_box( 'hybrid-core-about-child', sprintf( __( 'About %1$s', $domain ), $child_data['Title'] ), 'hybrid_meta_box_theme_display_about', hybrid_get_settings_page_name(), 'side', 'high' ); + } +} + +/** + * Creates an information meta box with no settings about the theme. The meta box will display + * information about both the parent theme and child theme. If a child theme is active, this function + * will be called a second time. + * + * @since 1.2.0 + * @param $object Variable passed through the do_meta_boxes() call. + * @param array $box Specific information about the meta box being loaded. + */ +function hybrid_meta_box_theme_display_about( $object, $box ) { + + /* Get theme information. */ + $prefix = hybrid_get_prefix(); + $domain = hybrid_get_textdomain(); + + /* Grab theme information for the parent theme. */ + if ( 'hybrid-core-about-theme' == $box['id'] ) + $theme_data = hybrid_get_theme_data(); + + /* Grab theme information for the child theme. */ + elseif ( 'hybrid-core-about-child' == $box['id'] ) + $theme_data = hybrid_get_theme_data( 'stylesheet' ); ?> + + <table class="form-table"> + <tr> + <th> + <?php _e( 'Theme:', $domain ); ?> + </th> + <td> + <a href="<?php echo $theme_data['URI']; ?>" title="<?php echo $theme_data['Title']; ?>"><?php echo $theme_data['Title']; ?></a> + </td> + </tr> + <tr> + <th> + <?php _e( 'Version:', $domain ); ?> + </th> + <td> + <?php echo $theme_data['Version']; ?> + </td> + </tr> + <tr> + <th> + <?php _e( 'Author:', $domain ); ?> + </th> + <td> + <?php echo $theme_data['Author']; ?> + </td> + </tr> + <tr> + <th> + <?php _e( 'Description:', $domain ); ?> + </th> + <td> + <?php echo $theme_data['Description']; ?> + </td> + </tr> + </table><!-- .form-table --><?php +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/admin/meta-box-theme-footer.php b/wp-content/themes/hybrid/library/admin/meta-box-theme-footer.php new file mode 100644 index 000000000..2dbb1a560 --- /dev/null +++ b/wp-content/themes/hybrid/library/admin/meta-box-theme-footer.php @@ -0,0 +1,68 @@ +<?php +/** + * Creates a meta box for the theme settings page, which holds a textarea for custom footer text within + * the theme. To use this feature, the theme must support the 'footer' argument for the + * 'hybrid-core-theme-settings' feature. + * + * @package HybridCore + * @subpackage Admin + */ + +/* Create the footer meta box on the 'add_meta_boxes' hook. */ +add_action( 'add_meta_boxes', 'hybrid_meta_box_theme_add_footer' ); + +/* Sanitize the footer settings before adding them to the database. */ +add_filter( 'sanitize_option_' . hybrid_get_prefix() . '_theme_settings', 'hybrid_meta_box_theme_save_footer' ); + +/** + * Adds the core theme footer meta box to the theme settings page in the admin. + * + * @since 1.2.0 + */ +function hybrid_meta_box_theme_add_footer() { + + add_meta_box( 'hybrid-core-meta-box-footer', __( 'Footer settings', hybrid_get_textdomain() ), 'hybrid_meta_box_theme_display_footer', hybrid_get_settings_page_name(), 'normal', 'high' ); +} + +/** + * Creates a settings box that allows users to customize their footer. A basic textarea is given that + * allows HTML and shortcodes to be input. + * + * @since 1.2.0 + */ +function hybrid_meta_box_theme_display_footer() { + $domain = hybrid_get_textdomain(); ?> + + <p> + <span class="description"><?php _e( 'You can add custom <acronym title="Hypertext Markup Language">HTML</acronym> and/or shortcodes, which will be automatically inserted into your theme.', $domain ); ?></span> + </p> + + <p> + <textarea id="<?php echo hybrid_settings_field_id( 'footer_insert' ); ?>" name="<?php echo hybrid_settings_field_name( 'footer_insert' ); ?>" cols="60" rows="5"><?php echo esc_textarea( hybrid_get_setting( 'footer_insert' ) ); ?></textarea> + </p> + + <?php if ( current_theme_supports( 'hybrid-core-shortcodes' ) ) { ?> + <p> + <?php printf( __( 'Shortcodes: %s', $domain ), '<code>[the-year]</code>, <code>[site-link]</code>, <code>[wp-link]</code>, <code>[theme-link]</code>, <code>[child-link]</code>, <code>[loginout-link]</code>, <code>[query-counter]</code>' ); ?> + </p> + <?php } +} + +/** + * Saves the footer meta box settings by filtering the "sanitize_option_{$prefix}_theme_settings" hook. + * + * @since 1.2.0 + * @param array $settings Array of theme settings passed by the Settings API for validation. + * @return array $settings + */ +function hybrid_meta_box_theme_save_footer( $settings ) { + + /* Make sure we kill evil scripts from users without the 'unfiltered_html' cap. */ + if ( isset( $settings['footer_insert'] ) && !current_user_can( 'unfiltered_html' ) ) + $settings['footer_insert'] = stripslashes( wp_filter_post_kses( addslashes( $settings['footer_insert'] ) ) ); + + /* Return the theme settings. */ + return $settings; +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/admin/theme-settings.php b/wp-content/themes/hybrid/library/admin/theme-settings.php new file mode 100644 index 000000000..27fd87808 --- /dev/null +++ b/wp-content/themes/hybrid/library/admin/theme-settings.php @@ -0,0 +1,290 @@ +<?php +/** + * Handles the display and functionality of the theme settings page. This provides the needed hooks and + * meta box calls for developers to create any number of theme settings needed. This file is only loaded if + * the theme supports the 'hybrid-core-theme-settings' feature. + * + * Provides the ability for developers to add custom meta boxes to the theme settings page by using the + * add_meta_box() function. Developers should register their meta boxes on the 'add_meta_boxes' hook + * and register the meta box for 'appearance_page_theme-settings'. To validate/sanitize data from + * custom settings, devs should use the 'sanitize_option_{$prefix}_theme_settings' filter hook. + * + * @package HybridCore + * @subpackage Admin + */ + +/* Hook the settings page function to 'admin_menu'. */ +add_action( 'admin_menu', 'hybrid_settings_page_init' ); + +/** + * Initializes all the theme settings page functionality. This function is used to create the theme settings + * page, then use that as a launchpad for specific actions that need to be tied to the settings page. + * + * @since 0.7.0 + * @global string $hybrid The global theme object. + */ +function hybrid_settings_page_init() { + global $hybrid; + + /* Get theme information. */ + $theme = hybrid_get_theme_data(); + $prefix = hybrid_get_prefix(); + $domain = hybrid_get_textdomain(); + + /* Register theme settings. */ + register_setting( + "{$prefix}_theme_settings", // Options group. + "{$prefix}_theme_settings", // Database option. + 'hybrid_save_theme_settings' // Validation callback function. + ); + + /* Create the theme settings page. */ + $hybrid->settings_page = add_theme_page( + sprintf( esc_html__( '%1$s Theme Settings', $domain ), $theme['Name'] ), // Settings page name. + esc_html__( 'Theme Settings', $domain ), // Menu item name. + hybrid_settings_page_capability(), // Required capability. + 'theme-settings', // Screen name. + 'hybrid_settings_page' // Callback function. + ); + + /* Check if the settings page is being shown before running any functions for it. */ + if ( !empty( $hybrid->settings_page ) ) { + + /* Filter the settings page capability so that it recognizes the 'edit_theme_options' cap. */ + add_filter( "option_page_capability_{$prefix}_theme_settings", 'hybrid_settings_page_capability' ); + + /* Add contextual help to the theme settings page. */ + add_contextual_help( $hybrid->settings_page, hybrid_settings_page_contextual_help() ); + + /* Load the theme settings meta boxes. */ + add_action( "load-{$hybrid->settings_page}", 'hybrid_load_settings_page_meta_boxes' ); + + /* Create a hook for adding meta boxes. */ + add_action( "load-{$hybrid->settings_page}", 'hybrid_settings_page_add_meta_boxes' ); + + /* Load the JavaScript and stylesheets needed for the theme settings screen. */ + add_action( 'admin_enqueue_scripts', 'hybrid_settings_page_enqueue_scripts' ); + add_action( 'admin_enqueue_scripts', 'hybrid_settings_page_enqueue_styles' ); + add_action( "admin_head-{$hybrid->settings_page}", 'hybrid_settings_page_load_scripts' ); + } +} + +/** + * Returns the required capability for viewing and saving theme settings. + * + * @since 1.2.0 + */ +function hybrid_settings_page_capability() { + return apply_filters( hybrid_get_prefix() . '_settings_capability', 'edit_theme_options' ); +} + +/** + * Returns the theme settings page name/hook as a string. + * + * @since 1.2.0 + */ +function hybrid_get_settings_page_name() { + global $hybrid; + + return ( isset( $hybrid->settings_page ) ? $hybrid->settings_page : 'appearance_page_theme-settings' ); +} + +/** + * Provides a hook for adding meta boxes as seen on the post screen in the WordPress admin. This addition + * is needed because normal plugin/theme pages don't have this hook by default. The other goal of this + * function is to provide a way for themes to load and execute meta box code only on the theme settings + * page in the admin. This way, they're not needlessly loading extra files. + * + * @since 1.2.0 + */ +function hybrid_settings_page_add_meta_boxes() { + + do_action( 'add_meta_boxes', hybrid_get_settings_page_name(), hybrid_get_theme_data() ); +} + +/** + * Loads the meta boxes packaged with the framework on the theme settings page. These meta boxes are + * merely loaded with this function. Meta boxes are only loaded if the feature is supported by the theme. + * + * @since 1.2.0 + */ +function hybrid_load_settings_page_meta_boxes() { + + /* Get theme-supported meta boxes for the settings page. */ + $supports = get_theme_support( 'hybrid-core-theme-settings' ); + + /* If there are any supported meta boxes, load them. */ + if ( is_array( $supports[0] ) ) { + + /* Load the 'About' meta box if it is supported. */ + if ( in_array( 'about', $supports[0] ) ) + require_once( trailingslashit( HYBRID_ADMIN ) . 'meta-box-theme-about.php' ); + + /* Load the 'Footer' meta box if it is supported. */ + if ( in_array( 'footer', $supports[0] ) ) + require_once( trailingslashit( HYBRID_ADMIN ) . 'meta-box-theme-footer.php' ); + } +} + +/** + * Validation/Sanitization callback function for theme settings. This just returns the data passed to it. Theme + * developers should validate/sanitize their theme settings on the "sanitize_option_{$prefix}_theme_settings" + * hook. This function merely exists for backwards compatibility. + * + * @since 0.7.0 + * @param array $settings An array of the theme settings passed by the Settings API for validation. + * @return array $settings The array of theme settings. + */ +function hybrid_save_theme_settings( $settings ) { + + /* @deprecated 1.0.0. Developers should filter "sanitize_option_{$prefix}_theme_settings" instead. */ + return apply_filters( hybrid_get_prefix() . '_validate_theme_settings', $settings ); +} + +/** + * Displays the theme settings page and calls do_meta_boxes() to allow additional settings + * meta boxes to be added to the page. + * + * @since 0.7.0 + * @global string $hybrid The global theme object. + */ +function hybrid_settings_page() { + + /* Get the theme information. */ + $prefix = hybrid_get_prefix(); + $domain = hybrid_get_textdomain(); + $theme_data = hybrid_get_theme_data(); ?> + + <div class="wrap"> + + <?php screen_icon(); ?> + + <h2><?php printf( __( '%1$s Theme Settings', $domain ), $theme_data['Name'] ); ?></h2> + + <?php if ( isset( $_GET['settings-updated'] ) && 'true' == esc_attr( $_GET['settings-updated'] ) ) echo '<div class="updated"><p><strong>' . __( 'Settings saved.', $domain ) . '</strong></p></div>'; ?> + + <div id="poststuff"> + + <form method="post" action="options.php"> + + <?php settings_fields( "{$prefix}_theme_settings" ); ?> + <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?> + <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?> + + <div class="metabox-holder"> + <div class="post-box-container column-1 normal"><?php do_meta_boxes( hybrid_get_settings_page_name(), 'normal', null ); ?></div> + <div class="post-box-container column-2 side"><?php do_meta_boxes( hybrid_get_settings_page_name(), 'side', null ); ?></div> + <div class="post-box-container column-3 advanced"><?php do_meta_boxes( hybrid_get_settings_page_name(), 'advanced', null ); ?></div> + </div> + + <?php submit_button( esc_attr__( 'Update Settings', $domain ) ); ?> + + </form> + + </div><!-- #poststuff --> + + </div><!-- .wrap --><?php +} + +/** + * Creates a settings field id attribute for use on the theme settings page. This is a helper function for use + * with the WordPress settings API. + * + * @since 1.0.0 + */ +function hybrid_settings_field_id( $setting ) { + return hybrid_get_prefix() . '_theme_settings-' . sanitize_html_class( $setting ); +} + +/** + * Creates a settings field name attribute for use on the theme settings page. This is a helper function for + * use with the WordPress settings API. + * + * @since 1.0.0 + */ +function hybrid_settings_field_name( $setting ) { + return hybrid_get_prefix() . "_theme_settings[{$setting}]"; +} + +/** + * Returns text for the contextual help tab on the theme settings page in the admin. Theme authors can add + * a filter to the 'contextual_help' hook if they want to change the output of the help text. + * + * @since 1.2.0 + * @return string $help The contextual help text used on the theme settings page. + */ +function hybrid_settings_page_contextual_help() { + + /* Set the $help variable to an empty string. */ + $help = ''; + + /* Get the parent theme data. */ + $theme = hybrid_get_theme_data(); + + /* If the theme has provided a documentation or support URI, add them to the help text. */ + if ( !empty( $theme['Documentation URI'] ) || !empty( $theme['Support URI'] ) ) { + + /* Open an unordered list for the help text. */ + $help = '<ul>'; + + /* Add the Documentation URI. */ + if ( !empty( $theme['Documentation URI'] ) ) + $help .= '<li><a href="' . esc_url( $theme['Documentation URI'] ) . '">' . __( 'Documentation', hybrid_get_textdomain() ) . '</a></li>'; + + /* Add the Support URI. */ + if ( !empty( $theme['Support URI'] ) ) + $help .= '<li><a href="' . esc_url( $theme['Support URI'] ) . '">' . __( 'Support', hybrid_get_textdomain() ) . '</a></li>'; + + /* Close the unordered list for the help text. */ + $help .= '</ul>'; + } + + /* Return the contextual help text for this screen. */ + return $help; +} + +/** + * Loads the required stylesheets for displaying the theme settings page in the WordPress admin. + * + * @since 1.2.0 + */ +function hybrid_settings_page_enqueue_styles( $hook_suffix ) { + + /* Load admin stylesheet if on the theme settings screen. */ + if ( $hook_suffix == hybrid_get_settings_page_name() ) + wp_enqueue_style( 'hybrid-core-admin' ); +} + +/** + * Loads the JavaScript files required for managing the meta boxes on the theme settings + * page, which allows users to arrange the boxes to their liking. + * + * @since 1.2.0 + * @param string $hook_suffix The current page being viewed. + */ +function hybrid_settings_page_enqueue_scripts( $hook_suffix ) { + + if ( $hook_suffix == hybrid_get_settings_page_name() ) { + wp_enqueue_script( 'common' ); + wp_enqueue_script( 'wp-lists' ); + wp_enqueue_script( 'postbox' ); + } +} + +/** + * Loads the JavaScript required for toggling the meta boxes on the theme settings page. + * + * @since 0.7.0 + */ +function hybrid_settings_page_load_scripts() { ?> + <script type="text/javascript"> + //<![CDATA[ + jQuery(document).ready( function($) { + $('.if-js-closed').removeClass('if-js-closed').addClass('closed'); + postboxes.add_postbox_toggles( '<?php echo hybrid_get_settings_page_name(); ?>' ); + }); + //]]> + </script><?php +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/classes/widget-archives.php b/wp-content/themes/hybrid/library/classes/widget-archives.php index 6545d2358..57369b531 100644 --- a/wp-content/themes/hybrid/library/classes/widget-archives.php +++ b/wp-content/themes/hybrid/library/classes/widget-archives.php @@ -1,92 +1,129 @@ <?php /** - * Archives Widget Class - * * The Archives widget replaces the default WordPress Archives widget. This version gives total * control over the output to the user by allowing the input of all the arguments typically seen * in the wp_get_archives() function. * - * @since 0.6 - * @link http://codex.wordpress.org/Template_Tags/wp_get_archives - * @link http://themehybrid.com/themes/hybrid/widgets - * * @package Hybrid * @subpackage Classes */ +/** + * Archives widget class. + * + * @since 0.6.0 + * @link http://codex.wordpress.org/Template_Tags/wp_get_archives + * @link http://themehybrid.com/themes/hybrid/widgets + */ class Hybrid_Widget_Archives extends WP_Widget { - var $prefix; + /** + * Textdomain for the widget. + * @since 0.7.0 + */ var $textdomain; /** * Set up the widget's unique name, ID, class, description, and other options. - * @since 0.6 + * @since 1.2.0 */ - function Hybrid_Widget_Archives() { - $this->prefix = hybrid_get_prefix(); + function __construct() { + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'archives', 'description' => __( 'An advanced widget that gives you total control over the output of your archives.', $this->textdomain ) ); - $control_ops = array( 'width' => 525, 'height' => 350, 'id_base' => "{$this->prefix}-archives" ); - $this->WP_Widget( "{$this->prefix}-archives", __( 'Archives', $this->textdomain ), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'archives', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your archives.', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 525, + 'height' => 350 + ); + + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-archives', // $this->id_base + __( 'Archives', $this->textdomain ), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } /** * Outputs the widget based on the arguments input through the widget controls. - * @since 0.6 + * @since 0.6.0 */ function widget( $args, $instance ) { extract( $args ); - $args = array(); - - $args['type'] = $instance['type']; - $args['format'] = $instance['format']; - $args['before'] = $instance['before']; - $args['after'] = $instance['after']; - $args['show_post_count'] = isset( $instance['show_post_count'] ) ? $instance['show_post_count'] : false; - $args['limit'] = !empty( $instance['limit'] ) ? intval( $instance['limit'] ) : ''; - $args['echo'] = false; + /* Set up the arguments for wp_get_archives(). */ + $args = array( + 'type' => $instance['type'], + 'format' => $instance['format'], + 'before' => $instance['before'], + 'after' => $instance['after'], + 'show_post_count' => !empty( $instance['show_post_count'] ) ? true : false, + 'limit' => !empty( $instance['limit'] ) ? intval( $instance['limit'] ) : '', + 'echo' => false + ); + /* Output the theme's $before_widget wrapper. */ echo $before_widget; - if ( $instance['title'] ) - echo $before_title . apply_filters( 'widget_title', $instance['title'] ) . $after_title; + /* If a title was input by the user, display it. */ + if ( !empty( $instance['title'] ) ) + echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; + /* Get the archives list. */ $archives = str_replace( array( "\r", "\n", "\t" ), '', wp_get_archives( $args ) ); + /* If the archives should be shown in a <select> drop-down. */ if ( 'option' == $args['format'] ) { + /* Create a title for the drop-down based on the archive type. */ if ( 'yearly' == $args['type'] ) - $option_title = __( 'Select Year', $this->textdomain ); + $option_title = esc_html__( 'Select Year', $this->textdomain ); + elseif ( 'monthly' == $args['type'] ) - $option_title = __( 'Select Month', $this->textdomain ); + $option_title = esc_html__( 'Select Month', $this->textdomain ); + elseif ( 'weekly' == $args['type'] ) - $option_title = __( 'Select Week', $this->textdomain ); + $option_title = esc_html__( 'Select Week', $this->textdomain ); + elseif ( 'daily' == $args['type'] ) - $option_title = __( 'Select Day', $this->textdomain ); + $option_title = esc_html__( 'Select Day', $this->textdomain ); + elseif ( 'postbypost' == $args['type'] || 'alpha' == $args['type'] ) - $option_title = __( 'Select Post', $this->textdomain ); + $option_title = esc_html__( 'Select Post', $this->textdomain ); - echo '<select name="archive-dropdown" onchange=\'document.location.href=this.options[this.selectedIndex].value;\'>'; - echo '<option value="">' . esc_attr( $option_title ) . '</option>'; - echo $archives; - echo '</select>'; + /* Output the <select> element and each <option>. */ + echo '<p><select name="archive-dropdown" onchange=\'document.location.href=this.options[this.selectedIndex].value;\'>'; + echo '<option value="">' . $option_title . '</option>'; + echo $archives; + echo '</select></p>'; } + + /* If the format should be an unordered list. */ elseif ( 'html' == $args['format'] ) { echo '<ul class="xoxo archives">' . $archives . '</ul><!-- .xoxo .archives -->'; } + + /* All other formats. */ else { echo $archives; } + /* Close the theme's widget wrapper. */ echo $after_widget; } /** * Updates the widget control options for the particular instance of the widget. - * @since 0.6 + * @since 0.6.0 */ function update( $new_instance, $old_instance ) { $instance = $old_instance; @@ -104,40 +141,45 @@ class Hybrid_Widget_Archives extends WP_Widget { /** * Displays the widget control options in the Widgets admin screen. - * @since 0.6 + * @since 0.6.0 */ function form( $instance ) { - //Defaults + /* Set up the default form values. */ $defaults = array( - 'title' => __( 'Archives', $this->textdomain ), - 'limit' => '', + 'title' => esc_attr__( 'Archives', $this->textdomain ), + 'limit' => 10, 'type' => 'monthly', 'format' => 'html', 'before' => '', - 'after' => '' + 'after' => '', + 'show_post_count' => false ); + + /* Merge the user-selected arguments with the defaults. */ $instance = wp_parse_args( (array) $instance, $defaults ); - $type = array( 'alpha' => __( 'Alphabetical', $this->textdomain ), 'daily' => __( 'Daily', $this->textdomain ), 'monthly' => __( 'Monthly', $this->textdomain ),'postbypost' => __( 'Post By Post', $this->textdomain ), 'weekly' => __( 'Weekly', $this->textdomain ), 'yearly' => __( 'Yearly', $this->textdomain ) ); - $format = array( 'custom' => __( 'Custom', $this->textdomain ), 'html' => __( 'HTML', $this->textdomain ), 'option' => __( 'Option', $this->textdomain ) ); + /* Create an array of archive types. */ + $type = array( 'alpha' => esc_attr__( 'Alphabetical', $this->textdomain ), 'daily' => esc_attr__( 'Daily', $this->textdomain ), 'monthly' => esc_attr__( 'Monthly', $this->textdomain ),'postbypost' => esc_attr__( 'Post By Post', $this->textdomain ), 'weekly' => esc_attr__( 'Weekly', $this->textdomain ), 'yearly' => esc_attr__( 'Yearly', $this->textdomain ) ); + /* Create an array of archive formats. */ + $format = array( 'custom' => esc_attr__( 'Custom', $this->textdomain ), 'html' => esc_attr__( 'HTML', $this->textdomain ), 'option' => esc_attr__( 'Option', $this->textdomain ) ); ?> <div class="hybrid-widget-controls columns-2"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'limit' ); ?>"><code>limit</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'limit' ); ?>" name="<?php echo $this->get_field_name( 'limit' ); ?>" value="<?php echo $instance['limit']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'limit' ); ?>" name="<?php echo $this->get_field_name( 'limit' ); ?>" value="<?php echo esc_attr( $instance['limit'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'type' ); ?>"><code>type</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'type' ); ?>" name="<?php echo $this->get_field_name( 'type' ); ?>"> <?php foreach ( $type as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['type'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['type'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -145,7 +187,7 @@ class Hybrid_Widget_Archives extends WP_Widget { <label for="<?php echo $this->get_field_id( 'format' ); ?>"><code>format</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'format' ); ?>" name="<?php echo $this->get_field_name( 'format' ); ?>"> <?php foreach ( $format as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['format'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['format'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -154,11 +196,11 @@ class Hybrid_Widget_Archives extends WP_Widget { <div class="hybrid-widget-controls columns-2 column-last"> <p> <label for="<?php echo $this->get_field_id( 'before' ); ?>"><code>before</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'before' ); ?>" name="<?php echo $this->get_field_name( 'before' ); ?>" value="<?php echo $instance['before']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'before' ); ?>" name="<?php echo $this->get_field_name( 'before' ); ?>" value="<?php echo esc_attr( $instance['before'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'after' ); ?>"><code>after</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'after' ); ?>" name="<?php echo $this->get_field_name( 'after' ); ?>" value="<?php echo $instance['after']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'after' ); ?>" name="<?php echo $this->get_field_name( 'after' ); ?>" value="<?php echo esc_attr( $instance['after'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'show_post_count' ); ?>"> diff --git a/wp-content/themes/hybrid/library/classes/widget-authors.php b/wp-content/themes/hybrid/library/classes/widget-authors.php index 5abd5b660..2f938c0f4 100644 --- a/wp-content/themes/hybrid/library/classes/widget-authors.php +++ b/wp-content/themes/hybrid/library/classes/widget-authors.php @@ -1,91 +1,114 @@ <?php /** - * Authors Widget Class - * * The authors widget was created to give users the ability to list the authors of their blog because * there was no equivalent WordPress widget that offered the functionality. This widget allows full * control over its output by giving access to the parameters of wp_list_authors(). * - * @since 0.6 - * @link http://codex.wordpress.org/Template_Tags/wp_list_authors - * @link http://themehybrid.com/themes/hybrid/widgets - * * @package Hybrid * @subpackage Classes */ +/** + * Authors Widget Class + * + * @since 0.6.0 + * @link http://codex.wordpress.org/Template_Tags/wp_list_authors + * @link http://themehybrid.com/themes/hybrid/widgets + */ class Hybrid_Widget_Authors extends WP_Widget { + /** + * Prefix for the widget. + * @since 0.7.0 + */ var $prefix; + + /** + * Textdomain for the widget. + * @since 0.7.0 + */ var $textdomain; /** * Set up the widget's unique name, ID, class, description, and other options. - * @since 0.6 + * @since 1.2.0 */ - function Hybrid_Widget_Authors() { + function __construct() { + + /* Set the widget prefix. */ $this->prefix = hybrid_get_prefix(); + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'authors', 'description' => __( 'An advanced widget that gives you total control over the output of your author lists.',$this->textdomain ) ); - $control_ops = array( 'width' => 525, 'height' => 350, 'id_base' => "{$this->prefix}-authors" ); - $this->WP_Widget( "{$this->prefix}-authors", __( 'Authors', $this->textdomain ), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'authors', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your author lists.', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 525, + 'height' => 350 + ); - add_action( 'delete_user', array( &$this, 'delete_transient' ) ); - add_action( 'user_register', array( &$this, 'delete_transient' ) ); - add_action( 'profile_update', array( &$this, 'delete_transient' ) ); - add_action( 'save_post', array( &$this, 'delete_transient' ) ); - add_action( 'deleted_post', array( &$this, 'delete_transient' ) ); + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-authors', // $this->id_base + __( 'Authors', $this->textdomain ), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } /** * Outputs the widget based on the arguments input through the widget controls. - * @since 0.6 + * @since 0.6.0 */ function widget( $args, $instance ) { - - /* If a transient has been saved with the widget information, use it. */ - $transient = get_transient( "{$this->prefix}_widget_{$args['widget_id']}" ); - if ( $transient ) { - echo $transient; - return; - } - extract( $args, EXTR_SKIP ); - $args = array(); - - $args['style'] = $instance['style']; - $args['feed'] = $instance['feed']; - $args['feed_image'] = $instance['feed_image']; - $args['optioncount'] = isset( $instance['optioncount'] ) ? $instance['optioncount'] : false; - $args['exclude_admin'] = isset( $instance['exclude_admin'] ) ? $instance['exclude_admin'] : false; - $args['show_fullname'] = isset( $instance['show_fullname'] ) ? $instance['show_fullname'] : false; - $args['hide_empty'] = isset( $instance['hide_empty'] ) ? $instance['hide_empty'] : false; - $args['html'] = isset( $instance['html'] ) ? $instance['html'] : false; - $args['echo'] = false; + /* Set up the arguments for wp_list_authors(). */ + $args = array( + 'order' => $instance['order'], + 'orderby' => $instance['orderby'], + 'number' => !empty( $instance['number'] ) ? intval( $instance['number'] ) : '', + 'style' => $instance['style'], + 'feed' => $instance['feed'], + 'feed_image' => $instance['feed_image'], + 'optioncount' => !empty( $instance['optioncount'] ) ? true : false, + 'exclude_admin' => !empty( $instance['exclude_admin'] ) ? true : false, + 'show_fullname' => !empty( $instance['show_fullname'] ) ? true : false, + 'hide_empty' => !empty( $instance['hide_empty'] ) ? true : false, + 'html' => !empty( $instance['html'] ) ? true : false, + 'echo' => false + ); - $authors_widget = $before_widget; + /* Output the theme's $before_widget wrapper. */ + echo $before_widget; - if ( $instance['title'] ) - $authors_widget .= $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; + /* If a title was input by the user, display it. */ + if ( !empty( $instance['title'] ) ) + echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; + /* Get the authors list. */ $authors = str_replace( array( "\r", "\n", "\t" ), '', wp_list_authors( $args ) ); + /* If 'list' is the style and the output should be HTML, wrap the authors in a <ul>. */ if ( 'list' == $args['style'] && $args['html'] ) $authors = '<ul class="xoxo authors">' . $authors . '</ul><!-- .xoxo .authors -->'; - $authors_widget .= $authors; - - $authors_widget .= $after_widget; + /* Display the authors list. */ + echo $authors; - set_transient( "{$this->prefix}_widget_{$widget_id}", $authors_widget, hybrid_get_transient_expiration() ); - echo $authors_widget; + /* Close the theme's widget wrapper. */ + echo $after_widget; } /** * Updates the widget control options for the particular instance of the widget. - * @since 0.6 + * @since 0.6.0 */ function update( $new_instance, $old_instance ) { $instance = $old_instance; @@ -94,7 +117,9 @@ class Hybrid_Widget_Authors extends WP_Widget { $instance['title'] = strip_tags( $new_instance['title'] ); $instance['feed'] = strip_tags( $new_instance['feed'] ); - $instance['feed_image'] = strip_tags( $new_instance['feed_image'] ); + $instance['order'] = strip_tags( $new_instance['order'] ); + $instance['orderby'] = strip_tags( $new_instance['orderby'] ); + $instance['number'] = strip_tags( $new_instance['number'] ); $instance['html'] = ( isset( $new_instance['html'] ) ? 1 : 0 ); $instance['optioncount'] = ( isset( $new_instance['optioncount'] ) ? 1 : 0 ); @@ -102,57 +127,83 @@ class Hybrid_Widget_Authors extends WP_Widget { $instance['show_fullname'] = ( isset( $new_instance['show_fullname'] ) ? 1 : 0 ); $instance['hide_empty'] = ( isset( $new_instance['hide_empty'] ) ? 1 : 0 ); - $this->delete_transient(); - return $instance; } - function delete_transient() { - delete_transient( "{$this->prefix}_widget_{$this->id}" ); - } - /** * Displays the widget control options in the Widgets admin screen. - * @since 0.6 + * @since 0.6.0 */ function form( $instance ) { - //Defaults + /* Set up the default form values. */ $defaults = array( - 'title' => __( 'Authors', $this->textdomain ), + 'title' => esc_attr__( 'Authors', $this->textdomain ), + 'order' => 'ASC', + 'orderby' => 'display_name', + 'number' => '', 'optioncount' => false, 'exclude_admin' => false, 'show_fullname' => true, 'hide_empty' => true, 'style' => 'list', - 'html' => true + 'html' => true, + 'feed' => '', + 'feed_image' => '' ); - $instance = wp_parse_args( (array) $instance, $defaults ); ?> + + /* Merge the user-selected arguments with the defaults. */ + $instance = wp_parse_args( (array) $instance, $defaults ); + + $order = array( 'ASC' => esc_attr__( 'Ascending', $this->textdomain ), 'DESC' => esc_attr__( 'Descending', $this->textdomain ) ); + $orderby = array( 'display_name' => esc_attr__( 'Display Name', $this->textdomain ), 'email' => esc_attr__( 'Email', $this->textdomain ), 'ID' => esc_attr__( 'ID', $this->textdomain ), 'nicename' => esc_attr__( 'Nice Name', $this->textdomain ), 'post_count' => esc_attr__( 'Post Count', $this->textdomain ), 'registered' => esc_attr__( 'Registered', $this->textdomain ), 'url' => esc_attr__( 'URL', $this->textdomain ), 'user_login' => esc_attr__( 'Login', $this->textdomain ) ); + + ?> <div class="hybrid-widget-controls columns-2"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> - <label for="<?php echo $this->get_field_id( 'feed' ); ?>"><code>feed</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'feed' ); ?>" name="<?php echo $this->get_field_name( 'feed' ); ?>" value="<?php echo $instance['feed']; ?>" /> + <label for="<?php echo $this->get_field_id( 'order' ); ?>"><code>order</code></label> + <select class="widefat" id="<?php echo $this->get_field_id( 'order' ); ?>" name="<?php echo $this->get_field_name( 'order' ); ?>"> + <?php foreach ( $order as $option_value => $option_label ) { ?> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['order'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> + <?php } ?> + </select> </p> <p> - <label for="<?php echo $this->get_field_id( 'feed_image' ); ?>"><code>feed_image</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'feed_image' ); ?>" name="<?php echo $this->get_field_name( 'feed_image' ); ?>" value="<?php echo $instance['feed_image']; ?>" /> + <label for="<?php echo $this->get_field_id( 'orderby' ); ?>"><code>orderby</code></label> + <select class="widefat" id="<?php echo $this->get_field_id( 'orderby' ); ?>" name="<?php echo $this->get_field_name( 'orderby' ); ?>"> + <?php foreach ( $orderby as $option_value => $option_label ) { ?> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['orderby'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> + <?php } ?> + </select> + </p> + <p> + <label for="<?php echo $this->get_field_id( 'number' ); ?>"><code>number</code></label> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" value="<?php echo esc_attr( $instance['number'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'style' ); ?>"><code>style</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'style' ); ?>" name="<?php echo $this->get_field_name( 'style' ); ?>"> - <?php foreach ( array( 'list' => __( 'List', $this->textdomain), 'none' => __( 'None', $this->textdomain ) ) as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['style'], $option_value ); ?>><?php echo $option_label; ?></option> + <?php foreach ( array( 'list' => esc_attr__( 'List', $this->textdomain), 'none' => esc_attr__( 'None', $this->textdomain ) ) as $option_value => $option_label ) { ?> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['style'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> </div> <div class="hybrid-widget-controls columns-2 column-last"> + <p> + <label for="<?php echo $this->get_field_id( 'feed' ); ?>"><code>feed</code></label> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'feed' ); ?>" name="<?php echo $this->get_field_name( 'feed' ); ?>" value="<?php echo esc_attr( $instance['feed'] ); ?>" /> + </p> + <p> + <label for="<?php echo $this->get_field_id( 'feed_image' ); ?>"><code>feed_image</code></label> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'feed_image' ); ?>" name="<?php echo $this->get_field_name( 'feed_image' ); ?>" value="<?php echo esc_attr( $instance['feed_image'] ); ?>" /> + </p> <p> <label for="<?php echo $this->get_field_id( 'html' ); ?>"> <input class="checkbox" type="checkbox" <?php checked( $instance['html'], true ); ?> id="<?php echo $this->get_field_id( 'html' ); ?>" name="<?php echo $this->get_field_name( 'html' ); ?>" /> <?php _e( '<acronym title="Hypertext Markup Language">HTML</acronym>?', $this->textdomain ); ?> <code>html</code></label> diff --git a/wp-content/themes/hybrid/library/classes/widget-bookmarks.php b/wp-content/themes/hybrid/library/classes/widget-bookmarks.php index 9bcd92562..fecf9b203 100644 --- a/wp-content/themes/hybrid/library/classes/widget-bookmarks.php +++ b/wp-content/themes/hybrid/library/classes/widget-bookmarks.php @@ -1,87 +1,121 @@ <?php /** - * Bookmarks Widget Class - * * The Bookmarks widget replaces the default WordPress Links widget. This version gives total * control over the output to the user by allowing the input of all the arguments typically seen * in the wp_list_bookmarks() function. * - * @since 0.6 - * @link http://codex.wordpress.org/Template_Tags/wp_list_bookmarks - * @link http://themehybrid.com/themes/hybrid/widgets - * * @package Hybrid * @subpackage Classes */ +/** + * Bookmarks Widget Class + * + * @since 0.6.0 + * @link http://codex.wordpress.org/Template_Tags/wp_list_bookmarks + * @link http://themehybrid.com/themes/hybrid/widgets + */ class Hybrid_Widget_Bookmarks extends WP_Widget { + /** + * Prefix for the widget. + * @since 0.7.0 + */ var $prefix; + + /** + * Textdomain for the widget. + * @since 0.7.0 + */ var $textdomain; /** * Set up the widget's unique name, ID, class, description, and other options. - * @since 0.6 + * @since 1.2.0 */ - function Hybrid_Widget_Bookmarks() { + function __construct() { + + /* Set the widget prefix. */ $this->prefix = hybrid_get_prefix(); + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'bookmarks', 'description' => __( 'An advanced widget that gives you total control over the output of your bookmarks (links).', $this->textdomain ) ); - $control_ops = array( 'width' => 800, 'height' => 350, 'id_base' => "{$this->prefix}-bookmarks" ); - $this->WP_Widget( "{$this->prefix}-bookmarks", __( 'Bookmarks', $this->textdomain ), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'bookmarks', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your bookmarks (links).', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 800, + 'height' => 350 + ); + + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-bookmarks', // $this->id_base + __( 'Bookmarks', $this->textdomain ), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } /** * Outputs the widget based on the arguments input through the widget controls. - * @since 0.6 + * @since 0.6.0 */ function widget( $args, $instance ) { extract( $args ); - $args = array(); - - $args['title_li'] = apply_filters( 'widget_title', $instance['title_li'], $instance, $this->id_base ); - $args['category'] = ( is_array( $instance['category'] ) ? join( ', ', $instance['category'] ) : $instance['category'] ); - $args['exclude_category'] = ( is_array( $instance['exclude_category'] ) ? join( ', ', $instance['exclude_category'] ) : $instance['exclude_category'] ); - $args['category_order'] = $instance['category_order']; - $args['category_orderby'] = $instance['category_orderby']; - $args['include'] = ( is_array( $instance['include'] ) ? join( ', ', $instance['include'] ) : $instance['include'] ); - $args['exclude'] = ( is_array( $instance['exclude'] ) ? join( ', ', $instance['exclude'] ) : $instance['exclude'] ); - $args['order'] = $instance['order']; - $args['orderby'] = $instance['orderby']; - $args['limit'] = ( ( $instance['limit'] ) ? intval( $instance['limit'] ) : -1 ); - $args['between'] = $instance['between']; - $args['link_before'] = $instance['link_before']; - $args['link_after'] = $instance['link_after']; - $args['search'] = $instance['search']; - $args['categorize'] = isset( $instance['categorize'] ) ? $instance['categorize'] : false; - $args['show_description'] = isset( $instance['show_description'] ) ? $instance['show_description'] : false; - $args['hide_invisible'] = isset( $instance['hide_invisible'] ) ? $instance['hide_invisible'] : false; - $args['show_rating'] = isset( $instance['show_rating'] ) ? $instance['show_rating'] : false; - $args['show_updated'] = isset( $instance['show_updated'] ) ? $instance['show_updated'] : false; - $args['show_images'] = isset( $instance['show_images'] ) ? $instance['show_images'] : false; - $args['show_name'] = isset( $instance['show_name'] ) ? $instance['show_name'] : false; - $args['show_private'] = isset( $instance['show_private'] ) ? $instance['show_private'] : false; - - if ( $args['categorize'] ) + /* Set up the $before_widget ID for multiple widgets created by the bookmarks widget. */ + if ( $instance['categorize'] ) $before_widget = preg_replace( '/id="[^"]*"/','id="%id"', $before_widget ); + + /* Add a class to $before_widget if one is set. */ if ( $instance['class'] ) $before_widget = str_replace( 'class="', 'class="' . esc_attr( $instance['class'] ) . ' ', $before_widget ); - $args['title_before'] = $before_title; - $args['title_after'] = $after_title; - $args['category_before'] = $before_widget; - $args['category_after'] = $after_widget; - $args['category_name'] = false; - $args['echo'] = false; + /* Set up the arguments for wp_list_bookmarks(). */ + $args = array( + 'title_li' => apply_filters( 'widget_title', $instance['title_li'], $instance, $this->id_base ), + 'category' => !empty( $instance['category'] ) ? join( ', ', $instance['category'] ) : '', + 'exclude_category' => !empty( $instance['exclude_category'] ) ? join( ', ', $instance['exclude_category'] ) : '', + 'category_order' => $instance['category_order'], + 'category_orderby' => $instance['category_orderby'], + 'include' => !empty( $instance['include'] ) ? join( ', ', $instance['include'] ) : '', + 'exclude' => !empty( $instance['exclude'] ) ? join( ', ', $instance['exclude'] ) : '', + 'order' => $instance['order'], + 'orderby' => $instance['orderby'], + 'limit' => $instance['limit'] ? intval( $instance['limit'] ) : -1, + 'between' => $instance['between'], + 'link_before' => $instance['link_before'], + 'link_after' => $instance['link_after'], + 'search' => $instance['search'], + 'categorize' => !empty( $instance['categorize'] ) ? true : false, + 'show_description' => !empty( $instance['show_description'] ) ? true : false, + 'hide_invisible' => !empty( $instance['hide_invisible'] ) ? true : false, + 'show_rating' => !empty( $instance['show_rating'] ) ? true : false, + 'show_updated' => !empty( $instance['show_updated'] ) ? true : false, + 'show_images' => !empty( $instance['show_images'] ) ? true : false, + 'show_name' => !empty( $instance['show_name'] ) ? true : false, + 'show_private' => !empty( $instance['show_private'] ) ? true : false, + 'title_before' => $before_title, + 'title_after' => $after_title, + 'category_before' => $before_widget, + 'category_after' => $after_widget, + 'category_name' => false, + 'echo' => false + ); + /* Output the bookmarks widget. */ echo str_replace( array( "\r", "\n", "\t" ), '', wp_list_bookmarks( $args ) ); } /** * Updates the widget control options for the particular instance of the widget. - * @since 0.6 + * @since 0.6.0 */ function update( $new_instance, $old_instance ) { $instance = $old_instance; @@ -115,46 +149,59 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { /** * Displays the widget control options in the Widgets admin screen. - * @since 0.6 + * @since 0.6.0 */ function form( $instance ) { - //Defaults + /* Set up the default form values. */ $defaults = array( - 'title_li' => __( 'Bookmarks', $this->textdomain ), + 'title_li' => esc_attr__( 'Bookmarks', $this->textdomain ), 'categorize' => true, + 'category_order' => 'ASC', + 'category_orderby' => 'name', + 'category' => array(), + 'exclude_category' => array(), + 'limit' => '', + 'order' => 'ASC', + 'orderby' => 'name', + 'include' => array(), + 'exclude' => array(), + 'search' => '', 'hide_invisible' => true, 'show_description' => false, - 'show_image' => false, + 'show_images' => false, 'show_rating' => false, 'show_updated' => false, 'show_private' => false, 'show_name' => false, 'class' => 'linkcat', 'link_before' => '<span>', - 'link_after' => '</span>' + 'link_after' => '</span>', + 'between' => '<br />', ); + + /* Merge the user-selected arguments with the defaults. */ $instance = wp_parse_args( (array) $instance, $defaults ); - $terms = get_categories( array( 'type' => 'link' ) ); + $terms = get_terms( 'link_category' ); $bookmarks = get_bookmarks( array( 'hide_invisible' => false ) ); - $category_order = array( 'ASC' => __( 'Ascending', $this->textdomain ), 'DESC' => __( 'Descending', $this->textdomain ) ); - $category_orderby = array( 'count' => __( 'Count', $this->textdomain ), 'ID' => __( 'ID', $this->textdomain ), 'name' => __( 'Name', $this->textdomain ), 'slug' => __( 'Slug', $this->textdomain ) ); - $order = array( 'ASC' => __( 'Ascending', $this->textdomain ), 'DESC' => __( 'Descending', $this->textdomain ) ); - $orderby = array( 'id' => __( 'ID', $this->textdomain ), 'description' => __( 'Description', $this->textdomain ), 'length' => __( 'Length', $this->textdomain ), 'name' => __( 'Name', $this->textdomain ), 'notes' => __( 'Notes', $this->textdomain ), 'owner' => __( 'Owner', $this->textdomain ), 'rand' => __( 'Random', $this->textdomain ), 'rating' => __( 'Rating', $this->textdomain ), 'rel' => __( 'Rel', $this->textdomain ), 'rss' => __( 'RSS', $this->textdomain ), 'target' => __( 'Target', $this->textdomain ), 'updated' => __( 'Updated', $this->textdomain ), 'url' => __( 'URL', $this->textdomain ) ); + $category_order = array( 'ASC' => esc_attr__( 'Ascending', $this->textdomain ), 'DESC' => esc_attr__( 'Descending', $this->textdomain ) ); + $category_orderby = array( 'count' => esc_attr__( 'Count', $this->textdomain ), 'ID' => esc_attr__( 'ID', $this->textdomain ), 'name' => esc_attr__( 'Name', $this->textdomain ), 'slug' => esc_attr__( 'Slug', $this->textdomain ) ); + $order = array( 'ASC' => esc_attr__( 'Ascending', $this->textdomain ), 'DESC' => esc_attr__( 'Descending', $this->textdomain ) ); + $orderby = array( 'id' => esc_attr__( 'ID', $this->textdomain ), 'description' => esc_attr__( 'Description', $this->textdomain ), 'length' => esc_attr__( 'Length', $this->textdomain ), 'name' => esc_attr__( 'Name', $this->textdomain ), 'notes' => esc_attr__( 'Notes', $this->textdomain ), 'owner' => esc_attr__( 'Owner', $this->textdomain ), 'rand' => esc_attr__( 'Random', $this->textdomain ), 'rating' => esc_attr__( 'Rating', $this->textdomain ), 'rel' => esc_attr__( 'Rel', $this->textdomain ), 'rss' => esc_attr__( 'RSS', $this->textdomain ), 'target' => esc_attr__( 'Target', $this->textdomain ), 'updated' => esc_attr__( 'Updated', $this->textdomain ), 'url' => esc_attr__( 'URL', $this->textdomain ) ); ?> <div class="hybrid-widget-controls columns-3"> <p> <label for="<?php echo $this->get_field_id( 'title_li' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title_li' ); ?>" name="<?php echo $this->get_field_name( 'title_li' ); ?>" value="<?php echo $instance['title_li']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title_li' ); ?>" name="<?php echo $this->get_field_name( 'title_li' ); ?>" value="<?php echo esc_attr( $instance['title_li'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'category_order' ); ?>"><code>category_order</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'category_order' ); ?>" name="<?php echo $this->get_field_name( 'category_order' ); ?>"> <?php foreach ( $category_order as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['category_order'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['category_order'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -162,7 +209,7 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { <label for="<?php echo $this->get_field_id( 'category_orderby' ); ?>"><code>category_orderby</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'category_orderby' ); ?>" name="<?php echo $this->get_field_name( 'category_orderby' ); ?>"> <?php foreach ( $category_orderby as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['category_orderby'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['category_orderby'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -170,7 +217,7 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { <label for="<?php echo $this->get_field_id( 'category' ); ?>"><code>category</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'category' ); ?>" name="<?php echo $this->get_field_name( 'category' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $terms as $term ) { ?> - <option value="<?php echo $term->term_id; ?>" <?php echo ( in_array( $term->term_id, (array) $instance['category'] ) ? 'selected="selected"' : '' ); ?>><?php echo $term->name; ?></option> + <option value="<?php echo esc_attr( $term->term_id ); ?>" <?php echo ( in_array( $term->term_id, (array) $instance['category'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $term->name ); ?></option> <?php } ?> </select> </p> @@ -178,13 +225,13 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { <label for="<?php echo $this->get_field_id( 'exclude_category' ); ?>"><code>exclude_category</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'exclude_category' ); ?>" name="<?php echo $this->get_field_name( 'exclude_category' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $terms as $term ) { ?> - <option value="<?php echo $term->term_id; ?>" <?php echo ( in_array( $term->term_id, (array) $instance['exclude_category'] ) ? 'selected="selected"' : '' ); ?>><?php echo $term->name; ?></option> + <option value="<?php echo esc_attr( $term->term_id ); ?>" <?php echo ( in_array( $term->term_id, (array) $instance['exclude_category'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $term->name ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'class' ); ?>"><code>class</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'class' ); ?>" name="<?php echo $this->get_field_name( 'class' ); ?>" value="<?php echo $instance['class']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'class' ); ?>" name="<?php echo $this->get_field_name( 'class' ); ?>" value="<?php echo esc_attr( $instance['class'] ); ?>" /> </p> </div> @@ -193,13 +240,13 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { <p> <label for="<?php echo $this->get_field_id( 'limit' ); ?>"><code>limit</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'limit' ); ?>" name="<?php echo $this->get_field_name( 'limit' ); ?>" value="<?php echo $instance['limit']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'limit' ); ?>" name="<?php echo $this->get_field_name( 'limit' ); ?>" value="<?php echo esc_attr( $instance['limit'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'order' ); ?>"><code>order</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'order' ); ?>" name="<?php echo $this->get_field_name( 'order' ); ?>"> <?php foreach ( $order as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['order'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['order'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -207,7 +254,7 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { <label for="<?php echo $this->get_field_id( 'orderby' ); ?>"><code>orderby</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'orderby' ); ?>" name="<?php echo $this->get_field_name( 'orderby' ); ?>"> <?php foreach ( $orderby as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['orderby'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['orderby'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -215,7 +262,7 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { <label for="<?php echo $this->get_field_id( 'include' ); ?>"><code>include</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'include' ); ?>" name="<?php echo $this->get_field_name( 'include' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $bookmarks as $bookmark ) { ?> - <option value="<?php echo $bookmark->link_id; ?>" <?php echo ( in_array( $bookmark->link_id, (array) $instance['include'] ) ? 'selected="selected"' : '' ); ?>><?php echo $bookmark->link_name; ?></option> + <option value="<?php echo esc_attr( $bookmark->link_id ); ?>" <?php echo ( in_array( $bookmark->link_id, (array) $instance['include'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $bookmark->link_name ); ?></option> <?php } ?> </select> </p> @@ -223,13 +270,13 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { <label for="<?php echo $this->get_field_id( 'exclude' ); ?>"><code>exclude</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'exclude' ); ?>" name="<?php echo $this->get_field_name( 'exclude' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $bookmarks as $bookmark ) { ?> - <option value="<?php echo $bookmark->link_id; ?>" <?php echo ( in_array( $bookmark->link_id, (array) $instance['exclude'] ) ? 'selected="selected"' : '' ); ?>><?php echo $bookmark->link_name; ?></option> + <option value="<?php echo esc_attr( $bookmark->link_id ); ?>" <?php echo ( in_array( $bookmark->link_id, (array) $instance['exclude'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $bookmark->link_name ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'search' ); ?>"><code>search</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'search' ); ?>" name="<?php echo $this->get_field_name( 'search' ); ?>" value="<?php echo $instance['search']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'search' ); ?>" name="<?php echo $this->get_field_name( 'search' ); ?>" value="<?php echo esc_attr( $instance['search'] ); ?>" /> </p> </div> @@ -237,15 +284,15 @@ class Hybrid_Widget_Bookmarks extends WP_Widget { <div class="hybrid-widget-controls columns-3 column-last"> <p> <label for="<?php echo $this->get_field_id( 'between' ); ?>"><code>between</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'between' ); ?>" name="<?php echo $this->get_field_name( 'between' ); ?>" value="<?php echo $instance['between']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'between' ); ?>" name="<?php echo $this->get_field_name( 'between' ); ?>" value="<?php echo esc_attr( $instance['between'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'link_before' ); ?>"><code>link_before</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_before' ); ?>" name="<?php echo $this->get_field_name( 'link_before' ); ?>" value="<?php echo $instance['link_before']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_before' ); ?>" name="<?php echo $this->get_field_name( 'link_before' ); ?>" value="<?php echo esc_attr( $instance['link_before'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'link_after' ); ?>"><code>link_after</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_after' ); ?>" name="<?php echo $this->get_field_name( 'link_after' ); ?>" value="<?php echo $instance['link_after']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_after' ); ?>" name="<?php echo $this->get_field_name( 'link_after' ); ?>" value="<?php echo esc_attr( $instance['link_after'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'categorize' ); ?>"> diff --git a/wp-content/themes/hybrid/library/classes/widget-calendar.php b/wp-content/themes/hybrid/library/classes/widget-calendar.php index fab5f932e..74233f288 100644 --- a/wp-content/themes/hybrid/library/classes/widget-calendar.php +++ b/wp-content/themes/hybrid/library/classes/widget-calendar.php @@ -1,61 +1,96 @@ <?php /** - * Calendar Widget Class - * * The calendar widget was created to give users the ability to show a post calendar for their blog * using all the available options given in the get_calendar() function. It replaces the default WordPress * calendar widget. * - * @since 0.6 - * @link http://codex.wordpress.org/Function_Reference/get_calendar - * @link http://themehybrid.com/themes/hybrid/widgets - * * @package Hybrid * @subpackage Classes */ +/** + * Calendar Widget Class + * + * @since 0.6.0 + * @link http://codex.wordpress.org/Function_Reference/get_calendar + * @link http://themehybrid.com/themes/hybrid/widgets + */ class Hybrid_Widget_Calendar extends WP_Widget { + /** + * Prefix for the widget. + * @since 0.7.0 + */ var $prefix; + + /** + * Textdomain for the widget. + * @since 0.7.0 + */ var $textdomain; /** * Set up the widget's unique name, ID, class, description, and other options. - * @since 0.6 + * @since 1.2.0 */ - function Hybrid_Widget_Calendar() { + function __construct() { + + /* Set the widget prefix. */ $this->prefix = hybrid_get_prefix(); + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'calendar', 'description' => __( 'An advanced widget that gives you total control over the output of your calendar.', $this->textdomain ) ); - $control_ops = array( 'width' => 200, 'height' => 350, 'id_base' => "{$this->prefix}-calendar" ); - $this->WP_Widget( "{$this->prefix}-calendar", __( 'Calendar', $this->textdomain ), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'calendar', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your calendar.', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 200, + 'height' => 350 + ); + + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-calendar', // $this->id_base + __( 'Calendar', $this->textdomain ), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } /** * Outputs the widget based on the arguments input through the widget controls. - * @since 0.6 + * @since 0.6.0 */ function widget( $args, $instance ) { extract( $args ); - $initial = isset( $instance['initial'] ) ? $instance['initial'] : false; + /* Get the $initial argument. */ + $initial = !empty( $instance['initial'] ) ? true : false; + /* Output the theme's widget wrapper. */ echo $before_widget; - if ( $instance['title'] ) + /* If a title was input by the user, display it. */ + if ( !empty( $instance['title'] ) ) echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; + /* Display the calendar. */ echo '<div class="calendar-wrap">'; - get_calendar( $initial ); + echo str_replace( array( "\r", "\n", "\t" ), '', get_calendar( $initial, false ) ); echo '</div><!-- .calendar-wrap -->'; + /* Close the theme's widget wrapper. */ echo $after_widget; } /** * Updates the widget control options for the particular instance of the widget. - * @since 0.6 + * @since 0.6.0 */ function update( $new_instance, $old_instance ) { $instance = $old_instance; @@ -70,21 +105,23 @@ class Hybrid_Widget_Calendar extends WP_Widget { /** * Displays the widget control options in the Widgets admin screen. - * @since 0.6 + * @since 0.6.0 */ function form( $instance ) { - //Defaults + /* Set up the default form values. */ $defaults = array( - 'title' => __( 'Calendar', $this->textdomain ), + 'title' => esc_attr__( 'Calendar', $this->textdomain ), 'initial' => false ); + + /* Merge the user-selected arguments with the defaults. */ $instance = wp_parse_args( (array) $instance, $defaults ); ?> <div class="hybrid-widget-controls columns-1"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <input class="checkbox" type="checkbox" <?php checked( $instance['initial'], true ); ?> id="<?php echo $this->get_field_id( 'initial' ); ?>" name="<?php echo $this->get_field_name( 'initial' ); ?>" /> diff --git a/wp-content/themes/hybrid/library/classes/widget-categories.php b/wp-content/themes/hybrid/library/classes/widget-categories.php index dafacc04a..2b1f4730c 100644 --- a/wp-content/themes/hybrid/library/classes/widget-categories.php +++ b/wp-content/themes/hybrid/library/classes/widget-categories.php @@ -1,87 +1,124 @@ <?php /** - * Categories Widget Class - * * The Categories widget replaces the default WordPress Categories widget. This version gives total * control over the output to the user by allowing the input of all the arguments typically seen * in the wp_list_categories() function. * - * @since 0.6 - * @link http://codex.wordpress.org/Template_Tags/wp_list_categories - * @link http://themehybrid.com/themes/hybrid/widgets - * * @package Hybrid * @subpackage Classes */ +/** + * Categories Widget Class + * + * @since 0.6 + * @link http://codex.wordpress.org/Template_Tags/wp_list_categories + * @link http://themehybrid.com/themes/hybrid/widgets + */ class Hybrid_Widget_Categories extends WP_Widget { + /** + * Prefix for the widget. + * @since 0.7.0 + */ var $prefix; + + /** + * Textdomain for the widget. + * @since 0.7.0 + */ var $textdomain; /** * Set up the widget's unique name, ID, class, description, and other options. - * @since 0.6 + * @since 1.2.0 */ - function Hybrid_Widget_Categories() { + function __construct() { + + /* Set the widget prefix. */ $this->prefix = hybrid_get_prefix(); + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'categories', 'description' => __( 'An advanced widget that gives you total control over the output of your category links.', $this->textdomain ) ); - $control_ops = array( 'width' => 800, 'height' => 350, 'id_base' => "{$this->prefix}-categories" ); - $this->WP_Widget( "{$this->prefix}-categories", __( 'Categories', $this->textdomain ), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'categories', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your category links.', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 800, + 'height' => 350 + ); + + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-categories', // $this->id_base + __( 'Categories', $this->textdomain ), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } /** * Outputs the widget based on the arguments input through the widget controls. - * @since 0.6 + * @since 0.6.0 */ function widget( $args, $instance ) { extract( $args ); - $args = array(); - - $args['taxonomy'] = $instance['taxonomy']; - $args['style'] = $instance['style']; - $args['orderby'] = $instance['orderby']; - $args['order'] = $instance['order']; - $args['include'] = ( is_array( $instance['include'] ) ? join( ', ', $instance['include'] ) : $instance['include'] ); - $args['exclude'] = ( is_array( $instance['exclude'] ) ? join( ', ', $instance['exclude'] ) : $instance['exclude'] ); - $args['exclude_tree'] = $instance['exclude_tree']; - $args['depth'] = intval( $instance['depth'] ); - $args['number'] = intval( $instance['number'] ); - $args['child_of'] = intval( $instance['child_of'] ); - $args['current_category'] = intval( $instance['current_category'] ); - $args['feed'] = $instance['feed']; - $args['feed_type'] = $instance['feed_type']; - $args['feed_image'] = esc_url( $instance['feed_image'] ); - $args['search'] = $instance['search']; - $args['hierarchical'] = isset( $instance['hierarchical'] ) ? $instance['hierarchical'] : false; - $args['use_desc_for_title'] = isset( $instance['use_desc_for_title'] ) ? $instance['use_desc_for_title'] : false; - $args['show_last_update'] = isset( $instance['show_last_update'] ) ? $instance['show_last_updated'] : false; - $args['show_count'] = isset( $instance['show_count'] ) ? $instance['show_count'] : false; - $args['hide_empty'] = isset( $instance['hide_empty'] ) ? $instance['hide_empty'] : false; - $args['title_li'] = false; - $args['echo'] = false; + /* Set up the arguments for wp_list_categories(). */ + $args = array( + 'taxonomy' => $instance['taxonomy'], + 'style' => $instance['style'], + 'orderby' => $instance['orderby'], + 'order' => $instance['order'], + 'include' => !empty( $instance['include'] ) ? join( ', ', $instance['include'] ) : '', + 'exclude' => !empty( $instance['exclude'] ) ? join( ', ', $instance['exclude'] ) : '', + 'exclude_tree' => $instance['exclude_tree'], + 'depth' => intval( $instance['depth'] ), + 'number' => intval( $instance['number'] ), + 'child_of' => intval( $instance['child_of'] ), + 'current_category' => intval( $instance['current_category'] ), + 'feed' => $instance['feed'], + 'feed_type' => $instance['feed_type'], + 'feed_image' => esc_url( $instance['feed_image'] ), + 'search' => $instance['search'], + 'hierarchical' => !empty( $instance['hierarchical'] ) ? true : false, + 'use_desc_for_title' => !empty( $instance['use_desc_for_title'] ) ? true : false, + 'show_last_update' => !empty( $instance['show_last_update'] ) ? true : false, + 'show_count' => !empty( $instance['show_count'] ) ? true : false, + 'hide_empty' => !empty( $instance['hide_empty'] ) ? true : false, + 'title_li' => false, + 'echo' => false + ); + /* Output the theme's widget wrapper. */ echo $before_widget; - if ( $instance['title'] ) + /* If a title was input by the user, display it. */ + if ( !empty( $instance['title'] ) ) echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; + /* Get the categories list. */ $categories = str_replace( array( "\r", "\n", "\t" ), '', wp_list_categories( $args ) ); + /* If 'list' is the user-selected style, wrap the categories in an unordered list. */ if ( 'list' == $args['style'] ) $categories = '<ul class="xoxo categories">' . $categories . '</ul><!-- .xoxo .categories -->'; + /* Output the categories list. */ echo $categories; + /* Close the theme's widget wrapper. */ echo $after_widget; } /** * Updates the widget control options for the particular instance of the widget. - * @since 0.6 + * @since 0.6.0 */ function update( $new_instance, $old_instance ) { $instance = $old_instance; @@ -117,44 +154,58 @@ class Hybrid_Widget_Categories extends WP_Widget { /** * Displays the widget control options in the Widgets admin screen. - * @since 0.6 + * @since 0.6.0 */ function form( $instance ) { - // Defaults + /* Set up the default form values. */ $defaults = array( - 'title' => __( 'Categories', $this->textdomain ), + 'title' => esc_attr__( 'Categories', $this->textdomain ), 'taxonomy' => 'category', 'style' => 'list', 'include' => array(), 'exclude' => array(), + 'exclude_tree' => '', + 'child_of' => '', + 'current_category' => '', + 'search' => '', 'hierarchical' => true, 'hide_empty' => true, 'order' => 'ASC', - 'orderby' => 'name' + 'orderby' => 'name', + 'depth' => 0, + 'number' => '', + 'feed' => '', + 'feed_type' => '', + 'feed_image' => '', + 'use_desc_for_title' => false, + 'show_last_update' => false, + 'show_count' => false, ); + + /* Merge the user-selected arguments with the defaults. */ $instance = wp_parse_args( (array) $instance, $defaults ); /* <select> element options. */ $taxonomies = get_taxonomies( array( 'show_tagcloud' => true ), 'objects' ); $terms = get_terms( $instance['taxonomy'] ); - $style = array( 'list' => __( 'List', $this->textdomain ), 'none' => __( 'None', $this->textdomain ) ); - $order = array( 'ASC' => __( 'Ascending', $this->textdomain ), 'DESC' => __( 'Descending', $this->textdomain ) ); - $orderby = array( 'count' => __( 'Count', $this->textdomain ), 'ID' => __( 'ID', $this->textdomain ), 'name' => __( 'Name', $this->textdomain ), 'slug' => __( 'Slug', $this->textdomain ), 'term_group' => __( 'Term Group', $this->textdomain ) ); - $feed_type = array( '' => '', 'atom' => __( 'Atom', $this->textdomain ), 'rdf' => __( 'RDF', $this->textdomain ), 'rss' => __( 'RSS', $this->textdomain ), 'rss2' => __( 'RSS 2.0', $this->textdomain ) ); + $style = array( 'list' => esc_attr__( 'List', $this->textdomain ), 'none' => esc_attr__( 'None', $this->textdomain ) ); + $order = array( 'ASC' => esc_attr__( 'Ascending', $this->textdomain ), 'DESC' => esc_attr__( 'Descending', $this->textdomain ) ); + $orderby = array( 'count' => esc_attr__( 'Count', $this->textdomain ), 'ID' => esc_attr__( 'ID', $this->textdomain ), 'name' => esc_attr__( 'Name', $this->textdomain ), 'slug' => esc_attr__( 'Slug', $this->textdomain ), 'term_group' => esc_attr__( 'Term Group', $this->textdomain ) ); + $feed_type = array( '' => '', 'atom' => esc_attr__( 'Atom', $this->textdomain ), 'rdf' => esc_attr__( 'RDF', $this->textdomain ), 'rss' => esc_attr__( 'RSS', $this->textdomain ), 'rss2' => esc_attr__( 'RSS 2.0', $this->textdomain ) ); ?> <div class="hybrid-widget-controls columns-3"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'taxonomy' ); ?>"><code>taxonomy</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>"> <?php foreach ( $taxonomies as $taxonomy ) { ?> - <option value="<?php echo $taxonomy->name; ?>" <?php selected( $instance['taxonomy'], $taxonomy->name ); ?>><?php echo $taxonomy->labels->singular_name; ?></option> + <option value="<?php echo esc_attr( $taxonomy->name ); ?>" <?php selected( $instance['taxonomy'], $taxonomy->name ); ?>><?php echo esc_html( $taxonomy->labels->singular_name ); ?></option> <?php } ?> </select> </p> @@ -162,7 +213,7 @@ class Hybrid_Widget_Categories extends WP_Widget { <label for="<?php echo $this->get_field_id( 'style' ); ?>"><code>style</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'style' ); ?>" name="<?php echo $this->get_field_name( 'style' ); ?>"> <?php foreach ( $style as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['style'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['style'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -170,7 +221,7 @@ class Hybrid_Widget_Categories extends WP_Widget { <label for="<?php echo $this->get_field_id( 'order' ); ?>"><code>order</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'order' ); ?>" name="<?php echo $this->get_field_name( 'order' ); ?>"> <?php foreach ( $order as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['order'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['order'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -178,17 +229,17 @@ class Hybrid_Widget_Categories extends WP_Widget { <label for="<?php echo $this->get_field_id( 'orderby' ); ?>"><code>orderby</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'orderby' ); ?>" name="<?php echo $this->get_field_name( 'orderby' ); ?>"> <?php foreach ( $orderby as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['orderby'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['orderby'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'depth' ); ?>"><code>depth</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'depth' ); ?>" name="<?php echo $this->get_field_name( 'depth' ); ?>" value="<?php echo $instance['depth']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'depth' ); ?>" name="<?php echo $this->get_field_name( 'depth' ); ?>" value="<?php echo esc_attr( $instance['depth'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'number' ); ?>"><code>number</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" value="<?php echo $instance['number']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" value="<?php echo esc_attr( $instance['number'] ); ?>" /> </p> </div> @@ -197,7 +248,7 @@ class Hybrid_Widget_Categories extends WP_Widget { <label for="<?php echo $this->get_field_id( 'include' ); ?>"><code>include</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'include' ); ?>" name="<?php echo $this->get_field_name( 'include' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $terms as $term ) { ?> - <option value="<?php echo $term->term_id; ?>" <?php echo ( in_array( $term->term_id, (array) $instance['include'] ) ? 'selected="selected"' : '' ); ?>><?php echo $term->name; ?></option> + <option value="<?php echo esc_attr( $term->term_id ); ?>" <?php echo ( in_array( $term->term_id, (array) $instance['include'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $term->name ); ?></option> <?php } ?> </select> </p> @@ -205,44 +256,44 @@ class Hybrid_Widget_Categories extends WP_Widget { <label for="<?php echo $this->get_field_id( 'exclude' ); ?>"><code>exclude</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'exclude' ); ?>" name="<?php echo $this->get_field_name( 'exclude' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $terms as $term ) { ?> - <option value="<?php echo $term->term_id; ?>" <?php echo ( in_array( $term->term_id, (array) $instance['exclude'] ) ? 'selected="selected"' : '' ); ?>><?php echo $term->name; ?></option> + <option value="<?php echo esc_attr( $term->term_id ); ?>" <?php echo ( in_array( $term->term_id, (array) $instance['exclude'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $term->name ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'exclude_tree' ); ?>"><code>exclude_tree</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'exclude_tree' ); ?>" name="<?php echo $this->get_field_name( 'exclude_tree' ); ?>" value="<?php echo $instance['exclude_tree']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'exclude_tree' ); ?>" name="<?php echo $this->get_field_name( 'exclude_tree' ); ?>" value="<?php echo esc_attr( $instance['exclude_tree'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'child_of' ); ?>"><code>child_of</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'child_of' ); ?>" name="<?php echo $this->get_field_name( 'child_of' ); ?>" value="<?php echo $instance['child_of']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'child_of' ); ?>" name="<?php echo $this->get_field_name( 'child_of' ); ?>" value="<?php echo esc_attr( $instance['child_of'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'current_category' ); ?>"><code>current_category</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'current_category' ); ?>" name="<?php echo $this->get_field_name( 'current_category' ); ?>" value="<?php echo $instance['current_category']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'current_category' ); ?>" name="<?php echo $this->get_field_name( 'current_category' ); ?>" value="<?php echo esc_attr( $instance['current_category'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'search' ); ?>"><code>search</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'search' ); ?>" name="<?php echo $this->get_field_name( 'search' ); ?>" value="<?php echo $instance['search']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'search' ); ?>" name="<?php echo $this->get_field_name( 'search' ); ?>" value="<?php echo esc_attr( $instance['search'] ); ?>" /> </p> </div> <div class="hybrid-widget-controls columns-3 column-last"> <p> <label for="<?php echo $this->get_field_id( 'feed' ); ?>"><code>feed</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'feed' ); ?>" name="<?php echo $this->get_field_name( 'feed' ); ?>" value="<?php echo $instance['feed']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'feed' ); ?>" name="<?php echo $this->get_field_name( 'feed' ); ?>" value="<?php echo esc_attr( $instance['feed'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'feed_type' ); ?>"><code>feed_type</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'feed_type' ); ?>" name="<?php echo $this->get_field_name( 'feed_type' ); ?>"> <?php foreach ( $feed_type as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['feed_type'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['feed_type'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'feed_image' ); ?>"><code>feed_image</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'feed_image' ); ?>" name="<?php echo $this->get_field_name( 'feed_image' ); ?>" value="<?php echo $instance['feed_image']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'feed_image' ); ?>" name="<?php echo $this->get_field_name( 'feed_image' ); ?>" value="<?php echo esc_attr( $instance['feed_image'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'hierarchical' ); ?>"> diff --git a/wp-content/themes/hybrid/library/classes/widget-nav-menu.php b/wp-content/themes/hybrid/library/classes/widget-nav-menu.php index 6782e0b87..82ca3cd06 100644 --- a/wp-content/themes/hybrid/library/classes/widget-nav-menu.php +++ b/wp-content/themes/hybrid/library/classes/widget-nav-menu.php @@ -1,73 +1,108 @@ <?php /** - * Nav Menu Widget Class - * * The nav menu widget was created to give users the ability to show nav menus created from the * Menus screen, by the theme, or by plugins using the wp_nav_menu() function. It replaces the default * WordPress navigation menu class. * - * @since 0.8 - * @link http://themehybrid.com/themes/hybrid/widgets - * * @package Hybrid * @subpackage Classes */ +/** + * Nav Menu Widget Class + * + * @since 0.8.0 + * @link http://themehybrid.com/themes/hybrid/widgets + */ class Hybrid_Widget_Nav_Menu extends WP_Widget { + /** + * Prefix for the widget. + * @since 0.8.0 + */ var $prefix; + + /** + * Textdomain for the widget. + * @since 0.8.0 + */ var $textdomain; /** * Set up the widget's unique name, ID, class, description, and other options. - * @since 0.6 + * @since 1.2.0 */ - function Hybrid_Widget_Nav_Menu() { + function __construct() { + + /* Set the widget prefix. */ $this->prefix = hybrid_get_prefix(); + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'nav-menu', 'description' => __( 'An advanced widget that gives you total control over the output of your menus.', $this->textdomain ) ); - $control_ops = array( 'width' => 525, 'height' => 350, 'id_base' => "{$this->prefix}-nav-menu" ); - $this->WP_Widget( "{$this->prefix}-nav-menu", __( 'Navigation Menu', $this->textdomain ), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'nav-menu', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your menus.', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 525, + 'height' => 350 + ); + + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-nav-menu', // $this->id_base + __( 'Navigation Menu', $this->textdomain ), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } /** * Outputs the widget based on the arguments input through the widget controls. - * @since 0.6 + * @since 0.8.0 */ function widget( $args, $instance ) { extract( $args ); - $args = array(); - - $args['menu'] = $instance['menu']; - $args['container'] = $instance['container']; - $args['container_id'] = $instance['container_id']; - $args['container_class'] = $instance['container_class']; - $args['menu_id'] = $instance['menu_id']; - $args['menu_class'] = $instance['menu_class']; - $args['link_before'] = $instance['link_before']; - $args['link_after'] = $instance['link_after']; - $args['before'] = $instance['before']; - $args['after'] = $instance['after']; - $args['depth'] = intval( $instance['depth'] ); - $args['fallback_cb'] = $instance['fallback_cb']; - $args['walker'] = $instance['walker']; - $args['echo'] = false; + /* Set up the arguments for the wp_nav_menu() function. */ + $args = array( + 'menu' => $instance['menu'], + 'container' => $instance['container'], + 'container_id' => $instance['container_id'], + 'container_class' => $instance['container_class'], + 'menu_id' => $instance['menu_id'], + 'menu_class' => $instance['menu_class'], + 'link_before' => $instance['link_before'], + 'link_after' => $instance['link_after'], + 'before' => $instance['before'], + 'after' => $instance['after'], + 'depth' => intval( $instance['depth'] ), + 'fallback_cb' => $instance['fallback_cb'], + 'walker' => $instance['walker'], + 'echo' => false + ); + /* Output the theme's widget wrapper. */ echo $before_widget; - if ( $instance['title'] ) + /* If a title was input by the user, display it. */ + if ( !empty( $instance['title'] ) ) echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; + /* Output the nav menu. */ echo str_replace( array( "\r", "\n", "\t" ), '', wp_nav_menu( $args ) ); + /* Close the theme's widget wrapper. */ echo $after_widget; } /** * Updates the widget control options for the particular instance of the widget. - * @since 0.6 + * @since 0.8.0 */ function update( $new_instance, $old_instance ) { $instance = $old_instance; @@ -88,22 +123,29 @@ class Hybrid_Widget_Nav_Menu extends WP_Widget { /** * Displays the widget control options in the Widgets admin screen. - * @since 0.6 + * @since 0.8.0 */ function form( $instance ) { - //Defaults + /* Set up the default form values. */ $defaults = array( - 'title' => __( 'Navigation', $this->textdomain ), - 'format' => 'div', + 'title' => esc_attr__( 'Navigation', $this->textdomain ), + 'menu' => '', + 'container' => 'div', + 'container_id' => '', + 'container_class' => '', + 'menu_id' => '', 'menu_class' => 'nav-menu', 'depth' => 0, 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', - 'fallback_cb' => 'wp_page_menu' + 'fallback_cb' => 'wp_page_menu', + 'walker' => '' ); + + /* Merge the user-selected arguments with the defaults. */ $instance = wp_parse_args( (array) $instance, $defaults ); $container = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'nav' ) ); @@ -112,13 +154,13 @@ class Hybrid_Widget_Nav_Menu extends WP_Widget { <div class="hybrid-widget-controls columns-2"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'menu' ); ?>"><code>menu</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'menu' ); ?>" name="<?php echo $this->get_field_name( 'menu' ); ?>"> <?php foreach ( wp_get_nav_menus() as $menu ) { ?> - <option value="<?php echo $menu->term_id; ?>" <?php selected( $instance['menu'], $menu->term_id ); ?>><?php echo $menu->name; ?></option> + <option value="<?php echo esc_attr( $menu->term_id ); ?>" <?php selected( $instance['menu'], $menu->term_id ); ?>><?php echo esc_html( $menu->name ); ?></option> <?php } ?> </select> </p> @@ -126,56 +168,56 @@ class Hybrid_Widget_Nav_Menu extends WP_Widget { <label for="<?php echo $this->get_field_id( 'container' ); ?>"><code>container</code></label> <select class="smallfat" id="<?php echo $this->get_field_id( 'container' ); ?>" name="<?php echo $this->get_field_name( 'container' ); ?>"> <?php foreach ( $container as $option ) { ?> - <option value="<?php echo $option; ?>" <?php selected( $instance['container'], $option ); ?>><?php echo $option; ?></option> + <option value="<?php echo esc_attr( $option ); ?>" <?php selected( $instance['container'], $option ); ?>><?php echo esc_html( $option ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'container_id' ); ?>"><code>container_id</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'container_id' ); ?>" name="<?php echo $this->get_field_name( 'container_id' ); ?>" value="<?php echo $instance['container_id']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'container_id' ); ?>" name="<?php echo $this->get_field_name( 'container_id' ); ?>" value="<?php echo esc_attr( $instance['container_id'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'container_class' ); ?>"><code>container_class</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'container_class' ); ?>" name="<?php echo $this->get_field_name( 'container_class' ); ?>" value="<?php echo $instance['container_class']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'container_class' ); ?>" name="<?php echo $this->get_field_name( 'container_class' ); ?>" value="<?php echo esc_attr( $instance['container_class'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'menu_id' ); ?>"><code>menu_id</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'menu_id' ); ?>" name="<?php echo $this->get_field_name( 'menu_id' ); ?>" value="<?php echo $instance['menu_id']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'menu_id' ); ?>" name="<?php echo $this->get_field_name( 'menu_id' ); ?>" value="<?php echo esc_attr( $instance['menu_id'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'menu_class' ); ?>"><code>menu_class</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'menu_class' ); ?>" name="<?php echo $this->get_field_name( 'menu_class' ); ?>" value="<?php echo $instance['menu_class']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'menu_class' ); ?>" name="<?php echo $this->get_field_name( 'menu_class' ); ?>" value="<?php echo esc_attr( $instance['menu_class'] ); ?>" /> </p> </div> <div class="hybrid-widget-controls columns-2 column-last"> <p> <label for="<?php echo $this->get_field_id( 'depth' ); ?>"><code>depth</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'depth' ); ?>" name="<?php echo $this->get_field_name( 'depth' ); ?>" value="<?php echo $instance['depth']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'depth' ); ?>" name="<?php echo $this->get_field_name( 'depth' ); ?>" value="<?php echo esc_attr( $instance['depth'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'before' ); ?>"><code>before</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'before' ); ?>" name="<?php echo $this->get_field_name( 'before' ); ?>" value="<?php echo $instance['before']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'before' ); ?>" name="<?php echo $this->get_field_name( 'before' ); ?>" value="<?php echo esc_attr( $instance['before'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'after' ); ?>"><code>after</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'after' ); ?>" name="<?php echo $this->get_field_name( 'after' ); ?>" value="<?php echo $instance['after']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'after' ); ?>" name="<?php echo $this->get_field_name( 'after' ); ?>" value="<?php echo esc_attr( $instance['after'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'link_before' ); ?>"><code>link_before</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_before' ); ?>" name="<?php echo $this->get_field_name( 'link_before' ); ?>" value="<?php echo $instance['link_before']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_before' ); ?>" name="<?php echo $this->get_field_name( 'link_before' ); ?>" value="<?php echo esc_attr( $instance['link_before'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'link_after' ); ?>"><code>link_after</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_after' ); ?>" name="<?php echo $this->get_field_name( 'link_after' ); ?>" value="<?php echo $instance['link_after']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_after' ); ?>" name="<?php echo $this->get_field_name( 'link_after' ); ?>" value="<?php echo esc_attr( $instance['link_after'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'fallback_cb' ); ?>"><code>fallback_cb</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'fallback_cb' ); ?>" name="<?php echo $this->get_field_name( 'fallback_cb' ); ?>" value="<?php echo $instance['fallback_cb']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'fallback_cb' ); ?>" name="<?php echo $this->get_field_name( 'fallback_cb' ); ?>" value="<?php echo esc_attr( $instance['fallback_cb'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'walker' ); ?>"><code>walker</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'walker' ); ?>" name="<?php echo $this->get_field_name( 'walker' ); ?>" value="<?php echo $instance['walker']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'walker' ); ?>" name="<?php echo $this->get_field_name( 'walker' ); ?>" value="<?php echo esc_attr( $instance['walker'] ); ?>" /> </p> </div> <div style="clear:both;"> </div> diff --git a/wp-content/themes/hybrid/library/classes/widget-pages.php b/wp-content/themes/hybrid/library/classes/widget-pages.php index 0d8fd5dd7..44f127e90 100644 --- a/wp-content/themes/hybrid/library/classes/widget-pages.php +++ b/wp-content/themes/hybrid/library/classes/widget-pages.php @@ -1,67 +1,96 @@ <?php /** - * Pages Widget - * - * Replaces the default WordPress Pages widget. - * @link http://themehybrid.com/themes/hybrid/widgets - * - * In 0.6, converted functions to a class that extends WP 2.8's widget class. + * The Pages widget replaces the default WordPress Pages widget. This version gives total + * control over the output to the user by allowing the input of all the arguments typically seen + * in the wp_list_pages() function. * * @package Hybrid * @subpackage Widgets */ /** - * Output of the Pages widget. - * Arguments are parameters of the wp_list_pages() function. - * @link http://codex.wordpress.org/Template_Tags/wp_list_pages + * Pages Widget Class * - * @since 0.6 + * @since 0.6.0 + * @link http://codex.wordpress.org/Template_Tags/wp_list_pages + * @link http://themehybrid.com/themes/hybrid/widgets */ class Hybrid_Widget_Pages extends WP_Widget { + /** + * Prefix for the widget. + * @since 0.7.0 + */ var $prefix; - var $textdomain; - function Hybrid_Widget_Pages() { + /** + * Set up the widget's unique name, ID, class, description, and other options. + * @since 1.2.0 + */ + function __construct() { + + /* Set the widget prefix. */ $this->prefix = hybrid_get_prefix(); + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'pages', 'description' => __( 'An advanced widget that gives you total control over the output of your page links.', $this->textdomain) ); - $control_ops = array( 'width' => 800, 'height' => 350, 'id_base' => "{$this->prefix}-pages" ); - $this->WP_Widget( "{$this->prefix}-pages", __( 'Pages', $this->textdomain), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'pages', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your page links.', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 800, + 'height' => 350 + ); + + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-pages', // $this->id_base + __( 'Pages', $this->textdomain), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } + /** + * Outputs the widget based on the arguments input through the widget controls. + * @since 0.6.0 + */ function widget( $args, $instance ) { extract( $args ); - $args = array(); - - $args['sort_column'] = $instance['sort_column']; - $args['sort_order'] = $instance['sort_order']; - $args['depth'] = intval( $instance['depth'] ); - $args['child_of'] = intval( $instance['child_of'] ); - $args['meta_key'] = $instance['meta_key']; - $args['meta_value'] = $instance['meta_value']; - $args['authors'] = ( is_array( $instance['authors'] ) ? join( ', ', $instance['authors'] ) : $instance['authors'] ); - $args['include'] = ( is_array( $instance['include'] ) ? join( ', ', $instance['include'] ) : $instance['include'] ); - $args['exclude'] = ( is_array( $instance['exclude'] ) ? join( ', ', $instance['exclude'] ) : $instance['exclude'] ); - $args['exclude_tree'] = $instance['exclude_tree']; - $args['link_before'] = $instance['link_before']; - $args['link_after'] = $instance['link_after']; - $args['date_format'] = $instance['date_format']; - $args['show_date'] = $instance['show_date']; - $args['number'] = intval( $instance['number'] ); - $args['offset'] = intval( $instance['offset'] ); - $args['hierarchical'] = isset( $instance['hierarchical'] ) ? $instance['hierarchical'] : false; - $args['title_li'] = false; - $args['echo'] = false; + /* Set up the arguments for the wp_list_pages() function. */ + $args = array( + 'sort_column' => $instance['sort_column'], + 'sort_order' => $instance['sort_order'], + 'depth' => intval( $instance['depth'] ), + 'child_of' => intval( $instance['child_of'] ), + 'meta_key' => $instance['meta_key'], + 'meta_value' => $instance['meta_value'], + 'authors' => !empty( $instance['authors'] ) ? join( ', ', $instance['authors'] ) : '', + 'include' => !empty( $instance['include'] ) ? join( ', ', $instance['include'] ) : '', + 'exclude' => !empty( $instance['exclude'] ) ? join( ', ', $instance['exclude'] ) : '', + 'exclude_tree' => $instance['exclude_tree'], + 'link_before' => $instance['link_before'], + 'link_after' => $instance['link_after'], + 'date_format' => $instance['date_format'], + 'show_date' => $instance['show_date'], + 'number' => intval( $instance['number'] ), + 'offset' => intval( $instance['offset'] ), + 'hierarchical' => !empty( $instance['hierarchical'] ) ? true : false, + 'title_li' => false, + 'echo' => false + ); /* Open the output of the widget. */ echo $before_widget; - /* If there is a title given, add it along with the $before_title and $after_title variables. */ - if ( $instance['title'] ) + /* If a title was input by the user, display it. */ + if ( !empty( $instance['title'] ) ) echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; /* Output the page list. */ @@ -71,6 +100,10 @@ class Hybrid_Widget_Pages extends WP_Widget { echo $after_widget; } + /** + * Updates the widget control options for the particular instance of the widget. + * @since 0.6.0 + */ function update( $new_instance, $old_instance ) { $instance = $old_instance; @@ -97,16 +130,35 @@ class Hybrid_Widget_Pages extends WP_Widget { return $instance; } + /** + * Displays the widget control options in the Widgets admin screen. + * @since 0.6.0 + */ function form( $instance ) { - //Defaults + /* Set up the default form values. */ $defaults = array( - 'title' => __( 'Pages', $this->textdomain), + 'title' => esc_attr__( 'Pages', $this->textdomain), + 'depth' => 0, + 'number' => '', + 'offset' => '', + 'child_of' => '', + 'include' => array(), + 'exclude' => array(), + 'exclude_tree' => '', + 'meta_key' => '', + 'meta_value' => '', + 'authors' => array(), + 'link_before' => '', + 'link_after' => '', + 'show_date' => '', 'hierarchical' => true, 'sort_column' => 'post_title', 'sort_order' => 'ASC', 'date_format' => get_option( 'date_format' ) ); + + /* Merge the user-selected arguments with the defaults. */ $instance = wp_parse_args( (array) $instance, $defaults ); $posts = get_posts( array( 'post_type' => 'page', 'post_status' => 'any', 'post_mime_type' => '', 'orderby' => 'title', 'order' => 'ASC', 'numberposts' => -1 ) ); @@ -114,22 +166,23 @@ class Hybrid_Widget_Pages extends WP_Widget { foreach ( $posts as $post ) $authors[$post->post_author] = get_the_author_meta( 'display_name', $post->post_author ); - $sort_order = array( 'ASC' => __( 'Ascending', $this->textdomain ), 'DESC' => __( 'Descending', $this->textdomain ) ); - $sort_column = array( 'post_author' => __( 'Author', $this->textdomain ), 'post_date' => __( 'Date', $this->textdomain ), 'ID' => __( 'ID', $this->textdomain ), 'menu_order' => __( 'Menu Order', $this->textdomain ), 'post_modified' => __( 'Modified', $this->textdomain ), 'post_name' => __( 'Slug', $this->textdomain ), 'post_title' => __( 'Title', $this->textdomain ) ); - $show_date = array( '' => '', 'created' => __( 'Created', $this->textdomain ), 'modified' => __( 'Modified', $this->textdomain ) ); + $sort_order = array( 'ASC' => esc_attr__( 'Ascending', $this->textdomain ), 'DESC' => esc_attr__( 'Descending', $this->textdomain ) ); + $sort_column = array( 'post_author' => esc_attr__( 'Author', $this->textdomain ), 'post_date' => esc_attr__( 'Date', $this->textdomain ), 'ID' => esc_attr__( 'ID', $this->textdomain ), 'menu_order' => esc_attr__( 'Menu Order', $this->textdomain ), 'post_modified' => esc_attr__( 'Modified', $this->textdomain ), 'post_name' => esc_attr__( 'Slug', $this->textdomain ), 'post_title' => esc_attr__( 'Title', $this->textdomain ) ); + $show_date = array( '' => '', 'created' => esc_attr__( 'Created', $this->textdomain ), 'modified' => esc_attr__( 'Modified', $this->textdomain ) ); $meta_key = array_merge( array( '' ), (array) get_meta_keys() ); + ?> <div class="hybrid-widget-controls columns-3"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'sort_order' ); ?>"><code>sort_order</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'sort_order' ); ?>" name="<?php echo $this->get_field_name( 'sort_order' ); ?>"> <?php foreach ( $sort_order as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['sort_order'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['sort_order'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> @@ -137,35 +190,34 @@ class Hybrid_Widget_Pages extends WP_Widget { <label for="<?php echo $this->get_field_id( 'sort_column' ); ?>"><code>sort_column</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'sort_column' ); ?>" name="<?php echo $this->get_field_name( 'sort_column' ); ?>"> <?php foreach ( $sort_column as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['sort_column'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['sort_column'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'depth' ); ?>"><code>depth</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'depth' ); ?>" name="<?php echo $this->get_field_name( 'depth' ); ?>" value="<?php echo $instance['depth']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'depth' ); ?>" name="<?php echo $this->get_field_name( 'depth' ); ?>" value="<?php echo esc_attr( $instance['depth'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'number' ); ?>"><code>number</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" value="<?php echo $instance['number']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" value="<?php echo esc_attr( $instance['number'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'offset' ); ?>"><code>offset</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'offset' ); ?>" name="<?php echo $this->get_field_name( 'offset' ); ?>" value="<?php echo $instance['offset']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'offset' ); ?>" name="<?php echo $this->get_field_name( 'offset' ); ?>" value="<?php echo esc_attr( $instance['offset'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'child_of' ); ?>"><code>child_of</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'child_of' ); ?>" name="<?php echo $this->get_field_name( 'child_of' ); ?>" value="<?php echo $instance['child_of']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'child_of' ); ?>" name="<?php echo $this->get_field_name( 'child_of' ); ?>" value="<?php echo esc_attr( $instance['child_of'] ); ?>" /> </p> </div> <div class="hybrid-widget-controls columns-3"> - <p> <label for="<?php echo $this->get_field_id( 'include' ); ?>"><code>include</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'include' ); ?>" name="<?php echo $this->get_field_name( 'include' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $posts as $post ) { ?> - <option value="<?php echo $post->ID; ?>" <?php echo ( in_array( $post->ID, (array) $instance['include'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_attr( $post->post_title ); ?></option> + <option value="<?php echo esc_attr( $post->ID ); ?>" <?php echo ( in_array( $post->ID, (array) $instance['include'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $post->post_title ); ?></option> <?php } ?> </select> </p> @@ -173,57 +225,56 @@ class Hybrid_Widget_Pages extends WP_Widget { <label for="<?php echo $this->get_field_id( 'exclude' ); ?>"><code>exclude</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'exclude' ); ?>" name="<?php echo $this->get_field_name( 'exclude' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $posts as $post ) { ?> - <option value="<?php echo $post->ID; ?>" <?php echo ( in_array( $post->ID, (array) $instance['exclude'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_attr( $post->post_title ); ?></option> + <option value="<?php echo esc_attr( $post->ID ); ?>" <?php echo ( in_array( $post->ID, (array) $instance['exclude'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $post->post_title ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'exclude_tree' ); ?>"><code>exclude_tree</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'exclude_tree' ); ?>" name="<?php echo $this->get_field_name( 'exclude_tree' ); ?>" value="<?php echo $instance['exclude_tree']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'exclude_tree' ); ?>" name="<?php echo $this->get_field_name( 'exclude_tree' ); ?>" value="<?php echo esc_attr( $instance['exclude_tree'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'meta_key' ); ?>"><code>meta_key</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'meta_key' ); ?>" name="<?php echo $this->get_field_name( 'meta_key' ); ?>"> <?php foreach ( $meta_key as $meta ) { ?> - <option value="<?php echo $meta; ?>" <?php selected( $instance['meta_key'], $meta ); ?>><?php echo $meta; ?></option> + <option value="<?php echo esc_attr( $meta ); ?>" <?php selected( $instance['meta_key'], $meta ); ?>><?php echo esc_html( $meta ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'meta_value' ); ?>"><code>meta_value</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'meta_value' ); ?>" name="<?php echo $this->get_field_name( 'meta_value' ); ?>" value="<?php echo $instance['meta_value']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'meta_value' ); ?>" name="<?php echo $this->get_field_name( 'meta_value' ); ?>" value="<?php echo esc_attr( $instance['meta_value'] ); ?>" /> </p> </div> <div class="hybrid-widget-controls columns-3 column-last"> - <p> <label for="<?php echo $this->get_field_id( 'authors' ); ?>"><code>authors</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'authors' ); ?>" name="<?php echo $this->get_field_name( 'authors' ); ?>[]" size="4" multiple="multiple"> <?php foreach ( $authors as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php echo ( in_array( $option_value, (array) $instance['authors'] ) ? 'selected="selected"' : '' ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php echo ( in_array( $option_value, (array) $instance['authors'] ) ? 'selected="selected"' : '' ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'link_before' ); ?>"><code>link_before</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_before' ); ?>" name="<?php echo $this->get_field_name( 'link_before' ); ?>" value="<?php echo $instance['link_before']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_before' ); ?>" name="<?php echo $this->get_field_name( 'link_before' ); ?>" value="<?php echo esc_attr( $instance['link_before'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'link_after' ); ?>"><code>link_after</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_after' ); ?>" name="<?php echo $this->get_field_name( 'link_after' ); ?>" value="<?php echo $instance['link_after']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'link_after' ); ?>" name="<?php echo $this->get_field_name( 'link_after' ); ?>" value="<?php echo esc_attr( $instance['link_after'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><code>show_date</code></label> <select class="widefat" id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>"> <?php foreach ( $show_date as $option_value => $option_label ) { ?> - <option value="<?php echo $option_value; ?>" <?php selected( $instance['show_date'], $option_value ); ?>><?php echo $option_label; ?></option> + <option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['show_date'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option> <?php } ?> </select> </p> <p> <label for="<?php echo $this->get_field_id( 'date_format' ); ?>"><code>date_format</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'date_format' ); ?>" name="<?php echo $this->get_field_name( 'date_format' ); ?>" value="<?php echo $instance['date_format']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'date_format' ); ?>" name="<?php echo $this->get_field_name( 'date_format' ); ?>" value="<?php echo esc_attr( $instance['date_format'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'hierarchical' ); ?>"> diff --git a/wp-content/themes/hybrid/library/classes/widget-search.php b/wp-content/themes/hybrid/library/classes/widget-search.php index 16a6d470a..85c4f32d9 100644 --- a/wp-content/themes/hybrid/library/classes/widget-search.php +++ b/wp-content/themes/hybrid/library/classes/widget-search.php @@ -1,35 +1,65 @@ <?php /** - * Search Widget Class - * * The Search widget replaces the default WordPress Search widget. This version gives total * control over the output to the user by allowing the input of various arguments that typically * represent a search form. It also gives the user the option of using the theme's search form * through the use of the get_search_form() function. * - * @since 0.6 - * @link http://themehybrid.com/themes/hybrid/widgets - * * @package Hybrid * @subpackage Classes */ +/** + * Search Widget Class + * + * @since 0.6.0 + * @link http://themehybrid.com/themes/hybrid/widgets + */ class Hybrid_Widget_Search extends WP_Widget { + /** + * Prefix for the widget. + * @since 0.7.0 + */ var $prefix; + + /** + * Textdomain for the widget. + * @since 0.7.0 + */ var $textdomain; /** * Set up the widget's unique name, ID, class, description, and other options. - * @since 0.6 + * @since 1.2.0 */ - function Hybrid_Widget_Search() { + function __construct() { + + /* Set the widget prefix. */ $this->prefix = hybrid_get_prefix(); + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'search', 'description' => __( 'An advanced widget that gives you total control over the output of your search form.', $this->textdomain ) ); - $control_ops = array( 'width' => 525, 'height' => 350, 'id_base' => "{$this->prefix}-search" ); - $this->WP_Widget( "{$this->prefix}-search", __( 'Search', $this->textdomain ), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'search', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your search form.', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 525, + 'height' => 350 + ); + + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-search', // $this->id_base + __( 'Search', $this->textdomain ), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } /** @@ -39,40 +69,50 @@ class Hybrid_Widget_Search extends WP_Widget { function widget( $args, $instance ) { extract( $args ); - $theme_search = isset( $instance['theme_search'] ) ? $instance['theme_search'] : false; - + /* Output the theme's $before_widget wrapper. */ echo $before_widget; - /* If there is a title given, add it along with the $before_title and $after_title variables. */ - if ( $instance['title'] ) + /* If a title was input by the user, display it. */ + if ( !empty( $instance['title'] ) ) echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; - if ( $theme_search ) + /* If the user chose to use the theme's search form, load it. */ + if ( !empty( $instance['theme_search'] ) ) { get_search_form(); + } + /* Else, create the form based on the user-selected arguments. */ else { - global $search_form_num; - $search_num = ( ( $search_form_num ) ? "-{$search_form_num}" : '' ); + /* Set up some variables for the search form. */ + global $search_form_num; + $search_num = ( ( $search_form_num ) ? '-' . esc_attr( $search_form_num ) : '' ); $search_text = ( ( is_search() ) ? esc_attr( get_search_query() ) : esc_attr( $instance['search_text'] ) ); + /* Open the form. */ $search = '<form method="get" class="search-form" id="search-form' . $search_num . '" action="' . home_url() . '/"><div>'; - if ( $instance['search_label'] ) + /* If a search label was set, add it. */ + if ( !empty( $instance['search_label'] ) ) $search .= '<label for="search-text' . $search_num . '">' . $instance['search_label'] . '</label>'; - $search .= '<input class="search-text" type="text" name="s" id="search-text' . $search_num . '" value="' . esc_attr( $search_text ) . '" onfocus="if(this.value==this.defaultValue)this.value=\'\';" onblur="if(this.value==\'\')this.value=this.defaultValue;" />'; + /* Search form text input. */ + $search .= '<input class="search-text" type="text" name="s" id="search-text' . $search_num . '" value="' . $search_text . '" onfocus="if(this.value==this.defaultValue)this.value=\'\';" onblur="if(this.value==\'\')this.value=this.defaultValue;" />'; + /* Search form submit button. */ if ( $instance['search_submit'] ) $search .= '<input class="search-submit button" name="submit" type="submit" id="search-submit' . $search_num . '" value="' . esc_attr( $instance['search_submit'] ) . '" />'; + /* Close the form. */ $search .= '</div></form><!-- .search-form -->'; + /* Display the form. */ echo $search; $search_form_num++; } + /* Close the theme's widget wrapper. */ echo $after_widget; } @@ -97,29 +137,37 @@ class Hybrid_Widget_Search extends WP_Widget { */ function form( $instance ) { - //Defaults - $defaults = array( 'title' => __( 'Search', $this->textdomain ), 'theme_search' => false ); + /* Set up the default form values. */ + $defaults = array( + 'title' => esc_attr__( 'Search', $this->textdomain ), + 'theme_search' => false, + 'search_label' => '', + 'search_text' => '', + 'search_submit' => '' + ); + + /* Merge the user-selected arguments with the defaults. */ $instance = wp_parse_args( (array) $instance, $defaults ); ?> <div class="hybrid-widget-controls columns-2"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'search_label' ); ?>"><?php _e( 'Search Label:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'search_label' ); ?>" name="<?php echo $this->get_field_name( 'search_label' ); ?>" value="<?php echo $instance['search_label']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'search_label' ); ?>" name="<?php echo $this->get_field_name( 'search_label' ); ?>" value="<?php echo esc_attr( $instance['search_label'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'search_text' ); ?>"><?php _e( 'Search Text:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'search_text' ); ?>" name="<?php echo $this->get_field_name( 'search_text' ); ?>" value="<?php echo $instance['search_text']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'search_text' ); ?>" name="<?php echo $this->get_field_name( 'search_text' ); ?>" value="<?php echo esc_attr( $instance['search_text'] ); ?>" /> </p> </div> <div class="hybrid-widget-controls columns-2 column-last"> <p> <label for="<?php echo $this->get_field_id( 'search_submit' ); ?>"><?php _e( 'Search Submit:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'search_submit' ); ?>" name="<?php echo $this->get_field_name( 'search_submit' ); ?>" value="<?php echo $instance['search_submit']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'search_submit' ); ?>" name="<?php echo $this->get_field_name( 'search_submit' ); ?>" value="<?php echo esc_attr( $instance['search_submit'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'theme_search' ); ?>"> diff --git a/wp-content/themes/hybrid/library/classes/widget-tags.php b/wp-content/themes/hybrid/library/classes/widget-tags.php index 9bfdfa52b..444a410af 100644 --- a/wp-content/themes/hybrid/library/classes/widget-tags.php +++ b/wp-content/themes/hybrid/library/classes/widget-tags.php @@ -1,35 +1,65 @@ <?php /** - * Tags Widget Class - * * The Tags widget replaces the default WordPress Tag Cloud widget. This version gives total * control over the output to the user by allowing the input of all the arguments typically seen * in the wp_tag_cloud() function. * + * @package Hybrid + * @subpackage Classes + */ + +/** + * Tags Widget Class + * * @since 0.6 * @link http://codex.wordpress.org/Template_Tags/wp_tag_cloud * @link http://themehybrid.com/themes/hybrid/widgets - * - * @package Hybrid - * @subpackage Widgets */ - class Hybrid_Widget_Tags extends WP_Widget { + /** + * Prefix for the widget. + * @since 0.7.0 + */ var $prefix; + + /** + * Textdomain for the widget. + * @since 0.7.0 + */ var $textdomain; /** * Set up the widget's unique name, ID, class, description, and other options. - * @since 0.6 + * @since 1.2.0 */ - function Hybrid_Widget_Tags() { + function __construct() { + + /* Set the widget prefix. */ $this->prefix = hybrid_get_prefix(); + + /* Set the widget textdomain. */ $this->textdomain = hybrid_get_textdomain(); - $widget_ops = array( 'classname' => 'tags', 'description' => __( 'An advanced widget that gives you total control over the output of your tags.',$this->textdomain ) ); - $control_ops = array( 'width' => 800, 'height' => 350, 'id_base' => "{$this->prefix}-tags" ); - $this->WP_Widget( "{$this->prefix}-tags", __( 'Tags', $this->textdomain ), $widget_ops, $control_ops ); + /* Set up the widget options. */ + $widget_options = array( + 'classname' => 'tags', + 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your tags.', $this->textdomain ) + ); + + /* Set up the widget control options. */ + $control_options = array( + 'width' => 800, + 'height' => 350 + ); + + /* Create the widget. */ + $this->WP_Widget( + 'hybrid-tags', // $this->id_base + __( 'Tags', $this->textdomain ), // $this->name + $widget_options, // $this->widget_options + $control_options // $this->control_options + ); } /** @@ -39,33 +69,34 @@ class Hybrid_Widget_Tags extends WP_Widget { function widget( $args, $instance ) { extract( $args ); - $args = array(); - - $args['taxonomy'] = $instance['taxonomy']; - $args['largest'] = ( ( $instance['largest'] ) ? absint( $instance['largest'] ) : 22 ); - $args['smallest'] = ( ( $instance['smallest'] ) ? absint( $instance['smallest'] ) : 8 ); - $args['number'] = intval( $instance['number'] ); - $args['child_of'] = intval( $instance['child_of'] ); - $args['parent'] = ( $instance['parent'] ) ? intval( $instance['parent'] ) : ''; - $args['separator'] = ( $instance['separator'] ) ? $instance['separator'] : "\n"; - $args['pad_counts'] = isset( $instance['pad_counts'] ) ? $instance['pad_counts'] : false; - $args['hide_empty'] = isset( $instance['hide_empty'] ) ? $instance['hide_empty'] : false; - $args['unit'] = $instance['unit']; - $args['format'] = $instance['format']; - $args['include'] = $instance['include']; - $args['exclude'] = $instance['exclude']; - $args['order'] = $instance['order']; - $args['orderby'] = $instance['orderby']; - $args['link'] = $instance['link']; - $args['search'] = $instance['search']; - $args['name__like'] = $instance['name__like']; - $args['echo'] = false; + /* Set up the arguments for wp_tag_cloud(). */ + $args = array( + 'taxonomy' => $instance['taxonomy'], + 'largest' => !empty( $instance['largest'] ) ? absint( $instance['largest'] ) : 22, + 'smallest' => !empty( $instance['smallest'] ) ? absint( $instance['smallest'] ) : 8, + 'number' => intval( $instance['number'] ), + 'child_of' => intval( $instance['child_of'] ), + 'parent' => !empty( $instance['parent'] ) ? intval( $instance['parent'] ) : '', + 'separator' => !empty( $instance['separator'] ) ? $instance['separator'] : "\n", + 'pad_counts' => !empty( $instance['pad_counts'] ) ? true : false, + 'hide_empty' => !empty( $instance['hide_empty'] ) ? true : false, + 'unit' => $instance['unit'], + 'format' => $instance['format'], + 'include' => !empty( $instance['include'] ) ? join( ', ', $instance['include'] ) : '', + 'exclude' => !empty( $instance['exclude'] ) ? join( ', ', $instance['exclude'] ) : '', + 'order' => $instance['order'], + 'orderby' => $instance['orderby'], + 'link' => $instance['link'], + 'search' => $instance['search'], + 'name__like' => $instance['name__like'], + 'echo' => false + ); - /* Open the output of the widget. */ + /* Output the theme's $before_widget wrapper. */ echo $before_widget; - /* If there is a title given, add it along with the $before_title and $after_title variables. */ - if ( $instance['title'] ) + /* If a title was input by the user, display it. */ + if ( !empty( $instance['title'] ) ) echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title; /* Get the tag cloud. */ @@ -78,7 +109,7 @@ class Hybrid_Widget_Tags extends WP_Widget { /* Output the tag cloud. */ echo $tags; - /* Close the output of the widget. */ + /* Close the theme's widget wrapper. */ echo $after_widget; } @@ -125,28 +156,39 @@ class Hybrid_Widget_Tags extends WP_Widget { */ function form( $instance ) { - /* Set up some defaults for the widget. */ + /* Set up the default form values. */ $defaults = array( - 'title' => __( 'Tags', $this->textdomain ), + 'title' => esc_attr__( 'Tags', $this->textdomain ), 'order' => 'ASC', 'orderby' => 'name', 'format' => 'flat', - 'unit' => 'pt', 'smallest' => 8, + 'include' => array(), + 'exclude' => array(), + 'unit' => 'pt', + 'smallest' => 8, 'largest' => 22, 'link' => 'view', 'number' => 45, + 'separator' => '', + 'child_of' => '', + 'parent' => '', 'taxonomy' => 'post_tag', - 'hide_empty' => 1 + 'hide_empty' => 1, + 'pad_counts' => false, + 'search' => '', + 'name__like' => '' ); + + /* Merge the user-selected arguments with the defaults. */ $instance = wp_parse_args( (array) $instance, $defaults ); /* <select> element options. */ $taxonomies = get_taxonomies( array( 'show_tagcloud' => true ), 'objects' ); $terms = get_terms( $instance['taxonomy'] ); - $link = array( 'view' => __( 'View', $this->textdomain ), 'edit' => __( 'Edit', $this->textdomain ) ); - $format = array( 'flat' => __( 'Flat', $this->textdomain ), 'list' => __( 'List', $this->textdomain ) ); - $order = array( 'ASC' => __( 'Ascending', $this->textdomain ), 'DESC' => __( 'Descending', $this->textdomain ), 'RAND' => __( 'Random', $this->textdomain ) ); - $orderby = array( 'count' => __( 'Count', $this->textdomain ), 'name' => __( 'Name', $this->textdomain ) ); + $link = array( 'view' => esc_attr__( 'View', $this->textdomain ), 'edit' => esc_attr__( 'Edit', $this->textdomain ) ); + $format = array( 'flat' => esc_attr__( 'Flat', $this->textdomain ), 'list' => esc_attr__( 'List', $this->textdomain ) ); + $order = array( 'ASC' => esc_attr__( 'Ascending', $this->textdomain ), 'DESC' => esc_attr__( 'Descending', $this->textdomain ), 'RAND' => esc_attr__( 'Random', $this->textdomain ) ); + $orderby = array( 'count' => esc_attr__( 'Count', $this->textdomain ), 'name' => esc_attr__( 'Name', $this->textdomain ) ); $unit = array( 'pt' => 'pt', 'px' => 'px', 'em' => 'em', '%' => '%' ); ?> @@ -154,7 +196,7 @@ class Hybrid_Widget_Tags extends WP_Widget { <div class="hybrid-widget-controls columns-3"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', $this->textdomain ); ?></label> - <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> + <input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'taxonomy' ); ?>"><code>taxonomy</code></label> @@ -217,15 +259,15 @@ class Hybrid_Widget_Tags extends WP_Widget { </p> <p> <label for="<?php echo $this->get_field_id( 'number' ); ?>"><code>number</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" value="<?php echo $instance['number']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" value="<?php echo esc_attr( $instance['number'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'largest' ); ?>"><code>largest</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'largest' ); ?>" name="<?php echo $this->get_field_name( 'largest' ); ?>" value="<?php echo $instance['largest']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'largest' ); ?>" name="<?php echo $this->get_field_name( 'largest' ); ?>" value="<?php echo esc_attr( $instance['largest'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'smallest' ); ?>"><code>smallest</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'smallest' ); ?>" name="<?php echo $this->get_field_name( 'smallest' ); ?>" value="<?php echo $instance['smallest']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'smallest' ); ?>" name="<?php echo $this->get_field_name( 'smallest' ); ?>" value="<?php echo esc_attr( $instance['smallest'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'unit' ); ?>"><code>unit</code></label> @@ -240,23 +282,23 @@ class Hybrid_Widget_Tags extends WP_Widget { <div class="hybrid-widget-controls columns-3 column-last"> <p> <label for="<?php echo $this->get_field_id( 'separator' ); ?>"><code>separator</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'separator' ); ?>" name="<?php echo $this->get_field_name( 'separator' ); ?>" value="<?php echo $instance['separator']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'separator' ); ?>" name="<?php echo $this->get_field_name( 'separator' ); ?>" value="<?php echo esc_attr( $instance['separator'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'child_of' ); ?>"><code>child_of</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'child_of' ); ?>" name="<?php echo $this->get_field_name( 'child_of' ); ?>" value="<?php echo $instance['child_of']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'child_of' ); ?>" name="<?php echo $this->get_field_name( 'child_of' ); ?>" value="<?php echo esc_attr( $instance['child_of'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'parent' ); ?>"><code>parent</code></label> - <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'parent' ); ?>" name="<?php echo $this->get_field_name( 'parent' ); ?>" value="<?php echo $instance['parent']; ?>" /> + <input type="text" class="smallfat code" id="<?php echo $this->get_field_id( 'parent' ); ?>" name="<?php echo $this->get_field_name( 'parent' ); ?>" value="<?php echo esc_attr( $instance['parent'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'search' ); ?>"><code>search</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'search' ); ?>" name="<?php echo $this->get_field_name( 'search' ); ?>" value="<?php echo $instance['search']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'search' ); ?>" name="<?php echo $this->get_field_name( 'search' ); ?>" value="<?php echo esc_attr( $instance['search'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'name__like' ); ?>"><code>name__like</code></label> - <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'name__like' ); ?>" name="<?php echo $this->get_field_name( 'name__like' ); ?>" value="<?php echo $instance['name__like']; ?>" /> + <input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'name__like' ); ?>" name="<?php echo $this->get_field_name( 'name__like' ); ?>" value="<?php echo esc_attr( $instance['name__like'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'pad_counts' ); ?>"> diff --git a/wp-content/themes/hybrid/library/css/18px.css b/wp-content/themes/hybrid/library/css/18px.css index 610ad4cda..0dc15b63c 100644 --- a/wp-content/themes/hybrid/library/css/18px.css +++ b/wp-content/themes/hybrid/library/css/18px.css @@ -1 +1 @@ -html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}font{color:#333}center{text-align:left}body{line-height:21px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 18px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em;}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 18px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 18px 2.5em}ol{list-style-type:decimal;margin:0 0 18px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 18px 3px}dl dt{font-weight:bold;margin:12px 0 0 0}dl dd{margin:6px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 18px 0}li address,dd address{margin:0}blockquote{margin:0 2.5em;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:18px;margin-bottom:18px;padding:9px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del{text-decoration:line-through}object{margin-bottom:18px}input,textarea{font-size:1em;font-family:Georgia,Times,"Times New Roman",serif;padding:3px}:focus{outline:none}form label{cursor:pointer}option{padding:1px 3px}table{border-collapse:collapse;border-spacing:0;margin-bottom:18px}th,td{text-align:left}hr{margin-bottom:18px}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:18px !important}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 18px auto}.alignnone,.block{clear:both;margin:0 0 18px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote .alignright{width:33%} \ No newline at end of file +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}body{line-height:21px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 18px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 18px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 18px 2.5em}ol{list-style-type:decimal;margin:0 0 18px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 18px 3px}dl dt{font-weight:bold;margin:12px 0 0 0}dl dd{margin:6px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 18px 0}li address,dd address{margin:0}blockquote{margin:0 2.5em;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:18px;margin-bottom:18px;padding:9px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del,s,strike{text-decoration:line-through}object{margin-bottom:18px}input,textarea{font-size:1em;padding:3px}input[type="submit"]{cursor:pointer}:focus{outline:none}form label{cursor:pointer}option{padding:1px 3px}table{border-collapse:collapse;border-spacing:0;margin-bottom:18px}th,td{text-align:left}hr{height:1px;margin-bottom:18px;background:#333}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:18px}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 18px auto}.alignnone,.block{clear:both;margin:0 0 18px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote.alignright{width:33%} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/18px.dev.css b/wp-content/themes/hybrid/library/css/18px.dev.css new file mode 100644 index 000000000..adb122a95 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/18px.dev.css @@ -0,0 +1,308 @@ +html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + background: transparent; + border: none; + text-decoration: none; + } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; + } + +b, i, hr, u, center, menu, layer, s, strike, font, xmp { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + font-weight: normal; + font-style: normal; + background: transparent; + border: none; + text-decoration: none; + } + +body { + line-height: 21px; + font-family: Georgia, Times, "Times New Roman", serif; + color: #333; + background: #fff; + } + +h1, h2, h3, h4, h5, h6 { + font-style: normal; + font-weight: normal; + margin: 0 0 18px 0; + } + +h1 { + font-size: 1.8em; + } + +h2 { + font-size: 1.7em; + } + +h3 { + font-size: 1.55em; + } + +h4 { + font-size: 1.4em; + } + +h5 { + font-size: 1.25em; + } + +h6 { + font-size: 1.1em; + } + +p { + margin: 0 0 18px 0; + } + +ol, ul { + list-style: none; + } + +ul { + list-style: disc; + margin: 0 0 18px 2.5em; + } + +ol { + list-style-type: decimal; + margin: 0 0 18px 3em; + } + +ol ol { + list-style: upper-roman; + } + +ol ol ol { + list-style: lower-roman; + } + +ol ol ol ol { + list-style: upper-alpha; + } + +ol ol ol ol ol { + list-style: lower-alpha; + } + +ul ul, ol ol, ul ol, ol ul { + margin-bottom: 0; + } + +dl { + margin: 0 0 18px 3px; + } + +dl dt { + font-weight: bold; + margin: 12px 0 0 0; + } + +dl dd { + margin: 6px 0 0 1.5em; + } + +strong { + font-weight: bold; + } + +strong strong { + font-weight: normal; + } + +em, cite { + font-style: italic; + } + +em em, cite cite { + font-style: normal; + } + +abbr { + cursor: help; + } + +acronym { + text-transform: uppercase; + border-bottom: 1px dashed #666; + cursor: help; + } + +big { + font-size: 120%; + } + +small, sup, sub { + font-size: 80%; + } + +sup { + vertical-align: baseline; + position: relative; + bottom: 0.3em; + } + +sub { + vertical-align: baseline; + position: relative; + top: 0.3em; + } + +address { + font-style: italic; + margin: 0 0 18px 0; + } + +li address, dd address { + margin: 0; + } + +blockquote { + margin: 0 2.5em; + font-style: normal; + } + +blockquote em, blockquote cite { + font-style: italic; + } + +blockquote, q { + quotes: none; + } + +blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; + } + +a { + cursor: pointer; + } + +a img { + border: none; + } + +pre { + overflow: auto; + font: .9em Monaco, monospace, Courier, "Courier New"; + line-height: 18px; + margin-bottom: 18px; + padding: 9px; + } + +code { + font: .9em Monaco, monospace, Courier, "Courier New"; + } + +pre code { + font-size: 1em; + } + +ins, dfn { + font-style: italic; + text-decoration: none; + border-bottom: 1px solid #666; + } + +del, s, strike { + text-decoration: line-through; + } + +object { + margin-bottom: 18px; + } + +input, textarea { + font-size: 1em; + padding: 3px; + } + +input[type="submit"] { + cursor: pointer; + } + +:focus { + outline: none; + } + +form label { + cursor: pointer; + } + +option { + padding: 1px 3px; + } + +table { + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 18px; + } + +th, td { + text-align: left; + } + +hr { + height: 1px; + margin-bottom: 18px; + background: #333; + } + +img.wp-smiley { + max-height: 12px; + margin: 0; + padding: 0; + border: none; + } + +.gallery { + display: block; + text-align: center; + margin-bottom: 18px; + } + +.alignleft, .left { + float: left; + margin-right: 15px; + } + +.alignright, .right { + float: right; + margin-left: 15px; + } + +.aligncenter, .center { + display: block; + margin: 0 auto 18px auto; + } + +.alignnone, .block { + clear: both; + margin: 0 0 18px 0; + } + +.clear { + clear: both; + } + +img.alignleft, img.alignright { + display: inline; + } + +blockquote.alignleft, blockquote.alignright { + width: 33%; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/20px.css b/wp-content/themes/hybrid/library/css/20px.css index 439020558..8e4fd779b 100644 --- a/wp-content/themes/hybrid/library/css/20px.css +++ b/wp-content/themes/hybrid/library/css/20px.css @@ -1 +1 @@ -html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}font{color:#333}center{text-align:left}body{line-height:20px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 20px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em;}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 20px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 20px 2.5em}ol{list-style-type:decimal;margin:0 0 20px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 20px 5px}dl dt{font-weight:bold;margin:10px 0 0 0}dl dd{margin:5px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 20px 0}li address,dd address{margin:0}blockquote{margin:0 25px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:20px;margin-bottom:20px;padding:10px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del{text-decoration:line-through}object{margin-bottom:20px}input,textarea{font-size:1em;font-family:Georgia,Times,"Times New Roman",serif;padding:4px}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:20px}th,td{text-align:left}hr{margin-bottom:20px}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:20px !important}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 20px auto}.alignnone,.block{clear:both;margin:0 0 20px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote .alignright{width:33%} \ No newline at end of file +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}body{line-height:20px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 20px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 20px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 20px 2.5em}ol{list-style-type:decimal;margin:0 0 20px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 20px 5px}dl dt{font-weight:bold;margin:10px 0 0 0}dl dd{margin:5px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 20px 0}li address,dd address{margin:0}blockquote{margin:0 25px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:20px;margin-bottom:20px;padding:10px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del,s,strike{text-decoration:line-through}object{margin-bottom:20px}input,textarea{font-size:1em;padding:4px}input[type="submit"]{cursor:pointer}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:20px}th,td{text-align:left}hr{height:1px;margin-bottom:20px;background:#333}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:20px}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 20px auto}.alignnone,.block{clear:both;margin:0 0 20px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote.alignright{width:33%} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/20px.dev.css b/wp-content/themes/hybrid/library/css/20px.dev.css new file mode 100644 index 000000000..9173d107a --- /dev/null +++ b/wp-content/themes/hybrid/library/css/20px.dev.css @@ -0,0 +1,308 @@ +html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + background: transparent; + border: none; + text-decoration: none; + } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; + } + +b, i, hr, u, center, menu, layer, s, strike, font, xmp { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + font-weight: normal; + font-style: normal; + background: transparent; + border: none; + text-decoration: none; + } + +body { + line-height: 20px; + font-family: Georgia, Times, "Times New Roman", serif; + color: #333; + background: #fff; + } + +h1, h2, h3, h4, h5, h6 { + font-style: normal; + font-weight: normal; + margin: 0 0 20px 0; + } + +h1 { + font-size: 1.8em; + } + +h2 { + font-size: 1.7em; + } + +h3 { + font-size: 1.55em; + } + +h4 { + font-size: 1.4em; + } + +h5 { + font-size: 1.25em; + } + +h6 { + font-size: 1.1em; + } + +p { + margin: 0 0 20px 0; + } + +ol, ul { + list-style: none; + } + +ul { + list-style: disc; + margin: 0 0 20px 2.5em; + } + +ol { + list-style-type: decimal; + margin: 0 0 20px 3em; + } + +ol ol { + list-style: upper-roman; + } + +ol ol ol { + list-style: lower-roman; + } + +ol ol ol ol { + list-style: upper-alpha; + } + +ol ol ol ol ol { + list-style: lower-alpha; + } + +ul ul, ol ol, ul ol, ol ul { + margin-bottom: 0; + } + +dl { + margin: 0 0 20px 5px; + } + +dl dt { + font-weight: bold; + margin: 10px 0 0 0; + } + +dl dd { + margin: 5px 0 0 1.5em; + } + +strong { + font-weight: bold; + } + +strong strong { + font-weight: normal; + } + +em, cite { + font-style: italic; + } + +em em, cite cite { + font-style: normal; + } + +abbr { + cursor: help; + } + +acronym { + text-transform: uppercase; + border-bottom: 1px dashed #666; + cursor: help; + } + +big { + font-size: 120%; + } + +small, sup, sub { + font-size: 80%; + } + +sup { + vertical-align: baseline; + position: relative; + bottom: 0.3em; + } + +sub { + vertical-align: baseline; + position: relative; + top: 0.3em; + } + +address { + font-style: italic; + margin: 0 0 20px 0; + } + +li address, dd address { + margin: 0; + } + +blockquote { + margin: 0 25px; + font-style: normal; + } + +blockquote em, blockquote cite { + font-style: italic; + } + +blockquote, q { + quotes: none; + } + +blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; + } + +a { + cursor: pointer; + } + +a img { + border: none; + } + +pre { + overflow: auto; + font: .9em Monaco, monospace, Courier, "Courier New"; + line-height: 20px; + margin-bottom: 20px; + padding: 10px; + } + +code { + font: .9em Monaco, monospace, Courier, "Courier New"; + } + +pre code { + font-size: 1em; + } + +ins, dfn { + font-style: italic; + text-decoration: none; + border-bottom: 1px solid #666; + } + +del, s, strike { + text-decoration: line-through; + } + +object { + margin-bottom: 20px; + } + +input, textarea { + font-size: 1em; + padding: 4px; + } + +input[type="submit"] { + cursor: pointer; + } + +:focus { + outline: none; + } + +form label { + cursor: pointer; + } + +option { + padding: 1px 2px; + } + +table { + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 20px; + } + +th, td { + text-align: left; + } + +hr { + height: 1px; + margin-bottom: 20px; + background: #333; + } + +img.wp-smiley { + max-height: 12px; + margin: 0; + padding: 0; + border: none; + } + +.gallery { + display: block; + text-align: center; + margin-bottom: 20px; + } + +.alignleft, .left { + float: left; + margin-right: 15px; + } + +.alignright, .right { + float: right; + margin-left: 15px; + } + +.aligncenter, .center { + display: block; + margin: 0 auto 20px auto; + } + +.alignnone, .block { + clear: both; + margin: 0 0 20px 0; + } + +.clear { + clear: both; + } + +img.alignleft, img.alignright { + display: inline; + } + +blockquote.alignleft, blockquote.alignright { + width: 33%; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/21px.css b/wp-content/themes/hybrid/library/css/21px.css index 4082bf0cf..557c8053a 100644 --- a/wp-content/themes/hybrid/library/css/21px.css +++ b/wp-content/themes/hybrid/library/css/21px.css @@ -1 +1 @@ -html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}font{color:#333}center{text-align:left}body{line-height:24px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 21px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em;}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 21px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 21px 2.5em}ol{list-style-type:decimal;margin:0 0 21px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 18px 3px}dl dt{font-weight:bold;margin:12px 0 0 0}dl dd{margin:6px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 21px 0}li address,dd address{margin:0}blockquote{margin:0 2.5em;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:21px;margin-bottom:21px;padding:9px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del{text-decoration:line-through}object{margin-bottom:21px}input,textarea{font-size:1em;font-family:Georgia,Times,"Times New Roman",serif;padding:3px}:focus{outline:none}form label{cursor:pointer}option{padding:1px 3px}table{border-collapse:collapse;border-spacing:0;margin-bottom:21px}th,td{text-align:left}hr{margin-bottom:21px}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:21px !important}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 21px auto}.alignnone,.block{clear:both;margin:0 0 21px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote .alignright{width:33%} \ No newline at end of file +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}body{line-height:24px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 21px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 21px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 21px 2.5em}ol{list-style-type:decimal;margin:0 0 21px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 18px 3px}dl dt{font-weight:bold;margin:12px 0 0 0}dl dd{margin:6px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 21px 0}li address,dd address{margin:0}blockquote{margin:0 2.5em;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:21px;margin-bottom:21px;padding:9px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del,s,strike{text-decoration:line-through}object{margin-bottom:21px}input,textarea{font-size:1em;padding:3px}input[type="submit"]{cursor:pointer}:focus{outline:none}form label{cursor:pointer}option{padding:1px 3px}table{border-collapse:collapse;border-spacing:0;margin-bottom:21px}th,td{text-align:left}hr{height:1px;margin-bottom:21px;background:#333}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:21px}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 21px auto}.alignnone,.block{clear:both;margin:0 0 21px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote.alignright{width:33%} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/21px.dev.css b/wp-content/themes/hybrid/library/css/21px.dev.css new file mode 100644 index 000000000..aa0882f16 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/21px.dev.css @@ -0,0 +1,308 @@ +html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + background: transparent; + border: none; + text-decoration: none; + } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; + } + +b, i, hr, u, center, menu, layer, s, strike, font, xmp { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + font-weight: normal; + font-style: normal; + background: transparent; + border: none; + text-decoration: none; + } + +body { + line-height: 24px; + font-family: Georgia, Times, "Times New Roman", serif; + color: #333; + background: #fff; + } + +h1, h2, h3, h4, h5, h6 { + font-style: normal; + font-weight: normal; + margin: 0 0 21px 0; + } + +h1 { + font-size: 1.8em; + } + +h2 { + font-size: 1.7em; + } + +h3 { + font-size: 1.55em; + } + +h4 { + font-size: 1.4em; + } + +h5 { + font-size: 1.25em; + } + +h6 { + font-size: 1.1em; + } + +p { + margin: 0 0 21px 0; + } + +ol, ul { + list-style: none; + } + +ul { + list-style: disc; + margin: 0 0 21px 2.5em; + } + +ol { + list-style-type: decimal; + margin: 0 0 21px 3em; + } + +ol ol { + list-style: upper-roman; + } + +ol ol ol { + list-style: lower-roman; + } + +ol ol ol ol { + list-style: upper-alpha; + } + +ol ol ol ol ol { + list-style: lower-alpha; + } + +ul ul, ol ol, ul ol, ol ul { + margin-bottom: 0; + } + +dl { + margin: 0 0 18px 3px; + } + +dl dt { + font-weight: bold; + margin: 12px 0 0 0; + } + +dl dd { + margin: 6px 0 0 1.5em; + } + +strong { + font-weight: bold; + } + +strong strong { + font-weight: normal; + } + +em, cite { + font-style: italic; + } + +em em, cite cite { + font-style: normal; + } + +abbr { + cursor: help; + } + +acronym { + text-transform: uppercase; + border-bottom: 1px dashed #666; + cursor: help; + } + +big { + font-size: 120%; + } + +small, sup, sub { + font-size: 80%; + } + +sup { + vertical-align: baseline; + position: relative; + bottom: 0.3em; + } + +sub { + vertical-align: baseline; + position: relative; + top: 0.3em; + } + +address { + font-style: italic; + margin: 0 0 21px 0; + } + +li address, dd address { + margin: 0; + } + +blockquote { + margin: 0 2.5em; + font-style: normal; + } + +blockquote em, blockquote cite { + font-style: italic; + } + +blockquote, q { + quotes: none; + } + +blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; + } + +a { + cursor: pointer; + } + +a img { + border: none; + } + +pre { + overflow: auto; + font: .9em Monaco, monospace, Courier, "Courier New"; + line-height: 21px; + margin-bottom: 21px; + padding: 9px; + } + +code { + font: .9em Monaco, monospace, Courier, "Courier New"; + } + +pre code { + font-size: 1em; + } + +ins, dfn { + font-style: italic; + text-decoration: none; + border-bottom: 1px solid #666; + } + +del, s, strike { + text-decoration: line-through; + } + +object { + margin-bottom: 21px; + } + +input, textarea { + font-size: 1em; + padding: 3px; + } + +input[type="submit"] { + cursor: pointer; + } + +:focus { + outline: none; + } + +form label { + cursor: pointer; + } + +option { + padding: 1px 3px; + } + +table { + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 21px; + } + +th, td { + text-align: left; + } + +hr { + height: 1px; + margin-bottom: 21px; + background: #333; + } + +img.wp-smiley { + max-height: 12px; + margin: 0; + padding: 0; + border: none; + } + +.gallery { + display: block; + text-align: center; + margin-bottom: 21px; + } + +.alignleft, .left { + float: left; + margin-right: 15px; + } + +.alignright, .right { + float: right; + margin-left: 15px; + } + +.aligncenter, .center { + display: block; + margin: 0 auto 21px auto; + } + +.alignnone, .block { + clear: both; + margin: 0 0 21px 0; + } + +.clear { + clear: both; + } + +img.alignleft, img.alignright { + display: inline; + } + +blockquote.alignleft, blockquote.alignright { + width: 33%; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/22px.css b/wp-content/themes/hybrid/library/css/22px.css index 396f362d2..a5ae1b727 100644 --- a/wp-content/themes/hybrid/library/css/22px.css +++ b/wp-content/themes/hybrid/library/css/22px.css @@ -1 +1 @@ -html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}font{color:#333}center{text-align:left}body{line-height:22px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 22px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em;}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 22px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 22px 2.5em}ol{list-style-type:decimal;margin:0 0 22px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 22px 5px}dl dt{font-weight:bold;margin:10px 0 0 0}dl dd{margin:5px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 22px 0}li address,dd address{margin:0}blockquote{margin:0 22px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:22px;margin-bottom:22px;padding:10px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del{text-decoration:line-through}object{margin-bottom:22px}input,textarea{font-size:1em;font-family:Georgia,Times,"Times New Roman",serif;padding:3px}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:22px}th,td{text-align:left}hr{margin-bottom:22px}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:22px !important}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 22px auto}.alignnone,.block{clear:both;margin:0 0 22px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote .alignright{width:33%} \ No newline at end of file +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}body{line-height:22px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 22px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 22px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 22px 2.5em}ol{list-style-type:decimal;margin:0 0 22px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 22px 5px}dl dt{font-weight:bold;margin:10px 0 0 0}dl dd{margin:5px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 22px 0}li address,dd address{margin:0}blockquote{margin:0 22px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:22px;margin-bottom:22px;padding:10px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del,s,strike{text-decoration:line-through}object{margin-bottom:22px}input,textarea{font-size:1em;padding:3px}input[type="submit"]{cursor:pointer}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:22px}th,td{text-align:left}hr{height:1px;margin-bottom:22px;background:#333}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:22px}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 22px auto}.alignnone,.block{clear:both;margin:0 0 22px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote.alignright{width:33%} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/22px.dev.css b/wp-content/themes/hybrid/library/css/22px.dev.css new file mode 100644 index 000000000..706538121 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/22px.dev.css @@ -0,0 +1,308 @@ +html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + background: transparent; + border: none; + text-decoration: none; + } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; + } + +b, i, hr, u, center, menu, layer, s, strike, font, xmp { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + font-weight: normal; + font-style: normal; + background: transparent; + border: none; + text-decoration: none; + } + +body { + line-height: 22px; + font-family: Georgia, Times, "Times New Roman", serif; + color: #333; + background: #fff; + } + +h1, h2, h3, h4, h5, h6 { + font-style: normal; + font-weight: normal; + margin: 0 0 22px 0; + } + +h1 { + font-size: 1.8em; + } + +h2 { + font-size: 1.7em; + } + +h3 { + font-size: 1.55em; + } + +h4 { + font-size: 1.4em; + } + +h5 { + font-size: 1.25em; + } + +h6 { + font-size: 1.1em; + } + +p { + margin: 0 0 22px 0; + } + +ol, ul { + list-style: none; + } + +ul { + list-style: disc; + margin: 0 0 22px 2.5em; + } + +ol { + list-style-type: decimal; + margin: 0 0 22px 3em; + } + +ol ol { + list-style: upper-roman; + } + +ol ol ol { + list-style: lower-roman; + } + +ol ol ol ol { + list-style: upper-alpha; + } + +ol ol ol ol ol { + list-style: lower-alpha; + } + +ul ul, ol ol, ul ol, ol ul { + margin-bottom: 0; + } + +dl { + margin: 0 0 22px 5px; + } + +dl dt { + font-weight: bold; + margin: 10px 0 0 0; + } + +dl dd { + margin: 5px 0 0 1.5em; + } + +strong { + font-weight: bold; + } + +strong strong { + font-weight: normal; + } + +em, cite { + font-style: italic; + } + +em em, cite cite { + font-style: normal; + } + +abbr { + cursor: help; + } + +acronym { + text-transform: uppercase; + border-bottom: 1px dashed #666; + cursor: help; + } + +big { + font-size: 120%; + } + +small, sup, sub { + font-size: 80%; + } + +sup { + vertical-align: baseline; + position: relative; + bottom: 0.3em; + } + +sub { + vertical-align: baseline; + position: relative; + top: 0.3em; + } + +address { + font-style: italic; + margin: 0 0 22px 0; + } + +li address, dd address { + margin: 0; + } + +blockquote { + margin: 0 22px; + font-style: normal; + } + +blockquote em, blockquote cite { + font-style: italic; + } + +blockquote, q { + quotes: none; + } + +blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; + } + +a { + cursor: pointer; + } + +a img { + border: none; + } + +pre { + overflow: auto; + font: .9em Monaco, monospace, Courier, "Courier New"; + line-height: 22px; + margin-bottom: 22px; + padding: 10px; + } + +code { + font: .9em Monaco, monospace, Courier, "Courier New"; + } + +pre code { + font-size: 1em; + } + +ins, dfn { + font-style: italic; + text-decoration: none; + border-bottom: 1px solid #666; + } + +del, s, strike { + text-decoration: line-through; + } + +object { + margin-bottom: 22px; + } + +input, textarea { + font-size: 1em; + padding: 3px; + } + +input[type="submit"] { + cursor: pointer; + } + +:focus { + outline: none; + } + +form label { + cursor: pointer; + } + +option { + padding: 1px 2px; + } + +table { + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 22px; + } + +th, td { + text-align: left; + } + +hr { + height: 1px; + margin-bottom: 22px; + background: #333; + } + +img.wp-smiley { + max-height: 12px; + margin: 0; + padding: 0; + border: none; + } + +.gallery { + display: block; + text-align: center; + margin-bottom: 22px; + } + +.alignleft, .left { + float: left; + margin-right: 15px; + } + +.alignright, .right { + float: right; + margin-left: 15px; + } + +.aligncenter, .center { + display: block; + margin: 0 auto 22px auto; + } + +.alignnone, .block { + clear: both; + margin: 0 0 22px 0; + } + +.clear { + clear: both; + } + +img.alignleft, img.alignright { + display: inline; + } + +blockquote.alignleft, blockquote.alignright { + width: 33%; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/24px.css b/wp-content/themes/hybrid/library/css/24px.css index ede5585f3..e3f031028 100644 --- a/wp-content/themes/hybrid/library/css/24px.css +++ b/wp-content/themes/hybrid/library/css/24px.css @@ -1 +1 @@ -html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}font{color:#333}center{text-align:left}body{line-height:24px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 24px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 24px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 24px 2.5em}ol{list-style-type:decimal;margin:0 0 24px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 24px 6px}dl dt{font-weight:bold;margin:12px 0 0 0}dl dd{margin:6px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 24px 0}li address,dd address{margin:0}blockquote{margin:0 24px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:24px;margin-bottom:24px;padding:12px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del{text-decoration:line-through}object{margin-bottom:24px}input,textarea{font-size:1em;font-family:Georgia,Times,"Times New Roman",serif;padding:3px}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:24px}th,td{text-align:left}hr{margin-bottom:24px}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:24px !important}.alignleft,.left{float:left;margin-right:18px}.alignright,.right{float:right;margin-left:18px}.aligncenter,.center{display:block;margin:0 auto 24px auto}.alignnone,.block{clear:both;margin:0 0 24px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote .alignright{width:33%} \ No newline at end of file +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}body{line-height:24px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 24px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 24px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 24px 2.5em}ol{list-style-type:decimal;margin:0 0 24px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 24px 6px}dl dt{font-weight:bold;margin:12px 0 0 0}dl dd{margin:6px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 24px 0}li address,dd address{margin:0}blockquote{margin:0 24px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:24px;margin-bottom:24px;padding:12px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del,s,strike{text-decoration:line-through}object{margin-bottom:24px}input,textarea{font-size:1em;padding:3px}input[type="submit"]{cursor:pointer}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:24px}th,td{text-align:left}hr{height:1px;margin-bottom:24px;background:#333}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:24px}.alignleft,.left{float:left;margin-right:18px}.alignright,.right{float:right;margin-left:18px}.aligncenter,.center{display:block;margin:0 auto 24px auto}.alignnone,.block{clear:both;margin:0 0 24px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote.alignright{width:33%} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/24px.dev.css b/wp-content/themes/hybrid/library/css/24px.dev.css new file mode 100644 index 000000000..9ebc27e23 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/24px.dev.css @@ -0,0 +1,308 @@ +html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + background: transparent; + border: none; + text-decoration: none; + } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; + } + +b, i, hr, u, center, menu, layer, s, strike, font, xmp { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + font-weight: normal; + font-style: normal; + background: transparent; + border: none; + text-decoration: none; + } + +body { + line-height: 24px; + font-family: Georgia, Times, "Times New Roman", serif; + color: #333; + background: #fff; + } + +h1, h2, h3, h4, h5, h6 { + font-style: normal; + font-weight: normal; + margin: 0 0 24px 0; + } + +h1 { + font-size: 1.8em; + } + +h2 { + font-size: 1.7em; + } + +h3 { + font-size: 1.55em; + } + +h4 { + font-size: 1.4em; + } + +h5 { + font-size: 1.25em; + } + +h6 { + font-size: 1.1em; + } + +p { + margin: 0 0 24px 0; + } + +ol, ul { + list-style: none; + } + +ul { + list-style: disc; + margin: 0 0 24px 2.5em; + } + +ol { + list-style-type: decimal; + margin: 0 0 24px 3em; + } + +ol ol { + list-style: upper-roman; + } + +ol ol ol { + list-style: lower-roman; + } + +ol ol ol ol { + list-style: upper-alpha; + } + +ol ol ol ol ol { + list-style: lower-alpha; + } + +ul ul, ol ol, ul ol, ol ul { + margin-bottom: 0; + } + +dl { + margin: 0 0 24px 6px; + } + +dl dt { + font-weight: bold; + margin: 12px 0 0 0; + } + +dl dd { + margin: 6px 0 0 1.5em; + } + +strong { + font-weight: bold; + } + +strong strong { + font-weight: normal; + } + +em, cite { + font-style: italic; + } + +em em, cite cite { + font-style: normal; + } + +abbr { + cursor: help; + } + +acronym { + text-transform: uppercase; + border-bottom: 1px dashed #666; + cursor: help; + } + +big { + font-size: 120%; + } + +small, sup, sub { + font-size: 80%; + } + +sup { + vertical-align: baseline; + position: relative; + bottom: 0.3em; + } + +sub { + vertical-align: baseline; + position: relative; + top: 0.3em; + } + +address { + font-style: italic; + margin: 0 0 24px 0; + } + +li address, dd address { + margin: 0; + } + +blockquote { + margin: 0 24px; + font-style: normal; + } + +blockquote em, blockquote cite { + font-style: italic; + } + +blockquote, q { + quotes: none; + } + +blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; + } + +a { + cursor: pointer; + } + +a img { + border: none; + } + +pre { + overflow: auto; + font: .9em Monaco, monospace, Courier, "Courier New"; + line-height: 24px; + margin-bottom: 24px; + padding: 12px; + } + +code { + font: .9em Monaco, monospace, Courier, "Courier New"; + } + +pre code { + font-size: 1em; + } + +ins, dfn { + font-style: italic; + text-decoration: none; + border-bottom: 1px solid #666; + } + +del, s, strike { + text-decoration: line-through; + } + +object { + margin-bottom: 24px; + } + +input, textarea { + font-size: 1em; + padding: 3px; + } + +input[type="submit"] { + cursor: pointer; + } + +:focus { + outline: none; + } + +form label { + cursor: pointer; + } + +option { + padding: 1px 2px; + } + +table { + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 24px; + } + +th, td { + text-align: left; + } + +hr { + height: 1px; + margin-bottom: 24px; + background: #333; + } + +img.wp-smiley { + max-height: 12px; + margin: 0; + padding: 0; + border: none; + } + +.gallery { + display: block; + text-align: center; + margin-bottom: 24px; + } + +.alignleft, .left { + float: left; + margin-right: 18px; + } + +.alignright, .right { + float: right; + margin-left: 18px; + } + +.aligncenter, .center { + display: block; + margin: 0 auto 24px auto; + } + +.alignnone, .block { + clear: both; + margin: 0 0 24px 0; + } + +.clear { + clear: both; + } + +img.alignleft, img.alignright { + display: inline; + } + +blockquote.alignleft, blockquote.alignright { + width: 33%; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/25px.css b/wp-content/themes/hybrid/library/css/25px.css index 5adfb4e67..515530aec 100644 --- a/wp-content/themes/hybrid/library/css/25px.css +++ b/wp-content/themes/hybrid/library/css/25px.css @@ -1 +1 @@ -html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}font{color:#333}center{text-align:left}body{line-height:25px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 25px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em;}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 25px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 25px 2.5em}ol{list-style-type:decimal;margin:0 0 25px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 25px 5px}dl dt{font-weight:bold;margin:10px 0 0 0}dl dd{margin:5px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 25px 0}li address,dd address{margin:0}blockquote{margin:0 25px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:25px;margin-bottom:25px;padding:10px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del{text-decoration:line-through}object{margin-bottom:25px}input,textarea{font-size:1em;font-family:Georgia,Times,"Times New Roman",serif;padding:3px}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:25px}th,td{text-align:left}hr{margin-bottom:25px}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:25px !important}.alignleft,.left{float:left;margin-right:20px}.alignright,.right{float:right;margin-left:20px}.aligncenter,.center{display:block;margin:0 auto 25px auto}.alignnone,.block{clear:both;margin:0 0 25px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote .alignright{width:33%} \ No newline at end of file +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}body{line-height:25px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 25px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 25px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 25px 2.5em}ol{list-style-type:decimal;margin:0 0 25px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 25px 5px}dl dt{font-weight:bold;margin:10px 0 0 0}dl dd{margin:5px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 25px 0}li address,dd address{margin:0}blockquote{margin:0 25px;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:25px;margin-bottom:25px;padding:10px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del,s,strike{text-decoration:line-through}object{margin-bottom:25px}input,textarea{font-size:1em;padding:3px}input[type="submit"]{cursor:pointer}:focus{outline:none}form label{cursor:pointer}option{padding:1px 2px}table{border-collapse:collapse;border-spacing:0;margin-bottom:25px}th,td{text-align:left}hr{height:1px;margin-bottom:25px;background:#333}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:25px}.alignleft,.left{float:left;margin-right:20px}.alignright,.right{float:right;margin-left:20px}.aligncenter,.center{display:block;margin:0 auto 25px auto}.alignnone,.block{clear:both;margin:0 0 25px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote.alignright{width:33%} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/25px.dev.css b/wp-content/themes/hybrid/library/css/25px.dev.css new file mode 100644 index 000000000..e0b4fbf01 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/25px.dev.css @@ -0,0 +1,308 @@ +html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + background: transparent; + border: none; + text-decoration: none; + } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; + } + +b, i, hr, u, center, menu, layer, s, strike, font, xmp { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + font-weight: normal; + font-style: normal; + background: transparent; + border: none; + text-decoration: none; + } + +body { + line-height: 25px; + font-family: Georgia, Times, "Times New Roman", serif; + color: #333; + background: #fff; + } + +h1, h2, h3, h4, h5, h6 { + font-style: normal; + font-weight: normal; + margin: 0 0 25px 0; + } + +h1 { + font-size: 1.8em; + } + +h2 { + font-size: 1.7em; + } + +h3 { + font-size: 1.55em; + } + +h4 { + font-size: 1.4em; + } + +h5 { + font-size: 1.25em; + } + +h6 { + font-size: 1.1em; + } + +p { + margin: 0 0 25px 0; + } + +ol, ul { + list-style: none; + } + +ul { + list-style: disc; + margin: 0 0 25px 2.5em; + } + +ol { + list-style-type: decimal; + margin: 0 0 25px 3em; + } + +ol ol { + list-style: upper-roman; + } + +ol ol ol { + list-style: lower-roman; + } + +ol ol ol ol { + list-style: upper-alpha; + } + +ol ol ol ol ol { + list-style: lower-alpha; + } + +ul ul, ol ol, ul ol, ol ul { + margin-bottom: 0; + } + +dl { + margin: 0 0 25px 5px; + } + +dl dt { + font-weight: bold; + margin: 10px 0 0 0; + } + +dl dd { + margin: 5px 0 0 1.5em; + } + +strong { + font-weight: bold; + } + +strong strong { + font-weight: normal; + } + +em, cite { + font-style: italic; + } + +em em, cite cite { + font-style: normal; + } + +abbr { + cursor: help; + } + +acronym { + text-transform: uppercase; + border-bottom: 1px dashed #666; + cursor: help; + } + +big { + font-size: 120%; + } + +small, sup, sub { + font-size: 80%; + } + +sup { + vertical-align: baseline; + position: relative; + bottom: 0.3em; + } + +sub { + vertical-align: baseline; + position: relative; + top: 0.3em; + } + +address { + font-style: italic; + margin: 0 0 25px 0; + } + +li address, dd address { + margin: 0; + } + +blockquote { + margin: 0 25px; + font-style: normal; + } + +blockquote em, blockquote cite { + font-style: italic; + } + +blockquote, q { + quotes: none; + } + +blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; + } + +a { + cursor: pointer; + } + +a img { + border: none; + } + +pre { + overflow: auto; + font: .9em Monaco, monospace, Courier, "Courier New"; + line-height: 25px; + margin-bottom: 25px; + padding: 10px; + } + +code { + font: .9em Monaco, monospace, Courier, "Courier New"; + } + +pre code { + font-size: 1em; + } + +ins, dfn { + font-style: italic; + text-decoration: none; + border-bottom: 1px solid #666; + } + +del, s, strike { + text-decoration: line-through; + } + +object { + margin-bottom: 25px; + } + +input, textarea { + font-size: 1em; + padding: 3px; + } + +input[type="submit"] { + cursor: pointer; + } + +:focus { + outline: none; + } + +form label { + cursor: pointer; + } + +option { + padding: 1px 2px; + } + +table { + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 25px; + } + +th, td { + text-align: left; + } + +hr { + height: 1px; + margin-bottom: 25px; + background: #333; + } + +img.wp-smiley { + max-height: 12px; + margin: 0; + padding: 0; + border: none; + } + +.gallery { + display: block; + text-align: center; + margin-bottom: 25px; + } + +.alignleft, .left { + float: left; + margin-right: 20px; + } + +.alignright, .right { + float: right; + margin-left: 20px; + } + +.aligncenter, .center { + display: block; + margin: 0 auto 25px auto; + } + +.alignnone, .block { + clear: both; + margin: 0 0 25px 0; + } + +.clear { + clear: both; + } + +img.alignleft, img.alignright { + display: inline; + } + +blockquote.alignleft, blockquote.alignright { + width: 33%; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/2c-l-fixed.css b/wp-content/themes/hybrid/library/css/2c-l-fixed.css index 16c506237..93756950d 100644 --- a/wp-content/themes/hybrid/library/css/2c-l-fixed.css +++ b/wp-content/themes/hybrid/library/css/2c-l-fixed.css @@ -1,63 +1,5 @@ /** - * Two columns with content floated left. - * Fixed width of 960px. - * - * @since 0.6 - * @package Hybrid - * @subpackage CSS + * @deprecated 1.0.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. */ - -#body-container { - overflow: hidden; - width: 960px; - margin: 0 auto; - } - -#container { - overflow: hidden; - float: left; - width: 960px; - } - -.content { - overflow: hidden; - float: left; - width: 620px; - } -.no-widgets .content, .no-default-widgets .content { - width: 960px; - } - -#primary { - position: relative; - float: right; - width: 300px; - } - -#secondary { - position: relative; - clear: right; - float: right; - width: 300px; - } - -#subsidiary { - overflow: hidden; - } - -#subsidiary .widget { - overflow: hidden; - float: left; - width: 300px; - margin: 0 20px 0 0; - } - -#footer-container { - clear: both; - overflow: hidden; - } - -#footer { - clear: both; - overflow: hidden; - } \ No newline at end of file +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:left;width:620px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{position:relative;float:right;width:300px}#secondary{position:relative;clear:right;float:right;width:300px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both;overflow:hidden} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/2c-r-fixed.css b/wp-content/themes/hybrid/library/css/2c-r-fixed.css index 06a011cda..30dabb2e4 100644 --- a/wp-content/themes/hybrid/library/css/2c-r-fixed.css +++ b/wp-content/themes/hybrid/library/css/2c-r-fixed.css @@ -1,61 +1,5 @@ /** - * Two columns with content floated right. - * Fixed width of 960px. - * - * @since 0.6 - * @package Hybrid - * @subpackage CSS + * @deprecated 1.0.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. */ - -#body-container { - overflow: hidden; - width: 960px; - margin: 0 auto; - } - -#container { - overflow: hidden; - float: left; - width: 960px; - } - -.content { - overflow: hidden; - float: right; - width: 620px; - } -.no-widgets .content, .no-default-widgets .content { - width: 960px; - } - -#primary { - float: left; - width: 300px; - } - -#secondary { - clear: left; - float: left; - width: 300px; - } - -#subsidiary { - overflow: hidden; - } - -#subsidiary .widget { - overflow: hidden; - float: left; - width: 300px; - margin: 0 20px 0 0; - } - -#footer-container { - clear: both; - overflow: hidden; - } - -#footer { - clear: both; - overflow: hidden; - } \ No newline at end of file +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:right;width:620px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{float:left;width:300px}#secondary{clear:left;float:left;width:300px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both;overflow:hidden} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/3c-c-fixed.css b/wp-content/themes/hybrid/library/css/3c-c-fixed.css index f6f52b119..a0403d952 100644 --- a/wp-content/themes/hybrid/library/css/3c-c-fixed.css +++ b/wp-content/themes/hybrid/library/css/3c-c-fixed.css @@ -1,78 +1,5 @@ /** - * Holy Grail Stylesheet. - * Creates the Holy Grail (fixed width) of three-column layouts. - * Primary / Content / Secondary - * Fixed width of 960px. - * - * @link http://www.alistapart.com/articles/holygrail - * @author Matthew Levine - * - * @since 0.6 - * @package Hybrid - * @subpackage CSS + * @deprecated 1.0.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. */ - -body { - min-width: 600px; /* 2x LC width + RC width */ - } -#body-container { - overflow: hidden; - width: 960px; - margin: 0 auto; - } -#container { - clear: both; - overflow: hidden; - padding-left: 240px; /* LC width */ - padding-right: 240px; /* RC width */ - } -.no-widgets #container, .no-default-widgets #container { - width: 960px; - padding-left: 0; - padding-right: 0; - } -.content, #primary, #secondary { - position: relative; - float: left; - } -.content { - width: 100%; - } -.no-widgets .content, .no-default-widgets .content { - width: 960px; - } -#primary { - width: 220px; /* LC width */ - right: 240px; /* LC width */ - margin-left: -100%; - } -#secondary { - width: 220px; /* RC width */ - margin-right: -240px; /* RC width */ - margin-left: 20px; - } - -/*** IE6 Fix ***/ -* html #secondary { - left: 240px; /* RC width */ - } - -#subsidiary { - overflow: hidden; - } - -#subsidiary .widget { - overflow: hidden; - float: left; - width: 300px; - margin: 0 20px 0 0; - } - -#footer-container { - clear: both; - overflow: hidden; - } - -#footer { - clear: both; - } \ No newline at end of file +body{min-width:600px}#body-container{overflow:hidden;width:960px;margin:0 auto}#primary-menu{position:relative;z-index:100}#container{position:relative;clear:both;overflow:hidden;padding-left:240px; padding-right:240px; z-index:1}.no-widgets #container,.no-default-widgets #container{width:960px;padding-left:0;padding-right:0}.content,#primary,#secondary{position:relative;float:left;z-index:1}.content{width:100%}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{width:220px; right:240px; margin-left:-100%}#secondary{width:220px; margin-right:-240px; margin-left:20px}* html #secondary{left:240px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/3c-l-fixed.css b/wp-content/themes/hybrid/library/css/3c-l-fixed.css index 594bc31ae..abc84ce44 100644 --- a/wp-content/themes/hybrid/library/css/3c-l-fixed.css +++ b/wp-content/themes/hybrid/library/css/3c-l-fixed.css @@ -1,63 +1,5 @@ /** - * Three columns with content floated left. - * Fixed width of 960px. - * Content / Secondary / Primary - * - * @since 0.6 - * @package Hybrid - * @subpackage CSS + * @deprecated 1.0.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. */ - -#body-container { - overflow: hidden; - width: 960px; - margin: 0 auto; - } - -#container { - overflow: hidden; - float: left; - width: 960px; - } - -.content { - overflow: hidden; - float: left; - width: 520px; - } -.no-widgets .content, .no-default-widgets .content { - width: 960px; - } - -#primary { - overflow: hidden; - float: right; - width: 190px; - } - -#secondary { - overflow: hidden; - float: right; - width: 190px; - margin-right: 20px; - } - -#subsidiary { - overflow: hidden; - } - -#subsidiary .widget { - overflow: hidden; - float: left; - width: 300px; - margin: 0 20px 0 0; - } - -#footer-container { - clear: both; - overflow: hidden; - } - -#footer { - clear: both; - } \ No newline at end of file +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:left;width:520px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{overflow:hidden;float:right;width:190px}#secondary{overflow:hidden;float:right;width:190px;margin-right:20px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/3c-r-fixed.css b/wp-content/themes/hybrid/library/css/3c-r-fixed.css index 6f02993f9..27427da93 100644 --- a/wp-content/themes/hybrid/library/css/3c-r-fixed.css +++ b/wp-content/themes/hybrid/library/css/3c-r-fixed.css @@ -1,63 +1,5 @@ /** - * Three columns with content floated right. - * Fixed width of 960px. - * Content / Primary / Secondary - * - * @since 0.6 - * @package Hybrid - * @subpackage CSS + * @deprecated 1.0.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. */ - -#body-container { - overflow: hidden; - width: 960px; - margin: 0 auto; - } - -#container { - overflow: hidden; - float: left; - width: 960px; - } - -.content { - overflow: hidden; - float: right; - width: 520px; - } -.no-widgets .content, .no-default-widgets .content { - width: 960px; - } - -#primary { - overflow: hidden; - float: left; - width: 190px; - } - -#secondary { - overflow: hidden; - float: left; - width: 190px; - margin-left: 20px; - } - -#subsidiary { - overflow: hidden; - } - -#subsidiary .widget { - overflow: hidden; - float: left; - width: 300px; - margin: 0 20px 0 0; - } - -#footer-container { - clear: both; - overflow: hidden; - } - -#footer { - clear: both; - } \ No newline at end of file +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:right;width:520px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{overflow:hidden;float:left;width:190px}#secondary{overflow:hidden;float:left;width:190px;margin-left:20px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/admin.css b/wp-content/themes/hybrid/library/css/admin.css index 9c917a470..8e7f52bdc 100644 --- a/wp-content/themes/hybrid/library/css/admin.css +++ b/wp-content/themes/hybrid/library/css/admin.css @@ -1,57 +1 @@ -/* Theme settings page. */ -.form-table th { - width: 20%; - font-weight: bold; - } -.metabox-holder .column-1 { - width: 100%; - } -.metabox-holder .column-2 { - float: left; - width: 49%; - } -.metabox-holder .column-3 { - float: right; - width: 49%; - } - -/* Widgets page. */ -.columns-1 { - } -.columns-2 { - overflow: hidden; - float: left; - width: 48%; - } -.columns-3 { - overflow: hidden; - float: left; - width: 31%; - margin-right: 3.5%; - } -.column-last { - float: right; - margin-right: 0; - } - -.hybrid-widget-controls label { - font-size: 11px; - } -.columns-2 input.widefat, .columns-2 select.widefat { - width: 99%; - } -.columns-3 select.widefat { - width: 98.5%; - } -.hybrid-widget-controls select[multiple="multiple"] { - width: 100%; - height: 5.0em !important; - } -input.smallfat { - float: right; - width: 66px; - } -select.smallfat { - float: right; - min-width: 66px; - } \ No newline at end of file +.appearance_page_theme-settings .side .form-table th{width:20%;font-weight:bold;text-align:left;padding-left:0}.appearance_page_theme-settings .metabox-holder .column-1{float:left;width:66%}.appearance_page_theme-settings .metabox-holder .column-2{float:right;width:32%}.appearance_page_theme-settings .metabox-holder .column-3{clear:both;width:100%}.appearance_page_theme-settings .metabox-holder textarea{width:100%}.custom-post-format-wrap,.post-layout-wrap{padding:0 5px;max-height:170px;overflow-y:auto}.hybrid-post-settings{padding-top:5px}.hybrid-post-settings p{margin-bottom:15px !important}.widgets-php .columns-1{}.widgets-php .columns-2{overflow:hidden;float:left;width:48%}.widgets-php .columns-3{overflow:hidden;float:left;width:31%;margin-right:3.5%}.widgets-php .column-last{float:right;margin-right:0}.widgets-php .hybrid-widget-controls label{font-size:11px}.widgets-php .columns-2 input.widefat,.widgets-php .columns-2 select.widefat{width:99%}.widgets-php .columns-3 select.widefat{width:98.5%}.widgets-php .hybrid-widget-controls select[multiple="multiple"]{width:100%;height:5.0em !important}.widgets-php input.smallfat{float:right;width:66px}.widgets-php select.smallfat{float:right;min-width:66px} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/admin.dev.css b/wp-content/themes/hybrid/library/css/admin.dev.css new file mode 100644 index 000000000..66d3ed2d1 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/admin.dev.css @@ -0,0 +1,76 @@ +/* Theme settings page. */ +.appearance_page_theme-settings .side .form-table th { + width: 20%; + font-weight: bold; + text-align: left; + padding-left: 0; + } +.appearance_page_theme-settings .metabox-holder .column-1 { + float: left; + width: 66%; + } +.appearance_page_theme-settings .metabox-holder .column-2 { + float: right; + width: 32%; + } +.appearance_page_theme-settings .metabox-holder .column-3 { + clear: both; + width: 100%; + } +.appearance_page_theme-settings .metabox-holder textarea { + width: 100%; + } + +/* Post edit screen. */ +.custom-post-format-wrap, .post-layout-wrap { + padding: 0 5px; + max-height: 170px; + overflow-y: auto; + } +.hybrid-post-settings { + padding-top: 5px; + } +.hybrid-post-settings p { + margin-bottom: 15px !important; + } + +/* Widgets page. */ +.widgets-php .columns-1 { + } +.widgets-php .columns-2 { + overflow: hidden; + float: left; + width: 48%; + } +.widgets-php .columns-3 { + overflow: hidden; + float: left; + width: 31%; + margin-right: 3.5%; + } +.widgets-php .column-last { + float: right; + margin-right: 0; + } + +.widgets-php .hybrid-widget-controls label { + font-size: 11px; + } +.widgets-php .columns-2 input.widefat, .widgets-php .columns-2 select.widefat { + width: 99%; + } +.widgets-php .columns-3 select.widefat { + width: 98.5%; + } +.widgets-php .hybrid-widget-controls select[multiple="multiple"] { + width: 100%; + height: 5.0em !important; + } +.widgets-php input.smallfat { + float: right; + width: 66px; + } +.widgets-php select.smallfat { + float: right; + min-width: 66px; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/drop-downs.css b/wp-content/themes/hybrid/library/css/drop-downs.css index f1f8e37ab..fd05c4689 100644 --- a/wp-content/themes/hybrid/library/css/drop-downs.css +++ b/wp-content/themes/hybrid/library/css/drop-downs.css @@ -1,61 +1 @@ -/** - * Dropdowns Stylesheet - * Sets up some default dropdown menu styles - * Style rules for both the page and category menus - * - * @since 0.5 - * @package Hybrid - * @subpackage CSS - */ - -/* @deprecated 0.8 Default page menu styles */ -#page-nav ul{margin:0;padding:0;list-style:none}#page-nav ul{line-height:1.0}#page-nav .menu ul{position:absolute;top:-999em;width:10em}#page-nav ul ul li{width:100%}#page-nav li:hover{visibility:inherit}#page-nav li{float:left;position:relative}#page-nav a{display:block;position:relative}#page-nav li:hover ul,li.sfHover ul{left:0;top:2em;z-index:99}#page-nav li:hover li ul,li.sfHover li ul{top:-999em}#page-nav li li:hover ul,li li.sfHover ul{left:10em;top:0}#page-nav li li:hover li ul,li li.sfHover li ul{top:-999em}#page-nav li li li:hover ul,li li li.sfHover ul{left:10em;top:0} - -/* @deprecated 0.8 Default category menu styles */ -#cat-nav ul{margin:0;padding:0;list-style:none}#cat-nav ul{line-height:1.0}#cat-nav .menu ul{position:absolute;top:-999em;width:10em}#cat-nav ul ul li{width:100%}#cat-nav li:hover{visibility:inherit}#cat-nav li{float:left;position:relative}#cat-nav a{display:block;position:relative}#cat-nav li:hover ul,li.sfHover ul{left:0;top:2em;z-index:99}#cat-nav li:hover li ul,li.sfHover li ul{top:-999em}#cat-nav li li:hover ul,li li.sfHover ul{left:10em;top:0}#cat-nav li li:hover li ul,li li.sfHover li ul{top:-999em}#cat-nav li li li:hover ul,li li li.sfHover ul{left:10em;top:0} - -/* Drop-down styles. */ -div.menu ul { - margin: 0; - padding: 0; - list-style: none; - line-height: 1.0; - } -div.menu ul ul { - position: absolute; - top: -999em; - width: 10em; - } -div.menu ul ul li { - width: 100%; - } -div.menu li:hover { - visibility: inherit; - } -div.menu li { - float: left; - position: relative; - } -div.menu a { - display: block; - position: relative; - } -div.menu li:hover ul, li.sfHover ul { - left: 0; - top: 2em; - z-index: 99; - } -div.menu li:hover li ul, li.sfHover li ul { - top: -999em; - } -div.menu li li:hover ul, li li.sfHover ul { - left: 10em; - top: 0; - } -div.menu li li:hover li ul, li li.sfHover li ul { - top: -999em; - } -div.menu li li li:hover ul, li li li.sfHover ul { - left: 10em; - top: 0; - } \ No newline at end of file +div.menu ul{margin:0;padding:0;list-style:none;line-height:1.0}div.menu ul ul{position:absolute;top:-999em;width:10em}div.menu ul ul li{width:100%}div.menu li:hover{visibility:inherit}div.menu li{float:left;position:relative}div.menu a{display:block;position:relative}div.menu li:hover ul,li.sfHover ul{left:0;top:2em;z-index:99}div.menu li:hover li ul,li.sfHover li ul{top:-999em}div.menu li li:hover ul,li li.sfHover ul{left:10em;top:0}div.menu li li:hover li ul,li li.sfHover li ul{top:-999em}div.menu li li li:hover ul,li li li.sfHover ul{left:10em;top:0} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/drop-downs.dev.css b/wp-content/themes/hybrid/library/css/drop-downs.dev.css new file mode 100644 index 000000000..180dc86c3 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/drop-downs.dev.css @@ -0,0 +1,55 @@ +/** + * Dropdowns Stylesheet + * Sets up some default dropdown menu styles + * Style rules for both the page and category menus + * + * @since 0.5 + * @package Hybrid + * @subpackage CSS + */ + +/* Drop-down styles. */ +div.menu ul { + margin: 0; + padding: 0; + list-style: none; + line-height: 1.0; + } +div.menu ul ul { + position: absolute; + top: -999em; + width: 10em; + } +div.menu ul ul li { + width: 100%; + } +div.menu li:hover { + visibility: inherit; + } +div.menu li { + float: left; + position: relative; + } +div.menu a { + display: block; + position: relative; + } +div.menu li:hover ul, li.sfHover ul { + left: 0; + top: 2em; + z-index: 99; + } +div.menu li:hover li ul, li.sfHover li ul { + top: -999em; + } +div.menu li li:hover ul, li li.sfHover ul { + left: 10em; + top: 0; + } +div.menu li li:hover li ul, li li.sfHover li ul { + top: -999em; + } +div.menu li li li:hover ul, li li li.sfHover ul { + left: 10em; + top: 0; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/gallery.css b/wp-content/themes/hybrid/library/css/gallery.css new file mode 100644 index 000000000..c2b4ab079 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/gallery.css @@ -0,0 +1 @@ +.gallery{display:block;clear:both;overflow:hidden;margin:0 auto}.gallery .gallery-row{display:block;clear:both;overflow:hidden;margin:0}.gallery .gallery-item{overflow:hidden;float:left;margin:0;text-align:center;list-style:none;padding:0}.gallery .gallery-item .gallery-icon img{width:auto;max-width:89%;height:auto;padding:1%;margin:0 auto}.gallery-caption{margin-left:0}.gallery .col-0{width:100%}.gallery .col-1{width:100%}.gallery .col-2{width:50%}.gallery .col-3{width:33.33%}.gallery .col-4{width:25%}.gallery .col-5{width:20%}.gallery .col-6{width:16.66%}.gallery .col-7{width:14.28%}.gallery .col-8{width:12.5%}.gallery .col-9{width:11.11%}.gallery .col-10{width:10%}.gallery .col-11{width:9.09%}.gallery .col-12{width:8.33%}.gallery .col-13{width:7.69%}.gallery .col-14{width:7.14%}.gallery .col-15{width:6.66%}.gallery .col-16{width:6.25%}.gallery .col-17{width:5.88%}.gallery .col-18{width:5.55%}.gallery .col-19{width:5.26%}.gallery .col-20{width:5%}.gallery .col-21{width:4.76%}.gallery .col-22{width:4.54%}.gallery .col-23{width:4.34%}.gallery .col-24{width:4.16%}.gallery .col-25{width:4%}.gallery .col-26{width:3.84%}.gallery .col-27{width:3.7%}.gallery .col-28{width:3.57%}.gallery .col-29{width:3.44%}.gallery .col-30{width:3.33%} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/gallery.dev.css b/wp-content/themes/hybrid/library/css/gallery.dev.css new file mode 100644 index 000000000..0bd55b6e1 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/gallery.dev.css @@ -0,0 +1,68 @@ +/** + * Cleaner Gallery Stylesheet + * @version 0.9.2 + */ + +.gallery { + display: block; + clear: both; + overflow: hidden; + margin: 0 auto; + } +.gallery .gallery-row { + display: block; + clear: both; + overflow: hidden; + margin: 0; + } +.gallery .gallery-item { + overflow: hidden; + float: left; + margin: 0; + text-align: center; + list-style: none; + padding: 0; + } +.gallery .gallery-item .gallery-icon img { + width: auto; + max-width: 89%; + height: auto; + padding: 1%; + margin: 0 auto; + } +.gallery-caption { + margin-left: 0; + } + +/* Image sizes depending on the number of columns */ +.gallery .col-0 { width: 100%; } +.gallery .col-1 { width: 100%; } +.gallery .col-2 { width: 50%; } +.gallery .col-3 { width: 33.33%; } +.gallery .col-4 { width: 25%; } +.gallery .col-5 { width: 20%; } +.gallery .col-6 { width: 16.66%; } +.gallery .col-7 { width: 14.28%; } +.gallery .col-8 { width: 12.5%; } +.gallery .col-9 { width: 11.11%; } +.gallery .col-10 { width: 10%; } +.gallery .col-11 { width: 9.09%; } +.gallery .col-12 { width: 8.33%; } +.gallery .col-13 { width: 7.69%; } +.gallery .col-14 { width: 7.14%; } +.gallery .col-15 { width: 6.66%; } +.gallery .col-16 { width: 6.25%; } +.gallery .col-17 { width: 5.88%; } +.gallery .col-18 { width: 5.55%; } +.gallery .col-19 { width: 5.26%; } +.gallery .col-20 { width: 5%; } +.gallery .col-21 { width: 4.76%; } +.gallery .col-22 { width: 4.54%; } +.gallery .col-23 { width: 4.34%; } +.gallery .col-24 { width: 4.16%; } +.gallery .col-25 { width: 4%; } +.gallery .col-26 { width: 3.84%; } +.gallery .col-27 { width: 3.7%; } +.gallery .col-28 { width: 3.57%; } +.gallery .col-29 { width: 3.44%; } +.gallery .col-30 { width: 3.33%; } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/holy-grail-fluid.css b/wp-content/themes/hybrid/library/css/holy-grail-fluid.css index 895f932f7..10606db3e 100644 --- a/wp-content/themes/hybrid/library/css/holy-grail-fluid.css +++ b/wp-content/themes/hybrid/library/css/holy-grail-fluid.css @@ -1 +1,5 @@ +/** + * @deprecated 1.0.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. +*/ body{min-width:600px}#container{overflow:hidden;padding-left:200px; padding-right:200px}.content,#primary,#secondary{position:relative;float:left;padding-bottom:20010px; margin-bottom:-20000px}.content{width:100%}#primary{width:200px; right:200px; margin-left:-100%}#secondary{width:200px; margin-right:-200px}#footer{clear:both}* html #secondary{left:200px} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/plugins.css b/wp-content/themes/hybrid/library/css/plugins.css index 7bf442956..9f1ec3679 100644 --- a/wp-content/themes/hybrid/library/css/plugins.css +++ b/wp-content/themes/hybrid/library/css/plugins.css @@ -1 +1,5 @@ +/** + * @deprecated 1.0.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. +*/ .wp-pagenavi .pages{margin:2px 3px 2px 0;font-style:italic}.wp-pagenavi .current{margin:2px;padding:1px 6px;font-weight:bold}.wp-pagenavi .extend{margin:2px}.wp-pagenavi a{margin:0 2px;padding:1px 6px;font-style:italic;border:1px solid #ccc}.WP-EmailIcon{padding:0;margin:0;border:none}.comment_license{font-style:italic}img#wpstats{overflow:hidden !important;width:0 !important;height:0 !important;padding:0 !important;margin:0 !important}.contact-form{margin-bottom:21px}.contact-form legend{display:none}.contact-form .form-input input{display:block;margin-bottom:6px;padding:3px 6px;width:300px}.contact-form label{font-size:.9em}.contact-form textarea{width:97%;margin-bottom:6px;padding:6px}.contact-form .form-option{margin-bottom:6px}.contact-form .button{width:100px;margin-right:9px;padding:6px 9px}.contact-form .button:hover{cursor:pointer} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/reset.css b/wp-content/themes/hybrid/library/css/reset.css index c187cdc08..c2542bdb5 100644 --- a/wp-content/themes/hybrid/library/css/reset.css +++ b/wp-content/themes/hybrid/library/css/reset.css @@ -1 +1 @@ -html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}font{color:#333}center{text-align:left} \ No newline at end of file +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/reset.dev.css b/wp-content/themes/hybrid/library/css/reset.dev.css new file mode 100644 index 000000000..25b5efbe3 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/reset.dev.css @@ -0,0 +1,27 @@ +html, body, div, span, object, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + background: transparent; + border: none; + text-decoration: none; + } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; + } + +b, i, hr, u, center, menu, layer, s, strike, font, xmp { + margin: 0; + padding: 0; + vertical-align: baseline; + outline: none; + font-size: 100%; + font-weight: normal; + font-style: normal; + background: transparent; + border: none; + text-decoration: none; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/screen.css b/wp-content/themes/hybrid/library/css/screen.css index c6d3bfeaf..abad3eff3 100644 --- a/wp-content/themes/hybrid/library/css/screen.css +++ b/wp-content/themes/hybrid/library/css/screen.css @@ -1,609 +1,5 @@ /** - * Screen Stylesheet - * Default style for the Hybrid theme - * - * @since 0.3 - * @package Hybrid - * @subpackage CSS + * @deprecated 1.0.0 - This file is for backwards compatibility with the Hybrid parent theme. It will + * be removed in a future version. */ - -/* Body */ -body { - font: normal normal normal 15px/21px Georgia, Times, "Times New Roman", serif; - color: #000; - } - -/* Body container */ -#body-container { - margin: 90px auto 21px auto; - } - -/* Links */ -a { - color: #21759b; - text-decoration: none; - } -a:visited { - color: #551a8b; - } -a:hover, a:active { - color: #d54e21; - text-decoration: underline; - } - -/* Headers */ -h2, h3, h4, h5, h6 { - font-family: Georgia, Times, "Times New Roman", serif; - color: #000; - font-weight: bold; - } -h2 { - font-size: 21px; - } -h3 { - font-size: 19px; - } -h4 { - font-size: 17px; - } -h5 { - font-size: 15px; - } -h6 { - font-size: 13px; - } - -/* Lists */ -ul { - list-style: square; - } - -/* Blockquotes */ -blockquote { - font-style: italic; - color: #555; - } -blockquote blockquote { - color: #777; - } -blockquote em { - font-style: normal; - } - -/* Code */ -pre { - padding: 9px; - background: #f9f9f9; - border: 1px solid #ccc; - } -code { - padding: 0 3px; - background: #eee; - } -pre code { - background: transparent; - } - -/* Tables */ -table { - width: 100%; - border-collapse: separate; - border-top: 1px solid #ccc; - border-left: 1px solid #ccc; - } -caption { - font-size: .9em; - font-style: italic; - text-align: right; - } -td, th { - padding: 3px 6px; - border-bottom: 1px solid #ccc; - border-right: 1px solid #ccc; - } -th { - background: #eee; - } - -/* Drop caps */ -.drop-cap { - float: left; - margin: 3px 3px 0 0; - font: normal normal normal 47px/35px "Warnock Pro", "Goudy Old Style", Palatino,"Book Antiqua", Georgia, serif; - color: #333; - } - -/* Notes */ -.note { - padding: 6px 9px; - background: #eee; - border: 1px solid #ccc; - } - -/* Warnings/Alerts */ -.warning, .alert { - padding: 6px 9px; - background: #fffbbc; - border: 1px solid #E6DB55; - } - -/* Errors */ -.error { - padding: 6px 9px; - background: #ffebe8; - border: 1px solid #C00; - } - -/* Downloads */ -.download { - padding: 6px 9px; - background: #e7f7d3; - border: 1px solid #6c3; - } - -/* Breadcrumb */ -.breadcrumb { - margin: 0 0 30px 0; - font-size: .9em; - font-style: italic; - color: #666; - } -.breadcrumb a { - color: #111; - text-decoration: none; - } -.breadcrumb a:hover { - color: #d54e21; - text-decoration: underline; - } - -/* Images */ -.post img { - max-width: 568px; - padding: 5px; - border: 1px solid #ccc; - } - -.thumbnail { - float: left; - width: 100px; - height: 100px; - margin: 5px 15px 0 0; - } - -/* Captions [caption] */ -.wp-caption { - max-width: 576px; - margin-top: 6px; - padding: 6px 1px 0 1px; - border: 1px solid #ccc; - text-align: center; - } -.wp-caption .wp-caption-text { - margin: 0; - padding: 0 5px; - text-align: right; - font-size: .9em; - font-style: italic; - color: #666; - } -.wp-caption img { - max-width: 564px; - margin: 0 auto; - padding: 0; - border: 1px solid #666; - } - -/* Gallery [gallery] */ -.gallery img { - border: 1px solid #ccc; - } - -/* Avatars */ -.avatar { - float: left; - width: 100px; - height: 100px; - margin: 5px 15px 0 0; - padding: 5px; - border: 1px solid #ccc; - } - -/* Header */ -#header { - margin: 0 0 40px 0; - } - -/* Blog title */ -#site-title { - font: italic normal normal 35px/35px Georgia, Times, "Times New Roman", serif; - margin: 0 0 10px 0; - } -#site-title a { - color: #000; - } - -/* Blog description */ -#site-description { - font: normal normal normal 16px/20px Georgia, Times, "Times New Roman", serif; - margin: 0; - color: #666; - } - -/* Navigation */ -#primary-menu, #navigation { - overflow: visible; - height: 34px; - margin: 0 0 60px 0; - z-index: 100; - } -#primary-menu li, #page-nav li { - margin-right: 15px; - } -#primary-menu li li, #page-nav li li { - margin-right: 0; - } -#primary-menu li a, #page-nav li a { - padding: 8px 15px 8px 15px; - color: #111; - background: #fff; - border: 1px solid #ccc; - } - -/* Drop-downs style */ -#primary-menu li:hover ul, #primary-menu li.sfHover ul, #page-nav li:hover ul, #page-nav li.sfHover ul { - top: 32px; - } -#primary-menu li li a, #page-nav li li a { - border-top: none; - margin-right: 0; - } -#primary-menu li ul, #page-nav li ul { - background: #fff; - border-top: 1px solid #ccc; - } -#primary-menu li li:hover ul, #primary-menu li li.sfHover ul, #primary-menu li li li:hover ul, #primary-menu li li li.sfHover ul, -#page-nav li li:hover ul, #page-nav li li.sfHover ul , #page-nav li li li:hover ul, #page-nav li li li.sfHover ul { - top: -1px; - } -#primary-menu li li li, #page-nav li li li { - margin-left: -1px; - } - -/* Container (wraps content, primary, and secondary) */ -#container { - margin-bottom: 21px; - } - -/* Main content */ -.content { - margin: 0 0 21px 0; - } -.no-widgets .content, .page-template-no-widgets .content { - width: 960px; - } - -/* Posts */ -.post { - overflow: hidden; - margin: 0 0 40px 0; - } -.single .post, .attachment .post, .page .post { - margin: 0; - } - -/* Archive information */ -.author-info, .search-info { - overflow: hidden; - margin: 0 0 40px 0; - } - -/* Entry title */ -.entry-title { - font-size: 24px; - margin: 0 0 12px 0; - font-weight: normal; - font-style: italic; - } -.archive .entry-title, .search .entry-title { - font-size: 21px; - margin: 0; - } -.page-title, .attachment-title { - margin: 0 0 21px 0; - } -.entry-title a { - color: #000; - } - -/* Byline */ -.byline { - margin: 0 0 30px 0; - font-style: italic; - color: #666; - } -.archive .byline, .search .byline { - margin: 0; - } -.byline .byline-prep { - text-transform: lowercase; - } - -/* Entry content */ -.entry-content { - overflow: hidden; - margin: 0 0 10px 0; - } - -/* Entry metadata */ -.entry-meta { - clear: both; - font-style: italic; - color: #666; - } - -/* Page links (multiple-paged posts) */ -p.page-links a { - margin: 0 3px; - padding: 3px 9px 3px 9px; - border: 1px solid #ccc; - } - -/* Navigation links */ -.navigation-links { - margin-bottom: 21px; - font-style: italic; - } -.navigation-links .previous { - float: left; - max-width: 50%; - } -.navigation-links .next { - float: right; - max-width: 50%; - text-align: right; - } -.navigation-attachment { - overflow: hidden; - } - -/* WP Pagenavi plugin */ -.wp-pagenavi { - margin-bottom: 21px; - } -.wp-pagenavi .pages, .wp-pagenavi .current, .wp-pagenavi .extend, .wp-pagenavi a { - margin-right: 6px; - padding: 3px 9px 3px 9px; - border: 1px solid #ccc; - } - -/* Widgets */ -.widget { - overflow: hidden; - margin: 0 0 15px 0; - color: #464646; - } -.widget a { - color: #464646; - text-decoration: underline; - } -.widget a:hover { - color: #d54e21; - text-decoration: none; - } - -/* Widget titles */ -.widget-title { - font-size: 18px; - font-weight: normal; - font-style: italic; - color: #111; - } - -/* Utility widget areas */ -#utility-before-content, #utility-after-content, #utility-after-page, #utility-after-single { - margin: 0 0 21px 0; - padding: 20px 20px 0 20px; - border: 1px solid #ccc; - } - -/* Comments template */ -#comments-template { - clear: both; - } - -/* Comment headers */ -.comments-header { - font-size: 1.2em; - } - -/* Comments are closed */ -.comments-closed { - font-style: italic; - } - -/* Comment list */ -#comments-template ol { - list-style: none; - margin: 0 0 21px 0; - } -#comments li, #comments li li li, #comments li li li li li { - overflow: hidden; - margin: 0 0 15px 0; - padding: 15px 15px 0 15px; - background: #fff; - border: 1px solid #ccc; - } -#comments li li, #comments li li li li { - background: #f9f9f9; - } - -/* Avatar */ -#comments-template .avatar { - width: 40px; - height: 40px; - float: left; - margin-right: 15px; - padding: 0; - border: 1px solid #666; - } - -/* Comment metadata */ -.comment-meta { - margin: 10px 0 21px 0; - font-size: 13px; - color: #666; - } -.comment-author { - font-size: 15px; - color: #000; - } -.comment-reply-link, .permalink, .comment-edit-link { - font-style: italic; - color: #666; - } - -/* Comment text */ -.comment-text { - clear: left; - margin: 0 15px; - } - -/* Form */ -.text-input { - display: block; - padding: 3px 6px; - width: 97%; - } -#comments-template label { - font-size: .9em; - } - -/* Respond textarea */ -textarea { - width: 98%; - } - -/* Submit and rest buttons */ -.button, .submit, .reset { - width: 100px; - margin-right: 15px; - padding: 7px 15px 8px 15px; - background: #fff; - border: 1px solid #ccc; - } -.button:hover, .submit:hover, .reset:hover { - cursor: pointer; - background: #f9f9f9; - } - -/* Footer container */ -#footer-container { - clear: both; - margin: 0 0 21px 0; - } - -/* Subsidiary */ -#subsidiary { - margin: 0 0 21px 0; - } - -/* Footer */ -#footer { - font-style: italic; - color: #444; - } -#footer .copyright { - display: inline; - float: left; - margin-right: 9px; - } - -/* Post Layouts */ -.layout-1c .content { - width: 960px; - } -.layout-1c #primary { - clear: left; - float: left; - width: 470px; - } -.layout-1c #secondary { - clear: none; - float: right; - width: 470px; - } -.layout-2c-r .content { - float: right; - width: 620px; - } -.layout-2c-r #primary { - float: left; - width: 300px; - } -.layout-2c-r #secondary { - clear: left; - float: left; - width: 300px; - } -.layout-2c-l .content { - float: left; - width: 620px; - } -.layout-2c-l #primary { - float: right; - width: 300px; - } -.layout-2c-l #secondary { - clear: right; - float: right; - width: 300px; - } -.layout-3c-r .content { - float: right !important; - width: 520px !important; - } -.layout-3c-r #primary { - float: left !important; - width: 190px !important; - } -.layout-3c-r #secondary { - clear: none; - float: left !important; - width: 190px !important; - margin-left: 20px; - } -.layout-3c-l .content { - float: left; - width: 520px; - } -.layout-3c-l #primary { - float: right; - width: 190px; - } -.layout-3c-l #secondary { - clear: none; - float: right; - width: 190px; - margin-right: 20px; - } -.layout-3c-c #container { - padding-left: 240px; - padding-right: 240px; - } -.layout-3c-c .content { - width: 480px; - float: left; - } -.layout-3c-c #primary { - float: left; - width: 220px; - position: relative; - right: 720px; - } -.layout-3c-c #secondary { - float: left; - width: 220px; - position: relative; - margin-left: -220px; - } \ No newline at end of file +.sticky,.bypostauthor{}body{font:normal normal normal 15px/21px Georgia,Times,"Times New Roman",serif;color:#000}#body-container{margin:90px auto 21px auto}a{color:#21759b;text-decoration:none}a:visited{color:#551a8b}a:hover,a:active{color:#d54e21;text-decoration:underline}h1,h2,h3,h4,h5,h6{font-family:Arial,Verdana,sans-serif;color:#000;font-weight:bold}h1{font-size:24px}h2{font-size:21px}h3{font-size:19px}h4{font-size:17px}h5{font-size:15px}h6{font-size:13px}ul{list-style:square}blockquote{font-style:italic;color:#555}blockquote blockquote{color:#777}blockquote em{font-style:normal}pre{padding:9px;background:#f9f9f9;border:1px solid #ccc}code{padding:0 3px;background:#eee}pre code{background:transparent}table{width:100%;border-collapse:separate;border-top:1px solid #ccc;border-left:1px solid #ccc}caption{font-size:.9em;font-style:italic;text-align:right}td,th{padding:3px 6px;border-bottom:1px solid #ccc;border-right:1px solid #ccc}th{background:#eee}.drop-cap{float:left;margin:3px 3px 0 0;font:normal normal normal 47px/35px "Warnock Pro","Goudy Old Style",Palatino,"Book Antiqua",Georgia,serif;color:#333}.note{padding:6px 9px;background:#eee;border:1px solid #ccc}.warning,.alert{padding:6px 9px;background:#fffbbc;border:1px solid #E6DB55}.error{padding:6px 9px;background:#ffebe8;border:1px solid #C00}.download{padding:6px 9px;background:#e7f7d3;border:1px solid #6c3}.breadcrumb{margin:0 0 30px 0;font-size:.9em;font-style:italic;color:#666}.breadcrumb a{color:#111;text-decoration:none}.breadcrumb a:hover{color:#d54e21;text-decoration:underline}.hentry img{max-width:610px;height:auto;padding:4px;border:1px solid #ccc}.no-widgets .hentry img{max-width:950px}img.alignleft,img.alignright{margin-bottom:10px}.thumbnail{float:left;width:100px;height:100px;margin:5px 15px 10px 0}img.wp-smiley{max-width:12px;padding:0;background:transparent;border:none}.wp-caption{max-width:616px;margin-top:6px;padding:6px 1px 3px 1px;border:1px solid #ccc;text-align:center}.wp-caption .wp-caption-text{margin:0;padding:0 5px;text-align:right;font-size:.9em;font-style:italic;color:#666}.wp-caption img{max-width:604px;margin:0 auto;padding:0;border:1px solid #666}.no-widgets .wp-caption{max-width:956px}.no-widgets .wp-caption img{max-width:946px}.gallery img{border:1px solid #ccc}.avatar{float:left;width:100px;height:100px;margin:5px 15px 0 0;padding:4px;border:1px solid #ccc}#header{margin:0 0 40px 0}#site-title{font:normal normal bold 35px/35px Arial,Verdana,sans-serif;margin:0 0 10px 0}#site-title a{color:#000}#site-description{font:normal normal normal 16px/20px Georgia,Times,"Times New Roman",serif;margin:0;color:#666}#primary-menu,#navigation{overflow:visible;height:34px;margin:0 0 60px 0;z-index:100}#primary-menu li,#page-nav li{margin-right:15px}#primary-menu li li,#page-nav li li{margin-right:0}#primary-menu li a,#page-nav li a{padding:8px 15px 8px 15px;color:#111;background:#fff;border:1px solid #ccc}#primary-menu li:hover ul,#primary-menu li.sfHover ul,#page-nav li:hover ul,#page-nav li.sfHover ul{top:32px}#primary-menu li li a,#page-nav li li a{border-top:none;margin-right:0}#primary-menu li ul,#page-nav li ul{background:#fff;border-top:1px solid #ccc}#primary-menu li li:hover ul,#primary-menu li li.sfHover ul,#primary-menu li li li:hover ul,#primary-menu li li li.sfHover ul,#page-nav li li:hover ul,#page-nav li li.sfHover ul,#page-nav li li li:hover ul,#page-nav li li li.sfHover ul {top:-1px}#primary-menu li li li,#page-nav li li li{margin-left:-1px}#container{margin-bottom:21px}.content{margin:0 0 21px 0}.no-widgets .content,.page-template-no-widgets .content{width:960px}.hentry{overflow:hidden;margin:0 0 40px 0}.singular .hentry{margin:0}.loop-meta{overflow:hidden;margin:0 0 40px 0}.loop-title{font:normal normal bold 24px/24px Arial,Verdana,sans-serif}.entry-title{font:normal normal bold 24px/24px Arial,Verdana,sans-serif;margin:0 0 12px 0}.archive .entry-title,.search .entry-title{font-size:21px;margin:0 0 5px 0}.singular-page .entry-title,.singular-attachment .entry-title{margin:0 0 21px 0}.entry-title a{color:#000}.byline{margin:0 0 30px 0;font-style:italic;color:#666}.archive .byline,.search .byline{margin:0 0 5px 0}.entry-content{margin:0 0 10px 0}.entry-meta{clear:both;font-style:italic;color:#666}p.page-links,.comment-pagination{clear:both}.comment-pagination{margin-bottom:21px}p.page-links a,.comment-pagination .page-numbers{margin:0 3px;padding:3px 9px 3px 9px;border:1px solid #ccc}.navigation-links{margin-bottom:21px;font-style:italic}.navigation-links .previous{float:left;max-width:50%}.navigation-links .next{float:right;max-width:50%;text-align:right}.navigation-attachment{overflow:hidden}.widget{overflow:hidden;margin:0 0 15px 0;color:#464646}.widget a{color:#464646;text-decoration:underline}.widget a:hover{color:#d54e21;text-decoration:none}.widget-title{font-size:18px;color:#111}#utility-before-content,#utility-after-content,#utility-after-page,#utility-after-single{margin:0 0 21px 0;padding:20px 20px 0 20px;border:1px solid #ccc}#comments-template{clear:both}.comments-header{font-size:1.2em}.comments-closed{font-style:italic}ol.comment-list,ol.comment-list ol.children{list-style:none;margin:0 0 21px 0}li.comment,li li li.comment,li li li li li.comment,li li li li li li li.comment,li li li li li li li li li.comment,li.pingback,li.trackback{overflow:hidden;margin:0 0 21px 0;padding:21px 21px 0 21px;background:#fff;border:1px solid #ccc}li li.comment,li li li li.comment,li li li li li li.comment,li li li li li li li li.comment,li li li li li li li li li li.comment{background:#f9f9f9}#comments-template .avatar{width:40px;height:40px;float:left;margin-right:15px;padding:0;border:1px solid #666}.comment-meta{margin:10px 0 21px 0;font-size:13px;color:#666}.comment-author{font-size:15px;color:#000}.comment-reply-link,.permalink,.comment-edit-link{font-style:italic;color:#666}.comment-text{clear:left;margin:0 15px}.text-input{display:block;padding:3px 6px;width:97%}#comments-template label{font-size:.9em}textarea{width:98%}#submit{display:inline-block;margin-right:15px;padding:7px 15px 8px 15px;background:#fff;border:1px solid #ccc}#submit:hover{cursor:pointer;background:#f9f9f9}#footer-container{clear:both;margin:0 0 21px 0}#subsidiary{margin:0 0 21px 0}#footer{font-style:italic;color:#444}#footer .copyright{display:inline;float:left;margin-right:9px}.content{float:left;width:620px}#primary{float:right;width:300px}#secondary{clear:right;float:right;width:300px} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/css/ui-tabs.css b/wp-content/themes/hybrid/library/css/ui-tabs.css new file mode 100644 index 000000000..bfa675a94 --- /dev/null +++ b/wp-content/themes/hybrid/library/css/ui-tabs.css @@ -0,0 +1,20 @@ +/** + * Base stylesheet for use with the jQuery UI Tabs component. + * + * @since 0.9 + * @package HybridCore + * @subpackage CSS + */ + +.ui-tabs {} + +.ui-tabs-wrap {} + +.ui-tabs-nav {} +.ui-tabs-nav li {} +.ui-tabs-nav li a {} +.ui-tabs-nav li.ui-tabs-selected {} +.ui-tabs-nav li.ui-tabs-selected a {} + +.ui-tabs-hide {} +.ui-tabs-panel {} \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/breadcrumb-trail.php b/wp-content/themes/hybrid/library/extensions/breadcrumb-trail.php index 15bd87e9a..ef93d3d98 100644 --- a/wp-content/themes/hybrid/library/extensions/breadcrumb-trail.php +++ b/wp-content/themes/hybrid/library/extensions/breadcrumb-trail.php @@ -1,38 +1,42 @@ <?php /** - * A script for showing a breadcrumb trail for any type of page. It tries to anticipate any - * type of structure and display the best possible trail that matches your site's permalinks. + * Breadcrumb Trail - A breadcrumb menu script for WordPress. + * + * Breadcrumb Trail is a script for showing a breadcrumb trail for any type of page. It tries to anticipate + * any type of structure and display the best possible trail that matches your site's permalink structure. * While not perfect, it attempts to fill in the gaps left by many other breadcrumb scripts. * - * @copyright 2008 - 2010 - * @version 0.3 - * @author Justin Tadlock - * @link http://justintadlock.com/archives/2009/04/05/breadcrumb-trail-wordpress-plugin - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * @package BreadcrumbTrail + * @version 0.4.1 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2008 - 2011, Justin Tadlock + * @link http://justintadlock.com/archives/2009/04/05/breadcrumb-trail-wordpress-plugin + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ /** - * Shows a breadcrumb for all types of pages. Themes and plugins can filter $args or - * input directly. Allow filtering of only the $args using get_the_breadcrumb_args. + * Shows a breadcrumb for all types of pages. This function is formatting the final output of the + * breadcrumb trail. The breadcrumb_trail_get_items() function returns the items and this function + * formats those items. * - * @since 0.1 + * @since 0.1.0 * @param array $args Mixed arguments for the menu. * @return string Output of the breadcrumb menu. */ function breadcrumb_trail( $args = array() ) { - global $wp_query, $wp_rewrite; /* Get the textdomain. */ - $textdomain = hybrid_get_textdomain(); + $textdomain = breadcrumb_trail_textdomain(); - /* Create an empty array for the trail. */ - $trail = array(); + /* Create an empty variable for the breadcrumb. */ + $breadcrumb = ''; /* Set up the default arguments for the breadcrumb. */ $defaults = array( @@ -41,43 +45,93 @@ function breadcrumb_trail( $args = array() ) { 'after' => false, 'front_page' => true, 'show_home' => __( 'Home', $textdomain ), - 'single_tax' => false, // @deprecated 0.3 Use singular_{$post_type}_taxonomy. 'echo' => true ); /* Allow singular post views to have a taxonomy's terms prefixing the trail. */ - if ( is_singular() ) - $defaults["singular_{$wp_query->post->post_type}_taxonomy"] = false; + if ( is_singular() ) { + $post = get_queried_object(); + $defaults["singular_{$post->post_type}_taxonomy"] = false; + } /* Apply filters to the arguments. */ $args = apply_filters( 'breadcrumb_trail_args', $args ); /* Parse the arguments and extract them for easy variable naming. */ - extract( wp_parse_args( $args, $defaults ) ); + $args = wp_parse_args( $args, $defaults ); + + /* Get the trail items. */ + $trail = breadcrumb_trail_get_items( $args ); + + /* Connect the breadcrumb trail if there are items in the trail. */ + if ( !empty( $trail ) && is_array( $trail ) ) { + + /* Open the breadcrumb trail containers. */ + $breadcrumb = '<div class="breadcrumb breadcrumbs"><div class="breadcrumb-trail">'; + + /* If $before was set, wrap it in a container. */ + $breadcrumb .= ( !empty( $args['before'] ) ? '<span class="trail-before">' . $args['before'] . '</span> ' : '' ); + + /* Wrap the $trail['trail_end'] value in a container. */ + if ( !empty( $trail['trail_end'] ) ) + $trail['trail_end'] = '<span class="trail-end">' . $trail['trail_end'] . '</span>'; - /* For backwards compatibility, set $single_tax if it's explicitly given. */ - if ( $single_tax ) - $args['singular_post_taxonomy'] = $single_tax; + /* Format the separator. */ + $separator = ( !empty( $args['separator'] ) ? '<span class="sep">' . $args['separator'] . '</span>' : '<span class="sep">/</span>' ); - /* Format the separator. */ - if ( $separator ) - $separator = '<span class="sep">' . $separator . '</span>'; + /* Join the individual trail items into a single string. */ + $breadcrumb .= join( " {$separator} ", $trail ); + + /* If $after was set, wrap it in a container. */ + $breadcrumb .= ( !empty( $args['after'] ) ? ' <span class="trail-after">' . $args['after'] . '</span>' : '' ); + + /* Close the breadcrumb trail containers. */ + $breadcrumb .= '</div></div>'; + } + + /* Allow developers to filter the breadcrumb trail HTML. */ + $breadcrumb = apply_filters( 'breadcrumb_trail', $breadcrumb, $args ); + + /* Output the breadcrumb. */ + if ( $args['echo'] ) + echo $breadcrumb; + else + return $breadcrumb; +} + +/** + * Gets the items for the breadcrumb trail. This is the heart of the script. It checks the current page + * being viewed and decided based on the information provided by WordPress what items should be + * added to the breadcrumb trail. + * + * @since 0.4.0 + * @todo Build in caching based on the queried object ID. + * @param array $args Mixed arguments for the menu. + * @return array List of items to be shown in the trail. + */ +function breadcrumb_trail_get_items( $args = array() ) { + global $wp_rewrite; + + /* Get the textdomain. */ + $textdomain = breadcrumb_trail_textdomain(); + + /* Set up an empty trail array and empty path. */ + $trail = array(); + $path = ''; /* If $show_home is set and we're not on the front page of the site, link to the home page. */ - if ( !is_front_page() && $show_home ) - $trail[] = '<a href="' . home_url() . '" title="' . get_bloginfo( 'name' ) . '" rel="home" class="trail-begin">' . $show_home . '</a>'; + if ( !is_front_page() && $args['show_home'] ) + $trail[] = '<a href="' . home_url() . '" title="' . esc_attr( get_bloginfo( 'name' ) ) . '" rel="home" class="trail-begin">' . $args['show_home'] . '</a>'; /* If viewing the front page of the site. */ if ( is_front_page() ) { - if ( !$front_page ) - $trail = false; - elseif ( $show_home ) - $trail['trail_end'] = "{$show_home}"; + if ( $args['show_home'] && $args['front_page'] ) + $trail['trail_end'] = "{$args['show_home']}"; } /* If viewing the "home"/posts page. */ elseif ( is_home() ) { - $home_page = get_page( $wp_query->get_queried_object_id() ); + $home_page = get_page( get_queried_object_id() ); $trail = array_merge( $trail, breadcrumb_trail_get_parents( $home_page->post_parent, '' ) ); $trail['trail_end'] = get_the_title( $home_page->ID ); } @@ -86,18 +140,48 @@ function breadcrumb_trail( $args = array() ) { elseif ( is_singular() ) { /* Get singular post variables needed. */ - $post_id = absint( $wp_query->post->ID ); - $post_type = $wp_query->post->post_type; - $parent = $wp_query->post->post_parent; + $post = get_queried_object(); + $post_id = absint( get_queried_object_id() ); + $post_type = $post->post_type; + $parent = absint( $post->post_parent ); - /* If a custom post type, check if there are any pages in its hierarchy based on the slug. */ - if ( 'page' !== $post_type ) { + /* Get the post type object. */ + $post_type_object = get_post_type_object( $post_type ); + + /* If viewing a singular 'post'. */ + if ( 'post' == $post_type ) { + + /* If $front has been set, add it to the $path. */ + $path .= trailingslashit( $wp_rewrite->front ); + + /* If there's a path, check for parents. */ + if ( !empty( $path ) ) + $trail = array_merge( $trail, breadcrumb_trail_get_parents( '', $path ) ); + + /* Map the permalink structure tags to actual links. */ + $trail = array_merge( $trail, breadcrumb_trail_map_rewrite_tags( $post_id, get_option( 'permalink_structure' ), $args ) ); + } + + /* If viewing a singular 'attachment'. */ + elseif ( 'attachment' == $post_type ) { + + /* If $front has been set, add it to the $path. */ + $path .= trailingslashit( $wp_rewrite->front ); + + /* If there's a path, check for parents. */ + if ( !empty( $path ) ) + $trail = array_merge( $trail, breadcrumb_trail_get_parents( '', $path ) ); - $post_type_object = get_post_type_object( $post_type ); + /* Map the post (parent) permalink structure tags to actual links. */ + $trail = array_merge( $trail, breadcrumb_trail_map_rewrite_tags( $post->post_parent, get_option( 'permalink_structure' ), $args ) ); + } + + /* If a custom post type, check if there are any pages in its hierarchy based on the slug. */ + elseif ( 'page' !== $post_type ) { /* If $front has been set, add it to the $path. */ - if ( 'post' == $post_type || 'attachment' == $post_type || ( $post_type_object->rewrite['with_front'] && $wp_rewrite->front ) ) - $path = trailingslashit( $wp_rewrite->front ); + if ( $post_type_object->rewrite['with_front'] && $wp_rewrite->front ) + $path .= trailingslashit( $wp_rewrite->front ); /* If there's a slug, add it to the $path. */ if ( !empty( $post_type_object->rewrite['slug'] ) ) @@ -106,18 +190,28 @@ function breadcrumb_trail( $args = array() ) { /* If there's a path, check for parents. */ if ( !empty( $path ) ) $trail = array_merge( $trail, breadcrumb_trail_get_parents( '', $path ) ); + + /* If there's an archive page, add it to the trail. */ + if ( !empty( $post_type_object->has_archive ) ) + $trail[] = '<a href="' . get_post_type_archive_link( $post_type ) . '" title="' . esc_attr( $post_type_object->labels->name ) . '">' . $post_type_object->labels->name . '</a>'; } - /* If the post type is hierarchical or is an attachment, get its parents. */ - if ( is_post_type_hierarchical( $post_type ) || is_attachment() ) + /* If the post type path returns nothing and there is a parent, get its parents. */ + if ( ( empty( $path ) && 0 !== $parent ) || ( 'attachment' == $post_type ) ) + $trail = array_merge( $trail, breadcrumb_trail_get_parents( $parent, '' ) ); + + /* Or, if the post type is hierarchical and there's a parent, get its parents. */ + elseif ( 0 !== $parent && is_post_type_hierarchical( $post_type ) ) $trail = array_merge( $trail, breadcrumb_trail_get_parents( $parent, '' ) ); /* Display terms for specific post type taxonomy if requested. */ - if ( $args["singular_{$post_type}_taxonomy"] && $terms = get_the_term_list( $post_id, $args["singular_{$post_type}_taxonomy"], '', ', ', '' ) ) + if ( !empty( $args["singular_{$post_type}_taxonomy"] ) && $terms = get_the_term_list( $post_id, $args["singular_{$post_type}_taxonomy"], '', ', ', '' ) ) $trail[] = $terms; /* End with the post title. */ - $trail['trail_end'] = get_the_title(); + $post_title = get_the_title(); + if ( !empty( $post_title ) ) + $trail['trail_end'] = $post_title; } /* If we're viewing any type of archive. */ @@ -127,7 +221,7 @@ function breadcrumb_trail( $args = array() ) { if ( is_tax() || is_category() || is_tag() ) { /* Get some taxonomy and term variables. */ - $term = $wp_query->get_queried_object(); + $term = get_queried_object(); $taxonomy = get_taxonomy( $term->taxonomy ); /* Get the path to the term archive. Use this to determine if a page is present with it. */ @@ -150,7 +244,29 @@ function breadcrumb_trail( $args = array() ) { $trail = array_merge( $trail, breadcrumb_trail_get_term_parents( $term->parent, $term->taxonomy ) ); /* Add the term name to the trail end. */ - $trail['trail_end'] = $term->name; + $trail['trail_end'] = single_term_title( '', false ); + } + + /* If viewing a post type archive. */ + elseif ( is_post_type_archive() ) { + + /* Get the post type object. */ + $post_type_object = get_post_type_object( get_query_var( 'post_type' ) ); + + /* If $front has been set, add it to the $path. */ + if ( $post_type_object->rewrite['with_front'] && $wp_rewrite->front ) + $path .= trailingslashit( $wp_rewrite->front ); + + /* If there's a slug, add it to the $path. */ + if ( !empty( $post_type_object->rewrite['slug'] ) ) + $path .= $post_type_object->rewrite['slug']; + + /* If there's a path, check for parents. */ + if ( !empty( $path ) ) + $trail = array_merge( $trail, breadcrumb_trail_get_parents( '', $path ) ); + + /* Add the post type [plural] name to the trail end. */ + $trail['trail_end'] = $post_type_object->labels->name; } /* If viewing an author archive. */ @@ -193,18 +309,18 @@ function breadcrumb_trail( $args = array() ) { $trail = array_merge( $trail, breadcrumb_trail_get_parents( '', $wp_rewrite->front ) ); if ( is_day() ) { - $trail[] = '<a href="' . get_year_link( get_the_time( __( 'Y', $textdomain ) ) ) . '" title="' . get_the_time( __( 'Y', $textdomain ) ) . '">' . get_the_time( __( 'Y', $textdomain ) ) . '</a>'; - $trail[] = '<a href="' . get_month_link( get_the_time( __( 'Y', $textdomain ) ), get_the_time( __( 'm', $textdomain ) ) ) . '" title="' . get_the_time( __( 'F', $textdomain ) ) . '">' . get_the_time( __( 'F', $textdomain ) ) . '</a>'; - $trail['trail_end'] = get_the_time( __( 'j', $textdomain ) ); + $trail[] = '<a href="' . get_year_link( get_the_time( 'Y' ) ) . '" title="' . get_the_time( esc_attr__( 'Y', $textdomain ) ) . '">' . get_the_time( __( 'Y', $textdomain ) ) . '</a>'; + $trail[] = '<a href="' . get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ) . '" title="' . get_the_time( esc_attr__( 'F', $textdomain ) ) . '">' . get_the_time( __( 'F', $textdomain ) ) . '</a>'; + $trail['trail_end'] = get_the_time( __( 'd', $textdomain ) ); } elseif ( get_query_var( 'w' ) ) { - $trail[] = '<a href="' . get_year_link( get_the_time( __( 'Y', $textdomain ) ) ) . '" title="' . get_the_time( __( 'Y', $textdomain ) ) . '">' . get_the_time( __( 'Y', $textdomain ) ) . '</a>'; - $trail['trail_end'] = sprintf( __( 'Week %1$s', 'hybrid' ), get_the_time( __( 'W', $textdomain ) ) ); + $trail[] = '<a href="' . get_year_link( get_the_time( 'Y' ) ) . '" title="' . get_the_time( esc_attr__( 'Y', $textdomain ) ) . '">' . get_the_time( __( 'Y', $textdomain ) ) . '</a>'; + $trail['trail_end'] = sprintf( __( 'Week %1$s', $textdomain ), get_the_time( esc_attr__( 'W', $textdomain ) ) ); } elseif ( is_month() ) { - $trail[] = '<a href="' . get_year_link( get_the_time( __( 'Y', $textdomain ) ) ) . '" title="' . get_the_time( __( 'Y', $textdomain ) ) . '">' . get_the_time( __( 'Y', $textdomain ) ) . '</a>'; + $trail[] = '<a href="' . get_year_link( get_the_time( 'Y' ) ) . '" title="' . get_the_time( esc_attr__( 'Y', $textdomain ) ) . '">' . get_the_time( __( 'Y', $textdomain ) ) . '</a>'; $trail['trail_end'] = get_the_time( __( 'F', $textdomain ) ); } @@ -222,105 +338,235 @@ function breadcrumb_trail( $args = array() ) { elseif ( is_404() ) $trail['trail_end'] = __( '404 Not Found', $textdomain ); - /* Connect the breadcrumb trail if there are items in the trail. */ - if ( is_array( $trail ) ) { - $breadcrumb = '<div class="breadcrumb breadcrumbs"><div class="breadcrumb-trail">'; - $breadcrumb .= " {$before} "; - $breadcrumb .= join( " {$separator} ", $trail ); - $breadcrumb .= " {$after} "; - $breadcrumb .= '</div></div>'; - } + /* Allow devs to step in and filter the $trail array. */ + return apply_filters( 'breadcrumb_trail_items', $trail, $args ); +} + +/** + * Turns %tag% from permalink structures into usable links for the breadcrumb trail. This feels kind of + * hackish for now because we're checking for specific %tag% examples and only doing it for the 'post' + * post type. In the future, maybe it'll handle a wider variety of possibilities, especially for custom post + * types. + * + * @since 0.4.0 + * @param int $post_id ID of the post whose parents we want. + * @param string $path Path of a potential parent page. + * @param array $args Mixed arguments for the menu. + * @return array $trail Array of links to the post breadcrumb. + */ +function breadcrumb_trail_map_rewrite_tags( $post_id = '', $path = '', $args = array() ) { - $breadcrumb = apply_filters( 'breadcrumb_trail', $breadcrumb ); + /* Set up an empty $trail array. */ + $trail = array(); - /* Output the breadcrumb. */ - if ( $echo ) - echo $breadcrumb; - else - return $breadcrumb; + /* Make sure there's a $path and $post_id before continuing. */ + if ( empty( $path ) || empty( $post_id ) ) + return $trail; + + /* Get the post based on the post ID. */ + $post = get_post( $post_id ); + + /* If no post is returned, an error is returned, or the post does not have a 'post' post type, return. */ + if ( empty( $post ) || is_wp_error( $post ) || 'post' !== $post->post_type ) + return $trail; + + /* Get the textdomain. */ + $textdomain = breadcrumb_trail_textdomain(); + + /* Trim '/' from both sides of the $path. */ + $path = trim( $path, '/' ); + + /* Split the $path into an array of strings. */ + $matches = explode( '/', $path ); + + /* If matches are found for the path. */ + if ( is_array( $matches ) ) { + + /* Loop through each of the matches, adding each to the $trail array. */ + foreach ( $matches as $match ) { + + /* Trim any '/' from the $match. */ + $tag = trim( $match, '/' ); + + /* If using the %year% tag, add a link to the yearly archive. */ + if ( '%year%' == $tag ) + $trail[] = '<a href="' . get_year_link( get_the_time( 'Y', $post_id ) ) . '" title="' . get_the_time( esc_attr__( 'Y', $textdomain ), $post_id ) . '">' . get_the_time( __( 'Y', $textdomain ), $post_id ) . '</a>'; + + /* If using the %monthnum% tag, add a link to the monthly archive. */ + elseif ( '%monthnum%' == $tag ) + $trail[] = '<a href="' . get_month_link( get_the_time( 'Y', $post_id ), get_the_time( 'm', $post_id ) ) . '" title="' . get_the_time( esc_attr__( 'F Y', $textdomain ), $post_id ) . '">' . get_the_time( __( 'F', $textdomain ), $post_id ) . '</a>'; + + /* If using the %day% tag, add a link to the daily archive. */ + elseif ( '%day%' == $tag ) + $trail[] = '<a href="' . get_day_link( get_the_time( 'Y', $post_id ), get_the_time( 'm', $post_id ), get_the_time( 'd', $post_id ) ) . '" title="' . get_the_time( esc_attr__( 'F j, Y', $textdomain ), $post_id ) . '">' . get_the_time( __( 'd', $textdomain ), $post_id ) . '</a>'; + + /* If using the %author% tag, add a link to the post author archive. */ + elseif ( '%author%' == $tag ) + $trail[] = '<a href="' . get_author_posts_url( $post->post_author ) . '" title="' . esc_attr( get_the_author_meta( 'display_name', $post->post_author ) ) . '">' . get_the_author_meta( 'display_name', $post->post_author ) . '</a>'; + + /* If using the %category% tag, add a link to the first category archive to match permalinks. */ + elseif ( '%category%' == $tag && 'category' !== $args["singular_{$post->post_type}_taxonomy"] ) { + + /* Get the post categories. */ + $terms = get_the_category( $post_id ); + + /* Check that categories were returned. */ + if ( $terms ) { + + /* Sort the terms by ID and get the first category. */ + usort( $terms, '_usort_terms_by_ID' ); + $term = get_term( $terms[0], 'category' ); + + /* If the category has a parent, add the hierarchy to the trail. */ + if ( 0 !== $term->parent ) + $trail = array_merge( $trail, breadcrumb_trail_get_term_parents( $term->parent, 'category' ) ); + + /* Add the category archive link to the trail. */ + $trail[] = '<a href="' . get_term_link( $term, 'category' ) . '" title="' . esc_attr( $term->name ) . '">' . $term->name . '</a>'; + } + } + } + } + + /* Return the $trail array. */ + return $trail; } /** - * Gets parent pages of any post type or taxonomy by the ID or Path. The goal of this - * function is to create a clear path back to home given what would normally be a "ghost" - * directory. If any page matches the given path, it'll be added. But, it's also just a way - * to check for a hierarchy with hierarchical post types. + * Gets parent pages of any post type or taxonomy by the ID or Path. The goal of this function is to create + * a clear path back to home given what would normally be a "ghost" directory. If any page matches the given + * path, it'll be added. But, it's also just a way to check for a hierarchy with hierarchical post types. * - * @since 0.3 + * @since 0.3.0 * @param int $post_id ID of the post whose parents we want. * @param string $path Path of a potential parent page. * @return array $trail Array of parent page links. */ function breadcrumb_trail_get_parents( $post_id = '', $path = '' ) { + /* Set up an empty trail array. */ $trail = array(); + /* Trim '/' off $path in case we just got a simple '/' instead of a real path. */ + $path = trim( $path, '/' ); + + /* If neither a post ID nor path set, return an empty array. */ if ( empty( $post_id ) && empty( $path ) ) return $trail; + /* If the post ID is empty, use the path to get the ID. */ if ( empty( $post_id ) ) { + + /* Get parent post by the path. */ $parent_page = get_page_by_path( $path ); - $post_id = $parent_page->ID; + + /* If a parent post is found, set the $post_id variable to it. */ + if ( !empty( $parent_page ) ) + $post_id = $parent_page->ID; } - if ( $post_id == 0 ) { + /* If a post ID and path is set, search for a post by the given path. */ + if ( $post_id == 0 && !empty( $path ) ) { + + /* Separate post names into separate paths by '/'. */ $path = trim( $path, '/' ); preg_match_all( "/\/.*?\z/", $path, $matches ); + /* If matches are found for the path. */ if ( isset( $matches ) ) { + + /* Reverse the array of matches to search for posts in the proper order. */ $matches = array_reverse( $matches ); + /* Loop through each of the path matches. */ foreach ( $matches as $match ) { - $path = str_replace( $match[0], '', $path ); - $parent_page = get_page_by_path( trim( $path, '/' ) ); + /* If a match is found. */ + if ( isset( $match[0] ) ) { + + /* Get the parent post by the given path. */ + $path = str_replace( $match[0], '', $path ); + $parent_page = get_page_by_path( trim( $path, '/' ) ); - if ( $parent_page->ID > 0 ) { - $post_id = $parent_page->ID; - break; + /* If a parent post is found, set the $post_id and break out of the loop. */ + if ( !empty( $parent_page ) && $parent_page->ID > 0 ) { + $post_id = $parent_page->ID; + break; + } } } } } + /* While there's a post ID, add the post link to the $parents array. */ while ( $post_id ) { + + /* Get the post by ID. */ $page = get_page( $post_id ); + + /* Add the formatted post link to the array of parents. */ $parents[] = '<a href="' . get_permalink( $post_id ) . '" title="' . esc_attr( get_the_title( $post_id ) ) . '">' . get_the_title( $post_id ) . '</a>'; + + /* Set the parent post's parent to the post ID. */ $post_id = $page->post_parent; } - if ( $parents ) + /* If we have parent posts, reverse the array to put them in the proper order for the trail. */ + if ( isset( $parents ) ) $trail = array_reverse( $parents ); + /* Return the trail of parent posts. */ return $trail; } /** - * Searches for term parents of hierarchical taxonomies. This function is similar to - * the WordPress function get_category_parents() but handles any type of taxonomy. + * Searches for term parents of hierarchical taxonomies. This function is similar to the WordPress + * function get_category_parents() but handles any type of taxonomy. * - * @since 0.3 + * @since 0.3.0 * @param int $parent_id The ID of the first parent. * @param object|string $taxonomy The taxonomy of the term whose parents we want. * @return array $trail Array of links to parent terms. */ function breadcrumb_trail_get_term_parents( $parent_id = '', $taxonomy = '' ) { + + /* Set up some default arrays. */ $trail = array(); $parents = array(); + /* If no term parent ID or taxonomy is given, return an empty array. */ if ( empty( $parent_id ) || empty( $taxonomy ) ) return $trail; + /* While there is a parent ID, add the parent term link to the $parents array. */ while ( $parent_id ) { + + /* Get the parent term. */ $parent = get_term( $parent_id, $taxonomy ); + + /* Add the formatted term link to the array of parent terms. */ $parents[] = '<a href="' . get_term_link( $parent, $taxonomy ) . '" title="' . esc_attr( $parent->name ) . '">' . $parent->name . '</a>'; + + /* Set the parent term's parent as the parent ID. */ $parent_id = $parent->parent; } - if ( $parents ) + /* If we have parent terms, reverse the array to put them in the proper order for the trail. */ + if ( !empty( $parents ) ) $trail = array_reverse( $parents ); + /* Return the trail of parent terms. */ return $trail; } +/** + * Returns the textdomain used by the script and allows it to be filtered by plugins/themes. + * + * @since 0.4.0 + * @returns string The textdomain for the script. + */ +function breadcrumb_trail_textdomain() { + return apply_filters( 'breadcrumb_trail_textdomain', 'breadcrumb-trail' ); +} + ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/cleaner-caption.php b/wp-content/themes/hybrid/library/extensions/cleaner-caption.php new file mode 100644 index 000000000..52decfcdb --- /dev/null +++ b/wp-content/themes/hybrid/library/extensions/cleaner-caption.php @@ -0,0 +1,87 @@ +<?php +/** + * Cleaner Caption - Cleans up the WP [caption] shortcode. + * + * WordPress adds an inline style to its [caption] shortcode which specifically adds 10px of extra width to + * captions, making theme authors jump through hoops to design captioned elements to their liking. This extra + * width makes the assumption that all captions should have 10px of extra padding to account for a box that + * wraps the element. This script changes the width to match that of the 'width' attribute passed in through + * the shortcode, allowing themes to better handle how their captions are designed. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * @package CleanerCaption + * @version 0.1.0 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2011, Justin Tadlock + * @link http://justintadlock.com + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + */ + +/* Filter the caption shortcode output. */ +add_filter( 'img_caption_shortcode', 'cleaner_caption', 10, 3 ); + +/** + * Cleans up the default WordPress [caption] shortcode. The main purpose of this function is to remove the + * inline styling WP adds, which creates 10px of padding around captioned elements. + * + * @since 0.1.0 + * @param string $output The output of the default caption (empty string at this point). + * @param array $attr Array of arguments for the [caption] shortcode. + * @param string $content The content placed after the opening [caption] tag and before the closing [/caption] tag. + * @return string $output The formatted HTML for the caption. + */ +function cleaner_caption( $output, $attr, $content ) { + + /* We're not worried abut captions in feeds, so just return the output here. */ + if ( is_feed() ) + return $output; + + /* Set up the default arguments. */ + $defaults = array( + 'id' => '', + 'align' => 'alignnone', + 'width' => '', + 'caption' => '' + ); + + /* Allow developers to override the default arguments. */ + $defaults = apply_filters( 'cleaner_caption_defaults', $defaults ); + + /* Apply filters to the arguments. */ + $attr = apply_filters( 'cleaner_caption_args', $attr ); + + /* Merge the defaults with user input. */ + $attr = shortcode_atts( $defaults, $attr ); + + /* If the width is less than 1 or there is no caption, return the content wrapped between the [caption] tags. */ + if ( 1 > $attr['width'] || empty( $attr['caption'] ) ) + return $content; + + /* Set up the attributes for the caption <div>. */ + $attributes = ( !empty( $attr['id'] ) ? ' id="' . esc_attr( $attr['id'] ) . '"' : '' ); + $attributes .= ' class="wp-caption ' . esc_attr( $attr['align'] ) . '"'; + $attributes .= ' style="width: ' . esc_attr( $attr['width'] ) . 'px"'; + + /* Open the caption <div>. */ + $output = '<div' . $attributes .'>'; + + /* Allow shortcodes for the content the caption was created for. */ + $output .= do_shortcode( $content ); + + /* Append the caption text. */ + $output .= '<p class="wp-caption-text">' . $attr['caption'] . '</p>'; + + /* Close the caption </div>. */ + $output .= '</div>'; + + /* Return the formatted, clean caption. */ + return apply_filters( 'cleaner_caption', $output ); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/cleaner-gallery.php b/wp-content/themes/hybrid/library/extensions/cleaner-gallery.php new file mode 100644 index 000000000..b99aef421 --- /dev/null +++ b/wp-content/themes/hybrid/library/extensions/cleaner-gallery.php @@ -0,0 +1,165 @@ +<?php +/** + * Cleaner Gallery - A valid image gallery script for WordPress. + * + * Cleaner Gallery was created to clean up the invalid HTML and remove the inline styles of the default + * implementation of the WordPress [gallery] shortcode. This has the obvious benefits of creating + * sites with clean, valid code. But, it also allows developers to more easily create custom styles for + * galleries within their themes. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * @package CleanerGallery + * @version 0.9.2 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2008 - 2011, Justin Tadlock + * @link http://justintadlock.com/archives/2008/04/13/cleaner-wordpress-gallery-plugin + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + */ + +/* Filter the post gallery shortcode output. */ +add_filter( 'post_gallery', 'cleaner_gallery', 10, 2 ); + +/** + * Overwrites the default WordPress [gallery] shortcode's output. This function removes the invalid + * HTML and inline styles. It adds the number of columns used as a class attribute, which allows + * developers to style the gallery more easily. + * + * @since 0.9.0 + * @param string $output + * @param array $attr + * @return string $output + */ +function cleaner_gallery( $output, $attr ) { + global $post; + + static $cleaner_gallery_instance = 0; + $cleaner_gallery_instance++; + + /* We're not worried abut galleries in feeds, so just return the output here. */ + if ( is_feed() ) + return $output; + + /* Orderby. */ + if ( isset( $attr['orderby'] ) ) { + $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] ); + if ( !$attr['orderby'] ) + unset( $attr['orderby'] ); + } + + /* Default gallery settings. */ + $defaults = array( + 'order' => 'ASC', + 'orderby' => 'menu_order ID', + 'id' => $post->ID, + 'link' => '', + 'itemtag' => 'dl', + 'icontag' => 'dt', + 'captiontag' => 'dd', + 'columns' => 3, + 'size' => 'thumbnail', + 'include' => '', + 'exclude' => '', + 'numberposts' => -1, + 'offset' => '' + ); + + /* Apply filters to the default arguments. */ + $defaults = apply_filters( 'cleaner_gallery_defaults', $defaults ); + + /* Apply filters to the arguments. */ + $attr = apply_filters( 'cleaner_gallery_args', $attr ); + + /* Merge the defaults with user input. */ + $attr = shortcode_atts( $defaults, $attr ); + extract( $attr ); + $id = intval( $id ); + + /* Arguments for get_children(). */ + $children = array( + 'post_parent' => $id, + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + 'order' => $order, + 'orderby' => $orderby, + 'exclude' => $exclude, + 'include' => $include, + 'numberposts' => $numberposts, + 'offset' => $offset, + ); + + /* Get image attachments. If none, return. */ + $attachments = get_children( $children ); + + if ( empty( $attachments ) ) + return ''; + + /* Properly escape the gallery tags. */ + $itemtag = tag_escape( $itemtag ); + $icontag = tag_escape( $icontag ); + $captiontag = tag_escape( $captiontag ); + $i = 0; + + /* Count the number of attachments returned. */ + $attachment_count = count( $attachments ); + + /* Allow developers to overwrite the number of columns. This can be useful for reducing columns with with fewer images than number of columns. */ + //$columns = ( ( $columns <= $attachment_count ) ? intval( $columns ) : intval( $attachment_count ) ); + $columns = apply_filters( 'cleaner_gallery_columns', intval( $columns ), $attachment_count, $attr ); + + /* Open the gallery <div>. */ + $output = "\n\t\t\t<div id='gallery-{$id}-{$cleaner_gallery_instance}' class='gallery gallery-{$id}'>"; + + /* Loop through each attachment. */ + foreach ( $attachments as $id => $attachment ) { + + /* Open each gallery row. */ + if ( $columns > 0 && $i % $columns == 0 ) + $output .= "\n\t\t\t\t<div class='gallery-row clear'>"; + + /* Open each gallery item. */ + $output .= "\n\t\t\t\t\t<{$itemtag} class='gallery-item col-{$columns}'>"; + + /* Open the element to wrap the image. */ + $output .= "\n\t\t\t\t\t\t<{$icontag} class='gallery-icon'>"; + + /* Add the image. */ + $image = ( ( isset( $attr['link'] ) && 'file' == $attr['link'] ) ? wp_get_attachment_link( $id, $size, false, false ) : wp_get_attachment_link( $id, $size, true, false ) ); + $output .= apply_filters( 'cleaner_gallery_image', $image, $id, $attr, $cleaner_gallery_instance ); + + /* Close the image wrapper. */ + $output .= "</{$icontag}>"; + + /* Get the caption. */ + $caption = apply_filters( 'cleaner_gallery_caption', wptexturize( esc_html( $attachment->post_excerpt ) ), $id, $attr, $cleaner_gallery_instance ); + + /* If image caption is set. */ + if ( !empty( $caption ) ) + $output .= "\n\t\t\t\t\t\t<{$captiontag} class='gallery-caption'>{$caption}</{$captiontag}>"; + + /* Close individual gallery item. */ + $output .= "\n\t\t\t\t\t</{$itemtag}>"; + + /* Close gallery row. */ + if ( $columns > 0 && ++$i % $columns == 0 ) + $output .= "\n\t\t\t\t</div>"; + } + + /* Close gallery row. */ + if ( $columns > 0 && $i % $columns !== 0 ) + $output .= "\n\t\t\t</div>"; + + /* Close the gallery <div>. */ + $output .= "\n\t\t\t</div><!-- .gallery -->\n"; + + /* Return out very nice, valid HTML gallery. */ + return $output; +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/custom-field-series.php b/wp-content/themes/hybrid/library/extensions/custom-field-series.php index 4ddc746fb..000be9b1f 100644 --- a/wp-content/themes/hybrid/library/extensions/custom-field-series.php +++ b/wp-content/themes/hybrid/library/extensions/custom-field-series.php @@ -1,41 +1,58 @@ <?php /** - * Functions for displaying a series of posts linked together - * by a custom field called 'Series'. Each post is listed that - * belong to the same series of posts. + * Custom Field Series - A script for creating a series of posts by custom field. * - * @copyright 2007 - 2010 - * @version 0.2.1 - * @author Justin Tadlock - * @link http://justintadlock.com/archives/2007/11/01/wordpress-custom-fields-listing-a-series-of-posts - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * Custom Field Series was created to allow users to add individual posts to a larger series of posts. It was + * created before WordPress made it easy for developers to create new taxonomies. Ideally, one would use a + * taxonomy to handle this functionality. However, this method is lighter, provides an extremely simple + * method for adding posts to a series, and offers backwards compatibility for people that have used this + * method before. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * @package CustomFieldSeries + * @version 0.3.0 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2007 - 2011, Justin Tadlock + * @link http://justintadlock.com/archives/2007/11/01/wordpress-custom-fields-listing-a-series-of-posts + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ +/* Create the meta box on the 'admin_menu' hook. */ +add_action( 'admin_menu', 'custom_field_series_create_meta_box' ); + /** - * Grabs series by custom field. Checks for other articles in the series. - * Series identified custom field key 'Series' and unique value. - * - * @todo Fix the multiple hyphens in the series class. - * @todo Allow filtering of title. + * Checks for a series of posts by the current post's metadata. The function grabs the meta value for the + * 'Series' meta key and checks if any posts have been given the same value. If posts are found with this + * meta key/value pair, the function adds them to an unordered list. * - * @since 0.1 + * @since 0.1.0 * @param array $args Array of arguments. */ function custom_field_series( $args = array() ) { global $post; - $textdomain = hybrid_get_textdomain(); + /* Set up a default textdomain. */ + $textdomain = apply_filters( 'custom_field_series_textdomain', 'custom-field-series' ); + + /* Set $series to an empty string. */ + $series = ''; - $series_meta = get_metadata( 'post', $post->ID, 'Series', true ); + /* Allow developers to overwrite the meta key used for the series name. */ + $meta_key = apply_filters( 'custom_field_series_meta_key', 'Series' ); - if ( $series_meta ) { + /* Get the series meta value for the post. */ + $meta_value = get_post_meta( $post->ID, $meta_key, true ); + /* If a meta value was found, create a list of posts in the series. */ + if ( !empty( $meta_value ) ) { + + /* Set up the default post query arguments. */ $defaults = array( 'order' => 'DESC', 'orderby' => 'ID', @@ -43,47 +60,126 @@ function custom_field_series( $args = array() ) { 'exclude' => '', 'post_type' => 'any', 'numberposts' => -1, - 'meta_key' => 'Series', - 'meta_value' => $series_meta, + 'meta_key' => $meta_key, + 'meta_value' => $meta_value, 'echo' => true ); + /* Allow developers to override the arguments used. */ $args = apply_filters( 'custom_field_series_args', $args ); - $args = wp_parse_args( $args, $defaults ); + /* Get all posts in the current series. */ $series_posts = get_posts( $args ); - if ( $series_posts ) { + /* If posts were found, display them. */ + if ( !empty( $series_posts ) ) { - $class = str_replace( array( '_', ' ', ' ' ) , '-', $series_meta ); - $class = preg_replace('/[^A-Za-z0-9-]/', '', $class ); - $class = strtolower( $class ); + /* Format the series class with the name of the series. */ + $class = sanitize_html_class( sanitize_title_with_dashes( $meta_value ) ); - $series = '<div class="series series-' . $class . '">'; - $series .= '<h4 class="series-title">' . __( 'Articles in this series', $textdomain) . '</h4>'; + /* Create the opening wrapper div, title, and list element. */ + $series = '<div class="series series-' . esc_attr( $class ) . '">'; + $series .= '<h4 class="series-title">' . apply_filters( 'custom_field_series_title', __( 'Articles in this series', $textdomain ) ) . '</h4>'; $series .= '<ul>'; + /* Loop through the posts. */ foreach ( $series_posts as $serial ) { + /* If the current post in the loop matches the post we're viewing, don't link to it. */ if ( $serial->ID == $post->ID ) $series .= '<li class="current-post">' . $serial->post_title . '</li>'; + /* Display a link to the post. */ else $series .= '<li><a href="' . get_permalink( $serial->ID ) . '" title="' . esc_attr( $serial->post_title ) . '">' . $serial->post_title . '</a></li>'; } + /* Close the unordered list and wrapper div. */ $series .= '</ul></div>'; } } + /* Allow developers to overwrite the HTML of the series. */ $series = apply_filters( 'custom_field_series', $series ); - if ( $args['echo'] && $series ) + /* If $echo is set to true, display the series. */ + if ( !empty( $args['echo'] ) ) echo $series; - elseif ( $series ) + /* If $echo is not set to true, return the series. */ + else return $series; } +/** + * Creates the meta box on the post editing screen for the 'post' post type. + * + * @since 0.3.0 + */ +function custom_field_series_create_meta_box() { + + /* Set up a default textdomain. */ + $textdomain = apply_filters( 'custom_field_series_textdomain', 'custom-field-series' ); + + add_meta_box( 'custom-field-series', __( 'Series', $textdomain ), 'custom_field_series_meta_box', 'post', 'side', 'default' ); + + /* Saves the post meta box data. */ + add_action( 'save_post', 'custom_field_series_meta_box_save', 10, 2 ); +} + +/** + * Displays the input field with the meta box. + * + * @since 0.3.0 + */ +function custom_field_series_meta_box( $object, $box ) { ?> + + <p> + <input type="hidden" name="custom_field_series_meta_box_nonce" value="<?php echo wp_create_nonce( basename( __FILE__ ) ); ?>" /> + <input type="text" name="custom-field-series" id="custom-field-series" value="<?php echo esc_attr( get_post_meta( $object->ID, apply_filters( 'custom_field_series_meta_key', 'Series' ), true ) ); ?>" size="30" tabindex="30" style="width: 99%;" /> + </p> +<?php +} + +/** + * Saves the single value for the 'Series' meta key, which was set using the custom field series meta box. + * + * @since 0.3.0 + */ +function custom_field_series_meta_box_save( $post_id, $post ) { + + /* Verify the nonce before proceeding. */ + if ( !isset( $_POST['custom_field_series_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['custom_field_series_meta_box_nonce'], basename( __FILE__ ) ) ) + return $post_id; + + /* Get the post type object. */ + $post_type = get_post_type_object( $post->post_type ); + + /* Check if the current user has permission to edit the post. */ + if ( !current_user_can( $post_type->cap->edit_post, $post_id ) ) + return $post_id; + + /* Get the posted series title and strip all tags from it. */ + $new_meta_value = ( isset( $_POST['custom-field-series'] ) ? strip_tags( $_POST['custom-field-series'] ) : '' ); + + /* Get the meta key. */ + $meta_key = apply_filters( 'custom_field_series_meta_key', 'Series' ); + + /* Get the meta value of the custom field key. */ + $meta_value = get_post_meta( $post_id, $meta_key, true ); + + /* If a new meta value was added and there was no previous value, add it. */ + if ( $new_meta_value && '' == $meta_value ) + add_post_meta( $post_id, $meta_key, $new_meta_value, true ); + + /* If the new meta value does not match the old value, update it. */ + elseif ( $new_meta_value && $new_meta_value != $meta_value ) + update_post_meta( $post_id, $meta_key, $new_meta_value ); + + /* If there is no new meta value but an old value exists, delete it. */ + elseif ( '' == $new_meta_value && $meta_value ) + delete_post_meta( $post_id, $meta_key, $meta_value ); +} + ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/entry-views.php b/wp-content/themes/hybrid/library/extensions/entry-views.php new file mode 100644 index 000000000..544576e52 --- /dev/null +++ b/wp-content/themes/hybrid/library/extensions/entry-views.php @@ -0,0 +1,181 @@ +<?php +/** + * Entry Views - A WordPress script for counting post views. + * + * Entry views is a script for calculating the number of views a post gets. It is meant to be basic and + * not a full-featured solution. The idea is to allow theme/plugin authors to quickly load this file and + * build functions on top of it to suit their project needs. This is an AJAX-based solution, so only visitors + * to your site with JavaScript enabled in their browser will update the view count. It is possible to do this + * without AJAX but not recommend (see notes below). + * + * By default, no post types are supported. You have to register support for 'entry-views' for the post types + * you wish to use this extension with. + * + * Not using AJAX: You can call up entry_views_update() at any time and pass it a post ID to update the + * count, but this has problems. Any links with rel="next" or rel="prefetch" will cause some browsers to prefetch + * the data for that particular page. This can cause the view count to be skewed. To try and avoid this + * issue, you need to disable/remove adjacent_posts_rel_link_wp_head(). However, this is not bullet-proof + * as it cannot control links it doesn't know about. + * @link http://core.trac.wordpress.org/ticket/14568 + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * @package EntryViews + * @version 0.2.0 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2010 - 2011, Justin Tadlock + * @link http://justintadlock.com + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + */ + +/* Add post type support for 'entry-views'. */ +add_action( 'init', 'entry_views_post_type_support' ); + +/* Add the [entry-views] shortcode. */ +add_shortcode( 'entry-views', 'entry_views_get' ); + +/* Registers the entry views extension scripts if we're on the correct page. */ +add_action( 'template_redirect', 'entry_views_load' ); + +/* Add the entry views AJAX actions to the appropriate hooks. */ +add_action( 'wp_ajax_entry_views', 'entry_views_update_ajax' ); +add_action( 'wp_ajax_nopriv_entry_views', 'entry_views_update_ajax' ); + +/** + * Adds support for 'entry-views' to the 'post', 'page', and 'attachment' post types (default WordPress + * post types). For all other post types, the theme should explicitly register support for this feature. + * + * @since 0.2.0 + */ +function entry_views_post_type_support() { + + /* Add support for entry-views to the 'post' post type. */ + add_post_type_support( 'post', array( 'entry-views' ) ); + + /* Add support for entry-views to the 'page' post type. */ + add_post_type_support( 'page', array( 'entry-views' ) ); + + /* Add support for entry-views to the 'attachment' post type. */ + add_post_type_support( 'attachment', array( 'entry-views' ) ); +} + +/** + * Checks if we're on a singular post view and if the current post type supports the 'entry-views' + * extension. If so, set the $post_id variable and load the needed JavaScript. + * + * @since 0.1.0 + */ +function entry_views_load() { + global $entry_views; + + /* Check if we're on a singular post view. */ + if ( is_singular() ) { + + /* Get the post object. */ + $post = get_queried_object(); + + /* Check if the post type supports the 'entry-views' feature. */ + if ( post_type_supports( $post->post_type, 'entry-views' ) ) { + + /* Set the post ID for later use because we wouldn't want a custom query to change this. */ + $entry_views->post_id = get_queried_object_id(); + + /* Enqueue the jQuery library. */ + wp_enqueue_script( 'jquery' ); + + /* Load the entry views JavaScript in the footer. */ + add_action( 'wp_footer', 'entry_views_load_scripts' ); + } + } +} + +/** + * Updates the number of views when on a singular view of a post. This function uses post meta to store + * the number of views per post. By default, the meta key is 'Views', but you can filter this with the + * 'entry_views_meta_key' hook. + * + * @since 0.1.0 + */ +function entry_views_update( $post_id = '' ) { + + /* If we're on a singular view of a post, calculate the number of views. */ + if ( !empty( $post_id ) ) { + + /* Allow devs to override the meta key used. By default, this is 'Views'. */ + $meta_key = apply_filters( 'entry_views_meta_key', 'Views' ); + + /* Get the number of views the post currently has. */ + $old_views = get_post_meta( $post_id, $meta_key, true ); + + /* Add +1 to the number of current views. */ + $new_views = absint( $old_views ) + 1; + + /* Update the view count with the new view count. */ + update_post_meta( $post_id, $meta_key, $new_views, $old_views ); + } +} + +/** + * Gets the number of views a specific post has. It also doubles as a shortcode, which is called with the + * [entry-views] format. + * + * @since 0.1.0 + * @param array $attr Attributes for use in the shortcode. + */ +function entry_views_get( $attr = '' ) { + + /* Merge the defaults and the given attributes. */ + $attr = shortcode_atts( array( 'before' => '', 'after' => '', 'post_id' => get_the_ID() ), $attr ); + + /* Allow devs to override the meta key used. */ + $meta_key = apply_filters( 'entry_views_meta_key', 'Views' ); + + /* Get the number of views the post has. */ + $views = intval( get_post_meta( $attr['post_id'], $meta_key, true ) ); + + /* Returns the formatted number of views. */ + return $attr['before'] . number_format_i18n( $views ) . $attr['after']; +} + +/** + * Callback function hooked to 'wp_ajax_entry_views' and 'wp_ajax_nopriv_entry_views'. It checks the + * AJAX nonce and passes the given $post_id to the entry views update function. + * + * @since 0.1.0 + */ +function entry_views_update_ajax() { + + /* Check the AJAX nonce to make sure this is a valid request. */ + check_ajax_referer( 'entry_views_ajax' ); + + /* If the post ID is set, set it to the $post_id variable and make sure it's an integer. */ + if ( isset( $_POST['post_id'] ) ) + $post_id = absint( $_POST['post_id'] ); + + /* If $post_id isn't empty, pass it to the entry_views_update() function to update the view count. */ + if ( !empty( $post_id ) ) + entry_views_update( $post_id ); +} + +/** + * Displays a small script that sends an AJAX request for the page. It passes the $post_id to the AJAX + * callback function for updating the meta. + * + * @since 0.1.0 + */ +function entry_views_load_scripts() { + global $entry_views; + + /* Create a nonce for the AJAX request. */ + $nonce = wp_create_nonce( 'entry_views_ajax' ); + + /* Display the JavaScript needed. */ + echo '<script type="text/javascript">/* <![CDATA[ */ jQuery(document).ready( function() { jQuery.post( "' . admin_url( 'admin-ajax.php' ) . '", { action : "entry_views", _ajax_nonce : "' . $nonce . '", post_id : ' . $entry_views->post_id . ' } ); } ); /* ]]> */</script>' . "\n"; +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/get-the-image.php b/wp-content/themes/hybrid/library/extensions/get-the-image.php index d5568cbc6..261f45945 100644 --- a/wp-content/themes/hybrid/library/extensions/get-the-image.php +++ b/wp-content/themes/hybrid/library/extensions/get-the-image.php @@ -1,42 +1,48 @@ <?php /** - * Get the Image was created to solve a problem in the WordPress community about how to handle - * post-specific images. It was created to be a highly-intuitive image script that loads images that are - * related to specific posts in some way. It creates an image-based representation of a WordPress - * post (or any post type). + * Get the Image - An advanced post image script for WordPress. * - * @copyright 2008 - 2010 - * @version 0.5 - * @author Justin Tadlock - * @link http://justintadlock.com/archives/2008/05/27/get-the-image-wordpress-plugin - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * Get the Image was created to be a highly-intuitive image script that displays post-specific images (an + * image-based representation of a post). The script handles old-style post images via custom fields for + * backwards compatibility. It also supports WordPress' built-in featured image functionality. On top of + * those things, it can automatically set attachment images as the post image or scan the post content for + * the first image element used. It can also fall back to a given default image. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * @package GetTheImage + * @version 0.7.0 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2008 - 2011, Justin Tadlock + * @link http://justintadlock.com/archives/2008/05/27/get-the-image-wordpress-plugin + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ -/* Adds theme support for post images. */ +/* Adds theme support for WordPress 'featured images'. */ add_theme_support( 'post-thumbnails' ); /* Delete the cache when a post or post metadata is updated. */ -add_action( 'save_post', 'get_the_image_delete_cache' ); -add_action( 'deleted_post_meta', 'get_the_image_delete_cache' ); -add_action( 'updated_post_meta', 'get_the_image_delete_cache' ); -add_action( 'added_post_meta', 'get_the_image_delete_cache' ); +add_action( 'save_post', 'get_the_image_delete_cache_by_post' ); +add_action( 'deleted_post_meta', 'get_the_image_delete_cache_by_meta', 10, 2 ); +add_action( 'updated_post_meta', 'get_the_image_delete_cache_by_meta', 10, 2 ); +add_action( 'added_post_meta', 'get_the_image_delete_cache_by_meta', 10, 2 ); /** - * This is a highly intuitive function that gets images. It first calls for custom field keys. If no - * custom field key is set, check for the_post_thumbnail(). If no post image, check for images - * attached to post. Check for image order if looking for attached images. Scan the post for - * images if $image_scan = true. Check for default image if $default_image = true. If an image - * is found, call display_the_image() to format it. + * The main image function for displaying an image. It supports several arguments that allow developers to + * customize how the script outputs the image. * - * @since 0.1 - * @global $post The current post's DB object. - * @param array $args Parameters for what image to get. + * The image check order is important to note here. If an image is found by any specific check, the script + * will no longer look for images. The check order is 'meta_key', 'the_post_thumbnail', 'attachment', + * 'image_scan', 'callback', and 'default_image'. + * + * @since 0.1.0 + * @global $post The current post's database object. + * @param array $args Arguments for how to load and display the image. * @return string|array The HTML for the image. | Image attributes in an array. */ function get_the_image( $args = array() ) { @@ -44,11 +50,10 @@ function get_the_image( $args = array() ) { /* Set the default arguments. */ $defaults = array( - 'custom_key' => array( 'Thumbnail', 'thumbnail' ), + 'meta_key' => array( 'Thumbnail', 'thumbnail' ), 'post_id' => $post->ID, 'attachment' => true, 'the_post_thumbnail' => true, // WP 2.9+ image function - 'default_size' => false, // Deprecated 0.5 in favor of $size 'size' => 'thumbnail', 'default_image' => false, 'order_of_image' => 1, @@ -58,7 +63,12 @@ function get_the_image( $args = array() ) { 'width' => false, 'height' => false, 'format' => 'img', - 'echo' => true + 'meta_key_save' => false, + 'callback' => null, + 'cache' => true, + 'echo' => true, + 'custom_key' => null, // @deprecated 0.6. Use 'meta_key'. + 'default_size' => null, // @deprecated 0.5. Use 'size'. ); /* Allow plugins/themes to filter the arguments. */ @@ -68,8 +78,12 @@ function get_the_image( $args = array() ) { $args = wp_parse_args( $args, $defaults ); /* If $default_size is given, overwrite $size. */ - if ( !empty( $args['default_size'] ) ) - $args['size'] = $args['default_size']; + if ( !is_null( $args['default_size'] ) ) + $args['size'] = $args['default_size']; // Deprecated 0.5 in favor of $size + + /* If $custom_key is set, overwrite $meta_key. */ + if ( !is_null( $args['custom_key'] ) ) + $args['meta_key'] = $args['custom_key']; // Deprecated 0.6 in favor of $meta_key /* If $format is set to 'array', don't link to the post. */ if ( 'array' == $args['format'] ) @@ -78,108 +92,145 @@ function get_the_image( $args = array() ) { /* Extract the array to allow easy use of variables. */ extract( $args ); + /* Get cache key based on $args. */ + $key = md5( serialize( compact( array_keys( $args ) ) ) ); + /* Check for a cached image. */ - $cache = wp_cache_get( 'get_the_image' ); + $image_cache = wp_cache_get( $post_id, 'get_the_image' ); - if ( !is_array( $cache ) ) - $cache = array(); + if ( !is_array( $image_cache ) ) + $image_cache = array(); /* If there is no cached image, let's see if one exists. */ - if ( !isset( $cache[$post_id][$size] ) ) { + if ( !isset( $image_cache[$key] ) || empty( $cache ) ) { /* If a custom field key (array) is defined, check for images by custom field. */ - if ( $custom_key ) - $image = image_by_custom_field( $args ); + if ( !empty( $meta_key ) ) + $image = get_the_image_by_meta_key( $args ); /* If no image found and $the_post_thumbnail is set to true, check for a post image (WP feature). */ - if ( !$image && $the_post_thumbnail ) - $image = image_by_the_post_thumbnail( $args ); + if ( empty( $image ) && !empty( $the_post_thumbnail ) ) + $image = get_the_image_by_post_thumbnail( $args ); /* If no image found and $attachment is set to true, check for an image by attachment. */ - if ( !$image && $attachment ) - $image = image_by_attachment( $args ); + if ( empty( $image ) && !empty( $attachment ) ) + $image = get_the_image_by_attachment( $args ); /* If no image found and $image_scan is set to true, scan the post for images. */ - if ( !$image && $image_scan ) - $image = image_by_scan( $args ); + if ( empty( $image ) && !empty( $image_scan ) ) + $image = get_the_image_by_scan( $args ); + + /* If no image found and a callback function was given. Callback function must pass back array of <img> attributes. */ + if ( empty( $image ) && !is_null( $callback ) && function_exists( $callback ) ) + $image = call_user_func( $callback, $args ); /* If no image found and a $default_image is set, get the default image. */ - if ( !$image && $default_image ) - $image = image_by_default( $args ); + if ( empty( $image ) && !empty( $default_image ) ) + $image = get_the_image_by_default( $args ); + + /* If an image was found. */ + if ( !empty( $image ) ) { - /* If an image is returned, run it through the display function. */ - if ( $image ) - $image = display_the_image( $args, $image ); + /* If $meta_key_save was set, save the image to a custom field. */ + if ( !empty( $meta_key_save ) ) + get_the_image_meta_key_save( $args, $image['src'] ); - $cache[$post_id][$size] = $image; - wp_cache_set( 'get_the_image', $cache ); + /* Format the image HTML. */ + $image = get_the_image_format( $args, $image ); + + /* Set the image cache for the specific post. */ + $image_cache[$key] = $image; + wp_cache_set( $post_id, $image_cache, 'get_the_image' ); + } } + + /* If an image was already cached for the post and arguments, use it. */ else { - $image = $cache[$post_id][$size]; + $image = $image_cache[$key]; } /* Allow plugins/theme to override the final output. */ $image = apply_filters( 'get_the_image', $image ); - /* Display the image if $echo is set to true and the $format isn't an array. Else, return the image. */ + /* If $format is set to 'array', return an array of image attributes. */ if ( 'array' == $format ) { + + /* Set up a default empty array. */ + $out = array(); + + /* Get the image attributes. */ $atts = wp_kses_hair( $image, array( 'http' ) ); + /* Loop through the image attributes and add them in key/value pairs for the return array. */ foreach ( $atts as $att ) $out[$att['name']] = $att['value']; $out['url'] = $out['src']; // @deprecated 0.5 Use 'src' instead of 'url'. + + /* Return the array of attributes. */ return $out; } - elseif ( $echo ) - echo $image; - else + + /* Or, if $echo is set to false, return the formatted image. */ + elseif ( false === $echo ) { return $image; + } + + /* Display the image if we get to this point. */ + echo $image; } /* Internal Functions */ /** - * Calls images by custom field key. Script loops through multiple custom field keys. - * If that particular key is found, $image is set and the loop breaks. If an image is - * found, it is returned. + * Calls images by custom field key. Script loops through multiple custom field keys. If that particular key + * is found, $image is set and the loop breaks. If an image is found, it is returned. * - * @since 0.3 - * @param array $args - * @return array|bool + * @since 0.7.0 + * @param array $args Arguments for how to load and display the image. + * @return array|bool Array of image attributes. | False if no image is found. */ -function image_by_custom_field( $args = array() ) { +function get_the_image_by_meta_key( $args = array() ) { - /* If $custom_key is a string, we want to split it by spaces into an array. */ - if ( !is_array( $args['custom_key'] ) ) - $args['custom_key'] = preg_split( '#\s+#', $args['custom_key'] ); + /* If $meta_key is not an array. */ + if ( !is_array( $args['meta_key'] ) ) { - /* If $custom_key is set, loop through each custom field key, searching for values. */ - if ( isset( $args['custom_key'] ) ) { - foreach ( $args['custom_key'] as $custom ) { - $image = get_metadata( 'post', $args['post_id'], $custom, true ); - if ( $image ) + /* Get the image URL by the single meta key. */ + $image = get_post_meta( $args['post_id'], $args['meta_key'], true ); + } + + /* If $meta_key is an array. */ + elseif ( is_array( $args['meta_key'] ) ) { + + /* Loop through each of the given meta keys. */ + foreach ( $args['meta_key'] as $meta_key ) { + + /* Get the image URL by the current meta key in the loop. */ + $image = get_post_meta( $args['post_id'], $meta_key, true ); + + /* If an image was found, break out of the loop. */ + if ( !empty( $image ) ) break; } } /* If a custom key value has been given for one of the keys, return the image URL. */ - if ( $image ) - return array( 'url' => $image ); + if ( !empty( $image ) ) + return array( 'src' => $image ); return false; } /** - * Checks for images using a custom version of the WordPress 2.9+ get_the_post_thumbnail() - * function. If an image is found, return it and the $post_thumbnail_id. The WordPress function's - * other filters are later added in the display_the_image() function. + * Checks for images using a custom version of the WordPress 2.9+ get_the_post_thumbnail() function. + * If an image is found, return it and the $post_thumbnail_id. The WordPress function's other filters are + * later added in the display_the_image() function. * - * @since 0.4 - * @param array $args - * @return array|bool + * @since 0.7.0 + * @param array $args Arguments for how to load and display the image. + * @return array|bool Array of image attributes. | False if no image is found. */ -function image_by_the_post_thumbnail( $args = array() ) { +function get_the_image_by_post_thumbnail( $args = array() ) { /* Check for a post image ID (set by WP as a custom field). */ $post_thumbnail_id = get_post_thumbnail_id( $args['post_id'] ); @@ -198,19 +249,18 @@ function image_by_the_post_thumbnail( $args = array() ) { $alt = trim( strip_tags( get_post_field( 'post_excerpt', $post_thumbnail_id ) ) ); /* Return both the image URL and the post thumbnail ID. */ - return array( 'url' => $image[0], 'post_thumbnail_id' => $post_thumbnail_id, 'alt' => $alt ); + return array( 'src' => $image[0], 'post_thumbnail_id' => $post_thumbnail_id, 'alt' => $alt ); } /** - * Check for attachment images. Uses get_children() to check if the post has images - * attached. If image attachments are found, loop through each. The loop only breaks - * once $order_of_image is reached. + * Check for attachment images. Uses get_children() to check if the post has images attached. If image + * attachments are found, loop through each. The loop only breaks once $order_of_image is reached. * - * @since 0.3 - * @param array $args - * @return array|bool + * @since 0.7.0 + * @param array $args Arguments for how to load and display the image. + * @return array|bool Array of image attributes. | False if no image is found. */ -function image_by_attachment( $args = array() ) { +function get_the_image_by_attachment( $args = array() ) { /* Get attachments for the inputted $post_id. */ $attachments = get_children( array( 'post_parent' => $args['post_id'], 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID' ) ); @@ -227,6 +277,9 @@ function image_by_attachment( $args = array() ) { if ( empty( $attachments ) && empty( $image ) ) return false; + /* Set the default iterator to 0. */ + $i = 0; + /* Loop through each attachment. Once the $order_of_image (default is '1') is reached, break the loop. */ foreach ( $attachments as $id => $attachment ) { if ( ++$i == $args['order_of_image'] ) { @@ -237,70 +290,69 @@ function image_by_attachment( $args = array() ) { } /* Return the image URL. */ - return array( 'url' => $image[0], 'alt' => $alt ); + return array( 'src' => $image[0], 'alt' => $alt ); } /** - * Scans the post for images within the content. Not called by default with get_the_image(). - * Shouldn't use if using large images within posts, better to use the other options. + * Scans the post for images within the content. Not called by default with get_the_image(). Shouldn't use + * if using large images within posts, better to use the other options. * - * @since 0.3 - * @global $post The current post's DB object. - * @param array $args - * @return array|bool + * @since 0.7.0 + * @param array $args Arguments for how to load and display the image. + * @return array|bool Array of image attributes. | False if no image is found. */ -function image_by_scan( $args = array() ) { +function get_the_image_by_scan( $args = array() ) { /* Search the post's content for the <img /> tag and get its URL. */ preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i', get_post_field( 'post_content', $args['post_id'] ), $matches ); /* If there is a match for the image, return its URL. */ - if ( isset( $matches ) && $matches[1][0] ) - return array( 'url' => $matches[1][0] ); + if ( isset( $matches ) && !empty( $matches[1][0] ) ) + return array( 'src' => $matches[1][0] ); return false; } /** - * Used for setting a default image. The function simply returns the image URL it was - * given in an array. Not used with get_the_image() by default. + * Used for setting a default image. The function simply returns the image URL it was given in an array. + * Not used with get_the_image() by default. * - * @since 0.3 - * @param array $args - * @return array + * @since 0.7.0 + * @param array $args Arguments for how to load and display the image. + * @return array|bool Array of image attributes. | False if no image is found. */ -function image_by_default( $args = array() ) { - return array( 'url' => $args['default_image'] ); +function get_the_image_by_default( $args = array() ) { + return array( 'src' => $args['default_image'] ); } /** - * Formats an image with appropriate alt text and class. Adds a link to the post if argument - * is set. Should only be called if there is an image to display, but will handle it if not. + * Formats an image with appropriate alt text and class. Adds a link to the post if argument is set. Should + * only be called if there is an image to display, but will handle it if not. * - * @since 0.1 - * @param array $args - * @param array $image Array of image info ($image, $classes, $alt, $caption). + * @since 0.7.0 + * @param array $args Arguments for how to load and display the image. + * @param array $image Array of image attributes ($image, $classes, $alt, $caption). * @return string $image Formatted image (w/link to post if the option is set). */ -function display_the_image( $args = array(), $image = false ) { +function get_the_image_format( $args = array(), $image = false ) { /* If there is no image URL, return false. */ - if ( empty( $image['url'] ) ) + if ( empty( $image['src'] ) ) return false; /* Extract the arguments for easy-to-use variables. */ extract( $args ); /* If there is alt text, set it. Otherwise, default to the post title. */ - $image_alt = ( ( $image['alt'] ) ? $image['alt'] : apply_filters( 'the_title', get_post_field( 'post_title', $post_id ) ) ); + $image_alt = ( ( !empty( $image['alt'] ) ) ? $image['alt'] : apply_filters( 'the_title', get_post_field( 'post_title', $post_id ) ) ); /* If there is a width or height, set them as HMTL-ready attributes. */ $width = ( ( $width ) ? ' width="' . esc_attr( $width ) . '"' : '' ); $height = ( ( $height ) ? ' height="' . esc_attr( $height ) . '"' : '' ); /* Loop through the custom field keys and add them as classes. */ - if ( is_array( $custom_key ) ) { - foreach ( $custom_key as $key ) + if ( is_array( $meta_key ) ) { + foreach ( $meta_key as $key ) $classes[] = str_replace( ' ', '-', strtolower( $key ) ); } @@ -312,44 +364,135 @@ function display_the_image( $args = array(), $image = false ) { $class = join( ' ', array_unique( $classes ) ); /* If there is a $post_thumbnail_id, apply the WP filters normally associated with get_the_post_thumbnail(). */ - if ( $image['post_thumbnail_id'] ) + if ( !empty( $image['post_thumbnail_id'] ) ) do_action( 'begin_fetch_post_thumbnail_html', $post_id, $image['post_thumbnail_id'], $size ); /* Add the image attributes to the <img /> element. */ - $html = '<img src="' . $image['url'] . '" alt="' . esc_attr( strip_tags( $image_alt ) ) . '" class="' . esc_attr( $class ) . '"' . $width . $height . ' />'; + $html = '<img src="' . $image['src'] . '" alt="' . esc_attr( strip_tags( $image_alt ) ) . '" class="' . esc_attr( $class ) . '"' . $width . $height . ' />'; /* If $link_to_post is set to true, link the image to its post. */ if ( $link_to_post ) $html = '<a href="' . get_permalink( $post_id ) . '" title="' . esc_attr( apply_filters( 'the_title', get_post_field( 'post_title', $post_id ) ) ) . '">' . $html . '</a>'; /* If there is a $post_thumbnail_id, apply the WP filters normally associated with get_the_post_thumbnail(). */ - if ( $image['post_thumbnail_id'] ) + if ( !empty( $image['post_thumbnail_id'] ) ) do_action( 'end_fetch_post_thumbnail_html', $post_id, $image['post_thumbnail_id'], $size ); /* If there is a $post_thumbnail_id, apply the WP filters normally associated with get_the_post_thumbnail(). */ - if ( $image['post_thumbnail_id'] ) + if ( !empty( $image['post_thumbnail_id'] ) ) $html = apply_filters( 'post_thumbnail_html', $html, $post_id, $image['post_thumbnail_id'], $size, '' ); return $html; } /** - * Deletes the image cache for users that are using a persistent-caching plugin. + * Saves the image URL as the value of the meta key provided. This allows users to set a custom meta key + * for their image. By doing this, users can trim off database queries when grabbing attachments or get rid + * of expensive scans of the content when using the image scan feature. * - * @since 0.5 + * @since 0.6.0 + * @param array $args Arguments for how to load and display the image. + * @param array $image Array of image attributes ($image, $classes, $alt, $caption). */ -function get_the_image_delete_cache() { - wp_cache_delete( 'get_the_image' ); +function get_the_image_meta_key_save( $args = array(), $image = array() ) { + + /* If the $meta_key_save argument is empty or there is no image $url given, return. */ + if ( empty( $args['meta_key_save'] ) || empty( $image['src'] ) ) + return; + + /* Get the current value of the meta key. */ + $meta = get_post_meta( $args['post_id'], $args['meta_key_save'], true ); + + /* If there is no value for the meta key, set a new value with the image $url. */ + if ( empty( $meta ) ) + add_post_meta( $args['post_id'], $args['meta_key_save'], $image['src'] ); + + /* If the current value doesn't match the image $url, update it. */ + elseif ( $meta !== $image['src'] ) + update_post_meta( $args['post_id'], $args['meta_key_save'], $image['src'], $meta ); +} + +/** + * Deletes the image cache for the specific post when the 'save_post' hook is fired. + * + * @since 0.7.0 + */ +function get_the_image_delete_cache_by_post( $post_id ) { + wp_cache_delete( $post_id, 'get_the_image' ); } /** - * Get the image with a link to the post. Use get_the_image() instead. + * Deletes the image cache for a specific post when the 'added_post_meta', 'deleted_post_meta', + * or 'updated_post_meta' hooks are called. * - * @since 0.1 - * @deprecated 0.3 + * @since 0.7.0 + */ +function get_the_image_delete_cache_by_meta( $meta_id, $post_id ) { + wp_cache_delete( $post_id, 'get_the_image' ); +} + +/** + * @since 0.1.0 + * @deprecated 0.3.0 */ function get_the_image_link( $deprecated = '', $deprecated_2 = '', $deprecated_3 = '' ) { get_the_image(); } +/** + * @since 0.3.0 + * @deprecated 0.7.0 + */ +function image_by_custom_field( $args = array() ) { + return get_the_image_by_meta_key( $args ); +} + +/** + * @since 0.4.0 + * @deprecated 0.7.0 + */ +function image_by_the_post_thumbnail( $args = array() ) { + return get_the_image_by_post_thumbnail( $args ); +} + +/** + * @since 0.3.0 + * @deprecated 0.7.0 + */ +function image_by_attachment( $args = array() ) { + return get_the_image_by_attachment( $args ); +} + +/** + * @since 0.3.0 + * @deprecated 0.7.0 + */ +function image_by_scan( $args = array() ) { + return get_the_image_by_scan( $args ); +} + +/** + * @since 0.3.0 + * @deprecated 0.7.0 + */ +function image_by_default( $args = array() ) { + return get_the_image_by_default( $args ); +} + +/** + * @since 0.1.0 + * @deprecated 0.7.0 + */ +function display_the_image( $args = array(), $image = false ) { + return get_the_image_format( $args, $image ); +} + +/** + * @since 0.5.0 + * @deprecated 0.7.0 Replaced by cache delete functions specifically for the post ID. + */ +function get_the_image_delete_cache() { + return; +} + ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/loop-pagination.php b/wp-content/themes/hybrid/library/extensions/loop-pagination.php new file mode 100644 index 000000000..6909d00ba --- /dev/null +++ b/wp-content/themes/hybrid/library/extensions/loop-pagination.php @@ -0,0 +1,104 @@ +<?php +/** + * Loop Pagination - A WordPress script for creating paginated links on archive-type pages. + * + * The Loop Pagination script was designed to give theme authors a quick way to paginate archive-type + * (archive, search, and blog) pages without having to worry about which of the many plugins a user might + * possibly be using. Instead, they can simply build pagination right into their themes. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * @package LoopPagination + * @version 0.1.3 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2010 - 2011, Justin Tadlock + * @link http://devpress.com/blog/loop-pagination-for-theme-developers + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + */ + +/** + * Loop pagination function for paginating loops with multiple posts. This should be used on archive, blog, and + * search pages. It is not for singular views. + * + * @since 0.1.0 + * @uses paginate_links() Creates a string of paginated links based on the arguments given. + * @param array $args Arguments to customize how the page links are output. + */ +function loop_pagination( $args = array() ) { + global $wp_rewrite, $wp_query, $post; + + /* If there's not more than one page, return nothing. */ + if ( 1 >= $wp_query->max_num_pages ) + return; + + /* Get the current page. */ + $current = ( get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1 ); + + /* Get the max number of pages. */ + $max_num_pages = intval( $wp_query->max_num_pages ); + + /* Set up some default arguments for the paginate_links() function. */ + $defaults = array( + 'base' => add_query_arg( 'paged', '%#%' ), + 'format' => '', + 'total' => $max_num_pages, + 'current' => $current, + 'prev_next' => true, + //'prev_text' => __( '« Previous' ), // This is the WordPress default. + //'next_text' => __( 'Next »' ), // This is the WordPress default. + 'show_all' => false, + 'end_size' => 1, + 'mid_size' => 1, + 'add_fragment' => '', + 'type' => 'plain', + 'before' => '<div class="pagination loop-pagination">', // Begin loop_pagination() arguments. + 'after' => '</div>', + 'echo' => true, + ); + + /* Add the $base argument to the array if the user is using permalinks. */ + if( $wp_rewrite->using_permalinks() ) + $defaults['base'] = user_trailingslashit( trailingslashit( get_pagenum_link() ) . 'page/%#%' ); + + /* If we're on a search results page, we need to change this up a bit. */ + if ( is_search() ) { + $search_permastruct = $wp_rewrite->get_search_permastruct(); + if ( !empty( $search_permastruct ) ) + $defaults['base'] = user_trailingslashit( trailingslashit( get_search_link() ) . 'page/%#%' ); + } + + /* Allow developers to overwrite the arguments with a filter. */ + $args = apply_filters( 'loop_pagination_args', $args ); + + /* Merge the arguments input with the defaults. */ + $args = wp_parse_args( $args, $defaults ); + + /* Don't allow the user to set this to an array. */ + if ( 'array' == $args['type'] ) + $args['type'] = 'plain'; + + /* Get the paginated links. */ + $page_links = paginate_links( $args ); + + /* Remove 'page/1' from the entire output since it's not needed. */ + $page_links = str_replace( array( '&paged=1\'', '/page/1\'', '/page/1/\'' ), '\'', $page_links ); + + /* Wrap the paginated links with the $before and $after elements. */ + $page_links = $args['before'] . $page_links . $args['after']; + + /* Allow devs to completely overwrite the output. */ + $page_links = apply_filters( 'loop_pagination', $page_links ); + + /* Return the paginated links for use in themes. */ + if ( $args['echo'] ) + echo $page_links; + else + return $page_liks; +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/post-stylesheets.php b/wp-content/themes/hybrid/library/extensions/post-stylesheets.php new file mode 100644 index 000000000..8bfe27e58 --- /dev/null +++ b/wp-content/themes/hybrid/library/extensions/post-stylesheets.php @@ -0,0 +1,164 @@ +<?php +/** + * Post Stylesheets - A WordPress script for post-specific stylesheets. + * + * Post Stylesheets allows users and developers to add unique, per-post stylesheets. This script was + * created so that custom stylesheet files could be dropped into a theme's '/css' folder and loaded for + * individual posts using the 'Stylesheet' post meta key and the stylesheet name as the post meta value. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * @package PostStylesheets + * @version 0.2.0 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2010 - 2011, Justin Tadlock + * @link http://justintadlock.com + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + */ + +/* Filters stylesheet_uri with a function for adding a new style. */ +add_filter( 'stylesheet_uri', 'post_stylesheets_stylesheet_uri', 10, 2 ); + +/* Create the post stylesheets meta box on the 'admin_menu' hook. */ +add_action( 'admin_menu', 'post_stylesheets_create_meta_box' ); + +/** + * Checks if a post (or any post type) has the given meta key of 'Stylesheet' when on the singular view of + * the post on the front of the site. If found, the function checks within the '/css' folder of the stylesheet + * directory (child theme) and the template directory (parent theme). If the file exists, it is used rather + * than the typical style.css file. + * + * @since 0.1.0 + */ +function post_stylesheets_stylesheet_uri( $stylesheet_uri, $stylesheet_dir_uri ) { + + /* Check if viewing a singular post. */ + if ( is_singular() ) { + + /* Check if the user has set a value for the post stylesheet. */ + $stylesheet = get_post_stylesheet( get_queried_object_id() ); + + /* If a meta value was given and the file exists, set $stylesheet_uri to the new file. */ + if ( !empty( $stylesheet ) ) { + + /* If the stylesheet is found in the child theme '/css' folder, use it. */ + if ( file_exists( trailingslashit( get_stylesheet_directory() ) . "css/{$stylesheet}" ) ) + $stylesheet_uri = trailingslashit( $stylesheet_dir_uri ) . "css/{$stylesheet}"; + + /* Else, if the stylesheet is found in the parent theme '/css' folder, use it. */ + elseif ( file_exists( trailingslashit( get_template_directory() ) . "css/{$stylesheet}" ) ) + $stylesheet_uri = trailingslashit( get_template_directory_uri() ) . "css/{$stylesheet}"; + } + } + + /* Return the stylesheet URI. */ + return $stylesheet_uri; +} + +/** + * Returns the post stylesheet if one is saved as post metadata. + * + * @since 0.3.0 + * @param int $post_id The ID of the post to get the stylesheet for. + * @return string|bool Stylesheet name if given. False for no stylesheet. + */ +function get_post_stylesheet( $post_id ) { + return get_post_meta( $post_id, apply_filters( 'post_stylesheets_meta_key', 'Stylesheet' ), true ); +} + +/** + * Adds/updates the post stylesheet for a specific post. + * + * @since 0.3.0 + * @param int $post_id The ID of the post to set the stylesheet for. + * @param string $stylesheet The filename of the stylesheet. + */ +function set_post_stylesheet( $post_id, $stylesheet ) { + return update_post_meta( $post_id, apply_filters( 'post_stylesheets_meta_key', 'Stylesheet' ), $stylesheet ); +} + +/** + * Checks if a post has a specific post stylesheet. + * + * @since 0.3.0 + * @param string $stylesheet The filename of the stylesheet. + * @param int $post_id The ID of the post to check. + * @return bool True|False depending on whether the post has the stylesheet. + */ +function has_post_stylesheet( $stylesheet, $post_id = '' ) { + + /* If no post ID is given, use WP's get_the_ID() to get it and assume we're in the post loop. */ + if ( empty( $post_id ) ) + $post_id = get_the_ID(); + + /* Return true/false based on whether the stylesheet matches. */ + return ( $stylesheet == get_post_stylesheet( $post_id ) ? true : false ); +} + +/** + * Creates the post stylesheets meta box. + * + * @since 0.2.0 + */ +function post_stylesheets_create_meta_box() { + + /* Get all available 'public' post types. */ + $post_types = get_post_types( array( 'public' => true ), 'objects' ); + + /* Loop through each of the public post types and add the meta box to it. */ + foreach ( $post_types as $type ) + add_meta_box( "post-stylesheets", sprintf( __( '%s Stylesheet', apply_filters( 'post_stylesheets_textdomain', 'post-stylesheets' ) ), $type->labels->singular_name ), 'post_stylesheets_meta_box', $type->name, 'side', 'default' ); + + /* Saves the post meta box data. */ + add_action( 'save_post', 'post_stylesheets_meta_box_save', 10, 2 ); +} + +/** + * Displays the input field for entering a custom stylesheet. + * + * @since 0.2.0 + */ +function post_stylesheets_meta_box( $object, $box ) { ?> + + <p> + <input type="hidden" name="post_stylesheets_meta_box_nonce" value="<?php echo wp_create_nonce( basename( __FILE__ ) ); ?>" /> + <input type="text" class="widefat" name="post-stylesheets" id="post-stylesheets" value="<?php echo esc_attr( get_post_stylesheet( $object->ID ) ); ?>" /> + </p> +<?php +} + +/** + * Saves the user-selected post stylesheet on the 'save_post' hook. + * + * @since 0.2.0 + */ +function post_stylesheets_meta_box_save( $post_id, $post ) { + + /* Verify the nonce before proceeding. */ + if ( !isset( $_POST["post_stylesheets_meta_box_nonce"] ) || !wp_verify_nonce( $_POST["post_stylesheets_meta_box_nonce"], basename( __FILE__ ) ) ) + return $post_id; + + /* Get the post type object. */ + $post_type = get_post_type_object( $post->post_type ); + + /* Check if the current user has permission to edit the post. */ + if ( !current_user_can( $post_type->cap->edit_post, $post_id ) ) + return $post_id; + + /* Get the previous post stylesheet. */ + $old_stylesheet = get_post_stylesheet( $post_id ); + + /* Get the submitted post stylesheet. */ + $new_stylesheet = esc_attr( strip_tags( $_POST['post-stylesheets'] ) ); + + /* If the old stylesheet doesn't match the new stylesheet, update the post stylesheet meta. */ + if ( $old_stylesheet !== $new_stylesheet ) + set_post_stylesheet( $post_id, $new_stylesheet ); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/extensions/theme-layouts.php b/wp-content/themes/hybrid/library/extensions/theme-layouts.php new file mode 100644 index 000000000..0a27f7101 --- /dev/null +++ b/wp-content/themes/hybrid/library/extensions/theme-layouts.php @@ -0,0 +1,399 @@ +<?php +/** + * Theme Layouts - A WordPress script for creating dynamic layouts. + * + * Theme Layouts was created to allow theme developers to easily style themes with dynamic layout + * structures. It gives users the ability to control how each post (or any post type) is displayed on the + * front end of the site. The layout can also be filtered for any page of a WordPress site. + * + * The script will filter the WordPress body_class to provide a layout class for the given page. Themes + * must support this hook or its accompanying body_class() function for the Theme Layouts script to work. + * Themes must also handle the CSS based on the layout class. This script merely provides the logic. The + * design should be handled on a theme-by-theme basis. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * @package ThemeLayouts + * @version 0.3.0 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2010 - 2011, Justin Tadlock + * @link http://justintadlock.com + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + */ + +/* Filters the body_class hook to add a custom class. */ +add_filter( 'body_class', 'theme_layouts_body_class' ); + +/* Set up the custom post layouts. */ +add_action( 'admin_menu', 'theme_layouts_admin_setup' ); + +/** + * Gets the layout for the current post based off the 'Layout' custom field key if viewing a singular post + * entry. All other pages are given a default layout of 'layout-default'. + * + * @since 0.2.0 + * @return string The layout for the given page. + */ +function theme_layouts_get_layout() { + + /* Get the available post layouts. */ + $post_layouts = get_theme_support( 'theme-layouts' ); + + /* Set the layout to an empty string. */ + $layout = ''; + + /* If viewing a singular post, check if a layout has been specified. */ + if ( is_singular() ) { + + /* Get the current post ID. */ + $post_id = get_queried_object_id(); + + /* Get the post layout. */ + $layout = get_post_layout( $post_id ); + } + + /* If viewing a user/author archive, check if a layout has been specified. */ + elseif ( is_author() ) { + + /* Get the current user ID. */ + $user_id = get_queried_object_id(); + + /* Get the user layout. */ + $layout = get_user_layout( $user_id ); + } + + /* Make sure the given layout is in the array of available post layouts for the theme. */ + if ( empty( $layout ) || !in_array( $layout, $post_layouts[0] ) ) + $layout = 'default'; + + /* @deprecated 0.2.0. Use the 'get_theme_layout' hook. */ + $layout = apply_filters( 'get_post_layout', "layout-{$layout}" ); + + /* Return the layout and allow plugin/theme developers to override it. */ + return esc_attr( apply_filters( 'get_theme_layout', $layout ) ); +} + +/** + * Get the post layout based on the given post ID. + * + * @since 0.2.0 + * @param int $post_id The ID of the post to get the layout for. + * @return string $layout The name of the post's layout. + */ +function get_post_layout( $post_id ) { + + /* Get the post layout. */ + $layout = get_post_meta( $post_id, apply_filters( 'theme_layouts_meta_key', 'Layout' ), true ); + + /* Return the layout if one is found. Otherwise, return 'default'. */ + return ( !empty( $layout ) ? $layout : 'default' ); +} + +/** + * Update/set the post layout based on the given post ID and layout. + * + * @since 0.2.0 + * @param int $post_id The ID of the post to set the layout for. + * @param string $layout The name of the layout to set. + * @return bool The return value of the update_post_meta() function. + */ +function set_post_layout( $post_id, $layout ) { + return update_post_meta( $post_id, apply_filters( 'theme_layouts_meta_key', 'Layout' ), $layout ); +} + +/** + * Checks if a specific post's layout matches that of the given layout. + * + * @since 0.3.0 + * @param string $layout The name of the layout to check if the post has. + * @param int $post_id The ID of the post to check the layout for. + * @return bool Whether the given layout matches the post's layout. + */ +function has_post_layout( $layout, $post_id = '' ) { + + /* If no post ID is given, use WP's get_the_ID() to get it and assume we're in the post loop. */ + if ( empty( $post_id ) ) + $post_id = get_the_ID(); + + /* Return true/false based on whether the layout matches. */ + return ( $layout == get_post_layout( $post_id ) ? true : false ); +} + +/** + * Get the layout for a user/author archive page based on a specific user ID. + * + * @since 0.3.0 + * @param int $user_id The ID of the user to get the layout for. + */ +function get_user_layout( $user_id ) { + + /* Get the user layout. */ + $layout = get_user_meta( $user_id, apply_filters( 'theme_layouts_meta_key', 'Layout' ), true ); + + /* Return the layout if one is found. Otherwise, return 'default'. */ + return ( !empty( $layout ) ? $layout : 'default' ); +} + +/** + * Update/set the layout for a user/author archive paged based on the user ID. + * + * @since 0.3.0 + * @param int $user_id The ID of the user to set the layout for. + * @param string $layout The name of the layout to set. + * @return bool The return value of update_user_meta() function. + */ +function set_user_layout( $user_id, $layout ) { + return update_user_meta( $user_id, apply_filters( 'theme_layouts_meta_key', 'Layout' ), $layout ); +} + +/** + * Checks if a specific user's layout matches that of the given layout. + * + * @since 0.3.0 + * @param string $layout The name of the layout to check if the user has. + * @param int $user_id The ID of the user to check the layout for. + * @return bool Whether the given layout matches the user's layout. + */ +function has_user_layout( $layout, $user_id = '' ) { + + /* If no user ID is given, assume we're viewing an author archive page and get the user ID. */ + if ( empty( $user_id ) ) + $user_id = get_query_var( 'author' ); + + /* Return true/false based on whether the layout matches. */ + return ( $layout == get_user_layout( $user_id ) ? true : false ); +} + +/** + * Adds the post layout class to the WordPress body class in the form of "layout-$layout". This allows + * theme developers to design their theme layouts based on the layout class. If designing a theme with + * this extension, the theme should make sure to handle all possible layout classes. + * + * @since 0.2.0 + * @param array $classes + * @param array $classes + */ +function theme_layouts_body_class( $classes ) { + + /* Adds the layout to array of body classes. */ + $classes[] = sanitize_html_class( theme_layouts_get_layout() ); + + /* Return the $classes array. */ + return $classes; +} + +/** + * Creates default text strings based on the default post layouts. Theme developers that add custom + * layouts should filter 'post_layouts_strings' to add strings to match the custom layouts, but it's not + * required. The layout name will be used if no text string is found. + * + * @since 0.2.0 + */ +function theme_layouts_strings() { + + /* Set up the default layout strings. */ + $strings = array( + 'default' => __( 'Default', theme_layouts_textdomain() ), + '1c' => __( 'One Column', theme_layouts_textdomain() ), + '2c-l' => __( 'Two Columns, Left', theme_layouts_textdomain() ), + '2c-r' => __( 'Two Columns, Right', theme_layouts_textdomain() ), + '3c-l' => __( 'Three Columns, Left', theme_layouts_textdomain() ), + '3c-r' => __( 'Three Columns, Right', theme_layouts_textdomain() ), + '3c-c' => __( 'Three Columns, Center', theme_layouts_textdomain() ) + ); + + /* Allow devs to filter the strings for custom layouts. */ + return apply_filters( 'theme_layouts_strings', $strings ); +} + +/** + * Get a specific layout's text string. + * + * @since 0.2.0 + */ +function theme_layouts_get_string( $layout ) { + + /* Get an array of post layout strings. */ + $strings = theme_layouts_strings(); + + /* Return the layout's string if it exists. Else, return the layout slug. */ + return ( ( isset( $strings[$layout] ) ) ? $strings[$layout] : $layout ); +} + +/** + * Post layouts admin setup. Registers the post layouts meta box for the post editing screen. Adds the + * metadata save function to the 'save_post' hook. + * + * @since 0.2.0 + */ +function theme_layouts_admin_setup() { + + /* Gets available public post types. */ + $post_types = get_post_types( array( 'public' => true ), 'objects' ); + + /* For each available post type, create a meta box on its edit page if it supports '$prefix-post-settings'. */ + foreach ( $post_types as $type ) + add_meta_box( 'theme-layouts-post-meta-box', __( 'Layout', theme_layouts_textdomain() ), 'theme_layouts_post_meta_box', $type->name, 'side', 'default' ); + + /* Saves the post format on the post editing page. */ + add_action( 'save_post', 'theme_layouts_save_post', 10, 2 ); + + /* Adds a theme layout <select> element to the attachment edit form. */ + add_filter( 'attachment_fields_to_edit', 'theme_layouts_attachment_fields_to_edit', 10, 2 ); + + /* Saves the theme layout for attachments. */ + add_filter( 'attachment_fields_to_save', 'theme_layouts_attachment_fields_to_save', 10, 2 ); +} + +/** + * Displays a meta box of radio selectors on the post editing screen, which allows theme users to select + * the layout they wish to use for the specific post. + * + * @since 0.2.0 + */ +function theme_layouts_post_meta_box( $post, $box ) { + + /* Get theme-supported theme layouts. */ + $layouts = get_theme_support( 'theme-layouts' ); + $post_layouts = $layouts[0]; + + /* Get the current post's layout. */ + $post_layout = get_post_layout( $post->ID ); ?> + + <div class="post-layout"> + + <input type="hidden" name="theme_layouts_post_meta_box_nonce" value="<?php echo wp_create_nonce( basename( __FILE__ ) ); ?>" /> + + <p><?php _e( 'Layout is a theme-specific structure for the single view of the post.', theme_layouts_textdomain() ); ?></p> + + <div class="post-layout-wrap"> + <ul> + <li><input type="radio" name="post_layout" id="post_layout_default" value="default" <?php checked( $post_layout, 'default' );?> /> <label for="post_layout_default"><?php echo esc_html( theme_layouts_get_string( 'default' ) ); ?></label></li> + + <?php foreach ( $post_layouts as $layout ) { ?> + <li><input type="radio" name="post_layout" id="post_layout_<?php echo esc_attr( $layout ); ?>" value="<?php echo esc_attr( $layout ); ?>" <?php checked( $post_layout, $layout ); ?> /> <label for="post_layout_<?php echo esc_attr( $layout ); ?>"><?php echo esc_html( theme_layouts_get_string( $layout ) ); ?></label></li> + <?php } ?> + </ul> + </div> + </div><?php +} + +/** + * Saves the post layout metadata if on the post editing screen in the admin. + * + * @since 0.2.0 + */ +function theme_layouts_save_post( $post_id, $post ) { + + /* Verify the nonce for the post formats meta box. */ + if ( !isset( $_POST['theme_layouts_post_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['theme_layouts_post_meta_box_nonce'], basename( __FILE__ ) ) ) + return $post_id; + + /* Get the post type object. */ + $post_type = get_post_type_object( $post->post_type ); + + /* Check if the current user has permission to edit the post. */ + if ( !current_user_can( $post_type->cap->edit_post, $post_id ) ) + return $post_id; + + /* Get the previous post layout. */ + $old_layout = get_post_layout( $post_id ); + + /* Get the submitted post layout. */ + $new_layout = esc_attr( $_POST['post_layout'] ); + + /* If the old layout doesn't match the new layout, update the post layout meta. */ + if ( $old_layout !== $new_layout ) + set_post_layout( $post_id, $new_layout ); +} + +/** + * Adds a select drop-down element to the attachment edit form for selecting the attachment layout. + * + * @since 0.3.0 + * @param array $fields Array of fields for the edit attachment form. + * @param object $post The attachment post object. + * @return array $fields + */ +function theme_layouts_attachment_fields_to_edit( $fields, $post ) { + + /* Get theme-supported theme layouts. */ + $layouts = get_theme_support( 'theme-layouts' ); + $post_layouts = $layouts[0]; + + /* Get the current post's layout. */ + $post_layout = get_post_layout( $post->ID ); + + /* Set the default post layout. */ + $select = '<option id="post_layout_default" value="default" ' . selected( $post_layout, 'default', false ) . '>' . esc_html( theme_layouts_get_string( 'default' ) ) . '</option>'; + + /* Loop through each theme-supported layout, adding it to the select element. */ + foreach ( $post_layouts as $layout ) + $select .= '<option id="post_layout_' . esc_attr( $layout ) . '" value="' . esc_attr( $layout ) . '" ' . selected( $post_layout, $layout, false ) . '>' . esc_html( theme_layouts_get_string( $layout ) ) . '</option>'; + + /* Set the HTML for the post layout select drop-down. */ + $select = '<select name="attachments[' . $post->ID . '][theme-layouts-post-layout]" id="attachments[' . $post->ID . '][theme-layouts-post-layout]">' . $select . '</select>'; + + /* Add the attachment layout field to the $fields array. */ + $fields['theme-layouts-post-layout'] = array( + 'label' => __( 'Layout', theme_layouts_textdomain() ), + 'input' => 'html', + 'html' => $select + ); + + /* Return the $fields array back to WordPress. */ + return $fields; +} + +/** + * Saves the attachment layout for the attachment edit form. + * + * @since 0.3.0 + * @param array $post The attachment post array (not the post object!). + * @param array $fields Array of fields for the edit attachment form. + * @return array $post + */ +function theme_layouts_attachment_fields_to_save( $post, $fields ) { + + /* If the theme layouts field was submitted. */ + if ( isset( $fields['theme-layouts-post-layout'] ) ) { + + /* Get the previous post layout. */ + $old_layout = get_post_layout( $post['ID'] ); + + /* Get the submitted post layout. */ + $new_layout = esc_attr( $fields['theme-layouts-post-layout'] ); + + /* If the old layout doesn't match the new layout, update the post layout meta. */ + if ( $old_layout !== $new_layout ) + set_post_layout( $post['ID'], $new_layout ); + } + + /* Return the attachment post array. */ + return $post; +} + +/** + * Returns the textdomain used by the script and allows it to be filtered by plugins/themes. + * + * @since 0.2.0 + * @returns string The textdomain for the script. + */ +function theme_layouts_textdomain() { + return apply_filters( 'theme_layouts_textdomain', 'theme-layouts' ); +} + +/** + * @since 0.1.0 + * @deprecated 0.2.0 Use theme_layouts_get_layout(). + */ +function post_layouts_get_layout() { + return theme_layouts_get_layout(); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/comments.php b/wp-content/themes/hybrid/library/functions/comments.php index e377abf64..c8b5c8e50 100644 --- a/wp-content/themes/hybrid/library/functions/comments.php +++ b/wp-content/themes/hybrid/library/functions/comments.php @@ -1,30 +1,40 @@ <?php /** - * Functions for handling how comments are displayed and used on the site. This allows more - * precise control over their display and makes more filter and action hooks available to developers - * to use in their customizations. + * Functions for handling how comments are displayed and used on the site. This allows more precise + * control over their display and makes more filter and action hooks available to developers to use in their + * customizations. * - * @package Hybrid + * @package HybridCore * @subpackage Functions */ -/** - * Filter the comment form defaults. - * @since 0.8 - */ +/* Filter the comment form defaults. */ add_filter( 'comment_form_defaults', 'hybrid_comment_form_args' ); +/* Add a few comment types to the allowed avatar comment types list. */ +add_filter( 'get_avatar_comment_types', 'hybrid_avatar_comment_types' ); + /** * Arguments for the wp_list_comments_function() used in comments.php. Users can set up a * custom comments callback function by changing $callback to the custom function. Note that * $style should remain 'ol' since this is hardcoded into the theme and is the semantically correct * element to use for listing comments. * - * @since 0.7 + * @since 0.7.0 * @return array $args Arguments for listing comments. */ function hybrid_list_comments_args() { - $args = array( 'style' => 'ol', 'type' => 'all', 'avatar_size' => 80, 'callback' => 'hybrid_comments_callback', 'end-callback' => 'hybrid_comments_end_callback' ); + + /* Set the default arguments for listing comments. */ + $args = array( + 'style' => 'ol', + 'type' => 'all', + 'avatar_size' => 80, + 'callback' => 'hybrid_comments_callback', + 'end-callback' => 'hybrid_comments_end_callback' + ); + + /* Return the arguments and allow devs to overwrite them. */ return apply_atomic( 'list_comments_args', $args ); } @@ -34,33 +44,39 @@ function hybrid_list_comments_args() { * the $comment_type. The comment template hierarchy is comment-$comment_type.php, * comment.php. * - * The templates are saved in $hybrid->templates[comment_template], so each comment template + * The templates are saved in $hybrid->comment_template[$comment_type], so each comment template * is only located once if it is needed. Following comments will use the saved template. * * @since 0.2.3 - * @param $comment The comment variable + * @param $comment The comment object. * @param $args Array of arguments passed from wp_list_comments() * @param $depth What level the particular comment is */ function hybrid_comments_callback( $comment, $args, $depth ) { + global $hybrid; $GLOBALS['comment'] = $comment; $GLOBALS['comment_depth'] = $depth; + /* Get the comment type of the current comment. */ $comment_type = get_comment_type( $comment->comment_ID ); - $cache = wp_cache_get( 'comment_template' ); + /* Create an empty array if the comment template array is not set. */ + if ( !isset( $hybrid->comment_template) || !is_array( $hybrid->comment_template ) ) + $hybrid->comment_template = array(); - if ( !is_array( $cache ) ) - $cache = array(); + /* Check if a template has been provided for the specific comment type. If not, get the template. */ + if ( !isset( $hybrid->comment_template[$comment_type] ) ) { - if ( !isset( $cache[$comment_type] ) ) { + /* Locate the template based on the comment type. Default to 'comment.php'. */ $template = locate_template( array( "comment-{$comment_type}.php", 'comment.php' ) ); - $cache[$comment_type] = $template; - wp_cache_set( 'comment_template', $cache ); + /* Set the template in the comment template array. */ + $hybrid->comment_template[$comment_type] = $template; } - require( $cache[$comment_type] ); + /* If a template was found, load the template. */ + if ( !empty( $hybrid->comment_template[$comment_type] ) ) + require( $hybrid->comment_template[$comment_type] ); } /** @@ -76,87 +92,90 @@ function hybrid_comments_end_callback() { /** * Displays the avatar for the comment author and wraps it in the comment author's URL if it is - * available. Adds a call to THEME_IMAGES . "/{$comment_type}.png" for the default avatars for + * available. Adds a call to HYBRID_IMAGES . "/{$comment_type}.png" for the default avatars for * trackbacks and pingbacks. * - * @since 0.2 + * @since 0.2.0 * @global $comment The current comment's DB object. * @global $hybrid The global Hybrid object. */ function hybrid_avatar() { global $comment, $hybrid; + /* Make sure avatars are allowed before proceeding. */ if ( !get_option( 'show_avatars' ) ) return false; /* Get/set some comment variables. */ $comment_type = get_comment_type( $comment->comment_ID ); - $author = esc_html( get_comment_author( $comment->comment_ID ) ); - $url = esc_url( get_comment_author_url( $comment->comment_ID ) ); + $author = get_comment_author( $comment->comment_ID ); + $url = get_comment_author_url( $comment->comment_ID ); + $avatar = ''; + $default_avatar = ''; - if ( 'pingback' == $comment_type || 'trackback' == $comment_type ) - $default_avatar = THEME_IMAGES . "/{$comment_type}.png"; + /* Get comment types that are allowed to have an avatar. */ + $avatar_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) ); - $default_avatar = apply_filters( "{$hybrid->prefix}_{$comment_type}_avatar", $default_avatar ); + /* If comment type is in the allowed list, check if it's a pingback or trackback. */ + if ( in_array( $comment_type, $avatar_comment_types ) ) { + /* Set a default avatar for pingbacks and trackbacks. */ + $default_avatar = ( ( 'pingback' == $comment_type || 'trackback' == $comment_type ) ? trailingslashit( HYBRID_IMAGES ) . "{$comment_type}.png" : '' ); + + /* Allow the default avatar to be filtered by comment type. */ + $default_avatar = apply_filters( "{$hybrid->prefix}_{$comment_type}_avatar", $default_avatar ); + } + + /* Set up the avatar size. */ $comment_list_args = hybrid_list_comments_args(); $size = ( ( $comment_list_args['avatar_size'] ) ? $comment_list_args['avatar_size'] : 80 ); - $avatar = get_avatar( get_comment_author_email( $comment->comment_ID ), absint( $size ), $default_avatar, $author ); + /* Get the avatar provided by the get_avatar() function. */ + $avatar = get_avatar( $comment, absint( $size ), $default_avatar, $author ); /* If URL input, wrap avatar in hyperlink. */ - if ( $url ) - $avatar = '<a href="' . $url . '" rel="external nofollow" title="' . $author . '">' . $avatar . '</a>'; + if ( !empty( $url ) && !empty( $avatar ) ) + $avatar = '<a href="' . esc_url( $url ) . '" rel="external nofollow" title="' . esc_attr( $author ) . '">' . $avatar . '</a>'; + /* Display the avatar and allow it to be filtered. Note: Use the get_avatar filter hook where possible. */ echo apply_filters( "{$hybrid->prefix}_avatar", $avatar ); } -/** - * Function for displaying a comment's metadata. - * - * @since 0.7 - * @param string $metadata Custom metadata to use. - * @global $comment The global comment object. - * @global $post The global post object. - */ -function hybrid_comment_meta( $metadata = '' ) { - global $comment, $post; - - if ( !$metadata ) - $metadata = '[comment-author] [comment-published] [comment-permalink before="| "] [comment-edit-link before="| "] [comment-reply-link before="| "]'; - - $metadata = '<div class="comment-meta comment-meta-data">' . $metadata . '</div>'; - - echo do_shortcode( apply_filters( hybrid_get_prefix() . '_comment_meta', $metadata ) ); -} - /** * Filters the WordPress comment_form() function that was added in WordPress 3.0. This allows * the theme to preserve some backwards compatibility with its old comment form. It also allows * users to build custom comment forms by filtering 'comment_form_defaults' in their child theme. * - * @since 0.8 + * @since 0.8.0 * @param array $args The default comment form arguments. * @return array $args The filtered comment form arguments. */ function hybrid_comment_form_args( $args ) { global $user_identity; + /* Get the theme textdomain. */ $domain = hybrid_get_textdomain(); + + /* Get the current commenter. */ $commenter = wp_get_current_commenter(); + + /* Create the required <span> and <input> element class. */ $req = ( ( get_option( 'require_name_email' ) ) ? ' <span class="required">' . __( '*', $domain ) . '</span> ' : '' ); + $input_class = ( ( get_option( 'require_name_email' ) ) ? ' req' : '' ); + /* Sets up the default comment form fields. */ $fields = array( - 'author' => '<p class="form-author"><label for="author">' . __( 'Name', $domain ) . $req . '</label> <input type="text" class="text-input" name="author" id="author" value="' . esc_attr( $commenter['comment_author'] ) . '" size="40" tabindex="1" /></p>', - 'email' => '<p class="form-email"><label for="email">' . __( 'Email', $domain ) . $req . '</label> <input type="text" class="text-input" name="email" id="email" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="40" tabindex="2" /></p>', - 'url' => '<p class="form-url"><label for="url">' . __( 'Website', $domain ) . '</label><input type="text" class="text-input" name="url" id="url" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="40" tabindex="3" /></p>' + 'author' => '<p class="form-author' . esc_attr( $input_class ) . '"><label for="author">' . __( 'Name', $domain ) . $req . '</label> <input type="text" class="text-input" name="author" id="author" value="' . esc_attr( $commenter['comment_author'] ) . '" size="40" /></p>', + 'email' => '<p class="form-email' . esc_attr( $input_class ) . '"><label for="email">' . __( 'Email', $domain ) . $req . '</label> <input type="text" class="text-input" name="email" id="email" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="40" /></p>', + 'url' => '<p class="form-url"><label for="url">' . __( 'Website', $domain ) . '</label><input type="text" class="text-input" name="url" id="url" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="40" /></p>' ); + /* Sets the default arguments for displaying the comment form. */ $args = array( 'fields' => apply_filters( 'comment_form_default_fields', $fields ), - 'comment_field' => '<p class="form-textarea"><label for="comment">' . __( 'Comment', $domain ) . '</label><textarea name="comment" id="comment" cols="60" rows="10" tabindex="4"></textarea></p>', + 'comment_field' => '<p class="form-textarea req"><label for="comment">' . __( 'Comment', $domain ) . '</label><textarea name="comment" id="comment" cols="60" rows="10"></textarea></p>', 'must_log_in' => '<p class="alert">' . sprintf( __( 'You must be <a href="%1$s" title="Log in">logged in</a> to post a comment.', $domain ), wp_login_url( get_permalink() ) ) . '</p><!-- .alert -->', - 'logged_in_as' => '<p class="log-in-out">' . sprintf( __( 'Logged in as <a href="%1$s" title="%2$s">%2$s</a>.', $domain ), admin_url( 'profile.php' ), $user_identity ) . ' <a href="' . wp_logout_url( get_permalink() ) . '" title="' . __( 'Log out of this account', $domain ) . '">' . __( 'Log out »', $domain ) . '</a></p><!-- .log-in-out -->', + 'logged_in_as' => '<p class="log-in-out">' . sprintf( __( 'Logged in as <a href="%1$s" title="%2$s">%2$s</a>.', $domain ), admin_url( 'profile.php' ), esc_attr( $user_identity ) ) . ' <a href="' . wp_logout_url( get_permalink() ) . '" title="' . esc_attr__( 'Log out of this account', $domain ) . '">' . __( 'Log out »', $domain ) . '</a></p><!-- .log-in-out -->', 'comment_notes_before' => '', 'comment_notes_after' => '', 'id_form' => 'commentform', @@ -164,10 +183,31 @@ function hybrid_comment_form_args( $args ) { 'title_reply' => __( 'Leave a Reply', $domain ), 'title_reply_to' => __( 'Leave a Reply to %s', $domain ), 'cancel_reply_link' => __( 'Click here to cancel reply.', $domain ), - 'label_submit' => __( 'Submit', $domain ), + 'label_submit' => __( 'Post Comment', $domain ), ); + /* Return the arguments for displaying the comment form. */ return $args; } +/** + * Adds the 'pingback' and 'trackback' comment types to the allowed list of avatar comment types. By + * default, WordPress only allows the 'comment' comment type to have an avatar. + * + * @since 1.2.0 + * @param array $types List of all comment types allowed to have avatars. + * @return array $types + */ +function hybrid_avatar_comment_types( $types ) { + + /* Add the 'pingback' comment type. */ + $types[] = 'pingback'; + + /* Add the 'trackback' comment type. */ + $types[] = 'trackback'; + + /* Return the array of comment types. */ + return $types; +} + ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/context.php b/wp-content/themes/hybrid/library/functions/context.php index b58f5893a..d3b3c465e 100644 --- a/wp-content/themes/hybrid/library/functions/context.php +++ b/wp-content/themes/hybrid/library/functions/context.php @@ -1,13 +1,11 @@ <?php /** - * Functions for making various theme elements context-aware. This controls things such as the - * <body> and entry CSS classes as well as contextual hooks. By using a context, developers and - * users can create page-specific code. + * Functions for making various theme elements context-aware. Controls things such as the smart + * and logical body, post, and comment CSS classes as well as context-based action and filter hooks. + * The functions also integrate with WordPress' implementations of body_class, post_class, and + * comment_class, so your theme won't have any trouble with plugin integration. * - * Many of the ideas behind context-aware functions originated with the great Sandbox theme. - * @link http://www.plaintxt.org/themes/sandbox - * - * @package Hybrid + * @package HybridCore * @subpackage Functions */ @@ -21,19 +19,22 @@ * based archives depending on several factors. For example, one could load an archive for a specific * second during a specific minute within a specific hour on a specific day and so on. * - * @since 0.7 + * @since 0.7.0 * @global $wp_query The current page's query object. * @global $hybrid The global Hybrid object. * @return array $hybrid->context Several contexts based on the current page. */ function hybrid_get_context() { - global $wp_query, $hybrid; + global $hybrid; /* If $hybrid->context has been set, don't run through the conditionals again. Just return the variable. */ - if ( is_array( $hybrid->context ) ) + if ( isset( $hybrid->context ) ) return $hybrid->context; + /* Set some variables for use within the function. */ $hybrid->context = array(); + $object = get_queried_object(); + $object_id = get_queried_object_id(); /* Front page of the site. */ if ( is_front_page() ) @@ -47,8 +48,8 @@ function hybrid_get_context() { /* Singular views. */ elseif ( is_singular() ) { $hybrid->context[] = 'singular'; - $hybrid->context[] = "singular-{$wp_query->post->post_type}"; - $hybrid->context[] = "singular-{$wp_query->post->post_type}-{$wp_query->post->ID}"; + $hybrid->context[] = "singular-{$object->post_type}"; + $hybrid->context[] = "singular-{$object->post_type}-{$object_id}"; } /* Archive views. */ @@ -57,16 +58,21 @@ function hybrid_get_context() { /* Taxonomy archives. */ if ( is_tax() || is_category() || is_tag() ) { - $term = $wp_query->get_queried_object(); $hybrid->context[] = 'taxonomy'; - $hybrid->context[] = $term->taxonomy; - $hybrid->context[] = "{$term->taxonomy}-" . sanitize_html_class( $term->slug, $term->term_id ); + $hybrid->context[] = "taxonomy-{$object->taxonomy}"; + $hybrid->context[] = "taxonomy-{$object->taxonomy}-" . sanitize_html_class( $object->slug, $object->term_id ); + } + + /* Post type archives. */ + elseif ( is_post_type_archive() ) { + $post_type = get_post_type_object( get_query_var( 'post_type' ) ); + $hybrid->context[] = "archive-{$post_type->name}"; } /* User/author archives. */ elseif ( is_author() ) { $hybrid->context[] = 'user'; - $hybrid->context[] = 'user-' . sanitize_html_class( get_the_author_meta( 'user_nicename', get_query_var( 'author' ) ), $wp_query->get_queried_object_id() ); + $hybrid->context[] = 'user-' . sanitize_html_class( get_the_author_meta( 'user_nicename', $object_id ), $object_id ); } /* Time/Date archives. */ @@ -102,7 +108,7 @@ function hybrid_get_context() { $hybrid->context[] = 'error-404'; } - return $hybrid->context; + return array_map( 'esc_attr', $hybrid->context ); } /** @@ -110,45 +116,67 @@ function hybrid_get_context() { * 'hentry'. Posts are given category, tag, and author classes. Alternate post classes of odd, * even, and alt are added. * - * @since 0.5 + * @since 0.5.0 * @global $post The current post's DB object. * @param string|array $class Additional classes for more control. * @return string $class */ -function hybrid_entry_class( $class = '' ) { - global $post; +function hybrid_entry_class( $class = '', $post_id = null ) { static $post_alt; - /* Add hentry for microformats compliance and the post type. */ - $classes = array( 'hentry', $post->post_type, $post->post_status ); + $post = get_post( $post_id ); + + /* Make sure we have a real post first. */ + if ( !empty( $post ) ) { + + $post_id = $post->ID; - /* Post alt class. */ - $classes[] = 'post-' . ++$post_alt; - $classes[] = ( $post_alt % 2 ) ? 'odd' : 'even alt'; + /* Add hentry for microformats compliance, the post type, and post status. */ + $classes = array( 'hentry', $post->post_type, $post->post_status ); - /* Author class. */ - $classes[] = 'author-' . sanitize_html_class( get_the_author_meta( 'user_nicename' ), get_the_author_meta( 'ID' ) ); + /* Post alt class. */ + $classes[] = 'post-' . ++$post_alt; + $classes[] = ( $post_alt % 2 ) ? 'odd' : 'even alt'; - /* Sticky class (only on home/blog page). */ - if ( is_home() && is_sticky() ) - $classes[] = 'sticky'; + /* Author class. */ + $classes[] = 'author-' . sanitize_html_class( get_the_author_meta( 'user_nicename' ), get_the_author_meta( 'ID' ) ); - /* Password-protected posts. */ - if ( post_password_required() ) - $classes[] = 'protected'; + /* Sticky class (only on home/blog page). */ + if ( is_home() && is_sticky() && !is_paged() ) + $classes[] = 'sticky'; - /* Add category and post tag terms as classes. */ - if ( 'post' == $post->post_type ) { + /* Password-protected posts. */ + if ( post_password_required() ) + $classes[] = 'protected'; - foreach ( array( 'category', 'post_tag' ) as $tax ) { + /* Has excerpt. */ + if ( has_excerpt() ) + $classes[] = 'has-excerpt'; - foreach ( (array)get_the_terms( $post->ID, $tax ) as $term ) { - if ( !empty( $term->slug ) ) - $classes[] = $tax . '-' . sanitize_html_class( $term->slug, $term->term_id ); + /* Post format. */ + if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) { + $post_format = get_post_format( $post_id ); + $classes[] = ( ( empty( $post_format ) || is_wp_error( $post_format ) ) ? 'format-standard' : "format-{$post_format}" ); + } + + /* Add category and post tag terms as classes. */ + if ( 'post' == $post->post_type ) { + + foreach ( array( 'category', 'post_tag' ) as $tax ) { + + foreach ( (array)get_the_terms( $post->ID, $tax ) as $term ) { + if ( !empty( $term->slug ) ) + $classes[] = $tax . '-' . sanitize_html_class( $term->slug, $term->term_id ); + } } } } + /* If not a post. */ + else { + $classes = array( 'hentry', 'error' ); + } + /* User-created classes. */ if ( !empty( $class ) ) { if ( !is_array( $class ) ) @@ -156,6 +184,9 @@ function hybrid_entry_class( $class = '' ) { $classes = array_merge( $classes, $class ); } + /* Apply the filters for WP's 'post_class'. */ + $classes = apply_filters( 'post_class', $classes, $class, $post_id ); + /* Join all the classes into one string and echo them. */ $class = join( ' ', $classes ); @@ -167,15 +198,15 @@ function hybrid_entry_class( $class = '' ) { * and reader classes. Needs more work because WP, by default, assigns even/odd backwards * (Odd should come first, even second). * - * @since 0.2 + * @since 0.2.0 * @global $wpdb WordPress DB access object. * @global $comment The current comment's DB object. */ -function hybrid_comment_class() { +function hybrid_comment_class( $class = '' ) { global $post, $comment, $hybrid; /* Gets default WP comment classes. */ - $classes = get_comment_class(); + $classes = get_comment_class( $class ); /* Get the comment type. */ $classes[] = get_comment_type(); @@ -193,7 +224,7 @@ function hybrid_comment_class() { } /* Set a class with the user's name. */ - $classes[] = 'user-' . sanitize_html_class( $user->user_nicename, $user->user_id ); + $classes[] = 'user-' . sanitize_html_class( $user->user_nicename, $user->ID ); } /* If not a registered user */ @@ -207,6 +238,13 @@ function hybrid_comment_class() { $classes[] = 'entry-author'; } + /* Get comment types that are allowed to have an avatar. */ + $avatar_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) ); + + /* If avatars are enabled and the comment types can display avatars, add the 'has-avatar' class. */ + if ( get_option( 'show_avatars' ) && in_array( $comment->comment_type, $avatar_comment_types ) ) + $classes[] = 'has-avatar'; + /* Join all the classes into one string and echo them. */ $class = join( ' ', $classes ); @@ -216,22 +254,24 @@ function hybrid_comment_class() { /** * Provides classes for the <body> element depending on page context. * - * @since 0.1 + * @since 0.1.0 * @uses $wp_query * @param string|array $class Additional classes for more control. * @return string */ function hybrid_body_class( $class = '' ) { - global $wp_query, $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome; + global $wp_query; /* Text direction (which direction does the text flow). */ $classes = array( 'wordpress', get_bloginfo( 'text_direction' ), get_locale() ); - /* Layout class. */ - if ( ( current_theme_supports( 'post-layouts' ) || 'hybrid' == get_stylesheet() ) && is_singular() ) { - $layout = get_post_meta( $wp_query->post->ID, 'Layout', true ); - if ( !empty( $layout ) ) - $classes[] = 'layout-' . strip_tags( esc_attr( $layout ) ); + /* Check if the current theme is a parent or child theme. */ + $classes[] = ( is_child_theme() ? 'child-theme' : 'parent-theme' ); + + /* Multisite check adds the 'multisite' class and the blog ID. */ + if ( is_multisite() ) { + $classes[] = 'multisite'; + $classes[] = 'blog-' . get_current_blog_id(); } /* Date classes. */ @@ -239,7 +279,11 @@ function hybrid_body_class( $class = '' ) { $classes[] = strtolower( gmdate( '\yY \mm \dd \hH l', $time ) ); /* Is the current user logged in. */ - $classes[] = ( is_user_logged_in() ) ? 'logged-in' : 'not-logged-in'; + $classes[] = ( is_user_logged_in() ) ? 'logged-in' : 'logged-out'; + + /* WP admin bar. */ + if ( is_admin_bar_showing() ) + $classes[] = 'admin-bar'; /* Merge base contextual classes with $classes. */ $classes = array_merge( $classes, hybrid_get_context() ); @@ -247,11 +291,18 @@ function hybrid_body_class( $class = '' ) { /* Singular post (post_type) classes. */ if ( is_singular() ) { + /* Get the queried post object. */ + $post = get_queried_object(); + /* Checks for custom template. */ - $template = str_replace( array ( "{$wp_query->post->post_type}-", "{$wp_query->post->post_type}-template-", '.php' ), '', get_post_meta( $wp_query->post->ID, "_wp_{$wp_query->post->post_type}_template", true ) ); - if ( $template ) { - //$template = str_replace( ), '', $template ); - $classes[] = "{$wp_query->post->post_type}-template-{$template}"; + $template = str_replace( array ( "{$post->post_type}-template-", "{$post->post_type}-", '.php' ), '', get_post_meta( get_queried_object_id(), "_wp_{$post->post_type}_template", true ) ); + if ( !empty( $template ) ) + $classes[] = "{$post->post_type}-template-{$template}"; + + /* Post format. */ + if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) { + $post_format = get_post_format( get_queried_object_id() ); + $classes[] = ( ( empty( $post_format ) || is_wp_error( $post_format ) ) ? "{$post->post_type}-format-standard" : "{$post->post_type}-format-{$post_format}" ); } /* Attachment mime types. */ @@ -259,35 +310,11 @@ function hybrid_body_class( $class = '' ) { foreach ( explode( '/', get_post_mime_type() ) as $type ) $classes[] = "attachment-{$type}"; } - - /* Deprecated classes. */ - elseif ( is_page() ) - $classes[] = "page-{$wp_query->post->ID}"; // Use singular-page-ID - elseif ( is_singular( 'post' ) ) - $classes[] = "single-{$wp_query->post->ID}"; // Use singular-post-ID } /* Paged views. */ - if ( ( ( $page = $wp_query->get( 'paged' ) ) || ( $page = $wp_query->get( 'page' ) ) ) && $page > 1 ) { - $page = intval( $page ); - $classes[] = 'paged paged-' . $page; - } - - /* Browser detection. */ - $browsers = array( 'gecko' => $is_gecko, 'opera' => $is_opera, 'lynx' => $is_lynx, 'ns4' => $is_NS4, 'safari' => $is_safari, 'chrome' => $is_chrome, 'msie' => $is_IE ); - foreach ( $browsers as $key => $value ) { - if ( $value ) { - $classes[] = $key; - break; - } - } - - /* Hybrid theme widgets detection. */ - foreach ( array( 'primary', 'secondary', 'subsidiary' ) as $sidebar ) - $classes[] = ( is_active_sidebar( $sidebar ) ) ? "{$sidebar}-active" : "{$sidebar}-inactive"; - - if ( in_array( 'primary-inactive', $classes ) && in_array( 'secondary-inactive', $classes ) && in_array( 'subsidiary-inactive', $classes ) ) - $classes[] = 'no-widgets'; + if ( ( ( $page = $wp_query->get( 'paged' ) ) || ( $page = $wp_query->get( 'page' ) ) ) && $page > 1 ) + $classes[] = 'paged paged-' . intval( $page ); /* Input class. */ if ( !empty( $class ) ) { @@ -296,6 +323,9 @@ function hybrid_body_class( $class = '' ) { $classes = array_merge( $classes, $class ); } + /* Apply the filters for WP's 'body_class'. */ + $classes = apply_filters( 'body_class', $classes, $class ); + /* Join all the classes into one string. */ $class = join( ' ', $classes ); @@ -304,43 +334,59 @@ function hybrid_body_class( $class = '' ) { } /** - * Function for handling what the browser/search engine title should be. Tries to handle every - * situation to make for the best SEO. + * Function for handling what the browser/search engine title should be. Attempts to handle every + * possible situation WordPress throws at it for the best optimization. * - * @since 0.1 + * @since 0.1.0 * @global $wp_query */ function hybrid_document_title() { global $wp_query; + /* Set up some default variables. */ $domain = hybrid_get_textdomain(); - + $doctitle = ''; $separator = ':'; + /* If viewing the front page and posts page of the site. */ if ( is_front_page() && is_home() ) $doctitle = get_bloginfo( 'name' ) . $separator . ' ' . get_bloginfo( 'description' ); + /* If viewing the posts page or a singular post. */ elseif ( is_home() || is_singular() ) { - $id = $wp_query->get_queried_object_id(); - $doctitle = get_post_meta( $id, 'Title', true ); + $doctitle = get_post_meta( get_queried_object_id(), 'Title', true ); - if ( !$doctitle && is_front_page() ) + if ( empty( $doctitle ) && is_front_page() ) $doctitle = get_bloginfo( 'name' ) . $separator . ' ' . get_bloginfo( 'description' ); - elseif ( !$doctitle ) - $doctitle = get_post_field( 'post_title', $id ); + + elseif ( empty( $doctitle ) ) + $doctitle = single_post_title( '', false ); } + /* If viewing any type of archive page. */ elseif ( is_archive() ) { + /* If viewing a taxonomy term archive. */ if ( is_category() || is_tag() || is_tax() ) { - $term = $wp_query->get_queried_object(); - $doctitle = $term->name; + $doctitle = single_term_title( '', false ); } - elseif ( is_author() ) - $doctitle = get_the_author_meta( 'display_name', get_query_var( 'author' ) ); + /* If viewing a post type archive. */ + elseif ( is_post_type_archive() ) { + $post_type = get_post_type_object( get_query_var( 'post_type' ) ); + $doctitle = $post_type->labels->name; + } + /* If viewing an author/user archive. */ + elseif ( is_author() ) { + $doctitle = get_user_meta( get_query_var( 'author' ), 'Title', true ); + + if ( empty( $doctitle ) ) + $doctitle = get_the_author_meta( 'display_name', get_query_var( 'author' ) ); + } + + /* If viewing a date-/time-based archive. */ elseif ( is_date () ) { if ( get_query_var( 'minute' ) && get_query_var( 'hour' ) ) $doctitle = sprintf( __( 'Archive for %1$s', $domain ), get_the_time( __( 'g:i a', $domain ) ) ); @@ -363,21 +409,29 @@ function hybrid_document_title() { elseif ( is_year() ) $doctitle = sprintf( __( 'Archive for %1$s', $domain ), get_the_time( __( 'Y', $domain ) ) ); } + + /* For any other archives. */ + else { + $doctitle = __( 'Archives', $domain ); + } } + /* If viewing a search results page. */ elseif ( is_search() ) $doctitle = sprintf( __( 'Search results for "%1$s"', $domain ), esc_attr( get_search_query() ) ); + /* If viewing a 404 not found page. */ elseif ( is_404() ) $doctitle = __( '404 Not Found', $domain ); - /* If paged. */ + /* If the current page is a paged page. */ if ( ( ( $page = $wp_query->get( 'paged' ) ) || ( $page = $wp_query->get( 'page' ) ) ) && $page > 1 ) - $doctitle = sprintf( __( '%1$s Page %2$s', $domain ), $doctitle . $separator, $page ); + $doctitle = sprintf( __( '%1$s Page %2$s', $domain ), $doctitle . $separator, number_format_i18n( $page ) ); /* Apply the wp_title filters so we're compatible with plugins. */ $doctitle = apply_filters( 'wp_title', $doctitle, $separator, '' ); + /* Print the title to the screen. */ echo apply_atomic( 'document_title', esc_attr( $doctitle ) ); } diff --git a/wp-content/themes/hybrid/library/functions/core-seo.php b/wp-content/themes/hybrid/library/functions/core-seo.php new file mode 100644 index 000000000..e78c6317e --- /dev/null +++ b/wp-content/themes/hybrid/library/functions/core-seo.php @@ -0,0 +1,231 @@ +<?php +/** + * SEO and header functions. Not all things in this file are strictly for search engine optimization. Many + * of the functions handle basic <meta> elements for the <head> area of the site. This file is a catchall file + * for adding these types of things to themes. + * + * @package HybridCore + * @subpackage Functions + */ + +/* Add <meta> elements to the <head> area. */ +add_action( 'wp_head', 'hybrid_meta_robots', 1 ); +add_action( 'wp_head', 'hybrid_meta_author', 1 ); +add_action( 'wp_head', 'hybrid_meta_copyright', 1 ); +add_action( 'wp_head', 'hybrid_meta_revised', 1 ); +add_action( 'wp_head', 'hybrid_meta_description', 1 ); +add_action( 'wp_head', 'hybrid_meta_keywords', 1 ); + +/** + * Sets the default meta robots setting. If private, don't send meta info to the header. Runs the + * hybrid_meta_robots filter hook at the end. + * + * @since 0.2.3 + */ +function hybrid_meta_robots() { + + /* If the blog is set to private, don't show anything. */ + if ( !get_option( 'blog_public' ) ) + return; + + /* Create the HTML for the robots meta tag. */ + $robots = '<meta name="robots" content="index,follow" />' . "\n"; + + echo apply_atomic( 'meta_robots', $robots ); +} + +/** + * Generates the meta author. For singular posts, it uses the post author's display name. For user/author + * archives, it uses the user's display name. + * + * @since 0.3.3 + */ +function hybrid_meta_author() { + + /* Set an empty $author variable. */ + $author = ''; + + /* Get the queried object. */ + $object = get_queried_object(); + + /* If viewing a singular post, get the post author's display name. */ + if ( is_singular() ) + $author = get_the_author_meta( 'display_name', $object->post_author ); + + /* If viewing a user/author archive, get the user's display name. */ + elseif ( is_author() ) + $author = get_the_author_meta( 'display_name', get_queried_object_id() ); + + /* If an author was found, wrap it in the proper HTML and escape the author name. */ + if ( !empty( $author ) ) + $author = '<meta name="author" content="' . esc_attr( $author ) . '" />' . "\n"; + + echo apply_atomic( 'meta_author', $author ); +} + +/** + * Add the meta tag for copyright information to the header. Singular posts display the date the post was + * published. All other pages will show the current year. + * + * @since 0.4.0 + */ +function hybrid_meta_copyright() { + + /* Get the theme's textdomain. */ + $domain = hybrid_get_textdomain(); + + /* If viewing a singular post, get the post month and year. */ + if ( is_singular() ) + $date = get_the_time( esc_attr__( 'F Y', $domain ) ); + + /* For all other views, get the current year. */ + else + $date = date( esc_attr__( 'Y', $domain ) ); + + /* Create the HTML for the copyright meta tag. */ + $copyright = '<meta name="copyright" content="' . sprintf( esc_attr__( 'Copyright (c) %1$s', $domain ), $date ) . '" />' . "\n"; + + echo apply_atomic( 'meta_copyright', $copyright ); +} + +/** + * Add the revised meta tag on the singular view of posts. This shows the last time the post was modified. + * + * @since 0.4.0 + */ +function hybrid_meta_revised() { + + /* Create an empty $revised variable. */ + $revised = ''; + + /* If viewing a singular post, get the last modified date/time to use in the revised meta tag. */ + if ( is_singular() ) + $revised = '<meta name="revised" content="' . get_the_modified_time( esc_attr__( 'l, F jS, Y, g:i a', hybrid_get_textdomain() ) ) . '" />' . "\n"; + + echo apply_atomic( 'meta_revised', $revised ); +} + +/** + * Generates the meta description based on either metadata or the description for the object. + * + * @since 0.2.3 + */ +function hybrid_meta_description() { + + /* Set an empty $description variable. */ + $description = ''; + + /* If viewing the home/posts page, get the site's description. */ + if ( is_home() ) { + $description = get_bloginfo( 'description' ); + } + + /* If viewing a singular post. */ + elseif ( is_singular() ) { + + /* Get the meta value for the 'Description' meta key. */ + $description = get_post_meta( get_queried_object_id(), 'Description', true ); + + /* If no description was found and viewing the site's front page, use the site's description. */ + if ( empty( $description ) && is_front_page() ) + $description = get_bloginfo( 'description' ); + + /* For all other singular views, get the post excerpt. */ + elseif ( empty( $description ) ) + $description = get_post_field( 'post_excerpt', get_queried_object_id() ); + } + + /* If viewing an archive page. */ + elseif ( is_archive() ) { + + /* If viewing a user/author archive. */ + if ( is_author() ) { + + /* Get the meta value for the 'Description' user meta key. */ + $description = get_user_meta( get_query_var( 'author' ), 'Description', true ); + + /* If no description was found, get the user's description (biographical info). */ + if ( empty( $description ) ) + $description = get_the_author_meta( 'description', get_query_var( 'author' ) ); + } + + /* If viewing a taxonomy term archive, get the term's description. */ + elseif ( is_category() || is_tag() || is_tax() ) + $description = term_description( '', get_query_var( 'taxonomy' ) ); + + /* If viewing a custom post type archive. */ + elseif ( is_post_type_archive() ) { + + /* Get the post type object. */ + $post_type = get_post_type_object( get_query_var( 'post_type' ) ); + + /* If a description was set for the post type, use it. */ + if ( isset( $post_type->description ) ) + $description = $post_type->description; + } + } + + /* Format the meta description. */ + if ( !empty( $description ) ) + $description = '<meta name="description" content="' . str_replace( array( "\r", "\n", "\t" ), '', esc_attr( strip_tags( $description ) ) ) . '" />' . "\n"; + + echo apply_atomic( 'meta_description', $description ); +} + +/** + * Generates meta keywords/tags for the site. + * + * @since 0.2.3 + */ +function hybrid_meta_keywords() { + + /* Set an empty $keywords variable. */ + $keywords = ''; + + /* If on a singular post and not a preview. */ + if ( is_singular() && !is_preview() ) { + + /* Get the queried post. */ + $post = get_queried_object(); + + /* Get the meta value for the 'Keywords' meta key. */ + $keywords = get_post_meta( get_queried_object_id(), 'Keywords', true ); + + /* If no keywords were found. */ + if ( empty( $keywords ) ) { + + /* Get all taxonomies for the current post type. */ + $taxonomies = get_object_taxonomies( $post->post_type ); + + /* If taxonomies were found for the post type. */ + if ( is_array( $taxonomies ) ) { + + /* Loop through the taxonomies, getting the terms for the current post. */ + foreach ( $taxonomies as $tax ) { + + if ( $terms = get_the_term_list( get_queried_object_id(), $tax, '', ', ', '' ) ) + $keywords[] = $terms; + } + + /* If keywords were found, join the array into a comma-separated string. */ + if ( !empty( $keywords ) ) + $keywords = join( ', ', $keywords ); + } + } + } + + /* If on a user/author archive page, check for user meta. */ + elseif ( is_author() ) { + + /* Get the meta value for the 'Keywords' user meta key. */ + $keywords = get_user_meta( get_query_var( 'author' ), 'Keywords', true ); + } + + /* If we have keywords, format for output. */ + if ( !empty( $keywords ) ) + $keywords = '<meta name="keywords" content="' . esc_attr( strip_tags( $keywords ) ) . '" />' . "\n"; + + echo apply_atomic( 'meta_keywords', $keywords ); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/core.php b/wp-content/themes/hybrid/library/functions/core.php index 26bee29e4..1cada8df5 100644 --- a/wp-content/themes/hybrid/library/functions/core.php +++ b/wp-content/themes/hybrid/library/functions/core.php @@ -4,7 +4,7 @@ * used across the entire framework to make various tasks faster. This file should be loaded * prior to any other files because its functions are needed to run the framework. * - * @package Hybrid + * @package HybridCore * @subpackage Functions */ @@ -14,8 +14,8 @@ * plugin to make it easier to use hooks across multiple themes without having to figure out * each theme's hooks (assuming other themes used the same system). * - * @since 0.7 - * @uses get_template() Defines the theme prefix, which is generally 'hybrid'. + * @since 0.7.0 + * @uses get_template() Defines the theme prefix based on the theme directory. * @global object $hybrid The global Hybrid object. * @return string $hybrid->prefix The prefix of the theme. */ @@ -24,18 +24,18 @@ function hybrid_get_prefix() { /* If the global prefix isn't set, define it. Plugin/theme authors may also define a custom prefix. */ if ( empty( $hybrid->prefix ) ) - $hybrid->prefix = apply_filters( 'hybrid_prefix', get_template() ); + $hybrid->prefix = sanitize_key( apply_filters( 'hybrid_prefix', get_template() ) ); return $hybrid->prefix; } /** - * Defines the theme textdomain. This allows the framework to recognize the proper textdomain - * of the theme. Theme developers building from the framework should use their template name - * (i.e., directory name) as their textdomain within template files. + * Defines the theme textdomain. This allows the framework to recognize the proper textdomain of the + * parent theme. Theme developers building from the framework should use this function in their templates + * to easily define the correct textdomain. * - * @since 0.7 - * @uses get_template() Defines the theme textdomain, which is generally 'hybrid'. + * @since 0.7.0 + * @uses get_template() Defines the theme textdomain based on the template directory. * @global object $hybrid The global Hybrid object. * @return string $hybrid->textdomain The textdomain of the theme. */ @@ -44,11 +44,60 @@ function hybrid_get_textdomain() { /* If the global textdomain isn't set, define it. Plugin/theme authors may also define a custom textdomain. */ if ( empty( $hybrid->textdomain ) ) - $hybrid->textdomain = apply_filters( hybrid_get_prefix() . '_textdomain', get_template() ); + $hybrid->textdomain = sanitize_key( apply_filters( hybrid_get_prefix() . '_textdomain', get_template() ) ); return $hybrid->textdomain; } +/** + * Returns the textdomain for the child theme. + * + * @since 1.2.0 + * @uses get_stylesheet() Defines the child theme textdomain based on the stylesheet directory. + * @global object $hybrid The global Hybrid object. + * @return string $hybrid->child_theme_textdomain The textdomain of the child theme. + */ +function hybrid_get_child_textdomain() { + global $hybrid; + + /* If a child theme isn't active, return an empty string. */ + if ( !is_child_theme() ) + return ''; + + /* If the global textdomain isn't set, define it. Plugin/theme authors may also define a custom textdomain. */ + if ( empty( $hybrid->child_textdomain ) ) + $hybrid->child_textdomain = sanitize_key( apply_filters( hybrid_get_prefix() . '_child_textdomain', get_stylesheet() ) ); + + return $hybrid->child_textdomain; +} + +/** + * Filters the 'load_textdomain_mofile' filter hook so that we can change the directory and file name + * of the mofile for translations. This allows child themes to have a folder called /languages with translations + * of their parent theme so that the translations aren't lost on a parent theme upgrade. + * + * @since 0.9.0 + * @param string $mofile File name of the .mo file. + * @param string $domain The textdomain currently being filtered. + */ +function hybrid_load_textdomain( $mofile, $domain ) { + + /* If the $domain is for the parent or child theme, search for a $domain-$locale.mo file. */ + if ( $domain == hybrid_get_textdomain() || $domain == hybrid_get_child_textdomain() ) { + + /* Check for a $domain-$locale.mo file in the parent and child theme root and /languages folder. */ + $locale = get_locale(); + $locate_mofile = locate_template( array( "languages/{$domain}-{$locale}.mo", "{$domain}-{$locale}.mo" ) ); + + /* If a mofile was found based on the given format, set $mofile to that file name. */ + if ( !empty( $locate_mofile ) ) + $mofile = $locate_mofile; + } + + /* Return the $mofile string. */ + return $mofile; +} + /** * Adds contextual action hooks to the theme. This allows users to easily add context-based content * without having to know how to use WordPress conditional tags. The theme handles the logic. @@ -57,27 +106,29 @@ function hybrid_get_textdomain() { * give extra hooks such as 'hybrid_singular_header', 'hybrid_singular-post_header', and * 'hybrid_singular-post-ID_header'. * - * Major props to Ptah Dunbar for the do_atomic() function. - * @link http://ptahdunbar.com/wordpress/smarter-hooks-context-sensitive-hooks - * - * @since 0.7 + * @since 0.7.0 * @uses hybrid_get_prefix() Gets the theme prefix. * @uses hybrid_get_context() Gets the context of the current page. * @param string $tag Usually the location of the hook but defines what the base hook is. + * @param mixed $arg,... Optional additional arguments which are passed on to the functions hooked to the action. */ -function do_atomic( $tag = '' ) { - if ( !$tag ) +function do_atomic( $tag = '', $arg = '' ) { + if ( empty( $tag ) ) return false; /* Get the theme prefix. */ $pre = hybrid_get_prefix(); + /* Get the args passed into the function and remove $tag. */ + $args = func_get_args(); + array_splice( $args, 0, 1 ); + /* Do actions on the basic hook. */ - do_action( "{$pre}_{$tag}" ); + do_action_ref_array( "{$pre}_{$tag}", $args ); /* Loop through context array and fire actions on a contextual scale. */ foreach ( (array)hybrid_get_context() as $context ) - do_action( "{$pre}_{$context}_{$tag}" ); + do_action_ref_array( "{$pre}_{$context}_{$tag}", $args ); } /** @@ -88,26 +139,31 @@ function do_atomic( $tag = '' ) { * that to give extra hooks such as 'hybrid_singular_entry_meta', 'hybrid_singular-post_entry_meta', * and 'hybrid_singular-post-ID_entry_meta'. * - * @since 0.7 + * @since 0.7.0 * @uses hybrid_get_prefix() Gets the theme prefix. * @uses hybrid_get_context() Gets the context of the current page. * @param string $tag Usually the location of the hook but defines what the base hook is. - * @param mixed $value The value to be filtered. + * @param mixed $value The value on which the filters hooked to $tag are applied on. + * @param mixed $var,... Additional variables passed to the functions hooked to $tag. * @return mixed $value The value after it has been filtered. */ function apply_atomic( $tag = '', $value = '' ) { - if ( !$tag ) + if ( empty( $tag ) ) return false; /* Get theme prefix. */ $pre = hybrid_get_prefix(); + /* Get the args passed into the function and remove $tag. */ + $args = func_get_args(); + array_splice( $args, 0, 1 ); + /* Apply filters on the basic hook. */ - $value = apply_filters( "{$pre}_{$tag}", $value ); + $value = $args[0] = apply_filters_ref_array( "{$pre}_{$tag}", $args ); /* Loop through context array and apply filters on a contextual scale. */ foreach ( (array)hybrid_get_context() as $context ) - $value = apply_filters( "{$pre}_{$context}_{$tag}", $value ); + $value = $args[0] = apply_filters_ref_array( "{$pre}_{$context}_{$tag}", $args ); /* Return the final value once all filters have been applied. */ return $value; @@ -118,7 +174,7 @@ function apply_atomic( $tag = '', $value = '' ) { * context-aware functionality alongside shortcodes. Rather than adding a lot of code to the * function itself, developers can create individual functions to handle shortcodes. * - * @since 0.7 + * @since 0.7.0 * @param string $tag Usually the location of the hook but defines what the base hook is. * @param mixed $value The value to be filtered. * @return mixed $value The value after it has been filtered. @@ -127,36 +183,11 @@ function apply_atomic_shortcode( $tag = '', $value = '' ) { return do_shortcode( apply_atomic( $tag, $value ) ); } -/** - * Loads the Hybrid theme settings once and allows the input of the specific field the user would - * like to show. Hybrid theme settings are added with 'autoload' set to 'yes', so the settings are - * only loaded once on each page load. - * - * @since 0.7 - * @uses get_option() Gets an option from the database. - * @uses hybrid_get_prefix() Gets the prefix of the theme. - * @global object $hybrid The global Hybrid object. - * @global array $hybrid_settings Deprecated. Developers should use hybrid_get_setting(). - * @param string $option The specific theme setting the user wants. - * @return string|int|array $settings[$option] Specific setting asked for. - */ -function hybrid_get_setting( $option = '' ) { - global $hybrid, $hybrid_settings; - - if ( !$option ) - return false; - - if ( !is_array( $hybrid->settings ) ) - $hybrid->settings = $hybrid_settings = get_option( hybrid_get_prefix() . '_theme_settings' ); - - return $hybrid->settings[$option]; -} - /** * The theme can save multiple things in a transient to help speed up page load times. We're * setting a default of 12 hours or 43,200 seconds (60 * 60 * 12). * - * @since 0.8 + * @since 0.8.0 * @return int Transient expiration time in seconds. */ function hybrid_get_transient_expiration() { @@ -167,7 +198,7 @@ function hybrid_get_transient_expiration() { * Function for formatting a hook name if needed. It automatically adds the theme's prefix to * the hook, and it will add a context (or any variable) if it's given. * - * @since 0.7 + * @since 0.7.0 * @param string $tag The basic name of the hook (e.g., 'before_header'). * @param string $context A specific context/value to be added to the hook. */ @@ -175,4 +206,67 @@ function hybrid_format_hook( $tag, $context = '' ) { return hybrid_get_prefix() . ( ( !empty( $context ) ) ? "_{$context}" : "" ). "_{$tag}"; } +/** + * Function for setting the content width of a theme. This does not check if a content width has been set; it + * simply overwrites whatever the content width is. + * + * @since 1.2.0 + * @global int $content_width The width for the theme's content area. + * @param int $width Numeric value of the width to set. + */ +function hybrid_set_content_width( $width = '' ) { + global $content_width; + + $content_width = absint( $width ); +} + +/** + * Function for getting the theme's content width. + * + * @since 1.2.0 + * @global int $content_width The width for the theme's content area. + * @return int $content_width + */ +function hybrid_get_content_width() { + global $content_width; + + return $content_width; +} + +/** + * Gets theme data and stores it in the global $hybrid variable. By storing it, it can be accessed quickly without + * having to run through the get_theme_data() function again. + * + * @since 1.2.0 + * @param string $path Whether to use the template (parent theme) or stylesheet (child theme) path. + */ +function hybrid_get_theme_data( $path = 'template' ) { + global $hybrid; + + /* If 'template' is requested, get the parent theme data. */ + if ( 'template' == $path ) { + + /* If the parent theme data isn't set, grab it with the get_theme_data() function. */ + if ( empty( $hybrid->theme_data ) ) + $hybrid->theme_data = get_theme_data( trailingslashit( TEMPLATEPATH ) . 'style.css' ); + + /* Return the parent theme data. */ + return $hybrid->theme_data; + } + + /* If 'stylesheet' is requested, get the child theme data. */ + elseif ( 'stylesheet' == $path ) { + + /* If the child theme data isn't set, grab it with the get_theme_data() function. */ + if ( empty( $hybrid->child_theme_data ) ) + $hybrid->child_theme_data = get_theme_data( trailingslashit( STYLESHEETPATH ) . 'style.css' ); + + /* Return the child theme data. */ + return $hybrid->child_theme_data; + } + + /* Return false for everything else. */ + return false; +} + ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/deprecated.php b/wp-content/themes/hybrid/library/functions/deprecated.php new file mode 100644 index 000000000..1279a95e7 --- /dev/null +++ b/wp-content/themes/hybrid/library/functions/deprecated.php @@ -0,0 +1,550 @@ +<?php +/** + * Deprecated functions that should be avoided in favor of newer functions. Also handles removed + * functions to avoid errors. Developers should not use these functions in their parent themes and users + * should not use these functions in their child themes. The functions below will all be removed at some + * point in a future release. If your theme is using one of these, you should use the listed alternative or + * remove it from your theme if necessary. + * + * @package HybridCore + * @subpackage Functions + */ + +/** + * @since 0.2.0 + * @deprecated 0.7.0 + */ +function hybrid_after_single() { + _deprecated_function( __FUNCTION__, '0.7', "do_atomic( 'after_singular' )" ); + hybrid_after_singular(); +} + +/** + * @since 0.2.0 + * @deprecated 0.7.0 + */ +function hybrid_after_page() { + _deprecated_function( __FUNCTION__, '0.7', "do_atomic( 'after_singular' )" ); + hybrid_after_singular(); +} + +/** + * @since 0.2.2 + * @deprecated 0.8.0 + */ +function hybrid_comment_author() { + _deprecated_function( __FUNCTION__, '0.8', 'hybrid_comment_author_shortcode()' ); + return hybrid_comment_author_shortcode(); +} + +/** + * @since 0.4.0 + * @deprecated 1.0.0 + */ +function hybrid_theme_settings() { + _deprecated_function( __FUNCTION__, '1.0.0', 'hybrid_get_default_theme_settings()' ); + return apply_filters( hybrid_get_prefix() . '_settings_args', hybrid_get_default_theme_settings() ); +} + +/** + * @since 0.4.0 + * @deprecated 1.0.0 + */ +function hybrid_doctype() { + _deprecated_function( __FUNCTION__, '1.0.0', '' ); + if ( !preg_match( "/MSIE 6.0/", esc_attr( $_SERVER['HTTP_USER_AGENT'] ) ) ) + $doctype = '<' . '?xml version="1.0" encoding="' . get_bloginfo( 'charset' ) . '"?>' . "\n"; + + $doctype .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' . "\n"; + echo apply_atomic( 'doctype', $doctype ); +} + +/** + * @since 0.4.0 + * @deprecated 1.0.0 + */ +function hybrid_meta_content_type() { + _deprecated_function( __FUNCTION__, '1.0.0', '' ); + $content_type = '<meta http-equiv="Content-Type" content="' . get_bloginfo( 'html_type' ) . '; charset=' . get_bloginfo( 'charset' ) . '" />' . "\n"; + echo apply_atomic( 'meta_content_type', $content_type ); +} + +/** + * @since 0.4.0 + * @deprecated 1.0.0 + */ +function hybrid_head_pingback() { + _deprecated_function( __FUNCTION__, '1.0.0', '' ); + $pingback = '<link rel="pingback" href="' . get_bloginfo( 'pingback_url' ) . '" />' . "\n"; + echo apply_atomic( 'head_pingback', $pingback ); +} + +/** + * @since 0.6.0 + * @deprecated 1.0.0 + */ +function hybrid_profile_uri() { + _deprecated_function( __FUNCTION__, '1.0.0', '' ); + echo apply_atomic( 'profile_uri', 'http://gmpg.org/xfn/11' ); +} + +/** + * @since 0.3.2 + * @deprecated 1.0.0 + */ +function hybrid_before_html() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_html' )" ); + do_atomic( 'before_html' ); +} + +/** + * @since 0.3.2 + * @deprecated 1.0.0 + */ +function hybrid_after_html() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_html' )" ); + do_atomic( 'after_html' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_head() { + _deprecated_function( __FUNCTION__, '1.0.0', 'wp_head' ); + do_atomic( 'head' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_before_header() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_header' )" ); + do_atomic( 'before_header' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_header() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'header' )" ); + do_atomic( 'header' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_after_header() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_header' )" ); + do_atomic( 'after_header' ); +} + +/** + * @since 0.8.0 + * @deprecated 1.0.0 + */ +function hybrid_before_primary_menu() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_primary_menu' )" ); + do_atomic( 'before_primary_menu' ); +} + +/** + * @since 0.8.0 + * @deprecated 1.0.0 + */ +function hybrid_after_primary_menu() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_primary_menu' )" ); + do_atomic( 'after_primary_menu' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_before_container() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_container' )" ); + do_atomic( 'before_container' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_before_content() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_content' )" ); + do_atomic( 'before_content' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_after_content() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_content' )" ); + do_atomic( 'after_content' ); +} + +/** + * @since 0.5.0 + * @deprecated 1.0.0 + */ +function hybrid_before_entry() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_entry' )" ); + do_atomic( 'before_entry' ); +} + +/** + * @since 0.5.0 + * @deprecated 1.0.0 + */ +function hybrid_after_entry() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_entry' )" ); + do_atomic( 'after_entry' ); +} + +/** + * @since 0.7.0 + * @deprecated 1.0.0 + */ +function hybrid_after_singular() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_singular' )" ); + + if ( is_singular( 'post' ) && !is_attachment() ) + do_action( 'hybrid_after_single' ); + elseif ( is_page() ) + do_action( 'hybrid_after_page' ); + + do_atomic( 'after_singular' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_before_primary() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_primary' )" ); + do_atomic( 'before_primary' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_after_primary() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_primary' )" ); + do_atomic( 'after_primary' ); +} + +/** + * @since 0.2.0 + * @deprecated 1.0.0 + */ +function hybrid_before_secondary() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_secondary' )" ); + do_atomic( 'before_secondary' ); +} + +/** + * @since 0.2.0 + * @deprecated 1.0.0 + */ +function hybrid_after_secondary() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_secondary' )" ); + do_atomic( 'after_secondary' ); +} + +/** + * @since 0.3.1 + * @deprecated 1.0.0 + */ +function hybrid_before_subsidiary() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_subsidiary' )" ); + do_atomic( 'before_subsidiary' ); +} + +/** + * @since 0.3.1 + * @deprecated 1.0.0 + */ +function hybrid_after_subsidiary() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_subsidiary' )" ); + do_atomic( 'after_subsidiary' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_after_container() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_container' )" ); + do_atomic( 'after_container' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_before_footer() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_footer' )" ); + do_atomic( 'before_footer' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_footer() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'footer' )" ); + do_atomic( 'footer' ); +} + +/** + * @since 0.1.0 + * @deprecated 1.0.0 + */ +function hybrid_after_footer() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_footer' )" ); + do_atomic( 'after_footer' ); +} + +/** + * @since 0.5.0 + * @deprecated 1.0.0 + */ +function hybrid_before_comment() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_comment' )" ); + do_atomic( 'before_comment' ); +} + +/** + * @since 0.5.0 + * @deprecated 1.0.0 + */ +function hybrid_after_comment() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_comment' )" ); + do_atomic( 'after_comment' ); +} + +/** + * @since 0.6.0 + * @deprecated 1.0.0 + */ +function hybrid_before_comment_list() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'before_comment_list' )" ); + do_atomic( 'before_comment_list' ); +} + +/** + * @since 0.6.0 + * @deprecated 1.0.0 + */ +function hybrid_after_comment_list() { + _deprecated_function( __FUNCTION__, '1.0.0', "do_atomic( 'after_comment_list' )" ); + do_atomic( 'after_comment_list' ); +} + +/* @deprecated 1.0.0. Backwards compatibility with old theme settings. */ +add_action( 'check_admin_referer', 'hybrid_back_compat_update_settings' ); + +/** + * Backwards compatibility function for updating child theme settings. Do not use this function or the + * available hook in development. + * + * @since 1.0.0 + * @deprecated 1.0.0 + */ +function hybrid_back_compat_update_settings( $action ) { + _deprecated_function( __FUNCTION__, '1.0.0' ); + + $prefix = hybrid_get_prefix(); + + if ( "{$prefix}_theme_settings-options" == $action ) + do_action( "{$prefix}_update_settings_page" ); +} + +/** + * @since 0.1.0 + * @deprecated 1.2.0 + */ +function hybrid_enqueue_script() { + _deprecated_function( __FUNCTION__, '1.2.0', 'hybrid_enqueue_scripts' ); + return; +} + +/** + * @since 1.0.0 + * @deprecated 1.2.0 + */ +function hybrid_admin_enqueue_style() { + _deprecated_function( __FUNCTION__, '1.2.0', 'hybrid_admin_enqueue_styles' ); + return; +} + +/** + * @since 0.7.0 + * @deprecated 1.2.0 + */ +function hybrid_settings_page_enqueue_style() { + _deprecated_function( __FUNCTION__, '1.2.0', 'hybrid_settings_page_enqueue_styles' ); + return; +} + +/** + * @since 0.7.0 + * @deprecated 1.2.0 + */ +function hybrid_settings_page_enqueue_script() { + _deprecated_function( __FUNCTION__, '1.2.0', 'hybrid_settings_page_enqueue_scripts' ); + return; +} + +/* === Removed Functions === */ + +/* Functions removed in the 0.8 branch. */ + +function hybrid_content_wrapper() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_handle_attachment() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_widget_class() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_before_ping_list() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_after_ping_list() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_pings_callback() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_pings_end_callback() { + hybrid_function_removed( __FUNCTION__ ); +} + +/* Functions removed in the 1.2 branch. */ + +function hybrid_get_comment_form() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_before_comment_form() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_after_comment_form() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_get_utility_after_single() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_get_utility_after_page() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_create_post_meta_box() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_post_meta_box_args() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_post_meta_box() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_post_meta_box_text() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_post_meta_box_select() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_post_meta_box_textarea() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_post_meta_box_radio() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_save_post_meta_box() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_create_settings_meta_boxes() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_footer_settings_meta_box() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_about_theme_meta_box() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_load_settings_page() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_page_nav() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_cat_nav() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_category_menu() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_search_form() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_post_class() { + hybrid_function_removed( __FUNCTION__ ); +} + +function is_sidebar_active() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_enqueue_style() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_add_theme_support() { + hybrid_function_removed( __FUNCTION__ ); +} + +function hybrid_post_stylesheets() { + hybrid_function_removed( __FUNCTION__ ); +} + +/** + * Message to display for removed functions. + * @since 0.5.0 + */ +function hybrid_function_removed( $func = '' ) { + die( sprintf( __( '<code>%1$s</code> — This function has been removed or replaced by another function.', hybrid_get_textdomain() ), $func ) ); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/media.php b/wp-content/themes/hybrid/library/functions/media.php index 8cd70e82a..e1d2019ec 100644 --- a/wp-content/themes/hybrid/library/functions/media.php +++ b/wp-content/themes/hybrid/library/functions/media.php @@ -1,85 +1,87 @@ <?php /** - * Functions file for loading scripts and styles. It also handles attachment files by - * displaying appropriate HTML element. Other media is handled through the theme - * extensions: get-the-image.php, get-the-object.php. + * Functions file for loading scripts and stylesheets. This file also handles the output of attachment files + * by displaying appropriate HTML elements for the attachments. * - * @package Hybrid + * @package HybridCore * @subpackage Functions */ +/* Register Hybrid Core scripts. */ +add_action( 'wp_enqueue_scripts', 'hybrid_register_scripts', 1 ); + +/* Load Hybrid Core scripts. */ +add_action( 'wp_enqueue_scripts', 'hybrid_enqueue_scripts' ); + +/* Load the development stylsheet in script debug mode. */ +add_filter( 'stylesheet_uri', 'hybrid_debug_stylesheet', 10, 2 ); + /** - * Function to load CSS at an appropriate time. Adds print.css if user chooses to use it. - * Users should load their own CSS using wp_enqueue_style() in their child theme's - * functions.php file. + * Registers JavaScript files for the framework. This function merely registers scripts with WordPress using + * the wp_register_script() function. It does not load any script files on the site. If a theme wants to register + * its own custom scripts, it should do so on the 'wp_enqueue_scripts' hook. * - * @since 0.1 - * @link http://codex.wordpress.org/Function_Reference/wp_enqueue_style + * @since 1.2.0 */ -function hybrid_enqueue_style() { - global $wp_query; - - /* If is admin, don't load styles. */ - if ( is_admin() ) - return; - - /* Get the theme prefix. */ - $prefix = hybrid_get_prefix(); +function hybrid_register_scripts() { - /* Load the print stylesheet. */ - if ( hybrid_get_setting( 'print_style' ) ) - wp_enqueue_style( "{$prefix}-print", esc_url( apply_atomic( 'print_style', THEME_CSS . '/print.css' ) ), false, 0.7, 'print' ); + /* Register the 'drop-downs' script if the current theme supports 'hybrid-core-drop-downs'. */ + if ( current_theme_supports( 'hybrid-core-drop-downs' ) ) + wp_register_script( 'drop-downs', esc_url( apply_atomic( 'drop_downs_script', trailingslashit( HYBRID_JS ) . 'drop-downs.js' ) ), array( 'jquery' ), '20110705', true ); } /** - * Function to load JavaScript at appropriate time. Loads comment reply script only if - * users choose to use nested comments. Users should load custom JavaScript with - * wp_enqueue_script() in their child theme's functions.php file. + * Tells WordPress to load the scripts needed for the framework using the wp_enqueue_script() function. * - * If selected, the drop-downs.js file will be loaded, which is a bundled version of the - * Superfish jQuery plugin. - * - * @since 0.1 - * @link http://codex.wordpress.org/Function_Reference/wp_enqueue_script - * @link http://users.tpg.com.au/j_birch/plugins/superfish + * @since 1.2.0 */ -function hybrid_enqueue_script() { - - /* Don't load any scripts in the admin. */ - if ( is_admin() ) - return; +function hybrid_enqueue_scripts() { - /* Comment reply. */ + /* Load the comment reply script on singular posts with open comments if threaded comments are supported. */ if ( is_singular() && get_option( 'thread_comments' ) && comments_open() ) wp_enqueue_script( 'comment-reply' ); - /* Superfish drop-down menus. */ - if ( hybrid_get_setting( 'superfish_js' ) ) - wp_enqueue_script( 'drop-downs', esc_url( apply_atomic( 'drop_downs_script', THEME_JS . '/drop-downs.js' ) ), array( 'jquery' ), 1.4, true ); + /* Load the 'drop-downs' script if the current theme supports 'hybrid-core-drop-downs'. */ + if ( current_theme_supports( 'hybrid-core-drop-downs' ) ) + wp_enqueue_script( 'drop-downs' ); } /** - * Disables stylesheets for particular plugins to allow the theme to easily write its own - * styles for the plugins' features. + * Function for using a debug stylesheet when developing. To develop with the debug stylesheet, + * SCRIPT_DEBUG must be set to 'true' in the 'wp-config.php' file. This will check if a 'style.dev.css' + * file is present within the theme folder and use it if it exists. Else, it defaults to 'style.css'. * - * @since 0.7 - * @link http://wordpress.org/extend/plugins/wp-pagenavi + * @since 0.9.0 */ -function hybrid_disable_styles() { - /* Deregister the WP PageNavi plugin style. */ - wp_deregister_style( 'wp-pagenavi' ); +function hybrid_debug_stylesheet( $stylesheet_uri, $stylesheet_dir_uri ) { + + /* If SCRIPT_DEBUG is set to true and the theme supports 'dev-stylesheet'. */ + if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG && current_theme_supports( 'dev-stylesheet' ) ) { + + /* Remove the stylesheet directory URI from the file name. */ + $stylesheet = str_replace( trailingslashit( $stylesheet_dir_uri ), '', $stylesheet_uri ); + + /* Change the stylesheet name to 'style.dev.css'. */ + $stylesheet = str_replace( '.css', '.dev.css', $stylesheet ); + + /* If the stylesheet exists in the stylesheet directory, set the stylesheet URI to the dev stylesheet. */ + if ( file_exists( trailingslashit( STYLESHEETPATH ) . $stylesheet ) ) + $stylesheet_uri = trailingslashit( $stylesheet_dir_uri ) . $stylesheet; + } + + /* Return the theme stylesheet. */ + return $stylesheet_uri; } /** - * Loads the correct function for handling attachments. Checks the attachment mime - * type to call correct function. Image attachments are not loaded with this function. - * The functionality for them resides in image.php. + * Loads the correct function for handling attachments. Checks the attachment mime type to call + * correct function. Image attachments are not loaded with this function. The functionality for them + * should be handled by the theme's attachment or image attachment file. * - * Ideally, all attachments would be appropriately handled within their templates. However, - * this could lead to messy template files. For now, we'll use separate functions for handling - * attachment content. The biggest issue here is with handling different video types. + * Ideally, all attachments would be appropriately handled within their templates. However, this could + * lead to messy template files. * - * @since 0.5 + * @since 0.5.0 * @uses get_post_mime_type() Gets the mime type of the attachment. * @uses wp_get_attachment_url() Gets the URL of the attachment file. */ @@ -100,45 +102,44 @@ function hybrid_attachment() { } /** - * Handles application attachments on their attachment pages. - * Uses the <object> tag to embed media on those pages. + * Handles application attachments on their attachment pages. Uses the <object> tag to embed media + * on those pages. * - * @todo Run a battery of tests on many different applications. - * @todo Figure out what to do with FLV files outside of the current functionality. - * - * @since 0.3 + * @since 0.3.0 * @param string $mime attachment mime type * @param string $file attachment file URL * @return string */ function hybrid_application_attachment( $mime = '', $file = '' ) { - $application = '<object class="text" type="' . $mime . '" data="' . $file . '" width="400">'; - $application .= '<param name="src" value="' . $file . '" />'; + $embed_defaults = wp_embed_defaults(); + $application = '<object class="text" type="' . esc_attr( $mime ) . '" data="' . esc_url( $file ) . '" width="' . esc_attr( $embed_defaults['width'] ) . '" height="' . esc_attr( $embed_defaults['height'] ) . '">'; + $application .= '<param name="src" value="' . esc_url( $file ) . '" />'; $application .= '</object>'; return $application; } /** - * Handles text attachments on their attachment pages. - * Uses the <object> element to embed media in the pages. + * Handles text attachments on their attachment pages. Uses the <object> element to embed media + * in the pages. * - * @since 0.3 + * @since 0.3.0 * @param string $mime attachment mime type * @param string $file attachment file URL * @return string */ function hybrid_text_attachment( $mime = '', $file = '' ) { - $text = '<object class="text" type="' . $mime . '" data="' . $file . '" width="400">'; - $text .= '<param name="src" value="' . $file . '" />'; + $embed_defaults = wp_embed_defaults(); + $text = '<object class="text" type="' . esc_attr( $mime ) . '" data="' . esc_url( $file ) . '" width="' . esc_attr( $embed_defaults['width'] ) . '" height="' . esc_attr( $embed_defaults['height'] ) . '">'; + $text .= '<param name="src" value="' . esc_url( $file ) . '" />'; $text .= '</object>'; return $text; } /** - * Handles audio attachments on their attachment pages. - * Puts audio/mpeg and audio/wma files into an <object> element. + * Handles audio attachments on their attachment pages. Puts audio/mpeg and audio/wma files into + * an <object> element. * * @todo Test out and support more audio types. * @@ -148,8 +149,9 @@ function hybrid_text_attachment( $mime = '', $file = '' ) { * @return string */ function hybrid_audio_attachment( $mime = '', $file = '' ) { - $audio = '<object type="' . $mime . '" class="player audio" data="' . $file . '" width="400" height="50">'; - $audio .= '<param name="src" value="' . $file . '" />'; + $embed_defaults = wp_embed_defaults(); + $audio = '<object type="' . esc_attr( $mime ) . '" class="player audio" data="' . esc_url( $file ) . '" width="' . esc_attr( $embed_defaults['width'] ) . '" height="' . esc_attr( $embed_defaults['height'] ) . '">'; + $audio .= '<param name="src" value="' . esc_url( $file ) . '" />'; $audio .= '<param name="autostart" value="false" />'; $audio .= '<param name="controller" value="true" />'; $audio .= '</object>'; @@ -158,12 +160,7 @@ function hybrid_audio_attachment( $mime = '', $file = '' ) { } /** - * Handles video attachments on attachment pages. - * Add other video types to the <object> element. - * - * In 0.6, FLV files were moved to using hybrid_application_attachment. - * - * @todo Test out and support more video types. + * Handles video attachments on attachment pages. Add other video types to the <object> element. * * @since 0.2.2 * @param string $mime attachment mime type @@ -171,11 +168,13 @@ function hybrid_audio_attachment( $mime = '', $file = '' ) { * @return string */ function hybrid_video_attachment( $mime = false, $file = false ) { + $embed_defaults = wp_embed_defaults(); + if ( $mime == 'video/asf' ) $mime = 'video/x-ms-wmv'; - $video = '<object type="' . $mime . '" class="player video" data="' . $file . '" width="400" height="320">'; - $video .= '<param name="src" value="' . $file . '" />'; + $video = '<object type="' . esc_attr( $mime ) . '" class="player video" data="' . esc_url( $file ) . '" width="' . esc_attr( $embed_defaults['width'] ) . '" height="' . esc_attr( $embed_defaults['height'] ) . '">'; + $video .= '<param name="src" value="' . esc_url( $file ) . '" />'; $video .= '<param name="autoplay" value="false" />'; $video .= '<param name="allowfullscreen" value="true" />'; $video .= '<param name="controller" value="true" />'; diff --git a/wp-content/themes/hybrid/library/functions/menus.php b/wp-content/themes/hybrid/library/functions/menus.php index f98b7d49a..3cf18956a 100644 --- a/wp-content/themes/hybrid/library/functions/menus.php +++ b/wp-content/themes/hybrid/library/functions/menus.php @@ -1,45 +1,43 @@ <?php /** - * Functions for dealing with menus and menu items within the theme. WP menu items must be - * unregistered. Hybrid menu items must be registered in their place. All menus are loaded - * and registered with WP. + * The menus functions deal with registering nav menus within WordPress for the core framework. Theme + * developers may use the default menu(s) provided by the framework within their own themes, decide not + * to use them, or register additional menus. * - * @package Hybrid + * @package HybridCore * @subpackage Functions */ -/** - * Add theme support for menus. - * @since 0.8 - */ -add_theme_support( 'menus' ); - -/** - * Register menus. - * @since 0.8 - */ +/* Register nav menus. */ add_action( 'init', 'hybrid_register_menus' ); /** - * Registers the theme's menus. + * Registers the the framework's default menus based on the menus the theme has registered support for. * - * @since 0.8 - * @uses is_nav_menu() Checks if a menu exists. - * @uses locate_template() Checks for template in child and parent theme. + * @since 0.8.0 + * @uses register_nav_menu() Registers a nav menu with WordPress. + * @link http://codex.wordpress.org/Function_Reference/register_nav_menu */ function hybrid_register_menus() { - register_nav_menu( 'primary-menu', __( 'Primary Menu', hybrid_get_textdomain() ) ); -} -/** - * Loads the 'Primary Menu' template file. Users can overwrite menu-primary.php in their child - * theme folder. - * - * @since 0.8 - * @uses locate_template() Checks for template in child and parent theme. - */ -function hybrid_get_primary_menu() { - locate_template( array( 'menu-primary.php', 'menu.php' ), true ); + /* Get theme-supported menus. */ + $menus = get_theme_support( 'hybrid-core-menus' ); + + /* If there is no array of menus IDs, return. */ + if ( !is_array( $menus[0] ) ) + return; + + /* Register the 'primary' menu. */ + if ( in_array( 'primary', $menus[0] ) ) + register_nav_menu( 'primary', _x( 'Primary', 'nav menu location', hybrid_get_textdomain() ) ); + + /* Register the 'secondary' menu. */ + if ( in_array( 'secondary', $menus[0] ) ) + register_nav_menu( 'secondary', _x( 'Secondary', 'nav menu location', hybrid_get_textdomain() ) ); + + /* Register the 'subsidiary' menu. */ + if ( in_array( 'subsidiary', $menus[0] ) ) + register_nav_menu( 'subsidiary', _x( 'Subsidiary', 'nav menu location', hybrid_get_textdomain() ) ); } ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/settings.php b/wp-content/themes/hybrid/library/functions/settings.php new file mode 100644 index 000000000..b9ef0e3bd --- /dev/null +++ b/wp-content/themes/hybrid/library/functions/settings.php @@ -0,0 +1,81 @@ +<?php +/** + * Functions for dealing with theme settings on both the front end of the site and the admin. This allows us + * to set some default settings and make it easy for theme developers to quickly grab theme settings from + * the database. This file is only loaded if the theme adds support for the 'hybrid-core-theme-settings' + * feature. + * + * @package HybridCore + * @subpackage Functions + */ + +/** + * Loads the Hybrid theme settings once and allows the input of the specific field the user would + * like to show. Hybrid theme settings are added with 'autoload' set to 'yes', so the settings are + * only loaded once on each page load. + * + * @since 0.7.0 + * @uses get_option() Gets an option from the database. + * @uses hybrid_get_prefix() Gets the prefix of the theme. + * @global object $hybrid The global Hybrid object. + * @param string $option The specific theme setting the user wants. + * @return string|int|array $settings[$option] Specific setting asked for. + */ +function hybrid_get_setting( $option = '' ) { + global $hybrid; + + /* If no specific option was requested, return false. */ + if ( !$option ) + return false; + + /* If the settings array hasn't been set, call get_option() to get an array of theme settings. */ + if ( !isset( $hybrid->settings ) ) + $hybrid->settings = get_option( hybrid_get_prefix() . '_theme_settings', hybrid_get_default_theme_settings() ); + + /* If the settings isn't an array or the specific option isn't in the array, return false. */ + if ( !is_array( $hybrid->settings ) || empty( $hybrid->settings[$option] ) ) + return false; + + /* If the specific option is an array, return it. */ + if ( is_array( $hybrid->settings[$option] ) ) + return $hybrid->settings[$option]; + + /* Strip slashes from the setting and return. */ + else + return wp_kses_stripslashes( $hybrid->settings[$option] ); +} + +/** + * Sets up a default array of theme settings for use with the theme. Theme developers should filter the + * "{$prefix}_default_theme_settings" hook to define any default theme settings. WordPress does not + * provide a hook for default settings at this time. + * + * @since 1.0.0 + */ +function hybrid_get_default_theme_settings() { + + /* Set up some default variables. */ + $settings = array(); + $domain = hybrid_get_textdomain(); + $prefix = hybrid_get_prefix(); + + /* Get theme-supported meta boxes for the settings page. */ + $supports = get_theme_support( 'hybrid-core-theme-settings' ); + + /* If the current theme supports the footer meta box and shortcodes, add default footer settings. */ + if ( is_array( $supports[0] ) && in_array( 'footer', $supports[0] ) && current_theme_supports( 'hybrid-core-shortcodes' ) ) { + + /* If there is a child theme active, add the [child-link] shortcode to the $footer_insert. */ + if ( is_child_theme() ) + $settings['footer_insert'] = '<p class="copyright">' . __( 'Copyright © [the-year] [site-link].', $domain ) . '</p>' . "\n\n" . '<p class="credit">' . __( 'Powered by [wp-link], [theme-link], and [child-link].', $domain ) . '</p>'; + + /* If no child theme is active, leave out the [child-link] shortcode. */ + else + $settings['footer_insert'] = '<p class="copyright">' . __( 'Copyright © [the-year] [site-link].', $domain ) . '</p>' . "\n\n" . '<p class="credit">' . __( 'Powered by [wp-link] and [theme-link].', $domain ) . '</p>'; + } + + /* Return the $settings array and provide a hook for overwriting the default settings. */ + return apply_filters( "{$prefix}_default_theme_settings", $settings ); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/shortcodes.php b/wp-content/themes/hybrid/library/functions/shortcodes.php index d179a9544..561692976 100644 --- a/wp-content/themes/hybrid/library/functions/shortcodes.php +++ b/wp-content/themes/hybrid/library/functions/shortcodes.php @@ -1,22 +1,22 @@ <?php /** - * Shortcodes bundled for use with the theme. These shortcodes can be used in any shortcode-ready - * area, which includes posts, pages, and various Hybrid theme areas. + * Shortcodes bundled for use with themes. These shortcodes can be used in any shortcode-ready area, + * which includes the post content area. Themes may optionally make alternate shortcode-aware areas + * where these shortcodes may be used. Note that some shortcodes are specific to posts and comments + * and would be useless outside of the post and comment loops. * - * @package Hybrid + * @package HybridCore * @subpackage Functions */ -/** - * Register shortcodes. - * @since 0.8 - */ +/* Register shortcodes. */ add_action( 'init', 'hybrid_add_shortcodes' ); /** - * Creates new shortcodes for use in any shortcode-ready area. + * Creates new shortcodes for use in any shortcode-ready area. This function uses the add_shortcode() + * function to register new shortcodes with WordPress. * - * @since 0.8 + * @since 0.8.0 * @uses add_shortcode() to create new shortcodes. * @link http://codex.wordpress.org/Shortcode_API */ @@ -52,7 +52,7 @@ function hybrid_add_shortcodes() { /** * Shortcode to display the current year. * - * @since 0.6 + * @since 0.6.0 * @uses date() Gets the current year. */ function hybrid_the_year_shortcode() { @@ -62,47 +62,48 @@ function hybrid_the_year_shortcode() { /** * Shortcode to display a link back to the site. * - * @since 0.6 + * @since 0.6.0 * @uses get_bloginfo() Gets information about the install. */ function hybrid_site_link_shortcode() { - return '<a class="site-link" href="' . home_url() . '" title="' . get_bloginfo( 'name' ) . '" rel="home"><span>' . get_bloginfo( 'name' ) . '</span></a>'; + return '<a class="site-link" href="' . home_url() . '" title="' . esc_attr( get_bloginfo( 'name' ) ) . '" rel="home"><span>' . get_bloginfo( 'name' ) . '</span></a>'; } /** * Shortcode to display a link to WordPress.org. - * @since 0.6 + * + * @since 0.6.0 */ function hybrid_wp_link_shortcode() { - return '<a class="wp-link" href="http://wordpress.org" title="' . __( 'Powered by WordPress, state-of-the-art semantic personal publishing platform', hybrid_get_textdomain() ) . '"><span>' . __( 'WordPress', hybrid_get_textdomain() ) . '</span></a>'; + return '<a class="wp-link" href="http://wordpress.org" title="' . esc_attr__( 'Powered by WordPress, state-of-the-art semantic personal publishing platform', hybrid_get_textdomain() ) . '"><span>' . __( 'WordPress', hybrid_get_textdomain() ) . '</span></a>'; } /** * Shortcode to display a link to the Hybrid theme page. * - * @since 0.6 + * @since 0.6.0 * @uses get_theme_data() Gets theme (parent theme) information. */ function hybrid_theme_link_shortcode() { - $data = get_theme_data( TEMPLATEPATH . '/style.css' ); + $data = hybrid_get_theme_data(); return '<a class="theme-link" href="' . esc_url( $data['URI'] ) . '" title="' . esc_attr( $data['Name'] ) . '"><span>' . esc_attr( $data['Name'] ) . '</span></a>'; } /** * Shortcode to display a link to the child theme's page. * - * @since 0.6 + * @since 0.6.0 * @uses get_theme_data() Gets theme (child theme) information. */ function hybrid_child_link_shortcode() { - $data = get_theme_data( STYLESHEETPATH . '/style.css' ); - return '<a class="child-link" href="' . esc_url( $data['URI'] ) . '" title="' . esc_attr( $data['Name'] ) . '"><span>' . esc_attr( $data['Name'] ) . '</span></a>'; + $data = hybrid_get_theme_data( 'stylesheet' ); + return '<a class="child-link" href="' . esc_url( $data['URI'] ) . '" title="' . esc_attr( $data['Name'] ) . '"><span>' . esc_html( $data['Name'] ) . '</span></a>'; } /** * Shortcode to display a login link or logout link. * - * @since 0.6 + * @since 0.6.0 * @uses is_user_logged_in() Checks if the current user is logged into the site. * @uses wp_logout_url() Creates a logout URL. * @uses wp_login_url() Creates a login URL. @@ -110,9 +111,9 @@ function hybrid_child_link_shortcode() { function hybrid_loginout_link_shortcode() { $domain = hybrid_get_textdomain(); if ( is_user_logged_in() ) - $out = '<a class="logout-link" href="' . wp_logout_url( esc_url( $_SERVER['HTTP_REFERER'] ) ) . '" title="' . __( 'Log out of this account', $domain ) . '">' . __( 'Log out', $domain ) . '</a>'; + $out = '<a class="logout-link" href="' . esc_url( wp_logout_url( site_url( $_SERVER['REQUEST_URI'] ) ) ) . '" title="' . esc_attr__( 'Log out of this account', $domain ) . '">' . __( 'Log out', $domain ) . '</a>'; else - $out = '<a class="login-link" href="' . wp_login_url( esc_url( $_SERVER['HTTP_REFERER'] ) ) . '" title="' . __( 'Log into this account', $domain ) . '">' . __( 'Log in', $domain ) . '</a>'; + $out = '<a class="login-link" href="' . esc_url( wp_login_url( site_url( $_SERVER['REQUEST_URI'] ) ) ) . '" title="' . esc_attr__( 'Log into this account', $domain ) . '">' . __( 'Log in', $domain ) . '</a>'; return $out; } @@ -120,19 +121,19 @@ function hybrid_loginout_link_shortcode() { /** * Displays query count and load time if the current user can edit themes. * - * @since 0.6 + * @since 0.6.0 * @uses current_user_can() Checks if the current user can edit themes. */ function hybrid_query_counter_shortcode() { - if ( current_user_can( 'edit_themes' ) ) - $out = sprintf( __( 'This page loaded in %1$s seconds with %2$s database queries.', hybrid_get_textdomain() ), timer_stop( 0, 3 ), get_num_queries() ); - return $out; + if ( current_user_can( 'edit_theme_options' ) ) + return sprintf( __( 'This page loaded in %1$s seconds with %2$s database queries.', hybrid_get_textdomain() ), timer_stop( 0, 3 ), get_num_queries() ); + return ''; } /** * Displays a nav menu that has been created from the Menus screen in the admin. * - * @since 0.8 + * @since 0.8.0 * @uses wp_nav_menu() Displays the nav menu. */ function hybrid_nav_menu_shortcode( $attr ) { @@ -162,7 +163,7 @@ function hybrid_nav_menu_shortcode( $attr ) { /** * Displays the edit link for an individual post. * - * @since 0.7 + * @since 0.7.0 * @param array $attr */ function hybrid_entry_edit_link_shortcode( $attr ) { @@ -171,50 +172,51 @@ function hybrid_entry_edit_link_shortcode( $attr ) { $domain = hybrid_get_textdomain(); $post_type = get_post_type_object( $post->post_type ); - if ( !current_user_can( "edit_{$post_type->capability_type}", $post->ID ) ) + if ( !current_user_can( $post_type->cap->edit_post, $post->ID ) ) return ''; $attr = shortcode_atts( array( 'before' => '', 'after' => '' ), $attr ); - return $attr['before'] . '<span class="edit"><a class="post-edit-link" href="' . get_edit_post_link( $post->ID ) . '" title="' . sprintf( __( 'Edit %1$s', $domain ), $post->post_type ) . '">' . __( 'Edit', $domain ) . '</a></span>' . $attr['after']; + return $attr['before'] . '<span class="edit"><a class="post-edit-link" href="' . esc_url( get_edit_post_link( $post->ID ) ) . '" title="' . sprintf( esc_attr__( 'Edit %1$s', $domain ), $post_type->labels->singular_name ) . '">' . __( 'Edit', $domain ) . '</a></span>' . $attr['after']; } /** * Displays the published date of an individual post. * - * @since 0.7 + * @since 0.7.0 * @param array $attr */ function hybrid_entry_published_shortcode( $attr ) { $domain = hybrid_get_textdomain(); $attr = shortcode_atts( array( 'before' => '', 'after' => '', 'format' => get_option( 'date_format' ) ), $attr ); - $published = '<abbr class="published" title="' . sprintf( get_the_time( __( 'l, F jS, Y, g:i a', $domain ) ) ) . '">' . sprintf( get_the_time( $attr['format'] ) ) . '</abbr>'; + $published = '<abbr class="published" title="' . sprintf( get_the_time( esc_attr__( 'l, F jS, Y, g:i a', $domain ) ) ) . '">' . sprintf( get_the_time( $attr['format'] ) ) . '</abbr>'; return $attr['before'] . $published . $attr['after']; } /** * Displays a post's number of comments wrapped in a link to the comments area. * - * @since 0.7 + * @since 0.7.0 * @param array $attr */ function hybrid_entry_comments_link_shortcode( $attr ) { $domain = hybrid_get_textdomain(); - $number = get_comments_number(); - $attr = shortcode_atts( array( 'zero' => __( 'Leave a response', $domain ), 'one' => __( '1 Response', $domain ), 'more' => __( '%1$s Responses', $domain ), 'css_class' => 'comments-link', 'none' => '', 'before' => '', 'after' => '' ), $attr ); + $comments_link = ''; + $number = doubleval( get_comments_number() ); + $attr = shortcode_atts( array( 'zero' => __( 'Leave a response', $domain ), 'one' => __( '%1$s Response', $domain ), 'more' => __( '%1$s Responses', $domain ), 'css_class' => 'comments-link', 'none' => '', 'before' => '', 'after' => '' ), $attr ); if ( 0 == $number && !comments_open() && !pings_open() ) { if ( $attr['none'] ) - $comments_link = '<span class="' . esc_attr( $attr['css_class'] ) . '">' . $attr['none'] . '</span>'; + $comments_link = '<span class="' . esc_attr( $attr['css_class'] ) . '">' . sprintf( $attr['none'], number_format_i18n( $number ) ) . '</span>'; } - elseif ( $number == 0 ) - $comments_link = '<a class="' . esc_attr( $attr['css_class'] ) . '" href="' . get_permalink() . '#respond" title="' . sprintf( __( 'Comment on %1$s', $domain ), the_title_attribute( 'echo=0' ) ) . '">' . $attr['zero'] . '</a>'; - elseif ( $number == 1 ) - $comments_link = '<a class="' . esc_attr( $attr['css_class'] ) . '" href="' . get_comments_link() . '" title="' . sprintf( __( 'Comment on %1$s', $domain ), the_title_attribute( 'echo=0' ) ) . '">' . $attr['one'] . '</a>'; - elseif ( $number > 1 ) - $comments_link = '<a class="' . esc_attr( $attr['css_class'] ) . '" href="' . get_comments_link() . '" title="' . sprintf( __( 'Comment on %1$s', $domain ), the_title_attribute( 'echo=0' ) ) . '">' . sprintf( $attr['more'], $number ) . '</a>'; + elseif ( 0 == $number ) + $comments_link = '<a class="' . esc_attr( $attr['css_class'] ) . '" href="' . get_permalink() . '#respond" title="' . sprintf( esc_attr__( 'Comment on %1$s', $domain ), the_title_attribute( 'echo=0' ) ) . '">' . sprintf( $attr['zero'], number_format_i18n( $number ) ) . '</a>'; + elseif ( 1 == $number ) + $comments_link = '<a class="' . esc_attr( $attr['css_class'] ) . '" href="' . get_comments_link() . '" title="' . sprintf( esc_attr__( 'Comment on %1$s', $domain ), the_title_attribute( 'echo=0' ) ) . '">' . sprintf( $attr['one'], number_format_i18n( $number ) ) . '</a>'; + elseif ( 1 < $number ) + $comments_link = '<a class="' . esc_attr( $attr['css_class'] ) . '" href="' . get_comments_link() . '" title="' . sprintf( esc_attr__( 'Comment on %1$s', $domain ), the_title_attribute( 'echo=0' ) ) . '">' . sprintf( $attr['more'], number_format_i18n( $number ) ) . '</a>'; if ( $comments_link ) $comments_link = $attr['before'] . $comments_link . $attr['after']; @@ -225,19 +227,19 @@ function hybrid_entry_comments_link_shortcode( $attr ) { /** * Displays an individual post's author with a link to his or her archive. * - * @since 0.7 + * @since 0.7.0 * @param array $attr */ function hybrid_entry_author_shortcode( $attr ) { $attr = shortcode_atts( array( 'before' => '', 'after' => '' ), $attr ); - $author = '<span class="author vcard"><a class="url fn n" href="' . get_author_posts_url( get_the_author_meta( 'ID' ) ) . '" title="' . get_the_author_meta( 'display_name' ) . '">' . get_the_author_meta( 'display_name' ) . '</a></span>'; + $author = '<span class="author vcard"><a class="url fn n" href="' . esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ) . '" title="' . esc_attr( get_the_author_meta( 'display_name' ) ) . '">' . get_the_author_meta( 'display_name' ) . '</a></span>'; return $attr['before'] . $author . $attr['after']; } /** * Displays a list of terms for a specific taxonomy. * - * @since 0.7 + * @since 0.7.0 * @param array $attr */ function hybrid_entry_terms_shortcode( $attr ) { @@ -245,8 +247,8 @@ function hybrid_entry_terms_shortcode( $attr ) { $attr = shortcode_atts( array( 'id' => $post->ID, 'taxonomy' => 'post_tag', 'separator' => ', ', 'before' => '', 'after' => '' ), $attr ); - $attr['before'] = '<span class="' . $attr['taxonomy'] . '">' . $attr['before']; - $attr['after'] .= '</span>'; + $attr['before'] = ( empty( $attr['before'] ) ? '<span class="' . $attr['taxonomy'] . '">' : '<span class="' . $attr['taxonomy'] . '"><span class="before">' . $attr['before'] . '</span>' ); + $attr['after'] = ( empty( $attr['after'] ) ? '</span>' : '<span class="after">' . $attr['after'] . '</span></span>' ); return get_the_term_list( $attr['id'], $attr['taxonomy'], $attr['before'], $attr['separator'], $attr['after'] ); } @@ -254,16 +256,16 @@ function hybrid_entry_terms_shortcode( $attr ) { /** * Displays a post's title with a link to the post. * - * @since 0.7 + * @since 0.7.0 */ function hybrid_entry_title_shortcode() { global $post; if ( is_front_page() && !is_home() ) - $title = the_title( '<h2 class="' . $post->post_type . '-title entry-title"><a href="' . get_permalink() . '" title="' . the_title_attribute( 'echo=0' ) . '" rel="bookmark">', '</a></h2>', false ); + $title = the_title( '<h2 class="' . esc_attr( $post->post_type ) . '-title entry-title"><a href="' . get_permalink() . '" title="' . the_title_attribute( 'echo=0' ) . '" rel="bookmark">', '</a></h2>', false ); elseif ( is_singular() ) - $title = the_title( '<h1 class="' . $post->post_type . '-title entry-title"><a href="' . get_permalink() . '" title="' . the_title_attribute( 'echo=0' ) . '" rel="bookmark">', '</a></h1>', false ); + $title = the_title( '<h1 class="' . esc_attr( $post->post_type ) . '-title entry-title"><a href="' . get_permalink() . '" title="' . the_title_attribute( 'echo=0' ) . '" rel="bookmark">', '</a></h1>', false ); elseif ( 'link_category' == get_query_var( 'taxonomy' ) ) $title = false; @@ -271,13 +273,17 @@ function hybrid_entry_title_shortcode() { else $title = the_title( '<h2 class="entry-title"><a href="' . get_permalink() . '" title="' . the_title_attribute( 'echo=0' ) . '" rel="bookmark">', '</a></h2>', false ); + /* If there's no post title, return a clickable '(No title)'. */ + if ( empty( $title ) && !is_singular() && 'link_category' !== get_query_var( 'taxonomy' ) ) + $title = '<h2 class="entry-title no-entry-title"><a href="' . get_permalink() . '" rel="bookmark">' . __( '(Untitled)', hybrid_get_textdomain() ) . '</a></h2>'; + return $title; } /** * Displays the shortlinke of an individual entry. * - * @since 0.8 + * @since 0.8.0 */ function hybrid_entry_shortlink_shortcode( $attr ) { global $post; @@ -294,65 +300,73 @@ function hybrid_entry_shortlink_shortcode( $attr ) { $attr ); - $shortlink = wp_get_shortlink( $post->ID ); + $shortlink = esc_url( wp_get_shortlink( $post->ID ) ); - return "{$attr['before']}<a class='shortlink' href='{$shortlink}' title='{$attr['title']}' rel='shortlink'>{$attr['text']}</a>{$attr['after']}"; + return "{$attr['before']}<a class='shortlink' href='{$shortlink}' title='" . esc_attr( $attr['title'] ) . "' rel='shortlink'>{$attr['text']}</a>{$attr['after']}"; } /** * Displays the published date and time of an individual comment. * - * @since 0.7 + * @since 0.7.0 */ function hybrid_comment_published_shortcode() { $domain = hybrid_get_textdomain(); - $link = '<span class="published">' . sprintf( __( '%1$s at %2$s', $domain ), '<abbr class="comment-date" title="' . get_comment_date( __( 'l, F jS, Y, g:i a', $domain ) ) . '">' . get_comment_date() . '</abbr>', '<abbr class="comment-time" title="' . get_comment_date( __( 'l, F jS, Y, g:i a', $domain ) ) . '">' . get_comment_time() . '</abbr>' ) . '</span>'; + $link = '<span class="published">' . sprintf( __( '%1$s at %2$s', $domain ), '<abbr class="comment-date" title="' . get_comment_date( esc_attr__( 'l, F jS, Y, g:i a', $domain ) ) . '">' . get_comment_date() . '</abbr>', '<abbr class="comment-time" title="' . get_comment_date( esc_attr__( 'l, F jS, Y, g:i a', $domain ) ) . '">' . get_comment_time() . '</abbr>' ) . '</span>'; return $link; } /** * Displays the comment author of an individual comment. * - * @since 0.8 + * @since 0.8.0 * @global $comment The current comment's DB object. * @return string */ function hybrid_comment_author_shortcode( $attr ) { global $comment; - $attr = shortcode_atts( array( 'before' => '', 'after' => '' ), $attr ); + $attr = shortcode_atts( + array( + 'before' => '', + 'after' => '', + 'tag' => 'span' // @deprecated 1.2.0 Back-compatibility. Please don't use this argument. + ), + $attr + ); $author = esc_html( get_comment_author( $comment->comment_ID ) ); $url = esc_url( get_comment_author_url( $comment->comment_ID ) ); /* Display link and cite if URL is set. Also, properly cites trackbacks/pingbacks. */ if ( $url ) - $output = '<cite class="fn" title="' . $url . '"><a href="' . $url . '" title="' . $author . '" class="url" rel="external nofollow">' . $author . '</a></cite>'; + $output = '<cite class="fn" title="' . $url . '"><a href="' . $url . '" title="' . esc_attr( $author ) . '" class="url" rel="external nofollow">' . $author . '</a></cite>'; else $output = '<cite class="fn">' . $author . '</cite>'; - $output = '<div class="comment-author vcard">' . $attr['before'] . apply_filters( 'get_comment_author_link', $output ) . $attr['after'] . '</div><!-- .comment-author .vcard -->'; + $output = '<' . tag_escape( $attr['tag'] ) . ' class="comment-author vcard">' . $attr['before'] . apply_filters( 'get_comment_author_link', $output ) . $attr['after'] . '</' . tag_escape( $attr['tag'] ) . '><!-- .comment-author .vcard -->'; - /* @deprecated 0.8. Create a custom shortcode instead of filtering hybrid_comment_author. */ - return apply_filters( "{$hybrid->prefix}_comment_author", $output ); + return $output; } /** * Displays the permalink to an individual comment. * - * @since 0.7 + * @since 0.7.0 */ function hybrid_comment_permalink_shortcode( $attr ) { + global $comment; + $attr = shortcode_atts( array( 'before' => '', 'after' => '' ), $attr ); $domain = hybrid_get_textdomain(); - $link = '<a class="permalink" href="' . get_comment_link( $comment->comment_ID ) . '" title="' . sprintf( __( 'Permalink to comment %1$s', $domain ), $comment->comment_ID ) . '">' . __( 'Permalink', $domain ) . '</a>'; + $link = '<a class="permalink" href="' . esc_url( get_comment_link( $comment->comment_ID ) ) . '" title="' . sprintf( esc_attr__( 'Permalink to comment %1$s', $domain ), $comment->comment_ID ) . '">' . __( 'Permalink', $domain ) . '</a>'; return $attr['before'] . $link . $attr['after']; } /** * Displays a comment's edit link to users that have the capability to edit the comment. * - * @since 0.7 + * @since 0.7.0 */ function hybrid_comment_edit_link_shortcode( $attr ) { global $comment; @@ -365,7 +379,7 @@ function hybrid_comment_edit_link_shortcode( $attr ) { $attr = shortcode_atts( array( 'before' => '', 'after' => '' ), $attr ); $domain = hybrid_get_textdomain(); - $link = '<a class="comment-edit-link" href="' . $edit_link . '" title="' . sprintf( __( 'Edit %1$s', $domain ), $comment->comment_type ) . '"><span class="edit">' . __( 'Edit', $domain ) . '</span></a>'; + $link = '<a class="comment-edit-link" href="' . esc_url( $edit_link ) . '" title="' . sprintf( esc_attr__( 'Edit %1$s', $domain ), $comment->comment_type ) . '"><span class="edit">' . __( 'Edit', $domain ) . '</span></a>'; $link = apply_filters( 'edit_comment_link', $link, $comment->comment_ID ); return $attr['before'] . $link . $attr['after']; @@ -374,7 +388,7 @@ function hybrid_comment_edit_link_shortcode( $attr ) { /** * Displays a reply link for the 'comment' comment_type if threaded comments are enabled. * - * @since 0.7 + * @since 0.7.0 */ function hybrid_comment_reply_link_shortcode( $attr ) { $domain = hybrid_get_textdomain(); @@ -385,7 +399,7 @@ function hybrid_comment_reply_link_shortcode( $attr ) { $defaults = array( 'reply_text' => __( 'Reply', $domain ), 'login_text' => __( 'Log in to reply.', $domain ), - 'depth' => $GLOBALS['comment_depth'], + 'depth' => intval( $GLOBALS['comment_depth'] ), 'max_depth' => get_option( 'thread_comments_depth' ), 'before' => '', 'after' => '' diff --git a/wp-content/themes/hybrid/library/functions/sidebars.php b/wp-content/themes/hybrid/library/functions/sidebars.php new file mode 100644 index 000000000..2f35c3eb5 --- /dev/null +++ b/wp-content/themes/hybrid/library/functions/sidebars.php @@ -0,0 +1,109 @@ +<?php +/** + * Sets up the default framework sidebars if the theme supports them. By default, the framework registers + * seven sidebars. Themes may choose to use one or more of these sidebars. A theme must register support + * for 'hybrid-core-sidebars' to use them and register each sidebar ID within an array for the second + * parameter of add_theme_support(). + * + * @package HybridCore + * @subpackage Functions + */ + +/* Register widget areas. */ +add_action( 'widgets_init', 'hybrid_register_sidebars' ); + +/** + * Registers the default framework dynamic sidebars based on the sidebars the theme has added support + * for using add_theme_support(). + * + * @since 0.7.0 + * @uses register_sidebar() Registers a sidebar with WordPress. + * @link http://codex.wordpress.org/Function_Reference/register_sidebar + */ +function hybrid_register_sidebars() { + + /* Get the theme-supported sidebars. */ + $supported_sidebars = get_theme_support( 'hybrid-core-sidebars' ); + + /* If the theme doesn't add support for any sidebars, return. */ + if ( !is_array( $supported_sidebars[0] ) ) + return; + + /* Get the available core framework sidebars. */ + $core_sidebars = hybrid_get_sidebars(); + + /* Loop through the supported sidebars. */ + foreach ( $supported_sidebars[0] as $sidebar ) { + + /* Make sure the given sidebar is one of the core sidebars. */ + if ( isset( $core_sidebars[$sidebar] ) ) { + + /* Set up some default sidebar arguments. */ + $defaults = array( + 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-wrap widget-inside">', + 'after_widget' => '</div></div>', + 'before_title' => '<h3 class="widget-title">', + 'after_title' => '</h3>' + ); + + /* Parse the sidebar arguments and defaults. */ + $args = wp_parse_args( $core_sidebars[$sidebar], $defaults ); + + /* If no 'id' was given, use the $sidebar variable and sanitize it. */ + $args['id'] = ( isset( $args['id'] ) ? sanitize_key( $args['id'] ) : sanitize_key( $sidebar ) ); + + /* Register the sidebar. */ + register_sidebar( $args ); + } + } +} + +/** + * Returns an array of the core framework's available sidebars for use in themes. We'll just set the + * ID (array keys), name, and description of each sidebar. The other sidebar arguments will be set when the + * sidebar is registered. + * + * @since 1.2.0 + */ +function hybrid_get_sidebars() { + + /* Get the theme textdomain. */ + $domain = hybrid_get_textdomain(); + + /* Set up an array of sidebars. */ + $sidebars = array( + 'primary' => array( + 'name' => _x( 'Primary', 'sidebar', $domain ), + 'description' => __( 'The main (primary) widget area, most often used as a sidebar.', $domain ) + ), + 'secondary' => array( + 'name' => _x( 'Secondary', 'sidebar', $domain ), + 'description' => __( 'The second most important widget area, most often used as a secondary sidebar.', $domain ), + ), + 'subsidiary' => array( + 'name' => _x( 'Subsidiary', 'sidebar', $domain ), + 'description' => __( 'A widget area loaded in the footer of the site.', $domain ), + ), + 'header' => array( + 'name' => _x( 'Header', 'sidebar', $domain ), + 'description' => __( 'Displayed within the site\'s header area.', $domain ), + ), + 'before-content' => array( + 'name' => _x( 'Before Content', 'sidebar', $domain ), + 'description' => __( 'Loaded before the page\'s main content area.', $domain ), + ), + 'after-content' => array( + 'name' => _x( 'After Content', 'sidebar', $domain ), + 'description' => __( 'Loaded after the page\'s main content area.', $domain ), + ), + 'after-singular' => array( + 'name' => _x( 'After Singular', 'sidebar', $domain ), + 'description' => __( 'Loaded on singular post (page, attachment, etc.) views before the comments area.', $domain ), + ) + ); + + /* Return the sidebars. */ + return $sidebars; +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/template-hierarchy.php b/wp-content/themes/hybrid/library/functions/template-hierarchy.php new file mode 100644 index 000000000..bcd995699 --- /dev/null +++ b/wp-content/themes/hybrid/library/functions/template-hierarchy.php @@ -0,0 +1,198 @@ +<?php +/** + * The framework has its own template hierarchy that can be used instead of the default WordPress + * template hierarchy. It is not much different than the default. It was built to extend the default by + * making it smarter and more flexible. The goal is to give theme developers and end users an + * easy-to-override system that doesn't involve massive amounts of conditional tags within files. + * + * @package HybridCore + * @subpackage Functions + */ + +/* Filter the date template. */ +add_filter( 'date_template', 'hybrid_date_template' ); + +/* Filter the author/user template. */ +add_filter( 'author_template', 'hybrid_user_template' ); + +/* Filter the tag and category (taxonomy) templates. */ +add_filter( 'tag_template', 'hybrid_taxonomy_template' ); +add_filter( 'category_template', 'hybrid_taxonomy_template' ); + +/* Filter the single, page, and attachment (singular) templates. */ +add_filter( 'single_template', 'hybrid_singular_template' ); +add_filter( 'page_template', 'hybrid_singular_template' ); +add_filter( 'attachment_template', 'hybrid_singular_template' ); + +/** + * Overrides WP's default template for date-based archives. Better abstraction of templates than + * is_date() allows by checking for the year, month, week, day, hour, and minute. + * + * @since 0.6.0 + * @uses locate_template() Checks for template in child and parent theme. + * @param string $template + * @return string $template Full path to file. + */ +function hybrid_date_template( $template ) { + $templates = array(); + + /* If viewing a time-based archive. */ + if ( is_time() ) { + + /* If viewing a minutely archive. */ + if ( get_query_var( 'minute' ) ) + $templates[] = 'minute.php'; + + /* If viewing an hourly archive. */ + elseif ( get_query_var( 'hour' ) ) + $templates[] = 'hour.php'; + + /* Catchall for any time-based archive. */ + $templates[] = 'time.php'; + } + + /* If viewing a daily archive. */ + elseif ( is_day() ) + $templates[] = 'day.php'; + + /* If viewing a weekly archive. */ + elseif ( get_query_var( 'w' ) ) + $templates[] = 'week.php'; + + /* If viewing a monthly archive. */ + elseif ( is_month() ) + $templates[] = 'month.php'; + + /* If viewing a yearly archive. */ + elseif ( is_year() ) + $templates[] = 'year.php'; + + /* Catchall template for date-based archives. */ + $templates[] = 'date.php'; + + /* Fall back to the basic archive template. */ + $templates[] = 'archive.php'; + + /* Return the found template. */ + return locate_template( $templates ); +} + +/** + * Overrides WP's default template for author-based archives. Better abstraction of templates than + * is_author() allows by allowing themes to specify templates for a specific author. The hierarchy is + * user-$nicename.php, $user-role-$role.php, user.php, author.php, archive.php. + * + * @since 0.7.0 + * @uses locate_template() Checks for template in child and parent theme. + * @param string $template + * @return string Full path to file. + */ +function hybrid_user_template( $template ) { + $templates = array(); + + /* Get the user nicename. */ + $name = get_the_author_meta( 'user_nicename', get_query_var( 'author' ) ); + + /* Get the user object. */ + $user = new WP_User( absint( get_query_var( 'author' ) ) ); + + /* Add the user nicename template. */ + $templates[] = "user-{$name}.php"; + + /* Add role-based templates for the user. */ + if ( is_array( $user->roles ) ) { + foreach ( $user->roles as $role ) + $templates[] = "user-role-{$role}.php"; + } + + /* Add a basic user template. */ + $templates[] = 'user.php'; + + /* Add backwards compatibility with the WordPress author template. */ + $templates[] = 'author.php'; + + /* Fall back to the basic archive template. */ + $templates[] = 'archive.php'; + + /* Return the found template. */ + return locate_template( $templates ); +} + +/** + * Overrides WP's default template for category- and tag-based archives. This allows better + * organization of taxonomy template files by making categories and post tags work the same way as + * other taxonomies. The hierarchy is taxonomy-$taxonomy-$term.php, taxonomy-$taxonomy.php, + * taxonomy.php, archive.php. + * + * @since 0.7.0 + * @uses locate_template() Checks for template in child and parent theme. + * @param string $template + * @return string Full path to file. + */ +function hybrid_taxonomy_template( $template ) { + + /* Get the queried term object. */ + $term = get_queried_object(); + + /* Return the available templates. */ + return locate_template( array( "taxonomy-{$term->taxonomy}-{$term->slug}.php", "taxonomy-{$term->taxonomy}.php", 'taxonomy.php', 'archive.php' ) ); +} + +/** + * Overrides the default single (singular post) template. Post templates can be loaded using a custom + * post template, by slug, or by ID. + * + * Attachment templates are handled slightly differently. Rather than look for the slug + * or ID, templates can be loaded by attachment-$mime[0]_$mime[1].php, + * attachment-$mime[1].php, or attachment-$mime[0].php. + * + * @since 0.7.0 + * @param string $template The default WordPress post template. + * @return string $template The theme post template after all templates have been checked for. + */ +function hybrid_singular_template( $template ) { + + $templates = array(); + + /* Get the queried post. */ + $post = get_queried_object(); + + /* Check for a custom post template by custom field key '_wp_post_template'. */ + $custom = get_post_meta( get_queried_object_id(), "_wp_{$post->post_type}_template", true ); + if ( $custom ) + $templates[] = $custom; + + /* If viewing an attachment page, handle the files by mime type. */ + if ( is_attachment() ) { + /* Split the mime_type into two distinct parts. */ + $type = explode( '/', get_post_mime_type() ); + + $templates[] = "attachment-{$type[0]}_{$type[1]}.php"; + $templates[] = "attachment-{$type[1]}.php"; + $templates[] = "attachment-{$type[0]}.php"; + } + + /* If viewing any other type of singular page. */ + else { + + /* Add a post name (slug) template. */ + $templates[] = "{$post->post_type}-{$post->post_name}.php"; + + /* Add a post ID template. */ + $templates[] = "{$post->post_type}-{$post->ID}.php"; + } + + /* Add a template based off the post type name. */ + $templates[] = "{$post->post_type}.php"; + + /* Allow for WP's more recent 'single-{$post_type}.php' for compatibility. */ + $templates[] = "single-{$post->post_type}.php"; + + /* Add a general template of singular.php. */ + $templates[] = "singular.php"; + + /* Return the found template. */ + return locate_template( $templates ); +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/utility.php b/wp-content/themes/hybrid/library/functions/utility.php new file mode 100644 index 000000000..c8895c1a2 --- /dev/null +++ b/wp-content/themes/hybrid/library/functions/utility.php @@ -0,0 +1,184 @@ +<?php +/** + * Additional helper functions that the framework or themes may use. The functions in this file are functions + * that don't really have a home within any other parts of the framework. + * + * @package HybridCore + * @subpackage Functions + */ + +/* Add extra support for post types. */ +add_action( 'init', 'hybrid_add_post_type_support' ); + +/* Add extra file headers for themes. */ +add_filter( 'extra_theme_headers', 'hybrid_extra_theme_headers' ); + +/** + * This function is for adding extra support for features not default to the core post types. + * Excerpts are added to the 'page' post type. Comments and trackbacks are added for the + * 'attachment' post type. Technically, these are already used for attachments in core, but + * they're not registered. + * + * @since 0.8.0 + */ +function hybrid_add_post_type_support() { + + /* Add support for excerpts and entry-views to the 'page' post type. */ + add_post_type_support( 'page', array( 'excerpt' ) ); + + /* Add support for comments, trackbacks, and entry-views to the 'attachment' post type. */ + add_post_type_support( 'attachment', array( 'trackbacks' ) ); +} + +/** + * Creates custom theme headers. This is the information shown in the header block of a theme's 'style.css' + * file. Themes are not required to use this information, but the framework does make use of the data for + * displaying additional information to the theme user. + * + * @since 1.2.0 + * @link http://codex.wordpress.org/Theme_Review#Licensing + * @param array $headers Array of extra headers added by plugins/themes. + * @return array $headers + */ +function hybrid_extra_theme_headers( $headers ) { + + /* Add support for 'Template Version'. This is for use in child themes to note the version of the parent theme. */ + if ( !in_array( 'Template Version', $headers ) ) + $headers[] = 'Template Version'; + + /* Add support for 'License'. Proposed in the guidelines for the WordPress.org theme review. */ + if ( !in_array( 'License', $headers ) ) + $headers[] = 'License'; + + /* Add support for 'License URI'. Proposed in the guidelines for the WordPress.org theme review. */ + if ( !in_array( 'License URI', $headers ) ) + $headers[] = 'License URI'; + + /* Add support for 'Support URI'. This should be a link to the theme's support forums. */ + if ( !in_array( 'Support URI', $headers ) ) + $headers[] = 'Support URI'; + + /* Add support for 'Documentation URI'. This should be a link to the theme's documentation. */ + if ( !in_array( 'Documentation URI', $headers ) ) + $headers[] = 'Documentation URI'; + + /* Return the array of custom theme headers. */ + return $headers; +} + +/** + * Looks for a template based on the hybrid_get_context() function. If the $template parameter + * is a directory, it will look for files within that directory. Otherwise, $template becomes the + * template name prefix. The function looks for templates based on the context of the current page + * being viewed by the user. + * + * @since 0.8.0 + * @param string $template The slug of the template whose context we're searching for. + * @return string $template The full path of the located template. + */ +function get_atomic_template( $template ) { + + $templates = array(); + + $theme_dir = trailingslashit( THEME_DIR ) . $template; + $child_dir = trailingslashit( CHILD_THEME_DIR ) . $template; + + if ( is_dir( $child_dir ) || is_dir( $theme_dir ) ) { + $dir = true; + $templates[] = "{$template}/index.php"; + } + else { + $dir = false; + $templates[] = "{$template}.php"; + } + + foreach ( hybrid_get_context() as $context ) + $templates[] = ( ( $dir ) ? "{$template}/{$context}.php" : "{$template}-{$context}.php" ); + + return locate_template( array_reverse( $templates ), true ); +} + +/** + * Generates the relevant template info. Adds template meta with theme version. Uses the theme + * name and version from style.css. In 0.6, added the hybrid_meta_template + * filter hook. + * + * @since 0.4.0 + */ +function hybrid_meta_template() { + $data = hybrid_get_theme_data(); + $template = '<meta name="template" content="' . esc_attr( "{$data['Title']} {$data['Version']}" ) . '" />' . "\n"; + echo apply_atomic( 'meta_template', $template ); +} + +/** + * Dynamic element to wrap the site title in. If it is the front page, wrap it in an <h1> element. One other + * pages, wrap it in a <div> element. + * + * @since 0.1.0 + */ +function hybrid_site_title() { + + /* If viewing the front page of the site, use an <h1> tag. Otherwise, use a <div> tag. */ + $tag = ( is_front_page() ) ? 'h1' : 'div'; + + /* Get the site title. If it's not empty, wrap it with the appropriate HTML. */ + if ( $title = get_bloginfo( 'name' ) ) + $title = '<' . $tag . ' id="site-title"><a href="' . home_url() . '" title="' . esc_attr( $title ) . '" rel="home"><span>' . $title . '</span></a></' . $tag . '>'; + + /* Display the site title and apply filters for developers to overwrite. */ + echo apply_atomic( 'site_title', $title ); +} + +/** + * Dynamic element to wrap the site description in. If it is the front page, wrap it in an <h2> element. + * On other pages, wrap it in a <div> element. + * + * @since 0.1.0 + */ +function hybrid_site_description() { + + /* If viewing the front page of the site, use an <h2> tag. Otherwise, use a <div> tag. */ + $tag = ( is_front_page() ) ? 'h2' : 'div'; + + /* Get the site description. If it's not empty, wrap it with the appropriate HTML. */ + if ( $desc = get_bloginfo( 'description' ) ) + $desc = "\n\t\t\t" . '<' . $tag . ' id="site-description"><span>' . $desc . '</span></' . $tag . '>' . "\n"; + + /* Display the site description and apply filters for developers to overwrite. */ + echo apply_atomic( 'site_description', $desc ); +} + +/** + * Checks if a post of any post type has a custom template. This is the equivalent of WordPress' + * is_page_template() function with the exception that it works for all post types. + * + * @since 1.2.0 + * @param string $template The name of the template to check for. + * @return bool Whether the post has a template. + */ +function hybrid_has_post_template( $template = '' ) { + + /* Assume we're viewing a singular post. */ + if ( is_singular() ) { + + /* Get the queried object. */ + $post = get_queried_object(); + + /* Get the post template, which is saved as metadata. */ + $post_template = get_post_meta( get_queried_object_id(), "_wp_{$post->post_type}_template", true ); + + /* If a specific template was input, check that the post template matches. */ + if ( !empty( $template) && ( $template == $post_template ) ) + return true; + + /* If no specific template was input, check if the post has a template. */ + elseif ( empty( $template) && !empty( $post_template ) ) + return true; + } + + /* Return false for everything else. */ + return false; +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/functions/widgets.php b/wp-content/themes/hybrid/library/functions/widgets.php index f162d9fc9..25bb497ad 100644 --- a/wp-content/themes/hybrid/library/functions/widgets.php +++ b/wp-content/themes/hybrid/library/functions/widgets.php @@ -1,112 +1,96 @@ <?php /** - * Functions for dealing with widgets and sidebars within the theme. WP widgets must be - * unregistered. Hybrid widgets must be registered in their place. All sidebars are loaded - * and registered with WP. + * Sets up the core framework's widgets and unregisters some of the default WordPress widgets if the + * theme supports this feature. The framework's widgets are meant to extend the default WordPress + * widgets by giving users highly-customizable widget settings. A theme must register support for the + * 'hybrid-core-widgets' feature to use the framework widgets. * - * @package Hybrid + * @package HybridCore * @subpackage Functions */ -/** - * Add theme support for widgets. - * @since 0.8 - */ -add_theme_support( 'widgets' ); - -/** - * Register widget areas - * @since 0.7 - */ -add_action( 'init', 'hybrid_register_sidebars' ); - -/** - * Unregister WP widgets - * @since 0.3.2 - */ +/* Unregister WP widgets. */ add_action( 'widgets_init', 'hybrid_unregister_widgets' ); -/** - * Register Hybrid Widgets - * @since 0.6 - */ +/* Register Hybrid widgets. */ add_action( 'widgets_init', 'hybrid_register_widgets' ); /** - * Disables widget areas - * @since 0.5 - */ -add_filter( 'sidebars_widgets', 'remove_sidebars' ); - -/** - * Registers each widget area for the theme. This includes all of the asides - * and the utility widget areas throughout the theme. - * - * @since 0.7 - * @uses register_sidebar() Registers a widget area. - */ -function hybrid_register_sidebars() { - $domain = hybrid_get_textdomain(); - - /* Register aside widget areas. */ - register_sidebar( array( 'name' => __( 'Primary', $domain ), 'id' => 'primary', 'description' => __( 'The main (primary) widget area, most often used as a sidebar.', $domain ), 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); - register_sidebar( array( 'name' => __( 'Secondary', $domain ), 'id' => 'secondary', 'description' => __( 'The second most important widget area, most often used as a secondary sidebar', $domain ), 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); - register_sidebar( array( 'name' => __( 'Subsidiary', $domain ), 'id' => 'subsidiary', 'description' => __( 'A widget area loaded in the footer of the site.', $domain ), 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); - - /* Register utility widget areas. */ - register_sidebar( array( 'name' => __( 'Utility: Before Content', $domain ), 'id' => 'utility-before-content', 'description' => __( 'Loaded before the page\'s main content area.', $domain ), 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); - register_sidebar( array( 'name' => __( 'Utility: After Content', $domain ), 'id' => 'utility-after-content', 'description' => __( 'Loaded after the page\'s main content area.', $domain ), 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); - register_sidebar( array( 'name' => __( 'Utility: After Singular', $domain ), 'id' => 'utility-after-singular', 'description' => __( 'Loaded on singular post (page, attachment, etc.) views before the comments area.', $domain ), 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); - - /* Register template widget areas only if the templates are available. */ - if ( locate_template( array( 'page-widgets.php' ) ) ) - register_sidebar( array( 'name' => __( 'Widgets Template', $domain ), 'id' => 'utility-widgets-template', 'description' => __( 'Used as the content of the Widgets page template.', $domain ), 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); - if ( locate_template( array( '404.php' ) ) ) - register_sidebar( array( 'name' => __( '404 Template', $domain ), 'id' => 'utility-404', 'description' => __( 'Replaces the default 404 error page content.', $domain ), 'before_widget' => '<div id="%1$s" class="widget %2$s widget-%2$s"><div class="widget-inside">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>' ) ); -} - -/** - * Register Hybrid's extra widgets. Each widget is meant to replace or extend the - * current default WordPress widgets. + * Registers the core frameworks widgets. These widgets typically overwrite the equivalent default WordPress + * widget by extending the available options of the widget. * - * @since 0.6 - * @uses register_widget() Registers individual widgets. - * @link http://codex.wordpress.org/WordPress_Widgets_Api + * @since 0.6.0 + * @uses register_widget() Registers individual widgets with WordPress + * @link http://codex.wordpress.org/Function_Reference/register_widget */ function hybrid_register_widgets() { - /* Load each widget file. */ - require_once( THEME_CLASSES . '/widget-archives.php' ); - require_once( THEME_CLASSES . '/widget-authors.php' ); - require_once( THEME_CLASSES . '/widget-bookmarks.php' ); - require_once( THEME_CLASSES . '/widget-calendar.php' ); - require_once( THEME_CLASSES . '/widget-categories.php' ); - require_once( THEME_CLASSES . '/widget-nav-menu.php' ); - require_once( THEME_CLASSES . '/widget-pages.php' ); - require_once( THEME_CLASSES . '/widget-search.php' ); - require_once( THEME_CLASSES . '/widget-tags.php' ); - - /* Register each widget. */ + /* Load the archives widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-archives.php' ); + + /* Load the authors widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-authors.php' ); + + /* Load the bookmarks widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-bookmarks.php' ); + + /* Load the calendar widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-calendar.php' ); + + /* Load the categories widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-categories.php' ); + + /* Load the nav menu widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-nav-menu.php' ); + + /* Load the pages widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-pages.php' ); + + /* Load the search widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-search.php' ); + + /* Load the tags widget class. */ + require_once( trailingslashit( HYBRID_CLASSES ) . 'widget-tags.php' ); + + /* Register the archives widget. */ register_widget( 'Hybrid_Widget_Archives' ); + + /* Register the authors widget. */ register_widget( 'Hybrid_Widget_Authors' ); + + /* Register the bookmarks widget. */ register_widget( 'Hybrid_Widget_Bookmarks' ); + + /* Register the calendar widget. */ register_widget( 'Hybrid_Widget_Calendar' ); + + /* Register the categories widget. */ register_widget( 'Hybrid_Widget_Categories' ); + + /* Register the nav menu widget. */ register_widget( 'Hybrid_Widget_Nav_Menu' ); + + /* Register the pages widget. */ register_widget( 'Hybrid_Widget_Pages' ); + + /* Register the search widget. */ register_widget( 'Hybrid_Widget_Search' ); + + /* Register the tags widget. */ register_widget( 'Hybrid_Widget_Tags' ); } /** - * Unregister default WordPress widgets we don't need. The theme adds its own - * versions of these widgets. + * Unregister default WordPress widgets that are replaced by the framework's widgets. Widgets that + * aren't replaced by the framework widgets are not unregistered. * * @since 0.3.2 - * @uses unregister_widget() Removes individual widgets. - * @link http://codex.wordpress.org/WordPress_Widgets_Api + * @uses unregister_widget() Unregisters a registered widget. + * @link http://codex.wordpress.org/Function_Reference/unregister_widget */ function hybrid_unregister_widgets() { + + /* Unregister the default WordPress widgets. */ unregister_widget( 'WP_Widget_Archives' ); unregister_widget( 'WP_Widget_Calendar' ); unregister_widget( 'WP_Widget_Categories' ); @@ -118,86 +102,4 @@ function hybrid_unregister_widgets() { unregister_widget( 'WP_Widget_Tag_Cloud' ); } -/** - * Loads the Primary widget area. Users can overwrite 'sidebar-primary.php'. - * - * @since 0.2.2 - * @uses get_sidebar() Checks for the template in the child and parent theme. - */ -function hybrid_get_primary() { - get_sidebar( 'primary' ); -} - -/** - * Loads the Secondary widget area. Users can overwrite 'sidebar-secondary.php'. - * - * @since 0.2.2 - * @uses get_sidebar() Checks for the template in the child and parent theme. - */ -function hybrid_get_secondary() { - get_sidebar( 'secondary' ); -} - -/** - * Loads the Subsidiary widget area. Users can overwrite 'sidebar-subsidiary.php'. - * - * @since 0.3.1 - * @uses get_sidebar() Checks for the template in the child and parent theme. - */ -function hybrid_get_subsidiary() { - get_sidebar( 'subsidiary' ); -} - -/** - * Loads the Utility: Before Content widget area. Users can overwrite - * 'sidebar-before-content.php' in child themes. - * - * @since 0.4 - * @uses get_sidebar() Checks for the template in the child and parent theme. - */ -function hybrid_get_utility_before_content() { - get_sidebar( 'before-content' ); -} - -/** - * Loads the Utility: After Content widget area. Users can overwrite - * 'sidebar-after-content.php' in child themes. - * - * @since 0.4 - * @uses get_sidebar() Checks for the template in the child and parent theme. - */ -function hybrid_get_utility_after_content() { - get_sidebar( 'after-content' ); -} - -/** - * Loads the Utility: After Singular widget area. Users can overwrite - * 'sidebar-after-singular.php' in child themes. - * - * @since 0.7 - * @uses get_sidebar() Checks for the template in the child and parent theme. - */ -function hybrid_get_utility_after_singular() { - get_sidebar( 'after-singular' ); -} - -/** - * Removes all widget areas on the No Widgets page template. We're only going to run - * it on the No Widgets template. Users that need additional templates without widgets - * should create a simliar function in their child theme. - * - * @since 0.5 - * @uses sidebars_widgets Filter to remove all widget areas - */ -function remove_sidebars( $sidebars_widgets ) { - global $wp_query; - - if ( is_singular() ) { - $template = get_post_meta( $wp_query->post->ID, "_wp_{$wp_query->post->post_type}_template", true ); - if ( 'no-widgets.php' == $template || "{$wp_query->post->post_type}-no-widgets.php" == $template ) - $sidebars_widgets = array( false ); - } - return $sidebars_widgets; -} - ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/hybrid.php b/wp-content/themes/hybrid/library/hybrid.php new file mode 100644 index 000000000..28e297ddc --- /dev/null +++ b/wp-content/themes/hybrid/library/hybrid.php @@ -0,0 +1,305 @@ +<?php +/** + * Hybrid Core - A WordPress theme development framework. + * + * Hybrid Core is a framework for developing WordPress themes. The framework allows theme developers + * to quickly build themes without having to handle all of the "logic" behind the theme or having to code + * complex functionality for features that are often needed in themes. The framework does these things + * for developers to allow them to get back to what matters the most: developing and designing themes. + * The framework was built to make it easy for developers to include (or not include) specific, pre-coded + * features. Themes handle all the markup, style, and scripts while the framework handles the logic. + * + * Hybrid Core is a modular system, which means that developers can pick and choose the features they + * want to include within their themes. Most files are only loaded if the theme registers support for the + * feature using the add_theme_support( $feature ) function within their theme. + * + * This program is free software; you can redistribute it and/or modify it under the terms of the GNU + * General Public License version 2, as published by the Free Software Foundation. You may NOT assume + * that you can use any other version of the GPL. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU General Public License along with this program; if not, write + * to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * @package HybridCore + * @version 1.2.1 + * @author Justin Tadlock <justin@justintadlock.com> + * @copyright Copyright (c) 2008 - 2011, Justin Tadlock + * @link http://themehybrid.com/hybrid-core + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + */ + +/** + * The Hybrid class launches the framework. It's the organizational structure behind the entire framework. + * This class should be loaded and initialized before anything else within the theme is called to properly use + * the framework. + * + * After parent themes call the Hybrid class, they should perform a theme setup function on the + * 'after_setup_theme' hook with a priority of 10. Child themes should add their theme setup function on + * the 'after_setup_theme' hook with a priority of 11. This allows the class to load theme-supported features + * at the appropriate time, which is on the 'after_setup_theme' hook with a priority of 12. + * + * @since 0.7.0 + */ +class Hybrid { + + /** + * Constructor method for the Hybrid class. This method adds other methods of the class to + * specific hooks within WordPress. It controls the load order of the required files for running + * the framework. + * + * @since 1.0.0 + */ + function __construct() { + + /* Define framework, parent theme, and child theme constants. */ + add_action( 'after_setup_theme', array( &$this, 'constants' ), 1 ); + + /* Load the core functions required by the rest of the framework. */ + add_action( 'after_setup_theme', array( &$this, 'core' ), 2 ); + + /* Initialize the framework's default actions and filters. */ + add_action( 'after_setup_theme', array( &$this, 'default_filters' ), 3 ); + + /* Language functions and translations setup. */ + add_action( 'after_setup_theme', array( &$this, 'i18n' ), 4 ); + + /* Load the framework functions. */ + add_action( 'after_setup_theme', array( &$this, 'functions' ), 12 ); + + /* Load the framework extensions. */ + add_action( 'after_setup_theme', array( &$this, 'extensions' ), 13 ); + + /* Load admin files. */ + add_action( 'wp_loaded', array( &$this, 'admin' ) ); + } + + /** + * Defines the constant paths for use within the core framework, parent theme, and child theme. + * Constants prefixed with 'HYBRID_' are for use only within the core framework and don't + * reference other areas of the parent or child theme. + * + * @since 0.7.0 + */ + function constants() { + + /* Sets the framework version number. */ + define( 'HYBRID_VERSION', '1.2.1' ); + + /* Sets the path to the parent theme directory. */ + define( 'THEME_DIR', get_template_directory() ); + + /* Sets the path to the parent theme directory URI. */ + define( 'THEME_URI', get_template_directory_uri() ); + + /* Sets the path to the child theme directory. */ + define( 'CHILD_THEME_DIR', get_stylesheet_directory() ); + + /* Sets the path to the child theme directory URI. */ + define( 'CHILD_THEME_URI', get_stylesheet_directory_uri() ); + + /* Sets the path to the core framework directory. */ + define( 'HYBRID_DIR', trailingslashit( THEME_DIR ) . basename( dirname( __FILE__ ) ) ); + + /* Sets the path to the core framework directory URI. */ + define( 'HYBRID_URI', trailingslashit( THEME_URI ) . basename( dirname( __FILE__ ) ) ); + + /* Sets the path to the core framework admin directory. */ + define( 'HYBRID_ADMIN', trailingslashit( HYBRID_DIR ) . 'admin' ); + + /* Sets the path to the core framework classes directory. */ + define( 'HYBRID_CLASSES', trailingslashit( HYBRID_DIR ) . 'classes' ); + + /* Sets the path to the core framework extensions directory. */ + define( 'HYBRID_EXTENSIONS', trailingslashit( HYBRID_DIR ) . 'extensions' ); + + /* Sets the path to the core framework functions directory. */ + define( 'HYBRID_FUNCTIONS', trailingslashit( HYBRID_DIR ) . 'functions' ); + + /* Sets the path to the core framework images directory URI. */ + define( 'HYBRID_IMAGES', trailingslashit( HYBRID_URI ) . 'images' ); + + /* Sets the path to the core framework CSS directory URI. */ + define( 'HYBRID_CSS', trailingslashit( HYBRID_URI ) . 'css' ); + + /* Sets the path to the core framework JavaScript directory URI. */ + define( 'HYBRID_JS', trailingslashit( HYBRID_URI ) . 'js' ); + } + + /** + * Loads the core framework functions. These files are needed before loading anything else in the + * framework because they have required functions for use. + * + * @since 1.0.0 + */ + function core() { + + /* Load the core framework functions. */ + require_once( trailingslashit( HYBRID_FUNCTIONS ) . 'core.php' ); + + /* Load the context-based functions. */ + require_once( trailingslashit( HYBRID_FUNCTIONS ) . 'context.php' ); + } + + /** + * Loads both the parent and child theme translation files. If a locale-based functions file exists + * in either the parent or child theme (child overrides parent), it will also be loaded. All translation + * and locale functions files are expected to be within the theme's '/languages' folder, but the + * framework will fall back on the theme root folder if necessary. Translation files are expected + * to be prefixed with the template or stylesheet path (example: 'templatename-en_US.mo'). + * + * @since 1.2.0 + */ + function i18n() { + + /* Load theme textdomain. */ + load_theme_textdomain( hybrid_get_textdomain() ); + + /* Load child theme textdomain. */ + if ( is_child_theme() ) + load_child_theme_textdomain( hybrid_get_child_textdomain() ); + + /* Get the user's locale. */ + $locale = get_locale(); + + /* Locate a locale-specific functions file. */ + $locale_functions = locate_template( array( "languages/{$locale}.php", "{$locale}.php" ) ); + + /* If the locale file exists and is readable, load it. */ + if ( !empty( $locale_functions ) && is_readable( $locale_functions ) ) + require_once( $locale_functions ); + } + + /** + * Loads the framework functions. Many of these functions are needed to properly run the + * framework. Some components are only loaded if the theme supports them. + * + * @since 0.7.0 + */ + function functions() { + + /* Load the comments functions. */ + require_once( trailingslashit( HYBRID_FUNCTIONS ) . 'comments.php' ); + + /* Load media-related functions. */ + require_once( trailingslashit( HYBRID_FUNCTIONS ) . 'media.php' ); + + /* Load the utility functions. */ + require_once( trailingslashit( HYBRID_FUNCTIONS ) . 'utility.php' ); + + /* Load the theme settings functions if supported. */ + require_if_theme_supports( 'hybrid-core-theme-settings', trailingslashit( HYBRID_FUNCTIONS ) . 'settings.php' ); + + /* Load the menus functions if supported. */ + require_if_theme_supports( 'hybrid-core-menus', trailingslashit( HYBRID_FUNCTIONS ) . 'menus.php' ); + + /* Load the core SEO component. */ + require_if_theme_supports( 'hybrid-core-seo', trailingslashit( HYBRID_FUNCTIONS ) . 'core-seo.php' ); + + /* Load the shortcodes if supported. */ + require_if_theme_supports( 'hybrid-core-shortcodes', trailingslashit( HYBRID_FUNCTIONS ) . 'shortcodes.php' ); + + /* Load the sidebars if supported. */ + require_if_theme_supports( 'hybrid-core-sidebars', trailingslashit( HYBRID_FUNCTIONS ) . 'sidebars.php' ); + + /* Load the widgets if supported. */ + require_if_theme_supports( 'hybrid-core-widgets', trailingslashit( HYBRID_FUNCTIONS ) . 'widgets.php' ); + + /* Load the template hierarchy if supported. */ + require_if_theme_supports( 'hybrid-core-template-hierarchy', trailingslashit( HYBRID_FUNCTIONS ) . 'template-hierarchy.php' ); + + /* Load the deprecated functions if supported. */ + require_if_theme_supports( 'hybrid-core-deprecated', trailingslashit( HYBRID_FUNCTIONS ) . 'deprecated.php' ); + } + + /** + * Load extensions (external projects). Extensions are projects that are included within the + * framework but are not a part of it. They are external projects developed outside of the + * framework. Themes must use add_theme_support( $extension ) to use a specific extension + * within the theme. This should be declared on 'after_setup_theme' no later than a priority of 11. + * + * @since 0.7.0 + */ + function extensions() { + + /* Load the Breadcrumb Trail extension if supported and the plugin isn't active. */ + if ( !function_exists( 'breadcrumb_trail' ) ) + require_if_theme_supports( 'breadcrumb-trail', trailingslashit( HYBRID_EXTENSIONS ) . 'breadcrumb-trail.php' ); + + /* Load the Cleaner Gallery extension if supported and the plugin isn't active. */ + if ( !function_exists( 'cleaner_gallery' ) ) + require_if_theme_supports( 'cleaner-gallery', trailingslashit( HYBRID_EXTENSIONS ) . 'cleaner-gallery.php' ); + + /* Load the Get the Image extension if supported and the plugin isn't active. */ + if ( !function_exists( 'get_the_image' ) ) + require_if_theme_supports( 'get-the-image', trailingslashit( HYBRID_EXTENSIONS ) . 'get-the-image.php' ); + + /* Load the Cleaner Caption extension if supported. */ + require_if_theme_supports( 'cleaner-caption', trailingslashit( HYBRID_EXTENSIONS ) . 'cleaner-caption.php' ); + + /* Load the Custom Field Series extension if supported. */ + require_if_theme_supports( 'custom-field-series', trailingslashit( HYBRID_EXTENSIONS ) . 'custom-field-series.php' ); + + /* Load the Loop Pagination extension if supported. */ + require_if_theme_supports( 'loop-pagination', trailingslashit( HYBRID_EXTENSIONS ) . 'loop-pagination.php' ); + + /* Load the Entry Views extension if supported. */ + require_if_theme_supports( 'entry-views', trailingslashit( HYBRID_EXTENSIONS ) . 'entry-views.php' ); + + /* Load the Theme Layouts extension if supported. */ + require_if_theme_supports( 'theme-layouts', trailingslashit( HYBRID_EXTENSIONS ) . 'theme-layouts.php' ); + + /* Load the Post Stylesheets extension if supported. */ + require_if_theme_supports( 'post-stylesheets', trailingslashit( HYBRID_EXTENSIONS ) . 'post-stylesheets.php' ); + } + + /** + * Load admin files for the framework. + * + * @since 0.7.0 + */ + function admin() { + + /* Check if in the WordPress admin. */ + if ( is_admin() ) { + + /* Load the main admin file. */ + require_once( trailingslashit( HYBRID_ADMIN ) . 'admin.php' ); + + /* Load the theme settings feature if supported. */ + require_if_theme_supports( 'hybrid-core-theme-settings', trailingslashit( HYBRID_ADMIN ) . 'theme-settings.php' ); + } + } + + /** + * Adds the default framework actions and filters. + * + * @since 1.0.0 + */ + function default_filters() { + + /* Move the WordPress generator to a better priority. */ + remove_action( 'wp_head', 'wp_generator' ); + add_action( 'wp_head', 'wp_generator', 1 ); + + /* Add the theme info to the header (lets theme developers give better support). */ + add_action( 'wp_head', 'hybrid_meta_template', 1 ); + + /* Filter the textdomain mofile to allow child themes to load the parent theme translation. */ + add_filter( 'load_textdomain_mofile', 'hybrid_load_textdomain', 10, 2 ); + + /* Filter textdomain for extensions. */ + add_filter( 'breadcrumb_trail_textdomain', 'hybrid_get_textdomain' ); + add_filter( 'theme_layouts_textdomain', 'hybrid_get_textdomain' ); + add_filter( 'custom_field_series_textdomain', 'hybrid_get_textdomain' ); + add_filter( 'post_stylesheets_textdomain', 'hybrid_get_textdomain' ); + + /* Make text widgets and term descriptions shortcode aware. */ + add_filter( 'widget_text', 'do_shortcode' ); + add_filter( 'term_description', 'do_shortcode' ); + } +} + +?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/js/drop-downs.dev.js b/wp-content/themes/hybrid/library/js/drop-downs.dev.js new file mode 100644 index 000000000..a0adb5422 --- /dev/null +++ b/wp-content/themes/hybrid/library/js/drop-downs.dev.js @@ -0,0 +1,236 @@ +/* + * Superfish v1.4.8 - jQuery menu widget + * Copyright (c) 2008 Joel Birch + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt + */ + +;(function($){ + $.fn.superfish = function(op){ + + var sf = $.fn.superfish, + c = sf.c, + $arrow = $(['<span class="',c.arrowClass,'"> »</span>'].join('')), + over = function(){ + var $$ = $(this), menu = getMenu($$); + clearTimeout(menu.sfTimer); + $$.showSuperfishUl().siblings().hideSuperfishUl(); + }, + out = function(){ + var $$ = $(this), menu = getMenu($$), o = sf.op; + clearTimeout(menu.sfTimer); + menu.sfTimer=setTimeout(function(){ + o.retainPath=($.inArray($$[0],o.$path)>-1); + $$.hideSuperfishUl(); + if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);} + },o.delay); + }, + getMenu = function($menu){ + var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0]; + sf.op = sf.o[menu.serial]; + return menu; + }, + addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); }; + + return this.each(function() { + var s = this.serial = sf.o.length; + var o = $.extend({},sf.defaults,op); + o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){ + $(this).addClass([o.hoverClass,c.bcClass].join(' ')) + .filter('li:has(ul)').removeClass(o.pathClass); + }); + sf.o[s] = sf.op = o; + + $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() { + if (o.autoArrows) addArrow( $('>a:first-child',this) ); + }) + .not('.'+c.bcClass) + .hideSuperfishUl(); + + var $a = $('a',this); + $a.each(function(i){ + var $li = $a.eq(i).parents('li'); + $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);}); + }); + o.onInit.call(this); + + }).each(function() { + var menuClasses = [c.menuClass]; + if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass); + $(this).addClass(menuClasses.join(' ')); + }); + }; + + var sf = $.fn.superfish; + sf.o = []; + sf.op = {}; + sf.IE7fix = function(){ + var o = sf.op; + if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined) + this.toggleClass(sf.c.shadowClass+'-off'); + }; + sf.c = { + bcClass : 'sf-breadcrumb', + menuClass : 'sf-js-enabled', + anchorClass : 'sf-with-ul', + arrowClass : 'sf-sub-indicator', + shadowClass : 'sf-shadow' + }; + sf.defaults = { + hoverClass : 'sfHover', + pathClass : 'overideThisToUse', + pathLevels : 1, + delay : 800, + animation : {opacity:'show'}, + speed : 'normal', + autoArrows : true, + dropShadows : true, + disableHI : false, // true disables hoverIntent detection + onInit : function(){}, // callback functions + onBeforeShow: function(){}, + onShow : function(){}, + onHide : function(){} + }; + $.fn.extend({ + hideSuperfishUl : function(){ + var o = sf.op, + not = (o.retainPath===true) ? o.$path : ''; + o.retainPath = false; + var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass) + .find('>ul').hide().css('visibility','hidden'); + o.onHide.call($ul); + return this; + }, + showSuperfishUl : function(){ + var o = sf.op, + sh = sf.c.shadowClass+'-off', + $ul = this.addClass(o.hoverClass) + .find('>ul:hidden').css('visibility','visible'); + sf.IE7fix.call($ul); + o.onBeforeShow.call($ul); + $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); }); + return this; + } + }); + +})(jQuery); + +/* + * Supersubs v0.2b - jQuery plugin + * Copyright (c) 2008 Joel Birch + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * + * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of + * their longest list item children. If you use this, please expect bugs and report them + * to the jQuery Google Group with the word 'Superfish' in the subject line. + * + */ + +;(function($){ // $ will refer to jQuery within this closure + + $.fn.supersubs = function(options){ + var opts = $.extend({}, $.fn.supersubs.defaults, options); + // return original object to support chaining + return this.each(function() { + // cache selections + var $$ = $(this); + // support metadata + var o = $.meta ? $.extend({}, opts, $$.data()) : opts; + // get the font size of menu. + // .css('fontSize') returns various results cross-browser, so measure an em dash instead + var fontsize = $('<li id="menu-fontsize">—</li>').css({ + 'padding' : 0, + 'position' : 'absolute', + 'top' : '-999em', + 'width' : 'auto' + }).appendTo($$).width(); //clientWidth is faster, but was incorrect here + // remove em dash + $('#menu-fontsize').remove(); + // cache all ul elements + $ULs = $$.find('ul'); + // loop through each ul in menu + $ULs.each(function(i) { + // cache this ul + var $ul = $ULs.eq(i); + // get all (li) children of this ul + var $LIs = $ul.children(); + // get all anchor grand-children + var $As = $LIs.children('a'); + // force content to one line and save current float property + var liFloat = $LIs.css('white-space','nowrap').css('float'); + // remove width restrictions and floats so elements remain vertically stacked + var emWidth = $ul.add($LIs).add($As).css({ + 'float' : 'none', + 'width' : 'auto' + }) + // this ul will now be shrink-wrapped to longest li due to position:absolute + // so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer + .end().end()[0].clientWidth / fontsize; + // add more width to ensure lines don't turn over at certain sizes in various browsers + emWidth += o.extraWidth; + // restrict to at least minWidth and at most maxWidth + if (emWidth > o.maxWidth) { emWidth = o.maxWidth; } + else if (emWidth < o.minWidth) { emWidth = o.minWidth; } + emWidth += 'em'; + // set ul to width in ems + $ul.css('width',emWidth); + // restore li floats to avoid IE bugs + // set li width to full width of this ul + // revert white-space to normal + $LIs.css({ + 'float' : liFloat, + 'width' : '100%', + 'white-space' : 'normal' + }) + // update offset position of descendant ul to reflect new width of parent + .each(function(){ + var $childUl = $('>ul',this); + var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right'; + $childUl.css(offsetDirection,emWidth); + }); + }); + + }); + }; + // expose defaults + $.fn.supersubs.defaults = { + minWidth : 9, // requires em unit. + maxWidth : 25, // requires em unit. + extraWidth : 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values + }; + +})(jQuery); // plugin code ends + +/** + * Hybrid drop-downs. + * @author Justin Tadlock + * @license http://www.gnu.org/licenses/gpl.html + * @copyright 2008 - 2011 Justin Tadlock + */ +$j = jQuery.noConflict(); + +$j(document).ready( + function() { + + /* Drop-down controls. */ + $j('div.menu ul:first-child').supersubs( { + minWidth: 12, + maxWidth: 27, + extraWidth: 1 + } + ).superfish( { + delay: 100, + animation: { opacity: 'show', height: 'show' }, + dropShadows: false + } + ); + } +); \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/js/drop-downs.js b/wp-content/themes/hybrid/library/js/drop-downs.js index ba10ba228..a2d10d609 100644 --- a/wp-content/themes/hybrid/library/js/drop-downs.js +++ b/wp-content/themes/hybrid/library/js/drop-downs.js @@ -1,77 +1 @@ -/** - * Superfish v1.4.8 - jQuery menu widget - * Copyright (c) 2008 Joel Birch - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt - */ -;(function($){$.fn.superfish=function(op){var sf=$.fn.superfish,c=sf.c,$arrow=$(['<span class="',c.arrowClass,'"> »</span>'].join('')),over=function(){var $$=$(this),menu=getMenu($$);clearTimeout(menu.sfTimer);$$.showSuperfishUl().siblings().hideSuperfishUl()},out=function(){var $$=$(this),menu=getMenu($$),o=sf.op;clearTimeout(menu.sfTimer);menu.sfTimer=setTimeout(function(){o.retainPath=($.inArray($$[0],o.$path)>-1);$$.hideSuperfishUl();if(o.$path.length&&$$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path)}},o.delay)},getMenu=function($menu){var menu=$menu.parents(['ul.',c.menuClass,':first'].join(''))[0];sf.op=sf.o[menu.serial];return menu},addArrow=function($a){$a.addClass(c.anchorClass).append($arrow.clone())};return this.each(function(){var s=this.serial=sf.o.length;var o=$.extend({},sf.defaults,op);o.$path=$('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){$(this).addClass([o.hoverClass,c.bcClass].join(' ')).filter('li:has(ul)').removeClass(o.pathClass)});sf.o[s]=sf.op=o;$('li:has(ul)',this)[($.fn.hoverIntent&&!o.disableHI)?'hoverIntent':'hover'](over,out).each(function(){if(o.autoArrows)addArrow($('>a:first-child',this))}).not('.'+c.bcClass).hideSuperfishUl();var $a=$('a',this);$a.each(function(i){var $li=$a.eq(i).parents('li');$a.eq(i).focus(function(){over.call($li)}).blur(function(){out.call($li)})});o.onInit.call(this)}).each(function(){var menuClasses=[c.menuClass];if(sf.op.dropShadows&&!($.browser.msie&&$.browser.version<7))menuClasses.push(c.shadowClass);$(this).addClass(menuClasses.join(' '))})};var sf=$.fn.superfish;sf.o=[];sf.op={};sf.IE7fix=function(){var o=sf.op;if($.browser.msie&&$.browser.version>6&&o.dropShadows&&o.animation.opacity!=undefined)this.toggleClass(sf.c.shadowClass+'-off')};sf.c={bcClass:'sf-breadcrumb',menuClass:'sf-js-enabled',anchorClass:'sf-with-ul',arrowClass:'sf-sub-indicator',shadowClass:'sf-shadow'};sf.defaults={hoverClass:'sfHover',pathClass:'overideThisToUse',pathLevels:1,delay:800,animation:{opacity:'show'},speed:'normal',autoArrows:true,dropShadows:true,disableHI:false,onInit:function(){},onBeforeShow:function(){},onShow:function(){},onHide:function(){}};$.fn.extend({hideSuperfishUl:function(){var o=sf.op,not=(o.retainPath===true)?o.$path:'';o.retainPath=false;var $ul=$(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass).find('>ul').hide().css('visibility','hidden');o.onHide.call($ul);return this},showSuperfishUl:function(){var o=sf.op,sh=sf.c.shadowClass+'-off',$ul=this.addClass(o.hoverClass).find('>ul:hidden').css('visibility','visible');sf.IE7fix.call($ul);o.onBeforeShow.call($ul);$ul.animate(o.animation,o.speed,function(){sf.IE7fix.call($ul);o.onShow.call($ul)});return this}})})(jQuery); - -/** - * Supersubs v0.2b - jQuery plugin - * Copyright (c) 2008 Joel Birch - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * - * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of - * their longest list item children. If you use this, please expect bugs and report them - * to the jQuery Google Group with the word 'Superfish' in the subject line. - * - */ -;(function($){$.fn.supersubs=function(options){var opts=$.extend({},$.fn.supersubs.defaults,options);return this.each(function(){var $$=$(this);var o=$.meta?$.extend({},opts,$$.data()):opts;var fontsize=$('<li id="menu-fontsize">—</li>').css({'padding':0,'position':'absolute','top':'-999em','width':'auto'}).appendTo($$).width();$('#menu-fontsize').remove();$ULs=$$.find('ul');$ULs.each(function(i){var $ul=$ULs.eq(i);var $LIs=$ul.children();var $As=$LIs.children('a');var liFloat=$LIs.css('white-space','nowrap').css('float');var emWidth=$ul.add($LIs).add($As).css({'float':'none','width':'auto'}).end().end()[0].clientWidth/fontsize;emWidth+=o.extraWidth;if(emWidth>o.maxWidth){emWidth=o.maxWidth}else if(emWidth<o.minWidth){emWidth=o.minWidth}emWidth+='em';$ul.css('width',emWidth);$LIs.css({'float':liFloat,'width':'100%','white-space':'normal'}).each(function(){var $childUl=$('>ul',this);var offsetDirection=$childUl.css('left')!==undefined?'left':'right';$childUl.css(offsetDirection,emWidth)})})})};$.fn.supersubs.defaults={minWidth:9,maxWidth:25,extraWidth:0}})(jQuery); - -/** - * Hybrid drop-downs. - * @author Justin Tadlock - * @license http://www.gnu.org/licenses/gpl.html - * @copyright 2008 - 2010 Justin Tadlock - */ -$j = jQuery.noConflict(); - -$j(document).ready( - function() { - - /* Drop-down controls. */ - $j('div.menu ul:first-child').supersubs( { - minWidth: 12, - maxWidth: 27, - extraWidth: 1 - } - ).superfish( { - delay: 100, - animation: { opacity: 'show', height: 'show' }, - dropShadows: false - } - ); - - /* @deprecated 0.8 Page and cat nav drop-downs. */ - $j('#page-nav ul.menu').supersubs( { - minWidth: 12, - maxWidth: 27, - extraWidth: 1 - } - ).superfish( { - delay: 100, - animation: { opacity: 'show', height: 'show' }, - dropShadows: false - } - ); - $j('#cat-nav ul.menu').supersubs( { - minWidth: 12, - maxWidth: 27, - extraWidth: 1 - } - ).superfish( { - delay: 100, - animation: { opacity: 'show', height: 'show' }, - dropShadows: false - } - ); - } -); \ No newline at end of file +(function($){$.fn.superfish=function(op){var sf=$.fn.superfish,c=sf.c,$arrow=$(['<span class="',c.arrowClass,'"> »</span>'].join("")),over=function(){var $$=$(this),menu=getMenu($$);clearTimeout(menu.sfTimer);$$.showSuperfishUl().siblings().hideSuperfishUl();},out=function(){var $$=$(this),menu=getMenu($$),o=sf.op;clearTimeout(menu.sfTimer);menu.sfTimer=setTimeout(function(){o.retainPath=($.inArray($$[0],o.$path)>-1);$$.hideSuperfishUl();if(o.$path.length&&$$.parents(["li.",o.hoverClass].join("")).length<1){over.call(o.$path);}},o.delay);},getMenu=function($menu){var menu=$menu.parents(["ul.",c.menuClass,":first"].join(""))[0];sf.op=sf.o[menu.serial];return menu;},addArrow=function($a){$a.addClass(c.anchorClass).append($arrow.clone());};return this.each(function(){var s=this.serial=sf.o.length;var o=$.extend({},sf.defaults,op);o.$path=$("li."+o.pathClass,this).slice(0,o.pathLevels).each(function(){$(this).addClass([o.hoverClass,c.bcClass].join(" ")).filter("li:has(ul)").removeClass(o.pathClass);});sf.o[s]=sf.op=o;$("li:has(ul)",this)[($.fn.hoverIntent&&!o.disableHI)?"hoverIntent":"hover"](over,out).each(function(){if(o.autoArrows){addArrow($(">a:first-child",this));}}).not("."+c.bcClass).hideSuperfishUl();var $a=$("a",this);$a.each(function(i){var $li=$a.eq(i).parents("li");$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});});o.onInit.call(this);}).each(function(){var menuClasses=[c.menuClass];if(sf.op.dropShadows&&!($.browser.msie&&$.browser.version<7)){menuClasses.push(c.shadowClass);}$(this).addClass(menuClasses.join(" "));});};var sf=$.fn.superfish;sf.o=[];sf.op={};sf.IE7fix=function(){var o=sf.op;if($.browser.msie&&$.browser.version>6&&o.dropShadows&&o.animation.opacity!=undefined){this.toggleClass(sf.c.shadowClass+"-off");}};sf.c={bcClass:"sf-breadcrumb",menuClass:"sf-js-enabled",anchorClass:"sf-with-ul",arrowClass:"sf-sub-indicator",shadowClass:"sf-shadow"};sf.defaults={hoverClass:"sfHover",pathClass:"overideThisToUse",pathLevels:1,delay:800,animation:{opacity:"show"},speed:"normal",autoArrows:true,dropShadows:true,disableHI:false,onInit:function(){},onBeforeShow:function(){},onShow:function(){},onHide:function(){}};$.fn.extend({hideSuperfishUl:function(){var o=sf.op,not=(o.retainPath===true)?o.$path:"";o.retainPath=false;var $ul=$(["li.",o.hoverClass].join(""),this).add(this).not(not).removeClass(o.hoverClass).find(">ul").hide().css("visibility","hidden");o.onHide.call($ul);return this;},showSuperfishUl:function(){var o=sf.op,sh=sf.c.shadowClass+"-off",$ul=this.addClass(o.hoverClass).find(">ul:hidden").css("visibility","visible");sf.IE7fix.call($ul);o.onBeforeShow.call($ul);$ul.animate(o.animation,o.speed,function(){sf.IE7fix.call($ul);o.onShow.call($ul);});return this;}});})(jQuery);(function($){$.fn.supersubs=function(options){var opts=$.extend({},$.fn.supersubs.defaults,options);return this.each(function(){var $$=$(this);var o=$.meta?$.extend({},opts,$$.data()):opts;var fontsize=$('<li id="menu-fontsize">—</li>').css({padding:0,position:"absolute",top:"-999em",width:"auto"}).appendTo($$).width();$("#menu-fontsize").remove();$ULs=$$.find("ul");$ULs.each(function(i){var $ul=$ULs.eq(i);var $LIs=$ul.children();var $As=$LIs.children("a");var liFloat=$LIs.css("white-space","nowrap").css("float");var emWidth=$ul.add($LIs).add($As).css({"float":"none",width:"auto"}).end().end()[0].clientWidth/fontsize;emWidth+=o.extraWidth;if(emWidth>o.maxWidth){emWidth=o.maxWidth;}else{if(emWidth<o.minWidth){emWidth=o.minWidth;}}emWidth+="em";$ul.css("width",emWidth);$LIs.css({"float":liFloat,width:"100%","white-space":"normal"}).each(function(){var $childUl=$(">ul",this);var offsetDirection=$childUl.css("left")!==undefined?"left":"right";$childUl.css(offsetDirection,emWidth);});});});};$.fn.supersubs.defaults={minWidth:9,maxWidth:25,extraWidth:0};})(jQuery);$j=jQuery.noConflict();$j(document).ready(function(){$j("div.menu ul:first-child").supersubs({minWidth:12,maxWidth:27,extraWidth:1}).superfish({delay:100,animation:{opacity:"show",height:"show"},dropShadows:false});}); \ No newline at end of file diff --git a/wp-content/themes/hybrid/library/license.txt b/wp-content/themes/hybrid/library/license.txt new file mode 100644 index 000000000..63e41a44c --- /dev/null +++ b/wp-content/themes/hybrid/library/license.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/wp-content/themes/hybrid/loop-error.php b/wp-content/themes/hybrid/loop-error.php new file mode 100644 index 000000000..9e98f63e6 --- /dev/null +++ b/wp-content/themes/hybrid/loop-error.php @@ -0,0 +1,21 @@ +<?php +/** + * Loop Error Template + * + * Displays an error message when no posts are found. + * + * @package Hybrid + * @subpackage Template + */ +?> + <div id="post-0" class="<?php hybrid_entry_class(); ?>"> + + <div class="entry-content"> + + <p class="no-data"> + <?php _e( 'Apologies, but no results were found.', hybrid_get_textdomain() ); ?> + </p><!-- .no-data --> + + </div><!-- .entry-content --> + + </div><!-- .hentry .error --> \ No newline at end of file diff --git a/wp-content/themes/hybrid/loop-meta.php b/wp-content/themes/hybrid/loop-meta.php new file mode 100644 index 000000000..42e778cdb --- /dev/null +++ b/wp-content/themes/hybrid/loop-meta.php @@ -0,0 +1,130 @@ +<?php +/** + * Loop Meta Template + * + * Displays information at the top of the page about archive and search results when viewing those pages. + * This is not shown on the home page and singular views. + * + * @package Hybrid + * @subpackage Template + */ +?> + + <?php if ( is_home() && !is_front_page() ) : ?> + + <?php global $wp_query; ?> + + <div class="loop-meta"> + <h1 class="loop-title"><?php echo get_post_field( 'post_title', $wp_query->get_queried_object_id() ); ?></h1> + </div><!-- .loop-meta --> + + <?php elseif ( is_category() ) : ?> + + <div class="loop-meta archive-info category-info"> + + <h1 class="loop-title archive-title category-title"><?php single_cat_title(); ?></h1> + + <div class="loop-description archive-description category-description"> + <?php echo category_description(); ?> + </div><!-- .loop-description --> + + </div><!-- .loop-meta --> + + <?php elseif ( is_tag() ) : ?> + + <div class="loop-meta archive-info post_tag-info tag-info"> + + <h1 class="loop-title archive-title post_tag-title tag-title"><?php single_tag_title(); ?></h1> + + <div class="loop-description archive-description post_tag-description tag-description"> + <?php echo tag_description(); ?> + </div><!-- .loop-description --> + + </div><!-- .loop-meta --> + + <?php elseif ( is_tax() ) : ?> + + <div class="loop-meta archive-info taxonomy-info"> + + <h1 class="loop-title archive-title taxonomy-title"><?php single_term_title(); ?></h1> + + <div class="loop-description archive-description taxonomy-description"> + <?php echo term_description( '', get_query_var( 'taxonomy' ) ); ?> + </div><!-- .loop-description --> + + </div><!-- .loop-meta --> + + <?php elseif ( is_author() ) : ?> + + <?php $id = get_query_var( 'author' ); ?> + + <div id="hcard-<?php the_author_meta( 'user_nicename', $id ); ?>" class="loop-meta vcard archive-info user-info user-profile author-info author-profile"> + + <h1 class="loop-title fn n archive-title user-title author-title"><?php the_author_meta( 'display_name', $id ); ?></h1> + + <div class="loop-description archive-description user-description author-description"> + <?php echo get_avatar( get_the_author_meta( 'user_email', $id ), '100', '', get_the_author_meta( 'display_name', $id ) ); ?> + + <p class="user-bio author-bio"> + <?php the_author_meta( 'description', $id ); ?> + </p><!-- .user-bio --> + </div><!-- .loop-description --> + + </div><!-- .loop-meta --> + + <?php elseif ( is_search() ) : ?> + + <div class="loop-meta search-info"> + + <h1 class="loop-title search-title"><?php echo esc_attr( get_search_query() ); ?></h1> + + <div class="loop-description search-description"> + <p> + <?php printf( __( 'You are browsing the search results for "%1$s"', hybrid_get_textdomain() ), esc_attr( get_search_query() ) ); ?> + </p> + </div><!-- .loop-description --> + + </div><!-- .loop-meta --> + + <?php elseif ( is_date() ) : ?> + + <div class="loop-meta archive-info date-info"> + <h1 class="loop-title archive-title date-title"><?php _e( 'Archives by date', hybrid_get_textdomain() ); ?></h1> + + <div class="loop-description archive-description date-description"> + <p> + <?php _e( 'You are browsing the site archives by date.', hybrid_get_textdomain() ); ?> + </p> + </div><!-- .loop-description --> + + </div><!-- .loop-meta --> + + <?php elseif ( is_post_type_archive() ) : ?> + + <?php $post_type = get_post_type_object( get_query_var( 'post_type' ) ); ?> + + <div class="loop-meta archive-info"> + + <h1 class="loop-title archive-title"><?php post_type_archive_title(); ?></h1> + + <div class="loop-description archive-description"> + <?php if ( !empty( $post_type->description ) ) echo "<p>{$post_type->description}</p>"; ?> + </div><!-- .loop-description --> + + </div><!-- .loop-meta --> + + <?php elseif ( is_archive() ) : ?> + + <div class="loop-meta archive-info"> + + <h1 class="loop-title archive-title"><?php _e( 'Archives', hybrid_get_textdomain() ); ?></h1> + + <div class="loop-description archive-description"> + <p> + <?php _e( 'You are browsing the site archives.', hybrid_get_textdomain() ); ?> + </p> + </div><!-- .loop-description --> + + </div><!-- .loop-meta --> + + <?php endif; ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/loop-nav.php b/wp-content/themes/hybrid/loop-nav.php new file mode 100644 index 000000000..d3c0b439f --- /dev/null +++ b/wp-content/themes/hybrid/loop-nav.php @@ -0,0 +1,37 @@ +<?php +/** + * Navigation Links Template + * + * This template is used to show your your next/previous post links on singular pages and + * the next/previous posts links on the home/posts page and archive pages. It also integrates + * with the WP PageNavi plugin if activated. + * + * @package Hybrid + * @subpackage Template + */ +?> + + <?php if ( is_attachment() ) : ?> + + <div class="navigation-links"> + <?php previous_post_link( '%link', '<span class="previous">' . __( '« Return to entry', hybrid_get_textdomain() ) . '</span>' ); ?> + </div> + + <?php elseif ( is_singular( 'post' ) ) : ?> + + <div class="navigation-links"> + <?php previous_post_link( '%link', '<span class="previous">' . __( '« Previous', hybrid_get_textdomain() ) . '</span>' ); ?> + <?php next_post_link( '%link', '<span class="next">' . __( 'Next »', hybrid_get_textdomain() ) . '</span>' ); ?> + </div><!-- .navigation-links --> + + <?php elseif ( !is_singular() && function_exists( 'wp_pagenavi' ) ) : wp_pagenavi(); ?> + + <?php elseif ( !is_singular() && current_theme_supports( 'loop-pagination' ) ) : loop_pagination(); ?> + + <?php elseif ( !is_singular() && $nav = get_posts_nav_link( array( 'sep' => '', 'prelabel' => '<span class="previous">' . __( '« Previous', hybrid_get_textdomain() ) . '</span>', 'nxtlabel' => '<span class="next">' . __( 'Next »', hybrid_get_textdomain() ) . '</span>' ) ) ) : ?> + + <div class="navigation-links"> + <?php echo $nav; ?> + </div><!-- .navigation-links --> + + <?php endif; ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/menu-primary.php b/wp-content/themes/hybrid/menu-primary.php index e974de23f..5ba42aa6a 100644 --- a/wp-content/themes/hybrid/menu-primary.php +++ b/wp-content/themes/hybrid/menu-primary.php @@ -3,21 +3,21 @@ * Primary Menu Template * * Displays the Primary Menu if it has active menu items. - * @link http://themehybrid.com/themes/hybrid/menus * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/menus */ -if ( has_nav_menu( 'primary-menu' ) ) : ?> +if ( has_nav_menu( 'primary' ) ) : ?> <div id="primary-menu" class="menu-container"> - <?php hybrid_before_primary_menu(); // Before primary menu hook ?> + <?php do_atomic( 'before_primary_menu' ); // hybrid_before_primary_menu ?> - <?php wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container_class' => 'menu', 'menu_class' => '', 'fallback_cb' => '' ) ); ?> + <?php wp_nav_menu( array( 'theme_location' => 'primary', 'container_class' => 'menu', 'menu_class' => '', 'fallback_cb' => '' ) ); ?> - <?php hybrid_after_primary_menu(); // After primary menu hook ?> + <?php do_atomic( 'after_primary_menu' ); // hybrid_after_primary_menu ?> </div><!-- #primary-menu .menu-container --> diff --git a/wp-content/themes/hybrid/page-archives.php b/wp-content/themes/hybrid/page-archives.php index f9fd2cc50..24e8932f3 100644 --- a/wp-content/themes/hybrid/page-archives.php +++ b/wp-content/themes/hybrid/page-archives.php @@ -2,37 +2,31 @@ /** * Template Name: Archives * - * This will list your categories and monthly archives by default. - * @link http://themehybrid.com/themes/hybrid/page-templates/archives - * - * Alternately, you can activate an archives plugin. - * @link http://justinblanton.com/projects/smartarchives - * @link http://wordpress.org/extend/plugins/clean-archives-reloaded - * @link http://www.geekwithlaptop.com/projects/clean-archives + * This will list your categories and monthly archives by default. Alternatively, you can activate + * an archives plugin. * * @package Hybrid * @subpackage Template + * @deprecated 0.9.0 Template will be renamed page-template-archives.php to comply with theme repo guidelines. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> - <?php if ( function_exists( 'clean_my_archives' ) ) : echo clean_my_archives(); ?> - - <?php elseif ( function_exists( 'smartArchives' ) ) : smartArchives( 'both', '' ); ?> + <?php if ( function_exists( 'smartArchives' ) ) : smartArchives( 'both', '' ); ?> <?php elseif ( function_exists( 'wp_smart_archives' ) ) : wp_smart_archives(); ?> @@ -40,13 +34,13 @@ get_header(); ?> <?php else : ?> - <h2><?php _e( 'Archives by category', 'hybrid' ); ?></h2> + <h2><?php _e( 'Archives by category', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo category-archives"> - <?php wp_list_categories( array( 'feed' => __( 'RSS', 'hybrid' ), 'show_count' => true, 'use_desc_for_title' => false, 'title_li' => false ) ); ?> + <?php wp_list_categories( array( 'feed' => __( 'RSS', hybrid_get_textdomain() ), 'show_count' => true, 'use_desc_for_title' => false, 'title_li' => false ) ); ?> </ul><!-- .xoxo .category-archives --> - <h2><?php _e( 'Archives by month', 'hybrid' ); ?></h2> + <h2><?php _e( 'Archives by month', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo monthly-archives"> <?php wp_get_archives( array( 'show_post_count' => true, 'type' => 'monthly' ) ); ?> @@ -54,30 +48,28 @@ get_header(); ?> <?php endif; ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-authors.php b/wp-content/themes/hybrid/page-authors.php index cfafba6bd..579ab64da 100644 --- a/wp-content/themes/hybrid/page-authors.php +++ b/wp-content/themes/hybrid/page-authors.php @@ -4,29 +4,32 @@ * * The Authors page template is for listing the authors of your site. It shows each author's * biographical information and avatar while linking the author's archive page. - * @link http://themehybrid.com/themes/hybrid/page-templates/authors * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/authors + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> - <?php foreach ( get_users_of_blog() as $author ) : ?> + <?php $users = get_users(); ?> + + <?php foreach ( $users as $author ) : ?> <?php $user = new WP_User( $author->ID ); ?> @@ -50,30 +53,28 @@ get_header(); ?> <?php endforeach; ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-biography.php b/wp-content/themes/hybrid/page-biography.php index 192ee2e82..430a2ede6 100644 --- a/wp-content/themes/hybrid/page-biography.php +++ b/wp-content/themes/hybrid/page-biography.php @@ -4,28 +4,27 @@ * * A page template for listing the page author's avatar, biographical info, and other links set in their profile. * Should make it easy to create an about page or biography for single-author blogs. - * @link http://themehybrid.com/themes/hybrid/page-templates/biography * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/biography + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> - <?php if ( $page != $wp_query->get( 'page' ) ) : ?> - <div id="hcard-<?php the_author_meta( 'user_nicename' ); ?>" class="author-profile vcard"> <a href="<?php echo get_author_posts_url( get_the_author_meta( 'ID' ) ); ?>" title="<?php the_author_meta( 'display_name' ); ?>"> @@ -39,56 +38,52 @@ get_header(); ?> <ul class="xoxo clear"> <?php if ( get_the_author_meta( 'nickname' ) ) : ?> - <li><strong><?php _e( 'Nickname:', 'hybrid' ); ?></strong> <span class="nickname"><?php the_author_meta( 'nickname' ); ?></span></li> + <li><strong><?php _e( 'Nickname:', hybrid_get_textdomain() ); ?></strong> <span class="nickname"><?php the_author_meta( 'nickname' ); ?></span></li> <?php endif; ?> <?php if ( get_the_author_meta( 'user_url' ) ) : ?> - <li><strong><?php _e( 'Website:', 'hybrid' ); ?></strong> <a class="url" href="<?php the_author_meta( 'user_url' ); ?>" title="<?php the_author_meta( 'user_url' ); ?>"><?php the_author_meta( 'user_url' ); ?></a></li> + <li><strong><?php _e( 'Website:', hybrid_get_textdomain() ); ?></strong> <a class="url" href="<?php the_author_meta( 'user_url' ); ?>" title="<?php the_author_meta( 'user_url' ); ?>"><?php the_author_meta( 'user_url' ); ?></a></li> <?php endif; ?> <?php if ( get_the_author_meta( 'aim' ) ) : ?> - <li><strong><?php _e( 'AIM:', 'hybrid' ); ?></strong> <a class="url" href="aim:goim?screenname=<?php the_author_meta( 'aim' ); ?>" title="<?php printf( __( 'IM with %1$s', 'hybrid' ), get_the_author_meta( 'aim' ) ); ?>"><?php the_author_meta( 'aim' ); ?></a></li> + <li><strong><?php _e( 'AIM:', hybrid_get_textdomain() ); ?></strong> <a class="url" href="aim:goim?screenname=<?php the_author_meta( 'aim' ); ?>" title="<?php printf( __( 'IM with %1$s', hybrid_get_textdomain() ), get_the_author_meta( 'aim' ) ); ?>"><?php the_author_meta( 'aim' ); ?></a></li> <?php endif; ?> <?php if ( get_the_author_meta( 'jabber' ) ) : ?> - <li><strong><?php _e( 'Jabber:', 'hybrid' ); ?></strong> <a class="url" href="xmpp:<?php the_author_meta( 'jabber' ); ?>@jabberservice.com" title="<?php printf( __( 'IM with %1$s', 'hybrid' ), get_the_author_meta( 'jabber' ) ); ?>"><?php the_author_meta( 'jabber' ); ?></a></li> + <li><strong><?php _e( 'Jabber:', hybrid_get_textdomain() ); ?></strong> <a class="url" href="xmpp:<?php the_author_meta( 'jabber' ); ?>@jabberservice.com" title="<?php printf( __( 'IM with %1$s', hybrid_get_textdomain() ), get_the_author_meta( 'jabber' ) ); ?>"><?php the_author_meta( 'jabber' ); ?></a></li> <?php endif; ?> <?php if ( get_the_author_meta( 'yim' ) ) : ?> - <li><strong><?php _e( 'Yahoo:', 'hybrid' ); ?></strong> <a class="url" href="ymsgr:sendIM?<?php the_author_meta( 'yim' ); ?>" title="<?php printf( __( 'IM with %1$s', 'hybrid' ), get_the_author_meta( 'yim' ) ); ?>"><?php the_author_meta( 'yim' ); ?></a></li> + <li><strong><?php _e( 'Yahoo:', hybrid_get_textdomain() ); ?></strong> <a class="url" href="ymsgr:sendIM?<?php the_author_meta( 'yim' ); ?>" title="<?php printf( __( 'IM with %1$s', hybrid_get_textdomain() ), get_the_author_meta( 'yim' ) ); ?>"><?php the_author_meta( 'yim' ); ?></a></li> <?php endif; ?> </ul><!-- .xoxo --> </div><!-- .author-profile .vcard --> - <?php endif; ?> - <?php the_content(); ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-blog.php b/wp-content/themes/hybrid/page-blog.php index 8ef91e241..3605c86e5 100644 --- a/wp-content/themes/hybrid/page-blog.php +++ b/wp-content/themes/hybrid/page-blog.php @@ -4,17 +4,18 @@ * * If you want to set up an alternate blog page, just use this template for your page. * This template shows your latest posts. - * @link http://themehybrid.com/themes/hybrid/page-templates/blog * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/blog + * @deprecated 0.9.0 Users should no longer be using this template. 'home.php' is used to show posts. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php $wp_query = new WP_Query(); @@ -26,31 +27,29 @@ get_header(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> - <?php the_content( sprintf( __( 'Continue reading %1$s', 'hybrid' ), the_title( ' "', '"', false ) ) ); ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php the_content( sprintf( __( 'Continue reading %1$s', hybrid_get_textdomain() ), the_title( ' "', '"', false ) ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> <?php endwhile; ?> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-bookmarks.php b/wp-content/themes/hybrid/page-bookmarks.php index a459f917a..220db4d8e 100644 --- a/wp-content/themes/hybrid/page-bookmarks.php +++ b/wp-content/themes/hybrid/page-bookmarks.php @@ -4,23 +4,24 @@ * * The bookmarks template is a page template that displays a list of all your bookmarks/links * by link category below the main content of the page. - * @link http://themehybrid.com/themes/hybrid/page-templates/bookmarks * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/bookmarks + * @deprecated 0.9.0 Template will be renamed page-template-bookmarks.php to comply with theme repo guidelines. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> @@ -40,30 +41,28 @@ get_header(); ?> ); ?> <?php wp_list_bookmarks( $args ); ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-categories.php b/wp-content/themes/hybrid/page-categories.php index 48153a69f..18eb677e9 100644 --- a/wp-content/themes/hybrid/page-categories.php +++ b/wp-content/themes/hybrid/page-categories.php @@ -4,56 +4,55 @@ * * The categories template is a page template that lists your categories along with a link * to the each category's RSS feed and post count. - * @link http://themehybrid.com/themes/hybrid/page-templates/categories * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/categories + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> <ul class="xoxo category-archives"> - <?php wp_list_categories( array( 'feed' => __( 'RSS', 'hybrid' ), 'show_count' => true, 'use_desc_for_title' => false, 'title_li' => false ) ); ?> + <?php wp_list_categories( array( 'feed' => __( 'RSS', hybrid_get_textdomain() ), 'show_count' => true, 'use_desc_for_title' => false, 'title_li' => false ) ); ?> </ul><!-- .xoxo .category-archives --> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-daily.php b/wp-content/themes/hybrid/page-daily.php index d04bfd525..a2b1cbbce 100644 --- a/wp-content/themes/hybrid/page-daily.php +++ b/wp-content/themes/hybrid/page-daily.php @@ -7,19 +7,20 @@ * * @package Hybrid * @subpackage Template + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> @@ -29,30 +30,28 @@ get_header(); ?> <?php wp_get_archives( array( 'type' => 'daily', 'show_post_count' => true ) ); ?> </ul><!-- .xoxo .daily-archives --> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-logged-in.php b/wp-content/themes/hybrid/page-logged-in.php index f86e7cd8b..6d4758252 100644 --- a/wp-content/themes/hybrid/page-logged-in.php +++ b/wp-content/themes/hybrid/page-logged-in.php @@ -6,36 +6,37 @@ * of the page and its comments. If the user isn't logged in, a message to log in with a link to the * WordPress login page will be displayed. If the site has open registration, a link to register will * also be displayed. - * @link http://themehybrid.com/themes/hybrid/page-templates/logged-in * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/logged-in + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() && is_user_logged_in() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> @@ -43,34 +44,32 @@ get_header(); ?> <div id="post-0" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <p class="alert"> - <?php printf( __( 'You must be <a href="%1$s" title="Log in">logged in</a> to view the content of this page.', 'hybrid' ), wp_login_url( get_permalink() ) ); ?> + <?php printf( __( 'You must be <a href="%1$s" title="Log in">logged in</a> to view the content of this page.', hybrid_get_textdomain() ), wp_login_url( get_permalink() ) ); ?> - <?php if ( get_option( 'users_can_register' ) ) printf( __( 'If you\'re not currently a member, please take a moment to <a href="%1$s" title="Register">register</a>.', 'hybrid' ), site_url( 'wp-login.php?action=register', 'login' ) ); ?> + <?php if ( get_option( 'users_can_register' ) ) printf( __( 'If you\'re not currently a member, please take a moment to <a href="%1$s" title="Register">register</a>.', hybrid_get_textdomain() ), site_url( 'wp-login.php?action=register', 'login' ) ); ?> </p><!-- .alert --> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- #post-0 .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-monthly.php b/wp-content/themes/hybrid/page-monthly.php index c15c0c14c..dd4539699 100644 --- a/wp-content/themes/hybrid/page-monthly.php +++ b/wp-content/themes/hybrid/page-monthly.php @@ -1,25 +1,26 @@ <?php /** * Template Name: Monthly - ** + * * The Monthly page template is used to show a list of your post archives by month. For each month a * post has been made, the month is listed along with the number of posts for that particular month. * * @package Hybrid * @subpackage Template + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> @@ -29,30 +30,28 @@ get_header(); ?> <?php wp_get_archives( array( 'type' => 'monthly', 'show_post_count' => true ) ); ?> </ul><!-- .xoxo .monthly-archives --> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-no-widgets.php b/wp-content/themes/hybrid/page-no-widgets.php index 0b9504494..e40ac3380 100644 --- a/wp-content/themes/hybrid/page-no-widgets.php +++ b/wp-content/themes/hybrid/page-no-widgets.php @@ -3,49 +3,48 @@ * Template Name: No Widgets * * A template to use on pages that disables widgets in all widget areas. - * @link http://themehybrid.com/themes/hybrid/page-templates/no-widgets * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/no-widgets + * @deprecated 0.9.0 Template will be renamed page-template-no-widgets.php to comply with theme repo guidelines. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-post_tag-cloud.php b/wp-content/themes/hybrid/page-post_tag-cloud.php index 35e69de7d..b2a02a230 100644 --- a/wp-content/themes/hybrid/page-post_tag-cloud.php +++ b/wp-content/themes/hybrid/page-post_tag-cloud.php @@ -4,56 +4,55 @@ * * The Tags template is a page template that displays a tag cloud of your post_tag (taxonomy) * terms, linking to each term's archive. - * @link http://themehybrid.com/themes/hybrid/page-templates/tags * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/tags + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> - <p class="post_tag-cloud tag-cloud"> + <p class="term-cloud post_tag-cloud tag-cloud"> <?php wp_tag_cloud( array( 'number' => 0 ) ); ?> - </p><!-- .post_tag-cloud .tag-cloud --> + </p><!-- .term-cloud .post_tag-cloud --> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-sitemap.php b/wp-content/themes/hybrid/page-sitemap.php index aa340bc49..f2c201a42 100644 --- a/wp-content/themes/hybrid/page-sitemap.php +++ b/wp-content/themes/hybrid/page-sitemap.php @@ -4,116 +4,115 @@ * * The Sitemap template is a page template that creates and HTML-based sitemap of your * site, listing nearly every page of your site. It lists your feeds, pages, archives, and posts. - * @link http://themehybrid.com/themes/hybrid/page-templates/sitemap * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/sitemap + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> - <h2><?php _e( 'Feeds', 'hybrid' ); ?></h2> + <h2><?php _e( 'Feeds', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo feeds"> - <li><a href="<?php bloginfo( 'rdf_url' ); ?>" title="<?php esc_attr_e( 'RDF/RSS 1.0 feed', 'hybrid' ); ?>"><?php _e( '<acronym title="Resource Description Framework">RDF</acronym> <acronym title="Really Simple Syndication">RSS</acronym> 1.0 feed', 'hybrid' ); ?></a></li> - <li><a href="<?php bloginfo( 'rss_url' ); ?>" title="<?php esc_attr_e( 'RSS 0.92 feed', 'hybrid' ); ?>"><?php _e( '<acronym title="Really Simple Syndication">RSS</acronym> 0.92 feed', 'hybrid' ); ?></a></li> - <li><a href="<?php bloginfo( 'rss2_url' ); ?>" title="<?php esc_attr_e( 'RSS 2.0 feed', 'hybrid' ); ?>"><?php _e( '<acronym title="Really Simple Syndication">RSS</acronym> 2.0 feed', 'hybrid' ); ?></a></li> - <li><a href="<?php bloginfo( 'atom_url' ); ?>" title="<?php esc_attr_e( 'Atom feed', 'hybrid' ); ?>"><?php _e( 'Atom feed', 'hybrid' ); ?></a></li> - <li><a href="<?php bloginfo( 'comments_rss2_url' ); ?>" title="<?php esc_attr_e( 'Comments RSS 2.0 feed', 'hybrid' ); ?>"><?php _e( 'Comments <acronym title="Really Simple Syndication">RSS</acronym> 2.0 feed', 'hybrid' ); ?></a></li> + <li><a href="<?php bloginfo( 'rdf_url' ); ?>" title="<?php esc_attr_e( 'RDF/RSS 1.0 feed', hybrid_get_textdomain() ); ?>"><?php _e( '<acronym title="Resource Description Framework">RDF</acronym> <acronym title="Really Simple Syndication">RSS</acronym> 1.0 feed', hybrid_get_textdomain() ); ?></a></li> + <li><a href="<?php bloginfo( 'rss_url' ); ?>" title="<?php esc_attr_e( 'RSS 0.92 feed', hybrid_get_textdomain() ); ?>"><?php _e( '<acronym title="Really Simple Syndication">RSS</acronym> 0.92 feed', hybrid_get_textdomain() ); ?></a></li> + <li><a href="<?php bloginfo( 'rss2_url' ); ?>" title="<?php esc_attr_e( 'RSS 2.0 feed', hybrid_get_textdomain() ); ?>"><?php _e( '<acronym title="Really Simple Syndication">RSS</acronym> 2.0 feed', hybrid_get_textdomain() ); ?></a></li> + <li><a href="<?php bloginfo( 'atom_url' ); ?>" title="<?php esc_attr_e( 'Atom feed', hybrid_get_textdomain() ); ?>"><?php _e( 'Atom feed', hybrid_get_textdomain() ); ?></a></li> + <li><a href="<?php bloginfo( 'comments_rss2_url' ); ?>" title="<?php esc_attr_e( 'Comments RSS 2.0 feed', hybrid_get_textdomain() ); ?>"><?php _e( 'Comments <acronym title="Really Simple Syndication">RSS</acronym> 2.0 feed', hybrid_get_textdomain() ); ?></a></li> </ul><!-- .xoxo .feeds --> - <h2><?php _e( 'Pages', 'hybrid' ); ?></h2> + <h2><?php _e( 'Pages', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo pages"> <?php wp_list_pages( array( 'title_li' => false ) ); ?> </ul><!-- .xoxo .pages --> - <h2><?php _e( 'Category Archives', 'hybrid' ); ?></h2> + <h2><?php _e( 'Category Archives', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo category-archives"> - <?php wp_list_categories( array( 'feed' => __( 'RSS', 'hybrid' ), 'show_count' => true, 'use_desc_for_title' => false, 'title_li' => false ) ); ?> + <?php wp_list_categories( array( 'feed' => __( 'RSS', hybrid_get_textdomain() ), 'show_count' => true, 'use_desc_for_title' => false, 'title_li' => false ) ); ?> </ul><!-- .xoxo .category-archives --> - <h2><?php _e( 'Author Archives', 'hybrid' ); ?></h2> + <h2><?php _e( 'Author Archives', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo author-archives"> - <?php wp_list_authors( array( 'exclude_admin' => false, 'show_fullname' => true, 'feed' => __( 'RSS', 'hybrid' ), 'optioncount' => true, 'title_li' => false ) ); ?> + <?php wp_list_authors( array( 'exclude_admin' => false, 'show_fullname' => true, 'feed' => __( 'RSS', hybrid_get_textdomain() ), 'optioncount' => true, 'title_li' => false ) ); ?> </ul><!-- .xoxo .author-archives --> - <h2><?php _e( 'Yearly Archives', 'hybrid' ); ?></h2> + <h2><?php _e( 'Yearly Archives', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo yearly-archives"> <?php wp_get_archives( array( 'type' => 'yearly', 'show_post_count' => true ) ); ?> </ul><!-- .xoxo .yearly-archives --> - <h2><?php _e( 'Monthly Archives', 'hybrid' ); ?></h2> + <h2><?php _e( 'Monthly Archives', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo monthly-archives"> <?php wp_get_archives( array( 'type' => 'monthly', 'show_post_count' => true ) ); ?> </ul><!-- .xoxo .monthly-archives --> - <h2><?php _e( 'Weekly Archives', 'hybrid' ); ?></h2> + <h2><?php _e( 'Weekly Archives', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo weekly-archives"> <?php wp_get_archives( array( 'type' => 'weekly', 'show_post_count' => true ) ); ?> </ul><!-- .xoxo .weekly-archives --> - <h2><?php _e( 'Daily Archives', 'hybrid' ); ?></h2> + <h2><?php _e( 'Daily Archives', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo daily-archives"> <?php wp_get_archives( array( 'type' => 'daily', 'show_post_count' => true ) ); ?> </ul><!-- .xoxo .daily-archives --> - <h2><?php _e( 'Tag Archives', 'hybrid' ); ?></h2> + <h2><?php _e( 'Tag Archives', hybrid_get_textdomain() ); ?></h2> <p class="tag-cloud"> <?php wp_tag_cloud( array( 'number' => 0 ) ); ?> </p><!-- .tag-cloud --> - <h2><?php _e( 'Blog Posts', 'hybrid' ); ?></h2> + <h2><?php _e( 'Blog Posts', hybrid_get_textdomain() ); ?></h2> <ul class="xoxo post-archives"> <?php wp_get_archives( array( 'type' => 'postbypost' ) ); ?> </ul><!-- .xoxo .post-archives --> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-weekly.php b/wp-content/themes/hybrid/page-weekly.php index 4f9127db4..f778d47d0 100644 --- a/wp-content/themes/hybrid/page-weekly.php +++ b/wp-content/themes/hybrid/page-weekly.php @@ -7,19 +7,20 @@ * * @package Hybrid * @subpackage Template + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> @@ -29,30 +30,28 @@ get_header(); ?> <?php wp_get_archives( array( 'type' => 'weekly', 'show_post_count' => true ) ); ?> </ul><!-- .xoxo .weekly-archives --> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-widgets.php b/wp-content/themes/hybrid/page-widgets.php index a5623b5d1..5599b560e 100644 --- a/wp-content/themes/hybrid/page-widgets.php +++ b/wp-content/themes/hybrid/page-widgets.php @@ -4,42 +4,41 @@ * * The Widgets template is a page template that is completely widgetized. It houses the * 'Widgets Template' widget area. Customizations to this page should be done through widgets. - * @link http://themehybrid.com/themes/hybrid/page-templates/widgets * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/page-templates/widgets + * @deprecated 0.9.0 Template will be renamed page-template-widgets.php to comply with theme repo guidelines. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> - <?php dynamic_sidebar( 'utility-widgets-template' ); ?> + <?php dynamic_sidebar( 'widgets-template' ); ?> <?php wp_reset_query(); ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> - <?php edit_post_link( __( 'Edit', 'hybrid' ), '<p class="entry-meta"><span class="edit">', '</span></p>' ); ?> + <?php edit_post_link( __( 'Edit', hybrid_get_textdomain() ), '<p class="entry-meta"><span class="edit">', '</span></p>' ); ?> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/page-yearly.php b/wp-content/themes/hybrid/page-yearly.php index 529097b5a..1abf0d3ee 100644 --- a/wp-content/themes/hybrid/page-yearly.php +++ b/wp-content/themes/hybrid/page-yearly.php @@ -7,19 +7,20 @@ * * @package Hybrid * @subpackage Template + * @deprecated 0.9.0 This template will eventually be moved to the Hybrid page templates pack. */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> @@ -29,30 +30,28 @@ get_header(); ?> <?php wp_get_archives( array( 'type' => 'yearly', 'show_post_count' => true ) ); ?> </ul><!-- .xoxo .yearly-archives --> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/post-no-widgets.php b/wp-content/themes/hybrid/post-no-widgets.php index 3347d8e6a..6e4edc802 100644 --- a/wp-content/themes/hybrid/post-no-widgets.php +++ b/wp-content/themes/hybrid/post-no-widgets.php @@ -8,43 +8,41 @@ * @subpackage Template */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else : ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/screenshot.png b/wp-content/themes/hybrid/screenshot.png index 05b05f497b8590b8e275b81d5257fae50fbdfad1..dba6cd1516bf91880b77e23123c67caa5c497cf2 100644 GIT binary patch literal 13244 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 literal 20764 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ÿ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 diff --git a/wp-content/themes/hybrid/search.php b/wp-content/themes/hybrid/search.php index ddd9bb482..63447aad6 100644 --- a/wp-content/themes/hybrid/search.php +++ b/wp-content/themes/hybrid/search.php @@ -9,35 +9,27 @@ * @subpackage Template */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> - <div class="search-info"> - - <h1 class="search-title"><?php echo esc_attr( get_search_query() ); ?></h1> - - <div class="search-description"> - <p><?php printf( __( 'You are browsing the search results for "%1$s"', 'hybrid' ), esc_attr( get_search_query() ) ); ?></p> - </div><!-- .search-description --> - - </div><!-- .search-info --> + <?php get_template_part( 'loop-meta' ); // Loads the loop-meta.php template. ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php get_the_image( array( 'custom_key' => array( 'Thumbnail' ), 'size' => 'thumbnail' ) ); ?> + <?php get_the_image( array( 'meta_key' => 'Thumbnail', 'size' => 'thumbnail' ) ); ?> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-summary"> <?php the_excerpt(); ?> </div><!-- .entry-summary --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> @@ -45,16 +37,12 @@ get_header(); ?> <?php else: ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> - - <?php get_search_form(); ?> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/searchform.php b/wp-content/themes/hybrid/searchform.php index 825d5c24e..141c8deec 100644 --- a/wp-content/themes/hybrid/searchform.php +++ b/wp-content/themes/hybrid/searchform.php @@ -11,12 +11,12 @@ global $search_num; ++$search_num; ?> - <div id="search<?php if ( $search_num ) echo '-' . $search_num; ?>" class="search"> + <div id="search<?php if ( $search_num ) echo "-{$search_num}"; ?>" class="search"> - <form method="get" class="search-form" id="search-form<?php if ( $search_num ) echo '-' . $search_num; ?>" action="<?php echo home_url(); ?>/"> + <form method="get" class="search-form" id="search-form<?php if ( $search_num ) echo "-{$search_num}"; ?>" action="<?php echo trailingslashit( home_url() ); ?>"> <div> - <input class="search-text" type="text" name="s" id="search-text<?php if ( $search_num) echo '-' . $search_num; ?>" tabindex="7" value="<?php if ( is_search() ) echo esc_attr( get_search_query() ); else esc_attr_e( 'Search this site...', 'hybrid' ); ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> - <input class="search-submit button" name="submit" type="submit" id="search-submit<?php if ( $search_num ) echo '-' . $search_num; ?>" tabindex="8" value="<?php esc_attr_e( 'Search', 'hybrid' ); ?>" /> + <input class="search-text" type="text" name="s" id="search-text<?php if ( $search_num) echo "-{$search_num}"; ?>" value="<?php if ( is_search() ) echo esc_attr( get_search_query() ); else esc_attr_e( 'Search this site...', hybrid_get_textdomain() ); ?>" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" /> + <input class="search-submit button" name="submit" type="submit" id="search-submit<?php if ( $search_num ) echo "-{$search_num}"; ?>" value="<?php esc_attr_e( 'Search', hybrid_get_textdomain() ); ?>" /> </div> </form><!-- .search-form --> diff --git a/wp-content/themes/hybrid/sidebar-after-content.php b/wp-content/themes/hybrid/sidebar-after-content.php index f5a41e6b6..137136ce3 100644 --- a/wp-content/themes/hybrid/sidebar-after-content.php +++ b/wp-content/themes/hybrid/sidebar-after-content.php @@ -4,17 +4,17 @@ * * The After Content sidebar template houses the HTML used for the 'Utility: After Content' * sidebar. It will first check if the sidebar is active before displaying anything. - * @link http://themehybrid.com/themes/hybrid/widget-areas * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/widget-areas */ - if ( is_active_sidebar( 'utility-after-content' ) ) : ?> + if ( is_active_sidebar( 'after-content' ) ) : ?> <div id="utility-after-content" class="sidebar utility"> - <?php dynamic_sidebar( 'utility-after-content' ); ?> + <?php dynamic_sidebar( 'after-content' ); ?> </div><!-- #utility-after-content .utility --> diff --git a/wp-content/themes/hybrid/sidebar-after-singular.php b/wp-content/themes/hybrid/sidebar-after-singular.php index d811f9d4b..6f31d1efe 100644 --- a/wp-content/themes/hybrid/sidebar-after-singular.php +++ b/wp-content/themes/hybrid/sidebar-after-singular.php @@ -4,17 +4,17 @@ * * The After Singular sidebar template houses the HTML used for the 'Utility: After Singular' * sidebar. It will first check if the sidebar is active before displaying anything. - * @link http://themehybrid.com/themes/hybrid/widget-areas * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/widget-areas */ - if ( is_active_sidebar( 'utility-after-singular' ) ) : ?> + if ( is_active_sidebar( 'after-singular' ) ) : ?> <div id="utility-after-singular" class="sidebar utility"> - <?php dynamic_sidebar( 'utility-after-singular' ); ?> + <?php dynamic_sidebar( 'after-singular' ); ?> </div><!-- #utility-after-singular .utility --> diff --git a/wp-content/themes/hybrid/sidebar-before-content.php b/wp-content/themes/hybrid/sidebar-before-content.php index 78d02c73b..78a09a569 100644 --- a/wp-content/themes/hybrid/sidebar-before-content.php +++ b/wp-content/themes/hybrid/sidebar-before-content.php @@ -4,17 +4,17 @@ * * The Before Content sidebar template houses the HTML used for the 'Utility: Before Content' * sidebar. It will first check if the sidebar is active before displaying anything. - * @link http://themehybrid.com/themes/hybrid/widget-areas * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/widget-areas */ - if ( is_active_sidebar( 'utility-before-content' ) ) : ?> + if ( is_active_sidebar( 'before-content' ) ) : ?> <div id="utility-before-content" class="sidebar utility"> - <?php dynamic_sidebar( 'utility-before-content' ); ?> + <?php dynamic_sidebar( 'before-content' ); ?> </div><!-- #utility-before-content .utility --> diff --git a/wp-content/themes/hybrid/sidebar-primary.php b/wp-content/themes/hybrid/sidebar-primary.php index 0edd1acde..8370602f3 100644 --- a/wp-content/themes/hybrid/sidebar-primary.php +++ b/wp-content/themes/hybrid/sidebar-primary.php @@ -4,21 +4,21 @@ * * The Primary sidebar template houses the HTML used for the 'Primary' sidebar. * It will first check if the sidebar is active before displaying anything. - * @link http://themehybrid.com/themes/hybrid/widget-areas * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/widget-areas */ if ( is_active_sidebar( 'primary' ) ) : ?> <div id="primary" class="sidebar aside"> - <?php hybrid_before_primary(); // Before Primary hook ?> + <?php do_atomic( 'before_primary' ); // hybrid_before_primary ?> <?php dynamic_sidebar( 'primary' ); ?> - <?php hybrid_after_primary(); // After Primary hook ?> + <?php do_atomic( 'after_primary' ); // hybrid_after_primary ?> </div><!-- #primary .aside --> diff --git a/wp-content/themes/hybrid/sidebar-secondary.php b/wp-content/themes/hybrid/sidebar-secondary.php index fc39e4aa5..e66ac6135 100644 --- a/wp-content/themes/hybrid/sidebar-secondary.php +++ b/wp-content/themes/hybrid/sidebar-secondary.php @@ -4,21 +4,21 @@ * * The Secondary sidebar template houses the HTML used for the 'Secondary' sidebar. * It will first check if the sidebar is active before displaying anything. - * @link http://themehybrid.com/themes/hybrid/widget-areas * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/widget-areas */ if ( is_active_sidebar( 'secondary' ) ) : ?> <div id="secondary" class="sidebar aside"> - <?php hybrid_before_secondary(); // Before Secondary hook ?> + <?php do_atomic( 'before_secondary' ); // hybrid_before_secondary ?> <?php dynamic_sidebar( 'secondary' ); ?> - <?php hybrid_after_secondary(); // After Secondary hook ?> + <?php do_atomic( 'after_secondary' ); // hybrid_after_secondary ?> </div><!-- #secondary .aside --> diff --git a/wp-content/themes/hybrid/sidebar-subsidiary.php b/wp-content/themes/hybrid/sidebar-subsidiary.php index 8cb2ec82d..f60b9631e 100644 --- a/wp-content/themes/hybrid/sidebar-subsidiary.php +++ b/wp-content/themes/hybrid/sidebar-subsidiary.php @@ -4,21 +4,21 @@ * * The Subsidiary sidebar template houses the HTML used for the 'Subsidiary' sidebar. * It will first check if the sidebar is active before displaying anything. - * @link http://themehybrid.com/themes/hybrid/widget-areas * * @package Hybrid * @subpackage Template + * @link http://themehybrid.com/themes/hybrid/widget-areas */ if ( is_active_sidebar( 'subsidiary' ) ) : ?> <div id="subsidiary" class="sidebar aside"> - <?php hybrid_before_subsidiary(); // Before Subsidiary hook ?> + <?php do_atomic( 'before_subsidiary' ); // hybrid_before_subsidiary ?> <?php dynamic_sidebar( 'subsidiary' ); ?> - <?php hybrid_after_subsidiary(); // After Subsidiary hook ?> + <?php do_atomic( 'after_subsidiary' ); // hybrid_after_subsidiary ?> </div><!-- #subsidiary .aside --> diff --git a/wp-content/themes/hybrid/singular.php b/wp-content/themes/hybrid/singular.php index 1e2c07a98..2efdb0ce7 100644 --- a/wp-content/themes/hybrid/singular.php +++ b/wp-content/themes/hybrid/singular.php @@ -12,43 +12,41 @@ * @subpackage Template */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> <?php the_content(); ?> - <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', 'hybrid' ), 'after' => '</p>' ) ); ?> + <?php wp_link_pages( array( 'before' => '<p class="page-links pages">' . __( 'Pages:', hybrid_get_textdomain() ), 'after' => '</p>' ) ); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_singular(); // After singular hook ?> + <?php do_atomic( 'after_singular' ); // hybrid_after_singular ?> - <?php comments_template( '/comments.php', true ); ?> + <?php comments_template( '/comments.php', true ); // Loads the comments.php template ?> <?php endwhile; ?> <?php else : ?> - <p class="no-data"> - <?php _e( 'Apologies, but no results were found.', 'hybrid' ); ?> - </p><!-- .no-data --> + <?php get_template_part( 'loop-error' ); // Loads the loop-error.php template. ?> <?php endif; ?> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file diff --git a/wp-content/themes/hybrid/style.css b/wp-content/themes/hybrid/style.css index 196d11a71..4e9535ea5 100644 --- a/wp-content/themes/hybrid/style.css +++ b/wp-content/themes/hybrid/style.css @@ -1,45 +1,16 @@ /** * Theme Name: Hybrid * Theme URI: http://themehybrid.com/themes/hybrid - * Description: A user-friendly, search-engine optimized theme framework, featuring 15 custom page templates and multiple widget-ready areas, allowing you to create any type of site you want. - * Version: 0.8 + * Description: A user-friendly, search-engine optimized parent theme, featuring 15 custom page templates and multiple widget-ready areas, allowing you to create any type of site you want. + * Version: 1.0 * Author: Justin Tadlock * Author URI: http://justintadlock.com * Tags: theme-options, threaded-comments, sticky-post, microformats, translation-ready, rtl-language-support, one-column, two-columns, three-columns, fixed-width - * Status: publish + * License: GNU General Public License v2.0 + * License URI: http://www.gnu.org/licenses/gpl-2.0.html * - * Copyright (c) 2008 - 2010 Justin Tadlock. All rights reserved. + * Copyright (c) 2008 - 2011 Justin Tadlock. All rights reserved. * http://justintadlock.com - * - * Hybrid is released under the GNU General Public License, version 2 (GPL). - * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ -/* Get base CSS */ -@import url('library/css/21px.css'); - -/* Get layout CSS */ -@import url('library/css/2c-l-fixed.css'); - -/* Get plugins CSS */ -@import url('library/css/plugins.css'); - -/* Get drop-downs CSS */ -@import url('library/css/drop-downs.css'); - -/* Get default CSS */ -@import url('library/css/screen.css'); - -/* Make sure theme clears WP.org theme repository checklist */ -.alignright {} -.alignleft {} -.alignnone {} -.aligncenter {} -.avatar {} -.wp-caption {} -.gallery {} -.wp-smiley {} \ No newline at end of file +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}body{line-height:24px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 21px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 21px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 21px 2.5em}ol{list-style-type:decimal;margin:0 0 21px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 18px 3px}dl dt{font-weight:bold;margin:12px 0 0 0}dl dd{margin:6px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 21px 0}li address,dd address{margin:0}blockquote{margin:0 2.5em;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:21px;margin-bottom:21px;padding:9px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del,s,strike{text-decoration:line-through}object{margin-bottom:21px}input,textarea{font-size:1em;padding:3px}input[type="submit"]{cursor:pointer}:focus{outline:none}form label{cursor:pointer}option{padding:1px 3px}table{border-collapse:collapse;border-spacing:0;margin-bottom:21px}th,td{text-align:left}hr{height:1px;margin-bottom:21px;background:#333}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:21px}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 21px auto}.alignnone,.block{clear:both;margin:0 0 21px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote.alignright{width:33%}#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:left;width:620px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{position:relative;float:right;width:300px}#secondary{position:relative;clear:right;float:right;width:300px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both;overflow:hidden}div.menu ul{margin:0;padding:0;list-style:none;line-height:1.0}div.menu ul ul{position:absolute;top:-999em;width:10em}div.menu ul ul li{width:100%}div.menu li:hover{visibility:inherit}div.menu li{float:left;position:relative}div.menu a{display:block;position:relative}div.menu li:hover ul,li.sfHover ul{left:0;top:2em;z-index:99}div.menu li:hover li ul,li.sfHover li ul{top:-999em}div.menu li li:hover ul,li li.sfHover ul{left:10em;top:0}div.menu li li:hover li ul,li li.sfHover li ul{top:-999em}div.menu li li li:hover ul,li li li.sfHover ul{left:10em;top:0}.gallery{display:block;clear:both;overflow:hidden;margin:0 auto}.gallery .gallery-row{display:block;clear:both;overflow:hidden;margin:0}.gallery .gallery-item{overflow:hidden;float:left;margin:0;text-align:center;list-style:none;padding:0}.gallery .gallery-item .gallery-icon img{width:auto;max-width:89%;height:auto;padding:1%;margin:0 auto}.gallery-caption{margin-left:0}.gallery .col-0{width:100%}.gallery .col-1{width:100%}.gallery .col-2{width:50%}.gallery .col-3{width:33.33%}.gallery .col-4{width:25%}.gallery .col-5{width:20%}.gallery .col-6{width:16.66%}.gallery .col-7{width:14.28%}.gallery .col-8{width:12.5%}.gallery .col-9{width:11.11%}.gallery .col-10{width:10%}.gallery .col-11{width:9.09%}.gallery .col-12{width:8.33%}.gallery .col-13{width:7.69%}.gallery .col-14{width:7.14%}.gallery .col-15{width:6.66%}.gallery .col-16{width:6.25%}.gallery .col-17{width:5.88%}.gallery .col-18{width:5.55%}.gallery .col-19{width:5.26%}.gallery .col-20{width:5%}.gallery .col-21{width:4.76%}.gallery .col-22{width:4.54%}.gallery .col-23{width:4.34%}.gallery .col-24{width:4.16%}.gallery .col-25{width:4%}.gallery .col-26{width:3.84%}.gallery .col-27{width:3.7%}.gallery .col-28{width:3.57%}.gallery .col-29{width:3.44%}.gallery .col-30{width:3.33%}.sticky,.bypostauthor{}body{font:normal normal normal 15px/21px Georgia,Times,"Times New Roman",serif;color:#000}#body-container{margin:90px auto 21px auto}a{color:#21759b;text-decoration:none}a:visited{color:#551a8b}a:hover,a:active{color:#d54e21;text-decoration:underline}h1,h2,h3,h4,h5,h6{font-family:Arial,Verdana,sans-serif;color:#000;font-weight:bold}h1{font-size:24px}h2{font-size:21px}h3{font-size:19px}h4{font-size:17px}h5{font-size:15px}h6{font-size:13px}ul{list-style:square}blockquote{font-style:italic;color:#555}blockquote blockquote{color:#777}blockquote em{font-style:normal}pre{padding:9px;background:#f9f9f9;border:1px solid #ccc}code{padding:0 3px;background:#eee}pre code{background:transparent}table{width:100%;border-collapse:separate;border-top:1px solid #ccc;border-left:1px solid #ccc}caption{font-size:.9em;font-style:italic;text-align:right}td,th{padding:3px 6px;border-bottom:1px solid #ccc;border-right:1px solid #ccc}th{background:#eee}.drop-cap{float:left;margin:3px 3px 0 0;font:normal normal normal 47px/35px "Warnock Pro","Goudy Old Style",Palatino,"Book Antiqua",Georgia,serif;color:#333}.note{padding:6px 9px;background:#eee;border:1px solid #ccc}.warning,.alert{padding:6px 9px;background:#fffbbc;border:1px solid #E6DB55}.error{padding:6px 9px;background:#ffebe8;border:1px solid #C00}.download{padding:6px 9px;background:#e7f7d3;border:1px solid #6c3}.breadcrumb{margin:0 0 30px 0;font-size:.9em;font-style:italic;color:#666}.breadcrumb a{color:#111;text-decoration:none}.breadcrumb a:hover{color:#d54e21;text-decoration:underline}.hentry img{max-width:610px;height:auto;padding:4px;border:1px solid #ccc}.no-widgets .hentry img{max-width:950px}img.alignleft,img.alignright{margin-bottom:10px}.thumbnail{float:left;width:100px;height:100px;margin:5px 15px 10px 0}img.wp-smiley{max-width:12px;padding:0;background:transparent;border:none}.wp-caption{max-width:616px;margin-top:6px;padding:6px 1px 3px 1px;border:1px solid #ccc;text-align:center}.wp-caption .wp-caption-text{margin:0;padding:0 5px;text-align:right;font-size:.9em;font-style:italic;color:#666}.wp-caption img{max-width:604px;margin:0 auto;padding:0;border:1px solid #666}.no-widgets .wp-caption{max-width:956px}.no-widgets .wp-caption img{max-width:946px}.gallery img{border:1px solid #ccc}.avatar{float:left;width:100px;height:100px;margin:5px 15px 0 0;padding:4px;border:1px solid #ccc}#header{margin:0 0 40px 0}#site-title{font:normal normal bold 35px/35px Arial,Verdana,sans-serif;margin:0 0 10px 0}#site-title a{color:#000}#site-description{font:normal normal normal 16px/20px Georgia,Times,"Times New Roman",serif;margin:0;color:#666}#primary-menu,#navigation{overflow:visible;height:34px;margin:0 0 60px 0;z-index:100}#primary-menu li,#page-nav li{margin-right:15px}#primary-menu li li,#page-nav li li{margin-right:0}#primary-menu li a,#page-nav li a{padding:8px 15px 8px 15px;color:#111;background:#fff;border:1px solid #ccc}#primary-menu li:hover ul,#primary-menu li.sfHover ul,#page-nav li:hover ul,#page-nav li.sfHover ul{top:32px}#primary-menu li li a,#page-nav li li a{border-top:none;margin-right:0}#primary-menu li ul,#page-nav li ul{background:#fff;border-top:1px solid #ccc}#primary-menu li li:hover ul,#primary-menu li li.sfHover ul,#primary-menu li li li:hover ul,#primary-menu li li li.sfHover ul,#page-nav li li:hover ul,#page-nav li li.sfHover ul,#page-nav li li li:hover ul,#page-nav li li li.sfHover ul {top:-1px}#primary-menu li li li,#page-nav li li li{margin-left:-1px}#container{margin-bottom:21px}.content{margin:0 0 21px 0}.no-widgets .content,.page-template-no-widgets .content{width:960px}.hentry{overflow:hidden;margin:0 0 40px 0}.singular .hentry{margin:0}.loop-meta{overflow:hidden;margin:0 0 40px 0}.loop-title{font:normal normal bold 24px/24px Arial,Verdana,sans-serif}.entry-title{font:normal normal bold 24px/24px Arial,Verdana,sans-serif;margin:0 0 12px 0}.archive .entry-title,.search .entry-title{font-size:21px;margin:0 0 5px 0}.singular-page .entry-title,.singular-attachment .entry-title{margin:0 0 21px 0}.entry-title a{color:#000}.byline{margin:0 0 30px 0;font-style:italic;color:#666}.archive .byline,.search .byline{margin:0 0 5px 0}.entry-content{margin:0 0 10px 0}.entry-meta{clear:both;font-style:italic;color:#666}p.page-links,.comment-pagination{clear:both}.comment-pagination{margin-bottom:21px}p.page-links a,.comment-pagination .page-numbers{margin:0 3px;padding:3px 9px 3px 9px;border:1px solid #ccc}.navigation-links{margin-bottom:21px;font-style:italic}.navigation-links .previous{float:left;max-width:50%}.navigation-links .next{float:right;max-width:50%;text-align:right}.navigation-attachment{overflow:hidden}.widget{overflow:hidden;margin:0 0 15px 0;color:#464646}.widget a{color:#464646;text-decoration:underline}.widget a:hover{color:#d54e21;text-decoration:none}.widget-title{font-size:18px;color:#111}#utility-before-content,#utility-after-content,#utility-after-page,#utility-after-single{margin:0 0 21px 0;padding:20px 20px 0 20px;border:1px solid #ccc}#comments-template{clear:both}.comments-header{font-size:1.2em}.comments-closed{font-style:italic}ol.comment-list,ol.comment-list ol.children{list-style:none;margin:0 0 21px 0}li.comment,li li li.comment,li li li li li.comment,li li li li li li li.comment,li li li li li li li li li.comment,li.pingback,li.trackback{overflow:hidden;margin:0 0 21px 0;padding:21px 21px 0 21px;background:#fff;border:1px solid #ccc}li li.comment,li li li li.comment,li li li li li li.comment,li li li li li li li li.comment,li li li li li li li li li li.comment{background:#f9f9f9}#comments-template .avatar{width:40px;height:40px;float:left;margin-right:15px;padding:0;border:1px solid #666}.comment-meta{margin:10px 0 21px 0;font-size:13px;color:#666}.comment-author{font-size:15px;color:#000}.comment-reply-link,.permalink,.comment-edit-link{font-style:italic;color:#666}.comment-text{clear:left;margin:0 15px}.text-input{display:block;padding:3px 6px;width:97%}#comments-template label{font-size:.9em}textarea{width:98%}#submit{display:inline-block;margin-right:15px;padding:7px 15px 8px 15px;background:#fff;border:1px solid #ccc}#submit:hover{cursor:pointer;background:#f9f9f9}#footer-container{clear:both;margin:0 0 21px 0}#subsidiary{margin:0 0 21px 0}#footer{font-style:italic;color:#444}#footer .copyright{display:inline;float:left;margin-right:9px}.content{float:left;width:620px}#primary{float:right;width:300px}#secondary{clear:right;float:right;width:300px} \ No newline at end of file diff --git a/wp-content/themes/hybrid/style.dev.css b/wp-content/themes/hybrid/style.dev.css new file mode 100644 index 000000000..ea8746dde --- /dev/null +++ b/wp-content/themes/hybrid/style.dev.css @@ -0,0 +1,561 @@ +/** + * Development stylesheet. Use this file for development purposes by adding this to your 'wp-config.php' file: + * define( 'SCRIPT_DEBUG', true ); + * This allows you to build large-sized stylesheets with plenty notes and comments. Before releasing, compress + * this file and replace the compressed CSS in the 'style.css' file. + * @link http://www.cssdrive.com/index.php/main/csscompressor + */ + +/* Get base CSS */ +html,body,div,span,object,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;background:transparent;border:none;text-decoration:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,i,hr,u,center,menu,layer,s,strike,font,xmp{margin:0;padding:0;vertical-align:baseline;outline:none;font-size:100%;font-weight:normal;font-style:normal;background:transparent;border:none;text-decoration:none}body{line-height:24px;font-family:Georgia,Times,"Times New Roman",serif;color:#333;background:#fff}h1,h2,h3,h4,h5,h6{font-style:normal;font-weight:normal;margin:0 0 21px 0}h1{font-size:1.8em}h2{font-size:1.7em}h3{font-size:1.55em}h4{font-size:1.4em}h5{font-size:1.25em}h6{font-size:1.1em}p{margin:0 0 21px 0}ol,ul{list-style:none}ul{list-style:disc;margin:0 0 21px 2.5em}ol{list-style-type:decimal;margin:0 0 21px 3em}ol ol{list-style:upper-roman}ol ol ol{list-style:lower-roman}ol ol ol ol{list-style:upper-alpha}ol ol ol ol ol{list-style:lower-alpha}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}dl{margin:0 0 18px 3px}dl dt{font-weight:bold;margin:12px 0 0 0}dl dd{margin:6px 0 0 1.5em}strong{font-weight:bold}strong strong{font-weight:normal}em,cite{font-style:italic}em em,cite cite{font-style:normal}abbr{cursor:help}acronym{text-transform:uppercase;border-bottom:1px dashed #666;cursor:help}big{font-size:120%}small,sup,sub{font-size:80%}sup{vertical-align:baseline;position:relative;bottom:0.3em}sub{vertical-align:baseline;position:relative;top:0.3em}address{font-style:italic;margin:0 0 21px 0}li address,dd address{margin:0}blockquote{margin:0 2.5em;font-style:normal}blockquote em,blockquote cite{font-style:italic}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}a{cursor:pointer}a img{border:none}pre{overflow:auto;font:.9em Monaco,monospace,Courier,"Courier New";line-height:21px;margin-bottom:21px;padding:9px}code{font:.9em Monaco,monospace,Courier,"Courier New"}pre code{font-size:1em}ins,dfn{font-style:italic;text-decoration:none;border-bottom:1px solid #666}del,s,strike{text-decoration:line-through}object{margin-bottom:21px}input,textarea{font-size:1em;padding:3px}input[type="submit"]{cursor:pointer}:focus{outline:none}form label{cursor:pointer}option{padding:1px 3px}table{border-collapse:collapse;border-spacing:0;margin-bottom:21px}th,td{text-align:left}hr{height:1px;margin-bottom:21px;background:#333}img.wp-smiley{max-height:12px;margin:0;padding:0;border:none}.gallery{display:block;text-align:center;margin-bottom:21px}.alignleft,.left{float:left;margin-right:15px}.alignright,.right{float:right;margin-left:15px}.aligncenter,.center{display:block;margin:0 auto 21px auto}.alignnone,.block{clear:both;margin:0 0 21px 0}.clear{clear:both}img.alignleft,img.alignright{display:inline}blockquote.alignleft,blockquote.alignright{width:33%} + +/* Get layout CSS */ +#body-container{overflow:hidden;width:960px;margin:0 auto}#container{overflow:hidden;float:left;width:960px}.content{overflow:hidden;float:left;width:620px}.no-widgets .content,.no-default-widgets .content{width:960px}#primary{position:relative;float:right;width:300px}#secondary{position:relative;clear:right;float:right;width:300px}#subsidiary{overflow:hidden}#subsidiary .widget{overflow:hidden;float:left;width:300px;margin:0 20px 0 0}#footer-container{clear:both;overflow:hidden}#footer{clear:both;overflow:hidden} + +/* Get drop-downs CSS */ +div.menu ul{margin:0;padding:0;list-style:none;line-height:1.0}div.menu ul ul{position:absolute;top:-999em;width:10em}div.menu ul ul li{width:100%}div.menu li:hover{visibility:inherit}div.menu li{float:left;position:relative}div.menu a{display:block;position:relative}div.menu li:hover ul,li.sfHover ul{left:0;top:2em;z-index:99}div.menu li:hover li ul,li.sfHover li ul{top:-999em}div.menu li li:hover ul,li li.sfHover ul{left:10em;top:0}div.menu li li:hover li ul,li li.sfHover li ul{top:-999em}div.menu li li li:hover ul,li li li.sfHover ul{left:10em;top:0} + +/* Get gallery CSS */ +.gallery{display:block;clear:both;overflow:hidden;margin:0 auto}.gallery .gallery-row{display:block;clear:both;overflow:hidden;margin:0}.gallery .gallery-item{overflow:hidden;float:left;margin:0;text-align:center;list-style:none;padding:0}.gallery .gallery-item .gallery-icon img{width:auto;max-width:89%;height:auto;padding:1%;margin:0 auto}.gallery-caption{margin-left:0}.gallery .col-0{width:100%}.gallery .col-1{width:100%}.gallery .col-2{width:50%}.gallery .col-3{width:33.33%}.gallery .col-4{width:25%}.gallery .col-5{width:20%}.gallery .col-6{width:16.66%}.gallery .col-7{width:14.28%}.gallery .col-8{width:12.5%}.gallery .col-9{width:11.11%}.gallery .col-10{width:10%}.gallery .col-11{width:9.09%}.gallery .col-12{width:8.33%}.gallery .col-13{width:7.69%}.gallery .col-14{width:7.14%}.gallery .col-15{width:6.66%}.gallery .col-16{width:6.25%}.gallery .col-17{width:5.88%}.gallery .col-18{width:5.55%}.gallery .col-19{width:5.26%}.gallery .col-20{width:5%}.gallery .col-21{width:4.76%}.gallery .col-22{width:4.54%}.gallery .col-23{width:4.34%}.gallery .col-24{width:4.16%}.gallery .col-25{width:4%}.gallery .col-26{width:3.84%}.gallery .col-27{width:3.7%}.gallery .col-28{width:3.57%}.gallery .col-29{width:3.44%}.gallery .col-30{width:3.33%} + +/* WP.org theme repository requirements. */ +.sticky, .bypostauthor {} + +/* Body */ +body { + font: normal normal normal 15px/21px Georgia, Times, "Times New Roman", serif; + color: #000; + } + +/* Body container */ +#body-container { + margin: 90px auto 21px auto; + } + +/* Links */ +a { + color: #21759b; + text-decoration: none; + } +a:visited { + color: #551a8b; + } +a:hover, a:active { + color: #d54e21; + text-decoration: underline; + } + +/* Headers */ +h1, h2, h3, h4, h5, h6 { + font-family: Arial, Verdana, sans-serif; + color: #000; + font-weight: bold; + } +h1 { font-size: 24px; } +h2 { font-size: 21px; } +h3 { font-size: 19px; } +h4 { font-size: 17px; } +h5 { font-size: 15px; } +h6 { font-size: 13px; } + +/* Lists */ +ul { + list-style: square; + } + +/* Blockquotes */ +blockquote { + font-style: italic; + color: #555; + } +blockquote blockquote { + color: #777; + } +blockquote em { + font-style: normal; + } + +/* Code */ +pre { + padding: 9px; + background: #f9f9f9; + border: 1px solid #ccc; + } +code { + padding: 0 3px; + background: #eee; + } +pre code { + background: transparent; + } + +/* Tables */ +table { + width: 100%; + border-collapse: separate; + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + } +caption { + font-size: .9em; + font-style: italic; + text-align: right; + } +td, th { + padding: 3px 6px; + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + } +th { + background: #eee; + } + +/* Drop caps */ +.drop-cap { + float: left; + margin: 3px 3px 0 0; + font: normal normal normal 47px/35px "Warnock Pro", "Goudy Old Style", Palatino,"Book Antiqua", Georgia, serif; + color: #333; + } + +/* Notes */ +.note { + padding: 6px 9px; + background: #eee; + border: 1px solid #ccc; + } + +/* Warnings/Alerts */ +.warning, .alert { + padding: 6px 9px; + background: #fffbbc; + border: 1px solid #E6DB55; + } + +/* Errors */ +.error { + padding: 6px 9px; + background: #ffebe8; + border: 1px solid #C00; + } + +/* Downloads */ +.download { + padding: 6px 9px; + background: #e7f7d3; + border: 1px solid #6c3; + } + +/* Breadcrumb */ +.breadcrumb { + margin: 0 0 30px 0; + font-size: .9em; + font-style: italic; + color: #666; + } +.breadcrumb a { + color: #111; + text-decoration: none; + } +.breadcrumb a:hover { + color: #d54e21; + text-decoration: underline; + } + +/* Images */ +.hentry img { + max-width: 610px; + height: auto; + padding: 4px; + border: 1px solid #ccc; + } +.no-widgets .hentry img { + max-width: 950px; + } +img.alignleft, img.alignright { + margin-bottom: 10px; + } + +.thumbnail { + float: left; + width: 100px; + height: 100px; + margin: 5px 15px 10px 0; + } + +/* Smiley */ +img.wp-smiley { + max-width: 12px; + padding: 0; + background: transparent; + border: none; + } + +/* Captions [caption] */ +.wp-caption { + max-width: 616px; + margin-top: 6px; + padding: 6px 1px 3px 1px; + border: 1px solid #ccc; + text-align: center; + } +.wp-caption .wp-caption-text { + margin: 0; + padding: 0 5px; + text-align: right; + font-size: .9em; + font-style: italic; + color: #666; + } +.wp-caption img { + max-width: 604px; + margin: 0 auto; + padding: 0; + border: 1px solid #666; + } +.no-widgets .wp-caption { + max-width: 956px; + } +.no-widgets .wp-caption img { + max-width: 946px; + } + +/* Gallery [gallery] */ +.gallery img { + border: 1px solid #ccc; + } + +/* Avatars */ +.avatar { + float: left; + width: 100px; + height: 100px; + margin: 5px 15px 0 0; + padding: 4px; + border: 1px solid #ccc; + } + +/* Header */ +#header { + margin: 0 0 40px 0; + } + +/* Blog title */ +#site-title { + font: normal normal bold 35px/35px Arial, Verdana, sans-serif; + margin: 0 0 10px 0; + } +#site-title a { + color: #000; + } + +/* Blog description */ +#site-description { + font: normal normal normal 16px/20px Georgia, Times, "Times New Roman", serif; + margin: 0; + color: #666; + } + +/* Navigation */ +#primary-menu, #navigation { + overflow: visible; + height: 34px; + margin: 0 0 60px 0; + z-index: 100; + } +#primary-menu li, #page-nav li { + margin-right: 15px; + } +#primary-menu li li, #page-nav li li { + margin-right: 0; + } +#primary-menu li a, #page-nav li a { + padding: 8px 15px 8px 15px; + color: #111; + background: #fff; + border: 1px solid #ccc; + } + +/* Drop-downs style */ +#primary-menu li:hover ul, #primary-menu li.sfHover ul, #page-nav li:hover ul, #page-nav li.sfHover ul { + top: 32px; + } +#primary-menu li li a, #page-nav li li a { + border-top: none; + margin-right: 0; + } +#primary-menu li ul, #page-nav li ul { + background: #fff; + border-top: 1px solid #ccc; + } +#primary-menu li li:hover ul, #primary-menu li li.sfHover ul, #primary-menu li li li:hover ul, #primary-menu li li li.sfHover ul, +#page-nav li li:hover ul, #page-nav li li.sfHover ul , #page-nav li li li:hover ul, #page-nav li li li.sfHover ul { + top: -1px; + } +#primary-menu li li li, #page-nav li li li { + margin-left: -1px; + } + +/* Container (wraps content, primary, and secondary) */ +#container { + margin-bottom: 21px; + } + +/* Main content */ +.content { + margin: 0 0 21px 0; + } +.no-widgets .content, .page-template-no-widgets .content { + width: 960px; + } + +/* Posts */ +.hentry { + overflow: hidden; + margin: 0 0 40px 0; + } +.singular .hentry { + margin: 0; + } + +/* Archive information */ +.loop-meta { + overflow: hidden; + margin: 0 0 40px 0; + } +.loop-title { + font: normal normal bold 24px/24px Arial, Verdana, sans-serif; + } + +/* Entry title */ +.entry-title { + font: normal normal bold 24px/24px Arial, Verdana, sans-serif; + margin: 0 0 12px 0; + } +.archive .entry-title, .search .entry-title { + font-size: 21px; + margin: 0 0 5px 0; + } +.singular-page .entry-title, .singular-attachment .entry-title { + margin: 0 0 21px 0; + } +.entry-title a { + color: #000; + } + +/* Byline */ +.byline { + margin: 0 0 30px 0; + font-style: italic; + color: #666; + } +.archive .byline, .search .byline { + margin: 0 0 5px 0; + } + +/* Entry content */ +.entry-content { + margin: 0 0 10px 0; + } + +/* Entry metadata */ +.entry-meta { + clear: both; + font-style: italic; + color: #666; + } + +/* Page links (multiple-paged posts) */ +p.page-links, .comment-pagination { + clear: both; + } +.comment-pagination { + margin-bottom: 21px; + } +p.page-links a, .comment-pagination .page-numbers { + margin: 0 3px; + padding: 3px 9px 3px 9px; + border: 1px solid #ccc; + } + +/* Navigation links */ +.navigation-links { + margin-bottom: 21px; + font-style: italic; + } +.navigation-links .previous { + float: left; + max-width: 50%; + } +.navigation-links .next { + float: right; + max-width: 50%; + text-align: right; + } +.navigation-attachment { + overflow: hidden; + } + +/* Widgets */ +.widget { + overflow: hidden; + margin: 0 0 15px 0; + color: #464646; + } +.widget a { + color: #464646; + text-decoration: underline; + } +.widget a:hover { + color: #d54e21; + text-decoration: none; + } + +/* Widget titles */ +.widget-title { + font-size: 18px; + color: #111; + } + +/* Utility widget areas */ +#utility-before-content, #utility-after-content, #utility-after-page, #utility-after-single { + margin: 0 0 21px 0; + padding: 20px 20px 0 20px; + border: 1px solid #ccc; + } + +/* Comments template */ +#comments-template { + clear: both; + } + +/* Comment headers */ +.comments-header { + font-size: 1.2em; + } + +/* Comments are closed */ +.comments-closed { + font-style: italic; + } + +/* Comment list */ +ol.comment-list, ol.comment-list ol.children { + list-style: none; + margin: 0 0 21px 0; + } +li.comment, +li li li.comment, +li li li li li.comment, +li li li li li li li.comment, +li li li li li li li li li.comment, +li.pingback, li.trackback { + overflow: hidden; + margin: 0 0 21px 0; + padding: 21px 21px 0 21px; + background: #fff; + border: 1px solid #ccc; + } +li li.comment, +li li li li.comment, +li li li li li li.comment, +li li li li li li li li.comment, +li li li li li li li li li li.comment { + background: #f9f9f9; + } + +/* Avatar */ +#comments-template .avatar { + width: 40px; + height: 40px; + float: left; + margin-right: 15px; + padding: 0; + border: 1px solid #666; + } + +/* Comment metadata */ +.comment-meta { + margin: 10px 0 21px 0; + font-size: 13px; + color: #666; + } +.comment-author { + font-size: 15px; + color: #000; + } +.comment-reply-link, .permalink, .comment-edit-link { + font-style: italic; + color: #666; + } + +/* Comment text */ +.comment-text { + clear: left; + margin: 0 15px; + } + +/* Form */ +.text-input { + display: block; + padding: 3px 6px; + width: 97%; + } +#comments-template label { + font-size: .9em; + } + +/* Respond textarea */ +textarea { + width: 98%; + } + +/* Submit and rest buttons */ +#submit { + display: inline-block; + margin-right: 15px; + padding: 7px 15px 8px 15px; + background: #fff; + border: 1px solid #ccc; + } +#submit:hover { + cursor: pointer; + background: #f9f9f9; + } + +/* Footer container */ +#footer-container { + clear: both; + margin: 0 0 21px 0; + } + +/* Subsidiary */ +#subsidiary { + margin: 0 0 21px 0; + } + +/* Footer */ +#footer { + font-style: italic; + color: #444; + } +#footer .copyright { + display: inline; + float: left; + margin-right: 9px; + } + +/* Layout */ +.content { + float: left; + width: 620px; + } +#primary { + float: right; + width: 300px; + } +#secondary { + clear: right; + float: right; + width: 300px; + } \ No newline at end of file diff --git a/wp-content/themes/hybrid/taxonomy-link_category.php b/wp-content/themes/hybrid/taxonomy-link_category.php index 7885a0dc0..d8caaeccd 100644 --- a/wp-content/themes/hybrid/taxonomy-link_category.php +++ b/wp-content/themes/hybrid/taxonomy-link_category.php @@ -9,29 +9,23 @@ * @subpackage Template */ -get_header(); ?> +get_header(); // Loads the header.php template. ?> <div id="content" class="hfeed content"> - <?php hybrid_before_content(); // Before content hook ?> + <?php do_atomic( 'before_content' ); // hybrid_before_content ?> - <div class="archive-info taxonomy-info"> - - <h1 class="archive-title taxonomy-title"><?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); echo $term->name; ?></h1> - - <div class="archive-description taxonomy-description"> - <?php echo term_description( '', get_query_var( 'taxonomy' ) ); ?> - </div><!-- .archive-description --> - - </div><!-- .archive-info --> + <?php get_template_part( 'loop-meta' ); // Loads the loop-meta.php template. ?> <div class="<?php hybrid_entry_class(); ?>"> - <?php hybrid_before_entry(); // Before entry hook ?> + <?php do_atomic( 'before_entry' ); // hybrid_before_entry ?> <div class="entry-content"> - <?php $args = array( + <?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); + + $args = array( 'title_li' => false, 'title_before' => false, 'title_after' => false, @@ -50,12 +44,12 @@ get_header(); ?> </div><!-- .entry-content --> - <?php hybrid_after_entry(); // After entry hook ?> + <?php do_atomic( 'after_entry' ); // hybrid_after_entry ?> </div><!-- .hentry --> - <?php hybrid_after_content(); // After content hook ?> + <?php do_atomic( 'after_content' ); // hybrid_after_content ?> </div><!-- .content .hfeed --> -<?php get_footer(); ?> \ No newline at end of file +<?php get_footer(); // Loads the footer.php template. ?> \ No newline at end of file -- GitLab