Conform to new rules

This commit is contained in:
QWp6t
2015-12-27 23:42:11 -08:00
committed by Ben Word
parent 2d02544173
commit 6a4d3bd51a
12 changed files with 306 additions and 281 deletions

View File

@@ -16,10 +16,10 @@
* themes/sage/index.php also contains some self-correcting code, just in case the template option gets reset * themes/sage/index.php also contains some self-correcting code, just in case the template option gets reset
*/ */
add_filter('template', function ($template) { add_filter('template', function ($template) {
return dirname($template); return dirname($template);
}); });
add_action('after_switch_theme', function () { add_action('after_switch_theme', function () {
update_option('template', get_option('template') . '/templates'); update_option('template', get_option('template') . '/templates');
}); });
/** /**

View File

@@ -2,8 +2,9 @@
<ruleset name="Roots"> <ruleset name="Roots">
<description>Roots Coding Standards</description> <description>Roots Coding Standards</description>
<!-- Use PSR-2 as a base --> <!-- Scan these files -->
<rule ref="PSR2"/> <file>functions.php</file>
<file>src</file>
<!-- Show colors in console --> <!-- Show colors in console -->
<arg value="-colors"/> <arg value="-colors"/>
@@ -11,7 +12,9 @@
<!-- Show sniff codes in all reports --> <!-- Show sniff codes in all reports -->
<arg value="s"/> <arg value="s"/>
<!-- Scan these files --> <!-- Use PSR-2 as a base -->
<file>functions.php</file> <rule ref="PSR2">
<file>src</file> <!-- Allow braces on same line for procedural functions -->
<exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine"/>
</rule>
</ruleset> </ruleset>

View File

@@ -4,13 +4,13 @@
* Theme customizer * Theme customizer
*/ */
add_action('customize_register', function (\WP_Customize_Manager $wp_customize) { add_action('customize_register', function (\WP_Customize_Manager $wp_customize) {
// Add postMessage support // Add postMessage support
$wp_customize->get_setting('blogname')->transport = 'postMessage'; $wp_customize->get_setting('blogname')->transport = 'postMessage';
}); });
/** /**
* Customizer JS * Customizer JS
*/ */
add_action('customize_preview_init', function () { add_action('customize_preview_init', function () {
wp_enqueue_script('sage/customizer.js', asset_path('scripts/customizer.js'), ['customize-preview'], null, true); wp_enqueue_script('sage/customizer.js', asset_path('scripts/customizer.js'), ['customize-preview'], null, true);
}); });

View File

@@ -9,45 +9,45 @@ use Roots\Sage\Template\Wrapper;
*/ */
add_filter('sage/display_sidebar', function ($display) { add_filter('sage/display_sidebar', function ($display) {
// The sidebar will NOT be displayed if ANY of the following return true // The sidebar will NOT be displayed if ANY of the following return true
return $display ? !in_array(true, [ return $display ? !in_array(true, [
is_404(), is_404(),
is_front_page(), is_front_page(),
is_page_template('template-custom.php'), is_page_template('template-custom.php'),
]) : $display; ]) : $display;
}); });
/** /**
* Add <body> classes * Add <body> classes
*/ */
add_filter('body_class', function (array $classes) { add_filter('body_class', function (array $classes) {
// Add page slug if it doesn't exist // Add page slug if it doesn't exist
if (is_single() || is_page() && !is_front_page()) { if (is_single() || is_page() && !is_front_page()) {
if (!in_array(basename(get_permalink()), $classes)) { if (!in_array(basename(get_permalink()), $classes)) {
$classes[] = basename(get_permalink()); $classes[] = basename(get_permalink());
}
} }
}
// Add class if sidebar is active // Add class if sidebar is active
if (display_sidebar()) { if (display_sidebar()) {
$classes[] = 'sidebar-primary'; $classes[] = 'sidebar-primary';
} }
return $classes; return $classes;
}); });
/** /**
* Add "… Continued" to the excerpt * Add "… Continued" to the excerpt
*/ */
add_filter('excerpt_more', function () { add_filter('excerpt_more', function () {
return ' &hellip; <a href="' . get_permalink() . '">' . __('Continued', 'sage') . '</a>'; return ' &hellip; <a href="' . get_permalink() . '">' . __('Continued', 'sage') . '</a>';
}); });
/** /**
* Use theme wrapper * Use theme wrapper
*/ */
add_filter('template_include', function ($main) { add_filter('template_include', function ($main) {
if (!is_string($main) || !(string) $main) { if (!is_string($main) || !(string) $main) {
return $main; return $main;
} }
return template_wrap(new Wrapper(basename($main))); return template_wrap(new Wrapper(basename($main)));
}, 109); }, 109);

View File

@@ -6,12 +6,12 @@ use Roots\Sage\Template\WrapperCollection;
use Roots\Sage\Template\WrapperInterface; use Roots\Sage\Template\WrapperInterface;
function template_wrap(WrapperInterface $wrapper, $slug = 'base') { function template_wrap(WrapperInterface $wrapper, $slug = 'base') {
WrapperCollection::add($wrapper, $slug); WrapperCollection::add($wrapper, $slug);
return $wrapper->getWrapper(); return $wrapper->getWrapper();
} }
function template_unwrap($slug = 'base') { function template_unwrap($slug = 'base') {
return WrapperCollection::get($slug)->getTemplate(); return WrapperCollection::get($slug)->getTemplate();
} }
/** /**
@@ -19,9 +19,9 @@ function template_unwrap($slug = 'base') {
* @return string * @return string
*/ */
function asset_path($filename) { function asset_path($filename) {
static $manifest; static $manifest;
isset($manifest) || $manifest = new JsonManifest(get_template_directory() . '/' . Asset::$dist . '/assets.json'); isset($manifest) || $manifest = new JsonManifest(get_template_directory() . '/' . Asset::$dist . '/assets.json');
return (string) new Asset($filename, $manifest); return (string) new Asset($filename, $manifest);
} }
/** /**
@@ -29,9 +29,9 @@ function asset_path($filename) {
* @return bool * @return bool
*/ */
function display_sidebar() { function display_sidebar() {
static $display; static $display;
isset($display) || $display = apply_filters('sage/display_sidebar', true); isset($display) || $display = apply_filters('sage/display_sidebar', true);
return $display; return $display;
} }
/** /**
@@ -39,20 +39,20 @@ function display_sidebar() {
* @return string * @return string
*/ */
function title() { function title() {
if (is_home()) { if (is_home()) {
if ($home = get_option('page_for_posts', true)) { if ($home = get_option('page_for_posts', true)) {
return get_the_title($home); return get_the_title($home);
}
return __('Latest Posts', 'sage');
} }
return __('Latest Posts', 'sage'); if (is_archive()) {
} return get_the_archive_title();
if (is_archive()) { }
return get_the_archive_title(); if (is_search()) {
} return sprintf(__('Search Results for %s', 'sage'), get_search_query());
if (is_search()) { }
return sprintf(__('Search Results for %s', 'sage'), get_search_query()); if (is_404()) {
} return __('Not Found', 'sage');
if (is_404()) { }
return __('Not Found', 'sage'); return get_the_title();
}
return get_the_title();
} }

View File

@@ -7,28 +7,29 @@ use Roots\Sage\Assets\ManifestInterface;
* @package Roots\Sage * @package Roots\Sage
* @author QWp6t * @author QWp6t
*/ */
class Asset { class Asset
public static $dist = '/dist'; {
public static $dist = '/dist';
/** @var ManifestInterface Currently used manifest */ /** @var ManifestInterface Currently used manifest */
protected $manifest; protected $manifest;
protected $asset; protected $asset;
protected $dir; protected $dir;
public function __construct($file, ManifestInterface $manifest = null) { public function __construct($file, ManifestInterface $manifest = null) {
$this->manifest = $manifest; $this->manifest = $manifest;
$this->asset = basename($file); $this->asset = basename($file);
$this->dir = dirname($file) != '.' ? dirname($file) : ''; $this->dir = dirname($file) != '.' ? dirname($file) : '';
} }
public function __toString() { public function __toString() {
return $this->getUri(); return $this->getUri();
} }
public function getUri() { public function getUri() {
$file = self::$dist . '/' . $this->dir . '/' . ($this->manifest ? $this->manifest->get($this->asset) : $this->asset); $file = ($this->manifest ? $this->manifest->get($this->asset) : $this->asset);
return get_template_directory_uri() . $file; return get_template_directory_uri() . self::$dist . '/' . $this->dir . '/' . $file;
} }
} }

View File

@@ -5,25 +5,29 @@
* @package Roots\Sage * @package Roots\Sage
* @author QWp6t * @author QWp6t
*/ */
class JsonManifest implements ManifestInterface { class JsonManifest implements ManifestInterface
/** @var array */ {
protected $manifest = []; /** @var array */
protected $manifest = [];
/** /**
* JsonManifest constructor * JsonManifest constructor
* @param string $manifestPath Local filesystem path to JSON-encoded manifest * @param string $manifestPath Local filesystem path to JSON-encoded manifest
*/ */
public function __construct($manifestPath) { public function __construct($manifestPath)
$this->manifest = file_exists($manifestPath) ? json_decode(file_get_contents($manifestPath), true) : []; {
} $this->manifest = file_exists($manifestPath) ? json_decode(file_get_contents($manifestPath), true) : [];
}
/** @inheritdoc */ /** @inheritdoc */
public function get($file) { public function get($file)
return isset($this->manifest[$file]) ? $this->manifest[$file] : $file; {
} return isset($this->manifest[$file]) ? $this->manifest[$file] : $file;
}
/** @inheritdoc */ /** @inheritdoc */
public function getAll() { public function getAll()
return $this->manifest; {
} return $this->manifest;
}
} }

View File

@@ -5,21 +5,22 @@
* @package Roots\Sage * @package Roots\Sage
* @author QWp6t * @author QWp6t
*/ */
interface ManifestInterface { interface ManifestInterface
/** {
* Get the cache-busted filename /**
* * Get the cache-busted filename
* If the manifest does not have an entry for $file, then return $file *
* * If the manifest does not have an entry for $file, then return $file
* @param string $file The original name of the file before cache-busting *
* @return string * @param string $file The original name of the file before cache-busting
*/ * @return string
public function get($file); */
public function get($file);
/** /**
* Get the asset manifest * Get the asset manifest
* *
* @return array * @return array
*/ */
public function getAll(); public function getAll();
} }

View File

@@ -5,55 +5,61 @@
* @package Roots\Sage * @package Roots\Sage
* @author QWp6t * @author QWp6t
*/ */
class Wrapper implements WrapperInterface { class Wrapper implements WrapperInterface
/** @var string Wrapper slug */ {
protected $slug; /** @var string Wrapper slug */
protected $slug;
/** @var string Template file that is being wrapped */ /** @var string Template file that is being wrapped */
protected $template = ''; protected $template = '';
/** @var string[] Array of template wrappers; e.g., `base-singular.php`, `base-page.php`, `base.php` */ /** @var string[] Array of template wrappers; e.g., `base-singular.php`, `base-page.php`, `base.php` */
protected $wrapper = []; protected $wrapper = [];
/** @var string[] Cache template locations */ /** @var string[] Cache template locations */
protected static $locations = []; protected static $locations = [];
/** /**
* Wrapper constructor * Wrapper constructor
* *
* @param string $template Template file, as from Template Heirarchy; e.g., `page.php`, `single.php`, `singular.php` * @param string $template Template file, as from Template Heirarchy; e.g., `page.php`, `single.php`, `singular.php`
* @param string $base Wrapper's base template, this is what will wrap around $template * @param string $base Wrapper's base template, this is what will wrap around $template
*/ */
public function __construct($template, $base = 'layouts/base.php') { public function __construct($template, $base = 'layouts/base.php')
$this->slug = sanitize_title(basename($base, '.php')); {
$this->wrapper = [$base]; $this->slug = sanitize_title(basename($base, '.php'));
$this->template = $template; $this->wrapper = [$base];
$str = substr($base, 0, -4); $this->template = $template;
array_unshift($this->wrapper, sprintf($str . '-%s.php', basename($template, '.php'))); $str = substr($base, 0, -4);
} array_unshift($this->wrapper, sprintf($str . '-%s.php', basename($template, '.php')));
}
/** /**
* @return string * @return string
* @see getTemplate * @see getTemplate
*/ */
public function __toString() { public function __toString()
return $this->getTemplate(); {
} return $this->getTemplate();
}
/** {@inheritdoc} */ /** {@inheritdoc} */
public function getWrapper() { public function getWrapper()
$wrappers = apply_filters('sage/wrap_' . $this->slug, $this->wrapper) ?: $this->wrapper; {
return locate_template($wrappers); $wrappers = apply_filters('sage/wrap_' . $this->slug, $this->wrapper) ?: $this->wrapper;
} return locate_template($wrappers);
}
/** {@inheritdoc} */ /** {@inheritdoc} */
public function getSlug() { public function getSlug()
return $this->slug; {
} return $this->slug;
}
/** {@inheritdoc} */ /** {@inheritdoc} */
public function getTemplate() { public function getTemplate()
$template = apply_filters('sage/unwrap_' . $this->slug, $this->template) ?: $this->template; {
return locate_template($template); $template = apply_filters('sage/unwrap_' . $this->slug, $this->template) ?: $this->template;
} return locate_template($template);
}
} }

View File

@@ -5,69 +5,78 @@
* @package Roots\Sage * @package Roots\Sage
* @author QWp6t * @author QWp6t
*/ */
class WrapperCollection { class WrapperCollection
/** @var $this */ {
protected static $instance; /** @var $this */
/** @var WrapperInterface[] $wrappers */ protected static $instance;
protected $wrappers = []; /** @var WrapperInterface[] $wrappers */
protected $wrappers = [];
/** Singleton */ /** Singleton */
private function __construct() {} // @codingStandardsIgnoreStart
private function __clone() {} private function __construct() {}
private function __clone() {}
// @codingStandardsIgnoreEnd
/** /**
* @return static * @return static
*/ */
public static function instance() { public static function instance()
isset(self::$instance) || self::$instance = new static; {
return self::$instance; isset(self::$instance) || self::$instance = new static;
} return self::$instance;
/**
* @param WrapperInterface $wrapper
* @param string $slug
* @param bool $overwriteIfExists
* @return $this
* @throws \Exception
*/
public static function add(WrapperInterface $wrapper, $slug = '', $overwriteIfExists = false) {
$slug = $slug ?: $wrapper->getSlug();
if (self::instance()->exists($slug) && !$overwriteIfExists) {
throw new \Exception("Wrapper $slug already exists.");
} }
self::instance()->wrappers[$slug] = $wrapper;
return self::instance();
}
/** /**
* @param string $slug * @param WrapperInterface $wrapper
* @return $this * @param string $slug
*/ * @param bool $overwriteIfExists
public static function remove($slug) { * @return $this
unset(self::instance()->wrappers[$slug]); * @throws \Exception
return self::instance(); */
} public static function add(WrapperInterface $wrapper, $slug = '', $overwriteIfExists = false)
{
$slug = $slug ?: $wrapper->getSlug();
if (self::instance()->exists($slug) && !$overwriteIfExists) {
throw new \Exception("Wrapper $slug already exists.");
}
self::instance()->wrappers[$slug] = $wrapper;
return self::instance();
}
/** /**
* @param string $slug * @param string $slug
* @return null|WrapperInterface * @return $this
*/ */
public static function get($slug) { public static function remove($slug)
return isset(self::instance()->wrappers[$slug]) ? self::instance()->wrappers[$slug] : null; {
} unset(self::instance()->wrappers[$slug]);
return self::instance();
}
/** /**
* @return string[] Slugs of wrappers in collection * @param string $slug
*/ * @return null|WrapperInterface
public static function wrappers() { */
return array_keys(self::instance()->wrappers); public static function get($slug)
} {
return isset(self::instance()->wrappers[$slug]) ? self::instance()->wrappers[$slug] : null;
}
/** /**
* @param $slug * @return string[] Slugs of wrappers in collection
* @return bool */
*/ public static function wrappers()
public static function exists($slug) { {
return isset(self::instance()->wrappers[$slug]); return array_keys(self::instance()->wrappers);
} }
/**
* @param $slug
* @return bool
*/
public static function exists($slug)
{
return isset(self::instance()->wrappers[$slug]);
}
} }

View File

@@ -5,22 +5,23 @@
* @package Roots\Sage * @package Roots\Sage
* @author QWp6t * @author QWp6t
*/ */
interface WrapperInterface { interface WrapperInterface
{
/** /**
* Get wrapper template file * Get wrapper template file
* *
* @return string Wrapper template (FQPN of, e.g., `base-page.php`, `base.php`) * @return string Wrapper template (FQPN of, e.g., `base-page.php`, `base.php`)
*/ */
public function getWrapper(); public function getWrapper();
/** /**
* @return string Wrapped template (FQPN of, e.g., `page.php`, `single.php`, `singular.php`) * @return string Wrapped template (FQPN of, e.g., `page.php`, `single.php`, `singular.php`)
*/ */
public function getTemplate(); public function getTemplate();
/** /**
* @return string Slug of the WrapperInterface; e.g., `base` * @return string Slug of the WrapperInterface; e.g., `base`
*/ */
public function getSlug(); public function getSlug();
} }

View File

@@ -6,81 +6,81 @@ use Roots\Sage\Template;
* Theme assets * Theme assets
*/ */
add_action('wp_enqueue_scripts', function () { add_action('wp_enqueue_scripts', function () {
wp_enqueue_style('sage/main.css', asset_path('styles/main.css'), false, null); wp_enqueue_style('sage/main.css', asset_path('styles/main.css'), false, null);
wp_enqueue_script('sage/main.js', asset_path('scripts/main.js'), ['jquery'], null, true); wp_enqueue_script('sage/main.js', asset_path('scripts/main.js'), ['jquery'], null, true);
}, 100); }, 100);
/** /**
* Theme setup * Theme setup
*/ */
add_action('after_setup_theme', function () { add_action('after_setup_theme', function () {
/** /**
* Enable features from Soil when plugin is activated * Enable features from Soil when plugin is activated
* @link https://roots.io/plugins/soil/ * @link https://roots.io/plugins/soil/
*/ */
add_theme_support('soil-clean-up'); add_theme_support('soil-clean-up');
add_theme_support('soil-jquery-cdn'); add_theme_support('soil-jquery-cdn');
add_theme_support('soil-nav-walker'); add_theme_support('soil-nav-walker');
add_theme_support('soil-nice-search'); add_theme_support('soil-nice-search');
add_theme_support('soil-relative-urls'); add_theme_support('soil-relative-urls');
/** /**
* Enable plugins to manage the document title * Enable plugins to manage the document title
* @link http://codex.wordpress.org/Function_Reference/add_theme_support#Title_Tag * @link http://codex.wordpress.org/Function_Reference/add_theme_support#Title_Tag
*/ */
add_theme_support('title-tag'); add_theme_support('title-tag');
/** /**
* Register navigation menus * Register navigation menus
* @link http://codex.wordpress.org/Function_Reference/register_nav_menus * @link http://codex.wordpress.org/Function_Reference/register_nav_menus
*/ */
register_nav_menus([ register_nav_menus([
'primary_navigation' => __('Primary Navigation', 'sage') 'primary_navigation' => __('Primary Navigation', 'sage')
]); ]);
/** /**
* Enable post thumbnails * Enable post thumbnails
* @link http://codex.wordpress.org/Post_Thumbnails * @link http://codex.wordpress.org/Post_Thumbnails
* @link http://codex.wordpress.org/Function_Reference/set_post_thumbnail_size * @link http://codex.wordpress.org/Function_Reference/set_post_thumbnail_size
* @link http://codex.wordpress.org/Function_Reference/add_image_size * @link http://codex.wordpress.org/Function_Reference/add_image_size
*/ */
add_theme_support('post-thumbnails'); add_theme_support('post-thumbnails');
/** /**
* Enable post formats * Enable post formats
* @link http://codex.wordpress.org/Post_Formats * @link http://codex.wordpress.org/Post_Formats
*/ */
add_theme_support('post-formats', ['aside', 'gallery', 'link', 'image', 'quote', 'video', 'audio']); add_theme_support('post-formats', ['aside', 'gallery', 'link', 'image', 'quote', 'video', 'audio']);
/** /**
* Enable HTML5 markup support * Enable HTML5 markup support
* @link http://codex.wordpress.org/Function_Reference/add_theme_support#HTML5 * @link http://codex.wordpress.org/Function_Reference/add_theme_support#HTML5
*/ */
add_theme_support('html5', ['caption', 'comment-form', 'comment-list', 'gallery', 'search-form']); add_theme_support('html5', ['caption', 'comment-form', 'comment-list', 'gallery', 'search-form']);
/** /**
* Use main stylesheet for visual editor * Use main stylesheet for visual editor
* @see assets/styles/layouts/_tinymce.scss * @see assets/styles/layouts/_tinymce.scss
*/ */
add_editor_style(asset_path('styles/main.css')); add_editor_style(asset_path('styles/main.css'));
}); });
/** /**
* Register sidebars * Register sidebars
*/ */
add_action('widgets_init', function () { add_action('widgets_init', function () {
$config = [ $config = [
'before_widget' => '<section class="widget %1$s %2$s">', 'before_widget' => '<section class="widget %1$s %2$s">',
'after_widget' => '</section>', 'after_widget' => '</section>',
'before_title' => '<h3>', 'before_title' => '<h3>',
'after_title' => '</h3>' 'after_title' => '</h3>'
]; ];
register_sidebar([ register_sidebar([
'name' => __('Primary', 'sage'), 'name' => __('Primary', 'sage'),
'id' => 'sidebar-primary' 'id' => 'sidebar-primary'
] + $config); ] + $config);
register_sidebar([ register_sidebar([
'name' => __('Footer', 'sage'), 'name' => __('Footer', 'sage'),
'id' => 'sidebar-footer' 'id' => 'sidebar-footer'
] + $config); ] + $config);
}); });