Permalink
Browse files

Moving more of YouTube into its own plugin

  • Loading branch information...
1 parent c4a0f30 commit ed65f065ed6b9ae7962f45de13dc6197548346e3 @ehough ehough committed Oct 1, 2012
Showing with 1,786 additions and 681 deletions.
  1. +1 −0 .gitignore
  2. +0 −4 .idea/tubepress.iml
  3. +1 −1 composer.json
  4. +0 −11 src/main/php/classes/tubepress/api/const/options/names/GallerySource.php
  5. +0 −11 src/main/php/classes/tubepress/api/const/options/values/GallerySourceValue.php
  6. +17 −17 src/main/php/classes/tubepress/impl/feed/urlbuilding/YouTubeUrlBuilderCommand.php
  7. +22 −22 src/main/php/classes/tubepress/impl/options/ui/tabs/GallerySourceTab.php
  8. +2 −2 src/main/php/classes/tubepress/impl/shortcode/commands/SearchOutputCommand.php
  9. +2 −4 src/main/php/classes/tubepress/spi/provider/VideoProvider.php
  10. +3 −0 src/main/php/plugins/addon/vimeo/Vimeo.info
  11. +41 −0 src/main/php/plugins/addon/vimeo/Vimeo.php
  12. +112 −0 .../php/plugins/addon/vimeo/classes/tubepress/plugins/vimeo/impl/listeners/VimeoOptionsRegistrar.php
  13. 0 src/main/php/plugins/addon/wordpress/WordPress.php
  14. +3 −0 src/main/php/plugins/addon/youtube/YouTube.info
  15. +43 −0 src/main/php/plugins/addon/youtube/YouTube.php
  16. +44 −0 ...plugins/addon/youtube/classes/tubepress/plugins/youtube/api/const/options/names/GallerySource.php
  17. +49 −0 ...s/addon/youtube/classes/tubepress/plugins/youtube/api/const/options/values/GallerySourceValue.php
  18. +2 −2 ...ins/addon/youtube/classes/tubepress/plugins/youtube}/api/const/options/values/SafeSearchValue.php
  19. +1 −1 ...gins/addon/youtube/classes/tubepress/plugins/youtube}/api/const/options/values/TimeFrameValue.php
  20. +223 −0 ...lugins/addon/youtube/classes/tubepress/plugins/youtube/impl/listeners/YouTubeOptionsRegistrar.php
  21. +33 −0 ...ugins/addon/youtube/classes/tubepress/plugins/youtube/impl/listeners/YouTubeProviderRegistrar.php
  22. +279 −0 ...ain/php/plugins/addon/youtube/classes/tubepress/plugins/youtube/impl/provider/YouTubeProvider.php
  23. +1 −1 .../classes/tubepress/plugins/core/filters/prevalidationoptionset/YouTubePlaylistPlPrefixRemover.php
  24. +3 −3 ...in/php/plugins/core/classes/tubepress/plugins/core/filters/videogallerypage/ResultCountCapper.php
  25. +18 −266 src/main/php/plugins/core/classes/tubepress/plugins/core/listeners/CoreOptionsRegistrar.php
  26. +2 −0 src/test/php/bootstrap.php
  27. +2 −4 src/test/php/classes/tubepress/api/const/ConstantsTest.php
  28. +19 −19 src/test/php/classes/tubepress/impl/feed/urlbuilding/YouTubeUrlBuilderCommandTest.php
  29. 0 src/test/php/classes/tubepress/impl/http/DefaultHttpRequestParameterServiceTest.php
  30. +22 −22 src/test/php/classes/tubepress/impl/options/ui/tabs/GallerySourceTabTest.php
  31. 0 src/test/php/classes/tubepress/impl/options/ui/tabs/ThemeTabTest.php
  32. +16 −16 src/test/php/classes/tubepress/impl/shortcode/SimpleShortcodeParserTest.php
  33. +4 −4 src/test/php/classes/tubepress/impl/shortcode/commands/SearchOutputCommandTest.php
  34. +77 −0 src/test/php/plugins/addon/vimeo/VimeoTest.php
  35. +145 −0 .../plugins/addon/vimeo/classes/tubepress/plugins/vimeo/impl/listeners/VimeoOptionsRegistrarTest.php
  36. +77 −0 ...don/wordpress/classes/tubepress/plugins/wordpress/impl/patterns/ioc/WordPressIocContainerTest.php
  37. +77 −0 src/test/php/plugins/addon/youtube/YouTubeTest.php
  38. +60 −0 src/test/php/plugins/addon/youtube/classes/tubepress/plugins/youtube/api/ConstantsTest.php
  39. +259 −0 ...ns/addon/youtube/classes/tubepress/plugins/youtube/impl/listeners/YouTubeOptionsRegistrarTest.php
  40. +46 −0 ...s/addon/youtube/classes/tubepress/plugins/youtube/impl/listeners/YouTubeProviderRegistrarTest.php
  41. +58 −0 ...php/plugins/addon/youtube/classes/tubepress/plugins/youtube/impl/provider/YouTubeProviderTest.php
  42. +3 −3 ...sses/tubepress/plugins/core/filters/prevalidationoptionset/YouTubePlaylistPlPrefixRemoverTest.php
  43. +1 −1 ...hp/plugins/core/classes/tubepress/plugins/core/filters/videogallerypage/ResultCountCapperTest.php
  44. +18 −267 src/test/php/plugins/core/classes/tubepress/plugins/core/listeners/CoreOptionsRegistrarTest.php
View
@@ -4,3 +4,4 @@ src/main/assembly/dist
.idea/workspace.xml
vendor
composer.lock
+tubepress.php
View
@@ -11,13 +11,9 @@
<orderEntry type="module-library">
<library name="PHP">
<CLASSES>
- <root url="file:///var/www/gshd/wordpress/wp-includes" />
- <root url="file:///var/www/gshd/wordpress/wp-admin" />
<root url="file:///usr/share/php" />
</CLASSES>
<SOURCES>
- <root url="file:///var/www/gshd/wordpress/wp-includes" />
- <root url="file:///var/www/gshd/wordpress/wp-admin" />
<root url="file:///usr/share/php" />
</SOURCES>
</library>
View
2 composer.json 100644 → 100755
@@ -23,7 +23,7 @@
"ehough/epilog": "*",
"ehough/fimble": "*",
"ehough/iconic": "*",
- "ehough/pulsar": "1.*",
+ "ehough/pulsar": "*",
"ehough/shortstop": "*",
"ehough/stash": "*",
"ehough/tickertape": "*"
@@ -24,17 +24,6 @@
*/
class tubepress_api_const_options_names_GallerySource
{
- const YOUTUBE_MOST_DISCUSSED_VALUE = 'most_discussedValue';
- const YOUTUBE_MOST_RECENT_VALUE = 'most_recentValue';
- const YOUTUBE_MOST_RESPONDED_VALUE = 'most_respondedValue';
- const YOUTUBE_FAVORITES_VALUE = 'favoritesValue';
- const YOUTUBE_MOST_VIEWED_VALUE = 'most_viewedValue';
- const YOUTUBE_PLAYLIST_VALUE = 'playlistValue';
- const YOUTUBE_TAG_VALUE = 'tagValue';
- const YOUTUBE_TOP_FAVORITES_VALUE = 'youtubeTopFavoritesValue';
- const YOUTUBE_TOP_RATED_VALUE = 'top_ratedValue';
- const YOUTUBE_USER_VALUE = 'userValue';
- const YOUTUBE_FEATURED = 'recently_featured';
const VIMEO_ALBUM_VALUE = 'vimeoAlbumValue';
const VIMEO_APPEARS_IN_VALUE = 'vimeoAppearsInValue';
const VIMEO_CHANNEL_VALUE = 'vimeoChannelValue';
@@ -24,17 +24,6 @@
*/
class tubepress_api_const_options_values_GallerySourceValue
{
- const YOUTUBE_FAVORITES = 'favorites';
- const YOUTUBE_FEATURED = 'recently_featured';
- const YOUTUBE_MOST_DISCUSSED = 'most_discussed';
- const YOUTUBE_MOST_RECENT = 'most_recent';
- const YOUTUBE_MOST_RESPONDED = 'most_responded';
- const YOUTUBE_PLAYLIST = 'playlist';
- const YOUTUBE_MOST_VIEWED = 'most_viewed';
- const YOUTUBE_SEARCH = 'tag';
- const YOUTUBE_TOP_FAVORITES = 'youtubeTopFavorites';
- const YOUTUBE_TOP_RATED = 'top_rated';
- const YOUTUBE_USER = 'user';
const VIMEO_UPLOADEDBY = 'vimeoUploadedBy';
const VIMEO_LIKES = 'vimeoLikes';
const VIMEO_APPEARS_IN = 'vimeoAppearsIn';
@@ -47,54 +47,54 @@ protected function buildGalleryUrl($currentPage)
switch ($execContext->get(tubepress_api_const_options_names_Output::GALLERY_SOURCE)) {
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_USER:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_USER:
- $url = 'users/' . $execContext->get(tubepress_api_const_options_names_GallerySource::YOUTUBE_USER_VALUE) . '/uploads';
+ $url = 'users/' . $execContext->get(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_USER_VALUE) . '/uploads';
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_TOP_RATED:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_TOP_RATED:
- $url = 'standardfeeds/top_rated?time=' . $execContext->get(tubepress_api_const_options_names_GallerySource::YOUTUBE_TOP_RATED_VALUE);
+ $url = 'standardfeeds/top_rated?time=' . $execContext->get(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_TOP_RATED_VALUE);
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_VIEWED:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_POPULAR:
- $url = 'standardfeeds/most_popular?time=' . $execContext->get(tubepress_api_const_options_names_GallerySource::YOUTUBE_MOST_VIEWED_VALUE);
+ $url = 'standardfeeds/most_popular?time=' . $execContext->get(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_MOST_POPULAR_VALUE);
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_PLAYLIST:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_PLAYLIST:
- $url = 'playlists/' . $execContext->get(tubepress_api_const_options_names_GallerySource::YOUTUBE_PLAYLIST_VALUE);
+ $url = 'playlists/' . $execContext->get(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_PLAYLIST_VALUE);
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_RESPONDED:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_RESPONDED:
$url = 'standardfeeds/most_responded';
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_RECENT:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_RECENT:
$url = 'standardfeeds/most_recent';
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_TOP_FAVORITES:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_TOP_FAVORITES:
$url = 'standardfeeds/top_favorites';
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_DISCUSSED:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_DISCUSSED:
$url = 'standardfeeds/most_discussed';
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_FAVORITES:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_FAVORITES:
- $url = 'users/' . $execContext->get(tubepress_api_const_options_names_GallerySource::YOUTUBE_FAVORITES_VALUE) . '/favorites';
+ $url = 'users/' . $execContext->get(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_FAVORITES_VALUE) . '/favorites';
break;
- case tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_SEARCH:
+ case tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_SEARCH:
- $tags = $execContext->get(tubepress_api_const_options_names_GallerySource::YOUTUBE_TAG_VALUE);
+ $tags = $execContext->get(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_TAG_VALUE);
$tags = self::_replaceQuotes($tags);
$tags = urlencode($tags);
$url = "videos?q=$tags";
@@ -208,7 +208,7 @@ private function _setOrderBy(tubepress_spi_context_ExecutionContext $execContext
}
/* playlist specific stuff */
- if ($mode == tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_PLAYLIST) {
+ if ($mode == tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_PLAYLIST) {
if (in_array($order, array(
@@ -50,38 +50,38 @@ class tubepress_impl_options_ui_tabs_GallerySourceTab extends tubepress_impl_opt
tubepress_api_const_options_names_Output::GALLERY_SOURCE =>
$fieldBuilder->build(tubepress_api_const_options_names_Output::GALLERY_SOURCE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_FAVORITES =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_FAVORITES_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_FAVORITES =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_FAVORITES_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_FEATURED =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_FEATURED, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_FEATURED =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_FEATURED_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_USER =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_USER_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_USER =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_USER_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_PLAYLIST =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_PLAYLIST_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_PLAYLIST =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_PLAYLIST_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_SEARCH =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_TAG_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_SEARCH =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_TAG_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_VIEWED =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_MOST_VIEWED_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_POPULAR =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_MOST_POPULAR_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_TOP_RATED =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_TOP_RATED_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_TOP_RATED =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_TOP_RATED_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_TOP_FAVORITES =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_TOP_FAVORITES_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_TOP_FAVORITES =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_TOP_FAVORITES_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_DISCUSSED =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_MOST_DISCUSSED_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_DISCUSSED =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_MOST_DISCUSSED_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_RECENT =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_MOST_RECENT_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_RECENT =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_MOST_RECENT_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
- tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_RESPONDED =>
- $fieldBuilder->build(tubepress_api_const_options_names_GallerySource::YOUTUBE_MOST_RESPONDED_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
+ tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_MOST_RESPONDED =>
+ $fieldBuilder->build(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_MOST_RESPONDED_VALUE, tubepress_impl_options_ui_fields_DropdownField::FIELD_CLASS_NAME),
tubepress_api_const_options_values_GallerySourceValue::VIMEO_ALBUM =>
$fieldBuilder->build(tubepress_api_const_options_names_GallerySource::VIMEO_ALBUM_VALUE, tubepress_impl_options_ui_fields_TextField::FIELD_CLASS_NAME),
@@ -128,9 +128,9 @@ public function __construct(ehough_chaingang_api_Chain $chain)
default:
- $execContext->set(tubepress_api_const_options_names_Output::GALLERY_SOURCE, tubepress_api_const_options_values_GallerySourceValue::YOUTUBE_SEARCH);
+ $execContext->set(tubepress_api_const_options_names_Output::GALLERY_SOURCE, tubepress_plugins_youtube_api_const_options_values_GallerySourceValue::YOUTUBE_SEARCH);
- $result = $execContext->set(tubepress_api_const_options_names_GallerySource::YOUTUBE_TAG_VALUE, $rawSearchTerms);
+ $result = $execContext->set(tubepress_plugins_youtube_api_const_options_names_GallerySource::YOUTUBE_TAG_VALUE, $rawSearchTerms);
if ($result !== true) {
@@ -64,11 +64,9 @@ function fetchVideoGalleryPage($currentPage);
function fetchSingleVideo($videoId);
/**
- * @param string $optionName The TubePress option name.
- *
- * @return boolean True if this option is applicable to the provider. False otherwise.
+ * @return array An array of strings, each representing an option name provided by this provider.
*/
- function optionIsApplicable($optionName);
+ function getProvidedOptionNames();
/**
* @param string $playerImplementationName The player implementation name.
@@ -0,0 +1,3 @@
+name = Core YouTube integration
+version = 1.0.0
+description = Provides TubePress with the ability to work with YouTube
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright 2006 - 2012 Eric D. Hough (http://ehough.com)
+ *
+ * This file is part of TubePress (http://tubepress.org)
+ *
+ * TubePress 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * TubePress 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 TubePress. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * Registers a few extensions to allow TubePress to work with Vimeo.
+ */
+class tubepress_plugins_vimeo_YouTube
+{
+ public static function registerVimeoListeners()
+ {
+ $loader = new ehough_pulsar_SymfonyUniversalClassLoader();
+ $loader->registerFallbackDirectory(dirname(__FILE__) . '/classes');
+ $loader->register();
+
+ $eventDispatcher = tubepress_impl_patterns_ioc_KernelServiceLocator::getEventDispatcher();
+
+ $eventDispatcher->addListener(tubepress_api_const_event_CoreEventNames::BOOT,
+ array(new tubepress_plugins_vimeo_impl_listeners_VimeoOptionsRegistrar(), 'onBoot'));
+
+ }
+}
+
+tubepress_plugins_vimeo_YouTube::registerVimeoListeners();
Oops, something went wrong.

0 comments on commit ed65f06

Please sign in to comment.