Version Description
2021/11/25 =
Bugfix - Playlist tabs not pausing the old tab player properly
Bugfix - Position Saving - do not use index.m3u8 as the video ID
Bugfix - Video link issue for videos over 1 hour
Compatibility - Bunny.net WordPress CDN Plugin
Compatibility - WP Rocket Used CSS
Lightbox - Fancybox updated - double tap on image zooms in
Linode Object Storage support
Video upload support for FV Player Coconut and FV Player Bunny Stream
Download this release
Release Info
Developer | FolioVision |
Plugin | FV Flowplayer Video Player |
Version | 7.5.12.727 |
Comparing to | |
See all releases |
Code changes from version 7.5.10.727 to 7.5.12.727
- controller/backend.php +17 -5
- controller/editor.php +20 -9
- controller/frontend.php +32 -2
- css/fancybox.css +31 -32
- css/flowplayer.css +46 -4
- css/s3-uploader.css +10 -9
- flowplayer.php +3 -2
- flowplayer/fv-player.min.js +1 -1
- flowplayer/modules/abr-remember.module.js +4 -0
- flowplayer/modules/appearance.module.js +6 -3
- flowplayer/modules/embed.module.js +11 -3
- flowplayer/modules/fv-player.js +11 -6
- flowplayer/modules/hls-audio.module.js +2 -2
- flowplayer/modules/hls-safari-fixes.module.js +6 -6
- flowplayer/modules/pending-encoding.module.js +57 -0
- flowplayer/modules/playback-position.module.js +155 -35
- flowplayer/modules/playlist-controlbar.module.js +13 -6
- flowplayer/modules/playlist-start-position.module.js +3 -4
- flowplayer/modules/sharing.module.js +12 -1
- flowplayer/modules/speed-restore.module.js +6 -0
- flowplayer/modules/subtitle-restore.module.js +5 -0
- flowplayer/modules/volume.module.js +19 -17
- includes/class.bunnycdn.rewrite.php +13 -0
- includes/class.fv-player-wizard-step-base.php +12 -5
- includes/fp-api-private.php +27 -13
- includes/fv-player-wizard-base.js +2 -2
- js/editor-screenshots.js +1 -1
- js/fancybox.js +58 -16
- js/linode-object-storage.js +46 -0
- js/media-library-browser-base.js +120 -38
- js/s3-upload-base.js +18 -10
- js/shortcode-editor.js +80 -17
- js/video-checker.js +8 -1
- languages/fv-wordpress-flowplayer-cs_CZ.mo +0 -0
- languages/fv-wordpress-flowplayer-cs_CZ.po +634 -15
- languages/fv-wordpress-flowplayer-de_DE.mo +0 -0
- languages/fv-wordpress-flowplayer-de_DE.po +635 -15
- languages/fv-wordpress-flowplayer-es_ES.mo +0 -0
- languages/fv-wordpress-flowplayer-es_ES.po +634 -15
- languages/fv-wordpress-flowplayer-sk_SK.mo +0 -0
- languages/fv-wordpress-flowplayer-sk_SK.po +634 -16
- languages/fv-wordpress-flowplayer.pot +2806 -0
- models/cdn.class.php +2 -2
- models/digitalocean-spaces-browser.class.php +18 -92
- models/digitalocean-spaces.class.php +1 -0
- models/flowplayer.php +22 -6
- models/linode-object-storage-browser.class.php +124 -0
- models/linode-object-storage.class.php +150 -0
- models/list-table.php +3 -4
- models/media-browser-s3.php +22 -97
- models/media-browser.php +122 -1
- models/player-position-save.php +74 -22
- models/system-info.php +4 -1
- models/video-encoder/class.fv-player-encoder-list-table.php +382 -0
- models/video-encoder/video-encoder.php +1016 -0
- models/xml-video-sitemap.php +6 -1
- readme.txt +22 -0
- view/admin.php +36 -19
controller/backend.php
CHANGED
@@ -27,16 +27,16 @@ add_action('wp_ajax_fv_wp_flowplayer_support_mail', 'fv_wp_flowplayer_support_ma
|
|
27 |
function fv_wp_flowplayer_support_mail() {
|
28 |
if( isset( $_POST['notice'] ) ) {
|
29 |
|
30 |
-
$current_user = wp_get_current_user();
|
31 |
-
|
32 |
-
$content
|
33 |
$content .= '<p>User Agent: '.$_SERVER['HTTP_USER_AGENT']."</p>\n";
|
34 |
$content .= '<p>Referer: '.$_SERVER['HTTP_REFERER']."</p>\n";
|
35 |
$content .= "<p>Comment:</p>\n".wpautop( stripslashes($_POST['comment']) );
|
36 |
$notice = str_replace( '<span class="value"', ': <span class="value"', stripslashes($_POST['notice']) );
|
37 |
$notice .= str_replace( '<span class="value"', ': <span class="value"', stripslashes($_POST['details']) );
|
38 |
|
39 |
-
$content .= "<p>Video analysis:</p>\n".$notice;
|
40 |
|
41 |
global $fv_wp_flowplayer_support_mail_from, $fv_wp_flowplayer_support_mail_from_name;
|
42 |
|
@@ -44,7 +44,7 @@ function fv_wp_flowplayer_support_mail() {
|
|
44 |
$fv_wp_flowplayer_support_mail_from_name = $current_user->display_name;
|
45 |
$fv_wp_flowplayer_support_mail_from = $current_user->user_email;
|
46 |
|
47 |
-
add_filter( 'wp_mail_content_type',
|
48 |
|
49 |
//add_action('phpmailer_init', 'fv_wp_flowplayer_support_mail_phpmailer_init' );
|
50 |
wp_mail( 'fvplayer@foliovision.com', 'FV Flowplayer Quick Support Submission', $content );
|
@@ -53,6 +53,10 @@ function fv_wp_flowplayer_support_mail() {
|
|
53 |
}
|
54 |
}
|
55 |
|
|
|
|
|
|
|
|
|
56 |
function fv_wp_flowplayer_support_mail_phpmailer_init( $phpmailer ) {
|
57 |
global $fv_wp_flowplayer_support_mail_from, $fv_wp_flowplayer_support_mail_from_name;
|
58 |
|
@@ -839,4 +843,12 @@ function fv_player_pay_per_view_woocommerce_version_check() {
|
|
839 |
</div>
|
840 |
<?php
|
841 |
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
842 |
}
|
27 |
function fv_wp_flowplayer_support_mail() {
|
28 |
if( isset( $_POST['notice'] ) ) {
|
29 |
|
30 |
+
$current_user = wp_get_current_user();
|
31 |
+
$content = "<h1>Admin: ".$_POST['status']."</h1>\n";
|
32 |
+
$content .= '<p>User: '.$current_user->display_name." (".$current_user->user_email.")</p>\n";
|
33 |
$content .= '<p>User Agent: '.$_SERVER['HTTP_USER_AGENT']."</p>\n";
|
34 |
$content .= '<p>Referer: '.$_SERVER['HTTP_REFERER']."</p>\n";
|
35 |
$content .= "<p>Comment:</p>\n".wpautop( stripslashes($_POST['comment']) );
|
36 |
$notice = str_replace( '<span class="value"', ': <span class="value"', stripslashes($_POST['notice']) );
|
37 |
$notice .= str_replace( '<span class="value"', ': <span class="value"', stripslashes($_POST['details']) );
|
38 |
|
39 |
+
$content .= "<p>Video analysis:</p>\n".$notice;
|
40 |
|
41 |
global $fv_wp_flowplayer_support_mail_from, $fv_wp_flowplayer_support_mail_from_name;
|
42 |
|
44 |
$fv_wp_flowplayer_support_mail_from_name = $current_user->display_name;
|
45 |
$fv_wp_flowplayer_support_mail_from = $current_user->user_email;
|
46 |
|
47 |
+
add_filter( 'wp_mail_content_type', 'fv_wp_flowplayer_support_mail_content_type' );
|
48 |
|
49 |
//add_action('phpmailer_init', 'fv_wp_flowplayer_support_mail_phpmailer_init' );
|
50 |
wp_mail( 'fvplayer@foliovision.com', 'FV Flowplayer Quick Support Submission', $content );
|
53 |
}
|
54 |
}
|
55 |
|
56 |
+
function fv_wp_flowplayer_support_mail_content_type() {
|
57 |
+
return 'text/html';
|
58 |
+
}
|
59 |
+
|
60 |
function fv_wp_flowplayer_support_mail_phpmailer_init( $phpmailer ) {
|
61 |
global $fv_wp_flowplayer_support_mail_from, $fv_wp_flowplayer_support_mail_from_name;
|
62 |
|
843 |
</div>
|
844 |
<?php
|
845 |
endif;
|
846 |
+
}
|
847 |
+
|
848 |
+
// lazy-load of video encoder libraries
|
849 |
+
add_action( 'fv_player_load_video_encoder_libs', 'fv_player_load_video_encoder_libs' );
|
850 |
+
function fv_player_load_video_encoder_libs() {
|
851 |
+
include_once( dirname( __FILE__ ).'/../models/video-encoder/video-encoder.php');
|
852 |
+
require_once( dirname(__FILE__).'/../includes/class.fv-player-wizard-base.php' );
|
853 |
+
require_once( dirname(__FILE__).'/../includes/class.fv-player-wizard-step-base.php' );
|
854 |
}
|
controller/editor.php
CHANGED
@@ -13,12 +13,12 @@ function fv_player_shortcode_editor_scripts( $page ) {
|
|
13 |
|
14 |
|
15 |
|
16 |
-
function fv_player_shortcode_editor_scripts_enqueue() {
|
17 |
global $fv_wp_flowplayer_ver;
|
18 |
-
wp_register_script('fvwpflowplayer-domwindow', flowplayer::get_plugin_url().'/js/jquery.colorbox-min.js',array('jquery'), $fv_wp_flowplayer_ver );
|
19 |
-
wp_enqueue_script('fvwpflowplayer-domwindow');
|
20 |
-
|
21 |
-
wp_register_script('fvwpflowplayer-shortcode-editor', flowplayer::get_plugin_url().'/js/shortcode-editor.js',array('jquery','jquery-ui-sortable'), $fv_wp_flowplayer_ver
|
22 |
wp_register_script('fvwpflowplayer-editor-screenshots', flowplayer::get_plugin_url().'/js/editor-screenshots.js',array('jquery','fvwpflowplayer-shortcode-editor','flowplayer'), $fv_wp_flowplayer_ver );
|
23 |
|
24 |
wp_localize_script( 'fvwpflowplayer-shortcode-editor', 'fv_player_editor_conf', array(
|
@@ -59,14 +59,20 @@ function fv_player_shortcode_editor_scripts_enqueue() {
|
|
59 |
),
|
60 |
'have_fv_player_vimeo_live' => class_exists('FV_Player_Vimeo_Live_Stream')
|
61 |
) );
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
wp_localize_script( 'fvwpflowplayer-editor-screenshots', 'fv_player_editor_conf_screenshots', array(
|
64 |
'disable_domains' => apply_filters( 'fv_player_editor_screenshot_disable_domains', array() )
|
65 |
) );
|
66 |
|
67 |
wp_enqueue_script('fvwpflowplayer-shortcode-editor');
|
68 |
wp_enqueue_script('fvwpflowplayer-editor-screenshots');
|
69 |
-
|
70 |
wp_enqueue_style('fvwpflowplayer-domwindow-css', flowplayer::get_plugin_url().'/css/colorbox.css', '', $fv_wp_flowplayer_ver, 'screen');
|
71 |
wp_enqueue_style('fvwpflowplayer-shortcode-editor', flowplayer::get_plugin_url().'/css/shortcode-editor.css', '', $fv_wp_flowplayer_ver, 'screen');
|
72 |
}
|
@@ -368,9 +374,14 @@ function fv_player_splashcreen_action() {
|
|
368 |
|
369 |
$title = getTitleFromUrl($title);
|
370 |
$title = sanitize_title($title);
|
371 |
-
|
|
|
|
|
|
|
|
|
|
|
372 |
|
373 |
-
$decoded = base64_decode($img)
|
374 |
|
375 |
$upload_dir = wp_upload_dir();
|
376 |
$upload_path = str_replace( '/', DIRECTORY_SEPARATOR, $upload_dir['path'] ) . DIRECTORY_SEPARATOR;
|
13 |
|
14 |
|
15 |
|
16 |
+
function fv_player_shortcode_editor_scripts_enqueue() {
|
17 |
global $fv_wp_flowplayer_ver;
|
18 |
+
wp_register_script('fvwpflowplayer-domwindow', flowplayer::get_plugin_url().'/js/jquery.colorbox-min.js',array('jquery'), $fv_wp_flowplayer_ver );
|
19 |
+
wp_enqueue_script('fvwpflowplayer-domwindow');
|
20 |
+
|
21 |
+
wp_register_script('fvwpflowplayer-shortcode-editor', flowplayer::get_plugin_url().'/js/shortcode-editor.js',array('jquery','jquery-ui-sortable'), $fv_wp_flowplayer_ver );
|
22 |
wp_register_script('fvwpflowplayer-editor-screenshots', flowplayer::get_plugin_url().'/js/editor-screenshots.js',array('jquery','fvwpflowplayer-shortcode-editor','flowplayer'), $fv_wp_flowplayer_ver );
|
23 |
|
24 |
wp_localize_script( 'fvwpflowplayer-shortcode-editor', 'fv_player_editor_conf', array(
|
59 |
),
|
60 |
'have_fv_player_vimeo_live' => class_exists('FV_Player_Vimeo_Live_Stream')
|
61 |
) );
|
62 |
+
|
63 |
+
wp_localize_script( 'fvwpflowplayer-shortcode-editor', 'fv_player_editor_translations', array(
|
64 |
+
'embed_notice' => __('Embed feature not supported in editor preview', 'fv-wordpress-flowplayer'),
|
65 |
+
'link_notice' => __('Link feature not supported in editor preview', 'fv-wordpress-flowplayer'),
|
66 |
+
'screenshot_cors_error' => __('<div class="error"><p>Cannot obtain video screenshot, please make sure the video is served with <a href="https://foliovision.com/player/video-hosting/hls#hls-js">CORS headers</a>.</p></div>', 'fv-wordpress-flowplayer'),
|
67 |
+
) );
|
68 |
+
|
69 |
wp_localize_script( 'fvwpflowplayer-editor-screenshots', 'fv_player_editor_conf_screenshots', array(
|
70 |
'disable_domains' => apply_filters( 'fv_player_editor_screenshot_disable_domains', array() )
|
71 |
) );
|
72 |
|
73 |
wp_enqueue_script('fvwpflowplayer-shortcode-editor');
|
74 |
wp_enqueue_script('fvwpflowplayer-editor-screenshots');
|
75 |
+
|
76 |
wp_enqueue_style('fvwpflowplayer-domwindow-css', flowplayer::get_plugin_url().'/css/colorbox.css', '', $fv_wp_flowplayer_ver, 'screen');
|
77 |
wp_enqueue_style('fvwpflowplayer-shortcode-editor', flowplayer::get_plugin_url().'/css/shortcode-editor.css', '', $fv_wp_flowplayer_ver, 'screen');
|
78 |
}
|
374 |
|
375 |
$title = getTitleFromUrl($title);
|
376 |
$title = sanitize_title($title);
|
377 |
+
|
378 |
+
if( function_exists('mb_strinwidth') ) {
|
379 |
+
$title = mb_strimwidth($title, 0, $limit, '', 'UTF-8');
|
380 |
+
} else if( strlen( $title ) > $limit ) {
|
381 |
+
$title = substr($title, 0, $limit);
|
382 |
+
}
|
383 |
|
384 |
+
$decoded = base64_decode($img);
|
385 |
|
386 |
$upload_dir = wp_upload_dir();
|
387 |
$upload_path = str_replace( '/', DIRECTORY_SEPARATOR, $upload_dir['path'] ) . DIRECTORY_SEPARATOR;
|
controller/frontend.php
CHANGED
@@ -106,8 +106,10 @@ function fv_flowplayer_get_js_translations() {
|
|
106 |
'and' => sprintf( __( '%1$s and %2$s' ), '', '' ),
|
107 |
'chrome_extension_disable_html5_autoplay' => __('It appears you are using the Disable HTML5 Autoplay Chrome extension, disable it to play videos', 'fv-wordpress-flowplayer'),
|
108 |
'click_to_unmute' => __('Click to unmute', 'fv-wordpress-flowplayer'),
|
|
|
|
|
109 |
);
|
110 |
-
|
111 |
return $aStrings;
|
112 |
}
|
113 |
|
@@ -398,11 +400,15 @@ function flowplayer_prepare_scripts() {
|
|
398 |
$aConf['video_checker_site'] = home_url();
|
399 |
}
|
400 |
if( $sLogo ) $aConf['logo'] = $sLogo;
|
|
|
|
|
401 |
$aConf['volume'] = floatval( $fv_fp->_get_option('volume') );
|
402 |
if( $aConf['volume'] > 1 ) {
|
403 |
$aConf['volume'] = 1;
|
404 |
}
|
405 |
|
|
|
|
|
406 |
if( $val = $fv_fp->_get_option('mobile_native_fullscreen') ) $aConf['mobile_native_fullscreen'] = $val;
|
407 |
if( $val = $fv_fp->_get_option('mobile_force_fullscreen') ) $aConf['mobile_force_fullscreen'] = $val;
|
408 |
if( $val = $fv_fp->_get_option('mobile_alternative_fullscreen') ) $aConf['mobile_alternative_fullscreen'] = $val;
|
@@ -457,7 +463,7 @@ function flowplayer_prepare_scripts() {
|
|
457 |
if( $fv_fp->_get_option('chromecast') ) {
|
458 |
$aConf['fv_chromecast'] = $fv_fp->_get_option('chromecast');
|
459 |
}
|
460 |
-
|
461 |
if( $fv_fp->_get_option('hd_streaming') ) {
|
462 |
$aConf['hd_streaming'] = true;
|
463 |
}
|
@@ -466,6 +472,10 @@ function flowplayer_prepare_scripts() {
|
|
466 |
$aConf['multiple_playback'] = true;
|
467 |
}
|
468 |
|
|
|
|
|
|
|
|
|
469 |
$aConf['hlsjs'] = array(
|
470 |
'startLevel' => -1,
|
471 |
'fragLoadingMaxRetry' => 3,
|
@@ -776,3 +786,23 @@ function fv_player_extension_version_is_min( $min, $extension = 'pro' ) {
|
|
776 |
|
777 |
return version_compare($version,$min ) != -1;
|
778 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
'and' => sprintf( __( '%1$s and %2$s' ), '', '' ),
|
107 |
'chrome_extension_disable_html5_autoplay' => __('It appears you are using the Disable HTML5 Autoplay Chrome extension, disable it to play videos', 'fv-wordpress-flowplayer'),
|
108 |
'click_to_unmute' => __('Click to unmute', 'fv-wordpress-flowplayer'),
|
109 |
+
'audio_button' => __('AUD', 'fv-wordpress-flowplayer'),
|
110 |
+
'audio_menu' => __('Audio', 'fv-wordpress-flowplayer')
|
111 |
);
|
112 |
+
|
113 |
return $aStrings;
|
114 |
}
|
115 |
|
400 |
$aConf['video_checker_site'] = home_url();
|
401 |
}
|
402 |
if( $sLogo ) $aConf['logo'] = $sLogo;
|
403 |
+
|
404 |
+
// Used to restore volume, removed in JS if volume stored in browser localStorage
|
405 |
$aConf['volume'] = floatval( $fv_fp->_get_option('volume') );
|
406 |
if( $aConf['volume'] > 1 ) {
|
407 |
$aConf['volume'] = 1;
|
408 |
}
|
409 |
|
410 |
+
$aConf['default_volume'] = $aConf['volume'];
|
411 |
+
|
412 |
if( $val = $fv_fp->_get_option('mobile_native_fullscreen') ) $aConf['mobile_native_fullscreen'] = $val;
|
413 |
if( $val = $fv_fp->_get_option('mobile_force_fullscreen') ) $aConf['mobile_force_fullscreen'] = $val;
|
414 |
if( $val = $fv_fp->_get_option('mobile_alternative_fullscreen') ) $aConf['mobile_alternative_fullscreen'] = $val;
|
463 |
if( $fv_fp->_get_option('chromecast') ) {
|
464 |
$aConf['fv_chromecast'] = $fv_fp->_get_option('chromecast');
|
465 |
}
|
466 |
+
|
467 |
if( $fv_fp->_get_option('hd_streaming') ) {
|
468 |
$aConf['hd_streaming'] = true;
|
469 |
}
|
472 |
$aConf['multiple_playback'] = true;
|
473 |
}
|
474 |
|
475 |
+
if( $fv_fp->_get_option('disable_localstorage') ) {
|
476 |
+
$aConf['disable_localstorage'] = true;
|
477 |
+
}
|
478 |
+
|
479 |
$aConf['hlsjs'] = array(
|
480 |
'startLevel' => -1,
|
481 |
'fragLoadingMaxRetry' => 3,
|
786 |
|
787 |
return version_compare($version,$min ) != -1;
|
788 |
}
|
789 |
+
|
790 |
+
|
791 |
+
/*
|
792 |
+
* WP Rocket Used CSS exclusion
|
793 |
+
* Since many FV Player features are only visible once the video starts this optimization doesn't work
|
794 |
+
*/
|
795 |
+
add_filter( 'pre_get_rocket_option_remove_unused_css_safelist', 'fv_player_wp_rocket_used_css' );
|
796 |
+
|
797 |
+
function fv_player_wp_rocket_used_css( $safelist ) {
|
798 |
+
// Without this our additions would show on WP Rocket settings page
|
799 |
+
global $pagenow;
|
800 |
+
if ( 'options-general.php' === $pagenow && 'wprocket' === $_GET['page'] ) {
|
801 |
+
return $safelist;
|
802 |
+
}
|
803 |
+
|
804 |
+
$safelist[] = '/wp-content/fv-flowplayer-custom/style-*';
|
805 |
+
$safelist[] = '/wp-content/plugins/fv-wordpress-flowplayer*';
|
806 |
+
$safelist[] = '/wp-content/plugins/fv-player-*';
|
807 |
+
return $safelist;
|
808 |
+
}
|
css/fancybox.css
CHANGED
@@ -1,67 +1,66 @@
|
|
1 |
-
body.compensate-for-scrollbar{overflow:hidden;-ms-overflow-style:none}.fancybox-active{height:auto}.fancybox-is-hidden{left:-9999px;margin:0;position:absolute!important;top:-9999px;visibility:hidden}.fancybox-container{-webkit-backface-visibility:hidden;backface-visibility:hidden;height:100%;left:0;outline:none;position:fixed;-webkit-tap-highlight-color:transparent;top:0;-ms-touch-action:manipulation;touch-action:manipulation;-webkit-transform:translateZ(0);transform:translateZ(0);width:100%;z-index:999992}.fancybox-container *{box-sizing:border-box}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{bottom:0;left:0;position:absolute;right:0;top:0}.fancybox-outer{-webkit-overflow-scrolling:touch;overflow-y:auto}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.87;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption,.fancybox-infobar,.fancybox-navigation .fancybox-button,.fancybox-toolbar{direction:ltr;opacity:0;position:absolute;transition:opacity .25s ease,visibility 0s ease .25s;visibility:hidden;z-index:999997}.fancybox-show-caption .fancybox-caption,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-nav .fancybox-navigation .fancybox-button,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;transition:opacity .25s ease 0s,visibility 0s ease 0s;visibility:visible}.fancybox-infobar{color:#ccc;font-size:13px;-webkit-font-smoothing:subpixel-antialiased;height:44px;left:0;line-height:44px;min-width:44px;mix-blend-mode:difference;padding:0 10px;pointer-events:none;top:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-toolbar{right:0;top:0}.fancybox-stage{direction:ltr;overflow:visible;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:999994}.fancybox-is-open .fancybox-stage{overflow:hidden}.fancybox-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;height:100%;left:0;outline:none;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px 44px 0;position:absolute;text-align:center;top:0;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;white-space:normal;width:100%;z-index:999994}.fancybox-slide:before{content:"";display:inline-block;font-size:0;height:100%;vertical-align:middle;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--next{z-index:999995}.fancybox-slide--image{padding:44px 0 0;overflow:visible}.fancybox-slide--image:before{display:none}.fancybox-slide--html{padding:6px 6px 0}.fancybox-content{background:#fff;display:inline-block;margin:0 0 44px;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:relative;text-align:left;vertical-align:middle}.fancybox-slide--image .fancybox-content{-webkit-animation-timing-function:cubic-bezier(.5,0,.14,1);animation-timing-function:cubic-bezier(.5,0,.14,1);-webkit-backface-visibility:hidden;backface-visibility:hidden;background:transparent;background-repeat:no-repeat;background-size:100% 100%;left:0;max-width:none;overflow:visible;padding:0;position:absolute;top:0;-webkit-transform-origin:top left;transform-origin:top left;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:999995}.fancybox-slide--html .fancybox-content{margin:0 0 6px}.fancybox-can-zoomOut .fancybox-content{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-content{cursor:zoom-in}.fancybox-can-pan .fancybox-content,.fancybox-can-swipe .fancybox-content{cursor:-webkit-grab;cursor:grab}.fancybox-is-grabbing .fancybox-content{cursor:-webkit-grabbing;cursor:grabbing}.fancybox-container [data-selectable=true]{cursor:text}.fancybox-image,.fancybox-spaceball{background:transparent;border:0;height:100%;left:0;margin:0;max-height:none;max-width:none;padding:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content,.fancybox-slide--map .fancybox-content,.fancybox-slide--video .fancybox-content{height:calc(100% - 44px);overflow:visible;padding:0;width:100%}.fancybox-slide--video .fancybox-content{background:#000}.fancybox-slide--map .fancybox-content{background:#e5e3df}.fancybox-slide--iframe .fancybox-content{background:#fff}.fancybox-iframe,.fancybox-video{background:transparent;border:0;display:block;height:100%;margin:0;overflow:hidden;padding:0;vertical-align:top;width:100%}.fancybox-error{background:#fff;cursor:default;max-width:400px;padding:40px;width:100%}.fancybox-error p{color:#444;font-size:16px;line-height:20px;margin:0;padding:0}.fancybox-button{background:rgba(30,30,30,.6);border:0;border-radius:0;cursor:pointer;display:inline-block;height:44px;margin:0;padding:10px;transition:color .2s;vertical-align:top;visibility:inherit;width:44px}.fancybox-button,.fancybox-button:link,.fancybox-button:visited{color:#ccc}.fancybox-button:hover{color:#fff}.fancybox-button:focus{outline:none}.fancybox-button.fancybox-focus{outline:1px dotted}.fancybox-button.disabled,.fancybox-button.disabled:hover,.fancybox-button[disabled],.fancybox-button[disabled]:hover{color:#888;cursor:default;outline:none}.fancybox-button svg{display:block;height:100%;overflow:visible;position:relative;width:100%}.fancybox-button svg path{fill:currentColor;stroke-width:0}.fancybox-button--fsenter svg:nth-child(2),.fancybox-button--fsexit svg:nth-child(1),.fancybox-button--pause svg:nth-child(1),.fancybox-button--play svg:nth-child(2){display:none}.fancybox-close-small{background:transparent;border:0;border-radius:0;color:#ccc;cursor:pointer;opacity:.8;padding:8px;position:absolute;right:-12px;top:-44px;z-index:401}.fancybox-close-small:hover{color:#fff;opacity:1}.fancybox-slide--html .fancybox-close-small{color:currentColor;padding:10px;right:0;top:0}.fancybox-is-scaling .fancybox-close-small,.fancybox-is-zoomable.fancybox-can-pan .fancybox-close-small{display:none}.fancybox-navigation .fancybox-button{background:transparent;height:100px;margin:0;opacity:0;position:absolute;top:calc(50% - 50px);width:70px}.fancybox-navigation .fancybox-button div{background:rgba(30,30,30,.6);height:100%;padding:7px}.fancybox-navigation .fancybox-button--arrow_left{left:0;padding:31px 26px 31px 6px}.fancybox-navigation .fancybox-button--arrow_right{padding:31px 6px 31px 26px;right:0}.fancybox-caption{bottom:0;color:#fff;font-size:14px;font-weight:400;left:0;line-height:1.5;padding:25px 44px;right:0}.fancybox-caption:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAEtCAQAAABjBcL7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHRJREFUKM+Vk8EOgDAIQ0vj/3+xBw8qIZZueFnIKC90MCAI8DlrkHGeqqGIU6lVigrBtpCWqeRWoHDNqs0F7VNVBVxmHRlvoVqjaYkdnDIaivH2HqZ5+oZj3JUzWB+cOz4G48Bg+tsJ/tqu4dLC/4Xb+0GcF5BwBC0AA53qAAAAAElFTkSuQmCC);background-repeat:repeat-x;background-size:contain;bottom:0;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:-25px;z-index:-1}.fancybox-caption:after{border-bottom:1px solid hsla(0,0%,100%,.3);content:"";display:block;left:44px;position:absolute;right:44px;top:0}.fancybox-caption a,.fancybox-caption a:link,.fancybox-caption a:visited{color:#ccc;text-decoration:none}.fancybox-caption a:hover{color:#fff;text-decoration:underline}.fancybox-loading{-webkit-animation:a .8s infinite linear;animation:a .8s infinite linear;background:transparent;border:6px solid hsla(0,0%,39%,.5);border-radius:100%;border-top-color:#fff;height:60px;left:50%;margin:-30px 0 0 -30px;opacity:.6;padding:0;position:absolute;top:50%;width:60px;z-index:999999}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.fancybox-fx-slide.fancybox-slide--next{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.fancybox-fx-slide.fancybox-slide--current{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{opacity:0;-webkit-transform:scale3d(1.5,1.5,1.5);transform:scale3d(1.5,1.5,1.5)}.fancybox-fx-zoom-in-out.fancybox-slide--next{opacity:0;-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5)}.fancybox-fx-zoom-in-out.fancybox-slide--current{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}.fancybox-fx-rotate.fancybox-slide--previous{opacity:0;-webkit-transform:rotate(-1turn);transform:rotate(-1turn)}.fancybox-fx-rotate.fancybox-slide--next{opacity:0;-webkit-transform:rotate(1turn);transform:rotate(1turn)}.fancybox-fx-rotate.fancybox-slide--current{opacity:1;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.fancybox-fx-circular.fancybox-slide--previous{opacity:0;-webkit-transform:scale3d(0,0,0) translate3d(-100%,0,0);transform:scale3d(0,0,0) translate3d(-100%,0,0)}.fancybox-fx-circular.fancybox-slide--next{opacity:0;-webkit-transform:scale3d(0,0,0) translate3d(100%,0,0);transform:scale3d(0,0,0) translate3d(100%,0,0)}.fancybox-fx-circular.fancybox-slide--current{opacity:1;-webkit-transform:scaleX(1) translateZ(0);transform:scaleX(1) translateZ(0)}.fancybox-fx-tube.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0) scale(.1) skew(-10deg);transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0) scale(.1) skew(10deg);transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}@media (max-height:576px){.fancybox-slide{padding-left:6px;padding-right:6px}.fancybox-slide--image{padding:6px 0 0}.fancybox-slide--image .fancybox-content{margin-bottom:6px}.fancybox-slide--image .fancybox-close-small{background:#4e4e4e;color:#f2f4f6;height:36px;opacity:1;padding:6px;right:0;top:0;width:36px}}.fancybox-share{background:#f4f4f4;border-radius:3px;max-width:90%;padding:30px;text-align:center}.fancybox-share h1{color:#222;font-size:35px;font-weight:700;margin:0 0 20px}.fancybox-share p{margin:0;padding:0}.fancybox-share__button{border:0;border-radius:3px;display:inline-block;font-size:14px;font-weight:700;line-height:40px;margin:0 5px 10px;min-width:130px;padding:0 15px;text-decoration:none;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.fancybox-share__button:link,.fancybox-share__button:visited{color:#fff}.fancybox-share__button:hover{text-decoration:none}.fancybox-share__button--fb{background:#3b5998}.fancybox-share__button--fb:hover{background:#344e86}.fancybox-share__button--pt{background:#bd081d}.fancybox-share__button--pt:hover{background:#aa0719}.fancybox-share__button--tw{background:#1da1f2}.fancybox-share__button--tw:hover{background:#0d95e8}.fancybox-share__button svg{height:25px;margin-right:7px;position:relative;top:-1px;vertical-align:middle;width:25px}.fancybox-share__button svg path{fill:#fff}.fancybox-share__input{background:transparent;border:0;border-bottom:1px solid #d7d7d7;border-radius:0;color:#5d5b5b;font-size:14px;margin:10px 0 0;outline:none;padding:10px 15px;width:100%}.fancybox-thumbs{background:#fff;bottom:0;display:none;margin:0;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;padding:2px 2px 4px;position:absolute;right:0;-webkit-tap-highlight-color:transparent;top:0;width:212px;z-index:999995}.fancybox-thumbs-x{overflow-x:auto;overflow-y:hidden}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:212px}.fancybox-thumbs__list{font-size:0;height:100%;list-style:none;margin:0;overflow-x:hidden;overflow-y:auto;padding:0;position:absolute;position:relative;white-space:nowrap;width:100%}.fancybox-thumbs-x .fancybox-thumbs__list{overflow:hidden}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar{width:7px}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-track{background:#fff;border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3)}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:10px}.fancybox-thumbs__list a{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:rgba(0,0,0,.1);background-position:50%;background-repeat:no-repeat;background-size:cover;cursor:pointer;float:left;height:75px;margin:2px;max-height:calc(100% - 8px);max-width:calc(50% - 4px);outline:none;overflow:hidden;padding:0;position:relative;-webkit-tap-highlight-color:transparent;width:100px}.fancybox-thumbs__list a:before{border:4px solid #4ea7f9;bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;transition:all .2s cubic-bezier(.25,.46,.45,.94);z-index:999991}.fancybox-thumbs__list a:focus:before{opacity:.5}.fancybox-thumbs__list a.fancybox-thumbs-active:before{opacity:1}@media (max-width:768px){.fancybox-thumbs{width:110px}.fancybox-show-thumbs .fancybox-inner{right:110px}.fancybox-thumbs__list a{max-width:calc(100% - 10px)}}
|
2 |
-
|
3 |
|
4 |
/* Customizations */
|
5 |
.fancybox-content {
|
6 |
-
|
7 |
}
|
8 |
|
9 |
.fancybox-content.flowplayer, .fancybox-content.fv_player_lightbox_hidden {
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
}
|
15 |
|
16 |
/* Make sure FV Player respects fancybox fullscreen mode */
|
17 |
.fancybox-is-fullscreen .fv_player_lightbox_hidden {
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
}
|
22 |
|
23 |
/* Proper sizing for mobile landscape view */
|
24 |
.fancybox-slide .flowplayer, .fancybox-slide .fv-playlist-slider-wrapper {
|
25 |
-
|
26 |
}
|
27 |
.fancybox-slide .flowplayer.fixed-controls {
|
28 |
-
|
29 |
}
|
30 |
.fancybox-slide .flowplayer.fixed-controls.fp-full {
|
31 |
-
|
32 |
}
|
33 |
.fancybox-slide .flowplayer.fixed-controls.has-abloop {
|
34 |
-
|
35 |
}
|
36 |
|
37 |
.fancybox-slide .fv-playlist-slider-wrapper {
|
38 |
-
|
39 |
}
|
40 |
.fancybox-is-fullscreen .flowplayer {
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
}
|
45 |
.fancybox-is-fullscreen .flowplayer .fp-fullscreen:before {
|
46 |
-
|
47 |
.fancybox-is-fullscreen .flowplayer.fp-outlined .fp-fullscreen:before, .fancybox-is-fullscreen .flowplayer.fp-minimal .fp-fullscreen:before {
|
48 |
-
|
49 |
.fancybox-is-fullscreen .flowplayer.fp-edgy .fp-fullscreen:before {
|
50 |
-
|
51 |
.fancybox-is-fullscreen .flowplayer.fp-edgy.fp-outlined .fp-fullscreen:before, .fancybox-is-fullscreen .flowplayer.fp-edgy.fp-minimal .fp-fullscreen:before {
|
52 |
-
|
53 |
|
54 |
.fv-player-fancybox-play-icon {
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
}
|
66 |
|
67 |
body.fancybox-active #wpadminbar, body.fancybox-active .nc_wrapper.bottom { display: none !important }
|
1 |
+
body.compensate-for-scrollbar{overflow:hidden}.fancybox-active{height:auto}.fancybox-is-hidden{left:-9999px;margin:0;position:absolute!important;top:-9999px;visibility:hidden}.fancybox-container{-webkit-backface-visibility:hidden;height:100%;left:0;outline:none;position:fixed;-webkit-tap-highlight-color:transparent;top:0;-ms-touch-action:manipulation;touch-action:manipulation;transform:translateZ(0);width:100%;z-index:99992}.fancybox-container *{box-sizing:border-box}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{bottom:0;left:0;position:absolute;right:0;top:0}.fancybox-outer{-webkit-overflow-scrolling:touch;overflow-y:auto}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.9;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption,.fancybox-infobar,.fancybox-navigation .fancybox-button,.fancybox-toolbar{direction:ltr;opacity:0;position:absolute;transition:opacity .25s ease,visibility 0s ease .25s;visibility:hidden;z-index:99997}.fancybox-show-caption .fancybox-caption,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-nav .fancybox-navigation .fancybox-button,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;transition:opacity .25s ease 0s,visibility 0s ease 0s;visibility:visible}.fancybox-infobar{color:#ccc;font-size:13px;-webkit-font-smoothing:subpixel-antialiased;height:44px;left:0;line-height:44px;min-width:44px;mix-blend-mode:difference;padding:0 10px;pointer-events:none;top:0;-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.fancybox-toolbar{right:0;top:0}.fancybox-stage{direction:ltr;overflow:visible;transform:translateZ(0);z-index:99994}.fancybox-is-open .fancybox-stage{overflow:hidden}.fancybox-slide{-webkit-backface-visibility:hidden;display:none;height:100%;left:0;outline:none;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:absolute;text-align:center;top:0;transition-property:transform,opacity;white-space:normal;width:100%;z-index:99994}.fancybox-slide:before{content:"";display:inline-block;font-size:0;height:100%;vertical-align:middle;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--image{overflow:hidden;padding:44px 0}.fancybox-slide--image:before{display:none}.fancybox-slide--html{padding:6px}.fancybox-content{background:#fff;display:inline-block;margin:0;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:relative;text-align:left;vertical-align:middle}.fancybox-slide--image .fancybox-content{animation-timing-function:cubic-bezier(.5,0,.14,1);-webkit-backface-visibility:hidden;background:transparent;background-repeat:no-repeat;background-size:100% 100%;left:0;max-width:none;overflow:visible;padding:0;position:absolute;top:0;transform-origin:top left;transition-property:transform,opacity;-webkit-user-select:none;-ms-user-select:none;user-select:none;z-index:99995}.fancybox-can-zoomOut .fancybox-content{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-content{cursor:zoom-in}.fancybox-can-pan .fancybox-content,.fancybox-can-swipe .fancybox-content{cursor:grab}.fancybox-is-grabbing .fancybox-content{cursor:grabbing}.fancybox-container [data-selectable=true]{cursor:text}.fancybox-image,.fancybox-spaceball{background:transparent;border:0;height:100%;left:0;margin:0;max-height:none;max-width:none;padding:0;position:absolute;top:0;-webkit-user-select:none;-ms-user-select:none;user-select:none;width:100%}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content,.fancybox-slide--map .fancybox-content,.fancybox-slide--pdf .fancybox-content,.fancybox-slide--video .fancybox-content{height:100%;overflow:visible;padding:0;width:100%}.fancybox-slide--video .fancybox-content{background:#000}.fancybox-slide--map .fancybox-content{background:#e5e3df}.fancybox-slide--iframe .fancybox-content{background:#fff}.fancybox-iframe,.fancybox-video{background:transparent;border:0;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.fancybox-iframe{left:0;position:absolute;top:0}.fancybox-error{background:#fff;cursor:default;max-width:400px;padding:40px;width:100%}.fancybox-error p{color:#444;font-size:16px;line-height:20px;margin:0;padding:0}.fancybox-button{background:rgba(30,30,30,.6);border:0;border-radius:0;box-shadow:none;cursor:pointer;display:inline-block;height:44px;margin:0;padding:10px;position:relative;transition:color .2s;vertical-align:top;visibility:inherit;width:44px}.fancybox-button,.fancybox-button:link,.fancybox-button:visited{color:#ccc}.fancybox-button:hover{color:#fff}.fancybox-button:focus{outline:none}.fancybox-button.fancybox-focus{outline:1px dotted}.fancybox-button[disabled],.fancybox-button[disabled]:hover{color:#888;cursor:default;outline:none}.fancybox-button div{height:100%}.fancybox-button svg{display:block;height:100%;overflow:visible;position:relative;width:100%}.fancybox-button svg path{fill:currentColor;stroke-width:0}.fancybox-button--fsenter svg:nth-child(2),.fancybox-button--fsexit svg:first-child,.fancybox-button--pause svg:first-child,.fancybox-button--play svg:nth-child(2){display:none}.fancybox-progress{background:#ff5268;height:2px;left:0;position:absolute;right:0;top:0;transform:scaleX(0);transform-origin:0;transition-property:transform;transition-timing-function:linear;z-index:99998}.fancybox-close-small{background:transparent;border:0;border-radius:0;color:#ccc;cursor:pointer;opacity:.8;padding:8px;position:absolute;right:-12px;top:-44px;z-index:401}.fancybox-close-small:hover{color:#fff;opacity:1}.fancybox-slide--html .fancybox-close-small{color:currentColor;padding:10px;right:0;top:0}.fancybox-slide--image.fancybox-is-scaling .fancybox-content{overflow:hidden}.fancybox-is-scaling .fancybox-close-small,.fancybox-is-zoomable.fancybox-can-pan .fancybox-close-small{display:none}.fancybox-navigation .fancybox-button{background-clip:content-box;height:100px;opacity:0;position:absolute;top:calc(50% - 50px);width:70px}.fancybox-navigation .fancybox-button div{padding:7px}.fancybox-navigation .fancybox-button--arrow_left{left:0;left:env(safe-area-inset-left);padding:31px 26px 31px 6px}.fancybox-navigation .fancybox-button--arrow_right{padding:31px 6px 31px 26px;right:0;right:env(safe-area-inset-right)}.fancybox-caption{background:linear-gradient(0deg,rgba(0,0,0,.85) 0,rgba(0,0,0,.3) 50%,rgba(0,0,0,.15) 65%,rgba(0,0,0,.075) 75.5%,rgba(0,0,0,.037) 82.85%,rgba(0,0,0,.019) 88%,transparent);bottom:0;color:#eee;font-size:14px;font-weight:400;left:0;line-height:1.5;padding:75px 44px 25px;pointer-events:none;right:0;text-align:center;z-index:99996}@supports (padding:max(0px)){.fancybox-caption{padding:75px max(44px,env(safe-area-inset-right)) max(25px,env(safe-area-inset-bottom)) max(44px,env(safe-area-inset-left))}}.fancybox-caption--separate{margin-top:-50px}.fancybox-caption__body{max-height:50vh;overflow:auto;pointer-events:all}.fancybox-caption a,.fancybox-caption a:link,.fancybox-caption a:visited{color:#ccc;text-decoration:none}.fancybox-caption a:hover{color:#fff;text-decoration:underline}.fancybox-loading{animation:a 1s linear infinite;background:transparent;border:4px solid #888;border-bottom-color:#fff;border-radius:50%;height:50px;left:50%;margin:-25px 0 0 -25px;opacity:.7;padding:0;position:absolute;top:50%;width:50px;z-index:99999}@keyframes a{to{transform:rotate(1turn)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{opacity:0;transform:translate3d(-100%,0,0)}.fancybox-fx-slide.fancybox-slide--next{opacity:0;transform:translate3d(100%,0,0)}.fancybox-fx-slide.fancybox-slide--current{opacity:1;transform:translateZ(0)}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{opacity:0;transform:scale3d(1.5,1.5,1.5)}.fancybox-fx-zoom-in-out.fancybox-slide--next{opacity:0;transform:scale3d(.5,.5,.5)}.fancybox-fx-zoom-in-out.fancybox-slide--current{opacity:1;transform:scaleX(1)}.fancybox-fx-rotate.fancybox-slide--previous{opacity:0;transform:rotate(-1turn)}.fancybox-fx-rotate.fancybox-slide--next{opacity:0;transform:rotate(1turn)}.fancybox-fx-rotate.fancybox-slide--current{opacity:1;transform:rotate(0deg)}.fancybox-fx-circular.fancybox-slide--previous{opacity:0;transform:scale3d(0,0,0) translate3d(-100%,0,0)}.fancybox-fx-circular.fancybox-slide--next{opacity:0;transform:scale3d(0,0,0) translate3d(100%,0,0)}.fancybox-fx-circular.fancybox-slide--current{opacity:1;transform:scaleX(1) translateZ(0)}.fancybox-fx-tube.fancybox-slide--previous{transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{transform:translateZ(0) scale(1)}@media (max-height:576px){.fancybox-slide{padding-left:6px;padding-right:6px}.fancybox-slide--image{padding:6px 0}.fancybox-close-small{right:-6px}.fancybox-slide--image .fancybox-close-small{background:#4e4e4e;color:#f2f4f6;height:36px;opacity:1;padding:6px;right:0;top:0;width:36px}.fancybox-caption{padding-left:12px;padding-right:12px}@supports (padding:max(0px)){.fancybox-caption{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}}}.fancybox-button--fullscreen:before{width:15px;height:11px;left:calc(50% - 7px);top:calc(50% - 6px);border:2px solid;background:none}.fancybox-share{background:#f4f4f4;border-radius:3px;max-width:90%;padding:30px;text-align:center}.fancybox-share h1{color:#222;font-size:35px;font-weight:700;margin:0 0 20px}.fancybox-share p{margin:0;padding:0}.fancybox-share__button{border:0;border-radius:3px;display:inline-block;font-size:14px;font-weight:700;line-height:40px;margin:0 5px 10px;min-width:130px;padding:0 15px;text-decoration:none;transition:all .2s;-webkit-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.fancybox-share__button:link,.fancybox-share__button:visited{color:#fff}.fancybox-share__button:hover{text-decoration:none}.fancybox-share__button--fb{background:#3b5998}.fancybox-share__button--fb:hover{background:#344e86}.fancybox-share__button--pt{background:#bd081d}.fancybox-share__button--pt:hover{background:#aa0719}.fancybox-share__button--tw{background:#1da1f2}.fancybox-share__button--tw:hover{background:#0d95e8}.fancybox-share__button svg{height:25px;margin-right:7px;position:relative;top:-1px;vertical-align:middle;width:25px}.fancybox-share__button svg path{fill:#fff}.fancybox-share__input{background:transparent;border:0;border-bottom:1px solid #d7d7d7;border-radius:0;color:#5d5b5b;font-size:14px;margin:10px 0 0;outline:none;padding:10px 15px;width:100%}.fancybox-button--pause:before,.fancybox-button--play:before{top:calc(50% - 6px);left:calc(50% - 4px);background:transparent}.fancybox-button--play:before{width:0;height:0;border-top:6px inset transparent;border-bottom:6px inset transparent;border-left:10px solid;border-radius:1px}.fancybox-button--pause:before{width:7px;height:11px;border-style:solid;border-width:0 2px}.fancybox-thumbs{background:#ddd;bottom:0;display:none;margin:0;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;padding:2px 2px 4px;position:absolute;right:0;-webkit-tap-highlight-color:rgba(0,0,0,0);top:0;width:212px;z-index:99995}.fancybox-thumbs-x{overflow-x:auto;overflow-y:hidden}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:212px}.fancybox-thumbs__list{font-size:0;height:100%;list-style:none;margin:0;overflow-x:hidden;overflow-y:auto;padding:0;position:absolute;position:relative;white-space:nowrap;width:100%}.fancybox-thumbs-x .fancybox-thumbs__list{overflow:hidden}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar{width:7px}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-track{background:#fff;border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3)}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:10px}.fancybox-thumbs__list a{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:rgba(0,0,0,.1);background-position:50%;background-repeat:no-repeat;background-size:cover;cursor:pointer;float:left;height:75px;margin:2px;max-height:calc(100% - 8px);max-width:calc(50% - 4px);outline:none;overflow:hidden;padding:0;position:relative;-webkit-tap-highlight-color:transparent;width:100px}.fancybox-thumbs__list a:before{border:6px solid #ff5268;bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;transition:all .2s cubic-bezier(.25,.46,.45,.94);z-index:99991}.fancybox-thumbs__list a:focus:before{opacity:.5}.fancybox-thumbs__list a.fancybox-thumbs-active:before{opacity:1}@media (max-width:576px){.fancybox-thumbs{width:110px}.fancybox-show-thumbs .fancybox-inner{right:110px}.fancybox-thumbs__list a{max-width:calc(100% - 10px)}}
|
|
|
2 |
|
3 |
/* Customizations */
|
4 |
.fancybox-content {
|
5 |
+
overflow: hidden;
|
6 |
}
|
7 |
|
8 |
.fancybox-content.flowplayer, .fancybox-content.fv_player_lightbox_hidden {
|
9 |
+
padding: 0;
|
10 |
+
background-size:contain;
|
11 |
+
background-repeat:no-repeat;
|
12 |
+
background-position:center center;
|
13 |
}
|
14 |
|
15 |
/* Make sure FV Player respects fancybox fullscreen mode */
|
16 |
.fancybox-is-fullscreen .fv_player_lightbox_hidden {
|
17 |
+
height: 100%;
|
18 |
+
margin: 0;
|
19 |
+
padding-bottom: 6px;
|
20 |
}
|
21 |
|
22 |
/* Proper sizing for mobile landscape view */
|
23 |
.fancybox-slide .flowplayer, .fancybox-slide .fv-playlist-slider-wrapper {
|
24 |
+
margin-bottom: 0 !important;
|
25 |
}
|
26 |
.fancybox-slide .flowplayer.fixed-controls {
|
27 |
+
margin-bottom: 2.4em !important;
|
28 |
}
|
29 |
.fancybox-slide .flowplayer.fixed-controls.fp-full {
|
30 |
+
margin-bottom: 2.8em !important;
|
31 |
}
|
32 |
.fancybox-slide .flowplayer.fixed-controls.has-abloop {
|
33 |
+
margin-bottom: 5.2em !important;
|
34 |
}
|
35 |
|
36 |
.fancybox-slide .fv-playlist-slider-wrapper {
|
37 |
+
margin-top: 1em;
|
38 |
}
|
39 |
.fancybox-is-fullscreen .flowplayer {
|
40 |
+
max-width: 100% !important;
|
41 |
+
max-height: 100% !important;
|
42 |
+
margin: 0 !important;
|
43 |
}
|
44 |
.fancybox-is-fullscreen .flowplayer .fp-fullscreen:before {
|
45 |
+
content: "\e016"; }
|
46 |
.fancybox-is-fullscreen .flowplayer.fp-outlined .fp-fullscreen:before, .fancybox-is-fullscreen .flowplayer.fp-minimal .fp-fullscreen:before {
|
47 |
+
content: "\e216"; }
|
48 |
.fancybox-is-fullscreen .flowplayer.fp-edgy .fp-fullscreen:before {
|
49 |
+
content: "\e116"; }
|
50 |
.fancybox-is-fullscreen .flowplayer.fp-edgy.fp-outlined .fp-fullscreen:before, .fancybox-is-fullscreen .flowplayer.fp-edgy.fp-minimal .fp-fullscreen:before {
|
51 |
+
content: "\e316"; }
|
52 |
|
53 |
.fv-player-fancybox-play-icon {
|
54 |
+
position: absolute;
|
55 |
+
left: 0;
|
56 |
+
right: 0;
|
57 |
+
top: 0;
|
58 |
+
bottom: 0;
|
59 |
+
z-index: 999999;
|
60 |
+
font-size: 40px;
|
61 |
+
color: white;
|
62 |
+
text-align: center;
|
63 |
+
text-shadow: 0px 0px 7px #000;
|
64 |
}
|
65 |
|
66 |
body.fancybox-active #wpadminbar, body.fancybox-active .nc_wrapper.bottom { display: none !important }
|
css/flowplayer.css
CHANGED
@@ -943,6 +943,9 @@
|
|
943 |
display: block;
|
944 |
height: 0
|
945 |
}
|
|
|
|
|
|
|
946 |
.flowplayer.is-splash .fp-preload, .flowplayer.is-poster .fp-preload, .fp-waiting .fp-preload {
|
947 |
position: absolute;
|
948 |
display: block;
|
@@ -964,6 +967,11 @@
|
|
964 |
.fp-preload b:nth-child(3) { animation-delay: .15s }
|
965 |
.fp-preload b:nth-child(4) { animation-delay: .25s }
|
966 |
|
|
|
|
|
|
|
|
|
|
|
967 |
.flowplayer.is-splash .fp-ui noscript{display:block;z-index: 1000;position: absolute;left:0;right:0;padding:2em;background:black;margin-top:20%}
|
968 |
|
969 |
.flowplayer .fp-splash,
|
@@ -2197,10 +2205,19 @@ body.fv_flowplayer_tabs_hide .fv_flowplayer_tabs_content > div.fv_flowplayer_tab
|
|
2197 |
color: #000;
|
2198 |
}
|
2199 |
|
2200 |
-
.flowplayer.is-small .fv-fp-list {display: none}
|
2201 |
-
.flowplayer.is-tiny .fv-fp-list {display: none}
|
2202 |
.flowplayer .fv-fp-list-menu {width: auto; top:auto}
|
2203 |
.flowplayer .fv-fp-list-menu a {text-align:left}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2204 |
|
2205 |
.flowplayer .fp-ui .invisible {
|
2206 |
visibility: hidden;
|
@@ -2242,11 +2259,36 @@ body.fv_flowplayer_tabs_hide .fv_flowplayer_tabs_content > div.fv_flowplayer_tab
|
|
2242 |
}
|
2243 |
|
2244 |
/* Click to unmute */
|
2245 |
-
.flowplayer .fp-message-muted { text-align: center }
|
|
|
2246 |
.flowplayer .fp-message-muted:hover, .flowplayer .fp-message-muted:active { text-shadow: 0px 0px 5px rgba( 255, 255, 255, 0.66 ) }
|
2247 |
.flowplayer.has-fp-message-muted .fp-header { display: none }
|
2248 |
.flowplayer .fp-volumebtn-notice { position: relative; top: 3px; }
|
2249 |
.flowplayer .fp-volumebtn-notice:before { content: "\e00d"; }
|
2250 |
.flowplayer.fp-outlined .fp-volumebtn-notice:before, .flowplayer.fp-minimal .fp-volumebtn-notice:before { content: "\e20d"; }
|
2251 |
.flowplayer.fp-edgy .fp-volumebtn-notice:before { content: "\e10d"; }
|
2252 |
-
.flowplayer.fp-edgy.fp-outlined .fp-volumebtn-notice:before, .flowplayer.fp-edgy.fp-minimal .fp-volumebtn-notice:before { content: "\e30d"; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
943 |
display: block;
|
944 |
height: 0
|
945 |
}
|
946 |
+
.flowplayer .fp-ui .fp-preload {
|
947 |
+
margin: auto;
|
948 |
+
}
|
949 |
.flowplayer.is-splash .fp-preload, .flowplayer.is-poster .fp-preload, .fp-waiting .fp-preload {
|
950 |
position: absolute;
|
951 |
display: block;
|
967 |
.fp-preload b:nth-child(3) { animation-delay: .15s }
|
968 |
.fp-preload b:nth-child(4) { animation-delay: .25s }
|
969 |
|
970 |
+
.flowplayer .fp-bar > *.fp-buffer, .flowplayer .fp-bar-slider > *.fp-buffer {
|
971 |
+
max-width: 100%; }
|
972 |
+
.flowplayer.is-live .fp-buffer {
|
973 |
+
display: none; }
|
974 |
+
|
975 |
.flowplayer.is-splash .fp-ui noscript{display:block;z-index: 1000;position: absolute;left:0;right:0;padding:2em;background:black;margin-top:20%}
|
976 |
|
977 |
.flowplayer .fp-splash,
|
2205 |
color: #000;
|
2206 |
}
|
2207 |
|
2208 |
+
.flowplayer.is-small .fv-fp-list, .flowplayer.is-tiny .fv-fp-list {display: none}
|
|
|
2209 |
.flowplayer .fv-fp-list-menu {width: auto; top:auto}
|
2210 |
.flowplayer .fv-fp-list-menu a {text-align:left}
|
2211 |
+
.flowplayer .fv-fp-list-name {display: none}
|
2212 |
+
|
2213 |
+
.flowplayer .fv-fp-list-name {
|
2214 |
+
display: none;
|
2215 |
+
width: 8em;
|
2216 |
+
text-overflow: ellipsis;
|
2217 |
+
white-space: nowrap;
|
2218 |
+
overflow: hidden;
|
2219 |
+
}
|
2220 |
+
.flowplayer.is-small .fv-fp-list-name, .flowplayer.is-tiny .fv-fp-list-name {display: none}
|
2221 |
|
2222 |
.flowplayer .fp-ui .invisible {
|
2223 |
visibility: hidden;
|
2259 |
}
|
2260 |
|
2261 |
/* Click to unmute */
|
2262 |
+
.flowplayer .fp-message-muted { opacity: 0; text-align: center }
|
2263 |
+
.flowplayer.is-mouse-over .fp-message-muted { opacity: 1 }
|
2264 |
.flowplayer .fp-message-muted:hover, .flowplayer .fp-message-muted:active { text-shadow: 0px 0px 5px rgba( 255, 255, 255, 0.66 ) }
|
2265 |
.flowplayer.has-fp-message-muted .fp-header { display: none }
|
2266 |
.flowplayer .fp-volumebtn-notice { position: relative; top: 3px; }
|
2267 |
.flowplayer .fp-volumebtn-notice:before { content: "\e00d"; }
|
2268 |
.flowplayer.fp-outlined .fp-volumebtn-notice:before, .flowplayer.fp-minimal .fp-volumebtn-notice:before { content: "\e20d"; }
|
2269 |
.flowplayer.fp-edgy .fp-volumebtn-notice:before { content: "\e10d"; }
|
2270 |
+
.flowplayer.fp-edgy.fp-outlined .fp-volumebtn-notice:before, .flowplayer.fp-edgy.fp-minimal .fp-volumebtn-notice:before { content: "\e30d"; }
|
2271 |
+
|
2272 |
+
/* Videos pending encoding */
|
2273 |
+
.fv-player-encoder-video-processing-modal {
|
2274 |
+
text-align: center;
|
2275 |
+
z-index: 1000;
|
2276 |
+
position: absolute;
|
2277 |
+
width: 100%;
|
2278 |
+
height: 100%;
|
2279 |
+
background-color: black;
|
2280 |
+
color: white;
|
2281 |
+
top: 0;
|
2282 |
+
}
|
2283 |
+
.fv-player-encoder-video-processing-modal.hidden {
|
2284 |
+
display: none;
|
2285 |
+
}
|
2286 |
+
.fv-player-encoder-video-processing-modal h2 {
|
2287 |
+
font-weight: bold;
|
2288 |
+
color: white;
|
2289 |
+
padding-top: 35px;
|
2290 |
+
}
|
2291 |
+
.flowplayer .fv-player-encoder-video-processing-modal p {
|
2292 |
+
width: 100%;
|
2293 |
+
max-width: 100%;
|
2294 |
+
}
|
css/s3-uploader.css
CHANGED
@@ -2,27 +2,28 @@
|
|
2 |
padding-top: 20px;
|
3 |
}
|
4 |
|
5 |
-
.upload_buttons .fv-player-s3-upload-cancel-btn, .upload_buttons .fv-player-s3-upload-file-input {
|
6 |
display: none;
|
7 |
}
|
8 |
|
9 |
-
.fv-player-s3-upload-buttons {
|
10 |
float: left;
|
11 |
}
|
12 |
-
.fv-player-s3-upload-progress,
|
13 |
-
.fv-player-s3-upload-wrap {
|
14 |
float: right;
|
15 |
}
|
16 |
|
17 |
-
.fv-player-s3-upload-buttons .button {
|
18 |
margin-top: -5px;
|
19 |
}
|
20 |
|
21 |
-
.fv-player-s3-upload-buttons input, .fv-player-s3-upload-buttons .button, .fv-player-s3-upload-progress-enclosure
|
|
|
22 |
margin-right: 10px;
|
23 |
}
|
24 |
|
25 |
-
.fv-player-s3-upload-progress-enclosure {
|
26 |
display: none;
|
27 |
position:relative;
|
28 |
height: 23px;
|
@@ -36,7 +37,7 @@
|
|
36 |
box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
|
37 |
}
|
38 |
|
39 |
-
.fv-player-s3-upload-progress-number {
|
40 |
position: absolute;
|
41 |
left: 50%;
|
42 |
top: 2px;
|
@@ -44,7 +45,7 @@
|
|
44 |
color: black;
|
45 |
}
|
46 |
|
47 |
-
.fv-player-s3-upload-progress-bar {
|
48 |
float: left;
|
49 |
width: 0;
|
50 |
height: 100%;
|
2 |
padding-top: 20px;
|
3 |
}
|
4 |
|
5 |
+
.upload_buttons .fv-player-s3-upload-cancel-btn, .upload_buttons .fv-player-s3-upload-file-input, .upload_buttons input[type="file"] {
|
6 |
display: none;
|
7 |
}
|
8 |
|
9 |
+
.fv-player-s3-upload-buttons, .fv-player-upload-buttons {
|
10 |
float: left;
|
11 |
}
|
12 |
+
.fv-player-s3-upload-progress, .fv-player-upload-progress,
|
13 |
+
.fv-player-s3-upload-wrap, .fv-player-upload-wrap {
|
14 |
float: right;
|
15 |
}
|
16 |
|
17 |
+
.fv-player-s3-upload-buttons .button, .fv-player-upload-buttons .button {
|
18 |
margin-top: -5px;
|
19 |
}
|
20 |
|
21 |
+
.fv-player-s3-upload-buttons input, .fv-player-s3-upload-buttons .button, .fv-player-s3-upload-progress-enclosure,
|
22 |
+
.fv-player-upload-buttons input, .fv-player-upload-buttons .button, .fv-player-upload-progress-enclosure {
|
23 |
margin-right: 10px;
|
24 |
}
|
25 |
|
26 |
+
.fv-player-s3-upload-progress-enclosure, .fv-player-upload-progress-enclosure {
|
27 |
display: none;
|
28 |
position:relative;
|
29 |
height: 23px;
|
37 |
box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
|
38 |
}
|
39 |
|
40 |
+
.fv-player-s3-upload-progress-number, .fv-player-upload-progress-number {
|
41 |
position: absolute;
|
42 |
left: 50%;
|
43 |
top: 2px;
|
45 |
color: black;
|
46 |
}
|
47 |
|
48 |
+
.fv-player-s3-upload-progress-bar, .fv-player-upload-progress-bar {
|
49 |
float: left;
|
50 |
width: 0;
|
51 |
height: 100%;
|
flowplayer.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: FV Player
|
4 |
Plugin URI: http://foliovision.com/wordpress/plugins/fv-wordpress-flowplayer
|
5 |
Description: Formerly FV WordPress Flowplayer. Supports MP4, HLS, MPEG-DASH, WebM and OGV. Advanced features such as overlay ads or popups. Uses Flowplayer 7.2.7.
|
6 |
-
Version: 7.5.
|
7 |
Author URI: http://foliovision.com/
|
8 |
License: GPL-3.0
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
@@ -27,7 +27,7 @@ License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
|
27 |
*/
|
28 |
|
29 |
global $fv_wp_flowplayer_ver;
|
30 |
-
$fv_wp_flowplayer_ver = '7.5.
|
31 |
$fv_wp_flowplayer_core_ver = '7.2.7.2';
|
32 |
include_once( dirname( __FILE__ ) . '/includes/extra-functions.php' );
|
33 |
if( file_exists( dirname( __FILE__ ) . '/includes/module.php' ) ) {
|
@@ -68,6 +68,7 @@ include_once(dirname( __FILE__ ) . '/models/db.php');
|
|
68 |
|
69 |
include_once(dirname( __FILE__ ).'/models/cdn.class.php');
|
70 |
include_once(dirname( __FILE__ ).'/models/digitalocean-spaces.class.php');
|
|
|
71 |
|
72 |
global $FV_Player_Db;
|
73 |
$FV_Player_Db = new FV_Player_Db();
|
3 |
Plugin Name: FV Player
|
4 |
Plugin URI: http://foliovision.com/wordpress/plugins/fv-wordpress-flowplayer
|
5 |
Description: Formerly FV WordPress Flowplayer. Supports MP4, HLS, MPEG-DASH, WebM and OGV. Advanced features such as overlay ads or popups. Uses Flowplayer 7.2.7.
|
6 |
+
Version: 7.5.12.727
|
7 |
Author URI: http://foliovision.com/
|
8 |
License: GPL-3.0
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.txt
|
27 |
*/
|
28 |
|
29 |
global $fv_wp_flowplayer_ver;
|
30 |
+
$fv_wp_flowplayer_ver = '7.5.12.727.2';
|
31 |
$fv_wp_flowplayer_core_ver = '7.2.7.2';
|
32 |
include_once( dirname( __FILE__ ) . '/includes/extra-functions.php' );
|
33 |
if( file_exists( dirname( __FILE__ ) . '/includes/module.php' ) ) {
|
68 |
|
69 |
include_once(dirname( __FILE__ ).'/models/cdn.class.php');
|
70 |
include_once(dirname( __FILE__ ).'/models/digitalocean-spaces.class.php');
|
71 |
+
include_once(dirname( __FILE__ ).'/models/linode-object-storage.class.php');
|
72 |
|
73 |
global $FV_Player_Db;
|
74 |
$FV_Player_Db = new FV_Player_Db();
|
flowplayer/fv-player.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
if(typeof fv_flowplayer_conf!="undefined"){try{if(typeof window.localStorage=="object"&&typeof window.localStorage.volume!="undefined"){delete fv_flowplayer_conf.volume}}catch(e){}flowplayer.conf=fv_flowplayer_conf;flowplayer.conf.fullscreen=false;flowplayer.conf.chromecast=false;flowplayer.conf.embed=false;flowplayer.conf.share=false;flowplayer.conf.analytics=false;try{flowplayer.conf.key=atob(flowplayer.conf.key)}catch(e){}if(!flowplayer.support.android&&flowplayer.conf.dacast_hlsjs){function FVAbrController(hls){this.hls=hls;this.nextAutoLevel=3}FVAbrController.prototype.nextAutoLevel=function(nextLevel){this.nextAutoLevel=nextLevel};FVAbrController.prototype.destroy=function(){};flowplayer.conf.hlsjs={startLevel:-1,abrController:FVAbrController}}function parseIOSVersion(UA){var e=/iP(ad|hone)(; CPU)? OS (\d+_\d)/.exec(UA);if(e&&e.length>1){return parseFloat(e[e.length-1].replace("_","."),10)}return 0}if(flowplayer.support.iOS&&flowplayer.support.iOS.chrome&&flowplayer.support.iOS.version==0){flowplayer.support.iOS.version=parseIOSVersion(navigator.userAgent)}if(flowplayer.support.iOS&&parseInt(flowplayer.support.iOS.version)>=13||!flowplayer.support.iOS&&flowplayer.support.browser.safari&&parseInt(flowplayer.support.browser.version)>=8){flowplayer.conf.hlsjs.safari=true}flowplayer.support.fvmobile=!!(!flowplayer.support.firstframe||flowplayer.support.iOS||flowplayer.support.android);var fls=flowplayer.support;if(flowplayer.conf.mobile_native_fullscreen&&"ontouchstart"in window&&fls.fvmobile){flowplayer.conf.native_fullscreen=true}if("ontouchstart"in window){if(fls.android&&fls.android.version<4.4&&!(fls.browser.chrome&&fls.browser.version>54)){flowplayer.conf.native_fullscreen=true}if(fls.iOS&&(fv_player_in_iframe()||fls.iOS.version<7)){flowplayer.conf.native_fullscreen=true}}}if(typeof fv_flowplayer_translations!="undefined"){flowplayer.defaults.errors=fv_flowplayer_translations}var fv_player_did_autoplay=false;function fv_player_videos_parse(args,root){try{var videos=JSON.parse(args)}catch(e){return false}var regex=new RegExp("[\\?&]fv_flowplayer_mobile=([^&#]*)");var results=regex.exec(location.search);if((results!=null&&results[1]=="yes"||(jQuery(window).width()<=480||jQuery(window).height()<=480))&&(results==null||results[1]!="no")){var fv_fp_mobile=false;jQuery(videos.sources).each(function(k,v){if(v.mobile){videos.sources[k]=videos.sources[0];videos.sources[0]=v;fv_fp_mobile=true}if(fv_fp_mobile){jQuery(root).after('<p class="fv-flowplayer-mobile-switch">'+fv_flowplayer_translations.mobile_browser_detected_1+' <a href="'+document.URL+'?fv_flowplayer_mobile=no">'+fv_flowplayer_translations.mobile_browser_detected_2+"</a>.</p>")}})}root.trigger("fv_player_videos_parse",videos);return videos}function fv_player_in_iframe(){try{return window.self!==window.top}catch(e){return true}}jQuery(document).ready(function(){var loading_count=0;var loading=setInterval(function(){loading_count++;if(loading_count<1e3&&(window.fv_video_intelligence_conf&&!window.FV_Player_IMA||window.fv_vast_conf&&!window.FV_Player_IMA||window.fv_player_pro&&!window.FV_Flowplayer_Pro&&document.getElementById("fv_player_pro")!=fv_player_pro||window.fv_player_user_playlists&&!fv_player_user_playlists.is_loaded||window.FV_Player_JS_Loader_scripts_total&&window.FV_Player_JS_Loader_scripts_loaded<FV_Player_JS_Loader_scripts_total)){return}clearInterval(loading);fv_player_preload()},10)});function fv_escape_attr(text){var map={"&":"&","<":"<",">":">",'"':""","'":"'"};return text.replace(/[&<>"']/g,function(m){return map[m]})}function fv_player_preload(){if(flowplayer.support.touch){jQuery(".fp-playlist-external.fv-playlist-design-2017").addClass("visible-captions")}flowplayer(function(api,root){if(localStorage.flowplayerTestStorage){delete localStorage.flowplayerTestStorage}root=jQuery(root);var fp_player=root.find(".fp-player");var splash_click=false;if(root.hasClass("fixed-controls")){root.find(".fp-controls").on("click",function(e){if(!api.loading&&!api.ready){e.preventDefault();e.stopPropagation();api.load()}})}if(!flowplayer.support.volume&&!flowplayer.support.autoplay){root.find(".fp-volume").hide()}if(root.data("volume")==0&&root.hasClass("no-controlbar")){root.find(".fp-volume").remove()}var playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]");if((!api.conf.playlist||api.conf.playlist.length==0)&&playlist.length&&playlist.find("a[data-item]").length>0){var items=[];playlist.find("a[data-item]").each(function(){if(parsed=fv_player_videos_parse(jQuery(this).attr("data-item"),root)){items.push(parsed)}else{jQuery(this).remove()}});api.conf.playlist=items;api.conf.clip=items[0]}else if(!api.conf.clip){api.conf.clip=fv_player_videos_parse(jQuery(root).attr("data-item"),root)}jQuery("a",playlist).on("click",function(e){e.preventDefault();splash_click=true;var $this=jQuery(this),playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]"),index=jQuery("a",playlist).index(this);$prev=$this.prev("a"),item=$this.data("item");if(location.href.match(/wp-admin/)&&$this.parents(".fv-player-editor-preview").length>0){fv_flowplayer_conf.current_video_to_edit=index;$this.parents(".fv-player-custom-video").find(".edit-video .fv-player-editor-button").trigger("click");return false}if($prev.length&&$this.is(":visible")&&!$prev.is(":visible")){$prev.trigger("click");return false}if(jQuery("#"+$this.parent().attr("rel")).hasClass("dynamic-playlist"))return;var playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]");fv_player_playlist_active(playlist,this);if(api){if(api.error){api.pause();api.error=api.loading=false;root.removeClass("is-error");root.find(".fp-message.fp-shown").remove()}if(!api.video||api.video.index==index)return;api.play(index)}var new_splash=item.splash;if(!new_splash){new_splash=$this.find("img").attr("src")}player_splash(root,fp_player,item,new_splash);var rect=root[0].getBoundingClientRect();if(rect.bottom-100<0){jQuery("html, body").animate({scrollTop:jQuery(root).offset().top-100},300)}});var playlist_external=jQuery("[rel="+root.attr("id")+"]");var playlist_progress=false;var splash_img=root.find(".fp-splash");var splash_text=root.find(".fv-fp-splash-text");function player_splash(root,fp_player,item,new_splash){var splash_img=root.find("img.fp-splash");if(new_splash){if(splash_img.length==0){splash_img=jQuery('<img class="fp-splash" />');fp_player.prepend(splash_img)}splash_img.attr("alt",item.fv_title?fv_escape_attr(item.fv_title):"video");splash_img.attr("src",new_splash)}else if(splash_img.length){splash_img.remove()}}api.bind("load",function(e,api,video){if(!api.conf.playlist.length){return}if(video.type.match(/^audio/)&&!splash_click){var anchor=playlist_external.find("a").eq(video.index);var item=anchor.data("item");var new_splash=item.splash;if(!new_splash){new_splash=anchor.find("img").attr("src")}player_splash(root,fp_player,item,new_splash)}splash_click=false});api.bind("ready",function(e,api,video){setTimeout(function(){if(video.index>-1){if(playlist_external.length>0){var playlist_item=jQuery("a",playlist_external).eq(video.index);fv_player_playlist_active(playlist_external,playlist_item);playlist_progress=playlist_item.find(".fvp-progress")}}},100);splash_img=root.find(".fp-splash");if(!video.is_audio_stream&&!video.type.match(/^audio/)){splash_img.remove();splash_text.remove()}});api.bind("unload",function(){jQuery(".fp-playlist-external .now-playing").remove();jQuery(".fp-playlist-external a").removeClass("is-active");var iframe=fp_player.find("iframe.fp-engine");if(iframe.length){iframe.after(splash_text);iframe.after(splash_img)}else{fp_player.prepend(splash_text);fp_player.prepend(splash_img)}playlist_progress=false});api.bind("progress",function(e,api,time){if(playlist_progress.length){api.playlist_thumbnail_progress(playlist_progress,api.video,time)}});api.bind("error-subtitles",function(){console.log("error-subtitles");fv_player_notice(root,fv_flowplayer_translations[8],2e3)});var playlist=jQuery(root).parent().find("div.fp-playlist-vertical[rel="+jQuery(root).attr("id")+"]");if(playlist.length){function check_size_and_all(args){var property=playlist.hasClass("fp-playlist-only-captions")?"height":"max-height";if(playlist.parents(".fp-playlist-text-wrapper").hasClass("is-fv-narrow")){property="max-height"}playlist.css(property,vertical_playlist_height());if(property=="max-height")playlist.css("height","auto")}check_size_and_all();jQuery(window).on("resize tabsactivate",function(){setTimeout(check_size_and_all,0)})}function vertical_playlist_height(args){var height=root.height();if(height==0)height=root.css("max-height");return height}api.show_status=function(type){var status="";["loading","ready","playing","paused","seeking"].every(function(v,k){if(api[v])status+=" "+v;return true});console.log("FV Player Status ("+type+")",status)};if(!window.fv_player_loaded){window.fv_player_loaded=true;setTimeout(function(){jQuery(document).trigger("fv_player_loaded");var event=new CustomEvent("fv_player_loaded",[]);document.dispatchEvent(event)},100)}setTimeout(function(){root.trigger("fv_player_loaded")},10)});if(window.self!=window.top&&!location.href.match(/fv_player_preview/)){embed_size();jQuery(window.self).resize(embed_size)}function embed_size(){jQuery(".flowplayer.fp-is-embed").each(function(){var root=jQuery(this);if(!root.hasClass("has-chapters")&&!root.hasClass("has-transcript")&&jQuery(".fp-playlist-external[rel="+root.attr("id")+"]").length==0){root.height(jQuery(window).height())}})}if(typeof fv_flowplayer_playlists!="undefined"){for(var i in fv_flowplayer_playlists){if(!fv_flowplayer_playlists.hasOwnProperty(i))continue;jQuery("#"+i).flowplayer({playlist:fv_flowplayer_playlists[i]})}}fv_player_load();fv_autoplay_exec();jQuery(document).ajaxComplete(function(){fv_player_load()});jQuery(window).on("hashchange",fv_autoplay_exec)}function fv_player_load(forced_el){if(forced_el&&forced_el.lenght>1){console.log("FV Player: Can't use fv_player_load with more than a single forced element!")}var load_players=forced_el,forced_api=false;if(!load_players)load_players=jQuery(".flowplayer");load_players.each(function(i,el){var root=jQuery(el);var api=root.data("flowplayer");if(api){if(forced_el)forced_api=api;return}if(forced_el){root.find(".fp-preload, .fvfp_admin_error").remove();if(root.attr("data-item-lazy")){root.attr("data-item",root.attr("data-item-lazy"));root.removeAttr("item-lazy")}else if(playlist=jQuery("[rel="+root.attr("id")+"]")){playlist.find("a[data-item-lazy]").each(function(k,v){v=jQuery(v);v.attr("data-item",v.attr("data-item-lazy"));v.removeAttr("data-item-lazy")})}}var conf=false;if(root.attr("data-item")){conf={clip:fv_player_videos_parse(root.attr("data-item"),root)}}else if(playlist=jQuery("[rel="+root.attr("id")+"]")){if(playlist.find("a[data-item]").length==0)return;var items=[];playlist.find("a[data-item]").each(function(){if(parsed=fv_player_videos_parse(jQuery(this).attr("data-item"),root)){items.push(parsed)}else{jQuery(this).remove()}});conf={playlist:items}}if(conf){conf=flowplayer.extend(conf,root.data());forced_api=flowplayer(root[0],conf);root.data("flowplayer",forced_api)}});jQuery(".fv-playlist-slider-wrapper").each(function(i,el){var items=jQuery(this).find("a");jQuery(this).find(".fp-playlist-external").css("width",items.outerWidth()*items.length)});if(typeof jQuery().tabs!="undefined"){jQuery("body").removeClass("fv_flowplayer_tabs_hide");jQuery(".fv_flowplayer_tabs_content").tabs()}if(forced_el&&forced_api){return forced_api}}function fv_player_playlist_active(playlist,item){if(playlist){jQuery("a",playlist).removeClass("is-active");jQuery(".now-playing").remove()}$playlist=jQuery(playlist);$item=jQuery(item);var scroll_parent=false;$item.addClass("is-active");var is_design_2014=$playlist.hasClass("fv-playlist-design-2014");if((is_design_2014&&$item.find("h4").length==0||!is_design_2014)&&$item.find(".now-playing").length==0)$item.prepend('<strong class="now-playing"><span>'+fv_flowplayer_translations.playlist_current+"</span></strong>");if(!$playlist.parent().find(".flowplayer").length){scroll_parent=true}if(($playlist.hasClass("fp-playlist-vertical")||$playlist.hasClass("fp-playlist-horizontal")&&$playlist.hasClass("is-audio"))&&!fullyVisibleY($item.get(0))){var $el=scroll_parent?$playlist.parent():$playlist;$el.animate({scrollTop:$el.scrollTop()+($item.position().top-$el.position().top)},750)}else if($playlist.hasClass("fp-playlist-horizontal")&&!fullyVisibleX($item.get(0))){var $el=scroll_parent?$playlist.parent():$playlist;$el.animate({scrollLeft:$el.scrollLeft()+($item.position().left-$el.position().left)},750)}function fullyVisibleY(el){var rect=el.getBoundingClientRect(),top=rect.top,height=rect.height,bottom=top+height,el=el.parentNode;do{rect=el.getBoundingClientRect();if(bottom<=rect.bottom===false)return false;if(top<=rect.top)return false;el=el.parentNode}while(el!=document.body);return bottom<=document.documentElement.clientHeight}function fullyVisibleX(el){var rect=el.getBoundingClientRect(),left=rect.left,width=rect.width,right=left+width,el=el.parentNode;do{rect=el.getBoundingClientRect();if(right<=rect.right===false)return false;if(left<=rect.left)return false;el=el.parentNode}while(el!=document.body);return right<=document.documentElement.clientWidth}}var fv_fp_date=new Date;var fv_fp_utime=fv_fp_date.getTime();function fv_parse_sharelink(src){src=src.replace("https?://[^./].","");var prefix="fvp_";if(src.match(/(youtube.com)/)){return prefix+src.match(/(?:v=)([A-Za-z0-9_-]*)/)[1]}else if(src.match(/(vimeo.com)|(youtu.be)/)){return prefix+src.match(/(?:\/)([^/]*$)/)[1]}else{var match=src.match(/(?:\/)([^/]*$)/);if(match){return prefix+match[1].match(/^[^.]*/)[0]}}return prefix+src}function fv_player_get_video_link_hash(api){var hash=fv_parse_sharelink(typeof api.video.sources_original!="undefined"&&typeof api.video.sources_original[0]!="undefined"?api.video.sources_original[0].src:api.video.sources[0].src);if(typeof api.video.id!="undefined"){hash=fv_parse_sharelink(api.video.id.toString())}return hash}function fv_player_time_hms(seconds){if(isNaN(seconds)){return NaN}var sec_num=parseInt(seconds,10);var hours=Math.floor(sec_num/3600);var minutes=Math.floor(sec_num/60)%60;var seconds=sec_num%60;if(hours){hours+="h"}else{hours=""}if(hours&&minutes<10){minutes="0"+minutes+"m"}else if(!hours&&minutes){minutes+="m"}else{minutes=""}if((hours||minutes)&&seconds<10){seconds="0"+seconds}seconds+="s";var timeString=hours+minutes+seconds;return timeString}function fv_player_time_hms_ms(seconds){if(isNaN(seconds)){return NaN}seconds=parseFloat(seconds).toFixed(3);var miliseconds=(seconds+"").split(".");if(typeof miliseconds[1]!="undefined"&&miliseconds[1]>0){miliseconds=miliseconds[1]+"ms"}else{miliseconds=""}var timeString=fv_player_time_hms(seconds)+miliseconds;return timeString}function fv_player_time_seconds(time,duration){if(!time)return-1;var seconds=0;var match=time.match(/(\d+[a-z]{1,2})/g);match.forEach(function(item){if(item.endsWith("h")){seconds+=3600*parseInt(item)}else if(item.endsWith("m")){seconds+=60*parseInt(item)}else if(item.endsWith("s")&&!item.endsWith("ms")){seconds+=parseInt(item)}else if(item.endsWith("ms")){if(parseInt(item)){seconds+=parseInt(item)/1e3}}});return duration?Math.min(seconds,duration):seconds}function fv_autoplay_init(root,index,time,abStart,abEnd){if(fv_autoplay_exec_in_progress)return;fv_autoplay_exec_in_progress=true;var api=root.data("flowplayer");if(!api)return;var fTime=fv_player_time_seconds(time);abEnd=fv_player_time_seconds(abEnd);abStart=fv_player_time_seconds(abStart);if(root.parent().hasClass("ui-tabs-panel")){var tabId=root.parent().attr("id");jQuery("[aria-controls="+tabId+"] a").trigger("click")}if(!root.find(".fp-player").attr("class").match(/\bis-sticky/)){var offset=jQuery(root).offset().top-(jQuery(window).height()-jQuery(root).height())/2;window.scrollTo(0,offset);api.one("ready",function(){window.scrollTo(0,offset)})}if(root.hasClass("lightboxed")){setTimeout(function(){jQuery("[href=\\#"+root.attr("id")+"]").trigger("click")},0)}if(index){if(fv_player_video_link_autoplay_can(api,parseInt(index))){if(api.ready){fv_player_video_link_seek(api,fTime)}else{api.play(parseInt(index));api.one("ready",function(){fv_player_video_link_seek(api,fTime,abEnd,abStart)})}}else if(flowplayer.support.inlineVideo){api.one(api.playing?"progress":"ready",function(e,api){api.play(parseInt(index));api.one("ready",function(){fv_player_video_link_seek(api,fTime,abEnd,abStart)})});root.find(".fp-splash").attr("src",jQuery("[rel="+root.attr("id")+"] div").eq(index).find("img").attr("src"));if(!fv_player_in_iframe()){fv_player_notice(root,fv_flowplayer_translations[11],"progress")}}}else{if(api.ready){fv_player_video_link_seek(api,fTime)}else{if(fv_player_video_link_autoplay_can(api)){api.load()}else if(!fv_player_in_iframe()){fv_player_notice(root,fv_flowplayer_translations[11],"progress")}api.one("ready",function(){fv_player_video_link_seek(api,fTime,abEnd,abStart)})}}}function fv_player_video_link_seek(api,fTime,abEnd,abStart){fv_autoplay_exec_in_progress=false;var do_seek=setInterval(function(){if(api.loading)return;if(fTime>0||api.video.time>0){if(!!api.custom_seek){api.custom_seek(fTime)}else{api.seek(fTime)}}if(abEnd&&abStart)api.trigger("link-ab",[api,abStart,abEnd]);clearInterval(do_seek)},10)}var fv_autoplay_exec_in_progress=false;function fv_autoplay_exec(){var autoplay=true;if(typeof flowplayer!=="undefined"&&typeof fv_flowplayer_conf!="undefined"&&fv_flowplayer_conf.video_hash_links&&window.location.hash.substring(1).length){var aHash=window.location.hash.match(/\?t=/)?window.location.hash.substring(1).split("?t="):window.location.hash.substring(1).split(",");var hash=aHash[0];var time=aHash[1]===undefined?false:aHash[1];var abStart=aHash[2]===undefined?false:aHash[2];var abEnd=aHash[3]===undefined?false:aHash[3];jQuery(".flowplayer").each(function(){var root=jQuery(this);if(root.hasClass("lightbox-starter")){root=jQuery(root.attr("href"))}var api=root.data("flowplayer");if(!api)return;var playlist=typeof api.conf.playlist!=="undefined"&&api.conf.playlist.length>1?api.conf.playlist:[api.conf.clip];for(var item in playlist){if(!playlist.hasOwnProperty(item))continue;var id=typeof playlist[item].id!=="undefined"?fv_parse_sharelink(playlist[item].id.toString()):false;if(hash===id&&autoplay){console.log("fv_autoplay_exec for "+id,item);fv_autoplay_init(root,parseInt(item),time,abStart,abEnd);autoplay=false;return false}}for(var item in playlist){if(!playlist.hasOwnProperty(item))continue;var src=fv_parse_sharelink(playlist[item].sources[0].src);if(hash===src&&autoplay){console.log("fv_autoplay_exec for "+src,item);fv_autoplay_init(root,parseInt(item),time,abStart,abEnd);autoplay=false;return false}}})}if(autoplay&&flowplayer.support.firstframe){jQuery(".flowplayer[data-fvautoplay]").each(function(){var root=jQuery(this),api=root.data("flowplayer"),autoplay=root.attr("data-fvautoplay");if(!fv_player_did_autoplay&&autoplay){if((flowplayer.support.android||flowplayer.support.iOS)&&api&&api.conf.clip.sources[0].type=="video/youtube"){console.log("FV Player: Autoplay for YouTube not supported on Android and iOS");return}else{fv_player_did_autoplay=true;if(api.conf.playlist.length&&jQuery.isNumeric(autoplay)){api.play(parseInt(autoplay))}else{api.load()}var play_icon=root.find(".fp-play").addClass("invisible"),control_bar=root.find(".fp-controls").addClass("invisible");api.one("progress",function(){play_icon.removeClass("invisible");control_bar.removeClass("invisible")});if(autoplay=="muted"){api.mute(true,true)}}}})}}function fv_player_video_link_autoplay_can(api,item){var video=item?api.conf.playlist[item]:api.conf.clip;if(video.sources[0].type=="video/youtube"&&(flowplayer.support.iOS||flowplayer.support.android)||fv_player_in_iframe())return false;return flowplayer.support.firstframe}function fv_player_notice(root,message,timeout){var notices=jQuery(".fvfp-notices",root);if(!notices.length){notices=jQuery('<div class="fvfp-notices">');jQuery(".fp-player",root).append(notices)}var notice=jQuery('<div class="fvfp-notice-content">'+message+"</div></div>");notices.append(notice);if(typeof timeout=="string"){var player=jQuery(root).data("flowplayer");player.on(timeout,function(){notice.fadeOut(100,function(){jQuery(this).remove()})})}if(timeout>0){setTimeout(function(){notice.fadeOut(2e3,function(){jQuery(this).remove()})},timeout)}return notice}var fv_player_clipboard=function(text,successCallback,errorCallback){try{fv_player_doCopy(text);successCallback()}catch(e){if(typeof errorCallback!="undefined")errorCallback(e)}};function fv_player_doCopy(text){var textarea=document.createElement("textarea");textarea.value=text;textarea.style.opacity=0;textarea.style.position="absolute";textarea.setAttribute("readonly",true);document.body.appendChild(textarea);var selected=document.getSelection().rangeCount>0?document.getSelection().getRangeAt(0):false;if(navigator.userAgent.match(/ipad|ipod|iphone/i)){var editable=textarea.contentEditable;textarea.contentEditable=true;var range=document.createRange();range.selectNodeContents(textarea);var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range);textarea.setSelectionRange(0,999999);textarea.contentEditable=editable}else{textarea.select()}try{var result=document.execCommand("copy");if(selected){document.getSelection().removeAllRanges();document.getSelection().addRange(selected)}document.body.removeChild(textarea);return result}catch(err){throw new Error("Unsuccessfull")}}flowplayer(function(api,root){root=jQuery(root);var hlsjs;flowplayer.engine("hlsjs-lite").plugin(function(params){hlsjs=params.hls;hlsjs.on(Hls.Events.ERROR,function(event,data){if(data.type=="mediaError"&&data.details=="fragParsingError"&&data.fatal==true){hlsjs.destroy();api.trigger("error",[api,{code:3}]);setTimeout(function(){root.removeClass("is-seeking");root.addClass("is-paused")},0)}});if(flowplayer.support.browser.safari){hlsjs.on(Hls.Events.KEY_LOADED,function(event){if(event=="hlsKeyLoaded"){setTimeout(function(){if(api.loading){console.log("FV Player: Safari stuck loading HLS, resuming playback...");api.resume()}},0)}})}var pick_quality=flowplayer.conf.hd_streaming&&!flowplayer.support.fvmobile?720:false;if(jQuery(params.root).data("hd_streaming")==false)pick_quality=false;if(localStorage.FVPlayerHLSQuality)pick_quality=localStorage.FVPlayerHLSQuality;if(pick_quality){hlsjs.on(Hls.Events.MANIFEST_PARSED,function(_,data){var found=false;jQuery.each(data.levels,function(k,v){if(v.height==pick_quality)found=k});if(!localStorage.FVPlayerHLSQuality&&!found){jQuery.each(data.levels,function(k,v){if(v.height>found)found=k})}if(found){console.log("FV Player: Picked "+data.levels[found].height+"p quality");hlsjs.startLevel=found;hlsjs.currentLevel=found}})}});root=jQuery(root);var search=document.location.search;if(localStorage.FVPlayerDashQuality){if(!api.conf.dash)api.conf.dash={};api.conf.dash.initialVideoQuality="restore"}root.on("click",".fp-qsel-menu a",function(){if(api.engine.engineName=="hlsjs-lite"){var quality=jQuery(this).data("quality");if(quality==-1){localStorage.removeItem("FVPlayerHLSQuality")}else{var level=hlsjs.levels[quality];localStorage.FVPlayerHLSQuality=level.height}}});if(localStorage.FVPlayerHLSQuality){api.conf.hlsjs.startLevel=parseInt(localStorage.FVPlayerHLSQuality);api.conf.hlsjs.testBandwidth=false;api.conf.hlsjs.autoLevelEnabled=false}else if(flowplayer.conf.hd_streaming&&!flowplayer.support.fvmobile){api.conf.hlsjs.startLevel=3;api.conf.hlsjs.testBandwidth=false;api.conf.hlsjs.autoLevelEnabled=false}api.bind("quality",function(e,api,quality){if(api.engine.engineName=="dash"){if(quality==-1){localStorage.removeItem("FVPlayerDashQuality")}else if(bitrates[quality]){localStorage.FVPlayerDashQuality=bitrates[quality].height}}});var bitrates=[];var last_quality=-1;api.bind("ready",function(e,api){root.find(".fp-qsel-menu strong").text(fv_flowplayer_translations.quality);if(api.engine.engineName=="dash"){bitrates=api.engine.dash.getBitrateInfoListFor("video");if(localStorage.FVPlayerDashQuality&&api.conf.dash.initialVideoQuality){api.quality(api.conf.dash.initialVideoQuality)}quality_sort()}else if(api.engine.engineName=="hlsjs-lite"){root.addClass("is-loading");api.loading=true;api.one("progress",function(){if(api.loading){root.removeClass("is-loading");api.loading=false}});if(api.video.qualities&&api.video.qualities.length>2){var qswitch=-1;if(localStorage.FVPlayerHLSQuality){jQuery(api.video.qualities).each(function(k,v){if(v.value==localStorage.FVPlayerHLSQuality){qswitch=localStorage.FVPlayerHLSQuality;return false}})}else if(flowplayer.conf.hd_streaming&&!flowplayer.support.fvmobile){jQuery(api.video.qualities).each(function(k,v){var height=parseInt(v.label);if(height>0&&qswitch==-1&&height>=720&&height<=720){qswitch=v.value}})}qswitch=parseInt(qswitch);if(qswitch>-1){root.one("progress",function(){setTimeout(function(){api.quality(qswitch)})})}quality_sort()}}else if(api.video.sources_fvqs&&api.video.sources_fvqs.length>0&&api.video.src.match(/vimeo.*?\.mp4/)){setTimeout(quality_sort,0)}root.find("a[data-quality]").removeClass("is-current")});if(search.match(/dash_debug/)||search.match(/hls_debug/))var debug_log=jQuery('<div class="fv-debug" style="background: gray; color: white; top: 10%; position: absolute; z-index: 1000">').appendTo(root.find(".fp-player"));api.bind("ready progress",quality_process);api.bind("quality",function(){setTimeout(quality_process,0)});function quality_process(){if(api.engine.engineName=="dash"){var stream_info=bitrates[api.engine.dash.getQualityFor("video")];if(stream_info.qualityIndex!=last_quality){last_quality=stream_info.qualityIndex;quality_label(stream_info.qualityIndex,bitrates)}if(search.match(/dash_debug/))quality_debug(stream_info.width,stream_info.height,stream_info.bitrate)}else if(api.engine.engineName=="hlsjs-lite"){if(hlsjs.currentLevel!=last_quality){last_quality=hlsjs.currentLevel;quality_label(hlsjs.currentLevel,hlsjs.levels)}if(search.match(/hls_debug/)){var level=hlsjs.levels[hlsjs.currentLevel];if(level){quality_debug(level.width,level.height,level.bitrate)}}}}function quality_label(index,qualities){if(!qualities[index])return;var height=qualities[index].height,hd_limit=541,lowest=1e5;jQuery(qualities).each(function(k,v){if(v.height>=720&&v.height<1400)hd_limit=720;if(v.height<lowest)lowest=v.height;if(localStorage.FVPlayerHLSQuality==v.height){root.find("a[data-quality]").removeClass("fp-selected fp-color");root.find("a[data-quality="+k+"]").addClass("fp-selected fp-color")}});root.find("a[data-quality]").removeClass("is-current");root.find("a[data-quality="+index+"]").addClass("is-current");var label="SD";if(height>=360&&lowest<height)label="SD";if(height>=hd_limit)label="HD";if(height>=1400)label="4K";root.find(".fp-qsel").html(label)}function quality_debug(w,h,br){debug_log.html("Using "+w+"x"+h+" at "+Math.round(br/1024)+" kbps")}function quality_sort(){var menu=root.find(".fp-qsel-menu");menu.children().each(function(i,a){menu.prepend(a)});menu.children().each(function(i,a){if(/^NaNp/.test(jQuery(a).html())){var bitrate=jQuery(a).html().match(/\((.*?)\)/);if(bitrate&&typeof bitrate[1]!=="undefined"){jQuery(a).html(bitrate[1])}}else{jQuery(a).html(jQuery(a).html().replace(/\(.*?\)/,""))}});menu.prepend(menu.find("a[data-quality=-1]"));menu.prepend(menu.find("strong"))}});flowplayer(function(api,root){root=jQuery(root);var player_id=root.attr("id"),ad=false;if(root.data("end_popup_preview")){jQuery(document).ready(function(){api.trigger("finish",[api])})}function ad_height_check(){var count=0;var ad_height_check=setInterval(function(){var height=ad&&ad.find(".adsbygoogle").height();count++;if(count>20*10||height>0)clearInterval(ad_height_check);if(height>root.height()){ad.addClass("tall-ad")}},50)}function show_ad(){var ad_data=root.attr("data-ad");if(typeof ad_data!="undefined"&&ad_data.length){try{ad_data=JSON.parse(ad_data)}catch(e){return false}if(!ad&&!root.hasClass("is-cva")&&root.width()>=parseInt(ad_data.width)){var html=ad_data.html;html=html.replace("%random%",Math.random());ad=jQuery('<div id="'+player_id+'_ad" class="wpfp_custom_ad">'+html+"</div>");root.find(".fp-player").append(ad);ad_height_check();setTimeout(function(){if(root.find(".wpfp_custom_ad video").length){api.pause()}},500)}}}function show_popup(event){var popup_data=root.attr("data-popup");if(typeof popup_data!="undefined"&&popup_data.length){try{popup_data=JSON.parse(popup_data)}catch(e){return false}if(event=="finish"||popup_data.pause||popup_data.html.match(/fv-player-ppv-purchase-btn-wrapper/)){root.addClass("is-popup-showing");root.find(".fp-player").append('<div id="'+player_id+'_custom_popup" class="wpfp_custom_popup">'+popup_data.html+"</div>")}}}api.bind("ready",function(e,api){if(ad.length==1){ad.remove();ad=false}if(!root.data("ad_show_after")){show_ad()}}).bind("progress",function(e,api,current){if(current>root.data("ad_show_after")){show_ad()}}).bind("finish",function(e,api){if(typeof api.video.index=="undefined"||api.video.index+1==api.conf.playlist.length){show_popup(e.type)}}).bind("pause",function(e,api){show_popup(e.type)}).bind("resume unload seek",function(e,api){if(root.hasClass("is-popup-showing")){root.find(".wpfp_custom_popup").remove();root.removeClass("is-popup-showing")}})});jQuery(document).on("click",".fv_fp_close",function(){var ad=jQuery(this).parents(".wpfp_custom_ad_content"),video=ad.find("video");ad.fadeOut();if(video.length)video[0].pause();return false});jQuery(document).on("focus",".fv_player_popup input[type=text], .fv_player_popup input[type=email], .fv_player_popup textarea",function(){var api=jQuery(this).parents(".flowplayer").data("flowplayer");if(api)api.disable(true)});jQuery(document).on("blur",".fv_player_popup input[type=text], .fv_player_popup input[type=email], .fv_player_popup textarea",function(){var api=jQuery(this).parents(".flowplayer").data("flowplayer");if(api)api.disable(false)});flowplayer(function(api,root){api.on("ready",function(e,api,video){api.one("progress",function(){jQuery(root).find(".fp-airplay").toggle(api.engine.engineName=="html5")})})});flowplayer(function(api,root){var root=jQuery(root),bean=flowplayer.bean,time=0,last=0,timer,event_name;if(typeof ga=="undefined"&&api.conf.fvanalytics&&typeof _gat=="undefined"&&typeof gtag=="undefined"){if(is_ga_4(api)){jQuery.getScript({url:"https://www.googletagmanager.com/gtag/js?id="+api.conf.fvanalytics,cache:true},function(){window.dataLayer=window.dataLayer||[];window.gtag=function(){window.dataLayer.push(arguments)};window.gtag("js",new Date);window.gtag("config",api.conf.fvanalytics)})}else{jQuery.getScript({url:"https://www.google-analytics.com/analytics.js",cache:true},function(){ga("create",api.conf.fvanalytics,"auto")})}}if(!window._paq&&api.conf.matomo_domain&&api.conf.matomo_site_id){var u="//"+api.conf.matomo_domain+"/";var _paq=window._paq=window._paq||[];_paq.push(["setTrackerUrl",u+"matomo.php"]);_paq.push(["setSiteId",api.conf.matomo_site_id]);var d=document,g=d.createElement("script"),s=d.getElementsByTagName("script")[0];g.type="text/javascript";g.async=true;g.src=u+"matomo.js";s.parentNode.insertBefore(g,s)}api.bind("progress",function(e,api,current){fv_track(e,api,current)}).bind("finish ready ",function(e,api){for(var j in fv_ga_events){if(!fv_ga_events.hasOwnProperty(j))continue;root.removeData("fv_track_"+fv_ga_events[j])}}).bind("error",function(e,api,error){setTimeout(function(){if(!api.error)return;var video=typeof api.video!="undefined"&&typeof api.video.src!="undefined"?api.video:false;if(!video&&typeof api.conf.clip!="undefined"&&typeof api.conf.clip.sources!="undefined"&&typeof api.conf.clip.sources[0]!="undefined"&&typeof api.conf.clip.sources[0].src!="undefined")video=api.conf.clip.sources[0];var name=fv_player_track_name(root,video);if(name&&!name.match(/\/\/vimeo.com\/\d/)){if(is_ga_4(api)){}else{fv_player_track(api,false,"Video "+(root.hasClass("is-cva")?"Ad ":"")+"error",error.message,name)}}},100)});api.bind("load unload",fv_track_seconds_played).bind("progress",function(e,api){if(!api.seeking){time+=last?+new Date-last:0;last=+new Date}if(!timer){timer=setTimeout(function(){timer=null;if(!is_ga_4(api)){fv_player_track(api,false,"Flowplayer heartbeat",api.engine.engineName+"/"+api.video.type,"Heartbeat",0)}},10*60*1e3)}}).bind("pause",function(){last=0});api.bind("shutdown",function(){bean.off(window,"unload",fv_track_seconds_played)});bean.on(window,"unload",fv_track_seconds_played);var fv_ga_events=is_ga_4(api)?["Play","25 Percent Played","50 Percent Played","75 Percent Played","100 Percent Played"]:["start","first quartile","second quartile","third quartile","complete"];function fv_track_seconds_played(e,api_not_needed,video){video=video||api.video;if(e.type==="load"){event_name=fv_player_track_name(root,video)}if(time){fv_player_track(api,false,"Video / Seconds played",api.engine.engineName+"/"+api.video.type,event_name,Math.round(time/1e3));time=0;if(timer){clearTimeout(timer);timer=null}}}function fv_track(e,api,data){var video=api.video,dur=video.duration,i=0;var name=fv_player_track_name(root,video);if(dur){if(data>19*dur/20)i=4;else if(data>3*dur/4)i=3;else if(data>dur/2)i=2;else if(data>dur/4)i=1}if(api.live)i=0;if(root.data("fv_track_"+fv_ga_events[i]))return;for(var j in fv_ga_events){if(!fv_ga_events.hasOwnProperty(j))continue;if(j==i)break;if(!root.data("fv_track_"+fv_ga_events[j]))return}root.trigger("fv_track_"+fv_ga_events[i].replace(/ /,"_"),[api,name]);root.data("fv_track_"+fv_ga_events[i],true);fv_player_track(api,false,"Video "+(root.hasClass("is-cva")?"Ad ":"")+fv_ga_events[i],api.engine.engineName+"/"+video.type,name)}api.get_time_played=function(){return time/1e3}});function is_ga_4(api){if(typeof api.conf.fvanalytics!="undefined"&&api.conf.fvanalytics&&api.conf.fvanalytics.startsWith("G-"))return true;return false}function fv_player_track(api,ga_id,event,engineType,name,value){if(!ga_id)ga_id=flowplayer.conf.fvanalytics;if(typeof engineType=="undefined")engineType="Unknown engine";if(/fv_player_track_debug/.test(window.location.href))console.log("FV Player Track: "+event+" - "+engineType+" '"+name+"'",value);if(typeof gtag!="undefined"){if(is_ga_4(api)){gtag("event",event,{video_current_time:api.video.time,video_provider:engineType,video_duration:api.video.duration,value:value?value:1})}else{gtag("event",event,{event_category:engineType,event_label:name,value:value?value:1})}}else if(ga_id&&typeof ga!="undefined"){ga("create",ga_id,"auto",name,{allowLinker:true});ga("require","linker");if(value){ga("send","event",event,engineType,name,value)}else{ga("send","event",event,engineType,name)}}else if(ga_id&&typeof _gat!="undefined"){var tracker=_gat._getTracker(ga_id);if(typeof tracker._setAllowLinker=="undefined"){return}tracker._setAllowLinker(true);if(value){tracker._trackEvent(event,engineType,name,value)}else{tracker._trackEvent(event,engineType,name)}}if(flowplayer.conf.matomo_domain&&flowplayer.conf.matomo_site_id&&typeof _paq!="undefined"){if(value){_paq.push(["trackEvent",event,engineType,name,value])}else{_paq.push(["trackEvent",event,engineType,name])}}}function fv_player_track_name(root,video){var name=root.attr("title");if(!name&&typeof video.fv_title!="undefined")name=video.fv_title;if(!name&&typeof video.title!="undefined")name=video.title;if(!name&&typeof video.src!="undefined"){name=video.src.split("/").slice(-1)[0].replace(/\.(\w{3,4})(\?.*)?$/i,"");if(video.type.match(/mpegurl/))name=video.src.split("/").slice(-2)[0].replace(/\.(\w{3,4})(\?.*)?$/i,"")+"/"+name}return name}flowplayer(function(api,root){root=jQuery(root);var player=root.find(".fp-player"),had_no_volume=root.hasClass("no-volume"),had_fp_mute=root.hasClass("fp-mute"),had_fp_full=root.hasClass("fp-full"),buttons_count=0;function check_size(){var width=player.width()||root.width(),video_index=api.video.index?api.video.index:0;if(width>900){jQuery(".fp-subtitle",root).addClass("is-wide")}else{jQuery(".fp-subtitle",root).removeClass("is-wide")}root.toggleClass("is-tiny",width<400);root.toggleClass("is-small",width<600&&width>=400);var too_narrow=width<480+buttons_count*35;if(typeof api.fv_timeline_chapters_data!="undefined"&&typeof api.fv_timeline_chapters_data[video_index]!="undefined"){too_narrow=true}if(!had_fp_full){root.toggleClass("fp-full",root.hasClass("has-abloop")||too_narrow)}var size="";if(width<400)size="is-tiny";else if(width<600&&width>=400)size="is-small";root.trigger("fv-player-size",[size]);var el=player;if(root.parent().hasClass("fp-playlist-vertical-wrapper")||root.parent().hasClass("fp-playlist-text-wrapper"))el=root.parent();if(el.width()<=560){el.addClass("is-fv-narrow")}else{el.removeClass("is-fv-narrow")}if(width<=320){root.addClass("no-volume fp-mute")}else{if(!had_no_volume)root.removeClass("no-volume");if(!had_fp_mute)root.removeClass("fp-mute")}}check_size();jQuery(window).on("resize",check_size);api.on("ready fullscreen fullscreen-exit sticky sticky-exit",function(e){setTimeout(function(){buttons_count=root.find(".fp-controls > strong:visible").length+root.find(".fp-controls > .fp-icon:visible").length;check_size()},0)});api.on("unload pause finish error",function(){if(typeof checker!=="undefined")clearInterval(checker)})});jQuery(window).on("resize tabsactivate",function(){jQuery(".fp-playlist-external").each(function(){var playlist=jQuery(this);if(playlist.parent().width()>=900)playlist.addClass("is-wide");else playlist.removeClass("is-wide")})}).trigger("resize");flowplayer(function(api,root){api.bind("ready",function(){if(/Chrome/.test(navigator.userAgent)&&parseFloat(/Chrome\/(\d\d)/.exec(navigator.userAgent)[1],10)>54){if(api.video.subtitles){jQuery(root).addClass("chrome55fix-subtitles")}else{jQuery(root).addClass("chrome55fix")}}});root=jQuery(root);var image_src=root.css("background-image");if(image_src){image_src=image_src.replace(/url\((['"])?(.*?)\1\)/gi,"$2").split(",");if(!image_src||!image_src[0].match(/^(https?:)?\/\//))return;var image=new Image;image.src=image_src[0];var image_ratio=image.height/image.width;var player_ratio=root.height()/root.width();var ratio_diff=Math.abs(player_ratio-image_ratio);if(ratio_diff<.05){root.css("background-size","cover")}}});(function($){$(window).on("resize",function(){var iframe=$("iframe[id][src][height][width]");iframe.each(function(){if($(this).attr("id").match(/(fv_vimeo_)|(fv_ytplayer_)/)&&$(this).width()<=$(this).attr("width"))$(this).height($(this).width()*$(this).attr("height")/$(this).attr("width"))});var wistia=jQuery(".wistia_embed");wistia.each(function(){$(this).height($(this).width()*$(this).data("ratio"))})}).trigger("resize")})(jQuery);jQuery(document).on("tabsactivate",".fv_flowplayer_tabs_content",function(event,ui){var oldPlayer=jQuery(".flowplayer.is-playing").data("flowplayer");if(typeof oldPlayer!="undefined"){oldPlayer.pause()}var objPlayer=jQuery(".flowplayer",ui.newPanel);var api=objPlayer.data("flowplayer");api.load()});flowplayer(function(api,root){root=jQuery(root);var bean=flowplayer.bean;if(root.hasClass("is-audio")){bean.off(root[0],"mouseenter");bean.off(root[0],"mouseleave");root.removeClass("is-mouseout");root.addClass("fixed-controls").addClass("is-mouseover");api.on("error",function(e,api,error){jQuery(".fp-message",root).html(jQuery(".fp-message",root).html().replace(/video/,"audio"))});root.on("click",function(e){if(!api.ready){e.preventDefault();e.stopPropagation();api.load()}})}});flowplayer(function(api,root){if(!api.conf.fv_chromecast)return;if(!window["__onGCastApiAvailable"]){jQuery.getScript({url:"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js",cache:true});window["__onGCastApiAvailable"]=function(loaded){if(!loaded)return;initialize()}}var conf=api.conf.chromecast||{},session,timer,trigger,bean=flowplayer.bean,common=flowplayer.common,waiting_for_seek=false;function initialize(){var applicationId,sessionRequest,apiConfig;applicationId=conf.applicationId||chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID;sessionRequest=new chrome.cast.SessionRequest(applicationId);apiConfig=new chrome.cast.ApiConfig(sessionRequest,sessionListener,receiverListener);chrome.cast.initialize(apiConfig,onInitSuccess,onError)}function sessionListener(){}function receiverListener(ev){console.log("FV Player: Chromecast listener",ev);if(ev!==chrome.cast.ReceiverAvailability.AVAILABLE)return;flowplayer.conf.chromecast_available=true}function onInitSuccess(){}function onError(){console.log("chromecast onError")}function createUIElements(){var btnContainer=common.find(".fp-header",root)[0];if(!btnContainer)return;common.find(".fp-chromecast",btnContainer).forEach(common.removeNode);common.find(".fp-chromecast-engine",root).forEach(common.removeNode);trigger=common.createElement("a",{class:"fp-chromecast fp-icon",title:"Play on Cast device"});btnContainer.appendChild(trigger);var chromeCastEngine=common.createElement("div",{class:"fp-chromecast-engine"}),chromeCastStatus=common.createElement("p",{class:"fp-chromecast-engine-status"}),chromeCastIcon=common.createElement("p",{class:"fp-chromecast-engine-icon"});chromeCastEngine.appendChild(chromeCastIcon);chromeCastEngine.appendChild(chromeCastStatus);var engine=common.find(".fp-engine",root)[0];if(!engine)common.prepend(common.find(".fp-player",root)[0]||root,chromeCastEngine);else engine.parentNode.insertBefore(chromeCastEngine,engine)}function destroy(){clearInterval(timer);timer=null;api.release();common.toggleClass(root,"is-chromecast",false);common.toggleClass(trigger,"fp-active",false)}function get_media(){var media=false;var sources=api.video.sources_fvqs||api.video.sources;for(var i in sources){var type=sources[i].type;if(type=="video/mp4"||type=="video/fv-mp4"||type=="application/dash+xml"){media=sources[i];break}}if(!media){for(var i in sources){if(sources[i].type=="application/x-mpegurl"){media=sources[i];break}}}if(api.video.fvhkey&&!api.conf.hls_cast)return false;if(media){var top_quality=false,mp4_qualities=["fullhd","hd","md","sd"];for(var quality in mp4_qualities){var re=new RegExp("-"+mp4_qualities[quality]);for(var i in api.video.sources_fvqs){var source=api.video.sources_fvqs[i];if(source.src.match(re)&&source.type=="video/mp4"){top_quality=source;break}}if(top_quality){media=top_quality;break}}}return media}function load_media(){var media=get_media();if(!media){return false}var cast_subtitles=[];if(api.video.subtitles){api.video.subtitles.forEach(function(v,k){if(v.src.match(/\.srt/)){console.log("FV Player: Chromecast doesn't support SRT subtitles")}var subtitles=new chrome.cast.media.Track(k,chrome.cast.media.TrackType.TEXT);subtitles.trackContentId=v.src;subtitles.trackContentType="text/vtt";subtitles.subtype=chrome.cast.media.TextTrackType.SUBTITLES;subtitles.name=v.label;subtitles.language=v.srclang+"-"+k,subtitles.customData=null;cast_subtitles.push(subtitles)})}var mediaInfo=new chrome.cast.media.MediaInfo(media.src,media.type);mediaInfo.tracks=cast_subtitles;var request=new chrome.cast.media.LoadRequest(mediaInfo);if(!api.live){request.currentTime=api.video.time}clearInterval(timer);timer=false;session.loadMedia(request,onMediaDiscovered,function onMediaError(e){console.log("onMediaError",e)})}function onMediaDiscovered(chromecast){switch_tracks(chromecast);chromecast.addUpdateListener(function(alive){if(!session)return;timer=timer||setInterval(function(){api.trigger("progress",[api,chromecast.getEstimatedTime()]);chromecast.activeTrackIds.forEach(function(track_id){jQuery.each(chromecast.media.tracks,function(k,v){if(v.trackId==track_id&&v.type=="AUDIO"){var found=hilight_audio_track("data-audio",v.language);if(!found){hilight_audio_track("data-lang",v.language)}return false}})})},500);if(alive){common.toggleClass(root,"is-chromecast",true);common.toggleClass(trigger,"fp-active",true);api.hijack({pause:function(){console.log("hijacked pause!");chromecast.pause()},resume:function(){if(api.finished){clearInterval(timer);timer=null;api.release();load_media();return}chromecast.play()},seek:function(time){var req=new chrome.cast.media.SeekRequest;req.currentTime=time;chromecast.seek(req)}})}var playerState=chromecast.playerState;if(api.paused&&playerState===chrome.cast.media.PlayerState.PLAYING)api.trigger("resume",[api]);if(api.playing&&playerState===chrome.cast.media.PlayerState.PAUSED)api.trigger("pause",[api]);if(api.seeking&&playerState===chrome.cast.media.PlayerState.BUFFERING){waiting_for_seek=true}if(api.seeking&&playerState===chrome.cast.media.PlayerState.PLAYING&&waiting_for_seek){waiting_for_seek=false;api.trigger("seek",[api])}if(playerState==chrome.cast.media.PlayerState.IDLE&&chromecast.idleReason==chrome.cast.media.IdleReason.FINISHED){api.trigger("finish",[api])}common.toggleClass(root,"is-loading",playerState===chrome.cast.media.PlayerState.BUFFERING)})}api.bind("ready",function(e,api,video){if(session){if(get_media()){api.one("progress",function(e,api){api.release();api.pause();api.mute(false,true);load_media()});api.mute(true,true)}else{session.stop();session=null;destroy();jQuery(trigger).hide()}return}if(!flowplayer.conf.chromecast_available)return;if(get_media()){createUIElements();jQuery(trigger).show()}else{FV_Flowplayer_Pro.log("FV Player: Can't find media source suitable for Chromecast!");jQuery(trigger).hide()}});bean.on(root,"click",".fp-chromecast",function(ev){ev.preventDefault();if(session){api.trigger("pause",[api]);if(session.media[0].media){var seek=session.media[0].getEstimatedTime();setTimeout(function(){api.seek(seek)},0)}session.stop();session=null;destroy();return}if(api.playing)api.pause();chrome.cast.requestSession(function(s){jQuery(root).addClass("is-loading");session=s;var receiverName=session.receiver.friendlyName;common.html(common.find(".fp-chromecast-engine-status",root)[0],"Playing on device "+receiverName);load_media()},function(err){console.error("requestSession error",err)})});bean.on(root,"click",".fv-fp-hls-menu [data-audio], .fp-subtitle-menu [data-subtitle-index]",function(){if(session&&session.media[0].media){switch_tracks(session.media[0]);return false}});jQuery(window).on("unload",function(){if(session){session.stop()}});function hilight_audio_track(attr,chromecast_language){var audio_tracks_menu=jQuery(root).find(".fv-fp-hls-menu a"),found=false;audio_tracks_menu.each(function(k,el){if(jQuery(el).attr(attr)===chromecast_language){jQuery(el).addClass("fp-selected");found=true}else{jQuery(el).removeClass("fp-selected")}});return found}function switch_tracks(chromecast){console.log(chromecast.media.tracks);var audio=jQuery(root).find(".fv-fp-hls-menu [data-audio].fp-selected").data("audio"),audio_lang=jQuery(root).find(".fv-fp-hls-menu [data-audio].fp-selected").data("lang"),subtitle_index=jQuery(root).find(".fp-subtitle-menu [data-subtitle-index].fp-selected").data("subtitle-index"),subtitles=subtitle_index>-1?api.video.subtitles[subtitle_index].srclang:false;var audio_found=false,subtitles_found=false,tracks_selected=[];jQuery.each(chromecast.media.tracks,function(k,v){if(v.language==audio&&v.type=="AUDIO"){audio_found=v}if(v.language==subtitles+"-"+subtitle_index&&v.type=="TEXT"){subtitles_found=v}});if(!audio_found){jQuery.each(chromecast.media.tracks,function(k,v){if(v.language==audio_lang&&v.type=="AUDIO"){audio_found=v;return false}})}var debug_log="";if(audio_found){tracks_selected.push(audio_found.trackId);debug_log+=audio_found.language+" audio"}if(subtitles_found){tracks_selected.push(subtitles_found.trackId);if(debug_log)debug_log+=" ";debug_log+=subtitles_found.language+" subtitles"}if(tracks_selected){var request=new chrome.cast.media.EditTracksInfoRequest(tracks_selected);chromecast.editTracksInfo(request,function(){console.log("FV Player: Chromecast "+debug_log+" loaded")},function(){console.log("FV Player: Chromecast "+debug_log+" failed")})}}});jQuery(document).on("mfpClose",function(){if(typeof jQuery(".flowplayer").data("flowplayer")!="undefined")jQuery(".flowplayer").data("flowplayer").unload()});jQuery(document).on("click",".vc_tta-tab a",function(){var api=jQuery(".flowplayer.is-playing").data("flowplayer");if(api)api.pause()});flowplayer(function(api,root){root=jQuery(root);api.bind("ready",function(){setTimeout(function(){var video=jQuery("video",root);if(video.length>0){video.prop("autoplay",false)}},100);root.find("video.fp-engine").addClass("intrinsic-ignore")})});jQuery(".flowplayer").on("ready",function(e,api){if(/BB10/.test(navigator.userAgent)){api.fullscreen()}});var fv_flowplayer_safety_resize_arr=Array();function fv_flowplayer_safety_resize(){var fv_flowplayer_safety_resize_init=false;jQuery(".flowplayer").each(function(){if(!jQuery(this).is(":visible")||jQuery(this).hasClass("lightboxed")||jQuery(this).hasClass("lightbox-starter")||jQuery(this).hasClass("is-audio"))return;if(jQuery(this).width()<30||jQuery(this).height()<20){fv_flowplayer_safety_resize_init=true;var el=jQuery(this);while(jQuery(el).width()<30||jQuery(el).width()==jQuery(this).width()){if(jQuery(el).parent().length==0)break;el=jQuery(el).parent()}jQuery(this).width(jQuery(el).width());jQuery(this).height(parseInt(jQuery(this).width()*jQuery(this).attr("data-ratio")));fv_flowplayer_safety_resize_arr[jQuery(this).attr("id")]=el}});if(fv_flowplayer_safety_resize_init){jQuery(window).resize(function(){jQuery(".flowplayer").each(function(){if(jQuery(this).hasClass("lightboxed")||jQuery(this).hasClass("lightbox-starter"))return;if(fv_flowplayer_safety_resize_arr[jQuery(this).attr("id")]){jQuery(this).width(fv_flowplayer_safety_resize_arr[jQuery(this).attr("id")].width());jQuery(this).height(parseInt(jQuery(this).width()*jQuery(this).attr("data-ratio")))}})})}}if(typeof flowplayer.conf.safety_resize!="undefined"&&flowplayer.conf.safety_resize){jQuery(document).ready(function(){setTimeout(function(){fv_flowplayer_safety_resize()},10)})}var isIE11=!!navigator.userAgent.match(/Trident.*rv[ :]*11\./);if(isIE11){jQuery(document).ready(function(){jQuery(".fp-waiting").hide()});flowplayer(function(api,root){api.bind("load",function(e){jQuery(e.currentTarget).find(".fp-waiting").show()}).bind("beforeseek",function(e){jQuery(e.currentTarget).find(".fp-waiting").show()}).bind("progress",function(e){jQuery(e.currentTarget).find(".fp-waiting").hide()}).bind("seek",function(e){jQuery(e.currentTarget).find(".fp-waiting").hide()}).bind("fullscreen",function(e){jQuery("#wpadminbar").hide()}).bind("fullscreen-exit",function(e){jQuery("#wpadminbar").show()})})}if(flowplayer.support.browser&&flowplayer.support.browser.msie&&parseInt(flowplayer.support.browser.version,10)<9){jQuery(".flowplayer").each(function(){jQuery(this).css("width",jQuery(this).css("max-width"));jQuery(this).css("height",jQuery(this).css("max-height"))})}if(location.href.match(/elementor-preview=/)){console.log("FV Player: Elementor editor is active");setInterval(fv_player_load,1e3)}else if(location.href.match(/brizy-edit-iframe/)){console.log("FV Player: Brizy editor is active");setInterval(fv_player_load,1e3)}if(window.DELEGATE_NAMES){flowplayer(function(api,root){fv_player_notice(root,fv_flowplayer_translations.chrome_extension_disable_html5_autoplay)})}flowplayer(function(api,root){flowplayer.bean.off(root,"contextmenu")});if(location.href.match(/elementor-preview=/)){console.log("FV Player: Elementor editor is active");setInterval(fv_player_load,1e3)}flowplayer(function(player,root){root=jQuery(root);if(typeof root.data("fv-embed")=="undefined"||!root.data("fv-embed")||root.data("fv-embed")=="false")return;player.embedCode=function(){var video=player.video;var width=root.width();var height=root.height();height+=2;if(root.hasClass("has-chapters")||root.hasClass("has-transcript")){height+=300}if(jQuery(".fp-playlist-external[rel="+root.attr("id")+"]").length>0){height+=150+20}var link=root.data("fv-embed")+"#"+fv_player_get_video_link_hash(player);return'<iframe src="'+link+'" allowfullscreen width="'+width+'" height="'+height+'" frameborder="0" style="max-width:100%"></iframe>'}});jQuery(document).on("click",".flowplayer .embed-code-toggle",function(){var button=jQuery(this);var player=button.parents(".flowplayer");var api=player.data("flowplayer");if(typeof api.embedCode=="function"){player.find(".embed-code textarea").val(api.embedCode())}fv_player_clipboard(player.find(".embed-code textarea").val(),function(){fv_player_notice(player,fv_flowplayer_translations.embed_copied,2e3)},function(){button.parents(".fvp-share-bar").find(".embed-code").toggle();button.parents(".fvp-share-bar").toggleClass("visible")});return false});flowplayer(function(player,root){if(jQuery(root).data("fullscreen")==false){return}player.one("ready",function(e,api,video){if(jQuery(root).find(".fp-fullscreen").length==0){jQuery(root).find(".fp-header").append('<a class="fp-fullscreen fp-icon"></a>')}});var FS_ENTER="fullscreen",FS_EXIT="fullscreen-exit",FS_SUPPORT=flowplayer.support.fullscreen,win=window,scrollX,scrollY,bean=flowplayer.bean;player.fullscreen=function(flag){if(player.disabled)return;var video=common.find("video.fp-engine",root)[0];if(flowplayer.conf.native_fullscreen&&video&&flowplayer.support.iOS){player.trigger(FS_ENTER,[player]);bean.on(document,"webkitfullscreenchange.nativefullscreen",function(){if(document.webkitFullscreenElement!==video)return;bean.off(document,".nativefullscreen");bean.on(document,"webkitfullscreenchange.nativefullscreen",function(){if(document.webkitFullscreenElement)return;bean.off(document,".nativefullscreen");player.trigger(FS_EXIT,[player])})});video.webkitEnterFullScreen();bean.one(video,"webkitendfullscreen",function(){bean.off(document,"fullscreenchange.nativefullscreen");player.trigger(FS_EXIT,[player]);common.prop(video,"controls",true);common.prop(video,"controls",false)});return}var wrapper=jQuery(root).find(".fp-player")[0];if(flag===undefined)flag=!player.isFullscreen;if(flag){scrollY=win.scrollY;scrollX=win.scrollX}if(FS_SUPPORT){if(flag){["requestFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].forEach(function(fName){if(typeof wrapper[fName]==="function"){wrapper[fName]({navigationUI:"hide"});if(fName==="webkitRequestFullScreen"&&!document.webkitFullscreenElement){wrapper[fName]()}}})}else{["exitFullscreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].forEach(function(fName){if(typeof document[fName]==="function"){document[fName]()}})}}else{player.trigger(flag?FS_ENTER:FS_EXIT,[player])}return player};var lastClick,common=flowplayer.common;player.on("mousedown.fs",function(){if(+new Date-lastClick<150&&player.ready)player.fullscreen();lastClick=+new Date});player.on(FS_ENTER,function(){common.addClass(root,"is-fullscreen");common.toggleClass(root,"fp-minimal-fullscreen",common.hasClass(root,"fp-minimal"));common.removeClass(root,"fp-minimal");if(!FS_SUPPORT)common.css(root,"position","fixed");player.isFullscreen=true}).on(FS_EXIT,function(){var oldOpacity;common.toggleClass(root,"fp-minimal",common.hasClass(root,"fp-minimal-fullscreen"));common.removeClass(root,"fp-minimal-fullscreen");if(!FS_SUPPORT&&player.engine==="html5"){oldOpacity=root.css("opacity")||"";common.css(root,"opacity",0)}if(!FS_SUPPORT)common.css(root,"position","");common.removeClass(root,"is-fullscreen");if(!FS_SUPPORT&&player.engine==="html5")setTimeout(function(){root.css("opacity",oldOpacity)});player.isFullscreen=false;if(player.engine.engineName!="fvyoutube"){win.scrollTo(scrollX,scrollY)}}).on("unload",function(){if(player.isFullscreen)player.fullscreen()});player.on("shutdown",function(){FULL_PLAYER=null;common.removeNode(wrapper)})});flowplayer(function(api,root){root=jQuery(root);if(flowplayer.conf.wpadmin||jQuery(root).hasClass("is-audio"))return;var playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]"),playlist_with_fullscreen=playlist.hasClass("fp-playlist-season")||playlist.hasClass("fp-playlist-polaroid");fsforce=root.data("fsforce")==true;if(root.data("fullscreen")==false){return}if(flowplayer.conf.mobile_force_fullscreen&&flowplayer.support.fvmobile||!flowplayer.support.fullscreen&&fsforce||playlist_with_fullscreen){if(!flowplayer.support.fullscreen){api.bind("ready",function(){if(api.video.vr)return;api.fullscreen(true)})}root.on("click",function(){if(!api.ready||api.paused)api.fullscreen(true)});jQuery("[rel="+root.attr("id")+"] a").on("click",function(e){if(!api.isFullscreen){api.fullscreen();api.resume()}});api.on("resume",function(){if(api.video.vr)return;if(!api.isFullscreen)api.fullscreen()});api.on("finish",function(){if(api.conf.playlist.length==0||api.conf.playlist.length-1==api.video.index)api.fullscreen(false)}).on("fullscreen",function(a,api){root.addClass("forced-fullscreen")}).on("fullscreen-exit",function(a,api){api.pause();root.removeClass("forced-fullscreen")})}else if(fsforce){var position,unload=root.find(".fp-unload"),is_closing=false;api.isFakeFullscreen=false;unload.show();root.on("click",function(e){if(!api.ready&&e.target!=unload[0])api.fakeFullscreen(true)});unload.on("click",function(e){if(api.ready){api.fullscreen(false)}else if(api.loading){is_closing=true;api.one("resume",function(e){is_closing=false;api.pause()})}api.fakeFullscreen(false);return false});jQuery("[rel="+root.attr("id")+"] a").on("click",function(e){if(!api.isFakeFullscreen){api.fakeFullscreen();api.resume()}});api.on("resume",function(){if(!is_closing&&!api.isFakeFullscreen)api.fakeFullscreen()}).on("finish",function(){if(api.conf.playlist.length==0||api.conf.playlist.length-1==api.video.index)api.fakeFullscreen(false)}).on("fullscreen",function(a,api){root.removeClass("fake-fullscreen")}).on("fullscreen-exit",function(a,api){if(api.isFakeFullscreen)api.fakeFullscreen(true,true)}).on("unload",function(a,api){});api.fakeFullscreen=function(flag,force){if(!force&&(api.isFakeFullscreen==flag||api.disabled))return;if(position===undefined)position=root.css("position");if(flag===undefined)flag=!api.isFakeFullscreen;api.isFakeFullscreen=flag;api.trigger(flag?"fakefullscreen":"fakefullscreen-exit",[api]);root.toggleClass("is-fullscreen fake-fullscreen forced-fullscreen",flag);if(flag){root.css("position","fixed")}else{root.css("position",position)}}}if(flowplayer.support.android&&flowplayer.conf.mobile_landscape_fullscreen&&window.screen&&window.screen.orientation){api.on("fullscreen",function(a,api){if(typeof api.video.width!="undefined"&&typeof api.video.height!="undefined"&&(api.video.width!=0&&api.video.height!=0&&api.video.width<api.video.height)){screen.orientation.lock("portrait-primary")}else{screen.orientation.lock("landscape-primary")}})}});flowplayer(function(api,root){root=jQuery(root);var hlsjs,player,audioUXGroup,audioGroups,hls_audio_button,hls_audio_menu,mse=window.MediaSource||window.WebKitMediaSource;flowplayer.engine("hlsjs-lite").plugin(function(params){hlsjs=params.hls});api.bind("ready",function(e,api){removeAudioMenu();if(hlsjs&&api.video.type=="application/x-mpegurl"){parseAudioTracksHlsJs(hlsjs);createAudioMenu()}});api.one("progress",function(){if(api.engine.engineName=="html5"&&api.video.type=="application/x-mpegurl"){parseAudioTracksSafari();createAudioMenu()}});function getVideoTagAudioTracks(){var video=root.find("video");if(video.length&&video[0].audioTracks){return video[0].audioTracks}return[]}function hilightAudioTrack(audioTrack){if(!audioTrack.name)audioTrack.name=audioTrack.label;root.find(".fv-fp-hls-menu a").each(function(k,el){jQuery(el).toggleClass("fp-selected",jQuery(el).attr("data-audio")===audioTrack.name)})}function createAudioMenu(){if(!audioUXGroup||audioUXGroup.length<2){return}hls_audio_button=jQuery('<strong class="fv-fp-hls">AUD</strong>');hls_audio_menu=jQuery('<div class="fp-menu fv-fp-hls-menu"></div>').insertAfter(root.find(".fp-controls"));hls_audio_menu.append("<strong>Audio</strong>");audioUXGroup.forEach(function(audioTrack){hls_audio_menu.append('<a data-audio="'+audioTrack.name+'" data-lang="'+audioTrack.lang+'">'+audioTrack.name+"</a>")});hls_audio_button.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();if(hls_audio_menu.hasClass("fp-active")){api.hideMenu(hls_audio_menu[0])}else{root.click();api.showMenu(hls_audio_menu[0])}});jQuery("a",hls_audio_menu).on("click",function(e){var adata=e.target.getAttribute("data-audio");if(hlsjs){var gid=hlsjs.audioTracks[hlsjs.audioTrack].groupId;var atrack=hlsjs.audioTracks.filter(function(at){return at.groupId===gid&&(at.name===adata||at.lang===adata)})[0];hlsjs.audioTrack=atrack.id;hilightAudioTrack(atrack)}else{var tracks=getVideoTagAudioTracks();for(var i in tracks){if(!tracks.hasOwnProperty(i))continue;if(tracks[i].label==adata){tracks[i].enabled=true;hilightAudioTrack(tracks[i])}}}});if(hlsjs){hilightAudioTrack(hlsjs.audioTracks[hlsjs.audioTrack])}else{var tracks=getVideoTagAudioTracks();for(var i in tracks){if(!tracks.hasOwnProperty(i))continue;if(tracks[i].enabled){hilightAudioTrack(tracks[i])}}}}function removeAudioMenu(){jQuery(hls_audio_menu).remove();jQuery(hls_audio_button).remove()}function parseAudioTracksHlsJs(data){audioGroups=[];audioUXGroup=[];data.levels.forEach(function(level){var agroup=level.attrs.AUDIO;if(agroup&&audioGroups.indexOf(agroup)<0){audioGroups.push(agroup)}if(audioGroups.length){audioUXGroup=data.audioTracks.filter(function(audioTrack){return audioTrack.groupId===audioGroups[0]})}})}function parseAudioTracksSafari(){audioGroups=[];audioUXGroup=[];var tracks=getVideoTagAudioTracks();for(var i in tracks){if(!tracks.hasOwnProperty(i))continue;audioUXGroup.push({id:tracks[i].id,name:tracks[i].label})}}});flowplayer(function(api,root){var store_engine_pos=-1;var store_engine=false;api.on("error",function(e,api,err){if(err.code!=4||api.engine.engineName!="hlsjs")return;console.log("FV Player: HLSJS failed to play the video, switching to Flash HLS");api.error=api.loading=false;jQuery(root).removeClass("is-error");jQuery(flowplayer.engines).each(function(k,v){if(flowplayer.engines[k].engineName=="hlsjs"){store_engine_pos=k;store_engine=flowplayer.engines[k];delete flowplayer.engines[k]}});var index=typeof api.video.index!="undefined"?api.video.index:0;var video=index>0?api.conf.playlist[index].sources:api.conf.clip.sources;video.index=index;api.load({sources:video});api.bind("unload error",function(){flowplayer.engines[store_engine_pos]=store_engine})})});flowplayer(function(api,root){var initialDelay=30,continueDelay=10,useDelay=initialDelay,retryLabel=fv_flowplayer_translations.live_stream_retry,timer;api.clearLiveStreamCountdown=function(){if(timer){clearInterval(timer);api.error=api.loading=false;jQuery(root).removeClass("is-error");jQuery(root).find(".fp-message.fp-shown").remove();api.unload()}};api.conf.flashls={manifestloadmaxretry:2};api.on("ready",function(){useDelay=initialDelay;retryLabel=fv_flowplayer_translations.live_stream_retry}).on("progress",function(){useDelay=continueDelay;retryLabel=fv_flowplayer_translations.live_stream_continue;clearInterval(timer)});api.on("error",function(e,api,err){setTimeout(function(){if(!api.conf.clip.live&&!api.conf.live&&!(err.video&&err.video.src.match(/\/\/vimeo.com\/event\//)))return;var delay=useDelay;if(api.conf.clip.streaming_time){delay=api.conf.clip.streaming_time-Math.floor(Date.now()/1e3)}else if(api.conf.clip.live_starts_in){delay=api.conf.clip.live_starts_in}var startLabel=fv_flowplayer_translations.live_stream_starting.replace(/%d/,secondsToDhms(delay));retryLabel=retryLabel.replace(/%d/,secondsToDhms(delay));var message=api.conf.clip.live_starts_in?startLabel:retryLabel;clearInterval(timer);if(err.code===1||err.code===2||err.code===4){root.className+=" is-offline";if(flowplayer.support.flashVideo){api.one("flashdisabled",function(){root.querySelector(".fp-flash-disabled").style.display="none"})}var messageElement=root.querySelector(".fp-ui .fp-message");messageElement.innerHTML=message;var reload_delay=delay>300?300:delay;timer=setInterval(function(){reload_delay-=1;delay-=1;if(reload_delay>0&&messageElement){messageElement.querySelector("span").innerHTML=secondsToDhms(delay)}else{clearInterval(timer);if(!api.error){return}api.error=api.loading=false;messageElement=root.querySelector(".fp-ui .fp-message");if(messageElement){root.querySelector(".fp-ui").removeChild(messageElement)}root.className=root.className.replace(/\bis-(error|offline)\b/g,"");api.load()}},1e3)}},1)});function secondsToDhms(seconds){seconds=Number(seconds);var d=Math.floor(seconds/(3600*24));var h=Math.floor(seconds%(3600*24)/3600);var m=Math.floor(seconds%3600/60);var s=Math.floor(seconds%60);var t=fv_flowplayer_translations;var output=d>0?d==1?t.duration_1_day.replace(/%s/,d):t.duration_n_days.replace(/%s/,d):"";if(output&&h>0)output+=", ";output+=h>0?h==1?t.duration_1_hour.replace(/%s/,h):t.duration_n_hours.replace(/%s/,h):"";if(output&&m>0)output+=", ";output+=m>0?m==1?t.duration_1_minute.replace(/%s/,m):t.duration_n_minutes.replace(/%s/,m):"";if(output&&s>0)output+=t.and;output+=s>0?s==1?t.duration_1_second.replace(/%s/,s):t.duration_n_seconds.replace(/%s/,s):"";return output}});flowplayer(function(api,root){root=jQuery(root);var hlsjs;flowplayer.engine("hlsjs-lite").plugin(function(params){hlsjs=params.hls});api.on("ready",function(e,api){if(hlsjs&&api.conf.playlist.length&&api.engine.engineName!="hlsjs-lite"){hlsjs.destroy()}})});flowplayer(function(api,root){if(!flowplayer.support.browser.safari&&!flowplayer.support.iOS)return;root=jQuery(root);var video_tag=false,did_start_playing=false,are_waiting_already=0;api.on("ready",function(e,api,video){are_waiting_already=0;did_start_playing=false;if(api.engine.engineName=="html5"&&video.src.match(/\?/)){video_tag=root.find("video");if(!video_tag.data("fv-ios-recovery")){video_tag.on("waiting",wait_for_stalled);video_tag.data("fv-ios-recovery",true)}api.one("progress",function(){did_start_playing=true})}});api.bind("beforeseek",wait_for_stalled);function debug(e){console.log("FV PLayer: iOS video element: "+e.type)}function wait_for_stalled(){if(!did_start_playing){return}if(video_tag&&api.engine.engineName=="html5"){are_waiting_already++;if(are_waiting_already>1){if(are_waiting_already>3){console.log("FV PLayer: iOS video element needs a push, triggering 'stalled'");video_tag.trigger("stalled")}return}console.log("FV PLayer: iOS video element will trigger error after 'stalled' arrives");video_tag.one("stalled",function(){var time=api.video.time;if(api.video.type.match(/video\//)){console.log("FV PLayer: Running check of video file...");var test_video=document.createElement("video");test_video.src=api.video.src;test_video.onloadedmetadata=function(){are_waiting_already=0;console.log("FV Player: Video link works")};test_video.onerror=function(){console.log("FV Player: Video link issue!");if(are_waiting_already>0){api.trigger("error",[api,{code:4,video:api.video}])}};return}setTimeout(function(){console.log(api.video.time,time);if(api.video.time!=time){console.log("FV PLayer: iOS video element continues playing, no need for error");return}if(api.paused){console.log("FV PLayer: iOS video element paused, no need for error");return}api.trigger("error",[api,{code:4,video:api.video}])},5e3)})}}});!function(e){var n=!1;if("function"==typeof define&&define.amd&&(define(e),n=!0),"object"==typeof exports&&(module.exports=e(),n=!0),!n){var o=window.Cookies,t=window.Cookies=e();t.noConflict=function(){return window.Cookies=o,t}}}(function(){function e(){for(var e=0,n={};e<arguments.length;e++){var o=arguments[e];for(var t in o)n[t]=o[t]}return n}function n(o){function t(n,r,i){var c;if("undefined"!=typeof document){if(arguments.length>1){if("number"==typeof(i=e({path:"/"},t.defaults,i)).expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*i.expires),i.expires=a}i.expires=i.expires?i.expires.toUTCString():"";try{c=JSON.stringify(r),/^[\{\[]/.test(c)&&(r=c)}catch(e){}r=o.write?o.write(r,n):encodeURIComponent(r+"").replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=(n=(n=encodeURIComponent(n+"")).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape);var s="";for(var f in i)i[f]&&(s+="; "+f,!0!==i[f]&&(s+="="+i[f]));return document.cookie=n+"="+r+s}n||(c={});for(var p=document.cookie?document.cookie.split("; "):[],d=/(%[0-9A-Z]{2})+/g,u=0;u<p.length;u++){var l=p[u].split("="),C=l.slice(1).join("=");this.json||'"'!==C.charAt(0)||(C=C.slice(1,-1));try{var m=l[0].replace(d,decodeURIComponent);if(C=o.read?o.read(C,m):o(C,m)||C.replace(d,decodeURIComponent),this.json)try{C=JSON.parse(C)}catch(e){}if(n===m){c=C;break}n||(c[m]=C)}catch(e){}}return c}}return t.set=t,t.get=function(e){return t.call(t,e)},t.getJSON=function(){return t.apply({json:!0},[].slice.call(arguments))},t.defaults={},t.remove=function(n,o){t(n,"",e(o,{expires:-1}))},t.withConverter=n,t}return n(function(){})});flowplayer.bean.off(document,"keydown.fp");flowplayer(function(api,root){var bean=flowplayer.bean;if(!api.conf.keyboard)return;bean.on(root,"mouseenter mouseleave",function(e){fv_player_focused=!api.disabled&&e.type=="mouseover"?api:0;if(fv_player_focused)fv_player_focusedRoot=root});api.bind("ready",function(e,api,video){if(video.subtitles&&video.subtitles.length>0){var help=jQuery(root).find(".fp-help").html();help+='<div class="fp-help-section fp-help-subtitles"><p><em>c</em>cycle through subtitles</p></div>';jQuery(root).find(".fp-help").html(help)}else{jQuery(root).find(".fp-help-subtitles").remove()}})});flowplayer.bean.on(document,"keydown.fp",function(e){if(typeof fv_player_focused=="undefined")return;var api=fv_player_focused,focusedRoot=api?fv_player_focusedRoot:false,common=flowplayer.common;var el=api&&!api.disabled?api:0,metaKeyPressed=e.ctrlKey||e.metaKey||e.altKey,key=e.which,conf=el&&el.conf;if(common.hasClass(focusedRoot,"no-controlbar")||common.hasClass(focusedRoot,"is-cva"))return;if(!el||!conf.keyboard||el.disabled)return;if([63,187,191].indexOf(key)!=-1){common.toggleClass(focusedRoot,"is-help");return false}if(key==27&&common.hasClass(focusedRoot,"is-help")){common.toggleClass(focusedRoot,"is-help");return false}if(!metaKeyPressed&&el.ready){e.preventDefault();if(e.shiftKey){if(key==39)el.speed(true);else if(key==37)el.speed(false);else if(key==78)el.next();else if(key==80)el.prev();return}if(key<58&&key>47)return el.seekTo(key-48);switch(key){case 38:case 75:el.volume(el.volumeLevel+.15);break;case 40:case 74:el.volume(el.volumeLevel-.15);break;case 39:case 76:el.seeking=true;el.seek(api.video.time+5);break;case 37:case 72:el.seeking=true;el.seek(api.video.time-5);break;case 190:el.seekTo();break;case 32:el.toggle();break;case 70:if(conf.fullscreen)el.fullscreen();break;case 77:el.mute();break;case 81:el.unload();break;case 67:if(!api.video.subtitles||api.video.subtitles.length==0)break;var current_subtitles=jQuery(focusedRoot).find(".fp-dropdown li.active[data-subtitle-index]").data("subtitle-index");if(typeof current_subtitles=="undefined")current_subtitles=-1;current_subtitles++;if(current_subtitles>api.video.subtitles.length-1){current_subtitles=-1}api.trigger("fv-subtitles-switched");if(current_subtitles>-1){el.loadSubtitles(current_subtitles);fv_player_notice(focusedRoot,fv_flowplayer_translations.subtitles_switched+" "+api.video.subtitles[current_subtitles].label,"fv-subtitles-switched")}else{el.disableSubtitles();fv_player_notice(focusedRoot,fv_flowplayer_translations.subtitles_disabled,"fv-subtitles-switched")}break}}});flowplayer(function(api,root){api.bind("load",function(e,api,data){var player=jQuery(e.currentTarget);if(player.data("live")){var live_check=setTimeout(function(){player.find(".fp-ui").append('<div class="fp-message">'+fv_flowplayer_translations.live_stream_failed+"</div>");player.addClass("is-error")},1e4);jQuery(e.currentTarget).data("live_check",live_check)}}).bind("ready",function(e,api,data){clearInterval(jQuery(e.currentTarget).data("live_check"))}).bind("error",function(e,api,data){var player=jQuery(e.currentTarget);if(player.data("live")){player.find(".fp-message").html(fv_flowplayer_translations.live_stream_failed_2)}})});(function($){flowplayer(function(api,root){if(jQuery(root).hasClass("is-cva"))return;$(document).on("submit","#"+jQuery(root).attr("id")+" .mailchimp-form",function(e){e.preventDefault();$(".mailchimp-response",root).remove();$("input[type=submit]",root).attr("disabled","disabled").addClass("fv-form-loading");var data={action:"fv_wp_flowplayer_email_signup"};$("[name]",this).each(function(){data[this.name]=$(this).val()});$.post(fv_player.ajaxurl,data,function(response){response=JSON.parse(response);$('<div class="mailchimp-response"></div>').insertAfter(".mailchimp-form",root);if(response.text.match(/already subscribed/)){response.status="ERROR"}if(response.status==="OK"){$(".mailchimp-form input[type=text],.mailchimp-form input[type=email]",root).val("");$(".mailchimp-response",root).removeClass("is-fv-error").html(response.text);setTimeout(function(){$(".wpfp_custom_popup",root).fadeOut()},2e3)}else{$(".mailchimp-response",root).addClass("is-fv-error").html(response.text)}$("input[type=submit]",root).removeAttr("disabled").removeClass("fv-form-loading")})})})})(jQuery);function fv_flowplayer_mobile_switch(id){var regex=new RegExp("[\\?&]fv_flowplayer_mobile=([^&#]*)");var results=regex.exec(location.search);if((results!=null&&results[1]=="yes"||(jQuery(window).width()<=480||jQuery(window).height()<=480))&&(results==null||results[1]!="no")){var fv_fp_mobile=false;jQuery("#wpfp_"+id+" video source").each(function(){if(jQuery(this).attr("id")!="wpfp_"+id+"_mobile"){fv_fp_mobile=true;jQuery(this).remove()}});if(fv_fp_mobile){jQuery("#wpfp_"+id).after('<p class="fv-flowplayer-mobile-switch">'+fv_flowplayer_translations.mobile_browser_detected_1+' <a href="'+document.URL+'?fv_flowplayer_mobile=no">'+fv_flowplayer_translations.mobile_browser_detected_2+"</a>.</p>")}}}if(typeof fv_flowplayer_mobile_switch_array!="undefined"){for(var i in fv_flowplayer_mobile_switch_array){if(!fv_flowplayer_mobile_switch_array.hasOwnProperty(i))continue;fv_flowplayer_mobile_switch(i)}}flowplayer(function(api,root){if(!flowplayer.support.touch)return;jQuery.fn.fv_single_double_click=function(single_click_callback,double_click_callback,timeout){return this.each(function(){var clicks=0,self=this;jQuery(this).on("click",function(event){clicks++;if(clicks==1){setTimeout(function(){if(clicks==1){single_click_callback.call(self,event)}else{double_click_callback.call(self,event)}clicks=0},timeout||300)}})})};root=jQuery(root);var left=jQuery('<div class="fv-fp-tap-left"><span>-10s</span></div>'),right=jQuery('<div class="fv-fp-tap-right"><span>+10s</span></div>');left.fv_single_double_click(function(){api.toggle()},function(e){maybe_seek(e,left,api.ready?api.video.time-10:false)});right.fv_single_double_click(function(){api.toggle()},function(e){maybe_seek(e,right,api.ready?api.video.time+10:false)});root.find(".fp-ui").append(left).append(right);function maybe_seek(e,el,time){if(api.ready){api.seek(time);animation(el)}else{api.toggle()}e.preventDefault()}function animation(el){el.addClass("is-active");setTimeout(function(){el.removeClass("is-active")},500)}});flowplayer(function(api,root){root=jQuery(root);var instance_id=root.data("flowplayer-instance-id");flowplayer.audible_instance=-1;api.one("load",function(){setTimeout(function(){api.conf.splash=false},0)});api.on("ready",function(){var is_muted=root.data("volume")==0;if(!is_muted){flowplayer.audible_instance=instance_id}jQuery(".flowplayer[data-flowplayer-instance-id]").each(function(){var player=jQuery(this).data("flowplayer");var current_instance_id=jQuery(this).data("flowplayer-instance-id");if(flowplayer.audible_instance==-1||current_instance_id==flowplayer.audible_instance||current_instance_id==instance_id)return;if(player){if(player.ready){if(api.conf.multiple_playback){if(!is_muted){player.mute(true,true)}}else if(player.playing){player.pause()}}else{player.clearLiveStreamCountdown();player.unload()}}})}).on("mute",function(e,api,muted){if(!muted&&flowplayer.audible_instance!=instance_id){flowplayer(flowplayer.audible_instance).mute(true,true);flowplayer.audible_instance=instance_id}}).on("resume",function(){if(!api.conf.multiple_playback){jQuery(".flowplayer[data-flowplayer-instance-id]").each(function(){if(instance_id==jQuery(this).data("flowplayer-instance-id"))return;var player=jQuery(this).data("flowplayer");if(player&&player.playing){player.pause()}})}})});function fv_flowplayer_browser_ff_m4v(hash){if(flowplayer.support.browser&&flowplayer.support.browser.mozilla&&navigator.appVersion.indexOf("Win")!=-1){jQuery("#wpfp_"+hash).attr("data-engine","flash")}}if(typeof fv_flowplayer_browser_ff_m4v_array!="undefined"){for(var i in fv_flowplayer_browser_ff_m4v_array){if(!fv_flowplayer_browser_ff_m4v_array.hasOwnProperty(i))continue;fv_flowplayer_browser_ff_m4v(i)}}function fv_flowplayer_browser_chrome_fail(hash,sAttributes,sVideo,bAutobuffer){jQuery("#wpfp_"+hash).bind("error",function(e,api,error){if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())&&error!=null&&(error.code==3||error.code==4||error.code==5)){api.unload();jQuery("#wpfp_"+hash).attr("id","bad_wpfp_"+hash);jQuery("#bad_wpfp_"+hash).after('<div id="wpfp_'+hash+'" '+sAttributes+' data-engine="flash"></div>');jQuery("#wpfp_"+hash).flowplayer({playlist:[[{mp4:sVideo}]]});if(bAutobuffer){jQuery("#wpfp_"+hash).bind("ready",function(e,api){api.play()})}else{jQuery("#wpfp_"+hash).flowplayer().play(0)}jQuery("#bad_wpfp_"+hash).remove()}})}if(typeof fv_flowplayer_browser_chrome_fail_array!="undefined"){for(var i in fv_flowplayer_browser_chrome_fail_array){if(!fv_flowplayer_browser_chrome_fail_array.hasOwnProperty(i))continue;fv_flowplayer_browser_chrome_fail(i,fv_flowplayer_browser_chrome_fail_array[i]["attrs"],fv_flowplayer_browser_chrome_fail_array[i]["mp4"],fv_flowplayer_browser_chrome_fail_array[i]["auto_buffer"])}}function fv_flowplayer_browser_ie(hash){if(flowplayer.support.browser&&flowplayer.support.browser.msie&&parseInt(flowplayer.support.browser.version,10)>=9||!!navigator.userAgent.match(/Trident.*rv[ :]*11\./)){jQuery("#wpfp_"+hash).attr("data-engine","flash")}}if(typeof fv_flowplayer_browser_ie_array!="undefined"){for(var i in fv_flowplayer_browser_ie_array){if(!fv_flowplayer_browser_ie_array.hasOwnProperty(i))continue;fv_flowplayer_browser_ie(i)}}function fv_flowplayer_browser_chrome_mp4(hash){var match=window.navigator.appVersion.match(/Chrome\/(\d+)\./);if(match!=null){var chrome_ver=parseInt(match[1],10);if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())&&chrome_ver<28&&navigator.appVersion.indexOf("Win")!=-1||/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())&&chrome_ver<27&&navigator.appVersion.indexOf("Linux")!=-1&&navigator.userAgent.toLowerCase().indexOf("android")==-1){jQuery("#wpfp_"+hash).attr("data-engine","flash")}}}if(navigator.platform.indexOf("iPhone")!=-1||navigator.platform.indexOf("iPod")!=-1||navigator.platform.indexOf("iPad")!=-1||navigator.userAgent.toLowerCase().indexOf("android")!=-1){flowplayer(function(api,root){api.bind("error",function(e,api,error){if(error.code==10){jQuery(e.target).find(".fp-message").html(fv_flowplayer_translations.unsupported_format)}})})}jQuery(document).ready(function(){if(navigator.platform.indexOf("iPhone")!=-1||navigator.platform.indexOf("iPod")!=-1||navigator.platform.indexOf("iPad")!=-1){jQuery(window).trigger("load")}jQuery(".flowplayer").on("mouseleave",function(){jQuery(this).find(".fvp-share-bar").removeClass("visible");jQuery(this).find(".embed-code").hide()})});if(!Date.now){Date.now=function(){return(new Date).getTime()}}(function($){var sendPositionsEvery=60,ajaxCall=null,maxCookieSize=2500,localStorageEnabled=null,cookieKeyName="video_positions",tempPositionCookieKeyName="video_positions_tmp",tempSawCookieKeyName="video_saw_tmp",playPositions=[],sawVideo=[],getSerialized=function(data){var serialized=JSON.stringify(data),dataSize=getTextByteSize(serialized);if(dataSize>maxCookieSize){while(dataSize>maxCookieSize){for(var i in data){if(!data.hasOwnProperty(i))continue;delete data[i];serialized=JSON.stringify(data);dataSize=getTextByteSize(serialized);break}}}return serialized},getVideoId=function(video){if(video.id){return video.id}var out=typeof video.sources_original!="undefined"&&typeof video.sources_original[0]!="undefined"?video.sources_original[0].src:video.sources[0].src;if(typeof video.sources_original=="undefined"||typeof video.sources_original[0]=="undefined"){out=removeAWSSignatures(out)}return out},getTextByteSize=function(txt){return encodeURIComponent(txt).length},getCookieKey=function(key){return localStorageEnabled?localStorage.getItem(key):Cookies.get(key)},setCookieKey=function(key,value){return localStorageEnabled?localStorage.setItem(key,value):Cookies.set(key,value)},removeCookieKey=function(key){if(localStorageEnabled){localStorage.removeItem(key)}{Cookies.remove(key)}},removeVideoPosition=function(e,api){if(api.video.sources){var video_id=getVideoId(api.video);playPositions[video_id]=0;sawVideo[video_id]=1}},removeAWSSignatures=function(videoURL){return videoURL.replace(/(X-Amz-Algorithm=[^&]+&?)/gm,"").replace(/(X-Amz-Credential=[^&]+&?)/gm,"").replace(/(X-Amz-Date=[^&]+&?)/gm,"").replace(/(X-Amz-Expires=[^&]+&?)/gm,"").replace(/(X-Amz-SignedHeaders=[^&]+&?)/gm,"").replace(/(X-Amz-Signature=[^&]+&?)/gm,"")},sendVideoPositions=function(async,callback){var beaconSupported="sendBeacon"in navigator;if(async!==true){async=false}if(!callback||typeof callback=="undefined"){callback=function(){}}postData=[];for(var video_name in playPositions){if(!playPositions.hasOwnProperty(video_name))continue;postData.push({name:video_name,position:playPositions[video_name],saw:typeof sawVideo[video_name]!="undefined"?sawVideo[video_name]:false})}if(!postData.length){removeCookieKey(tempPositionCookieKeyName);removeCookieKey(tempSawCookieKeyName);return}if(flowplayer.conf.is_logged_in=="1"){if(beaconSupported){try{var temp_position_data={},temp_saw_data={};for(var i in postData){if(!postData.hasOwnProperty(i))continue;temp_position_data[postData[i].name]=postData[i].position;temp_saw_data[postData[i].name]=postData[i].saw}setCookieKey(tempPositionCookieKeyName,getSerialized(temp_position_data));setCookieKey(tempSawCookieKeyName,getSerialized(temp_saw_data))}catch(e){return}var fd=new FormData;fd.append("action","fv_wp_flowplayer_video_position_save");fd.append("videoTimes",encodeURIComponent(JSON.stringify(postData)));navigator.sendBeacon(fv_player.ajaxurl,fd);return false}else{return jQuery.ajax({type:"POST",async:async,url:fv_player.ajaxurl,complete:callback,data:{action:"fv_wp_flowplayer_video_position_save",videoTimes:postData}})}}else{try{var data=getCookieKey(cookieKeyName);if(data&&typeof data!=="undefined"){data=JSON.parse(data)}else{data={}}for(var i in postData){if(!postData.hasOwnProperty(i))continue;data[postData[i].name]=postData[i].position}var serialized=JSON.stringify(data),dataSize=getTextByteSize(serialized);if(dataSize>maxCookieSize){while(dataSize>maxCookieSize){for(var i in data){if(!data.hasOwnProperty(i))continue;delete data[i];serialized=JSON.stringify(data);dataSize=getTextByteSize(serialized);break}}}setCookieKey(cookieKeyName,serialized)}catch(e){return}}return false};flowplayer(function(api,root){var $root=jQuery(root),enabled=flowplayer.conf.video_position_save_enable&&$root.data("save-position")!="false"||$root.data("save-position"),progressEventsCount=0,seekIntoPosition=function(e,api){if(api.video&&api.video.live)return;var video_id=getVideoId(api.video),position=api.video.position;if(flowplayer.conf.is_logged_in!="1"){var data=getCookieKey(cookieKeyName);if(data&&typeof data!=="undefined"){try{data=JSON.parse(data);if(data[video_id]){position=data[video_id]}}catch(e){return}}}if(!!api.get_custom_end&&api.get_custom_end()<position){position=false}if(!!api.get_custom_start&&api.get_custom_start()>0){if(position<api.get_custom_start()){position=false}}api.bind("progress",storeVideoPosition);if(position){seek(position)}},storeVideoPosition=function(e,api){if(api.live){return}if(api.video.sources){var video_id=getVideoId(api.video),position=Math.round(api.video.time);playPositions[video_id]=position;if(progressEventsCount++>=sendPositionsEvery&&flowplayer.conf.closingPage){if(ajaxCall){ajaxCall.abort()}ajaxCall=sendVideoPositions(true,function(){ajaxCall=null});progressEventsCount=0}}},forceSavePosition=function(e,api){var inPlaylist=false;for(var i in api.conf.playlist){if(!api.conf.playlist.hasOwnProperty(i))continue;inPlaylist=true;break}if(inPlaylist&&!flowplayer.conf.closingPage){progressEventsCount=sendPositionsEvery+1;storeVideoPosition(e,api);sendVideoPositions()}},seek=function(position){if(!!api.custom_seek){api.custom_seek(position);return}var seek_count=0;var do_seek=setInterval(function(){if(++seek_count>20)clearInterval(do_seek);if(api.loading)return;api.seek(parseInt(position));clearInterval(do_seek)},10)},processTempData=function(temp_data_name,video_id){var data=getCookieKey(temp_data_name),output=false;if(data&&typeof data!=="undefined"){try{data=JSON.parse(data);if(typeof data[video_id]!="undefined"){output=data[video_id];delete data[video_id];var stillHasData=false;for(var i in data){if(!data.hasOwnProperty(i))continue;stillHasData=true;break}if(stillHasData){setCookieKey(temp_data_name,JSON.stringify(data))}else{removeCookieKey(temp_data_name)}}return output}catch(e){}}};if(!enabled)return;api.bind("finish",removeVideoPosition);api.one("progress",seekIntoPosition);api.playlist_thumbnail_progress=function(el,video,position){if(!!api.get_custom_start&&api.get_custom_start(video)>0){position-=api.get_custom_start(video);if(position<0)position=0}var duration=video.duration;if(!!api.get_custom_duration&&api.get_custom_duration()>0){duration=api.get_custom_duration()}if(!duration){duration=el.data("duration")}if(!duration)return;var progress=100*position/duration;el.css("width",progress+"%")};if(flowplayer.conf.is_logged_in=="1"){var playlist=api.conf.playlist.length>0?api.conf.playlist:[api.conf.clip],playlist_external=jQuery("[rel="+jQuery(root).attr("id")+"]");for(var i in playlist){if(!playlist.hasOwnProperty(i))continue;var video_id=getVideoId(playlist[i]),position=processTempData(tempPositionCookieKeyName,video_id),saw=processTempData(tempSawCookieKeyName,video_id);if(position){if(api.conf.playlist.length){api.conf.playlist[i].sources[0].position=position;var playlist_progress=jQuery("a",playlist_external).eq(i).find(".fvp-progress");if(playlist_progress.length){api.playlist_thumbnail_progress(playlist_progress,api.conf.playlist[i],position)}}else{api.conf.clip.sources[0].position=position}}if(saw){if(api.conf.playlist.length){api.conf.playlist[i].sources[0].saw=true}else{api.conf.clip.sources[0].saw=true}}}}api.bind("finish",function(e,api){if(api.conf.playlist.length){api.conf.playlist[api.video.index].sources[0].saw=true}else{api.conf.clip.sources[0].saw=true}})});jQuery(window).on("beforeunload pagehide",function(){if(!flowplayer.conf.closingPage){flowplayer.conf.closingPage=true;sendVideoPositions()}});if(localStorageEnabled!==null){return localStorageEnabled}localStorageEnabled=true;try{localStorage.setItem("t","t");if(localStorage.getItem("t")!=="t"){localStorageEnabled=false}localStorage.removeItem("t")}catch(e){localStorageEnabled=false}})(jQuery);flowplayer(function(api,root){root=jQuery(root);if(api.conf.playlist.length==0)return;var real_videos=0;jQuery(api.conf.playlist).each(function(k,v){if(typeof v.click=="undefined"){real_videos++}});if(real_videos<2)return;var playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]");var playlist_button=jQuery('<strong class="fv-fp-list">Item 1.</strong>'),playlist_menu=jQuery('<div class="fp-menu fv-fp-list-menu"></div>').insertAfter(root.find(".fp-controls"));var i=0,item_index=[];jQuery(api.conf.playlist).each(function(k,v){if(typeof v.click=="undefined"){playlist_menu.append('<a data-index="'+k+'">'+(i+1)+". "+parse_title(playlist.find("h4").eq(i))+"</a>");item_index.push(k);i++}});playlist_button.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();if(playlist_menu.hasClass("fp-active")){api.hideMenu(playlist_menu[0])}else{root.trigger("click");api.showMenu(playlist_menu[0])}});jQuery("a",playlist_menu).on("click",function(){if(typeof api.conf.playlist[jQuery(this).data("index")-1]!="undefined"&&typeof api.conf.playlist[jQuery(this).data("index")-1].click!="undefined"){api.play(jQuery(this).data("index")-1)}else{api.play(jQuery(this).data("index"))}});api.on("ready",function(e,api,video){playlist_menu.find("a").removeClass("fp-selected");var thumb=playlist_menu.find("a[data-index="+video.index+"]");thumb.addClass("fp-selected");var label=fv_flowplayer_translations.playlist_item_no;label=label.replace(/%d/,item_index.indexOf(api.video.index)+1);label=label.replace(/%s/,parse_title(thumb.find("h4")));playlist_button.html(label)});function parse_title(el){var tmp=el.clone();tmp.find("i.dur").remove();return tmp.text()}});flowplayer(function(api,root){root=jQuery(root);var playlist=api.conf.playlist,videoIndex;api.bind("load",function(e,api,video){videoIndex=video.index});api.bind("error",function(e,api,error){setTimeout(function(){if(playlist.length>0&&api.error==true){videoIndex=api.video.index;if(api.conf.video_checker=="1"&&playlist[videoIndex].video_checker&&playlist[videoIndex].video_checker.length>0){console.log("FV Player: Video checker message present, stopping auto-advance to next playlist item");return false}api.error=api.loading=false;root.removeClass("is-error");root.find(".fp-message.fp-shown").remove();videoIndex++;if(videoIndex>playlist.length-1){videoIndex=0}console.log("FV Player: Playlist item failure, auto-advancing to "+(videoIndex+1)+". item");api.play(videoIndex)}},1e3)})});flowplayer(function(api,root){root=jQuery(root);var original_prev,original_next,random_seed;if(!root.data("button-no-picture")&&!root.data("button-repeat")&&!root.data("button-rewind"))return;api.bind("ready",function(e,api){if(typeof original_next=="undefined"&&typeof original_prev=="undefined"){original_next=api.next;original_prev=api.prev}if(!api.video.type.match(/^audio/)&&root.data("button-no-picture")&&root.find(".fv-fp-no-picture").length==0){var button_no_picture=jQuery('<span class="fv-fp-no-picture"><svg viewBox="0 0 90 80" width="18px" height="18px" class="fvp-icon fvp-nopicture"><use xlink:href="#fvp-nopicture"></use></svg></span>');button_no_picture.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();jQuery(".fp-engine",root).slideToggle(20);jQuery(this).toggleClass("is-active fp-color-fill")})}if(root.data("button-repeat")){if(api.conf.playlist.length>0&&root.find(".fv-fp-playlist").length==0){var t=fv_flowplayer_translations,playlist_button=jQuery('<strong class="fv-fp-playlist mode-normal"> <svg viewBox="0 0 80.333 80" width="18px" height="18px" class="fvp-icon fvp-replay-list"><title>'+t.playlist_replay_all+'</title><use xlink:href="#fvp-replay-list"></use></svg> <svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-shuffle"><title>'+t.playlist_shuffle+'</title><use xlink:href="#fvp-shuffle"></use></svg> <svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-replay-track"><title>'+t.playlist_replay_video+'</title><use xlink:href="#fvp-replay-track"></use></svg> <span id="fvp-playlist-play" title="'+t.playlist_play_all+'">'+t.playlist_play_all_button+"</span> </strong>"),playlist_menu=jQuery('<div class="fp-menu fv-fp-playlist-menu"> <a data-action="repeat_playlist"><svg viewBox="0 0 80.333 80" width="18px" height="18px" class="fvp-icon fvp-replay-list"><title>'+t.playlist_replay_all+'</title><use xlink:href="#fvp-replay-list"></use></svg> <span class="screen-reader-text">'+t.playlist_replay_all+'</span></a> <a data-action="shuffle_playlist"><svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-shuffle"><title>'+t.playlist_shuffle+'</title><use xlink:href="#fvp-shuffle"></use></svg> <span class="screen-reader-text">'+t.playlist_shuffle+'</span></a> <a data-action="repeat_track"><svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-replay-track"><title>'+t.playlist_replay_video+'</title><use xlink:href="#fvp-replay-track"></use></svg> <span class="screen-reader-text">'+t.playlist_replay_video+'</span></a> <a class="fp-selected" data-action="normal"><span id="fvp-playlist-play" title="'+t.playlist_play_all+'">'+t.playlist_play_all_button+"</span></a> </div>").insertAfter(root.find(".fp-controls"));api.conf.playlist_shuffle=api.conf.track_repeat=false;random_seed=randomize();var should_advance=api.conf.advance;playlist_button.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();if(playlist_menu.css("right")!=="auto"){playlist_menu.css({right:"auto",left:playlist_button.position().left+"px"})}if(playlist_menu.hasClass("fp-active")){api.hideMenu(playlist_menu[0])}else{root.trigger("click");api.showMenu(playlist_menu[0])}});jQuery("a",playlist_menu).on("click",function(){jQuery(this).siblings("a").removeClass("fp-selected");jQuery(this).addClass("fp-selected");playlist_button.removeClass("mode-normal mode-repeat-track mode-repeat-playlist mode-shuffle-playlist");var action=jQuery(this).data("action");if(action=="repeat_playlist"){playlist_button.addClass("mode-repeat-playlist");api.conf.loop=true;api.conf.advance=true;api.video.loop=api.conf.track_repeat=false;api.conf.playlist_shuffle=false}else if(action=="shuffle_playlist"){playlist_button.addClass("mode-shuffle-playlist");api.conf.loop=true;api.conf.advance=true;api.conf.playlist_shuffle=true}else if(action=="repeat_track"){playlist_button.addClass("mode-repeat-track");api.conf.track_repeat=api.video.loop=true;api.conf.loop=api.conf.playlist_shuffle=false}else if(action=="normal"){playlist_button.addClass("mode-normal");api.conf.track_repeat=api.video.loop=false;api.conf.loop=api.conf.playlist_shuffle=false}if(api.conf.playlist_shuffle){api.next=function(){api.play(random_seed.pop());if(random_seed.length==0)random_seed=randomize()};api.prev=function(){api.play(random_seed.shift());if(random_seed.length==0)random_seed=randomize()}}else{api.next=original_next;api.prev=original_prev}});if(api.conf.loop){jQuery("a[data-action=repeat_playlist]",playlist_menu).trigger("click")}api.on("progress",function(){api.video.loop=api.conf.track_repeat});api.on("finish.pl",function(e,api){console.log("playlist_repeat",api.conf.loop,"advance",api.conf.advance,"video.loop",api.video.loop);if(api.conf.playlist_shuffle){api.play(random_seed.pop());if(random_seed.length==0)random_seed=randomize()}})}else if(root.find(".fv-fp-track-repeat").length==0&&api.conf.playlist.length==0){var button_track_repeat=jQuery('<strong class="fv-fp-track-repeat"><svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-replay-track"><use xlink:href="#fvp-replay-track"></use></svg></strong>');button_track_repeat.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();jQuery(this).toggleClass("is-active fp-color-fill",api.video.loop);if(api.video.loop){api.video.loop=false}else{api.video.loop=true}});if(api.conf.loop){button_track_repeat.addClass("is-active fp-color-fill")}}}if(root.data("button-rewind")){if(root.find(".fv-fp-rewind").length==0){var button_rewind=jQuery('<span class="fv-fp-rewind"><svg viewBox="0 0 24 24" width="21px" height="21px" class="fvp-icon fvp-rewind"><use xlink:href="#fvp-rewind"></use></svg></span>');button_rewind.insertBefore(root.find(".fp-controls .fp-playbtn")).on("click",function(e){e.preventDefault();e.stopPropagation();api.seek(api.video.time-10)});button_rewind.toggle(!api.video.live)}if(root.find(".fv-fp-forward").length==0){var button_forward=jQuery('<span class="fv-fp-forward"><svg viewBox="0 0 24 24" width="21px" height="21px" class="fvp-icon fvp-forward"><use xlink:href="#fvp-forward"></use></svg></span>');button_forward.insertAfter(root.find(".fp-controls .fp-playbtn")).on("click",function(e){e.preventDefault();e.stopPropagation();api.seek(api.video.time+10)});button_forward.toggle(!api.video.live)}}}).bind("unload",function(){root.find(".fv-fp-no-picture").remove();root.find(".fv-fp-playlist").remove();root.find(".fv-fp-track-repeat").remove()});function array_shuffle(a){var j,x,i;for(i=a.length;i;i--){j=Math.floor(Math.random()*i);x=a[i-1];a[i-1]=a[j];a[j]=x}return a}function randomize(random_seed){random_seed=[];jQuery(api.conf.playlist).each(function(k,v){random_seed.push(k)});random_seed=array_shuffle(random_seed);console.log("FV Player Randomizer random seed:",random_seed);return random_seed}});flowplayer(function(api,root){var $root=jQuery(root),start_index=$root.data("playlist_start");if(typeof start_index=="undefined")return;function start_position_changer(){if($root.data("position_changed")!==1&&api.conf.playlist.length){start_index--;api.play(start_index);$root.data("position_changed",1)}}api.bind("unload",function(){start_index=$root.data("playlist_start");$root.removeData("position_changed");api.one("ready",start_position_changer);api.video.index=0});api.one("ready",start_position_changer);jQuery(".fp-ui",root).on("click",function(){start_position_changer();$root.data("position_changed",1)})});document.addEventListener("custombox:overlay:close",function(e){console.log("FV Player: Custombox/Popup anything ligtbox closed");var $players=jQuery(this).find(".flowplayer");if($players.length==0)return;console.log("FV Player: Custombox/Popup anything ligtbox contains a player");$players.each(function(index,player){var api=jQuery(player).data("flowplayer");if(typeof api!="undefined"){if(api.playing){console.log("FV Player: Custombox/Popup anything ligtbox video pause");api.pause()}else if(api.loading){api.one("ready",function(){console.log("FV Player: Custombox/Popup anything ligtbox video unload");api.unload()})}}})});flowplayer(function(api,root){api.bind("finish",function(){var finished_at=api.video.time;if(api.video.loop){api.one("pause",function(){if(finished_at<=api.video.time){api.resume()}})}})});function fv_flowplayer_amazon_s3(hash,time){jQuery("#wpfp_"+hash).bind("error",function(e,api,error){var fv_fp_date=new Date;if(error.code==4&&fv_fp_date.getTime()>fv_fp_utime+parseInt(time)){jQuery(e.target).find(".fp-message").delay(500).queue(function(n){jQuery(this).html(fv_flowplayer_translations.video_expired);n()})}})}flowplayer(function(api,root){root=jQuery(root);root.find(".fp-logo").removeAttr("href");if(root.hasClass("no-controlbar")){var timelineApi=api.sliders.timeline;timelineApi.disable(true);api.bind("ready",function(){timelineApi.disable(true)})}jQuery(".fvfp_admin_error",root).remove();root.find(".fp-logo, .fp-header").on("click",function(e){if(e.target!==this)return;root.find(".fp-ui").trigger("click")});jQuery(".fvp-share-bar .sharing-facebook",root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Facebook</title><path d="M11.9 5.2l-2.6 0 0-1.6c0-0.7 0.3-0.7 0.7-0.7 0.3 0 1.6 0 1.6 0l0-2.9 -2.3 0c-2.6 0-3.3 2-3.3 3.3l0 2 -1.6 0 0 2.9 1.6 0c0 3.6 0 7.8 0 7.8l3.3 0c0 0 0-4.2 0-7.8l2.3 0 0.3-2.9Z"/></svg>');jQuery(".fvp-share-bar .sharing-twitter",root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Twitter</title><path d="M16 3.1c-0.6 0.3-1.2 0.4-1.9 0.5 0.7-0.4 1.2-1 1.4-1.8 -0.6 0.4-1.3 0.6-2.1 0.8 -0.6-0.6-1.4-1-2.4-1 -2 0.1-3.2 1.6-3.2 4 -2.7-0.1-5.1-1.4-6.7-3.4 -0.9 1.4 0.2 3.8 1 4.4 -0.5 0-1-0.1-1.5-0.4l0 0.1c0 1.6 1.1 2.9 2.6 3.2 -0.7 0.2-1.3 0.1-1.5 0.1 0.4 1.3 1.6 2.2 3 2.3 -1.6 1.7-4.6 1.4-4.8 1.3 1.4 0.9 3.2 1.4 5 1.4 6 0 9.3-5 9.3-9.3 0-0.1 0-0.3 0-0.4 0.6-0.4 1.2-1 1.6-1.7Z"/></svg>');jQuery(".fvp-share-bar .sharing-email",root).append('<svg xmlns="http://www.w3.org/2000/svg" height="16" viewBox="0 0 16 16" width="16" fill="#fff"><title>Email</title><path d="M8 10c0 0 0 0-1 0L0 6v7c0 1 0 1 1 1h14c1 0 1 0 1-1V6L9 10C9 10 8 10 8 10zM15 2H1C0 2 0 2 0 3v1l8 4 8-4V3C16 2 16 2 15 2z"/></svg>');jQuery(".fp-header",root).prepend(jQuery(".fvp-share-bar",root));if(api.conf.playlist.length){var show=true;var playlist=api.conf.playlist;if(playlist.length==2){if(typeof playlist[0].click!="undefined"&&typeof playlist[1].click=="undefined"){show=false}if(typeof playlist[0].click=="undefined"&&typeof playlist[1].click!="undefined"){show=false}}else if(playlist.length==3){if(typeof playlist[0].click!="undefined"&&typeof playlist[1].click=="undefined"&&typeof playlist[2].click!="undefined"){show=false}}if(show){var prev=jQuery('<a class="fp-icon fv-fp-prevbtn"></a>');var next=jQuery('<a class="fp-icon fv-fp-nextbtn"></a>');root.find(".fp-controls .fp-playbtn").before(prev).after(next);prev.on("click",function(){api.trigger("prev",[api]);api.prev()});next.on("click",function(){api.trigger("next",[api]);api.next()})}}api.bind("pause resume finish unload ready",function(e,api){root.addClass("no-brand")});api.one("ready",function(){root.find(".fp-fullscreen").clone().appendTo(root.find(".fp-controls"))});api.bind("ready",function(e,api,video){setTimeout(function(){jQuery(".fvp-share-bar",root).show();jQuery(".fv-player-buttons-wrap",root).appendTo(jQuery(".fv-player-buttons-wrap",root).parent().find(".fp-ui"))},100)});api.bind("finish",function(){var url=root.data("fv_redirect");if(url&&(typeof api.video.is_last=="undefined"||api.video.is_last)){location.href=url}});if(flowplayer.support.iOS&&flowplayer.support.iOS.version==11){api.bind("error",function(e,api,error){if(error.code==4)root.find(".fp-engine").hide()})}jQuery(document).on("contextmenu",".flowplayer",function(e){e.preventDefault()});api.one("ready",function(e,api,video){root.find(".fp-chromecast").insertAfter(root.find(".fp-header .fp-fullscreen"))});root.find(".fp-waiting").html('<div class="fp-preload"><b></b><b></b><b></b><b></b></div>');var id=root.attr("id"),alternative=!flowplayer.conf.native_fullscreen&&flowplayer.conf.mobile_alternative_fullscreen,events_enter="fakefullscreen",events_exit="fakefullscreen-exit";if(!flowplayer.support.fullscreen){events_enter+=" fullscreen";events_exit+=" fullscreen-exit"}api.bind(events_enter,function(e,api){jQuery("#wpadminbar, .nc_wrapper").hide();if(alternative||e.type=="fakefullscreen"){if(api.video.type=="video/youtube")return;root.before('<span data-fv-placeholder="'+id+'"></span>');root.appendTo("body")}});api.bind(events_exit,function(e,api,video){jQuery("#wpadminbar, .nc_wrapper").show();if(alternative||e.type=="fakefullscreen-exit"){jQuery("span[data-fv-placeholder="+id+"]").replaceWith(root)}})});(function(){var extension=function(flowplayer){flowplayer(function(api,root){if(!jQuery(root).data("speedb"))return;var support=flowplayer.support;if(!support.video||!support.inlineVideo)return;var common=flowplayer.common,bean=flowplayer.bean,ui=common.find(".fp-ui",root)[0],controlbar=common.find(".fp-controls",ui)[0],speeds=api.conf.speeds;bean.on(root,"click",".fp-speed",function(){var menu=common.find(".fp-speed-menu",root)[0];if(common.hasClass(menu,"fp-active"))api.hideMenu();else api.showMenu(menu)});bean.on(root,"click",".fp-speed-menu a",function(ev){var s=ev.target.getAttribute("data-speed");api.speed(s)});api.on("speed",function(ev,_a,rate){if(speeds.length>1){selectSpeed(rate)}}).on("ready",function(ev,api){removeMenu();if(flowplayer.support.android&&api.engine.engineName=="html5"&&api.video.type=="application/x-mpegurl")return;speeds=api.conf.speeds;if(speeds.length>1){createMenu()}});function removeMenu(){common.find(".fp-speed-menu",root).forEach(common.removeNode);common.find(".fp-speed",root).forEach(common.removeNode)}function round(val){return Math.round(val*100)/100}function createMenu(){controlbar.appendChild(common.createElement("strong",{className:"fp-speed"},api.currentSpeed+"x"));var menu=common.createElement("div",{className:"fp-menu fp-speed-menu",css:{width:"auto"}},"<strong>Speed</strong>");speeds.forEach(function(s){var a=common.createElement("a",{"data-speed":round(s)},round(s)+"x");menu.appendChild(a)});ui.appendChild(menu);selectSpeed(api.currentSpeed);jQuery(root).find(".fp-speed-menu strong").text(fv_flowplayer_translations.speed)}function selectSpeed(rate){common.find(".fp-speed",root)[0].innerHTML=rate+"x";common.find(".fp-speed-menu a",root).forEach(function(el){common.toggleClass(el,"fp-selected",el.getAttribute("data-speed")==rate);common.toggleClass(el,"fp-color",el.getAttribute("data-speed")==rate)})}})};if(typeof module==="object"&&module.exports)module.exports=extension;else if(typeof window.flowplayer==="function")extension(window.flowplayer)})();flowplayer(function(api,root){api.on("speed",function(ev,_a,rate){try{window.localStorage.fv_player_speed=rate}catch(e){}});api.on("ready",function(){if(window.localStorage.fv_player_speed&&jQuery(root).find("strong.fp-speed").is(":visible")){api.speed(parseFloat(window.localStorage.fv_player_speed))}if(jQuery(root).data("volume")==0){api.mute(true,true)}})});flowplayer(function(api,root){root=jQuery(root);var last_tracked=-1;if(!api.conf.fv_stats||!api.conf.fv_stats.enabled&&(!root.data("fv_stats")||root.data("fv_stats")=="no"))return;api.on("ready finish",function(e,api){api.one("progress",function(e,api){if(root.data("fv_stats_data")){try{var player_post_data=root.data("fv_stats_data")}catch(e){return false}if(last_tracked==get_index())return;last_tracked=get_index();jQuery.post(api.conf.fv_stats.url,{blog_id:api.conf.fv_stats.blog_id,video_id:api.video.id?api.video.id:0,player_id:player_post_data.player_id,post_id:player_post_data.post_id,tag:"play"})}})}).on("finish",function(){last_tracked=-1});function get_index(){return api.video.index?api.video.index:0}});flowplayer(function(api,root){var $root=jQuery(root);var $playerDiv=$root.find(".fp-player");var sticky=$root.data("fvsticky");var globalSticky=false;var videoRatio=$root.data("ratio"),is_sticky=false;if(typeof videoRatio=="undefined"){videoRatio=.5625}if(flowplayer.conf.sticky_video==1&&typeof sticky=="undefined"){globalSticky=true}if(globalSticky||sticky){if(flowplayer.support.firstframe){var stickyPlace=flowplayer.conf.sticky_place;var stickyWidth=flowplayer.conf.sticky_width;if(stickyWidth==""){stickyWidth=380}var stickyHeight=stickyWidth*videoRatio;fv_player_sticky_video()}else{return}}function fv_player_sticky_video(){var change=false;var $window=jQuery(window),$flowplayerDiv=$root,top=$flowplayerDiv.offset().top,offset=Math.floor(top+$flowplayerDiv.outerHeight()/2);api.on("ready",function(){change=true});api.on("progress",function(){change=true});api.on("unload",function(){change=false;fv_player_sticky_class_remove();$root.removeClass("is-unSticky")});$window.on("resize",function(){if(!is_big_enough()){if(is_sticky){fv_player_sticky_class_remove()}return}top=$flowplayerDiv.offset().top;offset=Math.floor(top+$flowplayerDiv.outerHeight()/2)}).on("scroll",function(){if(!is_big_enough()){if(is_sticky){fv_player_sticky_class_remove()}return}top=$flowplayerDiv.offset().top;offset=Math.floor(top+$flowplayerDiv.outerHeight()/2);if($window.scrollTop()>offset&&change){if(jQuery("div.flowplayer.is-unSticky").length>0){console.log("unSticky",jQuery("div.flowplayer.is-unSticky").length);return false}else{fv_player_sticky_class_add()}}else{fv_player_sticky_class_remove();change=false}})}function fv_player_sticky_class_add(){if($playerDiv.hasClass("is-sticky-"+stickyPlace)){return}else{$playerDiv.addClass("is-sticky-"+stickyPlace);if($root.find("a.fp-sticky").length==0){$root.find("div.fp-header").prepend('<a class="fp-sticky fp-icon"></a>')}$playerDiv.css("width",stickyWidth);$playerDiv.css("height",stickyHeight);$playerDiv.css("max-height",stickyHeight);is_sticky=true;api.trigger("sticky",[api])}$playerDiv.parent(".flowplayer").addClass("is-stickable")}function fv_player_sticky_class_remove(){$playerDiv.removeClass("is-sticky-"+stickyPlace);$playerDiv.css("width","");$playerDiv.css("height","");$playerDiv.css("max-height","");$playerDiv.parent(".flowplayer").removeClass("is-stickable");if(is_sticky){is_sticky=false;api.trigger("sticky-exit",[api])}}function is_big_enough(){return jQuery(window).innerWidth()>=1020}});jQuery(function($){$(document).on("click","a.fp-sticky",function(){$("div.flowplayer.is-stickable").addClass("is-unSticky");var $playerDiv=$("div.flowplayer.is-stickable").find(".fp-player");$playerDiv.removeClass("is-sticky-right-bottom");$playerDiv.removeClass("is-sticky-left-bottom");$playerDiv.removeClass("is-sticky-right-top");$playerDiv.removeClass("is-sticky-left-top");$playerDiv.css("width","");$playerDiv.css("height","");$playerDiv.css("max-height","");if(is_sticky){is_sticky=false;api.trigger("sticky-exit",[api])}});$(document).on("click","div.flowplayer.is-unSticky",function(){$("div.flowplayer").removeClass("is-unSticky")})});flowplayer(function(api,root){root=jQuery(root);var ls=window.localStorage;api.on("ready",function(e,api,video){if(root.find("strong.fp-cc").is(":visible")){if(ls.fv_player_subtitle&&api.video.subtitles.length){if(ls.fv_player_subtitle==="none"){api.disableSubtitles()}else{api.video.subtitles.forEach(function(item,index){if(item.srclang===ls.fv_player_subtitle){api.loadSubtitles(index)}})}}else{var defaultSubtitle=video.subtitles.filter(function(one){return one["fv_default"]})[0];if(defaultSubtitle){api.loadSubtitles(video.subtitles.indexOf(defaultSubtitle))}}}root.find(".fp-subtitle-menu").on("click",function(e){var subtitle_index=e.target.getAttribute("data-subtitle-index");if(typeof subtitle_index=="string"){try{ls.fv_player_subtitle=subtitle_index>-1?api.video.subtitles[subtitle_index].srclang:"none"}catch(e){}}})})});flowplayer(function(api,root){root=jQuery(root);var currentPoint,check=false;api.bind("cuepoint",function(e,api,cue){check=false;if(cue.subtitle){currentPoint=cue.index}});api.on("ready",function(e,api){root.find(".fp-subtitle-menu strong").text(fv_flowplayer_translations.closed_captions);root.find('.fp-subtitle-menu a[data-subtitle-index="-1"]').text(fv_flowplayer_translations.no_subtitles)});root.on("click",".fp-subtitle-menu a[data-subtitle-index]",function(e){if(jQuery(this).data("subtitle-index")>-1){check=true;api.on("progress",time_check)}});function time_check(e,api,time){if(check){(api.cuepoints||[]).forEach(function(cue,index){var entry=cue.subtitle;if(entry&¤tPoint!=index){if(time>=cue.time&&(!entry.endTime||time<=entry.endTime)){api.trigger("cuepoint",[api,cue])}}})}}});if(typeof flowplayer!=="undefined"&&typeof fv_flowplayer_conf!="undefined"&&fv_flowplayer_conf.video_hash_links){flowplayer(function(api,root){if(jQuery(root).find(".sharing-link").length>0){var abEnd,abStart,hash,sTime,abloop;function update_link(abStartNew,abEndNew){hash=fv_player_get_video_link_hash(api);sTime=","+fv_player_time_hms(api.video.time);if(abStartNew&&abEndNew){abStart=","+fv_player_time_hms_ms(abStartNew+api.get_custom_start());abEnd=","+fv_player_time_hms_ms(abEndNew+api.get_custom_start())}else{abEnd=abloop&&typeof api.get_ab_end()!="undefined"&&api.get_ab_end()?","+fv_player_time_hms_ms(api.get_ab_end()):"";abStart=abloop&&typeof api.get_ab_start()!="undefined"&&api.get_ab_start()?","+fv_player_time_hms_ms(api.get_ab_start()):""}jQuery(".sharing-link",root).attr("href",jQuery(".sharing-link",root).attr("href").replace(/#.*/,"")+"#"+hash+sTime+abStart+abEnd)}api.on("ready",function(e,api,video){if(!api.fv_noUiSlider)return;api.fv_noUiSlider.on("set",function(values){update_link(values[0],values[1])})});api.on("progress",function(e,api){if(!api.video.sources||!api.video.sources[0]){return}update_link()});api.on("abloop",function(e,api,active){abloop=active;if(!api.playing){update_link()}});jQuery(".sharing-link",root).on("click",function(e){fv_player_clipboard(jQuery(this).attr("href"),function(){e.preventDefault();fv_player_notice(root,fv_flowplayer_translations.link_copied,2e3)})})}});jQuery(document).on("click",'a[href*="fvp_"]',function(){var link=jQuery(this);setTimeout(function(){if(link.parents(".fvp-share-bar").length==0)fv_autoplay_exec()})})}flowplayer(function(api,root){root=jQuery(root);var bean=flowplayer.bean;var restore=-1;root.on("click",".fp-volumebtn",function(e){if(api.volumeLevel==0&&restore!=-1){api.volume(restore);return false}});root.on("mousedown touchstart mouseup touchend",".fp-volumebar",function(e){if(api.volumeLevel!=0){restore=api.volumeLevel}});root.on("mousedown touchstart",".fp-volumebtn",function(e){if(api.volumeLevel>0){restore=-1}});api.on("volume",function(e,api){if(root.hasClass("is-mouseover")&&!api.muted){if(api.volumeLevel==0){bean.off(flowplayer.support.touch?root:document,"mousemove.sld touchmove.sld");api.mute(true)}}});var deal_with_muted_start=false;api.on("ready",function(e,api){if(root.hasClass("is-audio"))return;deal_with_muted_start=true});api.on("progress",function(e,api,time){if(deal_with_muted_start&&time>1){deal_with_muted_start=false;var video=jQuery("root").find("video");if(video.length&&!hasAudio(video[0])){return}if(api.muted||api.volumeLevel==0){if(localStorage.muted=="true"||localStorage.volume=="0"){return}var mute_notice=jQuery('<div class="fp-message fp-message-muted fp-shown"><span class="fp-icon fp-volumebtn-notice"></span> '+fv_flowplayer_translations.click_to_unmute+"</div>");mute_notice.on("click touchstart",function(){api.mute(false);api.volume(1)});root.find(".fp-ui").append(mute_notice);root.addClass("has-fp-message-muted")}}});api.on("mute volume",function(){if(!api.muted||api.volumeLevel>0){remove_volume_notice()}});function remove_volume_notice(){root.removeClass("has-fp-message-muted");root.find(".fp-message-muted").remove()}function hasAudio(video){return video.mozHasAudio||Boolean(video.webkitAudioDecodedByteCount)||Boolean(video.audioTracks&&video.audioTracks.length)}});if(typeof flowplayer!="undefined"){flowplayer(function(api,root){root=jQuery(root);if(navigator.userAgent.match(/iPhone.* OS [0-6]_/i)){api.one("progress",function(e){if(typeof api.video.subtitles!=="undefined"&&api.video.subtitles.length){fv_player_warning(root,fv_flowplayer_translations.warning_iphone_subs)}})}if(flowplayer.support.android&&flowplayer.support.android.version<5&&(flowplayer.support.android.samsung||flowplayer.support.browser.safari)){fv_player_warning(root,fv_flowplayer_translations.warning_unstable_android,"firefox")}if(/Android 4/.test(navigator.userAgent)&&!/Firefox/.test(navigator.userAgent)){api.on("ready",function(e,api,video){setTimeout(function(){if(video.src&&video.src.match(/fpdl.vimeocdn.com/)&&(video.time==0||video.time==1)){fv_player_warning(root,fv_flowplayer_translations.warning_unstable_android,"firefox");api.on("progress",function(e,api){root.prev().find(".fv-player-warning-firefox").remove()})}},1500)});api.on("error",function(e,api,error){if(error.MEDIA_ERR_NETWORK==2&&error.video.src.match(/fpdl.vimeocdn.com/)){fv_player_warning(root,fv_flowplayer_translations.warning_unstable_android,"firefox")}})}if(/Safari/.test(navigator.userAgent)&&/Version\/5/.test(navigator.userAgent)){api.on("error",function(e,api,error){if(error.video.src.match(/fpdl.vimeocdn.com/)){fv_player_warning(root,fv_flowplayer_translations.warning_old_safari)}})}var sup=flowplayer.support;if(sup.android&&(sup.android.samsung&&parseInt(sup.browser.version)<66||sup.browser.safari)){api.on("error",function(e,api,error){fv_player_warning(root,fv_flowplayer_translations.warning_samsungbrowser,"warning_samsungbrowser")})}});function fv_player_warning(root,warning,classname){var wrapper=jQuery(root).prev(".fv-player-warning-wrapper");if(wrapper.length==0){jQuery(root).before('<div class="fv-player-warning-wrapper">');wrapper=jQuery(root).prev(".fv-player-warning-wrapper")}if(wrapper.find(".fv-player-warning-"+classname).length==0){var latest=jQuery("<p style='display: none' "+(classname?" class='fv-player-warning-"+classname+"'":"")+">"+warning+"</p>");wrapper.append(latest);latest.slideDown()}}}
|
1 |
+
if(typeof fv_flowplayer_conf!="undefined"){try{if(typeof window.localStorage=="object"&&typeof window.localStorage.volume!="undefined"){delete fv_flowplayer_conf.volume}}catch(e){}flowplayer.conf=fv_flowplayer_conf;flowplayer.conf.fullscreen=false;flowplayer.conf.chromecast=false;flowplayer.conf.embed=false;flowplayer.conf.share=false;flowplayer.conf.analytics=false;if(typeof fv_flowplayer_conf.disable_localstorage!="undefined"){flowplayer.conf.storage={}}try{flowplayer.conf.key=atob(flowplayer.conf.key)}catch(e){}if(!flowplayer.support.android&&flowplayer.conf.dacast_hlsjs){function FVAbrController(hls){this.hls=hls;this.nextAutoLevel=3}FVAbrController.prototype.nextAutoLevel=function(nextLevel){this.nextAutoLevel=nextLevel};FVAbrController.prototype.destroy=function(){};flowplayer.conf.hlsjs={startLevel:-1,abrController:FVAbrController}}function parseIOSVersion(UA){var e=/iP(ad|hone)(; CPU)? OS (\d+_\d)/.exec(UA);if(e&&e.length>1){return parseFloat(e[e.length-1].replace("_","."),10)}return 0}if(flowplayer.support.iOS&&flowplayer.support.iOS.chrome&&flowplayer.support.iOS.version==0){flowplayer.support.iOS.version=parseIOSVersion(navigator.userAgent)}if(flowplayer.support.iOS&&parseInt(flowplayer.support.iOS.version)>=13||!flowplayer.support.iOS&&flowplayer.support.browser.safari&&parseInt(flowplayer.support.browser.version)>=8){flowplayer.conf.hlsjs.safari=true}flowplayer.support.fvmobile=!!(!flowplayer.support.firstframe||flowplayer.support.iOS||flowplayer.support.android);var fls=flowplayer.support;if(flowplayer.conf.mobile_native_fullscreen&&"ontouchstart"in window&&fls.fvmobile){flowplayer.conf.native_fullscreen=true}if("ontouchstart"in window){if(fls.android&&fls.android.version<4.4&&!(fls.browser.chrome&&fls.browser.version>54)){flowplayer.conf.native_fullscreen=true}if(fls.iOS&&(fv_player_in_iframe()||fls.iOS.version<7)){flowplayer.conf.native_fullscreen=true}}}if(typeof fv_flowplayer_translations!="undefined"){flowplayer.defaults.errors=fv_flowplayer_translations}var fv_player_did_autoplay=false;function fv_player_videos_parse(args,root){try{var videos=JSON.parse(args)}catch(e){return false}var regex=new RegExp("[\\?&]fv_flowplayer_mobile=([^&#]*)");var results=regex.exec(location.search);if((results!=null&&results[1]=="yes"||(jQuery(window).width()<=480||jQuery(window).height()<=480))&&(results==null||results[1]!="no")){var fv_fp_mobile=false;jQuery(videos.sources).each(function(k,v){if(v.mobile){videos.sources[k]=videos.sources[0];videos.sources[0]=v;fv_fp_mobile=true}if(fv_fp_mobile){jQuery(root).after('<p class="fv-flowplayer-mobile-switch">'+fv_flowplayer_translations.mobile_browser_detected_1+' <a href="'+document.URL+'?fv_flowplayer_mobile=no">'+fv_flowplayer_translations.mobile_browser_detected_2+"</a>.</p>")}})}root.trigger("fv_player_videos_parse",videos);return videos}function fv_player_in_iframe(){try{return window.self!==window.top}catch(e){return true}}jQuery(document).ready(function(){var loading_count=0;var loading=setInterval(function(){loading_count++;if(loading_count<1e3&&(window.fv_video_intelligence_conf&&!window.FV_Player_IMA||window.fv_vast_conf&&!window.FV_Player_IMA||window.fv_player_pro&&!window.FV_Flowplayer_Pro&&document.getElementById("fv_player_pro")!=fv_player_pro||window.fv_player_user_playlists&&!fv_player_user_playlists.is_loaded||window.FV_Player_JS_Loader_scripts_total&&window.FV_Player_JS_Loader_scripts_loaded<FV_Player_JS_Loader_scripts_total)){return}clearInterval(loading);fv_player_preload()},10)});function fv_escape_attr(text){var map={"&":"&","<":"<",">":">",'"':""","'":"'"};return text.replace(/[&<>"']/g,function(m){return map[m]})}function fv_player_preload(){if(flowplayer.support.touch){jQuery(".fp-playlist-external.fv-playlist-design-2017").addClass("visible-captions")}flowplayer(function(api,root){if(localStorage.flowplayerTestStorage){delete localStorage.flowplayerTestStorage}root=jQuery(root);var fp_player=root.find(".fp-player");var splash_click=false;if(root.hasClass("fixed-controls")){root.find(".fp-controls").on("click",function(e){if(!api.loading&&!api.ready){e.preventDefault();e.stopPropagation();api.load()}})}if(!flowplayer.support.volume&&!flowplayer.support.autoplay){root.find(".fp-volume").hide()}if(root.data("volume")==0&&root.hasClass("no-controlbar")){root.find(".fp-volume").remove()}var playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]");if((!api.conf.playlist||api.conf.playlist.length==0)&&playlist.length&&playlist.find("a[data-item]").length>0){var items=[];playlist.find("a[data-item]").each(function(){if(parsed=fv_player_videos_parse(jQuery(this).attr("data-item"),root)){items.push(parsed)}else{jQuery(this).remove()}});api.conf.playlist=items;api.conf.clip=items[0]}else if(!api.conf.clip){api.conf.clip=fv_player_videos_parse(jQuery(root).attr("data-item"),root)}jQuery("a",playlist).on("click",function(e){e.preventDefault();splash_click=true;var $this=jQuery(this),playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]"),index=jQuery("a",playlist).index(this);$prev=$this.prev("a"),item=$this.data("item");if(location.href.match(/wp-admin/)&&$this.parents(".fv-player-editor-preview").length>0){fv_flowplayer_conf.current_video_to_edit=index;$this.parents(".fv-player-custom-video").find(".edit-video .fv-player-editor-button").trigger("click");return false}if($prev.length&&$this.is(":visible")&&!$prev.is(":visible")){$prev.trigger("click");return false}if(jQuery("#"+$this.parent().attr("rel")).hasClass("dynamic-playlist"))return;var playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]");fv_player_playlist_active(playlist,this);if(api){if(api.error){api.pause();api.error=api.loading=false;root.removeClass("is-error");root.find(".fp-message.fp-shown").remove()}if(!api.video||api.video.index==index)return;api.play(index)}var new_splash=item.splash;if(!new_splash){new_splash=$this.find("img").attr("src")}player_splash(root,fp_player,item,new_splash);var rect=root[0].getBoundingClientRect();if(rect.bottom-100<0){jQuery("html, body").animate({scrollTop:jQuery(root).offset().top-100},300)}});var playlist_external=jQuery("[rel="+root.attr("id")+"]");var playlist_progress=false;var splash_img=root.find(".fp-splash");var splash_text=root.find(".fv-fp-splash-text");function player_splash(root,fp_player,item,new_splash){var splash_img=root.find("img.fp-splash");if(new_splash){if(splash_img.length==0){splash_img=jQuery('<img class="fp-splash" />');fp_player.prepend(splash_img)}splash_img.attr("alt",item.fv_title?fv_escape_attr(item.fv_title):"video");splash_img.attr("src",new_splash)}else if(splash_img.length){splash_img.remove()}}api.bind("load",function(e,api,video){if(!api.conf.playlist.length){return}if(video.type.match(/^audio/)&&!splash_click){var anchor=playlist_external.find("a").eq(video.index);var item=anchor.data("item");var new_splash=item.splash;if(!new_splash){new_splash=anchor.find("img").attr("src")}player_splash(root,fp_player,item,new_splash)}splash_click=false});api.bind("ready",function(e,api,video){setTimeout(function(){if(video.index>-1){if(playlist_external.length>0){var playlist_item=jQuery("a",playlist_external).eq(video.index);fv_player_playlist_active(playlist_external,playlist_item);playlist_progress=playlist_item.find(".fvp-progress")}}},100);splash_img=root.find(".fp-splash");if(!video.is_audio_stream&&!video.type.match(/^audio/)){splash_img.remove();splash_text.remove()}});api.bind("unload",function(){jQuery(".fp-playlist-external .now-playing").remove();jQuery(".fp-playlist-external a").removeClass("is-active");var iframe=fp_player.find("iframe.fp-engine");if(iframe.length){iframe.after(splash_text);iframe.after(splash_img)}else{fp_player.prepend(splash_text);fp_player.prepend(splash_img)}playlist_progress=false});api.bind("progress",function(e,api,time){if(playlist_progress.length){api.playlist_thumbnail_progress(playlist_progress,api.video,time)}});api.bind("error-subtitles",function(){console.log("error-subtitles");fv_player_notice(root,fv_flowplayer_translations[8],2e3)});var playlist=jQuery(root).parent().find("div.fp-playlist-vertical[rel="+jQuery(root).attr("id")+"]");if(playlist.length){function check_size_and_all(args){var property=playlist.hasClass("fp-playlist-only-captions")?"height":"max-height";if(playlist.parents(".fp-playlist-text-wrapper").hasClass("is-fv-narrow")){property="max-height"}playlist.css(property,vertical_playlist_height());if(property=="max-height")playlist.css("height","auto")}check_size_and_all();jQuery(window).on("resize tabsactivate",function(){setTimeout(check_size_and_all,0)})}function vertical_playlist_height(args){var height=root.height();if(height==0)height=root.css("max-height");return height}api.show_status=function(type){var status="";["loading","ready","playing","paused","seeking"].every(function(v,k){if(api[v])status+=" "+v;return true});console.log("FV Player Status ("+type+")",status)};if(!window.fv_player_loaded){window.fv_player_loaded=true;setTimeout(function(){jQuery(document).trigger("fv_player_loaded");var event=new CustomEvent("fv_player_loaded",[]);document.dispatchEvent(event)},100)}setTimeout(function(){root.trigger("fv_player_loaded")},10)});if(window.self!=window.top&&!location.href.match(/fv_player_preview/)){embed_size();jQuery(window.self).resize(embed_size)}function embed_size(){jQuery(".flowplayer.fp-is-embed").each(function(){var root=jQuery(this);if(!root.hasClass("has-chapters")&&!root.hasClass("has-transcript")&&jQuery(".fp-playlist-external[rel="+root.attr("id")+"]").length==0){root.height(jQuery(window).height())}})}if(typeof fv_flowplayer_playlists!="undefined"){for(var i in fv_flowplayer_playlists){if(!fv_flowplayer_playlists.hasOwnProperty(i))continue;jQuery("#"+i).flowplayer({playlist:fv_flowplayer_playlists[i]})}}fv_player_load();fv_autoplay_exec();jQuery(document).ajaxComplete(function(){fv_player_load()});jQuery(window).on("hashchange",fv_autoplay_exec)}function fv_player_load(forced_el){if(forced_el&&forced_el.lenght>1){console.log("FV Player: Can't use fv_player_load with more than a single forced element!")}var load_players=forced_el,forced_api=false;if(!load_players)load_players=jQuery(".flowplayer");load_players.each(function(i,el){var root=jQuery(el);var api=root.data("flowplayer");if(api){if(forced_el)forced_api=api;return}if(forced_el){root.find(".fp-preload, .fvfp_admin_error").remove();if(root.attr("data-item-lazy")){root.attr("data-item",root.attr("data-item-lazy"));root.removeAttr("item-lazy")}else if(playlist=jQuery("[rel="+root.attr("id")+"]")){playlist.find("a[data-item-lazy]").each(function(k,v){v=jQuery(v);v.attr("data-item",v.attr("data-item-lazy"));v.removeAttr("data-item-lazy")})}}var conf=false;if(root.attr("data-item")){conf={clip:fv_player_videos_parse(root.attr("data-item"),root)}}else if(playlist=jQuery("[rel="+root.attr("id")+"]")){if(playlist.find("a[data-item]").length==0)return;var items=[];playlist.find("a[data-item]").each(function(){if(parsed=fv_player_videos_parse(jQuery(this).attr("data-item"),root)){items.push(parsed)}else{jQuery(this).remove()}});conf={playlist:items}}if(conf){conf=flowplayer.extend(conf,root.data());forced_api=flowplayer(root[0],conf);root.data("flowplayer",forced_api)}});jQuery(".fv-playlist-slider-wrapper").each(function(i,el){var items=jQuery(this).find("a");jQuery(this).find(".fp-playlist-external").css("width",items.outerWidth()*items.length)});if(typeof jQuery().tabs!="undefined"){jQuery("body").removeClass("fv_flowplayer_tabs_hide");jQuery(".fv_flowplayer_tabs_content").tabs()}if(forced_el&&forced_api){return forced_api}}function fv_player_playlist_active(playlist,item){if(playlist){jQuery("a",playlist).removeClass("is-active");jQuery(".now-playing").remove()}$playlist=jQuery(playlist);$item=jQuery(item);var scroll_parent=false;$item.addClass("is-active");var is_design_2014=$playlist.hasClass("fv-playlist-design-2014");if((is_design_2014&&$item.find("h4").length==0||!is_design_2014)&&$item.find(".now-playing").length==0)$item.prepend('<strong class="now-playing"><span>'+fv_flowplayer_translations.playlist_current+"</span></strong>");if(!$playlist.parent().find(".flowplayer").length){scroll_parent=true}if(($playlist.hasClass("fp-playlist-vertical")||$playlist.hasClass("fp-playlist-horizontal")&&$playlist.hasClass("is-audio"))&&!fullyVisibleY($item.get(0))){var $el=scroll_parent?$playlist.parent():$playlist;$el.animate({scrollTop:$el.scrollTop()+($item.position().top-$el.position().top)},750)}else if($playlist.hasClass("fp-playlist-horizontal")&&!fullyVisibleX($item.get(0))){var $el=scroll_parent?$playlist.parent():$playlist;$el.animate({scrollLeft:$el.scrollLeft()+($item.position().left-$el.position().left)},750)}function fullyVisibleY(el){var rect=el.getBoundingClientRect(),top=rect.top,height=rect.height,bottom=top+height,el=el.parentNode;do{rect=el.getBoundingClientRect();if(bottom<=rect.bottom===false)return false;if(top<=rect.top)return false;el=el.parentNode}while(el!=document.body);return bottom<=document.documentElement.clientHeight}function fullyVisibleX(el){var rect=el.getBoundingClientRect(),left=rect.left,width=rect.width,right=left+width,el=el.parentNode;do{rect=el.getBoundingClientRect();if(right<=rect.right===false)return false;if(left<=rect.left)return false;el=el.parentNode}while(el!=document.body);return right<=document.documentElement.clientWidth}}var fv_fp_date=new Date;var fv_fp_utime=fv_fp_date.getTime();function fv_parse_sharelink(src){src=src.replace("https?://[^./].","");var prefix="fvp_";if(src.match(/(youtube.com)/)){return prefix+src.match(/(?:v=)([A-Za-z0-9_-]*)/)[1]}else if(src.match(/(vimeo.com)|(youtu.be)/)){return prefix+src.match(/(?:\/)([^/]*$)/)[1]}else{var match=src.match(/(?:\/)([^/]*$)/);if(match){return prefix+match[1].match(/^[^.]*/)[0]}}return prefix+src}function fv_player_get_video_link_hash(api){var hash=fv_parse_sharelink(typeof api.video.sources_original!="undefined"&&typeof api.video.sources_original[0]!="undefined"?api.video.sources_original[0].src:api.video.sources[0].src);if(typeof api.video.id!="undefined"){hash=fv_parse_sharelink(api.video.id.toString())}return hash}function fv_player_time_hms(seconds){if(isNaN(seconds)){return NaN}var sec_num=parseInt(seconds,10);var hours=Math.floor(sec_num/3600);var minutes=Math.floor(sec_num/60)%60;var seconds=sec_num%60;if(hours){hours+="h"}else{hours=""}if(hours&&minutes<10){minutes="0"+minutes+"m"}else if(minutes){minutes+="m"}else{minutes=""}if((hours||minutes)&&seconds<10){seconds="0"+seconds}seconds+="s";var timeString=hours+minutes+seconds;return timeString}function fv_player_time_hms_ms(seconds){if(isNaN(seconds)){return NaN}seconds=parseFloat(seconds).toFixed(3);var miliseconds=(seconds+"").split(".");if(typeof miliseconds[1]!="undefined"&&miliseconds[1]>0){miliseconds=miliseconds[1]+"ms"}else{miliseconds=""}var timeString=fv_player_time_hms(seconds)+miliseconds;return timeString}function fv_player_time_seconds(time,duration){if(!time)return-1;var seconds=0;var match=time.match(/(\d+[a-z]{1,2})/g);match.forEach(function(item){if(item.endsWith("h")){seconds+=3600*parseInt(item)}else if(item.endsWith("m")){seconds+=60*parseInt(item)}else if(item.endsWith("s")&&!item.endsWith("ms")){seconds+=parseInt(item)}else if(item.endsWith("ms")){if(parseInt(item)){seconds+=parseInt(item)/1e3}}});return duration?Math.min(seconds,duration):seconds}function fv_autoplay_init(root,index,time,abStart,abEnd){if(fv_autoplay_exec_in_progress)return;fv_autoplay_exec_in_progress=true;var api=root.data("flowplayer");if(!api)return;var fTime=fv_player_time_seconds(time);abEnd=fv_player_time_seconds(abEnd);abStart=fv_player_time_seconds(abStart);if(root.parent().hasClass("ui-tabs-panel")){var tabId=root.parent().attr("id");jQuery("[aria-controls="+tabId+"] a").trigger("click")}if(!root.find(".fp-player").attr("class").match(/\bis-sticky/)){var offset=jQuery(root).offset().top-(jQuery(window).height()-jQuery(root).height())/2;window.scrollTo(0,offset);api.one("ready",function(){window.scrollTo(0,offset)})}if(root.hasClass("lightboxed")){setTimeout(function(){jQuery("[href=\\#"+root.attr("id")+"]").trigger("click")},0)}if(index){if(fv_player_video_link_autoplay_can(api,parseInt(index))){if(api.ready){fv_player_video_link_seek(api,fTime)}else{api.play(parseInt(index));api.one("ready",function(){fv_player_video_link_seek(api,fTime,abEnd,abStart)})}}else if(flowplayer.support.inlineVideo){api.one(api.playing?"progress":"ready",function(e,api){api.play(parseInt(index));api.one("ready",function(){fv_player_video_link_seek(api,fTime,abEnd,abStart)})});root.find(".fp-splash").attr("src",jQuery("[rel="+root.attr("id")+"] div").eq(index).find("img").attr("src"));if(!fv_player_in_iframe()){fv_player_notice(root,fv_flowplayer_translations[11],"progress")}}}else{if(api.ready){fv_player_video_link_seek(api,fTime)}else{if(fv_player_video_link_autoplay_can(api)){api.load()}else if(!fv_player_in_iframe()){fv_player_notice(root,fv_flowplayer_translations[11],"progress")}api.one("ready",function(){fv_player_video_link_seek(api,fTime,abEnd,abStart)})}}}function fv_player_video_link_seek(api,fTime,abEnd,abStart){fv_autoplay_exec_in_progress=false;var do_seek=setInterval(function(){if(api.loading)return;if(fTime>0||api.video.time>0){if(!!api.custom_seek){api.custom_seek(fTime)}else{api.seek(fTime)}}if(abEnd&&abStart)api.trigger("link-ab",[api,abStart,abEnd]);clearInterval(do_seek)},10)}var fv_autoplay_exec_in_progress=false;function fv_autoplay_exec(){var autoplay=true;if(typeof flowplayer!=="undefined"&&typeof fv_flowplayer_conf!="undefined"&&fv_flowplayer_conf.video_hash_links&&window.location.hash.substring(1).length){var aHash=window.location.hash.match(/\?t=/)?window.location.hash.substring(1).split("?t="):window.location.hash.substring(1).split(",");var hash=aHash[0];var time=aHash[1]===undefined?false:aHash[1];var abStart=aHash[2]===undefined?false:aHash[2];var abEnd=aHash[3]===undefined?false:aHash[3];jQuery(".flowplayer").each(function(){var root=jQuery(this);if(root.hasClass("lightbox-starter")){root=jQuery(root.attr("href"))}var api=root.data("flowplayer");if(!api)return;var playlist=typeof api.conf.playlist!=="undefined"&&api.conf.playlist.length>1?api.conf.playlist:[api.conf.clip];for(var item in playlist){if(!playlist.hasOwnProperty(item))continue;var id=typeof playlist[item].id!=="undefined"?fv_parse_sharelink(playlist[item].id.toString()):false;if(hash===id&&autoplay){console.log("fv_autoplay_exec for "+id,item);fv_autoplay_init(root,parseInt(item),time,abStart,abEnd);autoplay=false;return false}}for(var item in playlist){if(!playlist.hasOwnProperty(item))continue;var src=fv_parse_sharelink(playlist[item].sources[0].src);if(hash===src&&autoplay){console.log("fv_autoplay_exec for "+src,item);fv_autoplay_init(root,parseInt(item),time,abStart,abEnd);autoplay=false;return false}}})}if(autoplay&&flowplayer.support.firstframe){jQuery(".flowplayer[data-fvautoplay]").each(function(){var root=jQuery(this),api=root.data("flowplayer"),autoplay=root.attr("data-fvautoplay");if(!fv_player_did_autoplay&&autoplay){if((flowplayer.support.android||flowplayer.support.iOS)&&api&&api.conf.clip.sources[0].type=="video/youtube"){console.log("FV Player: Autoplay for YouTube not supported on Android and iOS");return}else{fv_player_did_autoplay=true;if(api.conf.playlist.length&&!isNaN(parseFloat(autoplay))&&isFinite(autoplay)){api.play(parseInt(autoplay))}else{api.load()}var play_icon=root.find(".fp-play").addClass("invisible"),control_bar=root.find(".fp-controls").addClass("invisible");api.one("progress",function(){play_icon.removeClass("invisible");control_bar.removeClass("invisible")});if(autoplay=="muted"){api.mute(true,true)}}}})}}function fv_player_video_link_autoplay_can(api,item){var video=item?api.conf.playlist[item]:api.conf.clip;if(video.sources[0].type=="video/youtube"&&(flowplayer.support.iOS||flowplayer.support.android)||fv_player_in_iframe())return false;return flowplayer.support.firstframe}function fv_player_notice(root,message,timeout){var notices=jQuery(".fvfp-notices",root);if(!notices.length){notices=jQuery('<div class="fvfp-notices">');jQuery(".fp-player",root).append(notices)}var notice=jQuery('<div class="fvfp-notice-content">'+message+"</div></div>");notices.append(notice);if(typeof timeout=="string"){var player=jQuery(root).data("flowplayer");player.on(timeout,function(){notice.fadeOut(100,function(){jQuery(this).remove()})})}if(timeout>0){setTimeout(function(){notice.fadeOut(2e3,function(){jQuery(this).remove()})},timeout)}return notice}var fv_player_clipboard=function(text,successCallback,errorCallback){try{fv_player_doCopy(text);successCallback()}catch(e){if(typeof errorCallback!="undefined")errorCallback(e)}};function fv_player_doCopy(text){var textarea=document.createElement("textarea");textarea.value=text;textarea.style.opacity=0;textarea.style.position="absolute";textarea.setAttribute("readonly",true);document.body.appendChild(textarea);var selected=document.getSelection().rangeCount>0?document.getSelection().getRangeAt(0):false;if(navigator.userAgent.match(/ipad|ipod|iphone/i)){var editable=textarea.contentEditable;textarea.contentEditable=true;var range=document.createRange();range.selectNodeContents(textarea);var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range);textarea.setSelectionRange(0,999999);textarea.contentEditable=editable}else{textarea.select()}try{var result=document.execCommand("copy");if(selected){document.getSelection().removeAllRanges();document.getSelection().addRange(selected)}document.body.removeChild(textarea);return result}catch(err){throw new Error("Unsuccessfull")}}flowplayer(function(api,root){root=jQuery(root);if(typeof api.conf.disable_localstorage!="undefined"){return}var hlsjs;flowplayer.engine("hlsjs-lite").plugin(function(params){hlsjs=params.hls;hlsjs.on(Hls.Events.ERROR,function(event,data){if(data.type=="mediaError"&&data.details=="fragParsingError"&&data.fatal==true){hlsjs.destroy();api.trigger("error",[api,{code:3}]);setTimeout(function(){root.removeClass("is-seeking");root.addClass("is-paused")},0)}});if(flowplayer.support.browser.safari){hlsjs.on(Hls.Events.KEY_LOADED,function(event){if(event=="hlsKeyLoaded"){setTimeout(function(){if(api.loading){console.log("FV Player: Safari stuck loading HLS, resuming playback...");api.resume()}},0)}})}var pick_quality=flowplayer.conf.hd_streaming&&!flowplayer.support.fvmobile?720:false;if(jQuery(params.root).data("hd_streaming")==false)pick_quality=false;if(localStorage.FVPlayerHLSQuality)pick_quality=localStorage.FVPlayerHLSQuality;if(pick_quality){hlsjs.on(Hls.Events.MANIFEST_PARSED,function(_,data){var found=false;jQuery.each(data.levels,function(k,v){if(v.height==pick_quality)found=k});if(!localStorage.FVPlayerHLSQuality&&!found){jQuery.each(data.levels,function(k,v){if(v.height>found)found=k})}if(found){console.log("FV Player: Picked "+data.levels[found].height+"p quality");hlsjs.startLevel=found;hlsjs.currentLevel=found}})}});root=jQuery(root);var search=document.location.search;if(localStorage.FVPlayerDashQuality){if(!api.conf.dash)api.conf.dash={};api.conf.dash.initialVideoQuality="restore"}root.on("click",".fp-qsel-menu a",function(){if(api.engine.engineName=="hlsjs-lite"){var quality=jQuery(this).data("quality");if(quality==-1){localStorage.removeItem("FVPlayerHLSQuality")}else{var level=hlsjs.levels[quality];localStorage.FVPlayerHLSQuality=level.height}}});if(localStorage.FVPlayerHLSQuality){api.conf.hlsjs.startLevel=parseInt(localStorage.FVPlayerHLSQuality);api.conf.hlsjs.testBandwidth=false;api.conf.hlsjs.autoLevelEnabled=false}else if(flowplayer.conf.hd_streaming&&!flowplayer.support.fvmobile){api.conf.hlsjs.startLevel=3;api.conf.hlsjs.testBandwidth=false;api.conf.hlsjs.autoLevelEnabled=false}api.bind("quality",function(e,api,quality){if(api.engine.engineName=="dash"){if(quality==-1){localStorage.removeItem("FVPlayerDashQuality")}else if(bitrates[quality]){localStorage.FVPlayerDashQuality=bitrates[quality].height}}});var bitrates=[];var last_quality=-1;api.bind("ready",function(e,api){root.find(".fp-qsel-menu strong").text(fv_flowplayer_translations.quality);if(api.engine.engineName=="dash"){bitrates=api.engine.dash.getBitrateInfoListFor("video");if(localStorage.FVPlayerDashQuality&&api.conf.dash.initialVideoQuality){api.quality(api.conf.dash.initialVideoQuality)}quality_sort()}else if(api.engine.engineName=="hlsjs-lite"){root.addClass("is-loading");api.loading=true;api.one("progress",function(){if(api.loading){root.removeClass("is-loading");api.loading=false}});if(api.video.qualities&&api.video.qualities.length>2){var qswitch=-1;if(localStorage.FVPlayerHLSQuality){jQuery(api.video.qualities).each(function(k,v){if(v.value==localStorage.FVPlayerHLSQuality){qswitch=localStorage.FVPlayerHLSQuality;return false}})}else if(flowplayer.conf.hd_streaming&&!flowplayer.support.fvmobile){jQuery(api.video.qualities).each(function(k,v){var height=parseInt(v.label);if(height>0&&qswitch==-1&&height>=720&&height<=720){qswitch=v.value}})}qswitch=parseInt(qswitch);if(qswitch>-1){root.one("progress",function(){setTimeout(function(){api.quality(qswitch)})})}quality_sort()}}else if(api.video.sources_fvqs&&api.video.sources_fvqs.length>0&&api.video.src.match(/vimeo.*?\.mp4/)){setTimeout(quality_sort,0)}root.find("a[data-quality]").removeClass("is-current")});if(search.match(/dash_debug/)||search.match(/hls_debug/))var debug_log=jQuery('<div class="fv-debug" style="background: gray; color: white; top: 10%; position: absolute; z-index: 1000">').appendTo(root.find(".fp-player"));api.bind("ready progress",quality_process);api.bind("quality",function(){setTimeout(quality_process,0)});function quality_process(){if(api.engine.engineName=="dash"){var stream_info=bitrates[api.engine.dash.getQualityFor("video")];if(stream_info.qualityIndex!=last_quality){last_quality=stream_info.qualityIndex;quality_label(stream_info.qualityIndex,bitrates)}if(search.match(/dash_debug/))quality_debug(stream_info.width,stream_info.height,stream_info.bitrate)}else if(api.engine.engineName=="hlsjs-lite"){if(hlsjs.currentLevel!=last_quality){last_quality=hlsjs.currentLevel;quality_label(hlsjs.currentLevel,hlsjs.levels)}if(search.match(/hls_debug/)){var level=hlsjs.levels[hlsjs.currentLevel];if(level){quality_debug(level.width,level.height,level.bitrate)}}}}function quality_label(index,qualities){if(!qualities[index])return;var height=qualities[index].height,hd_limit=541,lowest=1e5;jQuery(qualities).each(function(k,v){if(v.height>=720&&v.height<1400)hd_limit=720;if(v.height<lowest)lowest=v.height;if(localStorage.FVPlayerHLSQuality==v.height){root.find("a[data-quality]").removeClass("fp-selected fp-color");root.find("a[data-quality="+k+"]").addClass("fp-selected fp-color")}});root.find("a[data-quality]").removeClass("is-current");root.find("a[data-quality="+index+"]").addClass("is-current");var label="SD";if(height>=360&&lowest<height)label="SD";if(height>=hd_limit)label="HD";if(height>=1400)label="4K";root.find(".fp-qsel").html(label)}function quality_debug(w,h,br){debug_log.html("Using "+w+"x"+h+" at "+Math.round(br/1024)+" kbps")}function quality_sort(){var menu=root.find(".fp-qsel-menu");menu.children().each(function(i,a){menu.prepend(a)});menu.children().each(function(i,a){if(/^NaNp/.test(jQuery(a).html())){var bitrate=jQuery(a).html().match(/\((.*?)\)/);if(bitrate&&typeof bitrate[1]!=="undefined"){jQuery(a).html(bitrate[1])}}else{jQuery(a).html(jQuery(a).html().replace(/\(.*?\)/,""))}});menu.prepend(menu.find("a[data-quality=-1]"));menu.prepend(menu.find("strong"))}});flowplayer(function(api,root){root=jQuery(root);var player_id=root.attr("id"),ad=false;if(root.data("end_popup_preview")){jQuery(document).ready(function(){api.trigger("finish",[api])})}function ad_height_check(){var count=0;var ad_height_check=setInterval(function(){var height=ad&&ad.find(".adsbygoogle").height();count++;if(count>20*10||height>0)clearInterval(ad_height_check);if(height>root.height()){ad.addClass("tall-ad")}},50)}function show_ad(){var ad_data=root.attr("data-ad");if(typeof ad_data!="undefined"&&ad_data.length){try{ad_data=JSON.parse(ad_data)}catch(e){return false}if(!ad&&!root.hasClass("is-cva")&&root.width()>=parseInt(ad_data.width)){var html=ad_data.html;html=html.replace("%random%",Math.random());ad=jQuery('<div id="'+player_id+'_ad" class="wpfp_custom_ad">'+html+"</div>");root.find(".fp-player").append(ad);ad_height_check();setTimeout(function(){if(root.find(".wpfp_custom_ad video").length){api.pause()}},500)}}}function show_popup(event){var popup_data=root.attr("data-popup");if(typeof popup_data!="undefined"&&popup_data.length){try{popup_data=JSON.parse(popup_data)}catch(e){return false}if(event=="finish"||popup_data.pause||popup_data.html.match(/fv-player-ppv-purchase-btn-wrapper/)){root.addClass("is-popup-showing");root.find(".fp-player").append('<div id="'+player_id+'_custom_popup" class="wpfp_custom_popup">'+popup_data.html+"</div>")}}}api.bind("ready",function(e,api){if(ad.length==1){ad.remove();ad=false}if(!root.data("ad_show_after")){show_ad()}}).bind("progress",function(e,api,current){if(current>root.data("ad_show_after")){show_ad()}}).bind("finish",function(e,api){if(typeof api.video.index=="undefined"||api.video.index+1==api.conf.playlist.length){show_popup(e.type)}}).bind("pause",function(e,api){show_popup(e.type)}).bind("resume unload seek",function(e,api){if(root.hasClass("is-popup-showing")){root.find(".wpfp_custom_popup").remove();root.removeClass("is-popup-showing")}})});jQuery(document).on("click",".fv_fp_close",function(){var ad=jQuery(this).parents(".wpfp_custom_ad_content"),video=ad.find("video");ad.fadeOut();if(video.length)video[0].pause();return false});jQuery(document).on("focus",".fv_player_popup input[type=text], .fv_player_popup input[type=email], .fv_player_popup textarea",function(){var api=jQuery(this).parents(".flowplayer").data("flowplayer");if(api)api.disable(true)});jQuery(document).on("blur",".fv_player_popup input[type=text], .fv_player_popup input[type=email], .fv_player_popup textarea",function(){var api=jQuery(this).parents(".flowplayer").data("flowplayer");if(api)api.disable(false)});flowplayer(function(api,root){api.on("ready",function(e,api,video){api.one("progress",function(){jQuery(root).find(".fp-airplay").toggle(api.engine.engineName=="html5")})})});flowplayer(function(api,root){var root=jQuery(root),bean=flowplayer.bean,time=0,last=0,timer,event_name;if(typeof ga=="undefined"&&api.conf.fvanalytics&&typeof _gat=="undefined"&&typeof gtag=="undefined"){if(is_ga_4(api)){jQuery.getScript({url:"https://www.googletagmanager.com/gtag/js?id="+api.conf.fvanalytics,cache:true},function(){window.dataLayer=window.dataLayer||[];window.gtag=function(){window.dataLayer.push(arguments)};window.gtag("js",new Date);window.gtag("config",api.conf.fvanalytics)})}else{jQuery.getScript({url:"https://www.google-analytics.com/analytics.js",cache:true},function(){ga("create",api.conf.fvanalytics,"auto")})}}if(!window._paq&&api.conf.matomo_domain&&api.conf.matomo_site_id){var u="//"+api.conf.matomo_domain+"/";var _paq=window._paq=window._paq||[];_paq.push(["setTrackerUrl",u+"matomo.php"]);_paq.push(["setSiteId",api.conf.matomo_site_id]);var d=document,g=d.createElement("script"),s=d.getElementsByTagName("script")[0];g.type="text/javascript";g.async=true;g.src=u+"matomo.js";s.parentNode.insertBefore(g,s)}api.bind("progress",function(e,api,current){fv_track(e,api,current)}).bind("finish ready ",function(e,api){for(var j in fv_ga_events){if(!fv_ga_events.hasOwnProperty(j))continue;root.removeData("fv_track_"+fv_ga_events[j])}}).bind("error",function(e,api,error){setTimeout(function(){if(!api.error)return;var video=typeof api.video!="undefined"&&typeof api.video.src!="undefined"?api.video:false;if(!video&&typeof api.conf.clip!="undefined"&&typeof api.conf.clip.sources!="undefined"&&typeof api.conf.clip.sources[0]!="undefined"&&typeof api.conf.clip.sources[0].src!="undefined")video=api.conf.clip.sources[0];var name=fv_player_track_name(root,video);if(name&&!name.match(/\/\/vimeo.com\/\d/)){if(is_ga_4(api)){}else{fv_player_track(api,false,"Video "+(root.hasClass("is-cva")?"Ad ":"")+"error",error.message,name)}}},100)});api.bind("load unload",fv_track_seconds_played).bind("progress",function(e,api){if(!api.seeking){time+=last?+new Date-last:0;last=+new Date}if(!timer){timer=setTimeout(function(){timer=null;if(!is_ga_4(api)){fv_player_track(api,false,"Flowplayer heartbeat",api.engine.engineName+"/"+api.video.type,"Heartbeat",0)}},10*60*1e3)}}).bind("pause",function(){last=0});api.bind("shutdown",function(){bean.off(window,"unload",fv_track_seconds_played)});bean.on(window,"unload",fv_track_seconds_played);var fv_ga_events=is_ga_4(api)?["Play","25 Percent Played","50 Percent Played","75 Percent Played","100 Percent Played"]:["start","first quartile","second quartile","third quartile","complete"];function fv_track_seconds_played(e,api_not_needed,video){video=video||api.video;if(e.type==="load"){event_name=fv_player_track_name(root,video)}if(time){fv_player_track(api,false,"Video / Seconds played",api.engine.engineName+"/"+api.video.type,event_name,Math.round(time/1e3));time=0;if(timer){clearTimeout(timer);timer=null}}}function fv_track(e,api,data){var video=api.video,dur=video.duration,i=0;var name=fv_player_track_name(root,video);if(dur){if(data>19*dur/20)i=4;else if(data>3*dur/4)i=3;else if(data>dur/2)i=2;else if(data>dur/4)i=1}if(api.live)i=0;if(root.data("fv_track_"+fv_ga_events[i]))return;for(var j in fv_ga_events){if(!fv_ga_events.hasOwnProperty(j))continue;if(j==i)break;if(!root.data("fv_track_"+fv_ga_events[j]))return}root.trigger("fv_track_"+fv_ga_events[i].replace(/ /,"_"),[api,name]);root.data("fv_track_"+fv_ga_events[i],true);fv_player_track(api,false,"Video "+(root.hasClass("is-cva")?"Ad ":"")+fv_ga_events[i],api.engine.engineName+"/"+video.type,name)}api.get_time_played=function(){return time/1e3}});function is_ga_4(api){if(typeof api.conf.fvanalytics!="undefined"&&api.conf.fvanalytics&&api.conf.fvanalytics.startsWith("G-"))return true;return false}function fv_player_track(api,ga_id,event,engineType,name,value){if(!ga_id)ga_id=flowplayer.conf.fvanalytics;if(typeof engineType=="undefined")engineType="Unknown engine";if(/fv_player_track_debug/.test(window.location.href))console.log("FV Player Track: "+event+" - "+engineType+" '"+name+"'",value);if(typeof gtag!="undefined"){if(is_ga_4(api)){gtag("event",event,{video_current_time:api.video.time,video_provider:engineType,video_duration:api.video.duration,value:value?value:1})}else{gtag("event",event,{event_category:engineType,event_label:name,value:value?value:1})}}else if(ga_id&&typeof ga!="undefined"){ga("create",ga_id,"auto",name,{allowLinker:true});ga("require","linker");if(value){ga("send","event",event,engineType,name,value)}else{ga("send","event",event,engineType,name)}}else if(ga_id&&typeof _gat!="undefined"){var tracker=_gat._getTracker(ga_id);if(typeof tracker._setAllowLinker=="undefined"){return}tracker._setAllowLinker(true);if(value){tracker._trackEvent(event,engineType,name,value)}else{tracker._trackEvent(event,engineType,name)}}if(flowplayer.conf.matomo_domain&&flowplayer.conf.matomo_site_id&&typeof _paq!="undefined"){if(value){_paq.push(["trackEvent",event,engineType,name,value])}else{_paq.push(["trackEvent",event,engineType,name])}}}function fv_player_track_name(root,video){var name=root.attr("title");if(!name&&typeof video.fv_title!="undefined")name=video.fv_title;if(!name&&typeof video.title!="undefined")name=video.title;if(!name&&typeof video.src!="undefined"){name=video.src.split("/").slice(-1)[0].replace(/\.(\w{3,4})(\?.*)?$/i,"");if(video.type.match(/mpegurl/))name=video.src.split("/").slice(-2)[0].replace(/\.(\w{3,4})(\?.*)?$/i,"")+"/"+name}return name}flowplayer(function(api,root){root=jQuery(root);var player=root.find(".fp-player"),had_no_volume=root.hasClass("no-volume"),had_fp_mute=root.hasClass("fp-mute"),had_fp_full=root.hasClass("fp-full"),buttons_count=0;function check_size(){var width=player.width()||root.width(),video_index=api.video.index?api.video.index:0;if(width>900){jQuery(".fp-subtitle",root).addClass("is-wide")}else{jQuery(".fp-subtitle",root).removeClass("is-wide")}root.toggleClass("is-tiny",width<400);root.toggleClass("is-small",width<600&&width>=400);var too_narrow=width<480+buttons_count*35;if(typeof api.fv_timeline_chapters_data!="undefined"&&typeof api.fv_timeline_chapters_data[video_index]!="undefined"){too_narrow=true}if(!had_fp_full){root.toggleClass("fp-full",root.hasClass("has-abloop")||too_narrow)}var size="";if(width<400)size="is-tiny";else if(width<600&&width>=400)size="is-small";root.trigger("fv-player-size",[size]);var el=player;if(root.parent().hasClass("fp-playlist-vertical-wrapper")||root.parent().hasClass("fp-playlist-text-wrapper"))el=root.parent();if(el.width()<=560){el.addClass("is-fv-narrow")}else{el.removeClass("is-fv-narrow")}if(width<=320){root.addClass("no-volume fp-mute")}else{if(!had_no_volume)root.removeClass("no-volume");if(!had_fp_mute)root.removeClass("fp-mute")}}check_size();jQuery(window).on("resize",check_size);api.on("ready fullscreen fullscreen-exit sticky sticky-exit",function(e){setTimeout(function(){buttons_count=root.find(".fp-controls > strong:visible").length+root.find(".fp-controls > .fp-icon:visible").length;check_size()},0)});api.on("unload pause finish error",function(){if(typeof checker!=="undefined")clearInterval(checker)})});jQuery(window).on("resize tabsactivate",function(){jQuery(".fp-playlist-external").each(function(){var playlist=jQuery(this);if(playlist.parent().width()>=900)playlist.addClass("is-wide");else playlist.removeClass("is-wide")})}).trigger("resize");flowplayer(function(api,root){api.bind("ready",function(){if(/Chrome/.test(navigator.userAgent)&&parseFloat(/Chrome\/(\d\d)/.exec(navigator.userAgent)[1],10)>54){if(api.video.subtitles){jQuery(root).addClass("chrome55fix-subtitles")}else{jQuery(root).addClass("chrome55fix")}}});root=jQuery(root);var image_src=root.css("background-image");if(image_src){image_src=image_src.replace(/url\((['"])?(.*?)\1\)/gi,"$2").split(",");if(!image_src||!image_src[0].match(/^(https?:)?\/\//))return;var image=new Image;image.src=image_src[0];var image_ratio=image.height/image.width;var player_ratio=root.height()/root.width();var ratio_diff=Math.abs(player_ratio-image_ratio);if(ratio_diff<.05){root.css("background-size","cover")}}});(function($){$(window).on("resize",function(){var iframe=$("iframe[id][src][height][width]");iframe.each(function(){if($(this).attr("id").match(/(fv_vimeo_)|(fv_ytplayer_)/)&&$(this).width()<=$(this).attr("width"))$(this).height($(this).width()*$(this).attr("height")/$(this).attr("width"))});var wistia=jQuery(".wistia_embed");wistia.each(function(){$(this).height($(this).width()*$(this).data("ratio"))})}).trigger("resize")})(jQuery);jQuery(document).on("tabsactivate",".fv_flowplayer_tabs_content",function(event,ui){var oldPlayer=jQuery(ui.oldPanel).find(".flowplayer").data("flowplayer");if(typeof oldPlayer!="undefined"){oldPlayer.pause()}var objPlayer=jQuery(".flowplayer",ui.newPanel);var api=objPlayer.data("flowplayer");api.load()});flowplayer(function(api,root){root=jQuery(root);var bean=flowplayer.bean;if(root.hasClass("is-audio")){bean.off(root[0],"mouseenter");bean.off(root[0],"mouseleave");root.removeClass("is-mouseout");root.addClass("fixed-controls").addClass("is-mouseover");api.on("error",function(e,api,error){jQuery(".fp-message",root).html(jQuery(".fp-message",root).html().replace(/video/,"audio"))});root.on("click",function(e){if(!api.ready){e.preventDefault();e.stopPropagation();api.load()}})}});flowplayer(function(api,root){if(!api.conf.fv_chromecast)return;if(!window["__onGCastApiAvailable"]){jQuery.getScript({url:"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js",cache:true});window["__onGCastApiAvailable"]=function(loaded){if(!loaded)return;initialize()}}var conf=api.conf.chromecast||{},session,timer,trigger,bean=flowplayer.bean,common=flowplayer.common,waiting_for_seek=false;function initialize(){var applicationId,sessionRequest,apiConfig;applicationId=conf.applicationId||chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID;sessionRequest=new chrome.cast.SessionRequest(applicationId);apiConfig=new chrome.cast.ApiConfig(sessionRequest,sessionListener,receiverListener);chrome.cast.initialize(apiConfig,onInitSuccess,onError)}function sessionListener(){}function receiverListener(ev){console.log("FV Player: Chromecast listener",ev);if(ev!==chrome.cast.ReceiverAvailability.AVAILABLE)return;flowplayer.conf.chromecast_available=true}function onInitSuccess(){}function onError(){console.log("chromecast onError")}function createUIElements(){var btnContainer=common.find(".fp-header",root)[0];if(!btnContainer)return;common.find(".fp-chromecast",btnContainer).forEach(common.removeNode);common.find(".fp-chromecast-engine",root).forEach(common.removeNode);trigger=common.createElement("a",{class:"fp-chromecast fp-icon",title:"Play on Cast device"});btnContainer.appendChild(trigger);var chromeCastEngine=common.createElement("div",{class:"fp-chromecast-engine"}),chromeCastStatus=common.createElement("p",{class:"fp-chromecast-engine-status"}),chromeCastIcon=common.createElement("p",{class:"fp-chromecast-engine-icon"});chromeCastEngine.appendChild(chromeCastIcon);chromeCastEngine.appendChild(chromeCastStatus);var engine=common.find(".fp-engine",root)[0];if(!engine)common.prepend(common.find(".fp-player",root)[0]||root,chromeCastEngine);else engine.parentNode.insertBefore(chromeCastEngine,engine)}function destroy(){clearInterval(timer);timer=null;api.release();common.toggleClass(root,"is-chromecast",false);common.toggleClass(trigger,"fp-active",false)}function get_media(){var media=false;var sources=api.video.sources_fvqs||api.video.sources;for(var i in sources){var type=sources[i].type;if(type=="video/mp4"||type=="video/fv-mp4"||type=="application/dash+xml"){media=sources[i];break}}if(!media){for(var i in sources){if(sources[i].type=="application/x-mpegurl"){media=sources[i];break}}}if(api.video.fvhkey&&!api.conf.hls_cast)return false;if(media){var top_quality=false,mp4_qualities=["fullhd","hd","md","sd"];for(var quality in mp4_qualities){var re=new RegExp("-"+mp4_qualities[quality]);for(var i in api.video.sources_fvqs){var source=api.video.sources_fvqs[i];if(source.src.match(re)&&source.type=="video/mp4"){top_quality=source;break}}if(top_quality){media=top_quality;break}}}return media}function load_media(){var media=get_media();if(!media){return false}var cast_subtitles=[];if(api.video.subtitles){api.video.subtitles.forEach(function(v,k){if(v.src.match(/\.srt/)){console.log("FV Player: Chromecast doesn't support SRT subtitles")}var subtitles=new chrome.cast.media.Track(k,chrome.cast.media.TrackType.TEXT);subtitles.trackContentId=v.src;subtitles.trackContentType="text/vtt";subtitles.subtype=chrome.cast.media.TextTrackType.SUBTITLES;subtitles.name=v.label;subtitles.language=v.srclang+"-"+k,subtitles.customData=null;cast_subtitles.push(subtitles)})}var mediaInfo=new chrome.cast.media.MediaInfo(media.src,media.type);mediaInfo.tracks=cast_subtitles;var request=new chrome.cast.media.LoadRequest(mediaInfo);if(!api.live){request.currentTime=api.video.time}clearInterval(timer);timer=false;session.loadMedia(request,onMediaDiscovered,function onMediaError(e){console.log("onMediaError",e)})}function onMediaDiscovered(chromecast){switch_tracks(chromecast);chromecast.addUpdateListener(function(alive){if(!session)return;timer=timer||setInterval(function(){api.trigger("progress",[api,chromecast.getEstimatedTime()]);chromecast.activeTrackIds.forEach(function(track_id){jQuery.each(chromecast.media.tracks,function(k,v){if(v.trackId==track_id&&v.type=="AUDIO"){var found=hilight_audio_track("data-audio",v.language);if(!found){hilight_audio_track("data-lang",v.language)}return false}})})},500);if(alive){common.toggleClass(root,"is-chromecast",true);common.toggleClass(trigger,"fp-active",true);api.hijack({pause:function(){console.log("hijacked pause!");chromecast.pause()},resume:function(){if(api.finished){clearInterval(timer);timer=null;api.release();load_media();return}chromecast.play()},seek:function(time){var req=new chrome.cast.media.SeekRequest;req.currentTime=time;chromecast.seek(req)}})}var playerState=chromecast.playerState;if(api.paused&&playerState===chrome.cast.media.PlayerState.PLAYING)api.trigger("resume",[api]);if(api.playing&&playerState===chrome.cast.media.PlayerState.PAUSED)api.trigger("pause",[api]);if(api.seeking&&playerState===chrome.cast.media.PlayerState.BUFFERING){waiting_for_seek=true}if(api.seeking&&playerState===chrome.cast.media.PlayerState.PLAYING&&waiting_for_seek){waiting_for_seek=false;api.trigger("seek",[api])}if(playerState==chrome.cast.media.PlayerState.IDLE&&chromecast.idleReason==chrome.cast.media.IdleReason.FINISHED){api.trigger("finish",[api])}common.toggleClass(root,"is-loading",playerState===chrome.cast.media.PlayerState.BUFFERING)})}api.bind("ready",function(e,api,video){if(session){if(get_media()){api.one("progress",function(e,api){api.release();api.pause();api.mute(false,true);load_media()});api.mute(true,true)}else{session.stop();session=null;destroy();jQuery(trigger).hide()}return}if(!flowplayer.conf.chromecast_available)return;if(get_media()){createUIElements();jQuery(trigger).show()}else{FV_Flowplayer_Pro.log("FV Player: Can't find media source suitable for Chromecast!");jQuery(trigger).hide()}});bean.on(root,"click",".fp-chromecast",function(ev){ev.preventDefault();if(session){api.trigger("pause",[api]);if(session.media[0].media){var seek=session.media[0].getEstimatedTime();setTimeout(function(){api.seek(seek)},0)}session.stop();session=null;destroy();return}if(api.playing)api.pause();chrome.cast.requestSession(function(s){jQuery(root).addClass("is-loading");session=s;var receiverName=session.receiver.friendlyName;common.html(common.find(".fp-chromecast-engine-status",root)[0],"Playing on device "+receiverName);load_media()},function(err){console.error("requestSession error",err)})});bean.on(root,"click",".fv-fp-hls-menu [data-audio], .fp-subtitle-menu [data-subtitle-index]",function(){if(session&&session.media[0].media){switch_tracks(session.media[0]);return false}});jQuery(window).on("unload",function(){if(session){session.stop()}});function hilight_audio_track(attr,chromecast_language){var audio_tracks_menu=jQuery(root).find(".fv-fp-hls-menu a"),found=false;audio_tracks_menu.each(function(k,el){if(jQuery(el).attr(attr)===chromecast_language){jQuery(el).addClass("fp-selected");found=true}else{jQuery(el).removeClass("fp-selected")}});return found}function switch_tracks(chromecast){console.log(chromecast.media.tracks);var audio=jQuery(root).find(".fv-fp-hls-menu [data-audio].fp-selected").data("audio"),audio_lang=jQuery(root).find(".fv-fp-hls-menu [data-audio].fp-selected").data("lang"),subtitle_index=jQuery(root).find(".fp-subtitle-menu [data-subtitle-index].fp-selected").data("subtitle-index"),subtitles=subtitle_index>-1?api.video.subtitles[subtitle_index].srclang:false;var audio_found=false,subtitles_found=false,tracks_selected=[];jQuery.each(chromecast.media.tracks,function(k,v){if(v.language==audio&&v.type=="AUDIO"){audio_found=v}if(v.language==subtitles+"-"+subtitle_index&&v.type=="TEXT"){subtitles_found=v}});if(!audio_found){jQuery.each(chromecast.media.tracks,function(k,v){if(v.language==audio_lang&&v.type=="AUDIO"){audio_found=v;return false}})}var debug_log="";if(audio_found){tracks_selected.push(audio_found.trackId);debug_log+=audio_found.language+" audio"}if(subtitles_found){tracks_selected.push(subtitles_found.trackId);if(debug_log)debug_log+=" ";debug_log+=subtitles_found.language+" subtitles"}if(tracks_selected){var request=new chrome.cast.media.EditTracksInfoRequest(tracks_selected);chromecast.editTracksInfo(request,function(){console.log("FV Player: Chromecast "+debug_log+" loaded")},function(){console.log("FV Player: Chromecast "+debug_log+" failed")})}}});jQuery(document).on("mfpClose",function(){if(typeof jQuery(".flowplayer").data("flowplayer")!="undefined")jQuery(".flowplayer").data("flowplayer").unload()});jQuery(document).on("click",".vc_tta-tab a",function(){var api=jQuery(".flowplayer.is-playing").data("flowplayer");if(api)api.pause()});flowplayer(function(api,root){root=jQuery(root);api.bind("ready",function(){setTimeout(function(){var video=jQuery("video",root);if(video.length>0){video.prop("autoplay",false)}},100);root.find("video.fp-engine").addClass("intrinsic-ignore")})});jQuery(".flowplayer").on("ready",function(e,api){if(/BB10/.test(navigator.userAgent)){api.fullscreen()}});var fv_flowplayer_safety_resize_arr=Array();function fv_flowplayer_safety_resize(){var fv_flowplayer_safety_resize_init=false;jQuery(".flowplayer").each(function(){if(!jQuery(this).is(":visible")||jQuery(this).hasClass("lightboxed")||jQuery(this).hasClass("lightbox-starter")||jQuery(this).hasClass("is-audio"))return;if(jQuery(this).width()<30||jQuery(this).height()<20){fv_flowplayer_safety_resize_init=true;var el=jQuery(this);while(jQuery(el).width()<30||jQuery(el).width()==jQuery(this).width()){if(jQuery(el).parent().length==0)break;el=jQuery(el).parent()}jQuery(this).width(jQuery(el).width());jQuery(this).height(parseInt(jQuery(this).width()*jQuery(this).attr("data-ratio")));fv_flowplayer_safety_resize_arr[jQuery(this).attr("id")]=el}});if(fv_flowplayer_safety_resize_init){jQuery(window).resize(function(){jQuery(".flowplayer").each(function(){if(jQuery(this).hasClass("lightboxed")||jQuery(this).hasClass("lightbox-starter"))return;if(fv_flowplayer_safety_resize_arr[jQuery(this).attr("id")]){jQuery(this).width(fv_flowplayer_safety_resize_arr[jQuery(this).attr("id")].width());jQuery(this).height(parseInt(jQuery(this).width()*jQuery(this).attr("data-ratio")))}})})}}if(typeof flowplayer.conf.safety_resize!="undefined"&&flowplayer.conf.safety_resize){jQuery(document).ready(function(){setTimeout(function(){fv_flowplayer_safety_resize()},10)})}var isIE11=!!navigator.userAgent.match(/Trident.*rv[ :]*11\./);if(isIE11){jQuery(document).ready(function(){jQuery(".fp-waiting").hide()});flowplayer(function(api,root){api.bind("load",function(e){jQuery(e.currentTarget).find(".fp-waiting").show()}).bind("beforeseek",function(e){jQuery(e.currentTarget).find(".fp-waiting").show()}).bind("progress",function(e){jQuery(e.currentTarget).find(".fp-waiting").hide()}).bind("seek",function(e){jQuery(e.currentTarget).find(".fp-waiting").hide()}).bind("fullscreen",function(e){jQuery("#wpadminbar").hide()}).bind("fullscreen-exit",function(e){jQuery("#wpadminbar").show()})})}if(flowplayer.support.browser&&flowplayer.support.browser.msie&&parseInt(flowplayer.support.browser.version,10)<9){jQuery(".flowplayer").each(function(){jQuery(this).css("width",jQuery(this).css("max-width"));jQuery(this).css("height",jQuery(this).css("max-height"))})}if(location.href.match(/elementor-preview=/)){console.log("FV Player: Elementor editor is active");setInterval(fv_player_load,1e3)}else if(location.href.match(/brizy-edit-iframe/)){console.log("FV Player: Brizy editor is active");setInterval(fv_player_load,1e3)}if(window.DELEGATE_NAMES){flowplayer(function(api,root){fv_player_notice(root,fv_flowplayer_translations.chrome_extension_disable_html5_autoplay)})}flowplayer(function(api,root){flowplayer.bean.off(root,"contextmenu")});if(location.href.match(/elementor-preview=/)){console.log("FV Player: Elementor editor is active");setInterval(fv_player_load,1e3)}flowplayer(function(player,root){root=jQuery(root);if(typeof root.data("fv-embed")=="undefined"||!root.data("fv-embed")||root.data("fv-embed")=="false")return;player.embedCode=function(){var video=player.video;var width=root.width();var height=root.height();height+=2;if(root.hasClass("has-chapters")||root.hasClass("has-transcript")){height+=300}if(jQuery(".fp-playlist-external[rel="+root.attr("id")+"]").length>0){height+=150+20}var link=root.data("fv-embed")+"#"+fv_player_get_video_link_hash(player);return'<iframe src="'+link+'" allowfullscreen width="'+width+'" height="'+height+'" frameborder="0" style="max-width:100%"></iframe>'}});jQuery(document).on("click",".flowplayer .embed-code-toggle",function(){var root=jQuery(this).closest(".flowplayer");if(typeof fv_player_editor_conf!="undefined"){fv_player_notice(root,fv_player_editor_translations.embed_notice,2e3);return false}var button=jQuery(this);var player=button.parents(".flowplayer");var api=player.data("flowplayer");if(typeof api.embedCode=="function"){player.find(".embed-code textarea").val(api.embedCode())}fv_player_clipboard(player.find(".embed-code textarea").val(),function(){fv_player_notice(player,fv_flowplayer_translations.embed_copied,2e3)},function(){button.parents(".fvp-share-bar").find(".embed-code").toggle();button.parents(".fvp-share-bar").toggleClass("visible")});return false});flowplayer(function(player,root){if(jQuery(root).data("fullscreen")==false){return}player.one("ready",function(e,api,video){if(jQuery(root).find(".fp-fullscreen").length==0){jQuery(root).find(".fp-header").append('<a class="fp-fullscreen fp-icon"></a>')}});var FS_ENTER="fullscreen",FS_EXIT="fullscreen-exit",FS_SUPPORT=flowplayer.support.fullscreen,win=window,scrollX,scrollY,bean=flowplayer.bean;player.fullscreen=function(flag){if(player.disabled)return;var video=common.find("video.fp-engine",root)[0];if(flowplayer.conf.native_fullscreen&&video&&flowplayer.support.iOS){player.trigger(FS_ENTER,[player]);bean.on(document,"webkitfullscreenchange.nativefullscreen",function(){if(document.webkitFullscreenElement!==video)return;bean.off(document,".nativefullscreen");bean.on(document,"webkitfullscreenchange.nativefullscreen",function(){if(document.webkitFullscreenElement)return;bean.off(document,".nativefullscreen");player.trigger(FS_EXIT,[player])})});video.webkitEnterFullScreen();bean.one(video,"webkitendfullscreen",function(){bean.off(document,"fullscreenchange.nativefullscreen");player.trigger(FS_EXIT,[player]);common.prop(video,"controls",true);common.prop(video,"controls",false)});return}var wrapper=jQuery(root).find(".fp-player")[0];if(flag===undefined)flag=!player.isFullscreen;if(flag){scrollY=win.scrollY;scrollX=win.scrollX}if(FS_SUPPORT){if(flag){["requestFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].forEach(function(fName){if(typeof wrapper[fName]==="function"){wrapper[fName]({navigationUI:"hide"});if(fName==="webkitRequestFullScreen"&&!document.webkitFullscreenElement){wrapper[fName]()}}})}else{["exitFullscreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].forEach(function(fName){if(typeof document[fName]==="function"){document[fName]()}})}}else{player.trigger(flag?FS_ENTER:FS_EXIT,[player])}return player};var lastClick,common=flowplayer.common;player.on("mousedown.fs",function(){if(+new Date-lastClick<150&&player.ready)player.fullscreen();lastClick=+new Date});player.on(FS_ENTER,function(){common.addClass(root,"is-fullscreen");common.toggleClass(root,"fp-minimal-fullscreen",common.hasClass(root,"fp-minimal"));common.removeClass(root,"fp-minimal");if(!FS_SUPPORT)common.css(root,"position","fixed");player.isFullscreen=true}).on(FS_EXIT,function(){var oldOpacity;common.toggleClass(root,"fp-minimal",common.hasClass(root,"fp-minimal-fullscreen"));common.removeClass(root,"fp-minimal-fullscreen");if(!FS_SUPPORT&&player.engine==="html5"){oldOpacity=root.css("opacity")||"";common.css(root,"opacity",0)}if(!FS_SUPPORT)common.css(root,"position","");common.removeClass(root,"is-fullscreen");if(!FS_SUPPORT&&player.engine==="html5")setTimeout(function(){root.css("opacity",oldOpacity)});player.isFullscreen=false;if(player.engine.engineName!="fvyoutube"){win.scrollTo(scrollX,scrollY)}}).on("unload",function(){if(player.isFullscreen)player.fullscreen()});player.on("shutdown",function(){FULL_PLAYER=null;common.removeNode(wrapper)})});flowplayer(function(api,root){root=jQuery(root);if(flowplayer.conf.wpadmin||jQuery(root).hasClass("is-audio"))return;var playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]"),playlist_with_fullscreen=playlist.hasClass("fp-playlist-season")||playlist.hasClass("fp-playlist-polaroid");fsforce=root.data("fsforce")==true;if(root.data("fullscreen")==false){return}if(flowplayer.conf.mobile_force_fullscreen&&flowplayer.support.fvmobile||!flowplayer.support.fullscreen&&fsforce||playlist_with_fullscreen){if(!flowplayer.support.fullscreen){api.bind("ready",function(){if(api.video.vr)return;api.fullscreen(true)})}root.on("click",function(){if(!api.ready||api.paused)api.fullscreen(true)});jQuery("[rel="+root.attr("id")+"] a").on("click",function(e){if(!api.isFullscreen){api.fullscreen();api.resume()}});api.on("resume",function(){if(api.video.vr)return;if(!api.isFullscreen)api.fullscreen()});api.on("finish",function(){if(api.conf.playlist.length==0||api.conf.playlist.length-1==api.video.index)api.fullscreen(false)}).on("fullscreen",function(a,api){root.addClass("forced-fullscreen")}).on("fullscreen-exit",function(a,api){api.pause();root.removeClass("forced-fullscreen")})}else if(fsforce){var position,unload=root.find(".fp-unload"),is_closing=false;api.isFakeFullscreen=false;unload.show();root.on("click",function(e){if(!api.ready&&e.target!=unload[0])api.fakeFullscreen(true)});unload.on("click",function(e){if(api.ready){api.fullscreen(false)}else if(api.loading){is_closing=true;api.one("resume",function(e){is_closing=false;api.pause()})}api.fakeFullscreen(false);return false});jQuery("[rel="+root.attr("id")+"] a").on("click",function(e){if(!api.isFakeFullscreen){api.fakeFullscreen();api.resume()}});api.on("resume",function(){if(!is_closing&&!api.isFakeFullscreen)api.fakeFullscreen()}).on("finish",function(){if(api.conf.playlist.length==0||api.conf.playlist.length-1==api.video.index)api.fakeFullscreen(false)}).on("fullscreen",function(a,api){root.removeClass("fake-fullscreen")}).on("fullscreen-exit",function(a,api){if(api.isFakeFullscreen)api.fakeFullscreen(true,true)}).on("unload",function(a,api){});api.fakeFullscreen=function(flag,force){if(!force&&(api.isFakeFullscreen==flag||api.disabled))return;if(position===undefined)position=root.css("position");if(flag===undefined)flag=!api.isFakeFullscreen;api.isFakeFullscreen=flag;api.trigger(flag?"fakefullscreen":"fakefullscreen-exit",[api]);root.toggleClass("is-fullscreen fake-fullscreen forced-fullscreen",flag);if(flag){root.css("position","fixed")}else{root.css("position",position)}}}if(flowplayer.support.android&&flowplayer.conf.mobile_landscape_fullscreen&&window.screen&&window.screen.orientation){api.on("fullscreen",function(a,api){if(typeof api.video.width!="undefined"&&typeof api.video.height!="undefined"&&(api.video.width!=0&&api.video.height!=0&&api.video.width<api.video.height)){screen.orientation.lock("portrait-primary")}else{screen.orientation.lock("landscape-primary")}})}});flowplayer(function(api,root){root=jQuery(root);var hlsjs,player,audioUXGroup,audioGroups,hls_audio_button,hls_audio_menu,mse=window.MediaSource||window.WebKitMediaSource;flowplayer.engine("hlsjs-lite").plugin(function(params){hlsjs=params.hls});api.bind("ready",function(e,api){removeAudioMenu();if(hlsjs&&api.video.type=="application/x-mpegurl"){parseAudioTracksHlsJs(hlsjs);createAudioMenu()}});api.one("progress",function(){if(api.engine.engineName=="html5"&&api.video.type=="application/x-mpegurl"){parseAudioTracksSafari();createAudioMenu()}});function getVideoTagAudioTracks(){var video=root.find("video");if(video.length&&video[0].audioTracks){return video[0].audioTracks}return[]}function hilightAudioTrack(audioTrack){if(!audioTrack.name)audioTrack.name=audioTrack.label;root.find(".fv-fp-hls-menu a").each(function(k,el){jQuery(el).toggleClass("fp-selected",jQuery(el).attr("data-audio")===audioTrack.name)})}function createAudioMenu(){if(!audioUXGroup||audioUXGroup.length<2){return}hls_audio_button=jQuery('<strong class="fv-fp-hls">'+fv_flowplayer_translations.audio_button+"</strong>");hls_audio_menu=jQuery('<div class="fp-menu fv-fp-hls-menu"></div>').insertAfter(root.find(".fp-controls"));hls_audio_menu.append("<strong>"+fv_flowplayer_translations.audio_menu+"</strong>");audioUXGroup.forEach(function(audioTrack){hls_audio_menu.append('<a data-audio="'+audioTrack.name+'" data-lang="'+audioTrack.lang+'">'+audioTrack.name+"</a>")});hls_audio_button.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();if(hls_audio_menu.hasClass("fp-active")){api.hideMenu(hls_audio_menu[0])}else{root.click();api.showMenu(hls_audio_menu[0])}});jQuery("a",hls_audio_menu).on("click",function(e){var adata=e.target.getAttribute("data-audio");if(hlsjs){var gid=hlsjs.audioTracks[hlsjs.audioTrack].groupId;var atrack=hlsjs.audioTracks.filter(function(at){return at.groupId===gid&&(at.name===adata||at.lang===adata)})[0];hlsjs.audioTrack=atrack.id;hilightAudioTrack(atrack)}else{var tracks=getVideoTagAudioTracks();for(var i in tracks){if(!tracks.hasOwnProperty(i))continue;if(tracks[i].label==adata){tracks[i].enabled=true;hilightAudioTrack(tracks[i])}}}});if(hlsjs){hilightAudioTrack(hlsjs.audioTracks[hlsjs.audioTrack])}else{var tracks=getVideoTagAudioTracks();for(var i in tracks){if(!tracks.hasOwnProperty(i))continue;if(tracks[i].enabled){hilightAudioTrack(tracks[i])}}}}function removeAudioMenu(){jQuery(hls_audio_menu).remove();jQuery(hls_audio_button).remove()}function parseAudioTracksHlsJs(data){audioGroups=[];audioUXGroup=[];data.levels.forEach(function(level){var agroup=level.attrs.AUDIO;if(agroup&&audioGroups.indexOf(agroup)<0){audioGroups.push(agroup)}if(audioGroups.length){audioUXGroup=data.audioTracks.filter(function(audioTrack){return audioTrack.groupId===audioGroups[0]})}})}function parseAudioTracksSafari(){audioGroups=[];audioUXGroup=[];var tracks=getVideoTagAudioTracks();for(var i in tracks){if(!tracks.hasOwnProperty(i))continue;audioUXGroup.push({id:tracks[i].id,name:tracks[i].label})}}});flowplayer(function(api,root){var store_engine_pos=-1;var store_engine=false;api.on("error",function(e,api,err){if(err.code!=4||api.engine.engineName!="hlsjs")return;console.log("FV Player: HLSJS failed to play the video, switching to Flash HLS");api.error=api.loading=false;jQuery(root).removeClass("is-error");jQuery(flowplayer.engines).each(function(k,v){if(flowplayer.engines[k].engineName=="hlsjs"){store_engine_pos=k;store_engine=flowplayer.engines[k];delete flowplayer.engines[k]}});var index=typeof api.video.index!="undefined"?api.video.index:0;var video=index>0?api.conf.playlist[index].sources:api.conf.clip.sources;video.index=index;api.load({sources:video});api.bind("unload error",function(){flowplayer.engines[store_engine_pos]=store_engine})})});flowplayer(function(api,root){var initialDelay=30,continueDelay=10,useDelay=initialDelay,retryLabel=fv_flowplayer_translations.live_stream_retry,timer;api.clearLiveStreamCountdown=function(){if(timer){clearInterval(timer);api.error=api.loading=false;jQuery(root).removeClass("is-error");jQuery(root).find(".fp-message.fp-shown").remove();api.unload()}};api.conf.flashls={manifestloadmaxretry:2};api.on("ready",function(){useDelay=initialDelay;retryLabel=fv_flowplayer_translations.live_stream_retry}).on("progress",function(){useDelay=continueDelay;retryLabel=fv_flowplayer_translations.live_stream_continue;clearInterval(timer)});api.on("error",function(e,api,err){setTimeout(function(){if(!api.conf.clip.live&&!api.conf.live&&!(err.video&&err.video.src.match(/\/\/vimeo.com\/event\//)))return;var delay=useDelay;if(api.conf.clip.streaming_time){delay=api.conf.clip.streaming_time-Math.floor(Date.now()/1e3)}else if(api.conf.clip.live_starts_in){delay=api.conf.clip.live_starts_in}var startLabel=fv_flowplayer_translations.live_stream_starting.replace(/%d/,secondsToDhms(delay));retryLabel=retryLabel.replace(/%d/,secondsToDhms(delay));var message=api.conf.clip.live_starts_in?startLabel:retryLabel;clearInterval(timer);if(err.code===1||err.code===2||err.code===4){root.className+=" is-offline";if(flowplayer.support.flashVideo){api.one("flashdisabled",function(){root.querySelector(".fp-flash-disabled").style.display="none"})}var messageElement=root.querySelector(".fp-ui .fp-message");messageElement.innerHTML=message;var reload_delay=delay>300?300:delay;timer=setInterval(function(){reload_delay-=1;delay-=1;if(reload_delay>0&&messageElement){messageElement.querySelector("span").innerHTML=secondsToDhms(delay)}else{clearInterval(timer);if(!api.error){return}api.error=api.loading=false;messageElement=root.querySelector(".fp-ui .fp-message");if(messageElement){root.querySelector(".fp-ui").removeChild(messageElement)}root.className=root.className.replace(/\bis-(error|offline)\b/g,"");api.load()}},1e3)}},1)});function secondsToDhms(seconds){seconds=Number(seconds);var d=Math.floor(seconds/(3600*24));var h=Math.floor(seconds%(3600*24)/3600);var m=Math.floor(seconds%3600/60);var s=Math.floor(seconds%60);var t=fv_flowplayer_translations;var output=d>0?d==1?t.duration_1_day.replace(/%s/,d):t.duration_n_days.replace(/%s/,d):"";if(output&&h>0)output+=", ";output+=h>0?h==1?t.duration_1_hour.replace(/%s/,h):t.duration_n_hours.replace(/%s/,h):"";if(output&&m>0)output+=", ";output+=m>0?m==1?t.duration_1_minute.replace(/%s/,m):t.duration_n_minutes.replace(/%s/,m):"";if(output&&s>0)output+=t.and;output+=s>0?s==1?t.duration_1_second.replace(/%s/,s):t.duration_n_seconds.replace(/%s/,s):"";return output}});flowplayer(function(api,root){root=jQuery(root);var hlsjs;flowplayer.engine("hlsjs-lite").plugin(function(params){hlsjs=params.hls});api.on("ready",function(e,api){if(hlsjs&&api.conf.playlist.length&&api.engine.engineName!="hlsjs-lite"){hlsjs.destroy()}})});flowplayer(function(api,root){if(!flowplayer.support.browser.safari&&!flowplayer.support.iOS)return;root=jQuery(root);var video_tag=false,did_start_playing=false,are_waiting_already=0;api.on("ready",function(e,api,video){are_waiting_already=0;did_start_playing=false;if(api.engine.engineName=="html5"&&video.src.match(/\?/)){video_tag=root.find("video");if(!video_tag.data("fv-ios-recovery")){video_tag.on("waiting",wait_for_stalled);video_tag.data("fv-ios-recovery",true)}api.one("progress",function(){did_start_playing=true})}});api.bind("beforeseek",wait_for_stalled);function debug(e){console.log("FV Player: iOS video element: "+e.type)}function wait_for_stalled(){if(!did_start_playing){return}if(video_tag&&api.engine.engineName=="html5"){are_waiting_already++;if(are_waiting_already>1){if(are_waiting_already>3){console.log("FV Player: iOS video element needs a push, triggering 'stalled'");video_tag.trigger("stalled")}return}console.log("FV Player: iOS video element will trigger error after 'stalled' arrives");video_tag.one("stalled",function(){var time=api.video.time;if(api.video.type.match(/video\//)){console.log("FV Player: Running check of video file...");var test_video=document.createElement("video");test_video.src=api.video.src;test_video.onloadedmetadata=function(){are_waiting_already=0;console.log("FV Player: Video link works")};test_video.onerror=function(){console.log("FV Player: Video link issue!");if(are_waiting_already>0){api.trigger("error",[api,{code:4,video:api.video}])}};return}setTimeout(function(){console.log(api.video.time,time);if(api.video.time!=time){console.log("FV Player: iOS video element continues playing, no need for error");return}if(api.paused){console.log("FV Player: iOS video element paused, no need for error");return}api.trigger("error",[api,{code:4,video:api.video}])},5e3)})}}});!function(e){var n=!1;if("function"==typeof define&&define.amd&&(define(e),n=!0),"object"==typeof exports&&(module.exports=e(),n=!0),!n){var o=window.Cookies,t=window.Cookies=e();t.noConflict=function(){return window.Cookies=o,t}}}(function(){function e(){for(var e=0,n={};e<arguments.length;e++){var o=arguments[e];for(var t in o)n[t]=o[t]}return n}function n(o){function t(n,r,i){var c;if("undefined"!=typeof document){if(arguments.length>1){if("number"==typeof(i=e({path:"/"},t.defaults,i)).expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*i.expires),i.expires=a}i.expires=i.expires?i.expires.toUTCString():"";try{c=JSON.stringify(r),/^[\{\[]/.test(c)&&(r=c)}catch(e){}r=o.write?o.write(r,n):encodeURIComponent(r+"").replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=(n=(n=encodeURIComponent(n+"")).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape);var s="";for(var f in i)i[f]&&(s+="; "+f,!0!==i[f]&&(s+="="+i[f]));return document.cookie=n+"="+r+s}n||(c={});for(var p=document.cookie?document.cookie.split("; "):[],d=/(%[0-9A-Z]{2})+/g,u=0;u<p.length;u++){var l=p[u].split("="),C=l.slice(1).join("=");this.json||'"'!==C.charAt(0)||(C=C.slice(1,-1));try{var m=l[0].replace(d,decodeURIComponent);if(C=o.read?o.read(C,m):o(C,m)||C.replace(d,decodeURIComponent),this.json)try{C=JSON.parse(C)}catch(e){}if(n===m){c=C;break}n||(c[m]=C)}catch(e){}}return c}}return t.set=t,t.get=function(e){return t.call(t,e)},t.getJSON=function(){return t.apply({json:!0},[].slice.call(arguments))},t.defaults={},t.remove=function(n,o){t(n,"",e(o,{expires:-1}))},t.withConverter=n,t}return n(function(){})});flowplayer.bean.off(document,"keydown.fp");flowplayer(function(api,root){var bean=flowplayer.bean;if(!api.conf.keyboard)return;bean.on(root,"mouseenter mouseleave",function(e){fv_player_focused=!api.disabled&&e.type=="mouseover"?api:0;if(fv_player_focused)fv_player_focusedRoot=root});api.bind("ready",function(e,api,video){if(video.subtitles&&video.subtitles.length>0){var help=jQuery(root).find(".fp-help").html();help+='<div class="fp-help-section fp-help-subtitles"><p><em>c</em>cycle through subtitles</p></div>';jQuery(root).find(".fp-help").html(help)}else{jQuery(root).find(".fp-help-subtitles").remove()}})});flowplayer.bean.on(document,"keydown.fp",function(e){if(typeof fv_player_focused=="undefined")return;var api=fv_player_focused,focusedRoot=api?fv_player_focusedRoot:false,common=flowplayer.common;var el=api&&!api.disabled?api:0,metaKeyPressed=e.ctrlKey||e.metaKey||e.altKey,key=e.which,conf=el&&el.conf;if(common.hasClass(focusedRoot,"no-controlbar")||common.hasClass(focusedRoot,"is-cva"))return;if(!el||!conf.keyboard||el.disabled)return;if([63,187,191].indexOf(key)!=-1){common.toggleClass(focusedRoot,"is-help");return false}if(key==27&&common.hasClass(focusedRoot,"is-help")){common.toggleClass(focusedRoot,"is-help");return false}if(!metaKeyPressed&&el.ready){e.preventDefault();if(e.shiftKey){if(key==39)el.speed(true);else if(key==37)el.speed(false);else if(key==78)el.next();else if(key==80)el.prev();return}if(key<58&&key>47)return el.seekTo(key-48);switch(key){case 38:case 75:el.volume(el.volumeLevel+.15);break;case 40:case 74:el.volume(el.volumeLevel-.15);break;case 39:case 76:el.seeking=true;el.seek(api.video.time+5);break;case 37:case 72:el.seeking=true;el.seek(api.video.time-5);break;case 190:el.seekTo();break;case 32:el.toggle();break;case 70:if(conf.fullscreen)el.fullscreen();break;case 77:el.mute();break;case 81:el.unload();break;case 67:if(!api.video.subtitles||api.video.subtitles.length==0)break;var current_subtitles=jQuery(focusedRoot).find(".fp-dropdown li.active[data-subtitle-index]").data("subtitle-index");if(typeof current_subtitles=="undefined")current_subtitles=-1;current_subtitles++;if(current_subtitles>api.video.subtitles.length-1){current_subtitles=-1}api.trigger("fv-subtitles-switched");if(current_subtitles>-1){el.loadSubtitles(current_subtitles);fv_player_notice(focusedRoot,fv_flowplayer_translations.subtitles_switched+" "+api.video.subtitles[current_subtitles].label,"fv-subtitles-switched")}else{el.disableSubtitles();fv_player_notice(focusedRoot,fv_flowplayer_translations.subtitles_disabled,"fv-subtitles-switched")}break}}});flowplayer(function(api,root){api.bind("load",function(e,api,data){var player=jQuery(e.currentTarget);if(player.data("live")){var live_check=setTimeout(function(){player.find(".fp-ui").append('<div class="fp-message">'+fv_flowplayer_translations.live_stream_failed+"</div>");player.addClass("is-error")},1e4);jQuery(e.currentTarget).data("live_check",live_check)}}).bind("ready",function(e,api,data){clearInterval(jQuery(e.currentTarget).data("live_check"))}).bind("error",function(e,api,data){var player=jQuery(e.currentTarget);if(player.data("live")){player.find(".fp-message").html(fv_flowplayer_translations.live_stream_failed_2)}})});(function($){flowplayer(function(api,root){if(jQuery(root).hasClass("is-cva"))return;$(document).on("submit","#"+jQuery(root).attr("id")+" .mailchimp-form",function(e){e.preventDefault();$(".mailchimp-response",root).remove();$("input[type=submit]",root).attr("disabled","disabled").addClass("fv-form-loading");var data={action:"fv_wp_flowplayer_email_signup"};$("[name]",this).each(function(){data[this.name]=$(this).val()});$.post(fv_player.ajaxurl,data,function(response){response=JSON.parse(response);$('<div class="mailchimp-response"></div>').insertAfter(".mailchimp-form",root);if(response.text.match(/already subscribed/)){response.status="ERROR"}if(response.status==="OK"){$(".mailchimp-form input[type=text],.mailchimp-form input[type=email]",root).val("");$(".mailchimp-response",root).removeClass("is-fv-error").html(response.text);setTimeout(function(){$(".wpfp_custom_popup",root).fadeOut()},2e3)}else{$(".mailchimp-response",root).addClass("is-fv-error").html(response.text)}$("input[type=submit]",root).removeAttr("disabled").removeClass("fv-form-loading")})})})})(jQuery);function fv_flowplayer_mobile_switch(id){var regex=new RegExp("[\\?&]fv_flowplayer_mobile=([^&#]*)");var results=regex.exec(location.search);if((results!=null&&results[1]=="yes"||(jQuery(window).width()<=480||jQuery(window).height()<=480))&&(results==null||results[1]!="no")){var fv_fp_mobile=false;jQuery("#wpfp_"+id+" video source").each(function(){if(jQuery(this).attr("id")!="wpfp_"+id+"_mobile"){fv_fp_mobile=true;jQuery(this).remove()}});if(fv_fp_mobile){jQuery("#wpfp_"+id).after('<p class="fv-flowplayer-mobile-switch">'+fv_flowplayer_translations.mobile_browser_detected_1+' <a href="'+document.URL+'?fv_flowplayer_mobile=no">'+fv_flowplayer_translations.mobile_browser_detected_2+"</a>.</p>")}}}if(typeof fv_flowplayer_mobile_switch_array!="undefined"){for(var i in fv_flowplayer_mobile_switch_array){if(!fv_flowplayer_mobile_switch_array.hasOwnProperty(i))continue;fv_flowplayer_mobile_switch(i)}}flowplayer(function(api,root){if(!flowplayer.support.touch)return;jQuery.fn.fv_single_double_click=function(single_click_callback,double_click_callback,timeout){return this.each(function(){var clicks=0,self=this;jQuery(this).on("click",function(event){clicks++;if(clicks==1){setTimeout(function(){if(clicks==1){single_click_callback.call(self,event)}else{double_click_callback.call(self,event)}clicks=0},timeout||300)}})})};root=jQuery(root);var left=jQuery('<div class="fv-fp-tap-left"><span>-10s</span></div>'),right=jQuery('<div class="fv-fp-tap-right"><span>+10s</span></div>');left.fv_single_double_click(function(){api.toggle()},function(e){maybe_seek(e,left,api.ready?api.video.time-10:false)});right.fv_single_double_click(function(){api.toggle()},function(e){maybe_seek(e,right,api.ready?api.video.time+10:false)});root.find(".fp-ui").append(left).append(right);function maybe_seek(e,el,time){if(api.ready){api.seek(time);animation(el)}else{api.toggle()}e.preventDefault()}function animation(el){el.addClass("is-active");setTimeout(function(){el.removeClass("is-active")},500)}});flowplayer(function(api,root){root=jQuery(root);var instance_id=root.data("flowplayer-instance-id");flowplayer.audible_instance=-1;api.one("load",function(){setTimeout(function(){api.conf.splash=false},0)});api.on("ready",function(){var is_muted=root.data("volume")==0;if(!is_muted){flowplayer.audible_instance=instance_id}jQuery(".flowplayer[data-flowplayer-instance-id]").each(function(){var player=jQuery(this).data("flowplayer");var current_instance_id=jQuery(this).data("flowplayer-instance-id");if(flowplayer.audible_instance==-1||current_instance_id==flowplayer.audible_instance||current_instance_id==instance_id)return;if(player){if(player.ready){if(api.conf.multiple_playback){if(!is_muted){player.mute(true,true)}}else if(player.playing){player.pause()}}else{player.clearLiveStreamCountdown();player.unload()}}})}).on("mute",function(e,api,muted){if(!muted&&flowplayer.audible_instance!=instance_id){flowplayer(flowplayer.audible_instance).mute(true,true);flowplayer.audible_instance=instance_id}}).on("resume",function(){if(!api.conf.multiple_playback){jQuery(".flowplayer[data-flowplayer-instance-id]").each(function(){if(instance_id==jQuery(this).data("flowplayer-instance-id"))return;var player=jQuery(this).data("flowplayer");if(player&&player.playing){player.pause()}})}})});function fv_flowplayer_browser_ff_m4v(hash){if(flowplayer.support.browser&&flowplayer.support.browser.mozilla&&navigator.appVersion.indexOf("Win")!=-1){jQuery("#wpfp_"+hash).attr("data-engine","flash")}}if(typeof fv_flowplayer_browser_ff_m4v_array!="undefined"){for(var i in fv_flowplayer_browser_ff_m4v_array){if(!fv_flowplayer_browser_ff_m4v_array.hasOwnProperty(i))continue;fv_flowplayer_browser_ff_m4v(i)}}function fv_flowplayer_browser_chrome_fail(hash,sAttributes,sVideo,bAutobuffer){jQuery("#wpfp_"+hash).bind("error",function(e,api,error){if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())&&error!=null&&(error.code==3||error.code==4||error.code==5)){api.unload();jQuery("#wpfp_"+hash).attr("id","bad_wpfp_"+hash);jQuery("#bad_wpfp_"+hash).after('<div id="wpfp_'+hash+'" '+sAttributes+' data-engine="flash"></div>');jQuery("#wpfp_"+hash).flowplayer({playlist:[[{mp4:sVideo}]]});if(bAutobuffer){jQuery("#wpfp_"+hash).bind("ready",function(e,api){api.play()})}else{jQuery("#wpfp_"+hash).flowplayer().play(0)}jQuery("#bad_wpfp_"+hash).remove()}})}if(typeof fv_flowplayer_browser_chrome_fail_array!="undefined"){for(var i in fv_flowplayer_browser_chrome_fail_array){if(!fv_flowplayer_browser_chrome_fail_array.hasOwnProperty(i))continue;fv_flowplayer_browser_chrome_fail(i,fv_flowplayer_browser_chrome_fail_array[i]["attrs"],fv_flowplayer_browser_chrome_fail_array[i]["mp4"],fv_flowplayer_browser_chrome_fail_array[i]["auto_buffer"])}}function fv_flowplayer_browser_ie(hash){if(flowplayer.support.browser&&flowplayer.support.browser.msie&&parseInt(flowplayer.support.browser.version,10)>=9||!!navigator.userAgent.match(/Trident.*rv[ :]*11\./)){jQuery("#wpfp_"+hash).attr("data-engine","flash")}}if(typeof fv_flowplayer_browser_ie_array!="undefined"){for(var i in fv_flowplayer_browser_ie_array){if(!fv_flowplayer_browser_ie_array.hasOwnProperty(i))continue;fv_flowplayer_browser_ie(i)}}function fv_flowplayer_browser_chrome_mp4(hash){var match=window.navigator.appVersion.match(/Chrome\/(\d+)\./);if(match!=null){var chrome_ver=parseInt(match[1],10);if(/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())&&chrome_ver<28&&navigator.appVersion.indexOf("Win")!=-1||/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())&&chrome_ver<27&&navigator.appVersion.indexOf("Linux")!=-1&&navigator.userAgent.toLowerCase().indexOf("android")==-1){jQuery("#wpfp_"+hash).attr("data-engine","flash")}}}if(navigator.platform.indexOf("iPhone")!=-1||navigator.platform.indexOf("iPod")!=-1||navigator.platform.indexOf("iPad")!=-1||navigator.userAgent.toLowerCase().indexOf("android")!=-1){flowplayer(function(api,root){api.bind("error",function(e,api,error){if(error.code==10){jQuery(e.target).find(".fp-message").html(fv_flowplayer_translations.unsupported_format)}})})}jQuery(document).ready(function(){if(navigator.platform.indexOf("iPhone")!=-1||navigator.platform.indexOf("iPod")!=-1||navigator.platform.indexOf("iPad")!=-1){jQuery(window).trigger("load")}jQuery(".flowplayer").on("mouseleave",function(){jQuery(this).find(".fvp-share-bar").removeClass("visible");jQuery(this).find(".embed-code").hide()})});if(typeof flowplayer!=="undefined"){flowplayer(function(api,root){root=jQuery(root);var notice=false,hlsjs;flowplayer.engine("hlsjs-lite").plugin(function(params){hlsjs=params.hls});var playlist=api.conf.playlist.length?api.conf.playlist:[api.conf.clip];if(playlist[0].pending_encoding){show_notice(playlist[0])}api.on("load",function(e,api,video){if(video.pending_encoding){show_notice(video);if(hlsjs){hlsjs.destroy()}return false}remove_notice()});function show_notice(video){remove_notice();var title="Video is being processed",message="Please return later to see the actual video in this player.";if(video.pending_encoding_error){title="Video unavailable";message="There was an error in the video encoding."}else if(video.pending_encoding_progress){message+="<br /><br />("+video.pending_encoding_progress+" done)"}notice=jQuery('<div class="fv-player-encoder-video-processing-modal"><div><h2>'+title+"</h2><p>"+message+"</p></div></div");root.append(notice)}function remove_notice(){if(notice){notice.remove()}}})}if(!Date.now){Date.now=function(){return(new Date).getTime()}}(function($){var sendPositionsEvery=60,ajaxCall=null,maxCookieSize=2500,localStorageEnabled=null,cookiePositionsKeyName="video_positions",cookiePlaylistsKeyName="player_playlist_item",tempPositionCookieKeyName="video_positions_tmp",tempPlaylistsCookieKeyName="player_playlist_item_tmp",tempSawCookieKeyName="video_saw_tmp",playPositions=[],playlistIndexes=[],sawVideo=[],getSerialized=function(data){var serialized=JSON.stringify(data),dataSize=getTextByteSize(serialized);if(dataSize>maxCookieSize){while(dataSize>maxCookieSize){for(var i in data){if(!data.hasOwnProperty(i))continue;delete data[i];serialized=JSON.stringify(data);dataSize=getTextByteSize(serialized);break}}}return serialized},getVideoId=function(video){if(video.id){return video.id}var out=typeof video.sources_original!="undefined"&&typeof video.sources_original[0]!="undefined"?video.sources_original[0].src:video.sources[0].src;if(typeof video.sources_original=="undefined"||typeof video.sources_original[0]=="undefined"){out=removeAWSSignatures(out)}return out},getTextByteSize=function(txt){return encodeURIComponent(txt).length},getCookieKey=function(key){return localStorageEnabled?localStorage.getItem(key):Cookies.get(key)},setCookieKey=function(key,value){return localStorageEnabled?localStorage.setItem(key,value):Cookies.set(key,value)},removeCookieKey=function(key){if(localStorageEnabled){localStorage.removeItem(key)}{Cookies.remove(key)}},removeVideoPosition=function(e,api){if(api.video.sources){var video_id=getVideoId(api.video);playPositions[video_id]=0;sawVideo[video_id]=1}},removeAWSSignatures=function(videoURL){return videoURL.replace(/(X-Amz-Algorithm=[^&]+&?)/gm,"").replace(/(X-Amz-Credential=[^&]+&?)/gm,"").replace(/(X-Amz-Date=[^&]+&?)/gm,"").replace(/(X-Amz-Expires=[^&]+&?)/gm,"").replace(/(X-Amz-SignedHeaders=[^&]+&?)/gm,"").replace(/(X-Amz-Signature=[^&]+&?)/gm,"")},sendVideoPositions=function(async,callback){var beaconSupported="sendBeacon"in navigator;if(async!==true){async=false}if(!callback||typeof callback=="undefined"){callback=function(){}}postDataPositions=[];postDataPlaylists=[];for(var video_name in playPositions){if(!playPositions.hasOwnProperty(video_name))continue;postDataPositions.push({name:video_name,position:playPositions[video_name],saw:typeof sawVideo[video_name]!="undefined"?sawVideo[video_name]:false})}for(var player_id in playlistIndexes){if(!playlistIndexes.hasOwnProperty(player_id))continue;postDataPlaylists.push({player:player_id,item:playlistIndexes[player_id]})}if(!postDataPlaylists.length){removeCookieKey(tempPlaylistsCookieKeyName)}if(!postDataPositions.length){removeCookieKey(tempPositionCookieKeyName);removeCookieKey(tempSawCookieKeyName);return}if(flowplayer.conf.is_logged_in=="1"){if(beaconSupported){try{var temp_position_data={},temp_saw_data={},temp_playlist_data={};for(var i in postDataPositions){if(!postDataPositions.hasOwnProperty(i))continue;temp_position_data[postDataPositions[i].name]=postDataPositions[i].position;temp_saw_data[postDataPositions[i].name]=postDataPositions[i].saw}for(var i in postDataPlaylists){if(!postDataPlaylists.hasOwnProperty(i))continue;temp_playlist_data[postDataPlaylists[i].player]=postDataPlaylists[i].item}setCookieKey(tempPositionCookieKeyName,getSerialized(temp_position_data));setCookieKey(tempSawCookieKeyName,getSerialized(temp_saw_data));setCookieKey(tempPlaylistsCookieKeyName,getSerialized(temp_playlist_data))}catch(e){return}var fd=new FormData;fd.append("action","fv_wp_flowplayer_video_position_save");fd.append("videoTimes",encodeURIComponent(JSON.stringify(postDataPositions)));fd.append("playlistItems",encodeURIComponent(JSON.stringify(postDataPlaylists)));navigator.sendBeacon(fv_player.ajaxurl,fd);return false}else{return jQuery.ajax({type:"POST",async:async,url:fv_player.ajaxurl,complete:callback,data:{action:"fv_wp_flowplayer_video_position_save",videoTimes:postDataPositions,playlistItems:postDataPlaylists}})}}else{try{var data_positions=getCookieKey(cookiePositionsKeyName);var data_playlist_item=getCookieKey(cookiePlaylistsKeyName);if(data_positions&&typeof data_positions!=="undefined"){data_positions=JSON.parse(data_positions)}else{data_positions={}}if(data_playlist_item&&typeof data_playlist_item!=="undefined"){data_playlist_item=JSON.parse(data_playlist_item)}else{data_playlist_item={}}for(var i in postDataPositions){if(!postDataPositions.hasOwnProperty(i))continue;data_positions[postDataPositions[i].name]=postDataPositions[i].position}for(var i in postDataPlaylists){if(!postDataPlaylists.hasOwnProperty(i))continue;data_playlist_item[postDataPlaylists[i].player]=postDataPlaylists[i].item}var serialized_positions=JSON.stringify(data_positions),serialized_playlist_items=JSON.stringify(data_playlist_item),dataSize_postions=getTextByteSize(serialized_positions),dataSize_playlist_items=getTextByteSize(serialized_playlist_items);if(dataSize_postions>maxCookieSize){while(dataSize_postions>maxCookieSize){for(var i in data_positions){if(!data_positions.hasOwnProperty(i))continue;delete data_positions[i];serialized_positions=JSON.stringify(data_positions);dataSize_postions=getTextByteSize(serialized_positions);break}}}if(dataSize_playlist_items>maxCookieSize){while(dataSize_playlist_items>maxCookieSize){for(var i in data_positions){if(!data_playlist_item.hasOwnProperty(i))continue;delete data_playlist_item[i];serialized_playlist_items=JSON.stringify(data_playlist_item);dataSize_playlist_items=getTextByteSize(serialized_positions);break}}}setCookieKey(cookiePositionsKeyName,serialized_positions);setCookieKey(cookiePlaylistsKeyName,serialized_playlist_items)}catch(e){return}}return false};flowplayer(function(api,root){if(typeof api.conf.disable_localstorage!="undefined"){return}var $root=jQuery(root),enabled=flowplayer.conf.video_position_save_enable&&$root.data("save-position")!="false"||$root.data("save-position"),progressEventsCount=0,player_id=$root.data("player-id")?$root.data("player-id"):false,item_changed=false,seekIntoPosition=function(e,api){if(api.video&&api.video.live)return;var video_id=getVideoId(api.video),position=api.video.position;if(flowplayer.conf.is_logged_in!="1"){var data=getCookieKey(cookiePositionsKeyName);if(data&&typeof data!=="undefined"){try{data=JSON.parse(data);if(data[video_id]){position=data[video_id]}}catch(e){return}}}if(!!api.get_custom_end&&api.get_custom_end()<position){position=false}if(!!api.get_custom_start&&api.get_custom_start()>0){if(position<api.get_custom_start()){position=false}}api.bind("progress",storeVideoPosition);if(position){seek(position)}},storeVideoPosition=function(e,api){if(api.live){return}if(api.video.sources){var video_id=getVideoId(api.video),position=Math.round(api.video.time);playPositions[video_id]=position;if(api.conf.playlist.length>0){if(player_id)playlistIndexes[player_id]=api.video.index}if(progressEventsCount++>=sendPositionsEvery&&flowplayer.conf.closingPage){if(ajaxCall){ajaxCall.abort()}ajaxCall=sendVideoPositions(true,function(){ajaxCall=null});progressEventsCount=0}}},forceSavePosition=function(e,api){var inPlaylist=false;for(var i in api.conf.playlist){if(!api.conf.playlist.hasOwnProperty(i))continue;inPlaylist=true;break}if(inPlaylist&&!flowplayer.conf.closingPage){progressEventsCount=sendPositionsEvery+1;storeVideoPosition(e,api);sendVideoPositions()}},seek=function(position){if(!!api.custom_seek){api.custom_seek(position);return}var seek_count=0;var do_seek=setInterval(function(){if(++seek_count>20)clearInterval(do_seek);if(api.loading)return;api.seek(parseInt(position));clearInterval(do_seek)},10)},processTempData=function(temp_data_name,video_id){var data=getCookieKey(temp_data_name),output=false;if(data&&typeof data!=="undefined"){try{data=JSON.parse(data);if(typeof data[video_id]!="undefined"){output=data[video_id];delete data[video_id];var stillHasData=false;for(var i in data){if(!data.hasOwnProperty(i))continue;stillHasData=true;break}if(stillHasData){setCookieKey(temp_data_name,JSON.stringify(data))}else{removeCookieKey(temp_data_name)}}return output}catch(e){}}},restorePlaylistItem=function(e,api){if(typeof api=="undefined"||api.conf.playlist.length==0)return;var item_index=-1;if(player_id){if(flowplayer.conf.is_logged_in!="1"){var data=getCookieKey(cookiePlaylistsKeyName);if(data&&typeof data!=="undefined"){try{data=JSON.parse(data);if(data[player_id]){item_index=data[player_id]}}catch(e){return}}}else if(flowplayer.conf.is_logged_in=="1"){item_index=api.conf.playlist.length>0?processTempData(tempPlaylistsCookieKeyName,player_id):false}}if(item_index>=0&&!item_changed){api.play(item_index);item_changed=true}};if(!enabled)return;if(getCookieKey(tempPlaylistsCookieKeyName)){$root.removeData("playlist_start")}api.bind("finish",removeVideoPosition);api.one("progress",seekIntoPosition);api.bind("unload",function(){item_changed=false;api.one("ready",restorePlaylistItem)});api.one("ready",restorePlaylistItem);jQuery(".fp-ui",root).on("click",function(){restorePlaylistItem()});api.playlist_thumbnail_progress=function(el,video,position){if(!!api.get_custom_start&&api.get_custom_start(video)>0){position-=api.get_custom_start(video);if(position<0)position=0}var duration=video.duration;if(!!api.get_custom_duration&&api.get_custom_duration()>0){duration=api.get_custom_duration()}if(!duration){duration=el.data("duration")}if(!duration)return;var progress=100*position/duration;el.css("width",progress+"%")};if(flowplayer.conf.is_logged_in=="1"){var playlist=api.conf.playlist.length>0?api.conf.playlist:[api.conf.clip],playlist_external=jQuery("[rel="+jQuery(root).attr("id")+"]");for(var i in playlist){if(!playlist.hasOwnProperty(i))continue;var video_id=getVideoId(playlist[i]),position=processTempData(tempPositionCookieKeyName,video_id),saw=processTempData(tempSawCookieKeyName,video_id);if(position){if(api.conf.playlist.length){api.conf.playlist[i].sources[0].position=position;var playlist_progress=jQuery("a",playlist_external).eq(i).find(".fvp-progress");if(playlist_progress.length){api.playlist_thumbnail_progress(playlist_progress,api.conf.playlist[i],position)}}else{api.conf.clip.sources[0].position=position}}if(saw){if(api.conf.playlist.length){api.conf.playlist[i].sources[0].saw=true}else{api.conf.clip.sources[0].saw=true}}}}api.bind("finish",function(e,api){if(api.conf.playlist.length){api.conf.playlist[api.video.index].sources[0].saw=true}else{api.conf.clip.sources[0].saw=true}})});jQuery(window).on("beforeunload pagehide",function(){if(!flowplayer.conf.closingPage){flowplayer.conf.closingPage=true;sendVideoPositions()}});if(typeof fv_flowplayer_conf.disable_localstorage!="undefined"){localStorageEnabled=false}if(localStorageEnabled!==null){return localStorageEnabled}localStorageEnabled=true;try{localStorage.setItem("t","t");if(localStorage.getItem("t")!=="t"){localStorageEnabled=false}localStorage.removeItem("t")}catch(e){localStorageEnabled=false}})(jQuery);flowplayer(function(api,root){root=jQuery(root);if(api.conf.playlist.length==0)return;var real_videos=0;jQuery(api.conf.playlist).each(function(k,v){if(typeof v.click=="undefined"){real_videos++}});if(real_videos<2)return;var playlist=jQuery(".fp-playlist-external[rel="+root.attr("id")+"]");var playlist_button=jQuery('<strong class="fv-fp-list">Item 1.</strong>'),playlist_button_name=jQuery('<strong class="fv-fp-list-name">Item 1.</strong>'),playlist_menu=jQuery('<div class="fp-menu fv-fp-list-menu"></div>').insertAfter(root.find(".fp-controls"));var i=0,item_index=[],track_item=[];jQuery(api.conf.playlist).each(function(k,v){if(typeof v.click=="undefined"){var title=parse_title(playlist.find("h4").eq(i));playlist_menu.append('<a data-index="'+k+'">'+(i+1)+". "+title+"</a>");track_item[k]=title;item_index.push(k);i++}});function playlist_button_click(e){e.preventDefault();e.stopPropagation();if(playlist_menu.hasClass("fp-active")){api.hideMenu(playlist_menu[0])}else{root.trigger("click");api.showMenu(playlist_menu[0])}}playlist_button.insertAfter(root.find(".fp-controls .fp-volume")).on("click",playlist_button_click);playlist_button_name.insertAfter(playlist_button).on("click",playlist_button_click);jQuery("a",playlist_menu).on("click",function(){if(typeof api.conf.playlist[jQuery(this).data("index")-1]!="undefined"&&typeof api.conf.playlist[jQuery(this).data("index")-1].click!="undefined"){api.play(jQuery(this).data("index")-1)}else{api.play(jQuery(this).data("index"))}});api.on("ready",function(e,api,video){playlist_menu.find("a").removeClass("fp-selected");var thumb=playlist_menu.find("a[data-index="+video.index+"]");thumb.addClass("fp-selected");var label=fv_flowplayer_translations.playlist_item_no;label=label.replace(/%d/,item_index.indexOf(video.index)+1);label=label.replace(/%s/,parse_title(thumb.find("h4")));playlist_button.html(label);playlist_button_name.html(item_index.indexOf(video.index)+1+". "+track_item[video.index])});function parse_title(el){var tmp=el.clone();tmp.find("i.dur").remove();return tmp.text()}});flowplayer(function(api,root){root=jQuery(root);var playlist=api.conf.playlist,videoIndex;api.bind("load",function(e,api,video){videoIndex=video.index});api.bind("error",function(e,api,error){setTimeout(function(){if(playlist.length>0&&api.error==true){videoIndex=api.video.index;if(api.conf.video_checker=="1"&&playlist[videoIndex].video_checker&&playlist[videoIndex].video_checker.length>0){console.log("FV Player: Video checker message present, stopping auto-advance to next playlist item");return false}api.error=api.loading=false;root.removeClass("is-error");root.find(".fp-message.fp-shown").remove();videoIndex++;if(videoIndex>playlist.length-1){videoIndex=0}console.log("FV Player: Playlist item failure, auto-advancing to "+(videoIndex+1)+". item");api.play(videoIndex)}},1e3)})});flowplayer(function(api,root){root=jQuery(root);var original_prev,original_next,random_seed;if(!root.data("button-no-picture")&&!root.data("button-repeat")&&!root.data("button-rewind"))return;api.bind("ready",function(e,api){if(typeof original_next=="undefined"&&typeof original_prev=="undefined"){original_next=api.next;original_prev=api.prev}if(!api.video.type.match(/^audio/)&&root.data("button-no-picture")&&root.find(".fv-fp-no-picture").length==0){var button_no_picture=jQuery('<span class="fv-fp-no-picture"><svg viewBox="0 0 90 80" width="18px" height="18px" class="fvp-icon fvp-nopicture"><use xlink:href="#fvp-nopicture"></use></svg></span>');button_no_picture.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();jQuery(".fp-engine",root).slideToggle(20);jQuery(this).toggleClass("is-active fp-color-fill")})}if(root.data("button-repeat")){if(api.conf.playlist.length>0&&root.find(".fv-fp-playlist").length==0){var t=fv_flowplayer_translations,playlist_button=jQuery('<strong class="fv-fp-playlist mode-normal"> <svg viewBox="0 0 80.333 80" width="18px" height="18px" class="fvp-icon fvp-replay-list"><title>'+t.playlist_replay_all+'</title><use xlink:href="#fvp-replay-list"></use></svg> <svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-shuffle"><title>'+t.playlist_shuffle+'</title><use xlink:href="#fvp-shuffle"></use></svg> <svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-replay-track"><title>'+t.playlist_replay_video+'</title><use xlink:href="#fvp-replay-track"></use></svg> <span id="fvp-playlist-play" title="'+t.playlist_play_all+'">'+t.playlist_play_all_button+"</span> </strong>"),playlist_menu=jQuery('<div class="fp-menu fv-fp-playlist-menu"> <a data-action="repeat_playlist"><svg viewBox="0 0 80.333 80" width="18px" height="18px" class="fvp-icon fvp-replay-list"><title>'+t.playlist_replay_all+'</title><use xlink:href="#fvp-replay-list"></use></svg> <span class="screen-reader-text">'+t.playlist_replay_all+'</span></a> <a data-action="shuffle_playlist"><svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-shuffle"><title>'+t.playlist_shuffle+'</title><use xlink:href="#fvp-shuffle"></use></svg> <span class="screen-reader-text">'+t.playlist_shuffle+'</span></a> <a data-action="repeat_track"><svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-replay-track"><title>'+t.playlist_replay_video+'</title><use xlink:href="#fvp-replay-track"></use></svg> <span class="screen-reader-text">'+t.playlist_replay_video+'</span></a> <a class="fp-selected" data-action="normal"><span id="fvp-playlist-play" title="'+t.playlist_play_all+'">'+t.playlist_play_all_button+"</span></a> </div>").insertAfter(root.find(".fp-controls"));api.conf.playlist_shuffle=api.conf.track_repeat=false;random_seed=randomize();var should_advance=api.conf.advance;playlist_button.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();if(playlist_menu.css("right")!=="auto"){playlist_menu.css({right:"auto",left:playlist_button.position().left+"px"})}if(playlist_menu.hasClass("fp-active")){api.hideMenu(playlist_menu[0])}else{root.trigger("click");api.showMenu(playlist_menu[0])}});jQuery("a",playlist_menu).on("click",function(){jQuery(this).siblings("a").removeClass("fp-selected");jQuery(this).addClass("fp-selected");playlist_button.removeClass("mode-normal mode-repeat-track mode-repeat-playlist mode-shuffle-playlist");var action=jQuery(this).data("action");if(action=="repeat_playlist"){playlist_button.addClass("mode-repeat-playlist");api.conf.loop=true;api.conf.advance=true;api.video.loop=api.conf.track_repeat=false;api.conf.playlist_shuffle=false}else if(action=="shuffle_playlist"){playlist_button.addClass("mode-shuffle-playlist");api.conf.loop=true;api.conf.advance=true;api.conf.playlist_shuffle=true}else if(action=="repeat_track"){playlist_button.addClass("mode-repeat-track");api.conf.track_repeat=api.video.loop=true;api.conf.loop=api.conf.playlist_shuffle=false}else if(action=="normal"){playlist_button.addClass("mode-normal");api.conf.track_repeat=api.video.loop=false;api.conf.loop=api.conf.playlist_shuffle=false}if(api.conf.playlist_shuffle){api.next=function(){api.play(random_seed.pop());if(random_seed.length==0)random_seed=randomize()};api.prev=function(){api.play(random_seed.shift());if(random_seed.length==0)random_seed=randomize()}}else{api.next=original_next;api.prev=original_prev}});if(api.conf.loop){jQuery("a[data-action=repeat_playlist]",playlist_menu).trigger("click")}api.on("progress",function(){api.video.loop=api.conf.track_repeat});api.on("finish.pl",function(e,api){console.log("playlist_repeat",api.conf.loop,"advance",api.conf.advance,"video.loop",api.video.loop);if(api.conf.playlist_shuffle){api.play(random_seed.pop());if(random_seed.length==0)random_seed=randomize()}})}else if(root.find(".fv-fp-track-repeat").length==0&&api.conf.playlist.length==0){var button_track_repeat=jQuery('<strong class="fv-fp-track-repeat"><svg viewBox="0 0 80.333 71" width="18px" height="18px" class="fvp-icon fvp-replay-track"><use xlink:href="#fvp-replay-track"></use></svg></strong>');button_track_repeat.insertAfter(root.find(".fp-controls .fp-volume")).on("click",function(e){e.preventDefault();e.stopPropagation();jQuery(this).toggleClass("is-active fp-color-fill",api.video.loop);if(api.video.loop){api.video.loop=false}else{api.video.loop=true}});if(api.conf.loop){button_track_repeat.addClass("is-active fp-color-fill")}}}if(root.data("button-rewind")){if(root.find(".fv-fp-rewind").length==0){var button_rewind=jQuery('<span class="fv-fp-rewind"><svg viewBox="0 0 24 24" width="21px" height="21px" class="fvp-icon fvp-rewind"><use xlink:href="#fvp-rewind"></use></svg></span>');button_rewind.insertBefore(root.find(".fp-controls .fp-playbtn")).on("click",function(e){e.preventDefault();e.stopPropagation();api.seek(api.video.time-10)});button_rewind.toggle(!api.video.live)}if(root.find(".fv-fp-forward").length==0){var button_forward=jQuery('<span class="fv-fp-forward"><svg viewBox="0 0 24 24" width="21px" height="21px" class="fvp-icon fvp-forward"><use xlink:href="#fvp-forward"></use></svg></span>');button_forward.insertAfter(root.find(".fp-controls .fp-playbtn")).on("click",function(e){e.preventDefault();e.stopPropagation();api.seek(api.video.time+10)});button_forward.toggle(!api.video.live)}}}).bind("unload",function(){root.find(".fv-fp-no-picture").remove();root.find(".fv-fp-playlist").remove();root.find(".fv-fp-track-repeat").remove()});function array_shuffle(a){var j,x,i;for(i=a.length;i;i--){j=Math.floor(Math.random()*i);x=a[i-1];a[i-1]=a[j];a[j]=x}return a}function randomize(random_seed){random_seed=[];jQuery(api.conf.playlist).each(function(k,v){random_seed.push(k)});random_seed=array_shuffle(random_seed);console.log("FV Player Randomizer random seed:",random_seed);return random_seed}});flowplayer(function(api,root){var $root=jQuery(root),start_index=$root.data("playlist_start");if(typeof start_index=="undefined")return;function start_position_changer(){if($root.data("position_changed")!==1&&api.conf.playlist.length){start_index--;api.play(start_index);$root.data("position_changed",1)}}api.bind("unload",function(){start_index=$root.data("playlist_start");$root.removeData("position_changed");api.one("ready",start_position_changer)});api.one("ready",start_position_changer);jQuery(".fp-ui",root).on("click",function(){start_position_changer();$root.data("position_changed",1)})});document.addEventListener("custombox:overlay:close",function(e){console.log("FV Player: Custombox/Popup anything ligtbox closed");var $players=jQuery(this).find(".flowplayer");if($players.length==0)return;console.log("FV Player: Custombox/Popup anything ligtbox contains a player");$players.each(function(index,player){var api=jQuery(player).data("flowplayer");if(typeof api!="undefined"){if(api.playing){console.log("FV Player: Custombox/Popup anything ligtbox video pause");api.pause()}else if(api.loading){api.one("ready",function(){console.log("FV Player: Custombox/Popup anything ligtbox video unload");api.unload()})}}})});flowplayer(function(api,root){api.bind("finish",function(){var finished_at=api.video.time;if(api.video.loop){api.one("pause",function(){if(finished_at<=api.video.time){api.resume()}})}})});function fv_flowplayer_amazon_s3(hash,time){jQuery("#wpfp_"+hash).bind("error",function(e,api,error){var fv_fp_date=new Date;if(error.code==4&&fv_fp_date.getTime()>fv_fp_utime+parseInt(time)){jQuery(e.target).find(".fp-message").delay(500).queue(function(n){jQuery(this).html(fv_flowplayer_translations.video_expired);n()})}})}flowplayer(function(api,root){root=jQuery(root);root.find(".fp-logo").removeAttr("href");if(root.hasClass("no-controlbar")){var timelineApi=api.sliders.timeline;timelineApi.disable(true);api.bind("ready",function(){timelineApi.disable(true)})}jQuery(".fvfp_admin_error",root).remove();root.find(".fp-logo, .fp-header").on("click",function(e){if(e.target!==this)return;root.find(".fp-ui").trigger("click")});jQuery(".fvp-share-bar .sharing-facebook",root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Facebook</title><path d="M11.9 5.2l-2.6 0 0-1.6c0-0.7 0.3-0.7 0.7-0.7 0.3 0 1.6 0 1.6 0l0-2.9 -2.3 0c-2.6 0-3.3 2-3.3 3.3l0 2 -1.6 0 0 2.9 1.6 0c0 3.6 0 7.8 0 7.8l3.3 0c0 0 0-4.2 0-7.8l2.3 0 0.3-2.9Z"/></svg>');jQuery(".fvp-share-bar .sharing-twitter",root).append('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="#fff"><title>Twitter</title><path d="M16 3.1c-0.6 0.3-1.2 0.4-1.9 0.5 0.7-0.4 1.2-1 1.4-1.8 -0.6 0.4-1.3 0.6-2.1 0.8 -0.6-0.6-1.4-1-2.4-1 -2 0.1-3.2 1.6-3.2 4 -2.7-0.1-5.1-1.4-6.7-3.4 -0.9 1.4 0.2 3.8 1 4.4 -0.5 0-1-0.1-1.5-0.4l0 0.1c0 1.6 1.1 2.9 2.6 3.2 -0.7 0.2-1.3 0.1-1.5 0.1 0.4 1.3 1.6 2.2 3 2.3 -1.6 1.7-4.6 1.4-4.8 1.3 1.4 0.9 3.2 1.4 5 1.4 6 0 9.3-5 9.3-9.3 0-0.1 0-0.3 0-0.4 0.6-0.4 1.2-1 1.6-1.7Z"/></svg>');jQuery(".fvp-share-bar .sharing-email",root).append('<svg xmlns="http://www.w3.org/2000/svg" height="16" viewBox="0 0 16 16" width="16" fill="#fff"><title>Email</title><path d="M8 10c0 0 0 0-1 0L0 6v7c0 1 0 1 1 1h14c1 0 1 0 1-1V6L9 10C9 10 8 10 8 10zM15 2H1C0 2 0 2 0 3v1l8 4 8-4V3C16 2 16 2 15 2z"/></svg>');jQuery(".fp-header",root).prepend(jQuery(".fvp-share-bar",root));if(api.conf.playlist.length){var show=true;var playlist=api.conf.playlist;if(playlist.length==2){if(typeof playlist[0].click!="undefined"&&typeof playlist[1].click=="undefined"){show=false}if(typeof playlist[0].click=="undefined"&&typeof playlist[1].click!="undefined"){show=false}}else if(playlist.length==3){if(typeof playlist[0].click!="undefined"&&typeof playlist[1].click=="undefined"&&typeof playlist[2].click!="undefined"){show=false}}if(show){var prev=jQuery('<a class="fp-icon fv-fp-prevbtn"></a>');var next=jQuery('<a class="fp-icon fv-fp-nextbtn"></a>');root.find(".fp-controls .fp-playbtn").before(prev).after(next);prev.on("click",function(){api.trigger("prev",[api]);api.prev()});next.on("click",function(){api.trigger("next",[api]);api.next()})}}if(typeof fv_player_editor_conf!="undefined"){root.on("click",".fvp-sharing > li",function(e){e.preventDefault();fv_player_notice(root,fv_player_editor_translations.link_notice,2e3);return false})}api.bind("pause resume finish unload ready",function(e,api){root.addClass("no-brand")});api.one("ready",function(){root.find(".fp-fullscreen").clone().appendTo(root.find(".fp-controls"))});api.on("ready",function(e,api,video){setTimeout(function(){jQuery(".fvp-share-bar",root).show();jQuery(".fv-player-buttons-wrap",root).appendTo(jQuery(".fv-player-buttons-wrap",root).parent().find(".fp-ui"))},100)});api.bind("finish",function(){var url=root.data("fv_redirect");if(url&&(typeof api.video.is_last=="undefined"||api.video.is_last)){location.href=url}});if(flowplayer.support.iOS&&flowplayer.support.iOS.version==11){api.bind("error",function(e,api,error){if(error.code==4)root.find(".fp-engine").hide()})}jQuery(document).on("contextmenu",".flowplayer",function(e){e.preventDefault()});api.one("ready",function(e,api,video){root.find(".fp-chromecast").insertAfter(root.find(".fp-header .fp-fullscreen"))});root.find(".fp-waiting").html('<div class="fp-preload"><b></b><b></b><b></b><b></b></div>');var id=root.attr("id"),alternative=!flowplayer.conf.native_fullscreen&&flowplayer.conf.mobile_alternative_fullscreen,events_enter="fakefullscreen",events_exit="fakefullscreen-exit";if(!flowplayer.support.fullscreen){events_enter+=" fullscreen";events_exit+=" fullscreen-exit"}api.bind(events_enter,function(e,api){jQuery("#wpadminbar, .nc_wrapper").hide();if(alternative||e.type=="fakefullscreen"){if(api.video.type=="video/youtube")return;root.before('<span data-fv-placeholder="'+id+'"></span>');root.appendTo("body")}});api.bind(events_exit,function(e,api,video){jQuery("#wpadminbar, .nc_wrapper").show();if(alternative||e.type=="fakefullscreen-exit"){jQuery("span[data-fv-placeholder="+id+"]").replaceWith(root)}})});(function(){var extension=function(flowplayer){flowplayer(function(api,root){if(!jQuery(root).data("speedb"))return;var support=flowplayer.support;if(!support.video||!support.inlineVideo)return;var common=flowplayer.common,bean=flowplayer.bean,ui=common.find(".fp-ui",root)[0],controlbar=common.find(".fp-controls",ui)[0],speeds=api.conf.speeds;bean.on(root,"click",".fp-speed",function(){var menu=common.find(".fp-speed-menu",root)[0];if(common.hasClass(menu,"fp-active"))api.hideMenu();else api.showMenu(menu)});bean.on(root,"click",".fp-speed-menu a",function(ev){var s=ev.target.getAttribute("data-speed");api.speed(s)});api.on("speed",function(ev,_a,rate){if(speeds.length>1){selectSpeed(rate)}}).on("ready",function(ev,api){removeMenu();if(flowplayer.support.android&&api.engine.engineName=="html5"&&api.video.type=="application/x-mpegurl")return;speeds=api.conf.speeds;if(speeds.length>1){createMenu()}});function removeMenu(){common.find(".fp-speed-menu",root).forEach(common.removeNode);common.find(".fp-speed",root).forEach(common.removeNode)}function round(val){return Math.round(val*100)/100}function createMenu(){controlbar.appendChild(common.createElement("strong",{className:"fp-speed"},api.currentSpeed+"x"));var menu=common.createElement("div",{className:"fp-menu fp-speed-menu",css:{width:"auto"}},"<strong>Speed</strong>");speeds.forEach(function(s){var a=common.createElement("a",{"data-speed":round(s)},round(s)+"x");menu.appendChild(a)});ui.appendChild(menu);selectSpeed(api.currentSpeed);jQuery(root).find(".fp-speed-menu strong").text(fv_flowplayer_translations.speed)}function selectSpeed(rate){common.find(".fp-speed",root)[0].innerHTML=rate+"x";common.find(".fp-speed-menu a",root).forEach(function(el){common.toggleClass(el,"fp-selected",el.getAttribute("data-speed")==rate);common.toggleClass(el,"fp-color",el.getAttribute("data-speed")==rate)})}})};if(typeof module==="object"&&module.exports)module.exports=extension;else if(typeof window.flowplayer==="function")extension(window.flowplayer)})();flowplayer(function(api,root){if(typeof fv_flowplayer_conf.disable_localstorage!="undefined"){return}api.on("speed",function(ev,_a,rate){try{window.localStorage.fv_player_speed=rate}catch(e){}});api.on("ready",function(){if(window.localStorage.fv_player_speed&&jQuery(root).find("strong.fp-speed").is(":visible")){api.speed(parseFloat(window.localStorage.fv_player_speed))}if(jQuery(root).data("volume")==0){api.mute(true,true)}})});flowplayer(function(api,root){root=jQuery(root);var last_tracked=-1;if(!api.conf.fv_stats||!api.conf.fv_stats.enabled&&(!root.data("fv_stats")||root.data("fv_stats")=="no"))return;api.on("ready finish",function(e,api){api.one("progress",function(e,api){if(root.data("fv_stats_data")){try{var player_post_data=root.data("fv_stats_data")}catch(e){return false}if(last_tracked==get_index())return;last_tracked=get_index();jQuery.post(api.conf.fv_stats.url,{blog_id:api.conf.fv_stats.blog_id,video_id:api.video.id?api.video.id:0,player_id:player_post_data.player_id,post_id:player_post_data.post_id,tag:"play"})}})}).on("finish",function(){last_tracked=-1});function get_index(){return api.video.index?api.video.index:0}});flowplayer(function(api,root){var $root=jQuery(root);var $playerDiv=$root.find(".fp-player");var sticky=$root.data("fvsticky");var globalSticky=false;var videoRatio=$root.data("ratio"),is_sticky=false;if(typeof videoRatio=="undefined"){videoRatio=.5625}if(flowplayer.conf.sticky_video==1&&typeof sticky=="undefined"){globalSticky=true}if(globalSticky||sticky){if(flowplayer.support.firstframe){var stickyPlace=flowplayer.conf.sticky_place;var stickyWidth=flowplayer.conf.sticky_width;if(stickyWidth==""){stickyWidth=380}var stickyHeight=stickyWidth*videoRatio;fv_player_sticky_video()}else{return}}function fv_player_sticky_video(){var change=false;var $window=jQuery(window),$flowplayerDiv=$root,top=$flowplayerDiv.offset().top,offset=Math.floor(top+$flowplayerDiv.outerHeight()/2);api.on("ready",function(){change=true});api.on("progress",function(){change=true});api.on("unload",function(){change=false;fv_player_sticky_class_remove();$root.removeClass("is-unSticky")});$window.on("resize",function(){if(!is_big_enough()){if(is_sticky){fv_player_sticky_class_remove()}return}top=$flowplayerDiv.offset().top;offset=Math.floor(top+$flowplayerDiv.outerHeight()/2)}).on("scroll",function(){if(!is_big_enough()){if(is_sticky){fv_player_sticky_class_remove()}return}top=$flowplayerDiv.offset().top;offset=Math.floor(top+$flowplayerDiv.outerHeight()/2);if($window.scrollTop()>offset&&change){if(jQuery("div.flowplayer.is-unSticky").length>0){console.log("unSticky",jQuery("div.flowplayer.is-unSticky").length);return false}else{fv_player_sticky_class_add()}}else{fv_player_sticky_class_remove();change=false}})}function fv_player_sticky_class_add(){if($playerDiv.hasClass("is-sticky-"+stickyPlace)){return}else{$playerDiv.addClass("is-sticky-"+stickyPlace);if($root.find("a.fp-sticky").length==0){$root.find("div.fp-header").prepend('<a class="fp-sticky fp-icon"></a>')}$playerDiv.css("width",stickyWidth);$playerDiv.css("height",stickyHeight);$playerDiv.css("max-height",stickyHeight);is_sticky=true;api.trigger("sticky",[api])}$playerDiv.parent(".flowplayer").addClass("is-stickable")}function fv_player_sticky_class_remove(){$playerDiv.removeClass("is-sticky-"+stickyPlace);$playerDiv.css("width","");$playerDiv.css("height","");$playerDiv.css("max-height","");$playerDiv.parent(".flowplayer").removeClass("is-stickable");if(is_sticky){is_sticky=false;api.trigger("sticky-exit",[api])}}function is_big_enough(){return jQuery(window).innerWidth()>=1020}});jQuery(function($){$(document).on("click","a.fp-sticky",function(){$("div.flowplayer.is-stickable").addClass("is-unSticky");var $playerDiv=$("div.flowplayer.is-stickable").find(".fp-player");$playerDiv.removeClass("is-sticky-right-bottom");$playerDiv.removeClass("is-sticky-left-bottom");$playerDiv.removeClass("is-sticky-right-top");$playerDiv.removeClass("is-sticky-left-top");$playerDiv.css("width","");$playerDiv.css("height","");$playerDiv.css("max-height","");if(is_sticky){is_sticky=false;api.trigger("sticky-exit",[api])}});$(document).on("click","div.flowplayer.is-unSticky",function(){$("div.flowplayer").removeClass("is-unSticky")})});flowplayer(function(api,root){root=jQuery(root);if(typeof fv_flowplayer_conf.disable_localstorage!="undefined"){return}var ls=window.localStorage;api.on("ready",function(e,api,video){if(root.find("strong.fp-cc").is(":visible")){if(ls.fv_player_subtitle&&api.video.subtitles.length){if(ls.fv_player_subtitle==="none"){api.disableSubtitles()}else{api.video.subtitles.forEach(function(item,index){if(item.srclang===ls.fv_player_subtitle){api.loadSubtitles(index)}})}}else{var defaultSubtitle=video.subtitles.filter(function(one){return one["fv_default"]})[0];if(defaultSubtitle){api.loadSubtitles(video.subtitles.indexOf(defaultSubtitle))}}}root.find(".fp-subtitle-menu").on("click",function(e){var subtitle_index=e.target.getAttribute("data-subtitle-index");if(typeof subtitle_index=="string"){try{ls.fv_player_subtitle=subtitle_index>-1?api.video.subtitles[subtitle_index].srclang:"none"}catch(e){}}})})});flowplayer(function(api,root){root=jQuery(root);var currentPoint,check=false;api.bind("cuepoint",function(e,api,cue){check=false;if(cue.subtitle){currentPoint=cue.index}});api.on("ready",function(e,api){root.find(".fp-subtitle-menu strong").text(fv_flowplayer_translations.closed_captions);root.find('.fp-subtitle-menu a[data-subtitle-index="-1"]').text(fv_flowplayer_translations.no_subtitles)});root.on("click",".fp-subtitle-menu a[data-subtitle-index]",function(e){if(jQuery(this).data("subtitle-index")>-1){check=true;api.on("progress",time_check)}});function time_check(e,api,time){if(check){(api.cuepoints||[]).forEach(function(cue,index){var entry=cue.subtitle;if(entry&¤tPoint!=index){if(time>=cue.time&&(!entry.endTime||time<=entry.endTime)){api.trigger("cuepoint",[api,cue])}}})}}});if(typeof flowplayer!=="undefined"&&typeof fv_flowplayer_conf!="undefined"&&fv_flowplayer_conf.video_hash_links){flowplayer(function(api,root){if(jQuery(root).find(".sharing-link").length>0){var abEnd,abStart,hash,sTime,abloop;function update_link(abStartNew,abEndNew){hash=fv_player_get_video_link_hash(api);sTime=","+fv_player_time_hms(api.video.time);if(abStartNew&&abEndNew){abStart=","+fv_player_time_hms_ms(abStartNew+api.get_custom_start());abEnd=","+fv_player_time_hms_ms(abEndNew+api.get_custom_start())}else{abEnd=abloop&&typeof api.get_ab_end()!="undefined"&&api.get_ab_end()?","+fv_player_time_hms_ms(api.get_ab_end()):"";abStart=abloop&&typeof api.get_ab_start()!="undefined"&&api.get_ab_start()?","+fv_player_time_hms_ms(api.get_ab_start()):""}jQuery(".sharing-link",root).attr("href",jQuery(".sharing-link",root).attr("href").replace(/#.*/,"")+"#"+hash+sTime+abStart+abEnd)}api.on("ready",function(e,api,video){if(!api.fv_noUiSlider)return;api.fv_noUiSlider.on("set",function(values){update_link(values[0],values[1])})});api.on("progress",function(e,api){if(!api.video.sources||!api.video.sources[0]){return}update_link()});api.on("abloop",function(e,api,active){abloop=active;if(!api.playing){update_link()}});jQuery(".sharing-link",root).on("click",function(e){fv_player_clipboard(jQuery(this).attr("href"),function(){e.preventDefault();fv_player_notice(root,fv_flowplayer_translations.link_copied,2e3)})})}});jQuery(document).on("click",'a[href*="fvp_"]',function(){var link=jQuery(this);setTimeout(function(){if(link.parents(".fvp-share-bar").length==0)fv_autoplay_exec()})})}flowplayer(function(api,root){root=jQuery(root);var bean=flowplayer.bean;var restore=flowplayer.conf.default_volume;root.on("mousedown touchstart",".fp-volumebtn",function(e){var volumebtn=jQuery(this);if(api.volumeLevel==0){volumebtn.one("click",function(){api.volume(restore);return false})}});root.on("mousedown touchstart mouseup touchend",".fp-volumebar",function(e){if(api.volumeLevel!=0){restore=api.volumeLevel}});api.on("volume",function(e,api){if(root.hasClass("is-mouseover")&&!api.muted){if(api.volumeLevel==0){bean.off(flowplayer.support.touch?root:document,"mousemove.sld touchmove.sld");api.mute(true)}}});var deal_with_muted_start=false;api.one("ready",function(e,api){if(root.hasClass("is-audio"))return;deal_with_muted_start=true});api.on("progress",function(e,api,time){if(deal_with_muted_start&&time>1){deal_with_muted_start=false;var video=jQuery("root").find("video");if(video.length&&!hasAudio(video[0])){return}if(api.muted||api.volumeLevel==0){if(localStorage.muted=="true"||localStorage.volume=="0"){return}var mute_notice=jQuery('<div class="fp-message fp-message-muted"><span class="fp-icon fp-volumebtn-notice"></span> '+fv_flowplayer_translations.click_to_unmute+"</div>");mute_notice.on("click touchstart",function(){api.mute(false);api.volume(1)});root.find(".fp-ui").append(mute_notice);root.addClass("has-fp-message-muted");setTimeout(remove_volume_notice,5e3)}}});api.on("mute volume",function(){if(!api.muted||api.volumeLevel>0){remove_volume_notice()}});function remove_volume_notice(){root.removeClass("has-fp-message-muted");root.find(".fp-message-muted").remove()}function hasAudio(video){return video.mozHasAudio||Boolean(video.webkitAudioDecodedByteCount)||Boolean(video.audioTracks&&video.audioTracks.length)}});if(typeof flowplayer!="undefined"){flowplayer(function(api,root){root=jQuery(root);if(navigator.userAgent.match(/iPhone.* OS [0-6]_/i)){api.one("progress",function(e){if(typeof api.video.subtitles!=="undefined"&&api.video.subtitles.length){fv_player_warning(root,fv_flowplayer_translations.warning_iphone_subs)}})}if(flowplayer.support.android&&flowplayer.support.android.version<5&&(flowplayer.support.android.samsung||flowplayer.support.browser.safari)){fv_player_warning(root,fv_flowplayer_translations.warning_unstable_android,"firefox")}if(/Android 4/.test(navigator.userAgent)&&!/Firefox/.test(navigator.userAgent)){api.on("ready",function(e,api,video){setTimeout(function(){if(video.src&&video.src.match(/fpdl.vimeocdn.com/)&&(video.time==0||video.time==1)){fv_player_warning(root,fv_flowplayer_translations.warning_unstable_android,"firefox");api.on("progress",function(e,api){root.prev().find(".fv-player-warning-firefox").remove()})}},1500)});api.on("error",function(e,api,error){if(error.MEDIA_ERR_NETWORK==2&&error.video.src.match(/fpdl.vimeocdn.com/)){fv_player_warning(root,fv_flowplayer_translations.warning_unstable_android,"firefox")}})}if(/Safari/.test(navigator.userAgent)&&/Version\/5/.test(navigator.userAgent)){api.on("error",function(e,api,error){if(error.video.src.match(/fpdl.vimeocdn.com/)){fv_player_warning(root,fv_flowplayer_translations.warning_old_safari)}})}var sup=flowplayer.support;if(sup.android&&(sup.android.samsung&&parseInt(sup.browser.version)<66||sup.browser.safari)){api.on("error",function(e,api,error){fv_player_warning(root,fv_flowplayer_translations.warning_samsungbrowser,"warning_samsungbrowser")})}});function fv_player_warning(root,warning,classname){var wrapper=jQuery(root).prev(".fv-player-warning-wrapper");if(wrapper.length==0){jQuery(root).before('<div class="fv-player-warning-wrapper">');wrapper=jQuery(root).prev(".fv-player-warning-wrapper")}if(wrapper.find(".fv-player-warning-"+classname).length==0){var latest=jQuery("<p style='display: none' "+(classname?" class='fv-player-warning-"+classname+"'":"")+">"+warning+"</p>");wrapper.append(latest);latest.slideDown()}}}
|
flowplayer/modules/abr-remember.module.js
CHANGED
@@ -4,6 +4,10 @@
|
|
4 |
flowplayer( function(api,root) {
|
5 |
root = jQuery(root);
|
6 |
|
|
|
|
|
|
|
|
|
7 |
var hlsjs;
|
8 |
|
9 |
// this is the proper place to pick the initial HLS video quality
|
4 |
flowplayer( function(api,root) {
|
5 |
root = jQuery(root);
|
6 |
|
7 |
+
if( typeof api.conf.disable_localstorage !='undefined' ) {
|
8 |
+
return;
|
9 |
+
}
|
10 |
+
|
11 |
var hlsjs;
|
12 |
|
13 |
// this is the proper place to pick the initial HLS video quality
|
flowplayer/modules/appearance.module.js
CHANGED
@@ -141,12 +141,15 @@ flowplayer(function(api, root) {
|
|
141 |
* Tabbed playlist
|
142 |
*/
|
143 |
jQuery(document).on("tabsactivate", '.fv_flowplayer_tabs_content', function(event, ui){
|
144 |
-
var oldPlayer = jQuery('.flowplayer
|
|
|
|
|
145 |
if( typeof(oldPlayer) != "undefined" ) {
|
146 |
oldPlayer.pause();
|
147 |
}
|
148 |
-
|
|
|
149 |
var objPlayer = jQuery('.flowplayer',ui.newPanel);
|
150 |
var api = objPlayer.data('flowplayer');
|
151 |
-
api.load();
|
152 |
});
|
141 |
* Tabbed playlist
|
142 |
*/
|
143 |
jQuery(document).on("tabsactivate", '.fv_flowplayer_tabs_content', function(event, ui){
|
144 |
+
var oldPlayer = jQuery( ui.oldPanel ).find('.flowplayer').data('flowplayer');
|
145 |
+
|
146 |
+
// pause old player to make sure it does not keep playing while the new video is loading
|
147 |
if( typeof(oldPlayer) != "undefined" ) {
|
148 |
oldPlayer.pause();
|
149 |
}
|
150 |
+
|
151 |
+
// load new player
|
152 |
var objPlayer = jQuery('.flowplayer',ui.newPanel);
|
153 |
var api = objPlayer.data('flowplayer');
|
154 |
+
api.load();
|
155 |
});
|
flowplayer/modules/embed.module.js
CHANGED
@@ -5,7 +5,7 @@ flowplayer(function(player, root) {
|
|
5 |
root = jQuery(root);
|
6 |
if( typeof(root.data('fv-embed')) == 'undefined' || !root.data('fv-embed') || root.data('fv-embed') == 'false' ) return;
|
7 |
|
8 |
-
player.embedCode = function() {
|
9 |
var video = player.video;
|
10 |
var width = root.width();
|
11 |
var height = root.height();
|
@@ -28,19 +28,27 @@ flowplayer(function(player, root) {
|
|
28 |
});
|
29 |
|
30 |
jQuery(document).on('click', '.flowplayer .embed-code-toggle', function() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
var button = jQuery(this);
|
32 |
var player = button.parents('.flowplayer');
|
33 |
var api = player.data('flowplayer');
|
34 |
if( typeof(api.embedCode) == 'function') {
|
35 |
player.find('.embed-code textarea').val(api.embedCode());
|
36 |
}
|
37 |
-
|
38 |
fv_player_clipboard( player.find('.embed-code textarea').val(), function() {
|
39 |
fv_player_notice(player,fv_flowplayer_translations.embed_copied,2000);
|
40 |
}, function() {
|
41 |
button.parents('.fvp-share-bar').find('.embed-code').toggle();
|
42 |
button.parents('.fvp-share-bar').toggleClass('visible');
|
43 |
});
|
44 |
-
|
45 |
return false;
|
46 |
} );
|
5 |
root = jQuery(root);
|
6 |
if( typeof(root.data('fv-embed')) == 'undefined' || !root.data('fv-embed') || root.data('fv-embed') == 'false' ) return;
|
7 |
|
8 |
+
player.embedCode = function() {
|
9 |
var video = player.video;
|
10 |
var width = root.width();
|
11 |
var height = root.height();
|
28 |
});
|
29 |
|
30 |
jQuery(document).on('click', '.flowplayer .embed-code-toggle', function() {
|
31 |
+
var root = jQuery(this).closest('.flowplayer');
|
32 |
+
|
33 |
+
// show notice in editor
|
34 |
+
if( typeof fv_player_editor_conf != 'undefined') {
|
35 |
+
fv_player_notice( root, fv_player_editor_translations.embed_notice , 2000 );
|
36 |
+
return false;
|
37 |
+
}
|
38 |
+
|
39 |
var button = jQuery(this);
|
40 |
var player = button.parents('.flowplayer');
|
41 |
var api = player.data('flowplayer');
|
42 |
if( typeof(api.embedCode) == 'function') {
|
43 |
player.find('.embed-code textarea').val(api.embedCode());
|
44 |
}
|
45 |
+
|
46 |
fv_player_clipboard( player.find('.embed-code textarea').val(), function() {
|
47 |
fv_player_notice(player,fv_flowplayer_translations.embed_copied,2000);
|
48 |
}, function() {
|
49 |
button.parents('.fvp-share-bar').find('.embed-code').toggle();
|
50 |
button.parents('.fvp-share-bar').toggleClass('visible');
|
51 |
});
|
52 |
+
|
53 |
return false;
|
54 |
} );
|
flowplayer/modules/fv-player.js
CHANGED
@@ -15,7 +15,12 @@ if( typeof(fv_flowplayer_conf) != "undefined" ) {
|
|
15 |
flowplayer.conf.embed = false;
|
16 |
flowplayer.conf.share = false;
|
17 |
flowplayer.conf.analytics = false;
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
19 |
// we had a problem that some websites would change the key in HTML if stored as $62\d+
|
20 |
try {
|
21 |
flowplayer.conf.key = atob(flowplayer.conf.key);
|
@@ -652,11 +657,11 @@ function fv_player_time_hms(seconds) {
|
|
652 |
}
|
653 |
|
654 |
// leading zero for minutes
|
655 |
-
if ( hours && minutes < 10) { //
|
656 |
minutes = "0" + minutes + "m";
|
657 |
-
} else if(
|
658 |
-
minutes += "m";
|
659 |
-
} else {
|
660 |
minutes = "";
|
661 |
}
|
662 |
|
@@ -912,7 +917,7 @@ function fv_autoplay_exec(){
|
|
912 |
} else {
|
913 |
fv_player_did_autoplay = true;
|
914 |
|
915 |
-
if( api.conf.playlist.length &&
|
916 |
api.play( parseInt(autoplay) );
|
917 |
} else {
|
918 |
api.load();
|
15 |
flowplayer.conf.embed = false;
|
16 |
flowplayer.conf.share = false;
|
17 |
flowplayer.conf.analytics = false;
|
18 |
+
|
19 |
+
// localstorage disabled by admin
|
20 |
+
if( typeof(fv_flowplayer_conf.disable_localstorage) != 'undefined' ) {
|
21 |
+
flowplayer.conf.storage = {} // set empty to disable
|
22 |
+
}
|
23 |
+
|
24 |
// we had a problem that some websites would change the key in HTML if stored as $62\d+
|
25 |
try {
|
26 |
flowplayer.conf.key = atob(flowplayer.conf.key);
|
657 |
}
|
658 |
|
659 |
// leading zero for minutes
|
660 |
+
if ( hours && minutes < 10) { // example: 1h05m
|
661 |
minutes = "0" + minutes + "m";
|
662 |
+
} else if( minutes ) { // example: 1h15m, 15m20s
|
663 |
+
minutes += "m";
|
664 |
+
} else { // example: 15s
|
665 |
minutes = "";
|
666 |
}
|
667 |
|
917 |
} else {
|
918 |
fv_player_did_autoplay = true;
|
919 |
|
920 |
+
if( api.conf.playlist.length && !isNaN(parseFloat(autoplay)) && isFinite(autoplay) ) {
|
921 |
api.play( parseInt(autoplay) );
|
922 |
} else {
|
923 |
api.load();
|
flowplayer/modules/hls-audio.module.js
CHANGED
@@ -55,10 +55,10 @@ flowplayer( function(api,root) {
|
|
55 |
return;
|
56 |
}
|
57 |
|
58 |
-
hls_audio_button = jQuery('<strong class="fv-fp-hls">
|
59 |
hls_audio_menu = jQuery('<div class="fp-menu fv-fp-hls-menu"></div>').insertAfter( root.find('.fp-controls') );
|
60 |
|
61 |
-
hls_audio_menu.append('<strong>
|
62 |
|
63 |
// audio options
|
64 |
audioUXGroup.forEach(function (audioTrack) {
|
55 |
return;
|
56 |
}
|
57 |
|
58 |
+
hls_audio_button = jQuery('<strong class="fv-fp-hls">' + fv_flowplayer_translations.audio_button + '</strong>');
|
59 |
hls_audio_menu = jQuery('<div class="fp-menu fv-fp-hls-menu"></div>').insertAfter( root.find('.fp-controls') );
|
60 |
|
61 |
+
hls_audio_menu.append('<strong>' + fv_flowplayer_translations.audio_menu + '</strong>');
|
62 |
|
63 |
// audio options
|
64 |
audioUXGroup.forEach(function (audioTrack) {
|
flowplayer/modules/hls-safari-fixes.module.js
CHANGED
@@ -42,7 +42,7 @@ flowplayer( function(api,root) {
|
|
42 |
api.bind('beforeseek', wait_for_stalled );
|
43 |
|
44 |
function debug(e) {
|
45 |
-
console.log("FV
|
46 |
}
|
47 |
|
48 |
function wait_for_stalled() {
|
@@ -57,13 +57,13 @@ flowplayer( function(api,root) {
|
|
57 |
are_waiting_already++;
|
58 |
if( are_waiting_already > 1 ) {
|
59 |
if( are_waiting_already > 3 ) {
|
60 |
-
console.log("FV
|
61 |
video_tag.trigger( "stalled" );
|
62 |
}
|
63 |
return;
|
64 |
}
|
65 |
|
66 |
-
console.log("FV
|
67 |
|
68 |
// then it also triggers this event if it really fails to load more
|
69 |
video_tag.one( "stalled", function() {
|
@@ -71,7 +71,7 @@ flowplayer( function(api,root) {
|
|
71 |
|
72 |
// simple video files can be checked directly
|
73 |
if( api.video.type.match(/video\//) ) {
|
74 |
-
console.log("FV
|
75 |
|
76 |
// create a new video tag and let iOS fetch the meta data
|
77 |
var test_video = document.createElement('video');
|
@@ -97,13 +97,13 @@ flowplayer( function(api,root) {
|
|
97 |
|
98 |
// did the video advance?
|
99 |
if( api.video.time != time ) {
|
100 |
-
console.log("FV
|
101 |
return;
|
102 |
}
|
103 |
|
104 |
// the video is paused, so it should not progress and it's fine
|
105 |
if( api.paused ) {
|
106 |
-
console.log("FV
|
107 |
return;
|
108 |
}
|
109 |
|
42 |
api.bind('beforeseek', wait_for_stalled );
|
43 |
|
44 |
function debug(e) {
|
45 |
+
console.log("FV Player: iOS video element: " + e.type);
|
46 |
}
|
47 |
|
48 |
function wait_for_stalled() {
|
57 |
are_waiting_already++;
|
58 |
if( are_waiting_already > 1 ) {
|
59 |
if( are_waiting_already > 3 ) {
|
60 |
+
console.log("FV Player: iOS video element needs a push, triggering 'stalled'");
|
61 |
video_tag.trigger( "stalled" );
|
62 |
}
|
63 |
return;
|
64 |
}
|
65 |
|
66 |
+
console.log("FV Player: iOS video element will trigger error after 'stalled' arrives");
|
67 |
|
68 |
// then it also triggers this event if it really fails to load more
|
69 |
video_tag.one( "stalled", function() {
|
71 |
|
72 |
// simple video files can be checked directly
|
73 |
if( api.video.type.match(/video\//) ) {
|
74 |
+
console.log("FV Player: Running check of video file...");
|
75 |
|
76 |
// create a new video tag and let iOS fetch the meta data
|
77 |
var test_video = document.createElement('video');
|
97 |
|
98 |
// did the video advance?
|
99 |
if( api.video.time != time ) {
|
100 |
+
console.log("FV Player: iOS video element continues playing, no need for error");
|
101 |
return;
|
102 |
}
|
103 |
|
104 |
// the video is paused, so it should not progress and it's fine
|
105 |
if( api.paused ) {
|
106 |
+
console.log("FV Player: iOS video element paused, no need for error");
|
107 |
return;
|
108 |
}
|
109 |
|
flowplayer/modules/pending-encoding.module.js
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
if( typeof(flowplayer) !== "undefined" ) {
|
2 |
+
flowplayer( function(api,root) {
|
3 |
+
root = jQuery(root);
|
4 |
+
|
5 |
+
var notice = false,
|
6 |
+
hlsjs;
|
7 |
+
|
8 |
+
// We need some special handling for HLS JS
|
9 |
+
// TODO: Figure out the core Flowplayer issue here
|
10 |
+
flowplayer.engine('hlsjs-lite').plugin(function(params) {
|
11 |
+
hlsjs = params.hls;
|
12 |
+
});
|
13 |
+
|
14 |
+
// Do we need to show the notice right away?
|
15 |
+
var playlist = api.conf.playlist.length ? api.conf.playlist : [ api.conf.clip ];
|
16 |
+
if( playlist[0].pending_encoding) {
|
17 |
+
show_notice(playlist[0]);
|
18 |
+
}
|
19 |
+
|
20 |
+
api.on('load', function(e,api,video) {
|
21 |
+
if( video.pending_encoding ) {
|
22 |
+
show_notice(video);
|
23 |
+
if( hlsjs ) {
|
24 |
+
hlsjs.destroy();
|
25 |
+
}
|
26 |
+
|
27 |
+
// Block further loading
|
28 |
+
return false;
|
29 |
+
}
|
30 |
+
|
31 |
+
remove_notice();
|
32 |
+
});
|
33 |
+
|
34 |
+
function show_notice(video) {
|
35 |
+
remove_notice();
|
36 |
+
|
37 |
+
var title = 'Video is being processed',
|
38 |
+
message = 'Please return later to see the actual video in this player.';
|
39 |
+
|
40 |
+
if( video.pending_encoding_error ) {
|
41 |
+
title = 'Video unavailable';
|
42 |
+
message = 'There was an error in the video encoding.';
|
43 |
+
} else if( video.pending_encoding_progress ) {
|
44 |
+
message += '<br /><br />('+video.pending_encoding_progress+' done)';
|
45 |
+
}
|
46 |
+
|
47 |
+
notice = jQuery('<div class="fv-player-encoder-video-processing-modal"><div><h2>'+title+'</h2><p>'+message+'</p></div></div');
|
48 |
+
root.append(notice);
|
49 |
+
}
|
50 |
+
|
51 |
+
function remove_notice() {
|
52 |
+
if( notice ) {
|
53 |
+
notice.remove();
|
54 |
+
}
|
55 |
+
}
|
56 |
+
})
|
57 |
+
}
|
flowplayer/modules/playback-position.module.js
CHANGED
@@ -16,10 +16,13 @@ if (!Date.now) {
|
|
16 |
// maximum cookie size with saved video positions we should store
|
17 |
maxCookieSize = 2500,
|
18 |
localStorageEnabled = null,
|
19 |
-
|
|
|
20 |
tempPositionCookieKeyName = 'video_positions_tmp',
|
|
|
21 |
tempSawCookieKeyName = 'video_saw_tmp',
|
22 |
playPositions = [],
|
|
|
23 |
sawVideo = [],
|
24 |
|
25 |
getSerialized = function(data) {
|
@@ -121,20 +124,34 @@ if (!Date.now) {
|
|
121 |
callback = function() {};
|
122 |
}
|
123 |
|
124 |
-
|
|
|
125 |
|
126 |
for (var video_name in playPositions) {
|
127 |
if( !playPositions.hasOwnProperty(video_name) ) continue;
|
128 |
|
129 |
// remove all AWS signatures from this video
|
130 |
-
|
131 |
name: video_name,
|
132 |
position: playPositions[video_name],
|
133 |
saw: typeof(sawVideo[video_name]) != "undefined" ? sawVideo[video_name] : false
|
134 |
});
|
135 |
}
|
136 |
|
137 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
// no video positions? remove the temporary position cookie/localStorage data as well
|
139 |
removeCookieKey(tempPositionCookieKeyName);
|
140 |
removeCookieKey(tempSawCookieKeyName);
|
@@ -148,18 +165,26 @@ if (!Date.now) {
|
|
148 |
// which will get removed on next page load
|
149 |
try {
|
150 |
var temp_position_data = {},
|
151 |
-
temp_saw_data = {}
|
|
|
152 |
|
153 |
// add our video positions
|
154 |
-
for (var i in
|
155 |
-
if( !
|
156 |
|
157 |
-
temp_position_data[
|
158 |
-
temp_saw_data[
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
}
|
160 |
|
161 |
setCookieKey(tempPositionCookieKeyName, getSerialized(temp_position_data));
|
162 |
setCookieKey(tempSawCookieKeyName, getSerialized(temp_saw_data));
|
|
|
163 |
} catch (e) {
|
164 |
// JSON JS support missing
|
165 |
return;
|
@@ -167,7 +192,8 @@ if (!Date.now) {
|
|
167 |
|
168 |
var fd = new FormData();
|
169 |
fd.append('action', 'fv_wp_flowplayer_video_position_save');
|
170 |
-
fd.append('videoTimes', encodeURIComponent(JSON.stringify(
|
|
|
171 |
navigator.sendBeacon(fv_player.ajaxurl, fd);
|
172 |
|
173 |
// return false, so no ajax.abort() will be tried if multiple players try to call this same script part
|
@@ -181,52 +207,85 @@ if (!Date.now) {
|
|
181 |
complete: callback,
|
182 |
data: {
|
183 |
action: 'fv_wp_flowplayer_video_position_save',
|
184 |
-
videoTimes:
|
|
|
185 |
}
|
186 |
});
|
187 |
}
|
188 |
} else {
|
189 |
-
// guest visitor, store position in a cookie / localStorage
|
190 |
try {
|
191 |
-
var
|
192 |
-
|
193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
} else {
|
195 |
-
|
196 |
}
|
197 |
|
198 |
// add / edit our video positions
|
199 |
-
for (var i in
|
200 |
-
if( !
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
|
202 |
-
|
203 |
}
|
204 |
|
205 |
var
|
206 |
-
|
207 |
-
|
|
|
|
|
208 |
|
209 |
// check if we're not going over maximum cache size
|
210 |
-
if (
|
211 |
// we're over max cache size, let's delete some older videos
|
212 |
-
while (
|
213 |
// remove the first entry only
|
214 |
-
for (var i in
|
215 |
-
if( !
|
216 |
|
217 |
-
delete
|
218 |
|
219 |
// re-serialize with the value removed
|
220 |
-
|
221 |
-
// calculate new
|
222 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
|
224 |
break;
|
225 |
}
|
226 |
}
|
227 |
}
|
228 |
|
229 |
-
setCookieKey(
|
|
|
230 |
} catch (e) {
|
231 |
// JSON JS support missing
|
232 |
return;
|
@@ -237,10 +296,17 @@ if (!Date.now) {
|
|
237 |
};
|
238 |
|
239 |
flowplayer( function(api,root) {
|
|
|
|
|
|
|
|
|
|
|
240 |
var
|
241 |
$root = jQuery(root),
|
242 |
enabled = flowplayer.conf.video_position_save_enable && $root.data('save-position') != 'false' || $root.data('save-position'),
|
243 |
progressEventsCount = 0,
|
|
|
|
|
244 |
|
245 |
// used to seek into the desired last stored position when he video has started
|
246 |
seekIntoPosition = function (e, api) {
|
@@ -252,7 +318,7 @@ if (!Date.now) {
|
|
252 |
|
253 |
// try to lookup position of a guest visitor
|
254 |
if (flowplayer.conf.is_logged_in != '1') {
|
255 |
-
var data = getCookieKey(
|
256 |
if (data && typeof(data) !== 'undefined') {
|
257 |
try {
|
258 |
data = JSON.parse(data);
|
@@ -302,6 +368,10 @@ if (!Date.now) {
|
|
302 |
|
303 |
playPositions[video_id] = position;
|
304 |
|
|
|
|
|
|
|
|
|
305 |
// make a call home every +-30 seconds to make sure a browser crash doesn't affect the position save too much
|
306 |
// if (progressEventsCount++ >= sendPositionsEvery) {
|
307 |
// ... refactor: only store position when we're leaving the page now, not on player progress
|
@@ -390,12 +460,46 @@ if (!Date.now) {
|
|
390 |
// something went wrong, so the next block will continue
|
391 |
}
|
392 |
}
|
393 |
-
}
|
394 |
|
395 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
396 |
|
397 |
if( !enabled ) return;
|
398 |
|
|
|
|
|
|
|
|
|
|
|
|
|
399 |
// stop events
|
400 |
api.bind('finish', removeVideoPosition);
|
401 |
|
@@ -405,6 +509,17 @@ if (!Date.now) {
|
|
405 |
// to use progress
|
406 |
api.one( 'progress', seekIntoPosition);
|
407 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
408 |
/**
|
409 |
* Show the progress on the playlist item thumbnail
|
410 |
*
|
@@ -435,7 +550,7 @@ if (!Date.now) {
|
|
435 |
|
436 |
var progress = 100 * position/duration;
|
437 |
el.css('width',progress+'%');
|
438 |
-
}
|
439 |
|
440 |
// Check all the playlist items to see if any of them has the temporary "position" or "saw" cookie set
|
441 |
// We do this as the position saving Ajax can no longer be synchronous and block the page reload
|
@@ -500,6 +615,11 @@ if (!Date.now) {
|
|
500 |
}
|
501 |
});
|
502 |
|
|
|
|
|
|
|
|
|
|
|
503 |
// check whether local storage is enabled
|
504 |
if (localStorageEnabled !== null) {
|
505 |
return localStorageEnabled;
|
@@ -516,4 +636,4 @@ if (!Date.now) {
|
|
516 |
localStorageEnabled = false;
|
517 |
}
|
518 |
|
519 |
-
})(jQuery);
|
16 |
// maximum cookie size with saved video positions we should store
|
17 |
maxCookieSize = 2500,
|
18 |
localStorageEnabled = null,
|
19 |
+
cookiePositionsKeyName = 'video_positions',
|
20 |
+
cookiePlaylistsKeyName = 'player_playlist_item',
|
21 |
tempPositionCookieKeyName = 'video_positions_tmp',
|
22 |
+
tempPlaylistsCookieKeyName = 'player_playlist_item_tmp',
|
23 |
tempSawCookieKeyName = 'video_saw_tmp',
|
24 |
playPositions = [],
|
25 |
+
playlistIndexes = [],
|
26 |
sawVideo = [],
|
27 |
|
28 |
getSerialized = function(data) {
|
124 |
callback = function() {};
|
125 |
}
|
126 |
|
127 |
+
postDataPositions = [];
|
128 |
+
postDataPlaylists = [];
|
129 |
|
130 |
for (var video_name in playPositions) {
|
131 |
if( !playPositions.hasOwnProperty(video_name) ) continue;
|
132 |
|
133 |
// remove all AWS signatures from this video
|
134 |
+
postDataPositions.push({
|
135 |
name: video_name,
|
136 |
position: playPositions[video_name],
|
137 |
saw: typeof(sawVideo[video_name]) != "undefined" ? sawVideo[video_name] : false
|
138 |
});
|
139 |
}
|
140 |
|
141 |
+
for (var player_id in playlistIndexes) {
|
142 |
+
if( !playlistIndexes.hasOwnProperty(player_id) ) continue;
|
143 |
+
|
144 |
+
postDataPlaylists.push({
|
145 |
+
player: player_id,
|
146 |
+
item: playlistIndexes[player_id]
|
147 |
+
});
|
148 |
+
}
|
149 |
+
|
150 |
+
if (!postDataPlaylists.length) {
|
151 |
+
removeCookieKey(tempPlaylistsCookieKeyName);
|
152 |
+
}
|
153 |
+
|
154 |
+
if (!postDataPositions.length) {
|
155 |
// no video positions? remove the temporary position cookie/localStorage data as well
|
156 |
removeCookieKey(tempPositionCookieKeyName);
|
157 |
removeCookieKey(tempSawCookieKeyName);
|
165 |
// which will get removed on next page load
|
166 |
try {
|
167 |
var temp_position_data = {},
|
168 |
+
temp_saw_data = {},
|
169 |
+
temp_playlist_data = {};
|
170 |
|
171 |
// add our video positions
|
172 |
+
for (var i in postDataPositions) {
|
173 |
+
if( !postDataPositions.hasOwnProperty(i) ) continue;
|
174 |
|
175 |
+
temp_position_data[postDataPositions[i].name] = postDataPositions[i].position;
|
176 |
+
temp_saw_data[postDataPositions[i].name] = postDataPositions[i].saw;
|
177 |
+
}
|
178 |
+
|
179 |
+
// playlist and item
|
180 |
+
for (var i in postDataPlaylists) {
|
181 |
+
if( !postDataPlaylists.hasOwnProperty(i) ) continue;
|
182 |
+
temp_playlist_data[postDataPlaylists[i].player] = postDataPlaylists[i].item;
|
183 |
}
|
184 |
|
185 |
setCookieKey(tempPositionCookieKeyName, getSerialized(temp_position_data));
|
186 |
setCookieKey(tempSawCookieKeyName, getSerialized(temp_saw_data));
|
187 |
+
setCookieKey(tempPlaylistsCookieKeyName, getSerialized(temp_playlist_data));
|
188 |
} catch (e) {
|
189 |
// JSON JS support missing
|
190 |
return;
|
192 |
|
193 |
var fd = new FormData();
|
194 |
fd.append('action', 'fv_wp_flowplayer_video_position_save');
|
195 |
+
fd.append('videoTimes', encodeURIComponent(JSON.stringify(postDataPositions)));
|
196 |
+
fd.append('playlistItems', encodeURIComponent(JSON.stringify(postDataPlaylists)));
|
197 |
navigator.sendBeacon(fv_player.ajaxurl, fd);
|
198 |
|
199 |
// return false, so no ajax.abort() will be tried if multiple players try to call this same script part
|
207 |
complete: callback,
|
208 |
data: {
|
209 |
action: 'fv_wp_flowplayer_video_position_save',
|
210 |
+
videoTimes: postDataPositions,
|
211 |
+
playlistItems: postDataPlaylists
|
212 |
}
|
213 |
});
|
214 |
}
|
215 |
} else {
|
216 |
+
// guest visitor, store position and item in a cookie / localStorage
|
217 |
try {
|
218 |
+
var data_positions = getCookieKey(cookiePositionsKeyName);
|
219 |
+
var data_playlist_item = getCookieKey(cookiePlaylistsKeyName);
|
220 |
+
|
221 |
+
if (data_positions && typeof(data_positions) !== 'undefined') {
|
222 |
+
data_positions = JSON.parse(data_positions);
|
223 |
+
} else {
|
224 |
+
data_positions = {};
|
225 |
+
}
|
226 |
+
|
227 |
+
if (data_playlist_item && typeof(data_playlist_item) !== 'undefined') {
|
228 |
+
data_playlist_item = JSON.parse(data_playlist_item);
|
229 |
} else {
|
230 |
+
data_playlist_item = {};
|
231 |
}
|
232 |
|
233 |
// add / edit our video positions
|
234 |
+
for (var i in postDataPositions) {
|
235 |
+
if( !postDataPositions.hasOwnProperty(i) ) continue;
|
236 |
+
|
237 |
+
data_positions[postDataPositions[i].name] = postDataPositions[i].position;
|
238 |
+
}
|
239 |
+
|
240 |
+
for (var i in postDataPlaylists) {
|
241 |
+
if( !postDataPlaylists.hasOwnProperty(i) ) continue;
|
242 |
|
243 |
+
data_playlist_item[postDataPlaylists[i].player] = postDataPlaylists[i].item;
|
244 |
}
|
245 |
|
246 |
var
|
247 |
+
serialized_positions = JSON.stringify(data_positions),
|
248 |
+
serialized_playlist_items = JSON.stringify(data_playlist_item),
|
249 |
+
dataSize_postions = getTextByteSize(serialized_positions),
|
250 |
+
dataSize_playlist_items = getTextByteSize(serialized_playlist_items);
|
251 |
|
252 |
// check if we're not going over maximum cache size
|
253 |
+
if (dataSize_postions > maxCookieSize) {
|
254 |
// we're over max cache size, let's delete some older videos
|
255 |
+
while (dataSize_postions > maxCookieSize) {
|
256 |
// remove the first entry only
|
257 |
+
for (var i in data_positions) {
|
258 |
+
if( !data_positions.hasOwnProperty(i) ) continue;
|
259 |
|
260 |
+
delete data_positions[i];
|
261 |
|
262 |
// re-serialize with the value removed
|
263 |
+
serialized_positions = JSON.stringify(data_positions);
|
264 |
+
// calculate new data_positions size, so we can exit the while loop
|
265 |
+
dataSize_postions = getTextByteSize(serialized_positions);
|
266 |
+
|
267 |
+
break;
|
268 |
+
}
|
269 |
+
}
|
270 |
+
}
|
271 |
+
|
272 |
+
// do the same for playlist item
|
273 |
+
if (dataSize_playlist_items > maxCookieSize) {
|
274 |
+
while (dataSize_playlist_items > maxCookieSize) {
|
275 |
+
for (var i in data_positions) {
|
276 |
+
if( !data_playlist_item.hasOwnProperty(i) ) continue;
|
277 |
+
delete data_playlist_item[i];
|
278 |
+
|
279 |
+
serialized_playlist_items = JSON.stringify(data_playlist_item);
|
280 |
+
dataSize_playlist_items = getTextByteSize(serialized_positions);
|
281 |
|
282 |
break;
|
283 |
}
|
284 |
}
|
285 |
}
|
286 |
|
287 |
+
setCookieKey(cookiePositionsKeyName, serialized_positions);
|
288 |
+
setCookieKey(cookiePlaylistsKeyName, serialized_playlist_items);
|
289 |
} catch (e) {
|
290 |
// JSON JS support missing
|
291 |
return;
|
296 |
};
|
297 |
|
298 |
flowplayer( function(api,root) {
|
299 |
+
// localstorage disabled by admin
|
300 |
+
if( typeof(api.conf.disable_localstorage) != 'undefined' ) {
|
301 |
+
return;
|
302 |
+
}
|
303 |
+
|
304 |
var
|
305 |
$root = jQuery(root),
|
306 |
enabled = flowplayer.conf.video_position_save_enable && $root.data('save-position') != 'false' || $root.data('save-position'),
|
307 |
progressEventsCount = 0,
|
308 |
+
player_id = $root.data('player-id') ? $root.data('player-id') : false,
|
309 |
+
item_changed = false,
|
310 |
|
311 |
// used to seek into the desired last stored position when he video has started
|
312 |
seekIntoPosition = function (e, api) {
|
318 |
|
319 |
// try to lookup position of a guest visitor
|
320 |
if (flowplayer.conf.is_logged_in != '1') {
|
321 |
+
var data = getCookieKey(cookiePositionsKeyName);
|
322 |
if (data && typeof(data) !== 'undefined') {
|
323 |
try {
|
324 |
data = JSON.parse(data);
|
368 |
|
369 |
playPositions[video_id] = position;
|
370 |
|
371 |
+
if( api.conf.playlist.length > 0 ) {
|
372 |
+
if( player_id ) playlistIndexes[ player_id ] = api.video.index; // player_id => playlist_item
|
373 |
+
}
|
374 |
+
|
375 |
// make a call home every +-30 seconds to make sure a browser crash doesn't affect the position save too much
|
376 |
// if (progressEventsCount++ >= sendPositionsEvery) {
|
377 |
// ... refactor: only store position when we're leaving the page now, not on player progress
|
460 |
// something went wrong, so the next block will continue
|
461 |
}
|
462 |
}
|
463 |
+
},
|
464 |
|
465 |
+
restorePlaylistItem = function(e, api) {
|
466 |
+
if ( typeof api == 'undefined' || api.conf.playlist.length == 0 ) return;
|
467 |
+
|
468 |
+
var item_index = -1;
|
469 |
+
|
470 |
+
if(player_id) {
|
471 |
+
if ( flowplayer.conf.is_logged_in != '1') {
|
472 |
+
var data = getCookieKey(cookiePlaylistsKeyName);
|
473 |
+
if (data && typeof(data) !== 'undefined') {
|
474 |
+
try {
|
475 |
+
data = JSON.parse(data);
|
476 |
+
if (data[player_id]) {
|
477 |
+
item_index = data[player_id];
|
478 |
+
}
|
479 |
+
} catch (e) {
|
480 |
+
return;
|
481 |
+
}
|
482 |
+
}
|
483 |
+
} else if( flowplayer.conf.is_logged_in == '1') {
|
484 |
+
item_index = api.conf.playlist.length > 0 ? processTempData( tempPlaylistsCookieKeyName, player_id ) : false;
|
485 |
+
}
|
486 |
+
}
|
487 |
+
|
488 |
+
if ( item_index >= 0 && !item_changed ) {
|
489 |
+
api.play(item_index);
|
490 |
+
item_changed = true;
|
491 |
+
}
|
492 |
+
|
493 |
+
};
|
494 |
|
495 |
if( !enabled ) return;
|
496 |
|
497 |
+
// console.log('Temp cookie', getCookieKey(tempPlaylistsCookieKeyName));
|
498 |
+
|
499 |
+
if( getCookieKey(tempPlaylistsCookieKeyName) ) {
|
500 |
+
$root.removeData('playlist_start'); // prevent conflict with playlist start module
|
501 |
+
}
|
502 |
+
|
503 |
// stop events
|
504 |
api.bind('finish', removeVideoPosition);
|
505 |
|
509 |
// to use progress
|
510 |
api.one( 'progress', seekIntoPosition);
|
511 |
|
512 |
+
api.bind('unload', function() {
|
513 |
+
item_changed = false;
|
514 |
+
api.one('ready', restorePlaylistItem);
|
515 |
+
});
|
516 |
+
|
517 |
+
api.one('ready', restorePlaylistItem);
|
518 |
+
|
519 |
+
jQuery(".fp-ui", root).on('click', function() {
|
520 |
+
restorePlaylistItem();
|
521 |
+
});
|
522 |
+
|
523 |
/**
|
524 |
* Show the progress on the playlist item thumbnail
|
525 |
*
|
550 |
|
551 |
var progress = 100 * position/duration;
|
552 |
el.css('width',progress+'%');
|
553 |
+
}
|
554 |
|
555 |
// Check all the playlist items to see if any of them has the temporary "position" or "saw" cookie set
|
556 |
// We do this as the position saving Ajax can no longer be synchronous and block the page reload
|
615 |
}
|
616 |
});
|
617 |
|
618 |
+
// localstorage disabled by admin
|
619 |
+
if( typeof(fv_flowplayer_conf.disable_localstorage) != 'undefined' ) {
|
620 |
+
localStorageEnabled = false;
|
621 |
+
}
|
622 |
+
|
623 |
// check whether local storage is enabled
|
624 |
if (localStorageEnabled !== null) {
|
625 |
return localStorageEnabled;
|
636 |
localStorageEnabled = false;
|
637 |
}
|
638 |
|
639 |
+
})(jQuery);
|
flowplayer/modules/playlist-controlbar.module.js
CHANGED
@@ -17,18 +17,21 @@ flowplayer( function(api,root) {
|
|
17 |
//if( !playlist.hasClass('fp-playlist-season') ) return; // todo: what about mobile? Should we always allow this?
|
18 |
|
19 |
var playlist_button = jQuery('<strong class="fv-fp-list">Item 1.</strong>'),
|
|
|
20 |
playlist_menu = jQuery('<div class="fp-menu fv-fp-list-menu"></div>').insertAfter( root.find('.fp-controls') );
|
21 |
|
22 |
-
var i =0 , item_index = [];
|
23 |
jQuery(api.conf.playlist).each( function(k,v) {
|
24 |
if(typeof(v.click) == 'undefined' ) {
|
25 |
-
|
|
|
|
|
26 |
item_index.push(k);
|
27 |
i++;
|
28 |
}
|
29 |
});
|
30 |
|
31 |
-
|
32 |
e.preventDefault();
|
33 |
e.stopPropagation();
|
34 |
|
@@ -41,8 +44,11 @@ flowplayer( function(api,root) {
|
|
41 |
root.trigger('click');
|
42 |
api.showMenu(playlist_menu[0]);
|
43 |
}
|
44 |
-
}
|
45 |
-
|
|
|
|
|
|
|
46 |
jQuery('a',playlist_menu).on('click', function() {
|
47 |
if(typeof(api.conf.playlist[jQuery(this).data('index') - 1]) != 'undefined' && typeof(api.conf.playlist[jQuery(this).data('index') - 1].click) != 'undefined' ) { // check if FV Player Pro Video Ad is in front of video - act as if clicked on Ad
|
48 |
api.play(jQuery(this).data('index') - 1);
|
@@ -56,9 +62,10 @@ flowplayer( function(api,root) {
|
|
56 |
var thumb = playlist_menu.find('a[data-index='+video.index+']');
|
57 |
thumb.addClass('fp-selected');
|
58 |
var label = fv_flowplayer_translations.playlist_item_no
|
59 |
-
label = label.replace( /%d/, item_index.indexOf(
|
60 |
label = label.replace( /%s/, parse_title( thumb.find('h4') ) );
|
61 |
playlist_button.html(label);
|
|
|
62 |
});
|
63 |
|
64 |
function parse_title(el) {
|
17 |
//if( !playlist.hasClass('fp-playlist-season') ) return; // todo: what about mobile? Should we always allow this?
|
18 |
|
19 |
var playlist_button = jQuery('<strong class="fv-fp-list">Item 1.</strong>'),
|
20 |
+
playlist_button_name = jQuery('<strong class="fv-fp-list-name">Item 1.</strong>'),
|
21 |
playlist_menu = jQuery('<div class="fp-menu fv-fp-list-menu"></div>').insertAfter( root.find('.fp-controls') );
|
22 |
|
23 |
+
var i =0 , item_index = [], track_item = [];
|
24 |
jQuery(api.conf.playlist).each( function(k,v) {
|
25 |
if(typeof(v.click) == 'undefined' ) {
|
26 |
+
var title = parse_title(playlist.find('h4').eq(i));
|
27 |
+
playlist_menu.append('<a data-index="'+k+'">'+(i+1)+'. '+title+'</a>');
|
28 |
+
track_item[k] = title;
|
29 |
item_index.push(k);
|
30 |
i++;
|
31 |
}
|
32 |
});
|
33 |
|
34 |
+
function playlist_button_click(e) {
|
35 |
e.preventDefault();
|
36 |
e.stopPropagation();
|
37 |
|
44 |
root.trigger('click');
|
45 |
api.showMenu(playlist_menu[0]);
|
46 |
}
|
47 |
+
}
|
48 |
+
|
49 |
+
playlist_button.insertAfter( root.find('.fp-controls .fp-volume') ).on('click', playlist_button_click);
|
50 |
+
playlist_button_name.insertAfter(playlist_button).on('click', playlist_button_click);
|
51 |
+
|
52 |
jQuery('a',playlist_menu).on('click', function() {
|
53 |
if(typeof(api.conf.playlist[jQuery(this).data('index') - 1]) != 'undefined' && typeof(api.conf.playlist[jQuery(this).data('index') - 1].click) != 'undefined' ) { // check if FV Player Pro Video Ad is in front of video - act as if clicked on Ad
|
54 |
api.play(jQuery(this).data('index') - 1);
|
62 |
var thumb = playlist_menu.find('a[data-index='+video.index+']');
|
63 |
thumb.addClass('fp-selected');
|
64 |
var label = fv_flowplayer_translations.playlist_item_no
|
65 |
+
label = label.replace( /%d/, item_index.indexOf(video.index) + 1 );
|
66 |
label = label.replace( /%s/, parse_title( thumb.find('h4') ) );
|
67 |
playlist_button.html(label);
|
68 |
+
playlist_button_name.html( (item_index.indexOf(video.index) + 1) + '. ' + track_item[video.index] );
|
69 |
});
|
70 |
|
71 |
function parse_title(el) {
|
flowplayer/modules/playlist-start-position.module.js
CHANGED
@@ -6,8 +6,8 @@ flowplayer( function(api,root) {
|
|
6 |
|
7 |
if( typeof(start_index) == 'undefined' ) return;
|
8 |
|
9 |
-
function start_position_changer() {
|
10 |
-
if ($root.data('position_changed') !== 1 && api.conf.playlist.length) {
|
11 |
start_index--; // the index should start from 0
|
12 |
api.play(start_index);
|
13 |
$root.data('position_changed', 1);
|
@@ -18,7 +18,6 @@ flowplayer( function(api,root) {
|
|
18 |
start_index = $root.data('playlist_start');
|
19 |
$root.removeData('position_changed');
|
20 |
api.one('ready', start_position_changer);
|
21 |
-
api.video.index = 0;
|
22 |
});
|
23 |
|
24 |
api.one('ready', start_position_changer);
|
@@ -28,4 +27,4 @@ flowplayer( function(api,root) {
|
|
28 |
$root.data('position_changed', 1);
|
29 |
});
|
30 |
|
31 |
-
});
|
6 |
|
7 |
if( typeof(start_index) == 'undefined' ) return;
|
8 |
|
9 |
+
function start_position_changer() {
|
10 |
+
if ($root.data('position_changed') !== 1 && api.conf.playlist.length) {
|
11 |
start_index--; // the index should start from 0
|
12 |
api.play(start_index);
|
13 |
$root.data('position_changed', 1);
|
18 |
start_index = $root.data('playlist_start');
|
19 |
$root.removeData('position_changed');
|
20 |
api.one('ready', start_position_changer);
|
|
|
21 |
});
|
22 |
|
23 |
api.one('ready', start_position_changer);
|
27 |
$root.data('position_changed', 1);
|
28 |
});
|
29 |
|
30 |
+
});
|
flowplayer/modules/sharing.module.js
CHANGED
@@ -63,6 +63,17 @@ flowplayer( function(api,root) {
|
|
63 |
});
|
64 |
}
|
65 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
|
67 |
api.bind("pause resume finish unload ready", function(e,api) {
|
68 |
root.addClass('no-brand');
|
@@ -72,7 +83,7 @@ flowplayer( function(api,root) {
|
|
72 |
root.find('.fp-fullscreen').clone().appendTo( root.find('.fp-controls') );
|
73 |
});
|
74 |
|
75 |
-
api.
|
76 |
setTimeout( function () {
|
77 |
jQuery('.fvp-share-bar',root).show();
|
78 |
|
63 |
});
|
64 |
}
|
65 |
}
|
66 |
+
|
67 |
+
// show notice in editor
|
68 |
+
if( typeof fv_player_editor_conf != 'undefined') {
|
69 |
+
root.on('click','.fvp-sharing > li', function(e) {
|
70 |
+
e.preventDefault();
|
71 |
+
|
72 |
+
fv_player_notice( root, fv_player_editor_translations.link_notice, 2000 );
|
73 |
+
|
74 |
+
return false;
|
75 |
+
});
|
76 |
+
}
|
77 |
|
78 |
api.bind("pause resume finish unload ready", function(e,api) {
|
79 |
root.addClass('no-brand');
|
83 |
root.find('.fp-fullscreen').clone().appendTo( root.find('.fp-controls') );
|
84 |
});
|
85 |
|
86 |
+
api.on("ready", function (e, api, video) {
|
87 |
setTimeout( function () {
|
88 |
jQuery('.fvp-share-bar',root).show();
|
89 |
|
flowplayer/modules/speed-restore.module.js
CHANGED
@@ -2,6 +2,12 @@
|
|
2 |
* Video speed localstorage
|
3 |
*/
|
4 |
flowplayer( function(api,root) {
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
api.on('speed', function(ev, _a, rate) {
|
6 |
try {
|
7 |
window.localStorage.fv_player_speed = rate;
|
2 |
* Video speed localstorage
|
3 |
*/
|
4 |
flowplayer( function(api,root) {
|
5 |
+
|
6 |
+
// localstorage disabled by admin
|
7 |
+
if( typeof(fv_flowplayer_conf.disable_localstorage) != 'undefined' ) {
|
8 |
+
return;
|
9 |
+
}
|
10 |
+
|
11 |
api.on('speed', function(ev, _a, rate) {
|
12 |
try {
|
13 |
window.localStorage.fv_player_speed = rate;
|
flowplayer/modules/subtitle-restore.module.js
CHANGED
@@ -4,6 +4,11 @@
|
|
4 |
flowplayer( function(api,root) {
|
5 |
root = jQuery(root);
|
6 |
|
|
|
|
|
|
|
|
|
|
|
7 |
var ls = window.localStorage;
|
8 |
|
9 |
// restore subtitle on ready event
|
4 |
flowplayer( function(api,root) {
|
5 |
root = jQuery(root);
|
6 |
|
7 |
+
// localstorage disabled by admin
|
8 |
+
if( typeof(fv_flowplayer_conf.disable_localstorage) != 'undefined' ) {
|
9 |
+
return;
|
10 |
+
}
|
11 |
+
|
12 |
var ls = window.localStorage;
|
13 |
|
14 |
// restore subtitle on ready event
|
flowplayer/modules/volume.module.js
CHANGED
@@ -10,15 +10,21 @@
|
|
10 |
flowplayer(function(api, root) {
|
11 |
root = jQuery(root);
|
12 |
var bean = flowplayer.bean;
|
13 |
-
var restore =
|
14 |
|
15 |
-
// Restore volume on click
|
16 |
-
root.on('
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
}
|
21 |
-
})
|
22 |
|
23 |
// Click into volume bar and start dragging it down and drag it to very 0, it would remember the initial volume - the one which was there on mousedown
|
24 |
// Other case is click into the volume bar and drag it from 1 to about 0.5. So 0.5 is remembered on mouseup, then drag it to 0. So clicking the mute icon would restore to 0.5
|
@@ -29,13 +35,6 @@ flowplayer(function(api, root) {
|
|
29 |
}
|
30 |
})
|
31 |
|
32 |
-
// When muting with the button forget about the volume to restore
|
33 |
-
// As otherwise the root.on('click','.fp-volumebtn', ... ) handler above would restore the volume
|
34 |
-
root.on('mousedown touchstart','.fp-volumebtn', function(e) {
|
35 |
-
if( api.volumeLevel > 0 ) {
|
36 |
-
restore = -1;
|
37 |
-
}
|
38 |
-
});
|
39 |
|
40 |
// Mute
|
41 |
api.on('volume', function(e,api) {
|
@@ -50,10 +49,10 @@ flowplayer(function(api, root) {
|
|
50 |
// If video starts muted, show a notice
|
51 |
var deal_with_muted_start = false;
|
52 |
|
53 |
-
|
|
|
54 |
if( root.hasClass('is-audio') ) return;
|
55 |
|
56 |
-
// Remember to check this for each video that starts playing
|
57 |
deal_with_muted_start = true;
|
58 |
});
|
59 |
|
@@ -76,7 +75,7 @@ flowplayer(function(api, root) {
|
|
76 |
return;
|
77 |
}
|
78 |
|
79 |
-
var mute_notice = jQuery('<div class="fp-message fp-message-muted
|
80 |
|
81 |
// We need touchstart for mobile, otherwise click would only show te UI
|
82 |
mute_notice.on( 'click touchstart', function() {
|
@@ -86,6 +85,9 @@ flowplayer(function(api, root) {
|
|
86 |
|
87 |
root.find('.fp-ui').append( mute_notice );
|
88 |
root.addClass('has-fp-message-muted');
|
|
|
|
|
|
|
89 |
}
|
90 |
}
|
91 |
} );
|
10 |
flowplayer(function(api, root) {
|
11 |
root = jQuery(root);
|
12 |
var bean = flowplayer.bean;
|
13 |
+
var restore = flowplayer.conf.default_volume;
|
14 |
|
15 |
+
// Restore volume on click on the speaker icon
|
16 |
+
root.on('mousedown touchstart','.fp-volumebtn', function(e) {
|
17 |
+
var volumebtn = jQuery(this);
|
18 |
+
|
19 |
+
// Only restore if it's muted, we use mousedown event to be able to check this
|
20 |
+
if( api.volumeLevel == 0 ) {
|
21 |
+
// The click event which follows after mousedown will be affected
|
22 |
+
volumebtn.one( 'click', function() {
|
23 |
+
api.volume( restore );
|
24 |
+
return false;
|
25 |
+
});
|
26 |
}
|
27 |
+
});
|
28 |
|
29 |
// Click into volume bar and start dragging it down and drag it to very 0, it would remember the initial volume - the one which was there on mousedown
|
30 |
// Other case is click into the volume bar and drag it from 1 to about 0.5. So 0.5 is remembered on mouseup, then drag it to 0. So clicking the mute icon would restore to 0.5
|
35 |
}
|
36 |
})
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
39 |
// Mute
|
40 |
api.on('volume', function(e,api) {
|
49 |
// If video starts muted, show a notice
|
50 |
var deal_with_muted_start = false;
|
51 |
|
52 |
+
// We only set this on the first ready event - meaning it only show for first item in playlist
|
53 |
+
api.one('ready', function(e,api) {
|
54 |
if( root.hasClass('is-audio') ) return;
|
55 |
|
|
|
56 |
deal_with_muted_start = true;
|
57 |
});
|
58 |
|
75 |
return;
|
76 |
}
|
77 |
|
78 |
+
var mute_notice = jQuery('<div class="fp-message fp-message-muted"><span class="fp-icon fp-volumebtn-notice"></span> '+fv_flowplayer_translations.click_to_unmute+'</div>');
|
79 |
|
80 |
// We need touchstart for mobile, otherwise click would only show te UI
|
81 |
mute_notice.on( 'click touchstart', function() {
|
85 |
|
86 |
root.find('.fp-ui').append( mute_notice );
|
87 |
root.addClass('has-fp-message-muted');
|
88 |
+
|
89 |
+
// Remove the notice after a while
|
90 |
+
setTimeout( remove_volume_notice, 5000 );
|
91 |
}
|
92 |
}
|
93 |
} );
|
includes/class.bunnycdn.rewrite.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if( !class_exists('FV_Player_BunnyCDN_Rewrite') ) {
|
4 |
+
|
5 |
+
class FV_Player_BunnyCDN_Rewrite extends BunnyCDNFilter {
|
6 |
+
public function rewrite_url( $url ) {
|
7 |
+
$directoriesRegex = implode('|', $this->directories);
|
8 |
+
$regex = '~(?:'. quotemeta($this->baseUrl) .')?/((?:'.$directoriesRegex.').*)~'; // custom regex to match url
|
9 |
+
return preg_replace_callback($regex, array(&$this, "rewriteUrl"), $url);
|
10 |
+
}
|
11 |
+
}
|
12 |
+
|
13 |
+
}
|
includes/class.fv-player-wizard-step-base.php
CHANGED
@@ -2,7 +2,10 @@
|
|
2 |
|
3 |
abstract class FV_Player_Wizard_Step_Base_Class {
|
4 |
|
5 |
-
|
|
|
|
|
|
|
6 |
'next' => array(
|
7 |
'primary' => false,
|
8 |
'value' => 'Next',
|
@@ -12,8 +15,12 @@ abstract class FV_Player_Wizard_Step_Base_Class {
|
|
12 |
function buttons() {
|
13 |
?>
|
14 |
<tr>
|
15 |
-
|
16 |
-
|
|
|
|
|
|
|
|
|
17 |
<?php $this->get_buttons( $this->buttons ); ?>
|
18 |
</td>
|
19 |
</tr>
|
@@ -23,8 +30,8 @@ abstract class FV_Player_Wizard_Step_Base_Class {
|
|
23 |
function display() {
|
24 |
global $fv_fp;
|
25 |
$fv_fp->_get_input_text( array(
|
26 |
-
'key' =>
|
27 |
-
'name' =>
|
28 |
'class' => 'regular-text code'
|
29 |
) );
|
30 |
}
|
2 |
|
3 |
abstract class FV_Player_Wizard_Step_Base_Class {
|
4 |
|
5 |
+
protected
|
6 |
+
$buttons_across_2_columns = false,
|
7 |
+
|
8 |
+
$buttons = array(
|
9 |
'next' => array(
|
10 |
'primary' => false,
|
11 |
'value' => 'Next',
|
15 |
function buttons() {
|
16 |
?>
|
17 |
<tr>
|
18 |
+
<?php
|
19 |
+
if ( !$this->buttons_across_2_columns ) {
|
20 |
+
?><td></td>
|
21 |
+
<?php
|
22 |
+
}
|
23 |
+
?><td<?php echo ( $this->buttons_across_2_columns ? ' colspan="2"' : '' ); ?>>
|
24 |
<?php $this->get_buttons( $this->buttons ); ?>
|
25 |
</td>
|
26 |
</tr>
|
30 |
function display() {
|
31 |
global $fv_fp;
|
32 |
$fv_fp->_get_input_text( array(
|
33 |
+
'key' => $this->key,
|
34 |
+
'name' => $this->name,
|
35 |
'class' => 'regular-text code'
|
36 |
) );
|
37 |
}
|
includes/fp-api-private.php
CHANGED
@@ -89,7 +89,7 @@ class FV_Wordpress_Flowplayer_Plugin_Private
|
|
89 |
add_action( 'update_option__transient_update_plugins', array( $this, 'CheckPluginUpdateOld' ) );
|
90 |
add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 );
|
91 |
}
|
92 |
-
}
|
93 |
}
|
94 |
|
95 |
function object_cache_disable($value=null){
|
@@ -477,8 +477,8 @@ $this->strPrivateAPI - also
|
|
477 |
|
478 |
$cookie[$_POST['key']] = !empty($_POST['value']) ? $_POST['value'] : true;
|
479 |
|
480 |
-
|
481 |
-
|
482 |
}
|
483 |
|
484 |
|
@@ -666,6 +666,10 @@ $this->strPrivateAPI - also
|
|
666 |
jQuery('#wp-pointer-0').remove(); // there must only be a single pointer at once. Or perhaps it removes them all, but the ones which were not dismissed by Ajax by storing the option will turn up again?
|
667 |
});
|
668 |
}
|
|
|
|
|
|
|
|
|
669 |
//]]>
|
670 |
</script>
|
671 |
<?php
|
@@ -699,20 +703,30 @@ $this->strPrivateAPI - also
|
|
699 |
} else {
|
700 |
$html .= '<p>'.$content.'</p>';
|
701 |
}
|
702 |
-
|
703 |
?>
|
704 |
<script type="text/javascript">
|
705 |
//<![CDATA[
|
706 |
(function ($) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
707 |
var pointer_options = <?php echo json_encode( array( 'pointerClass' => $key, 'content' => $html, 'position' => $position ) ); ?>,
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
buttons.append( $('<a class="button-
|
714 |
-
|
715 |
-
|
|
|
|
|
716 |
|
717 |
if(pointer_options.position && pointer_options.position.defer_loading)
|
718 |
$(window).bind('load.wp-pointers', setup);
|
@@ -724,7 +738,7 @@ $this->strPrivateAPI - also
|
|
724 |
<?php
|
725 |
}
|
726 |
}
|
727 |
-
|
728 |
|
729 |
function check_domain_license() {
|
730 |
if( $_POST['slug'] != $this->strPluginSlug ) {
|
89 |
add_action( 'update_option__transient_update_plugins', array( $this, 'CheckPluginUpdateOld' ) );
|
90 |
add_filter( 'http_request_args', array( $this, 'http_request_args' ), 10, 2 );
|
91 |
}
|
92 |
+
}
|
93 |
}
|
94 |
|
95 |
function object_cache_disable($value=null){
|
477 |
|
478 |
$cookie[$_POST['key']] = !empty($_POST['value']) ? $_POST['value'] : true;
|
479 |
|
480 |
+
$secure = ( 'https' === parse_url( home_url(), PHP_URL_SCHEME ) );
|
481 |
+
setcookie( $this->class_name.'_store_answer', json_encode($cookie), time() + YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, $secure );
|
482 |
}
|
483 |
|
484 |
|
666 |
jQuery('#wp-pointer-0').remove(); // there must only be a single pointer at once. Or perhaps it removes them all, but the ones which were not dismissed by Ajax by storing the option will turn up again?
|
667 |
});
|
668 |
}
|
669 |
+
|
670 |
+
/*! js-cookie v3.0.1 | MIT */
|
671 |
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)e[o]=n[o]}return e}return function t(n,o){function r(t,r,i){if("undefined"!=typeof document){"number"==typeof(i=e({},o,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var c="";for(var u in i)i[u]&&(c+="; "+u,!0!==i[u]&&(c+="="+i[u].split(";")[0]));return document.cookie=t+"="+n.write(r,t)+c}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split("; "):[],o={},r=0;r<t.length;r++){var i=t[r].split("="),c=i.slice(1).join("=");try{var u=decodeURIComponent(i[0]);if(o[u]=n.read(c,u),e===u)break}catch(e){}}return e?o[e]:o}},remove:function(t,n){r(t,"",e({},n,{expires:-1}))},withAttributes:function(n){return t(this.converter,e({},this.attributes,n))},withConverter:function(n){return t(e({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(o)},converter:{value:Object.freeze(n)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})}));
|
672 |
+
|
673 |
//]]>
|
674 |
</script>
|
675 |
<?php
|
703 |
} else {
|
704 |
$html .= '<p>'.$content.'</p>';
|
705 |
}
|
706 |
+
|
707 |
?>
|
708 |
<script type="text/javascript">
|
709 |
//<![CDATA[
|
710 |
(function ($) {
|
711 |
+
store_cookie_js = function(value , key) {
|
712 |
+
var cookie_name = '<?php echo $this->class_name.'_store_answer'; ?>';
|
713 |
+
var pointer_cookies = JSON.parse( Cookies.get(cookie_name) );
|
714 |
+
pointer_cookies[key] = value;
|
715 |
+
Cookies.set(cookie_name, JSON.stringify(pointer_cookies) , { secure: location.protocol == 'https:', expires: 365 } )
|
716 |
+
jQuery('#wp-pointer-0').remove();
|
717 |
+
}
|
718 |
+
|
719 |
var pointer_options = <?php echo json_encode( array( 'pointerClass' => $key, 'content' => $html, 'position' => $position ) ); ?>,
|
720 |
+
key = '<?php echo $key; ?>',
|
721 |
+
|
722 |
+
setup = function () {
|
723 |
+
$('<?php echo $id; ?>').pointer(pointer_options).pointer('open');
|
724 |
+
var buttons = $('.<?php echo $key; ?> .wp-pointer-buttons').html('');
|
725 |
+
buttons.append( $('<a style="margin-left:5px" class="button-primary">' + '<?php echo addslashes($button1); ?>' + '</a>').on('click.pointer', function () { <?php echo $function1; ?>; store_cookie_js('true' , key); }));
|
726 |
+
<?php if ( $button2 ) { ?>
|
727 |
+
buttons.append( $('<a class="button-secondary">' + '<?php echo addslashes($button2); ?>' + '</a>').on('click.pointer', function () { <?php echo $function2; ?>; store_cookie_js('false', key); }));
|
728 |
+
<?php } ?>
|
729 |
+
};
|
730 |
|
731 |
if(pointer_options.position && pointer_options.position.defer_loading)
|
732 |
$(window).bind('load.wp-pointers', setup);
|
738 |
<?php
|
739 |
}
|
740 |
}
|
741 |
+
|
742 |
|
743 |
function check_domain_license() {
|
744 |
if( $_POST['slug'] != $this->strPluginSlug ) {
|
includes/fv-player-wizard-base.js
CHANGED
@@ -6,7 +6,7 @@ jQuery( function($) {
|
|
6 |
|
7 |
set_current_step_wrap();
|
8 |
|
9 |
-
$(document).on( 'click', '[data-fv-player-wizard-next]', function(
|
10 |
var button_next = $(this),
|
11 |
indicator = current_step_wrap.find('[data-fv-player-wizard-indicator]');
|
12 |
|
@@ -15,7 +15,7 @@ jQuery( function($) {
|
|
15 |
var has_required_fields = true
|
16 |
get_step_fields().each( function() {
|
17 |
var input = $(this);
|
18 |
-
if( !input.val() ) {
|
19 |
add_field_error('This field is required',input);
|
20 |
has_required_fields = false;
|
21 |
}
|
6 |
|
7 |
set_current_step_wrap();
|
8 |
|
9 |
+
$(document).on( 'click', '[data-fv-player-wizard-next]', function() {
|
10 |
var button_next = $(this),
|
11 |
indicator = current_step_wrap.find('[data-fv-player-wizard-indicator]');
|
12 |
|
15 |
var has_required_fields = true
|
16 |
get_step_fields().each( function() {
|
17 |
var input = $(this);
|
18 |
+
if( !input.val() && !input.data('optional') ) {
|
19 |
add_field_error('This field is required',input);
|
20 |
has_required_fields = false;
|
21 |
}
|
js/editor-screenshots.js
CHANGED
@@ -163,7 +163,7 @@
|
|
163 |
function show_error() {
|
164 |
spinner.remove();
|
165 |
button.prop("disabled",false);
|
166 |
-
message.html(
|
167 |
fv_wp_flowplayer_dialog_resize();
|
168 |
}
|
169 |
|
163 |
function show_error() {
|
164 |
spinner.remove();
|
165 |
button.prop("disabled",false);
|
166 |
+
message.html(fv_player_editor_translations.screenshot_cors_error);
|
167 |
fv_wp_flowplayer_dialog_resize();
|
168 |
}
|
169 |
|
js/fancybox.js
CHANGED
@@ -1,16 +1,16 @@
|
|
1 |
// ==================================================
|
2 |
-
// fancyBox v3.
|
3 |
//
|
4 |
// Licensed GPLv3 for open source use
|
5 |
// or fancyBox Commercial License for commercial use
|
6 |
//
|
7 |
// http://fancyapps.com/fancybox/
|
8 |
-
// Copyright
|
9 |
//
|
10 |
// ==================================================
|
11 |
-
!function(t,e,n,o){"use strict";function i(t,e){var o,i,a,s=[],r=0;t&&t.isDefaultPrevented()||(t.preventDefault(),e=e||{},t&&t.data&&(e=p(t.data.options,e)),o=e.$target||n(t.currentTarget).trigger("blur"),a=n.fancybox.getInstance(),a&&a.$trigger&&a.$trigger.is(o)||(e.selector?s=n(e.selector):(i=o.attr("data-fancybox")||"",i?(s=t.data?t.data.items:[],s=s.length?s.filter('[data-fancybox="'+i+'"]'):n('[data-fancybox="'+i+'"]')):s=[o]),r=n(s).index(o),r<0&&(r=0),a=n.fancybox.open(s,e,r),a.$trigger=o))}if(t.console=t.console||{info:function(t){}},n){if(n.fn.fancybox)return void console.info("fancyBox already initialized");var a={closeExisting:!1,loop:!1,gutter:50,keyboard:!0,arrows:!0,infobar:!0,smallBtn:"auto",toolbar:"auto",buttons:["zoom","thumbs","close"],idleTime:3,protect:!1,modal:!1,image:{preload:!1},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency="true" src=""></iframe>',preload:!0,css:{},attr:{scrolling:"auto"}},video:{tpl:'<video class="fancybox-video" controls controlsList="nodownload"><source src="{{src}}" type="{{format}}" />Your browser doesn\'t support HTML5 video</video>',format:"",autoStart:!0},defaultType:"image",animationEffect:"zoom",animationDuration:366,zoomOpacity:"auto",transitionEffect:"fade",transitionDuration:366,slideClass:"",baseClass:"",baseTpl:'<div class="fancybox-container" role="dialog" tabindex="-1"><div class="fancybox-bg"></div><div class="fancybox-inner"><div class="fancybox-infobar"><span data-fancybox-index></span> / <span data-fancybox-count></span></div><div class="fancybox-toolbar">{{buttons}}</div><div class="fancybox-navigation">{{arrows}}</div><div class="fancybox-stage"></div><div class="fancybox-caption"></div></div></div>',spinnerTpl:'<div class="fancybox-loading"></div>',errorTpl:'<div class="fancybox-error"><p>{{ERROR}}</p></div>',btnTpl:{download:'<a download data-fancybox-download class="fancybox-button fancybox-button--download" title="{{DOWNLOAD}}" href="javascript:;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.62 17.09V19H5.38v-1.91zm-2.97-6.96L17 11.45l-5 4.87-5-4.87 1.36-1.32 2.68 2.64V5h1.92v7.77z"/></svg></a>',zoom:'<button data-fancybox-zoom class="fancybox-button fancybox-button--zoom" title="{{ZOOM}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.7 17.3l-3-3a5.9 5.9 0 0 0-.6-7.6 5.9 5.9 0 0 0-8.4 0 5.9 5.9 0 0 0 0 8.4 5.9 5.9 0 0 0 7.7.7l3 3a1 1 0 0 0 1.3 0c.4-.5.4-1 0-1.5zM8.1 13.8a4 4 0 0 1 0-5.7 4 4 0 0 1 5.7 0 4 4 0 0 1 0 5.7 4 4 0 0 1-5.7 0z"/></svg></button>',close:'<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z"/></svg></button>',arrowLeft:'<button data-fancybox-prev class="fancybox-button fancybox-button--arrow_left" title="{{PREV}}"><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z"/></svg></div></button>',arrowRight:'<button data-fancybox-next class="fancybox-button fancybox-button--arrow_right" title="{{NEXT}}"><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z"/></svg></div></button>',smallBtn:'<button type="button" data-fancybox-close class="fancybox-button fancybox-close-small" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" version="1" viewBox="0 0 24 24"><path d="M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z"/></svg></button>'},parentEl:"body",hideScrollbar:!0,autoFocus:!0,backFocus:!0,trapFocus:!0,fullScreen:{autoStart:!1},touch:{vertical:!0,momentum:!0},hash:null,media:{},slideShow:{autoStart:!1,speed:3e3},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"},wheel:"auto",onInit:n.noop,beforeLoad:n.noop,afterLoad:n.noop,beforeShow:n.noop,afterShow:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop,clickContent:function(t,e){return"image"===t.type&&"zoom"},clickSlide:"close",clickOutside:"close",dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1,mobile:{idleTime:!1,clickContent:function(t,e){return"image"===t.type&&"toggleControls"},clickSlide:function(t,e){return"image"===t.type?"toggleControls":"close"},dblclickContent:function(t,e){return"image"===t.type&&"zoom"},dblclickSlide:function(t,e){return"image"===t.type&&"zoom"}},lang:"en",i18n:{en:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",ERROR:"The requested content cannot be loaded. <br/> Please try again later.",PLAY_START:"Start slideshow",PLAY_STOP:"Pause slideshow",FULL_SCREEN:"Full screen",THUMBS:"Thumbnails",DOWNLOAD:"Download",SHARE:"Share",ZOOM:"Zoom"},de:{CLOSE:"Schliessen",NEXT:"Weiter",PREV:"Zurück",ERROR:"Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.",PLAY_START:"Diaschau starten",PLAY_STOP:"Diaschau beenden",FULL_SCREEN:"Vollbild",THUMBS:"Vorschaubilder",DOWNLOAD:"Herunterladen",SHARE:"Teilen",ZOOM:"Maßstab"}}},s=n(t),r=n(e),c=0,l=function(t){return t&&t.hasOwnProperty&&t instanceof n},d=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),u=function(){var t,n=e.createElement("fakeelement"),i={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(t in i)if(n.style[t]!==o)return i[t];return"transitionend"}(),f=function(t){return t&&t.length&&t[0].offsetHeight},p=function(t,e){var o=n.extend(!0,{},t,e);return n.each(e,function(t,e){n.isArray(e)&&(o[t]=e)}),o},h=function(t,e,o){var i=this;i.opts=p({index:o},n.fancybox.defaults),n.isPlainObject(e)&&(i.opts=p(i.opts,e)),n.fancybox.isMobile&&(i.opts=p(i.opts,i.opts.mobile)),i.id=i.opts.id||++c,i.currIndex=parseInt(i.opts.index,10)||0,i.prevIndex=null,i.prevPos=null,i.currPos=0,i.firstRun=!0,i.group=[],i.slides={},i.addContent(t),i.group.length&&i.init()};n.extend(h.prototype,{init:function(){var i,a,s,r=this,c=r.group[r.currIndex],l=c.opts,d=n.fancybox.scrollbarWidth;l.closeExisting&&n.fancybox.close(!0),n("body").addClass("fancybox-active"),!n.fancybox.getInstance()&&l.hideScrollbar!==!1&&!n.fancybox.isMobile&&e.body.scrollHeight>t.innerHeight&&(d===o&&(i=n('<div style="width:100px;height:100px;overflow:scroll;" />').appendTo("body"),d=n.fancybox.scrollbarWidth=i[0].offsetWidth-i[0].clientWidth,i.remove()),n("head").append('<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar { margin-right: '+d+"px; }</style>"),n("body").addClass("compensate-for-scrollbar")),s="",n.each(l.buttons,function(t,e){s+=l.btnTpl[e]||""}),a=n(r.translate(r,l.baseTpl.replace("{{buttons}}",s).replace("{{arrows}}",l.btnTpl.arrowLeft+l.btnTpl.arrowRight))).attr("id","fancybox-container-"+r.id).addClass(l.baseClass).data("FancyBox",r).appendTo(l.parentEl),r.$refs={container:a},["bg","inner","infobar","toolbar","stage","caption","navigation"].forEach(function(t){r.$refs[t]=a.find(".fancybox-"+t)}),r.trigger("onInit"),r.activate(),r.jumpTo(r.currIndex)},translate:function(t,e){var n=t.opts.i18n[t.opts.lang];return e.replace(/\{\{(\w+)\}\}/g,function(t,e){var i=n[e];return i===o?t:i})},addContent:function(t){var e,i=this,a=n.makeArray(t);n.each(a,function(t,e){var a,s,r,c,l,d={},u={};n.isPlainObject(e)?(d=e,u=e.opts||e):"object"===n.type(e)&&n(e).length?(a=n(e),u=a.data()||{},u=n.extend(!0,{},u,u.options),u.$orig=a,d.src=i.opts.src||u.src||a.attr("href"),d.type||d.src||(d.type="inline",d.src=e)):d={type:"html",src:e+""},d.opts=n.extend(!0,{},i.opts,u),n.isArray(u.buttons)&&(d.opts.buttons=u.buttons),n.fancybox.isMobile&&d.opts.mobile&&(d.opts=p(d.opts,d.opts.mobile)),s=d.type||d.opts.type,c=d.src||"",!s&&c&&((r=c.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(s="video",d.opts.video.format||(d.opts.video.format="video/"+("ogv"===r[1]?"ogg":r[1]))):c.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?s="image":c.match(/\.(pdf)((\?|#).*)?$/i)?s="iframe":"#"===c.charAt(0)&&(s="inline")),s?d.type=s:i.trigger("objectNeedsType",d),d.contentType||(d.contentType=n.inArray(d.type,["html","inline","ajax"])>-1?"html":d.type),d.index=i.group.length,"auto"==d.opts.smallBtn&&(d.opts.smallBtn=n.inArray(d.type,["html","inline","ajax"])>-1),"auto"===d.opts.toolbar&&(d.opts.toolbar=!d.opts.smallBtn),d.opts.$trigger&&d.index===i.opts.index&&(d.opts.$thumb=d.opts.$trigger.find("img:first"),d.opts.$thumb.length&&(d.opts.$orig=d.opts.$trigger)),d.opts.$thumb&&d.opts.$thumb.length||!d.opts.$orig||(d.opts.$thumb=d.opts.$orig.find("img:first")),"function"===n.type(d.opts.caption)&&(d.opts.caption=d.opts.caption.apply(e,[i,d])),"function"===n.type(i.opts.caption)&&(d.opts.caption=i.opts.caption.apply(e,[i,d])),d.opts.caption instanceof n||(d.opts.caption=d.opts.caption===o?"":d.opts.caption+""),"ajax"===d.type&&(l=c.split(/\s+/,2),l.length>1&&(d.src=l.shift(),d.opts.filter=l.shift())),d.opts.modal&&(d.opts=n.extend(!0,d.opts,{infobar:0,toolbar:0,smallBtn:0,keyboard:0,slideShow:0,fullScreen:0,thumbs:0,touch:0,clickContent:!1,clickSlide:!1,clickOutside:!1,dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1})),i.group.push(d)}),Object.keys(i.slides).length&&(i.updateControls(),e=i.Thumbs,e&&e.isActive&&(e.create(),e.focus()))},addEvents:function(){var e=this;e.removeEvents(),e.$refs.container.on("click.fb-close","[data-fancybox-close]",function(t){t.stopPropagation(),t.preventDefault(),e.close(t)}).on("touchstart.fb-prev click.fb-prev","[data-fancybox-prev]",function(t){t.stopPropagation(),t.preventDefault(),e.previous()}).on("touchstart.fb-next click.fb-next","[data-fancybox-next]",function(t){t.stopPropagation(),t.preventDefault(),e.next()}).on("click.fb","[data-fancybox-zoom]",function(t){e[e.isScaledDown()?"scaleToActual":"scaleToFit"]()}),s.on("orientationchange.fb resize.fb",function(t){t&&t.originalEvent&&"resize"===t.originalEvent.type?d(function(){e.update()}):(e.current&&"iframe"===e.current.type&&e.$refs.stage.hide(),setTimeout(function(){e.$refs.stage.show(),e.update()},n.fancybox.isMobile?600:250))}),r.on("keydown.fb",function(t){var o=n.fancybox?n.fancybox.getInstance():null,i=o.current,a=t.keyCode||t.which;if(9==a)return void(i.opts.trapFocus&&e.focus(t));if(!(!i.opts.keyboard||t.ctrlKey||t.altKey||t.shiftKey||n(t.target).is("input")||n(t.target).is("textarea")))return 8===a||27===a?(t.preventDefault(),void e.close(t)):37===a||38===a?(t.preventDefault(),void e.previous()):39===a||40===a?(t.preventDefault(),void e.next()):void e.trigger("afterKeydown",t,a)}),e.group[e.currIndex].opts.idleTime&&(e.idleSecondsCounter=0,r.on("mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",function(t){e.idleSecondsCounter=0,e.isIdle&&e.showControls(),e.isIdle=!1}),e.idleInterval=t.setInterval(function(){e.idleSecondsCounter++,e.idleSecondsCounter>=e.group[e.currIndex].opts.idleTime&&!e.isDragging&&(e.isIdle=!0,e.idleSecondsCounter=0,e.hideControls())},1e3))},removeEvents:function(){var e=this;s.off("orientationchange.fb resize.fb"),r.off("keydown.fb .fb-idle"),this.$refs.container.off(".fb-close .fb-prev .fb-next"),e.idleInterval&&(t.clearInterval(e.idleInterval),e.idleInterval=null)},previous:function(t){return this.jumpTo(this.currPos-1,t)},next:function(t){return this.jumpTo(this.currPos+1,t)},jumpTo:function(t,e){var i,a,s,r,c,l,d,u=this,f=u.group.length;if(!(u.isDragging||u.isClosing||u.isAnimating&&u.firstRun)){if(t=parseInt(t,10),s=u.current?u.current.opts.loop:u.opts.loop,!s&&(t<0||t>=f))return!1;if(i=u.firstRun=!Object.keys(u.slides).length,!(f<2&&!i&&u.isDragging)){if(c=u.current,u.prevIndex=u.currIndex,u.prevPos=u.currPos,r=u.createSlide(t),f>1&&((s||r.index<f-1)&&u.createSlide(t+1),(s||r.index>0)&&u.createSlide(t-1)),u.current=r,u.currIndex=r.index,u.currPos=r.pos,u.trigger("beforeShow",i),u.updateControls(),a=u.isMoved(r),r.forcedDuration=o,n.isNumeric(e)?r.forcedDuration=e:e=r.opts[i?"animationDuration":"transitionDuration"],e=parseInt(e,10),i)return r.opts.animationEffect&&e&&u.$refs.container.css("transition-duration",e+"ms"),u.$refs.container.addClass("fancybox-is-open"),r.$slide.addClass("fancybox-slide--previous"),u.loadSlide(r),r.$slide.removeClass("fancybox-slide--previous").addClass("fancybox-slide--current"),u.preload("image"),void u.$refs.container.trigger("focus");n.each(u.slides,function(t,e){n.fancybox.stop(e.$slide,!0),e.$slide.removeClass("fancybox-animated").removeClass(function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")})}),r.$slide.removeClass("fancybox-slide--next fancybox-slide--previous").addClass("fancybox-slide--current"),a?(l=Math.round(r.$slide.width()),n.each(u.slides,function(t,o){var i=o.pos-r.pos;n.fancybox.animate(o.$slide,{top:0,left:i*l+i*o.opts.gutter},e,function(){o.$slide.removeAttr("style").removeClass("fancybox-slide--next fancybox-slide--previous"),o.pos===u.currPos&&u.complete()})})):u.$refs.stage.children().removeAttr("style"),r.isLoaded?u.revealContent(r):u.loadSlide(r),u.preload("image"),c.pos!==r.pos&&(d="fancybox-slide--"+(c.pos>r.pos?"next":"previous"),c.$slide.removeClass("fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous"),c.isComplete=!1,e&&(a||r.opts.transitionEffect)&&(a?c.$slide.addClass(d):(d="fancybox-animated "+d+" fancybox-fx-"+r.opts.transitionEffect,n.fancybox.animate(c.$slide,d,e,null,!1))))}}},createSlide:function(t){var e,o,i=this;return o=t%i.group.length,o=o<0?i.group.length+o:o,!i.slides[t]&&i.group[o]&&(e=n('<div class="fancybox-slide"></div>').appendTo(i.$refs.stage),i.slides[t]=n.extend(!0,{},i.group[o],{pos:t,$slide:e,isLoaded:!1}),i.updateSlide(i.slides[t])),i.slides[t]},scaleToActual:function(t,e,i){var a,s,r,c,l,d=this,u=d.current,f=u.$content,p=n.fancybox.getTranslate(u.$slide).width,h=n.fancybox.getTranslate(u.$slide).height,g=u.width,b=u.height;!d.isAnimating&&f&&"image"==u.type&&u.isLoaded&&!u.hasError&&(n.fancybox.stop(f),d.isAnimating=!0,t=t===o?.5*p:t,e=e===o?.5*h:e,a=n.fancybox.getTranslate(f),a.top-=n.fancybox.getTranslate(u.$slide).top,a.left-=n.fancybox.getTranslate(u.$slide).left,c=g/a.width,l=b/a.height,s=.5*p-.5*g,r=.5*h-.5*b,g>p&&(s=a.left*c-(t*c-t),s>0&&(s=0),s<p-g&&(s=p-g)),b>h&&(r=a.top*l-(e*l-e),r>0&&(r=0),r<h-b&&(r=h-b)),d.updateCursor(g,b),n.fancybox.animate(f,{top:r,left:s,scaleX:c,scaleY:l},i||330,function(){d.isAnimating=!1}),d.SlideShow&&d.SlideShow.isActive&&d.SlideShow.stop())},scaleToFit:function(t){var e,o=this,i=o.current,a=i.$content;!o.isAnimating&&a&&"image"==i.type&&i.isLoaded&&!i.hasError&&(n.fancybox.stop(a),o.isAnimating=!0,e=o.getFitPos(i),o.updateCursor(e.width,e.height),n.fancybox.animate(a,{top:e.top,left:e.left,scaleX:e.width/a.width(),scaleY:e.height/a.height()},t||330,function(){o.isAnimating=!1}))},getFitPos:function(t){var e,o,i,a,s=this,r=t.$content,c=t.$slide,l=t.width||t.opts.width,d=t.height||t.opts.height,u={};return!!(t.isLoaded&&r&&r.length)&&(e=n.fancybox.getTranslate(s.$refs.stage).width,o=n.fancybox.getTranslate(s.$refs.stage).height,e-=parseFloat(c.css("paddingLeft"))+parseFloat(c.css("paddingRight"))+parseFloat(r.css("marginLeft"))+parseFloat(r.css("marginRight")),o-=parseFloat(c.css("paddingTop"))+parseFloat(c.css("paddingBottom"))+parseFloat(r.css("marginTop"))+parseFloat(r.css("marginBottom")),l&&d||(l=e,d=o),i=Math.min(1,e/l,o/d),l=Math.floor(i*l),d=Math.floor(i*d),"image"===t.type?(u.top=Math.floor(.5*(o-d))+parseFloat(c.css("paddingTop")),u.left=Math.floor(.5*(e-l))+parseFloat(c.css("paddingLeft"))):"video"===t.contentType&&(a=t.opts.width&&t.opts.height?l/d:t.opts.ratio||16/9,d>l/a?d=l/a:l>d*a&&(l=d*a)),u.width=l,u.height=d,u)},update:function(){var t=this;n.each(t.slides,function(e,n){t.updateSlide(n)})},updateSlide:function(t){var e=this,o=t&&t.$content,i=t.width||t.opts.width,a=t.height||t.opts.height,s=t.$slide;o&&(i||a||"video"===t.contentType)&&!t.hasError&&(n.fancybox.stop(o),n.fancybox.setTranslate(o,e.getFitPos(t)),t.pos===e.currPos&&(e.isAnimating=!1,e.updateCursor())),s.length&&(s.trigger("refresh"),e.$refs.toolbar.toggleClass("compensate-for-scrollbar",s.get(0).scrollHeight>s.get(0).clientHeight)),e.trigger("onUpdate",t)},centerSlide:function(t,e){var i,a,s=this;s.current&&(i=Math.round(t.$slide.width()),a=t.pos-s.current.pos,n.fancybox.animate(t.$slide,{top:0,left:a*i+a*t.opts.gutter,opacity:1},e===o?0:e,null,!1))},isMoved:function(t){var e=t||this.current,o=n.fancybox.getTranslate(e.$slide);return(0!==o.left||0!==o.top)&&!e.$slide.hasClass("fancybox-animated")},updateCursor:function(t,e){var o,i=this,a=i.current,s=i.$refs.container.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan");a&&!i.isClosing&&(o=i.isZoomable(),s.toggleClass("fancybox-is-zoomable",o),n("[data-fancybox-zoom]").prop("disabled",!o),i.canPan(t,e)?s.addClass("fancybox-can-pan"):o&&("zoom"===a.opts.clickContent||n.isFunction(a.opts.clickContent)&&"zoom"==a.opts.clickContent(a))?s.addClass("fancybox-can-zoomIn"):a.opts.touch&&(a.opts.touch.vertical||i.group.length>1)&&"video"!==a.contentType&&s.addClass("fancybox-can-swipe"))},isZoomable:function(){var t,e=this,n=e.current;if(n&&!e.isClosing&&"image"===n.type&&!n.hasError){if(!n.isLoaded)return!0;if(t=e.getFitPos(n),n.width>t.width||n.height>t.height)return!0}return!1},isScaledDown:function(t,e){var i=this,a=!1,s=i.current,r=s.$content;return t!==o&&e!==o?a=t<s.width&&e<s.height:r&&(a=n.fancybox.getTranslate(r),a=a.width<s.width&&a.height<s.height),a},canPan:function(t,e){var i,a,s=this,r=!1,c=s.current;return"image"===c.type&&(i=c.$content)&&!c.hasError&&(r=s.getFitPos(c),a=t!==o&&e!==o?{width:t,height:e}:n.fancybox.getTranslate(i),r=Math.abs(a.width-r.width)>1.5||Math.abs(a.height-r.height)>1.5),r},loadSlide:function(t){var e,o,i,a=this;if(!t.isLoading&&!t.isLoaded){switch(t.isLoading=!0,a.trigger("beforeLoad",t),e=t.type,o=t.$slide,o.off("refresh").trigger("onReset").addClass(t.opts.slideClass),e){case"image":a.setImage(t);break;case"iframe":a.setIframe(t);break;case"html":a.setContent(t,t.src||t.content);break;case"video":a.setContent(t,t.opts.video.tpl.replace("{{src}}",t.src).replace("{{format}}",t.opts.videoFormat||t.opts.video.format));break;case"inline":n(t.src).length?a.setContent(t,n(t.src)):a.setError(t);break;case"ajax":a.showLoading(t),i=n.ajax(n.extend({},t.opts.ajax.settings,{url:t.src,success:function(e,n){"success"===n&&a.setContent(t,e)},error:function(e,n){e&&"abort"!==n&&a.setError(t)}})),o.one("onReset",function(){i.abort()});break;default:a.setError(t)}return!0}},setImage:function(e){var o,i,a,s,r,c=this,l=e.opts.srcset||e.opts.image.srcset;if(e.timouts=setTimeout(function(){var t=e.$image;!e.isLoading||t&&t.length&&t[0].complete||e.hasError||c.showLoading(e)},350),l){s=t.devicePixelRatio||1,r=t.innerWidth*s,a=l.split(",").map(function(t){var e={};return t.trim().split(/\s+/).forEach(function(t,n){var o=parseInt(t.substring(0,t.length-1),10);return 0===n?e.url=t:void(o&&(e.value=o,e.postfix=t[t.length-1]))}),e}),a.sort(function(t,e){return t.value-e.value});for(var d=0;d<a.length;d++){var u=a[d];if("w"===u.postfix&&u.value>=r||"x"===u.postfix&&u.value>=s){i=u;break}}!i&&a.length&&(i=a[a.length-1]),i&&(e.src=i.url,e.width&&e.height&&"w"==i.postfix&&(e.height=e.width/e.height*i.value,e.width=i.value),e.opts.srcset=l)}e.$content=n('<div class="fancybox-content"></div>').addClass("fancybox-is-hidden").appendTo(e.$slide.addClass("fancybox-slide--image")),o=e.opts.thumb||!(!e.opts.$thumb||!e.opts.$thumb.length)&&e.opts.$thumb.attr("src"),e.opts.preload!==!1&&e.opts.width&&e.opts.height&&o&&(e.width=e.opts.width,e.height=e.opts.height,e.$ghost=n("<img />").one("error",function(){n(this).remove(),e.$ghost=null}).one("load",function(){c.afterLoad(e)}).addClass("fancybox-image").appendTo(e.$content).attr("src",o)),c.setBigImage(e)},setBigImage:function(t){var e=this,o=n("<img />");t.$image=o.one("error",function(){e.setError(t)}).one("load",function(){var n;t.$ghost||(e.resolveImageSlideSize(t,this.naturalWidth,this.naturalHeight),e.afterLoad(t)),t.timouts&&(clearTimeout(t.timouts),t.timouts=null),e.isClosing||(t.opts.srcset&&(n=t.opts.sizes,n&&"auto"!==n||(n=(t.width/t.height>1&&s.width()/s.height()>1?"100":Math.round(t.width/t.height*100))+"vw"),o.attr("sizes",n).attr("srcset",t.opts.srcset)),t.$ghost&&setTimeout(function(){t.$ghost&&!e.isClosing&&t.$ghost.hide()},Math.min(300,Math.max(1e3,t.height/1600))),e.hideLoading(t))}).addClass("fancybox-image").attr("src",t.src).appendTo(t.$content),(o[0].complete||"complete"==o[0].readyState)&&o[0].naturalWidth&&o[0].naturalHeight?o.trigger("load"):o[0].error&&o.trigger("error")},resolveImageSlideSize:function(t,e,n){var o=parseInt(t.opts.width,10),i=parseInt(t.opts.height,10);t.width=e,t.height=n,o>0&&(t.width=o,t.height=Math.floor(o*n/e)),i>0&&(t.width=Math.floor(i*e/n),t.height=i)},setIframe:function(t){var e,i=this,a=t.opts.iframe,s=t.$slide;t.$content=n('<div class="fancybox-content'+(a.preload?" fancybox-is-hidden":"")+'"></div>').css(a.css).appendTo(s),s.addClass("fancybox-slide--"+t.contentType),t.$iframe=e=n(a.tpl.replace(/\{rnd\}/g,(new Date).getTime())).attr(a.attr).appendTo(t.$content),a.preload?(i.showLoading(t),e.on("load.fb error.fb",function(e){this.isReady=1,t.$slide.trigger("refresh"),i.afterLoad(t)}),s.on("refresh.fb",function(){var n,i,r=t.$content,c=a.css.width,l=a.css.height;if(1===e[0].isReady){try{n=e.contents(),i=n.find("body")}catch(t){}i&&i.length&&i.children().length&&(s.css("overflow","visible"),r.css({width:"100%",height:""}),c===o&&(c=Math.ceil(Math.max(i[0].clientWidth,i.outerWidth(!0)))),c&&r.width(c),l===o&&(l=Math.ceil(Math.max(i[0].clientHeight,i.outerHeight(!0)))),l&&r.height(l),s.css("overflow","auto")),r.removeClass("fancybox-is-hidden")}})):this.afterLoad(t),e.attr("src",t.src),s.one("onReset",function(){try{n(this).find("iframe").hide().unbind().attr("src","//about:blank")}catch(t){}n(this).off("refresh.fb").empty(),t.isLoaded=!1})},setContent:function(t,e){var o=this;o.isClosing||(o.hideLoading(t),t.$content&&n.fancybox.stop(t.$content),t.$slide.empty(),l(e)&&e.parent().length?(e.hasClass("fancybox-content")&&e.parent(".fancybox-slide--html").trigger("onReset"),t.$placeholder=n("<div>").hide().insertAfter(e),e.css("display","inline-block")):t.hasError||("string"===n.type(e)&&(e=n("<div>").append(n.trim(e)).contents()),t.opts.filter&&(e=n("<div>").html(e).find(t.opts.filter))),t.$slide.one("onReset",function(){n(this).find("video,audio").trigger("pause"),t.$placeholder&&(t.$placeholder.after(e.removeClass("fancybox-content").hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1,t.isRevealed=!1)}),n(e).appendTo(t.$slide),n(e).is("video,audio")&&(n(e).addClass("fancybox-video"),n(e).wrap("<div></div>"),t.contentType="video",t.opts.width=t.opts.width||n(e).attr("width"),t.opts.height=t.opts.height||n(e).attr("height")),t.$content=t.$slide.children().filter("div,form,main,video,audio,article,.fancybox-content").first(),t.$content.siblings().hide(),t.$content.length||(t.$content=t.$slide.wrapInner("<div></div>").children().first()),t.$content.addClass("fancybox-content"),t.$slide.addClass("fancybox-slide--"+t.contentType),this.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.trigger("onReset").removeClass("fancybox-slide--"+t.contentType).addClass("fancybox-slide--error"),t.contentType="html",this.setContent(t,this.translate(t,t.opts.errorTpl)),t.pos===this.currPos&&(this.isAnimating=!1)},showLoading:function(t){var e=this;t=t||e.current,t&&!t.$spinner&&(t.$spinner=n(e.translate(e,e.opts.spinnerTpl)).appendTo(t.$slide))},hideLoading:function(t){var e=this;t=t||e.current,t&&t.$spinner&&(t.$spinner.remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger("afterLoad",t),e.hideLoading(t),t.pos===e.currPos&&e.updateCursor(),!t.opts.smallBtn||t.$smallBtn&&t.$smallBtn.length||(t.$smallBtn=n(e.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on("contextmenu.fb",function(t){return 2==t.button&&t.preventDefault(),!0}),"image"===t.type&&n('<div class="fancybox-spaceball"></div>').appendTo(t.$content)),e.revealContent(t))},revealContent:function(t){var e,i,a,s,r=this,c=t.$slide,l=!1,d=!1,u=r.isMoved(t),p=t.isRevealed;if(!u||!p){if(t.isRevealed=!0,e=t.opts[r.firstRun?"animationEffect":"transitionEffect"],a=t.opts[r.firstRun?"animationDuration":"transitionDuration"],a=parseInt(t.forcedDuration===o?a:t.forcedDuration,10),t.pos===r.currPos&&(t.isComplete?e=!1:r.isAnimating=!0),!u&&t.pos===r.currPos&&a||(e=!1),"zoom"===e&&(t.pos===r.currPos&&a&&"image"===t.type&&!t.hasError&&(d=r.getThumbPos(t))?l=r.getFitPos(t):e="fade"),"zoom"===e)return l.scaleX=l.width/d.width,l.scaleY=l.height/d.height,s=t.opts.zoomOpacity,"auto"==s&&(s=Math.abs(t.width/t.height-d.width/d.height)>.1),s&&(d.opacity=.1,l.opacity=1),n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"),d),f(t.$content),void n.fancybox.animate(t.$content,l,a,function(){r.isAnimating=!1,r.complete()});if(r.updateSlide(t),!e)return f(c),p||t.$content.removeClass("fancybox-is-hidden").hide().fadeIn("fast"),void(t.pos===r.currPos&&r.complete());n.fancybox.stop(c),i="fancybox-animated fancybox-slide--"+(t.pos>=r.prevPos?"next":"previous")+" fancybox-fx-"+e,c.removeAttr("style").removeClass("fancybox-slide--current fancybox-slide--next fancybox-slide--previous").addClass(i),t.$content.removeClass("fancybox-is-hidden"),f(c),n.fancybox.animate(c,"fancybox-slide--current",a,function(){c.removeClass(i).removeAttr("style"),t.pos===r.currPos&&r.complete()},!0)}},getThumbPos:function(o){var i,a=this,s=!1,r=o.opts.$thumb,c=r&&r.length&&r[0].ownerDocument===e?r.offset():0,l=function(e){for(var o,i=e[0],a=i.getBoundingClientRect(),s=[];null!==i.parentElement;)"hidden"!==n(i.parentElement).css("overflow")&&"auto"!==n(i.parentElement).css("overflow")||s.push(i.parentElement.getBoundingClientRect()),i=i.parentElement;return o=s.every(function(t){var e=Math.min(a.right,t.right)-Math.max(a.left,t.left),n=Math.min(a.bottom,t.bottom)-Math.max(a.top,t.top);return e>0&&n>0}),o&&a.bottom>0&&a.right>0&&a.left<n(t).width()&&a.top<n(t).height()};return c&&l(r)&&(i=a.$refs.stage.offset(),s={top:c.top-i.top+parseFloat(r.css("border-top-width")||0),left:c.left-i.left+parseFloat(r.css("border-left-width")||0),width:r.width(),height:r.height(),scaleX:1,scaleY:1}),s},complete:function(){var t,e=this,o=e.current,i={};!e.isMoved()&&o.isLoaded&&(o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger("onReset"),e.preload("inline"),f(o.$slide),o.$slide.addClass("fancybox-slide--complete"),n.each(e.slides,function(t,o){o.pos>=e.currPos-1&&o.pos<=e.currPos+1?i[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.off().remove())}),e.slides=i),e.isAnimating=!1,e.updateCursor(),e.trigger("afterShow"),o.opts.video.autoStart&&o.$slide.find("video,audio").filter(":visible:first").trigger("play"),o.opts.autoFocus&&"html"===o.contentType&&(t=o.$content.find("input[autofocus]:enabled:visible:first"),t.length?t.trigger("focus"):e.focus(null,!0)),o.$slide.scrollTop(0).scrollLeft(0))},preload:function(t){var e=this,n=e.slides[e.currPos+1],o=e.slides[e.currPos-1];o&&o.type===t&&e.loadSlide(o),n&&n.type===t&&e.loadSlide(n)},focus:function(t,o){var i,a,s=this,r=["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","[contenteditable]",'[tabindex]:not([tabindex^="-"])'].join(",");s.isClosing||(i=!t&&s.current&&s.current.isComplete?s.current.$slide.find("*:visible"+(o?":not(.fancybox-close-small)":"")):s.$refs.container.find("*:visible"),i=i.filter(r).filter(function(){return"hidden"!==n(this).css("visibility")&&!n(this).hasClass("disabled")}),i.length?(a=i.index(e.activeElement),t&&t.shiftKey?(a<0||0==a)&&(t.preventDefault(),i.eq(i.length-1).trigger("focus")):(a<0||a==i.length-1)&&(t&&t.preventDefault(),i.eq(0).trigger("focus"))):s.$refs.container.trigger("focus"))},activate:function(){var t=this;n(".fancybox-container").each(function(){var e=n(this).data("FancyBox");e&&e.id!==t.id&&!e.isClosing&&(e.trigger("onDeactivate"),e.removeEvents(),e.isVisible=!1)}),t.isVisible=!0,(t.current||t.isIdle)&&(t.update(),t.updateControls()),t.trigger("onActivate"),t.addEvents()},close:function(t,e){var o,i,a,s,r,c,l,p=this,h=p.current,g=function(){p.cleanUp(t)};return!p.isClosing&&(p.isClosing=!0,p.trigger("beforeClose",t)===!1?(p.isClosing=!1,d(function(){p.update()}),!1):(p.removeEvents(),h.timouts&&clearTimeout(h.timouts),a=h.$content,o=h.opts.animationEffect,i=n.isNumeric(e)?e:o?h.opts.animationDuration:0,h.$slide.off(u).removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"),h.$slide.siblings().trigger("onReset").remove(),i&&p.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing"),p.hideLoading(h),p.hideControls(),p.updateCursor(),"zoom"!==o||t!==!0&&a&&i&&"image"===h.type&&!h.hasError&&(l=p.getThumbPos(h))||(o="fade"),"zoom"===o?(n.fancybox.stop(a),s=n.fancybox.getTranslate(a),c={top:s.top,left:s.left,scaleX:s.width/l.width,scaleY:s.height/l.height,width:l.width,height:l.height},r=h.opts.zoomOpacity,"auto"==r&&(r=Math.abs(h.width/h.height-l.width/l.height)>.1),r&&(l.opacity=0),n.fancybox.setTranslate(a,c),f(a),n.fancybox.animate(a,l,i,g),!0):(o&&i?t===!0?setTimeout(g,i):n.fancybox.animate(h.$slide.removeClass("fancybox-slide--current"),"fancybox-animated fancybox-slide--previous fancybox-fx-"+o,i,g):g(),!0)))},cleanUp:function(e){var o,i,a,s=this,r=s.current.opts.$orig;s.current.$slide.trigger("onReset"),s.$refs.container.empty().remove(),s.trigger("afterClose",e),s.current.opts.backFocus&&(r&&r.length&&r.is(":visible")||(r=s.$trigger),r&&r.length&&(i=t.scrollX,a=t.scrollY,r.trigger("focus"),n("html, body").scrollTop(a).scrollLeft(i))),s.current=null,o=n.fancybox.getInstance(),o?o.activate():(n("body").removeClass("fancybox-active compensate-for-scrollbar"),n("#fancybox-style-noscroll").remove())},trigger:function(t,e){var o,i=Array.prototype.slice.call(arguments,1),a=this,s=e&&e.opts?e:a.current;return s?i.unshift(s):s=a,i.unshift(a),n.isFunction(s.opts[t])&&(o=s.opts[t].apply(s,i)),o===!1?o:void("afterClose"!==t&&a.$refs?a.$refs.container.trigger(t+".fb",i):r.trigger(t+".fb",i))},updateControls:function(){var t=this,o=t.current,i=o.index,a=o.opts.caption,s=t.$refs.container,r=t.$refs.caption;o.$slide.trigger("refresh"),t.$caption=a&&a.length?r.html(a):null,t.isHiddenControls||t.isIdle||t.showControls(),s.find("[data-fancybox-count]").html(t.group.length),s.find("[data-fancybox-index]").html(i+1),s.find("[data-fancybox-prev]").prop("disabled",!o.opts.loop&&i<=0),s.find("[data-fancybox-next]").prop("disabled",!o.opts.loop&&i>=t.group.length-1),"image"===o.type?s.find("[data-fancybox-zoom]").show().end().find("[data-fancybox-download]").attr("href",o.opts.image.src||o.src).show():o.opts.toolbar&&s.find("[data-fancybox-download],[data-fancybox-zoom]").hide(),n(e.activeElement).is(":hidden,[disabled]")&&t.$refs.container.trigger("focus")},hideControls:function(){this.isHiddenControls=!0,this.$refs.container.removeClass("fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav")},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.isHiddenControls=!1,
|
12 |
-
t.idleSecondsCounter=0,n.toggleClass("fancybox-show-toolbar",!(!e.toolbar||!e.buttons)).toggleClass("fancybox-show-infobar",!!(e.infobar&&t.group.length>1)).toggleClass("fancybox-show-caption",!!t.$caption).toggleClass("fancybox-show-nav",!!(e.arrows&&t.group.length>1)).toggleClass("fancybox-is-modal",!!e.modal)},toggleControls:function(){this.isHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:"3.4.1",defaults:a,getInstance:function(t){var e=n('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),o=Array.prototype.slice.call(arguments,1);return e instanceof h&&("string"===n.type(t)?e[t].apply(e,o):"function"===n.type(t)&&t.apply(e,o),e)},open:function(t,e,n){return new h(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),t===!0&&this.close(t))},destroy:function(){this.close(!0),r.add("body").off("click.fb-start","**")},isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),use3d:function(){var n=e.createElement("div");return t.getComputedStyle&&t.getComputedStyle(n)&&t.getComputedStyle(n).getPropertyValue("transform")&&!(e.documentMode&&e.documentMode<11)}(),getTranslate:function(t){var e;return!(!t||!t.length)&&(e=t[0].getBoundingClientRect(),{top:e.top||0,left:e.left||0,width:e.width,height:e.height,opacity:parseFloat(t.css("opacity"))})},setTranslate:function(t,e){var n="",i={};if(t&&e)return e.left===o&&e.top===o||(n=(e.left===o?t.position().left:e.left)+"px, "+(e.top===o?t.position().top:e.top)+"px",n=this.use3d?"translate3d("+n+", 0px)":"translate("+n+")"),e.scaleX!==o&&e.scaleY!==o&&(n=(n.length?n+" ":"")+"scale("+e.scaleX+", "+e.scaleY+")"),n.length&&(i.transform=n),e.opacity!==o&&(i.opacity=e.opacity),e.width!==o&&(i.width=e.width),e.height!==o&&(i.height=e.height),t.css(i)},animate:function(t,e,i,a,s){var r,c=!1;n.isFunction(i)&&(a=i,i=null),n.isPlainObject(e)||t.removeAttr("style"),n.fancybox.stop(t),t.on(u,function(o){(!o||!o.originalEvent||t.is(o.originalEvent.target)&&"z-index"!=o.originalEvent.propertyName)&&(n.fancybox.stop(t),c&&n.fancybox.setTranslate(t,c),n.isNumeric(i)&&t.css("transition-duration",""),n.isPlainObject(e)?s===!1&&t.removeAttr("style"):s!==!0&&t.removeClass(e),n.isFunction(a)&&a(o))}),n.isNumeric(i)&&t.css("transition-duration",i+"ms"),n.isPlainObject(e)?(e.scaleX!==o&&e.scaleY!==o&&(r=n.fancybox.getTranslate(t),c=n.extend({},e,{width:r.width*e.scaleX,height:r.height*e.scaleY,scaleX:1,scaleY:1}),delete e.width,delete e.height,t.parent().hasClass("fancybox-slide--image")&&t.parent().addClass("fancybox-is-scaling")),n.fancybox.setTranslate(t,e)):t.addClass(e),t.data("timer",setTimeout(function(){t.trigger("transitionend")},i+16))},stop:function(t,e){t&&t.length&&(clearTimeout(t.data("timer")),e&&t.trigger(u),t.off(u).css("transition-duration",""),t.parent().removeClass("fancybox-is-scaling"))}},n.fn.fancybox=function(t){var e;return t=t||{},e=t.selector||!1,e?n("body").off("click.fb-start",e).on("click.fb-start",e,{options:t},i):this.off("click.fb-start").on("click.fb-start",{items:this,options:t},i),this},r.on("click.fb-start","[data-fancybox]",i),r.on("click.fb-start","[data-fancybox-trigger]",function(t){n('[data-fancybox="'+n(this).attr("data-fancybox-trigger")+'"]').eq(n(this).attr("data-fancybox-index")||0).trigger("click.fb-start",{$trigger:n(this)})}),function(){var t=".fancybox-button",e="fancybox-focus",o=null;r.on("mousedown mouseup focus blur",t,function(i){switch(i.type){case"mousedown":o=n(this);break;case"mouseup":o=null;break;case"focusin":n(t).removeClass(e),n(this).is(o)||n(this).is("[disabled]")||n(this).addClass(e);break;case"focusout":n(t).removeClass(e)}})}()}}(window,document,jQuery),function(t){"use strict";var e=function(e,n,o){if(e)return o=o||"","object"===t.type(o)&&(o=t.param(o,!0)),t.each(n,function(t,n){e=e.replace("$"+t,n||"")}),o.length&&(e+=(e.indexOf("?")>0?"&":"?")+o),e},n={youtube:{matcher:/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},paramPlace:8,type:"iframe",url:"//www.youtube-nocookie.com/embed/$4",thumb:"//img.youtube.com/vi/$4/hqdefault.jpg"},vimeo:{matcher:/^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1,api:1},paramPlace:3,type:"iframe",url:"//player.vimeo.com/video/$2"},instagram:{matcher:/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,type:"image",url:"//$1/p/$2/media/?size=l"},gmap_place:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/?ll="+(t[9]?t[9]+"&z="+Math.floor(t[10])+(t[12]?t[12].replace(/^\//,"&"):""):t[12]+"").replace(/\?/,"&")+"&output="+(t[12]&&t[12].indexOf("layer=c")>0?"svembed":"embed")}},gmap_search:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/maps?q="+t[5].replace("query=","q=").replace("api=1","")+"&output=embed"}}};t(document).on("objectNeedsType.fb",function(o,i,a){var s,r,c,l,d,u,f,p=a.src||"",h=!1;s=t.extend(!0,{},n,a.opts.media),t.each(s,function(n,o){if(c=p.match(o.matcher)){if(h=o.type,f=n,u={},o.paramPlace&&c[o.paramPlace]){d=c[o.paramPlace],"?"==d[0]&&(d=d.substring(1)),d=d.split("&");for(var i=0;i<d.length;++i){var s=d[i].split("=",2);2==s.length&&(u[s[0]]=decodeURIComponent(s[1].replace(/\+/g," ")))}}return l=t.extend(!0,{},o.params,a.opts[n],u),p="function"===t.type(o.url)?o.url.call(this,c,l,a):e(o.url,c,l),r="function"===t.type(o.thumb)?o.thumb.call(this,c,l,a):e(o.thumb,c),"youtube"===n?p=p.replace(/&t=((\d+)m)?(\d+)s/,function(t,e,n,o){return"&start="+((n?60*parseInt(n,10):0)+parseInt(o,10))}):"vimeo"===n&&(p=p.replace("&%23","#")),!1}}),h?(a.opts.thumb||a.opts.$thumb&&a.opts.$thumb.length||(a.opts.thumb=r),"iframe"===h&&(a.opts=t.extend(!0,a.opts,{iframe:{preload:!1,attr:{scrolling:"no"}}})),t.extend(a,{type:h,src:p,origSrc:a.src,contentSource:f,contentType:"image"===h?"image":"gmap_place"==f||"gmap_search"==f?"map":"video"})):p&&(a.type=a.opts.defaultType)})}(jQuery),function(t,e,n){"use strict";var o=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),i=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),a=function(e){var n=[];e=e.originalEvent||e||t.e,e=e.touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e];for(var o in e)e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?"x"===n?t.x-e.x:"y"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio')||n.isFunction(t.get(0).onclick)||t.data("selectable"))return!0;for(var e=0,o=t[0].attributes,i=o.length;e<i;e++)if("data-fancybox-"===o[e].nodeName.substr(0,14))return!0;return!1},c=function(e){var n=t.getComputedStyle(e)["overflow-y"],o=t.getComputedStyle(e)["overflow-x"],i=("scroll"===n||"auto"===n)&&e.scrollHeight>e.clientHeight,a=("scroll"===o||"auto"===o)&&e.scrollWidth>e.clientWidth;return i||a},l=function(t){for(var e=!1;;){if(e=c(t.get(0)))break;if(t=t.parent(),!t.length||t.hasClass("fancybox-stage")||t.is("body"))break}return e},d=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on("touchstart.fb.touch mousedown.fb.touch",n.proxy(e,"ontouchstart"))};d.prototype.destroy=function(){this.$container.off(".fb.touch")},d.prototype.ontouchstart=function(o){var i=this,c=n(o.target),d=i.instance,u=d.current,f=u.$slide,p=u.$content,h="touchstart"==o.type;if(h&&i.$container.off("mousedown.fb.touch"),(!o.originalEvent||2!=o.originalEvent.button)&&f.length&&c.length&&!r(c)&&!r(c.parent())&&(c.is("img")||!(o.originalEvent.clientX>c[0].clientWidth+c.offset().left))){if(!u||d.isAnimating||d.isClosing)return o.stopPropagation(),void o.preventDefault();if(i.realPoints=i.startPoints=a(o),i.startPoints.length){if(u.touch&&o.stopPropagation(),i.startEvent=o,i.canTap=!0,i.$target=c,i.$content=p,i.opts=u.opts.touch,i.isPanning=!1,i.isSwiping=!1,i.isZooming=!1,i.isScrolling=!1,i.canPan=d.canPan(),i.startTime=(new Date).getTime(),i.distanceX=i.distanceY=i.distance=0,i.canvasWidth=Math.round(f[0].clientWidth),i.canvasHeight=Math.round(f[0].clientHeight),i.contentLastPos=null,i.contentStartPos=n.fancybox.getTranslate(i.$content)||{top:0,left:0},i.sliderStartPos=i.sliderLastPos||n.fancybox.getTranslate(f),i.stagePos=n.fancybox.getTranslate(d.$refs.stage),i.sliderStartPos.top-=i.stagePos.top,i.sliderStartPos.left-=i.stagePos.left,i.contentStartPos.top-=i.stagePos.top,i.contentStartPos.left-=i.stagePos.left,n(e).off(".fb.touch").on(h?"touchend.fb.touch touchcancel.fb.touch":"mouseup.fb.touch mouseleave.fb.touch",n.proxy(i,"ontouchend")).on(h?"touchmove.fb.touch":"mousemove.fb.touch",n.proxy(i,"ontouchmove")),n.fancybox.isMobile&&e.addEventListener("scroll",i.onscroll,!0),!i.opts&&!i.canPan||!c.is(i.$stage)&&!i.$stage.find(c).length)return void(c.is(".fancybox-image")&&o.preventDefault());i.isScrollable=l(c)||l(c.parent()),n.fancybox.isMobile&&i.isScrollable||o.preventDefault(),(1===i.startPoints.length||u.hasError)&&(i.canPan?(n.fancybox.stop(i.$content),i.$content.css("transition-duration",""),i.isPanning=!0):i.isSwiping=!0,i.$container.addClass("fancybox-is-grabbing")),2===i.startPoints.length&&"image"===u.type&&(u.isLoaded||u.$ghost)&&(i.canTap=!1,i.isSwiping=!1,i.isPanning=!1,i.isZooming=!0,n.fancybox.stop(i.$content),i.$content.css("transition-duration",""),i.centerPointStartX=.5*(i.startPoints[0].x+i.startPoints[1].x)-n(t).scrollLeft(),i.centerPointStartY=.5*(i.startPoints[0].y+i.startPoints[1].y)-n(t).scrollTop(),i.percentageOfImageAtPinchPointX=(i.centerPointStartX-i.contentStartPos.left)/i.contentStartPos.width,i.percentageOfImageAtPinchPointY=(i.centerPointStartY-i.contentStartPos.top)/i.contentStartPos.height,i.startDistanceBetweenFingers=s(i.startPoints[0],i.startPoints[1]))}}},d.prototype.onscroll=function(t){var n=this;n.isScrolling=!0,e.removeEventListener("scroll",n.onscroll,!0)},d.prototype.ontouchmove=function(t){var e=this;return void 0!==t.originalEvent.buttons&&0===t.originalEvent.buttons?void e.ontouchend(t):e.isScrolling?void(e.canTap=!1):(e.newPoints=a(t),void((e.opts||e.canPan)&&e.newPoints.length&&e.newPoints.length&&(e.isSwiping&&e.isSwiping===!0||t.preventDefault(),e.distanceX=s(e.newPoints[0],e.startPoints[0],"x"),e.distanceY=s(e.newPoints[0],e.startPoints[0],"y"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0&&(e.isSwiping?e.onSwipe(t):e.isPanning?e.onPan():e.isZooming&&e.onZoom()))))},d.prototype.onSwipe=function(e){var a,s=this,r=s.isSwiping,c=s.sliderStartPos.left||0;if(r!==!0)"x"==r&&(s.distanceX>0&&(s.instance.group.length<2||0===s.instance.current.index&&!s.instance.current.opts.loop)?c+=Math.pow(s.distanceX,.8):s.distanceX<0&&(s.instance.group.length<2||s.instance.current.index===s.instance.group.length-1&&!s.instance.current.opts.loop)?c-=Math.pow(-s.distanceX,.8):c+=s.distanceX),s.sliderLastPos={top:"x"==r?0:s.sliderStartPos.top+s.distanceY,left:c},s.requestId&&(i(s.requestId),s.requestId=null),s.requestId=o(function(){s.sliderLastPos&&(n.each(s.instance.slides,function(t,e){var o=e.pos-s.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:s.sliderLastPos.top,left:s.sliderLastPos.left+o*s.canvasWidth+o*e.opts.gutter})}),s.$container.addClass("fancybox-is-sliding"))});else if(Math.abs(s.distance)>10){if(s.canTap=!1,s.instance.group.length<2&&s.opts.vertical?s.isSwiping="y":s.instance.isDragging||s.opts.vertical===!1||"auto"===s.opts.vertical&&n(t).width()>800?s.isSwiping="x":(a=Math.abs(180*Math.atan2(s.distanceY,s.distanceX)/Math.PI),s.isSwiping=a>45&&a<135?"y":"x"),s.canTap=!1,"y"===s.isSwiping&&n.fancybox.isMobile&&s.isScrollable)return void(s.isScrolling=!0);s.instance.isDragging=s.isSwiping,s.startPoints=s.newPoints,n.each(s.instance.slides,function(t,e){n.fancybox.stop(e.$slide),e.$slide.css("transition-duration",""),e.inTransition=!1,e.pos===s.instance.current.pos&&(s.sliderStartPos.left=n.fancybox.getTranslate(e.$slide).left-n.fancybox.getTranslate(s.instance.$refs.stage).left)}),s.instance.SlideShow&&s.instance.SlideShow.isActive&&s.instance.SlideShow.stop()}},d.prototype.onPan=function(){var t=this;return s(t.newPoints[0],t.realPoints[0])<(n.fancybox.isMobile?10:5)?void(t.startPoints=t.newPoints):(t.canTap=!1,t.contentLastPos=t.limitMovement(),t.requestId&&(i(t.requestId),t.requestId=null),void(t.requestId=o(function(){n.fancybox.setTranslate(t.$content,t.contentLastPos)})))},d.prototype.limitMovement=function(){var t,e,n,o,i,a,s=this,r=s.canvasWidth,c=s.canvasHeight,l=s.distanceX,d=s.distanceY,u=s.contentStartPos,f=u.left,p=u.top,h=u.width,g=u.height;return i=h>r?f+l:f,a=p+d,t=Math.max(0,.5*r-.5*h),e=Math.max(0,.5*c-.5*g),n=Math.min(r-h,.5*r-.5*h),o=Math.min(c-g,.5*c-.5*g),l>0&&i>t&&(i=t-1+Math.pow(-t+f+l,.8)||0),l<0&&i<n&&(i=n+1-Math.pow(n-f-l,.8)||0),d>0&&a>e&&(a=e-1+Math.pow(-e+p+d,.8)||0),d<0&&a<o&&(a=o+1-Math.pow(o-p-d,.8)||0),{top:a,left:i}},d.prototype.limitPosition=function(t,e,n,o){var i=this,a=i.canvasWidth,s=i.canvasHeight;return n>a?(t=t>0?0:t,t=t<a-n?a-n:t):t=Math.max(0,a/2-n/2),o>s?(e=e>0?0:e,e=e<s-o?s-o:e):e=Math.max(0,s/2-o/2),{top:e,left:t}},d.prototype.onZoom=function(){var e=this,a=e.contentStartPos,r=a.width,c=a.height,l=a.left,d=a.top,u=s(e.newPoints[0],e.newPoints[1]),f=u/e.startDistanceBetweenFingers,p=Math.floor(r*f),h=Math.floor(c*f),g=(r-p)*e.percentageOfImageAtPinchPointX,b=(c-h)*e.percentageOfImageAtPinchPointY,m=(e.newPoints[0].x+e.newPoints[1].x)/2-n(t).scrollLeft(),v=(e.newPoints[0].y+e.newPoints[1].y)/2-n(t).scrollTop(),y=m-e.centerPointStartX,x=v-e.centerPointStartY,w=l+(g+y),$=d+(b+x),S={top:$,left:w,scaleX:f,scaleY:f};e.canTap=!1,e.newWidth=p,e.newHeight=h,e.contentLastPos=S,e.requestId&&(i(e.requestId),e.requestId=null),e.requestId=o(function(){n.fancybox.setTranslate(e.$content,e.contentLastPos)})},d.prototype.ontouchend=function(t){var o=this,s=Math.max((new Date).getTime()-o.startTime,1),r=o.isSwiping,c=o.isPanning,l=o.isZooming,d=o.isScrolling;return o.endPoints=a(t),o.$container.removeClass("fancybox-is-grabbing"),n(e).off(".fb.touch"),e.removeEventListener("scroll",o.onscroll,!0),o.requestId&&(i(o.requestId),o.requestId=null),o.isSwiping=!1,o.isPanning=!1,o.isZooming=!1,o.isScrolling=!1,o.instance.isDragging=!1,o.canTap?o.onTap(t):(o.speed=366,o.velocityX=o.distanceX/s*.5,o.velocityY=o.distanceY/s*.5,o.speedX=Math.max(.5*o.speed,Math.min(1.5*o.speed,1/Math.abs(o.velocityX)*o.speed)),void(c?o.endPanning():l?o.endZooming():o.endSwiping(r,d)))},d.prototype.endSwiping=function(t,e){var o=this,i=!1,a=o.instance.group.length;o.sliderLastPos=null,"y"==t&&!e&&Math.abs(o.distanceY)>50?(n.fancybox.animate(o.instance.current.$slide,{top:o.sliderStartPos.top+o.distanceY+150*o.velocityY,opacity:0},200),i=o.instance.close(!0,200)):"x"==t&&o.distanceX>50&&a>1?i=o.instance.previous(o.speedX):"x"==t&&o.distanceX<-50&&a>1&&(i=o.instance.next(o.speedX)),i!==!1||"x"!=t&&"y"!=t||(e||a<2?o.instance.centerSlide(o.instance.current,150):o.instance.jumpTo(o.instance.current.index)),o.$container.removeClass("fancybox-is-sliding")},d.prototype.endPanning=function(){var t,e,o,i=this;i.contentLastPos&&(i.opts.momentum===!1?(t=i.contentLastPos.left,e=i.contentLastPos.top):(t=i.contentLastPos.left+i.velocityX*i.speed,e=i.contentLastPos.top+i.velocityY*i.speed),o=i.limitPosition(t,e,i.contentStartPos.width,i.contentStartPos.height),o.width=i.contentStartPos.width,o.height=i.contentStartPos.height,n.fancybox.animate(i.$content,o,330))},d.prototype.endZooming=function(){var t,e,o,i,a=this,s=a.instance.current,r=a.newWidth,c=a.newHeight;a.contentLastPos&&(t=a.contentLastPos.left,e=a.contentLastPos.top,i={top:e,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(a.$content,i),r<a.canvasWidth&&c<a.canvasHeight?a.instance.scaleToFit(150):r>s.width||c>s.height?a.instance.scaleToActual(a.centerPointStartX,a.centerPointStartY,150):(o=a.limitPosition(t,e,r,c),n.fancybox.setTranslate(a.$content,n.fancybox.getTranslate(a.$content)),n.fancybox.animate(a.$content,o,150)))},d.prototype.onTap=function(e){var o,i=this,s=n(e.target),r=i.instance,c=r.current,l=e&&a(e)||i.startPoints,d=l[0]?l[0].x-n(t).scrollLeft()-i.stagePos.left:0,u=l[0]?l[0].y-n(t).scrollTop()-i.stagePos.top:0,f=function(t){var o=c.opts[t];if(n.isFunction(o)&&(o=o.apply(r,[c,e])),o)switch(o){case"close":r.close(i.startEvent);break;case"toggleControls":r.toggleControls(!0);break;case"next":r.next();break;case"nextOrClose":r.group.length>1?r.next():r.close(i.startEvent);break;case"zoom":"image"==c.type&&(c.isLoaded||c.$ghost)&&(r.canPan()?r.scaleToFit():r.isScaledDown()?r.scaleToActual(d,u):r.group.length<2&&r.close(i.startEvent))}};if((!e.originalEvent||2!=e.originalEvent.button)&&(s.is("img")||!(d>s[0].clientWidth+s.offset().left))){if(s.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container"))o="Outside";else if(s.is(".fancybox-slide"))o="Slide";else{if(!r.current.$content||!r.current.$content.find(s).addBack().filter(s).length)return;o="Content"}if(i.tapped){if(clearTimeout(i.tapped),i.tapped=null,Math.abs(d-i.tapX)>50||Math.abs(u-i.tapY)>50)return this;f("dblclick"+o)}else i.tapX=d,i.tapY=u,c.opts["dblclick"+o]&&c.opts["dblclick"+o]!==c.opts["click"+o]?i.tapped=setTimeout(function(){i.tapped=null,f("click"+o)},500):f("click"+o);return this}},n(e).on("onActivate.fb",function(t,e){e&&!e.Guestures&&(e.Guestures=new d(e))})}(window,document,jQuery),function(t,e){"use strict";e.extend(!0,e.fancybox.defaults,{btnTpl:{slideShow:'<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 5.4v13.2l11-6.6z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z"/></svg></button>'},slideShow:{autoStart:!1,speed:3e3}});var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,init:function(){var t=this;t.$button=t.instance.$refs.toolbar.find("[data-fancybox-play]").on("click",function(){t.toggle()}),(t.instance.group.length<2||!t.instance.group[t.instance.currIndex].opts.slideShow)&&t.$button.hide()},set:function(t){var e=this,n=e.instance,o=n.current,i=function(){e.isActive&&n.jumpTo((n.currIndex+1)%n.group.length)};o&&(t===!0||o.opts.loop||n.currIndex<n.group.length-1)?e.timer=setTimeout(function(){var t;e.isActive&&(t=o.$slide.find("video,audio").filter(":visible:first"),t.length?t.one("ended",i):i())},o.opts.slideShow.speed):(e.stop(),n.idleSecondsCounter=0,n.showControls())},clear:function(){var t=this;clearTimeout(t.timer),t.timer=null},start:function(){var t=this,e=t.instance.current;e&&(t.$button.attr("title",e.opts.i18n[e.opts.lang].PLAY_STOP).removeClass("fancybox-button--play").addClass("fancybox-button--pause"),t.isActive=!0,e.isComplete&&t.set(!0),t.instance.trigger("onSlideShowChange",!0))},stop:function(){var t=this,e=t.instance.current;t.clear(),t.$button.attr("title",e.opts.i18n[e.opts.lang].PLAY_START).removeClass("fancybox-button--pause").addClass("fancybox-button--play"),t.isActive=!1,t.instance.trigger("onSlideShowChange",!1)},toggle:function(){var t=this;t.isActive?t.stop():t.start()}}),e(t).on({"onInit.fb":function(t,e){e&&!e.SlideShow&&(e.SlideShow=new n(e))},"beforeShow.fb":function(t,e,n,o){var i=e&&e.SlideShow;o?i&&n.opts.slideShow.autoStart&&i.start():i&&i.isActive&&i.clear()},"afterShow.fb":function(t,e,n){var o=e&&e.SlideShow;o&&o.isActive&&o.set()},"afterKeydown.fb":function(n,o,i,a,s){var r=o&&o.SlideShow;!r||!i.opts.slideShow||80!==s&&32!==s||e(t.activeElement).is("button,a,input")||(a.preventDefault(),r.toggle())},"beforeClose.fb onDeactivate.fb":function(t,e){var n=e&&e.SlideShow;n&&n.stop()}}),e(t).on("visibilitychange",function(){var n=e.fancybox.getInstance(),o=n&&n.SlideShow;o&&o.isActive&&(t.hidden?o.clear():o.set())})}(document,jQuery),function(t,e){"use strict";var n=function(){for(var e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n={},o=0;o<e.length;o++){var i=e[o];if(i&&i[1]in t){for(var a=0;a<i.length;a++)n[e[0][a]]=i[a];return n}}return!1}();if(n){var o={request:function(e){e=e||t.documentElement,e[n.requestFullscreen](e.ALLOW_KEYBOARD_INPUT)},exit:function(){t[n.exitFullscreen]()},toggle:function(e){e=e||t.documentElement,this.isFullscreen()?this.exit():this.request(e)},isFullscreen:function(){return Boolean(t[n.fullscreenElement])},enabled:function(){return Boolean(t[n.fullscreenEnabled])}};e.extend(!0,e.fancybox.defaults,{btnTpl:{fullScreen:'<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fsenter" title="{{FULL_SCREEN}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"/></svg></button>'},fullScreen:{autoStart:!1}}),e(t).on(n.fullscreenchange,function(){var t=o.isFullscreen(),n=e.fancybox.getInstance();n&&(n.current&&"image"===n.current.type&&n.isAnimating&&(n.current.$content.css("transition","none"),n.isAnimating=!1,n.update(!0,!0,0)),n.trigger("onFullscreenChange",t),n.$refs.container.toggleClass("fancybox-is-fullscreen",t),n.$refs.toolbar.find("[data-fancybox-fullscreen]").toggleClass("fancybox-button--fsenter",!t).toggleClass("fancybox-button--fsexit",t))})}e(t).on({"onInit.fb":function(t,e){var i;return n?void(e&&e.group[e.currIndex].opts.fullScreen?(i=e.$refs.container,i.on("click.fb-fullscreen","[data-fancybox-fullscreen]",function(t){t.stopPropagation(),t.preventDefault(),o.toggle()}),e.opts.fullScreen&&e.opts.fullScreen.autoStart===!0&&o.request(),e.FullScreen=o):e&&e.$refs.toolbar.find("[data-fancybox-fullscreen]").hide()):void e.$refs.toolbar.find("[data-fancybox-fullscreen]").remove()},"afterKeydown.fb":function(t,e,n,o,i){e&&e.FullScreen&&70===i&&(o.preventDefault(),e.FullScreen.toggle())},"beforeClose.fb":function(t,e){e&&e.FullScreen&&e.$refs.container.hasClass("fancybox-is-fullscreen")&&o.exit()}})}(document,jQuery),function(t,e){"use strict";var n="fancybox-thumbs",o=n+"-active";e.fancybox.defaults=e.extend(!0,{btnTpl:{thumbs:'<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z"/></svg></button>'},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"}},e.fancybox.defaults);var i=function(t){this.init(t)};e.extend(i.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,isActive:!1,init:function(t){var e,n,o=this;o.instance=t,t.Thumbs=o,o.opts=t.group[t.currIndex].opts.thumbs,e=t.group[0],e=e.opts.thumb||!(!e.opts.$thumb||!e.opts.$thumb.length)&&e.opts.$thumb.attr("src"),t.group.length>1&&(n=t.group[1],n=n.opts.thumb||!(!n.opts.$thumb||!n.opts.$thumb.length)&&n.opts.$thumb.attr("src")),o.$button=t.$refs.toolbar.find("[data-fancybox-thumbs]"),o.opts&&e&&n?(o.$button.show().on("click",function(){o.toggle()}),o.isActive=!0):o.$button.hide()},create:function(){var t,o=this,i=o.instance,a=o.opts.parentEl,s=[];o.$grid||(o.$grid=e('<div class="'+n+" "+n+"-"+o.opts.axis+'"></div>').appendTo(i.$refs.container.find(a).addBack().filter(a)),o.$grid.on("click","a",function(){i.jumpTo(e(this).attr("data-index"))})),o.$list||(o.$list=e('<div class="'+n+'__list">').appendTo(o.$grid)),e.each(i.group,function(e,n){t=n.opts.thumb||(n.opts.$thumb?n.opts.$thumb.attr("src"):null),t||"image"!==n.type||(t=n.src),s.push('<a href="javascript:;" tabindex="0" data-index="'+e+'" '+(t&&t.length?' style="background-image:url('+t+')" />':"")+"></a>")}),o.$list[0].innerHTML=s.join(""),"x"===o.opts.axis&&o.$list.width(parseInt(o.$grid.css("padding-right"),10)+i.group.length*o.$list.children().eq(0).outerWidth(!0))},focus:function(t){var e,n,i=this,a=i.$list,s=i.$grid;i.instance.current&&(e=a.children().removeClass(o).filter('[data-index="'+i.instance.current.index+'"]').addClass(o),n=e.position(),"y"===i.opts.axis&&(n.top<0||n.top>a.height()-e.outerHeight())?a.stop().animate({scrollTop:a.scrollTop()+n.top},t):"x"===i.opts.axis&&(n.left<s.scrollLeft()||n.left>s.scrollLeft()+(s.width()-e.outerWidth()))&&a.parent().stop().animate({scrollLeft:n.left},t))},update:function(){var t=this;t.instance.$refs.container.toggleClass("fancybox-show-thumbs",this.isVisible),t.isVisible?(t.$grid||t.create(),t.instance.trigger("onThumbsShow"),t.focus(0)):t.$grid&&t.instance.trigger("onThumbsHide"),t.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({"onInit.fb":function(t,e){var n;e&&!e.Thumbs&&(n=new i(e),n.isActive&&n.opts.autoStart===!0&&n.show())},"beforeShow.fb":function(t,e,n,o){var i=e&&e.Thumbs;i&&i.isVisible&&i.focus(o?0:250)},"afterKeydown.fb":function(t,e,n,o,i){var a=e&&e.Thumbs;a&&a.isActive&&71===i&&(o.preventDefault(),a.toggle())},"beforeClose.fb":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&n.opts.hideOnClose!==!1&&n.$grid.hide()}})}(document,jQuery),function(t,e){"use strict";function n(t){var e={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(t).replace(/[&<>"'`=\/]/g,function(t){return e[t]})}e.extend(!0,e.fancybox.defaults,{btnTpl:{share:'<button data-fancybox-share class="fancybox-button fancybox-button--share" title="{{SHARE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M2.55 19c1.4-8.4 9.1-9.8 11.9-9.8V5l7 7-7 6.3v-3.5c-2.8 0-10.5 2.1-11.9 4.2z"/></svg></button>'},share:{url:function(t,e){return!t.currentHash&&"inline"!==e.type&&"html"!==e.type&&(e.origSrc||e.src)||window.location},tpl:'<div class="fancybox-share"><h1>{{SHARE}}</h1><p><a class="fancybox-share__button fancybox-share__button--fb" href="https://www.facebook.com/sharer/sharer.php?u={{url}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m287 456v-299c0-21 6-35 35-35h38v-63c-7-1-29-3-55-3-54 0-91 33-91 94v306m143-254h-205v72h196" /></svg><span>Facebook</span></a><a class="fancybox-share__button fancybox-share__button--tw" href="https://twitter.com/intent/tweet?url={{url}}&text={{descr}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m456 133c-14 7-31 11-47 13 17-10 30-27 37-46-15 10-34 16-52 20-61-62-157-7-141 75-68-3-129-35-169-85-22 37-11 86 26 109-13 0-26-4-37-9 0 39 28 72 65 80-12 3-25 4-37 2 10 33 41 57 77 57-42 30-77 38-122 34 170 111 378-32 359-208 16-11 30-25 41-42z" /></svg><span>Twitter</span></a><a class="fancybox-share__button fancybox-share__button--pt" href="https://www.pinterest.com/pin/create/button/?url={{url}}&description={{descr}}&media={{media}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m265 56c-109 0-164 78-164 144 0 39 15 74 47 87 5 2 10 0 12-5l4-19c2-6 1-8-3-13-9-11-15-25-15-45 0-58 43-110 113-110 62 0 96 38 96 88 0 67-30 122-73 122-24 0-42-19-36-44 6-29 20-60 20-81 0-19-10-35-31-35-25 0-44 26-44 60 0 21 7 36 7 36l-30 125c-8 37-1 83 0 87 0 3 4 4 5 2 2-3 32-39 42-75l16-64c8 16 31 29 56 29 74 0 124-67 124-157 0-69-58-132-146-132z" fill="#fff"/></svg><span>Pinterest</span></a></p><p><input class="fancybox-share__input" type="text" value="{{url_raw}}" onclick="select()" /></p></div>'}}),e(t).on("click","[data-fancybox-share]",function(){var t,o,i=e.fancybox.getInstance(),a=i.current||null;a&&("function"===e.type(a.opts.share.url)&&(t=a.opts.share.url.apply(a,[i,a])),o=a.opts.share.tpl.replace(/\{\{media\}\}/g,"image"===a.type?encodeURIComponent(a.src):"").replace(/\{\{url\}\}/g,encodeURIComponent(t)).replace(/\{\{url_raw\}\}/g,n(t)).replace(/\{\{descr\}\}/g,i.$caption?encodeURIComponent(i.$caption.text()):""),e.fancybox.open({src:i.translate(i,o),type:"html",opts:{touch:!1,animationEffect:!1,afterLoad:function(t,e){i.$refs.container.one("beforeClose.fb",function(){t.close(null,0)}),e.$content.find(".fancybox-share__button").click(function(){return window.open(this.href,"Share","width=550, height=450"),!1})},mobile:{autoFocus:!1}}}))})}(document,jQuery),function(t,e,n){"use strict";function o(){var e=t.location.hash.substr(1),n=e.split("-"),o=n.length>1&&/^\+?\d+$/.test(n[n.length-1])?parseInt(n.pop(-1),10)||1:1,i=n.join("-");return{hash:e,index:o<1?1:o,gallery:i}}function i(t){""!==t.gallery&&n("[data-fancybox='"+n.escapeSelector(t.gallery)+"']").eq(t.index-1).focus().trigger("click.fb-start")}function a(t){var e,n;return!!t&&(e=t.current?t.current.opts:t.opts,n=e.hash||(e.$orig?e.$orig.data("fancybox")||e.$orig.data("fancybox-trigger"):""),""!==n&&n)}n.escapeSelector||(n.escapeSelector=function(t){var e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,n=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t};return(t+"").replace(e,n)}),n(function(){n.fancybox.defaults.hash!==!1&&(n(e).on({"onInit.fb":function(t,e){var n,i;e.group[e.currIndex].opts.hash!==!1&&(n=o(),i=a(e),i&&n.gallery&&i==n.gallery&&(e.currIndex=n.index-1))},"beforeShow.fb":function(n,o,i,s){var r;i&&i.opts.hash!==!1&&(r=a(o),r&&(o.currentHash=r+(o.group.length>1?"-"+(i.index+1):""),t.location.hash!=="#"+o.currentHash&&(s&&!o.origHash&&(o.origHash=t.location.hash),o.hashTimer&&clearTimeout(o.hashTimer),o.hashTimer=setTimeout(function(){"replaceState"in t.history?(t.history[s?"pushState":"replaceState"]({},e.title,t.location.pathname+t.location.search+"#"+o.currentHash),s&&(o.hasCreatedHistory=!0)):t.location.hash=o.currentHash,o.hashTimer=null},300))))},"beforeClose.fb":function(n,o,i){i.opts.hash!==!1&&(clearTimeout(o.hashTimer),o.currentHash&&o.hasCreatedHistory?t.history.back():o.currentHash&&("replaceState"in t.history?t.history.replaceState({},e.title,t.location.pathname+t.location.search+(o.origHash||"")):t.location.hash=o.origHash),o.currentHash=null)}}),n(t).on("hashchange.fb",function(){var t=o(),e=null;n.each(n(".fancybox-container").get().reverse(),function(t,o){var i=n(o).data("FancyBox");if(i&&i.currentHash)return e=i,!1}),e?e.currentHash===t.gallery+"-"+t.index||1===t.index&&e.currentHash==t.gallery||(e.currentHash=null,e.close()):""!==t.gallery&&i(t)}),setTimeout(function(){n.fancybox.getInstance()||i(o())},50))})}(window,document,jQuery),function(t,e){"use strict";var n=(new Date).getTime();e(t).on({"onInit.fb":function(t,e,o){e.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll",function(t){
|
13 |
-
var o=e.current,i=(new Date).getTime();e.group.length<2
|
14 |
|
15 |
var fv_player_fancybox_paused_players = {};
|
16 |
|
@@ -40,12 +40,16 @@ function fv_player_colorbox_title() {
|
|
40 |
return '';
|
41 |
}
|
42 |
|
|
|
43 |
jQuery.fancybox.defaults.smallBtn = false;
|
44 |
jQuery.fancybox.defaults.toolbar = true;
|
45 |
jQuery.fancybox.defaults.thumbs.hideOnClose = false;
|
46 |
jQuery.fancybox.defaults.caption = fv_player_colorbox_title;
|
47 |
jQuery.fancybox.defaults.afterLoad = fv_fancybox_check_size;
|
48 |
-
jQuery.fancybox.defaults.
|
|
|
|
|
|
|
49 |
jQuery(jQuery.fancybox.getInstance().group).each( function(k,v) {
|
50 |
if( v.src.match(/^#wpfp_/) ) {
|
51 |
jQuery('.fancybox-thumbs li[data-index='+k+']').append('<span class="fv-player-fancybox-play-icon">▶</span>');
|
@@ -55,8 +59,16 @@ jQuery.fancybox.defaults.onThumbsShow = function() {
|
|
55 |
}
|
56 |
})
|
57 |
}
|
58 |
-
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
jQuery(document).ready(function() {
|
62 |
jQuery(".colorbox[href^='#']:not([data-cbox-inline]), .lightbox[href^='#']").filter(function () {
|
@@ -158,10 +170,10 @@ function fv_lightbox_flowplayer_shutdown(e) {
|
|
158 |
return;
|
159 |
}
|
160 |
|
161 |
-
if( e.type == 'afterShow' &&
|
162 |
|
163 |
-
// if this player was previously paused on fancybox show, unpause it
|
164 |
-
if ( typeof( fv_player_fancybox_paused_players[ player_id ] ) != 'undefined' ) {
|
165 |
was_paused = true;
|
166 |
delete fv_player_fancybox_paused_players[ $e.attr('id') ];
|
167 |
api.resume();
|
@@ -173,7 +185,7 @@ function fv_lightbox_flowplayer_shutdown(e) {
|
|
173 |
}
|
174 |
|
175 |
if( api.loading ) {
|
176 |
-
api.one('ready',function(){
|
177 |
if ( api.engine.engineName === 'fvyoutube' && api.playing && !was_paused ) {
|
178 |
fv_player_fancybox_paused_players[ $e.attr('id') ] = 1;
|
179 |
api.pause();
|
@@ -185,7 +197,7 @@ function fv_lightbox_flowplayer_shutdown(e) {
|
|
185 |
|
186 |
jQuery(document).on('afterShow.fb afterClose.fb', fv_lightbox_flowplayer_shutdown);
|
187 |
|
188 |
-
jQuery(window).resize
|
189 |
|
190 |
if( document.addEventListener ) {
|
191 |
var fv_orientation_change_timer = -1;
|
@@ -207,8 +219,30 @@ if( document.addEventListener ) {
|
|
207 |
jQuery( function() {
|
208 |
if( typeof(flowplayer) != "undefined" ) {
|
209 |
flowplayer( function(api,root) {
|
210 |
-
|
211 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
lightbox_wrap.on('click', function(e) {
|
213 |
if( e.target == e.currentTarget) {
|
214 |
jQuery.fancybox.close();
|
@@ -231,6 +265,14 @@ jQuery( function() {
|
|
231 |
if( fancybox_thumbs ) jQuery('.fancybox-container').addClass('fancybox-show-thumbs');
|
232 |
});
|
233 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
234 |
}
|
235 |
});
|
236 |
}
|
@@ -288,7 +330,7 @@ jQuery(document).on('click', '.flowplayer.lightbox-starter, .fv-player-lightbox-
|
|
288 |
} else {
|
289 |
api.play(index);
|
290 |
}
|
291 |
-
fv_fancybox_check_size()
|
292 |
|
293 |
if( playlist.length && !jQuery(this).data('fancybox') ) {
|
294 |
playlist.find('a[data-fancybox]').eq(0).click();
|
1 |
// ==================================================
|
2 |
+
// fancyBox v3.5.7
|
3 |
//
|
4 |
// Licensed GPLv3 for open source use
|
5 |
// or fancyBox Commercial License for commercial use
|
6 |
//
|
7 |
// http://fancyapps.com/fancybox/
|
8 |
+
// Copyright 2021 fancyApps
|
9 |
//
|
10 |
// ==================================================
|
11 |
+
!function(t,e,n,o){"use strict";function i(t,e){var o,i,a,s=[],r=0;t&&t.isDefaultPrevented()||(t.preventDefault(),e=e||{},t&&t.data&&(e=h(t.data.options,e)),o=e.$target||n(t.currentTarget).trigger("blur"),(a=n.fancybox.getInstance())&&a.$trigger&&a.$trigger.is(o)||(e.selector?s=n(e.selector):(i=o.attr("data-fancybox")||"",i?(s=t.data?t.data.items:[],s=s.length?s.filter('[data-fancybox="'+i+'"]'):n('[data-fancybox="'+i+'"]')):s=[o]),r=n(s).index(o),r<0&&(r=0),a=n.fancybox.open(s,e,r),a.$trigger=o))}if(t.console=t.console||{info:function(t){}},n){if(n.fn.fancybox)return void console.info("fancyBox already initialized");var a={closeExisting:!1,loop:!1,gutter:50,keyboard:!0,preventCaptionOverlap:!0,arrows:!0,infobar:!0,smallBtn:"auto",toolbar:"auto",buttons:["zoom","slideShow","thumbs","close"],idleTime:3,protect:!1,modal:!1,image:{preload:!1},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" allowfullscreen="allowfullscreen" allow="autoplay; fullscreen" src=""></iframe>',preload:!0,css:{},attr:{scrolling:"auto"}},video:{tpl:'<video class="fancybox-video" controls controlsList="nodownload" poster="{{poster}}"><source src="{{src}}" type="{{format}}" />Sorry, your browser doesn\'t support embedded videos, <a href="{{src}}">download</a> and watch with your favorite video player!</video>',format:"",autoStart:!0},defaultType:"image",animationEffect:"zoom",animationDuration:366,zoomOpacity:"auto",transitionEffect:"fade",transitionDuration:366,slideClass:"",baseClass:"",baseTpl:'<div class="fancybox-container" role="dialog" tabindex="-1"><div class="fancybox-bg"></div><div class="fancybox-inner"><div class="fancybox-infobar"><span data-fancybox-index></span> / <span data-fancybox-count></span></div><div class="fancybox-toolbar">{{buttons}}</div><div class="fancybox-navigation">{{arrows}}</div><div class="fancybox-stage"></div><div class="fancybox-caption"><div class="fancybox-caption__body"></div></div></div></div>',spinnerTpl:'<div class="fancybox-loading"></div>',errorTpl:'<div class="fancybox-error"><p>{{ERROR}}</p></div>',btnTpl:{download:'<a download data-fancybox-download class="fancybox-button fancybox-button--download" title="{{DOWNLOAD}}" href="javascript:;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.62 17.09V19H5.38v-1.91zm-2.97-6.96L17 11.45l-5 4.87-5-4.87 1.36-1.32 2.68 2.64V5h1.92v7.77z"/></svg></a>',zoom:'<button data-fancybox-zoom class="fancybox-button fancybox-button--zoom" title="{{ZOOM}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.7 17.3l-3-3a5.9 5.9 0 0 0-.6-7.6 5.9 5.9 0 0 0-8.4 0 5.9 5.9 0 0 0 0 8.4 5.9 5.9 0 0 0 7.7.7l3 3a1 1 0 0 0 1.3 0c.4-.5.4-1 0-1.5zM8.1 13.8a4 4 0 0 1 0-5.7 4 4 0 0 1 5.7 0 4 4 0 0 1 0 5.7 4 4 0 0 1-5.7 0z"/></svg></button>',close:'<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z"/></svg></button>',arrowLeft:'<button data-fancybox-prev class="fancybox-button fancybox-button--arrow_left" title="{{PREV}}"><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z"/></svg></div></button>',arrowRight:'<button data-fancybox-next class="fancybox-button fancybox-button--arrow_right" title="{{NEXT}}"><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z"/></svg></div></button>',smallBtn:'<button type="button" data-fancybox-close class="fancybox-button fancybox-close-small" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" version="1" viewBox="0 0 24 24"><path d="M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z"/></svg></button>'},parentEl:"body",hideScrollbar:!0,autoFocus:!0,backFocus:!0,trapFocus:!0,fullScreen:{autoStart:!1},touch:{vertical:!0,momentum:!0},hash:null,media:{},slideShow:{autoStart:!1,speed:3e3},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"},wheel:"auto",onInit:n.noop,beforeLoad:n.noop,afterLoad:n.noop,beforeShow:n.noop,afterShow:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop,clickContent:function(t,e){return"image"===t.type&&"zoom"},clickSlide:"close",clickOutside:"close",dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1,mobile:{preventCaptionOverlap:!1,idleTime:!1,clickContent:function(t,e){return"image"===t.type&&"toggleControls"},clickSlide:function(t,e){return"image"===t.type?"toggleControls":"close"},dblclickContent:function(t,e){return"image"===t.type&&"zoom"},dblclickSlide:function(t,e){return"image"===t.type&&"zoom"}},lang:"en",i18n:{en:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",ERROR:"The requested content cannot be loaded. <br/> Please try again later.",PLAY_START:"Start slideshow",PLAY_STOP:"Pause slideshow",FULL_SCREEN:"Full screen",THUMBS:"Thumbnails",DOWNLOAD:"Download",SHARE:"Share",ZOOM:"Zoom"},de:{CLOSE:"Schließen",NEXT:"Weiter",PREV:"Zurück",ERROR:"Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.",PLAY_START:"Diaschau starten",PLAY_STOP:"Diaschau beenden",FULL_SCREEN:"Vollbild",THUMBS:"Vorschaubilder",DOWNLOAD:"Herunterladen",SHARE:"Teilen",ZOOM:"Vergrößern"}}},s=n(t),r=n(e),c=0,l=function(t){return t&&t.hasOwnProperty&&t instanceof n},d=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),u=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),f=function(){var t,n=e.createElement("fakeelement"),o={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(t in o)if(void 0!==n.style[t])return o[t];return"transitionend"}(),p=function(t){return t&&t.length&&t[0].offsetHeight},h=function(t,e){var o=n.extend(!0,{},t,e);return n.each(e,function(t,e){Array.isArray(e)&&(o[t]=e)}),o},g=function(t){var o,i;return!(!t||t.ownerDocument!==e)&&(n(".fancybox-container").css("pointer-events","none"),o={x:t.getBoundingClientRect().left+t.offsetWidth/2,y:t.getBoundingClientRect().top+t.offsetHeight/2},i=e.elementFromPoint(o.x,o.y)===t,n(".fancybox-container").css("pointer-events",""),i)},b=function(t,e,o){var i=this;i.opts=h({index:o},n.fancybox.defaults),n.isPlainObject(e)&&(i.opts=h(i.opts,e)),n.fancybox.isMobile&&(i.opts=h(i.opts,i.opts.mobile)),i.id=i.opts.id||++c,i.currIndex=parseInt(i.opts.index,10)||0,i.prevIndex=null,i.prevPos=null,i.currPos=0,i.firstRun=!0,i.group=[],i.slides={},i.addContent(t),i.group.length&&i.init()};n.extend(b.prototype,{init:function(){var o,i,a=this,s=a.group[a.currIndex],r=s.opts;r.closeExisting&&n.fancybox.close(!0),n("body").addClass("fancybox-active"),!n.fancybox.getInstance()&&!1!==r.hideScrollbar&&!n.fancybox.isMobile&&e.body.scrollHeight>t.innerHeight&&(n("head").append('<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar{margin-right:'+(t.innerWidth-e.documentElement.clientWidth)+"px;}</style>"),n("body").addClass("compensate-for-scrollbar")),i="",n.each(r.buttons,function(t,e){i+=r.btnTpl[e]||""}),o=n(a.translate(a,r.baseTpl.replace("{{buttons}}",i).replace("{{arrows}}",r.btnTpl.arrowLeft+r.btnTpl.arrowRight))).attr("id","fancybox-container-"+a.id).addClass(r.baseClass).data("FancyBox",a).appendTo(r.parentEl),a.$refs={container:o},["bg","inner","infobar","toolbar","stage","caption","navigation"].forEach(function(t){a.$refs[t]=o.find(".fancybox-"+t)}),a.trigger("onInit"),a.activate(),a.jumpTo(a.currIndex)},translate:function(t,e){var n=t.opts.i18n[t.opts.lang]||t.opts.i18n.en;return e.replace(/\{\{(\w+)\}\}/g,function(t,e){return void 0===n[e]?t:n[e]})},addContent:function(t){var e,o=this,i=n.makeArray(t);n.each(i,function(t,e){var i,a,s,r,c,l={},d={};n.isPlainObject(e)?(l=e,d=e.opts||e):"object"==typeof e&&n(e).length?(i=n(e),d=i.data()||{},d=n.extend(!0,{},d,d.options),d.$orig=i,l.src=o.opts.src||d.src||i.attr("href"),l.type||l.src||(l.type="inline",l.src=e)):l={type:"html",src:e+""},l.opts=n.extend(!0,{},o.opts,d),Array.isArray(d.buttons)&&(l.opts.buttons=d.buttons),n.fancybox.isMobile&&l.opts.mobile&&(l.opts=h(l.opts,l.opts.mobile)),a=l.type||l.opts.type,r=l.src||"",!a&&r&&((s=r.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(a="video",l.opts.video.format||(l.opts.video.format="video/"+("ogv"===s[1]?"ogg":s[1]))):r.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?a="image":r.match(/\.(pdf)((\?|#).*)?$/i)?(a="iframe",l=n.extend(!0,l,{contentType:"pdf",opts:{iframe:{preload:!1}}})):"#"===r.charAt(0)&&(a="inline")),a?l.type=a:o.trigger("objectNeedsType",l),l.contentType||(l.contentType=n.inArray(l.type,["html","inline","ajax"])>-1?"html":l.type),l.index=o.group.length,"auto"==l.opts.smallBtn&&(l.opts.smallBtn=n.inArray(l.type,["html","inline","ajax"])>-1),"auto"===l.opts.toolbar&&(l.opts.toolbar=!l.opts.smallBtn),l.$thumb=l.opts.$thumb||null,l.opts.$trigger&&l.index===o.opts.index&&(l.$thumb=l.opts.$trigger.find("img:first"),l.$thumb.length&&(l.opts.$orig=l.opts.$trigger)),l.$thumb&&l.$thumb.length||!l.opts.$orig||(l.$thumb=l.opts.$orig.find("img:first")),l.$thumb&&!l.$thumb.length&&(l.$thumb=null),l.thumb=l.opts.thumb||(l.$thumb?l.$thumb[0].src:null),"function"==typeof l.opts.caption&&(l.opts.caption=l.opts.caption.apply(e,[o,l])),"function"==typeof o.opts.caption&&(l.opts.caption=o.opts.caption.apply(e,[o,l])),l.opts.caption instanceof n||(l.opts.caption=void 0===l.opts.caption?"":l.opts.caption+""),"ajax"===l.type&&(c=r.split(/\s+/,2),c.length>1&&(l.src=c.shift(),l.opts.filter=c.shift())),l.opts.modal&&(l.opts=n.extend(!0,l.opts,{trapFocus:!0,infobar:0,toolbar:0,smallBtn:0,keyboard:0,slideShow:0,fullScreen:0,thumbs:0,touch:0,clickContent:!1,clickSlide:!1,clickOutside:!1,dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1})),o.group.push(l)}),Object.keys(o.slides).length&&(o.updateControls(),(e=o.Thumbs)&&e.isActive&&(e.create(),e.focus()))},addEvents:function(){var e=this;e.removeEvents(),e.$refs.container.on("click.fb-close","[data-fancybox-close]",function(t){t.stopPropagation(),t.preventDefault(),e.close(t)}).on("touchstart.fb-prev click.fb-prev","[data-fancybox-prev]",function(t){t.stopPropagation(),t.preventDefault(),e.previous()}).on("touchstart.fb-next click.fb-next","[data-fancybox-next]",function(t){t.stopPropagation(),t.preventDefault(),e.next()}).on("click.fb","[data-fancybox-zoom]",function(t){e[e.isScaledDown()?"scaleToActual":"scaleToFit"]()}),s.on("orientationchange.fb resize.fb",function(t){t&&t.originalEvent&&"resize"===t.originalEvent.type?(e.requestId&&u(e.requestId),e.requestId=d(function(){e.update(t)})):(e.current&&"iframe"===e.current.type&&e.$refs.stage.hide(),setTimeout(function(){e.$refs.stage.show(),e.update(t)},n.fancybox.isMobile?600:250))}),r.on("keydown.fb",function(t){var o=n.fancybox?n.fancybox.getInstance():null,i=o.current,a=t.keyCode||t.which;if(9==a)return void(i.opts.trapFocus&&e.focus(t));if(!(!i.opts.keyboard||t.ctrlKey||t.altKey||t.shiftKey||n(t.target).is("input,textarea,video,audio,select")))return 8===a||27===a?(t.preventDefault(),void e.close(t)):37===a||38===a?(t.preventDefault(),void e.previous()):39===a||40===a?(t.preventDefault(),void e.next()):void e.trigger("afterKeydown",t,a)}),e.group[e.currIndex].opts.idleTime&&(e.idleSecondsCounter=0,r.on("mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",function(t){e.idleSecondsCounter=0,e.isIdle&&e.showControls(),e.isIdle=!1}),e.idleInterval=t.setInterval(function(){++e.idleSecondsCounter>=e.group[e.currIndex].opts.idleTime&&!e.isDragging&&(e.isIdle=!0,e.idleSecondsCounter=0,e.hideControls())},1e3))},removeEvents:function(){var e=this;s.off("orientationchange.fb resize.fb"),r.off("keydown.fb .fb-idle"),this.$refs.container.off(".fb-close .fb-prev .fb-next"),e.idleInterval&&(t.clearInterval(e.idleInterval),e.idleInterval=null)},previous:function(t){return this.jumpTo(this.currPos-1,t)},next:function(t){return this.jumpTo(this.currPos+1,t)},jumpTo:function(t,e){var o,i,a,s,r,c,l,d,u,f=this,h=f.group.length;if(!(f.isDragging||f.isClosing||f.isAnimating&&f.firstRun)){if(t=parseInt(t,10),!(a=f.current?f.current.opts.loop:f.opts.loop)&&(t<0||t>=h))return!1;if(o=f.firstRun=!Object.keys(f.slides).length,r=f.current,f.prevIndex=f.currIndex,f.prevPos=f.currPos,s=f.createSlide(t),h>1&&((a||s.index<h-1)&&f.createSlide(t+1),(a||s.index>0)&&f.createSlide(t-1)),f.current=s,f.currIndex=s.index,f.currPos=s.pos,f.trigger("beforeShow",o),f.updateControls(),s.forcedDuration=void 0,!isNaN(parseFloat(e))&&isFinite(e)?s.forcedDuration=e:e=s.opts[o?"animationDuration":"transitionDuration"],e=parseInt(e,10),i=f.isMoved(s),s.$slide.addClass("fancybox-slide--current"),o)return s.opts.animationEffect&&e&&f.$refs.container.css("transition-duration",e+"ms"),f.$refs.container.addClass("fancybox-is-open").trigger("focus"),f.loadSlide(s),void f.preload("image");c=n.fancybox.getTranslate(r.$slide),l=n.fancybox.getTranslate(f.$refs.stage),n.each(f.slides,function(t,e){n.fancybox.stop(e.$slide,!0)}),r.pos!==s.pos&&(r.isComplete=!1),r.$slide.removeClass("fancybox-slide--complete fancybox-slide--current"),i?(u=c.left-(r.pos*c.width+r.pos*r.opts.gutter),n.each(f.slides,function(t,o){o.$slide.removeClass("fancybox-animated").removeClass(function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")});var i=o.pos*c.width+o.pos*o.opts.gutter;n.fancybox.setTranslate(o.$slide,{top:0,left:i-l.left+u}),o.pos!==s.pos&&o.$slide.addClass("fancybox-slide--"+(o.pos>s.pos?"next":"previous")),p(o.$slide),n.fancybox.animate(o.$slide,{top:0,left:(o.pos-s.pos)*c.width+(o.pos-s.pos)*o.opts.gutter},e,function(){o.$slide.css({transform:"",opacity:""}).removeClass("fancybox-slide--next fancybox-slide--previous"),o.pos===f.currPos&&f.complete()})})):e&&s.opts.transitionEffect&&(d="fancybox-animated fancybox-fx-"+s.opts.transitionEffect,r.$slide.addClass("fancybox-slide--"+(r.pos>s.pos?"next":"previous")),n.fancybox.animate(r.$slide,d,e,function(){r.$slide.removeClass(d).removeClass("fancybox-slide--next fancybox-slide--previous")},!1)),s.isLoaded?f.revealContent(s):f.loadSlide(s),f.preload("image")}},createSlide:function(t){var e,o,i=this;return o=t%i.group.length,o=o<0?i.group.length+o:o,!i.slides[t]&&i.group[o]&&(e=n('<div class="fancybox-slide"></div>').appendTo(i.$refs.stage),i.slides[t]=n.extend(!0,{},i.group[o],{pos:t,$slide:e,isLoaded:!1}),i.updateSlide(i.slides[t])),i.slides[t]},scaleToActual:function(t,e,o){var i,a,s,r,c,l=this,d=l.current,u=d.$content,f=n.fancybox.getTranslate(d.$slide).width,p=n.fancybox.getTranslate(d.$slide).height,h=d.width,g=d.height;l.isAnimating||l.isMoved()||!u||"image"!=d.type||!d.isLoaded||d.hasError||(l.isAnimating=!0,n.fancybox.stop(u),t=void 0===t?.5*f:t,e=void 0===e?.5*p:e,i=n.fancybox.getTranslate(u),i.top-=n.fancybox.getTranslate(d.$slide).top,i.left-=n.fancybox.getTranslate(d.$slide).left,r=h/i.width,c=g/i.height,a=.5*f-.5*h,s=.5*p-.5*g,h>f&&(a=i.left*r-(t*r-t),a>0&&(a=0),a<f-h&&(a=f-h)),g>p&&(s=i.top*c-(e*c-e),s>0&&(s=0),s<p-g&&(s=p-g)),l.updateCursor(h,g),n.fancybox.animate(u,{top:s,left:a,scaleX:r,scaleY:c},o||366,function(){l.isAnimating=!1}),l.SlideShow&&l.SlideShow.isActive&&l.SlideShow.stop())},scaleToFit:function(t){var e,o=this,i=o.current,a=i.$content;o.isAnimating||o.isMoved()||!a||"image"!=i.type||!i.isLoaded||i.hasError||(o.isAnimating=!0,n.fancybox.stop(a),e=o.getFitPos(i),o.updateCursor(e.width,e.height),n.fancybox.animate(a,{top:e.top,left:e.left,scaleX:e.width/a.width(),scaleY:e.height/a.height()},t||366,function(){o.isAnimating=!1}))},getFitPos:function(t){var e,o,i,a,s=this,r=t.$content,c=t.$slide,l=t.width||t.opts.width,d=t.height||t.opts.height,u={};return!!(t.isLoaded&&r&&r.length)&&(e=n.fancybox.getTranslate(s.$refs.stage).width,o=n.fancybox.getTranslate(s.$refs.stage).height,e-=parseFloat(c.css("paddingLeft"))+parseFloat(c.css("paddingRight"))+parseFloat(r.css("marginLeft"))+parseFloat(r.css("marginRight")),o-=parseFloat(c.css("paddingTop"))+parseFloat(c.css("paddingBottom"))+parseFloat(r.css("marginTop"))+parseFloat(r.css("marginBottom")),l&&d||(l=e,d=o),i=Math.min(1,e/l,o/d),l*=i,d*=i,l>e-.5&&(l=e),d>o-.5&&(d=o),"image"===t.type?(u.top=Math.floor(.5*(o-d))+parseFloat(c.css("paddingTop")),u.left=Math.floor(.5*(e-l))+parseFloat(c.css("paddingLeft"))):"video"===t.contentType&&(a=t.opts.width&&t.opts.height?l/d:t.opts.ratio||16/9,d>l/a?d=l/a:l>d*a&&(l=d*a)),u.width=l,u.height=d,u)},update:function(t){var e=this;n.each(e.slides,function(n,o){e.updateSlide(o,t)})},updateSlide:function(t,e){var o=this,i=t&&t.$content,a=t.width||t.opts.width,s=t.height||t.opts.height,r=t.$slide;o.adjustCaption(t),i&&(a||s||"video"===t.contentType)&&!t.hasError&&(n.fancybox.stop(i),n.fancybox.setTranslate(i,o.getFitPos(t)),t.pos===o.currPos&&(o.isAnimating=!1,o.updateCursor())),o.adjustLayout(t),r.length&&(r.trigger("refresh"),t.pos===o.currPos&&o.$refs.toolbar.add(o.$refs.navigation.find(".fancybox-button--arrow_right")).toggleClass("compensate-for-scrollbar",r.get(0).scrollHeight>r.get(0).clientHeight)),o.trigger("onUpdate",t,e)},centerSlide:function(t){var e=this,o=e.current,i=o.$slide;!e.isClosing&&o&&(i.siblings().css({transform:"",opacity:""}),i.parent().children().removeClass("fancybox-slide--previous fancybox-slide--next"),n.fancybox.animate(i,{top:0,left:0,opacity:1},void 0===t?0:t,function(){i.css({transform:"",opacity:""}),o.isComplete||e.complete()},!1))},isMoved:function(t){var e,o,i=t||this.current;return!!i&&(o=n.fancybox.getTranslate(this.$refs.stage),e=n.fancybox.getTranslate(i.$slide),!i.$slide.hasClass("fancybox-animated")&&(Math.abs(e.top-o.top)>.5||Math.abs(e.left-o.left)>.5))},updateCursor:function(t,e){var o,i,a=this,s=a.current,r=a.$refs.container;s&&!a.isClosing&&a.Guestures&&(r.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan"),o=a.canPan(t,e),i=!!o||a.isZoomable(),r.toggleClass("fancybox-is-zoomable",i),n("[data-fancybox-zoom]").prop("disabled",!i),o?r.addClass("fancybox-can-pan"):i&&("zoom"===s.opts.clickContent||"function"==typeof s.opts.clickContent&&"zoom"==s.opts.clickContent(s))?r.addClass("fancybox-can-zoomIn"):s.opts.touch&&(s.opts.touch.vertical||a.group.length>1)&&"video"!==s.contentType&&r.addClass("fancybox-can-swipe"))},isZoomable:function(){var t,e=this,n=e.current;if(n&&!e.isClosing&&"image"===n.type&&!n.hasError){if(!n.isLoaded)return!0;if((t=e.getFitPos(n))&&(n.width>t.width||n.height>t.height))return!0}return!1},isScaledDown:function(t,e){var o=this,i=!1,a=o.current,s=a.$content;return void 0!==t&&void 0!==e?i=t<a.width&&e<a.height:s&&(i=n.fancybox.getTranslate(s),i=i.width<a.width&&i.height<a.height),i},canPan:function(t,e){var o=this,i=o.current,a=null,s=!1;return"image"===i.type&&(i.isComplete||t&&e)&&!i.hasError&&(s=o.getFitPos(i),void 0!==t&&void 0!==e?a={width:t,height:e}:i.isComplete&&(a=n.fancybox.getTranslate(i.$content)),a&&s&&(s=Math.abs(a.width-s.width)>1.5||Math.abs(a.height-s.height)>1.5)),s},loadSlide:function(t){var e,o,i,a=this;if(!t.isLoading&&!t.isLoaded){if(t.isLoading=!0,!1===a.trigger("beforeLoad",t))return t.isLoading=!1,!1;switch(e=t.type,o=t.$slide,o.off("refresh").trigger("onReset").addClass(t.opts.slideClass),e){case"image":a.setImage(t);break;case"iframe":a.setIframe(t);break;case"html":a.setContent(t,t.src||t.content);break;case"video":a.setContent(t,t.opts.video.tpl.replace(/\{\{src\}\}/gi,t.src).replace("{{format}}",t.opts.videoFormat||t.opts.video.format||"").replace("{{poster}}",t.thumb||""));break;case"inline":n(t.src).length?a.setContent(t,n(t.src)):a.setError(t);break;case"ajax":a.showLoading(t),i=n.ajax(n.extend({},t.opts.ajax.settings,{url:t.src,success:function(e,n){"success"===n&&a.setContent(t,e)},error:function(e,n){e&&"abort"!==n&&a.setError(t)}})),o.one("onReset",function(){i.abort()});break;default:a.setError(t)}return!0}},setImage:function(t){var o,i=this;setTimeout(function(){var e=t.$image;i.isClosing||!t.isLoading||e&&e.length&&e[0].complete||t.hasError||i.showLoading(t)},50),i.checkSrcset(t),t.$content=n('<div class="fancybox-content"></div>').addClass("fancybox-is-hidden").appendTo(t.$slide.addClass("fancybox-slide--image")),!1!==t.opts.preload&&t.opts.width&&t.opts.height&&t.thumb&&(t.width=t.opts.width,t.height=t.opts.height,o=e.createElement("img"),o.onerror=function(){n(this).remove(),t.$ghost=null},o.onload=function(){i.afterLoad(t)},t.$ghost=n(o).addClass("fancybox-image").appendTo(t.$content).attr("src",t.thumb)),i.setBigImage(t)},checkSrcset:function(e){var n,o,i,a,s=e.opts.srcset||e.opts.image.srcset;if(s){i=t.devicePixelRatio||1,a=t.innerWidth*i,o=s.split(",").map(function(t){var e={};return t.trim().split(/\s+/).forEach(function(t,n){var o=parseInt(t.substring(0,t.length-1),10);if(0===n)return e.url=t;o&&(e.value=o,e.postfix=t[t.length-1])}),e}),o.sort(function(t,e){return t.value-e.value});for(var r=0;r<o.length;r++){var c=o[r];if("w"===c.postfix&&c.value>=a||"x"===c.postfix&&c.value>=i){n=c;break}}!n&&o.length&&(n=o[o.length-1]),n&&(e.src=n.url,e.width&&e.height&&"w"==n.postfix&&(e.height=e.width/e.height*n.value,e.width=n.value),e.opts.srcset=s)}},setBigImage:function(t){var o=this,i=e.createElement("img"),a=n(i);t.$image=a.one("error",function(){o.setError(t)}).one("load",function(){var e;t.$ghost||(o.resolveImageSlideSize(t,this.naturalWidth,this.naturalHeight),o.afterLoad(t)),o.isClosing||(t.opts.srcset&&(e=t.opts.sizes,e&&"auto"!==e||(e=(t.width/t.height>1&&s.width()/s.height()>1?"100":Math.round(t.width/t.height*100))+"vw"),a.attr("sizes",e).attr("srcset",t.opts.srcset)),t.$ghost&&setTimeout(function(){t.$ghost&&!o.isClosing&&t.$ghost.hide()},Math.min(300,Math.max(1e3,t.height/1600))),o.hideLoading(t))}).addClass("fancybox-image").attr("src",t.src).appendTo(t.$content),(i.complete||"complete"==i.readyState)&&a.naturalWidth&&a.naturalHeight?a.trigger("load"):i.error&&a.trigger("error")},resolveImageSlideSize:function(t,e,n){var o=parseInt(t.opts.width,10),i=parseInt(t.opts.height,10);t.width=e,t.height=n,o>0&&(t.width=o,t.height=Math.floor(o*n/e)),i>0&&(t.width=Math.floor(i*e/n),t.height=i)},setIframe:function(t){var e,o=this,i=t.opts.iframe,a=t.$slide;t.$content=n('<div class="fancybox-content'+(i.preload?" fancybox-is-hidden":"")+'"></div>').css(i.css).appendTo(a),a.addClass("fancybox-slide--"+t.contentType),t.$iframe=e=n(i.tpl.replace(/\{rnd\}/g,(new Date).getTime())).attr(i.attr).appendTo(t.$content),i.preload?(o.showLoading(t),e.on("load.fb error.fb",function(e){this.isReady=1,t.$slide.trigger("refresh"),o.afterLoad(t)}),a.on("refresh.fb",function(){var n,o,s=t.$content,r=i.css.width,c=i.css.height;if(1===e[0].isReady){try{n=e.contents(),o=n.find("body")}catch(t){}o&&o.length&&o.children().length&&(a.css("overflow","visible"),s.css({width:"100%","max-width":"100%",height:"9999px"}),void 0===r&&(r=Math.ceil(Math.max(o[0].clientWidth,o.outerWidth(!0)))),s.css("width",r||"").css("max-width",""),void 0===c&&(c=Math.ceil(Math.max(o[0].clientHeight,o.outerHeight(!0)))),s.css("height",c||""),a.css("overflow","auto")),s.removeClass("fancybox-is-hidden")}})):o.afterLoad(t),e.attr("src",t.src),a.one("onReset",function(){try{n(this).find("iframe").hide().unbind().attr("src","//about:blank")}catch(t){}n(this).off("refresh.fb").empty(),t.isLoaded=!1,t.isRevealed=!1})},setContent:function(t,e){var o=this;o.isClosing||(o.hideLoading(t),t.$content&&n.fancybox.stop(t.$content),t.$slide.empty(),l(e)&&e.parent().length?((e.hasClass("fancybox-content")||e.parent().hasClass("fancybox-content"))&&e.parents(".fancybox-slide").trigger("onReset"),t.$placeholder=n("<div>").hide().insertAfter(e),e.css("display","inline-block")):t.hasError||("string"==typeof e&&(e=n("<div>").append(n.trim(e)).contents()),t.opts.filter&&(e=n("<div>").html(e).find(t.opts.filter))),t.$slide.one("onReset",function(){n(this).find("video,audio").trigger("pause"),t.$placeholder&&(t.$placeholder.after(e.removeClass("fancybox-content").hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1,t.isRevealed=!1)}),n(e).appendTo(t.$slide),n(e).is("video,audio")&&(n(e).addClass("fancybox-video"),n(e).wrap("<div></div>"),t.contentType="video",t.opts.width=t.opts.width||n(e).attr("width"),t.opts.height=t.opts.height||n(e).attr("height")),t.$content=t.$slide.children().filter("div,form,main,video,audio,article,.fancybox-content").first(),t.$content.siblings().hide(),t.$content.length||(t.$content=t.$slide.wrapInner("<div></div>").children().first()),t.$content.addClass("fancybox-content"),t.$slide.addClass("fancybox-slide--"+t.contentType),o.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.trigger("onReset").removeClass("fancybox-slide--"+t.contentType).addClass("fancybox-slide--error"),t.contentType="html",this.setContent(t,this.translate(t,t.opts.errorTpl)),t.pos===this.currPos&&(this.isAnimating=!1)},showLoading:function(t){var e=this;(t=t||e.current)&&!t.$spinner&&(t.$spinner=n(e.translate(e,e.opts.spinnerTpl)).appendTo(t.$slide).hide().fadeIn("fast"))},hideLoading:function(t){var e=this;(t=t||e.current)&&t.$spinner&&(t.$spinner.stop().remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger("afterLoad",t),e.hideLoading(t),!t.opts.smallBtn||t.$smallBtn&&t.$smallBtn.length||(t.$smallBtn=n(e.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on("contextmenu.fb",function(t){return 2==t.button&&t.preventDefault(),!0}),"image"===t.type&&n('<div class="fancybox-spaceball"></div>').appendTo(t.$content)),e.adjustCaption(t),e.adjustLayout(t),t.pos===e.currPos&&e.updateCursor(),e.revealContent(t))},adjustCaption:function(t){var e,n=this,o=t||n.current,i=o.opts.caption,a=o.opts.preventCaptionOverlap,s=n.$refs.caption,r=!1;s.toggleClass("fancybox-caption--separate",a),a&&i&&i.length&&(o.pos!==n.currPos?(e=s.clone().appendTo(s.parent()),e.children().eq(0).empty().html(i),r=e.outerHeight(!0),e.empty().remove()):n.$caption&&(r=n.$caption.outerHeight(!0)),o.$slide.css("padding-bottom",r||""))},adjustLayout:function(t){var e,n,o,i,a=this,s=t||a.current;s.isLoaded&&!0!==s.opts.disableLayoutFix&&(s.$content.css("margin-bottom",""),s.$content.outerHeight()>s.$slide.height()+.5&&(o=s.$slide[0].style["padding-bottom"],i=s.$slide.css("padding-bottom"),parseFloat(i)>0&&(e=s.$slide[0].scrollHeight,s.$slide.css("padding-bottom",0),Math.abs(e-s.$slide[0].scrollHeight)<1&&(n=i),s.$slide.css("padding-bottom",o))),s.$content.css("margin-bottom",n))},revealContent:function(t){var e,o,i,a,s=this,r=t.$slide,c=!1,l=!1,d=s.isMoved(t),u=t.isRevealed;return t.isRevealed=!0,e=t.opts[s.firstRun?"animationEffect":"transitionEffect"],i=t.opts[s.firstRun?"animationDuration":"transitionDuration"],i=parseInt(void 0===t.forcedDuration?i:t.forcedDuration,10),!d&&t.pos===s.currPos&&i||(e=!1),"zoom"===e&&(t.pos===s.currPos&&i&&"image"===t.type&&!t.hasError&&(l=s.getThumbPos(t))?c=s.getFitPos(t):e="fade"),"zoom"===e?(s.isAnimating=!0,c.scaleX=c.width/l.width,c.scaleY=c.height/l.height,a=t.opts.zoomOpacity,"auto"==a&&(a=Math.abs(t.width/t.height-l.width/l.height)>.1),a&&(l.opacity=.1,c.opacity=1),n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"),l),p(t.$content),void n.fancybox.animate(t.$content,c,i,function(){s.isAnimating=!1,s.complete()})):(s.updateSlide(t),e?(n.fancybox.stop(r),o="fancybox-slide--"+(t.pos>=s.prevPos?"next":"previous")+" fancybox-animated fancybox-fx-"+e,r.addClass(o).removeClass("fancybox-slide--current"),t.$content.removeClass("fancybox-is-hidden"),p(r),"image"!==t.type&&t.$content.hide().show(0),void n.fancybox.animate(r,"fancybox-slide--current",i,function(){r.removeClass(o).css({transform:"",opacity:""}),t.pos===s.currPos&&s.complete()},!0)):(t.$content.removeClass("fancybox-is-hidden"),u||!d||"image"!==t.type||t.hasError||t.$content.hide().fadeIn("fast"),void(t.pos===s.currPos&&s.complete())))},getThumbPos:function(t){var e,o,i,a,s,r=!1,c=t.$thumb;return!(!c||!g(c[0]))&&(e=n.fancybox.getTranslate(c),o=parseFloat(c.css("border-top-width")||0),i=parseFloat(c.css("border-right-width")||0),a=parseFloat(c.css("border-bottom-width")||0),s=parseFloat(c.css("border-left-width")||0),r={top:e.top+o,left:e.left+s,width:e.width-i-s,height:e.height-o-a,scaleX:1,scaleY:1},e.width>0&&e.height>0&&r)},complete:function(){var t,e=this,o=e.current,i={};!e.isMoved()&&o.isLoaded&&(o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger("onReset"),e.preload("inline"),p(o.$slide),o.$slide.addClass("fancybox-slide--complete"),n.each(e.slides,function(t,o){o.pos>=e.currPos-1&&o.pos<=e.currPos+1?i[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.off().remove())}),e.slides=i),e.isAnimating=!1,e.updateCursor(),e.trigger("afterShow"),o.opts.video.autoStart&&o.$slide.find("video,audio").filter(":visible:first").trigger("play").one("ended",function(){Document.exitFullscreen?Document.exitFullscreen():this.webkitExitFullscreen&&this.webkitExitFullscreen(),e.next()}),o.opts.autoFocus&&"html"===o.contentType&&(t=o.$content.find("input[autofocus]:enabled:visible:first"),t.length?t.trigger("focus"):e.focus(null,!0)),o.$slide.scrollTop(0).scrollLeft(0))},preload:function(t){var e,n,o=this;o.group.length<2||(n=o.slides[o.currPos+1],e=o.slides[o.currPos-1],e&&e.type===t&&o.loadSlide(e),n&&n.type===t&&o.loadSlide(n))},focus:function(t,o){var i,a,s=this,r=["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"])'].join(",");s.isClosing||(i=!t&&s.current&&s.current.isComplete?s.current.$slide.find("*:visible"+(o?":not(.fancybox-close-small)":"")):s.$refs.container.find("*:visible"),i=i.filter(r).filter(function(){return"hidden"!==n(this).css("visibility")&&!n(this).hasClass("disabled")}),i.length?(a=i.index(e.activeElement),t&&t.shiftKey?(a<0||0==a)&&(t.preventDefault(),i.eq(i.length-1).trigger("focus")):(a<0||a==i.length-1)&&(t&&t.preventDefault(),i.eq(0).trigger("focus"))):s.$refs.container.trigger("focus"))},activate:function(){var t=this;n(".fancybox-container").each(function(){var e=n(this).data("FancyBox");e&&e.id!==t.id&&!e.isClosing&&(e.trigger("onDeactivate"),e.removeEvents(),e.isVisible=!1)}),t.isVisible=!0,(t.current||t.isIdle)&&(t.update(),t.updateControls()),t.trigger("onActivate"),t.addEvents()},close:function(t,e){var o,i,a,s,r,c,l,u=this,f=u.current,h=function(){u.cleanUp(t)};return!u.isClosing&&(u.isClosing=!0,!1===u.trigger("beforeClose",t)?(u.isClosing=!1,d(function(){u.update()}),!1):(u.removeEvents(),a=f.$content,o=f.opts.animationEffect,i=!isNaN(parseFloat(i))&&isFinite(i)?e:o?f.opts.animationDuration:0,f.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"),!0!==t?n.fancybox.stop(f.$slide):o=!1,f.$slide.siblings().trigger("onReset").remove(),i&&u.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing").css("transition-duration",i+"ms"),u.hideLoading(f),u.hideControls(!0),u.updateCursor(),"zoom"!==o||a&&i&&"image"===f.type&&!u.isMoved()&&!f.hasError&&(l=u.getThumbPos(f))||(o="fade"),"zoom"===o?(n.fancybox.stop(a),s=n.fancybox.getTranslate(a),c={top:s.top,left:s.left,scaleX:s.width/l.width,scaleY:s.height/l.height,width:l.width,height:l.height},
|
12 |
+
r=f.opts.zoomOpacity,"auto"==r&&(r=Math.abs(f.width/f.height-l.width/l.height)>.1),r&&(l.opacity=0),n.fancybox.setTranslate(a,c),p(a),n.fancybox.animate(a,l,i,h),!0):(o&&i?n.fancybox.animate(f.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"),"fancybox-animated fancybox-fx-"+o,i,h):!0===t?setTimeout(h,i):h(),!0)))},cleanUp:function(e){var o,i,a,s=this,r=s.current.opts.$orig;s.current.$slide.trigger("onReset"),s.$refs.container.empty().remove(),s.trigger("afterClose",e),s.current.opts.backFocus&&(r&&r.length&&r.is(":visible")||(r=s.$trigger),r&&r.length&&(i=t.scrollX,a=t.scrollY,r.trigger("focus"),n("html, body").scrollTop(a).scrollLeft(i))),s.current=null,o=n.fancybox.getInstance(),o?o.activate():(n("body").removeClass("fancybox-active compensate-for-scrollbar"),n("#fancybox-style-noscroll").remove())},trigger:function(t,e){var n,o=Array.prototype.slice.call(arguments,1),i=this,a=e&&e.opts?e:i.current;if(a?o.unshift(a):a=i,o.unshift(i),"function"==typeof a.opts[t]&&(n=a.opts[t].apply(a,o)),!1===n)return n;"afterClose"!==t&&i.$refs?i.$refs.container.trigger(t+".fb",o):r.trigger(t+".fb",o)},updateControls:function(){var t=this,o=t.current,i=o.index,a=t.$refs.container,s=t.$refs.caption,r=o.opts.caption;o.$slide.trigger("refresh"),r&&r.length?(t.$caption=s,s.children().eq(0).html(r)):t.$caption=null,t.hasHiddenControls||t.isIdle||t.showControls(),a.find("[data-fancybox-count]").html(t.group.length),a.find("[data-fancybox-index]").html(i+1),a.find("[data-fancybox-prev]").prop("disabled",!o.opts.loop&&i<=0),a.find("[data-fancybox-next]").prop("disabled",!o.opts.loop&&i>=t.group.length-1),"image"===o.type?a.find("[data-fancybox-zoom]").show().end().find("[data-fancybox-download]").attr("href",o.opts.image.src||o.src).show():o.opts.toolbar&&a.find("[data-fancybox-download],[data-fancybox-zoom]").hide(),n(e.activeElement).is(":hidden,[disabled]")&&t.$refs.container.trigger("focus")},hideControls:function(t){var e=this,n=["infobar","toolbar","nav"];!t&&e.current.opts.preventCaptionOverlap||n.push("caption"),this.$refs.container.removeClass(n.map(function(t){return"fancybox-show-"+t}).join(" ")),this.hasHiddenControls=!0},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.hasHiddenControls=!1,t.idleSecondsCounter=0,n.toggleClass("fancybox-show-toolbar",!(!e.toolbar||!e.buttons)).toggleClass("fancybox-show-infobar",!!(e.infobar&&t.group.length>1)).toggleClass("fancybox-show-caption",!!t.$caption).toggleClass("fancybox-show-nav",!!(e.arrows&&t.group.length>1)).toggleClass("fancybox-is-modal",!!e.modal)},toggleControls:function(){this.hasHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:"3.5.7",defaults:a,getInstance:function(t){var e=n('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),o=Array.prototype.slice.call(arguments,1);return e instanceof b&&("string"==typeof t?e[t].apply(e,o):"function"==typeof t&&t.apply(e,o),e)},open:function(t,e,n){return new b(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),!0===t&&this.close(t))},destroy:function(){this.close(!0),r.add("body").off("click.fb-start","**")},isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),use3d:function(){var n=e.createElement("div");return t.getComputedStyle&&t.getComputedStyle(n)&&t.getComputedStyle(n).getPropertyValue("transform")&&!(e.documentMode&&e.documentMode<11)}(),getTranslate:function(t){var e;return!(!t||!t.length)&&(e=t[0].getBoundingClientRect(),{top:e.top||0,left:e.left||0,width:e.width,height:e.height,opacity:parseFloat(t.css("opacity"))})},setTranslate:function(t,e){var n="",o={};if(t&&e)return void 0===e.left&&void 0===e.top||(n=(void 0===e.left?t.position().left:e.left)+"px, "+(void 0===e.top?t.position().top:e.top)+"px",n=this.use3d?"translate3d("+n+", 0px)":"translate("+n+")"),void 0!==e.scaleX&&void 0!==e.scaleY?n+=" scale("+e.scaleX+", "+e.scaleY+")":void 0!==e.scaleX&&(n+=" scaleX("+e.scaleX+")"),n.length&&(o.transform=n),void 0!==e.opacity&&(o.opacity=e.opacity),void 0!==e.width&&(o.width=e.width),void 0!==e.height&&(o.height=e.height),t.css(o)},animate:function(t,e,o,i,a){var s,r=this;"function"==typeof o&&(i=o,o=null),r.stop(t),s=r.getTranslate(t),t.on(f,function(c){(!c||!c.originalEvent||t.is(c.originalEvent.target)&&"z-index"!=c.originalEvent.propertyName)&&(r.stop(t),!isNaN(parseFloat(o))&&isFinite(o)&&t.css("transition-duration",""),n.isPlainObject(e)?void 0!==e.scaleX&&void 0!==e.scaleY&&r.setTranslate(t,{top:e.top,left:e.left,width:s.width*e.scaleX,height:s.height*e.scaleY,scaleX:1,scaleY:1}):!0!==a&&t.removeClass(e),"function"==typeof i&&i(c))}),!isNaN(parseFloat(o))&&isFinite(o)&&t.css("transition-duration",o+"ms"),n.isPlainObject(e)?(void 0!==e.scaleX&&void 0!==e.scaleY&&(delete e.width,delete e.height,t.parent().hasClass("fancybox-slide--image")&&t.parent().addClass("fancybox-is-scaling")),n.fancybox.setTranslate(t,e)):t.addClass(e),t.data("timer",setTimeout(function(){t.trigger(f)},o+33))},stop:function(t,e){t&&t.length&&(clearTimeout(t.data("timer")),e&&t.trigger(f),t.off(f).css("transition-duration",""),t.parent().removeClass("fancybox-is-scaling"))}},n.fn.fancybox=function(t){var e;return t=t||{},e=t.selector||!1,e?n("body").off("click.fb-start",e).on("click.fb-start",e,{options:t},i):this.off("click.fb-start").on("click.fb-start",{items:this,options:t},i),this},r.on("click.fb-start","[data-fancybox]",i),r.on("click.fb-start","[data-fancybox-trigger]",function(t){n('[data-fancybox="'+n(this).attr("data-fancybox-trigger")+'"]').eq(n(this).attr("data-fancybox-index")||0).trigger("click.fb-start",{$trigger:n(this)})}),function(){var t=null;r.on("mousedown mouseup focus blur",".fancybox-button",function(e){switch(e.type){case"mousedown":t=n(this);break;case"mouseup":t=null;break;case"focusin":n(".fancybox-button").removeClass("fancybox-focus"),n(this).is(t)||n(this).is("[disabled]")||n(this).addClass("fancybox-focus");break;case"focusout":n(".fancybox-button").removeClass("fancybox-focus")}})}()}}(window,document,jQuery),function(t){"use strict";var e={youtube:{matcher:/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},paramPlace:8,type:"iframe",url:"https://www.youtube-nocookie.com/embed/$4",thumb:"https://img.youtube.com/vi/$4/hqdefault.jpg"},vimeo:{matcher:/^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},paramPlace:3,type:"iframe",url:"//player.vimeo.com/video/$2"},instagram:{matcher:/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,type:"image",url:"//$1/p/$2/media/?size=l"},gmap_place:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/?ll="+(t[9]?t[9]+"&z="+Math.floor(t[10])+(t[12]?t[12].replace(/^\//,"&"):""):t[12]+"").replace(/\?/,"&")+"&output="+(t[12]&&t[12].indexOf("layer=c")>0?"svembed":"embed")}},gmap_search:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/maps?q="+t[5].replace("query=","q=").replace("api=1","")+"&output=embed"}}},n=function(e,n,o){if(e)return o=o||"","object"==typeof o&&(o=t.param(o,!0)),t.each(n,function(t,n){e=e.replace("$"+t,n||"")}),o.length&&(e+=(e.indexOf("?")>0?"&":"?")+o),e};t(document).on("objectNeedsType.fb",function(o,i,a){var s,r,c,l,d,u,f,p=a.src||"",h=!1;s=t.extend(!0,{},e,a.opts.media),t.each(s,function(e,o){if(c=p.match(o.matcher)){if(h=o.type,f=e,u={},o.paramPlace&&c[o.paramPlace]){d=c[o.paramPlace],"?"==d[0]&&(d=d.substring(1)),d=d.split("&");for(var i=0;i<d.length;++i){var s=d[i].split("=",2);2==s.length&&(u[s[0]]=decodeURIComponent(s[1].replace(/\+/g," ")))}}return l=t.extend(!0,{},o.params,a.opts[e],u),p="function"==typeof o.url?o.url.call(this,c,l,a):n(o.url,c,l),r="function"==typeof o.thumb?o.thumb.call(this,c,l,a):n(o.thumb,c),"youtube"===e?p=p.replace(/&t=((\d+)m)?(\d+)s/,function(t,e,n,o){return"&start="+((n?60*parseInt(n,10):0)+parseInt(o,10))}):"vimeo"===e&&(p=p.replace("&%23","#")),!1}}),h?(a.opts.thumb||a.opts.$thumb&&a.opts.$thumb.length||(a.opts.thumb=r),"iframe"===h&&(a.opts=t.extend(!0,a.opts,{iframe:{preload:!1,attr:{scrolling:"no"}}})),t.extend(a,{type:h,src:p,origSrc:a.src,contentSource:f,contentType:"image"===h?"image":"gmap_place"==f||"gmap_search"==f?"map":"video"})):p&&(a.type=a.opts.defaultType)});var o={youtube:{src:"https://www.youtube.com/iframe_api",class:"YT",loading:!1,loaded:!1},vimeo:{src:"https://player.vimeo.com/api/player.js",class:"Vimeo",loading:!1,loaded:!1},load:function(t){var e,n=this;if(this[t].loaded)return void setTimeout(function(){n.done(t)});this[t].loading||(this[t].loading=!0,e=document.createElement("script"),e.type="text/javascript",e.src=this[t].src,"youtube"===t?window.onYouTubeIframeAPIReady=function(){n[t].loaded=!0,n.done(t)}:e.onload=function(){n[t].loaded=!0,n.done(t)},document.body.appendChild(e))},done:function(e){var n,o,i;"youtube"===e&&delete window.onYouTubeIframeAPIReady,(n=t.fancybox.getInstance())&&(o=n.current.$content.find("iframe"),"youtube"===e&&void 0!==YT&&YT?i=new YT.Player(o.attr("id"),{events:{onStateChange:function(t){0==t.data&&n.next()}}}):"vimeo"===e&&void 0!==Vimeo&&Vimeo&&(i=new Vimeo.Player(o),i.on("ended",function(){n.next()})))}};t(document).on({"afterShow.fb":function(t,e,n){e.group.length>1&&("youtube"===n.contentSource||"vimeo"===n.contentSource)&&o.load(n.contentSource)}})}(jQuery),function(t,e,n){"use strict";var o=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),i=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),a=function(e){var n=[];e=e.originalEvent||e||t.e,e=e.touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e];for(var o in e)e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?"x"===n?t.x-e.x:"y"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe')||"function"==typeof t.get(0).onclick||t.data("selectable"))return!0;for(var e=0,n=t[0].attributes,o=n.length;e<o;e++)if("data-fancybox-"===n[e].nodeName.substr(0,14))return!0;return!1},c=function(e){var n=t.getComputedStyle(e)["overflow-y"],o=t.getComputedStyle(e)["overflow-x"],i=("scroll"===n||"auto"===n)&&e.scrollHeight>e.clientHeight,a=("scroll"===o||"auto"===o)&&e.scrollWidth>e.clientWidth;return i||a},l=function(t){for(var e=!1;;){if(e=c(t.get(0)))break;if(t=t.parent(),!t.length||t.hasClass("fancybox-stage")||t.is("body"))break}return e},d=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on("touchstart.fb.touch mousedown.fb.touch",n.proxy(e,"ontouchstart"))};d.prototype.destroy=function(){var t=this;t.$container.off(".fb.touch"),n(e).off(".fb.touch"),t.requestId&&(i(t.requestId),t.requestId=null),t.tapped&&(clearTimeout(t.tapped),t.tapped=null)},d.prototype.ontouchstart=function(o){var i=this,c=n(o.target),d=i.instance,u=d.current,f=u.$slide,p=u.$content,h="touchstart"==o.type;if(h&&i.$container.off("mousedown.fb.touch"),(!o.originalEvent||2!=o.originalEvent.button)&&f.length&&c.length&&!r(c)&&!r(c.parent())&&(c.is("img")||!(o.originalEvent.clientX>c[0].clientWidth+c.offset().left))){if(!u||d.isAnimating||u.$slide.hasClass("fancybox-animated"))return o.stopPropagation(),void o.preventDefault();i.realPoints=i.startPoints=a(o),i.startPoints.length&&(u.touch&&o.stopPropagation(),i.startEvent=o,i.canTap=!0,i.$target=c,i.$content=p,i.opts=u.opts.touch,i.isPanning=!1,i.isSwiping=!1,i.isZooming=!1,i.isScrolling=!1,i.canPan=d.canPan(),i.startTime=(new Date).getTime(),i.distanceX=i.distanceY=i.distance=0,i.canvasWidth=Math.round(f[0].clientWidth),i.canvasHeight=Math.round(f[0].clientHeight),i.contentLastPos=null,i.contentStartPos=n.fancybox.getTranslate(i.$content)||{top:0,left:0},i.sliderStartPos=n.fancybox.getTranslate(f),i.stagePos=n.fancybox.getTranslate(d.$refs.stage),i.sliderStartPos.top-=i.stagePos.top,i.sliderStartPos.left-=i.stagePos.left,i.contentStartPos.top-=i.stagePos.top,i.contentStartPos.left-=i.stagePos.left,n(e).off(".fb.touch").on(h?"touchend.fb.touch touchcancel.fb.touch":"mouseup.fb.touch mouseleave.fb.touch",n.proxy(i,"ontouchend")).on(h?"touchmove.fb.touch":"mousemove.fb.touch",n.proxy(i,"ontouchmove")),n.fancybox.isMobile&&e.addEventListener("scroll",i.onscroll,!0),((i.opts||i.canPan)&&(c.is(i.$stage)||i.$stage.find(c).length)||(c.is(".fancybox-image")&&o.preventDefault(),n.fancybox.isMobile&&c.parents(".fancybox-caption").length))&&(i.isScrollable=l(c)||l(c.parent()),n.fancybox.isMobile&&i.isScrollable||o.preventDefault(),(1===i.startPoints.length||u.hasError)&&(i.canPan?(n.fancybox.stop(i.$content),i.isPanning=!0):i.isSwiping=!0,i.$container.addClass("fancybox-is-grabbing")),2===i.startPoints.length&&"image"===u.type&&(u.isLoaded||u.$ghost)&&(i.canTap=!1,i.isSwiping=!1,i.isPanning=!1,i.isZooming=!0,n.fancybox.stop(i.$content),i.centerPointStartX=.5*(i.startPoints[0].x+i.startPoints[1].x)-n(t).scrollLeft(),i.centerPointStartY=.5*(i.startPoints[0].y+i.startPoints[1].y)-n(t).scrollTop(),i.percentageOfImageAtPinchPointX=(i.centerPointStartX-i.contentStartPos.left)/i.contentStartPos.width,i.percentageOfImageAtPinchPointY=(i.centerPointStartY-i.contentStartPos.top)/i.contentStartPos.height,i.startDistanceBetweenFingers=s(i.startPoints[0],i.startPoints[1]))))}},d.prototype.onscroll=function(t){var n=this;n.isScrolling=!0,e.removeEventListener("scroll",n.onscroll,!0)},d.prototype.ontouchmove=function(t){var e=this;return void 0!==t.originalEvent.buttons&&0===t.originalEvent.buttons?void e.ontouchend(t):e.isScrolling?void(e.canTap=!1):(e.newPoints=a(t),void((e.opts||e.canPan)&&e.newPoints.length&&e.newPoints.length&&(e.isSwiping&&!0===e.isSwiping||t.preventDefault(),e.distanceX=s(e.newPoints[0],e.startPoints[0],"x"),e.distanceY=s(e.newPoints[0],e.startPoints[0],"y"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0&&(e.isSwiping?e.onSwipe(t):e.isPanning?e.onPan():e.isZooming&&e.onZoom()))))},d.prototype.onSwipe=function(e){var a,s=this,r=s.instance,c=s.isSwiping,l=s.sliderStartPos.left||0;if(!0!==c)"x"==c&&(s.distanceX>0&&(s.instance.group.length<2||0===s.instance.current.index&&!s.instance.current.opts.loop)?l+=Math.pow(s.distanceX,.8):s.distanceX<0&&(s.instance.group.length<2||s.instance.current.index===s.instance.group.length-1&&!s.instance.current.opts.loop)?l-=Math.pow(-s.distanceX,.8):l+=s.distanceX),s.sliderLastPos={top:"x"==c?0:s.sliderStartPos.top+s.distanceY,left:l},s.requestId&&(i(s.requestId),s.requestId=null),s.requestId=o(function(){s.sliderLastPos&&(n.each(s.instance.slides,function(t,e){var o=e.pos-s.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:s.sliderLastPos.top,left:s.sliderLastPos.left+o*s.canvasWidth+o*e.opts.gutter})}),s.$container.addClass("fancybox-is-sliding"))});else if(Math.abs(s.distance)>10){if(s.canTap=!1,r.group.length<2&&s.opts.vertical?s.isSwiping="y":r.isDragging||!1===s.opts.vertical||"auto"===s.opts.vertical&&n(t).width()>800?s.isSwiping="x":(a=Math.abs(180*Math.atan2(s.distanceY,s.distanceX)/Math.PI),s.isSwiping=a>45&&a<135?"y":"x"),"y"===s.isSwiping&&n.fancybox.isMobile&&s.isScrollable)return void(s.isScrolling=!0);r.isDragging=s.isSwiping,s.startPoints=s.newPoints,n.each(r.slides,function(t,e){var o,i;n.fancybox.stop(e.$slide),o=n.fancybox.getTranslate(e.$slide),i=n.fancybox.getTranslate(r.$refs.stage),e.$slide.css({transform:"",opacity:"","transition-duration":""}).removeClass("fancybox-animated").removeClass(function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")}),e.pos===r.current.pos&&(s.sliderStartPos.top=o.top-i.top,s.sliderStartPos.left=o.left-i.left),n.fancybox.setTranslate(e.$slide,{top:o.top-i.top,left:o.left-i.left})}),r.SlideShow&&r.SlideShow.isActive&&r.SlideShow.stop()}},d.prototype.onPan=function(){var t=this;if(s(t.newPoints[0],t.realPoints[0])<(n.fancybox.isMobile?10:5))return void(t.startPoints=t.newPoints);t.canTap=!1,t.contentLastPos=t.limitMovement(),t.requestId&&i(t.requestId),t.requestId=o(function(){n.fancybox.setTranslate(t.$content,t.contentLastPos)})},d.prototype.limitMovement=function(){var t,e,n,o,i,a,s=this,r=s.canvasWidth,c=s.canvasHeight,l=s.distanceX,d=s.distanceY,u=s.contentStartPos,f=u.left,p=u.top,h=u.width,g=u.height;return i=h>r?f+l:f,a=p+d,t=Math.max(0,.5*r-.5*h),e=Math.max(0,.5*c-.5*g),n=Math.min(r-h,.5*r-.5*h),o=Math.min(c-g,.5*c-.5*g),l>0&&i>t&&(i=t-1+Math.pow(-t+f+l,.8)||0),l<0&&i<n&&(i=n+1-Math.pow(n-f-l,.8)||0),d>0&&a>e&&(a=e-1+Math.pow(-e+p+d,.8)||0),d<0&&a<o&&(a=o+1-Math.pow(o-p-d,.8)||0),{top:a,left:i}},d.prototype.limitPosition=function(t,e,n,o){var i=this,a=i.canvasWidth,s=i.canvasHeight;return n>a?(t=t>0?0:t,t=t<a-n?a-n:t):t=Math.max(0,a/2-n/2),o>s?(e=e>0?0:e,e=e<s-o?s-o:e):e=Math.max(0,s/2-o/2),{top:e,left:t}},d.prototype.onZoom=function(){var e=this,a=e.contentStartPos,r=a.width,c=a.height,l=a.left,d=a.top,u=s(e.newPoints[0],e.newPoints[1]),f=u/e.startDistanceBetweenFingers,p=Math.floor(r*f),h=Math.floor(c*f),g=(r-p)*e.percentageOfImageAtPinchPointX,b=(c-h)*e.percentageOfImageAtPinchPointY,m=(e.newPoints[0].x+e.newPoints[1].x)/2-n(t).scrollLeft(),v=(e.newPoints[0].y+e.newPoints[1].y)/2-n(t).scrollTop(),y=m-e.centerPointStartX,x=v-e.centerPointStartY,w=l+(g+y),$=d+(b+x),S={top:$,left:w,scaleX:f,scaleY:f};e.canTap=!1,e.newWidth=p,e.newHeight=h,e.contentLastPos=S,e.requestId&&i(e.requestId),e.requestId=o(function(){n.fancybox.setTranslate(e.$content,e.contentLastPos)})},d.prototype.ontouchend=function(t){var o=this,s=o.isSwiping,r=o.isPanning,c=o.isZooming,l=o.isScrolling;if(o.endPoints=a(t),o.dMs=Math.max((new Date).getTime()-o.startTime,1),o.$container.removeClass("fancybox-is-grabbing"),n(e).off(".fb.touch"),e.removeEventListener("scroll",o.onscroll,!0),o.requestId&&(i(o.requestId),o.requestId=null),o.isSwiping=!1,o.isPanning=!1,o.isZooming=!1,o.isScrolling=!1,o.instance.isDragging=!1,o.canTap)return o.onTap(t);o.speed=100,o.velocityX=o.distanceX/o.dMs*.5,o.velocityY=o.distanceY/o.dMs*.5,r?o.endPanning():c?o.endZooming():o.endSwiping(s,l)},d.prototype.endSwiping=function(t,e){var o=this,i=!1,a=o.instance.group.length,s=Math.abs(o.distanceX),r="x"==t&&a>1&&(o.dMs>130&&s>10||s>50);o.sliderLastPos=null,"y"==t&&!e&&Math.abs(o.distanceY)>50?(n.fancybox.animate(o.instance.current.$slide,{top:o.sliderStartPos.top+o.distanceY+150*o.velocityY,opacity:0},200),i=o.instance.close(!0,250)):r&&o.distanceX>0?i=o.instance.previous(300):r&&o.distanceX<0&&(i=o.instance.next(300)),!1!==i||"x"!=t&&"y"!=t||o.instance.centerSlide(200),o.$container.removeClass("fancybox-is-sliding")},d.prototype.endPanning=function(){var t,e,o,i=this;i.contentLastPos&&(!1===i.opts.momentum||i.dMs>350?(t=i.contentLastPos.left,e=i.contentLastPos.top):(t=i.contentLastPos.left+500*i.velocityX,e=i.contentLastPos.top+500*i.velocityY),o=i.limitPosition(t,e,i.contentStartPos.width,i.contentStartPos.height),o.width=i.contentStartPos.width,o.height=i.contentStartPos.height,n.fancybox.animate(i.$content,o,366))},d.prototype.endZooming=function(){var t,e,o,i,a=this,s=a.instance.current,r=a.newWidth,c=a.newHeight;a.contentLastPos&&(t=a.contentLastPos.left,e=a.contentLastPos.top,i={top:e,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(a.$content,i),r<a.canvasWidth&&c<a.canvasHeight?a.instance.scaleToFit(150):r>s.width||c>s.height?a.instance.scaleToActual(a.centerPointStartX,a.centerPointStartY,150):(o=a.limitPosition(t,e,r,c),n.fancybox.animate(a.$content,o,150)))},d.prototype.onTap=function(e){var o,i=this,s=n(e.target),r=i.instance,c=r.current,l=e&&a(e)||i.startPoints,d=l[0]?l[0].x-n(t).scrollLeft()-i.stagePos.left:0,u=l[0]?l[0].y-n(t).scrollTop()-i.stagePos.top:0,f=function(t){var n=c.opts[t];if("function"==typeof n&&(n=n.apply(r,[c,e])),n)switch(n){case"close":r.close(i.startEvent);break;case"toggleControls":r.toggleControls();break;case"next":r.next();break;case"nextOrClose":r.group.length>1?r.next():r.close(i.startEvent);break;case"zoom":"image"==c.type&&(c.isLoaded||c.$ghost)&&(r.canPan()?r.scaleToFit():r.isScaledDown()?r.scaleToActual(d,u):r.group.length<2&&r.close(i.startEvent))}};if((!e.originalEvent||2!=e.originalEvent.button)&&(s.is("img")||!(d>s[0].clientWidth+s.offset().left))){if(s.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container"))o="Outside";else if(s.is(".fancybox-slide"))o="Slide";else{if(!r.current.$content||!r.current.$content.find(s).addBack().filter(s).length)return;o="Content"}if(i.tapped){if(clearTimeout(i.tapped),i.tapped=null,Math.abs(d-i.tapX)>50||Math.abs(u-i.tapY)>50)return this;f("dblclick"+o)}else i.tapX=d,i.tapY=u,c.opts["dblclick"+o]&&c.opts["dblclick"+o]!==c.opts["click"+o]?i.tapped=setTimeout(function(){i.tapped=null,r.isAnimating||f("click"+o)},500):f("click"+o);return this}},n(e).on("onActivate.fb",function(t,e){e&&!e.Guestures&&(e.Guestures=new d(e))}).on("beforeClose.fb",function(t,e){e&&e.Guestures&&e.Guestures.destroy()})}(window,document,jQuery),function(t,e){"use strict";e.extend(!0,e.fancybox.defaults,{btnTpl:{slideShow:'<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 5.4v13.2l11-6.6z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z"/></svg></button>'},slideShow:{autoStart:!1,speed:3e3,progress:!0}});var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,init:function(){var t=this,n=t.instance,o=n.group[n.currIndex].opts.slideShow;t.$button=n.$refs.toolbar.find("[data-fancybox-play]").on("click",function(){t.toggle()}),n.group.length<2||!o?t.$button.hide():o.progress&&(t.$progress=e('<div class="fancybox-progress"></div>').appendTo(n.$refs.inner))},set:function(t){var n=this,o=n.instance,i=o.current;i&&(!0===t||i.opts.loop||o.currIndex<o.group.length-1)?n.isActive&&"video"!==i.contentType&&(n.$progress&&e.fancybox.animate(n.$progress.show(),{scaleX:1},i.opts.slideShow.speed),n.timer=setTimeout(function(){o.current.opts.loop||o.current.index!=o.group.length-1?o.next():o.jumpTo(0)},i.opts.slideShow.speed)):(n.stop(),o.idleSecondsCounter=0,o.showControls())},clear:function(){var t=this;clearTimeout(t.timer),t.timer=null,t.$progress&&t.$progress.removeAttr("style").hide()},start:function(){var t=this,e=t.instance.current;e&&(t.$button.attr("title",(e.opts.i18n[e.opts.lang]||e.opts.i18n.en).PLAY_STOP).removeClass("fancybox-button--play").addClass("fancybox-button--pause"),t.isActive=!0,e.isComplete&&t.set(!0),t.instance.trigger("onSlideShowChange",!0))},stop:function(){var t=this,e=t.instance.current;t.clear(),t.$button.attr("title",(e.opts.i18n[e.opts.lang]||e.opts.i18n.en).PLAY_START).removeClass("fancybox-button--pause").addClass("fancybox-button--play"),t.isActive=!1,t.instance.trigger("onSlideShowChange",!1),t.$progress&&t.$progress.removeAttr("style").hide()},toggle:function(){var t=this;t.isActive?t.stop():t.start()}}),e(t).on({"onInit.fb":function(t,e){e&&!e.SlideShow&&(e.SlideShow=new n(e))},"beforeShow.fb":function(t,e,n,o){var i=e&&e.SlideShow;o?i&&n.opts.slideShow.autoStart&&i.start():i&&i.isActive&&i.clear()},"afterShow.fb":function(t,e,n){var o=e&&e.SlideShow;o&&o.isActive&&o.set()},"afterKeydown.fb":function(n,o,i,a,s){var r=o&&o.SlideShow;!r||!i.opts.slideShow||80!==s&&32!==s||e(t.activeElement).is("button,a,input")||(a.preventDefault(),r.toggle())},"beforeClose.fb onDeactivate.fb":function(t,e){var n=e&&e.SlideShow;n&&n.stop()}}),e(t).on("visibilitychange",function(){var n=e.fancybox.getInstance(),o=n&&n.SlideShow;o&&o.isActive&&(t.hidden?o.clear():o.set())})}(document,jQuery),function(t,e){"use strict";var n=function(){for(var e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n={},o=0;o<e.length;o++){var i=e[o];if(i&&i[1]in t){for(var a=0;a<i.length;a++)n[e[0][a]]=i[a];return n}}return!1}();if(n){var o={request:function(e){e=e||t.documentElement,e[n.requestFullscreen](e.ALLOW_KEYBOARD_INPUT)},exit:function(){t[n.exitFullscreen]()},toggle:function(e){e=e||t.documentElement,this.isFullscreen()?this.exit():this.request(e)},isFullscreen:function(){return Boolean(t[n.fullscreenElement])},enabled:function(){return Boolean(t[n.fullscreenEnabled])}};e.extend(!0,e.fancybox.defaults,{btnTpl:{fullScreen:'<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fsenter" title="{{FULL_SCREEN}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"/></svg></button>'},fullScreen:{autoStart:!1}}),e(t).on(n.fullscreenchange,function(){var t=o.isFullscreen(),n=e.fancybox.getInstance();n&&(n.current&&"image"===n.current.type&&n.isAnimating&&(n.isAnimating=!1,n.update(!0,!0,0),n.isComplete||n.complete()),n.trigger("onFullscreenChange",t),n.$refs.container.toggleClass("fancybox-is-fullscreen",t),n.$refs.toolbar.find("[data-fancybox-fullscreen]").toggleClass("fancybox-button--fsenter",!t).toggleClass("fancybox-button--fsexit",t))})}e(t).on({"onInit.fb":function(t,e){var i;if(!n)return void e.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();e&&e.group[e.currIndex].opts.fullScreen?(i=e.$refs.container,i.on("click.fb-fullscreen","[data-fancybox-fullscreen]",function(t){t.stopPropagation(),t.preventDefault(),o.toggle()}),e.opts.fullScreen&&!0===e.opts.fullScreen.autoStart&&o.request(),e.FullScreen=o):e&&e.$refs.toolbar.find("[data-fancybox-fullscreen]").hide()},"afterKeydown.fb":function(t,e,n,o,i){e&&e.FullScreen&&70===i&&(o.preventDefault(),e.FullScreen.toggle())},"beforeClose.fb":function(t,e){e&&e.FullScreen&&e.$refs.container.hasClass("fancybox-is-fullscreen")&&o.exit()}})}(document,jQuery),function(t,e){"use strict";var n="fancybox-thumbs";e.fancybox.defaults=e.extend(!0,{btnTpl:{thumbs:'<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z"/></svg></button>'},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"}},e.fancybox.defaults);var o=function(t){this.init(t)};e.extend(o.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,isActive:!1,init:function(t){var e=this,n=t.group,o=0;e.instance=t,e.opts=n[t.currIndex].opts.thumbs,t.Thumbs=e,e.$button=t.$refs.toolbar.find("[data-fancybox-thumbs]");for(var i=0,a=n.length;i<a&&(n[i].thumb&&o++,!(o>1));i++);o>1&&e.opts?(e.$button.removeAttr("style").on("click",function(){e.toggle()}),e.isActive=!0):e.$button.hide()},create:function(){var t,o=this,i=o.instance,a=o.opts.parentEl,s=[];o.$grid||(o.$grid=e('<div class="'+n+" "+n+"-"+o.opts.axis+'"></div>').appendTo(i.$refs.container.find(a).addBack().filter(a)),o.$grid.on("click","a",function(){i.jumpTo(e(this).attr("data-index"))})),o.$list||(o.$list=e('<div class="'+n+'__list">').appendTo(o.$grid)),e.each(i.group,function(e,n){t=n.thumb,t||"image"!==n.type||(t=n.src),s.push('<a href="javascript:;" tabindex="0" data-index="'+e+'"'+(t&&t.length?' style="background-image:url('+t+')"':'class="fancybox-thumbs-missing"')+"></a>")}),o.$list[0].innerHTML=s.join(""),"x"===o.opts.axis&&o.$list.width(parseInt(o.$grid.css("padding-right"),10)+i.group.length*o.$list.children().eq(0).outerWidth(!0))},focus:function(t){var e,n,o=this,i=o.$list,a=o.$grid;o.instance.current&&(e=i.children().removeClass("fancybox-thumbs-active").filter('[data-index="'+o.instance.current.index+'"]').addClass("fancybox-thumbs-active"),n=e.position(),"y"===o.opts.axis&&(n.top<0||n.top>i.height()-e.outerHeight())?i.stop().animate({scrollTop:i.scrollTop()+n.top},t):"x"===o.opts.axis&&(n.left<a.scrollLeft()||n.left>a.scrollLeft()+(a.width()-e.outerWidth()))&&i.parent().stop().animate({scrollLeft:n.left},t))},update:function(){var t=this;t.instance.$refs.container.toggleClass("fancybox-show-thumbs",this.isVisible),t.isVisible?(t.$grid||t.create(),t.instance.trigger("onThumbsShow"),t.focus(0)):t.$grid&&t.instance.trigger("onThumbsHide"),t.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({"onInit.fb":function(t,e){var n;e&&!e.Thumbs&&(n=new o(e),n.isActive&&!0===n.opts.autoStart&&n.show())},"beforeShow.fb":function(t,e,n,o){var i=e&&e.Thumbs;i&&i.isVisible&&i.focus(o?0:250)},"afterKeydown.fb":function(t,e,n,o,i){var a=e&&e.Thumbs;a&&a.isActive&&71===i&&(o.preventDefault(),a.toggle())},"beforeClose.fb":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&!1!==n.opts.hideOnClose&&n.$grid.hide()}})}(document,jQuery),function(t,e,n){"use strict";function o(){var e=t.location.hash.substr(1),n=e.split("-"),o=n.length>1&&/^\+?\d+$/.test(n[n.length-1])?parseInt(n.pop(-1),10)||1:1,i=n.join("-");return{hash:e,index:o<1?1:o,gallery:i}}function i(t){""!==t.gallery&&n("[data-fancybox='"+n.escapeSelector(t.gallery)+"']").eq(t.index-1).focus().trigger("click.fb-start")}function a(t){var e,n;return!!t&&(e=t.current?t.current.opts:t.opts,""!==(n=e.hash||(e.$orig?e.$orig.data("fancybox")||e.$orig.data("fancybox-trigger"):""))&&n)}n.escapeSelector||(n.escapeSelector=function(t){return(t+"").replace(/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t})}),n(function(){!1!==n.fancybox.defaults.hash&&(n(e).on({"onInit.fb":function(t,e){var n,i;!1!==e.group[e.currIndex].opts.hash&&(n=o(),(i=a(e))&&n.gallery&&i==n.gallery&&(e.currIndex=n.index-1))},"beforeShow.fb":function(n,o,i,s){var r;i&&!1!==i.opts.hash&&(r=a(o))&&(o.currentHash=r+(o.group.length>1?"-"+(i.index+1):""),t.location.hash!=="#"+o.currentHash&&(s&&!o.origHash&&(o.origHash=t.location.hash),o.hashTimer&&clearTimeout(o.hashTimer),o.hashTimer=setTimeout(function(){"replaceState"in t.history?(t.history[s?"pushState":"replaceState"]({},e.title,t.location.pathname+t.location.search+"#"+o.currentHash),s&&(o.hasCreatedHistory=!0)):t.location.hash=o.currentHash,o.hashTimer=null},300)))},"beforeClose.fb":function(n,o,i){i&&!1!==i.opts.hash&&(clearTimeout(o.hashTimer),
|
13 |
+
o.currentHash&&o.hasCreatedHistory?t.history.back():o.currentHash&&("replaceState"in t.history?t.history.replaceState({},e.title,t.location.pathname+t.location.search+(o.origHash||"")):t.location.hash=o.origHash),o.currentHash=null)}}),n(t).on("hashchange.fb",function(){var t=o(),e=null;n.each(n(".fancybox-container").get().reverse(),function(t,o){var i=n(o).data("FancyBox");if(i&&i.currentHash)return e=i,!1}),e?e.currentHash===t.gallery+"-"+t.index||1===t.index&&e.currentHash==t.gallery||(e.currentHash=null,e.close()):""!==t.gallery&&i(t)}),setTimeout(function(){n.fancybox.getInstance()||i(o())},50))})}(window,document,jQuery),function(t,e){"use strict";var n=(new Date).getTime();e(t).on({"onInit.fb":function(t,e,o){e.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll",function(t){var o=e.current,i=(new Date).getTime();e.group.length<2||!1===o.opts.wheel||"auto"===o.opts.wheel&&"image"!==o.type||(t.preventDefault(),t.stopPropagation(),o.$slide.hasClass("fancybox-animated")||(t=t.originalEvent||t,i-n<250||(n=i,e[(-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail)<0?"next":"previous"]())))})}})}(document,jQuery);
|
14 |
|
15 |
var fv_player_fancybox_paused_players = {};
|
16 |
|
40 |
return '';
|
41 |
}
|
42 |
|
43 |
+
// Fancybox defaults
|
44 |
jQuery.fancybox.defaults.smallBtn = false;
|
45 |
jQuery.fancybox.defaults.toolbar = true;
|
46 |
jQuery.fancybox.defaults.thumbs.hideOnClose = false;
|
47 |
jQuery.fancybox.defaults.caption = fv_player_colorbox_title;
|
48 |
jQuery.fancybox.defaults.afterLoad = fv_fancybox_check_size;
|
49 |
+
jQuery.fancybox.defaults.hash = false;
|
50 |
+
jQuery.fancybox.defaults.buttons = ["slideShow","fullScreen","thumbs","close"];
|
51 |
+
|
52 |
+
jQuery.fancybox.defaults.onThumbsShow = function() {
|
53 |
jQuery(jQuery.fancybox.getInstance().group).each( function(k,v) {
|
54 |
if( v.src.match(/^#wpfp_/) ) {
|
55 |
jQuery('.fancybox-thumbs li[data-index='+k+']').append('<span class="fv-player-fancybox-play-icon">▶</span>');
|
59 |
}
|
60 |
})
|
61 |
}
|
62 |
+
|
63 |
+
// click on image will toggle controls
|
64 |
+
jQuery.fancybox.defaults.clickContent = function(current, event) {
|
65 |
+
return current.type === "image" ? "toggleControls" : false;
|
66 |
+
};
|
67 |
+
|
68 |
+
// double click will zoom image
|
69 |
+
jQuery.fancybox.defaults.dblclickContent = function(current, event) {
|
70 |
+
return current.type === "image" ? "zoom" : false;
|
71 |
+
};
|
72 |
|
73 |
jQuery(document).ready(function() {
|
74 |
jQuery(".colorbox[href^='#']:not([data-cbox-inline]), .lightbox[href^='#']").filter(function () {
|
170 |
return;
|
171 |
}
|
172 |
|
173 |
+
if( e.type == 'afterShow' && api.lightbox_visible() ) return;
|
174 |
|
175 |
+
// if this player was previously paused on fancybox show and it's the currently visible lightbox item, unpause it
|
176 |
+
if ( typeof( fv_player_fancybox_paused_players[ player_id ] ) != 'undefined' && api.lightbox_visible() ) {
|
177 |
was_paused = true;
|
178 |
delete fv_player_fancybox_paused_players[ $e.attr('id') ];
|
179 |
api.resume();
|
185 |
}
|
186 |
|
187 |
if( api.loading ) {
|
188 |
+
api.one('ready',function() {
|
189 |
if ( api.engine.engineName === 'fvyoutube' && api.playing && !was_paused ) {
|
190 |
fv_player_fancybox_paused_players[ $e.attr('id') ] = 1;
|
191 |
api.pause();
|
197 |
|
198 |
jQuery(document).on('afterShow.fb afterClose.fb', fv_lightbox_flowplayer_shutdown);
|
199 |
|
200 |
+
jQuery(window).on( "resize", fv_fancybox_check_size);
|
201 |
|
202 |
if( document.addEventListener ) {
|
203 |
var fv_orientation_change_timer = -1;
|
219 |
jQuery( function() {
|
220 |
if( typeof(flowplayer) != "undefined" ) {
|
221 |
flowplayer( function(api,root) {
|
222 |
+
root = jQuery(root);
|
223 |
+
|
224 |
+
var lightbox_wrap = root.closest('.fv_player_lightbox_hidden'),
|
225 |
+
player = '#' + root.attr('id') + '_container';
|
226 |
+
|
227 |
+
/**
|
228 |
+
* Check if player is lightboxed
|
229 |
+
*
|
230 |
+
* @returns int
|
231 |
+
*/
|
232 |
+
api.is_in_lightbox = function() {
|
233 |
+
return lightbox_wrap.length;
|
234 |
+
};
|
235 |
+
|
236 |
+
/**
|
237 |
+
* Check if lightbox is visible
|
238 |
+
*
|
239 |
+
* @returns int
|
240 |
+
*/
|
241 |
+
api.lightbox_visible = function() {
|
242 |
+
return root.closest('.fancybox-slide--current').length;
|
243 |
+
};
|
244 |
+
|
245 |
+
if( api.is_in_lightbox() ) {
|
246 |
lightbox_wrap.on('click', function(e) {
|
247 |
if( e.target == e.currentTarget) {
|
248 |
jQuery.fancybox.close();
|
265 |
if( fancybox_thumbs ) jQuery('.fancybox-container').addClass('fancybox-show-thumbs');
|
266 |
});
|
267 |
}
|
268 |
+
|
269 |
+
// show lightbox if the player is started by some other way than clicking on the lightbox button - like chapter name
|
270 |
+
api.on('load resume', function (e,api,time) {
|
271 |
+
if( !api.lightbox_visible() ) {
|
272 |
+
jQuery.fancybox.open(jQuery(player))
|
273 |
+
fv_fancybox_check_size();
|
274 |
+
}
|
275 |
+
});
|
276 |
}
|
277 |
});
|
278 |
}
|
330 |
} else {
|
331 |
api.play(index);
|
332 |
}
|
333 |
+
fv_fancybox_check_size();
|
334 |
|
335 |
if( playlist.length && !jQuery(this).data('fancybox') ) {
|
336 |
playlist.find('a[data-fancybox]').eq(0).click();
|
js/linode-object-storage.js
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery( function($) {
|
2 |
+
|
3 |
+
function fv_flowplayer_linode_object_storage_browser_load_assets(bucket, path) {
|
4 |
+
var
|
5 |
+
$this = jQuery(this),
|
6 |
+
$media_frame_content = jQuery('.media-frame-content:visible'),
|
7 |
+
$overlay_div = jQuery('#fv-player-shortcode-editor-preview-spinner').clone().css({
|
8 |
+
'height': '100%'
|
9 |
+
}),
|
10 |
+
ajax_data = {
|
11 |
+
action: "load_linode_object_storage_assets",
|
12 |
+
};
|
13 |
+
|
14 |
+
$this.addClass('active').siblings().removeClass('active');
|
15 |
+
|
16 |
+
$media_frame_content.html($overlay_div);
|
17 |
+
|
18 |
+
if (typeof bucket === 'string' && bucket) {
|
19 |
+
ajax_data['bucket'] = bucket;
|
20 |
+
}
|
21 |
+
if (typeof path === 'string' && path) {
|
22 |
+
ajax_data['path'] = path;
|
23 |
+
}
|
24 |
+
|
25 |
+
jQuery.post(ajaxurl, ajax_data, function (ret) {
|
26 |
+
var renderOptions = {};
|
27 |
+
|
28 |
+
// add errors, if any
|
29 |
+
if (ret.err) {
|
30 |
+
renderOptions['errorMsg'] = ret.err;
|
31 |
+
}
|
32 |
+
|
33 |
+
$media_frame_content.html(renderBrowserPlaceholderHTML(renderOptions));
|
34 |
+
|
35 |
+
jQuery('#media-search-input').parent().hide();
|
36 |
+
|
37 |
+
fv_flowplayer_browser_browse(ret.items, { 'breadcrumbs' : 1 });
|
38 |
+
});
|
39 |
+
|
40 |
+
return false;
|
41 |
+
};
|
42 |
+
|
43 |
+
$(document).on("mediaBrowserOpen", function (event) {
|
44 |
+
fv_flowplayer_media_browser_add_tab('fv_flowplayer_linode_object_storage_browser_media_tab', 'Linode Object Storage', fv_flowplayer_linode_object_storage_browser_load_assets);
|
45 |
+
});
|
46 |
+
});
|
js/media-library-browser-base.js
CHANGED
@@ -1,10 +1,21 @@
|
|
1 |
var
|
2 |
fv_flowplayer_scannedFolders = [],
|
3 |
fv_flowplayer_scannedFiles = [],
|
|
|
|
|
4 |
// object where key->value pairs represent tabId->ajaxAssetsLoadingScript pairs
|
5 |
// ... we use this to load assets (media files) from SDK of the correct browser integration
|
6 |
// depending on which tab is currently active
|
7 |
-
fv_flowplayer_browser_assets_loaders = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
// this thumbnail sizing functionality originally comes from WP JS
|
10 |
function fv_flowplayer_media_browser_setColumns() {
|
@@ -20,6 +31,10 @@ function fv_flowplayer_media_browser_setColumns() {
|
|
20 |
}
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
23 |
function fv_flowplayer_browser_add_load_more_button($fileListUl, loadMoreButtonAction) {
|
24 |
$fileListUl.append('<li tabindex="0" class="attachment" id="overlay-loader-li"></li>');
|
25 |
var $moreDiv = jQuery('<div class="attachment-preview"><div class="loadmore"></div></div>');
|
@@ -124,7 +139,7 @@ function fv_flowplayer_browser_browse(data, options) {
|
|
124 |
fv_flowplayer_scannedFolders.forEach(function(f) {
|
125 |
var name = escapeHTML(f.name).replace(/\/$/,'');
|
126 |
fileList.append( jQuery(
|
127 |
-
'<li class="folders attachment save-ready
|
128 |
+ '<div class="attachment-preview js--select-attachment type-video subtype-mp4 landscape">'
|
129 |
+ '<div class="thumbnail">'
|
130 |
+ '<a href="' + f.path + '" title="' + name + '" class="folders">'
|
@@ -146,7 +161,7 @@ function fv_flowplayer_browser_browse(data, options) {
|
|
146 |
|
147 |
var
|
148 |
name = escapeHTML(f.name),
|
149 |
-
file = jQuery('<li tabindex="0" role="checkbox" aria-label="' + name + '" aria-checked="false" class="folders attachment save-ready
|
150 |
isPicture = name.match(/\.(jpg|jpeg|png|gif)$/),
|
151 |
icon = '';
|
152 |
|
@@ -168,7 +183,7 @@ function fv_flowplayer_browser_browse(data, options) {
|
|
168 |
if ( f.extra.percentage ) {
|
169 |
var percentage = f.extra.percentage;
|
170 |
if( parseInt(percentage) < 5 ) percentage = 5+'%';
|
171 |
-
progress += '<div class="thumbnail-status">Processing</div><div class="thumbnail-progress"><div class="thumbnail-progress-marker" style="width: '+percentage+'"></div></div>';
|
172 |
} else {
|
173 |
progress += '<div class="thumbnail-status-error">Error</div>';
|
174 |
}
|
@@ -237,7 +252,9 @@ function fv_flowplayer_browser_browse(data, options) {
|
|
237 |
|
238 |
// adds new tab on top of the Media Library popup
|
239 |
function fv_flowplayer_media_browser_add_tab(tabId, tabText, tabOnClickCallback, tabAddedCallback, tabClickEventCallback) {
|
240 |
-
|
|
|
|
|
241 |
var
|
242 |
$router = jQuery('.media-router:visible'),
|
243 |
$nativeTabs = $router.find('.media-menu-item:not(.artificial)'),
|
@@ -292,16 +309,14 @@ function fv_flowplayer_media_browser_add_tab(tabId, tabText, tabOnClickCallback,
|
|
292 |
.text(tabText)
|
293 |
.addClass('artificial')
|
294 |
.on('click', function() {
|
295 |
-
|
296 |
-
fv_flowplayer_media_browser_disable_drag_drop(true);
|
297 |
-
|
298 |
-
fv_flowplayer_media_browser_show_upload( jQuery(this).attr('id') );
|
299 |
-
|
300 |
// disable Choose button
|
301 |
jQuery('.media-button-select').prop('disabled', 'disabled');
|
302 |
$router.find('.media-menu-item.active').removeClass('active');
|
303 |
jQuery(this).addClass('active');
|
304 |
|
|
|
|
|
|
|
305 |
// execute tab click function
|
306 |
if (typeof(tabClickEventCallback) == 'function' && !switchClicking) {
|
307 |
tabClickEventCallback();
|
@@ -314,6 +329,12 @@ function fv_flowplayer_media_browser_add_tab(tabId, tabText, tabOnClickCallback,
|
|
314 |
}
|
315 |
} catch(e) {}
|
316 |
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
return tabOnClickCallback();
|
318 |
});
|
319 |
|
@@ -325,6 +346,7 @@ function fv_flowplayer_media_browser_add_tab(tabId, tabText, tabOnClickCallback,
|
|
325 |
tabAddedCallback($item);
|
326 |
}
|
327 |
|
|
|
328 |
}
|
329 |
|
330 |
// if this tab was the last active, make it active again
|
@@ -337,34 +359,55 @@ function fv_flowplayer_media_browser_add_tab(tabId, tabText, tabOnClickCallback,
|
|
337 |
}, 500);
|
338 |
}
|
339 |
} catch(e) {}
|
|
|
|
|
340 |
};
|
341 |
|
342 |
/*
|
343 |
* Disable/enable core WordPress drag&drop uploader
|
344 |
*/
|
345 |
function fv_flowplayer_media_browser_disable_drag_drop( disable ) {
|
346 |
-
var
|
347 |
-
|
348 |
-
|
|
|
|
|
349 |
|
350 |
if( disable ) {
|
351 |
drop_targets.off('drop', fv_flowplayer_media_browser_disable_drag_drop_worker );
|
352 |
drop_targets.on('drop', fv_flowplayer_media_browser_disable_drag_drop_worker );
|
353 |
|
354 |
-
|
|
|
|
|
|
|
|
|
355 |
|
356 |
} else {
|
357 |
drop_targets.off('drop', fv_flowplayer_media_browser_disable_drag_drop_worker );
|
358 |
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
364 |
}
|
365 |
}
|
366 |
|
367 |
-
function fv_flowplayer_media_browser_disable_drag_drop_worker() {
|
|
|
|
|
|
|
368 |
return false;
|
369 |
}
|
370 |
|
@@ -458,8 +501,8 @@ jQuery( function($) {
|
|
458 |
function locateSplashFileObjectForMediaFileHref(href) {
|
459 |
var find = [ fileGetBase(href) ];
|
460 |
|
461 |
-
if( window.
|
462 |
-
Object.keys(
|
463 |
var re = new RegExp(prefix+'$');
|
464 |
if( find[0].match(re) ) {
|
465 |
find.push( find[0].replace(re,'') );
|
@@ -467,21 +510,48 @@ jQuery( function($) {
|
|
467 |
});
|
468 |
}
|
469 |
|
470 |
-
var
|
|
|
|
|
471 |
|
472 |
for( var i in find ) {
|
473 |
for( var j in fv_flowplayer_scannedFiles ) {
|
474 |
-
var
|
475 |
-
|
476 |
-
// image splash files with the same base name that are not poining to the same actual file
|
477 |
// as the one we're checking them against (classic splash files)
|
478 |
-
( f && f.link && f.link.match(/\.(jpg|jpeg|png|gif)$/) && fileGetBase(f.link) == find[i] && f.link != href )
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
//
|
483 |
-
|
484 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
485 |
splash = f;
|
486 |
}
|
487 |
}
|
@@ -515,11 +585,12 @@ jQuery( function($) {
|
|
515 |
splash_name = 'splash';
|
516 |
}
|
517 |
|
518 |
-
|
|
|
519 |
|
520 |
// we remove the signature when we're updating the Editor field, otherwise we leave it in,
|
521 |
// so we can actually preview the splash
|
522 |
-
if (typeof( strip_signature ) != 'undefined' && strip_signature && splash.indexOf('?') > -1) {
|
523 |
splash = splash.substring(0, splash.indexOf('?'));
|
524 |
}
|
525 |
|
@@ -636,9 +707,9 @@ jQuery( function($) {
|
|
636 |
fSize = parseInt($filenameDiv.data('size')),
|
637 |
fSizeTextual = fSize != $filenameDiv.data('size'),
|
638 |
fDuration = parseInt($filenameDiv.data('duration')),
|
|
|
639 |
fExtraDisplayData = $filenameDiv.data('extra');
|
640 |
fExtraDisplayData = fExtraDisplayData.displayData;
|
641 |
-
sizeSuffix = 'bytes';
|
642 |
|
643 |
if (!fSizeTextual) {
|
644 |
// if filesize is too small, show it in KBytes
|
@@ -728,8 +799,8 @@ jQuery( function($) {
|
|
728 |
'\t\t' + ( ($filenameDiv.data('extra') != 'undefined' && $filenameDiv.data('extra').trailer_src != undefined ) ? '<button type="button" class="button media-button trailer-button-select">Select Trailer</button>' : '' ) +
|
729 |
'\t</div>');
|
730 |
|
731 |
-
// if this item is unselectable (i.e. a Coconut job that errored-out), disable the Choose button
|
732 |
-
if ( $
|
733 |
jQuery('.media-button-select').prop('disabled', 'disabled');
|
734 |
} else {
|
735 |
// enable Choose button
|
@@ -784,4 +855,15 @@ jQuery( function($) {
|
|
784 |
return false;
|
785 |
});
|
786 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
787 |
});
|
1 |
var
|
2 |
fv_flowplayer_scannedFolders = [],
|
3 |
fv_flowplayer_scannedFiles = [],
|
4 |
+
|
5 |
+
// TODO: Use some public method instead
|
6 |
// object where key->value pairs represent tabId->ajaxAssetsLoadingScript pairs
|
7 |
// ... we use this to load assets (media files) from SDK of the correct browser integration
|
8 |
// depending on which tab is currently active
|
9 |
+
fv_flowplayer_browser_assets_loaders = {},
|
10 |
+
|
11 |
+
// TODO: Use some public method instead
|
12 |
+
// the following will contain file patterns which will be checked when determining whether we can automatically find
|
13 |
+
// a splash screen for a video file in any given browser
|
14 |
+
//
|
15 |
+
// ... for example, Coconut uses m3u8 files with the same file name as its encoded file names for thumbnails,
|
16 |
+
// so it will need to create an inclusion rule like so:
|
17 |
+
// fv_flowplayer_browser_splash_file_lookup_rules['fv_player_coconut_browser_media_tab']['include'] = ['\.(m3u8)$']
|
18 |
+
fv_flowplayer_browser_splash_file_lookup_rules = {};
|
19 |
|
20 |
// this thumbnail sizing functionality originally comes from WP JS
|
21 |
function fv_flowplayer_media_browser_setColumns() {
|
31 |
}
|
32 |
}
|
33 |
|
34 |
+
function fv_player_get_active_tab() {
|
35 |
+
return jQuery( '.media-menu-item.active:visible' );
|
36 |
+
}
|
37 |
+
|
38 |
function fv_flowplayer_browser_add_load_more_button($fileListUl, loadMoreButtonAction) {
|
39 |
$fileListUl.append('<li tabindex="0" class="attachment" id="overlay-loader-li"></li>');
|
40 |
var $moreDiv = jQuery('<div class="attachment-preview"><div class="loadmore"></div></div>');
|
139 |
fv_flowplayer_scannedFolders.forEach(function(f) {
|
140 |
var name = escapeHTML(f.name).replace(/\/$/,'');
|
141 |
fileList.append( jQuery(
|
142 |
+
'<li class="folders attachment save-ready">'
|
143 |
+ '<div class="attachment-preview js--select-attachment type-video subtype-mp4 landscape">'
|
144 |
+ '<div class="thumbnail">'
|
145 |
+ '<a href="' + f.path + '" title="' + name + '" class="folders">'
|
161 |
|
162 |
var
|
163 |
name = escapeHTML(f.name),
|
164 |
+
file = jQuery('<li tabindex="0" role="checkbox" aria-label="' + name + '" aria-checked="false" class="folders attachment save-ready"></li>'),
|
165 |
isPicture = name.match(/\.(jpg|jpeg|png|gif)$/),
|
166 |
icon = '';
|
167 |
|
183 |
if ( f.extra.percentage ) {
|
184 |
var percentage = f.extra.percentage;
|
185 |
if( parseInt(percentage) < 5 ) percentage = 5+'%';
|
186 |
+
progress += '<div class="thumbnail-status">' + ( f.extra.encoding_job_status == 'playable' ? 'Playable' : 'Processing' ) + '</div><div class="thumbnail-progress"><div class="thumbnail-progress-marker" style="width: '+percentage+'"></div></div>';
|
187 |
} else {
|
188 |
progress += '<div class="thumbnail-status-error">Error</div>';
|
189 |
}
|
252 |
|
253 |
// adds new tab on top of the Media Library popup
|
254 |
function fv_flowplayer_media_browser_add_tab(tabId, tabText, tabOnClickCallback, tabAddedCallback, tabClickEventCallback) {
|
255 |
+
var $tab = jQuery('#' + tabId);
|
256 |
+
|
257 |
+
if (!$tab.length) {
|
258 |
var
|
259 |
$router = jQuery('.media-router:visible'),
|
260 |
$nativeTabs = $router.find('.media-menu-item:not(.artificial)'),
|
309 |
.text(tabText)
|
310 |
.addClass('artificial')
|
311 |
.on('click', function() {
|
|
|
|
|
|
|
|
|
|
|
312 |
// disable Choose button
|
313 |
jQuery('.media-button-select').prop('disabled', 'disabled');
|
314 |
$router.find('.media-menu-item.active').removeClass('active');
|
315 |
jQuery(this).addClass('active');
|
316 |
|
317 |
+
fv_flowplayer_media_browser_disable_drag_drop(true);
|
318 |
+
fv_flowplayer_media_browser_show_upload( jQuery(this).attr('id') );
|
319 |
+
|
320 |
// execute tab click function
|
321 |
if (typeof(tabClickEventCallback) == 'function' && !switchClicking) {
|
322 |
tabClickEventCallback();
|
329 |
}
|
330 |
} catch(e) {}
|
331 |
|
332 |
+
// hide the Drop files to upload modal initially
|
333 |
+
jQuery('.media-modal .uploader-window').css({
|
334 |
+
'display' : 'none',
|
335 |
+
'opacity' : 0,
|
336 |
+
});
|
337 |
+
|
338 |
return tabOnClickCallback();
|
339 |
});
|
340 |
|
346 |
tabAddedCallback($item);
|
347 |
}
|
348 |
|
349 |
+
$tab = $item;
|
350 |
}
|
351 |
|
352 |
// if this tab was the last active, make it active again
|
359 |
}, 500);
|
360 |
}
|
361 |
} catch(e) {}
|
362 |
+
|
363 |
+
return $tab;
|
364 |
};
|
365 |
|
366 |
/*
|
367 |
* Disable/enable core WordPress drag&drop uploader
|
368 |
*/
|
369 |
function fv_flowplayer_media_browser_disable_drag_drop( disable ) {
|
370 |
+
var
|
371 |
+
overlay = jQuery('.media-frame-uploader')
|
372 |
+
overlay_content = jQuery('.media-modal .uploader-window'),
|
373 |
+
drop_targets = jQuery('[id^=__wp-uploader-id-'),
|
374 |
+
upload_supported = fv_player_get_active_tab().hasClass( 'upload_supported' );
|
375 |
|
376 |
if( disable ) {
|
377 |
drop_targets.off('drop', fv_flowplayer_media_browser_disable_drag_drop_worker );
|
378 |
drop_targets.on('drop', fv_flowplayer_media_browser_disable_drag_drop_worker );
|
379 |
|
380 |
+
if ( !upload_supported ) {
|
381 |
+
overlay.css('opacity', 0 );
|
382 |
+
} else {
|
383 |
+
overlay.css('opacity', 1 );
|
384 |
+
}
|
385 |
|
386 |
} else {
|
387 |
drop_targets.off('drop', fv_flowplayer_media_browser_disable_drag_drop_worker );
|
388 |
|
389 |
+
if ( !upload_supported ) {
|
390 |
+
overlay.css('opacity', '' );
|
391 |
+
|
392 |
+
// We need to hide this now as WordPress did make it visible at some point
|
393 |
+
overlay_content.css({
|
394 |
+
'display' : 'none',
|
395 |
+
'opacity' : 0,
|
396 |
+
});
|
397 |
+
} else {
|
398 |
+
overlay.css('opacity', 1 );
|
399 |
+
overlay_content.css({
|
400 |
+
'display' : 'block',
|
401 |
+
'opacity' : 1,
|
402 |
+
});
|
403 |
+
}
|
404 |
}
|
405 |
}
|
406 |
|
407 |
+
function fv_flowplayer_media_browser_disable_drag_drop_worker( e ) {
|
408 |
+
// forward this event via a custom trigger which gets intercepted by our browsers that support file uploads
|
409 |
+
// ... if we just returned false here without the custom trigger, we're basically prevent any drop event anywhere on the Media Browser dialog
|
410 |
+
jQuery( document ).trigger('media_browser_drop_event', [ fv_player_get_active_tab().attr( 'id' ), e.originalEvent.dataTransfer.files ] );
|
411 |
return false;
|
412 |
}
|
413 |
|
501 |
function locateSplashFileObjectForMediaFileHref(href) {
|
502 |
var find = [ fileGetBase(href) ];
|
503 |
|
504 |
+
if( window.fv_player_editor_pro && fv_player_editor_pro.video_qualities ) {
|
505 |
+
Object.keys(fv_player_editor_pro.video_qualities).forEach( function(prefix) {
|
506 |
var re = new RegExp(prefix+'$');
|
507 |
if( find[0].match(re) ) {
|
508 |
find.push( find[0].replace(re,'') );
|
510 |
});
|
511 |
}
|
512 |
|
513 |
+
var
|
514 |
+
splash = false,
|
515 |
+
activeTabId = jQuery( '.media-router:visible .media-menu-item.active' ).attr('id');
|
516 |
|
517 |
for( var i in find ) {
|
518 |
for( var j in fv_flowplayer_scannedFiles ) {
|
519 |
+
var
|
520 |
+
f = fv_flowplayer_scannedFiles[j],
|
521 |
+
// check for image splash files with the same base name that are not poining to the same actual file
|
522 |
// as the one we're checking them against (classic splash files)
|
523 |
+
splashCheck = ( f && f.link && f.link.match(/\.(jpg|jpeg|png|gif)$/) && fileGetBase(f.link) == find[i] && f.link != href );
|
524 |
+
|
525 |
+
// check for any additional inclusions and exclusions in splash checks
|
526 |
+
if ( fv_flowplayer_browser_splash_file_lookup_rules[ activeTabId ] ) {
|
527 |
+
// see if we have additional files to include as splash images
|
528 |
+
if ( fv_flowplayer_browser_splash_file_lookup_rules[ activeTabId ]['include'] ) {
|
529 |
+
// check for each of these file names against current file name
|
530 |
+
for ( var value of fv_flowplayer_browser_splash_file_lookup_rules[ activeTabId ]['include'] ) {
|
531 |
+
var regexCheck = new RegExp( value );
|
532 |
+
if ( f && f.link && f.link.match( regexCheck ) && fileGetBase(f.link) == find[i] ) {
|
533 |
+
// file pattern found, simply set splashCheck to true and bail out to continue with exclusion checks
|
534 |
+
splashCheck = true;
|
535 |
+
break;
|
536 |
+
}
|
537 |
+
}
|
538 |
+
}
|
539 |
+
|
540 |
+
// see if we have additional files to exclude as splash images
|
541 |
+
if ( fv_flowplayer_browser_splash_file_lookup_rules[ activeTabId ]['exclude'] ) {
|
542 |
+
// check for each of these file names against current file name
|
543 |
+
for ( var value of fv_flowplayer_browser_splash_file_lookup_rules[ activeTabId ]['exclude'] ) {
|
544 |
+
var regexCheck = new RegExp( value );
|
545 |
+
if ( f && f.link && !f.link.match( regexCheck ) && fileGetBase(f.link) == find[i] ) {
|
546 |
+
// file pattern found, simply set splashCheck to false and bail out, as we must exclude this file as splash
|
547 |
+
splashCheck = false;
|
548 |
+
break;
|
549 |
+
}
|
550 |
+
}
|
551 |
+
}
|
552 |
+
}
|
553 |
+
|
554 |
+
if ( splashCheck ) {
|
555 |
splash = f;
|
556 |
}
|
557 |
}
|
585 |
splash_name = 'splash';
|
586 |
}
|
587 |
|
588 |
+
// Perhaps it's a older encoding job without splash_large, so check carfully
|
589 |
+
splash = file[splash_name] ? file[splash_name] : file['splash']
|
590 |
|
591 |
// we remove the signature when we're updating the Editor field, otherwise we leave it in,
|
592 |
// so we can actually preview the splash
|
593 |
+
if ( splash && typeof( strip_signature ) != 'undefined' && strip_signature && splash.indexOf('?') > -1) {
|
594 |
splash = splash.substring(0, splash.indexOf('?'));
|
595 |
}
|
596 |
|
707 |
fSize = parseInt($filenameDiv.data('size')),
|
708 |
fSizeTextual = fSize != $filenameDiv.data('size'),
|
709 |
fDuration = parseInt($filenameDiv.data('duration')),
|
710 |
+
sizeSuffix = 'bytes',
|
711 |
fExtraDisplayData = $filenameDiv.data('extra');
|
712 |
fExtraDisplayData = fExtraDisplayData.displayData;
|
|
|
713 |
|
714 |
if (!fSizeTextual) {
|
715 |
// if filesize is too small, show it in KBytes
|
799 |
'\t\t' + ( ($filenameDiv.data('extra') != 'undefined' && $filenameDiv.data('extra').trailer_src != undefined ) ? '<button type="button" class="button media-button trailer-button-select">Select Trailer</button>' : '' ) +
|
800 |
'\t</div>');
|
801 |
|
802 |
+
// if this item is unselectable (i.e. a Coconut job that errored-out or encoding job that's still being processed externally), disable the Choose button
|
803 |
+
if ( $filenameDiv.data('extra') && $filenameDiv.data('extra').disabled ) {
|
804 |
jQuery('.media-button-select').prop('disabled', 'disabled');
|
805 |
} else {
|
806 |
// enable Choose button
|
855 |
return false;
|
856 |
});
|
857 |
|
858 |
+
// listen to a drop event on one of our browser tabs and hide the drop overlay
|
859 |
+
// since WP does not do this for us apart from in its own upload tab
|
860 |
+
$( document ).on( "media_browser_drop_event", function() {
|
861 |
+
if ( fv_player_get_active_tab().hasClass('upload_supported') ) {
|
862 |
+
$( '.media-modal .uploader-window' ).css({
|
863 |
+
'display' : 'none',
|
864 |
+
'opacity' : 0,
|
865 |
+
});
|
866 |
+
}
|
867 |
+
});
|
868 |
+
|
869 |
});
|
js/s3-upload-base.js
CHANGED
@@ -8,11 +8,14 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
8 |
$progressBar,
|
9 |
$progressBarNumber,
|
10 |
$progressBarDiv,
|
|
|
11 |
s3upload = null,
|
12 |
file_select_input_name = options.file_select_input_name,
|
13 |
file_select_input_class = options.file_select_input_class,
|
|
|
14 |
upload_success_message = options.upload_success_message,
|
15 |
-
upload_success_callback = options.upload_success_callback
|
|
|
16 |
|
17 |
function recreate_file_input( input_name, input_class_name ) {
|
18 |
if ( $uploadInput.length ) {
|
@@ -21,7 +24,7 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
21 |
|
22 |
$uploadButton.after('<input type="file" accept=".mp4,.mov,.web,.flv,.avi,.vmw,.avchd,.swf,.mkv,.webm.,mpeg,.mpg" class="fv-player-s3-upload-file-input ' + input_class_name + '" name="' + input_name + '" />');
|
23 |
|
24 |
-
$uploadInput = $('.media-frame-toolbar .media-toolbar-secondary >
|
25 |
$uploadInput.change(function() {
|
26 |
upload( $uploadInput[0].files[0] );
|
27 |
});
|
@@ -49,12 +52,14 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
49 |
s3upload.onServerError = function(command, jqXHR, textStatus, errorThrown) {
|
50 |
$progressDiv.text("Upload failed with server error.");
|
51 |
$progressBarDiv.hide();
|
|
|
52 |
console.log( command, jqXHR, textStatus, errorThrown );
|
53 |
};
|
54 |
|
55 |
s3upload.onS3UploadError = function(xhr) {
|
56 |
$progressDiv.text("Upload failed.");
|
57 |
$progressBarDiv.hide();
|
|
|
58 |
console.log( xhr );
|
59 |
};
|
60 |
|
@@ -89,6 +94,8 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
89 |
};
|
90 |
|
91 |
$progressDiv.text("Preparing upload...");
|
|
|
|
|
92 |
s3upload.start();
|
93 |
}
|
94 |
|
@@ -105,7 +112,6 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
105 |
|
106 |
$(document).on("mediaBrowserOpen", function (event) {
|
107 |
var
|
108 |
-
upload_button_class = options.upload_button_class, //'fv-player-coconut-browser-upload',
|
109 |
upload_button_text = options.upload_button_text, //'Upload to Coconut',
|
110 |
cancel_button_class = options.cancel_button_class, //'fv-player-coconut-browser-upload-cancel',
|
111 |
upload_progress_class = options.upload_progress_class, //'fv-player-coconut-browser-upload-progress',
|
@@ -115,13 +121,13 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
115 |
|
116 |
// add Upload to Coconut button to the media library modal
|
117 |
if ( !$('.' + upload_button_class).length ) {
|
118 |
-
if ( !$('.media-frame-toolbar .media-toolbar-secondary >
|
119 |
-
$('.media-frame-toolbar .media-toolbar-secondary').append('<div id="'+
|
120 |
}
|
121 |
|
122 |
// check if we have the correct player version
|
123 |
if ( !fv_player_coconut_dos_upload_settings.can_use_get_space ) {
|
124 |
-
$('.media-frame-toolbar .media-toolbar-secondary >
|
125 |
|
126 |
$('.' + upload_button_class).click(function() {
|
127 |
alert('This functionality requires the latest version of FV Flowplayer. Please update your WordPress plugins.');
|
@@ -129,7 +135,7 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
129 |
return;
|
130 |
}
|
131 |
|
132 |
-
var $uploadDiv = $('.media-frame-toolbar .media-toolbar-secondary >
|
133 |
|
134 |
var upload_interface = '<div class="fv-player-s3-upload-buttons">'
|
135 |
upload_interface += '<button type="button" class="button media-button button-primary button-large ' + upload_button_class + '">' + upload_button_text + '</button>';
|
@@ -144,7 +150,7 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
144 |
upload_interface += '<div class="fv-player-s3-upload-progress-enclosure ' + upload_progress_bar_enclosure_class + '"><div class="fv-player-s3-upload-progress-bar ' + upload_progress_bar_class + '"></div><div class="fv-player-s3-upload-progress-number ' + upload_progress_bar_number_class + '"></div></div>';
|
145 |
upload_interface += '</div>';
|
146 |
|
147 |
-
$('.media-frame-toolbar .media-toolbar-secondary >
|
148 |
|
149 |
$uploadButton = $uploadDiv.find('.' + upload_button_class);
|
150 |
$uploadInput = $uploadDiv.find('.' + file_select_input_class);
|
@@ -169,6 +175,7 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
169 |
$uploadButton.add( $cancelButton ).toggle();
|
170 |
recreate_file_input( file_select_input_name, file_select_input_class );
|
171 |
$progressDiv.html('Upload cancelled.');
|
|
|
172 |
$progressBarDiv.hide();
|
173 |
});
|
174 |
}
|
@@ -176,10 +183,11 @@ function fv_flowplayer_init_s3_uploader( options ) {
|
|
176 |
|
177 |
return {
|
178 |
update_progress_bar_text: function( txt ) {
|
179 |
-
$progressDiv.
|
180 |
},
|
181 |
hide_progress_bar: function() {
|
182 |
$progressBarDiv.hide();
|
183 |
-
}
|
|
|
184 |
}
|
185 |
}
|
8 |
$progressBar,
|
9 |
$progressBarNumber,
|
10 |
$progressBarDiv,
|
11 |
+
upload_button_class = options.upload_button_class, //'fv-player-coconut-browser-upload',
|
12 |
s3upload = null,
|
13 |
file_select_input_name = options.file_select_input_name,
|
14 |
file_select_input_class = options.file_select_input_class,
|
15 |
+
upload_start_callback = ( typeof( options.upload_start_callback ) == 'function' ? options.upload_start_callback : function() {} ),
|
16 |
upload_success_message = options.upload_success_message,
|
17 |
+
upload_success_callback = options.upload_success_callback,
|
18 |
+
upload_error_callback = ( typeof( options.upload_error_callback ) == 'function' ? options.upload_error_callback : function() {} );
|
19 |
|
20 |
function recreate_file_input( input_name, input_class_name ) {
|
21 |
if ( $uploadInput.length ) {
|
24 |
|
25 |
$uploadButton.after('<input type="file" accept=".mp4,.mov,.web,.flv,.avi,.vmw,.avchd,.swf,.mkv,.webm.,mpeg,.mpg" class="fv-player-s3-upload-file-input ' + input_class_name + '" name="' + input_name + '" />');
|
26 |
|
27 |
+
$uploadInput = $('.media-frame-toolbar .media-toolbar-secondary > #' + upload_button_class + '-wrap .' + input_class_name);
|
28 |
$uploadInput.change(function() {
|
29 |
upload( $uploadInput[0].files[0] );
|
30 |
});
|
52 |
s3upload.onServerError = function(command, jqXHR, textStatus, errorThrown) {
|
53 |
$progressDiv.text("Upload failed with server error.");
|
54 |
$progressBarDiv.hide();
|
55 |
+
upload_error_callback();
|
56 |
console.log( command, jqXHR, textStatus, errorThrown );
|
57 |
};
|
58 |
|
59 |
s3upload.onS3UploadError = function(xhr) {
|
60 |
$progressDiv.text("Upload failed.");
|
61 |
$progressBarDiv.hide();
|
62 |
+
upload_error_callback();
|
63 |
console.log( xhr );
|
64 |
};
|
65 |
|
94 |
};
|
95 |
|
96 |
$progressDiv.text("Preparing upload...");
|
97 |
+
|
98 |
+
upload_start_callback();
|
99 |
s3upload.start();
|
100 |
}
|
101 |
|
112 |
|
113 |
$(document).on("mediaBrowserOpen", function (event) {
|
114 |
var
|
|
|
115 |
upload_button_text = options.upload_button_text, //'Upload to Coconut',
|
116 |
cancel_button_class = options.cancel_button_class, //'fv-player-coconut-browser-upload-cancel',
|
117 |
upload_progress_class = options.upload_progress_class, //'fv-player-coconut-browser-upload-progress',
|
121 |
|
122 |
// add Upload to Coconut button to the media library modal
|
123 |
if ( !$('.' + upload_button_class).length ) {
|
124 |
+
if ( !$('.media-frame-toolbar .media-toolbar-secondary > #'+upload_button_class+'-wrap').length ) {
|
125 |
+
$('.media-frame-toolbar .media-toolbar-secondary').append('<div id="' + upload_button_class + '-wrap" class="upload_buttons" style="display: none" data-tab-id="'+options.tab_id+'"></div>');
|
126 |
}
|
127 |
|
128 |
// check if we have the correct player version
|
129 |
if ( !fv_player_coconut_dos_upload_settings.can_use_get_space ) {
|
130 |
+
$('.media-frame-toolbar .media-toolbar-secondary > #' + upload_button_class + '-wrap').append('<button type="button" class="button media-button button-primary button-large ' + upload_button_class + '">' + upload_button_text + '</button>');
|
131 |
|
132 |
$('.' + upload_button_class).click(function() {
|
133 |
alert('This functionality requires the latest version of FV Flowplayer. Please update your WordPress plugins.');
|
135 |
return;
|
136 |
}
|
137 |
|
138 |
+
var $uploadDiv = $('.media-frame-toolbar .media-toolbar-secondary > #' + upload_button_class + '-wrap');
|
139 |
|
140 |
var upload_interface = '<div class="fv-player-s3-upload-buttons">'
|
141 |
upload_interface += '<button type="button" class="button media-button button-primary button-large ' + upload_button_class + '">' + upload_button_text + '</button>';
|
150 |
upload_interface += '<div class="fv-player-s3-upload-progress-enclosure ' + upload_progress_bar_enclosure_class + '"><div class="fv-player-s3-upload-progress-bar ' + upload_progress_bar_class + '"></div><div class="fv-player-s3-upload-progress-number ' + upload_progress_bar_number_class + '"></div></div>';
|
151 |
upload_interface += '</div>';
|
152 |
|
153 |
+
$('.media-frame-toolbar .media-toolbar-secondary > #' + upload_button_class + '-wrap').append( upload_interface);
|
154 |
|
155 |
$uploadButton = $uploadDiv.find('.' + upload_button_class);
|
156 |
$uploadInput = $uploadDiv.find('.' + file_select_input_class);
|
175 |
$uploadButton.add( $cancelButton ).toggle();
|
176 |
recreate_file_input( file_select_input_name, file_select_input_class );
|
177 |
$progressDiv.html('Upload cancelled.');
|
178 |
+
upload_error_callback();
|
179 |
$progressBarDiv.hide();
|
180 |
});
|
181 |
}
|
183 |
|
184 |
return {
|
185 |
update_progress_bar_text: function( txt ) {
|
186 |
+
$progressDiv.html( txt );
|
187 |
},
|
188 |
hide_progress_bar: function() {
|
189 |
$progressBarDiv.hide();
|
190 |
+
},
|
191 |
+
upload: upload,
|
192 |
}
|
193 |
}
|
js/shortcode-editor.js
CHANGED
@@ -13,6 +13,7 @@ var fv_player_editor_matcher = {
|
|
13 |
jQuery(function() {
|
14 |
// The actual editor
|
15 |
window.fv_player_editor = (function($) {
|
|
|
16 |
|
17 |
var
|
18 |
$doc = $(document),
|
@@ -215,6 +216,8 @@ jQuery(function() {
|
|
215 |
});*/
|
216 |
|
217 |
if( jQuery().fv_player_box ) {
|
|
|
|
|
218 |
$doc.on( 'click', '.fv-wordpress-flowplayer-button, .fv-player-editor-button, .fv-player-edit', function(e) {
|
219 |
// make the TinyMCE editor below this button active,
|
220 |
// as otherwise we would be inserting into the last TinyMCE instance
|
@@ -266,6 +269,8 @@ jQuery(function() {
|
|
266 |
onComplete : function() {
|
267 |
overlay_show('loading');
|
268 |
|
|
|
|
|
269 |
$.post(ajaxurl, {
|
270 |
action: 'fv_player_db_export',
|
271 |
playerID : $element.data('player_id'),
|
@@ -336,6 +341,8 @@ jQuery(function() {
|
|
336 |
$element_td.find('a, span').hide();
|
337 |
$element.after($spinner);
|
338 |
|
|
|
|
|
339 |
jQuery.post(ajaxurl, {
|
340 |
action: "fv_player_db_remove",
|
341 |
nonce: $element.data('nonce'),
|
@@ -372,6 +379,8 @@ jQuery(function() {
|
|
372 |
.hide()
|
373 |
.after($spinner);
|
374 |
|
|
|
|
|
375 |
$.post(ajaxurl, {
|
376 |
action: "fv_player_db_clone",
|
377 |
nonce: $element.data('nonce'),
|
@@ -598,6 +607,9 @@ jQuery(function() {
|
|
598 |
if( jQuery('#remove-post-thumbnail').length > 0 ){
|
599 |
return;
|
600 |
}
|
|
|
|
|
|
|
601 |
jQuery.post(ajaxurl, {
|
602 |
action:"set-post-thumbnail",
|
603 |
post_id: fv_flowplayer_set_post_thumbnail_id,
|
@@ -800,6 +812,8 @@ jQuery(function() {
|
|
800 |
|
801 |
$('.fv-player-save-error').hide();
|
802 |
|
|
|
|
|
803 |
$.post(ajaxurl+'?fv_player_db_save=1', {
|
804 |
action: 'fv_player_db_save',
|
805 |
data: JSON.stringify(ajax_save_this_please),
|
@@ -997,6 +1011,9 @@ jQuery(function() {
|
|
997 |
|
998 |
fv_player_editor.meta_data_load_started();
|
999 |
var ajax_call = function () {
|
|
|
|
|
|
|
1000 |
$element.data('fv_player_video_data_ajax', jQuery.post(ajaxurl, {
|
1001 |
action: 'fv_wp_flowplayer_retrieve_video_data',
|
1002 |
video_url: $element.val(),
|
@@ -1364,6 +1381,8 @@ jQuery(function() {
|
|
1364 |
// show loader
|
1365 |
overlay_show('loading');
|
1366 |
|
|
|
|
|
1367 |
$.post(ajaxurl, {
|
1368 |
// TODO: Nonce
|
1369 |
action: 'fv_player_db_retrieve_all_players_for_dropdown',
|
@@ -1799,6 +1818,13 @@ jQuery(function() {
|
|
1799 |
return data;
|
1800 |
}
|
1801 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1802 |
/*
|
1803 |
* Closing the editor
|
1804 |
* * updates the wp-admin -> FV Player screen
|
@@ -1910,8 +1936,31 @@ jQuery(function() {
|
|
1910 |
is_gutenberg = $(editor_button_clicked).parents('.fv-player-gutenberg').length;
|
1911 |
|
1912 |
if (!db_id) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1913 |
// custom Field or Widget
|
1914 |
-
if (field.length || jQuery('#widget-widget_fvplayer-' + widget_id + '-text').length) {
|
|
|
|
|
1915 |
// this is a horrible hack as it adds the hidden marker to the otherwise clean text field value
|
1916 |
// just to make sure the shortcode varible below is parsed properly.
|
1917 |
// But it allows some extra text to be entered into the text widget, so for now - ok
|
@@ -1921,8 +1970,11 @@ jQuery(function() {
|
|
1921 |
editor_content = '<' + helper_tag + ' rel="FCKFVWPFlowplayerPlaceholder">­</' + helper_tag + '>' + editor_content + '';
|
1922 |
}
|
1923 |
|
1924 |
-
|
1925 |
-
|
|
|
|
|
|
|
1926 |
var position = jQuery('#content:not([aria-hidden=true])').prop('selectionStart');
|
1927 |
|
1928 |
// look for start of shortcode
|
@@ -1943,22 +1995,13 @@ jQuery(function() {
|
|
1943 |
// TODO: It would be better to use #fv_player_editor_{random number}# and remember it for the editing session
|
1944 |
editor_content = editor_content.slice(0, position) + '#fvp_placeholder#' + editor_content.slice(position);
|
1945 |
|
1946 |
-
// Edit button on wp-admin -> FV Player screen
|
1947 |
-
} else if (is_fv_player_screen_edit(editor_button_clicked)) {
|
1948 |
-
current_player_db_id = $(editor_button_clicked).data('player_id');
|
1949 |
|
1950 |
-
|
1951 |
-
editor_content = '[fvplayer id="' + current_player_db_id + '"]';
|
1952 |
-
shortcode = [editor_content];
|
1953 |
|
1954 |
-
|
1955 |
-
|
1956 |
-
|
1957 |
-
editor_content = '';
|
1958 |
-
shortcode = '';
|
1959 |
|
1960 |
-
// Foliopress WYSIWYG
|
1961 |
-
} else if (instance_tinymce == undefined || (typeof tinyMCE !== 'undefined' && tinyMCE.activeEditor.isHidden())) {
|
1962 |
editor_content = instance_fp_wysiwyg.GetHTML();
|
1963 |
if (editor_content.match(fv_wp_flowplayer_re_insert) == null) {
|
1964 |
instance_fp_wysiwyg.InsertHtml('<' + fvwpflowplayer_helper_tag + ' rel="FCKFVWPFlowplayerPlaceholder">­</' + fvwpflowplayer_helper_tag + '>');
|
@@ -1966,6 +2009,8 @@ jQuery(function() {
|
|
1966 |
}
|
1967 |
|
1968 |
} else {
|
|
|
|
|
1969 |
// TinyMCE in Visual Mode
|
1970 |
editor_content = instance_tinymce.getContent();
|
1971 |
instance_tinymce.settings.validate = false;
|
@@ -1995,6 +2040,8 @@ jQuery(function() {
|
|
1995 |
// but don't replace editor_content, since we'll need that to be actually updated
|
1996 |
// rather then set to a player ID
|
1997 |
if (db_id) {
|
|
|
|
|
1998 |
content = db_id;
|
1999 |
|
2000 |
// we loose the #fvp_placeholder# placeholder in TinyMCE text mode, so let's re-add it here
|
@@ -2043,6 +2090,8 @@ jQuery(function() {
|
|
2043 |
}
|
2044 |
|
2045 |
if( shortcode != null && typeof(shortcode) != 'undefined' && typeof(shortcode[0]) != 'undefined') {
|
|
|
|
|
2046 |
// check for new, DB-based player shortcode
|
2047 |
var result = /fvplayer.* id="([\d,]+)"/g.exec(shortcode);
|
2048 |
if (result !== null) {
|
@@ -2060,6 +2109,8 @@ jQuery(function() {
|
|
2060 |
// in WP heartbeat
|
2061 |
current_player_db_id = result[1];
|
2062 |
|
|
|
|
|
2063 |
if (edit_lock_removal[result[1]]) {
|
2064 |
delete edit_lock_removal[result[1]];
|
2065 |
}
|
@@ -2076,13 +2127,17 @@ jQuery(function() {
|
|
2076 |
|
2077 |
// now load playlist data
|
2078 |
// load video data via an AJAX call
|
2079 |
-
|
|
|
|
|
2080 |
action : 'fv_player_db_load',
|
2081 |
nonce : fv_player_editor_conf.db_load_nonce,
|
2082 |
playerID : result[1]
|
2083 |
}, function(response) {
|
2084 |
var vids = response['videos'];
|
2085 |
|
|
|
|
|
2086 |
if (response) {
|
2087 |
if( typeof(response) != "object" ) {
|
2088 |
overlay_show('message', 'Error: '+response);
|
@@ -2336,6 +2391,8 @@ jQuery(function() {
|
|
2336 |
}
|
2337 |
});
|
2338 |
} else {
|
|
|
|
|
2339 |
$doc.trigger('fv-player-editor-non-db-shortcode');
|
2340 |
// ordinary text shortcode in the editor
|
2341 |
var shortcode_parse_fix = shortcode.replace(/(popup|ad)='[^']*?'/g, '');
|
@@ -2630,6 +2687,8 @@ jQuery(function() {
|
|
2630 |
}
|
2631 |
|
2632 |
} else {
|
|
|
|
|
2633 |
jQuery(document).trigger('fv_flowplayer_shortcode_new');
|
2634 |
shortcode_remains = '';
|
2635 |
fix_save_btn_text();
|
@@ -2748,6 +2807,8 @@ jQuery(function() {
|
|
2748 |
ajax_data['status'] = 'published';
|
2749 |
}
|
2750 |
|
|
|
|
|
2751 |
// save data
|
2752 |
jQuery.post(ajaxurl, {
|
2753 |
action: 'fv_player_db_save',
|
@@ -3437,6 +3498,8 @@ jQuery(function() {
|
|
3437 |
|
3438 |
overlay_show('loading');
|
3439 |
|
|
|
|
|
3440 |
jQuery.post(ajaxurl, {
|
3441 |
action: 'fv_player_db_import',
|
3442 |
nonce: fv_player_editor_conf.db_import_nonce,
|
13 |
jQuery(function() {
|
14 |
// The actual editor
|
15 |
window.fv_player_editor = (function($) {
|
16 |
+
debug_log('Loading...');
|
17 |
|
18 |
var
|
19 |
$doc = $(document),
|
216 |
});*/
|
217 |
|
218 |
if( jQuery().fv_player_box ) {
|
219 |
+
debug_log('Attaching click actions...');
|
220 |
+
|
221 |
$doc.on( 'click', '.fv-wordpress-flowplayer-button, .fv-player-editor-button, .fv-player-edit', function(e) {
|
222 |
// make the TinyMCE editor below this button active,
|
223 |
// as otherwise we would be inserting into the last TinyMCE instance
|
269 |
onComplete : function() {
|
270 |
overlay_show('loading');
|
271 |
|
272 |
+
debug_log('Running fv_player_db_export Ajax.');
|
273 |
+
|
274 |
$.post(ajaxurl, {
|
275 |
action: 'fv_player_db_export',
|
276 |
playerID : $element.data('player_id'),
|
341 |
$element_td.find('a, span').hide();
|
342 |
$element.after($spinner);
|
343 |
|
344 |
+
debug_log('Running fv_player_db_remove Ajax.');
|
345 |
+
|
346 |
jQuery.post(ajaxurl, {
|
347 |
action: "fv_player_db_remove",
|
348 |
nonce: $element.data('nonce'),
|
379 |
.hide()
|
380 |
.after($spinner);
|
381 |
|
382 |
+
debug_log('Running fv_player_db_clone Ajax.');
|
383 |
+
|
384 |
$.post(ajaxurl, {
|
385 |
action: "fv_player_db_clone",
|
386 |
nonce: $element.data('nonce'),
|
607 |
if( jQuery('#remove-post-thumbnail').length > 0 ){
|
608 |
return;
|
609 |
}
|
610 |
+
|
611 |
+
debug_log('Running set-post-thumbnail Ajax.');
|
612 |
+
|
613 |
jQuery.post(ajaxurl, {
|
614 |
action:"set-post-thumbnail",
|
615 |
post_id: fv_flowplayer_set_post_thumbnail_id,
|
812 |
|
813 |
$('.fv-player-save-error').hide();
|
814 |
|
815 |
+
debug_log('Running fv_player_db_save Ajax.');
|
816 |
+
|
817 |
$.post(ajaxurl+'?fv_player_db_save=1', {
|
818 |
action: 'fv_player_db_save',
|
819 |
data: JSON.stringify(ajax_save_this_please),
|
1011 |
|
1012 |
fv_player_editor.meta_data_load_started();
|
1013 |
var ajax_call = function () {
|
1014 |
+
|
1015 |
+
debug_log('Running fv_wp_flowplayer_retrieve_video_data Ajax.');
|
1016 |
+
|
1017 |
$element.data('fv_player_video_data_ajax', jQuery.post(ajaxurl, {
|
1018 |
action: 'fv_wp_flowplayer_retrieve_video_data',
|
1019 |
video_url: $element.val(),
|
1381 |
// show loader
|
1382 |
overlay_show('loading');
|
1383 |
|
1384 |
+
debug_log('Running fv_player_db_retrieve_all_players_for_dropdown Ajax.');
|
1385 |
+
|
1386 |
$.post(ajaxurl, {
|
1387 |
// TODO: Nonce
|
1388 |
action: 'fv_player_db_retrieve_all_players_for_dropdown',
|
1818 |
return data;
|
1819 |
}
|
1820 |
|
1821 |
+
function debug_log( message, details ) {
|
1822 |
+
console.log( 'FV Player Editor: '+message);
|
1823 |
+
if( details ) {
|
1824 |
+
console.log(details);
|
1825 |
+
}
|
1826 |
+
}
|
1827 |
+
|
1828 |
/*
|
1829 |
* Closing the editor
|
1830 |
* * updates the wp-admin -> FV Player screen
|
1936 |
is_gutenberg = $(editor_button_clicked).parents('.fv-player-gutenberg').length;
|
1937 |
|
1938 |
if (!db_id) {
|
1939 |
+
// Edit button on wp-admin -> FV Player screen
|
1940 |
+
if (is_fv_player_screen_edit(editor_button_clicked)) {
|
1941 |
+
current_player_db_id = $(editor_button_clicked).data('player_id');
|
1942 |
+
|
1943 |
+
debug_log('Loading for FV Player screen, player id: '+current_player_db_id );
|
1944 |
+
|
1945 |
+
// create an artificial shortcode from which we can extract the actual player ID later below
|
1946 |
+
editor_content = '[fvplayer id="' + current_player_db_id + '"]';
|
1947 |
+
shortcode = [editor_content];
|
1948 |
+
}
|
1949 |
+
|
1950 |
+
// Add new button on wp-admin -> FV Player screen
|
1951 |
+
else if (is_fv_player_screen_add_new(editor_button_clicked)) {
|
1952 |
+
debug_log('Loading for FV Player screen, new player' );
|
1953 |
+
|
1954 |
+
// create empty shortcode for Add New button on the list page
|
1955 |
+
editor_content = '';
|
1956 |
+
shortcode = '';
|
1957 |
+
|
1958 |
+
}
|
1959 |
+
|
1960 |
// custom Field or Widget
|
1961 |
+
else if (field.length || jQuery('#widget-widget_fvplayer-' + widget_id + '-text').length) {
|
1962 |
+
debug_log('Loading for custom field or a widget...');
|
1963 |
+
|
1964 |
// this is a horrible hack as it adds the hidden marker to the otherwise clean text field value
|
1965 |
// just to make sure the shortcode varible below is parsed properly.
|
1966 |
// But it allows some extra text to be entered into the text widget, so for now - ok
|
1970 |
editor_content = '<' + helper_tag + ' rel="FCKFVWPFlowplayerPlaceholder">­</' + helper_tag + '>' + editor_content + '';
|
1971 |
}
|
1972 |
|
1973 |
+
}
|
1974 |
+
// TinyMCE in Text Mode
|
1975 |
+
else if (typeof (FCKeditorAPI) == 'undefined' && jQuery('#content:not([aria-hidden=true])').length) {
|
1976 |
+
debug_log('Loading for TinyMCE in Text Mode...');
|
1977 |
+
|
1978 |
var position = jQuery('#content:not([aria-hidden=true])').prop('selectionStart');
|
1979 |
|
1980 |
// look for start of shortcode
|
1995 |
// TODO: It would be better to use #fv_player_editor_{random number}# and remember it for the editing session
|
1996 |
editor_content = editor_content.slice(0, position) + '#fvp_placeholder#' + editor_content.slice(position);
|
1997 |
|
|
|
|
|
|
|
1998 |
|
1999 |
+
}
|
|
|
|
|
2000 |
|
2001 |
+
// Foliopress WYSIWYG
|
2002 |
+
else if (instance_tinymce == undefined || (typeof tinyMCE !== 'undefined' && tinyMCE.activeEditor.isHidden())) {
|
2003 |
+
debug_log('Loading for Foliopress WYSIWYG...' );
|
|
|
|
|
2004 |
|
|
|
|
|
2005 |
editor_content = instance_fp_wysiwyg.GetHTML();
|
2006 |
if (editor_content.match(fv_wp_flowplayer_re_insert) == null) {
|
2007 |
instance_fp_wysiwyg.InsertHtml('<' + fvwpflowplayer_helper_tag + ' rel="FCKFVWPFlowplayerPlaceholder">­</' + fvwpflowplayer_helper_tag + '>');
|
2009 |
}
|
2010 |
|
2011 |
} else {
|
2012 |
+
debug_log('Loading for TinyMCE in Visual Mode...' );
|
2013 |
+
|
2014 |
// TinyMCE in Visual Mode
|
2015 |
editor_content = instance_tinymce.getContent();
|
2016 |
instance_tinymce.settings.validate = false;
|
2040 |
// but don't replace editor_content, since we'll need that to be actually updated
|
2041 |
// rather then set to a player ID
|
2042 |
if (db_id) {
|
2043 |
+
debug_log('Loading for player id: '+db_id );
|
2044 |
+
|
2045 |
content = db_id;
|
2046 |
|
2047 |
// we loose the #fvp_placeholder# placeholder in TinyMCE text mode, so let's re-add it here
|
2090 |
}
|
2091 |
|
2092 |
if( shortcode != null && typeof(shortcode) != 'undefined' && typeof(shortcode[0]) != 'undefined') {
|
2093 |
+
debug_log('Loading shortcode: '+shortcode );
|
2094 |
+
|
2095 |
// check for new, DB-based player shortcode
|
2096 |
var result = /fvplayer.* id="([\d,]+)"/g.exec(shortcode);
|
2097 |
if (result !== null) {
|
2109 |
// in WP heartbeat
|
2110 |
current_player_db_id = result[1];
|
2111 |
|
2112 |
+
debug_log('Loading shortcode player id: '+current_player_db_id );
|
2113 |
+
|
2114 |
if (edit_lock_removal[result[1]]) {
|
2115 |
delete edit_lock_removal[result[1]];
|
2116 |
}
|
2127 |
|
2128 |
// now load playlist data
|
2129 |
// load video data via an AJAX call
|
2130 |
+
debug_log('Running fv_player_db_load Ajax.');
|
2131 |
+
|
2132 |
+
fv_player_shortcode_editor_ajax = jQuery.post(ajaxurl+'?fv_player_db_load', {
|
2133 |
action : 'fv_player_db_load',
|
2134 |
nonce : fv_player_editor_conf.db_load_nonce,
|
2135 |
playerID : result[1]
|
2136 |
}, function(response) {
|
2137 |
var vids = response['videos'];
|
2138 |
|
2139 |
+
debug_log('Finished fv_player_db_load Ajax.',response);
|
2140 |
+
|
2141 |
if (response) {
|
2142 |
if( typeof(response) != "object" ) {
|
2143 |
overlay_show('message', 'Error: '+response);
|
2391 |
}
|
2392 |
});
|
2393 |
} else {
|
2394 |
+
debug_log('Loading shortcode without player id...');
|
2395 |
+
|
2396 |
$doc.trigger('fv-player-editor-non-db-shortcode');
|
2397 |
// ordinary text shortcode in the editor
|
2398 |
var shortcode_parse_fix = shortcode.replace(/(popup|ad)='[^']*?'/g, '');
|
2687 |
}
|
2688 |
|
2689 |
} else {
|
2690 |
+
debug_log('New player...' );
|
2691 |
+
|
2692 |
jQuery(document).trigger('fv_flowplayer_shortcode_new');
|
2693 |
shortcode_remains = '';
|
2694 |
fix_save_btn_text();
|
2807 |
ajax_data['status'] = 'published';
|
2808 |
}
|
2809 |
|
2810 |
+
debug_log('Running fv_player_db_save Ajax.');
|
2811 |
+
|
2812 |
// save data
|
2813 |
jQuery.post(ajaxurl, {
|
2814 |
action: 'fv_player_db_save',
|
3498 |
|
3499 |
overlay_show('loading');
|
3500 |
|
3501 |
+
debug_log('Running fv_player_db_import Ajax.');
|
3502 |
+
|
3503 |
jQuery.post(ajaxurl, {
|
3504 |
action: 'fv_player_db_import',
|
3505 |
nonce: fv_player_editor_conf.db_import_nonce,
|
js/video-checker.js
CHANGED
@@ -215,6 +215,10 @@ function fv_wp_flowplayer_admin_show_notice( id ) {
|
|
215 |
jQuery(this).toggleClass("is-open", is_open );
|
216 |
jQuery(this).find(".fv-player-video-checker-details").toggle( is_open );
|
217 |
|
|
|
|
|
|
|
|
|
218 |
root.toggleClass( 'has-video-checker', is_open );
|
219 |
|
220 |
api.disable( is_open );
|
@@ -225,6 +229,7 @@ function fv_wp_flowplayer_admin_support_mail( hash, button ) {
|
|
225 |
jQuery('.fv_flowplayer_submit_error').remove();
|
226 |
|
227 |
var comment_text = jQuery('#wpfp_support_'+hash).val();
|
|
|
228 |
var comment_words = comment_text.split(/\s/);
|
229 |
if( comment_words.length == 0 || comment_text.match(/Enter your comment/) ) {
|
230 |
jQuery('#wpfp_support_'+hash).before('<p class="fv_flowplayer_submit_error" style="display:none; "><strong>'+fv_flowplayer_translations.what_is_wrong+'</strong></p>');
|
@@ -245,14 +250,16 @@ function fv_wp_flowplayer_admin_support_mail( hash, button ) {
|
|
245 |
fv_player.ajaxurl,
|
246 |
{
|
247 |
action: 'fv_wp_flowplayer_support_mail',
|
|
|
248 |
comment: comment_text,
|
249 |
notice: jQuery('#wpfp_notice_'+hash+' .mail-content-notice').html(),
|
250 |
details: jQuery('#wpfp_notice_'+hash+' .mail-content-details').html()
|
251 |
},
|
252 |
function( response ) {
|
253 |
jQuery('#wpfp_spin_'+hash).hide();
|
|
|
254 |
jQuery(button).removeAttr("disabled");
|
255 |
jQuery(button).after(' Message sent');
|
256 |
-
}
|
257 |
);
|
258 |
}
|
215 |
jQuery(this).toggleClass("is-open", is_open );
|
216 |
jQuery(this).find(".fv-player-video-checker-details").toggle( is_open );
|
217 |
|
218 |
+
if( is_open ) {
|
219 |
+
jQuery('#fv_wp_fp_notice_'+id).find('input').show();
|
220 |
+
}
|
221 |
+
|
222 |
root.toggleClass( 'has-video-checker', is_open );
|
223 |
|
224 |
api.disable( is_open );
|
229 |
jQuery('.fv_flowplayer_submit_error').remove();
|
230 |
|
231 |
var comment_text = jQuery('#wpfp_support_'+hash).val();
|
232 |
+
var status_text = jQuery('#wpfp_notice_'+hash+'.fv-player-video-checker .video-checker-result').text();
|
233 |
var comment_words = comment_text.split(/\s/);
|
234 |
if( comment_words.length == 0 || comment_text.match(/Enter your comment/) ) {
|
235 |
jQuery('#wpfp_support_'+hash).before('<p class="fv_flowplayer_submit_error" style="display:none; "><strong>'+fv_flowplayer_translations.what_is_wrong+'</strong></p>');
|
250 |
fv_player.ajaxurl,
|
251 |
{
|
252 |
action: 'fv_wp_flowplayer_support_mail',
|
253 |
+
status: status_text,
|
254 |
comment: comment_text,
|
255 |
notice: jQuery('#wpfp_notice_'+hash+' .mail-content-notice').html(),
|
256 |
details: jQuery('#wpfp_notice_'+hash+' .mail-content-details').html()
|
257 |
},
|
258 |
function( response ) {
|
259 |
jQuery('#wpfp_spin_'+hash).hide();
|
260 |
+
jQuery('#fv_wp_fp_notice_'+hash).find('input').hide();
|
261 |
jQuery(button).removeAttr("disabled");
|
262 |
jQuery(button).after(' Message sent');
|
263 |
+
}
|
264 |
);
|
265 |
}
|
languages/fv-wordpress-flowplayer-cs_CZ.mo
CHANGED
Binary file
|
languages/fv-wordpress-flowplayer-cs_CZ.po
CHANGED
@@ -1,15 +1,17 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: FV WordPress Flowplayer v.6.0.3.4\n"
|
4 |
-
"
|
5 |
-
"
|
|
|
6 |
"Last-Translator: Polak Maros <polak.maros@foliovision.com>\n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: cs\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"
|
|
|
13 |
"X-Poedit-KeywordsList: __;_e;_n\n"
|
14 |
"X-Poedit-Basepath: .\n"
|
15 |
"X-Poedit-SourceCharset: UTF-8\n"
|
@@ -2208,6 +2210,27 @@ msgstr ""
|
|
2208 |
msgid "Ad Size"
|
2209 |
msgstr ""
|
2210 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2211 |
#~ msgid ""
|
2212 |
#~ "FV Wordpress Flowplayer has found old shortcodes in the content of your "
|
2213 |
#~ "posts. <a href=\"%1$s\">Run the conversion script.</a>"
|
@@ -2431,20 +2454,616 @@ msgstr ""
|
|
2431 |
#~ "Flowplayer offers 98% coverage even on mobile devices."
|
2432 |
#~ msgstr "sadsa"
|
2433 |
|
2434 |
-
|
2435 |
-
|
|
|
2436 |
|
2437 |
-
msgid "
|
2438 |
-
msgstr "
|
2439 |
|
2440 |
-
msgid "
|
2441 |
-
msgstr "
|
2442 |
|
2443 |
-
msgid "
|
2444 |
-
msgstr "
|
2445 |
|
2446 |
-
|
2447 |
-
|
|
|
|
|
|
|
2448 |
|
2449 |
-
|
2450 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: FV WordPress Flowplayer v.6.0.3.4\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2021-10-21 10:28+0100\n"
|
6 |
+
"PO-Revision-Date: 2021-10-21 10:28+0100\n"
|
7 |
"Last-Translator: Polak Maros <polak.maros@foliovision.com>\n"
|
8 |
"Language-Team: \n"
|
9 |
"Language: cs\n"
|
10 |
"MIME-Version: 1.0\n"
|
11 |
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: \n"
|
14 |
+
"X-Generator: Eazy Po 0.9.5.3\n"
|
15 |
"X-Poedit-KeywordsList: __;_e;_n\n"
|
16 |
"X-Poedit-Basepath: .\n"
|
17 |
"X-Poedit-SourceCharset: UTF-8\n"
|
2210 |
msgid "Ad Size"
|
2211 |
msgstr ""
|
2212 |
|
2213 |
+
msgid "All"
|
2214 |
+
msgstr "Vše"
|
2215 |
+
|
2216 |
+
msgid "Play All"
|
2217 |
+
msgstr "Přehrát vše"
|
2218 |
+
|
2219 |
+
msgid "Replay Playlist"
|
2220 |
+
msgstr "Opakuj playlist"
|
2221 |
+
|
2222 |
+
msgid "Repeat Track"
|
2223 |
+
msgstr "Opakuj video"
|
2224 |
+
|
2225 |
+
msgid "Shuffle Playlist"
|
2226 |
+
msgstr "Náhodný výběr"
|
2227 |
+
|
2228 |
+
msgid "Item %d."
|
2229 |
+
msgstr "Video %d."
|
2230 |
+
|
2231 |
+
msgid "Click to unmute"
|
2232 |
+
msgstr "Zapnout zvuk"
|
2233 |
+
|
2234 |
#~ msgid ""
|
2235 |
#~ "FV Wordpress Flowplayer has found old shortcodes in the content of your "
|
2236 |
#~ "posts. <a href=\"%1$s\">Run the conversion script.</a>"
|
2454 |
#~ "Flowplayer offers 98% coverage even on mobile devices."
|
2455 |
#~ msgstr "sadsa"
|
2456 |
|
2457 |
+
#, php-format
|
2458 |
+
#~ msgid "FV Player: Please upgrade to FV Player Pro version %s or above!"
|
2459 |
+
#~ msgstr ""
|
2460 |
|
2461 |
+
#~ msgid "Embed feature not supported in editor preview"
|
2462 |
+
#~ msgstr ""
|
2463 |
|
2464 |
+
#~ msgid "Link feature not supported in editor preview"
|
2465 |
+
#~ msgstr ""
|
2466 |
|
2467 |
+
#~ msgid "Video loading has stalled, click to reload"
|
2468 |
+
#~ msgstr ""
|
2469 |
|
2470 |
+
#, php-format
|
2471 |
+
#~ msgid "%s day"
|
2472 |
+
#~ msgid_plural "%s days"
|
2473 |
+
#~ msgstr[0] ""
|
2474 |
+
#~ msgstr[1] ""
|
2475 |
|
2476 |
+
#, php-format
|
2477 |
+
#~ msgid "%s hour"
|
2478 |
+
#~ msgid_plural "%s hours"
|
2479 |
+
#~ msgstr[0] ""
|
2480 |
+
#~ msgstr[1] ""
|
2481 |
+
|
2482 |
+
#, php-format
|
2483 |
+
#~ msgid "%s min"
|
2484 |
+
#~ msgid_plural "%s mins"
|
2485 |
+
#~ msgstr[0] ""
|
2486 |
+
#~ msgstr[1] ""
|
2487 |
+
|
2488 |
+
#, php-format
|
2489 |
+
#~ msgid "%s second"
|
2490 |
+
#~ msgid_plural "%s seconds"
|
2491 |
+
#~ msgstr[0] ""
|
2492 |
+
#~ msgstr[1] ""
|
2493 |
+
|
2494 |
+
#, php-format
|
2495 |
+
#~ msgid "%1$s and %2$s"
|
2496 |
+
#~ msgstr ""
|
2497 |
+
|
2498 |
+
#~ msgid "FV Player 7.5"
|
2499 |
+
#~ msgstr ""
|
2500 |
+
|
2501 |
+
#~ msgid "Thanks for letting me know!"
|
2502 |
+
#~ msgstr ""
|
2503 |
+
|
2504 |
+
#~ msgid "FV Player Video Lightbox"
|
2505 |
+
#~ msgstr ""
|
2506 |
+
|
2507 |
+
#~ msgid "FV Player database storage is here!"
|
2508 |
+
#~ msgstr ""
|
2509 |
+
|
2510 |
+
#~ msgid "FV Player Video Sitemap coverage"
|
2511 |
+
#~ msgstr ""
|
2512 |
+
|
2513 |
+
#~ msgid "Go to setting"
|
2514 |
+
#~ msgstr ""
|
2515 |
+
|
2516 |
+
#~ msgid "FV Player 7"
|
2517 |
+
#~ msgstr ""
|
2518 |
+
|
2519 |
+
#~ msgid "Africa (Cape Town)"
|
2520 |
+
#~ msgstr ""
|
2521 |
+
|
2522 |
+
#~ msgid "Asia Pacific (Hong Kong)"
|
2523 |
+
#~ msgstr ""
|
2524 |
+
|
2525 |
+
#~ msgid "Asia Pacific (Osaka-Local)"
|
2526 |
+
#~ msgstr ""
|
2527 |
+
|
2528 |
+
#~ msgid "China (Beijing)"
|
2529 |
+
#~ msgstr ""
|
2530 |
+
|
2531 |
+
#~ msgid "China (Ningxia)"
|
2532 |
+
#~ msgstr ""
|
2533 |
+
|
2534 |
+
#~ msgid "Europe (Frankfurt)"
|
2535 |
+
#~ msgstr ""
|
2536 |
+
|
2537 |
+
#~ msgid "Europe (Ireland)"
|
2538 |
+
#~ msgstr ""
|
2539 |
+
|
2540 |
+
#~ msgid "Europe (London)"
|
2541 |
+
#~ msgstr ""
|
2542 |
+
|
2543 |
+
#~ msgid "Europe (Milan)"
|
2544 |
+
#~ msgstr ""
|
2545 |
+
|
2546 |
+
#~ msgid "Europe (Paris)"
|
2547 |
+
#~ msgstr ""
|
2548 |
+
|
2549 |
+
#~ msgid "Europe (Stockholm)"
|
2550 |
+
#~ msgstr ""
|
2551 |
+
|
2552 |
+
#~ msgid "Middle East (Bahrain)"
|
2553 |
+
#~ msgstr ""
|
2554 |
+
|
2555 |
+
#~ msgid "South America (São Paulo)"
|
2556 |
+
#~ msgstr ""
|
2557 |
+
|
2558 |
+
#~ msgid "An unknown error occurred"
|
2559 |
+
#~ msgstr ""
|
2560 |
+
|
2561 |
+
#~ msgid " extension installed successfully!"
|
2562 |
+
#~ msgstr ""
|
2563 |
+
|
2564 |
+
#~ msgid " extension install failed - "
|
2565 |
+
#~ msgstr ""
|
2566 |
+
|
2567 |
+
#~ msgid " extension upgraded successfully!"
|
2568 |
+
#~ msgstr ""
|
2569 |
+
|
2570 |
+
#~ msgid "Domain"
|
2571 |
+
#~ msgstr ""
|
2572 |
+
|
2573 |
+
#~ msgid "You can enter multiple domains separated by <code>,</code>."
|
2574 |
+
#~ msgstr ""
|
2575 |
+
|
2576 |
+
#~ msgid "Secure Token"
|
2577 |
+
#~ msgstr ""
|
2578 |
+
|
2579 |
+
#~ msgid "Draft"
|
2580 |
+
#~ msgstr ""
|
2581 |
+
|
2582 |
+
#~ msgid "Remove fancyBox"
|
2583 |
+
#~ msgstr ""
|
2584 |
+
|
2585 |
+
#~ msgid "Your gallery items will link to image files directly to allow this."
|
2586 |
+
#~ msgstr ""
|
2587 |
+
|
2588 |
+
#~ msgid "Player Name"
|
2589 |
+
#~ msgstr ""
|
2590 |
+
|
2591 |
+
#~ msgid "Date"
|
2592 |
+
#~ msgstr ""
|
2593 |
+
|
2594 |
+
#~ msgid "Author"
|
2595 |
+
#~ msgstr ""
|
2596 |
+
|
2597 |
+
#~ msgid "Chapters"
|
2598 |
+
#~ msgstr ""
|
2599 |
+
|
2600 |
+
#~ msgid "Transcript"
|
2601 |
+
#~ msgstr ""
|
2602 |
+
|
2603 |
+
#~ msgid "Embedded on"
|
2604 |
+
#~ msgstr ""
|
2605 |
+
|
2606 |
+
#~ msgid "Plays"
|
2607 |
+
#~ msgstr ""
|
2608 |
+
|
2609 |
+
#~ msgid "Players per page"
|
2610 |
+
#~ msgstr ""
|
2611 |
+
|
2612 |
+
#~ msgid "no region"
|
2613 |
+
#~ msgstr ""
|
2614 |
+
|
2615 |
+
#~ msgid "Remember video position"
|
2616 |
+
#~ msgstr ""
|
2617 |
+
|
2618 |
+
#~ msgid "Video Stats"
|
2619 |
+
#~ msgstr ""
|
2620 |
+
|
2621 |
+
#~ msgid "Gives you a daily count of video plays."
|
2622 |
+
#~ msgstr ""
|
2623 |
+
|
2624 |
+
#~ msgid "System Info"
|
2625 |
+
#~ msgstr ""
|
2626 |
+
|
2627 |
+
#~ msgid "Install"
|
2628 |
+
#~ msgstr ""
|
2629 |
+
|
2630 |
+
#~ msgid "Reset"
|
2631 |
+
#~ msgstr ""
|
2632 |
+
|
2633 |
+
#~ msgid "Login"
|
2634 |
+
#~ msgstr ""
|
2635 |
+
|
2636 |
+
#~ msgid "Password"
|
2637 |
+
#~ msgstr ""
|
2638 |
+
|
2639 |
+
#~ msgid "Sign in"
|
2640 |
+
#~ msgstr ""
|
2641 |
+
|
2642 |
+
#~ msgid "Hide the vi Ads tab"
|
2643 |
+
#~ msgstr ""
|
2644 |
+
|
2645 |
+
#~ msgid "video intelligence"
|
2646 |
+
#~ msgstr ""
|
2647 |
+
|
2648 |
+
#~ msgid "Account"
|
2649 |
+
#~ msgstr ""
|
2650 |
+
|
2651 |
+
#~ msgid "Hide vi Ads"
|
2652 |
+
#~ msgstr ""
|
2653 |
+
|
2654 |
+
#~ msgid "Free video intelligence ads"
|
2655 |
+
#~ msgstr ""
|
2656 |
+
|
2657 |
+
#~ msgid "Show the vi Ads tab again"
|
2658 |
+
#~ msgstr ""
|
2659 |
+
|
2660 |
+
#~ msgid "vi Ads"
|
2661 |
+
#~ msgstr ""
|
2662 |
+
|
2663 |
+
#~ msgid "Use XML Video Sitemap"
|
2664 |
+
#~ msgstr ""
|
2665 |
+
|
2666 |
+
#~ msgid "Sitemap Post Meta"
|
2667 |
+
#~ msgstr ""
|
2668 |
+
|
2669 |
+
#~ msgid "Amazon S3 Browser"
|
2670 |
+
#~ msgstr ""
|
2671 |
+
|
2672 |
+
#~ msgid "Show Amazon S3 Browser in the \"Add Video\" dialog."
|
2673 |
+
#~ msgstr ""
|
2674 |
+
|
2675 |
+
#~ msgid "Controlbar Always Visible"
|
2676 |
+
#~ msgstr ""
|
2677 |
+
|
2678 |
+
#~ msgid "Enter values in pixels or 100%."
|
2679 |
+
#~ msgstr ""
|
2680 |
+
|
2681 |
+
#~ msgid "Enable Chromecast"
|
2682 |
+
#~ msgstr ""
|
2683 |
+
|
2684 |
+
#~ msgid "Adds support for Google Chromecast."
|
2685 |
+
#~ msgstr ""
|
2686 |
+
|
2687 |
+
#~ msgid "Force HD Streaming"
|
2688 |
+
#~ msgstr ""
|
2689 |
+
|
2690 |
+
#~ msgid "Use HD quality for HLS/MPEG-DASH even on slow connections."
|
2691 |
+
#~ msgstr ""
|
2692 |
+
|
2693 |
+
#~ msgid "Matomo/Piwik Tracking"
|
2694 |
+
#~ msgstr ""
|
2695 |
+
|
2696 |
+
#~ msgid "matomo.your-domain.com"
|
2697 |
+
#~ msgstr ""
|
2698 |
+
|
2699 |
+
#~ msgid "Site ID"
|
2700 |
+
#~ msgstr ""
|
2701 |
+
|
2702 |
+
#~ msgid "Multiple video playback"
|
2703 |
+
#~ msgstr ""
|
2704 |
+
|
2705 |
+
#~ msgid "No Picture Button"
|
2706 |
+
#~ msgstr ""
|
2707 |
+
|
2708 |
+
#~ msgid "Adds a button to turn the video picture on and off."
|
2709 |
+
#~ msgstr ""
|
2710 |
+
|
2711 |
+
#~ msgid "Slider"
|
2712 |
+
#~ msgstr ""
|
2713 |
+
|
2714 |
+
#~ msgid "Vertical Season"
|
2715 |
+
#~ msgstr ""
|
2716 |
+
|
2717 |
+
#~ msgid "Polaroid"
|
2718 |
+
#~ msgstr ""
|
2719 |
+
|
2720 |
+
#~ msgid "Text"
|
2721 |
+
#~ msgstr ""
|
2722 |
+
|
2723 |
+
#~ msgid "Repeat Button"
|
2724 |
+
#~ msgstr ""
|
2725 |
+
|
2726 |
+
#~ msgid "Adds a button to set playlist/track repeat and shuffle."
|
2727 |
+
#~ msgstr ""
|
2728 |
+
|
2729 |
+
#~ msgid "Rewind/Forward Button"
|
2730 |
+
#~ msgstr ""
|
2731 |
+
|
2732 |
+
#~ msgid "Adds a button to go 10 seconds back/forth."
|
2733 |
+
#~ msgstr ""
|
2734 |
+
|
2735 |
+
#~ msgid "Maintenance tools and debug info."
|
2736 |
+
#~ msgstr ""
|
2737 |
+
|
2738 |
+
#~ msgid "Disable saving skin CSS to a static file"
|
2739 |
+
#~ msgstr ""
|
2740 |
+
|
2741 |
+
#~ msgid "Handle WordPress audio/video"
|
2742 |
+
#~ msgstr ""
|
2743 |
+
|
2744 |
+
#~ msgid "Optimize FV Flowplayer JS loading"
|
2745 |
+
#~ msgstr ""
|
2746 |
+
|
2747 |
+
#~ msgid "Helps with Google PageSpeed scores."
|
2748 |
+
#~ msgstr ""
|
2749 |
+
|
2750 |
+
#~ msgid "Alternative iOS fullscreen mode"
|
2751 |
+
#~ msgstr ""
|
2752 |
+
|
2753 |
+
#~ msgid "Force landscape orientation in fullscreen"
|
2754 |
+
#~ msgstr ""
|
2755 |
+
|
2756 |
+
#~ msgid "Works on the Android mobile, not supported on iOS unfortunately."
|
2757 |
+
#~ msgstr ""
|
2758 |
+
|
2759 |
+
#~ msgid " Adds the video meta data information for search engines."
|
2760 |
+
#~ msgstr ""
|
2761 |
+
|
2762 |
+
#~ msgid "Show on pause"
|
2763 |
+
#~ msgstr ""
|
2764 |
+
|
2765 |
+
#~ msgid "Playlist Item Titles"
|
2766 |
+
#~ msgstr ""
|
2767 |
+
|
2768 |
+
#~ msgid "Splash Text"
|
2769 |
+
#~ msgstr ""
|
2770 |
+
|
2771 |
+
#~ msgid "Sticky"
|
2772 |
+
#~ msgstr ""
|
2773 |
+
|
2774 |
+
#~ msgid "Synopsis"
|
2775 |
+
#~ msgstr ""
|
2776 |
+
|
2777 |
+
#~ msgid "Color"
|
2778 |
+
#~ msgstr ""
|
2779 |
+
|
2780 |
+
#~ msgid "Controlbar Fullscreen"
|
2781 |
+
#~ msgstr ""
|
2782 |
+
|
2783 |
+
#~ msgid "Enter value in em"
|
2784 |
+
#~ msgstr ""
|
2785 |
+
|
2786 |
+
#~ msgid "Buttons"
|
2787 |
+
#~ msgstr ""
|
2788 |
+
|
2789 |
+
#~ msgid "Slim"
|
2790 |
+
#~ msgstr ""
|
2791 |
+
|
2792 |
+
#~ msgid "Full"
|
2793 |
+
#~ msgstr ""
|
2794 |
+
|
2795 |
+
#~ msgid "Fat"
|
2796 |
+
#~ msgstr ""
|
2797 |
+
|
2798 |
+
#~ msgid "Minimal"
|
2799 |
+
#~ msgstr ""
|
2800 |
+
|
2801 |
+
#~ msgid "Icons"
|
2802 |
+
#~ msgstr ""
|
2803 |
+
|
2804 |
+
#~ msgid "Edgy"
|
2805 |
+
#~ msgstr ""
|
2806 |
+
|
2807 |
+
#~ msgid "Outlined"
|
2808 |
+
#~ msgstr ""
|
2809 |
+
|
2810 |
+
#~ msgid "Playful"
|
2811 |
+
#~ msgstr ""
|
2812 |
+
|
2813 |
+
#~ msgid "(inherit from player)"
|
2814 |
+
#~ msgstr ""
|
2815 |
+
|
2816 |
+
#~ msgid "Second line."
|
2817 |
+
#~ msgstr ""
|
2818 |
+
|
2819 |
+
#~ msgid "Enable"
|
2820 |
+
#~ msgstr ""
|
2821 |
+
|
2822 |
+
#~ msgid "Placement"
|
2823 |
+
#~ msgstr ""
|
2824 |
+
|
2825 |
+
#~ msgid "Player width [px]"
|
2826 |
+
#~ msgstr ""
|
2827 |
+
|
2828 |
+
#~ msgid "Basic Setup"
|
2829 |
+
#~ msgstr ""
|
2830 |
+
|
2831 |
+
#~ msgid "Installation"
|
2832 |
+
#~ msgstr ""
|
2833 |
+
|
2834 |
+
#~ msgid "Start up guide"
|
2835 |
+
#~ msgstr ""
|
2836 |
+
|
2837 |
+
#~ msgid "Alignment Settings"
|
2838 |
+
#~ msgstr ""
|
2839 |
+
|
2840 |
+
#~ msgid "Customizing FV Player Skin"
|
2841 |
+
#~ msgstr ""
|
2842 |
+
|
2843 |
+
#~ msgid "Sharing Videos on Social Media"
|
2844 |
+
#~ msgstr ""
|
2845 |
+
|
2846 |
+
#~ msgid "Email Sharing"
|
2847 |
+
#~ msgstr ""
|
2848 |
+
|
2849 |
+
#~ msgid "Using the Iframe Embedding"
|
2850 |
+
#~ msgstr ""
|
2851 |
+
|
2852 |
+
#~ msgid "Using the Video Lightbox Effect"
|
2853 |
+
#~ msgstr ""
|
2854 |
+
|
2855 |
+
#~ msgid "Video Encoding for HTML 5"
|
2856 |
+
#~ msgstr ""
|
2857 |
+
|
2858 |
+
#~ msgid "How to Create Playlists"
|
2859 |
+
#~ msgstr ""
|
2860 |
+
|
2861 |
+
#~ msgid "VTT Chapters"
|
2862 |
+
#~ msgstr ""
|
2863 |
+
|
2864 |
+
#~ msgid "Adding Titles and Splash Text"
|
2865 |
+
#~ msgstr ""
|
2866 |
+
|
2867 |
+
#~ msgid "Setting Up Video Quality Switching"
|
2868 |
+
#~ msgstr ""
|
2869 |
+
|
2870 |
+
#~ msgid "How to Use the Built-in Video Checker"
|
2871 |
+
#~ msgstr ""
|
2872 |
+
|
2873 |
+
#~ msgid "Creating Video Links in FV Player"
|
2874 |
+
#~ msgstr ""
|
2875 |
+
|
2876 |
+
#~ msgid "Switching FV Player Pro to Beta"
|
2877 |
+
#~ msgstr ""
|
2878 |
+
|
2879 |
+
#~ msgid "FAQ"
|
2880 |
+
#~ msgstr ""
|
2881 |
+
|
2882 |
+
#~ msgid "WordPress Video Plugins Comparison"
|
2883 |
+
#~ msgstr ""
|
2884 |
+
|
2885 |
+
#~ msgid "List of Shortcode Parameters"
|
2886 |
+
#~ msgstr ""
|
2887 |
+
|
2888 |
+
#~ msgid "Video Hosting"
|
2889 |
+
#~ msgstr ""
|
2890 |
+
|
2891 |
+
#~ msgid "Using YouTube with FV Player"
|
2892 |
+
#~ msgstr ""
|
2893 |
+
|
2894 |
+
#~ msgid "How to Use Vimeo with WordPress"
|
2895 |
+
#~ msgstr ""
|
2896 |
+
|
2897 |
+
#~ msgid "Serving Private Videos with Amazon S3"
|
2898 |
+
#~ msgstr ""
|
2899 |
+
|
2900 |
+
#~ msgid "Serving Private Videos via CloudFront"
|
2901 |
+
#~ msgstr ""
|
2902 |
+
|
2903 |
+
#~ msgid "Using BunnyCDN with FV Player Pro"
|
2904 |
+
#~ msgstr ""
|
2905 |
+
|
2906 |
+
#~ msgid "Using KeyCDN With FV Player"
|
2907 |
+
#~ msgstr ""
|
2908 |
+
|
2909 |
+
#~ msgid "Using HLS With FV Player"
|
2910 |
+
#~ msgstr ""
|
2911 |
+
|
2912 |
+
#~ msgid "Advertising Options with FV Player"
|
2913 |
+
#~ msgstr ""
|
2914 |
+
|
2915 |
+
#~ msgid "Custom Video Ads in FV Player (pre-roll and post-roll)"
|
2916 |
+
#~ msgstr ""
|
2917 |
+
|
2918 |
+
#~ msgid "Overlay Ads in FV Player"
|
2919 |
+
#~ msgstr ""
|
2920 |
+
|
2921 |
+
#~ msgid "Google Video Advertising Options"
|
2922 |
+
#~ msgstr ""
|
2923 |
+
|
2924 |
+
#~ msgid "Incorporating Google Ads (AdSense)"
|
2925 |
+
#~ msgstr ""
|
2926 |
+
|
2927 |
+
#~ msgid "Video Actions: HTML Pop-ups"
|
2928 |
+
#~ msgstr ""
|
2929 |
+
|
2930 |
+
#~ msgid "Using ExoClick Ads With FV Player"
|
2931 |
+
#~ msgstr ""
|
2932 |
+
|
2933 |
+
#~ msgid "Advanced"
|
2934 |
+
#~ msgstr ""
|
2935 |
+
|
2936 |
+
#~ msgid "How to use FV Player Widget"
|
2937 |
+
#~ msgstr ""
|
2938 |
+
|
2939 |
+
#~ msgid "Setting up Video Custom Fields"
|
2940 |
+
#~ msgstr ""
|
2941 |
+
|
2942 |
+
#~ msgid "Using Google Analytics with FV Player"
|
2943 |
+
#~ msgstr ""
|
2944 |
+
|
2945 |
+
#~ msgid "AB Loop Function"
|
2946 |
+
#~ msgstr ""
|
2947 |
+
|
2948 |
+
#~ msgid "How to Create Subtitles"
|
2949 |
+
#~ msgstr ""
|
2950 |
+
|
2951 |
+
#~ msgid "Interactive Video Transcript"
|
2952 |
+
#~ msgstr ""
|
2953 |
+
|
2954 |
+
#~ msgid "How to Use Custom Start/End Time"
|
2955 |
+
#~ msgstr ""
|
2956 |
+
|
2957 |
+
#~ msgid "Sticky Video"
|
2958 |
+
#~ msgstr ""
|
2959 |
+
|
2960 |
+
#~ msgid "CSS Tips and Fixes"
|
2961 |
+
#~ msgstr ""
|
2962 |
+
|
2963 |
+
#~ msgid "Using FV Player with Minify Plugins"
|
2964 |
+
#~ msgstr ""
|
2965 |
+
|
2966 |
+
#~ msgid "How to Use the Speed Buttons"
|
2967 |
+
#~ msgstr ""
|
2968 |
+
|
2969 |
+
#~ msgid "Using FV Player with Sub-domains and Multi-Domains"
|
2970 |
+
#~ msgstr ""
|
2971 |
+
|
2972 |
+
#~ msgid "FV Player Profile Videos"
|
2973 |
+
#~ msgstr ""
|
2974 |
+
|
2975 |
+
#~ msgid "Video Downloading With Simple History Support"
|
2976 |
+
#~ msgstr ""
|
2977 |
+
|
2978 |
+
#~ msgid "Email Subscription Form Pop-ups"
|
2979 |
+
#~ msgstr ""
|
2980 |
+
|
2981 |
+
#~ msgid "Using FV Player With AMP"
|
2982 |
+
#~ msgstr ""
|
2983 |
+
|
2984 |
+
#~ msgid "Programmer’s Guide"
|
2985 |
+
#~ msgstr ""
|
2986 |
+
|
2987 |
+
#~ msgid "FV WordPress Flowplayer Downgrading"
|
2988 |
+
#~ msgstr ""
|
2989 |
+
|
2990 |
+
#~ msgid "Changelog"
|
2991 |
+
#~ msgstr ""
|
2992 |
+
|
2993 |
+
#~ msgid "Incompatible Plugins and Scripts"
|
2994 |
+
#~ msgstr ""
|
2995 |
+
|
2996 |
+
#~ msgid "Securing Your Video"
|
2997 |
+
#~ msgstr ""
|
2998 |
+
|
2999 |
+
#~ msgid "How to Protect Your Videos from Being Downloaded"
|
3000 |
+
#~ msgstr ""
|
3001 |
+
|
3002 |
+
#~ msgid "How to use RTMP streams with Flash"
|
3003 |
+
#~ msgstr ""
|
3004 |
+
|
3005 |
+
#~ msgid "How to setup encrypted HLS stream with Amazon Elastic Transcoder"
|
3006 |
+
#~ msgstr ""
|
3007 |
+
|
3008 |
+
#~ msgid "Protecting Videos With DRM Text"
|
3009 |
+
#~ msgstr ""
|
3010 |
+
|
3011 |
+
#~ msgid "VAST/VPAID Ads"
|
3012 |
+
#~ msgstr ""
|
3013 |
+
|
3014 |
+
#~ msgid "How to Use FV Player VAST"
|
3015 |
+
#~ msgstr ""
|
3016 |
+
|
3017 |
+
#~ msgid "Using URL Tags"
|
3018 |
+
#~ msgstr ""
|
3019 |
+
|
3020 |
+
#~ msgid "VAST Tester"
|
3021 |
+
#~ msgstr ""
|
3022 |
+
|
3023 |
+
#~ msgid "Tracking VAST and VPAID Ads With Google Analytics"
|
3024 |
+
#~ msgstr ""
|
3025 |
+
|
3026 |
+
#~ msgid "Using FV Player VAST Outside WordPress"
|
3027 |
+
#~ msgstr ""
|
3028 |
+
|
3029 |
+
#~ msgid "List of Sample VAST/VPAID Ad Tags"
|
3030 |
+
#~ msgstr ""
|
3031 |
+
|
3032 |
+
#~ msgid "Remove all data"
|
3033 |
+
#~ msgstr ""
|
3034 |
+
|
3035 |
+
#~ msgid "Tools"
|
3036 |
+
#~ msgstr ""
|
3037 |
+
|
3038 |
+
#~ msgid "Video SEO"
|
3039 |
+
#~ msgstr ""
|
3040 |
+
|
3041 |
+
#~ msgid "Custom CSS"
|
3042 |
+
#~ msgstr ""
|
3043 |
+
|
3044 |
+
#~ msgid "Rollback"
|
3045 |
+
#~ msgstr ""
|
3046 |
+
|
3047 |
+
#~ msgid "Uninstall"
|
3048 |
+
#~ msgstr ""
|
3049 |
+
|
3050 |
+
#~ msgid "Check license"
|
3051 |
+
#~ msgstr ""
|
3052 |
+
|
3053 |
+
#~ msgid "Embeds"
|
3054 |
+
#~ msgstr ""
|
3055 |
+
|
3056 |
+
#~ msgid "FV Player Pro is required to use this video type in playlist."
|
3057 |
+
#~ msgstr ""
|
3058 |
+
|
3059 |
+
#~ msgid "Title"
|
3060 |
+
#~ msgstr ""
|
3061 |
+
|
3062 |
+
#~ msgid "DVR stream"
|
3063 |
+
#~ msgstr ""
|
3064 |
+
|
3065 |
+
#~ msgid "Audio stream"
|
3066 |
+
#~ msgstr ""
|
3067 |
+
|
3068 |
+
#~ msgid "Pick existing player"
|
3069 |
+
#~ msgstr ""
|
languages/fv-wordpress-flowplayer-de_DE.mo
CHANGED
Binary file
|
languages/fv-wordpress-flowplayer-de_DE.po
CHANGED
@@ -1,15 +1,17 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: FV WordPress Flowplayer v.6.0.3.4\n"
|
4 |
-
"
|
5 |
-
"
|
|
|
6 |
"Last-Translator: Polak Maros <polak.maros@foliovision.com>\n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: de\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"
|
|
|
13 |
"X-Poedit-KeywordsList: __;_e;_n\n"
|
14 |
"X-Poedit-Basepath: ..\n"
|
15 |
"X-Poedit-SourceCharset: UTF-8\n"
|
@@ -2214,6 +2216,27 @@ msgstr ""
|
|
2214 |
msgid "Ad Size"
|
2215 |
msgstr ""
|
2216 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2217 |
#~ msgid ""
|
2218 |
#~ "FV Wordpress Flowplayer has found old shortcodes in the content of your "
|
2219 |
#~ "posts. <a href=\"%1$s\">Run the conversion script.</a>"
|
@@ -2405,20 +2428,617 @@ msgstr ""
|
|
2405 |
#~ msgid "HTML Popup"
|
2406 |
#~ msgstr "HTML popup-meldung"
|
2407 |
|
2408 |
-
|
2409 |
-
|
|
|
2410 |
|
2411 |
-
msgid "
|
2412 |
-
msgstr ""
|
2413 |
|
2414 |
-
msgid "
|
2415 |
-
msgstr ""
|
2416 |
|
2417 |
-
msgid "
|
2418 |
-
msgstr ""
|
2419 |
|
2420 |
-
|
2421 |
-
|
|
|
2422 |
|
2423 |
-
|
2424 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: FV WordPress Flowplayer v.6.0.3.4\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2021-10-21 10:28+0100\n"
|
6 |
+
"PO-Revision-Date: 2021-10-21 10:28+0100\n"
|
7 |
"Last-Translator: Polak Maros <polak.maros@foliovision.com>\n"
|
8 |
"Language-Team: \n"
|
9 |
"Language: de\n"
|
10 |
"MIME-Version: 1.0\n"
|
11 |
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: \n"
|
14 |
+
"X-Generator: Eazy Po 0.9.5.3\n"
|
15 |
"X-Poedit-KeywordsList: __;_e;_n\n"
|
16 |
"X-Poedit-Basepath: ..\n"
|
17 |
"X-Poedit-SourceCharset: UTF-8\n"
|
2216 |
msgid "Ad Size"
|
2217 |
msgstr ""
|
2218 |
|
2219 |
+
msgid "All"
|
2220 |
+
msgstr "Alles"
|
2221 |
+
|
2222 |
+
msgid "Play All"
|
2223 |
+
msgstr ""
|
2224 |
+
|
2225 |
+
msgid "Replay Playlist"
|
2226 |
+
msgstr ""
|
2227 |
+
|
2228 |
+
msgid "Repeat Track"
|
2229 |
+
msgstr ""
|
2230 |
+
|
2231 |
+
msgid "Shuffle Playlist"
|
2232 |
+
msgstr ""
|
2233 |
+
|
2234 |
+
msgid "Item %d."
|
2235 |
+
msgstr "Liste %d."
|
2236 |
+
|
2237 |
+
msgid "Click to unmute"
|
2238 |
+
msgstr "Ton aktivieren"
|
2239 |
+
|
2240 |
#~ msgid ""
|
2241 |
#~ "FV Wordpress Flowplayer has found old shortcodes in the content of your "
|
2242 |
#~ "posts. <a href=\"%1$s\">Run the conversion script.</a>"
|
2428 |
#~ msgid "HTML Popup"
|
2429 |
#~ msgstr "HTML popup-meldung"
|
2430 |
|
2431 |
+
#, php-format
|
2432 |
+
#~ msgid "FV Player: Please upgrade to FV Player Pro version %s or above!"
|
2433 |
+
#~ msgstr ""
|
2434 |
|
2435 |
+
#~ msgid "Embed feature not supported in editor preview"
|
2436 |
+
#~ msgstr ""
|
2437 |
|
2438 |
+
#~ msgid "Link feature not supported in editor preview"
|
2439 |
+
#~ msgstr ""
|
2440 |
|
2441 |
+
#~ msgid "Video loading has stalled, click to reload"
|
2442 |
+
#~ msgstr ""
|
2443 |
|
2444 |
+
#, php-format
|
2445 |
+
#~ msgid "<h2>Live stream scheduled</h2><p>Starting in <span>%d</span>.</p>"
|
2446 |
+
#~ msgstr ""
|
2447 |
|
2448 |
+
#, php-format
|
2449 |
+
#~ msgid "%s day"
|
2450 |
+
#~ msgid_plural "%s days"
|
2451 |
+
#~ msgstr[0] ""
|
2452 |
+
#~ msgstr[1] ""
|
2453 |
+
|
2454 |
+
#, php-format
|
2455 |
+
#~ msgid "%s hour"
|
2456 |
+
#~ msgid_plural "%s hours"
|
2457 |
+
#~ msgstr[0] ""
|
2458 |
+
#~ msgstr[1] ""
|
2459 |
+
|
2460 |
+
#, php-format
|
2461 |
+
#~ msgid "%s min"
|
2462 |
+
#~ msgid_plural "%s mins"
|
2463 |
+
#~ msgstr[0] ""
|
2464 |
+
#~ msgstr[1] ""
|
2465 |
+
|
2466 |
+
#, php-format
|
2467 |
+
#~ msgid "%s second"
|
2468 |
+
#~ msgid_plural "%s seconds"
|
2469 |
+
#~ msgstr[0] ""
|
2470 |
+
#~ msgstr[1] ""
|
2471 |
+
|
2472 |
+
#, php-format
|
2473 |
+
#~ msgid "%1$s and %2$s"
|
2474 |
+
#~ msgstr ""
|
2475 |
+
|
2476 |
+
#~ msgid "FV Player 7.5"
|
2477 |
+
#~ msgstr ""
|
2478 |
+
|
2479 |
+
#~ msgid "Thanks for letting me know!"
|
2480 |
+
#~ msgstr ""
|
2481 |
+
|
2482 |
+
#~ msgid "FV Player Video Lightbox"
|
2483 |
+
#~ msgstr ""
|
2484 |
+
|
2485 |
+
#~ msgid "FV Player database storage is here!"
|
2486 |
+
#~ msgstr ""
|
2487 |
+
|
2488 |
+
#~ msgid "FV Player Video Sitemap coverage"
|
2489 |
+
#~ msgstr ""
|
2490 |
+
|
2491 |
+
#~ msgid "Go to setting"
|
2492 |
+
#~ msgstr ""
|
2493 |
+
|
2494 |
+
#~ msgid "FV Player 7"
|
2495 |
+
#~ msgstr ""
|
2496 |
+
|
2497 |
+
#~ msgid "Africa (Cape Town)"
|
2498 |
+
#~ msgstr ""
|
2499 |
+
|
2500 |
+
#~ msgid "Asia Pacific (Hong Kong)"
|
2501 |
+
#~ msgstr ""
|
2502 |
+
|
2503 |
+
#~ msgid "Asia Pacific (Osaka-Local)"
|
2504 |
+
#~ msgstr ""
|
2505 |
+
|
2506 |
+
#~ msgid "China (Beijing)"
|
2507 |
+
#~ msgstr ""
|
2508 |
+
|
2509 |
+
#~ msgid "China (Ningxia)"
|
2510 |
+
#~ msgstr ""
|
2511 |
+
|
2512 |
+
#~ msgid "Europe (Frankfurt)"
|
2513 |
+
#~ msgstr ""
|
2514 |
+
|
2515 |
+
#~ msgid "Europe (Ireland)"
|
2516 |
+
#~ msgstr ""
|
2517 |
+
|
2518 |
+
#~ msgid "Europe (London)"
|
2519 |
+
#~ msgstr ""
|
2520 |
+
|
2521 |
+
#~ msgid "Europe (Milan)"
|
2522 |
+
#~ msgstr ""
|
2523 |
+
|
2524 |
+
#~ msgid "Europe (Paris)"
|
2525 |
+
#~ msgstr ""
|
2526 |
+
|
2527 |
+
#~ msgid "Europe (Stockholm)"
|
2528 |
+
#~ msgstr ""
|
2529 |
+
|
2530 |
+
#~ msgid "Middle East (Bahrain)"
|
2531 |
+
#~ msgstr ""
|
2532 |
+
|
2533 |
+
#~ msgid "An unknown error occurred"
|
2534 |
+
#~ msgstr ""
|
2535 |
+
|
2536 |
+
#~ msgid " extension installed successfully!"
|
2537 |
+
#~ msgstr ""
|
2538 |
+
|
2539 |
+
#~ msgid " extension install failed - "
|
2540 |
+
#~ msgstr ""
|
2541 |
+
|
2542 |
+
#~ msgid " extension upgraded successfully!"
|
2543 |
+
#~ msgstr ""
|
2544 |
+
|
2545 |
+
#~ msgid "Domain"
|
2546 |
+
#~ msgstr ""
|
2547 |
+
|
2548 |
+
#~ msgid "You can enter multiple domains separated by <code>,</code>."
|
2549 |
+
#~ msgstr ""
|
2550 |
+
|
2551 |
+
#~ msgid "Secure Token"
|
2552 |
+
#~ msgstr ""
|
2553 |
+
|
2554 |
+
#~ msgid "Draft"
|
2555 |
+
#~ msgstr ""
|
2556 |
+
|
2557 |
+
#~ msgid "Remove fancyBox"
|
2558 |
+
#~ msgstr ""
|
2559 |
+
|
2560 |
+
#~ msgid "Your gallery items will link to image files directly to allow this."
|
2561 |
+
#~ msgstr ""
|
2562 |
+
|
2563 |
+
#~ msgid "Player Name"
|
2564 |
+
#~ msgstr ""
|
2565 |
+
|
2566 |
+
#~ msgid "Date"
|
2567 |
+
#~ msgstr ""
|
2568 |
+
|
2569 |
+
#~ msgid "Author"
|
2570 |
+
#~ msgstr ""
|
2571 |
+
|
2572 |
+
#~ msgid "Chapters"
|
2573 |
+
#~ msgstr ""
|
2574 |
+
|
2575 |
+
#~ msgid "Transcript"
|
2576 |
+
#~ msgstr ""
|
2577 |
+
|
2578 |
+
#~ msgid "Embedded on"
|
2579 |
+
#~ msgstr ""
|
2580 |
+
|
2581 |
+
#~ msgid "Plays"
|
2582 |
+
#~ msgstr ""
|
2583 |
+
|
2584 |
+
#~ msgid "Players per page"
|
2585 |
+
#~ msgstr ""
|
2586 |
+
|
2587 |
+
#~ msgid "no region"
|
2588 |
+
#~ msgstr ""
|
2589 |
+
|
2590 |
+
#~ msgid "Remember video position"
|
2591 |
+
#~ msgstr ""
|
2592 |
+
|
2593 |
+
#~ msgid "Video Stats"
|
2594 |
+
#~ msgstr ""
|
2595 |
+
|
2596 |
+
#~ msgid "Gives you a daily count of video plays."
|
2597 |
+
#~ msgstr ""
|
2598 |
+
|
2599 |
+
#~ msgid "System Info"
|
2600 |
+
#~ msgstr ""
|
2601 |
+
|
2602 |
+
#~ msgid "Install"
|
2603 |
+
#~ msgstr ""
|
2604 |
+
|
2605 |
+
#~ msgid "Reset"
|
2606 |
+
#~ msgstr ""
|
2607 |
+
|
2608 |
+
#~ msgid "Login"
|
2609 |
+
#~ msgstr ""
|
2610 |
+
|
2611 |
+
#~ msgid "Password"
|
2612 |
+
#~ msgstr ""
|
2613 |
+
|
2614 |
+
#~ msgid "Sign in"
|
2615 |
+
#~ msgstr ""
|
2616 |
+
|
2617 |
+
#~ msgid "Hide the vi Ads tab"
|
2618 |
+
#~ msgstr ""
|
2619 |
+
|
2620 |
+
#~ msgid "video intelligence"
|
2621 |
+
#~ msgstr ""
|
2622 |
+
|
2623 |
+
#~ msgid "Account"
|
2624 |
+
#~ msgstr ""
|
2625 |
+
|
2626 |
+
#~ msgid "Hide vi Ads"
|
2627 |
+
#~ msgstr ""
|
2628 |
+
|
2629 |
+
#~ msgid "Free video intelligence ads"
|
2630 |
+
#~ msgstr ""
|
2631 |
+
|
2632 |
+
#~ msgid "Show the vi Ads tab again"
|
2633 |
+
#~ msgstr ""
|
2634 |
+
|
2635 |
+
#~ msgid "vi Ads"
|
2636 |
+
#~ msgstr ""
|
2637 |
+
|
2638 |
+
#~ msgid "Use XML Video Sitemap"
|
2639 |
+
#~ msgstr ""
|
2640 |
+
|
2641 |
+
#~ msgid "Sitemap Post Meta"
|
2642 |
+
#~ msgstr ""
|
2643 |
+
|
2644 |
+
#~ msgid "Amazon S3 Browser"
|
2645 |
+
#~ msgstr ""
|
2646 |
+
|
2647 |
+
#~ msgid "Show Amazon S3 Browser in the \"Add Video\" dialog."
|
2648 |
+
#~ msgstr ""
|
2649 |
+
|
2650 |
+
#~ msgid "Controlbar Always Visible"
|
2651 |
+
#~ msgstr ""
|
2652 |
+
|
2653 |
+
#~ msgid "Enter values in pixels or 100%."
|
2654 |
+
#~ msgstr ""
|
2655 |
+
|
2656 |
+
#~ msgid "Enable Chromecast"
|
2657 |
+
#~ msgstr ""
|
2658 |
+
|
2659 |
+
#~ msgid "Adds support for Google Chromecast."
|
2660 |
+
#~ msgstr ""
|
2661 |
+
|
2662 |
+
#~ msgid "Force HD Streaming"
|
2663 |
+
#~ msgstr ""
|
2664 |
+
|
2665 |
+
#~ msgid "Use HD quality for HLS/MPEG-DASH even on slow connections."
|
2666 |
+
#~ msgstr ""
|
2667 |
+
|
2668 |
+
#~ msgid "Matomo/Piwik Tracking"
|
2669 |
+
#~ msgstr ""
|
2670 |
+
|
2671 |
+
#~ msgid "matomo.your-domain.com"
|
2672 |
+
#~ msgstr ""
|
2673 |
+
|
2674 |
+
#~ msgid "Site ID"
|
2675 |
+
#~ msgstr ""
|
2676 |
+
|
2677 |
+
#~ msgid "Multiple video playback"
|
2678 |
+
#~ msgstr ""
|
2679 |
+
|
2680 |
+
#~ msgid "No Picture Button"
|
2681 |
+
#~ msgstr ""
|
2682 |
+
|
2683 |
+
#~ msgid "Adds a button to turn the video picture on and off."
|
2684 |
+
#~ msgstr ""
|
2685 |
+
|
2686 |
+
#~ msgid "Slider"
|
2687 |
+
#~ msgstr ""
|
2688 |
+
|
2689 |
+
#~ msgid "Vertical Season"
|
2690 |
+
#~ msgstr ""
|
2691 |
+
|
2692 |
+
#~ msgid "Polaroid"
|
2693 |
+
#~ msgstr ""
|
2694 |
+
|
2695 |
+
#~ msgid "Text"
|
2696 |
+
#~ msgstr ""
|
2697 |
+
|
2698 |
+
#~ msgid "Repeat Button"
|
2699 |
+
#~ msgstr ""
|
2700 |
+
|
2701 |
+
#~ msgid "Adds a button to set playlist/track repeat and shuffle."
|
2702 |
+
#~ msgstr ""
|
2703 |
+
|
2704 |
+
#~ msgid "Rewind/Forward Button"
|
2705 |
+
#~ msgstr ""
|
2706 |
+
|
2707 |
+
#~ msgid "Adds a button to go 10 seconds back/forth."
|
2708 |
+
#~ msgstr ""
|
2709 |
+
|
2710 |
+
#~ msgid "Maintenance tools and debug info."
|
2711 |
+
#~ msgstr ""
|
2712 |
+
|
2713 |
+
#~ msgid "Disable saving skin CSS to a static file"
|
2714 |
+
#~ msgstr ""
|
2715 |
+
|
2716 |
+
#~ msgid "Handle WordPress audio/video"
|
2717 |
+
#~ msgstr ""
|
2718 |
+
|
2719 |
+
#~ msgid "Optimize FV Flowplayer JS loading"
|
2720 |
+
#~ msgstr ""
|
2721 |
+
|
2722 |
+
#~ msgid "Helps with Google PageSpeed scores."
|
2723 |
+
#~ msgstr ""
|
2724 |
+
|
2725 |
+
#~ msgid "Alternative iOS fullscreen mode"
|
2726 |
+
#~ msgstr ""
|
2727 |
+
|
2728 |
+
#~ msgid "Force landscape orientation in fullscreen"
|
2729 |
+
#~ msgstr ""
|
2730 |
+
|
2731 |
+
#~ msgid "Works on the Android mobile, not supported on iOS unfortunately."
|
2732 |
+
#~ msgstr ""
|
2733 |
+
|
2734 |
+
#~ msgid " Adds the video meta data information for search engines."
|
2735 |
+
#~ msgstr ""
|
2736 |
+
|
2737 |
+
#~ msgid "Show on pause"
|
2738 |
+
#~ msgstr ""
|
2739 |
+
|
2740 |
+
#~ msgid "Playlist Item Titles"
|
2741 |
+
#~ msgstr ""
|
2742 |
+
|
2743 |
+
#~ msgid "Splash Text"
|
2744 |
+
#~ msgstr ""
|
2745 |
+
|
2746 |
+
#~ msgid "Sticky"
|
2747 |
+
#~ msgstr ""
|
2748 |
+
|
2749 |
+
#~ msgid "Synopsis"
|
2750 |
+
#~ msgstr ""
|
2751 |
+
|
2752 |
+
#~ msgid "Color"
|
2753 |
+
#~ msgstr ""
|
2754 |
+
|
2755 |
+
#~ msgid "Controlbar Fullscreen"
|
2756 |
+
#~ msgstr ""
|
2757 |
+
|
2758 |
+
#~ msgid "Enter value in em"
|
2759 |
+
#~ msgstr ""
|
2760 |
+
|
2761 |
+
#~ msgid "Buttons"
|
2762 |
+
#~ msgstr ""
|
2763 |
+
|
2764 |
+
#~ msgid "Slim"
|
2765 |
+
#~ msgstr ""
|
2766 |
+
|
2767 |
+
#~ msgid "Full"
|
2768 |
+
#~ msgstr ""
|
2769 |
+
|
2770 |
+
#~ msgid "Fat"
|
2771 |
+
#~ msgstr ""
|
2772 |
+
|
2773 |
+
#~ msgid "Minimal"
|
2774 |
+
#~ msgstr ""
|
2775 |
+
|
2776 |
+
#~ msgid "Icons"
|
2777 |
+
#~ msgstr ""
|
2778 |
+
|
2779 |
+
#~ msgid "Edgy"
|
2780 |
+
#~ msgstr ""
|
2781 |
+
|
2782 |
+
#~ msgid "Outlined"
|
2783 |
+
#~ msgstr ""
|
2784 |
+
|
2785 |
+
#~ msgid "Playful"
|
2786 |
+
#~ msgstr ""
|
2787 |
+
|
2788 |
+
#~ msgid "(inherit from player)"
|
2789 |
+
#~ msgstr ""
|
2790 |
+
|
2791 |
+
#~ msgid "Second line."
|
2792 |
+
#~ msgstr ""
|
2793 |
+
|
2794 |
+
#~ msgid "Enable"
|
2795 |
+
#~ msgstr ""
|
2796 |
+
|
2797 |
+
#~ msgid "Placement"
|
2798 |
+
#~ msgstr ""
|
2799 |
+
|
2800 |
+
#~ msgid "Player width [px]"
|
2801 |
+
#~ msgstr ""
|
2802 |
+
|
2803 |
+
#~ msgid "Basic Setup"
|
2804 |
+
#~ msgstr ""
|
2805 |
+
|
2806 |
+
#~ msgid "Installation"
|
2807 |
+
#~ msgstr ""
|
2808 |
+
|
2809 |
+
#~ msgid "Start up guide"
|
2810 |
+
#~ msgstr ""
|
2811 |
+
|
2812 |
+
#~ msgid "Alignment Settings"
|
2813 |
+
#~ msgstr ""
|
2814 |
+
|
2815 |
+
#~ msgid "Customizing FV Player Skin"
|
2816 |
+
#~ msgstr ""
|
2817 |
+
|
2818 |
+
#~ msgid "Sharing Videos on Social Media"
|
2819 |
+
#~ msgstr ""
|
2820 |
+
|
2821 |
+
#~ msgid "Email Sharing"
|
2822 |
+
#~ msgstr ""
|
2823 |
+
|
2824 |
+
#~ msgid "Using the Iframe Embedding"
|
2825 |
+
#~ msgstr ""
|
2826 |
+
|
2827 |
+
#~ msgid "Using the Video Lightbox Effect"
|
2828 |
+
#~ msgstr ""
|
2829 |
+
|
2830 |
+
#~ msgid "Video Encoding for HTML 5"
|
2831 |
+
#~ msgstr ""
|
2832 |
+
|
2833 |
+
#~ msgid "How to Create Playlists"
|
2834 |
+
#~ msgstr ""
|
2835 |
+
|
2836 |
+
#~ msgid "VTT Chapters"
|
2837 |
+
#~ msgstr ""
|
2838 |
+
|
2839 |
+
#~ msgid "Adding Titles and Splash Text"
|
2840 |
+
#~ msgstr ""
|
2841 |
+
|
2842 |
+
#~ msgid "Setting Up Video Quality Switching"
|
2843 |
+
#~ msgstr ""
|
2844 |
+
|
2845 |
+
#~ msgid "How to Use the Built-in Video Checker"
|
2846 |
+
#~ msgstr ""
|
2847 |
+
|
2848 |
+
#~ msgid "Creating Video Links in FV Player"
|
2849 |
+
#~ msgstr ""
|
2850 |
+
|
2851 |
+
#~ msgid "Switching FV Player Pro to Beta"
|
2852 |
+
#~ msgstr ""
|
2853 |
+
|
2854 |
+
#~ msgid "FAQ"
|
2855 |
+
#~ msgstr ""
|
2856 |
+
|
2857 |
+
#~ msgid "WordPress Video Plugins Comparison"
|
2858 |
+
#~ msgstr ""
|
2859 |
+
|
2860 |
+
#~ msgid "List of Shortcode Parameters"
|
2861 |
+
#~ msgstr ""
|
2862 |
+
|
2863 |
+
#~ msgid "Video Hosting"
|
2864 |
+
#~ msgstr ""
|
2865 |
+
|
2866 |
+
#~ msgid "Using YouTube with FV Player"
|
2867 |
+
#~ msgstr ""
|
2868 |
+
|
2869 |
+
#~ msgid "How to Use Vimeo with WordPress"
|
2870 |
+
#~ msgstr ""
|
2871 |
+
|
2872 |
+
#~ msgid "Serving Private Videos with Amazon S3"
|
2873 |
+
#~ msgstr ""
|
2874 |
+
|
2875 |
+
#~ msgid "Serving Private Videos via CloudFront"
|
2876 |
+
#~ msgstr ""
|
2877 |
+
|
2878 |
+
#~ msgid "Using BunnyCDN with FV Player Pro"
|
2879 |
+
#~ msgstr ""
|
2880 |
+
|
2881 |
+
#~ msgid "Using KeyCDN With FV Player"
|
2882 |
+
#~ msgstr ""
|
2883 |
+
|
2884 |
+
#~ msgid "Using HLS With FV Player"
|
2885 |
+
#~ msgstr ""
|
2886 |
+
|
2887 |
+
#~ msgid "Advertising Options with FV Player"
|
2888 |
+
#~ msgstr ""
|
2889 |
+
|
2890 |
+
#~ msgid "Custom Video Ads in FV Player (pre-roll and post-roll)"
|
2891 |
+
#~ msgstr ""
|
2892 |
+
|
2893 |
+
#~ msgid "Overlay Ads in FV Player"
|
2894 |
+
#~ msgstr ""
|
2895 |
+
|
2896 |
+
#~ msgid "Google Video Advertising Options"
|
2897 |
+
#~ msgstr ""
|
2898 |
+
|
2899 |
+
#~ msgid "Incorporating Google Ads (AdSense)"
|
2900 |
+
#~ msgstr ""
|
2901 |
+
|
2902 |
+
#~ msgid "Video Actions: HTML Pop-ups"
|
2903 |
+
#~ msgstr ""
|
2904 |
+
|
2905 |
+
#~ msgid "Using ExoClick Ads With FV Player"
|
2906 |
+
#~ msgstr ""
|
2907 |
+
|
2908 |
+
#~ msgid "Advanced"
|
2909 |
+
#~ msgstr ""
|
2910 |
+
|
2911 |
+
#~ msgid "How to use FV Player Widget"
|
2912 |
+
#~ msgstr ""
|
2913 |
+
|
2914 |
+
#~ msgid "Setting up Video Custom Fields"
|
2915 |
+
#~ msgstr ""
|
2916 |
+
|
2917 |
+
#~ msgid "Using Google Analytics with FV Player"
|
2918 |
+
#~ msgstr ""
|
2919 |
+
|
2920 |
+
#~ msgid "AB Loop Function"
|
2921 |
+
#~ msgstr ""
|
2922 |
+
|
2923 |
+
#~ msgid "How to Create Subtitles"
|
2924 |
+
#~ msgstr ""
|
2925 |
+
|
2926 |
+
#~ msgid "Interactive Video Transcript"
|
2927 |
+
#~ msgstr ""
|
2928 |
+
|
2929 |
+
#~ msgid "How to Use Custom Start/End Time"
|
2930 |
+
#~ msgstr ""
|
2931 |
+
|
2932 |
+
#~ msgid "Sticky Video"
|
2933 |
+
#~ msgstr ""
|
2934 |
+
|
2935 |
+
#~ msgid "CSS Tips and Fixes"
|
2936 |
+
#~ msgstr ""
|
2937 |
+
|
2938 |
+
#~ msgid "Using FV Player with Minify Plugins"
|
2939 |
+
#~ msgstr ""
|
2940 |
+
|
2941 |
+
#~ msgid "How to Use the Speed Buttons"
|
2942 |
+
#~ msgstr ""
|
2943 |
+
|
2944 |
+
#~ msgid "Using FV Player with Sub-domains and Multi-Domains"
|
2945 |
+
#~ msgstr ""
|
2946 |
+
|
2947 |
+
#~ msgid "FV Player Profile Videos"
|
2948 |
+
#~ msgstr ""
|
2949 |
+
|
2950 |
+
#~ msgid "Video Downloading With Simple History Support"
|
2951 |
+
#~ msgstr ""
|
2952 |
+
|
2953 |
+
#~ msgid "Email Subscription Form Pop-ups"
|
2954 |
+
#~ msgstr ""
|
2955 |
+
|
2956 |
+
#~ msgid "Using FV Player With AMP"
|
2957 |
+
#~ msgstr ""
|
2958 |
+
|
2959 |
+
#~ msgid "Programmer’s Guide"
|
2960 |
+
#~ msgstr ""
|
2961 |
+
|
2962 |
+
#~ msgid "FV WordPress Flowplayer Downgrading"
|
2963 |
+
#~ msgstr ""
|
2964 |
+
|
2965 |
+
#~ msgid "Changelog"
|
2966 |
+
#~ msgstr ""
|
2967 |
+
|
2968 |
+
#~ msgid "Incompatible Plugins and Scripts"
|
2969 |
+
#~ msgstr ""
|
2970 |
+
|
2971 |
+
#~ msgid "Securing Your Video"
|
2972 |
+
#~ msgstr ""
|
2973 |
+
|
2974 |
+
#~ msgid "How to Protect Your Videos from Being Downloaded"
|
2975 |
+
#~ msgstr ""
|
2976 |
+
|
2977 |
+
#~ msgid "How to use RTMP streams with Flash"
|
2978 |
+
#~ msgstr ""
|
2979 |
+
|
2980 |
+
#~ msgid "How to setup encrypted HLS stream with Amazon Elastic Transcoder"
|
2981 |
+
#~ msgstr ""
|
2982 |
+
|
2983 |
+
#~ msgid "Protecting Videos With DRM Text"
|
2984 |
+
#~ msgstr ""
|
2985 |
+
|
2986 |
+
#~ msgid "VAST/VPAID Ads"
|
2987 |
+
#~ msgstr ""
|
2988 |
+
|
2989 |
+
#~ msgid "How to Use FV Player VAST"
|
2990 |
+
#~ msgstr ""
|
2991 |
+
|
2992 |
+
#~ msgid "Using URL Tags"
|
2993 |
+
#~ msgstr ""
|
2994 |
+
|
2995 |
+
#~ msgid "VAST Tester"
|
2996 |
+
#~ msgstr ""
|
2997 |
+
|
2998 |
+
#~ msgid "Tracking VAST and VPAID Ads With Google Analytics"
|
2999 |
+
#~ msgstr ""
|
3000 |
+
|
3001 |
+
#~ msgid "Using FV Player VAST Outside WordPress"
|
3002 |
+
#~ msgstr ""
|
3003 |
+
|
3004 |
+
#~ msgid "List of Sample VAST/VPAID Ad Tags"
|
3005 |
+
#~ msgstr ""
|
3006 |
+
|
3007 |
+
#~ msgid "Remove all data"
|
3008 |
+
#~ msgstr ""
|
3009 |
+
|
3010 |
+
#~ msgid "Tools"
|
3011 |
+
#~ msgstr ""
|
3012 |
+
|
3013 |
+
#~ msgid "Video SEO"
|
3014 |
+
#~ msgstr ""
|
3015 |
+
|
3016 |
+
#~ msgid "Custom CSS"
|
3017 |
+
#~ msgstr ""
|
3018 |
+
|
3019 |
+
#~ msgid "Rollback"
|
3020 |
+
#~ msgstr ""
|
3021 |
+
|
3022 |
+
#~ msgid "Uninstall"
|
3023 |
+
#~ msgstr ""
|
3024 |
+
|
3025 |
+
#~ msgid "Check license"
|
3026 |
+
#~ msgstr ""
|
3027 |
+
|
3028 |
+
#~ msgid "Embeds"
|
3029 |
+
#~ msgstr ""
|
3030 |
+
|
3031 |
+
#~ msgid "FV Player Pro is required to use this video type in playlist."
|
3032 |
+
#~ msgstr ""
|
3033 |
+
|
3034 |
+
#~ msgid "Title"
|
3035 |
+
#~ msgstr ""
|
3036 |
+
|
3037 |
+
#~ msgid "DVR stream"
|
3038 |
+
#~ msgstr ""
|
3039 |
+
|
3040 |
+
#~ msgid "Audio stream"
|
3041 |
+
#~ msgstr ""
|
3042 |
+
|
3043 |
+
#~ msgid "Pick existing player"
|
3044 |
+
#~ msgstr ""
|
languages/fv-wordpress-flowplayer-es_ES.mo
CHANGED
Binary file
|
languages/fv-wordpress-flowplayer-es_ES.po
CHANGED
@@ -1,15 +1,17 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: FV WordPress Flowplayer v.6.0.3.4\n"
|
4 |
-
"
|
5 |
-
"
|
|
|
6 |
"Last-Translator: Polak Maros <polak.maros@foliovision.com>\n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: es_ES\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"
|
|
|
13 |
"X-Poedit-KeywordsList: __;_e;_n\n"
|
14 |
"X-Poedit-Basepath: .\n"
|
15 |
"X-Poedit-SourceCharset: UTF-8\n"
|
@@ -1446,6 +1448,8 @@ msgid "Embed"
|
|
1446 |
msgstr "Insertar"
|
1447 |
|
1448 |
#: ../view/admin.php:802
|
|
|
|
|
1449 |
msgid "Live Stream"
|
1450 |
msgstr ""
|
1451 |
|
@@ -2207,6 +2211,28 @@ msgstr ""
|
|
2207 |
msgid "Ad Size"
|
2208 |
msgstr ""
|
2209 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2210 |
#~ msgid ""
|
2211 |
#~ "FV Wordpress Flowplayer has found old shortcodes in the content of your "
|
2212 |
#~ "posts. <a href=\"%1$s\">Run the conversion script.</a>"
|
@@ -2346,20 +2372,613 @@ msgstr ""
|
|
2346 |
#~ msgid "Thank you for purchasing FV Player license!"
|
2347 |
#~ msgstr "Gracias por la compra FV Player de licencia!"
|
2348 |
|
2349 |
-
|
2350 |
-
|
|
|
2351 |
|
2352 |
-
msgid "
|
2353 |
-
msgstr ""
|
2354 |
|
2355 |
-
msgid "
|
2356 |
-
msgstr ""
|
2357 |
|
2358 |
-
msgid "
|
2359 |
-
msgstr ""
|
2360 |
|
2361 |
-
|
2362 |
-
|
|
|
|
|
|
|
2363 |
|
2364 |
-
|
2365 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: FV WordPress Flowplayer v.6.0.3.4\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2021-10-21 10:27+0100\n"
|
6 |
+
"PO-Revision-Date: 2021-10-21 10:27+0100\n"
|
7 |
"Last-Translator: Polak Maros <polak.maros@foliovision.com>\n"
|
8 |
"Language-Team: \n"
|
9 |
"Language: es_ES\n"
|
10 |
"MIME-Version: 1.0\n"
|
11 |
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: \n"
|
14 |
+
"X-Generator: Eazy Po 0.9.5.3\n"
|
15 |
"X-Poedit-KeywordsList: __;_e;_n\n"
|
16 |
"X-Poedit-Basepath: .\n"
|
17 |
"X-Poedit-SourceCharset: UTF-8\n"
|
1448 |
msgstr "Insertar"
|
1449 |
|
1450 |
#: ../view/admin.php:802
|
1451 |
+
#, fuzzy
|
1452 |
+
#| msgid "Live stream"
|
1453 |
msgid "Live Stream"
|
1454 |
msgstr ""
|
1455 |
|
2211 |
msgid "Ad Size"
|
2212 |
msgstr ""
|
2213 |
|
2214 |
+
msgid "All"
|
2215 |
+
msgstr "Todos"
|
2216 |
+
|
2217 |
+
msgid "Play All"
|
2218 |
+
msgstr ""
|
2219 |
+
|
2220 |
+
msgid "Replay Playlist"
|
2221 |
+
msgstr ""
|
2222 |
+
|
2223 |
+
msgid "Repeat Track"
|
2224 |
+
msgstr ""
|
2225 |
+
|
2226 |
+
msgid "Shuffle Playlist"
|
2227 |
+
msgstr ""
|
2228 |
+
|
2229 |
+
#,
|
2230 |
+
msgid "Item %d."
|
2231 |
+
msgstr ""
|
2232 |
+
|
2233 |
+
msgid "Click to unmute"
|
2234 |
+
msgstr ""
|
2235 |
+
|
2236 |
#~ msgid ""
|
2237 |
#~ "FV Wordpress Flowplayer has found old shortcodes in the content of your "
|
2238 |
#~ "posts. <a href=\"%1$s\">Run the conversion script.</a>"
|
2372 |
#~ msgid "Thank you for purchasing FV Player license!"
|
2373 |
#~ msgstr "Gracias por la compra FV Player de licencia!"
|
2374 |
|
2375 |
+
#, php-format
|
2376 |
+
#~ msgid "FV Player: Please upgrade to FV Player Pro version %s or above!"
|
2377 |
+
#~ msgstr ""
|
2378 |
|
2379 |
+
#~ msgid "Embed feature not supported in editor preview"
|
2380 |
+
#~ msgstr ""
|
2381 |
|
2382 |
+
#~ msgid "Link feature not supported in editor preview"
|
2383 |
+
#~ msgstr ""
|
2384 |
|
2385 |
+
#~ msgid "Video loading has stalled, click to reload"
|
2386 |
+
#~ msgstr ""
|
2387 |
|
2388 |
+
#, php-format
|
2389 |
+
#~ msgid "%s day"
|
2390 |
+
#~ msgid_plural "%s days"
|
2391 |
+
#~ msgstr[0] ""
|
2392 |
+
#~ msgstr[1] ""
|
2393 |
|
2394 |
+
#, php-format
|
2395 |
+
#~ msgid "%s hour"
|
2396 |
+
#~ msgid_plural "%s hours"
|
2397 |
+
#~ msgstr[0] ""
|
2398 |
+
#~ msgstr[1] ""
|
2399 |
+
|
2400 |
+
#, php-format
|
2401 |
+
#~ msgid "%s min"
|
2402 |
+
#~ msgid_plural "%s mins"
|
2403 |
+
#~ msgstr[0] ""
|
2404 |
+
#~ msgstr[1] ""
|
2405 |
+
|
2406 |
+
#, php-format
|
2407 |
+
#~ msgid "%s second"
|
2408 |
+
#~ msgid_plural "%s seconds"
|
2409 |
+
#~ msgstr[0] ""
|
2410 |
+
#~ msgstr[1] ""
|
2411 |
+
|
2412 |
+
#, php-format
|
2413 |
+
#~ msgid "%1$s and %2$s"
|
2414 |
+
#~ msgstr ""
|
2415 |
+
|
2416 |
+
#~ msgid "FV Player 7.5"
|
2417 |
+
#~ msgstr ""
|
2418 |
+
|
2419 |
+
#~ msgid "Thanks for letting me know!"
|
2420 |
+
#~ msgstr ""
|
2421 |
+
|
2422 |
+
#~ msgid "FV Player Video Lightbox"
|
2423 |
+
#~ msgstr ""
|
2424 |
+
|
2425 |
+
#~ msgid "FV Player database storage is here!"
|
2426 |
+
#~ msgstr ""
|
2427 |
+
|
2428 |
+
#~ msgid "FV Player Video Sitemap coverage"
|
2429 |
+
#~ msgstr ""
|
2430 |
+
|
2431 |
+
#~ msgid "Go to setting"
|
2432 |
+
#~ msgstr ""
|
2433 |
+
|
2434 |
+
#~ msgid "FV Player 7"
|
2435 |
+
#~ msgstr ""
|
2436 |
+
|
2437 |
+
#~ msgid "Africa (Cape Town)"
|
2438 |
+
#~ msgstr ""
|
2439 |
+
|
2440 |
+
#~ msgid "Asia Pacific (Hong Kong)"
|
2441 |
+
#~ msgstr ""
|
2442 |
+
|
2443 |
+
#~ msgid "Asia Pacific (Osaka-Local)"
|
2444 |
+
#~ msgstr ""
|
2445 |
+
|
2446 |
+
#~ msgid "China (Beijing)"
|
2447 |
+
#~ msgstr ""
|
2448 |
+
|
2449 |
+
#~ msgid "China (Ningxia)"
|
2450 |
+
#~ msgstr ""
|
2451 |
+
|
2452 |
+
#~ msgid "Europe (Frankfurt)"
|
2453 |
+
#~ msgstr ""
|
2454 |
+
|
2455 |
+
#~ msgid "Europe (Ireland)"
|
2456 |
+
#~ msgstr ""
|
2457 |
+
|
2458 |
+
#~ msgid "Europe (London)"
|
2459 |
+
#~ msgstr ""
|
2460 |
+
|
2461 |
+
#~ msgid "Europe (Milan)"
|
2462 |
+
#~ msgstr ""
|
2463 |
+
|
2464 |
+
#~ msgid "Europe (Paris)"
|
2465 |
+
#~ msgstr ""
|
2466 |
+
|
2467 |
+
#~ msgid "Europe (Stockholm)"
|
2468 |
+
#~ msgstr ""
|
2469 |
+
|
2470 |
+
#~ msgid "Middle East (Bahrain)"
|
2471 |
+
#~ msgstr ""
|
2472 |
+
|
2473 |
+
#~ msgid "An unknown error occurred"
|
2474 |
+
#~ msgstr ""
|
2475 |
+
|
2476 |
+
#~ msgid " extension installed successfully!"
|
2477 |
+
#~ msgstr ""
|
2478 |
+
|
2479 |
+
#~ msgid " extension install failed - "
|
2480 |
+
#~ msgstr ""
|
2481 |
+
|
2482 |
+
#~ msgid " extension upgraded successfully!"
|
2483 |
+
#~ msgstr ""
|
2484 |
+
|
2485 |
+
#~ msgid "Domain"
|
2486 |
+
#~ msgstr ""
|
2487 |
+
|
2488 |
+
#~ msgid "You can enter multiple domains separated by <code>,</code>."
|
2489 |
+
#~ msgstr ""
|
2490 |
+
|
2491 |
+
#~ msgid "Secure Token"
|
2492 |
+
#~ msgstr ""
|
2493 |
+
|
2494 |
+
#~ msgid "Draft"
|
2495 |
+
#~ msgstr ""
|
2496 |
+
|
2497 |
+
#~ msgid "Remove fancyBox"
|
2498 |
+
#~ msgstr ""
|
2499 |
+
|
2500 |
+
#~ msgid "Your gallery items will link to image files directly to allow this."
|
2501 |
+
#~ msgstr ""
|
2502 |
+
|
2503 |
+
#~ msgid "Player Name"
|
2504 |
+
#~ msgstr ""
|
2505 |
+
|
2506 |
+
#~ msgid "Date"
|
2507 |
+
#~ msgstr ""
|
2508 |
+
|
2509 |
+
#~ msgid "Author"
|
2510 |
+
#~ msgstr ""
|
2511 |
+
|
2512 |
+
#~ msgid "Chapters"
|
2513 |
+
#~ msgstr ""
|
2514 |
+
|
2515 |
+
#~ msgid "Transcript"
|
2516 |
+
#~ msgstr ""
|
2517 |
+
|
2518 |
+
#~ msgid "Embedded on"
|
2519 |
+
#~ msgstr ""
|
2520 |
+
|
2521 |
+
#~ msgid "Plays"
|
2522 |
+
#~ msgstr ""
|
2523 |
+
|
2524 |
+
#~ msgid "Players per page"
|
2525 |
+
#~ msgstr ""
|
2526 |
+
|
2527 |
+
#~ msgid "no region"
|
2528 |
+
#~ msgstr ""
|
2529 |
+
|
2530 |
+
#~ msgid "Remember video position"
|
2531 |
+
#~ msgstr ""
|
2532 |
+
|
2533 |
+
#~ msgid "Video Stats"
|
2534 |
+
#~ msgstr ""
|
2535 |
+
|
2536 |
+
#~ msgid "Gives you a daily count of video plays."
|
2537 |
+
#~ msgstr ""
|
2538 |
+
|
2539 |
+
#~ msgid "System Info"
|
2540 |
+
#~ msgstr ""
|
2541 |
+
|
2542 |
+
#~ msgid "Install"
|
2543 |
+
#~ msgstr ""
|
2544 |
+
|
2545 |
+
#~ msgid "Reset"
|
2546 |
+
#~ msgstr ""
|
2547 |
+
|
2548 |
+
#~ msgid "Login"
|
2549 |
+
#~ msgstr ""
|
2550 |
+
|
2551 |
+
#~ msgid "Password"
|
2552 |
+
#~ msgstr ""
|
2553 |
+
|
2554 |
+
#~ msgid "Sign in"
|
2555 |
+
#~ msgstr ""
|
2556 |
+
|
2557 |
+
#~ msgid "Hide the vi Ads tab"
|
2558 |
+
#~ msgstr ""
|
2559 |
+
|
2560 |
+
#~ msgid "video intelligence"
|
2561 |
+
#~ msgstr ""
|
2562 |
+
|
2563 |
+
#~ msgid "Account"
|
2564 |
+
#~ msgstr ""
|
2565 |
+
|
2566 |
+
#~ msgid "Hide vi Ads"
|
2567 |
+
#~ msgstr ""
|
2568 |
+
|
2569 |
+
#~ msgid "Free video intelligence ads"
|
2570 |
+
#~ msgstr ""
|
2571 |
+
|
2572 |
+
#~ msgid "Show the vi Ads tab again"
|
2573 |
+
#~ msgstr ""
|
2574 |
+
|
2575 |
+
#~ msgid "vi Ads"
|
2576 |
+
#~ msgstr ""
|
2577 |
+
|
2578 |
+
#~ msgid "Use XML Video Sitemap"
|
2579 |
+
#~ msgstr ""
|
2580 |
+
|
2581 |
+
#~ msgid "Sitemap Post Meta"
|
2582 |
+
#~ msgstr ""
|
2583 |
+
|
2584 |
+
#~ msgid "Amazon S3 Browser"
|
2585 |
+
#~ msgstr ""
|
2586 |
+
|
2587 |
+
#~ msgid "Show Amazon S3 Browser in the \"Add Video\" dialog."
|
2588 |
+
#~ msgstr ""
|
2589 |
+
|
2590 |
+
#~ msgid "Controlbar Always Visible"
|
2591 |
+
#~ msgstr ""
|
2592 |
+
|
2593 |
+
#~ msgid "Enter values in pixels or 100%."
|
2594 |
+
#~ msgstr ""
|
2595 |
+
|
2596 |
+
#~ msgid "Enable Chromecast"
|
2597 |
+
#~ msgstr ""
|
2598 |
+
|
2599 |
+
#~ msgid "Adds support for Google Chromecast."
|
2600 |
+
#~ msgstr ""
|
2601 |
+
|
2602 |
+
#~ msgid "Force HD Streaming"
|
2603 |
+
#~ msgstr ""
|
2604 |
+
|
2605 |
+
#~ msgid "Use HD quality for HLS/MPEG-DASH even on slow connections."
|
2606 |
+
#~ msgstr ""
|
2607 |
+
|
2608 |
+
#~ msgid "Matomo/Piwik Tracking"
|
2609 |
+
#~ msgstr ""
|
2610 |
+
|
2611 |
+
#~ msgid "matomo.your-domain.com"
|
2612 |
+
#~ msgstr ""
|
2613 |
+
|
2614 |
+
#~ msgid "Site ID"
|
2615 |
+
#~ msgstr ""
|
2616 |
+
|
2617 |
+
#~ msgid "Multiple video playback"
|
2618 |
+
#~ msgstr ""
|
2619 |
+
|
2620 |
+
#~ msgid "No Picture Button"
|
2621 |
+
#~ msgstr ""
|
2622 |
+
|
2623 |
+
#~ msgid "Adds a button to turn the video picture on and off."
|
2624 |
+
#~ msgstr ""
|
2625 |
+
|
2626 |
+
#~ msgid "Slider"
|
2627 |
+
#~ msgstr ""
|
2628 |
+
|
2629 |
+
#~ msgid "Vertical Season"
|
2630 |
+
#~ msgstr ""
|
2631 |
+
|
2632 |
+
#~ msgid "Polaroid"
|
2633 |
+
#~ msgstr ""
|
2634 |
+
|
2635 |
+
#~ msgid "Text"
|
2636 |
+
#~ msgstr ""
|
2637 |
+
|
2638 |
+
#~ msgid "Repeat Button"
|
2639 |
+
#~ msgstr ""
|
2640 |
+
|
2641 |
+
#~ msgid "Adds a button to set playlist/track repeat and shuffle."
|
2642 |
+
#~ msgstr ""
|
2643 |
+
|
2644 |
+
#~ msgid "Rewind/Forward Button"
|
2645 |
+
#~ msgstr ""
|
2646 |
+
|
2647 |
+
#~ msgid "Adds a button to go 10 seconds back/forth."
|
2648 |
+
#~ msgstr ""
|
2649 |
+
|
2650 |
+
#~ msgid "Maintenance tools and debug info."
|
2651 |
+
#~ msgstr ""
|
2652 |
+
|
2653 |
+
#~ msgid "Disable saving skin CSS to a static file"
|
2654 |
+
#~ msgstr ""
|
2655 |
+
|
2656 |
+
#~ msgid "Handle WordPress audio/video"
|
2657 |
+
#~ msgstr ""
|
2658 |
+
|
2659 |
+
#~ msgid "Optimize FV Flowplayer JS loading"
|
2660 |
+
#~ msgstr ""
|
2661 |
+
|
2662 |
+
#~ msgid "Helps with Google PageSpeed scores."
|
2663 |
+
#~ msgstr ""
|
2664 |
+
|
2665 |
+
#~ msgid "Alternative iOS fullscreen mode"
|
2666 |
+
#~ msgstr ""
|
2667 |
+
|
2668 |
+
#~ msgid "Force landscape orientation in fullscreen"
|
2669 |
+
#~ msgstr ""
|
2670 |
+
|
2671 |
+
#~ msgid "Works on the Android mobile, not supported on iOS unfortunately."
|
2672 |
+
#~ msgstr ""
|
2673 |
+
|
2674 |
+
#~ msgid " Adds the video meta data information for search engines."
|
2675 |
+
#~ msgstr ""
|
2676 |
+
|
2677 |
+
#~ msgid "Show on pause"
|
2678 |
+
#~ msgstr ""
|
2679 |
+
|
2680 |
+
#~ msgid "Playlist Item Titles"
|
2681 |
+
#~ msgstr ""
|
2682 |
+
|
2683 |
+
#~ msgid "Splash Text"
|
2684 |
+
#~ msgstr ""
|
2685 |
+
|
2686 |
+
#~ msgid "Sticky"
|
2687 |
+
#~ msgstr ""
|
2688 |
+
|
2689 |
+
#~ msgid "Synopsis"
|
2690 |
+
#~ msgstr ""
|
2691 |
+
|
2692 |
+
#~ msgid "Color"
|
2693 |
+
#~ msgstr ""
|
2694 |
+
|
2695 |
+
#~ msgid "Controlbar Fullscreen"
|
2696 |
+
#~ msgstr ""
|
2697 |
+
|
2698 |
+
#~ msgid "Enter value in em"
|
2699 |
+
#~ msgstr ""
|
2700 |
+
|
2701 |
+
#~ msgid "Buttons"
|
2702 |
+
#~ msgstr ""
|
2703 |
+
|
2704 |
+
#~ msgid "Slim"
|
2705 |
+
#~ msgstr ""
|
2706 |
+
|
2707 |
+
#~ msgid "Full"
|
2708 |
+
#~ msgstr ""
|
2709 |
+
|
2710 |
+
#~ msgid "Fat"
|
2711 |
+
#~ msgstr ""
|
2712 |
+
|
2713 |
+
#~ msgid "Minimal"
|
2714 |
+
#~ msgstr ""
|
2715 |
+
|
2716 |
+
#~ msgid "Icons"
|
2717 |
+
#~ msgstr ""
|
2718 |
+
|
2719 |
+
#~ msgid "Edgy"
|
2720 |
+
#~ msgstr ""
|
2721 |
+
|
2722 |
+
#~ msgid "Outlined"
|
2723 |
+
#~ msgstr ""
|
2724 |
+
|
2725 |
+
#~ msgid "Playful"
|
2726 |
+
#~ msgstr ""
|
2727 |
+
|
2728 |
+
#~ msgid "(inherit from player)"
|
2729 |
+
#~ msgstr ""
|
2730 |
+
|
2731 |
+
#~ msgid "Second line."
|
2732 |
+
#~ msgstr ""
|
2733 |
+
|
2734 |
+
#~ msgid "Enable"
|
2735 |
+
#~ msgstr ""
|
2736 |
+
|
2737 |
+
#~ msgid "Placement"
|
2738 |
+
#~ msgstr ""
|
2739 |
+
|
2740 |
+
#~ msgid "Player width [px]"
|
2741 |
+
#~ msgstr ""
|
2742 |
+
|
2743 |
+
#~ msgid "Basic Setup"
|
2744 |
+
#~ msgstr ""
|
2745 |
+
|
2746 |
+
#~ msgid "Installation"
|
2747 |
+
#~ msgstr ""
|
2748 |
+
|
2749 |
+
#~ msgid "Start up guide"
|
2750 |
+
#~ msgstr ""
|
2751 |
+
|
2752 |
+
#~ msgid "Alignment Settings"
|
2753 |
+
#~ msgstr ""
|
2754 |
+
|
2755 |
+
#~ msgid "Customizing FV Player Skin"
|
2756 |
+
#~ msgstr ""
|
2757 |
+
|
2758 |
+
#~ msgid "Sharing Videos on Social Media"
|
2759 |
+
#~ msgstr ""
|
2760 |
+
|
2761 |
+
#~ msgid "Email Sharing"
|
2762 |
+
#~ msgstr ""
|
2763 |
+
|
2764 |
+
#~ msgid "Using the Iframe Embedding"
|
2765 |
+
#~ msgstr ""
|
2766 |
+
|
2767 |
+
#~ msgid "Using the Video Lightbox Effect"
|
2768 |
+
#~ msgstr ""
|
2769 |
+
|
2770 |
+
#~ msgid "Video Encoding for HTML 5"
|
2771 |
+
#~ msgstr ""
|
2772 |
+
|
2773 |
+
#~ msgid "How to Create Playlists"
|
2774 |
+
#~ msgstr ""
|
2775 |
+
|
2776 |
+
#~ msgid "VTT Chapters"
|
2777 |
+
#~ msgstr ""
|
2778 |
+
|
2779 |
+
#~ msgid "Adding Titles and Splash Text"
|
2780 |
+
#~ msgstr ""
|
2781 |
+
|
2782 |
+
#~ msgid "Setting Up Video Quality Switching"
|
2783 |
+
#~ msgstr ""
|
2784 |
+
|
2785 |
+
#~ msgid "How to Use the Built-in Video Checker"
|
2786 |
+
#~ msgstr ""
|
2787 |
+
|
2788 |
+
#~ msgid "Creating Video Links in FV Player"
|
2789 |
+
#~ msgstr ""
|
2790 |
+
|
2791 |
+
#~ msgid "Switching FV Player Pro to Beta"
|
2792 |
+
#~ msgstr ""
|
2793 |
+
|
2794 |
+
#~ msgid "FAQ"
|
2795 |
+
#~ msgstr ""
|
2796 |
+
|
2797 |
+
#~ msgid "WordPress Video Plugins Comparison"
|
2798 |
+
#~ msgstr ""
|
2799 |
+
|
2800 |
+
#~ msgid "List of Shortcode Parameters"
|
2801 |
+
#~ msgstr ""
|
2802 |
+
|
2803 |
+
#~ msgid "Video Hosting"
|
2804 |
+
#~ msgstr ""
|
2805 |
+
|
2806 |
+
#~ msgid "Using YouTube with FV Player"
|
2807 |
+
#~ msgstr ""
|
2808 |
+
|
2809 |
+
#~ msgid "How to Use Vimeo with WordPress"
|
2810 |
+
#~ msgstr ""
|
2811 |
+
|
2812 |
+
#~ msgid "Serving Private Videos with Amazon S3"
|
2813 |
+
#~ msgstr ""
|
2814 |
+
|
2815 |
+
#~ msgid "Serving Private Videos via CloudFront"
|
2816 |
+
#~ msgstr ""
|
2817 |
+
|
2818 |
+
#~ msgid "Using BunnyCDN with FV Player Pro"
|
2819 |
+
#~ msgstr ""
|
2820 |
+
|
2821 |
+
#~ msgid "Using KeyCDN With FV Player"
|
2822 |
+
#~ msgstr ""
|
2823 |
+
|
2824 |
+
#~ msgid "Using HLS With FV Player"
|
2825 |
+
#~ msgstr ""
|
2826 |
+
|
2827 |
+
#~ msgid "Advertising Options with FV Player"
|
2828 |
+
#~ msgstr ""
|
2829 |
+
|
2830 |
+
#~ msgid "Custom Video Ads in FV Player (pre-roll and post-roll)"
|
2831 |
+
#~ msgstr ""
|
2832 |
+
|
2833 |
+
#~ msgid "Overlay Ads in FV Player"
|
2834 |
+
#~ msgstr ""
|
2835 |
+
|
2836 |
+
#~ msgid "Google Video Advertising Options"
|
2837 |
+
#~ msgstr ""
|
2838 |
+
|
2839 |
+
#~ msgid "Incorporating Google Ads (AdSense)"
|
2840 |
+
#~ msgstr ""
|
2841 |
+
|
2842 |
+
#~ msgid "Video Actions: HTML Pop-ups"
|
2843 |
+
#~ msgstr ""
|
2844 |
+
|
2845 |
+
#~ msgid "Using ExoClick Ads With FV Player"
|
2846 |
+
#~ msgstr ""
|
2847 |
+
|
2848 |
+
#~ msgid "Advanced"
|
2849 |
+
#~ msgstr ""
|
2850 |
+
|
2851 |
+
#~ msgid "How to use FV Player Widget"
|
2852 |
+
#~ msgstr ""
|
2853 |
+
|
2854 |
+
#~ msgid "Setting up Video Custom Fields"
|
2855 |
+
#~ msgstr ""
|
2856 |
+
|
2857 |
+
#~ msgid "Using Google Analytics with FV Player"
|
2858 |
+
#~ msgstr ""
|
2859 |
+
|
2860 |
+
#~ msgid "AB Loop Function"
|
2861 |
+
#~ msgstr ""
|
2862 |
+
|
2863 |
+
#~ msgid "How to Create Subtitles"
|
2864 |
+
#~ msgstr ""
|
2865 |
+
|
2866 |
+
#~ msgid "Interactive Video Transcript"
|
2867 |
+
#~ msgstr ""
|
2868 |
+
|
2869 |
+
#~ msgid "How to Use Custom Start/End Time"
|
2870 |
+
#~ msgstr ""
|
2871 |
+
|
2872 |
+
#~ msgid "Sticky Video"
|
2873 |
+
#~ msgstr ""
|
2874 |
+
|
2875 |
+
#~ msgid "CSS Tips and Fixes"
|
2876 |
+
#~ msgstr ""
|
2877 |
+
|
2878 |
+
#~ msgid "Using FV Player with Minify Plugins"
|
2879 |
+
#~ msgstr ""
|
2880 |
+
|
2881 |
+
#~ msgid "How to Use the Speed Buttons"
|
2882 |
+
#~ msgstr ""
|
2883 |
+
|
2884 |
+
#~ msgid "Using FV Player with Sub-domains and Multi-Domains"
|
2885 |
+
#~ msgstr ""
|
2886 |
+
|
2887 |
+
#~ msgid "FV Player Profile Videos"
|
2888 |
+
#~ msgstr ""
|
2889 |
+
|
2890 |
+
#~ msgid "Video Downloading With Simple History Support"
|
2891 |
+
#~ msgstr ""
|
2892 |
+
|
2893 |
+
#~ msgid "Email Subscription Form Pop-ups"
|
2894 |
+
#~ msgstr ""
|
2895 |
+
|
2896 |
+
#~ msgid "Using FV Player With AMP"
|
2897 |
+
#~ msgstr ""
|
2898 |
+
|
2899 |
+
#~ msgid "Programmer’s Guide"
|
2900 |
+
#~ msgstr ""
|
2901 |
+
|
2902 |
+
#~ msgid "FV WordPress Flowplayer Downgrading"
|
2903 |
+
#~ msgstr ""
|
2904 |
+
|
2905 |
+
#~ msgid "Changelog"
|
2906 |
+
#~ msgstr ""
|
2907 |
+
|
2908 |
+
#~ msgid "Incompatible Plugins and Scripts"
|
2909 |
+
#~ msgstr ""
|
2910 |
+
|
2911 |
+
#~ msgid "Securing Your Video"
|
2912 |
+
#~ msgstr ""
|
2913 |
+
|
2914 |
+
#~ msgid "How to Protect Your Videos from Being Downloaded"
|
2915 |
+
#~ msgstr ""
|
2916 |
+
|
2917 |
+
#~ msgid "How to use RTMP streams with Flash"
|
2918 |
+
#~ msgstr ""
|
2919 |
+
|
2920 |
+
#~ msgid "How to setup encrypted HLS stream with Amazon Elastic Transcoder"
|
2921 |
+
#~ msgstr ""
|
2922 |
+
|
2923 |
+
#~ msgid "Protecting Videos With DRM Text"
|
2924 |
+
#~ msgstr ""
|
2925 |
+
|
2926 |
+
#~ msgid "VAST/VPAID Ads"
|
2927 |
+
#~ msgstr ""
|
2928 |
+
|
2929 |
+
#~ msgid "How to Use FV Player VAST"
|
2930 |
+
#~ msgstr ""
|
2931 |
+
|
2932 |
+
#~ msgid "Using URL Tags"
|
2933 |
+
#~ msgstr ""
|
2934 |
+
|
2935 |
+
#~ msgid "VAST Tester"
|
2936 |
+
#~ msgstr ""
|
2937 |
+
|
2938 |
+
#~ msgid "Tracking VAST and VPAID Ads With Google Analytics"
|
2939 |
+
#~ msgstr ""
|
2940 |
+
|
2941 |
+
#~ msgid "Using FV Player VAST Outside WordPress"
|
2942 |
+
#~ msgstr ""
|
2943 |
+
|
2944 |
+
#~ msgid "List of Sample VAST/VPAID Ad Tags"
|
2945 |
+
#~ msgstr ""
|
2946 |
+
|
2947 |
+
#~ msgid "Remove all data"
|
2948 |
+
#~ msgstr ""
|
2949 |
+
|
2950 |
+
#~ msgid "Tools"
|
2951 |
+
#~ msgstr ""
|
2952 |
+
|
2953 |
+
#~ msgid "Video SEO"
|
2954 |
+
#~ msgstr ""
|
2955 |
+
|
2956 |
+
#~ msgid "Custom CSS"
|
2957 |
+
#~ msgstr ""
|
2958 |
+
|
2959 |
+
#~ msgid "Rollback"
|
2960 |
+
#~ msgstr ""
|
2961 |
+
|
2962 |
+
#~ msgid "Uninstall"
|
2963 |
+
#~ msgstr ""
|
2964 |
+
|
2965 |
+
#~ msgid "Check license"
|
2966 |
+
#~ msgstr ""
|
2967 |
+
|
2968 |
+
#~ msgid "Embeds"
|
2969 |
+
#~ msgstr ""
|
2970 |
+
|
2971 |
+
#~ msgid "FV Player Pro is required to use this video type in playlist."
|
2972 |
+
#~ msgstr ""
|
2973 |
+
|
2974 |
+
#~ msgid "Title"
|
2975 |
+
#~ msgstr ""
|
2976 |
+
|
2977 |
+
#~ msgid "DVR stream"
|
2978 |
+
#~ msgstr ""
|
2979 |
+
|
2980 |
+
#~ msgid "Audio stream"
|
2981 |
+
#~ msgstr ""
|
2982 |
+
|
2983 |
+
#~ msgid "Pick existing player"
|
2984 |
+
#~ msgstr ""
|
languages/fv-wordpress-flowplayer-sk_SK.mo
CHANGED
Binary file
|
languages/fv-wordpress-flowplayer-sk_SK.po
CHANGED
@@ -1,17 +1,18 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: FV Wordpress Flowplayer v2.3.13\n"
|
4 |
-
"
|
5 |
-
"
|
|
|
6 |
"Last-Translator: Polak Maros <polak.maros@foliovision.com>\n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: sk_SK\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 1.8.11\n"
|
13 |
-
"X-Poedit-Basepath: ..\n"
|
14 |
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
|
|
|
|
15 |
"X-Poedit-KeywordsList: _e;_n;__\n"
|
16 |
"X-Poedit-SearchPath-0: .\n"
|
17 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
@@ -2128,6 +2129,27 @@ msgstr ""
|
|
2128 |
msgid "Ad Size"
|
2129 |
msgstr ""
|
2130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2131 |
#~ msgid "FV Flowplayer License Update"
|
2132 |
#~ msgstr "Aktualizovať FV Flowplayer licenciu"
|
2133 |
|
@@ -2216,20 +2238,616 @@ msgstr ""
|
|
2216 |
#~ "Poznámka pre admina: Upload videa je dočasne zakázaný, zaškrtnite "
|
2217 |
#~ "'Povoliť upload uživateľovi' v "
|
2218 |
|
2219 |
-
|
2220 |
-
|
|
|
2221 |
|
2222 |
-
msgid "
|
2223 |
-
msgstr "
|
2224 |
|
2225 |
-
msgid "
|
2226 |
-
msgstr "
|
2227 |
|
2228 |
-
msgid "
|
2229 |
-
msgstr "
|
2230 |
|
2231 |
-
|
2232 |
-
|
|
|
|
|
|
|
2233 |
|
2234 |
-
|
2235 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: FV Wordpress Flowplayer v2.3.13\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2021-10-21 10:26+0100\n"
|
6 |
+
"PO-Revision-Date: 2021-10-21 10:26+0100\n"
|
7 |
"Last-Translator: Polak Maros <polak.maros@foliovision.com>\n"
|
8 |
"Language-Team: \n"
|
9 |
"Language: sk_SK\n"
|
10 |
"MIME-Version: 1.0\n"
|
11 |
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
"Content-Transfer-Encoding: 8bit\n"
|
|
|
|
|
13 |
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
14 |
+
"X-Generator: Eazy Po 0.9.5.3\n"
|
15 |
+
"X-Poedit-Basepath: ..\n"
|
16 |
"X-Poedit-KeywordsList: _e;_n;__\n"
|
17 |
"X-Poedit-SearchPath-0: .\n"
|
18 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
2129 |
msgid "Ad Size"
|
2130 |
msgstr ""
|
2131 |
|
2132 |
+
msgid "All"
|
2133 |
+
msgstr "Všetko"
|
2134 |
+
|
2135 |
+
msgid "Play All"
|
2136 |
+
msgstr "Prehrať všetko"
|
2137 |
+
|
2138 |
+
msgid "Replay Playlist"
|
2139 |
+
msgstr "Opakuj playlist"
|
2140 |
+
|
2141 |
+
msgid "Repeat Track"
|
2142 |
+
msgstr "Opakuj video"
|
2143 |
+
|
2144 |
+
msgid "Shuffle Playlist"
|
2145 |
+
msgstr "Náhodný výber"
|
2146 |
+
|
2147 |
+
msgid "Item %d."
|
2148 |
+
msgstr "Video %d."
|
2149 |
+
|
2150 |
+
msgid "Click to unmute"
|
2151 |
+
msgstr "Zapnúť zvuk"
|
2152 |
+
|
2153 |
#~ msgid "FV Flowplayer License Update"
|
2154 |
#~ msgstr "Aktualizovať FV Flowplayer licenciu"
|
2155 |
|
2238 |
#~ "Poznámka pre admina: Upload videa je dočasne zakázaný, zaškrtnite "
|
2239 |
#~ "'Povoliť upload uživateľovi' v "
|
2240 |
|
2241 |
+
#, php-format
|
2242 |
+
#~ msgid "FV Player: Please upgrade to FV Player Pro version %s or above!"
|
2243 |
+
#~ msgstr ""
|
2244 |
|
2245 |
+
#~ msgid "Embed feature not supported in editor preview"
|
2246 |
+
#~ msgstr ""
|
2247 |
|
2248 |
+
#~ msgid "Link feature not supported in editor preview"
|
2249 |
+
#~ msgstr ""
|
2250 |
|
2251 |
+
#~ msgid "Video loading has stalled, click to reload"
|
2252 |
+
#~ msgstr ""
|
2253 |
|
2254 |
+
#, php-format
|
2255 |
+
#~ msgid "%s day"
|
2256 |
+
#~ msgid_plural "%s days"
|
2257 |
+
#~ msgstr[0] ""
|
2258 |
+
#~ msgstr[1] ""
|
2259 |
|
2260 |
+
#, php-format
|
2261 |
+
#~ msgid "%s hour"
|
2262 |
+
#~ msgid_plural "%s hours"
|
2263 |
+
#~ msgstr[0] ""
|
2264 |
+
#~ msgstr[1] ""
|
2265 |
+
|
2266 |
+
#, php-format
|
2267 |
+
#~ msgid "%s min"
|
2268 |
+
#~ msgid_plural "%s mins"
|
2269 |
+
#~ msgstr[0] ""
|
2270 |
+
#~ msgstr[1] ""
|
2271 |
+
|
2272 |
+
#, php-format
|
2273 |
+
#~ msgid "%s second"
|
2274 |
+
#~ msgid_plural "%s seconds"
|
2275 |
+
#~ msgstr[0] ""
|
2276 |
+
#~ msgstr[1] ""
|
2277 |
+
|
2278 |
+
#, php-format
|
2279 |
+
#~ msgid "%1$s and %2$s"
|
2280 |
+
#~ msgstr ""
|
2281 |
+
|
2282 |
+
#~ msgid "FV Player 7.5"
|
2283 |
+
#~ msgstr ""
|
2284 |
+
|
2285 |
+
#~ msgid "Thanks for letting me know!"
|
2286 |
+
#~ msgstr ""
|
2287 |
+
|
2288 |
+
#~ msgid "FV Player Video Lightbox"
|
2289 |
+
#~ msgstr ""
|
2290 |
+
|
2291 |
+
#~ msgid "FV Player database storage is here!"
|
2292 |
+
#~ msgstr ""
|
2293 |
+
|
2294 |
+
#~ msgid "FV Player Video Sitemap coverage"
|
2295 |
+
#~ msgstr ""
|
2296 |
+
|
2297 |
+
#~ msgid "Go to setting"
|
2298 |
+
#~ msgstr ""
|
2299 |
+
|
2300 |
+
#~ msgid "FV Player 7"
|
2301 |
+
#~ msgstr ""
|
2302 |
+
|
2303 |
+
#~ msgid "Africa (Cape Town)"
|
2304 |
+
#~ msgstr ""
|
2305 |
+
|
2306 |
+
#~ msgid "Asia Pacific (Hong Kong)"
|
2307 |
+
#~ msgstr ""
|
2308 |
+
|
2309 |
+
#~ msgid "Asia Pacific (Osaka-Local)"
|
2310 |
+
#~ msgstr ""
|
2311 |
+
|
2312 |
+
#~ msgid "China (Beijing)"
|
2313 |
+
#~ msgstr ""
|
2314 |
+
|
2315 |
+
#~ msgid "China (Ningxia)"
|
2316 |
+
#~ msgstr ""
|
2317 |
+
|
2318 |
+
#~ msgid "Europe (Frankfurt)"
|
2319 |
+
#~ msgstr ""
|
2320 |
+
|
2321 |
+
#~ msgid "Europe (Ireland)"
|
2322 |
+
#~ msgstr ""
|
2323 |
+
|
2324 |
+
#~ msgid "Europe (London)"
|
2325 |
+
#~ msgstr ""
|
2326 |
+
|
2327 |
+
#~ msgid "Europe (Milan)"
|
2328 |
+
#~ msgstr ""
|
2329 |
+
|
2330 |
+
#~ msgid "Europe (Paris)"
|
2331 |
+
#~ msgstr ""
|
2332 |
+
|
2333 |
+
#~ msgid "Europe (Stockholm)"
|
2334 |
+
#~ msgstr ""
|
2335 |
+
|
2336 |
+
#~ msgid "Middle East (Bahrain)"
|
2337 |
+
#~ msgstr ""
|
2338 |
+
|
2339 |
+
#~ msgid "An unknown error occurred"
|
2340 |
+
#~ msgstr ""
|
2341 |
+
|
2342 |
+
#~ msgid " extension installed successfully!"
|
2343 |
+
#~ msgstr ""
|
2344 |
+
|
2345 |
+
#~ msgid " extension install failed - "
|
2346 |
+
#~ msgstr ""
|
2347 |
+
|
2348 |
+
#~ msgid " extension upgraded successfully!"
|
2349 |
+
#~ msgstr ""
|
2350 |
+
|
2351 |
+
#~ msgid "Domain"
|
2352 |
+
#~ msgstr ""
|
2353 |
+
|
2354 |
+
#~ msgid "You can enter multiple domains separated by <code>,</code>."
|
2355 |
+
#~ msgstr ""
|
2356 |
+
|
2357 |
+
#~ msgid "Secure Token"
|
2358 |
+
#~ msgstr ""
|
2359 |
+
|
2360 |
+
#~ msgid "Draft"
|
2361 |
+
#~ msgstr ""
|
2362 |
+
|
2363 |
+
#~ msgid "Remove fancyBox"
|
2364 |
+
#~ msgstr ""
|
2365 |
+
|
2366 |
+
#~ msgid "Your gallery items will link to image files directly to allow this."
|
2367 |
+
#~ msgstr ""
|
2368 |
+
|
2369 |
+
#~ msgid "Player Name"
|
2370 |
+
#~ msgstr ""
|
2371 |
+
|
2372 |
+
#~ msgid "Date"
|
2373 |
+
#~ msgstr ""
|
2374 |
+
|
2375 |
+
#~ msgid "Author"
|
2376 |
+
#~ msgstr ""
|
2377 |
+
|
2378 |
+
#~ msgid "Chapters"
|
2379 |
+
#~ msgstr ""
|
2380 |
+
|
2381 |
+
#~ msgid "Transcript"
|
2382 |
+
#~ msgstr ""
|
2383 |
+
|
2384 |
+
#~ msgid "Embedded on"
|
2385 |
+
#~ msgstr ""
|
2386 |
+
|
2387 |
+
#~ msgid "Plays"
|
2388 |
+
#~ msgstr ""
|
2389 |
+
|
2390 |
+
#~ msgid "Players per page"
|
2391 |
+
#~ msgstr ""
|
2392 |
+
|
2393 |
+
#~ msgid "no region"
|
2394 |
+
#~ msgstr ""
|
2395 |
+
|
2396 |
+
#~ msgid "Remember video position"
|
2397 |
+
#~ msgstr ""
|
2398 |
+
|
2399 |
+
#~ msgid "Video Stats"
|
2400 |
+
#~ msgstr ""
|
2401 |
+
|
2402 |
+
#~ msgid "Gives you a daily count of video plays."
|
2403 |
+
#~ msgstr ""
|
2404 |
+
|
2405 |
+
#~ msgid "System Info"
|
2406 |
+
#~ msgstr ""
|
2407 |
+
|
2408 |
+
#~ msgid "Install"
|
2409 |
+
#~ msgstr ""
|
2410 |
+
|
2411 |
+
#~ msgid "Reset"
|
2412 |
+
#~ msgstr ""
|
2413 |
+
|
2414 |
+
#~ msgid "Login"
|
2415 |
+
#~ msgstr ""
|
2416 |
+
|
2417 |
+
#~ msgid "Password"
|
2418 |
+
#~ msgstr ""
|
2419 |
+
|
2420 |
+
#~ msgid "Sign in"
|
2421 |
+
#~ msgstr ""
|
2422 |
+
|
2423 |
+
#~ msgid "Hide the vi Ads tab"
|
2424 |
+
#~ msgstr ""
|
2425 |
+
|
2426 |
+
#~ msgid "video intelligence"
|
2427 |
+
#~ msgstr ""
|
2428 |
+
|
2429 |
+
#~ msgid "Account"
|
2430 |
+
#~ msgstr ""
|
2431 |
+
|
2432 |
+
#~ msgid "Hide vi Ads"
|
2433 |
+
#~ msgstr ""
|
2434 |
+
|
2435 |
+
#~ msgid "Free video intelligence ads"
|
2436 |
+
#~ msgstr ""
|
2437 |
+
|
2438 |
+
#~ msgid "Show the vi Ads tab again"
|
2439 |
+
#~ msgstr ""
|
2440 |
+
|
2441 |
+
#~ msgid "vi Ads"
|
2442 |
+
#~ msgstr ""
|
2443 |
+
|
2444 |
+
#~ msgid "Use XML Video Sitemap"
|
2445 |
+
#~ msgstr ""
|
2446 |
+
|
2447 |
+
#~ msgid "Sitemap Post Meta"
|
2448 |
+
#~ msgstr ""
|
2449 |
+
|
2450 |
+
#~ msgid "Amazon S3 Browser"
|
2451 |
+
#~ msgstr ""
|
2452 |
+
|
2453 |
+
#~ msgid "Show Amazon S3 Browser in the \"Add Video\" dialog."
|
2454 |
+
#~ msgstr ""
|
2455 |
+
|
2456 |
+
#~ msgid "Controlbar Always Visible"
|
2457 |
+
#~ msgstr ""
|
2458 |
+
|
2459 |
+
#~ msgid "Enter values in pixels or 100%."
|
2460 |
+
#~ msgstr ""
|
2461 |
+
|
2462 |
+
#~ msgid "Enable Chromecast"
|
2463 |
+
#~ msgstr ""
|
2464 |
+
|
2465 |
+
#~ msgid "Adds support for Google Chromecast."
|
2466 |
+
#~ msgstr ""
|
2467 |
+
|
2468 |
+
#~ msgid "Force HD Streaming"
|
2469 |
+
#~ msgstr ""
|
2470 |
+
|
2471 |
+
#~ msgid "Use HD quality for HLS/MPEG-DASH even on slow connections."
|
2472 |
+
#~ msgstr ""
|
2473 |
+
|
2474 |
+
#~ msgid "Matomo/Piwik Tracking"
|
2475 |
+
#~ msgstr ""
|
2476 |
+
|
2477 |
+
#~ msgid "matomo.your-domain.com"
|
2478 |
+
#~ msgstr ""
|
2479 |
+
|
2480 |
+
#~ msgid "Site ID"
|
2481 |
+
#~ msgstr ""
|
2482 |
+
|
2483 |
+
#~ msgid "Multiple video playback"
|
2484 |
+
#~ msgstr ""
|
2485 |
+
|
2486 |
+
#~ msgid "No Picture Button"
|
2487 |
+
#~ msgstr ""
|
2488 |
+
|
2489 |
+
#~ msgid "Adds a button to turn the video picture on and off."
|
2490 |
+
#~ msgstr ""
|
2491 |
+
|
2492 |
+
#~ msgid "Slider"
|
2493 |
+
#~ msgstr ""
|
2494 |
+
|
2495 |
+
#~ msgid "Vertical Season"
|
2496 |
+
#~ msgstr ""
|
2497 |
+
|
2498 |
+
#~ msgid "Polaroid"
|
2499 |
+
#~ msgstr ""
|
2500 |
+
|
2501 |
+
#~ msgid "Text"
|
2502 |
+
#~ msgstr ""
|
2503 |
+
|
2504 |
+
#~ msgid "Repeat Button"
|
2505 |
+
#~ msgstr ""
|
2506 |
+
|
2507 |
+
#~ msgid "Adds a button to set playlist/track repeat and shuffle."
|
2508 |
+
#~ msgstr ""
|
2509 |
+
|
2510 |
+
#~ msgid "Rewind/Forward Button"
|
2511 |
+
#~ msgstr ""
|
2512 |
+
|
2513 |
+
#~ msgid "Adds a button to go 10 seconds back/forth."
|
2514 |
+
#~ msgstr ""
|
2515 |
+
|
2516 |
+
#~ msgid "Maintenance tools and debug info."
|
2517 |
+
#~ msgstr ""
|
2518 |
+
|
2519 |
+
#~ msgid "Disable saving skin CSS to a static file"
|
2520 |
+
#~ msgstr ""
|
2521 |
+
|
2522 |
+
#~ msgid "Handle WordPress audio/video"
|
2523 |
+
#~ msgstr ""
|
2524 |
+
|
2525 |
+
#~ msgid "Optimize FV Flowplayer JS loading"
|
2526 |
+
#~ msgstr ""
|
2527 |
+
|
2528 |
+
#~ msgid "Helps with Google PageSpeed scores."
|
2529 |
+
#~ msgstr ""
|
2530 |
+
|
2531 |
+
#~ msgid "Alternative iOS fullscreen mode"
|
2532 |
+
#~ msgstr ""
|
2533 |
+
|
2534 |
+
#~ msgid "Force landscape orientation in fullscreen"
|
2535 |
+
#~ msgstr ""
|
2536 |
+
|
2537 |
+
#~ msgid "Works on the Android mobile, not supported on iOS unfortunately."
|
2538 |
+
#~ msgstr ""
|
2539 |
+
|
2540 |
+
#~ msgid " Adds the video meta data information for search engines."
|
2541 |
+
#~ msgstr ""
|
2542 |
+
|
2543 |
+
#~ msgid "Show on pause"
|
2544 |
+
#~ msgstr ""
|
2545 |
+
|
2546 |
+
#~ msgid "Playlist Item Titles"
|
2547 |
+
#~ msgstr ""
|
2548 |
+
|
2549 |
+
#~ msgid "Splash Text"
|
2550 |
+
#~ msgstr ""
|
2551 |
+
|
2552 |
+
#~ msgid "Sticky"
|
2553 |
+
#~ msgstr ""
|
2554 |
+
|
2555 |
+
#~ msgid "Synopsis"
|
2556 |
+
#~ msgstr ""
|
2557 |
+
|
2558 |
+
#~ msgid "Color"
|
2559 |
+
#~ msgstr ""
|
2560 |
+
|
2561 |
+
#~ msgid "Controlbar Fullscreen"
|
2562 |
+
#~ msgstr ""
|
2563 |
+
|
2564 |
+
#~ msgid "Enter value in em"
|
2565 |
+
#~ msgstr ""
|
2566 |
+
|
2567 |
+
#~ msgid "Buttons"
|
2568 |
+
#~ msgstr ""
|
2569 |
+
|
2570 |
+
#~ msgid "Timeline"
|
2571 |
+
#~ msgstr ""
|
2572 |
+
|
2573 |
+
#~ msgid "Slim"
|
2574 |
+
#~ msgstr ""
|
2575 |
+
|
2576 |
+
#~ msgid "Full"
|
2577 |
+
#~ msgstr ""
|
2578 |
+
|
2579 |
+
#~ msgid "Fat"
|
2580 |
+
#~ msgstr ""
|
2581 |
+
|
2582 |
+
#~ msgid "Minimal"
|
2583 |
+
#~ msgstr ""
|
2584 |
+
|
2585 |
+
#~ msgid "Icons"
|
2586 |
+
#~ msgstr ""
|
2587 |
+
|
2588 |
+
#~ msgid "Edgy"
|
2589 |
+
#~ msgstr ""
|
2590 |
+
|
2591 |
+
#~ msgid "Outlined"
|
2592 |
+
#~ msgstr ""
|
2593 |
+
|
2594 |
+
#~ msgid "Playful"
|
2595 |
+
#~ msgstr ""
|
2596 |
+
|
2597 |
+
#~ msgid "(inherit from player)"
|
2598 |
+
#~ msgstr ""
|
2599 |
+
|
2600 |
+
#~ msgid "Second line."
|
2601 |
+
#~ msgstr ""
|
2602 |
+
|
2603 |
+
#~ msgid "Enable"
|
2604 |
+
#~ msgstr ""
|
2605 |
+
|
2606 |
+
#~ msgid "Placement"
|
2607 |
+
#~ msgstr ""
|
2608 |
+
|
2609 |
+
#~ msgid "Player width [px]"
|
2610 |
+
#~ msgstr ""
|
2611 |
+
|
2612 |
+
#~ msgid "Basic Setup"
|
2613 |
+
#~ msgstr ""
|
2614 |
+
|
2615 |
+
#~ msgid "Installation"
|
2616 |
+
#~ msgstr ""
|
2617 |
+
|
2618 |
+
#~ msgid "Start up guide"
|
2619 |
+
#~ msgstr ""
|
2620 |
+
|
2621 |
+
#~ msgid "Alignment Settings"
|
2622 |
+
#~ msgstr ""
|
2623 |
+
|
2624 |
+
#~ msgid "Customizing FV Player Skin"
|
2625 |
+
#~ msgstr ""
|
2626 |
+
|
2627 |
+
#~ msgid "Sharing Videos on Social Media"
|
2628 |
+
#~ msgstr ""
|
2629 |
+
|
2630 |
+
#~ msgid "Email Sharing"
|
2631 |
+
#~ msgstr ""
|
2632 |
+
|
2633 |
+
#~ msgid "Using the Iframe Embedding"
|
2634 |
+
#~ msgstr ""
|
2635 |
+
|
2636 |
+
#~ msgid "Using the Video Lightbox Effect"
|
2637 |
+
#~ msgstr ""
|
2638 |
+
|
2639 |
+
#~ msgid "Video Encoding for HTML 5"
|
2640 |
+
#~ msgstr ""
|
2641 |
+
|
2642 |
+
#~ msgid "How to Create Playlists"
|
2643 |
+
#~ msgstr ""
|
2644 |
+
|
2645 |
+
#~ msgid "VTT Chapters"
|
2646 |
+
#~ msgstr ""
|
2647 |
+
|
2648 |
+
#~ msgid "Adding Titles and Splash Text"
|
2649 |
+
#~ msgstr ""
|
2650 |
+
|
2651 |
+
#~ msgid "Setting Up Video Quality Switching"
|
2652 |
+
#~ msgstr ""
|
2653 |
+
|
2654 |
+
#~ msgid "How to Use the Built-in Video Checker"
|
2655 |
+
#~ msgstr ""
|
2656 |
+
|
2657 |
+
#~ msgid "Creating Video Links in FV Player"
|
2658 |
+
#~ msgstr ""
|
2659 |
+
|
2660 |
+
#~ msgid "Switching FV Player Pro to Beta"
|
2661 |
+
#~ msgstr ""
|
2662 |
+
|
2663 |
+
#~ msgid "FAQ"
|
2664 |
+
#~ msgstr ""
|
2665 |
+
|
2666 |
+
#~ msgid "WordPress Video Plugins Comparison"
|
2667 |
+
#~ msgstr ""
|
2668 |
+
|
2669 |
+
#~ msgid "List of Shortcode Parameters"
|
2670 |
+
#~ msgstr ""
|
2671 |
+
|
2672 |
+
#~ msgid "Video Hosting"
|
2673 |
+
#~ msgstr ""
|
2674 |
+
|
2675 |
+
#~ msgid "Using YouTube with FV Player"
|
2676 |
+
#~ msgstr ""
|
2677 |
+
|
2678 |
+
#~ msgid "How to Use Vimeo with WordPress"
|
2679 |
+
#~ msgstr ""
|
2680 |
+
|
2681 |
+
#~ msgid "Serving Private Videos with Amazon S3"
|
2682 |
+
#~ msgstr ""
|
2683 |
+
|
2684 |
+
#~ msgid "Serving Private Videos via CloudFront"
|
2685 |
+
#~ msgstr ""
|
2686 |
+
|
2687 |
+
#~ msgid "Using BunnyCDN with FV Player Pro"
|
2688 |
+
#~ msgstr ""
|
2689 |
+
|
2690 |
+
#~ msgid "Using KeyCDN With FV Player"
|
2691 |
+
#~ msgstr ""
|
2692 |
+
|
2693 |
+
#~ msgid "Using HLS With FV Player"
|
2694 |
+
#~ msgstr ""
|
2695 |
+
|
2696 |
+
#~ msgid "Advertising Options with FV Player"
|
2697 |
+
#~ msgstr ""
|
2698 |
+
|
2699 |
+
#~ msgid "Custom Video Ads in FV Player (pre-roll and post-roll)"
|
2700 |
+
#~ msgstr ""
|
2701 |
+
|
2702 |
+
#~ msgid "Overlay Ads in FV Player"
|
2703 |
+
#~ msgstr ""
|
2704 |
+
|
2705 |
+
#~ msgid "Google Video Advertising Options"
|
2706 |
+
#~ msgstr ""
|
2707 |
+
|
2708 |
+
#~ msgid "Incorporating Google Ads (AdSense)"
|
2709 |
+
#~ msgstr ""
|
2710 |
+
|
2711 |
+
#~ msgid "Video Actions: HTML Pop-ups"
|
2712 |
+
#~ msgstr ""
|
2713 |
+
|
2714 |
+
#~ msgid "Using ExoClick Ads With FV Player"
|
2715 |
+
#~ msgstr ""
|
2716 |
+
|
2717 |
+
#~ msgid "Advanced"
|
2718 |
+
#~ msgstr ""
|
2719 |
+
|
2720 |
+
#~ msgid "How to use FV Player Widget"
|
2721 |
+
#~ msgstr ""
|
2722 |
+
|
2723 |
+
#~ msgid "Setting up Video Custom Fields"
|
2724 |
+
#~ msgstr ""
|
2725 |
+
|
2726 |
+
#~ msgid "Using Google Analytics with FV Player"
|
2727 |
+
#~ msgstr ""
|
2728 |
+
|
2729 |
+
#~ msgid "AB Loop Function"
|
2730 |
+
#~ msgstr ""
|
2731 |
+
|
2732 |
+
#~ msgid "How to Create Subtitles"
|
2733 |
+
#~ msgstr ""
|
2734 |
+
|
2735 |
+
#~ msgid "Interactive Video Transcript"
|
2736 |
+
#~ msgstr ""
|
2737 |
+
|
2738 |
+
#~ msgid "How to Use Custom Start/End Time"
|
2739 |
+
#~ msgstr ""
|
2740 |
+
|
2741 |
+
#~ msgid "Sticky Video"
|
2742 |
+
#~ msgstr ""
|
2743 |
+
|
2744 |
+
#~ msgid "CSS Tips and Fixes"
|
2745 |
+
#~ msgstr ""
|
2746 |
+
|
2747 |
+
#~ msgid "Using FV Player with Minify Plugins"
|
2748 |
+
#~ msgstr ""
|
2749 |
+
|
2750 |
+
#~ msgid "How to Use the Speed Buttons"
|
2751 |
+
#~ msgstr ""
|
2752 |
+
|
2753 |
+
#~ msgid "Using FV Player with Sub-domains and Multi-Domains"
|
2754 |
+
#~ msgstr ""
|
2755 |
+
|
2756 |
+
#~ msgid "FV Player Profile Videos"
|
2757 |
+
#~ msgstr ""
|
2758 |
+
|
2759 |
+
#~ msgid "Video Downloading With Simple History Support"
|
2760 |
+
#~ msgstr ""
|
2761 |
+
|
2762 |
+
#~ msgid "Email Subscription Form Pop-ups"
|
2763 |
+
#~ msgstr ""
|
2764 |
+
|
2765 |
+
#~ msgid "Using FV Player With AMP"
|
2766 |
+
#~ msgstr ""
|
2767 |
+
|
2768 |
+
#~ msgid "Programmer’s Guide"
|
2769 |
+
#~ msgstr ""
|
2770 |
+
|
2771 |
+
#~ msgid "FV WordPress Flowplayer Downgrading"
|
2772 |
+
#~ msgstr ""
|
2773 |
+
|
2774 |
+
#~ msgid "Changelog"
|
2775 |
+
#~ msgstr ""
|
2776 |
+
|
2777 |
+
#~ msgid "Incompatible Plugins and Scripts"
|
2778 |
+
#~ msgstr ""
|
2779 |
+
|
2780 |
+
#~ msgid "Securing Your Video"
|
2781 |
+
#~ msgstr ""
|
2782 |
+
|
2783 |
+
#~ msgid "How to Protect Your Videos from Being Downloaded"
|
2784 |
+
#~ msgstr ""
|
2785 |
+
|
2786 |
+
#~ msgid "How to use RTMP streams with Flash"
|
2787 |
+
#~ msgstr ""
|
2788 |
+
|
2789 |
+
#~ msgid "How to setup encrypted HLS stream with Amazon Elastic Transcoder"
|
2790 |
+
#~ msgstr ""
|
2791 |
+
|
2792 |
+
#~ msgid "Protecting Videos With DRM Text"
|
2793 |
+
#~ msgstr ""
|
2794 |
+
|
2795 |
+
#~ msgid "VAST/VPAID Ads"
|
2796 |
+
#~ msgstr ""
|
2797 |
+
|
2798 |
+
#~ msgid "How to Use FV Player VAST"
|
2799 |
+
#~ msgstr ""
|
2800 |
+
|
2801 |
+
#~ msgid "Using URL Tags"
|
2802 |
+
#~ msgstr ""
|
2803 |
+
|
2804 |
+
#~ msgid "VAST Tester"
|
2805 |
+
#~ msgstr ""
|
2806 |
+
|
2807 |
+
#~ msgid "Tracking VAST and VPAID Ads With Google Analytics"
|
2808 |
+
#~ msgstr ""
|
2809 |
+
|
2810 |
+
#~ msgid "Using FV Player VAST Outside WordPress"
|
2811 |
+
#~ msgstr ""
|
2812 |
+
|
2813 |
+
#~ msgid "List of Sample VAST/VPAID Ad Tags"
|
2814 |
+
#~ msgstr ""
|
2815 |
+
|
2816 |
+
#~ msgid "Remove all data"
|
2817 |
+
#~ msgstr ""
|
2818 |
+
|
2819 |
+
#~ msgid "Tools"
|
2820 |
+
#~ msgstr ""
|
2821 |
+
|
2822 |
+
#~ msgid "Video SEO"
|
2823 |
+
#~ msgstr ""
|
2824 |
+
|
2825 |
+
#~ msgid "Custom CSS"
|
2826 |
+
#~ msgstr ""
|
2827 |
+
|
2828 |
+
#~ msgid "Rollback"
|
2829 |
+
#~ msgstr ""
|
2830 |
+
|
2831 |
+
#~ msgid "Uninstall"
|
2832 |
+
#~ msgstr ""
|
2833 |
+
|
2834 |
+
#~ msgid "Check license"
|
2835 |
+
#~ msgstr ""
|
2836 |
+
|
2837 |
+
#~ msgid "Embeds"
|
2838 |
+
#~ msgstr ""
|
2839 |
+
|
2840 |
+
#~ msgid "FV Player Pro is required to use this video type in playlist."
|
2841 |
+
#~ msgstr ""
|
2842 |
+
|
2843 |
+
#~ msgid "Title"
|
2844 |
+
#~ msgstr ""
|
2845 |
+
|
2846 |
+
#~ msgid "DVR stream"
|
2847 |
+
#~ msgstr ""
|
2848 |
+
|
2849 |
+
#~ msgid "Audio stream"
|
2850 |
+
#~ msgstr ""
|
2851 |
+
|
2852 |
+
#~ msgid "Pick existing player"
|
2853 |
+
#~ msgstr ""
|
languages/fv-wordpress-flowplayer.pot
ADDED
@@ -0,0 +1,2806 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# SOME DESCRIPTIVE TITLE.
|
2 |
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
3 |
+
# This file is distributed under the same license as the PACKAGE package.
|
4 |
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
+
#
|
6 |
+
#: view/admin.php:1450 view/admin.php:1451
|
7 |
+
#, fuzzy
|
8 |
+
msgid ""
|
9 |
+
msgstr ""
|
10 |
+
"Project-Id-Version: PACKAGE VERSION\n"
|
11 |
+
"Report-Msgid-Bugs-To: \n"
|
12 |
+
"POT-Creation-Date: 2021-11-22 10:57+0100\n"
|
13 |
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
15 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
16 |
+
"Language: \n"
|
17 |
+
"MIME-Version: 1.0\n"
|
18 |
+
"Content-Type: text/plain; charset=CHARSET\n"
|
19 |
+
"Content-Transfer-Encoding: 8bit\n"
|
20 |
+
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
21 |
+
|
22 |
+
#: controller/backend.php:134
|
23 |
+
msgid ""
|
24 |
+
"We also recommend you to open any of your videos on your site and see if you "
|
25 |
+
"get a red warning message about JavaScript not working."
|
26 |
+
msgstr ""
|
27 |
+
|
28 |
+
#: controller/backend.php:149
|
29 |
+
msgid "FV Flowplayer script found: "
|
30 |
+
msgstr ""
|
31 |
+
|
32 |
+
#: controller/backend.php:164
|
33 |
+
msgid "jQuery library found: "
|
34 |
+
msgstr ""
|
35 |
+
|
36 |
+
#: controller/backend.php:360
|
37 |
+
msgid "License key acquired successfully. <a href=\"\">Reload</a>"
|
38 |
+
msgstr ""
|
39 |
+
|
40 |
+
#: controller/backend.php:631
|
41 |
+
#, php-format
|
42 |
+
msgid ""
|
43 |
+
"FV Player has found old shortcodes in the content of your posts. <a href="
|
44 |
+
"\"%1$s\">Run the conversion script.</a>"
|
45 |
+
msgstr ""
|
46 |
+
|
47 |
+
#: controller/backend.php:806
|
48 |
+
#, php-format
|
49 |
+
msgid "FV Player: Please upgrade to FV Player Pro version %s or above!"
|
50 |
+
msgstr ""
|
51 |
+
|
52 |
+
#: controller/backend.php:822
|
53 |
+
#, php-format
|
54 |
+
msgid ""
|
55 |
+
"FV Player: Please upgrade to FV Player Pay Per View version %s or above!"
|
56 |
+
msgstr ""
|
57 |
+
|
58 |
+
#: controller/backend.php:838
|
59 |
+
#, php-format
|
60 |
+
msgid ""
|
61 |
+
"FV Player: Please upgrade to FV Player Pay Per View for WooCommerce version "
|
62 |
+
"%s or above!"
|
63 |
+
msgstr ""
|
64 |
+
|
65 |
+
#: controller/editor.php:64
|
66 |
+
msgid "Embed feature not supported in editor preview"
|
67 |
+
msgstr ""
|
68 |
+
|
69 |
+
#: controller/editor.php:65
|
70 |
+
msgid "Link feature not supported in editor preview"
|
71 |
+
msgstr ""
|
72 |
+
|
73 |
+
#: controller/editor.php:66
|
74 |
+
msgid ""
|
75 |
+
"<div class=\"error\"><p>Cannot obtain video screenshot, please make sure the "
|
76 |
+
"video is served with <a href=\"https://foliovision.com/player/video-hosting/"
|
77 |
+
"hls#hls-js\">CORS headers</a>.</p></div>"
|
78 |
+
msgstr ""
|
79 |
+
|
80 |
+
#: controller/editor.php:101
|
81 |
+
msgid "Add FV Player"
|
82 |
+
msgstr ""
|
83 |
+
|
84 |
+
#: controller/editor.php:275
|
85 |
+
#, php-format
|
86 |
+
msgid ""
|
87 |
+
"Error retrieving a thumbnail from the URL <a href=\"%1$s\">%1$s</a> using "
|
88 |
+
"<code>wp_remote_get()</code><br />If opening that URL in your web browser "
|
89 |
+
"returns anything else than an error page, the problem may be related to your "
|
90 |
+
"web server and might be something your host administrator can solve."
|
91 |
+
msgstr ""
|
92 |
+
|
93 |
+
#: controller/editor.php:275
|
94 |
+
msgid "Error Details:"
|
95 |
+
msgstr ""
|
96 |
+
|
97 |
+
#: controller/editor.php:293
|
98 |
+
msgid "Unsupported MIME type:"
|
99 |
+
msgstr ""
|
100 |
+
|
101 |
+
#: controller/editor.php:304
|
102 |
+
msgid "Error uploading image data:"
|
103 |
+
msgstr ""
|
104 |
+
|
105 |
+
#: controller/frontend.php:44
|
106 |
+
msgid ""
|
107 |
+
" <a target=\"_blank\" href=\"https://foliovision.com/2017/05/issues-with-"
|
108 |
+
"vimeo-on-android\">Why?</a>"
|
109 |
+
msgstr ""
|
110 |
+
|
111 |
+
#: controller/frontend.php:48
|
112 |
+
msgid "Video loading aborted"
|
113 |
+
msgstr ""
|
114 |
+
|
115 |
+
#: controller/frontend.php:49
|
116 |
+
msgid "Network error"
|
117 |
+
msgstr ""
|
118 |
+
|
119 |
+
#: controller/frontend.php:50
|
120 |
+
msgid "Video not properly encoded"
|
121 |
+
msgstr ""
|
122 |
+
|
123 |
+
#: controller/frontend.php:51
|
124 |
+
msgid "Video file not found"
|
125 |
+
msgstr ""
|
126 |
+
|
127 |
+
#: controller/frontend.php:52
|
128 |
+
msgid "Unsupported video"
|
129 |
+
msgstr ""
|
130 |
+
|
131 |
+
#: controller/frontend.php:53
|
132 |
+
msgid "Skin not found"
|
133 |
+
msgstr ""
|
134 |
+
|
135 |
+
#: controller/frontend.php:54
|
136 |
+
msgid "SWF file not found"
|
137 |
+
msgstr ""
|
138 |
+
|
139 |
+
#: controller/frontend.php:55
|
140 |
+
msgid "Subtitles not found"
|
141 |
+
msgstr ""
|
142 |
+
|
143 |
+
#: controller/frontend.php:56
|
144 |
+
msgid "Invalid RTMP URL"
|
145 |
+
msgstr ""
|
146 |
+
|
147 |
+
#: controller/frontend.php:57
|
148 |
+
msgid "Unsupported video format. Try installing Adobe Flash."
|
149 |
+
msgstr ""
|
150 |
+
|
151 |
+
#: controller/frontend.php:58 models/flowplayer-frontend.php:360
|
152 |
+
#: models/flowplayer-frontend.php:379
|
153 |
+
msgid "Click to watch the video"
|
154 |
+
msgstr ""
|
155 |
+
|
156 |
+
#: controller/frontend.php:59 models/flowplayer-frontend.php:360
|
157 |
+
msgid "[This post contains video, click to play]"
|
158 |
+
msgstr ""
|
159 |
+
|
160 |
+
#: controller/frontend.php:60
|
161 |
+
msgid ""
|
162 |
+
"<h2>Video file expired.<br />Please reload the page and play it again.</h2>"
|
163 |
+
msgstr ""
|
164 |
+
|
165 |
+
#: controller/frontend.php:61
|
166 |
+
msgid ""
|
167 |
+
"<h2>Unsupported video format.<br />Please use a Flash compatible device.</h2>"
|
168 |
+
msgstr ""
|
169 |
+
|
170 |
+
#: controller/frontend.php:62
|
171 |
+
msgid "Mobile browser detected, serving low bandwidth video."
|
172 |
+
msgstr ""
|
173 |
+
|
174 |
+
#: controller/frontend.php:63
|
175 |
+
msgid "Click here for full quality"
|
176 |
+
msgstr ""
|
177 |
+
|
178 |
+
#: controller/frontend.php:64 controller/frontend.php:65
|
179 |
+
msgid ""
|
180 |
+
"<h2>Live stream load failed.</h2><h3>Please try again later, perhaps the "
|
181 |
+
"stream is currently offline.</h3>"
|
182 |
+
msgstr ""
|
183 |
+
|
184 |
+
#: controller/frontend.php:66
|
185 |
+
msgid "Please tell us what is wrong :"
|
186 |
+
msgstr ""
|
187 |
+
|
188 |
+
#: controller/frontend.php:67
|
189 |
+
msgid ""
|
190 |
+
"Please give us more information (a full sentence) so we can help you better"
|
191 |
+
msgstr ""
|
192 |
+
|
193 |
+
#: controller/frontend.php:68
|
194 |
+
msgid "Admin: Error parsing JSON"
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
+
#: controller/frontend.php:69
|
198 |
+
msgid "Admin: Video checker doesn't support IE 9."
|
199 |
+
msgstr ""
|
200 |
+
|
201 |
+
#: controller/frontend.php:70
|
202 |
+
msgid "Admin: Check failed."
|
203 |
+
msgstr ""
|
204 |
+
|
205 |
+
#: controller/frontend.php:71
|
206 |
+
msgid "Now Playing"
|
207 |
+
msgstr ""
|
208 |
+
|
209 |
+
#: controller/frontend.php:72
|
210 |
+
#, php-format
|
211 |
+
msgid "Item %d."
|
212 |
+
msgstr ""
|
213 |
+
|
214 |
+
#: controller/frontend.php:73
|
215 |
+
msgid "Play All"
|
216 |
+
msgstr ""
|
217 |
+
|
218 |
+
#: controller/frontend.php:74
|
219 |
+
msgid "All"
|
220 |
+
msgstr ""
|
221 |
+
|
222 |
+
#: controller/frontend.php:75
|
223 |
+
msgid "Replay Playlist"
|
224 |
+
msgstr ""
|
225 |
+
|
226 |
+
#: controller/frontend.php:76
|
227 |
+
msgid "Repeat Track"
|
228 |
+
msgstr ""
|
229 |
+
|
230 |
+
#: controller/frontend.php:77
|
231 |
+
msgid "Shuffle Playlist"
|
232 |
+
msgstr ""
|
233 |
+
|
234 |
+
#: controller/frontend.php:78
|
235 |
+
msgid "Video Issues"
|
236 |
+
msgstr ""
|
237 |
+
|
238 |
+
#: controller/frontend.php:79
|
239 |
+
msgid "Video loading has stalled, click to reload"
|
240 |
+
msgstr ""
|
241 |
+
|
242 |
+
#: controller/frontend.php:80
|
243 |
+
msgid "Video Link Copied to Clipboard"
|
244 |
+
msgstr ""
|
245 |
+
|
246 |
+
#: controller/frontend.php:81
|
247 |
+
#, php-format
|
248 |
+
msgid "<h2>Live stream scheduled</h2><p>Starting in <span>%d</span>.</p>"
|
249 |
+
msgstr ""
|
250 |
+
|
251 |
+
#: controller/frontend.php:82
|
252 |
+
#, php-format
|
253 |
+
msgid ""
|
254 |
+
"<h2>We are sorry, currently no live stream available.</h2><p>Retrying in "
|
255 |
+
"<span>%d</span> ...</p>"
|
256 |
+
msgstr ""
|
257 |
+
|
258 |
+
#: controller/frontend.php:83
|
259 |
+
#, php-format
|
260 |
+
msgid ""
|
261 |
+
"<h2>It appears the stream went down.</h2><p>Retrying in <span>%d</span> ...</"
|
262 |
+
"p>"
|
263 |
+
msgstr ""
|
264 |
+
|
265 |
+
#: controller/frontend.php:84
|
266 |
+
msgid "Embed Code Copied to Clipboard"
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: controller/frontend.php:85
|
270 |
+
msgid "Subtitles disabled"
|
271 |
+
msgstr ""
|
272 |
+
|
273 |
+
#: controller/frontend.php:86
|
274 |
+
msgid "Subtitles switched to "
|
275 |
+
msgstr ""
|
276 |
+
|
277 |
+
#: controller/frontend.php:87
|
278 |
+
msgid "This video has subtitles, that are not supported on your device."
|
279 |
+
msgstr ""
|
280 |
+
|
281 |
+
#: controller/frontend.php:88
|
282 |
+
msgid ""
|
283 |
+
"You are using an old Android device. If you experience issues with the video "
|
284 |
+
"please use <a href=\"https://play.google.com/store/apps/details?id=org."
|
285 |
+
"mozilla.firefox\">Firefox</a>."
|
286 |
+
msgstr ""
|
287 |
+
|
288 |
+
#: controller/frontend.php:89
|
289 |
+
msgid ""
|
290 |
+
"You are using the Samsung Browser which is an older and buggy version of "
|
291 |
+
"Google Chrome. If you experience issues with the video please use <a href="
|
292 |
+
"\"https://www.mozilla.org/en-US/firefox/new/\">Firefox</a> or other modern "
|
293 |
+
"browser."
|
294 |
+
msgstr ""
|
295 |
+
|
296 |
+
#: controller/frontend.php:90
|
297 |
+
msgid ""
|
298 |
+
"You are using an old Safari browser. If you experience issues with the video "
|
299 |
+
"please use <a href=\"https://www.mozilla.org/en-US/firefox/new/\">Firefox</"
|
300 |
+
"a> or other modern browser."
|
301 |
+
msgstr ""
|
302 |
+
|
303 |
+
#: controller/frontend.php:91
|
304 |
+
msgid ""
|
305 |
+
"You are using an old Chrome browser. Please make sure you use the latest "
|
306 |
+
"version."
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
+
#: controller/frontend.php:92
|
310 |
+
msgid ""
|
311 |
+
"You are using an old Firefox browser. Please make sure you use the latest "
|
312 |
+
"version."
|
313 |
+
msgstr ""
|
314 |
+
|
315 |
+
#: controller/frontend.php:93
|
316 |
+
msgid ""
|
317 |
+
"You are using a deprecated browser. If you experience issues with the video "
|
318 |
+
"please use <a href=\"https://www.mozilla.org/en-US/firefox/new/\">Firefox</"
|
319 |
+
"a> or other modern browser."
|
320 |
+
msgstr ""
|
321 |
+
|
322 |
+
#: controller/frontend.php:94
|
323 |
+
msgid "Quality"
|
324 |
+
msgstr ""
|
325 |
+
|
326 |
+
#: controller/frontend.php:95
|
327 |
+
msgid "Closed Captions"
|
328 |
+
msgstr ""
|
329 |
+
|
330 |
+
#: controller/frontend.php:96
|
331 |
+
msgid "No subtitles"
|
332 |
+
msgstr ""
|
333 |
+
|
334 |
+
#: controller/frontend.php:97
|
335 |
+
msgid "Speed"
|
336 |
+
msgstr ""
|
337 |
+
|
338 |
+
#: controller/frontend.php:98 controller/frontend.php:99
|
339 |
+
#, php-format
|
340 |
+
msgid "%s day"
|
341 |
+
msgid_plural "%s days"
|
342 |
+
msgstr[0] ""
|
343 |
+
msgstr[1] ""
|
344 |
+
|
345 |
+
#: controller/frontend.php:100 controller/frontend.php:101
|
346 |
+
#, php-format
|
347 |
+
msgid "%s hour"
|
348 |
+
msgid_plural "%s hours"
|
349 |
+
msgstr[0] ""
|
350 |
+
msgstr[1] ""
|
351 |
+
|
352 |
+
#: controller/frontend.php:102 controller/frontend.php:103
|
353 |
+
#, php-format
|
354 |
+
msgid "%s min"
|
355 |
+
msgid_plural "%s mins"
|
356 |
+
msgstr[0] ""
|
357 |
+
msgstr[1] ""
|
358 |
+
|
359 |
+
#: controller/frontend.php:104 controller/frontend.php:105
|
360 |
+
#, php-format
|
361 |
+
msgid "%s second"
|
362 |
+
msgid_plural "%s seconds"
|
363 |
+
msgstr[0] ""
|
364 |
+
msgstr[1] ""
|
365 |
+
|
366 |
+
#: controller/frontend.php:106
|
367 |
+
#, php-format
|
368 |
+
msgid "%1$s and %2$s"
|
369 |
+
msgstr ""
|
370 |
+
|
371 |
+
#: controller/frontend.php:107
|
372 |
+
msgid ""
|
373 |
+
"It appears you are using the Disable HTML5 Autoplay Chrome extension, "
|
374 |
+
"disable it to play videos"
|
375 |
+
msgstr ""
|
376 |
+
|
377 |
+
#: controller/frontend.php:108
|
378 |
+
msgid "Click to unmute"
|
379 |
+
msgstr ""
|
380 |
+
|
381 |
+
#: controller/frontend.php:109
|
382 |
+
msgid "AUD"
|
383 |
+
msgstr ""
|
384 |
+
|
385 |
+
#: controller/frontend.php:110
|
386 |
+
msgid "Audio"
|
387 |
+
msgstr ""
|
388 |
+
|
389 |
+
#: controller/frontend.php:598
|
390 |
+
#, php-format
|
391 |
+
msgid "Posts by %s"
|
392 |
+
msgstr ""
|
393 |
+
|
394 |
+
#: controller/settings.php:143
|
395 |
+
msgid "FV Player Video Checker"
|
396 |
+
msgstr ""
|
397 |
+
|
398 |
+
#: controller/settings.php:144
|
399 |
+
msgid ""
|
400 |
+
"<p>FV Player includes a <a href='https://foliovision.com/player/basic-setup/"
|
401 |
+
"how-to-use-video-checker' target='_blank'>free video checker</a> which will "
|
402 |
+
"check your videos for any encoding errors and helps ensure smooth playback "
|
403 |
+
"of all your videos. To work its magic, our video checker must contact our "
|
404 |
+
"server.</p><p>Would you like to enable the video encoding checker?</p>"
|
405 |
+
msgstr ""
|
406 |
+
|
407 |
+
#: controller/settings.php:146
|
408 |
+
msgid "Allow"
|
409 |
+
msgstr ""
|
410 |
+
|
411 |
+
#: controller/settings.php:147
|
412 |
+
msgid "Disable the video checker"
|
413 |
+
msgstr ""
|
414 |
+
|
415 |
+
#: controller/settings.php:155
|
416 |
+
msgid "FV Player 7.5"
|
417 |
+
msgstr ""
|
418 |
+
|
419 |
+
#: controller/settings.php:156
|
420 |
+
msgid ""
|
421 |
+
"<p>This new version includes several improvements:</p>\n"
|
422 |
+
" <ul style='list-style-type: revert; margin-left: 3em'>\n"
|
423 |
+
" <li>Editor autosave and preview improvements</li>\n"
|
424 |
+
" <li>FV Player Video Play Stats</li>\n"
|
425 |
+
" <li>Improved player JavaScript loading</li>\n"
|
426 |
+
" <li>Multiple video playback improvements</li>\n"
|
427 |
+
" </ul>\n"
|
428 |
+
" <p>You can read more about it in our <a href='https://foliovision.com/?"
|
429 |
+
"p=137472' target='_blank'>blog announcement</a>.</p>"
|
430 |
+
msgstr ""
|
431 |
+
|
432 |
+
#: controller/settings.php:165 controller/settings.php:176
|
433 |
+
#: controller/settings.php:187 controller/settings.php:198
|
434 |
+
#: controller/settings.php:218
|
435 |
+
msgid "Thanks for letting me know!"
|
436 |
+
msgstr ""
|
437 |
+
|
438 |
+
#: controller/settings.php:173
|
439 |
+
msgid "FV Player Video Lightbox"
|
440 |
+
msgstr ""
|
441 |
+
|
442 |
+
#: controller/settings.php:174
|
443 |
+
msgid ""
|
444 |
+
"<p>The lightbox technology has been changed from <a href='http://www."
|
445 |
+
"jacklmoore.com/colorbox/' target='_blank'>Colorbox</a> to <a href='https://"
|
446 |
+
"fancyapps.com/fancybox/3/' target='_blank'>fancyBox</a></p><p>Please <a "
|
447 |
+
"href='https://foliovision.com/support/fv-wordpress-flowplayer/bug-"
|
448 |
+
"reports#new-post' target='_blank'>let us know</a> in case you notice any "
|
449 |
+
"issues. You can check <a href='https://foliovision.com/player/demos/fv-"
|
450 |
+
"flowplayer-lightbox' target='_blank'>our FV Player demo page</a> of it too.</"
|
451 |
+
"p>"
|
452 |
+
msgstr ""
|
453 |
+
|
454 |
+
#: controller/settings.php:184
|
455 |
+
msgid "FV Player database storage is here!"
|
456 |
+
msgstr ""
|
457 |
+
|
458 |
+
#: controller/settings.php:185
|
459 |
+
msgid ""
|
460 |
+
"<p>Any new or updated FV Player instances will be stored in database. This "
|
461 |
+
"simplifies the shortcodes and increases FV Player reliability. You can read "
|
462 |
+
"the full announcement <a href='https://foliovision.com/2018/11/video-"
|
463 |
+
"database/' target='_blank'>here</a></p><p>Please <a href='https://"
|
464 |
+
"foliovision.com/support/fv-wordpress-flowplayer/bug-reports#new-post' "
|
465 |
+
"target='_blank'>let us know</a> in case you notice any issues. Advanced "
|
466 |
+
"users can keep using the old shortcodes, but from now on the FV Player "
|
467 |
+
"editor works with database only.</p>"
|
468 |
+
msgstr ""
|
469 |
+
|
470 |
+
#: controller/settings.php:195
|
471 |
+
msgid "FV Player Video Sitemap coverage"
|
472 |
+
msgstr ""
|
473 |
+
|
474 |
+
#: controller/settings.php:196
|
475 |
+
msgid ""
|
476 |
+
"<p>The XML Video Sitemap now includes a lot more videos as it uses the "
|
477 |
+
"individual player iframe embed links. Until now it was only possible to put "
|
478 |
+
"in videos using MP4 format without any kind of download protection.</"
|
479 |
+
"p><p>Please <a href='https://foliovision.com/support/fv-wordpress-flowplayer/"
|
480 |
+
"bug-reports#new-post' target='_blank'>let us know</a> in case you notice any "
|
481 |
+
"issues. Your members only videos stay protected and won't open, but let us "
|
482 |
+
"know if they appear in sitemap.</p>"
|
483 |
+
msgstr ""
|
484 |
+
|
485 |
+
#: controller/settings.php:199
|
486 |
+
msgid "Go to setting"
|
487 |
+
msgstr ""
|
488 |
+
|
489 |
+
#: controller/settings.php:208
|
490 |
+
msgid "FV Player 7"
|
491 |
+
msgstr ""
|
492 |
+
|
493 |
+
#: controller/settings.php:230
|
494 |
+
msgid "FV Flowplayer License Expired"
|
495 |
+
msgstr ""
|
496 |
+
|
497 |
+
#: controller/settings.php:233
|
498 |
+
msgid "Hide this notice"
|
499 |
+
msgstr ""
|
500 |
+
|
501 |
+
#: controller/settings.php:234
|
502 |
+
msgid "I'll check this later"
|
503 |
+
msgstr ""
|
504 |
+
|
505 |
+
#: controller/settings.php:400
|
506 |
+
msgid "Africa (Cape Town)"
|
507 |
+
msgstr ""
|
508 |
+
|
509 |
+
#: controller/settings.php:401
|
510 |
+
msgid "Asia Pacific (Hong Kong)"
|
511 |
+
msgstr ""
|
512 |
+
|
513 |
+
#: controller/settings.php:402
|
514 |
+
msgid "Asia Pacific (Mumbai)"
|
515 |
+
msgstr ""
|
516 |
+
|
517 |
+
#: controller/settings.php:403
|
518 |
+
msgid "Asia Pacific (Osaka-Local)"
|
519 |
+
msgstr ""
|
520 |
+
|
521 |
+
#: controller/settings.php:404
|
522 |
+
msgid "Asia Pacific (Seoul)"
|
523 |
+
msgstr ""
|
524 |
+
|
525 |
+
#: controller/settings.php:405
|
526 |
+
msgid "Asia Pacific (Singapore)"
|
527 |
+
msgstr ""
|
528 |
+
|
529 |
+
#: controller/settings.php:406
|
530 |
+
msgid "Asia Pacific (Sydney)"
|
531 |
+
msgstr ""
|
532 |
+
|
533 |
+
#: controller/settings.php:407
|
534 |
+
msgid "Asia Pacific (Tokyo)"
|
535 |
+
msgstr ""
|
536 |
+
|
537 |
+
#: controller/settings.php:409
|
538 |
+
msgid "Canada (Central)"
|
539 |
+
msgstr ""
|
540 |
+
|
541 |
+
#: controller/settings.php:411
|
542 |
+
msgid "China (Beijing)"
|
543 |
+
msgstr ""
|
544 |
+
|
545 |
+
#: controller/settings.php:412
|
546 |
+
msgid "China (Ningxia)"
|
547 |
+
msgstr ""
|
548 |
+
|
549 |
+
#: controller/settings.php:414
|
550 |
+
msgid "Europe (Frankfurt)"
|
551 |
+
msgstr ""
|
552 |
+
|
553 |
+
#: controller/settings.php:415
|
554 |
+
msgid "Europe (Ireland)"
|
555 |
+
msgstr ""
|
556 |
+
|
557 |
+
#: controller/settings.php:416
|
558 |
+
msgid "Europe (London)"
|
559 |
+
msgstr ""
|
560 |
+
|
561 |
+
#: controller/settings.php:417
|
562 |
+
msgid "Europe (Milan)"
|
563 |
+
msgstr ""
|
564 |
+
|
565 |
+
#: controller/settings.php:418
|
566 |
+
msgid "Europe (Paris)"
|
567 |
+
msgstr ""
|
568 |
+
|
569 |
+
#: controller/settings.php:419
|
570 |
+
msgid "Europe (Stockholm)"
|
571 |
+
msgstr ""
|
572 |
+
|
573 |
+
#: controller/settings.php:421
|
574 |
+
msgid "Middle East (Bahrain)"
|
575 |
+
msgstr ""
|
576 |
+
|
577 |
+
#: controller/settings.php:423
|
578 |
+
msgid "South America (São Paulo)"
|
579 |
+
msgstr ""
|
580 |
+
|
581 |
+
#: controller/settings.php:425
|
582 |
+
msgid "US West (N. California)"
|
583 |
+
msgstr ""
|
584 |
+
|
585 |
+
#: controller/settings.php:426
|
586 |
+
msgid "US East (N. Virginia)"
|
587 |
+
msgstr ""
|
588 |
+
|
589 |
+
#: controller/settings.php:427
|
590 |
+
msgid "US East (Ohio)"
|
591 |
+
msgstr ""
|
592 |
+
|
593 |
+
#: controller/settings.php:428
|
594 |
+
msgid "US West (Oregon)"
|
595 |
+
msgstr ""
|
596 |
+
|
597 |
+
#: includes/fp-api-private.php:417
|
598 |
+
msgid ""
|
599 |
+
"An Unexpected HTTP Error occurred during the API request.</p> <p><a href=\"?"
|
600 |
+
"\" onclick=\"document.location.reload(); return false;\">Try again</a>"
|
601 |
+
msgstr ""
|
602 |
+
|
603 |
+
#: includes/fp-api-private.php:420
|
604 |
+
msgid "An unknown error occurred"
|
605 |
+
msgstr ""
|
606 |
+
|
607 |
+
#: includes/fp-api-private.php:882
|
608 |
+
msgid " extension installed successfully!"
|
609 |
+
msgstr ""
|
610 |
+
|
611 |
+
#: includes/fp-api-private.php:891 includes/fp-api-private.php:900
|
612 |
+
msgid " extension install failed - "
|
613 |
+
msgstr ""
|
614 |
+
|
615 |
+
#: includes/fp-api-private.php:906
|
616 |
+
msgid " extension upgraded successfully!"
|
617 |
+
msgstr ""
|
618 |
+
|
619 |
+
#: models/cdn.class.php:161
|
620 |
+
msgid "Domain"
|
621 |
+
msgstr ""
|
622 |
+
|
623 |
+
#: models/cdn.class.php:164
|
624 |
+
msgid "You can enter multiple domains separated by <code>,</code>."
|
625 |
+
msgstr ""
|
626 |
+
|
627 |
+
#: models/cdn.class.php:168
|
628 |
+
msgid "Secure Token"
|
629 |
+
msgstr ""
|
630 |
+
|
631 |
+
#: models/cdn.class.php:175 models/digitalocean-spaces.class.php:125
|
632 |
+
#: models/email-subscription.php:111 view/admin.php:75 view/admin.php:174
|
633 |
+
#: view/admin.php:372 view/admin.php:680 view/admin.php:698 view/admin.php:714
|
634 |
+
#: view/admin.php:765 view/admin.php:834 view/admin.php:889
|
635 |
+
#: view/admin.php:1111 view/admin.php:1456 view/admin.php:1484
|
636 |
+
#: view/admin.php:1525 view/admin.php:1565 view/admin.php:1699
|
637 |
+
msgid "Save All Changes"
|
638 |
+
msgstr ""
|
639 |
+
|
640 |
+
#: models/checker.php:366
|
641 |
+
msgid "Every 5 minutes"
|
642 |
+
msgstr ""
|
643 |
+
|
644 |
+
#: models/conversion.php:11
|
645 |
+
msgid "Conversion"
|
646 |
+
msgstr ""
|
647 |
+
|
648 |
+
#: models/conversion.php:17
|
649 |
+
msgid ""
|
650 |
+
"This section allows you to convert videos posted using other plugins to FV "
|
651 |
+
"Player shortcodes."
|
652 |
+
msgstr ""
|
653 |
+
|
654 |
+
#: models/conversion.php:21
|
655 |
+
msgid "Convert JW Player shortcodes"
|
656 |
+
msgstr ""
|
657 |
+
|
658 |
+
#: models/conversion.php:21
|
659 |
+
msgid ""
|
660 |
+
"This converts the [jwplayer] shortcodes into [fvplayer] shortcodes.\\n\\n "
|
661 |
+
"Please make sure you backup your database before continuing. You can use "
|
662 |
+
"revisions to get back to previos versions of your posts as well."
|
663 |
+
msgstr ""
|
664 |
+
|
665 |
+
#: models/custom-videos.php:262 models/custom-videos.php:292
|
666 |
+
#: models/custom-videos.php:402 models/list-table.php:70
|
667 |
+
msgid "Videos"
|
668 |
+
msgstr ""
|
669 |
+
|
670 |
+
#: models/custom-videos.php:408
|
671 |
+
msgid "You can put your Vimeo or YouTube links here."
|
672 |
+
msgstr ""
|
673 |
+
|
674 |
+
#: models/custom-videos.php:408
|
675 |
+
msgid ""
|
676 |
+
"These show up as a part of the user bio. Licensed users get FV Player Pro "
|
677 |
+
"which embeds these video types in FV Player interface without Vimeo or "
|
678 |
+
"YouTube interface showing up."
|
679 |
+
msgstr ""
|
680 |
+
|
681 |
+
#: models/custom-videos.php:427
|
682 |
+
msgid "Profile Videos"
|
683 |
+
msgstr ""
|
684 |
+
|
685 |
+
#: models/db-video.php:655
|
686 |
+
msgctxt "Comma-separated list of search stopwords in your language"
|
687 |
+
msgid ""
|
688 |
+
"about,an,are,as,at,be,by,com,for,from,how,in,is,it,of,on,or,that,the,this,to,"
|
689 |
+
"was,what,when,where,who,will,with,www"
|
690 |
+
msgstr ""
|
691 |
+
|
692 |
+
#: models/db.php:382
|
693 |
+
msgid "Draft"
|
694 |
+
msgstr ""
|
695 |
+
|
696 |
+
#: models/email-subscription.php:56
|
697 |
+
msgid "Email Popups"
|
698 |
+
msgstr ""
|
699 |
+
|
700 |
+
#: models/email-subscription.php:57
|
701 |
+
msgid "Email Integration"
|
702 |
+
msgstr ""
|
703 |
+
|
704 |
+
#: models/email-subscription.php:97
|
705 |
+
msgid ""
|
706 |
+
"Enter your service API key and then assign it to a list which you create "
|
707 |
+
"above."
|
708 |
+
msgstr ""
|
709 |
+
|
710 |
+
#: models/email-subscription.php:101
|
711 |
+
msgid "Mailchimp API key"
|
712 |
+
msgstr ""
|
713 |
+
|
714 |
+
#: models/email-subscription.php:116
|
715 |
+
msgid "Please upgrade to PHP 5.3 or above to use the Mailchimp integration."
|
716 |
+
msgstr ""
|
717 |
+
|
718 |
+
#: models/email-subscription.php:132
|
719 |
+
msgid ""
|
720 |
+
"Lists defined here can be used for subscription box for each video or for "
|
721 |
+
"Default Popup above."
|
722 |
+
msgstr ""
|
723 |
+
|
724 |
+
#: models/email-subscription.php:140
|
725 |
+
msgid "Properties"
|
726 |
+
msgstr ""
|
727 |
+
|
728 |
+
#: models/email-subscription.php:142
|
729 |
+
msgid "Target List"
|
730 |
+
msgstr ""
|
731 |
+
|
732 |
+
#: models/email-subscription.php:144 models/system-info.php:222
|
733 |
+
msgid "Export"
|
734 |
+
msgstr ""
|
735 |
+
|
736 |
+
#: models/email-subscription.php:145 view/wizard.php:190
|
737 |
+
msgid "Options"
|
738 |
+
msgstr ""
|
739 |
+
|
740 |
+
#: models/email-subscription.php:146 view/admin.php:785
|
741 |
+
msgid "Status"
|
742 |
+
msgstr ""
|
743 |
+
|
744 |
+
#: models/email-subscription.php:204 models/email-subscription.php:640
|
745 |
+
msgid "Download CSV"
|
746 |
+
msgstr ""
|
747 |
+
|
748 |
+
#: models/email-subscription.php:206
|
749 |
+
msgid "View list"
|
750 |
+
msgstr ""
|
751 |
+
|
752 |
+
#: models/email-subscription.php:222 view/admin.php:823
|
753 |
+
msgid "Remove"
|
754 |
+
msgstr ""
|
755 |
+
|
756 |
+
#: models/email-subscription.php:237
|
757 |
+
msgid "Add More Lists"
|
758 |
+
msgstr ""
|
759 |
+
|
760 |
+
#: models/email-subscription.php:288
|
761 |
+
msgid "This is how the popup will appear at the end of a video"
|
762 |
+
msgstr ""
|
763 |
+
|
764 |
+
#: models/email-subscription.php:344
|
765 |
+
msgid "Email Address"
|
766 |
+
msgstr ""
|
767 |
+
|
768 |
+
#: models/email-subscription.php:345
|
769 |
+
msgid "Subscribe"
|
770 |
+
msgstr ""
|
771 |
+
|
772 |
+
#: models/email-subscription.php:433 models/email-subscription.php:499
|
773 |
+
msgid "Thank You for subscribing."
|
774 |
+
msgstr ""
|
775 |
+
|
776 |
+
#: models/email-subscription.php:442 models/email-subscription.php:533
|
777 |
+
msgid "Email Address already subscribed."
|
778 |
+
msgstr ""
|
779 |
+
|
780 |
+
#: models/email-subscription.php:448
|
781 |
+
msgid "Email Address not valid"
|
782 |
+
msgstr ""
|
783 |
+
|
784 |
+
#: models/email-subscription.php:510
|
785 |
+
msgid "Malformed Email Address."
|
786 |
+
msgstr ""
|
787 |
+
|
788 |
+
#: models/facebook-share.php:76
|
789 |
+
msgid ""
|
790 |
+
"When sharing your post to Facebook the first MP4 video will be shared "
|
791 |
+
"directly rather than the post excerpt."
|
792 |
+
msgstr ""
|
793 |
+
|
794 |
+
#: models/facebook-share.php:77
|
795 |
+
msgid ""
|
796 |
+
"<strong>Requirements</strong>: video has to be on https:// and splash screen "
|
797 |
+
"has to be present. Videos with download protection are automatically "
|
798 |
+
"excluded."
|
799 |
+
msgstr ""
|
800 |
+
|
801 |
+
#: models/flowplayer-frontend.php:379
|
802 |
+
msgid ""
|
803 |
+
"[This post contains advanced video player, click to open the original "
|
804 |
+
"website]"
|
805 |
+
msgstr ""
|
806 |
+
|
807 |
+
#: models/flowplayer.php:595 view/admin.php:332
|
808 |
+
msgid "Check out the amazing video here"
|
809 |
+
msgstr ""
|
810 |
+
|
811 |
+
#: models/flowplayer.php:2529 models/flowplayer.php:2539
|
812 |
+
msgid ""
|
813 |
+
"The preview is too narrow, vertical playlist will shift below the player as "
|
814 |
+
"it would on mobile."
|
815 |
+
msgstr ""
|
816 |
+
|
817 |
+
#: models/lightbox.php:515
|
818 |
+
msgid "Remove fancyBox"
|
819 |
+
msgstr ""
|
820 |
+
|
821 |
+
#: models/lightbox.php:515
|
822 |
+
msgid ""
|
823 |
+
"Use if FV Player lightbox is not working and you see a \"fancyBox already "
|
824 |
+
"initialized\" message on JavaScript console."
|
825 |
+
msgstr ""
|
826 |
+
|
827 |
+
#: models/lightbox.php:520 view/admin.php:938
|
828 |
+
msgid "Enable video lightbox"
|
829 |
+
msgstr ""
|
830 |
+
|
831 |
+
#: models/lightbox.php:520
|
832 |
+
msgid ""
|
833 |
+
"You can also put in <code><a href=\"http://path.to.your/video.mp4\" class="
|
834 |
+
"\"colorbox\">Your link title</a></code> for a quick lightboxed "
|
835 |
+
"video."
|
836 |
+
msgstr ""
|
837 |
+
|
838 |
+
#: models/lightbox.php:527
|
839 |
+
msgid "Use video lightbox for images as well"
|
840 |
+
msgstr ""
|
841 |
+
|
842 |
+
#: models/lightbox.php:532
|
843 |
+
msgid ""
|
844 |
+
"Will group images as well as videos into the same lightbox gallery. Turn "
|
845 |
+
"<strong>off</strong> your lightbox plugin when using this."
|
846 |
+
msgstr ""
|
847 |
+
|
848 |
+
#: models/lightbox.php:532
|
849 |
+
msgid ""
|
850 |
+
"Also works with WordPress <code>[gallery]</code> galleries - these are "
|
851 |
+
"automatically switched to link to image URLs rather than the attachment "
|
852 |
+
"pages."
|
853 |
+
msgstr ""
|
854 |
+
|
855 |
+
#: models/lightbox.php:537
|
856 |
+
msgid "Use video lightbox for WP Galleries"
|
857 |
+
msgstr ""
|
858 |
+
|
859 |
+
#: models/lightbox.php:542
|
860 |
+
msgid "Your gallery items will link to image files directly to allow this."
|
861 |
+
msgstr ""
|
862 |
+
|
863 |
+
#: models/list-table.php:66 models/widget.php:106
|
864 |
+
msgid "Player"
|
865 |
+
msgstr ""
|
866 |
+
|
867 |
+
#: models/list-table.php:67
|
868 |
+
msgid "Player Name"
|
869 |
+
msgstr ""
|
870 |
+
|
871 |
+
#: models/list-table.php:68
|
872 |
+
msgid "Date"
|
873 |
+
msgstr ""
|
874 |
+
|
875 |
+
#: models/list-table.php:69
|
876 |
+
msgid "Author"
|
877 |
+
msgstr ""
|
878 |
+
|
879 |
+
#: models/list-table.php:71 view/admin.php:1745 view/wizard.php:189
|
880 |
+
#: view/wizard.php:374
|
881 |
+
msgid "Subtitles"
|
882 |
+
msgstr ""
|
883 |
+
|
884 |
+
#: models/list-table.php:72
|
885 |
+
msgid "Chapters"
|
886 |
+
msgstr ""
|
887 |
+
|
888 |
+
#: models/list-table.php:73
|
889 |
+
msgid "Transcript"
|
890 |
+
msgstr ""
|
891 |
+
|
892 |
+
#: models/list-table.php:74 view/wizard.php:534
|
893 |
+
msgid "Embedded on"
|
894 |
+
msgstr ""
|
895 |
+
|
896 |
+
#: models/list-table.php:79
|
897 |
+
msgid "Plays"
|
898 |
+
msgstr ""
|
899 |
+
|
900 |
+
#: models/list-table.php:98
|
901 |
+
msgid "Players per page"
|
902 |
+
msgstr ""
|
903 |
+
|
904 |
+
#: models/media-browser-s3.php:261
|
905 |
+
msgid "no region"
|
906 |
+
msgstr ""
|
907 |
+
|
908 |
+
#: models/player-position-save.php:102
|
909 |
+
msgid "Remember video position"
|
910 |
+
msgstr ""
|
911 |
+
|
912 |
+
#: models/player-position-save.php:102
|
913 |
+
msgid ""
|
914 |
+
"Stores the last video play position for users, so they can continue watching "
|
915 |
+
"from where they left."
|
916 |
+
msgstr ""
|
917 |
+
|
918 |
+
#: models/player-position-save.php:102
|
919 |
+
msgid ""
|
920 |
+
"It stores in <code>wp_usermeta</code> database table for logged in users and "
|
921 |
+
"in a localStorage or cookie for guest users."
|
922 |
+
msgstr ""
|
923 |
+
|
924 |
+
#: models/stats.php:117
|
925 |
+
msgid "Video Stats"
|
926 |
+
msgstr ""
|
927 |
+
|
928 |
+
#: models/stats.php:117
|
929 |
+
msgid "Gives you a daily count of video plays."
|
930 |
+
msgstr ""
|
931 |
+
|
932 |
+
#: models/stats.php:117
|
933 |
+
msgid ""
|
934 |
+
"Uses a simple PHP script with a cron job to make sure these stats don't slow "
|
935 |
+
"down your server too much."
|
936 |
+
msgstr ""
|
937 |
+
|
938 |
+
#: models/system-info.php:11
|
939 |
+
msgid "System Info"
|
940 |
+
msgstr ""
|
941 |
+
|
942 |
+
#: models/video-intelligence.php:35
|
943 |
+
msgid "Install"
|
944 |
+
msgstr ""
|
945 |
+
|
946 |
+
#: models/video-intelligence.php:36
|
947 |
+
msgid "Reset"
|
948 |
+
msgstr ""
|
949 |
+
|
950 |
+
#: models/video-intelligence.php:42
|
951 |
+
msgid "Login"
|
952 |
+
msgstr ""
|
953 |
+
|
954 |
+
#: models/video-intelligence.php:50
|
955 |
+
msgid "Password"
|
956 |
+
msgstr ""
|
957 |
+
|
958 |
+
#: models/video-intelligence.php:61
|
959 |
+
msgid "Sign in"
|
960 |
+
msgstr ""
|
961 |
+
|
962 |
+
#: models/video-intelligence.php:132
|
963 |
+
msgid "Hide the vi Ads tab"
|
964 |
+
msgstr ""
|
965 |
+
|
966 |
+
#: models/video-intelligence.php:156
|
967 |
+
msgid "video intelligence"
|
968 |
+
msgstr ""
|
969 |
+
|
970 |
+
#: models/video-intelligence.php:157
|
971 |
+
msgid "Account"
|
972 |
+
msgstr ""
|
973 |
+
|
974 |
+
#: models/video-intelligence.php:158
|
975 |
+
msgid "Hide vi Ads"
|
976 |
+
msgstr ""
|
977 |
+
|
978 |
+
#: models/video-intelligence.php:160 models/video-intelligence.php:162
|
979 |
+
msgid "Free video intelligence ads"
|
980 |
+
msgstr ""
|
981 |
+
|
982 |
+
#: models/video-intelligence.php:179
|
983 |
+
msgid "Show the vi Ads tab again"
|
984 |
+
msgstr ""
|
985 |
+
|
986 |
+
#: models/video-intelligence.php:198
|
987 |
+
msgid "vi Ads"
|
988 |
+
msgstr ""
|
989 |
+
|
990 |
+
#: models/widget.php:11
|
991 |
+
msgid "FV Player widget."
|
992 |
+
msgstr ""
|
993 |
+
|
994 |
+
#: models/widget.php:13
|
995 |
+
msgid "FV Player"
|
996 |
+
msgstr ""
|
997 |
+
|
998 |
+
#: models/widget.php:98
|
999 |
+
msgid "Title:"
|
1000 |
+
msgstr ""
|
1001 |
+
|
1002 |
+
#: models/widget.php:107
|
1003 |
+
msgid "Edit"
|
1004 |
+
msgstr ""
|
1005 |
+
|
1006 |
+
#: models/xml-video-sitemap.php:467
|
1007 |
+
msgid "Use XML Video Sitemap"
|
1008 |
+
msgstr ""
|
1009 |
+
|
1010 |
+
#: models/xml-video-sitemap.php:467
|
1011 |
+
#, php-format
|
1012 |
+
msgid ""
|
1013 |
+
"Creates <code>%s</code> which you can submit via Google Webmaster Tools."
|
1014 |
+
msgstr ""
|
1015 |
+
|
1016 |
+
#: models/xml-video-sitemap.php:467
|
1017 |
+
msgid ""
|
1018 |
+
"As feeds tend to be cached by web browser make sure you clear your browser "
|
1019 |
+
"cache if you are doing some testing."
|
1020 |
+
msgstr ""
|
1021 |
+
|
1022 |
+
#: models/xml-video-sitemap.php:476
|
1023 |
+
msgid "Sitemap Post Meta"
|
1024 |
+
msgstr ""
|
1025 |
+
|
1026 |
+
#: models/xml-video-sitemap.php:476
|
1027 |
+
msgid ""
|
1028 |
+
"You can enter post meta keys here, use <code>,</code> to separate multiple "
|
1029 |
+
"values."
|
1030 |
+
msgstr ""
|
1031 |
+
|
1032 |
+
#: view/admin.php:33
|
1033 |
+
msgid "Default Ad Code"
|
1034 |
+
msgstr ""
|
1035 |
+
|
1036 |
+
#: view/admin.php:38
|
1037 |
+
msgid "Default set size"
|
1038 |
+
msgstr ""
|
1039 |
+
|
1040 |
+
#: view/admin.php:41
|
1041 |
+
msgid "Ad text"
|
1042 |
+
msgstr ""
|
1043 |
+
|
1044 |
+
#: view/admin.php:42
|
1045 |
+
msgid "Ad links"
|
1046 |
+
msgstr ""
|
1047 |
+
|
1048 |
+
#: view/admin.php:47
|
1049 |
+
msgid "Show After"
|
1050 |
+
msgstr ""
|
1051 |
+
|
1052 |
+
#: view/admin.php:52
|
1053 |
+
msgid "Ad CSS"
|
1054 |
+
msgstr ""
|
1055 |
+
|
1056 |
+
#: view/admin.php:53
|
1057 |
+
msgid "Show styling options"
|
1058 |
+
msgstr ""
|
1059 |
+
|
1060 |
+
#: view/admin.php:56
|
1061 |
+
msgid "Select your preset"
|
1062 |
+
msgstr ""
|
1063 |
+
|
1064 |
+
#: view/admin.php:57
|
1065 |
+
msgid "Default (white, centered above the control bar)"
|
1066 |
+
msgstr ""
|
1067 |
+
|
1068 |
+
#: view/admin.php:58
|
1069 |
+
msgid "White, centered at the bottom of the video"
|
1070 |
+
msgstr ""
|
1071 |
+
|
1072 |
+
#: view/admin.php:62
|
1073 |
+
msgid "(Hint: put .wpfp_custom_ad_content before your own CSS selectors)"
|
1074 |
+
msgstr ""
|
1075 |
+
|
1076 |
+
#: view/admin.php:109
|
1077 |
+
msgid ""
|
1078 |
+
"Secured Amazon S3 URLs are recommended for member-only sections of the site. "
|
1079 |
+
"We check the video length and make sure the link expiration time is big "
|
1080 |
+
"enough for the video to buffer properly."
|
1081 |
+
msgstr ""
|
1082 |
+
|
1083 |
+
#: view/admin.php:110
|
1084 |
+
msgid ""
|
1085 |
+
"If you use a cache plugin (such as Hyper Cache, WP Super Cache or W3 Total "
|
1086 |
+
"Cache), we recommend that you set the \"Default Expiration Time\" to twice "
|
1087 |
+
"as much as your cache timeout and check \"Force the default expiration time"
|
1088 |
+
"\". That way the video length won't be accounted and the video source URLs "
|
1089 |
+
"in your cached pages won't expire. Read more in the"
|
1090 |
+
msgstr ""
|
1091 |
+
|
1092 |
+
#: view/admin.php:110
|
1093 |
+
msgid "Using Amazon S3 secure content in FV Flowplayer guide"
|
1094 |
+
msgstr ""
|
1095 |
+
|
1096 |
+
#: view/admin.php:114
|
1097 |
+
msgid "Default Expiration Time [minutes]"
|
1098 |
+
msgstr ""
|
1099 |
+
|
1100 |
+
#: view/admin.php:114
|
1101 |
+
msgid ""
|
1102 |
+
"Each video duration is stored on post save and then used as the expire time. "
|
1103 |
+
"If the duration is not available, this value is used."
|
1104 |
+
msgstr ""
|
1105 |
+
|
1106 |
+
#: view/admin.php:120
|
1107 |
+
msgid "Force the default expiration time"
|
1108 |
+
msgstr ""
|
1109 |
+
|
1110 |
+
#: view/admin.php:121
|
1111 |
+
msgid "Amazon S3 Browser"
|
1112 |
+
msgstr ""
|
1113 |
+
|
1114 |
+
#: view/admin.php:121
|
1115 |
+
msgid "Show Amazon S3 Browser in the \"Add Video\" dialog."
|
1116 |
+
msgstr ""
|
1117 |
+
|
1118 |
+
#: view/admin.php:132
|
1119 |
+
msgid "Amazon Bucket"
|
1120 |
+
msgstr ""
|
1121 |
+
|
1122 |
+
#: view/admin.php:132
|
1123 |
+
msgid ""
|
1124 |
+
"We recommend that you simply put all of your protected video into a single "
|
1125 |
+
"bucket and enter its name here. All matching videos will use the protected "
|
1126 |
+
"URLs."
|
1127 |
+
msgstr ""
|
1128 |
+
|
1129 |
+
#: view/admin.php:136
|
1130 |
+
msgid "Region"
|
1131 |
+
msgstr ""
|
1132 |
+
|
1133 |
+
#: view/admin.php:139
|
1134 |
+
msgid "Select the region"
|
1135 |
+
msgstr ""
|
1136 |
+
|
1137 |
+
#: view/admin.php:152
|
1138 |
+
msgid "Access Key ID"
|
1139 |
+
msgstr ""
|
1140 |
+
|
1141 |
+
#: view/admin.php:156
|
1142 |
+
msgid "Secret Access Key"
|
1143 |
+
msgstr ""
|
1144 |
+
|
1145 |
+
#: view/admin.php:162
|
1146 |
+
msgid "remove"
|
1147 |
+
msgstr ""
|
1148 |
+
|
1149 |
+
#: view/admin.php:175
|
1150 |
+
msgid "Add more Amazon S3 secure buckets"
|
1151 |
+
msgstr ""
|
1152 |
+
|
1153 |
+
#: view/admin.php:191 view/admin.php:871 view/admin.php:1586
|
1154 |
+
msgid "Autoplay"
|
1155 |
+
msgstr ""
|
1156 |
+
|
1157 |
+
#: view/admin.php:203
|
1158 |
+
msgid ""
|
1159 |
+
"We make sure only one video per page autoplays. Mobile devices only support "
|
1160 |
+
"Muted autoplay."
|
1161 |
+
msgstr ""
|
1162 |
+
|
1163 |
+
#: view/admin.php:208
|
1164 |
+
msgid "Auto Buffering"
|
1165 |
+
msgstr ""
|
1166 |
+
|
1167 |
+
#: view/admin.php:208
|
1168 |
+
msgid "Works for first 2 videos on the page only, to preserve your bandwidth."
|
1169 |
+
msgstr ""
|
1170 |
+
|
1171 |
+
#: view/admin.php:209
|
1172 |
+
msgid "Controlbar Always Visible"
|
1173 |
+
msgstr ""
|
1174 |
+
|
1175 |
+
#: view/admin.php:211
|
1176 |
+
msgid "Default Video Size"
|
1177 |
+
msgstr ""
|
1178 |
+
|
1179 |
+
#: view/admin.php:214 view/wizard.php:289 view/wizard.php:419
|
1180 |
+
#: view/wizard.php:517
|
1181 |
+
msgid "Width"
|
1182 |
+
msgstr ""
|
1183 |
+
|
1184 |
+
#: view/admin.php:215 view/wizard.php:290 view/wizard.php:420
|
1185 |
+
#: view/wizard.php:518
|
1186 |
+
msgid "Height"
|
1187 |
+
msgstr ""
|
1188 |
+
|
1189 |
+
#: view/admin.php:216
|
1190 |
+
msgid "Enter values in pixels or 100%."
|
1191 |
+
msgstr ""
|
1192 |
+
|
1193 |
+
#: view/admin.php:221
|
1194 |
+
msgid "Default Volume"
|
1195 |
+
msgstr ""
|
1196 |
+
|
1197 |
+
#: view/admin.php:229
|
1198 |
+
msgid "Disable Admin Video Checker"
|
1199 |
+
msgstr ""
|
1200 |
+
|
1201 |
+
#: view/admin.php:229
|
1202 |
+
msgid ""
|
1203 |
+
"Checks your video encoding when you open a post with video as admin. "
|
1204 |
+
"Notifies you about possible playback issues."
|
1205 |
+
msgstr ""
|
1206 |
+
|
1207 |
+
#: view/admin.php:230
|
1208 |
+
msgid "Disable Embed Button"
|
1209 |
+
msgstr ""
|
1210 |
+
|
1211 |
+
#: view/admin.php:230
|
1212 |
+
msgid "Removes embed button from top bar."
|
1213 |
+
msgstr ""
|
1214 |
+
|
1215 |
+
#: view/admin.php:231
|
1216 |
+
msgid "Disable Playlist Autoadvance"
|
1217 |
+
msgstr ""
|
1218 |
+
|
1219 |
+
#: view/admin.php:231
|
1220 |
+
msgid "Playlist won't play the next video automatically."
|
1221 |
+
msgstr ""
|
1222 |
+
|
1223 |
+
#: view/admin.php:232
|
1224 |
+
msgid "Disable Sharing"
|
1225 |
+
msgstr ""
|
1226 |
+
|
1227 |
+
#: view/admin.php:232
|
1228 |
+
msgid "Removes sharing buttons from top bar."
|
1229 |
+
msgstr ""
|
1230 |
+
|
1231 |
+
#: view/admin.php:233
|
1232 |
+
msgid "Disable Video Links"
|
1233 |
+
msgstr ""
|
1234 |
+
|
1235 |
+
#: view/admin.php:233
|
1236 |
+
msgid "Removes the \"Link\" item to the top bar."
|
1237 |
+
msgstr ""
|
1238 |
+
|
1239 |
+
#: view/admin.php:233
|
1240 |
+
msgid ""
|
1241 |
+
"Clicking the video Link gives your visitors a link to the exact place in the "
|
1242 |
+
"video they are watching. If the post access is restricted, it won't make the "
|
1243 |
+
"video open to public."
|
1244 |
+
msgstr ""
|
1245 |
+
|
1246 |
+
#: view/admin.php:234
|
1247 |
+
msgid "Enable Chromecast"
|
1248 |
+
msgstr ""
|
1249 |
+
|
1250 |
+
#: view/admin.php:234
|
1251 |
+
msgid "Adds support for Google Chromecast."
|
1252 |
+
msgstr ""
|
1253 |
+
|
1254 |
+
#: view/admin.php:236
|
1255 |
+
msgid "Flash Streaming Server"
|
1256 |
+
msgstr ""
|
1257 |
+
|
1258 |
+
#: view/admin.php:239
|
1259 |
+
msgid "Enter your default RTMP streaming server (Amazon CloudFront domain)."
|
1260 |
+
msgstr ""
|
1261 |
+
|
1262 |
+
#: view/admin.php:244
|
1263 |
+
msgid "Force HD Streaming"
|
1264 |
+
msgstr ""
|
1265 |
+
|
1266 |
+
#: view/admin.php:244
|
1267 |
+
msgid "Use HD quality for HLS/MPEG-DASH even on slow connections."
|
1268 |
+
msgstr ""
|
1269 |
+
|
1270 |
+
#: view/admin.php:244
|
1271 |
+
msgid ""
|
1272 |
+
"User can still switch to lower quality by hand. Doesn't work on iPhones."
|
1273 |
+
msgstr ""
|
1274 |
+
|
1275 |
+
#: view/admin.php:246
|
1276 |
+
msgid "Fullscreen Button"
|
1277 |
+
msgstr ""
|
1278 |
+
|
1279 |
+
#: view/admin.php:246
|
1280 |
+
msgid "Adds fullscreen button to player top bar."
|
1281 |
+
msgstr ""
|
1282 |
+
|
1283 |
+
#: view/admin.php:249
|
1284 |
+
msgid "Google Analytics ID"
|
1285 |
+
msgstr ""
|
1286 |
+
|
1287 |
+
#: view/admin.php:252
|
1288 |
+
msgid "Will be automatically loaded when playing a video."
|
1289 |
+
msgstr ""
|
1290 |
+
|
1291 |
+
#: view/admin.php:265
|
1292 |
+
msgid "You have a valid FV Flowplayer license, you can put up your logo here"
|
1293 |
+
msgstr ""
|
1294 |
+
|
1295 |
+
#: view/admin.php:267
|
1296 |
+
msgid "You need to have a FV Flowplayer license to use it"
|
1297 |
+
msgstr ""
|
1298 |
+
|
1299 |
+
#: view/admin.php:271 view/admin.php:359
|
1300 |
+
msgid "Upload Image"
|
1301 |
+
msgstr ""
|
1302 |
+
|
1303 |
+
#: view/admin.php:277
|
1304 |
+
msgid "Position"
|
1305 |
+
msgstr ""
|
1306 |
+
|
1307 |
+
#: view/admin.php:278
|
1308 |
+
msgid "Bottom-left"
|
1309 |
+
msgstr ""
|
1310 |
+
|
1311 |
+
#: view/admin.php:279
|
1312 |
+
msgid "Bottom-right"
|
1313 |
+
msgstr ""
|
1314 |
+
|
1315 |
+
#: view/admin.php:280
|
1316 |
+
msgid "Top-left"
|
1317 |
+
msgstr ""
|
1318 |
+
|
1319 |
+
#: view/admin.php:281
|
1320 |
+
msgid "Top-right"
|
1321 |
+
msgstr ""
|
1322 |
+
|
1323 |
+
#: view/admin.php:287
|
1324 |
+
msgid "Matomo/Piwik Tracking"
|
1325 |
+
msgstr ""
|
1326 |
+
|
1327 |
+
#: view/admin.php:290
|
1328 |
+
msgid "matomo.your-domain.com"
|
1329 |
+
msgstr ""
|
1330 |
+
|
1331 |
+
#: view/admin.php:291
|
1332 |
+
msgid "Site ID"
|
1333 |
+
msgstr ""
|
1334 |
+
|
1335 |
+
#: view/admin.php:296
|
1336 |
+
msgid "Multiple video playback"
|
1337 |
+
msgstr ""
|
1338 |
+
|
1339 |
+
#: view/admin.php:296
|
1340 |
+
msgid ""
|
1341 |
+
"Allows multiple players to play at once. Only one player remains audible."
|
1342 |
+
msgstr ""
|
1343 |
+
|
1344 |
+
#: view/admin.php:298
|
1345 |
+
msgid "No Picture Button"
|
1346 |
+
msgstr ""
|
1347 |
+
|
1348 |
+
#: view/admin.php:298
|
1349 |
+
msgid "Adds a button to turn the video picture on and off."
|
1350 |
+
msgstr ""
|
1351 |
+
|
1352 |
+
#: view/admin.php:301
|
1353 |
+
msgid "Playlist style"
|
1354 |
+
msgstr ""
|
1355 |
+
|
1356 |
+
#: view/admin.php:308
|
1357 |
+
msgid "Horizontal"
|
1358 |
+
msgstr ""
|
1359 |
+
|
1360 |
+
#: view/admin.php:309
|
1361 |
+
msgid "Tabs"
|
1362 |
+
msgstr ""
|
1363 |
+
|
1364 |
+
#: view/admin.php:310
|
1365 |
+
msgid "Prev/Next"
|
1366 |
+
msgstr ""
|
1367 |
+
|
1368 |
+
#: view/admin.php:311
|
1369 |
+
msgid "Vertical"
|
1370 |
+
msgstr ""
|
1371 |
+
|
1372 |
+
#: view/admin.php:312
|
1373 |
+
msgid "Slider"
|
1374 |
+
msgstr ""
|
1375 |
+
|
1376 |
+
#: view/admin.php:313
|
1377 |
+
msgid "Vertical Season"
|
1378 |
+
msgstr ""
|
1379 |
+
|
1380 |
+
#: view/admin.php:314
|
1381 |
+
msgid "Polaroid"
|
1382 |
+
msgstr ""
|
1383 |
+
|
1384 |
+
#: view/admin.php:315
|
1385 |
+
msgid "Text"
|
1386 |
+
msgstr ""
|
1387 |
+
|
1388 |
+
#: view/admin.php:317
|
1389 |
+
msgid "Enter your default playlist style here"
|
1390 |
+
msgstr ""
|
1391 |
+
|
1392 |
+
#: view/admin.php:322
|
1393 |
+
msgid "Popup Box"
|
1394 |
+
msgstr ""
|
1395 |
+
|
1396 |
+
#: view/admin.php:322
|
1397 |
+
msgid ""
|
1398 |
+
"Shows a generic \"Would you like to replay the video?\" message at the end "
|
1399 |
+
"of each video."
|
1400 |
+
msgstr ""
|
1401 |
+
|
1402 |
+
#: view/admin.php:324
|
1403 |
+
msgid "Repeat Button"
|
1404 |
+
msgstr ""
|
1405 |
+
|
1406 |
+
#: view/admin.php:324
|
1407 |
+
msgid "Adds a button to set playlist/track repeat and shuffle."
|
1408 |
+
msgstr ""
|
1409 |
+
|
1410 |
+
#: view/admin.php:326
|
1411 |
+
msgid "Rewind/Forward Button"
|
1412 |
+
msgstr ""
|
1413 |
+
|
1414 |
+
#: view/admin.php:326
|
1415 |
+
msgid "Adds a button to go 10 seconds back/forth."
|
1416 |
+
msgstr ""
|
1417 |
+
|
1418 |
+
#: view/admin.php:329
|
1419 |
+
msgid "Sharing Text"
|
1420 |
+
msgstr ""
|
1421 |
+
|
1422 |
+
#: view/admin.php:337 view/admin.php:879
|
1423 |
+
msgid "Speed Buttons"
|
1424 |
+
msgstr ""
|
1425 |
+
|
1426 |
+
#: view/admin.php:337
|
1427 |
+
msgid ""
|
1428 |
+
"Speed buttons control playback speed and only work in HTML5 compatible "
|
1429 |
+
"browsers."
|
1430 |
+
msgstr ""
|
1431 |
+
|
1432 |
+
#: view/admin.php:340
|
1433 |
+
msgid "Speed Step"
|
1434 |
+
msgstr ""
|
1435 |
+
|
1436 |
+
#: view/admin.php:351
|
1437 |
+
msgid ""
|
1438 |
+
"Speed buttons will increase or decrease the speed in steps of selected value"
|
1439 |
+
msgstr ""
|
1440 |
+
|
1441 |
+
#: view/admin.php:356 view/wizard.php:318
|
1442 |
+
msgid "Splash Image"
|
1443 |
+
msgstr ""
|
1444 |
+
|
1445 |
+
#: view/admin.php:358
|
1446 |
+
msgid "Default which will be used for any player without its own splash image."
|
1447 |
+
msgstr ""
|
1448 |
+
|
1449 |
+
#: view/admin.php:362
|
1450 |
+
msgid "Subtitles On By Default"
|
1451 |
+
msgstr ""
|
1452 |
+
|
1453 |
+
#: view/admin.php:362
|
1454 |
+
msgid "Normally you have to hit a button in controlbar to turn on subtitles."
|
1455 |
+
msgstr ""
|
1456 |
+
|
1457 |
+
#: view/admin.php:367
|
1458 |
+
msgid ""
|
1459 |
+
"Missing settings? Check <a class=\"fv-settings-anchor\" href="
|
1460 |
+
"\"#fv_flowplayer_integrations\">Integrations/Compatbility</a> box below."
|
1461 |
+
msgstr ""
|
1462 |
+
|
1463 |
+
#: view/admin.php:479
|
1464 |
+
msgid "FV Player is a free, easy-to-use, and complete solution for embedding"
|
1465 |
+
msgstr ""
|
1466 |
+
|
1467 |
+
#: view/admin.php:481
|
1468 |
+
msgid "and"
|
1469 |
+
msgstr ""
|
1470 |
+
|
1471 |
+
#: view/admin.php:483
|
1472 |
+
msgid ""
|
1473 |
+
"videos into your posts or pages. With MP4 videos, FV Player offers 98% "
|
1474 |
+
"coverage even on mobile devices."
|
1475 |
+
msgstr ""
|
1476 |
+
|
1477 |
+
#: view/admin.php:500
|
1478 |
+
msgid "You can customize the colors of the player to match your website."
|
1479 |
+
msgstr ""
|
1480 |
+
|
1481 |
+
#: view/admin.php:517
|
1482 |
+
msgid "Here you can enable and configure advanced hosting options."
|
1483 |
+
msgstr ""
|
1484 |
+
|
1485 |
+
#: view/admin.php:534
|
1486 |
+
msgid "Here you can configure ads and banners that will be shown in the video."
|
1487 |
+
msgstr ""
|
1488 |
+
|
1489 |
+
#: view/admin.php:551
|
1490 |
+
msgid "Maintenance tools and debug info."
|
1491 |
+
msgstr ""
|
1492 |
+
|
1493 |
+
#: view/admin.php:571
|
1494 |
+
msgid ""
|
1495 |
+
"Purchase <a href=\"https://foliovision.com/player/download\" target=\"_blank"
|
1496 |
+
"\"><b>FV Player Licence</b></a>, and you will be able to configure multiple, "
|
1497 |
+
"clickable Video Ads, that can be played before or after Your videos."
|
1498 |
+
msgstr ""
|
1499 |
+
|
1500 |
+
#: view/admin.php:574
|
1501 |
+
msgid "You can configure video ads globally, or on a per video basis."
|
1502 |
+
msgstr ""
|
1503 |
+
|
1504 |
+
#: view/admin.php:577
|
1505 |
+
msgid ""
|
1506 |
+
"If you are interested in VAST or VPAID ads, then check out <a href=\"https://"
|
1507 |
+
"foliovision.com/player/vast\" target=\"_blank\"><b>FV Player VAST</b></a>."
|
1508 |
+
msgstr ""
|
1509 |
+
|
1510 |
+
#: view/admin.php:588
|
1511 |
+
msgid "Following options are suitable for web developers and programmers."
|
1512 |
+
msgstr ""
|
1513 |
+
|
1514 |
+
#: view/admin.php:591
|
1515 |
+
msgid "Add featured image automatically"
|
1516 |
+
msgstr ""
|
1517 |
+
|
1518 |
+
#: view/admin.php:591
|
1519 |
+
msgid ""
|
1520 |
+
"If the featured image is not set, splash image of the first player will be "
|
1521 |
+
"used."
|
1522 |
+
msgstr ""
|
1523 |
+
|
1524 |
+
#: view/admin.php:592
|
1525 |
+
msgid "Always use fixed size player"
|
1526 |
+
msgstr ""
|
1527 |
+
|
1528 |
+
#: view/admin.php:592
|
1529 |
+
msgid "Enable to force video size at cost of loosing the video responsiveness."
|
1530 |
+
msgstr ""
|
1531 |
+
|
1532 |
+
#: view/admin.php:593
|
1533 |
+
msgid "Disable saving skin CSS to a static file"
|
1534 |
+
msgstr ""
|
1535 |
+
|
1536 |
+
#: view/admin.php:593
|
1537 |
+
msgid ""
|
1538 |
+
"Normally the player CSS configuration is stored in wp-content/fv-player-"
|
1539 |
+
"custom/style-{blog_id}.css."
|
1540 |
+
msgstr ""
|
1541 |
+
|
1542 |
+
#: view/admin.php:593
|
1543 |
+
msgid ""
|
1544 |
+
"We do this to avoid a big style tag in your site <head>. Don't edit "
|
1545 |
+
"this file though, as it will be overwritten by plugin update or saving its "
|
1546 |
+
"options!"
|
1547 |
+
msgstr ""
|
1548 |
+
|
1549 |
+
#: view/admin.php:596
|
1550 |
+
msgid "Enable profile videos"
|
1551 |
+
msgstr ""
|
1552 |
+
|
1553 |
+
#: view/admin.php:601
|
1554 |
+
msgid ""
|
1555 |
+
"Check your site carefully after enabling. Videos attached to the user "
|
1556 |
+
"profile will be showing as a part of the user bio."
|
1557 |
+
msgstr ""
|
1558 |
+
|
1559 |
+
#: view/admin.php:603
|
1560 |
+
msgid ""
|
1561 |
+
"This feature is designed for YouTube and Vimeo videos and works best for our "
|
1562 |
+
"licensed users who get these videos playing without YouTube or Vimeo "
|
1563 |
+
"branding."
|
1564 |
+
msgstr ""
|
1565 |
+
|
1566 |
+
#: view/admin.php:604
|
1567 |
+
msgid ""
|
1568 |
+
"Some themes show author bio on the author post archive automatically "
|
1569 |
+
"(Genesis framework and others). Or you can also just put this code into your "
|
1570 |
+
"theme archive.php template, right before <code>while ( have_posts() )</code> "
|
1571 |
+
"is called:"
|
1572 |
+
msgstr ""
|
1573 |
+
|
1574 |
+
#: view/admin.php:620
|
1575 |
+
msgid "We will be adding integration for it for popular user profile plugins."
|
1576 |
+
msgstr ""
|
1577 |
+
|
1578 |
+
#: view/admin.php:627
|
1579 |
+
msgid "Handle WordPress audio/video"
|
1580 |
+
msgstr ""
|
1581 |
+
|
1582 |
+
#: view/admin.php:628
|
1583 |
+
msgid "Load FV Flowplayer JS everywhere"
|
1584 |
+
msgstr ""
|
1585 |
+
|
1586 |
+
#: view/admin.php:628
|
1587 |
+
msgid ""
|
1588 |
+
"If you use some special JavaScript integration you might prefer this option."
|
1589 |
+
msgstr ""
|
1590 |
+
|
1591 |
+
#: view/admin.php:628
|
1592 |
+
msgid ""
|
1593 |
+
"Otherwise our JavaScript only loads if the shortcode is found in any of the "
|
1594 |
+
"posts being currently displayed. Required if you load content using Ajax, "
|
1595 |
+
"like in various LMS systems."
|
1596 |
+
msgstr ""
|
1597 |
+
|
1598 |
+
#: view/admin.php:629
|
1599 |
+
msgid "Optimize FV Flowplayer JS loading"
|
1600 |
+
msgstr ""
|
1601 |
+
|
1602 |
+
#: view/admin.php:629
|
1603 |
+
msgid "Helps with Google PageSpeed scores."
|
1604 |
+
msgstr ""
|
1605 |
+
|
1606 |
+
#: view/admin.php:629
|
1607 |
+
msgid ""
|
1608 |
+
"FV Player JavaScript will be only loaded once the user user start to use the "
|
1609 |
+
"page or on video tap."
|
1610 |
+
msgstr ""
|
1611 |
+
|
1612 |
+
#: view/admin.php:630
|
1613 |
+
msgid "Parse old shortcodes with commas"
|
1614 |
+
msgstr ""
|
1615 |
+
|
1616 |
+
#: view/admin.php:630
|
1617 |
+
msgid ""
|
1618 |
+
"Older versions of this plugin used commas to sepparate shortcode parameters."
|
1619 |
+
msgstr ""
|
1620 |
+
|
1621 |
+
#: view/admin.php:630
|
1622 |
+
msgid ""
|
1623 |
+
"This option will make sure it works with current version. Turn this off if "
|
1624 |
+
"you have some problems with display or other plugins which use shortcodes."
|
1625 |
+
msgstr ""
|
1626 |
+
|
1627 |
+
#: view/admin.php:631
|
1628 |
+
msgid "Parse Vimeo and YouTube links"
|
1629 |
+
msgstr ""
|
1630 |
+
|
1631 |
+
#: view/admin.php:631
|
1632 |
+
msgid ""
|
1633 |
+
"Affects comments, bbPress and BuddyPress. These links will be displayed as "
|
1634 |
+
"videos."
|
1635 |
+
msgstr ""
|
1636 |
+
|
1637 |
+
#: view/admin.php:631
|
1638 |
+
msgid ""
|
1639 |
+
"This option makes most sense together with FV Player Pro as it embeds these "
|
1640 |
+
"videos using FV Player. Enables use of shortcodes in comments and bbPress."
|
1641 |
+
msgstr ""
|
1642 |
+
|
1643 |
+
#: view/admin.php:632
|
1644 |
+
msgid "Post Thumbnail"
|
1645 |
+
msgstr ""
|
1646 |
+
|
1647 |
+
#: view/admin.php:632
|
1648 |
+
msgid ""
|
1649 |
+
"Setting a video splash screen from the media library will automatically make "
|
1650 |
+
"it the splash image if there is none."
|
1651 |
+
msgstr ""
|
1652 |
+
|
1653 |
+
#: view/admin.php:633
|
1654 |
+
msgid "Prefer Flash player by default"
|
1655 |
+
msgstr ""
|
1656 |
+
|
1657 |
+
#: view/admin.php:633
|
1658 |
+
msgid "Provides greater compatibility."
|
1659 |
+
msgstr ""
|
1660 |
+
|
1661 |
+
#: view/admin.php:633
|
1662 |
+
msgid ""
|
1663 |
+
"We use Flash for MP4 files in IE9-10 and M4V files in Firefox regardless of "
|
1664 |
+
"this setting."
|
1665 |
+
msgstr ""
|
1666 |
+
|
1667 |
+
#: view/admin.php:634
|
1668 |
+
msgid "RTMP bufferTime tweak"
|
1669 |
+
msgstr ""
|
1670 |
+
|
1671 |
+
#: view/admin.php:634
|
1672 |
+
msgid "Use if your live streams are not smooth."
|
1673 |
+
msgstr ""
|
1674 |
+
|
1675 |
+
#: view/admin.php:634
|
1676 |
+
msgid ""
|
1677 |
+
"Adobe <a href=\"http://help.adobe.com/en_US/FlashPlatform/reference/"
|
1678 |
+
"actionscript/3/flash/net/NetStream.html#bufferTime\">recommends</a> to set "
|
1679 |
+
"bufferTime to 0 for live streams, but if your stream is not smooth, you can "
|
1680 |
+
"use this setting."
|
1681 |
+
msgstr ""
|
1682 |
+
|
1683 |
+
#: view/admin.php:637
|
1684 |
+
msgid "Scan video length"
|
1685 |
+
msgstr ""
|
1686 |
+
|
1687 |
+
#: view/admin.php:642
|
1688 |
+
msgid "Turn off if you experience issues when saving posts!"
|
1689 |
+
msgstr ""
|
1690 |
+
|
1691 |
+
#: view/admin.php:643
|
1692 |
+
msgid "Turn on to enable video duration scanning."
|
1693 |
+
msgstr ""
|
1694 |
+
|
1695 |
+
#: view/admin.php:658
|
1696 |
+
#, php-format
|
1697 |
+
msgid "Currently %d videos in database and %s posts in queue."
|
1698 |
+
msgstr ""
|
1699 |
+
|
1700 |
+
#: view/admin.php:660
|
1701 |
+
#, php-format
|
1702 |
+
msgid "Currently %d videos in database."
|
1703 |
+
msgstr ""
|
1704 |
+
|
1705 |
+
#: view/admin.php:662
|
1706 |
+
#, php-format
|
1707 |
+
msgid "Currently %s posts in queue."
|
1708 |
+
msgstr ""
|
1709 |
+
|
1710 |
+
#: view/admin.php:692
|
1711 |
+
msgid "Use native fullscreen on mobile"
|
1712 |
+
msgstr ""
|
1713 |
+
|
1714 |
+
#: view/admin.php:692
|
1715 |
+
msgid ""
|
1716 |
+
"Stops popups, ads or subtitles from working, but provides faster interface. "
|
1717 |
+
"We set this for Android < 4.4 and iOS < 7 automatically."
|
1718 |
+
msgstr ""
|
1719 |
+
|
1720 |
+
#: view/admin.php:693
|
1721 |
+
msgid "Force fullscreen on mobile"
|
1722 |
+
msgstr ""
|
1723 |
+
|
1724 |
+
#: view/admin.php:693
|
1725 |
+
msgid ""
|
1726 |
+
"Video playback will start in fullscreen. iPhone with iOS < 10 always forces "
|
1727 |
+
"fullscreen for video playback."
|
1728 |
+
msgstr ""
|
1729 |
+
|
1730 |
+
#: view/admin.php:694
|
1731 |
+
msgid "Alternative iOS fullscreen mode"
|
1732 |
+
msgstr ""
|
1733 |
+
|
1734 |
+
#: view/admin.php:694
|
1735 |
+
msgid ""
|
1736 |
+
"Works for iOS < 12 which doesn't support HTML5 fullscreen. Only use if you "
|
1737 |
+
"see site elements such as header bar ovelaying the player in fullscreen on "
|
1738 |
+
"iOS."
|
1739 |
+
msgstr ""
|
1740 |
+
|
1741 |
+
#: view/admin.php:695
|
1742 |
+
msgid "Force landscape orientation in fullscreen"
|
1743 |
+
msgstr ""
|
1744 |
+
|
1745 |
+
#: view/admin.php:695
|
1746 |
+
msgid "Works on the Android mobile, not supported on iOS unfortunately."
|
1747 |
+
msgstr ""
|
1748 |
+
|
1749 |
+
#: view/admin.php:710
|
1750 |
+
msgid "Use Schema.org markup"
|
1751 |
+
msgstr ""
|
1752 |
+
|
1753 |
+
#: view/admin.php:710
|
1754 |
+
msgid " Adds the video meta data information for search engines."
|
1755 |
+
msgstr ""
|
1756 |
+
|
1757 |
+
#: view/admin.php:734
|
1758 |
+
msgid "None"
|
1759 |
+
msgstr ""
|
1760 |
+
|
1761 |
+
#: view/admin.php:735
|
1762 |
+
msgid "Random"
|
1763 |
+
msgstr ""
|
1764 |
+
|
1765 |
+
#: view/admin.php:757
|
1766 |
+
msgid "Default Popup"
|
1767 |
+
msgstr ""
|
1768 |
+
|
1769 |
+
#: view/admin.php:760
|
1770 |
+
msgid ""
|
1771 |
+
"You can set a default popup here and then skip it for individual videos."
|
1772 |
+
msgstr ""
|
1773 |
+
|
1774 |
+
#: view/admin.php:776
|
1775 |
+
msgid "Add any popups here which you would like to use with multiple videos."
|
1776 |
+
msgstr ""
|
1777 |
+
|
1778 |
+
#: view/admin.php:804 view/admin.php:1055
|
1779 |
+
msgid "Name"
|
1780 |
+
msgstr ""
|
1781 |
+
|
1782 |
+
#: view/admin.php:812
|
1783 |
+
msgid "Custom<br />CSS"
|
1784 |
+
msgstr ""
|
1785 |
+
|
1786 |
+
#: view/admin.php:820
|
1787 |
+
msgid "Show on pause"
|
1788 |
+
msgstr ""
|
1789 |
+
|
1790 |
+
#: view/admin.php:822
|
1791 |
+
msgid "Disable"
|
1792 |
+
msgstr ""
|
1793 |
+
|
1794 |
+
#: view/admin.php:835
|
1795 |
+
msgid "Add more Popups"
|
1796 |
+
msgstr ""
|
1797 |
+
|
1798 |
+
#: view/admin.php:866
|
1799 |
+
msgid "Which features should be available in shortcode editor?"
|
1800 |
+
msgstr ""
|
1801 |
+
|
1802 |
+
#: view/admin.php:868 view/admin.php:1615 view/admin.php:1756
|
1803 |
+
msgid "Ads"
|
1804 |
+
msgstr ""
|
1805 |
+
|
1806 |
+
#: view/admin.php:869
|
1807 |
+
msgid "Align"
|
1808 |
+
msgstr ""
|
1809 |
+
|
1810 |
+
#: view/admin.php:870
|
1811 |
+
msgid "Allow Video Uploads"
|
1812 |
+
msgstr ""
|
1813 |
+
|
1814 |
+
#: view/admin.php:870
|
1815 |
+
msgid ""
|
1816 |
+
"Enables the WP Media Library integraton if you want to host videos on your "
|
1817 |
+
"own server"
|
1818 |
+
msgstr ""
|
1819 |
+
|
1820 |
+
#: view/admin.php:872 view/admin.php:1313
|
1821 |
+
msgid "Controlbar"
|
1822 |
+
msgstr ""
|
1823 |
+
|
1824 |
+
#: view/admin.php:873
|
1825 |
+
msgid "Embed"
|
1826 |
+
msgstr ""
|
1827 |
+
|
1828 |
+
#: view/admin.php:874
|
1829 |
+
msgid "Mobile Video"
|
1830 |
+
msgstr ""
|
1831 |
+
|
1832 |
+
#: view/admin.php:875
|
1833 |
+
msgid "Playlist Auto Advance"
|
1834 |
+
msgstr ""
|
1835 |
+
|
1836 |
+
#: view/admin.php:876
|
1837 |
+
msgid "Playlist Style"
|
1838 |
+
msgstr ""
|
1839 |
+
|
1840 |
+
#: view/admin.php:877
|
1841 |
+
msgid "Playlist Item Titles"
|
1842 |
+
msgstr ""
|
1843 |
+
|
1844 |
+
#: view/admin.php:878
|
1845 |
+
msgid "Sharing Buttons"
|
1846 |
+
msgstr ""
|
1847 |
+
|
1848 |
+
#: view/admin.php:880 view/wizard.php:326
|
1849 |
+
msgid "Splash Text"
|
1850 |
+
msgstr ""
|
1851 |
+
|
1852 |
+
#: view/admin.php:881
|
1853 |
+
msgid "Sticky"
|
1854 |
+
msgstr ""
|
1855 |
+
|
1856 |
+
#: view/admin.php:882 view/wizard.php:336
|
1857 |
+
msgid "Synopsis"
|
1858 |
+
msgstr ""
|
1859 |
+
|
1860 |
+
#: view/admin.php:883
|
1861 |
+
msgid "Video Actions"
|
1862 |
+
msgstr ""
|
1863 |
+
|
1864 |
+
#: view/admin.php:883
|
1865 |
+
msgid ""
|
1866 |
+
"Enables end of playlist actions like Loop, Redirect, Show popup and Show "
|
1867 |
+
"splash screen"
|
1868 |
+
msgstr ""
|
1869 |
+
|
1870 |
+
#: view/admin.php:905
|
1871 |
+
msgid ""
|
1872 |
+
"Valid license found, click the button at the top of the screen to install FV "
|
1873 |
+
"Player Pro!"
|
1874 |
+
msgstr ""
|
1875 |
+
|
1876 |
+
#: view/admin.php:907
|
1877 |
+
msgid "Purchase FV Flowplayer license"
|
1878 |
+
msgstr ""
|
1879 |
+
|
1880 |
+
#: view/admin.php:907
|
1881 |
+
msgid "to enable Pro features!"
|
1882 |
+
msgstr ""
|
1883 |
+
|
1884 |
+
#: view/admin.php:911
|
1885 |
+
msgid "Advanced Vimeo embeding"
|
1886 |
+
msgstr ""
|
1887 |
+
|
1888 |
+
#: view/admin.php:915
|
1889 |
+
msgid "Use Vimeo as your video host and use all of FV Flowplayer features."
|
1890 |
+
msgstr ""
|
1891 |
+
|
1892 |
+
#: view/admin.php:920
|
1893 |
+
msgid "Advanced YouTube embeding"
|
1894 |
+
msgstr ""
|
1895 |
+
|
1896 |
+
#: view/admin.php:924
|
1897 |
+
msgid "Use YouTube as your video host and use all of FV Flowplayer features."
|
1898 |
+
msgstr ""
|
1899 |
+
|
1900 |
+
#: view/admin.php:929
|
1901 |
+
msgid "Enable user defined AB loop"
|
1902 |
+
msgstr ""
|
1903 |
+
|
1904 |
+
#: view/admin.php:933
|
1905 |
+
msgid "Let your users repeat the parts of the video which they like!"
|
1906 |
+
msgstr ""
|
1907 |
+
|
1908 |
+
#: view/admin.php:942
|
1909 |
+
msgid "Enables Lightbox video gallery to show videos in a lightbox popup!"
|
1910 |
+
msgstr ""
|
1911 |
+
|
1912 |
+
#: view/admin.php:947
|
1913 |
+
msgid "Enable quality switching"
|
1914 |
+
msgstr ""
|
1915 |
+
|
1916 |
+
#: view/admin.php:951
|
1917 |
+
msgid ""
|
1918 |
+
"Upload your videos in multiple quality for best user experience with YouTube-"
|
1919 |
+
"like quality switching!"
|
1920 |
+
msgstr ""
|
1921 |
+
|
1922 |
+
#: view/admin.php:956
|
1923 |
+
msgid "Amazon CloudFront protected content"
|
1924 |
+
msgstr ""
|
1925 |
+
|
1926 |
+
#: view/admin.php:960
|
1927 |
+
msgid "Protect your Amazon CDN hosted videos"
|
1928 |
+
msgstr ""
|
1929 |
+
|
1930 |
+
#: view/admin.php:965
|
1931 |
+
msgid "Autoplay just once"
|
1932 |
+
msgstr ""
|
1933 |
+
|
1934 |
+
#: view/admin.php:969
|
1935 |
+
msgid "Makes sure each video autoplays only once for each visitor."
|
1936 |
+
msgstr ""
|
1937 |
+
|
1938 |
+
#: view/admin.php:974
|
1939 |
+
msgid "Enable video ads"
|
1940 |
+
msgstr ""
|
1941 |
+
|
1942 |
+
#: view/admin.php:978
|
1943 |
+
msgid ""
|
1944 |
+
"Define your own videos ads to play in together with your videos - postroll "
|
1945 |
+
"or prerool"
|
1946 |
+
msgstr ""
|
1947 |
+
|
1948 |
+
#: view/admin.php:983
|
1949 |
+
msgid "Upcoming pro features"
|
1950 |
+
msgstr ""
|
1951 |
+
|
1952 |
+
#: view/admin.php:986
|
1953 |
+
msgid "Enable PayWall"
|
1954 |
+
msgstr ""
|
1955 |
+
|
1956 |
+
#: view/admin.php:990
|
1957 |
+
msgid "Monetize the video content on your membership site."
|
1958 |
+
msgstr ""
|
1959 |
+
|
1960 |
+
#: view/admin.php:1010
|
1961 |
+
msgid "Default pre-roll ad:"
|
1962 |
+
msgstr ""
|
1963 |
+
|
1964 |
+
#: view/admin.php:1018
|
1965 |
+
msgid "Set which ad should be played before videos."
|
1966 |
+
msgstr ""
|
1967 |
+
|
1968 |
+
#: view/admin.php:1023
|
1969 |
+
msgid "Default post-roll ad:"
|
1970 |
+
msgstr ""
|
1971 |
+
|
1972 |
+
#: view/admin.php:1031
|
1973 |
+
msgid "Set which ad should be played after videos."
|
1974 |
+
msgstr ""
|
1975 |
+
|
1976 |
+
#: view/admin.php:1036
|
1977 |
+
msgid "Default ad skip time"
|
1978 |
+
msgstr ""
|
1979 |
+
|
1980 |
+
#: view/admin.php:1039
|
1981 |
+
msgid "Enter value in seconds"
|
1982 |
+
msgstr ""
|
1983 |
+
|
1984 |
+
#: view/admin.php:1055
|
1985 |
+
msgid "Ad name"
|
1986 |
+
msgstr ""
|
1987 |
+
|
1988 |
+
#: view/admin.php:1056
|
1989 |
+
msgid "Click URL"
|
1990 |
+
msgstr ""
|
1991 |
+
|
1992 |
+
#: view/admin.php:1056
|
1993 |
+
msgid "Clicking the video ad will open the URL in new window"
|
1994 |
+
msgstr ""
|
1995 |
+
|
1996 |
+
#: view/admin.php:1057 view/wizard.php:188 view/wizard.php:245
|
1997 |
+
msgid "Video"
|
1998 |
+
msgstr ""
|
1999 |
+
|
2000 |
+
#: view/admin.php:1057
|
2001 |
+
msgid "Enter the video URL here"
|
2002 |
+
msgstr ""
|
2003 |
+
|
2004 |
+
#: view/admin.php:1069
|
2005 |
+
msgid "Add more video ads"
|
2006 |
+
msgstr ""
|
2007 |
+
|
2008 |
+
#: view/admin.php:1140
|
2009 |
+
msgid "Hint: play the video to see live preview of the color settings"
|
2010 |
+
msgstr ""
|
2011 |
+
|
2012 |
+
#: view/admin.php:1148 view/admin.php:1717
|
2013 |
+
msgid "Skin"
|
2014 |
+
msgstr ""
|
2015 |
+
|
2016 |
+
#: view/admin.php:1199 view/admin.php:1227
|
2017 |
+
msgid "Color"
|
2018 |
+
msgstr ""
|
2019 |
+
|
2020 |
+
#: view/admin.php:1263
|
2021 |
+
msgid "Border"
|
2022 |
+
msgstr ""
|
2023 |
+
|
2024 |
+
#: view/admin.php:1270
|
2025 |
+
msgid "Controlbar Fullscreen"
|
2026 |
+
msgstr ""
|
2027 |
+
|
2028 |
+
#: view/admin.php:1277
|
2029 |
+
msgid "Border color"
|
2030 |
+
msgstr ""
|
2031 |
+
|
2032 |
+
#: view/admin.php:1286
|
2033 |
+
msgid "Bottom Margin"
|
2034 |
+
msgstr ""
|
2035 |
+
|
2036 |
+
#: view/admin.php:1288
|
2037 |
+
msgid "Enter value in em"
|
2038 |
+
msgstr ""
|
2039 |
+
|
2040 |
+
#: view/admin.php:1295
|
2041 |
+
msgid "Buffer"
|
2042 |
+
msgstr ""
|
2043 |
+
|
2044 |
+
#: view/admin.php:1304
|
2045 |
+
msgid "Canvas"
|
2046 |
+
msgstr ""
|
2047 |
+
|
2048 |
+
#: view/admin.php:1322 view/admin.php:1503
|
2049 |
+
msgid "Font Face"
|
2050 |
+
msgstr ""
|
2051 |
+
|
2052 |
+
#: view/admin.php:1324
|
2053 |
+
msgid "(inherit from template)"
|
2054 |
+
msgstr ""
|
2055 |
+
|
2056 |
+
#: view/admin.php:1337
|
2057 |
+
msgid "Player position"
|
2058 |
+
msgstr ""
|
2059 |
+
|
2060 |
+
#: view/admin.php:1340
|
2061 |
+
msgid "Centered"
|
2062 |
+
msgstr ""
|
2063 |
+
|
2064 |
+
#: view/admin.php:1349
|
2065 |
+
msgid "Progress"
|
2066 |
+
msgstr ""
|
2067 |
+
|
2068 |
+
#: view/admin.php:1358
|
2069 |
+
msgid "Time"
|
2070 |
+
msgstr ""
|
2071 |
+
|
2072 |
+
#: view/admin.php:1367
|
2073 |
+
msgid "Buttons"
|
2074 |
+
msgstr ""
|
2075 |
+
|
2076 |
+
#: view/admin.php:1377
|
2077 |
+
msgid "Timeline"
|
2078 |
+
msgstr ""
|
2079 |
+
|
2080 |
+
#: view/admin.php:1380 view/admin.php:1395
|
2081 |
+
msgid "Default"
|
2082 |
+
msgstr ""
|
2083 |
+
|
2084 |
+
#: view/admin.php:1381
|
2085 |
+
msgid "Slim"
|
2086 |
+
msgstr ""
|
2087 |
+
|
2088 |
+
#: view/admin.php:1382
|
2089 |
+
msgid "Full"
|
2090 |
+
msgstr ""
|
2091 |
+
|
2092 |
+
#: view/admin.php:1383
|
2093 |
+
msgid "Fat"
|
2094 |
+
msgstr ""
|
2095 |
+
|
2096 |
+
#: view/admin.php:1384
|
2097 |
+
msgid "Minimal"
|
2098 |
+
msgstr ""
|
2099 |
+
|
2100 |
+
#: view/admin.php:1392
|
2101 |
+
msgid "Icons"
|
2102 |
+
msgstr ""
|
2103 |
+
|
2104 |
+
#: view/admin.php:1396
|
2105 |
+
msgid "Edgy"
|
2106 |
+
msgstr ""
|
2107 |
+
|
2108 |
+
#: view/admin.php:1397
|
2109 |
+
msgid "Outlined"
|
2110 |
+
msgstr ""
|
2111 |
+
|
2112 |
+
#: view/admin.php:1398
|
2113 |
+
msgid "Playful"
|
2114 |
+
msgstr ""
|
2115 |
+
|
2116 |
+
#: view/admin.php:1417
|
2117 |
+
msgid ""
|
2118 |
+
"Hint: you can click the thumbnails to switch videos in the above player. "
|
2119 |
+
"This preview uses the horizontal playlist style."
|
2120 |
+
msgstr ""
|
2121 |
+
|
2122 |
+
#: view/admin.php:1424
|
2123 |
+
msgid "Playlist Design"
|
2124 |
+
msgstr ""
|
2125 |
+
|
2126 |
+
#: view/admin.php:1429
|
2127 |
+
msgid "2017"
|
2128 |
+
msgstr ""
|
2129 |
+
|
2130 |
+
#: view/admin.php:1430
|
2131 |
+
msgid "2017 with captions"
|
2132 |
+
msgstr ""
|
2133 |
+
|
2134 |
+
#: view/admin.php:1431
|
2135 |
+
msgid "2014"
|
2136 |
+
msgstr ""
|
2137 |
+
|
2138 |
+
#: view/admin.php:1435 view/admin.php:1519
|
2139 |
+
msgid "Background Color"
|
2140 |
+
msgstr ""
|
2141 |
+
|
2142 |
+
#: view/admin.php:1440
|
2143 |
+
msgid "Active Item"
|
2144 |
+
msgstr ""
|
2145 |
+
|
2146 |
+
#: view/admin.php:1445
|
2147 |
+
msgid "Font Color"
|
2148 |
+
msgstr ""
|
2149 |
+
|
2150 |
+
#: view/admin.php:1450
|
2151 |
+
msgid "Use custom color"
|
2152 |
+
msgstr ""
|
2153 |
+
|
2154 |
+
#: view/admin.php:1451
|
2155 |
+
msgid "Inherit from theme"
|
2156 |
+
msgstr ""
|
2157 |
+
|
2158 |
+
#: view/admin.php:1474
|
2159 |
+
#, php-format
|
2160 |
+
msgid ""
|
2161 |
+
"Check our <a href=\"%s\" target=\"_blank\">CSS Tips and Fixes</a> guide for "
|
2162 |
+
"someusefull CSS tweaks for FV Player."
|
2163 |
+
msgstr ""
|
2164 |
+
|
2165 |
+
#: view/admin.php:1506
|
2166 |
+
msgid "(inherit from player)"
|
2167 |
+
msgstr ""
|
2168 |
+
|
2169 |
+
#: view/admin.php:1514
|
2170 |
+
msgid "Font Size"
|
2171 |
+
msgstr ""
|
2172 |
+
|
2173 |
+
#: view/admin.php:1515 view/admin.php:1559
|
2174 |
+
msgid "Enter value in pixels"
|
2175 |
+
msgstr ""
|
2176 |
+
|
2177 |
+
#: view/admin.php:1532
|
2178 |
+
msgid "The quick brown fox jumps over the lazy dog."
|
2179 |
+
msgstr ""
|
2180 |
+
|
2181 |
+
#: view/admin.php:1533
|
2182 |
+
msgid "Second line."
|
2183 |
+
msgstr ""
|
2184 |
+
|
2185 |
+
#: view/admin.php:1543
|
2186 |
+
msgid ""
|
2187 |
+
"This feature lets your viewers continue watching the video as they scroll "
|
2188 |
+
"past it. It applies to desktop computer displays - minimal width of 1020 "
|
2189 |
+
"pixels."
|
2190 |
+
msgstr ""
|
2191 |
+
|
2192 |
+
#: view/admin.php:1545
|
2193 |
+
msgid "Enable"
|
2194 |
+
msgstr ""
|
2195 |
+
|
2196 |
+
#: view/admin.php:1547
|
2197 |
+
msgid "Placement"
|
2198 |
+
msgstr ""
|
2199 |
+
|
2200 |
+
#: view/admin.php:1558
|
2201 |
+
msgid "Player width [px]"
|
2202 |
+
msgstr ""
|
2203 |
+
|
2204 |
+
#: view/admin.php:1579
|
2205 |
+
msgid "Basic Setup"
|
2206 |
+
msgstr ""
|
2207 |
+
|
2208 |
+
#: view/admin.php:1582
|
2209 |
+
msgid "Installation"
|
2210 |
+
msgstr ""
|
2211 |
+
|
2212 |
+
#: view/admin.php:1583
|
2213 |
+
msgid "Start up guide"
|
2214 |
+
msgstr ""
|
2215 |
+
|
2216 |
+
#: view/admin.php:1584 view/admin.php:1731
|
2217 |
+
msgid "Post Interface Options"
|
2218 |
+
msgstr ""
|
2219 |
+
|
2220 |
+
#: view/admin.php:1585
|
2221 |
+
msgid "Alignment Settings"
|
2222 |
+
msgstr ""
|
2223 |
+
|
2224 |
+
#: view/admin.php:1587
|
2225 |
+
msgid "Customizing FV Player Skin"
|
2226 |
+
msgstr ""
|
2227 |
+
|
2228 |
+
#: view/admin.php:1588
|
2229 |
+
msgid "Sharing Videos on Social Media"
|
2230 |
+
msgstr ""
|
2231 |
+
|
2232 |
+
#: view/admin.php:1589
|
2233 |
+
msgid "Email Sharing"
|
2234 |
+
msgstr ""
|
2235 |
+
|
2236 |
+
#: view/admin.php:1590
|
2237 |
+
msgid "Using the Iframe Embedding"
|
2238 |
+
msgstr ""
|
2239 |
+
|
2240 |
+
#: view/admin.php:1591
|
2241 |
+
msgid "Using the Video Lightbox Effect"
|
2242 |
+
msgstr ""
|
2243 |
+
|
2244 |
+
#: view/admin.php:1592
|
2245 |
+
msgid "Video Encoding for HTML 5"
|
2246 |
+
msgstr ""
|
2247 |
+
|
2248 |
+
#: view/admin.php:1593
|
2249 |
+
msgid "How to Create Playlists"
|
2250 |
+
msgstr ""
|
2251 |
+
|
2252 |
+
#: view/admin.php:1594
|
2253 |
+
msgid "VTT Chapters"
|
2254 |
+
msgstr ""
|
2255 |
+
|
2256 |
+
#: view/admin.php:1595
|
2257 |
+
msgid "Adding Titles and Splash Text"
|
2258 |
+
msgstr ""
|
2259 |
+
|
2260 |
+
#: view/admin.php:1596
|
2261 |
+
msgid "Setting Up Video Quality Switching"
|
2262 |
+
msgstr ""
|
2263 |
+
|
2264 |
+
#: view/admin.php:1597
|
2265 |
+
msgid "How to Use the Built-in Video Checker"
|
2266 |
+
msgstr ""
|
2267 |
+
|
2268 |
+
#: view/admin.php:1598
|
2269 |
+
msgid "Creating Video Links in FV Player"
|
2270 |
+
msgstr ""
|
2271 |
+
|
2272 |
+
#: view/admin.php:1599
|
2273 |
+
msgid "Switching FV Player Pro to Beta"
|
2274 |
+
msgstr ""
|
2275 |
+
|
2276 |
+
#: view/admin.php:1600
|
2277 |
+
msgid "FAQ"
|
2278 |
+
msgstr ""
|
2279 |
+
|
2280 |
+
#: view/admin.php:1601
|
2281 |
+
msgid "WordPress Video Plugins Comparison"
|
2282 |
+
msgstr ""
|
2283 |
+
|
2284 |
+
#: view/admin.php:1602
|
2285 |
+
msgid "List of Shortcode Parameters"
|
2286 |
+
msgstr ""
|
2287 |
+
|
2288 |
+
#: view/admin.php:1604
|
2289 |
+
msgid "Video Hosting"
|
2290 |
+
msgstr ""
|
2291 |
+
|
2292 |
+
#: view/admin.php:1607
|
2293 |
+
msgid "Using YouTube with FV Player"
|
2294 |
+
msgstr ""
|
2295 |
+
|
2296 |
+
#: view/admin.php:1608
|
2297 |
+
msgid "How to Use Vimeo with WordPress"
|
2298 |
+
msgstr ""
|
2299 |
+
|
2300 |
+
#: view/admin.php:1609
|
2301 |
+
msgid "Serving Private Videos with Amazon S3"
|
2302 |
+
msgstr ""
|
2303 |
+
|
2304 |
+
#: view/admin.php:1610
|
2305 |
+
msgid "Serving Private Videos via CloudFront"
|
2306 |
+
msgstr ""
|
2307 |
+
|
2308 |
+
#: view/admin.php:1611
|
2309 |
+
msgid "Using BunnyCDN with FV Player Pro"
|
2310 |
+
msgstr ""
|
2311 |
+
|
2312 |
+
#: view/admin.php:1612
|
2313 |
+
msgid "Using KeyCDN With FV Player"
|
2314 |
+
msgstr ""
|
2315 |
+
|
2316 |
+
#: view/admin.php:1613
|
2317 |
+
msgid "Using HLS With FV Player"
|
2318 |
+
msgstr ""
|
2319 |
+
|
2320 |
+
#: view/admin.php:1618
|
2321 |
+
msgid "Advertising Options with FV Player"
|
2322 |
+
msgstr ""
|
2323 |
+
|
2324 |
+
#: view/admin.php:1619
|
2325 |
+
msgid "Custom Video Ads in FV Player (pre-roll and post-roll)"
|
2326 |
+
msgstr ""
|
2327 |
+
|
2328 |
+
#: view/admin.php:1620
|
2329 |
+
msgid "Overlay Ads in FV Player"
|
2330 |
+
msgstr ""
|
2331 |
+
|
2332 |
+
#: view/admin.php:1621
|
2333 |
+
msgid "Google Video Advertising Options"
|
2334 |
+
msgstr ""
|
2335 |
+
|
2336 |
+
#: view/admin.php:1622
|
2337 |
+
msgid "Incorporating Google Ads (AdSense)"
|
2338 |
+
msgstr ""
|
2339 |
+
|
2340 |
+
#: view/admin.php:1623
|
2341 |
+
msgid "Video Actions: HTML Pop-ups"
|
2342 |
+
msgstr ""
|
2343 |
+
|
2344 |
+
#: view/admin.php:1624
|
2345 |
+
msgid "Using ExoClick Ads With FV Player"
|
2346 |
+
msgstr ""
|
2347 |
+
|
2348 |
+
#: view/admin.php:1628
|
2349 |
+
msgid "Advanced"
|
2350 |
+
msgstr ""
|
2351 |
+
|
2352 |
+
#: view/admin.php:1631
|
2353 |
+
msgid "How to use FV Player Widget"
|
2354 |
+
msgstr ""
|
2355 |
+
|
2356 |
+
#: view/admin.php:1632
|
2357 |
+
msgid "Setting up Video Custom Fields"
|
2358 |
+
msgstr ""
|
2359 |
+
|
2360 |
+
#: view/admin.php:1633
|
2361 |
+
msgid "Using Google Analytics with FV Player"
|
2362 |
+
msgstr ""
|
2363 |
+
|
2364 |
+
#: view/admin.php:1634
|
2365 |
+
msgid "AB Loop Function"
|
2366 |
+
msgstr ""
|
2367 |
+
|
2368 |
+
#: view/admin.php:1635
|
2369 |
+
msgid "How to Create Subtitles"
|
2370 |
+
msgstr ""
|
2371 |
+
|
2372 |
+
#: view/admin.php:1636
|
2373 |
+
msgid "Interactive Video Transcript"
|
2374 |
+
msgstr ""
|
2375 |
+
|
2376 |
+
#: view/admin.php:1637
|
2377 |
+
msgid "How to Use Custom Start/End Time"
|
2378 |
+
msgstr ""
|
2379 |
+
|
2380 |
+
#: view/admin.php:1638 view/admin.php:1746
|
2381 |
+
msgid "Sticky Video"
|
2382 |
+
msgstr ""
|
2383 |
+
|
2384 |
+
#: view/admin.php:1639
|
2385 |
+
msgid "CSS Tips and Fixes"
|
2386 |
+
msgstr ""
|
2387 |
+
|
2388 |
+
#: view/admin.php:1640
|
2389 |
+
msgid "Using FV Player with Minify Plugins"
|
2390 |
+
msgstr ""
|
2391 |
+
|
2392 |
+
#: view/admin.php:1641
|
2393 |
+
msgid "How to Use the Speed Buttons"
|
2394 |
+
msgstr ""
|
2395 |
+
|
2396 |
+
#: view/admin.php:1642
|
2397 |
+
msgid "Using FV Player with Sub-domains and Multi-Domains"
|
2398 |
+
msgstr ""
|
2399 |
+
|
2400 |
+
#: view/admin.php:1643
|
2401 |
+
msgid "FV Player Profile Videos"
|
2402 |
+
msgstr ""
|
2403 |
+
|
2404 |
+
#: view/admin.php:1644
|
2405 |
+
msgid "Video Downloading With Simple History Support"
|
2406 |
+
msgstr ""
|
2407 |
+
|
2408 |
+
#: view/admin.php:1645
|
2409 |
+
msgid "Email Subscription Form Pop-ups"
|
2410 |
+
msgstr ""
|
2411 |
+
|
2412 |
+
#: view/admin.php:1646
|
2413 |
+
msgid "Using FV Player With AMP"
|
2414 |
+
msgstr ""
|
2415 |
+
|
2416 |
+
#: view/admin.php:1647
|
2417 |
+
msgid "Programmer’s Guide"
|
2418 |
+
msgstr ""
|
2419 |
+
|
2420 |
+
#: view/admin.php:1648
|
2421 |
+
msgid "FV WordPress Flowplayer Downgrading"
|
2422 |
+
msgstr ""
|
2423 |
+
|
2424 |
+
#: view/admin.php:1649
|
2425 |
+
msgid "Changelog"
|
2426 |
+
msgstr ""
|
2427 |
+
|
2428 |
+
#: view/admin.php:1650
|
2429 |
+
msgid "Incompatible Plugins and Scripts"
|
2430 |
+
msgstr ""
|
2431 |
+
|
2432 |
+
#: view/admin.php:1652
|
2433 |
+
msgid "Securing Your Video"
|
2434 |
+
msgstr ""
|
2435 |
+
|
2436 |
+
#: view/admin.php:1655
|
2437 |
+
msgid "How to Protect Your Videos from Being Downloaded"
|
2438 |
+
msgstr ""
|
2439 |
+
|
2440 |
+
#: view/admin.php:1656
|
2441 |
+
msgid "How to use RTMP streams with Flash"
|
2442 |
+
msgstr ""
|
2443 |
+
|
2444 |
+
#: view/admin.php:1657
|
2445 |
+
msgid "How to setup encrypted HLS stream with Amazon Elastic Transcoder"
|
2446 |
+
msgstr ""
|
2447 |
+
|
2448 |
+
#: view/admin.php:1658
|
2449 |
+
msgid "Protecting Videos With DRM Text"
|
2450 |
+
msgstr ""
|
2451 |
+
|
2452 |
+
#: view/admin.php:1660
|
2453 |
+
msgid "VAST/VPAID Ads"
|
2454 |
+
msgstr ""
|
2455 |
+
|
2456 |
+
#: view/admin.php:1663
|
2457 |
+
msgid "How to Use FV Player VAST"
|
2458 |
+
msgstr ""
|
2459 |
+
|
2460 |
+
#: view/admin.php:1664
|
2461 |
+
msgid "Using URL Tags"
|
2462 |
+
msgstr ""
|
2463 |
+
|
2464 |
+
#: view/admin.php:1665
|
2465 |
+
msgid "VAST Tester"
|
2466 |
+
msgstr ""
|
2467 |
+
|
2468 |
+
#: view/admin.php:1666
|
2469 |
+
msgid "Tracking VAST and VPAID Ads With Google Analytics"
|
2470 |
+
msgstr ""
|
2471 |
+
|
2472 |
+
#: view/admin.php:1667
|
2473 |
+
msgid "Using FV Player VAST Outside WordPress"
|
2474 |
+
msgstr ""
|
2475 |
+
|
2476 |
+
#: view/admin.php:1668
|
2477 |
+
msgid "List of Sample VAST/VPAID Ad Tags"
|
2478 |
+
msgstr ""
|
2479 |
+
|
2480 |
+
#: view/admin.php:1694
|
2481 |
+
msgid ""
|
2482 |
+
"Check this box if you would like FV Player to completely remove all of its "
|
2483 |
+
"data when the plugin is deleted. The <code>[fvplayer]</code> shortcodes will "
|
2484 |
+
"stop working."
|
2485 |
+
msgstr ""
|
2486 |
+
|
2487 |
+
#: view/admin.php:1696
|
2488 |
+
msgid "Remove all data"
|
2489 |
+
msgstr ""
|
2490 |
+
|
2491 |
+
#: view/admin.php:1696
|
2492 |
+
msgid ""
|
2493 |
+
"This action is irreversible, please backup your website if you are not "
|
2494 |
+
"absolutely sure."
|
2495 |
+
msgstr ""
|
2496 |
+
|
2497 |
+
#: view/admin.php:1716
|
2498 |
+
msgid "Setup"
|
2499 |
+
msgstr ""
|
2500 |
+
|
2501 |
+
#: view/admin.php:1718
|
2502 |
+
msgid "Hosting"
|
2503 |
+
msgstr ""
|
2504 |
+
|
2505 |
+
#: view/admin.php:1719 view/wizard.php:191
|
2506 |
+
msgid "Actions"
|
2507 |
+
msgstr ""
|
2508 |
+
|
2509 |
+
#: view/admin.php:1720 view/admin.php:1761
|
2510 |
+
msgid "Video Ads"
|
2511 |
+
msgstr ""
|
2512 |
+
|
2513 |
+
#: view/admin.php:1721
|
2514 |
+
msgid "Tools"
|
2515 |
+
msgstr ""
|
2516 |
+
|
2517 |
+
#: view/admin.php:1722
|
2518 |
+
msgid "Help"
|
2519 |
+
msgstr ""
|
2520 |
+
|
2521 |
+
#: view/admin.php:1732
|
2522 |
+
msgid "Sitewide FV Player Defaults"
|
2523 |
+
msgstr ""
|
2524 |
+
|
2525 |
+
#: view/admin.php:1733
|
2526 |
+
msgid "Integrations/Compatibility"
|
2527 |
+
msgstr ""
|
2528 |
+
|
2529 |
+
#: view/admin.php:1734
|
2530 |
+
msgid "Mobile Settings"
|
2531 |
+
msgstr ""
|
2532 |
+
|
2533 |
+
#: view/admin.php:1735
|
2534 |
+
msgid "Video SEO"
|
2535 |
+
msgstr ""
|
2536 |
+
|
2537 |
+
#: view/admin.php:1737
|
2538 |
+
msgid "Pro Features"
|
2539 |
+
msgstr ""
|
2540 |
+
|
2541 |
+
#: view/admin.php:1742
|
2542 |
+
msgid "Player Skin"
|
2543 |
+
msgstr ""
|
2544 |
+
|
2545 |
+
#: view/admin.php:1743 view/wizard.php:187
|
2546 |
+
msgid "Playlist"
|
2547 |
+
msgstr ""
|
2548 |
+
|
2549 |
+
#: view/admin.php:1744
|
2550 |
+
msgid "Custom CSS"
|
2551 |
+
msgstr ""
|
2552 |
+
|
2553 |
+
#: view/admin.php:1750
|
2554 |
+
msgid "Amazon S3 Protected Content"
|
2555 |
+
msgstr ""
|
2556 |
+
|
2557 |
+
#: view/admin.php:1754
|
2558 |
+
msgid "End of Video"
|
2559 |
+
msgstr ""
|
2560 |
+
|
2561 |
+
#: view/admin.php:1755
|
2562 |
+
msgid "Custom Popups"
|
2563 |
+
msgstr ""
|
2564 |
+
|
2565 |
+
#: view/admin.php:1766
|
2566 |
+
msgid "Rollback"
|
2567 |
+
msgstr ""
|
2568 |
+
|
2569 |
+
#: view/admin.php:1767
|
2570 |
+
msgid "Uninstall"
|
2571 |
+
msgstr ""
|
2572 |
+
|
2573 |
+
#: view/admin.php:1770
|
2574 |
+
msgid "Usage"
|
2575 |
+
msgstr ""
|
2576 |
+
|
2577 |
+
#: view/admin.php:1776
|
2578 |
+
msgid "Documentation"
|
2579 |
+
msgstr ""
|
2580 |
+
|
2581 |
+
#: view/admin.php:1806
|
2582 |
+
msgid "Enable the Pro extension"
|
2583 |
+
msgstr ""
|
2584 |
+
|
2585 |
+
#: view/admin.php:1808
|
2586 |
+
msgid "Pro pack installed"
|
2587 |
+
msgstr ""
|
2588 |
+
|
2589 |
+
#: view/admin.php:1810
|
2590 |
+
msgid "Install Pro extension"
|
2591 |
+
msgstr ""
|
2592 |
+
|
2593 |
+
#: view/admin.php:1813
|
2594 |
+
msgid "Apply Pro upgrade"
|
2595 |
+
msgstr ""
|
2596 |
+
|
2597 |
+
#: view/admin.php:1815
|
2598 |
+
msgid "Check template"
|
2599 |
+
msgstr ""
|
2600 |
+
|
2601 |
+
#: view/admin.php:1816
|
2602 |
+
msgid "Check videos"
|
2603 |
+
msgstr ""
|
2604 |
+
|
2605 |
+
#: view/admin.php:1817
|
2606 |
+
msgid "Commercial License Key"
|
2607 |
+
msgstr ""
|
2608 |
+
|
2609 |
+
#: view/admin.php:1819
|
2610 |
+
msgid "Check license"
|
2611 |
+
msgstr ""
|
2612 |
+
|
2613 |
+
#: view/admin.php:1822
|
2614 |
+
msgid "Click here for license info"
|
2615 |
+
msgstr ""
|
2616 |
+
|
2617 |
+
#: view/admin.php:1837
|
2618 |
+
msgid "with your own branding"
|
2619 |
+
msgstr ""
|
2620 |
+
|
2621 |
+
#: view/admin.php:1839
|
2622 |
+
msgid "Put up your own logo"
|
2623 |
+
msgstr ""
|
2624 |
+
|
2625 |
+
#: view/admin.php:1840
|
2626 |
+
msgid "Or remove the logo completely"
|
2627 |
+
msgstr ""
|
2628 |
+
|
2629 |
+
#: view/admin.php:1841
|
2630 |
+
msgid "The best video plugin for Wordpress"
|
2631 |
+
msgstr ""
|
2632 |
+
|
2633 |
+
#: view/admin.php:1843
|
2634 |
+
msgid "Easter sale!"
|
2635 |
+
msgstr ""
|
2636 |
+
|
2637 |
+
#: view/admin.php:1843
|
2638 |
+
msgid "All Licenses 20% Off"
|
2639 |
+
msgstr ""
|
2640 |
+
|
2641 |
+
#: view/wizard.php:174
|
2642 |
+
msgid "Add your video"
|
2643 |
+
msgstr ""
|
2644 |
+
|
2645 |
+
#: view/wizard.php:177
|
2646 |
+
msgid "Playlist too long, click here for preview"
|
2647 |
+
msgstr ""
|
2648 |
+
|
2649 |
+
#: view/wizard.php:192
|
2650 |
+
msgid "Embeds"
|
2651 |
+
msgstr ""
|
2652 |
+
|
2653 |
+
#: view/wizard.php:201
|
2654 |
+
msgid "Add splash images to enable thumbnail view"
|
2655 |
+
msgstr ""
|
2656 |
+
|
2657 |
+
#: view/wizard.php:244
|
2658 |
+
msgid "(remove)"
|
2659 |
+
msgstr ""
|
2660 |
+
|
2661 |
+
#: view/wizard.php:250 view/wizard.php:268 view/wizard.php:278
|
2662 |
+
#: view/wizard.php:313
|
2663 |
+
msgid "Add Video"
|
2664 |
+
msgstr ""
|
2665 |
+
|
2666 |
+
#: view/wizard.php:252 view/wizard.php:270 view/wizard.php:280
|
2667 |
+
msgid "FV Player Pro is required to use this video type in playlist."
|
2668 |
+
msgstr ""
|
2669 |
+
|
2670 |
+
#: view/wizard.php:259
|
2671 |
+
msgid "Video Duration"
|
2672 |
+
msgstr ""
|
2673 |
+
|
2674 |
+
#: view/wizard.php:260
|
2675 |
+
msgid "File size"
|
2676 |
+
msgstr ""
|
2677 |
+
|
2678 |
+
#: view/wizard.php:266 view/wizard.php:276
|
2679 |
+
msgid "Another format"
|
2680 |
+
msgstr ""
|
2681 |
+
|
2682 |
+
#: view/wizard.php:286 view/wizard.php:416
|
2683 |
+
msgid "Size"
|
2684 |
+
msgstr ""
|
2685 |
+
|
2686 |
+
#: view/wizard.php:295
|
2687 |
+
msgid "RTMP Server"
|
2688 |
+
msgstr ""
|
2689 |
+
|
2690 |
+
#: view/wizard.php:295
|
2691 |
+
msgid "Leave empty to use Flash streaming server from plugin settings"
|
2692 |
+
msgstr ""
|
2693 |
+
|
2694 |
+
#: view/wizard.php:298
|
2695 |
+
msgid "RTMP Path"
|
2696 |
+
msgstr ""
|
2697 |
+
|
2698 |
+
#: view/wizard.php:305
|
2699 |
+
msgid "Add another format"
|
2700 |
+
msgstr ""
|
2701 |
+
|
2702 |
+
#: view/wizard.php:305
|
2703 |
+
msgid "(i.e. WebM, OGV)"
|
2704 |
+
msgstr ""
|
2705 |
+
|
2706 |
+
#: view/wizard.php:306
|
2707 |
+
msgid "Add RTMP"
|
2708 |
+
msgstr ""
|
2709 |
+
|
2710 |
+
#: view/wizard.php:310
|
2711 |
+
msgid "Mobile video"
|
2712 |
+
msgstr ""
|
2713 |
+
|
2714 |
+
#: view/wizard.php:311
|
2715 |
+
msgid "Put low-bandwidth video here or leave blank"
|
2716 |
+
msgstr ""
|
2717 |
+
|
2718 |
+
#: view/wizard.php:321
|
2719 |
+
msgid "Add Image"
|
2720 |
+
msgstr ""
|
2721 |
+
|
2722 |
+
#: view/wizard.php:331
|
2723 |
+
msgid "Title"
|
2724 |
+
msgstr ""
|
2725 |
+
|
2726 |
+
#: view/wizard.php:341
|
2727 |
+
msgid "Live stream"
|
2728 |
+
msgstr ""
|
2729 |
+
|
2730 |
+
#: view/wizard.php:346
|
2731 |
+
msgid "DVR stream"
|
2732 |
+
msgstr ""
|
2733 |
+
|
2734 |
+
#: view/wizard.php:351
|
2735 |
+
msgid "Audio stream"
|
2736 |
+
msgstr ""
|
2737 |
+
|
2738 |
+
#: view/wizard.php:360
|
2739 |
+
msgid ""
|
2740 |
+
"Admin note: Video uploads are currently disabled, set Allow User Uploads to "
|
2741 |
+
"true in"
|
2742 |
+
msgstr ""
|
2743 |
+
|
2744 |
+
#: view/wizard.php:360
|
2745 |
+
msgid "Settings"
|
2746 |
+
msgstr ""
|
2747 |
+
|
2748 |
+
#: view/wizard.php:391
|
2749 |
+
msgid "Add Subtitles"
|
2750 |
+
msgstr ""
|
2751 |
+
|
2752 |
+
#: view/wizard.php:405
|
2753 |
+
msgid "Add Another Language"
|
2754 |
+
msgstr ""
|
2755 |
+
|
2756 |
+
#: view/wizard.php:475
|
2757 |
+
msgid "Redirect to"
|
2758 |
+
msgstr ""
|
2759 |
+
|
2760 |
+
#: view/wizard.php:480
|
2761 |
+
msgid "End popup"
|
2762 |
+
msgstr ""
|
2763 |
+
|
2764 |
+
#: view/wizard.php:484
|
2765 |
+
msgid "You are using the legacy popup functionality. Move the popup code"
|
2766 |
+
msgstr ""
|
2767 |
+
|
2768 |
+
#: view/wizard.php:484
|
2769 |
+
msgid "here"
|
2770 |
+
msgstr ""
|
2771 |
+
|
2772 |
+
#: view/wizard.php:484
|
2773 |
+
msgid ", then use the drop down menu above."
|
2774 |
+
msgstr ""
|
2775 |
+
|
2776 |
+
#: view/wizard.php:509
|
2777 |
+
msgid "Ad code"
|
2778 |
+
msgstr ""
|
2779 |
+
|
2780 |
+
#: view/wizard.php:515
|
2781 |
+
msgid "Ad Size"
|
2782 |
+
msgstr ""
|
2783 |
+
|
2784 |
+
#: view/wizard.php:519
|
2785 |
+
msgid "Skip global ad in this video"
|
2786 |
+
msgstr ""
|
2787 |
+
|
2788 |
+
#: view/wizard.php:542
|
2789 |
+
msgid "Insert"
|
2790 |
+
msgstr ""
|
2791 |
+
|
2792 |
+
#: view/wizard.php:543
|
2793 |
+
msgid " + Add playlist item"
|
2794 |
+
msgstr ""
|
2795 |
+
|
2796 |
+
#: view/wizard.php:544
|
2797 |
+
msgid "Add another video into playlist"
|
2798 |
+
msgstr ""
|
2799 |
+
|
2800 |
+
#: view/wizard.php:544
|
2801 |
+
msgid "Back to playlist"
|
2802 |
+
msgstr ""
|
2803 |
+
|
2804 |
+
#: view/wizard.php:550
|
2805 |
+
msgid "Pick existing player"
|
2806 |
+
msgstr ""
|
models/cdn.class.php
CHANGED
@@ -38,7 +38,7 @@ abstract class FV_Player_CDN {
|
|
38 |
|
39 |
if( stripos($aVideo['src'],$sDomain) !== false ) {
|
40 |
$bFound = true;
|
41 |
-
$aVideo['src'] = $this->secure_link($aVideo['src'],$this->aSecureTokens[$i]);
|
42 |
$_POST['sources'][$key] = $aVideo;
|
43 |
}
|
44 |
}
|
@@ -47,7 +47,7 @@ abstract class FV_Player_CDN {
|
|
47 |
|
48 |
if( $bFound ) {
|
49 |
echo '<FVFLOWPLAYER>';
|
50 |
-
echo json_encode($_POST['sources']);
|
51 |
echo '</FVFLOWPLAYER>';
|
52 |
die();
|
53 |
}
|
38 |
|
39 |
if( stripos($aVideo['src'],$sDomain) !== false ) {
|
40 |
$bFound = true;
|
41 |
+
$aVideo['src'] = $this->secure_link($aVideo['src'],$this->aSecureTokens[$i]);
|
42 |
$_POST['sources'][$key] = $aVideo;
|
43 |
}
|
44 |
}
|
47 |
|
48 |
if( $bFound ) {
|
49 |
echo '<FVFLOWPLAYER>';
|
50 |
+
echo json_encode($_POST['sources']);
|
51 |
echo '</FVFLOWPLAYER>';
|
52 |
die();
|
53 |
}
|
models/digitalocean-spaces-browser.class.php
CHANGED
@@ -11,15 +11,21 @@ class FV_Player_DigitalOcean_Spaces_Browser extends FV_Player_Media_Browser {
|
|
11 |
}
|
12 |
}
|
13 |
|
14 |
-
|
15 |
-
|
|
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
|
|
21 |
}
|
22 |
|
|
|
|
|
|
|
23 |
function get_s3_client() {
|
24 |
global $fv_fp, $FV_Player_DigitalOcean_Spaces;
|
25 |
|
@@ -42,103 +48,23 @@ class FV_Player_DigitalOcean_Spaces_Browser extends FV_Player_Media_Browser {
|
|
42 |
}
|
43 |
|
44 |
function get_formatted_assets_data() {
|
45 |
-
$this->
|
46 |
global $fv_fp, $s3Client;
|
47 |
|
48 |
$bucket = $fv_fp->_get_option(array('digitalocean_spaces','space'));
|
49 |
//$domain = $fv_fp->_get_option(array('digitalocean_spaces','space'));
|
50 |
|
51 |
-
$output =
|
52 |
-
'name' => 'Home',
|
53 |
-
'type' => 'folder',
|
54 |
-
'path' => !empty($_POST['path']) ? $_POST['path'] : 'Home/',
|
55 |
-
'items' => array()
|
56 |
-
);
|
57 |
|
58 |
// instantiate the S3 client with AWS credentials
|
59 |
$s3Client = $this->get_s3_client();
|
60 |
|
61 |
try {
|
62 |
-
|
63 |
-
|
64 |
-
'Delimiter' => '/',
|
65 |
-
);
|
66 |
-
|
67 |
-
$request_path = !empty($_POST['path']) ? str_replace( 'Home/', '', stripslashes($_POST['path']) ) : false;
|
68 |
-
|
69 |
-
if( $request_path ) {
|
70 |
-
$args['Prefix'] = $request_path;
|
71 |
-
}
|
72 |
-
|
73 |
-
$paged = $s3Client->getPaginator('ListObjects',$args);
|
74 |
-
|
75 |
-
$date_format = get_option( 'date_format' );
|
76 |
-
foreach( $paged AS $res ) {
|
77 |
-
|
78 |
-
$folders = !empty($res['CommonPrefixes']) ? $res['CommonPrefixes'] : array();
|
79 |
-
$files = $res->get('Contents');
|
80 |
-
if( !$files ) $files = array();
|
81 |
-
|
82 |
-
$objects = array_merge( $folders, $files );
|
83 |
-
|
84 |
-
foreach ( $objects as $object ) {
|
85 |
-
if ( ! isset( $objectarray ) ) {
|
86 |
-
$objectarray = array();
|
87 |
-
}
|
88 |
-
|
89 |
-
$item = array();
|
90 |
-
|
91 |
-
$path = $object['Prefix'] ? $object['Prefix'] : $object['Key'];
|
92 |
-
|
93 |
-
$item['path'] = 'Home/' . $path;
|
94 |
-
|
95 |
-
if( $request_path ) {
|
96 |
-
if( $request_path == $path ) continue; // sometimes the current folder is present in the response, weird
|
97 |
-
|
98 |
-
$item['name'] = str_replace( $request_path, '', $path );
|
99 |
-
} else {
|
100 |
-
$item['name'] = $path;
|
101 |
-
}
|
102 |
-
|
103 |
-
if( !empty($object['Size']) ) {
|
104 |
-
$item['type'] = 'file';
|
105 |
-
$item['size'] = $object['Size'];
|
106 |
-
$item['LastModified'] = $object['LastModified'];
|
107 |
-
$item['modified'] = date($date_format, strtotime($object['LastModified']));
|
108 |
-
|
109 |
-
$link = (string) $s3Client->getObjectUrl( $bucket, $path );
|
110 |
-
$url_components = parse_url($link);
|
111 |
-
$link = str_replace( $url_components['path'], urldecode($url_components['path']), $link );
|
112 |
-
|
113 |
-
// TODO: check and implement custom domain URLs
|
114 |
-
/*// replace link with Custom Domain URL, if we have one
|
115 |
-
if( !empty($domains[$array_id]) ) {
|
116 |
-
// replace S3 URLs with buckets in the S3 subdomain
|
117 |
-
$link = preg_replace('/https?:\/\/' . $bucket . '\.s3[^.]*\.amazonaws\.com\/(.*)/i', rtrim($domains[$array_id], '/').'/$1', $link);
|
118 |
-
|
119 |
-
// replace S3 URLs with bucket name as a subfolder
|
120 |
-
$link = preg_replace('/https?:\/\/[^\/]+\/' . $bucket . '\/(.*)/i', rtrim($domains[$array_id], '/').'/$1', $link);
|
121 |
-
}*/
|
122 |
-
|
123 |
-
$item['link'] = $link;
|
124 |
-
|
125 |
-
if (preg_match('/\.(jpg|jpeg|png|gif)$/i', $item['name'])) {
|
126 |
-
$item['splash'] = apply_filters('fv_flowplayer_splash', $link );
|
127 |
-
}
|
128 |
-
} else {
|
129 |
-
$item['type'] = 'folder';
|
130 |
-
$item['items'] = array();
|
131 |
-
}
|
132 |
-
|
133 |
-
$output['items'][] = $item;
|
134 |
-
|
135 |
-
if (strtolower(substr($item['name'], strrpos($item['name'], '.') + 1)) === 'ts') {
|
136 |
-
continue;
|
137 |
-
}
|
138 |
-
|
139 |
-
}
|
140 |
-
}
|
141 |
|
|
|
|
|
142 |
} catch ( Aws\S3\Exception\S3Exception $e ) {
|
143 |
//echo $e->getMessage() . "\n";
|
144 |
$err = $e->getMessage();
|
11 |
}
|
12 |
}
|
13 |
|
14 |
+
function decode_link_components( $link ) {
|
15 |
+
$url_components = parse_url($link);
|
16 |
+
$link = str_replace( $url_components['path'], urldecode($url_components['path']), $link );
|
17 |
|
18 |
+
return $link;
|
19 |
+
}
|
20 |
+
|
21 |
+
function get_custom_domain_url( $link, $bucket, $custom_domain ) {
|
22 |
+
// TODO: check and implement custom domain URLs - replace link with Custom Domain URL, if we have one
|
23 |
+
return $link;
|
24 |
}
|
25 |
|
26 |
+
// Legacy
|
27 |
+
function init_for_gutenberg() {}
|
28 |
+
|
29 |
function get_s3_client() {
|
30 |
global $fv_fp, $FV_Player_DigitalOcean_Spaces;
|
31 |
|
48 |
}
|
49 |
|
50 |
function get_formatted_assets_data() {
|
51 |
+
$this->include_aws_sdk();
|
52 |
global $fv_fp, $s3Client;
|
53 |
|
54 |
$bucket = $fv_fp->_get_option(array('digitalocean_spaces','space'));
|
55 |
//$domain = $fv_fp->_get_option(array('digitalocean_spaces','space'));
|
56 |
|
57 |
+
$output = $this->get_output();
|
|
|
|
|
|
|
|
|
|
|
58 |
|
59 |
// instantiate the S3 client with AWS credentials
|
60 |
$s3Client = $this->get_s3_client();
|
61 |
|
62 |
try {
|
63 |
+
|
64 |
+
list( $request_path, $paged, $date_format ) = $this->get_metadata( $s3Client, $bucket );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
+
list($output, $sum_up ) = $this->get_output_items( $output, $s3Client, $request_path, $paged, $date_format, $bucket );
|
67 |
+
|
68 |
} catch ( Aws\S3\Exception\S3Exception $e ) {
|
69 |
//echo $e->getMessage() . "\n";
|
70 |
$err = $e->getMessage();
|
models/digitalocean-spaces.class.php
CHANGED
@@ -192,6 +192,7 @@ class FV_Player_DigitalOcean_Spaces extends FV_Player_CDN {
|
|
192 |
}
|
193 |
|
194 |
}
|
|
|
195 |
global $FV_Player_DigitalOcean_Spaces;
|
196 |
$FV_Player_DigitalOcean_Spaces = new FV_Player_DigitalOcean_Spaces;
|
197 |
|
192 |
}
|
193 |
|
194 |
}
|
195 |
+
|
196 |
global $FV_Player_DigitalOcean_Spaces;
|
197 |
$FV_Player_DigitalOcean_Spaces = new FV_Player_DigitalOcean_Spaces;
|
198 |
|
models/flowplayer.php
CHANGED
@@ -1547,6 +1547,17 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin_Private {
|
|
1547 |
if( method_exists('CDN_Enabler_Engine', 'rewriter') ) {
|
1548 |
$item['sources'][$k]['src'] = CDN_Enabler_Engine::rewriter($source['src']);
|
1549 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1550 |
}
|
1551 |
|
1552 |
return $item;
|
@@ -2024,8 +2035,11 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin_Private {
|
|
2024 |
|
2025 |
// Uppercase first letter
|
2026 |
foreach( $aLangs as $code => $native ) {
|
2027 |
-
|
2028 |
-
|
|
|
|
|
|
|
2029 |
}
|
2030 |
|
2031 |
ksort($aLangs);
|
@@ -2331,16 +2345,18 @@ class flowplayer extends FV_Wordpress_Flowplayer_Plugin_Private {
|
|
2331 |
// 1st rule
|
2332 |
$new_k = str_replace( 'fvp(/(.*))?', 'fvp', $k ); // fvp only
|
2333 |
$new_v = preg_replace('/fv_player_embed=\$matches\[\d]/', 'fv_player_embed=1', $v); // fv_player_embed=1
|
2334 |
-
|
2335 |
-
$aRulesNew[$new_k] = $new_v;
|
2336 |
-
|
2337 |
// 2nd rule
|
2338 |
-
$new_k = str_replace( '/fvp(/(', '/fvp((
|
|
|
2339 |
$aRulesNew[$new_k]= $v;
|
2340 |
} else {
|
2341 |
$aRulesNew[$k] = $v;
|
2342 |
}
|
2343 |
}
|
|
|
2344 |
return $aRulesNew;
|
2345 |
}
|
2346 |
|
1547 |
if( method_exists('CDN_Enabler_Engine', 'rewriter') ) {
|
1548 |
$item['sources'][$k]['src'] = CDN_Enabler_Engine::rewriter($source['src']);
|
1549 |
}
|
1550 |
+
|
1551 |
+
if( class_exists('BunnyCDN') && class_exists('BunnyCDNFilter') && method_exists( 'BunnyCDN', 'getOptions' ) ) {
|
1552 |
+
|
1553 |
+
require_once dirname(__FILE__) . '/../includes/class.bunnycdn.rewrite.php';
|
1554 |
+
|
1555 |
+
$options = BunnyCDN::getOptions();
|
1556 |
+
|
1557 |
+
$fv_bunnycdn = new FV_Player_BunnyCDN_Rewrite($options["site_url"], (is_ssl() ? 'https://' : 'http://') . $options["cdn_domain_name"], $options["directories"], $options["excluded"], $options["disable_admin"]);
|
1558 |
+
$item['sources'][$k]['src'] = $fv_bunnycdn->rewrite_url($source['src']);
|
1559 |
+
}
|
1560 |
+
|
1561 |
}
|
1562 |
|
1563 |
return $item;
|
2035 |
|
2036 |
// Uppercase first letter
|
2037 |
foreach( $aLangs as $code => $native ) {
|
2038 |
+
if( function_exists('mb_convert_case') ) {
|
2039 |
+
$aLangs[$code] = mb_convert_case($native, MB_CASE_TITLE, "UTF-8");
|
2040 |
+
} else {
|
2041 |
+
$aLangs[$code] = $native;
|
2042 |
+
}
|
2043 |
}
|
2044 |
|
2045 |
ksort($aLangs);
|
2345 |
// 1st rule
|
2346 |
$new_k = str_replace( 'fvp(/(.*))?', 'fvp', $k ); // fvp only
|
2347 |
$new_v = preg_replace('/fv_player_embed=\$matches\[\d]/', 'fv_player_embed=1', $v); // fv_player_embed=1
|
2348 |
+
|
2349 |
+
$aRulesNew[$new_k] = $new_v;
|
2350 |
+
|
2351 |
// 2nd rule
|
2352 |
+
$new_k = str_replace( '/fvp(/(.*))', '/fvp((-?\d+))', $k ); // fvp{number} or fvp-{number}
|
2353 |
+
|
2354 |
$aRulesNew[$new_k]= $v;
|
2355 |
} else {
|
2356 |
$aRulesNew[$k] = $v;
|
2357 |
}
|
2358 |
}
|
2359 |
+
|
2360 |
return $aRulesNew;
|
2361 |
}
|
2362 |
|
models/linode-object-storage-browser.class.php
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if( !class_exists('FV_Player_Linode_Object_Storage_Browser') && class_exists('FV_Player_Media_Browser') ) :
|
4 |
+
|
5 |
+
class FV_Player_Linode_Object_Storage_Browser extends FV_Player_Media_Browser {
|
6 |
+
|
7 |
+
function init() {
|
8 |
+
if( $this->isSetUpCorrectly() ) {
|
9 |
+
global $fv_wp_flowplayer_ver;
|
10 |
+
wp_enqueue_script( 'fv-player-linode-browser', flowplayer::get_plugin_url().'/js/linode-object-storage.js', array( 'flowplayer-browser-base' ), $fv_wp_flowplayer_ver );
|
11 |
+
}
|
12 |
+
}
|
13 |
+
|
14 |
+
function decode_link_components( $link ) {
|
15 |
+
$url_components = parse_url($link);
|
16 |
+
$link = str_replace( $url_components['path'], urldecode($url_components['path']), $link );
|
17 |
+
|
18 |
+
return $link;
|
19 |
+
}
|
20 |
+
|
21 |
+
function get_custom_domain_url( $link, $bucket, $custom_domain ) {
|
22 |
+
// TODO: check and implement custom domain URLs - replace link with Custom Domain URL, if we have one
|
23 |
+
return $link;
|
24 |
+
}
|
25 |
+
|
26 |
+
// Legacy
|
27 |
+
function init_for_gutenberg() {}
|
28 |
+
|
29 |
+
function get_s3_client() {
|
30 |
+
global $fv_fp, $FV_Player_Linode_Object_Storage;
|
31 |
+
|
32 |
+
// instantiate the S3 client with AWS credentials
|
33 |
+
$endpoint = 'https://' . $FV_Player_Linode_Object_Storage->get_endpoint();
|
34 |
+
|
35 |
+
$region = $FV_Player_Linode_Object_Storage->get_region();
|
36 |
+
|
37 |
+
$secret = $fv_fp->_get_option(array('linode_object_storage','secret'));
|
38 |
+
$key = $fv_fp->_get_option(array('linode_object_storage','key'));
|
39 |
+
|
40 |
+
$credentials = new Aws\Credentials\Credentials( $key, $secret );
|
41 |
+
|
42 |
+
return Aws\S3\S3Client::factory( array(
|
43 |
+
'credentials' => $credentials,
|
44 |
+
'region' => $region,
|
45 |
+
'version' => 'latest',
|
46 |
+
'endpoint' => $endpoint
|
47 |
+
) );
|
48 |
+
}
|
49 |
+
|
50 |
+
function get_formatted_assets_data() {
|
51 |
+
$this->include_aws_sdk();
|
52 |
+
global $fv_fp, $s3Client;
|
53 |
+
|
54 |
+
$bucket = $fv_fp->_get_option(array('linode_object_storage','space'));
|
55 |
+
//$domain = $fv_fp->_get_option(array('linode_object_storage','space'));
|
56 |
+
|
57 |
+
$output = $this->get_output();
|
58 |
+
|
59 |
+
// instantiate the S3 client with AWS credentials
|
60 |
+
$s3Client = $this->get_s3_client();
|
61 |
+
|
62 |
+
try {
|
63 |
+
|
64 |
+
list( $request_path, $paged, $date_format ) = $this->get_metadata( $s3Client, $bucket );
|
65 |
+
|
66 |
+
list($output, $sum_up ) = $this->get_output_items( $output, $s3Client, $request_path, $paged, $date_format, $bucket );
|
67 |
+
|
68 |
+
} catch ( Aws\S3\Exception\S3Exception $e ) {
|
69 |
+
//echo $e->getMessage() . "\n";
|
70 |
+
$err = $e->getMessage();
|
71 |
+
$output = array(
|
72 |
+
'items' => array(),
|
73 |
+
'name' => '/',
|
74 |
+
'path' => '/',
|
75 |
+
'type' => 'folder'
|
76 |
+
);
|
77 |
+
}
|
78 |
+
|
79 |
+
// sorting by date, descending
|
80 |
+
// TODO: Make this an interface option? How to handle it for paged listings, like on Vimeo?
|
81 |
+
function date_compare($a, $b) {
|
82 |
+
$t1 = strtotime($a['LastModified']);
|
83 |
+
$t2 = strtotime($b['LastModified']);
|
84 |
+
return $t1 - $t2;
|
85 |
+
}
|
86 |
+
usort($output['items'], 'date_compare');
|
87 |
+
|
88 |
+
$output['items'] = array_reverse($output['items']);
|
89 |
+
|
90 |
+
$json_final = array(
|
91 |
+
'items' => $output
|
92 |
+
);
|
93 |
+
|
94 |
+
if (isset($err) && $err) {
|
95 |
+
$json_final['err'] = $err;
|
96 |
+
}
|
97 |
+
|
98 |
+
return $json_final;
|
99 |
+
}
|
100 |
+
|
101 |
+
function load_assets() {
|
102 |
+
$json_final = $this->get_formatted_assets_data();
|
103 |
+
|
104 |
+
wp_send_json( $json_final );
|
105 |
+
wp_die();
|
106 |
+
}
|
107 |
+
|
108 |
+
public function isSetUpCorrectly() {
|
109 |
+
global $fv_fp;
|
110 |
+
|
111 |
+
return (
|
112 |
+
$fv_fp->_get_option(array('linode_object_storage','endpoint'))
|
113 |
+
&& $fv_fp->_get_option(array('linode_object_storage','secret'))
|
114 |
+
&& $fv_fp->_get_option(array('linode_object_storage','key'))
|
115 |
+
&& $fv_fp->_get_option(array('linode_object_storage','space'))
|
116 |
+
);
|
117 |
+
}
|
118 |
+
|
119 |
+
}
|
120 |
+
|
121 |
+
global $FV_Player_Linode_Object_Storage_Browser;
|
122 |
+
$FV_Player_Linode_Object_Storage_Browser = new FV_Player_Linode_Object_Storage_Browser( 'wp_ajax_load_linode_object_storage_assets' );
|
123 |
+
|
124 |
+
endif;
|
models/linode-object-storage.class.php
ADDED
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if( !class_exists('FV_Player_Linode_Object_Storage') ) :
|
4 |
+
|
5 |
+
class FV_Player_Linode_Object_Storage extends FV_Player_CDN {
|
6 |
+
|
7 |
+
function __construct() {
|
8 |
+
// TODO: What if FV Player is not yet loaded?
|
9 |
+
add_action( 'plugins_loaded', array( $this, 'include_linode_media_browser' ), 9 );
|
10 |
+
parent::__construct( array( 'key' => 'linode_object_storage', 'title' => 'Linode Object Storage') );
|
11 |
+
}
|
12 |
+
|
13 |
+
// includes the Digital Ocean Spaces handling class itself
|
14 |
+
public function include_linode_media_browser() {
|
15 |
+
if ( is_admin() && version_compare(phpversion(),'5.5.0') != -1 ) {
|
16 |
+
include( dirname( __FILE__ ) . '/linode-object-storage-browser.class.php' );
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
function get_endpoint() {
|
21 |
+
global $fv_fp;
|
22 |
+
$parsed = parse_url( $fv_fp->_get_option( array($this->key,'endpoint' ) ) );
|
23 |
+
|
24 |
+
if( count($parsed) == 1 && !empty($parsed['path']) ) {
|
25 |
+
return $parsed['path'];
|
26 |
+
|
27 |
+
} else if( !empty($parsed['host']) ) {
|
28 |
+
return $parsed['host'];
|
29 |
+
|
30 |
+
}
|
31 |
+
return false;
|
32 |
+
}
|
33 |
+
|
34 |
+
function get_domains() {
|
35 |
+
global $fv_fp;
|
36 |
+
$space = $fv_fp->_get_option( array($this->key,'space' ) );
|
37 |
+
$endpoint = $this->get_endpoint();
|
38 |
+
if( $space && $endpoint ) {
|
39 |
+
return array( $space.'.'.$endpoint, $endpoint.'/'.$space );
|
40 |
+
}
|
41 |
+
return false;
|
42 |
+
}
|
43 |
+
|
44 |
+
function get_region() {
|
45 |
+
$parts = explode( '.', $this->get_endpoint() );
|
46 |
+
return $parts[0];
|
47 |
+
}
|
48 |
+
|
49 |
+
function get_secure_tokens() {
|
50 |
+
global $fv_fp;
|
51 |
+
return $fv_fp->_get_option( array($this->key,'key' ) ) && $fv_fp->_get_option( array($this->key,'secret' ) );
|
52 |
+
}
|
53 |
+
|
54 |
+
function options() {
|
55 |
+
// TODO: Fix width
|
56 |
+
// TODO: Add custom domain for CDN
|
57 |
+
global $fv_fp;
|
58 |
+
?>
|
59 |
+
<table class="form-table2" style="margin: 5px; ">
|
60 |
+
<?php
|
61 |
+
$fv_fp->_get_input_text( array(
|
62 |
+
'key' => array($this->key,'space'),
|
63 |
+
'name' => 'Storage Name',
|
64 |
+
'first_td_class' => 'first'
|
65 |
+
) );
|
66 |
+
$fv_fp->_get_input_text( array(
|
67 |
+
'key' => array($this->key,'endpoint'),
|
68 |
+
'name' => 'Endpoint'
|
69 |
+
) );
|
70 |
+
$fv_fp->_get_input_text( array(
|
71 |
+
'key' => array($this->key,'key'),
|
72 |
+
'name' => 'Key'
|
73 |
+
) );
|
74 |
+
$fv_fp->_get_input_text( array(
|
75 |
+
'key' => array($this->key,'secret'),
|
76 |
+
'name' => 'Secret'
|
77 |
+
) );
|
78 |
+
?>
|
79 |
+
<tr>
|
80 |
+
<td colspan="4">
|
81 |
+
<input type="submit" name="fv-wp-flowplayer-submit" class="button-primary" value="<?php _e('Save All Changes', 'fv-wordpress-flowplayer'); ?>" style="margin-top: 2ex;"/>
|
82 |
+
</td>
|
83 |
+
</tr>
|
84 |
+
</table>
|
85 |
+
<?php
|
86 |
+
}
|
87 |
+
|
88 |
+
function secure_link( $url, $secret, $ttl = false ) {
|
89 |
+
global $fv_fp;
|
90 |
+
$key = $fv_fp->_get_option( array($this->key,'key' ) );
|
91 |
+
$secret = $fv_fp->_get_option( array($this->key,'secret' ) );
|
92 |
+
$endpoint = $fv_fp->_get_option( array($this->key,'endpoint' ) );
|
93 |
+
$endpoint = explode('.',$endpoint);
|
94 |
+
$endpoint = $endpoint[0];
|
95 |
+
|
96 |
+
/*$path = preg_replace( '~.*?//.*?/~', '/', $url );
|
97 |
+
$expires = time() + ( $ttl ? $ttl : apply_filters('fv_player_secure_link_timeout', 900) );
|
98 |
+
$md5 = base64_encode(md5($path . $secret . $expires, true));
|
99 |
+
$md5 = strtr($md5, '+/', '-_');
|
100 |
+
$md5 = str_replace('=', '', $md5);
|
101 |
+
$url = str_replace( $path, $path."?token=".$md5."&expire=".$expires, $url );*/
|
102 |
+
|
103 |
+
$time = $ttl ? $ttl : apply_filters('fv_player_secure_link_timeout', 900);
|
104 |
+
|
105 |
+
$url_components = parse_url($url);
|
106 |
+
|
107 |
+
$sXAMZDate = gmdate('Ymd\THis\Z');
|
108 |
+
$sDate = gmdate('Ymd');
|
109 |
+
$sCredentialScope = $sDate."/".$endpoint."/s3/aws4_request"; // todo: variable
|
110 |
+
$sSignedHeaders = "host";
|
111 |
+
$sXAMZCredential = urlencode( $key.'/'.$sCredentialScope);
|
112 |
+
|
113 |
+
// 1. http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
|
114 |
+
$sCanonicalRequest = "GET\n";
|
115 |
+
$sCanonicalRequest .= $url_components['path']."\n";
|
116 |
+
$sCanonicalRequest .= "X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=$sXAMZCredential&X-Amz-Date=$sXAMZDate&X-Amz-Expires=$time&X-Amz-SignedHeaders=$sSignedHeaders\n";
|
117 |
+
$sCanonicalRequest .= "host:".$url_components['host']."\n";
|
118 |
+
$sCanonicalRequest .= "\n$sSignedHeaders\n";
|
119 |
+
$sCanonicalRequest .= "UNSIGNED-PAYLOAD";
|
120 |
+
|
121 |
+
// 2. http://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html
|
122 |
+
$sStringToSign = "AWS4-HMAC-SHA256\n";
|
123 |
+
$sStringToSign .= "$sXAMZDate\n";
|
124 |
+
$sStringToSign .= "$sCredentialScope\n";
|
125 |
+
$sStringToSign .= hash('sha256',$sCanonicalRequest);
|
126 |
+
|
127 |
+
// 3. http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html
|
128 |
+
$sSignature = hash_hmac('sha256', $sDate, "AWS4".$secret, true );
|
129 |
+
$sSignature = hash_hmac('sha256', $endpoint, $sSignature, true ); // todo: variable
|
130 |
+
$sSignature = hash_hmac('sha256', 's3', $sSignature, true );
|
131 |
+
$sSignature = hash_hmac('sha256', 'aws4_request', $sSignature, true );
|
132 |
+
$sSignature = hash_hmac('sha256', $sStringToSign, $sSignature );
|
133 |
+
|
134 |
+
// 4. http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html
|
135 |
+
$url .= "?X-Amz-Algorithm=AWS4-HMAC-SHA256";
|
136 |
+
$url .= "&X-Amz-Credential=$sXAMZCredential";
|
137 |
+
$url .= "&X-Amz-Date=$sXAMZDate";
|
138 |
+
$url .= "&X-Amz-Expires=$time";
|
139 |
+
$url .= "&X-Amz-SignedHeaders=$sSignedHeaders";
|
140 |
+
$url .= "&X-Amz-Signature=".$sSignature;
|
141 |
+
|
142 |
+
return $url;
|
143 |
+
}
|
144 |
+
|
145 |
+
}
|
146 |
+
|
147 |
+
global $FV_Player_Linode_Object_Storage;
|
148 |
+
$FV_Player_Linode_Object_Storage = new FV_Player_Linode_Object_Storage;
|
149 |
+
|
150 |
+
endif;
|
models/list-table.php
CHANGED
@@ -255,17 +255,16 @@ class FV_Player_List_Table extends WP_List_Table {
|
|
255 |
}
|
256 |
|
257 |
public function column_default( $player, $column_name ) {
|
258 |
-
global $FV_Player_Coconut;
|
259 |
-
|
260 |
$id = $player->id;
|
261 |
|
|
|
262 |
// if any of the videos for this player contain a coconut_processing_ placeholder,
|
263 |
// try to run Coconut's job check, so we can update that SRC if it was already
|
264 |
// processed
|
265 |
-
if (
|
266 |
foreach ( $player->video_objects as $video_object ) {
|
267 |
if ( strpos( $video_object->getSrc(), 'coconut_processing_' ) !== false ) {
|
268 |
-
|
269 |
break;
|
270 |
}
|
271 |
}
|
255 |
}
|
256 |
|
257 |
public function column_default( $player, $column_name ) {
|
|
|
|
|
258 |
$id = $player->id;
|
259 |
|
260 |
+
// TODO: This should be done in a sensible way
|
261 |
// if any of the videos for this player contain a coconut_processing_ placeholder,
|
262 |
// try to run Coconut's job check, so we can update that SRC if it was already
|
263 |
// processed
|
264 |
+
if ( function_exists( 'FV_Player_Coconut' ) ) {
|
265 |
foreach ( $player->video_objects as $video_object ) {
|
266 |
if ( strpos( $video_object->getSrc(), 'coconut_processing_' ) !== false ) {
|
267 |
+
FV_Player_Coconut()->jobs_check();
|
268 |
break;
|
269 |
}
|
270 |
}
|
models/media-browser-s3.php
CHANGED
@@ -9,14 +9,27 @@ class FV_Player_Media_Browser_S3 extends FV_Player_Media_Browser {
|
|
9 |
}
|
10 |
}
|
11 |
|
12 |
-
function
|
13 |
-
|
14 |
-
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
}
|
17 |
|
18 |
function get_formatted_assets_data() {
|
19 |
-
$this->
|
20 |
global $fv_fp, $s3Client;
|
21 |
|
22 |
$regions = $fv_fp->_get_option('amazon_region');
|
@@ -79,12 +92,7 @@ class FV_Player_Media_Browser_S3 extends FV_Player_Media_Browser {
|
|
79 |
|
80 |
if ($regioned_bucket_found) {
|
81 |
|
82 |
-
$output =
|
83 |
-
'name' => 'Home',
|
84 |
-
'type' => 'folder',
|
85 |
-
'path' => !empty($_POST['path']) ? $_POST['path'] : 'Home/',
|
86 |
-
'items' => array()
|
87 |
-
);
|
88 |
|
89 |
$region = $regions[ $array_id ];
|
90 |
$secret = $secrets[ $array_id ];
|
@@ -142,101 +150,18 @@ class FV_Player_Media_Browser_S3 extends FV_Player_Media_Browser {
|
|
142 |
) );
|
143 |
|
144 |
try {
|
145 |
-
$args = array(
|
146 |
-
'Bucket' => $bucket,
|
147 |
-
'Delimiter' => '/',
|
148 |
-
);
|
149 |
-
|
150 |
-
$request_path = !empty($_POST['path']) ? str_replace( 'Home/', '', stripslashes($_POST['path']) ) : false;
|
151 |
-
|
152 |
-
if( $request_path ) {
|
153 |
-
$args['Prefix'] = $request_path;
|
154 |
-
}
|
155 |
-
|
156 |
-
$paged = $s3Client->getPaginator('ListObjects',$args);
|
157 |
-
|
158 |
-
$sum_up = array();
|
159 |
-
|
160 |
-
$date_format = get_option( 'date_format' );
|
161 |
-
foreach( $paged AS $res ) {
|
162 |
-
|
163 |
-
$folders = !empty($res['CommonPrefixes']) ? $res['CommonPrefixes'] : array();
|
164 |
-
$files = $res->get('Contents');
|
165 |
-
if( !$files ) $files = array();
|
166 |
-
|
167 |
-
$objects = array_merge( $folders, $files );
|
168 |
-
|
169 |
-
foreach ( $objects as $object ) {
|
170 |
-
if ( ! isset( $objectarray ) ) {
|
171 |
-
$objectarray = array();
|
172 |
-
}
|
173 |
-
|
174 |
-
$item = array();
|
175 |
-
|
176 |
-
$path = $object['Prefix'] ? $object['Prefix'] : $object['Key'];
|
177 |
-
|
178 |
-
if( !empty($object['Key']) && preg_match( '~\.ts$~', $object['Key'] ) ) {
|
179 |
-
if( empty($sum_up['ts']) ) $sum_up['ts'] = 0;
|
180 |
-
$sum_up['ts']++;
|
181 |
-
continue;
|
182 |
-
}
|
183 |
-
|
184 |
-
$item['path'] = 'Home/' . $path;
|
185 |
-
|
186 |
-
if( $request_path ) {
|
187 |
-
if( $request_path == $path ) continue; // sometimes the current folder is present in the response, weird
|
188 |
-
|
189 |
-
$item['name'] = str_replace( $request_path, '', $path );
|
190 |
-
} else {
|
191 |
-
$item['name'] = $path;
|
192 |
-
}
|
193 |
-
|
194 |
-
if( !empty($object['Size']) ) {
|
195 |
-
$item['type'] = 'file';
|
196 |
-
$item['size'] = $object['Size'];
|
197 |
-
$item['modified'] = date($date_format, strtotime($object['LastModified']));
|
198 |
|
199 |
-
|
200 |
-
$link = str_replace( '%20', '+', $link );
|
201 |
-
|
202 |
-
// replace link with CloudFront URL, if we have one
|
203 |
-
if( !empty($domains[$array_id]) ) {
|
204 |
-
// replace S3 URLs with buckets in the S3 subdomain, like https://fv-flowplayer-cloudfront.s3-us-west-2.amazonaws.com/video.mp4
|
205 |
-
$link = preg_replace('/https?:\/\/' . $bucket . '\.s3[^.]*\.amazonaws\.com\/(.*)/i', rtrim($domains[$array_id], '/').'/$1', $link);
|
206 |
|
207 |
-
|
208 |
-
$link = preg_replace('/https?:\/\/' . $bucket . '\.s3\.[^.]*\.amazonaws\.com\/(.*)/i', rtrim($domains[$array_id], '/').'/$1', $link);
|
209 |
-
|
210 |
-
// replace S3 URLs with bucket name as a subfolder
|
211 |
-
$link = preg_replace('/https?:\/\/[^\/]+\/' . $bucket . '\/(.*)/i', rtrim($domains[$array_id], '/').'/$1', $link);
|
212 |
-
}
|
213 |
|
214 |
-
$item['link'] = $link;
|
215 |
-
|
216 |
-
if (preg_match('/\.(jpg|jpeg|png|gif)$/i', $item['name'])) {
|
217 |
-
$item['splash'] = apply_filters('fv_flowplayer_splash', $link );
|
218 |
-
}
|
219 |
-
} else {
|
220 |
-
$item['type'] = 'folder';
|
221 |
-
$item['items'] = array();
|
222 |
-
}
|
223 |
-
|
224 |
-
$output['items'][] = $item;
|
225 |
-
|
226 |
-
if (strtolower(substr($item['name'], strrpos($item['name'], '.') + 1)) === 'ts') {
|
227 |
-
continue;
|
228 |
-
}
|
229 |
-
|
230 |
-
}
|
231 |
-
}
|
232 |
-
|
233 |
foreach( $sum_up AS $ext => $count ) {
|
234 |
$output['items'][] = array(
|
235 |
'name' => '*.ts',
|
236 |
'link' => '',
|
237 |
'size' => $count.' .'.$ext.' files hidden',
|
238 |
'type' => 'placeholder'
|
239 |
-
|
240 |
}
|
241 |
|
242 |
} catch ( Aws\S3\Exception\S3Exception $e ) {
|
9 |
}
|
10 |
}
|
11 |
|
12 |
+
function decode_link_components( $link ) {
|
13 |
+
$link = str_replace( '%20', '+', $link );
|
14 |
+
|
15 |
+
return $link;
|
16 |
+
}
|
17 |
+
|
18 |
+
function get_custom_domain_url( $link, $bucket, $custom_domain ) {
|
19 |
+
// replace S3 URLs with buckets in the S3 subdomain, like https://fv-flowplayer-cloudfront.s3-us-west-2.amazonaws.com/video.mp4
|
20 |
+
$link = preg_replace('/https?:\/\/' . $bucket . '\.s3[^.]*\.amazonaws\.com\/(.*)/i', rtrim($custom_domain, '/').'/$1', $link);
|
21 |
+
|
22 |
+
// replace S3 URLs with buckets in the S3 subdomain, like https://fv-flowplayer-cloudfront.s3.us-west-2.amazonaws.com/video.mp4
|
23 |
+
$link = preg_replace('/https?:\/\/' . $bucket . '\.s3\.[^.]*\.amazonaws\.com\/(.*)/i', rtrim($custom_domain, '/').'/$1', $link);
|
24 |
+
|
25 |
+
// replace S3 URLs with bucket name as a subfolder
|
26 |
+
$link = preg_replace('/https?:\/\/[^\/]+\/' . $bucket . '\/(.*)/i', rtrim($custom_domain, '/').'/$1', $link);
|
27 |
+
|
28 |
+
return $link;
|
29 |
}
|
30 |
|
31 |
function get_formatted_assets_data() {
|
32 |
+
$this->include_aws_sdk();
|
33 |
global $fv_fp, $s3Client;
|
34 |
|
35 |
$regions = $fv_fp->_get_option('amazon_region');
|
92 |
|
93 |
if ($regioned_bucket_found) {
|
94 |
|
95 |
+
$output = $this->get_output();
|
|
|
|
|
|
|
|
|
|
|
96 |
|
97 |
$region = $regions[ $array_id ];
|
98 |
$secret = $secrets[ $array_id ];
|
150 |
) );
|
151 |
|
152 |
try {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
|
154 |
+
list( $request_path, $paged, $date_format ) = $this->get_metadata( $s3Client, $bucket );
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
|
156 |
+
list( $output, $sum_up ) = $this->get_output_items( $output, $s3Client, $request_path, $paged, $date_format, $bucket, array(), $domains[$array_id] );
|
|
|
|
|
|
|
|
|
|
|
157 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
158 |
foreach( $sum_up AS $ext => $count ) {
|
159 |
$output['items'][] = array(
|
160 |
'name' => '*.ts',
|
161 |
'link' => '',
|
162 |
'size' => $count.' .'.$ext.' files hidden',
|
163 |
'type' => 'placeholder'
|
164 |
+
);
|
165 |
}
|
166 |
|
167 |
} catch ( Aws\S3\Exception\S3Exception $e ) {
|
models/media-browser.php
CHANGED
@@ -13,6 +13,7 @@ abstract class FV_Player_Media_Browser {
|
|
13 |
add_action( 'admin_print_scripts-toplevel_page_fv_player', array($this, 'init_base'), 0 ); // wp-admin -> FV Player
|
14 |
add_action( 'admin_print_scripts-widgets.php', array($this, 'init_base'), 0 ); // wp-admin -> Widgets
|
15 |
add_action( 'admin_print_scripts-fv-player_page_fv_player_coconut', array($this, 'init_base'), 0 ); // wp-admin -> FV Player -> Encode video
|
|
|
16 |
|
17 |
// register extending class WP AJAX action
|
18 |
$this->ajax_action_name = $ajax_action_name;
|
@@ -21,6 +22,12 @@ abstract class FV_Player_Media_Browser {
|
|
21 |
|
22 |
abstract function init();
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
function init_base() {
|
25 |
global $fv_wp_flowplayer_ver;
|
26 |
wp_enqueue_media();
|
@@ -37,6 +44,16 @@ abstract class FV_Player_Media_Browser {
|
|
37 |
add_action( $this->ajax_action_name, array($this, 'load_assets') );
|
38 |
}
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
function include_s3_upload_assets() {
|
41 |
if ( $this->s3_assets_loaded ) {
|
42 |
return;
|
@@ -45,8 +62,8 @@ abstract class FV_Player_Media_Browser {
|
|
45 |
global $fv_wp_flowplayer_ver;
|
46 |
|
47 |
wp_enqueue_script( 'fv-player-s3-uploader', flowplayer::get_plugin_url().'/js/s3upload.js', array( 'flowplayer-browser-base' ), $fv_wp_flowplayer_ver );
|
48 |
-
wp_enqueue_style( 'fv-player-s3-uploader-css', flowplayer::get_plugin_url() . '/css/s3-uploader.css', array(), filemtime( dirname(__FILE__).'/../css/s3-uploader.css' ) );
|
49 |
wp_enqueue_script( 'fv-player-s3-uploader-base', flowplayer::get_plugin_url().'/js/s3-upload-base.js', array( 'flowplayer-browser-base' ), $fv_wp_flowplayer_ver );
|
|
|
50 |
|
51 |
$this->s3_assets_loaded = true;
|
52 |
}
|
@@ -55,6 +72,110 @@ abstract class FV_Player_Media_Browser {
|
|
55 |
return json_decode('{"items":{"name":"Home","type":"folder","path":"Home\/","items":[{"name":"01 The Beginning.mp3","size":2117536,"type":"file","path":"Home\/01 The Beginning.mp3","link":"http:\/\/sjdua7x04ygyx.cloudfront.net\/01%20The%20Beginning.mp3"},{"name":"Fender_Bass_Guitar_Patent.jpg","size":495756,"type":"file","path":"Home\/Fender_Bass_Guitar_Patent.jpg","link":"http:\/\/sjdua7x04ygyx.cloudfront.net\/Fender_Bass_Guitar_Patent.jpg"}]}}', true);
|
56 |
}
|
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
function load_assets() {
|
59 |
$json_final = $this->get_formatted_assets_data();
|
60 |
|
13 |
add_action( 'admin_print_scripts-toplevel_page_fv_player', array($this, 'init_base'), 0 ); // wp-admin -> FV Player
|
14 |
add_action( 'admin_print_scripts-widgets.php', array($this, 'init_base'), 0 ); // wp-admin -> Widgets
|
15 |
add_action( 'admin_print_scripts-fv-player_page_fv_player_coconut', array($this, 'init_base'), 0 ); // wp-admin -> FV Player -> Encode video
|
16 |
+
add_action( 'fv_player_media_browser_enqueue_base_uploader_css', array( $this, 'include_base_uploader_css' ) );
|
17 |
|
18 |
// register extending class WP AJAX action
|
19 |
$this->ajax_action_name = $ajax_action_name;
|
22 |
|
23 |
abstract function init();
|
24 |
|
25 |
+
// TOTO: should be abstract
|
26 |
+
function decode_link_components( $link ) {}
|
27 |
+
|
28 |
+
// TOTO: should be abstract
|
29 |
+
function get_custom_domain_url( $link, $bucket, $custom_domain ) {}
|
30 |
+
|
31 |
function init_base() {
|
32 |
global $fv_wp_flowplayer_ver;
|
33 |
wp_enqueue_media();
|
44 |
add_action( $this->ajax_action_name, array($this, 'load_assets') );
|
45 |
}
|
46 |
|
47 |
+
function include_aws_sdk() {
|
48 |
+
if ( ! class_exists( 'Aws\S3\S3Client' ) ) {
|
49 |
+
require_once( dirname( __FILE__ ) . "/../vendor/autoload.php" );
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
function include_base_uploader_css() {
|
54 |
+
wp_enqueue_style( 'fv-player-s3-uploader-css', flowplayer::get_plugin_url() . '/css/s3-uploader.css', array(), filemtime( dirname(__FILE__).'/../css/s3-uploader.css' ) );
|
55 |
+
}
|
56 |
+
|
57 |
function include_s3_upload_assets() {
|
58 |
if ( $this->s3_assets_loaded ) {
|
59 |
return;
|
62 |
global $fv_wp_flowplayer_ver;
|
63 |
|
64 |
wp_enqueue_script( 'fv-player-s3-uploader', flowplayer::get_plugin_url().'/js/s3upload.js', array( 'flowplayer-browser-base' ), $fv_wp_flowplayer_ver );
|
|
|
65 |
wp_enqueue_script( 'fv-player-s3-uploader-base', flowplayer::get_plugin_url().'/js/s3-upload-base.js', array( 'flowplayer-browser-base' ), $fv_wp_flowplayer_ver );
|
66 |
+
$this->include_base_uploader_css();
|
67 |
|
68 |
$this->s3_assets_loaded = true;
|
69 |
}
|
72 |
return json_decode('{"items":{"name":"Home","type":"folder","path":"Home\/","items":[{"name":"01 The Beginning.mp3","size":2117536,"type":"file","path":"Home\/01 The Beginning.mp3","link":"http:\/\/sjdua7x04ygyx.cloudfront.net\/01%20The%20Beginning.mp3"},{"name":"Fender_Bass_Guitar_Patent.jpg","size":495756,"type":"file","path":"Home\/Fender_Bass_Guitar_Patent.jpg","link":"http:\/\/sjdua7x04ygyx.cloudfront.net\/Fender_Bass_Guitar_Patent.jpg"}]}}', true);
|
73 |
}
|
74 |
|
75 |
+
function get_output() {
|
76 |
+
$output = array(
|
77 |
+
'name' => 'Home',
|
78 |
+
'type' => 'folder',
|
79 |
+
'path' => !empty($_POST['path']) ? $_POST['path'] : 'Home/',
|
80 |
+
'items' => array()
|
81 |
+
);
|
82 |
+
|
83 |
+
return $output;
|
84 |
+
}
|
85 |
+
|
86 |
+
function get_metadata( $s3Client, $bucket ) {
|
87 |
+
$args = array(
|
88 |
+
'Bucket' => $bucket,
|
89 |
+
'Delimiter' => '/',
|
90 |
+
);
|
91 |
+
|
92 |
+
$request_path = !empty($_POST['path']) ? str_replace( 'Home/', '', stripslashes($_POST['path']) ) : false;
|
93 |
+
|
94 |
+
if( $request_path ) {
|
95 |
+
$args['Prefix'] = $request_path;
|
96 |
+
}
|
97 |
+
|
98 |
+
$paged = $s3Client->getPaginator('ListObjects',$args);
|
99 |
+
|
100 |
+
$date_format = get_option( 'date_format' );
|
101 |
+
|
102 |
+
return array( $request_path, $paged, $date_format );
|
103 |
+
}
|
104 |
+
|
105 |
+
function get_output_items( $output, $s3Client, $request_path, $paged, $date_format, $bucket, $sum_up = NULL, $custom_domain = NULL ) {
|
106 |
+
foreach( $paged AS $res ) {
|
107 |
+
|
108 |
+
$folders = !empty($res['CommonPrefixes']) ? $res['CommonPrefixes'] : array();
|
109 |
+
$files = $res->get('Contents');
|
110 |
+
if( !$files ) $files = array();
|
111 |
+
|
112 |
+
$objects = array_merge( $folders, $files );
|
113 |
+
|
114 |
+
foreach ( $objects as $object ) {
|
115 |
+
if ( ! isset( $objectarray ) ) {
|
116 |
+
$objectarray = array();
|
117 |
+
}
|
118 |
+
|
119 |
+
$item = array();
|
120 |
+
|
121 |
+
$path = $object['Prefix'] ? $object['Prefix'] : $object['Key'];
|
122 |
+
|
123 |
+
if( isset($sum_up) && !empty($object['Key']) && preg_match( '~\.ts$~', $object['Key'] ) ) {
|
124 |
+
if( empty($sum_up['ts']) ) $sum_up['ts'] = 0;
|
125 |
+
$sum_up['ts']++;
|
126 |
+
continue;
|
127 |
+
}
|
128 |
+
|
129 |
+
$item['path'] = 'Home/' . $path;
|
130 |
+
|
131 |
+
if( $request_path ) {
|
132 |
+
if( $request_path == $path ) continue; // sometimes the current folder is present in the response, weird
|
133 |
+
|
134 |
+
$item['name'] = str_replace( $request_path, '', $path );
|
135 |
+
} else {
|
136 |
+
$item['name'] = $path;
|
137 |
+
}
|
138 |
+
|
139 |
+
if( !empty($object['Size']) ) {
|
140 |
+
$item['type'] = 'file';
|
141 |
+
$item['size'] = $object['Size'];
|
142 |
+
$item['modified'] = date($date_format, strtotime($object['LastModified']));
|
143 |
+
|
144 |
+
if( isset($object['LastModified']) ) {
|
145 |
+
$item['LastModified'] = $object['LastModified'];
|
146 |
+
}
|
147 |
+
|
148 |
+
$link = (string) $s3Client->getObjectUrl( $bucket, $path );
|
149 |
+
|
150 |
+
$link = $this->decode_link_components( $link );
|
151 |
+
|
152 |
+
// replace link with CloudFront URL, if we have one
|
153 |
+
if( !empty($custom_domain) ) {
|
154 |
+
$link = $this->get_custom_domain_url($link ,$bucket, $custom_domain);
|
155 |
+
}
|
156 |
+
|
157 |
+
$item['link'] = $link;
|
158 |
+
|
159 |
+
if (preg_match('/\.(jpg|jpeg|png|gif)$/i', $item['name'])) {
|
160 |
+
$item['splash'] = apply_filters('fv_flowplayer_splash', $link );
|
161 |
+
}
|
162 |
+
} else {
|
163 |
+
$item['type'] = 'folder';
|
164 |
+
$item['items'] = array();
|
165 |
+
}
|
166 |
+
|
167 |
+
$output['items'][] = $item;
|
168 |
+
|
169 |
+
if (strtolower(substr($item['name'], strrpos($item['name'], '.') + 1)) === 'ts') {
|
170 |
+
continue;
|
171 |
+
}
|
172 |
+
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
return array( $output, $sum_up );
|
177 |
+
}
|
178 |
+
|
179 |
function load_assets() {
|
180 |
$json_final = $this->get_formatted_assets_data();
|
181 |
|
models/player-position-save.php
CHANGED
@@ -10,7 +10,17 @@ class FV_Player_Position_Save {
|
|
10 |
}
|
11 |
|
12 |
public static function get_extensionless_file_name($path) {
|
13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
}
|
15 |
|
16 |
public function set_last_position( $aItem, $index, $aArgs ) {
|
@@ -33,7 +43,7 @@ class FV_Player_Position_Save {
|
|
33 |
}
|
34 |
}
|
35 |
$try[] = $this->get_extensionless_file_name($aItem['sources'][0]['src']);
|
36 |
-
|
37 |
foreach( $try AS $name ) {
|
38 |
if( $metaPosition = get_user_meta( get_current_user_id(), 'fv_wp_flowplayer_position_' . $name, true ) ) {
|
39 |
$aItem['sources'][0]['position'] = intval($metaPosition);
|
@@ -55,33 +65,56 @@ class FV_Player_Position_Save {
|
|
55 |
// TODO: XSS filter for POST values?
|
56 |
// check if videoTimes is not a JSON-encoded value, which will happen
|
57 |
// when the request came from a navigation.sendBeacon() call instead of the usual AJAX call
|
58 |
-
$
|
59 |
-
|
60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
}
|
62 |
|
63 |
-
|
|
|
|
|
64 |
$uid = get_current_user_id();
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
}
|
72 |
|
73 |
-
if( !empty($
|
74 |
-
|
|
|
|
|
75 |
}
|
|
|
|
|
76 |
}
|
77 |
-
|
78 |
-
if
|
79 |
-
foreach ($
|
80 |
-
update_user_meta($uid, '
|
81 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
-
|
84 |
-
wp_send_json_success();
|
85 |
} else {
|
86 |
wp_send_json_error();
|
87 |
}
|
@@ -91,13 +124,32 @@ class FV_Player_Position_Save {
|
|
91 |
global $fv_fp;
|
92 |
$fv_fp->_get_checkbox(__('Remember video position', 'fv-wordpress-flowplayer'), 'video_position_save_enable', __('Stores the last video play position for users, so they can continue watching from where they left.'), __('It stores in <code>wp_usermeta</code> database table for logged in users and in a localStorage or cookie for guest users.'));
|
93 |
}
|
94 |
-
|
95 |
function shortcode( $attributes, $media, $fv_fp ) {
|
96 |
if( !empty($fv_fp->aCurArgs['saveposition']) ) {
|
97 |
$attributes['data-save-position'] = $fv_fp->aCurArgs['saveposition'];
|
98 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
return $attributes;
|
100 |
}
|
101 |
-
|
102 |
}
|
103 |
$FV_Player_Position_Save = new FV_Player_Position_Save();
|
10 |
}
|
11 |
|
12 |
public static function get_extensionless_file_name($path) {
|
13 |
+
$arr = explode('/', $path);
|
14 |
+
$video_name = end($arr);
|
15 |
+
|
16 |
+
// Do not accept HLS playlist file names as these are often index.m3u8 or stream.m3u8
|
17 |
+
// Use folder name instead
|
18 |
+
if( strpos($video_name, ".m3u8") !== false ) {
|
19 |
+
unset($arr[count($arr)-1]);
|
20 |
+
$video_name = end($arr);
|
21 |
+
}
|
22 |
+
|
23 |
+
return pathinfo($video_name, PATHINFO_FILENAME);
|
24 |
}
|
25 |
|
26 |
public function set_last_position( $aItem, $index, $aArgs ) {
|
43 |
}
|
44 |
}
|
45 |
$try[] = $this->get_extensionless_file_name($aItem['sources'][0]['src']);
|
46 |
+
|
47 |
foreach( $try AS $name ) {
|
48 |
if( $metaPosition = get_user_meta( get_current_user_id(), 'fv_wp_flowplayer_position_' . $name, true ) ) {
|
49 |
$aItem['sources'][0]['position'] = intval($metaPosition);
|
65 |
// TODO: XSS filter for POST values?
|
66 |
// check if videoTimes is not a JSON-encoded value, which will happen
|
67 |
// when the request came from a navigation.sendBeacon() call instead of the usual AJAX call
|
68 |
+
$decoded_times = json_decode(urldecode($_POST['videoTimes']), true);
|
69 |
+
$decoded_playlists = json_decode(urldecode($_POST['playlistItems']), true);
|
70 |
+
|
71 |
+
if ($decoded_times !== false) {
|
72 |
+
$_POST['videoTimes'] = $decoded_times;
|
73 |
+
}
|
74 |
+
|
75 |
+
if ($decoded_playlists !== false) {
|
76 |
+
$_POST['playlistItems'] = $decoded_playlists;
|
77 |
}
|
78 |
|
79 |
+
$success = false;
|
80 |
+
|
81 |
+
if ( is_user_logged_in() ) {
|
82 |
$uid = get_current_user_id();
|
83 |
+
if (isset($_POST['videoTimes']) && ($times = $_POST['videoTimes']) && count($times)) {
|
84 |
+
|
85 |
+
foreach ($times as $record) {
|
86 |
+
$name = $this->get_extensionless_file_name($record['name']);
|
87 |
+
if( intval($record['position']) == 0 ) {
|
88 |
+
delete_user_meta($uid, 'fv_wp_flowplayer_position_'.$name );
|
89 |
+
} else {
|
90 |
+
update_user_meta($uid, 'fv_wp_flowplayer_position_'.$name, $record['position']);
|
91 |
+
}
|
92 |
+
|
93 |
+
if( !empty($record['saw']) && $record['saw'] == true ) {
|
94 |
+
update_user_meta($uid, 'fv_wp_flowplayer_saw_'.$name, true);
|
95 |
+
}
|
96 |
}
|
97 |
|
98 |
+
if( !empty($_POST['sawVideo']) && is_array($_POST['sawVideo']) ) {
|
99 |
+
foreach ($_POST['sawVideo'] as $record) {
|
100 |
+
update_user_meta($uid, 'fv_wp_flowplayer_saw_'.$this->get_extensionless_file_name($record['name']), true);
|
101 |
+
}
|
102 |
}
|
103 |
+
|
104 |
+
$success = true;
|
105 |
}
|
106 |
+
|
107 |
+
if (isset($_POST['playlistItems']) && ($playlistItems = $_POST['playlistItems']) && count($playlistItems)) {
|
108 |
+
foreach ($playlistItems as $playeritem) {
|
109 |
+
update_user_meta($uid, 'fv_wp_flowplayer_player_playlist_'.$playeritem['player'], $playeritem['item']);
|
110 |
}
|
111 |
+
|
112 |
+
$success = true;
|
113 |
+
}
|
114 |
+
|
115 |
+
if( $success ) {
|
116 |
+
wp_send_json_success();
|
117 |
}
|
|
|
|
|
118 |
} else {
|
119 |
wp_send_json_error();
|
120 |
}
|
124 |
global $fv_fp;
|
125 |
$fv_fp->_get_checkbox(__('Remember video position', 'fv-wordpress-flowplayer'), 'video_position_save_enable', __('Stores the last video play position for users, so they can continue watching from where they left.'), __('It stores in <code>wp_usermeta</code> database table for logged in users and in a localStorage or cookie for guest users.'));
|
126 |
}
|
127 |
+
|
128 |
function shortcode( $attributes, $media, $fv_fp ) {
|
129 |
if( !empty($fv_fp->aCurArgs['saveposition']) ) {
|
130 |
$attributes['data-save-position'] = $fv_fp->aCurArgs['saveposition'];
|
131 |
}
|
132 |
+
|
133 |
+
if ( $fv_fp->_get_option('video_position_save_enable') || !empty($fv_fp->aCurArgs['saveposition']) ) {
|
134 |
+
$player_id = false;
|
135 |
+
|
136 |
+
if( $fv_fp->current_player() ) { // db player
|
137 |
+
$player_id = $fv_fp->current_player()->getId();
|
138 |
+
}
|
139 |
+
|
140 |
+
if( $player_id ) { // add id to data item if db player
|
141 |
+
$attributes['data-player-id'] = $player_id;
|
142 |
+
|
143 |
+
$metaItem = get_user_meta( get_current_user_id(), 'fv_wp_flowplayer_player_playlist_' . $player_id, true );
|
144 |
+
|
145 |
+
if ( $metaItem >= 0 ) {
|
146 |
+
// playlist item restore
|
147 |
+
$attributes['data-playlist_start'] = intval($metaItem) + 1; // playlist-start-position module starts from 0
|
148 |
+
}
|
149 |
+
}
|
150 |
+
}
|
151 |
+
|
152 |
return $attributes;
|
153 |
}
|
|
|
154 |
}
|
155 |
$FV_Player_Position_Save = new FV_Player_Position_Save();
|
models/system-info.php
CHANGED
@@ -100,7 +100,10 @@ PHP Max Input Vars: <?php echo ini_get( 'max_input_vars' ) . "\n"; ?>
|
|
100 |
PHP Arg Separator: <?php echo ini_get( 'arg_separator.output' ) . "\n"; ?>
|
101 |
PHP Allow URL File Open: <?php echo ini_get( 'allow_url_fopen' ) ? "Yes" : "No\n"; ?>
|
102 |
|
103 |
-
|
|
|
|
|
|
|
104 |
|
105 |
DISPLAY ERRORS: <?php echo ( ini_get( 'display_errors' ) ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A'; ?><?php echo "\n"; ?>
|
106 |
cURL: <?php echo ( function_exists( 'curl_init' ) ) ? 'Your server supports cURL.' : 'Your server does not support cURL.'; ?><?php echo "\n"; ?>
|
100 |
PHP Arg Separator: <?php echo ini_get( 'arg_separator.output' ) . "\n"; ?>
|
101 |
PHP Allow URL File Open: <?php echo ini_get( 'allow_url_fopen' ) ? "Yes" : "No\n"; ?>
|
102 |
|
103 |
+
PHP Extensions Installed: <?php print_r(get_loaded_extensions()) . "\n"; ?>
|
104 |
+
PHP MBString: <?php echo ( extension_loaded('mbstring') ) ? 'MB String extension is installed on server.' : 'MBString extension is not installed on server.'; ?><?php echo "\n"; ?>
|
105 |
+
|
106 |
+
WP_DEBUG: <?php echo defined( 'WP_DEBUG' ) ? WP_DEBUG ? 'Enabled' . "\n" : 'Disabled' . "\n" : 'Not set' . "\n" ?>
|
107 |
|
108 |
DISPLAY ERRORS: <?php echo ( ini_get( 'display_errors' ) ) ? 'On (' . ini_get( 'display_errors' ) . ')' : 'N/A'; ?><?php echo "\n"; ?>
|
109 |
cURL: <?php echo ( function_exists( 'curl_init' ) ) ? 'Your server supports cURL.' : 'Your server does not support cURL.'; ?><?php echo "\n"; ?>
|
models/video-encoder/class.fv-player-encoder-list-table.php
ADDED
@@ -0,0 +1,382 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! class_exists( 'WP_List_Table' ) ) {
|
4 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
|
5 |
+
}
|
6 |
+
|
7 |
+
class FV_Player_Encoder_List_Table extends WP_List_Table {
|
8 |
+
|
9 |
+
private
|
10 |
+
$args,
|
11 |
+
$total_items = 0,
|
12 |
+
//$dropdown_cache = false,
|
13 |
+
$encoder_id = '',
|
14 |
+
$table_name = '';
|
15 |
+
|
16 |
+
public $base_url;
|
17 |
+
|
18 |
+
public function __construct( $args = array() ) {
|
19 |
+
$this->args = wp_parse_args( $args, array( 'per_page' => 25 ) );
|
20 |
+
|
21 |
+
if ( empty($args['encoder_id']) ) {
|
22 |
+
throw new Exception('Constructor to FV_Player_List_Table is missing "encoder_id" key in its $args array.');
|
23 |
+
}
|
24 |
+
|
25 |
+
if ( empty($args['table_name']) ) {
|
26 |
+
throw new Exception('Constructor to FV_Player_List_Table is missing "table_name" key in its $args array.');
|
27 |
+
}
|
28 |
+
|
29 |
+
parent::__construct( array(
|
30 |
+
'singular' => 'Job',
|
31 |
+
'plural' => 'Jobs',
|
32 |
+
'ajax' => false,
|
33 |
+
) );
|
34 |
+
|
35 |
+
$this->encoder_id = $args['encoder_id'];
|
36 |
+
$this->table_name = $args['table_name'];
|
37 |
+
$this->get_result_counts();
|
38 |
+
$this->process_bulk_action();
|
39 |
+
$this->base_url = admin_url( 'admin.php?page=' . $this->encoder_id );
|
40 |
+
}
|
41 |
+
|
42 |
+
public function advanced_filters() {
|
43 |
+
?>
|
44 |
+
<style>
|
45 |
+
.hover-wrap { position: relative }
|
46 |
+
.hover-details {
|
47 |
+
position: absolute;
|
48 |
+
display: none;
|
49 |
+
background: white;
|
50 |
+
border: 1px solid lightgray;
|
51 |
+
padding: 1em;
|
52 |
+
right: 0;
|
53 |
+
top: 2em;
|
54 |
+
width: 50em;
|
55 |
+
z-index: 9;
|
56 |
+
}
|
57 |
+
pre {
|
58 |
+
white-space: pre-wrap; /* css-3 */
|
59 |
+
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
60 |
+
white-space: -pre-wrap; /* Opera 4-6 */
|
61 |
+
white-space: -o-pre-wrap; /* Opera 7 */
|
62 |
+
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
63 |
+
}
|
64 |
+
|
65 |
+
.tooltiptext {
|
66 |
+
visibility: hidden;
|
67 |
+
width: 120px;
|
68 |
+
background-color: black;
|
69 |
+
color: #fff;
|
70 |
+
text-align: center;
|
71 |
+
border-radius: 6px;
|
72 |
+
padding: 5px 0;
|
73 |
+
|
74 |
+
/* Position the tooltip */
|
75 |
+
position: absolute;
|
76 |
+
z-index: 1;
|
77 |
+
}
|
78 |
+
|
79 |
+
.cannot-trash:hover .tooltiptext {
|
80 |
+
visibility: visible;
|
81 |
+
}
|
82 |
+
|
83 |
+
.cannot-trash a {
|
84 |
+
color: gray;
|
85 |
+
cursor: not-allowed;
|
86 |
+
}
|
87 |
+
</style>
|
88 |
+
<?php
|
89 |
+
if ( ! empty( $_REQUEST['orderby'] ) )
|
90 |
+
echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />';
|
91 |
+
if ( ! empty( $_REQUEST['order'] ) )
|
92 |
+
echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
|
93 |
+
|
94 |
+
if (isset($_GET['id'])) {
|
95 |
+
$input_id = $_GET['id'];
|
96 |
+
} else {
|
97 |
+
$input_id = null;
|
98 |
+
}
|
99 |
+
?>
|
100 |
+
<p class="search-box">
|
101 |
+
<label class="screen-reader-text" for="<?php echo $input_id ?>">Search players:</label>
|
102 |
+
<input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" />
|
103 |
+
<?php submit_button( "Search players", 'button', false, false, array('ID' => 'search-submit') ); ?><br/>
|
104 |
+
</p>
|
105 |
+
<?php
|
106 |
+
}
|
107 |
+
|
108 |
+
public function get_sortable_columns() {
|
109 |
+
return array(
|
110 |
+
'id' => array( 'id', true ),
|
111 |
+
'date_created' => array( 'date_created', true ),
|
112 |
+
// 'player_id' => array( 'player_id', true ),
|
113 |
+
'source' => array( 'source', true ),
|
114 |
+
'target' => array( 'target', true ),
|
115 |
+
'status' => array( 'status', true ),
|
116 |
+
'author' => array( 'author', true )
|
117 |
+
);
|
118 |
+
}
|
119 |
+
|
120 |
+
protected function get_primary_column_name() {
|
121 |
+
return 'id';
|
122 |
+
}
|
123 |
+
|
124 |
+
/*function get_user_dropdown( $user_id, $name = false, $disabled = false ) {
|
125 |
+
if( !$this->dropdown_cache ) {
|
126 |
+
$this->dropdown_cache = wp_dropdown_users( array(
|
127 |
+
'name' => 'user_id',
|
128 |
+
'role__not_in' => array('subscriber'),
|
129 |
+
'show_option_none' => 'All users',
|
130 |
+
'echo' => false
|
131 |
+
) );
|
132 |
+
}
|
133 |
+
$html = $this->dropdown_cache;
|
134 |
+
|
135 |
+
$html = str_replace("value='".$user_id."'>","value='".$user_id."' selected>",$html);
|
136 |
+
if( $name ) $html = str_replace("name='user_id' ","name='".$name."' ' ",$html);
|
137 |
+
if( $disabled ) $html = str_replace("<select ","<select disabled='disabled' ",$html);
|
138 |
+
|
139 |
+
return $html;
|
140 |
+
}*/
|
141 |
+
|
142 |
+
public function column_cb( $player ) {
|
143 |
+
return sprintf(
|
144 |
+
'<input type="checkbox" name="%1$s[]" value="%2$s" />',
|
145 |
+
'log_id',
|
146 |
+
$player->id
|
147 |
+
);
|
148 |
+
}
|
149 |
+
|
150 |
+
public function column_default( $job, $column_name ) {
|
151 |
+
switch ( $column_name ) {
|
152 |
+
case 'id' :
|
153 |
+
$value = '<a href="#"">'.$job->id.'</a>';
|
154 |
+
if( isset($job->delete_confirmation_message) && !isset( $job->player_id ) ) { // show delete only id not in player
|
155 |
+
$value .='<div class="row-actions"><span class="trash"><a href="#" class="job-delete delete-hover" data-message="'. $job->delete_confirmation_message .'" data-nonce="'.wp_create_nonce( 'fv-player-encoder-delete-job-'.$job->id ).'" data-id="'.$job->id.'">Delete</a></span></div>';
|
156 |
+
} else {
|
157 |
+
$value .= '<div class="row-actions"><span class="cannot-trash"><a class="delete-hover">Delete</a><span class="tooltiptext">Cannot delete the job because video is embeded in player</span></div>';
|
158 |
+
}
|
159 |
+
break;
|
160 |
+
case 'date_created' :
|
161 |
+
$value = $job->date_created > 0 ? "<abbr title='$job->date_created'>".date('Y/m/d',strtotime($job->date_created))."</abbr>" : false;
|
162 |
+
break;
|
163 |
+
case 'source':
|
164 |
+
$nice_src = preg_replace( '~\?.+$~', '', $job->$column_name );
|
165 |
+
$value = "<a href='".esc_attr($job->$column_name)."' target='_blank'>".$nice_src."</a>";
|
166 |
+
break;
|
167 |
+
case 'status':
|
168 |
+
$error = !empty($job->error) ? "<p><b>".$job->error."</b></p>" : "";
|
169 |
+
$value = "<div class='hover-wrap'><a href='#'>".$job->status. ( $job->status == 'processing' ? " " . $job->progress : "" ) ."</a>";
|
170 |
+
if( $job->status == 'processing' ) {
|
171 |
+
$value .= ' <img data-fv-player-wizard-indicator width="16" height="16" src="'.site_url('wp-includes/images/wpspin-2x.gif').'" />';
|
172 |
+
}
|
173 |
+
$value .= "<div class='hover-details'>".$error."<h4>Response:</h4><pre>".self::json_prettyPrint($job->result)."</pre><h4>Output:</h4><pre>".self::json_prettyPrint($job->output)."</pre></div></div>";
|
174 |
+
break;
|
175 |
+
case 'target':
|
176 |
+
$value = "<div class='hover-wrap'><a href='#'>".$job->target."</a><div class='hover-details'><pre>" . $this->json_prettyPrint( $job->args ) . "</pre></div></div>";
|
177 |
+
break;
|
178 |
+
case 'author':
|
179 |
+
$value = '<a href="#">'.get_the_author_meta( 'user_nicename' , $job->author ).'</a>';
|
180 |
+
break;
|
181 |
+
default:
|
182 |
+
$value = isset($job->$column_name) && $job->$column_name ? $job->$column_name : '';
|
183 |
+
break;
|
184 |
+
}
|
185 |
+
|
186 |
+
return $value;
|
187 |
+
}
|
188 |
+
|
189 |
+
private function json_prettyPrint( $json ) {
|
190 |
+
$result = '';
|
191 |
+
$level = 0;
|
192 |
+
$in_quotes = false;
|
193 |
+
$in_escape = false;
|
194 |
+
$ends_line_level = NULL;
|
195 |
+
$json_length = strlen( $json );
|
196 |
+
|
197 |
+
for( $i = 0; $i < $json_length; $i++ ) {
|
198 |
+
$char = $json[$i];
|
199 |
+
$new_line_level = NULL;
|
200 |
+
$post = "";
|
201 |
+
if( $ends_line_level !== NULL ) {
|
202 |
+
$new_line_level = $ends_line_level;
|
203 |
+
$ends_line_level = NULL;
|
204 |
+
}
|
205 |
+
if ( $in_escape ) {
|
206 |
+
$in_escape = false;
|
207 |
+
} else if( $char === '"' ) {
|
208 |
+
$in_quotes = !$in_quotes;
|
209 |
+
} else if( ! $in_quotes ) {
|
210 |
+
switch( $char ) {
|
211 |
+
case '}': case ']':
|
212 |
+
$level--;
|
213 |
+
$ends_line_level = NULL;
|
214 |
+
$new_line_level = $level;
|
215 |
+
break;
|
216 |
+
|
217 |
+
case '{': case '[':
|
218 |
+
$level++;
|
219 |
+
case ',':
|
220 |
+
$ends_line_level = $level;
|
221 |
+
break;
|
222 |
+
|
223 |
+
case ':':
|
224 |
+
$post = " ";
|
225 |
+
break;
|
226 |
+
|
227 |
+
case " ": case "\t": case "\n": case "\r":
|
228 |
+
$char = "";
|
229 |
+
$ends_line_level = $new_line_level;
|
230 |
+
$new_line_level = NULL;
|
231 |
+
break;
|
232 |
+
}
|
233 |
+
} else if ( $char === '\\' ) {
|
234 |
+
$in_escape = true;
|
235 |
+
}
|
236 |
+
if( $new_line_level !== NULL ) {
|
237 |
+
$result .= "\n".str_repeat( " ", $new_line_level );
|
238 |
+
}
|
239 |
+
$result .= $char.$post;
|
240 |
+
}
|
241 |
+
|
242 |
+
return $result;
|
243 |
+
}
|
244 |
+
|
245 |
+
public function get_bulk_actions() { // todo: any bulk action?
|
246 |
+
return array();
|
247 |
+
}
|
248 |
+
|
249 |
+
public function process_bulk_action() { // todo: any bulk action?
|
250 |
+
return;
|
251 |
+
}
|
252 |
+
|
253 |
+
private function get_result_counts() {
|
254 |
+
global $wpdb;
|
255 |
+
$this->total_items = $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->table_name );
|
256 |
+
}
|
257 |
+
|
258 |
+
public function get_columns() {
|
259 |
+
return array(
|
260 |
+
'id' => __( 'ID' ),
|
261 |
+
'date_created' => __( 'Created' ),
|
262 |
+
'source' => __( 'Source' ),
|
263 |
+
'target' => __( 'Target' ),
|
264 |
+
'status' => __( 'Status' ),
|
265 |
+
'author' => __( 'Author' ),
|
266 |
+
'player_id' => __( 'Player ID' )
|
267 |
+
);
|
268 |
+
}
|
269 |
+
|
270 |
+
private function get_data($id = false, $args = false ) {
|
271 |
+
if( !$args ) $args = $_GET;
|
272 |
+
|
273 |
+
$args = wp_parse_args( $args, array(
|
274 |
+
'exclude' => false,
|
275 |
+
'order' => 'desc',
|
276 |
+
'orderby' => 'date_created',
|
277 |
+
'paged' => 1,
|
278 |
+
'status' => false,
|
279 |
+
's' => false
|
280 |
+
));
|
281 |
+
|
282 |
+
$aWhere = array();
|
283 |
+
$aWhere[] = "type = '{$this->encoder_id}'";
|
284 |
+
|
285 |
+
if( is_array($id) ) {
|
286 |
+
$id = array_map('intval', $id);
|
287 |
+
$aWhere[] = 'id IN ('.implode(',',$id).')';
|
288 |
+
} else if( $id ) {
|
289 |
+
$aWhere[] = 'id = '.intval($id);
|
290 |
+
}
|
291 |
+
|
292 |
+
if( $args['exclude'] ) {
|
293 |
+
$aWhere[] = 'id NOT IN ('.implode(',',$args['exclude']).')';
|
294 |
+
}
|
295 |
+
|
296 |
+
if( $args['status'] == 'pending' ) $aWhere[] = "status = 'pending'";
|
297 |
+
if( $args['status'] == 'complete' ) $aWhere[] = "status = 'complete'";
|
298 |
+
if( $args['status'] == 'error' ) $aWhere[] = "status = 'error'";
|
299 |
+
|
300 |
+
if( $args['s'] ) {
|
301 |
+
// TODO: Search SQL
|
302 |
+
}
|
303 |
+
|
304 |
+
$where = count($aWhere) ? " WHERE ".implode( " AND ", $aWhere ) : "";
|
305 |
+
|
306 |
+
$order = esc_sql($args['order']);
|
307 |
+
$order_by = esc_sql($args['orderby']);
|
308 |
+
|
309 |
+
$per_page = intval($this->args['per_page']);
|
310 |
+
$offset = ( $args['paged'] - 1 ) * $per_page;
|
311 |
+
|
312 |
+
global $wpdb;
|
313 |
+
$sql = "SELECT * FROM {$this->table_name} $where ORDER BY $order_by $order LIMIT $offset, $per_page";
|
314 |
+
|
315 |
+
// get embeded players using id from job
|
316 |
+
$sql_2 = "SELECT j.id, m.id_video, p.id AS player_id FROM {$this->table_name} AS j
|
317 |
+
JOIN `{$wpdb->prefix}fv_player_videometa` AS m ON j.id = m.meta_value
|
318 |
+
JOIN `{$wpdb->prefix}fv_player_players` AS p ON find_in_set(p.videos,m.id_video) > 0
|
319 |
+
WHERE m.meta_key = 'encoding_job_id'";
|
320 |
+
//echo "<pre>".$sql."</pre>";
|
321 |
+
|
322 |
+
$results = $wpdb->get_results($sql);
|
323 |
+
|
324 |
+
$playlist_embed = $wpdb->get_results($sql_2);
|
325 |
+
|
326 |
+
// add player id(s) to results
|
327 |
+
foreach( $results AS $key => $row ) {
|
328 |
+
foreach ( $playlist_embed as $key2 => $row2 ) {
|
329 |
+
if( $row->id == $row2->id ) {
|
330 |
+
if( !isset($results[$key]->player_id) ) {
|
331 |
+
$results[$key]->player_id = "". $row2->player_id;
|
332 |
+
} else {
|
333 |
+
$results[$key]->player_id .= ",". $row2->player_id;
|
334 |
+
}
|
335 |
+
}
|
336 |
+
}
|
337 |
+
|
338 |
+
$args = json_decode($row->args ,true);
|
339 |
+
|
340 |
+
$message = array();
|
341 |
+
|
342 |
+
// Get target, host & bucket for message when deleting job
|
343 |
+
if( !empty($args['storage']['endpoint']) ) {
|
344 |
+
$message[] = 'Host: ' .$args['storage']['endpoint'];
|
345 |
+
}
|
346 |
+
|
347 |
+
if( !empty($args['storage']['bucket']) ) {
|
348 |
+
$message[] = 'Space/Bucket: ' .$args['storage']['bucket'];
|
349 |
+
}
|
350 |
+
|
351 |
+
if( isset($args['outputs']['httpstream']) ) {
|
352 |
+
$message[] = 'Folder: ' .$args['outputs']['httpstream']['hls']['path'];
|
353 |
+
} else if ( isset($args['outputs']['httpstream#above4k']) ) {
|
354 |
+
$message[] = 'Folder: ' .$args['outputs']['httpstream#above4k']['hls']['path'];
|
355 |
+
}
|
356 |
+
|
357 |
+
if( count( $message ) ) {
|
358 |
+
$results[$key]->delete_confirmation_message = "\n\n".implode( "\n\n", $message );
|
359 |
+
}
|
360 |
+
|
361 |
+
}
|
362 |
+
|
363 |
+
return $results;
|
364 |
+
}
|
365 |
+
|
366 |
+
public function prepare_items( $id = false, $args = false ) {
|
367 |
+
$columns = $this->get_columns();
|
368 |
+
$hidden = array(); // No hidden columns
|
369 |
+
$sortable = $this->get_sortable_columns();
|
370 |
+
$this->items = $this->get_data( $id, $args );
|
371 |
+
|
372 |
+
$this->_column_headers = array( $columns, $hidden, $sortable );
|
373 |
+
|
374 |
+
$this->set_pagination_args( array(
|
375 |
+
'total_items' => $this->total_items,
|
376 |
+
'per_page' => $this->args['per_page'],
|
377 |
+
'total_pages' => ceil( $this->total_item / $this->args['per_page'] ),
|
378 |
+
)
|
379 |
+
);
|
380 |
+
}
|
381 |
+
|
382 |
+
}
|
models/video-encoder/video-encoder.php
ADDED
@@ -0,0 +1,1016 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
abstract class FV_Player_Video_Encoder {
|
4 |
+
private
|
5 |
+
$encoder_id = '', // used for unique action names and asset names (CSS, JS)
|
6 |
+
// examples: coconut, bunny_stream, dos ...
|
7 |
+
$encoder_wp_url_slug = '', // used in all links that will point to the list of this encoder jobs
|
8 |
+
// examples: fv_player_coconut, fv_player_bunny_stream ...
|
9 |
+
$encoder_name = '', // used to display name of the service where appropriate (mostly information DIVs in a HTML output)
|
10 |
+
// examples: Coconut, Bunny.net Stream ...
|
11 |
+
$instance = null, // self-explanatory
|
12 |
+
$admin_page = false, // will be set to a real admin submenu page object once created
|
13 |
+
$browser_inc_file = ''; // the full inclusion path for this Encoder's browser PHP backend file, so we can include_once() it
|
14 |
+
|
15 |
+
// variables to override or access from outside of the base class
|
16 |
+
protected
|
17 |
+
$version = 'latest',
|
18 |
+
$license_key = false,
|
19 |
+
$table_name = 'fv_player_encoding_jobs'; // table in which encoding jobs are stored
|
20 |
+
|
21 |
+
public function _get_instance() {
|
22 |
+
return $this->instance;
|
23 |
+
}
|
24 |
+
|
25 |
+
public function get_version() {
|
26 |
+
return $this->version;
|
27 |
+
}
|
28 |
+
|
29 |
+
public function get_table_name() {
|
30 |
+
return $this->table_name;
|
31 |
+
}
|
32 |
+
|
33 |
+
protected function __construct( $encoder_id, $encoder_name, $encoder_wp_url_slug, $browser_inc_file ) {
|
34 |
+
global $wpdb;
|
35 |
+
|
36 |
+
if ( !$encoder_id ) {
|
37 |
+
throw new Exception('Extending encoder class did not provide an encoder ID!');
|
38 |
+
}
|
39 |
+
|
40 |
+
if ( !$encoder_name ) {
|
41 |
+
throw new Exception('Extending encoder class did not provide an encoder name!');
|
42 |
+
}
|
43 |
+
|
44 |
+
if ( !$encoder_wp_url_slug ) {
|
45 |
+
throw new Exception('Extending encoder class did not provide an encoder URL slug!');
|
46 |
+
}
|
47 |
+
|
48 |
+
if ( !$browser_inc_file ) {
|
49 |
+
throw new Exception('Extending encoder class did not provide a browser backend PHP file name!');
|
50 |
+
}
|
51 |
+
|
52 |
+
$this->encoder_id = $encoder_id;
|
53 |
+
$this->encoder_name = $encoder_name;
|
54 |
+
$this->encoder_wp_url_slug = $encoder_wp_url_slug;
|
55 |
+
|
56 |
+
// table names always start on WP prefix, so add that here for our table name here
|
57 |
+
$this->table_name = $wpdb->prefix . $this->table_name;
|
58 |
+
$this->browser_inc_file = $browser_inc_file;
|
59 |
+
|
60 |
+
add_action('init', array( $this, 'email_notification' ), 7 );
|
61 |
+
|
62 |
+
if( is_admin() ) {
|
63 |
+
add_action( 'admin_menu', array($this, 'admin_menu'), 11 );
|
64 |
+
|
65 |
+
add_filter( 'fv_player_conf_defaults', array( $this, 'default_settings' ), 10, 2 );
|
66 |
+
|
67 |
+
$version = get_option( 'fv_player_' . $this->encoder_id . '_ver' );
|
68 |
+
if( $this->version != $version ) {
|
69 |
+
update_option( 'fv_player_' . $this->encoder_id . '_ver', $this->version );
|
70 |
+
|
71 |
+
// This is where FV Player will set any default settings.
|
72 |
+
// We have to do this again as we only init this plugin on plugins_loaded after $fv_fp has been created with the default settings initialized.
|
73 |
+
global $fv_fp;
|
74 |
+
if( !empty($fv_fp) && method_exists( $fv_fp, '_get_conf' ) ) {
|
75 |
+
$fv_fp->_get_conf();
|
76 |
+
}
|
77 |
+
|
78 |
+
$this->plugin_update_database();
|
79 |
+
}
|
80 |
+
|
81 |
+
add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
|
82 |
+
|
83 |
+
add_action( 'wp_ajax_fv_player_' . $this->encoder_id .'_submit', array( $this, 'ajax_fv_player_job_submit') );
|
84 |
+
|
85 |
+
add_action( 'wp_ajax_fv_player_' . $this->encoder_id .'_delete_job', array( $this, 'ajax_fv_player_delete_job') );
|
86 |
+
|
87 |
+
//add_action( 'plugins_loaded', array( $this, 'init_browser') );
|
88 |
+
// this file is actually only included after the 'plugins_loaded' action was fired, so let's run this method manually
|
89 |
+
$this->init_browser();
|
90 |
+
|
91 |
+
// we use a custom taxonomy to categorize the jobs
|
92 |
+
add_action( 'admin_init', array( $this, 'create_encoding_categories' ) );
|
93 |
+
|
94 |
+
// when a new encoding category gets added, we don't want it to show on top of the list
|
95 |
+
add_filter( 'wp_terms_checklist_args', array( $this, 'category_picker_args' ) );
|
96 |
+
|
97 |
+
// Periodically update jobs status when wp hearbeat is fired
|
98 |
+
add_filter( 'heartbeat_received', array( $this, 'heartbeat_check' ), 10, 3 );
|
99 |
+
|
100 |
+
// Editor enhancements to store job ID with video
|
101 |
+
add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_editor_scripts'));
|
102 |
+
add_action( 'fv_flowplayer_shortcode_editor_item_after', array( $this, 'shortcode_editor_item' ) );
|
103 |
+
|
104 |
+
add_filter('plugin_action_links', array( $this, 'admin_plugin_action_links' ), 10, 2);
|
105 |
+
|
106 |
+
$options = get_option( 'fvwpflowplayer' );
|
107 |
+
if( !empty($options[ $this->encoder_id ]) && !empty($options[ $this->encoder_id ]['license_key']) ) {
|
108 |
+
$this->license_key = $options[ $this->encoder_id ]['license_key'];
|
109 |
+
}
|
110 |
+
|
111 |
+
add_action( 'admin_notices', array( $this, 'admin_notices' ) );
|
112 |
+
|
113 |
+
add_action( 'fv_player_video_encoder_include_listing_lib', array( $this, 'include_listing_lib' ), 10, 0 );
|
114 |
+
}
|
115 |
+
|
116 |
+
add_action( 'fv_player_item', array( $this, 'check_playlist_video_is_processing' ) );
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Includes a generic jobs listing library, so it can be used outside of this class,
|
121 |
+
* i.e. by extending Encoder classes, when needed.
|
122 |
+
*/
|
123 |
+
public function include_listing_lib() {
|
124 |
+
require_once dirname( __FILE__ ) . '/class.fv-player-encoder-list-table.php';
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Checks whether the video is being processed by the extending Encoder
|
129 |
+
* and if so, includes JS & CSS for that Encoder (+ global overlay CSS) on page, so the extending class
|
130 |
+
* can display overlays with error / progress messages.
|
131 |
+
*
|
132 |
+
* @param $item array The actual video item to check.
|
133 |
+
*
|
134 |
+
* @return array Returns an augmented video item data, if its source was found to be a video in encoding process.
|
135 |
+
*/
|
136 |
+
public function check_playlist_video_is_processing( $item ) {
|
137 |
+
if ( is_array($item['sources']) ) {
|
138 |
+
foreach( $item['sources'] as $source ) {
|
139 |
+
if ( strpos($source['src'], $this->encoder_id . '_processing_' ) !== false ) {
|
140 |
+
$item['pending_encoding'] = true;
|
141 |
+
|
142 |
+
$job_id = explode( $this->encoder_id. '_processing_', $source['src'] );
|
143 |
+
if( !empty($job_id[1]) ) {
|
144 |
+
$job_id = $job_id[1];
|
145 |
+
|
146 |
+
$check = $this->update_temporary_job_src( false, $job_id );
|
147 |
+
if( !empty($check['progress']) && ( $check['status'] != 'error' ) ) {
|
148 |
+
$item['pending_encoding_progress'] = $check['progress'];
|
149 |
+
} else {
|
150 |
+
$item['pending_encoding_error'] = true;
|
151 |
+
}
|
152 |
+
}
|
153 |
+
}
|
154 |
+
}
|
155 |
+
}
|
156 |
+
|
157 |
+
return $item;
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Enqueues a JS file for shortcode editor when needed on the backend pages.
|
162 |
+
*
|
163 |
+
* @param $page The identifier of a page we're currently viewing.
|
164 |
+
*/
|
165 |
+
public function admin_enqueue_editor_scripts($page) {
|
166 |
+
if( $page == 'post.php' || $page == 'post-new.php' || $page == 'toplevel_page_fv_player' ) {
|
167 |
+
wp_enqueue_script('fvplayer-shortcode-editor-' . $this->encoder_id, plugins_url( 'js/shortcode-editor.js', $this->getFILE() ), array('jquery', 'fvwpflowplayer-shortcode-editor'), $this->version );
|
168 |
+
}
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Periodically updates jobs status when wp hearbeat is fired.
|
173 |
+
*
|
174 |
+
* @param $response array The heartbeat response body which we're augmenting with our job data.
|
175 |
+
* @param $data array containing IDs of jobs pending encoding for the current extending Encoder class.
|
176 |
+
* @param $screen_id string ID of the page we're currently viewing.
|
177 |
+
*
|
178 |
+
* @return mixed
|
179 |
+
*/
|
180 |
+
public function heartbeat_check( $response, $data, $screen_id ) {
|
181 |
+
if( strcmp( 'fv-player_page_' . $this->encoder_wp_url_slug, $screen_id ) == 0 ) {
|
182 |
+
if( isset($data[ $this->encoder_id . '_pending' ]) ) {
|
183 |
+
$ids = $data[ $this->encoder_id . '_pending' ];
|
184 |
+
$response[ $this->encoder_id . '_still_pending'] = $this->jobs_check(true); // update pending job in js
|
185 |
+
$rows_html = $this->get_updated_rows( $ids );
|
186 |
+
$response[ $this->encoder_id ] = $rows_html; // html for jobs
|
187 |
+
}
|
188 |
+
}
|
189 |
+
|
190 |
+
return $response;
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Returns augmented arguments array for the category picker with the option for "checked_ontop" set to FALSE.
|
195 |
+
*
|
196 |
+
* @param $args The original arguments array for the category picker.
|
197 |
+
*
|
198 |
+
* @return array Returns augmented arguments array for the category picker with the option for "checked_ontop" set to FALSE.
|
199 |
+
*/
|
200 |
+
function category_picker_args( $args ) {
|
201 |
+
if( !empty($_POST['action']) && strcmp($_POST['action'],'add-fv_player_encoding_category') == 0 ) {
|
202 |
+
$args['checked_ontop'] = false;
|
203 |
+
}
|
204 |
+
return $args;
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Creates encoding categories taxonomy.
|
209 |
+
*/
|
210 |
+
function create_encoding_categories() {
|
211 |
+
register_taxonomy(
|
212 |
+
'fv_player_encoding_category',
|
213 |
+
'fv_player_encoding_job',
|
214 |
+
array(
|
215 |
+
'hierarchical' => true,
|
216 |
+
'rewrite' => false // we only need the category names
|
217 |
+
)
|
218 |
+
);
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* Adds FV Player admin menu item to show jobs for this Encoder.
|
223 |
+
*/
|
224 |
+
function admin_menu(){
|
225 |
+
if( current_user_can('edit_posts') ) {
|
226 |
+
|
227 |
+
$title = $this->encoder_name . ( $this->is_configured() ? ' Jobs' : '' );
|
228 |
+
|
229 |
+
$this->admin_page = add_submenu_page( 'fv_player', $title, $title, 'edit_posts', $this->encoder_wp_url_slug, array( $this, 'tools_panel' ) );
|
230 |
+
|
231 |
+
if( $this->is_configured() ) {
|
232 |
+
add_action( 'load-'.$this->admin_page, array( $this, 'screen_options' ) );
|
233 |
+
//add_filter( 'manage_toplevel_page_fv_player_columns', array( $this, 'screen_columns' ) );
|
234 |
+
//add_filter( 'hidden_columns', array( $this, 'screen_columns_hidden' ), 10, 3 );
|
235 |
+
add_filter( 'set-screen-option', array($this, 'set_screen_option'), 10, 3);
|
236 |
+
}
|
237 |
+
}
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Adds Settings or Finish Set-Up tab links on top of the Encoder's jobs listing page.
|
242 |
+
*
|
243 |
+
* @param $links array An array of existing tab links.
|
244 |
+
* @param $file string Filename in which we're calling this action.
|
245 |
+
*
|
246 |
+
* @return array Returns an array with new tab links added to it.
|
247 |
+
*/
|
248 |
+
function admin_plugin_action_links($links, $file) {
|
249 |
+
if ( stripos( $file, 'fv-player-' . $this->encoder_id . '.php') !== false ) {
|
250 |
+
if ( $this->is_configured() ) {
|
251 |
+
$extra_link = '<a href="'.admin_url('admin.php?page=' . $this->encoder_wp_url_slug . '&panel=settings').'">Settings</a>';
|
252 |
+
} else {
|
253 |
+
$extra_link = '<a href="'.admin_url('admin.php?page=' . $this->encoder_wp_url_slug).'">Finish Set-Up</a>';
|
254 |
+
}
|
255 |
+
array_unshift($links, $extra_link);
|
256 |
+
}
|
257 |
+
return $links;
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Ajax handler for deleting completed and errorred-out jobs
|
262 |
+
*
|
263 |
+
* @param int $_POST['id_row'] ID of the job row
|
264 |
+
*
|
265 |
+
* @return JSON Status message
|
266 |
+
*/
|
267 |
+
function ajax_fv_player_delete_job() {
|
268 |
+
global $wpdb;
|
269 |
+
|
270 |
+
$id = $_POST['id_row'];
|
271 |
+
|
272 |
+
if (
|
273 |
+
defined('DOING_AJAX') &&
|
274 |
+
( !isset( $_POST['nonce'] ) || !wp_verify_nonce( $_POST['nonce'], 'fv-player-encoder-delete-job-' . $id ) )
|
275 |
+
) {
|
276 |
+
wp_send_json( array('error' => 'Bad nonce') );
|
277 |
+
}
|
278 |
+
|
279 |
+
if ( $wpdb->query( $wpdb->prepare("DELETE FROM " . $this->table_name . " WHERE id = %d ", $id) ) ) {
|
280 |
+
wp_send_json( array('success' => 'Job deleted successfully') );
|
281 |
+
} else {
|
282 |
+
wp_send_json( array('error' => 'Error deleting row') );
|
283 |
+
}
|
284 |
+
}
|
285 |
+
|
286 |
+
/**
|
287 |
+
* Ajax handler for creation of new job.
|
288 |
+
*
|
289 |
+
* @param string $_POST['source'] Source file URL
|
290 |
+
* @param string $_POST['target'] Target folder on the target CDN
|
291 |
+
* @param string $_POST['encryption'] Should it encrypt the video?
|
292 |
+
*
|
293 |
+
* @return JSON New job table row HTML in html property and also error property if there is any error
|
294 |
+
*/
|
295 |
+
function ajax_fv_player_job_submit() {
|
296 |
+
global $wpdb;
|
297 |
+
|
298 |
+
// TODO: update JS to generate correct nonce ID (it was coconut_expert_nonce before)
|
299 |
+
if(
|
300 |
+
defined('DOING_AJAX') &&
|
301 |
+
( !isset( $_POST['nonce'] ) || !wp_verify_nonce( $_POST['nonce'], 'fv_player_' . $this->encoder_id ) )
|
302 |
+
) {
|
303 |
+
wp_send_json( array('error' => 'Bad nonce') );
|
304 |
+
}
|
305 |
+
|
306 |
+
$source = trim( $_POST['source'] );
|
307 |
+
$target = trim( $_POST['target'] );
|
308 |
+
|
309 |
+
// if the extending Encoder supports encryption, add it here
|
310 |
+
if ( isset($_POST['encryption']) ) {
|
311 |
+
$encryption = $_POST['encryption'];
|
312 |
+
}
|
313 |
+
|
314 |
+
// if the extending Encoder supports a trailer, add it here
|
315 |
+
if ( isset( $_POST['trailer'] ) ) {
|
316 |
+
$trailer = $_POST['trailer'];
|
317 |
+
}
|
318 |
+
|
319 |
+
// if we get a proper category link, we prepend its Name (and parent Names) to the target
|
320 |
+
if ( !empty($_POST['category_id']) ) {
|
321 |
+
if ( $folder = $this->util__category_id_to_folder( $_POST['category_id'] ) ) {
|
322 |
+
$target = $folder.'/'.$target;
|
323 |
+
}
|
324 |
+
}
|
325 |
+
|
326 |
+
$target = $this->util__sanitize_target($target);
|
327 |
+
|
328 |
+
// check for a valid source URL
|
329 |
+
if ( empty( $_POST['no_source_verify'] ) && !preg_match('~^(https?|s?ftp)://~', $source) ) {
|
330 |
+
$error = 'Your source location is not a proper URL!';
|
331 |
+
if ( defined('DOING_AJAX') ) {
|
332 |
+
wp_send_json( array('error' => $error) );
|
333 |
+
} else {
|
334 |
+
return $error;
|
335 |
+
}
|
336 |
+
}
|
337 |
+
|
338 |
+
// if the same target name already exists and we've not asked to rename it automatically,
|
339 |
+
// return an error
|
340 |
+
if ( empty( $_POST['rename_if_exists'] ) && empty( $_POST['ignore_duplicates'] ) ) {
|
341 |
+
if ( $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM " . $this->table_name . " WHERE target = %s AND status != 'error' ", $target ) ) ) {
|
342 |
+
$error = 'Target stream already exists, please try with different target name.';
|
343 |
+
if ( defined( 'DOING_AJAX' ) ) {
|
344 |
+
wp_send_json( array( 'error' => $error ) );
|
345 |
+
} else {
|
346 |
+
return $error;
|
347 |
+
}
|
348 |
+
}
|
349 |
+
} else if ( empty( $_POST['ignore_duplicates'] ) ) {
|
350 |
+
$original_target = $target;
|
351 |
+
$rename_suffix_counter = 1;
|
352 |
+
while ( $wpdb->get_var( $wpdb->prepare( "SELECT count(id) FROM " . $this->table_name . " WHERE target = %s AND status != 'error' ", $target ) ) ) {
|
353 |
+
$rename_suffix_counter++;
|
354 |
+
$target = $original_target . '_' . $rename_suffix_counter;
|
355 |
+
}
|
356 |
+
}
|
357 |
+
|
358 |
+
// verify the currently used endpoint supported by the extending Encoder,
|
359 |
+
// such as (S)FTP or S3 credentials
|
360 |
+
$endpoint_verify = $this->verify_active_endpoint( $target );
|
361 |
+
if ( $endpoint_verify !== true ) {
|
362 |
+
return $endpoint_verify;
|
363 |
+
}
|
364 |
+
|
365 |
+
// prepare an encoding job to submit to the extending Encoder
|
366 |
+
$job = array(
|
367 |
+
'source' => $source,
|
368 |
+
'target' => $target,
|
369 |
+
);
|
370 |
+
|
371 |
+
// encryption support
|
372 |
+
if ( isset( $encryption ) ) {
|
373 |
+
$job['encryption'] = $encryption;
|
374 |
+
}
|
375 |
+
|
376 |
+
// support for trailers
|
377 |
+
if ( isset( $trailer ) ) {
|
378 |
+
$job['trailer'] = $trailer;
|
379 |
+
}
|
380 |
+
|
381 |
+
// create a new job
|
382 |
+
$id = $this->job_create( $job );
|
383 |
+
$show = array( $id );
|
384 |
+
|
385 |
+
// submit the job to the Encoder service
|
386 |
+
$result = $this->job_submit($id);
|
387 |
+
|
388 |
+
if( defined('DOING_AJAX') ) {
|
389 |
+
require_once dirname( __FILE__ ) . '/class.fv-player-encoder-list-table.php';
|
390 |
+
|
391 |
+
ob_start();
|
392 |
+
$jobs_table = new FV_Player_Encoder_List_Table( array( 'encoder_id' => $this->encoder_id, 'table_name' => $this->table_name ) );
|
393 |
+
$jobs_table->prepare_items($show);
|
394 |
+
$jobs_table->display();
|
395 |
+
$html = ob_get_clean();
|
396 |
+
|
397 |
+
wp_send_json( array( 'html' => $html, 'id' => $id, 'result' => $result ) );
|
398 |
+
|
399 |
+
} else {
|
400 |
+
return $id;
|
401 |
+
}
|
402 |
+
}
|
403 |
+
|
404 |
+
/**
|
405 |
+
* Includes the browser PHP backend file for the extending encoder class.
|
406 |
+
*/
|
407 |
+
function init_browser() {
|
408 |
+
// it should not show when picking the media file in dashboard
|
409 |
+
if( empty( $_GET['page'] ) || strcmp( $_GET['page'], $this->encoder_wp_url_slug ) != 0 ) {
|
410 |
+
include_once( $this->browser_inc_file );
|
411 |
+
}
|
412 |
+
}
|
413 |
+
|
414 |
+
/**
|
415 |
+
* Returns an array with all updated jobs' HTML that can be used on admin pages
|
416 |
+
* to refresh jobs table data during the WP heartbeat.
|
417 |
+
*
|
418 |
+
* @param $ids array An array of all job IDs to get HTML output for.
|
419 |
+
*
|
420 |
+
* @return array Returns an array with all updated jobs' HTML that can be used on admin pages
|
421 |
+
* to refresh jobs table data during the WP heartbeat.
|
422 |
+
*/
|
423 |
+
function get_updated_rows( $ids ) {
|
424 |
+
$rows = array();
|
425 |
+
|
426 |
+
if( count($ids) > 0 ) {
|
427 |
+
require_once dirname( __FILE__ ) . '/class.fv-player-encoder-list-table.php';
|
428 |
+
// get html for processed rows
|
429 |
+
foreach($ids as $id ) {
|
430 |
+
ob_start();
|
431 |
+
$jobs_table = new FV_Player_Encoder_List_Table( array( 'encoder_id' => $this->encoder_id, 'table_name' => $this->table_name ) );
|
432 |
+
$jobs_table->prepare_items( array($id) );
|
433 |
+
$jobs_table->display();
|
434 |
+
$html = ob_get_clean();
|
435 |
+
preg_match( '/<tbody[\s\S]*?(<tr>[\s\S]*?<\/tr>)[\s\S]*?<\/tbody>/', $html, $matches ); // match row
|
436 |
+
|
437 |
+
$rows[$id] = $matches[1];
|
438 |
+
}
|
439 |
+
}
|
440 |
+
|
441 |
+
return( $rows );
|
442 |
+
}
|
443 |
+
|
444 |
+
/**
|
445 |
+
* Checks pending encoder jobs for status change and update the src
|
446 |
+
* of this file everywhere it's used in players.
|
447 |
+
*
|
448 |
+
* @param false $all If true, all records are retrieved, otherwise only records for the last 30 seconds are selected.
|
449 |
+
*
|
450 |
+
* @return array Returns an array of all IDs that were in processing status and checked for status change.
|
451 |
+
*/
|
452 |
+
function jobs_check( $all = false ) {
|
453 |
+
global $wpdb;
|
454 |
+
|
455 |
+
$ids = array();
|
456 |
+
$pending_jobs = $wpdb->get_results( "SELECT * FROM ". $this->table_name . " WHERE type = '{$this->encoder_id}' AND status = 'processing'" . ( $all ? '' : ' AND date_checked < DATE_SUB( UTC_TIMESTAMP(), INTERVAL 30 SECOND )' ) );
|
457 |
+
|
458 |
+
foreach( $pending_jobs AS $pending_job ) {
|
459 |
+
$ids[] = $pending_job->id;
|
460 |
+
|
461 |
+
$check_result = $this->job_check( $pending_job );
|
462 |
+
|
463 |
+
// if this job was completed, update SRC of all players where its temporary placeholder is used
|
464 |
+
if ( $check_result['status'] == 'completed' ) {
|
465 |
+
$this->update_temporary_job_src( $check_result, $pending_job->id );
|
466 |
+
}
|
467 |
+
}
|
468 |
+
|
469 |
+
return $ids;
|
470 |
+
}
|
471 |
+
|
472 |
+
/**
|
473 |
+
* Updates src of all videos where the temporary "encoder_processing_" placeholder was used
|
474 |
+
* for the video given either by the $check_result parameter or the one currently displayed on page.
|
475 |
+
*
|
476 |
+
* @param array $check_result If set, this will be a previous job check result from this encoder.
|
477 |
+
* @param int $job_id If set, this will be a previous job ID for which the $check_result check was made.
|
478 |
+
*
|
479 |
+
* @return array|null Returns job check value which will be either the same as the given $check_result
|
480 |
+
* or a new, real $check_result after a job check.
|
481 |
+
*/
|
482 |
+
private function update_temporary_job_src( $check_result = null, $job_id = null ) {
|
483 |
+
global $FV_Player_Db, $fv_fp;
|
484 |
+
|
485 |
+
if ( $check_result ) {
|
486 |
+
$check = $check_result;
|
487 |
+
} else if ( $fv_fp->current_video() ) {
|
488 |
+
$check = $this->job_check( (int) substr( $fv_fp->current_video()->getSrc(), strlen( $this->encoder_id . '_processing_' ) ) );
|
489 |
+
} else {
|
490 |
+
user_error('Could not retrieve JOB check for encoder ' . $this->encoder_name . ', job ID: ' . $job_id . ', defaulted back to input value: ' . print_r( $check_result, true ), E_USER_WARNING );
|
491 |
+
return $check_result;
|
492 |
+
}
|
493 |
+
|
494 |
+
if ( $check['status'] == 'completed' ) {
|
495 |
+
// if we don't have current_video then we're on the players listing page, so we need to find and update
|
496 |
+
// all players where our temporary "encoder_processing_" placeholder is used
|
497 |
+
if ( !$fv_fp->current_video() ) {
|
498 |
+
while ( $vid = $FV_Player_Db->get_video_by_src( $this->encoder_id . '_processing_' . (int) $job_id ) ) {
|
499 |
+
// video processed, replace its SRC
|
500 |
+
$vid->set( 'src', $check['output']->src[0] );
|
501 |
+
|
502 |
+
// also replace its thumbnail / splash
|
503 |
+
if ( $check['output']->thumbnail ) {
|
504 |
+
$vid->set( 'splash', $check['output']->thumbnail );
|
505 |
+
} else if ( $check['output']->splash ) {
|
506 |
+
$vid->set( 'splash', $check['output']->splash );
|
507 |
+
}
|
508 |
+
|
509 |
+
// also set its timeline preview, if received
|
510 |
+
if ( $check['output']->timeline_previews ) {
|
511 |
+
$vid->updateMetaValue( 'timeline_previews', $check['output']->timeline_previews );
|
512 |
+
}
|
513 |
+
|
514 |
+
// save changes for this video
|
515 |
+
$vid->save();
|
516 |
+
|
517 |
+
// purge HTML caches for all posts where players containing this video are present
|
518 |
+
$players = $fv_fp->get_players_by_video_ids( $vid->getId() );
|
519 |
+
foreach ( $players as $player ) {
|
520 |
+
if ( $posts = $player->getMetaValue( 'post_id' ) ) {
|
521 |
+
foreach ( $posts as $post_id ) {
|
522 |
+
wp_update_post( array( 'ID' => $post_id ) );
|
523 |
+
}
|
524 |
+
}
|
525 |
+
}
|
526 |
+
}
|
527 |
+
} else {
|
528 |
+
// video processed, replace its SRC
|
529 |
+
$fv_fp->current_video()->set( 'src', $check['output']->src[0] );
|
530 |
+
|
531 |
+
// also replace its thumbnail / splash
|
532 |
+
if ( $check['output']->thumbnail ) {
|
533 |
+
$fv_fp->current_video()->set( 'splash', $check['output']->thumbnail );
|
534 |
+
} else if ( $check['output']->splash ) {
|
535 |
+
$fv_fp->current_video()->set( 'splash', $check['output']->splash );
|
536 |
+
}
|
537 |
+
|
538 |
+
// also set its timeline preview, if received
|
539 |
+
if ( $check['output']->timeline_previews ) {
|
540 |
+
$fv_fp->current_video()->updateMetaValue( 'timeline_previews', $check['output']->timeline_previews );
|
541 |
+
}
|
542 |
+
|
543 |
+
// save changes for this video
|
544 |
+
$fv_fp->current_video()->save();
|
545 |
+
|
546 |
+
// purge HTML caches for all posts where this player is present
|
547 |
+
if ( $posts = $fv_fp->current_player()->getMetaValue( 'post_id' ) ) {
|
548 |
+
foreach ( $posts as $post_id ) {
|
549 |
+
wp_update_post( array( 'ID' => $post_id ) );
|
550 |
+
}
|
551 |
+
}
|
552 |
+
}
|
553 |
+
}
|
554 |
+
|
555 |
+
return $check;
|
556 |
+
}
|
557 |
+
|
558 |
+
/**
|
559 |
+
* Create the job database entry.
|
560 |
+
*
|
561 |
+
* @param array $args Job configuration
|
562 |
+
* $args = array(
|
563 |
+
* 'source' (string) Source file URL
|
564 |
+
* 'target' (string) Target video folder
|
565 |
+
* 'encryption' (bool) (optional, encoder-features-dependent) Encrypt the HLS stream or not
|
566 |
+
* 'trailer' (bool) (optional, encoder-features-dependent) Should it be a small part of video only
|
567 |
+
*
|
568 |
+
* @global object $wpdb WordPress database object
|
569 |
+
*
|
570 |
+
* @return ID Job ID
|
571 |
+
*/
|
572 |
+
protected function job_create( $args ) {
|
573 |
+
global $wpdb;
|
574 |
+
global $fv_fp;
|
575 |
+
|
576 |
+
$args = wp_parse_args( $args, array(
|
577 |
+
'encryption' => false,
|
578 |
+
'trailer' => false,
|
579 |
+
'video_id' => false
|
580 |
+
) );
|
581 |
+
|
582 |
+
// first we instert the table row with basic data and remember the row ID
|
583 |
+
$wpdb->insert( $this->table_name, array(
|
584 |
+
'date_created' => date("Y-m-d H:i:s"),
|
585 |
+
'source' => $args['source'],
|
586 |
+
'target' => $args['target'],
|
587 |
+
'type' => $this->encoder_id,
|
588 |
+
'mime' => $fv_fp->get_mime_type( $args['source'] ),
|
589 |
+
'status' => 'created',
|
590 |
+
'output' => $this->prepare_job_output_column_value(),
|
591 |
+
'args' => '',
|
592 |
+
'author' => get_current_user_id()
|
593 |
+
), array(
|
594 |
+
'%s',
|
595 |
+
'%s',
|
596 |
+
'%s',
|
597 |
+
'%s',
|
598 |
+
'%s',
|
599 |
+
'%s',
|
600 |
+
'%s',
|
601 |
+
'%s',
|
602 |
+
'%d'
|
603 |
+
));
|
604 |
+
|
605 |
+
$job_id = $wpdb->insert_id;
|
606 |
+
if( !$job_id ) {
|
607 |
+
wp_send_json( array('error' => 'Database error') );
|
608 |
+
return;
|
609 |
+
}
|
610 |
+
|
611 |
+
// we apply extra sanitizaion as some encoders (such as Coconut) use bare text format for their configs
|
612 |
+
$source = $this->util__escape_source($args['source']);
|
613 |
+
|
614 |
+
// we apply the URL signatures/tokens
|
615 |
+
add_filter( 'fv_player_secure_link_timeout', array( $this, 'job_create_expiration' ) );
|
616 |
+
$source = apply_filters( 'fv_flowplayer_video_src', $source, array( 'dynamic' => true ) );
|
617 |
+
|
618 |
+
// once we have the row ID, we generate the configuration
|
619 |
+
$conf_array = array(
|
620 |
+
'source' => $source,
|
621 |
+
'target' => $args['target'],
|
622 |
+
'job_id' => $job_id,
|
623 |
+
'video_id' => $args['video_id'],
|
624 |
+
);
|
625 |
+
|
626 |
+
if ( isset( $args['encryption'] ) ) {
|
627 |
+
$conf_array['encryption'] = $args['encryption'];
|
628 |
+
}
|
629 |
+
|
630 |
+
if ( isset( $args['trailer'] ) ) {
|
631 |
+
$conf_array['trailer'] = $args['trailer'];
|
632 |
+
}
|
633 |
+
|
634 |
+
$conf = $this->get_conf( $conf_array );
|
635 |
+
|
636 |
+
// store the final configuration
|
637 |
+
$wpdb->update( $this->table_name, array(
|
638 |
+
'args' => json_encode( $conf )
|
639 |
+
), array(
|
640 |
+
'id' => $job_id
|
641 |
+
), array(
|
642 |
+
'%s'
|
643 |
+
), array(
|
644 |
+
'%d'
|
645 |
+
) );
|
646 |
+
|
647 |
+
return $job_id;
|
648 |
+
}
|
649 |
+
|
650 |
+
/**
|
651 |
+
* Adds filtering options for the jobs listing page.
|
652 |
+
*/
|
653 |
+
function screen_options() {
|
654 |
+
$screen = get_current_screen();
|
655 |
+
if ( !is_object($screen) || $screen->id != $this->admin_page ) return;
|
656 |
+
|
657 |
+
$args = array(
|
658 |
+
'label' => __('Jobs per page', 'pippin'),
|
659 |
+
'default' => 25,
|
660 |
+
'option' => 'fv_player_' . $this->encoder_id . '_per_page'
|
661 |
+
);
|
662 |
+
|
663 |
+
add_screen_option( 'per_page', $args );
|
664 |
+
}
|
665 |
+
|
666 |
+
/**
|
667 |
+
* Sets the per-page option value for job listing page filter.
|
668 |
+
*
|
669 |
+
* @param $status string Unused.
|
670 |
+
* @param $option string Name of the option we're checking for.
|
671 |
+
* @param $value string Value of the option we're checking for.
|
672 |
+
*
|
673 |
+
* @return string|void
|
674 |
+
*/
|
675 |
+
function set_screen_option($status, $option, $value) {
|
676 |
+
if ( 'fv_player_' . $this->encoder_id . '_per_page' == $option ) return $value;
|
677 |
+
}
|
678 |
+
|
679 |
+
/**
|
680 |
+
* Adds the title and tabs for the jobs listing encoder page in Admin.
|
681 |
+
*/
|
682 |
+
function tools_panel() {
|
683 |
+
if ( !$this->is_configured() ) {
|
684 |
+
$this->tools_panel_settings();
|
685 |
+
return;
|
686 |
+
}
|
687 |
+
|
688 |
+
?>
|
689 |
+
<div class="wrap">
|
690 |
+
<h1 class="wp-heading-inline">FV Player <?php echo $this->encoder_name; ?> Video Encoding Jobs</h1>
|
691 |
+
<h2 class="nav-tab-wrapper">
|
692 |
+
<a href="<?php echo add_query_arg( 'page', $this->encoder_wp_url_slug, admin_url('admin.php') ) ?>" class="nav-tab<?php if( $this->tools_panel_is('jobs') ) echo ' nav-tab-active'; ?>">Jobs</a>
|
693 |
+
<a href="<?php echo add_query_arg( array('page' => $this->encoder_wp_url_slug ,'panel' => 'settings'), admin_url('admin.php') ) ?>" class="nav-tab<?php if( $this->tools_panel_is('settings') ) echo ' nav-tab-active'; ?>">Settings</a>
|
694 |
+
</h2>
|
695 |
+
<?php
|
696 |
+
if( $this->tools_panel_is('settings') ) {
|
697 |
+
$this->tools_panel_settings();
|
698 |
+
} else {
|
699 |
+
$this->tools_panel_jobs();
|
700 |
+
}
|
701 |
+
?>
|
702 |
+
</div>
|
703 |
+
<?php
|
704 |
+
}
|
705 |
+
|
706 |
+
/**
|
707 |
+
* Checks what kind of tab we have active in the jobs listing page in Admin.
|
708 |
+
*
|
709 |
+
* @param boolean $kind The kind of tab we're comparing currently displayed tab with.
|
710 |
+
*
|
711 |
+
* @return bool Returns true if the tab we're looking for is active, false otherwise.
|
712 |
+
*/
|
713 |
+
function tools_panel_is( $kind = false ) {
|
714 |
+
$panel = !empty( $_GET['panel'] ) ? $_GET['panel'] : 'jobs';
|
715 |
+
return strcmp( $panel, $kind ) == 0;
|
716 |
+
}
|
717 |
+
|
718 |
+
/**
|
719 |
+
* Includes JS for the extending encoder class.
|
720 |
+
*
|
721 |
+
* @param $page Auto-filled by WP by the page slug at which we're looking.
|
722 |
+
*/
|
723 |
+
public function admin_enqueue_scripts( $page ) {
|
724 |
+
if( $page == 'post.php' || $page == 'post-new.php' || $page == 'toplevel_page_fv_player' || $page == 'settings_page_fvplayer' || $page == 'fv-player_page_' . $this->encoder_wp_url_slug ) {
|
725 |
+
wp_register_script('fv_player_' . $this->encoder_id . '_admin', plugins_url( 'js/admin.js', $this->getFILE() ), array('jquery'), filemtime( dirname( $this->getFILE() ) . '/js/admin.js') );
|
726 |
+
wp_enqueue_script('fv_player_' . $this->encoder_id . '_admin');
|
727 |
+
wp_localize_script( 'fv_player_' . $this->encoder_id . '_admin', $this->encoder_id . '_pending_jobs', $this->jobs_check(true) );
|
728 |
+
}
|
729 |
+
}
|
730 |
+
|
731 |
+
/**
|
732 |
+
* Adds a hidden encoding job ID field into the editor.
|
733 |
+
*/
|
734 |
+
function shortcode_editor_item() {
|
735 |
+
// TODO: The field has to start with fv_wp_flowplayer_field_ which is not easy to keep in mind!
|
736 |
+
?>
|
737 |
+
<input type="hidden" id="fv_wp_flowplayer_field_encoding_job_id" name="fv_wp_flowplayer_field_encoding_job_id" />
|
738 |
+
<?php
|
739 |
+
}
|
740 |
+
|
741 |
+
/**
|
742 |
+
* Converts 'Tom & Jerry - "The Best" show' to Tom-Jerry-The-Best-show to
|
743 |
+
* ensure safe directory names
|
744 |
+
*
|
745 |
+
* @param string $filename The filename of the source video
|
746 |
+
*
|
747 |
+
* @return string Sanitized file URL - name of the resulting folder for video
|
748 |
+
*/
|
749 |
+
function util__escape_filename( $filename ) {
|
750 |
+
// allow only safe characters
|
751 |
+
$filename = preg_replace('/[^A-Za-z0-9\-]/m', '-', $filename);
|
752 |
+
$filename = preg_replace('/-{2,}/m', '-', $filename);
|
753 |
+
// remove - at start or beginning
|
754 |
+
$filename = preg_replace('/^-|-$/m', '', $filename);
|
755 |
+
return $filename;
|
756 |
+
}
|
757 |
+
|
758 |
+
/**
|
759 |
+
* Without this Coconut wouldn't accept file URLs with symbols like ' ' or
|
760 |
+
* & in it
|
761 |
+
*
|
762 |
+
* @param string $url Source video file URL
|
763 |
+
*
|
764 |
+
* @return string Sanitized file URL
|
765 |
+
*/
|
766 |
+
function util__escape_source( $url ) {
|
767 |
+
$url_components = parse_url($url);
|
768 |
+
$old_path = $url_components['path'];
|
769 |
+
|
770 |
+
$url_components['path'] = str_replace( array('%20','+'), ' ', $url_components['path']);
|
771 |
+
|
772 |
+
$url_components['path'] = rawurlencode($url_components['path']);
|
773 |
+
$url_components['path'] = str_replace('%2F', '/', $url_components['path']);
|
774 |
+
$url_components['path'] = str_replace('%2B', '+', $url_components['path']);
|
775 |
+
|
776 |
+
$url = str_replace($old_path, $url_components['path'], $url);
|
777 |
+
return $url;
|
778 |
+
}
|
779 |
+
|
780 |
+
/**
|
781 |
+
* Convert fv_player_encoding_category ID to a nice folder name.
|
782 |
+
* If you have:
|
783 |
+
* - Documentaries
|
784 |
+
* -- Nature
|
785 |
+
* --- Wildlife & Adventure
|
786 |
+
*
|
787 |
+
* you get: Documentaries/Nature/Wildlife-Adventure
|
788 |
+
*
|
789 |
+
* @param string $url Source video file URL
|
790 |
+
*
|
791 |
+
* @return string Sanitized file URL
|
792 |
+
*/
|
793 |
+
function util__category_id_to_folder( $category_id ) {
|
794 |
+
$folder = false;
|
795 |
+
|
796 |
+
$category = get_term($category_id);
|
797 |
+
if( !is_wp_error($category) ) {
|
798 |
+
$hierarchy = array( $this->util__escape_filename($category->name) );
|
799 |
+
$ancestors = get_ancestors( $category->term_id, 'fv_player_encoding_category', 'taxonomy' );
|
800 |
+
foreach( (array)$ancestors as $ancestor ) {
|
801 |
+
$ancestor_term = get_term($ancestor, 'fv_player_encoding_category');
|
802 |
+
$hierarchy[] = $this->util__escape_filename($ancestor_term->name);
|
803 |
+
}
|
804 |
+
$hierarchy = array_reverse($hierarchy);
|
805 |
+
$folder = implode('/', $hierarchy);
|
806 |
+
}
|
807 |
+
|
808 |
+
return $folder;
|
809 |
+
}
|
810 |
+
|
811 |
+
/**
|
812 |
+
* Get sanitized file path. For example https://cdn.site.com/lessons/music/composing/lesson-1.mp4 gives you /lessons/music/composing/lesson-1
|
813 |
+
*
|
814 |
+
* @param $string Filename or URL
|
815 |
+
* @return string
|
816 |
+
*/
|
817 |
+
function util__sanitize_target( $target ) {
|
818 |
+
|
819 |
+
$target = trim($target);
|
820 |
+
|
821 |
+
// take path only if it's full URL
|
822 |
+
$parsed = parse_url($target);
|
823 |
+
if( !empty($parsed['path']) ) {
|
824 |
+
$target = trim( $parsed['path'], '/' );
|
825 |
+
}
|
826 |
+
|
827 |
+
// sanitize filename
|
828 |
+
$target = explode('/', $target);
|
829 |
+
|
830 |
+
// deal with %20 encoding of spaces
|
831 |
+
$target = array_map( 'urldecode', $target );
|
832 |
+
|
833 |
+
$filename = $target[ count($target) - 1 ];
|
834 |
+
|
835 |
+
// remove file extension
|
836 |
+
if( strrpos( $filename, ".") ) {
|
837 |
+
$filename = substr( $filename, 0, strrpos( $filename, "."));
|
838 |
+
}
|
839 |
+
|
840 |
+
$filename = $this->util__escape_filename($filename);
|
841 |
+
|
842 |
+
// we're done
|
843 |
+
$target[ count($target) - 1 ] = $filename;
|
844 |
+
$target = join('/', $target);
|
845 |
+
|
846 |
+
return $target;
|
847 |
+
}
|
848 |
+
|
849 |
+
/**
|
850 |
+
* Sends an e-mail about changes in the encoding job.
|
851 |
+
*
|
852 |
+
* @param $id int int ID of the job to send this e-mail about.
|
853 |
+
* @param $author_id int ID of the author of the encoding job.
|
854 |
+
* @param $status string Status of the processed encoding job.
|
855 |
+
* @param $target string The actual target for the processed encoding job.
|
856 |
+
* @param $result string Text representation of the result, used to send any error messages along with the e-mail.
|
857 |
+
*/
|
858 |
+
function send_email( $id, $author_id, $status, $target, $result ) {
|
859 |
+
$user = get_userdata( $author_id );
|
860 |
+
$to = $user->user_email;
|
861 |
+
$headers = array('Content-Type: text/plain; charset=UTF-8');
|
862 |
+
|
863 |
+
$subject = "[". get_bloginfo( 'name' ) . "] FV Player {$this->encoder_name}: Job #" . $id . " " . $target . " " . $status ;
|
864 |
+
|
865 |
+
$body = "Hello " . $user->display_name . ",\r\n";
|
866 |
+
$body .= "Your encoding job #" . $id . " " . $target . " has ";
|
867 |
+
|
868 |
+
if( $status == 'completed' ) {
|
869 |
+
$body .= "successfully finished.\r\n";
|
870 |
+
} else {
|
871 |
+
$body .= "run into some problems.\r\n";
|
872 |
+
$body .= $result."\r\n";
|
873 |
+
}
|
874 |
+
|
875 |
+
$body .= "\r\nManage video encoding jobs <a href='". admin_url( 'admin.php?page=' . $this->encoder_wp_url_slug ) ."'>here</a>";
|
876 |
+
|
877 |
+
wp_mail( $to, $subject, $body, $headers );
|
878 |
+
}
|
879 |
+
|
880 |
+
/**
|
881 |
+
* Updates DB table definition for the extending plugin.
|
882 |
+
* Used when a version change of the extending plugin is detected,
|
883 |
+
* as well as displaying jobs listing page.
|
884 |
+
*/
|
885 |
+
public function plugin_update_database() {
|
886 |
+
global $wpdb;
|
887 |
+
|
888 |
+
$sql = "CREATE TABLE ". $this->table_name ." (
|
889 |
+
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
890 |
+
id_video bigint(20) unsigned NOT NULL,
|
891 |
+
job_id varchar(45) NOT NULL,
|
892 |
+
date_created datetime NOT NULL,
|
893 |
+
date_checked datetime NOT NULL,
|
894 |
+
source varchar(1024) NOT NULL,
|
895 |
+
target varchar(1024) NOT NULL,
|
896 |
+
type varchar(64) NOT NULL,
|
897 |
+
status varchar(64) NOT NULL,
|
898 |
+
progress varchar(64),
|
899 |
+
error varchar(1024),
|
900 |
+
mime varchar(64),
|
901 |
+
args TEXT,
|
902 |
+
result TEXT,
|
903 |
+
output TEXT,
|
904 |
+
video_data TEXT,
|
905 |
+
author bigint(20) unsigned NOT NULL default '0',
|
906 |
+
PRIMARY KEY (id),
|
907 |
+
KEY source (source(191)),
|
908 |
+
KEY type (type),
|
909 |
+
KEY status (status),
|
910 |
+
KEY job_id (job_id(15)),
|
911 |
+
)" . $wpdb->get_charset_collate() . ";";
|
912 |
+
|
913 |
+
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
|
914 |
+
dbDelta( $sql );
|
915 |
+
}
|
916 |
+
|
917 |
+
/**
|
918 |
+
* Displays general notices on top in Admin pages.
|
919 |
+
*/
|
920 |
+
abstract function admin_notices();
|
921 |
+
|
922 |
+
/**
|
923 |
+
* Returns an updated $conf variable with settings for the extending Encoder class.
|
924 |
+
*
|
925 |
+
* @param $conf Pre-populated configuration array into which the extending Encoder's class configuration should go.
|
926 |
+
*
|
927 |
+
* @return array Returns an updated $conf variable with settings for the extending Encoder class.
|
928 |
+
*/
|
929 |
+
abstract function default_settings( $conf );
|
930 |
+
|
931 |
+
/**
|
932 |
+
* Verifies the currently used endpoint supported by the extending Encoder, such as (S)FTP or S3 credentials
|
933 |
+
* and either directly outputs a JSON-formatted error (for AJAX purposes) or returns the error to be processed further.
|
934 |
+
*
|
935 |
+
* @return mixed Returns TRUE if the current endpoint is set up properly, an error object/array otherwise.
|
936 |
+
* If we're running an AJAX request, this method must return a valid JSON-formatted error for that request
|
937 |
+
* by utilizing the wp_send_json() method in this format: wp_send_json( array('error' => $error) );
|
938 |
+
*/
|
939 |
+
protected abstract function verify_active_endpoint( $target );
|
940 |
+
|
941 |
+
/*
|
942 |
+
* Creates default Encoder's configuration.
|
943 |
+
*/
|
944 |
+
abstract function get_conf( $args );
|
945 |
+
|
946 |
+
/**
|
947 |
+
* Determines whether this Encoder has been properly configured.
|
948 |
+
*/
|
949 |
+
abstract function is_configured();
|
950 |
+
|
951 |
+
/**
|
952 |
+
* Prepares and returns data to be inserted into the "output" column of this encoder's DB table.
|
953 |
+
*/
|
954 |
+
abstract protected function prepare_job_output_column_value();
|
955 |
+
|
956 |
+
/**
|
957 |
+
* Retrieves new encoding job expiration time, used in URL signatures / tokens.
|
958 |
+
*
|
959 |
+
* @param $ttl An optional TTL parameter.
|
960 |
+
*
|
961 |
+
* @return int Returns the duration in seconds for which this job is valid.
|
962 |
+
*/
|
963 |
+
abstract public function job_create_expiration( $ttl );
|
964 |
+
|
965 |
+
/**
|
966 |
+
* Update job status
|
967 |
+
*
|
968 |
+
* @param object|int $pending_job Table row from encoder's table or its job ID
|
969 |
+
*
|
970 |
+
* @global object $wpdb WordPress database object
|
971 |
+
* @global object $fv_fp FV Player
|
972 |
+
*
|
973 |
+
* @return array
|
974 |
+
* array(
|
975 |
+
* 'result' object Job info from the Encoder
|
976 |
+
* 'status' string Valid values are: "processing", "completed", "error"
|
977 |
+
* 'output' object URLs for all processed resources (such as video qualities, thumbnails etc.)
|
978 |
+
* )
|
979 |
+
*/
|
980 |
+
abstract protected function job_check( $pending_job );
|
981 |
+
|
982 |
+
/**
|
983 |
+
* Submits the job to the Encoder service and stores the result in a table.
|
984 |
+
*
|
985 |
+
* @param int $job_id Job ID
|
986 |
+
|
987 |
+
* @global object $wpdb WordPress database object
|
988 |
+
* @global object $fv_fp FV Player instance to load options with
|
989 |
+
*
|
990 |
+
* @return bool Result
|
991 |
+
*/
|
992 |
+
abstract function job_submit( $id );
|
993 |
+
|
994 |
+
/**
|
995 |
+
* Displays the jobs listing page contents.
|
996 |
+
*/
|
997 |
+
abstract function tools_panel_jobs();
|
998 |
+
|
999 |
+
/**
|
1000 |
+
* Displays the Encoder's settings page contents.
|
1001 |
+
*/
|
1002 |
+
abstract function tools_panel_settings();
|
1003 |
+
|
1004 |
+
/**
|
1005 |
+
* Must return __FILE__ from the extending class.
|
1006 |
+
* Used to determine plugin path for registering JS and CSS.
|
1007 |
+
*/
|
1008 |
+
abstract function getFILE();
|
1009 |
+
|
1010 |
+
/**
|
1011 |
+
* Send out an e-mail notification of an encoding job change.
|
1012 |
+
* To be used when a WebHook is fired from the Encoding service.
|
1013 |
+
*/
|
1014 |
+
abstract function email_notification();
|
1015 |
+
|
1016 |
+
}
|
models/xml-video-sitemap.php
CHANGED
@@ -235,7 +235,12 @@ class FV_Xml_Video_Sitemap {
|
|
235 |
}
|
236 |
|
237 |
if( $aCategories = get_the_category($objPost->ID) ) {
|
238 |
-
$
|
|
|
|
|
|
|
|
|
|
|
239 |
}
|
240 |
$xml_video['publication_date'] = get_the_date(DATE_W3C, $objPost->ID);
|
241 |
|
235 |
}
|
236 |
|
237 |
if( $aCategories = get_the_category($objPost->ID) ) {
|
238 |
+
$categories = implode(', ',wp_list_pluck($aCategories,'name'));
|
239 |
+
if( function_exists('mb_substr') ) {
|
240 |
+
$xml_video['category'] = mb_substr( $categories, 0, 250 );
|
241 |
+
} else {
|
242 |
+
$xml_video['category'] = substr( $categories, 0, 250 );
|
243 |
+
}
|
244 |
}
|
245 |
$xml_video['publication_date'] = get_the_date(DATE_W3C, $objPost->ID);
|
246 |
|
readme.txt
CHANGED
@@ -359,6 +359,28 @@ Thank you for being part of the HMTL 5 mobile video revolution!
|
|
359 |
|
360 |
== Changelog ==
|
361 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
362 |
= 7.5.10.727 - 2021/10/06 =
|
363 |
|
364 |
* Airplay - removing the button if the video type is not supported
|
359 |
|
360 |
== Changelog ==
|
361 |
|
362 |
+
= 7.5.12.727 - 2021/11/25 =
|
363 |
+
|
364 |
+
* Bugfix - Playlist tabs not pausing the old tab player properly
|
365 |
+
* Bugfix - Position Saving - do not use index.m3u8 as the video ID
|
366 |
+
* Bugfix - Video link issue for videos over 1 hour
|
367 |
+
* Compatibility - Bunny.net WordPress CDN Plugin
|
368 |
+
* Compatibility - WP Rocket Used CSS
|
369 |
+
* Lightbox - Fancybox updated - double tap on image zooms in
|
370 |
+
* Linode Object Storage support
|
371 |
+
* Video upload support for FV Player Coconut and FV Player Bunny Stream
|
372 |
+
|
373 |
+
= 7.5.11.727 - 2021/10/14 =
|
374 |
+
|
375 |
+
* Click to unmute - adding translations
|
376 |
+
* Click to unmute - only show on hover
|
377 |
+
* Click to unmute - only show once in playlist
|
378 |
+
* Live streams - fix buffer indicator bug for long streams
|
379 |
+
* Media Library - fix for picking of old FV Player Coconut jobs
|
380 |
+
* PHP warnings - fix multibyte functions used without check
|
381 |
+
* Store dismissed wp-admin popup notices also in cookies
|
382 |
+
* Support for FV Player Coconut video uploads - fixes
|
383 |
+
|
384 |
= 7.5.10.727 - 2021/10/06 =
|
385 |
|
386 |
* Airplay - removing the button if the video type is not supported
|
view/admin.php
CHANGED
@@ -686,35 +686,50 @@ function fv_flowplayer_admin_integrations() {
|
|
686 |
|
687 |
|
688 |
function fv_flowplayer_admin_mobile() {
|
689 |
-
|
690 |
-
?>
|
691 |
-
|
692 |
<?php $fv_fp->_get_checkbox(__('Use native fullscreen on mobile', 'fv-wordpress-flowplayer'), 'mobile_native_fullscreen', __('Stops popups, ads or subtitles from working, but provides faster interface. We set this for Android < 4.4 and iOS < 7 automatically.', 'fv-wordpress-flowplayer') ); ?>
|
693 |
<?php $fv_fp->_get_checkbox(__('Force fullscreen on mobile', 'fv-wordpress-flowplayer'), 'mobile_force_fullscreen', __('Video playback will start in fullscreen. iPhone with iOS < 10 always forces fullscreen for video playback.', 'fv-wordpress-flowplayer') ); ?>
|
694 |
<?php $fv_fp->_get_checkbox(__('Alternative iOS fullscreen mode', 'fv-wordpress-flowplayer'), 'mobile_alternative_fullscreen', __("Works for iOS < 12 which doesn't support HTML5 fullscreen. Only use if you see site elements such as header bar ovelaying the player in fullscreen on iOS.", 'fv-wordpress-flowplayer') ); ?>
|
695 |
<?php $fv_fp->_get_checkbox(__('Force landscape orientation in fullscreen', 'fv-wordpress-flowplayer'), 'mobile_landscape_fullscreen', __("Works on the Android mobile, not supported on iOS unfortunately.", 'fv-wordpress-flowplayer') ); ?>
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
702 |
<?php
|
703 |
}
|
704 |
|
705 |
|
706 |
function fv_flowplayer_admin_seo() {
|
707 |
-
|
708 |
-
?>
|
709 |
-
|
710 |
-
<?php $fv_fp->_get_checkbox(__('Use Schema.org markup', 'fv-wordpress-flowplayer'), array( 'integrations', 'schema_org' ), __(' Adds the video meta data information for search engines.', 'fv-wordpress-flowplayer') ); ?>
|
711 |
<?php do_action( 'fv_flowplayer_admin_seo_after'); ?>
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
<?php
|
719 |
}
|
720 |
|
@@ -1733,6 +1748,8 @@ add_meta_box( 'fv_flowplayer_default_options', __('Sitewide FV Player Defaults',
|
|
1733 |
add_meta_box( 'fv_flowplayer_integrations', __('Integrations/Compatibility', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_integrations', 'fv_flowplayer_settings', 'normal' );
|
1734 |
add_meta_box( 'fv_flowplayer_mobile', __('Mobile Settings', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_mobile', 'fv_flowplayer_settings', 'normal' );
|
1735 |
add_meta_box( 'fv_flowplayer_seo', __('Video SEO', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_seo', 'fv_flowplayer_settings', 'normal' );
|
|
|
|
|
1736 |
if( !class_exists('FV_Player_Pro') ) {
|
1737 |
add_meta_box( 'fv_player_pro', __('Pro Features', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_pro', 'fv_flowplayer_settings', 'normal', 'low' );
|
1738 |
}
|
686 |
|
687 |
|
688 |
function fv_flowplayer_admin_mobile() {
|
689 |
+
global $fv_fp;
|
690 |
+
?>
|
691 |
+
<table class="form-table2">
|
692 |
<?php $fv_fp->_get_checkbox(__('Use native fullscreen on mobile', 'fv-wordpress-flowplayer'), 'mobile_native_fullscreen', __('Stops popups, ads or subtitles from working, but provides faster interface. We set this for Android < 4.4 and iOS < 7 automatically.', 'fv-wordpress-flowplayer') ); ?>
|
693 |
<?php $fv_fp->_get_checkbox(__('Force fullscreen on mobile', 'fv-wordpress-flowplayer'), 'mobile_force_fullscreen', __('Video playback will start in fullscreen. iPhone with iOS < 10 always forces fullscreen for video playback.', 'fv-wordpress-flowplayer') ); ?>
|
694 |
<?php $fv_fp->_get_checkbox(__('Alternative iOS fullscreen mode', 'fv-wordpress-flowplayer'), 'mobile_alternative_fullscreen', __("Works for iOS < 12 which doesn't support HTML5 fullscreen. Only use if you see site elements such as header bar ovelaying the player in fullscreen on iOS.", 'fv-wordpress-flowplayer') ); ?>
|
695 |
<?php $fv_fp->_get_checkbox(__('Force landscape orientation in fullscreen', 'fv-wordpress-flowplayer'), 'mobile_landscape_fullscreen', __("Works on the Android mobile, not supported on iOS unfortunately.", 'fv-wordpress-flowplayer') ); ?>
|
696 |
+
<tr>
|
697 |
+
<td colspan="4">
|
698 |
+
<input type="submit" name="fv-wp-flowplayer-submit" class="button-primary" value="<?php _e('Save All Changes', 'fv-wordpress-flowplayer'); ?>" />
|
699 |
+
</td>
|
700 |
+
</tr>
|
701 |
+
</table>
|
702 |
+
<?php
|
703 |
+
}
|
704 |
+
|
705 |
+
|
706 |
+
function fv_flowplayer_admin_privacy() {
|
707 |
+
global $fv_fp;
|
708 |
+
?>
|
709 |
+
<table class="form-table2">
|
710 |
+
<?php $fv_fp->_get_checkbox(__('Disable local storage', 'fv-wordpress-flowplayer'), 'disable_localstorage', __('Remember video position will not work for non logged users. Video volume, mute status and subtitles selection will also not be stored.', 'fv-wordpress-flowplayer') ); ?>
|
711 |
+
<tr>
|
712 |
+
<td colspan="4">
|
713 |
+
<input type="submit" name="fv-wp-flowplayer-submit" class="button-primary" value="<?php _e('Save All Changes', 'fv-wordpress-flowplayer'); ?>" />
|
714 |
+
</td>
|
715 |
+
</tr>
|
716 |
+
</table>
|
717 |
<?php
|
718 |
}
|
719 |
|
720 |
|
721 |
function fv_flowplayer_admin_seo() {
|
722 |
+
global $fv_fp;
|
723 |
+
?>
|
724 |
+
<table class="form-table2">
|
725 |
+
<?php $fv_fp->_get_checkbox(__('Use Schema.org markup', 'fv-wordpress-flowplayer'), array( 'integrations', 'schema_org' ), __(' Adds the video meta data information for search engines.', 'fv-wordpress-flowplayer') ); ?>
|
726 |
<?php do_action( 'fv_flowplayer_admin_seo_after'); ?>
|
727 |
+
<tr>
|
728 |
+
<td colspan="4">
|
729 |
+
<input type="submit" name="fv-wp-flowplayer-submit" class="button-primary" value="<?php _e('Save All Changes', 'fv-wordpress-flowplayer'); ?>" />
|
730 |
+
</td>
|
731 |
+
</tr>
|
732 |
+
</table>
|
733 |
<?php
|
734 |
}
|
735 |
|
1748 |
add_meta_box( 'fv_flowplayer_integrations', __('Integrations/Compatibility', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_integrations', 'fv_flowplayer_settings', 'normal' );
|
1749 |
add_meta_box( 'fv_flowplayer_mobile', __('Mobile Settings', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_mobile', 'fv_flowplayer_settings', 'normal' );
|
1750 |
add_meta_box( 'fv_flowplayer_seo', __('Video SEO', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_seo', 'fv_flowplayer_settings', 'normal' );
|
1751 |
+
add_meta_box( 'fv_flowplayer_privacy', __('Privacy Settings', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_privacy', 'fv_flowplayer_settings', 'normal' );
|
1752 |
+
|
1753 |
if( !class_exists('FV_Player_Pro') ) {
|
1754 |
add_meta_box( 'fv_player_pro', __('Pro Features', 'fv-wordpress-flowplayer'), 'fv_flowplayer_admin_pro', 'fv_flowplayer_settings', 'normal', 'low' );
|
1755 |
}
|