pageflow 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of pageflow might be problematic. Click here for more details.
- checksums.yaml +8 -8
- data/app/assets/images/pageflow/audio_loop_pictogram.png +0 -0
- data/app/assets/images/pageflow/audio_loop_pictogram_small.png +0 -0
- data/app/assets/images/pageflow/ov-internal_links.png +0 -0
- data/app/assets/images/pageflow/placeholder_link_thumbnail.jpg +0 -0
- data/app/assets/images/pageflow/placeholder_link_thumbnail_large.jpg +0 -0
- data/app/assets/images/pageflow/placeholder_thumbnail.jpg +0 -0
- data/app/assets/javascripts/pageflow/audio_player.js +5 -0
- data/app/assets/javascripts/pageflow/editor/api.js +4 -0
- data/app/assets/javascripts/pageflow/editor/api/file_type.js +32 -0
- data/app/assets/javascripts/pageflow/editor/api/file_types.js +73 -0
- data/app/assets/javascripts/pageflow/editor/base.js +5 -0
- data/app/assets/javascripts/pageflow/editor/collections/file_usages_collection.js +13 -1
- data/app/assets/javascripts/pageflow/editor/collections/files_collection.js +54 -0
- data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +2 -14
- data/app/assets/javascripts/pageflow/editor/initializers/error_listener.js +8 -0
- data/app/assets/javascripts/pageflow/editor/initializers/setup_collections.js +5 -3
- data/app/assets/javascripts/pageflow/editor/initializers/setup_file_types.js +21 -0
- data/app/assets/javascripts/pageflow/editor/models/audio_file.js +1 -15
- data/app/assets/javascripts/pageflow/editor/models/encoded_file.js +32 -0
- data/app/assets/javascripts/pageflow/editor/models/entry.js +29 -63
- data/app/assets/javascripts/pageflow/editor/models/file_stage.js +7 -6
- data/app/assets/javascripts/pageflow/editor/models/hosted_file.js +20 -0
- data/app/assets/javascripts/pageflow/editor/models/image_file.js +8 -31
- data/app/assets/javascripts/pageflow/editor/models/mixins/file_with_type.js +3 -0
- data/app/assets/javascripts/pageflow/editor/models/mixins/stage_provider.js +11 -5
- data/app/assets/javascripts/pageflow/editor/models/mixins/transient_references.js +5 -0
- data/app/assets/javascripts/pageflow/editor/models/other_entry.js +9 -3
- data/app/assets/javascripts/pageflow/editor/models/page.js +9 -11
- data/app/assets/javascripts/pageflow/editor/models/uploaded_file.js +65 -0
- data/app/assets/javascripts/pageflow/editor/models/video_file.js +1 -14
- data/app/assets/javascripts/pageflow/editor/routers/sidebar_router.js +2 -9
- data/app/assets/javascripts/pageflow/editor/templates/file_item.jst.ejs +1 -1
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio_loop.js +23 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/background_image.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/background_video.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/internal_links.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/video.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/embedded/page_link_embedded_view.js +1 -1
- data/app/assets/javascripts/pageflow/editor/views/explorer_file_item_view.js +2 -0
- data/app/assets/javascripts/pageflow/editor/views/file_item_view.js +8 -1
- data/app/assets/javascripts/pageflow/editor/views/file_stage_item_view.js +8 -1
- data/app/assets/javascripts/pageflow/editor/views/files_explorer_view.js +11 -43
- data/app/assets/javascripts/pageflow/editor/views/files_view.js +11 -21
- data/app/assets/javascripts/pageflow/editor/views/input_view.js +1 -1
- data/app/assets/javascripts/pageflow/editor/views/inputs/file_input_view.js +6 -0
- data/app/assets/javascripts/pageflow/editor/views/inputs/select_input_view.js +5 -0
- data/app/assets/javascripts/pageflow/editor/views/mixins/selectable_view.js +7 -5
- data/app/assets/javascripts/pageflow/editor/views/uploader_view.js +15 -5
- data/app/assets/javascripts/pageflow/page_types/audio.js +1 -1
- data/app/assets/javascripts/pageflow/page_types/audio_loop.js +90 -0
- data/app/assets/javascripts/pageflow/page_types/video.js +1 -1
- data/app/assets/javascripts/pageflow/ready.js +17 -2
- data/app/assets/javascripts/pageflow/video_player/player_buffered_patch.js +13 -2
- data/app/assets/stylesheets/pageflow/mixins/pageflow.css.scss +9 -0
- data/app/assets/stylesheets/pageflow/mixins/shadow.css.scss +12 -1
- data/app/assets/stylesheets/pageflow/overview.css.scss +3 -3
- data/app/assets/stylesheets/pageflow/page_types.css.scss +2 -0
- data/app/assets/stylesheets/pageflow/page_types/audio.css.scss +2 -13
- data/app/assets/stylesheets/pageflow/page_types/audio_loop.css.scss +0 -0
- data/app/assets/stylesheets/pageflow/page_types/video.css.scss +4 -0
- data/app/assets/stylesheets/pageflow/player_controls.css.scss +72 -6
- data/app/assets/stylesheets/pageflow/themes/default/navigation.css.scss +3 -0
- data/app/assets/stylesheets/pageflow/themes/default/overview.css.scss +3 -0
- data/app/controllers/pageflow/editor/files_controller.rb +11 -24
- data/app/controllers/pageflow/{video_files_controller.rb → files_controller.rb} +6 -2
- data/app/helpers/pageflow/audio_files_helper.rb +40 -0
- data/app/helpers/pageflow/file_thumbnails_helper.rb +18 -0
- data/app/helpers/pageflow/pages_helper.rb +3 -24
- data/app/jobs/pageflow/upload_file_to_s3_job.rb +2 -2
- data/app/models/concerns/pageflow/hosted_file.rb +93 -0
- data/app/models/pageflow/audio_file.rb +1 -12
- data/app/models/pageflow/draft_entry.rb +2 -11
- data/app/models/pageflow/image_file.rb +14 -14
- data/app/models/pageflow/page.rb +7 -24
- data/app/models/pageflow/published_entry.rb +3 -2
- data/app/models/pageflow/revision.rb +7 -0
- data/app/models/pageflow/thumbnail_file_resolver.rb +33 -0
- data/app/models/pageflow/video_file.rb +10 -34
- data/app/models/pageflow/zencoder_attachment.rb +2 -2
- data/app/state_machines/pageflow/encoded_file_state_machine.rb +8 -20
- data/app/state_machines/pageflow/image_file_state_machine.rb +4 -0
- data/app/views/pageflow/audio_files/_audio_file.html.erb +1 -0
- data/app/views/pageflow/audio_files/_script_tag.html.erb +3 -0
- data/app/views/pageflow/config/_editor_seeds.json.jbuilder +1 -0
- data/app/views/pageflow/editor/audio_files/_audio_file.json.jbuilder +0 -6
- data/app/views/pageflow/editor/files/_file.json.jbuilder +16 -0
- data/app/views/pageflow/editor/files/create.json.jbuilder +1 -1
- data/app/views/pageflow/editor/files/index.json.jbuilder +4 -1
- data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +1 -8
- data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +0 -8
- data/app/views/pageflow/entries/_entry.html.erb +2 -2
- data/app/views/pageflow/entries/_multimedia_alert.html.erb +14 -7
- data/app/views/pageflow/entries/_social_meta_tags.html.erb +1 -1
- data/app/views/pageflow/entries/edit.html.erb +6 -4
- data/app/views/pageflow/entries/navigation/_bar_top.html.erb +1 -1
- data/app/views/pageflow/entries/navigation/_page.html.erb +2 -2
- data/app/views/pageflow/entries/overview/_chapter.html.erb +3 -1
- data/app/views/pageflow/entries/overview/_entry.html.erb +2 -1
- data/app/views/pageflow/entries/overview/_page.html.erb +1 -1
- data/app/views/pageflow/entries/show.css.erb +1 -21
- data/app/views/pageflow/entries/show.json.jbuilder +8 -3
- data/app/views/pageflow/file_types/_thumbnails.css.erb +7 -0
- data/app/views/pageflow/files/show.html.erb +1 -0
- data/app/views/pageflow/page_types/_page_type.json.jbuilder +4 -0
- data/app/views/pageflow/pages/templates/_audio.html.erb +6 -5
- data/app/views/pageflow/pages/templates/_audio_loop.html.erb +34 -0
- data/app/views/pageflow/video_files/_video_file.html.erb +1 -0
- data/config/initializers/page_type_helpers.rb +2 -2
- data/config/initializers/paperclip.rb +32 -0
- data/config/initializers/zencoder.rb +3 -3
- data/config/locales/activerecord.de.yml +3 -2
- data/config/locales/pageflow/audio.de.yml +4 -0
- data/config/locales/pageflow/editor/errors.de.yml +6 -0
- data/config/routes.rb +4 -10
- data/lib/generators/pageflow/initializer/templates/pageflow.rb +2 -1
- data/lib/pageflow.rb +5 -3
- data/lib/pageflow/ability_mixin.rb +2 -2
- data/lib/pageflow/built_in_page_type.rb +40 -7
- data/lib/pageflow/configuration.rb +17 -0
- data/lib/pageflow/file_type.rb +60 -0
- data/lib/pageflow/file_types.rb +25 -0
- data/lib/pageflow/page_type.rb +31 -0
- data/lib/pageflow/version.rb +1 -1
- data/lib/pageflow/zencoder_video_output_definition.rb +3 -3
- data/spec/factories/audio_files.rb +2 -2
- data/spec/factories/hosted_files.rb +35 -0
- data/spec/factories/video_files.rb +2 -2
- metadata +37 -18
- data/app/assets/images/pageflow/themes/default/logo_navi.png +0 -0
- data/app/assets/images/pageflow/themes/default/logo_navi_invert.png +0 -0
- data/app/assets/javascripts/pageflow/editor/collections/audio_files_collection.js +0 -7
- data/app/assets/javascripts/pageflow/editor/collections/image_files_collection.js +0 -8
- data/app/assets/javascripts/pageflow/editor/collections/mixins/files_collection.js +0 -42
- data/app/assets/javascripts/pageflow/editor/collections/video_files_collection.js +0 -8
- data/app/assets/javascripts/pageflow/editor/models/mixins/encoded_file.js +0 -51
- data/app/assets/javascripts/pageflow/editor/models/mixins/file.js +0 -31
- data/app/assets/javascripts/pageflow/editor/views/audio_file_item_view.js +0 -14
- data/app/assets/javascripts/pageflow/editor/views/image_file_item_view.js +0 -10
- data/app/assets/javascripts/pageflow/editor/views/video_file_item_view.js +0 -18
- data/app/controllers/pageflow/editor/audio_files_controller.rb +0 -11
- data/app/controllers/pageflow/editor/image_files_controller.rb +0 -11
- data/app/controllers/pageflow/editor/video_files_controller.rb +0 -11
- data/app/views/pageflow/video_files/show.html.erb +0 -1
@@ -122,14 +122,14 @@ de:
|
|
122
122
|
description: "Beschreibung für Übersicht"
|
123
123
|
additional_title: "Titel für Infobox"
|
124
124
|
additional_description: "Beschreibung für Infobox"
|
125
|
-
gradient_opacity: "Intensität des
|
125
|
+
gradient_opacity: "Intensität des Farbverlaufs"
|
126
126
|
invert: "Farben invertieren"
|
127
127
|
transition: "Übergangseffekt"
|
128
128
|
display_in_navigation: "In Navigationsleiste anzeigen"
|
129
129
|
allow_full_screen: "Vollbild Anzeige erlauben"
|
130
130
|
autoplay: "automatisch abspielen"
|
131
131
|
background_image_id: "Hintergrundbild"
|
132
|
-
thumbnail_image_id: "
|
132
|
+
thumbnail_image_id: "Thumbnail"
|
133
133
|
background_video_id: "Hintergrundvideo"
|
134
134
|
video_file_id: "Video"
|
135
135
|
audio_file_id: "Audio"
|
@@ -164,6 +164,7 @@ de:
|
|
164
164
|
background_video: "Hintergrund-Video"
|
165
165
|
video: "Video"
|
166
166
|
audio: "Audio"
|
167
|
+
audio_loop: "Hintergrund-Audio"
|
167
168
|
internal_links: "Seiten-Verweise"
|
168
169
|
transition:
|
169
170
|
scroll: "Scrollen"
|
data/config/routes.rb
CHANGED
@@ -24,19 +24,12 @@ Pageflow::Engine.routes.draw do
|
|
24
24
|
|
25
25
|
namespace :editor do
|
26
26
|
resources :entries, :only => :index, :shallow => true do
|
27
|
-
resources :
|
28
|
-
get :retry, :on => :member
|
29
|
-
end
|
30
|
-
|
31
|
-
resources :video_files, :only => [:index, :create, :update] do
|
32
|
-
get :retry, :on => :member
|
33
|
-
end
|
34
|
-
|
35
|
-
resources :audio_files, :only => [:index, :create, :update] do
|
27
|
+
resources :files, :path => 'files/:collection_name', :only => [:index, :create, :update] do
|
36
28
|
get :retry, :on => :member
|
37
29
|
end
|
38
30
|
|
39
31
|
resources :file_usages, :only => [:create, :destroy]
|
32
|
+
|
40
33
|
resources :encoding_confirmations, :only => [:create] do
|
41
34
|
post :check, :on => :collection
|
42
35
|
end
|
@@ -50,7 +43,8 @@ Pageflow::Engine.routes.draw do
|
|
50
43
|
root :to => redirect('/admin')
|
51
44
|
end
|
52
45
|
|
53
|
-
get ':entry_id/videos/:id', :to => '
|
46
|
+
get ':entry_id/videos/:id', :to => 'files#show', :as => :short_video_file, :defaults => {:collection_name => 'video_files'}
|
47
|
+
get ':entry_id/audio/:id', :to => 'files#show', :as => :short_audio_file, :defaults => {:collection_name => 'audio_files'}
|
54
48
|
|
55
49
|
resources :entries, :only => [:show]
|
56
50
|
get ':id', :to => 'entries#show', :as => :short_entry
|
@@ -4,7 +4,7 @@ ActiveAdmin.application.load_paths.unshift(Dir[Pageflow::Engine.root.join('admin
|
|
4
4
|
Pageflow.configure do |config|
|
5
5
|
# The email address to use as from header in invitation mails to new
|
6
6
|
# users.
|
7
|
-
config.mailer_sender = 'change-me-
|
7
|
+
config.mailer_sender = 'change-me-at-config-initializers-pageflow@example.com'
|
8
8
|
|
9
9
|
# Page types available in the editor. Add futher page types from
|
10
10
|
# page type engines below.
|
@@ -12,6 +12,7 @@ Pageflow.configure do |config|
|
|
12
12
|
config.register_page_type(Pageflow::BuiltInPageType.background_video)
|
13
13
|
config.register_page_type(Pageflow::BuiltInPageType.video)
|
14
14
|
config.register_page_type(Pageflow::BuiltInPageType.audio)
|
15
|
+
config.register_page_type(Pageflow::BuiltInPageType.audio_loop)
|
15
16
|
config.register_page_type(Pageflow::BuiltInPageType.internal_links)
|
16
17
|
# config.register_page_type(Pageflow::Rainbow::PageType.new)
|
17
18
|
|
data/lib/pageflow.rb
CHANGED
@@ -20,16 +20,18 @@ module Pageflow
|
|
20
20
|
def self.configure!
|
21
21
|
return unless @finalized
|
22
22
|
|
23
|
-
|
23
|
+
config = Configuration.new
|
24
24
|
@configure_blocks ||= []
|
25
25
|
|
26
26
|
@configure_blocks.each do |block|
|
27
|
-
block.call(
|
27
|
+
block.call(config)
|
28
28
|
end
|
29
29
|
|
30
30
|
@after_configure_blocks.each do |block|
|
31
|
-
block.call(
|
31
|
+
block.call(config)
|
32
32
|
end
|
33
|
+
|
34
|
+
@config = config
|
33
35
|
end
|
34
36
|
|
35
37
|
def self.finalize!
|
@@ -17,7 +17,7 @@ module Pageflow
|
|
17
17
|
can_edit_entry?(user, record.entry)
|
18
18
|
end
|
19
19
|
|
20
|
-
can :manage,
|
20
|
+
can :manage, Pageflow.config.file_types.map(&:model) do |record|
|
21
21
|
can_edit_any_entry_using_file?(user, record)
|
22
22
|
end
|
23
23
|
|
@@ -47,7 +47,7 @@ module Pageflow
|
|
47
47
|
can :manage, Folder
|
48
48
|
can :manage, [Entry, Revision]
|
49
49
|
can :manage, [Chapter, Page]
|
50
|
-
can :manage,
|
50
|
+
can :manage, Pageflow.config.file_types.map(&:model)
|
51
51
|
|
52
52
|
can :manage, Resque
|
53
53
|
elsif user.account_manager?
|
@@ -1,10 +1,23 @@
|
|
1
1
|
module Pageflow
|
2
2
|
# Definition of page type located inside the Pageflow gem.
|
3
3
|
class BuiltInPageType < PageType
|
4
|
-
attr_reader :name
|
4
|
+
attr_reader :name, :file_type_models
|
5
5
|
|
6
|
-
def initialize(name)
|
6
|
+
def initialize(name, options = {})
|
7
7
|
@name = name.to_s
|
8
|
+
@file_type_models = options.fetch(:file_type_models, [])
|
9
|
+
@thumbnail_candidates = options.fetch(:thumbnail_candidates, nil)
|
10
|
+
end
|
11
|
+
|
12
|
+
def file_types
|
13
|
+
@file_types ||= file_type_models.map do |model_name|
|
14
|
+
model = model_name.constantize
|
15
|
+
base_name = model_name.underscore.split('/').last
|
16
|
+
|
17
|
+
FileType.new(model: model,
|
18
|
+
editor_partial: "pageflow/editor/#{base_name.pluralize}/#{base_name}",
|
19
|
+
collection_name: base_name.pluralize)
|
20
|
+
end
|
8
21
|
end
|
9
22
|
|
10
23
|
def template_path
|
@@ -15,28 +28,48 @@ module Pageflow
|
|
15
28
|
"activerecord.values.pageflow/page.template.#{name}"
|
16
29
|
end
|
17
30
|
|
31
|
+
def thumbnail_candidates
|
32
|
+
@thumbnail_candidates.presence || super
|
33
|
+
end
|
34
|
+
|
18
35
|
# Factory methods to decouple Pageflow initializers from concrete
|
19
36
|
# page type classes, so we might decide later to create a
|
20
37
|
# VideoPageType subclass etc.
|
21
38
|
|
22
39
|
def self.audio
|
23
|
-
new('audio')
|
40
|
+
new('audio', file_type_models: ['Pageflow::ImageFile', 'Pageflow::AudioFile'])
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.audio_loop
|
44
|
+
new('audio_loop', file_type_models: ['Pageflow::ImageFile', 'Pageflow::AudioFile'])
|
24
45
|
end
|
25
46
|
|
26
47
|
def self.background_image
|
27
|
-
new('background_image')
|
48
|
+
new('background_image', file_type_models: ['Pageflow::ImageFile'])
|
28
49
|
end
|
29
50
|
|
30
51
|
def self.background_video
|
31
|
-
new('background_video'
|
52
|
+
new('background_video',
|
53
|
+
file_type_models: ['Pageflow::ImageFile', 'Pageflow::VideoFile'],
|
54
|
+
thumbnail_candidates: video_thumbnail_candidates)
|
32
55
|
end
|
33
56
|
|
34
57
|
def self.internal_links
|
35
|
-
new('internal_links')
|
58
|
+
new('internal_links', file_type_models: ['Pageflow::ImageFile'])
|
36
59
|
end
|
37
60
|
|
38
61
|
def self.video
|
39
|
-
new('video'
|
62
|
+
new('video',
|
63
|
+
file_type_models: ['Pageflow::ImageFile', 'Pageflow::VideoFile'],
|
64
|
+
thumbnail_candidates: video_thumbnail_candidates)
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.video_thumbnail_candidates
|
68
|
+
[
|
69
|
+
{file_collection: 'image_files', attribute: 'thumbnail_image_id'},
|
70
|
+
{file_collection: 'image_files', attribute: 'poster_image_id'},
|
71
|
+
{file_collection: 'video_files', attribute: 'video_file_id'}
|
72
|
+
]
|
40
73
|
end
|
41
74
|
end
|
42
75
|
end
|
@@ -60,6 +60,19 @@ module Pageflow
|
|
60
60
|
# @return [Themes]
|
61
61
|
attr_reader :themes
|
62
62
|
|
63
|
+
# List of {FileType} instances provided by page types.
|
64
|
+
# @return [FileTypes]
|
65
|
+
attr_reader :file_types
|
66
|
+
|
67
|
+
# Paperclip style definitions of thumbnails used by Pageflow.
|
68
|
+
# @return Hash
|
69
|
+
attr_accessor :thumbnail_styles
|
70
|
+
|
71
|
+
# Names of Paperclip styles that shall be rendered into entry
|
72
|
+
# specific stylesheets.
|
73
|
+
# @return Array<Symbol>
|
74
|
+
attr_accessor :css_rendered_thumbnail_styles
|
75
|
+
|
63
76
|
# Either a lambda or an object with a `match?` method, to restrict
|
64
77
|
# access to the editor routes defined by Pageflow.
|
65
78
|
#
|
@@ -133,6 +146,10 @@ module Pageflow
|
|
133
146
|
@hooks = Hooks.new
|
134
147
|
@quotas = Quotas.new
|
135
148
|
@themes = Themes.new
|
149
|
+
@file_types = FileTypes.new(page_types)
|
150
|
+
|
151
|
+
@thumbnail_styles = {}
|
152
|
+
@css_rendered_thumbnail_styles = Pageflow::PagesHelper::CSS_RENDERED_THUMBNAIL_STYLES
|
136
153
|
|
137
154
|
@theming_request_scope = CnameThemingRequestScope.new
|
138
155
|
@public_entry_request_scope = lambda { |entries, request| entries }
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Pageflow
|
2
|
+
# Describes a type of file that can be managed in the editor and
|
3
|
+
# used in revisions.
|
4
|
+
class FileType
|
5
|
+
class NotFoundError < RuntimeError
|
6
|
+
end
|
7
|
+
|
8
|
+
# ActiveRecord model that represents the files of this type.
|
9
|
+
# @return {ActiveRecord::Model}
|
10
|
+
attr_reader :model
|
11
|
+
|
12
|
+
# Path of the partial used to render a json representation of the
|
13
|
+
# file.
|
14
|
+
# @return {String}
|
15
|
+
attr_reader :editor_partial
|
16
|
+
|
17
|
+
# Underscored plural name for usage in routes.
|
18
|
+
# @return {String}
|
19
|
+
attr_reader :collection_name
|
20
|
+
|
21
|
+
# Create file type to be returned in {PageType#file_types}.
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# Pageflow::FileType.new(model: Pageflow::Rainbow::File,
|
26
|
+
# editor_partial: 'pageflow/rainbow/editor/files/file')
|
27
|
+
#
|
28
|
+
# @param [Hash] options
|
29
|
+
# @option options [ActiveRecord::Base] :model Required. Model
|
30
|
+
# representing the file.
|
31
|
+
# @option options [String] :editor_partial Optional. Path of a
|
32
|
+
# partial to include in json representations of the file.
|
33
|
+
# @option options [String] :collection_name Optional. String to
|
34
|
+
# be used in routes. Defaults to `"pageflow_rainbow_file"` for
|
35
|
+
# model `Pageflow::Rainbow::File`.
|
36
|
+
def initialize(options)
|
37
|
+
@model = options.fetch(:model)
|
38
|
+
@editor_partial = options.fetch(:editor_partial, nil)
|
39
|
+
@collection_name = options.fetch(:collection_name, model.model_name.plural)
|
40
|
+
end
|
41
|
+
|
42
|
+
# @api private
|
43
|
+
def param_key
|
44
|
+
model.model_name.param_key.to_sym
|
45
|
+
end
|
46
|
+
|
47
|
+
# @api private
|
48
|
+
alias_method :short_name, :param_key
|
49
|
+
|
50
|
+
# @api private
|
51
|
+
def type_name
|
52
|
+
model.name
|
53
|
+
end
|
54
|
+
|
55
|
+
# @api private
|
56
|
+
def i18n_key
|
57
|
+
model.model_name.i18n_key
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Pageflow
|
2
|
+
class FileTypes
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
def initialize(page_types)
|
6
|
+
@page_types = page_types
|
7
|
+
end
|
8
|
+
|
9
|
+
def each(&block)
|
10
|
+
@page_types.map(&:file_types).flatten.uniq(&:model).each(&block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_by_collection_name!(collection_name)
|
14
|
+
detect do |file_type|
|
15
|
+
file_type.collection_name == collection_name
|
16
|
+
end || raise(FileType::NotFoundError, "No file type found for collection name '#{collection_name}'.")
|
17
|
+
end
|
18
|
+
|
19
|
+
def with_thumbnail_support
|
20
|
+
select do |file_type|
|
21
|
+
file_type.model.instance_methods.include?(:thumbnail_url)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/pageflow/page_type.rb
CHANGED
@@ -66,6 +66,37 @@ module Pageflow
|
|
66
66
|
[]
|
67
67
|
end
|
68
68
|
|
69
|
+
# File types to enable when this page type is registered..
|
70
|
+
# @returns {Array<FileType>}
|
71
|
+
def file_types
|
72
|
+
[]
|
73
|
+
end
|
74
|
+
|
75
|
+
# A list of hashes used to determine a thumbnail for a page. Each
|
76
|
+
# hash in the list must contain two keys: `attribute` and
|
77
|
+
# `file_collection`.
|
78
|
+
#
|
79
|
+
# For each item, the given attribute is fetched from the page
|
80
|
+
# configuration and used to find a file from the given
|
81
|
+
# collection. `file_collection` must equal the collection_name of
|
82
|
+
# a registered {FileType}. The first file found is used as
|
83
|
+
# thumbnail.
|
84
|
+
#
|
85
|
+
# @example Default return value
|
86
|
+
#
|
87
|
+
# [
|
88
|
+
# {attribute: 'thumbnail_image_id', file_collection: 'image_files'},
|
89
|
+
# {attribute: 'background_image_id', file_collection: 'image_files'}
|
90
|
+
# ]
|
91
|
+
#
|
92
|
+
# @returns {Array<Hash>}
|
93
|
+
def thumbnail_candidates
|
94
|
+
[
|
95
|
+
{attribute: 'thumbnail_image_id', file_collection: 'image_files'},
|
96
|
+
{attribute: 'background_image_id', file_collection: 'image_files'}
|
97
|
+
]
|
98
|
+
end
|
99
|
+
|
69
100
|
# View path of a template containing additional json to pass to
|
70
101
|
# the editor. The data is available in the javascript definition
|
71
102
|
# of the page type's configuration editor. By default nothing is
|
data/lib/pageflow/version.rb
CHANGED
@@ -169,15 +169,15 @@ module Pageflow
|
|
169
169
|
def hls_stream_definitions
|
170
170
|
[
|
171
171
|
{
|
172
|
-
:path => video_file.hls_medium.url(default_protocol: 'http'),
|
172
|
+
:path => video_file.hls_medium.url(host: :hls_origin, default_protocol: 'http'),
|
173
173
|
:bandwidth => 2250
|
174
174
|
},
|
175
175
|
{
|
176
|
-
:path => video_file.hls_low.url(default_protocol: 'http'),
|
176
|
+
:path => video_file.hls_low.url(host: :hls_origin, default_protocol: 'http'),
|
177
177
|
:bandwidth => 256
|
178
178
|
},
|
179
179
|
{
|
180
|
-
:path => video_file.hls_high.url(default_protocol: 'http'),
|
180
|
+
:path => video_file.hls_high.url(host: :hls_origin, default_protocol: 'http'),
|
181
181
|
:bandwidth => 3750
|
182
182
|
}
|
183
183
|
]
|
@@ -24,10 +24,10 @@ module Pageflow
|
|
24
24
|
state 'not_uploaded_to_s3'
|
25
25
|
end
|
26
26
|
|
27
|
-
trait :
|
27
|
+
trait :uploading_to_s3_failed do
|
28
28
|
attachment_on_filesystem File.open(Engine.root.join('spec', 'fixtures', 'et.ogg'))
|
29
29
|
attachment_on_s3 nil
|
30
|
-
state '
|
30
|
+
state 'uploading_to_s3_failed'
|
31
31
|
end
|
32
32
|
|
33
33
|
trait :waiting_for_confirmation do
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Pageflow
|
2
|
+
FactoryGirl.define do
|
3
|
+
hosted_file_model = Class.new(ActiveRecord::Base) do
|
4
|
+
self.table_name = 'test_hosted_files'
|
5
|
+
include HostedFile
|
6
|
+
end
|
7
|
+
|
8
|
+
factory :hosted_file, class: hosted_file_model do
|
9
|
+
trait :on_filesystem do
|
10
|
+
attachment_on_filesystem File.open(Engine.root.join('spec', 'fixtures', 'image.png'))
|
11
|
+
attachment_on_s3 nil
|
12
|
+
state 'not_uploaded_to_s3'
|
13
|
+
end
|
14
|
+
|
15
|
+
trait :uploading_to_s3_failed do
|
16
|
+
attachment_on_filesystem File.open(Engine.root.join('spec', 'fixtures', 'image.png'))
|
17
|
+
attachment_on_s3 nil
|
18
|
+
state 'uploading_to_s3_failed'
|
19
|
+
end
|
20
|
+
|
21
|
+
trait :uploaded_to_s3 do
|
22
|
+
attachment_on_s3 File.open(Engine.root.join('spec', 'fixtures', 'image.png'))
|
23
|
+
state 'uploaded_to_s3'
|
24
|
+
end
|
25
|
+
|
26
|
+
trait :with_overridden_keep_on_filesystem do
|
27
|
+
after(:build) do |hosted_file|
|
28
|
+
def hosted_file.keep_on_filesystem_after_upload_to_s3?
|
29
|
+
true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|