diff options
Diffstat (limited to 'plugins/jetpack/modules/shortcodes/presentations.php')
-rw-r--r-- | plugins/jetpack/modules/shortcodes/presentations.php | 321 |
1 files changed, 174 insertions, 147 deletions
diff --git a/plugins/jetpack/modules/shortcodes/presentations.php b/plugins/jetpack/modules/shortcodes/presentations.php index 77089189..8914b874 100644 --- a/plugins/jetpack/modules/shortcodes/presentations.php +++ b/plugins/jetpack/modules/shortcodes/presentations.php @@ -1,29 +1,48 @@ -<?php -/* -Plugin Name: Presentations -Plugin URI: http://automattic.com/wordpress-plugins/ -Description: Presentations plugin based on the work done by <a href="http://darylkoop.com/">Daryl Koopersmith</a>. Powered by jmpress.js -Version: 0.2 -Author: Automattic -Author URI: http://automattic.com/wordpress-plugins/ - - 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 St, Fifth Floor, Boston, MA 02110-1301 USA -*/ +<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName +use Automattic\Jetpack\Assets; /** + * Presentations + * Presentations plugin based on the work done by <a href="http://darylkoop.com/">Daryl Koopersmith</a>. Powered by jmpress.js + * + * HOW TO: How the plugin settings are organized and which features are supported. + * + * The entire presentation should be wrapped with a [presentation] shortcode, and every + * individual slide should be wrapped with a [slide] shortcode. Any settings supported + * by [slide] can be set into [presentation], which will apply that setting for the entire + * presentation unless overridden by individual slides. + * + * - [presentation] only settings: + * - duration: transition durations, default is one second. + * - height: content height, default is 400px + * - width: content width, default is 550px + * - autoplay: delay between transitions in seconds, default 3s + * when set the presentation will automatically transition between slides + * as long as the presentation remains in focus + * + * - [slide] settings: + * - transition: specifies where the next slide will be placed relative + * to the last one before it. Supported values are "up", "down" + * "left", "right", or "none". Default value is "down". + * + * - scale: scales the content relative to other slides, default value is one + * + * - rotate: rotates the content by the specified degrees, default is zero + * + * - fade: slides will fade in and out during transition. Values of "on" or + * "true" will enable fading, while values of "no" or "false" will + * disable it. Default value is "on" + * + * - bgcolor: specifies a background color for the slides. Any CSS valid value + * is permitted. Default color is transparent. + * + * - bgimg: specifies an image url which will fill the background. Image is + * set to fill the background 100% width and height + * + * - fadebullets: any html <li> tags will start out with an opacity of 0 and any + * subsequent slide transitions will show the bullets one by one + * * Known issues: * * - IE 7/8 are not supported by jmpress and presentations will not work @@ -33,70 +52,53 @@ Author URI: http://automattic.com/wordpress-plugins/ * happens to be on the first loaded page. The permalink page will function * properly, however. * - Exiting fullscreen mode will not properly reset the scroll locations in Safari + * + * @package Jetpack */ - -/* -HOW TO: How the plugin settings are organized and which features are supported. - -The entire presentation should be wrapped with a [presentation] shortcode, and every -individual slide should be wrapped with a [slide] shortcode. Any settings supported -by [slide] can be set into [presentation], which will apply that setting for the entire -presentation unless overridden by individual slides. - -- [presentation] only settings: - - duration: transition durations, default is one second. - - height: content height, default is 400px - - width: content width, default is 550px - - autoplay: delay between transitions in seconds, default 3s - when set the presentation will automatically transition between slides - as long as the presentation remains in focus - -- [slide] settings: - - transition: specifies where the next slide will be placed relative - to the last one before it. Supported values are "up", "down" - "left", "right", or "none". Default value is "down". - - - scale: scales the content relative to other slides, default value is one - - - rotate: rotates the content by the specified degrees, default is zero - - - fade: slides will fade in and out during transition. Values of "on" or - "true" will enable fading, while values of "no" or "false" will - disable it. Default value is "on" - - - bgcolor: specifies a background color for the slides. Any CSS valid value - is permitted. Default color is transparent. - - - bgimg: specifies an image url which will fill the background. Image is - set to fill the background 100% width and height - - - fadebullets: any html <li> tags will start out with an opacity of 0 and any - subsequent slide transitions will show the bullets one by one -*/ - if ( ! class_exists( 'Presentations' ) ) : + /** + * Create a shortcode to display Presentations and slides. + */ class Presentations { + /** + * Presentation settings. + * + * @var array + */ private $presentation_settings; + /** + * Do we have a Presentation shortcode to be displayed. + * + * @var bool + */ private $presentation_initialized; + /** + * Were scripts and styles enqueued already. + * + * @var bool + */ private $scripts_and_style_included; /** * Constructor */ - function __construct() { + public function __construct() { $this->presentation_initialized = false; $this->scripts_and_style_included = false; - // Registers shortcodes + // Registers shortcodes. add_action( 'wp_head', array( &$this, 'add_scripts' ), 1 ); add_shortcode( 'presentation', array( &$this, 'presentation_shortcode' ) ); add_shortcode( 'slide', array( &$this, 'slide_shortcode' ) ); } - function add_scripts() { + /** + * Enqueue all scripts and styles. + */ + public function add_scripts() { $this->scripts_and_style_included = false; if ( empty( $GLOBALS['posts'] ) || ! is_array( $GLOBALS['posts'] ) ) { @@ -115,28 +117,34 @@ if ( ! class_exists( 'Presentations' ) ) : } $plugin = plugin_dir_url( __FILE__ ); - // Add CSS - wp_enqueue_style( 'presentations', $plugin . 'css/style.css' ); - // Add JavaScript + // Add CSS. + wp_enqueue_style( 'presentations', $plugin . 'css/style.css', array(), JETPACK__VERSION ); + // Add JavaScript. wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jmpress', - Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/jmpress.min.js', 'modules/shortcodes/js/jmpress.js' ), + Assets::get_file_url_for_environment( '_inc/build/shortcodes/js/jmpress.min.js', 'modules/shortcodes/js/jmpress.js' ), array( 'jquery' ), - '0.4.5', + JETPACK__VERSION, true ); wp_enqueue_script( 'presentations', - Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/main.min.js', 'modules/shortcodes/js/main.js' ), + Assets::get_file_url_for_environment( '_inc/build/shortcodes/js/main.min.js', 'modules/shortcodes/js/main.js' ), array( 'jquery', 'jmpress' ), - false, + JETPACK__VERSION, true ); } - function presentation_shortcode( $atts, $content = '' ) { - // Mark that we've found a valid [presentation] shortcode + /** + * Main Presentation shortcode. + * + * @param array $atts Shortcode attributes. + * @param string $content Post content. + */ + public function presentation_shortcode( $atts, $content = '' ) { + // Mark that we've found a valid [presentation] shortcode. $this->presentation_initialized = true; $atts = shortcode_atts( @@ -148,7 +156,7 @@ if ( ! class_exists( 'Presentations' ) ) : 'bgimg' => '', 'autoplay' => '', - // Settings + // Settings. 'transition' => '', 'scale' => '', 'rotate' => '', @@ -173,73 +181,75 @@ if ( ! class_exists( 'Presentations' ) ) : ), ); - // Set the presentation-wide settings - if ( '' != trim( $atts['transition'] ) ) { + // Set the presentation-wide settings. + if ( '' !== trim( $atts['transition'] ) ) { $this->presentation_settings['transition'] = $atts['transition']; } - if ( '' != trim( $atts['scale'] ) ) { + if ( '' !== trim( $atts['scale'] ) ) { $this->presentation_settings['scale'] = floatval( $atts['scale'] ); } - if ( '' != trim( $atts['rotate'] ) ) { + if ( '' !== trim( $atts['rotate'] ) ) { $this->presentation_settings['rotate'] = floatval( $atts['rotate'] ); } - if ( '' != trim( $atts['fade'] ) ) { + if ( '' !== trim( $atts['fade'] ) ) { $this->presentation_settings['fade'] = $atts['fade']; } - if ( '' != trim( $atts['fadebullets'] ) ) { + if ( '' !== trim( $atts['fadebullets'] ) ) { $this->presentation_settings['fadebullets'] = $atts['fadebullets']; } - // Set any settings the slides don't care about - if ( '' != trim( $atts['duration'] ) ) { + // Set any settings the slides don't care about. + if ( '' !== trim( $atts['duration'] ) ) { $duration = floatval( $atts['duration'] ) . 's'; } else { $duration = '1s'; } - // Autoplay durations are set in milliseconds - if ( '' != trim( $atts['autoplay'] ) ) { + // Autoplay durations are set in milliseconds. + if ( '' !== trim( $atts['autoplay'] ) ) { $autoplay = floatval( $atts['autoplay'] ) * 1000; } else { $autoplay = 0; } // No autoplay - // Set the presentation size as specified or with some nicely sized dimensions - if ( '' != trim( $atts['width'] ) ) { + // Set the presentation size as specified or with some nicely sized dimensions. + if ( '' !== trim( $atts['width'] ) ) { $this->presentation_settings['width'] = intval( $atts['width'] ); } else { $this->presentation_settings['width'] = 480; } - if ( '' != trim( $atts['height'] ) ) { + if ( '' !== trim( $atts['height'] ) ) { $this->presentation_settings['height'] = intval( $atts['height'] ); } else { $this->presentation_settings['height'] = 370; } - // Hide the content by default in case the scripts fail + // Hide the content by default in case the scripts fail. $style = 'display: none; width: ' . $this->presentation_settings['width'] . 'px; height: ' . $this->presentation_settings['height'] . 'px;'; - // Check for background color XOR background image - // Use a white background if nothing specified + /* + * Check for background color XOR background image + * Use a white background if nothing specified + */ if ( preg_match( '/https?\:\/\/[^\'"\s]*/', $atts['bgimg'], $matches ) ) { $style .= ' background-image: url("' . esc_url( $matches[0] ) . '");'; - } elseif ( '' != trim( $atts['bgcolor'] ) ) { + } elseif ( '' !== trim( $atts['bgcolor'] ) ) { $style .= ' background-color: ' . esc_attr( $atts['bgcolor'] ) . ';'; } else { $style .= ' background-color: #fff;'; } - // Not supported message style is inlined incase the style sheet doesn't get included + // Not supported message style is inlined incase the style sheet doesn't get included. $out = "<section class='presentation-wrapper'>"; $out .= "<p class='not-supported-msg' style='display: inherit; padding: 25%; text-align: center;'>"; $out .= __( 'This slideshow could not be started. Try refreshing the page or viewing it in another browser.', 'jetpack' ) . '</p>'; - // Bail out unless the scripts were added + // Bail out unless the scripts were added. if ( $this->scripts_and_style_included ) { $out .= sprintf( '<div class="presentation" duration="%s" data-autoplay="%s" style="%s">', @@ -267,8 +277,14 @@ if ( ! class_exists( 'Presentations' ) ) : return $out; } - function slide_shortcode( $atts, $content = '' ) { - // Bail out unless wrapped by a [presentation] shortcode + /** + * Slide shortcode. + * + * @param array $atts Shortcode attributes. + * @param string $content Post content. + */ + public function slide_shortcode( $atts, $content = '' ) { + // Bail out unless wrapped by a [presentation] shortcode. if ( ! $this->presentation_initialized ) { return $content; } @@ -287,17 +303,17 @@ if ( ! class_exists( 'Presentations' ) ) : 'slide' ); - // Determine positioning based on transition - if ( '' == trim( $atts['transition'] ) ) { + // Determine positioning based on transition. + if ( '' === trim( $atts['transition'] ) ) { $atts['transition'] = $this->presentation_settings['transition']; } - // Setting the content scale - if ( '' == trim( $atts['scale'] ) ) { + // Setting the content scale. + if ( '' === trim( $atts['scale'] ) ) { $atts['scale'] = $this->presentation_settings['scale']; } - if ( '' == trim( $atts['scale'] ) ) { + if ( '' === trim( $atts['scale'] ) ) { $scale = 1; } else { $scale = floatval( $atts['scale'] ); @@ -307,34 +323,34 @@ if ( ! class_exists( 'Presentations' ) ) : $scale *= -1; } - // Setting the content rotation - if ( '' == trim( $atts['rotate'] ) ) { + // Setting the content rotation. + if ( '' === trim( $atts['rotate'] ) ) { $atts['rotate'] = $this->presentation_settings['rotate']; } - if ( '' == trim( $atts['rotate'] ) ) { + if ( '' === trim( $atts['rotate'] ) ) { $rotate = 0; } else { $rotate = floatval( $atts['rotate'] ); } - // Setting if the content should fade - if ( '' == trim( $atts['fade'] ) ) { + // Setting if the content should fade. + if ( '' === trim( $atts['fade'] ) ) { $atts['fade'] = $this->presentation_settings['fade']; } - if ( 'on' == $atts['fade'] || 'true' == $atts['fade'] ) { + if ( 'on' === $atts['fade'] || 'true' === $atts['fade'] ) { $fade = 'fade'; } else { $fade = ''; } - // Setting if bullets should fade on step changes - if ( '' == trim( $atts['fadebullets'] ) ) { + // Setting if bullets should fade on step changes. + if ( '' === trim( $atts['fadebullets'] ) ) { $atts['fadebullets'] = $this->presentation_settings['fadebullets']; } - if ( 'on' == $atts['fadebullets'] || 'true' == $atts['fadebullets'] ) { + if ( 'on' === $atts['fadebullets'] || 'true' === $atts['fadebullets'] ) { $fadebullets = 'fadebullets'; } else { $fadebullets = ''; @@ -351,11 +367,13 @@ if ( ! class_exists( 'Presentations' ) ) : $x = $coords['x']; $y = $coords['y']; - // Check for background color XOR background image - // Use a white background if nothing specified + /* + * Check for background color XOR background image + * Use a white background if nothing specified + */ if ( preg_match( '/https?\:\/\/[^\'"\s]*/', $atts['bgimg'], $matches ) ) { $style = 'background-image: url("' . esc_url( $matches[0] ) . '");'; - } elseif ( '' != trim( $atts['bgcolor'] ) ) { + } elseif ( '' !== trim( $atts['bgcolor'] ) ) { $style = 'background-color: ' . esc_attr( $atts['bgcolor'] ) . ';'; } else { $style = ''; @@ -383,14 +401,17 @@ if ( ! class_exists( 'Presentations' ) ) : /** * Determines the position of the next slide based on the position and scaling of the previous slide. * - * @param array $args : an array with the following key-value pairs - * string $transition: the transition name, "up", "down", "left", or "right" - * float $scale: the scale of the next slide (used to determine the position of the slide after that) + * @param array $args { + * Array of key-value pairs. + * + * @type string $transition: the transition name, "up", "down", "left", or "right". + * @type float $scale: the scale of the next slide (used to determine the position of the slide after that). + * } * - * @return array with the 'x' and 'y' coordinates of the slide + * @return array with the 'x' and 'y' coordinates of the slide. */ - function get_coords( $args ) { - if ( 0 == $args['scale'] ) { + private function get_coords( $args ) { + if ( 0 === $args['scale'] ) { $args['scale'] = 1; } @@ -407,30 +428,36 @@ if ( ! class_exists( 'Presentations' ) ) : ); // All angles are measured from the vertical axis, so everything is backwards! - $diagAngle = atan2( $width, $height ); - $diagonal = sqrt( pow( $width, 2 ) + pow( $height, 2 ) ); - - // We offset the angles by the angle formed by the diagonal so that - // we can multiply the sines directly against the diagonal length - $theta = deg2rad( $last['rotate'] ) - $diagAngle; - $phi = deg2rad( $next['rotate'] ) - $diagAngle; - - // We start by displacing by the slide dimensions - $totalHorizDisp = $width * $scale; - $totalVertDisp = $height * $scale; - - // If the previous slide was rotated, we add the incremental offset from the rotation - // Namely the difference between the regular dimension (no rotation) and the component - // of the diagonal for that angle - $totalHorizDisp += ( ( ( abs( sin( $theta ) ) * $diagonal ) - $width ) / 2 ) * $scale; - $totalVertDisp += ( ( ( abs( cos( $theta ) ) * $diagonal ) - $height ) / 2 ) * $scale; - - // Similarly, we check if the current slide has been rotated and add whatever additional - // offset has been added. This is so that two rotated corners don't clash with each other. - // Note: we are checking the raw angle relative to the vertical axis, NOT the diagonal angle. + $diag_angle = atan2( $width, $height ); + $diagonal = sqrt( pow( $width, 2 ) + pow( $height, 2 ) ); + + /* + * We offset the angles by the angle formed by the diagonal so that + * we can multiply the sines directly against the diagonal length + */ + $theta = deg2rad( $last['rotate'] ) - $diag_angle; + $phi = deg2rad( $next['rotate'] ) - $diag_angle; + + // We start by displacing by the slide dimensions. + $total_horiz_disp = $width * $scale; + $total_vert_disp = $height * $scale; + + /* + * If the previous slide was rotated, we add the incremental offset from the rotation + * Namely the difference between the regular dimension (no rotation) and the component + * of the diagonal for that angle + */ + $total_horiz_disp += ( ( ( abs( sin( $theta ) ) * $diagonal ) - $width ) / 2 ) * $scale; + $total_vert_disp += ( ( ( abs( cos( $theta ) ) * $diagonal ) - $height ) / 2 ) * $scale; + + /* + * Similarly, we check if the current slide has been rotated and add whatever additional + * offset has been added. This is so that two rotated corners don't clash with each other. + * Note: we are checking the raw angle relative to the vertical axis, NOT the diagonal angle. + */ if ( 0 !== $next['rotate'] % 180 ) { - $totalHorizDisp += ( abs( ( sin( $phi ) * $diagonal ) - $width ) / 2 ) * $next['scale']; - $totalVertDisp += ( abs( ( cos( $phi ) * $diagonal ) - $height ) / 2 ) * $next['scale']; + $total_horiz_disp += ( abs( ( sin( $phi ) * $diagonal ) - $width ) / 2 ) * $next['scale']; + $total_vert_disp += ( abs( ( cos( $phi ) * $diagonal ) - $height ) / 2 ) * $next['scale']; } switch ( trim( $args['transition'] ) ) { @@ -438,20 +465,20 @@ if ( ! class_exists( 'Presentations' ) ) : break; case 'left': - $next['x'] -= $totalHorizDisp; + $next['x'] -= $total_horiz_disp; break; case 'right': - $next['x'] += $totalHorizDisp; + $next['x'] += $total_horiz_disp; break; case 'up': - $next['y'] -= $totalVertDisp; + $next['y'] -= $total_vert_disp; break; case 'down': default: - $next['y'] += $totalVertDisp; + $next['y'] += $total_vert_disp; break; } |