From 7f56684e6d4cd4a9498cbcc1f5371066e94654af Mon Sep 17 00:00:00 2001 From: Evandro Junior Date: Mon, 23 Mar 2015 16:27:45 -0300 Subject: [PATCH] removed video.js and other improvements --- plugins/video/lib/video_plugin/video.rb | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------- plugins/video/lib/video_plugin/video_block.rb | 17 ++++++----------- plugins/video/public/css/video-js-4.5.1.css | 5 ----- plugins/video/public/css/video-js-4.8.5.css | 5 ----- plugins/video/public/f/2/vjs.eot | Bin 3536 -> 0 bytes plugins/video/public/f/2/vjs.svg | 28 ---------------------------- plugins/video/public/f/2/vjs.ttf | Bin 4640 -> 0 bytes plugins/video/public/f/2/vjs.woff | Bin 4228 -> 0 bytes plugins/video/public/style.css | 6 ++++++ plugins/video/test/unit/video_test.rb | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ plugins/video/views/box_organizer/_html5_video_block.html.erb | 2 +- plugins/video/views/box_organizer/_iframe_video_block.html.erb | 2 +- plugins/video/views/content_viewer/video_plugin/_video.html.erb | 32 ++++++-------------------------- 13 files changed, 175 insertions(+), 130 deletions(-) delete mode 100644 plugins/video/public/css/video-js-4.5.1.css delete mode 100644 plugins/video/public/css/video-js-4.8.5.css delete mode 100644 plugins/video/public/f/2/vjs.eot delete mode 100644 plugins/video/public/f/2/vjs.svg delete mode 100644 plugins/video/public/f/2/vjs.ttf delete mode 100644 plugins/video/public/f/2/vjs.woff create mode 100644 plugins/video/test/unit/video_test.rb diff --git a/plugins/video/lib/video_plugin/video.rb b/plugins/video/lib/video_plugin/video.rb index ba51d36..379d864 100644 --- a/plugins/video/lib/video_plugin/video.rb +++ b/plugins/video/lib/video_plugin/video.rb @@ -7,7 +7,7 @@ class VideoPlugin::Video < Article settings_items :video_url, :type => :string, :default => 'http://' settings_items :video_width, :type => :integer, :default => 499 settings_items :video_height, :type => :integer, :default => 353 - #youtube, vimeo, file + #Video Providers are: youtube, vimeo, file settings_items :video_provider, :type => :string settings_items :video_format, :type => :string settings_items :video_id, :type => :string @@ -18,7 +18,7 @@ class VideoPlugin::Video < Article attr_accessible :video_url - before_save :detect_video + before_save :fill_video_properties def self.type_name _('Video') @@ -35,6 +35,14 @@ class VideoPlugin::Video < Article def self.description _('Display embedded videos.') end + + def is_youtube? + VideoPlugin::Video.is_youtube?(self.video_url) + end + + def is_vimeo? + VideoPlugin::Video.is_vimeo?(self.video_url) + end include ActionView::Helpers::TagHelper def to_html(options={}) @@ -64,49 +72,97 @@ class VideoPlugin::Video < Article '

To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video

' end + def self.is_youtube?(video_url) + video_url.match(/.*(youtube.com.*v=[#{YOUTUBE_ID_FORMAT}]+|youtu.be\/[#{YOUTUBE_ID_FORMAT}]+).*/) ? true : false + end + + def self.is_vimeo?(video_url) + video_url.match(/^(http[s]?:\/\/)?(www.)?(vimeo.com|player.vimeo.com\/video)\/([A-z]|\/)*[[:digit:]]+/) ? true : false + end + + def self.is_video_file?(video_url) + video_url.match(/\.(mp4|ogg|ogv|webm)/) ? true : false + end + + def self.format_embed_video_url_for_youtube(video_url) + "//www.youtube-nocookie.com/embed/#{extract_youtube_id(video_url)}?rel=0&wmode=transparent" if is_youtube?(video_url) + end + + def self.format_embed_video_url_for_vimeo(video_url) + "//player.vimeo.com/video/#{extract_vimeo_id(video_url)}" if is_vimeo?(video_url) + end + + def format_embed_video_url_for_youtube + VideoPlugin::Video.format_embed_video_url_for_youtube(self.video_url) + end + + def format_embed_video_url_for_vimeo + VideoPlugin::Video.format_embed_video_url_for_vimeo(self.video_url) + end + + def self.extract_youtube_id(video_url) + return nil unless self.is_youtube?(video_url) + youtube_match = video_url.match("v=([#{YOUTUBE_ID_FORMAT}]*)") + youtube_match ||= video_url.match("youtu.be\/([#{YOUTUBE_ID_FORMAT}]*)") + youtube_match[1] unless youtube_match.nil? + end + + def self.extract_vimeo_id(video_url) + return nil unless self.is_vimeo?(video_url) + vimeo_match = video_url.match('([[:digit:]]*)$') + vimeo_match[1] unless vimeo_match.nil? + end + private YOUTUBE_ID_FORMAT = '\w-' - def detect_video + def fill_video_properties if is_youtube? - self.video_provider = 'youtube' - self.video_id = extract_youtube_id - url = "http://www.youtube.com/oembed?url=http%3A//www.youtube.com/watch?v%3D#{self.video_id}&format=json" - resp = Net::HTTP.get_response(URI.parse(url)) - buffer = resp.body - vid = JSON.parse(buffer) - self.video_thumbnail_url = vid['thumbnail_url'] - self.video_width = vid['width'] - self.video_height = vid['height'] - self.video_thumbnail_width = vid['thumbnail_width'] - self.video_thumbnail_height = vid['thumbnail_height'] - url = "http://gdata.youtube.com/feeds/api/videos/#{self.video_id}?alt=json"; - resp = Net::HTTP.get_response(URI.parse(url)) - buffer = resp.body - vid = JSON.parse(buffer) - self.video_duration = vid['entry']['media$group']['media$content'][0]['duration'] + fill_youtube_video_properties elsif is_vimeo? - self.video_provider = 'vimeo' - self.video_id = extract_vimeo_id - url = "http://vimeo.com/api/v2/video/#{self.video_id}.json" - resp = Net::HTTP.get_response(URI.parse(url)) - buffer = resp.body - vid = JSON.parse(buffer) - vid = vid[0] - #raise vid.to_yaml - self.video_thumbnail_url = vid['thumbnail_large'] - self.video_width = vid['width'] - self.video_height = vid['height'] - self.video_thumbnail_width = 640 - self.video_thumbnail_height = 360 + fill_vimeo_video_properties elsif true - self.video_format = detect_format + self.video_format = detect_file_format self.video_provider = 'file' end end - def detect_format + def fill_youtube_video_properties + self.video_provider = 'youtube' + self.video_id = extract_youtube_id + url = "http://www.youtube.com/oembed?url=http%3A//www.youtube.com/watch?v%3D#{self.video_id}&format=json" + resp = Net::HTTP.get_response(URI.parse(url)) + buffer = resp.body + vid = JSON.parse(buffer) + self.video_thumbnail_url = vid['thumbnail_url'] + self.video_width = vid['width'] + self.video_height = vid['height'] + self.video_thumbnail_width = vid['thumbnail_width'] + self.video_thumbnail_height = vid['thumbnail_height'] + url = "http://gdata.youtube.com/feeds/api/videos/#{self.video_id}?alt=json"; + resp = Net::HTTP.get_response(URI.parse(url)) + buffer = resp.body + vid = JSON.parse(buffer) + self.video_duration = vid['entry']['media$group']['media$content'][0]['duration'] + end + + def fill_vimeo_video_properties + self.video_provider = 'vimeo' + self.video_id = extract_vimeo_id + url = "http://vimeo.com/api/v2/video/#{self.video_id}.json" + resp = Net::HTTP.get_response(URI.parse(url)) + buffer = resp.body + vid = JSON.parse(buffer) + vid = vid[0] + self.video_thumbnail_url = vid['thumbnail_large'] + self.video_width = vid['width'] + self.video_height = vid['height'] + self.video_thumbnail_width = 640 + self.video_thumbnail_height = 360 + end + + def detect_file_format video_type = 'video/unknown' if /.mp4/i =~ self.video_url or /.mov/i =~ self.video_url video_type='video/mp4' @@ -118,28 +174,12 @@ class VideoPlugin::Video < Article video_type end - def is_youtube? - video_url.match(/.*(youtube.com.*v=[#{YOUTUBE_ID_FORMAT}]+|youtu.be\/[#{YOUTUBE_ID_FORMAT}]+).*/) ? true : false - end - - def is_vimeo? - video_url.match(/^(http[s]?:\/\/)?(www.)?(vimeo.com|player.vimeo.com\/video)\/([A-z]|\/)*[[:digit:]]+/) ? true : false - end - - def is_video_file? - video_url.match(/\.(mp4|ogg|ogv|webm)/) ? true : false - end - def extract_youtube_id - return nil unless is_youtube? - youtube_match = video_url.match("v=([#{YOUTUBE_ID_FORMAT}]*)") - youtube_match ||= video_url.match("youtu.be\/([#{YOUTUBE_ID_FORMAT}]*)") - youtube_match[1] unless youtube_match.nil? + VideoPlugin::Video.extract_youtube_id(self.video_url) end def extract_vimeo_id - return nil unless is_vimeo? - vimeo_match = video_url.match('([[:digit:]]*)$') - vimeo_match[1] unless vimeo_match.nil? + VideoPlugin::Video.extract_vimeo_id(self.video_url) end + end diff --git a/plugins/video/lib/video_plugin/video_block.rb b/plugins/video/lib/video_plugin/video_block.rb index 8532bff..fac16d7 100644 --- a/plugins/video/lib/video_plugin/video_block.rb +++ b/plugins/video/lib/video_plugin/video_block.rb @@ -9,11 +9,11 @@ class VideoPlugin::VideoBlock < Block YOUTUBE_ID_FORMAT = '\w-' def is_youtube? - url.match(/.*(youtube.com.*v=[#{YOUTUBE_ID_FORMAT}]+|youtu.be\/[#{YOUTUBE_ID_FORMAT}]+).*/) ? true : false + VideoPlugin::Video.is_youtube?(url) end def is_vimeo? - url.match(/^(http[s]?:\/\/)?(www.)?(vimeo.com|player.vimeo.com\/video)\/[[:digit:]]+/) ? true : false + VideoPlugin::Video.is_vimeo?(url) end def is_video_file? @@ -21,11 +21,11 @@ class VideoPlugin::VideoBlock < Block end def format_embed_video_url_for_youtube - "//www.youtube-nocookie.com/embed/#{extract_youtube_id}?rel=0&wmode=transparent" if is_youtube? + VideoPlugin::Video.format_embed_video_url_for_youtube(url) end def format_embed_video_url_for_vimeo - "//player.vimeo.com/video/#{extract_vimeo_id}" if is_vimeo? + VideoPlugin::Video.format_embed_video_url_for_vimeo(url) end def self.description @@ -47,16 +47,11 @@ class VideoPlugin::VideoBlock < Block private def extract_youtube_id - return nil unless is_youtube? - youtube_match = url.match("v=([#{YOUTUBE_ID_FORMAT}]*)") - youtube_match ||= url.match("youtu.be\/([#{YOUTUBE_ID_FORMAT}]*)") - youtube_match[1] unless youtube_match.nil? + VideoPlugin::Video.extract_youtube_id(url) end def extract_vimeo_id - return nil unless is_vimeo? - vimeo_match = url.match('([[:digit:]]*)$') - vimeo_match[1] unless vimeo_match.nil? + VideoPlugin::Video.extract_vimeo_id(url) end end diff --git a/plugins/video/public/css/video-js-4.5.1.css b/plugins/video/public/css/video-js-4.5.1.css deleted file mode 100644 index 5b85c28..0000000 --- a/plugins/video/public/css/video-js-4.5.1.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! -Video.js Default Styles (http://videojs.com) -Version 4.5.1 -Create your own skin at http://designer.videojs.com -*/.vjs-default-skin{color:#ccc}@font-face{font-family:VideoJS;src:url(../f/2/vjs.eot);src:url(../f/2/vjs.eot?#iefix) format('embedded-opentype'),url(../f/2/vjs.woff) format('woff'),url(../f/2/vjs.ttf) format('truetype');font-weight:400;font-style:normal}.vjs-default-skin .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;background-color:#333;background-color:rgba(51,51,51,.9)}.vjs-default-skin .vjs-slider:focus{-webkit-box-shadow:0 0 2em #fff;-moz-box-shadow:0 0 2em #fff;box-shadow:0 0 2em #fff}.vjs-default-skin .vjs-slider-handle{position:absolute;left:0;top:0}.vjs-default-skin .vjs-slider-handle:before{content:"\e009";font-family:VideoJS;font-size:1em;line-height:1;text-align:center;text-shadow:0 0 1em #fff;position:absolute;top:0;left:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.vjs-default-skin .vjs-control-bar{display:none;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#07141e;background-color:rgba(7,20,30,.7)}.vjs-default-skin.vjs-has-started .vjs-control-bar{display:block;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{display:block;visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-default-skin.vjs-controls-disabled .vjs-control-bar{display:none}.vjs-default-skin.vjs-using-native-controls .vjs-control-bar{display:none}@media \0screen{.vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:""}}.vjs-default-skin .vjs-control{outline:0;position:relative;float:left;text-align:center;margin:0;padding:0;height:3em;width:4em}.vjs-default-skin .vjs-control:before{font-family:VideoJS;font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.5)}.vjs-default-skin .vjs-control:focus:before,.vjs-default-skin .vjs-control:hover:before{text-shadow:0 0 1em #fff}.vjs-default-skin .vjs-control:focus{}.vjs-default-skin .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-default-skin .vjs-play-control{width:5em;cursor:pointer}.vjs-default-skin .vjs-play-control:before{content:"\e001"}.vjs-default-skin.vjs-playing .vjs-play-control:before{content:"\e002"}.vjs-default-skin .vjs-mute-control,.vjs-default-skin .vjs-volume-menu-button{cursor:pointer;float:right}.vjs-default-skin .vjs-mute-control:before,.vjs-default-skin .vjs-volume-menu-button:before{content:"\e006"}.vjs-default-skin .vjs-mute-control.vjs-vol-0:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before{content:"\e003"}.vjs-default-skin .vjs-mute-control.vjs-vol-1:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before{content:"\e004"}.vjs-default-skin .vjs-mute-control.vjs-vol-2:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before{content:"\e005"}.vjs-default-skin .vjs-volume-control{width:5em;float:right}.vjs-default-skin .vjs-volume-bar{width:5em;height:.6em;margin:1.1em auto 0}.vjs-default-skin .vjs-volume-menu-button .vjs-menu-content{height:2.9em}.vjs-default-skin .vjs-volume-level{position:absolute;top:0;left:0;height:.5em;background:#66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-volume-bar .vjs-volume-handle{width:.5em;height:.5em}.vjs-default-skin .vjs-volume-handle:before{font-size:.9em;top:-.2em;left:-.2em;width:1em;height:1em}.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content{width:6em;left:-4em}.vjs-default-skin .vjs-progress-control{position:absolute;left:0;right:0;width:auto;font-size:.3em;height:1em;top:-1em;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-default-skin:hover .vjs-progress-control{font-size:.9em;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s}.vjs-default-skin .vjs-progress-holder{height:100%}.vjs-default-skin .vjs-progress-holder .vjs-play-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress{position:absolute;display:block;height:100%;margin:0;padding:0;left:0;top:0}.vjs-default-skin .vjs-play-progress{background:#66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-load-progress{background:#646464;background:rgba(255,255,255,.4)}.vjs-default-skin .vjs-seek-handle{width:1.5em;height:100%}.vjs-default-skin .vjs-seek-handle:before{padding-top:.1em}.vjs-default-skin .vjs-time-controls{font-size:1em;line-height:3em}.vjs-default-skin .vjs-current-time{float:left}.vjs-default-skin .vjs-duration{float:left}.vjs-default-skin .vjs-remaining-time{display:none;float:left}.vjs-time-divider{float:left;line-height:3em}.vjs-default-skin .vjs-fullscreen-control{width:3.8em;cursor:pointer;float:right}.vjs-default-skin .vjs-fullscreen-control:before{content:"\e000"}.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before{content:"\e00b"}.vjs-default-skin .vjs-big-play-button{left:.5em;top:.5em;font-size:3em;display:block;z-index:2;position:absolute;width:4em;height:2.6em;text-align:center;vertical-align:middle;cursor:pointer;opacity:1;background-color:#07141e;background-color:rgba(7,20,30,.7);border:.1em solid #3b4249;-webkit-border-radius:.8em;-moz-border-radius:.8em;border-radius:.8em;-webkit-box-shadow:0 0 1em rgba(255,255,255,.25);-moz-box-shadow:0 0 1em rgba(255,255,255,.25);box-shadow:0 0 1em rgba(255,255,255,.25);-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button{left:50%;margin-left:-2.1em;top:50%;margin-top:-1.4000000000000001em}.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button{display:none}.vjs-default-skin.vjs-has-started .vjs-big-play-button{display:none}.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-default-skin:hover .vjs-big-play-button,.vjs-default-skin .vjs-big-play-button:focus{outline:0;border-color:#fff;background-color:#505050;background-color:rgba(50,50,50,.75);-webkit-box-shadow:0 0 3em #fff;-moz-box-shadow:0 0 3em #fff;box-shadow:0 0 3em #fff;-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-default-skin .vjs-big-play-button:before{content:"\e001";font-family:VideoJS;line-height:2.6em;text-shadow:.05em .05em .1em #000;text-align:center;position:absolute;left:0;width:100%;height:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;font-size:4em;line-height:1;width:1em;height:1em;margin-left:-.5em;margin-top:-.5em;opacity:.75;-webkit-animation:spin 1.5s infinite linear;-moz-animation:spin 1.5s infinite linear;-o-animation:spin 1.5s infinite linear;animation:spin 1.5s infinite linear}.vjs-default-skin .vjs-loading-spinner:before{content:"\e01e";font-family:VideoJS;position:absolute;top:0;left:0;width:1em;height:1em;text-align:center;text-shadow:0 0 .1em #000}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.vjs-default-skin .vjs-menu-button{float:right;cursor:pointer}.vjs-default-skin .vjs-menu{display:none;position:absolute;bottom:0;left:0;width:0;height:0;margin-bottom:3em;border-left:2em solid transparent;border-right:2em solid transparent;border-top:1.55em solid #000;border-top-color:rgba(7,40,50,.5)}.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;position:absolute;width:10em;bottom:1.5em;max-height:15em;overflow:auto;left:-5em;background-color:#07141e;background-color:rgba(7,20,30,.7);-webkit-box-shadow:-.2em -.2em .3em rgba(255,255,255,.2);-moz-box-shadow:-.2em -.2em .3em rgba(255,255,255,.2);box-shadow:-.2em -.2em .3em rgba(255,255,255,.2)}.vjs-default-skin .vjs-menu-button:hover .vjs-menu{display:block}.vjs-default-skin .vjs-menu-button ul li{list-style:none;margin:0;padding:.3em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-default-skin .vjs-menu-button ul li.vjs-selected{background-color:#000}.vjs-default-skin .vjs-menu-button ul li:focus,.vjs-default-skin .vjs-menu-button ul li:hover,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover{outline:0;color:#111;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-default-skin .vjs-subtitles-button:before{content:"\e00c"}.vjs-default-skin .vjs-captions-button:before{content:"\e008"}.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before,.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before{-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js{background-color:#000;position:relative;padding:0;font-size:10px;vertical-align:middle;font-weight:400;font-style:normal;font-family:Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js:-moz-full-screen{position:absolute}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0;width:100%!important;height:100%!important;_position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-poster{background-repeat:no-repeat;background-position:50% 50%;background-size:contain;cursor:pointer;height:100%;margin:0;padding:0;position:relative;width:100%}.vjs-poster img{display:block;margin:0 auto;max-height:100%;padding:0;width:100%}.video-js.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-text-track-display{text-align:center;position:absolute;bottom:4em;left:1em;right:1em}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{display:none;font-size:1.4em;text-align:center;margin-bottom:.1em;background-color:#000;background-color:rgba(0,0,0,.5)}.video-js .vjs-subtitles{color:#fff}.video-js .vjs-captions{color:#fc6}.vjs-tt-cue{display:block}.vjs-default-skin .vjs-hidden{display:none}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible} \ No newline at end of file diff --git a/plugins/video/public/css/video-js-4.8.5.css b/plugins/video/public/css/video-js-4.8.5.css deleted file mode 100644 index c0d78a1..0000000 --- a/plugins/video/public/css/video-js-4.8.5.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! -Video.js Default Styles (http://videojs.com) -Version 4.8.5 -Create your own skin at http://designer.videojs.com -*/.vjs-default-skin{color:#ccc}@font-face{font-family:VideoJS;src:url(../f/3/vjs.eot);src:url(../f/3/vjs.eot?#iefix) format('embedded-opentype'),url(../f/3/vjs.woff) format('woff'),url(../f/3/vjs.ttf) format('truetype'),url(../f/3/vjs.svg#icomoon) format('svg');font-weight:400;font-style:normal}.vjs-default-skin .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;background-color:#333;background-color:rgba(51,51,51,.9)}.vjs-default-skin .vjs-slider:focus{-webkit-box-shadow:0 0 2em #fff;-moz-box-shadow:0 0 2em #fff;box-shadow:0 0 2em #fff}.vjs-default-skin .vjs-slider-handle{position:absolute;left:0;top:0}.vjs-default-skin .vjs-slider-handle:before{content:"\e009";font-family:VideoJS;font-size:1em;line-height:1;text-align:center;text-shadow:0 0 1em #fff;position:absolute;top:0;left:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.vjs-default-skin .vjs-control-bar{display:none;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#07141e;background-color:rgba(7,20,30,.7)}.vjs-default-skin.vjs-has-started .vjs-control-bar{display:block;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{display:block;visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-default-skin.vjs-controls-disabled .vjs-control-bar{display:none}.vjs-default-skin.vjs-using-native-controls .vjs-control-bar{display:none}.vjs-default-skin.vjs-error .vjs-control-bar{display:none}@media \0screen{.vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:""}}.vjs-default-skin .vjs-control{outline:0;position:relative;float:left;text-align:center;margin:0;padding:0;height:3em;width:4em}.vjs-default-skin .vjs-control:before{font-family:VideoJS;font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.5)}.vjs-default-skin .vjs-control:focus:before,.vjs-default-skin .vjs-control:hover:before{text-shadow:0 0 1em #fff}.vjs-default-skin .vjs-control:focus{}.vjs-default-skin .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-default-skin .vjs-play-control{width:5em;cursor:pointer}.vjs-default-skin .vjs-play-control:before{content:"\e001"}.vjs-default-skin.vjs-playing .vjs-play-control:before{content:"\e002"}.vjs-default-skin .vjs-playback-rate .vjs-playback-rate-value{font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.5)}.vjs-default-skin .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content{width:4em;left:-2em;list-style:none}.vjs-default-skin .vjs-mute-control,.vjs-default-skin .vjs-volume-menu-button{cursor:pointer;float:right}.vjs-default-skin .vjs-mute-control:before,.vjs-default-skin .vjs-volume-menu-button:before{content:"\e006"}.vjs-default-skin .vjs-mute-control.vjs-vol-0:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before{content:"\e003"}.vjs-default-skin .vjs-mute-control.vjs-vol-1:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before{content:"\e004"}.vjs-default-skin .vjs-mute-control.vjs-vol-2:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before{content:"\e005"}.vjs-default-skin .vjs-volume-control{width:5em;float:right}.vjs-default-skin .vjs-volume-bar{width:5em;height:.6em;margin:1.1em auto 0}.vjs-default-skin .vjs-volume-menu-button .vjs-menu-content{height:2.9em}.vjs-default-skin .vjs-volume-level{position:absolute;top:0;left:0;height:.5em;width:100%;background:#66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-volume-bar .vjs-volume-handle{width:.5em;height:.5em;left:4.5em}.vjs-default-skin .vjs-volume-handle:before{font-size:.9em;top:-.2em;left:-.2em;width:1em;height:1em}.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content{width:6em;left:-4em}.vjs-default-skin .vjs-progress-control{position:absolute;left:0;right:0;width:auto;font-size:.3em;height:1em;top:-1em;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-default-skin:hover .vjs-progress-control{font-size:.9em;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s}.vjs-default-skin .vjs-progress-holder{height:100%}.vjs-default-skin .vjs-progress-holder .vjs-play-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:100%;margin:0;padding:0;width:0;left:0;top:0}.vjs-default-skin .vjs-play-progress{background:#66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-load-progress{background:#646464;background:rgba(255,255,255,.2)}.vjs-default-skin .vjs-load-progress div{background:#787878;background:rgba(255,255,255,.1)}.vjs-default-skin .vjs-seek-handle{width:1.5em;height:100%}.vjs-default-skin .vjs-seek-handle:before{padding-top:.1em}.vjs-default-skin.vjs-live .vjs-time-controls,.vjs-default-skin.vjs-live .vjs-time-divider,.vjs-default-skin.vjs-live .vjs-progress-control{display:none}.vjs-default-skin.vjs-live .vjs-live-display{display:block}.vjs-default-skin .vjs-live-display{display:none;font-size:1em;line-height:3em}.vjs-default-skin .vjs-time-controls{font-size:1em;line-height:3em}.vjs-default-skin .vjs-current-time{float:left}.vjs-default-skin .vjs-duration{float:left}.vjs-default-skin .vjs-remaining-time{display:none;float:left}.vjs-time-divider{float:left;line-height:3em}.vjs-default-skin .vjs-fullscreen-control{width:3.8em;cursor:pointer;float:right}.vjs-default-skin .vjs-fullscreen-control:before{content:"\e000"}.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before{content:"\e00b"}.vjs-default-skin .vjs-big-play-button{left:.5em;top:.5em;font-size:3em;display:block;z-index:2;position:absolute;width:4em;height:2.6em;text-align:center;vertical-align:middle;cursor:pointer;opacity:1;background-color:#07141e;background-color:rgba(7,20,30,.7);border:.1em solid #3b4249;-webkit-border-radius:.8em;-moz-border-radius:.8em;border-radius:.8em;-webkit-box-shadow:0 0 1em rgba(255,255,255,.25);-moz-box-shadow:0 0 1em rgba(255,255,255,.25);box-shadow:0 0 1em rgba(255,255,255,.25);-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button{left:50%;margin-left:-2.1em;top:50%;margin-top:-1.4000000000000001em}.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button{display:none}.vjs-default-skin.vjs-has-started .vjs-big-play-button{display:none}.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-default-skin:hover .vjs-big-play-button,.vjs-default-skin .vjs-big-play-button:focus{outline:0;border-color:#fff;background-color:#505050;background-color:rgba(50,50,50,.75);-webkit-box-shadow:0 0 3em #fff;-moz-box-shadow:0 0 3em #fff;box-shadow:0 0 3em #fff;-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-default-skin .vjs-big-play-button:before{content:"\e001";font-family:VideoJS;line-height:2.6em;text-shadow:.05em .05em .1em #000;text-align:center;position:absolute;left:0;width:100%;height:100%}.vjs-error .vjs-big-play-button{display:none}.vjs-error-display{display:none}.vjs-error .vjs-error-display{display:block;position:absolute;left:0;top:0;width:100%;height:100%}.vjs-error .vjs-error-display:before{content:'X';font-family:Arial;font-size:4em;color:#666;line-height:1;text-shadow:.05em .05em .1em #000;text-align:center;vertical-align:middle;position:absolute;left:0;top:50%;margin-top:-.5em;width:100%}.vjs-error-display div{position:absolute;bottom:1em;right:0;left:0;font-size:1.4em;text-align:center;padding:3px;background:#000;background:rgba(0,0,0,.5)}.vjs-error-display a,.vjs-error-display a:visited{color:#F4A460}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;font-size:4em;line-height:1;width:1em;height:1em;margin-left:-.5em;margin-top:-.5em;opacity:.75}.vjs-waiting .vjs-loading-spinner,.vjs-seeking .vjs-loading-spinner{display:block;-webkit-animation:spin 1.5s infinite linear;-moz-animation:spin 1.5s infinite linear;-o-animation:spin 1.5s infinite linear;animation:spin 1.5s infinite linear}.vjs-error .vjs-loading-spinner{display:none;-webkit-animation:none;-moz-animation:none;-o-animation:none;animation:none}.vjs-default-skin .vjs-loading-spinner:before{content:"\e01e";font-family:VideoJS;position:absolute;top:0;left:0;width:1em;height:1em;text-align:center;text-shadow:0 0 .1em #000}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.vjs-default-skin .vjs-menu-button{float:right;cursor:pointer}.vjs-default-skin .vjs-menu{display:none;position:absolute;bottom:0;left:0;width:0;height:0;margin-bottom:3em;border-left:2em solid transparent;border-right:2em solid transparent;border-top:1.55em solid #000;border-top-color:rgba(7,40,50,.5)}.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;position:absolute;width:10em;bottom:1.5em;max-height:15em;overflow:auto;left:-5em;background-color:#07141e;background-color:rgba(7,20,30,.7);-webkit-box-shadow:-.2em -.2em .3em rgba(255,255,255,.2);-moz-box-shadow:-.2em -.2em .3em rgba(255,255,255,.2);box-shadow:-.2em -.2em .3em rgba(255,255,255,.2)}.vjs-default-skin .vjs-menu-button:hover .vjs-menu{display:block}.vjs-default-skin .vjs-menu-button ul li{list-style:none;margin:0;padding:.3em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-default-skin .vjs-menu-button ul li.vjs-selected{background-color:#000}.vjs-default-skin .vjs-menu-button ul li:focus,.vjs-default-skin .vjs-menu-button ul li:hover,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover{outline:0;color:#111;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-default-skin .vjs-subtitles-button:before{content:"\e00c"}.vjs-default-skin .vjs-captions-button:before{content:"\e008"}.vjs-default-skin .vjs-chapters-button:before{content:"\e00c"}.vjs-default-skin .vjs-chapters-button.vjs-menu-button .vjs-menu .vjs-menu-content{width:24em;left:-12em}.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before,.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before{-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js{background-color:#000;position:relative;padding:0;font-size:10px;vertical-align:middle;font-weight:400;font-style:normal;font-family:Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js:-moz-full-screen{position:absolute}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0;width:100%!important;height:100%!important;_position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-poster{background-repeat:no-repeat;background-position:50% 50%;background-size:contain;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0}.vjs-poster img{display:block;margin:0 auto;max-height:100%;padding:0;width:100%}.video-js.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-text-track-display{text-align:center;position:absolute;bottom:4em;left:1em;right:1em}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{display:none;font-size:1.4em;text-align:center;margin-bottom:.1em;background-color:#000;background-color:rgba(0,0,0,.5)}.video-js .vjs-subtitles{color:#fff}.video-js .vjs-captions{color:#fc6}.vjs-tt-cue{display:block}.vjs-default-skin .vjs-hidden{display:none}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:20px;color:#ccc;background-color:#333;font-size:18px;font-family:Arial,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#F4A460} \ No newline at end of file diff --git a/plugins/video/public/f/2/vjs.eot b/plugins/video/public/f/2/vjs.eot deleted file mode 100644 index a075c19..0000000 Binary files a/plugins/video/public/f/2/vjs.eot and /dev/null differ diff --git a/plugins/video/public/f/2/vjs.svg b/plugins/video/public/f/2/vjs.svg deleted file mode 100644 index fa6aa7b..0000000 --- a/plugins/video/public/f/2/vjs.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/plugins/video/public/f/2/vjs.ttf b/plugins/video/public/f/2/vjs.ttf deleted file mode 100644 index 682a9b2..0000000 Binary files a/plugins/video/public/f/2/vjs.ttf and /dev/null differ diff --git a/plugins/video/public/f/2/vjs.woff b/plugins/video/public/f/2/vjs.woff deleted file mode 100644 index c3f0f1d..0000000 Binary files a/plugins/video/public/f/2/vjs.woff and /dev/null differ diff --git a/plugins/video/public/style.css b/plugins/video/public/style.css index ba00c31..bb7361b 100644 --- a/plugins/video/public/style.css +++ b/plugins/video/public/style.css @@ -57,4 +57,10 @@ .video-title-big{ font-size: 2em; +} + +.video-block-center{ + width: 100%; + margin-left: auto; + margin-right: auto; } \ No newline at end of file diff --git a/plugins/video/test/unit/video_test.rb b/plugins/video/test/unit/video_test.rb new file mode 100644 index 0000000..f7c0cce --- /dev/null +++ b/plugins/video/test/unit/video_test.rb @@ -0,0 +1,62 @@ +require File.dirname(__FILE__) + '/../test_helper' +class VideoTest < ActiveSupport::TestCase + + include AuthenticatedTestHelper + fixtures :users, :environments + + def setup + @video = VideoPlugin::Video.new + end + + should "define its type_name as video" do + assert_equal VideoPlugin::Video.type_name, _('Video') + end + + should "display version" do + assert @video.can_display_versions? + end + + should "define its short_description" do + assert_equal VideoPlugin::Video.short_description, _('Embedded Video') + end + + should "define its description" do + assert_equal VideoPlugin::Video.description, _('Display embedded videos.') + end + + should "define a fitted_width" do + assert_equal @video.fitted_width, 499 + end + + should "eval a fitted_height" do + @video.video_height = 1000 + @video.video_width = 2000 + fitted_height = ((@video.fitted_width * @video.video_height) / @video.video_width).to_i + assert_equal fitted_height, @video.fitted_height + end + + should "define a thumbnail_fitted_width" do + assert_equal @video.thumbnail_fitted_width, 80 + end + + should "eval a thumbnail_fitted_height" do + @video.video_thumbnail_height = 60 + @video.video_thumbnail_width = 30 + thumbnail_fitted_height = ((@video.thumbnail_fitted_width * @video.video_thumbnail_height) / @video.video_thumbnail_width).to_i + assert_equal thumbnail_fitted_height, @video.thumbnail_fitted_height + end + + should "show a no_browser_support_message" do + assert_equal @video.no_browser_support_message, '

To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video

' + end + + + ### Tests for YouTube + + should "is_youtube return true when the url contains http://youtube.com" do + @video.url = "http://youtube.com/?v=XXXXX" + assert @video.is_youtube? + end + + +end diff --git a/plugins/video/views/box_organizer/_html5_video_block.html.erb b/plugins/video/views/box_organizer/_html5_video_block.html.erb index a120a21..45a32d6 100644 --- a/plugins/video/views/box_organizer/_html5_video_block.html.erb +++ b/plugins/video/views/box_organizer/_html5_video_block.html.erb @@ -1,3 +1,3 @@ -