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
*/
add_filter('template', function ($template) {
return dirname($template);
return dirname($template);
});
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">
<description>Roots Coding Standards</description>
<!-- Use PSR-2 as a base -->
<rule ref="PSR2"/>
<!-- Scan these files -->
<file>functions.php</file>
<file>src</file>
<!-- Show colors in console -->
<arg value="-colors"/>
@@ -11,7 +12,9 @@
<!-- Show sniff codes in all reports -->
<arg value="s"/>
<!-- Scan these files -->
<file>functions.php</file>
<file>src</file>
<!-- Use PSR-2 as a base -->
<rule ref="PSR2">
<!-- Allow braces on same line for procedural functions -->
<exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine"/>
</rule>
</ruleset>

View File

@@ -4,13 +4,13 @@
* Theme customizer
*/
add_action('customize_register', function (\WP_Customize_Manager $wp_customize) {
// Add postMessage support
$wp_customize->get_setting('blogname')->transport = 'postMessage';
// Add postMessage support
$wp_customize->get_setting('blogname')->transport = 'postMessage';
});
/**
* Customizer JS
*/
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) {
// The sidebar will NOT be displayed if ANY of the following return true
return $display ? !in_array(true, [
is_404(),
is_front_page(),
is_page_template('template-custom.php'),
]) : $display;
return $display ? !in_array(true, [
is_404(),
is_front_page(),
is_page_template('template-custom.php'),
]) : $display;
});
/**
* Add <body> classes
*/
add_filter('body_class', function (array $classes) {
// Add page slug if it doesn't exist
if (is_single() || is_page() && !is_front_page()) {
if (!in_array(basename(get_permalink()), $classes)) {
$classes[] = basename(get_permalink());
// Add page slug if it doesn't exist
if (is_single() || is_page() && !is_front_page()) {
if (!in_array(basename(get_permalink()), $classes)) {
$classes[] = basename(get_permalink());
}
}
}
// Add class if sidebar is active
if (display_sidebar()) {
$classes[] = 'sidebar-primary';
}
// Add class if sidebar is active
if (display_sidebar()) {
$classes[] = 'sidebar-primary';
}
return $classes;
return $classes;
});
/**
* Add "… Continued" to the excerpt
*/
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
*/
add_filter('template_include', function ($main) {
if (!is_string($main) || !(string) $main) {
return $main;
}
return template_wrap(new Wrapper(basename($main)));
if (!is_string($main) || !(string) $main) {
return $main;
}
return template_wrap(new Wrapper(basename($main)));
}, 109);

View File

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

View File

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

View File

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

View File

@@ -5,21 +5,22 @@
* @package Roots\Sage
* @author QWp6t
*/
interface ManifestInterface {
/**
* Get the cache-busted filename
*
* 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
*/
public function get($file);
interface ManifestInterface
{
/**
* Get the cache-busted filename
*
* 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
*/
public function get($file);
/**
* Get the asset manifest
*
* @return array
*/
public function getAll();
/**
* Get the asset manifest
*
* @return array
*/
public function getAll();
}

View File

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

View File

@@ -5,69 +5,78 @@
* @package Roots\Sage
* @author QWp6t
*/
class WrapperCollection {
/** @var $this */
protected static $instance;
/** @var WrapperInterface[] $wrappers */
protected $wrappers = [];
class WrapperCollection
{
/** @var $this */
protected static $instance;
/** @var WrapperInterface[] $wrappers */
protected $wrappers = [];
/** Singleton */
private function __construct() {}
private function __clone() {}
/** Singleton */
// @codingStandardsIgnoreStart
private function __construct() {}
private function __clone() {}
// @codingStandardsIgnoreEnd
/**
* @return static
*/
public static function 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.");
/**
* @return static
*/
public static function instance()
{
isset(self::$instance) || self::$instance = new static;
return self::$instance;
}
self::instance()->wrappers[$slug] = $wrapper;
return self::instance();
}
/**
* @param string $slug
* @return $this
*/
public static function remove($slug) {
unset(self::instance()->wrappers[$slug]);
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
* @return null|WrapperInterface
*/
public static function get($slug) {
return isset(self::instance()->wrappers[$slug]) ? self::instance()->wrappers[$slug] : null;
}
/**
* @param string $slug
* @return $this
*/
public static function remove($slug)
{
unset(self::instance()->wrappers[$slug]);
return self::instance();
}
/**
* @return string[] Slugs of wrappers in collection
*/
public static function wrappers() {
return array_keys(self::instance()->wrappers);
}
/**
* @param string $slug
* @return null|WrapperInterface
*/
public static function get($slug)
{
return isset(self::instance()->wrappers[$slug]) ? self::instance()->wrappers[$slug] : null;
}
/**
* @param $slug
* @return bool
*/
public static function exists($slug) {
return isset(self::instance()->wrappers[$slug]);
}
/**
* @return string[] Slugs of wrappers in collection
*/
public static function wrappers()
{
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
* @author QWp6t
*/
interface WrapperInterface {
interface WrapperInterface
{
/**
* Get wrapper template file
*
* @return string Wrapper template (FQPN of, e.g., `base-page.php`, `base.php`)
*/
public function getWrapper();
/**
* Get wrapper template file
*
* @return string Wrapper template (FQPN of, e.g., `base-page.php`, `base.php`)
*/
public function getWrapper();
/**
* @return string Wrapped template (FQPN of, e.g., `page.php`, `single.php`, `singular.php`)
*/
public function getTemplate();
/**
* @return string Wrapped template (FQPN of, e.g., `page.php`, `single.php`, `singular.php`)
*/
public function getTemplate();
/**
* @return string Slug of the WrapperInterface; e.g., `base`
*/
public function getSlug();
/**
* @return string Slug of the WrapperInterface; e.g., `base`
*/
public function getSlug();
}

View File

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