/** * VideoPress Shortcode Handler * * This file may or may not be included from the Jetpack VideoPress module. */ class VideoPress_Shortcode { /** @var VideoPress_Shortcode */ protected static $instance; protected function __construct() { // By explicitly declaring the provider here, we can speed things up by not relying on oEmbed discovery. wp_oembed_add_provider( '#^https?://videopress.com/v/.*#', 'http://public-api.wordpress.com/oembed/1.0/', true ); add_shortcode( 'videopress', array( $this, 'shortcode_callback' ) ); add_shortcode( 'wpvideo', array( $this, 'shortcode_callback' ) ); add_filter('wp_video_shortcode_override', array( $this, 'video_shortcode_override' ), 10, 4); add_filter( 'oembed_fetch_url', array( $this, 'add_oembed_for_parameter' ) ); $this->add_video_embed_hander(); } /** * @return VideoPress_Shortcode */ public static function initialize() { if ( ! isset ( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Translate a 'videopress' or 'wpvideo' shortcode and arguments into a video player display. * * Expected input formats: * * [videopress OcobLTqC] * [wpvideo OcobLTqC] * * @link http://codex.wordpress.org/Shortcode_API Shortcode API * @param array $attr shortcode attributes * @return string HTML markup or blank string on fail */ public function shortcode_callback( $attr ) { global $content_width; /** * We only accept GUIDs as a first unnamed argument. */ $guid = isset( $attr[0] ) ? $attr[0] : null; if ( isset( $attr['postid'] ) ) { $guid = get_post_meta( $attr['postid'], 'videopress_guid', true ); } /** * Make sure the GUID passed in matches how actual GUIDs are formatted. */ if ( ! videopress_is_valid_guid( $guid ) ) { return ''; } /** * Set the defaults */ $defaults = array( 'w' => 0, // Width of the video player, in pixels 'at' => 0, // How many seconds in to initially seek to 'hd' => true, // Whether to display a high definition version 'loop' => false, // Whether to loop the video repeatedly 'freedom' => false, // Whether to use only free/libre codecs 'autoplay' => false, // Whether to autoplay the video on load 'permalink' => true, // Whether to display the permalink to the video 'flashonly' => false, // Whether to support the Flash player exclusively 'defaultlangcode' => false, // Default language code ); $attr = shortcode_atts( $defaults, $attr, 'videopress' ); /** * Cast the attributes, post-input. */ $attr['width'] = absint( $attr['w'] ); $attr['hd'] = (bool) $attr['hd']; $attr['freedom'] = (bool) $attr['freedom']; /** * If the provided width is less than the minimum allowed * width, or greater than `$content_width` ignore. */ if ( $attr['width'] < VIDEOPRESS_MIN_WIDTH ) { $attr['width'] = 0; } elseif ( isset( $content_width ) && $content_width > VIDEOPRESS_MIN_WIDTH && $attr['width'] > $content_width ) { $attr['width'] = 0; } /** * If there was an invalid or unspecified width, set the width equal to the theme's `$content_width`. */ if ( 0 === $attr['width'] && isset( $content_width ) && $content_width >= VIDEOPRESS_MIN_WIDTH ) { $attr['width'] = $content_width; } /** * If the width isn't an even number, reduce it by one (making it even). */ if ( 1 === ( $attr['width'] % 2 ) ) { $attr['width'] --; } /** * Filter the default VideoPress shortcode options. * * @module videopress * * @since 2.5.0 * * @param array $args Array of VideoPress shortcode options. */ $options = apply_filters( 'videopress_shortcode_options', array( 'at' => (int) $attr['at'], 'hd' => $attr['hd'], 'loop' => $attr['loop'], 'freedom' => $attr['freedom'], 'autoplay' => $attr['autoplay'], 'permalink' => $attr['permalink'], 'force_flash' => (bool) $attr['flashonly'], 'defaultlangcode' => $attr['defaultlangcode'], 'forcestatic' => false, // This used to be a displayed option, but now is only // accessible via the `videopress_shortcode_options` filter. ) ); // Register VideoPress scripts wp_register_script( 'videopress', 'https://v0.wordpress.com/js/videopress.js', array( 'jquery', 'swfobject' ), '1.09' ); require_once( dirname( __FILE__ ) . '/class.videopress-video.php' ); require_once( dirname( __FILE__ ) . '/class.videopress-player.php' ); $player = new VideoPress_Player( $guid, $attr['width'], $options ); if ( is_feed() ) { return $player->asXML(); } else { return $player->asHTML(); } } /** * Override the standard video short tag to also process videopress files as well. * * This will, parse the src given, and if it is a videopress file, it will parse as the * VideoPress shortcode instead. * * @param string $html Empty variable to be replaced with shortcode markup. * @param array $attr Attributes of the video shortcode. * @param string $content Video shortcode content. * @param int $instance Unique numeric ID of this video shortcode instance. * * @return string */ public function video_shortcode_override($html, $attr, $content, $instance) { $videopress_guid = null; if ( isset( $attr['videopress_guid'] ) ) { $videopress_guid = $attr['videopress_guid']; } else { // Handle the different possible url attributes $url_keys = array( 'src', 'mp4' ); foreach ( $url_keys as $key ) { if ( isset ( $attr[ $key ] ) ) { $url = $attr[ $key ]; if ( preg_match( '@videos.(videopress\.com|files\.wordpress\.com)/([a-z0-9]{8})/@i', $url, $matches ) ) { $videopress_guid = $matches[2]; } // Also test for videopress oembed url, which is used by the Video Media Widget. if ( ! $videopress_guid && preg_match( '@https://videopress.com/v/([a-z0-9]{8})@i', $url, $matches ) ) { $videopress_guid = $matches[1]; } break; } } } if ( $videopress_guid ) { $videopress_attr = array( $videopress_guid ); if ( isset( $attr['width'] ) ) { $videopress_attr['w'] = (int) $attr['width']; } if ( isset( $attr['autoplay'] ) ) { $videopress_attr['autoplay'] = $attr['autoplay']; } if ( isset( $attr['loop'] ) ) { $videopress_attr['loop'] = $attr['loop']; } // Then display the VideoPress version of the stored GUID! return $this->shortcode_callback( $videopress_attr ); } return ''; } /** * Adds a `for` query parameter to the oembed provider request URL. * * @param String $oembed_provider * @return String $ehnanced_oembed_provider */ public function add_oembed_for_parameter( $oembed_provider ) { if ( false === stripos( $oembed_provider, 'videopress.com' ) ) { return $oembed_provider; } return add_query_arg( 'for', parse_url( home_url(), PHP_URL_HOST ), $oembed_provider ); } /** * Register a VideoPress handler for direct links to .mov files (and potential other non-handled types later). */ public function add_video_embed_hander() { // These are the video extensions that VideoPress can transcode and considers video as well (even if core does not). $extensions = array( 'mov' ); $override_extensions = implode( '|', $extensions ); $regex = "#^https?://videos.(videopress.com|files.wordpress.com)/.+?.($override_extensions)$#i"; /** This filter is already documented in core/wp-includes/embed.php */ $filter = apply_filters( 'wp_video_embed_handler', 'wp_embed_handler_video' ); wp_embed_register_handler( 'video', $regex, $filter, 10 ); } } VideoPress_Shortcode::initialize(); History Archives | Stimulated Boredom
Saturday, February 24, 2018
Home History

History

Articles on the subject of history - one of my favorite topics - including follow-up content related to historical discussions on the podcast.

Hitler Deeply Penetrates Stalin | The Eastern Front in WWII

In August of 2009, I sat down and recorded a 3 Part Series on the Eastern Front during WWII. Our story begins with Germany poised to invade Russia.

Podcast: Hitler Deeply Penetrates Stalin

Part 2 of 3: The discussion picks up where it left off, with the historic Battle of Stalingrad - the bloodiest battle of the entire war and a turning point in the conflict - perhaps the "beginning of the end" for Hitler's Germany.

Podcast 372: And The Rocket’s Red Glare

For the ‘4th of July’ holiday, I am busting out an older segment (with an updated intro) that I had recorded back in July of 2008, in which I discussed the history of the “Declaration of Independence.”

On My Personal Politics…

I am often asked by new listeners of the program about my personal politics. In this piece, I explain where I stand in the political spectrum and how I came to find myself there.

History 101: WWII on Facebook…

Stumbled across this recently, thought it was just brilliant and wanted to share it! As a lifelong WWII buff, I was impressed by how accurate and creative this was...whoever put it together knew...

Trivializing History: Ignorance And Moronic Historical Comparisons Are Not A Partisan...

Winston Churchill (Disclosure: a political hero of mine) should have known better. Campaigning in 1945, he delivered a speech suggesting that an unchecked Labour...

The Promised Land: The Role of Religion in the Creation and...

Historically religion has been one of the defining characteristics of human society, one which...

Review: The King’s Speech

Imagine if you will, standing before a microphone in which you will be addressing millions of anxiously awaiting people. For many, this will be their first time ever hearing your voice. You will be delivering momentous news, of which...

“I Pledge Memorization, To The Class…”

Saw this status update floating around Facebook today. Nothing special in and of itself, just your garden-variety, "I'm more American than you" drivel meant to denote some form of augmented patriotism

Book Review | The Devil in the White City

The Columbian Exposition, popularly known as the Chicago World's Fair of 1893, was a magical event that inspired & introduced the world to some of its greatest inventions. It was also the playground for America's first serial killer...

Nation Interrupted: A Decade After September 11th

A decade after the September 11th attacks, I reflect on where I was when I heard the news and how our country has changed (for better or for worse) in the ensuing 10 years.

Why Voting Matters

The privilege of an American citizen to vote is the right that defines our democracy. By exercising this fundamental right, we protect all the other rights of our constitution. Our ability and right to vote is an expression of equality.

“I Voted” by Stimulated Boredom Listeners

Collection of Stimulated Boredom listeners from all over the country who submitted their "I Voted" pictures, proudly displaying their participation in the 2008 Presidential...

A Little Ditty ‘Bout WWII (re: the Premiere of “The Pacific”...

Most of Europe has fallen to Hitler, leaving Britain as the last remaining European power resisting Nazi expansion...

Book Review | The Billion Dollar Spy: A True Story of...

The Billion Dollar Spy is an exhilarating look into the world of Cold War era clandestine dead drops, tradecraft, betrayal, surveillance detection runs and double agents.

Let's Connect

5,780FansLike
863FollowersFollow
358FollowersFollow
76,363FollowersFollow
4,697FollowersFollow
4,976SubscribersSubscribe

You Might Also Like