refinerycms-videojs 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/images/refinery/admin/add_video_icon.png +0 -0
- data/app/assets/javascripts/refinery/admin/wymeditor_monkeypatch.js +13 -0
- data/app/assets/stylesheets/refinery/admin/video.css +95 -0
- data/app/controllers/refinery/videos/admin/video_files_controller.rb +16 -0
- data/app/controllers/refinery/videos/admin/videos_controller.rb +59 -0
- data/app/models/refinery/videos/video.rb +119 -0
- data/app/models/refinery/videos/video_file.rb +63 -0
- data/app/views/refinery/admin/dashboard/_additional_dashboard_menu_items.html.erb +4 -0
- data/app/views/refinery/videos/admin/videos/_actions.html.erb +23 -0
- data/app/views/refinery/videos/admin/videos/_embed_video_fields.html.erb +45 -0
- data/app/views/refinery/videos/admin/videos/_file_fields.html.erb +94 -0
- data/app/views/refinery/videos/admin/videos/_form.html.erb +44 -0
- data/app/views/refinery/videos/admin/videos/_form_option_fields.html.erb +17 -0
- data/app/views/refinery/videos/admin/videos/_new_file_field.html.erb +75 -0
- data/app/views/refinery/videos/admin/videos/_preview_form.html.erb +16 -0
- data/app/views/refinery/videos/admin/videos/_records.html.erb +18 -0
- data/app/views/refinery/videos/admin/videos/_sortable_list.html.erb +5 -0
- data/app/views/refinery/videos/admin/videos/_video.html.erb +23 -0
- data/app/views/refinery/videos/admin/videos/_videojs_dependencies.html.erb +2 -0
- data/app/views/refinery/videos/admin/videos/_videos.html.erb +2 -0
- data/app/views/refinery/videos/admin/videos/append_to_wym.js.erb +4 -0
- data/app/views/refinery/videos/admin/videos/dialog_preview.js.erb +2 -0
- data/app/views/refinery/videos/admin/videos/edit.html.erb +1 -0
- data/app/views/refinery/videos/admin/videos/index.html.erb +7 -0
- data/app/views/refinery/videos/admin/videos/insert.html.erb +34 -0
- data/app/views/refinery/videos/admin/videos/new.html.erb +3 -0
- data/app/views/refinery/videos/admin/videos/show.html.erb +4 -0
- data/app/views/sitemap/index.xml.builder +25 -0
- data/config/initializers/refinery/core.rb +11 -0
- data/config/locales/en.yml +76 -0
- data/config/locales/ru.yml +77 -0
- data/config/routes.rb +24 -0
- data/db/migrate/1_create_videos_videos.rb +29 -0
- data/db/migrate/2_create_video_file.rb +25 -0
- data/lib/generators/refinery/videos/templates/assets/javascripts/videojs_loader.js +7 -0
- data/lib/generators/refinery/videos/templates/config/initializers/refinery/videos.rb.erb +20 -0
- data/lib/generators/refinery/videos_generator.rb +18 -0
- data/lib/refinery/videos/configuration.rb +42 -0
- data/lib/refinery/videos/dragonfly.rb +53 -0
- data/lib/refinery/videos/engine.rb +32 -0
- data/lib/refinery/videos/validators/file_size_validator.rb +19 -0
- data/lib/refinery/videos/validators.rb +7 -0
- data/lib/refinery/videos.rb +28 -0
- data/lib/refinerycms-videojs.rb +1 -0
- metadata +138 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
<%= render "videojs_dependencies" unless @embedded%>
|
2
|
+
<%= form_for @video, url: refinery.videos_admin_video_append_to_wym_path(@video.id), :remote => true, :method => :post do |f| %>
|
3
|
+
<div class='dimensions'>
|
4
|
+
<div class='field'>
|
5
|
+
<%= f.label t('.width') %>
|
6
|
+
<%= f.text_field :width %>
|
7
|
+
</div>
|
8
|
+
<div class='field'>
|
9
|
+
<%= f.label t('.height') %>
|
10
|
+
<%= f.text_field :height %>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
<div class="options">
|
14
|
+
<%= render('form_option_fields', :f => f) unless @embedded %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<% if searching? %>
|
2
|
+
<h2><%= t('results_for', :scope => 'refinery.admin.search', :query => params[:search]) %></h2>
|
3
|
+
<% end %>
|
4
|
+
<div class='pagination_container'>
|
5
|
+
<% if @videos.any? %>
|
6
|
+
<%= render 'videos' %>
|
7
|
+
<% else %>
|
8
|
+
<p>
|
9
|
+
<% unless searching? %>
|
10
|
+
<strong>
|
11
|
+
<%= t('.no_items_yet') %>
|
12
|
+
</strong>
|
13
|
+
<% else %>
|
14
|
+
<%= t('no_results', :scope => 'refinery.admin.search') %>
|
15
|
+
<% end %>
|
16
|
+
</p>
|
17
|
+
<% end %>
|
18
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<li style="min-height: 35px" class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(video) -%>">
|
2
|
+
<span class='title'>
|
3
|
+
<%= video.title %>
|
4
|
+
<span class='short_info'>(
|
5
|
+
<% video.short_info.each do |info| %>
|
6
|
+
<%= "#{t(info[0])}: #{info[1]}" %>
|
7
|
+
<% end %>)</span>
|
8
|
+
</span>
|
9
|
+
<% unless action_name =~ /insert/ %>
|
10
|
+
<span class='actions'>
|
11
|
+
<%= link_to refinery_icon_tag('eye.png'), refinery.videos_admin_video_path(video, :dialog => true),
|
12
|
+
:title => t('.view_live_html'),
|
13
|
+
:target => "_blank" %>
|
14
|
+
<%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_videos_admin_video_path(video),
|
15
|
+
:title => t('.edit') %>
|
16
|
+
<%= link_to refinery_icon_tag("delete.png"), refinery.videos_admin_video_path(video),
|
17
|
+
:class => "cancel confirm-delete",
|
18
|
+
:title => t('.delete'),
|
19
|
+
:confirm => t('message', :scope => 'refinery.admin.delete', :title => video.title),
|
20
|
+
:method => :delete %>
|
21
|
+
</span>
|
22
|
+
<% end %>
|
23
|
+
</li>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'form' %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<section id='records'>
|
2
|
+
<%= render 'records' %>
|
3
|
+
</section>
|
4
|
+
<aside id='actions'>
|
5
|
+
<%= render 'actions' %>
|
6
|
+
</aside>
|
7
|
+
<%= render '/refinery/admin/make_sortable', :tree => false if !searching? and ::Refinery::Videos::Admin::VideosController.sortable? and ::Refinery::Videos::Video.count > 1 %>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<div id='dialog_list'>
|
2
|
+
<%= render '/refinery/admin/search', :url => refinery.insert_videos_admin_videos_path %>
|
3
|
+
<div id='records'>
|
4
|
+
<%= render 'videos' %>
|
5
|
+
</div>
|
6
|
+
<%= render '/refinery/admin/form_actions', :f => nil,
|
7
|
+
:cancel_url => '',
|
8
|
+
:hide_delete => true,
|
9
|
+
:submit_button_text => t('.insert'),
|
10
|
+
:cancel_button_text => t('cancel', :scope => 'refinery.admin.form_actions'),
|
11
|
+
:cancel_title => nil %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<div id='dialog_preview'></div>
|
15
|
+
<div id="preview_form"></div>
|
16
|
+
|
17
|
+
<script type="text/javascript">
|
18
|
+
$(function(){
|
19
|
+
$('#submit_button').on('click', function(){
|
20
|
+
$('#preview_form form').submit();
|
21
|
+
})
|
22
|
+
});
|
23
|
+
|
24
|
+
$(function(){
|
25
|
+
$videos = $('#sortable_list li');
|
26
|
+
$videos.attr('style', 'cursor:pointer');
|
27
|
+
$videos.on('click', function(){
|
28
|
+
$videos.removeClass('selected');
|
29
|
+
$(this).addClass('selected');
|
30
|
+
var id = $(this).attr('id');
|
31
|
+
$.get('<%= refinery.dialog_preview_videos_admin_videos_path %>', {'id' : id}, null, 'script')
|
32
|
+
})
|
33
|
+
})
|
34
|
+
</script>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
<%= link_to t('.use_files'), refinery.new_videos_admin_video_path, :class => 'select_video_type' << (@embedded ? '' : ' selected') %>
|
2
|
+
<%= link_to t('.use_embedded_video'), refinery.new_videos_admin_video_path(:embedded => true), :class => 'select_video_type' << (@embedded ? ' selected' : '') %>
|
3
|
+
<%= render 'form' %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
xml.instruct!
|
2
|
+
|
3
|
+
xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
|
4
|
+
|
5
|
+
@locales.each do |locale|
|
6
|
+
::I18n.locale = locale
|
7
|
+
::Refinery::Page.live.in_menu.includes(:parts).each do |page|
|
8
|
+
# exclude sites that are external to our own domain.
|
9
|
+
page_url = if page.url.is_a?(Hash)
|
10
|
+
# This is how most pages work without being overriden by link_url
|
11
|
+
page.url.merge({:only_path => false})
|
12
|
+
elsif page.url.to_s !~ /^http/
|
13
|
+
# handle relative link_url addresses.
|
14
|
+
[request.protocol, request.host_with_port, page.url].join
|
15
|
+
end
|
16
|
+
|
17
|
+
# Add XML entry only if there is a valid page_url found above.
|
18
|
+
xml.url do
|
19
|
+
xml.loc url_for(page_url)
|
20
|
+
xml.lastmod page.updated_at.to_date
|
21
|
+
end if page_url.present? and page.show_in_menu?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Refinery::Core.configure do |config|
|
2
|
+
|
3
|
+
# Add extra tags to the wymeditor whitelist e.g. = {'tag' => {'attributes' => {'1' => 'href'}}} or just {'tag' => {}}
|
4
|
+
config.wymeditor_whitelist_tags = {'video' => {'attributes' => {'1' => 'poster', '2' => 'width', '3' => 'height', '4' => 'source', '5' => 'controls'} },
|
5
|
+
'source' => {'attributes' => {'1' => 'src', '2' => 'type'}}}
|
6
|
+
# Register extra javascript for backend
|
7
|
+
config.register_javascript "refinery/admin/wymeditor_monkeypatch.js"
|
8
|
+
|
9
|
+
#Register extra stylesheet for backend (optional options)
|
10
|
+
config.register_stylesheet "refinery/admin/video.css"
|
11
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
en:
|
2
|
+
refinery:
|
3
|
+
admin:
|
4
|
+
dashboard:
|
5
|
+
additional_dashboard_menu_items:
|
6
|
+
create_new: Add New Video
|
7
|
+
plugins:
|
8
|
+
videos:
|
9
|
+
title: Videos
|
10
|
+
videos:
|
11
|
+
admin:
|
12
|
+
videos:
|
13
|
+
actions:
|
14
|
+
create_new: Add New Video
|
15
|
+
reorder: Reorder Videos
|
16
|
+
reorder_done: Done Reordering Videos
|
17
|
+
records:
|
18
|
+
title: Videos
|
19
|
+
sorry_no_results: Sorry! There are no results found.
|
20
|
+
no_items_yet: There are no Videos yet. Click "Add New Video" to add your first video.
|
21
|
+
video:
|
22
|
+
view_live_html: View this video live <br/><em>(opens in a new window)</em>
|
23
|
+
edit: Edit this video
|
24
|
+
delete: Remove this video forever
|
25
|
+
file: File
|
26
|
+
link: Link
|
27
|
+
shared_source: Embedded
|
28
|
+
new:
|
29
|
+
use_files: Use files
|
30
|
+
use_embedded_video: Use embedded video
|
31
|
+
form:
|
32
|
+
title: Title
|
33
|
+
poster: Poster
|
34
|
+
width: Width
|
35
|
+
height: Height
|
36
|
+
file_fields:
|
37
|
+
files: Files
|
38
|
+
file_tip: Add files (or links to files) of 'mp4', 'webm', 'flv', 'ogg' types for full browser compability
|
39
|
+
use_file: Use file
|
40
|
+
use_external_source: Use external source
|
41
|
+
add_file: Add file
|
42
|
+
add_source: Add source
|
43
|
+
delete_source: Delete source
|
44
|
+
link_to_source: Link to source
|
45
|
+
download_current: Use current video
|
46
|
+
or: or
|
47
|
+
replace: replace with this one
|
48
|
+
maximum_file_size: "Maximum file size: %{bytes}"
|
49
|
+
new_file_field:
|
50
|
+
use_file: Use file
|
51
|
+
use_external_source: Use external source
|
52
|
+
add_file: Add file
|
53
|
+
add_source: Add source
|
54
|
+
delete_source: Delete source
|
55
|
+
embed_video_fields:
|
56
|
+
copy_embed_tag_here: Copy HTML here
|
57
|
+
form_option_fields:
|
58
|
+
options: Options
|
59
|
+
autoplay: Autoplay
|
60
|
+
show_ontrols: Show controls
|
61
|
+
preload_video: Preload video
|
62
|
+
loop_video: Loop video
|
63
|
+
insert:
|
64
|
+
insert: Insert
|
65
|
+
preview_form:
|
66
|
+
width: Width
|
67
|
+
height: Height
|
68
|
+
videos:
|
69
|
+
show:
|
70
|
+
other: Other Videos
|
71
|
+
activerecord:
|
72
|
+
attributes:
|
73
|
+
'refinery/videos/video':
|
74
|
+
file_name: File Name
|
75
|
+
file_size: File Size
|
76
|
+
file_ext: File Ext
|
@@ -0,0 +1,77 @@
|
|
1
|
+
ru:
|
2
|
+
refinery:
|
3
|
+
admin:
|
4
|
+
dashboard:
|
5
|
+
additional_dashboard_menu_items:
|
6
|
+
create_new: Добавить видео
|
7
|
+
plugins:
|
8
|
+
videos:
|
9
|
+
title: Видео
|
10
|
+
videos:
|
11
|
+
admin:
|
12
|
+
videos:
|
13
|
+
actions:
|
14
|
+
create_new: Добавить видео
|
15
|
+
reorder: Изменить порядок
|
16
|
+
reorder_done: Закончить редактирование
|
17
|
+
records:
|
18
|
+
title: Видео
|
19
|
+
sorry_no_results: Извините, ничего не найдено.
|
20
|
+
no_items_yet: Видео отсутствуют. Нажмине "Добавить видео"
|
21
|
+
video:
|
22
|
+
view_live_html: Предварительный просмотр <br/><em>(открывается в новом окне)</em>
|
23
|
+
edit: Редактировать видео
|
24
|
+
delete: Удалить видео
|
25
|
+
file: Файл
|
26
|
+
link: Ссылка
|
27
|
+
shared_source: Встроенное
|
28
|
+
new:
|
29
|
+
use_files: Использовать файлы
|
30
|
+
use_embedded_video: Ислользовать встроенное видео
|
31
|
+
form:
|
32
|
+
title: Название
|
33
|
+
poster: Постер
|
34
|
+
width: Ширина
|
35
|
+
height: Высота
|
36
|
+
file_fields:
|
37
|
+
files: Файлы
|
38
|
+
file_tip: "Для полной совместимости, добавтье файлы (или ссылки на файлы) следующих форматов: 'mp4', 'webm', 'flv', 'ogg'"
|
39
|
+
use_file: Использовать файл
|
40
|
+
use_external_source: Использовать ссылку
|
41
|
+
add_file: Добавить файл
|
42
|
+
add_source: Добавить источник
|
43
|
+
delete_source: Удалить источник
|
44
|
+
link_to_source: Ссылка на источник
|
45
|
+
download_current: Использовать текущее видео
|
46
|
+
or: или
|
47
|
+
replace: загрузить новое
|
48
|
+
maximum_file_size: "Максимальный размер файла: %{bytes}"
|
49
|
+
new_file_field:
|
50
|
+
use_file: Использовать файл
|
51
|
+
use_external_source: Использовать ссылку
|
52
|
+
add_file: Добавить файл
|
53
|
+
add_source: Добавить источник
|
54
|
+
delete_source: Удалить источник
|
55
|
+
embed_video_fields:
|
56
|
+
copy_embed_tag_here: Скопируйте HMTL код
|
57
|
+
form_option_fields:
|
58
|
+
options: Настройки
|
59
|
+
autoplay: Автоматическое воспроизведение
|
60
|
+
show_ontrols: Панель управления
|
61
|
+
preload_video: Загружать автоматически
|
62
|
+
loop_video: Повтор
|
63
|
+
insert:
|
64
|
+
insert: Вставить
|
65
|
+
preview_form:
|
66
|
+
width: Ширина
|
67
|
+
height: Высота
|
68
|
+
|
69
|
+
videos:
|
70
|
+
show:
|
71
|
+
other: Другие видео
|
72
|
+
activerecord:
|
73
|
+
attributes:
|
74
|
+
'refinery/videos/video':
|
75
|
+
file_name: Имя файла
|
76
|
+
file_size: Размер файла
|
77
|
+
file_ext: Расширение файла
|
data/config/routes.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Refinery::Core::Engine.routes.append do
|
2
|
+
match '/system/videos/*dragonfly', :to => Dragonfly[:refinery_videos]
|
3
|
+
|
4
|
+
# Frontend routes
|
5
|
+
namespace :videos do
|
6
|
+
resources :videos, :path => '', :only => [:index, :show]
|
7
|
+
end
|
8
|
+
|
9
|
+
# Admin routes
|
10
|
+
namespace :videos, :path => '' do
|
11
|
+
namespace :admin, :path => 'refinery' do
|
12
|
+
resources :videos do
|
13
|
+
post :append_to_wym
|
14
|
+
collection do
|
15
|
+
post :update_positions
|
16
|
+
get :insert
|
17
|
+
get :dialog_preview
|
18
|
+
end
|
19
|
+
end
|
20
|
+
resources :video_files, :only => [:destroy]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class CreateVideosVideos < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table "refinery_videos", :force => true do |t|
|
5
|
+
t.integer "position"
|
6
|
+
t.datetime "created_at", :null => false
|
7
|
+
t.datetime "updated_at", :null => false
|
8
|
+
t.string "config"
|
9
|
+
t.string "title"
|
10
|
+
t.integer "poster_id"
|
11
|
+
t.boolean "use_shared"
|
12
|
+
t.text "embed_tag"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def down
|
17
|
+
if defined?(::Refinery::UserPlugin)
|
18
|
+
::Refinery::UserPlugin.destroy_all({:name => "refinerycms-videos"})
|
19
|
+
end
|
20
|
+
|
21
|
+
if defined?(::Refinery::Page)
|
22
|
+
::Refinery::Page.delete_all({:link_url => "/videos/videos"})
|
23
|
+
end
|
24
|
+
|
25
|
+
drop_table :refinery_videos
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class CreateVideoFile < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table "refinery_video_files", :force => true do |t|
|
5
|
+
t.string "file_name"
|
6
|
+
t.integer "file_size"
|
7
|
+
t.string "file_ext"
|
8
|
+
t.string "file_uid"
|
9
|
+
t.string "file_mime_type"
|
10
|
+
t.integer "video_id"
|
11
|
+
t.datetime "created_at", :null => false
|
12
|
+
t.datetime "updated_at", :null => false
|
13
|
+
t.string "external_url"
|
14
|
+
t.boolean "use_external"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
def down
|
20
|
+
|
21
|
+
drop_table :refinery_videos
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Refinery::Videos.configure do |config|
|
2
|
+
#Configures the maximum allowed upload size (in bytes) for an video file
|
3
|
+
#config.max_file_size = <%= Refinery::Videos.max_file_size %>
|
4
|
+
|
5
|
+
# Configure how many videos per page should be displayed in the list of images in the admin area
|
6
|
+
#config.pages_per_admin_index = <%= Refinery::Videos.pages_per_admin_index %>
|
7
|
+
|
8
|
+
# Configure white-listed mime types for validation
|
9
|
+
#config.whitelisted_mime_types = <%= Refinery::Videos.whitelisted_mime_types %>
|
10
|
+
|
11
|
+
# Configure Dragonfly
|
12
|
+
# This is where in the middleware stack to insert the Dragonfly middleware
|
13
|
+
# config.dragonfly_insert_before = <%= Refinery::Videos.dragonfly_insert_before %>
|
14
|
+
# config.dragonfly_secret = <%= Refinery::Videos.dragonfly_secret %>
|
15
|
+
# If you decide to trust file extensions replace :ext below with :format
|
16
|
+
# config.dragonfly_url_format = <%= Refinery::Videos.dragonfly_url_format %>
|
17
|
+
# config.datastore_root_path = <%= Refinery::Videos.datastore_root_path %>
|
18
|
+
# config.trust_file_extensions = <%= Refinery::Videos.trust_file_extensions %>
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Refinery
|
2
|
+
class VideosGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../videos/templates', __FILE__)
|
4
|
+
|
5
|
+
def rake_db
|
6
|
+
rake("refinery_videos:install:migrations")
|
7
|
+
end
|
8
|
+
|
9
|
+
def generate_videos_initializer
|
10
|
+
template "config/initializers/refinery/videos.rb.erb", File.join(destination_root, "config", "initializers", "refinery", "videos.rb")
|
11
|
+
end
|
12
|
+
|
13
|
+
def generate_videojs_loader
|
14
|
+
template "assets/javascripts/videojs_loader.js", File.join(destination_root, "app", "assets", "javascripts", "videojs_loader.js")
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Videos
|
3
|
+
include ActiveSupport::Configurable
|
4
|
+
|
5
|
+
config_accessor :dragonfly_insert_before, :dragonfly_secret, :dragonfly_url_format,
|
6
|
+
:max_file_size, :pages_per_dialog, :pages_per_admin_index,
|
7
|
+
:s3_backend, :s3_bucket_name, :s3_region,
|
8
|
+
:s3_access_key_id, :s3_secret_access_key,
|
9
|
+
:datastore_root_path, :trust_file_extensions, :whitelisted_mime_types
|
10
|
+
|
11
|
+
self.dragonfly_insert_before = 'ActionDispatch::Callbacks'
|
12
|
+
self.dragonfly_secret = Refinery::Core.dragonfly_secret
|
13
|
+
self.dragonfly_url_format = '/system/videos/:job/:basename.:format'
|
14
|
+
self.trust_file_extensions = false
|
15
|
+
self.max_file_size = 524288000
|
16
|
+
self.pages_per_dialog = 7
|
17
|
+
self.pages_per_admin_index = 20
|
18
|
+
self.whitelisted_mime_types = %w(video/mp4 video/x-flv application/ogg video/webm video/flv video/ogg)
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def datastore_root_path
|
22
|
+
config.datastore_root_path || (Rails.root.join('public', 'system', 'refinery', 'videos').to_s if Rails.root)
|
23
|
+
end
|
24
|
+
|
25
|
+
def s3_backend
|
26
|
+
config.s3_backend.nil? ? Refinery::Core.s3_backend : config.s3_backend
|
27
|
+
end
|
28
|
+
|
29
|
+
def s3_bucket_name
|
30
|
+
config.s3_bucket_name.nil? ? Refinery::Core.s3_bucket_name : config.s3_bucket_name
|
31
|
+
end
|
32
|
+
|
33
|
+
def s3_access_key_id
|
34
|
+
config.s3_access_key_id.nil? ? Refinery::Core.s3_access_key_id : config.s3_access_key_id
|
35
|
+
end
|
36
|
+
|
37
|
+
def s3_secret_access_key
|
38
|
+
config.s3_secret_access_key.nil? ? Refinery::Core.s3_secret_access_key : config.s3_secret_access_key
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'dragonfly'
|
2
|
+
|
3
|
+
module Refinery
|
4
|
+
module Videos
|
5
|
+
module Dragonfly
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def setup!
|
9
|
+
app_videos = ::Dragonfly[:refinery_videos]
|
10
|
+
|
11
|
+
app_videos.define_macro(::Refinery::Videos::VideoFile, :video_accessor)
|
12
|
+
|
13
|
+
app_videos.analyser.register(::Dragonfly::Analysis::FileCommandAnalyser)
|
14
|
+
app_videos.content_disposition = :attachment
|
15
|
+
end
|
16
|
+
|
17
|
+
def configure!
|
18
|
+
app_videos = ::Dragonfly[:refinery_videos]
|
19
|
+
app_videos.configure_with(:rails) do |c|
|
20
|
+
#c.datastore = ::Dragonfly::DataStorage::MongoDataStore.new(:db => MongoMapper.database)
|
21
|
+
c.datastore.root_path = Refinery::Videos.datastore_root_path
|
22
|
+
c.url_format = Refinery::Videos.dragonfly_url_format
|
23
|
+
c.secret = Refinery::Videos.dragonfly_secret
|
24
|
+
end
|
25
|
+
|
26
|
+
if ::Refinery::Videos.s3_backend
|
27
|
+
app_videos.datastore = ::Dragonfly::DataStorage::S3DataStore.new
|
28
|
+
app_videos.datastore.configure do |s3|
|
29
|
+
s3.bucket_name = Refinery::Videos.s3_bucket_name
|
30
|
+
s3.access_key_id = Refinery::Videos.s3_access_key_id
|
31
|
+
s3.secret_access_key = Refinery::Videos.s3_secret_access_key
|
32
|
+
# S3 Region otherwise defaults to 'us-east-1'
|
33
|
+
s3.region = Refinery::Videos.s3_region if Refinery::Videos.s3_region
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def attach!(app)
|
39
|
+
### Extend active record ###
|
40
|
+
app.config.middleware.insert_before Refinery::Videos.dragonfly_insert_before,
|
41
|
+
'Dragonfly::Middleware', :refinery_videos
|
42
|
+
|
43
|
+
app.config.middleware.insert_before 'Dragonfly::Middleware', 'Rack::Cache', {
|
44
|
+
:verbose => Rails.env.development?,
|
45
|
+
:metastore => "file:#{URI.encode(Rails.root.join('tmp', 'dragonfly', 'cache', 'meta').to_s)}",
|
46
|
+
:entitystore => "file:#{URI.encode(Rails.root.join('tmp', 'dragonfly', 'cache', 'body').to_s)}"
|
47
|
+
}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Videos
|
3
|
+
class Engine < Rails::Engine
|
4
|
+
include Refinery::Engine
|
5
|
+
isolate_namespace Refinery::Videos
|
6
|
+
|
7
|
+
engine_name :refinery_videos
|
8
|
+
|
9
|
+
initializer 'attach-refinery-videos-with-dragonfly', :after => :load_config_initializers do |app|
|
10
|
+
::Refinery::Videos::Dragonfly.configure!
|
11
|
+
::Refinery::Videos::Dragonfly.attach!(app)
|
12
|
+
end
|
13
|
+
|
14
|
+
initializer "register refinerycms_videos plugin" do
|
15
|
+
Refinery::Plugin.register do |plugin|
|
16
|
+
plugin.name = "videos"
|
17
|
+
plugin.url = proc { Refinery::Core::Engine.routes.url_helpers.videos_admin_videos_path }
|
18
|
+
plugin.pathname = root
|
19
|
+
plugin.activity = {
|
20
|
+
:class_name => :'refinery/videos/video',
|
21
|
+
:title => 'title'
|
22
|
+
}
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
config.after_initialize do
|
28
|
+
Refinery.register_extension(Refinery::Videos)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Videos
|
3
|
+
module Validators
|
4
|
+
class ImageSizeValidator < ActiveModel::Validator
|
5
|
+
|
6
|
+
def validate(record)
|
7
|
+
file = record.file
|
8
|
+
|
9
|
+
if file.respond_to?(:length) && file.length > Refinery::Videos.max_image_size
|
10
|
+
record.errors[:file] << ::I18n.t('too_big',
|
11
|
+
:scope => 'activerecord.errors.models.refinery/image',
|
12
|
+
:size => Refinery::Videos.max_image_size)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'refinerycms-core'
|
2
|
+
require 'dragonfly'
|
3
|
+
require 'rack/cache'
|
4
|
+
|
5
|
+
|
6
|
+
module Refinery
|
7
|
+
autoload :VideosGenerator, 'generators/refinery/videos_generator'
|
8
|
+
|
9
|
+
module Videos
|
10
|
+
require 'refinery/videos/engine'
|
11
|
+
require 'refinery/videos/configuration'
|
12
|
+
autoload :Dragonfly, 'refinery/videos/dragonfly'
|
13
|
+
autoload :Validators, 'refinery/videos/validators'
|
14
|
+
|
15
|
+
class << self
|
16
|
+
attr_writer :root
|
17
|
+
|
18
|
+
def root
|
19
|
+
@root ||= Pathname.new(File.expand_path('../../../', __FILE__))
|
20
|
+
end
|
21
|
+
|
22
|
+
def factory_paths
|
23
|
+
@factory_paths ||= [ root.join('spec', 'factories').to_s ]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'refinery/videos'
|