diff options
Diffstat (limited to 'librevideojs')
-rw-r--r-- | librevideojs/libre-panel.php | 71 | ||||
-rw-r--r-- | librevideojs/librevideojs.php | 252 | ||||
-rw-r--r-- | librevideojs/processor.php | 21 |
3 files changed, 344 insertions, 0 deletions
diff --git a/librevideojs/libre-panel.php b/librevideojs/libre-panel.php new file mode 100644 index 0000000..329d22e --- /dev/null +++ b/librevideojs/libre-panel.php @@ -0,0 +1,71 @@ +<?php +class librevideojs_panel_shortcode{ + /** + * $shortcode_tag + * holds the name of the shortcode tag + * @var string + */ + public $shortcode_tag = 'librevideojs'; + + /** + * __construct + * class constructor will set the needed filter and action hooks + * + * @param array $args + */ + function __construct($args = array()){ + if (is_admin()){ + add_action('admin_head', array($this, 'admin_head')); + add_action('admin_enqueue_scripts', array($this , 'admin_enqueue_scripts')); + } + } + + /** + * admin_head + * calls your functions into the correct filters + * @return void + */ + function admin_head(){ + // check user permissions + if (!current_user_can('edit_posts') && !current_user_can('edit_pages')){ + return; + } + + // check if WYSIWYG is enabled + if ('true' == get_user_option('rich_editing')){ + add_filter('mce_external_plugins', array($this ,'mce_external_plugins')); + add_filter('mce_buttons', array($this, 'mce_buttons')); + } + } + + /** + * mce_external_plugins + * Adds our tinymce plugin + * @param array $plugin_array + * @return array + */ + function mce_external_plugins($plugin_array){ + $plugin_array[$this->shortcode_tag] = get_bloginfo('template_url') . '/js/mce-button.js'; + return $plugin_array; + } + + /** + * mce_buttons + * Adds our tinymce button + * @param array $buttons + * @return array + */ + function mce_buttons($buttons){ + array_push($buttons, $this->shortcode_tag); + return $buttons; + } + + /** + * admin_enqueue_scripts + * Used to enqueue custom styles + * @return void + */ + function admin_enqueue_scripts(){ + wp_enqueue_style('librevideojs_shortcode', get_bloginfo('template_url') . '/css/mce-button.css'); + } +} diff --git a/librevideojs/librevideojs.php b/librevideojs/librevideojs.php new file mode 100644 index 0000000..cbeb03c --- /dev/null +++ b/librevideojs/librevideojs.php @@ -0,0 +1,252 @@ +<?php + +/* Implementación de LibreVideoJS +==============================================================================================*/ +include_once 'libre-panel.php'; + +if (!class_exists('LIBREVIDEOJS')){ + + class LIBREVIDEOJS{ + + var $L_version = '2.0'; + + function __construct(){ + define('L_VERSION', $this->L_version); + $this->theme_includes(); + } + + function theme_includes(){ + if (!is_admin()) { + add_action('wp_enqueue_scripts', 'librevideojs_base'); + add_shortcode('librevideojs_video', 'LibreVideoJS_embed'); + //allows shortcode execution in the widget, excerpt and content + add_filter('widget_text', 'do_shortcode'); + add_filter('the_excerpt', 'do_shortcode', 11); + add_filter('the_content', 'do_shortcode', 11); + } + } + } + + $GLOBALS['easy_video_player'] = new LIBREVIDEOJS(); + new librevideojs_panel_shortcode(); +} + +function librevideojs_base(){ + global $post, $theme_url; + $theme_url = get_bloginfo('template_url', __FILE__); + if ( ( is_author() || is_page() || is_single() ) && strpos($post->post_content, '[librevideojs_video') !== false ){ + wp_enqueue_style('LibreVideoJS', $theme_url . '/css/librevideojs/teal.min.css', array(), '1.4'); + wp_enqueue_script('LibreVideoJS', $theme_url . '/js/cliplibrejs.developer.min.js', array(), L_VERSION); + wp_enqueue_script('jQuery-Libre', $theme_url . '/js/jquery-3.1.1.min.js', array(), '3.1.1', true); + } + else { + return false; + } +} + +function LibreVideoJS_embed($atts, $content=null){ + extract(shortcode_atts(array( + 'url' => '', + 'url_calidad' => '', + 'code' => '', + 'selector' => '', + 'width' => '', + 'controls' => '', + 'preload' => 'auto', + 'autoplay' => 'false', + 'loop' => '', + 'muted' => '', + 'poster' => '', + 'class' => '', + ), $atts)); + + if(empty($url)){ + return __('you need to specify the src of the video file', 'Lidra'); + } + + // support youtube without DRM + require 'processor.php'; + + //src + if(!empty($url) && strlen($id) === 11 ){ + $src = '<source src="'. $videoyt .'" type="'. $format .'" />'; + } else { + $src = '<source data-res="'.$url_calidad.'" src="'.$url.'" type="video/'.$code.'"/>'; + } + + //resolution selector + if(!empty($selector)){ + $resolution = "$selector"; + } + else { + $resolution = "$url_calidad"; + } + + //controls + if($controls == "false"){ + $controls = ""; + } + else{ + $controls = " controls"; + } + + //preload + if($preload == "metadata"){ + $preload = ' preload="metadata"'; + } + else if($preload == "none"){ + $preload = ' preload="none"'; + } + else{ + $preload = ' preload="auto"'; + } + + //autoplay + if($autoplay == "true"){ + $autoplay = " autoplay"; + } + else{ + $autoplay = ""; + } + + //loop + if($loop == "true"){ + $loop = " loop"; + } + else{ + $loop = ""; + } + + //muted + if($muted == "true"){ + $muted = " muted"; + } + else{ + $muted = ""; + } + + //Tracks + if(!is_null( $content )){ + $track = do_shortcode($content); + } + else{ + $track = ""; + } + + //Qualities + if(!is_null( $content = '' )){ + $calidades = do_shortcode($content); + } + else{ + $calidades = ""; + } + + //poster + if(!empty($poster)){ + $poster = " poster='$poster'"; + } + $player = "librevideojs" . uniqid(); + + //languages + $_no_html5 = __('Sorry, this video will not work because your web browser does not support HTML5 video. Please, change or update your browser', 'Lidra'); + + $_no_browser = '<p class="librevjs-no-js">' . $_no_html5 . '</p>'; + + //force_types + $_force_types = 'video/' . $code; + + if ($_force_types === "video/webm") { + $_force_types .= "'," . "'video/ogg"; + } + else { + $_force_types .= "'," . "'video/webm"; + } + + //custom style + $style = ''; + if(!empty($width)){ + $style = <<<EOT + <style> + $player { + max-width:{$width}px; + } + </style> +EOT; + + } + $output = <<<EOT + <div class="LibreVideoJS"> + <video id="$player" {$controls}{$preload}{$autoplay}{$loop}{$muted}{$poster} data-setup='{}'> + {$src}\n\t\t{$calidades}{$track}{$_no_browser} + </video> + </div> + <script> + var librestyle = document.getElementById("$player"); + librestyle.className += " cliplibre-js-responsive-container librevjs-hd cliplibre-js librevjs-libre-mix-skin"; + cliplibrejs('$player',{plugins:{resolutionSelector:{force_types:['$_force_types'],default_res:"$resolution",}},nativeControlsForTouch:false}).ready(function(){this.hotkeys({volumeStep:0.1,seekStep:5,enableMute:true,enableFullscreen: true,enableNumbers:true}),this.progressTips();}); + </script> + $style +EOT; + return $output; +} + +/*Adding subtitles using... [track]*/ +function track_shortcode($atts, $content=null){ + extract(shortcode_atts(array( + 'kind' => '', + 'subt' => '', + 'srclang' => '', + 'label' => '', + 'default' => '', + ), $atts)); + + if($kind){ + $kind = " kind='$kind'"; + } + + if($subt){ + $subt = " src='$subt'"; + } + + if($srclang){ + $srclang = " srclang='$srclang'"; + } + + if($label){ + $label = " label='$label'"; + } + + if($default == "true" || $default == "default"){ + $default = " default"; + } + else{ + $default = ""; + } + + $track = "<track" . $kind . $subt . $srclang . $label . $default . "/>\n\t\t"; + + return $track; +} +add_shortcode('track', 'track_shortcode'); + +/*Adding qualities*/ +function calidades_shortcode($atts, $content=null){ + extract(shortcode_atts(array( + 'lvjs_calidad' => '', + 'src_video' => '', + 'lvjs_code' => '', + ), $atts)); + + if($lvjs_calidad){ + $lvjs_calidad = " data-res='$lvjs_calidad'"; + } + + if($src_video){ + $src_video = " src='$src_video'"; + } + + $calidades = "<source" . $lvjs_calidad . $src_video . " type='video/".$lvjs_code."'/>\n\t\t"; + + return $calidades; +} +add_shortcode('calidades', 'calidades_shortcode'); diff --git a/librevideojs/processor.php b/librevideojs/processor.php new file mode 100644 index 0000000..555a081 --- /dev/null +++ b/librevideojs/processor.php @@ -0,0 +1,21 @@ +<?php + +$yturllarge = "www.youtube.com"; +$yturlshort = 'youtu.be/'; + +if (strpos($url, $yturlshort) !== false || strpos($url, $yturllarge) !== false ){ + $link = $url; + $id = substr($link, -11); //Extract the youtube video ID + $format = "video/webm"; //the MIME type of the video. e.g. video/webm, etc. + parse_str(file_get_contents("https://youtube.com/get_video_info?video_id=".$id),$info); //decode the data + $streams = $info['url_encoded_fmt_stream_map']; + + $streams = explode(',',$streams); + + foreach($streams as $stream){ + parse_str($stream,$data); //decode the stream + if(stripos($data['type'],$format) !== false){ //We've found the right stream with the correct format + $videoyt = $data['url']; //the video + } + } +} |