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.

Files changed (145) hide show
  1. checksums.yaml +8 -8
  2. data/app/assets/images/pageflow/audio_loop_pictogram.png +0 -0
  3. data/app/assets/images/pageflow/audio_loop_pictogram_small.png +0 -0
  4. data/app/assets/images/pageflow/ov-internal_links.png +0 -0
  5. data/app/assets/images/pageflow/placeholder_link_thumbnail.jpg +0 -0
  6. data/app/assets/images/pageflow/placeholder_link_thumbnail_large.jpg +0 -0
  7. data/app/assets/images/pageflow/placeholder_thumbnail.jpg +0 -0
  8. data/app/assets/javascripts/pageflow/audio_player.js +5 -0
  9. data/app/assets/javascripts/pageflow/editor/api.js +4 -0
  10. data/app/assets/javascripts/pageflow/editor/api/file_type.js +32 -0
  11. data/app/assets/javascripts/pageflow/editor/api/file_types.js +73 -0
  12. data/app/assets/javascripts/pageflow/editor/base.js +5 -0
  13. data/app/assets/javascripts/pageflow/editor/collections/file_usages_collection.js +13 -1
  14. data/app/assets/javascripts/pageflow/editor/collections/files_collection.js +54 -0
  15. data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +2 -14
  16. data/app/assets/javascripts/pageflow/editor/initializers/error_listener.js +8 -0
  17. data/app/assets/javascripts/pageflow/editor/initializers/setup_collections.js +5 -3
  18. data/app/assets/javascripts/pageflow/editor/initializers/setup_file_types.js +21 -0
  19. data/app/assets/javascripts/pageflow/editor/models/audio_file.js +1 -15
  20. data/app/assets/javascripts/pageflow/editor/models/encoded_file.js +32 -0
  21. data/app/assets/javascripts/pageflow/editor/models/entry.js +29 -63
  22. data/app/assets/javascripts/pageflow/editor/models/file_stage.js +7 -6
  23. data/app/assets/javascripts/pageflow/editor/models/hosted_file.js +20 -0
  24. data/app/assets/javascripts/pageflow/editor/models/image_file.js +8 -31
  25. data/app/assets/javascripts/pageflow/editor/models/mixins/file_with_type.js +3 -0
  26. data/app/assets/javascripts/pageflow/editor/models/mixins/stage_provider.js +11 -5
  27. data/app/assets/javascripts/pageflow/editor/models/mixins/transient_references.js +5 -0
  28. data/app/assets/javascripts/pageflow/editor/models/other_entry.js +9 -3
  29. data/app/assets/javascripts/pageflow/editor/models/page.js +9 -11
  30. data/app/assets/javascripts/pageflow/editor/models/uploaded_file.js +65 -0
  31. data/app/assets/javascripts/pageflow/editor/models/video_file.js +1 -14
  32. data/app/assets/javascripts/pageflow/editor/routers/sidebar_router.js +2 -9
  33. data/app/assets/javascripts/pageflow/editor/templates/file_item.jst.ejs +1 -1
  34. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio.js +4 -0
  35. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio_loop.js +23 -0
  36. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/background_image.js +4 -0
  37. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/background_video.js +4 -0
  38. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/internal_links.js +4 -0
  39. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/video.js +4 -0
  40. data/app/assets/javascripts/pageflow/editor/views/embedded/page_link_embedded_view.js +1 -1
  41. data/app/assets/javascripts/pageflow/editor/views/explorer_file_item_view.js +2 -0
  42. data/app/assets/javascripts/pageflow/editor/views/file_item_view.js +8 -1
  43. data/app/assets/javascripts/pageflow/editor/views/file_stage_item_view.js +8 -1
  44. data/app/assets/javascripts/pageflow/editor/views/files_explorer_view.js +11 -43
  45. data/app/assets/javascripts/pageflow/editor/views/files_view.js +11 -21
  46. data/app/assets/javascripts/pageflow/editor/views/input_view.js +1 -1
  47. data/app/assets/javascripts/pageflow/editor/views/inputs/file_input_view.js +6 -0
  48. data/app/assets/javascripts/pageflow/editor/views/inputs/select_input_view.js +5 -0
  49. data/app/assets/javascripts/pageflow/editor/views/mixins/selectable_view.js +7 -5
  50. data/app/assets/javascripts/pageflow/editor/views/uploader_view.js +15 -5
  51. data/app/assets/javascripts/pageflow/page_types/audio.js +1 -1
  52. data/app/assets/javascripts/pageflow/page_types/audio_loop.js +90 -0
  53. data/app/assets/javascripts/pageflow/page_types/video.js +1 -1
  54. data/app/assets/javascripts/pageflow/ready.js +17 -2
  55. data/app/assets/javascripts/pageflow/video_player/player_buffered_patch.js +13 -2
  56. data/app/assets/stylesheets/pageflow/mixins/pageflow.css.scss +9 -0
  57. data/app/assets/stylesheets/pageflow/mixins/shadow.css.scss +12 -1
  58. data/app/assets/stylesheets/pageflow/overview.css.scss +3 -3
  59. data/app/assets/stylesheets/pageflow/page_types.css.scss +2 -0
  60. data/app/assets/stylesheets/pageflow/page_types/audio.css.scss +2 -13
  61. data/app/assets/stylesheets/pageflow/page_types/audio_loop.css.scss +0 -0
  62. data/app/assets/stylesheets/pageflow/page_types/video.css.scss +4 -0
  63. data/app/assets/stylesheets/pageflow/player_controls.css.scss +72 -6
  64. data/app/assets/stylesheets/pageflow/themes/default/navigation.css.scss +3 -0
  65. data/app/assets/stylesheets/pageflow/themes/default/overview.css.scss +3 -0
  66. data/app/controllers/pageflow/editor/files_controller.rb +11 -24
  67. data/app/controllers/pageflow/{video_files_controller.rb → files_controller.rb} +6 -2
  68. data/app/helpers/pageflow/audio_files_helper.rb +40 -0
  69. data/app/helpers/pageflow/file_thumbnails_helper.rb +18 -0
  70. data/app/helpers/pageflow/pages_helper.rb +3 -24
  71. data/app/jobs/pageflow/upload_file_to_s3_job.rb +2 -2
  72. data/app/models/concerns/pageflow/hosted_file.rb +93 -0
  73. data/app/models/pageflow/audio_file.rb +1 -12
  74. data/app/models/pageflow/draft_entry.rb +2 -11
  75. data/app/models/pageflow/image_file.rb +14 -14
  76. data/app/models/pageflow/page.rb +7 -24
  77. data/app/models/pageflow/published_entry.rb +3 -2
  78. data/app/models/pageflow/revision.rb +7 -0
  79. data/app/models/pageflow/thumbnail_file_resolver.rb +33 -0
  80. data/app/models/pageflow/video_file.rb +10 -34
  81. data/app/models/pageflow/zencoder_attachment.rb +2 -2
  82. data/app/state_machines/pageflow/encoded_file_state_machine.rb +8 -20
  83. data/app/state_machines/pageflow/image_file_state_machine.rb +4 -0
  84. data/app/views/pageflow/audio_files/_audio_file.html.erb +1 -0
  85. data/app/views/pageflow/audio_files/_script_tag.html.erb +3 -0
  86. data/app/views/pageflow/config/_editor_seeds.json.jbuilder +1 -0
  87. data/app/views/pageflow/editor/audio_files/_audio_file.json.jbuilder +0 -6
  88. data/app/views/pageflow/editor/files/_file.json.jbuilder +16 -0
  89. data/app/views/pageflow/editor/files/create.json.jbuilder +1 -1
  90. data/app/views/pageflow/editor/files/index.json.jbuilder +4 -1
  91. data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +1 -8
  92. data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +0 -8
  93. data/app/views/pageflow/entries/_entry.html.erb +2 -2
  94. data/app/views/pageflow/entries/_multimedia_alert.html.erb +14 -7
  95. data/app/views/pageflow/entries/_social_meta_tags.html.erb +1 -1
  96. data/app/views/pageflow/entries/edit.html.erb +6 -4
  97. data/app/views/pageflow/entries/navigation/_bar_top.html.erb +1 -1
  98. data/app/views/pageflow/entries/navigation/_page.html.erb +2 -2
  99. data/app/views/pageflow/entries/overview/_chapter.html.erb +3 -1
  100. data/app/views/pageflow/entries/overview/_entry.html.erb +2 -1
  101. data/app/views/pageflow/entries/overview/_page.html.erb +1 -1
  102. data/app/views/pageflow/entries/show.css.erb +1 -21
  103. data/app/views/pageflow/entries/show.json.jbuilder +8 -3
  104. data/app/views/pageflow/file_types/_thumbnails.css.erb +7 -0
  105. data/app/views/pageflow/files/show.html.erb +1 -0
  106. data/app/views/pageflow/page_types/_page_type.json.jbuilder +4 -0
  107. data/app/views/pageflow/pages/templates/_audio.html.erb +6 -5
  108. data/app/views/pageflow/pages/templates/_audio_loop.html.erb +34 -0
  109. data/app/views/pageflow/video_files/_video_file.html.erb +1 -0
  110. data/config/initializers/page_type_helpers.rb +2 -2
  111. data/config/initializers/paperclip.rb +32 -0
  112. data/config/initializers/zencoder.rb +3 -3
  113. data/config/locales/activerecord.de.yml +3 -2
  114. data/config/locales/pageflow/audio.de.yml +4 -0
  115. data/config/locales/pageflow/editor/errors.de.yml +6 -0
  116. data/config/routes.rb +4 -10
  117. data/lib/generators/pageflow/initializer/templates/pageflow.rb +2 -1
  118. data/lib/pageflow.rb +5 -3
  119. data/lib/pageflow/ability_mixin.rb +2 -2
  120. data/lib/pageflow/built_in_page_type.rb +40 -7
  121. data/lib/pageflow/configuration.rb +17 -0
  122. data/lib/pageflow/file_type.rb +60 -0
  123. data/lib/pageflow/file_types.rb +25 -0
  124. data/lib/pageflow/page_type.rb +31 -0
  125. data/lib/pageflow/version.rb +1 -1
  126. data/lib/pageflow/zencoder_video_output_definition.rb +3 -3
  127. data/spec/factories/audio_files.rb +2 -2
  128. data/spec/factories/hosted_files.rb +35 -0
  129. data/spec/factories/video_files.rb +2 -2
  130. metadata +37 -18
  131. data/app/assets/images/pageflow/themes/default/logo_navi.png +0 -0
  132. data/app/assets/images/pageflow/themes/default/logo_navi_invert.png +0 -0
  133. data/app/assets/javascripts/pageflow/editor/collections/audio_files_collection.js +0 -7
  134. data/app/assets/javascripts/pageflow/editor/collections/image_files_collection.js +0 -8
  135. data/app/assets/javascripts/pageflow/editor/collections/mixins/files_collection.js +0 -42
  136. data/app/assets/javascripts/pageflow/editor/collections/video_files_collection.js +0 -8
  137. data/app/assets/javascripts/pageflow/editor/models/mixins/encoded_file.js +0 -51
  138. data/app/assets/javascripts/pageflow/editor/models/mixins/file.js +0 -31
  139. data/app/assets/javascripts/pageflow/editor/views/audio_file_item_view.js +0 -14
  140. data/app/assets/javascripts/pageflow/editor/views/image_file_item_view.js +0 -10
  141. data/app/assets/javascripts/pageflow/editor/views/video_file_item_view.js +0 -18
  142. data/app/controllers/pageflow/editor/audio_files_controller.rb +0 -11
  143. data/app/controllers/pageflow/editor/image_files_controller.rb +0 -11
  144. data/app/controllers/pageflow/editor/video_files_controller.rb +0 -11
  145. data/app/views/pageflow/video_files/show.html.erb +0 -1
@@ -0,0 +1,93 @@
1
+ module Pageflow
2
+ module HostedFile
3
+ extend ActiveSupport::Concern
4
+ include UploadedFile
5
+
6
+ included do
7
+ has_attached_file(:attachment_on_filesystem, Pageflow.config.paperclip_filesystem_default_options)
8
+ has_attached_file(:attachment_on_s3, Pageflow.config.paperclip_s3_default_options)
9
+
10
+ state_machine initial: 'not_uploaded_to_s3' do
11
+ extend StateMachineJob::Macro
12
+
13
+ state 'not_uploaded_to_s3'
14
+ state 'uploading_to_s3'
15
+ state 'uploaded_to_s3'
16
+ state 'uploading_to_s3_failed'
17
+
18
+ event :publish do
19
+ transition 'not_uploaded_to_s3' => 'uploading_to_s3'
20
+ end
21
+
22
+ event :retry do
23
+ transition 'uploading_to_s3_failed' => 'uploading_to_s3'
24
+ end
25
+
26
+ job UploadFileToS3Job do
27
+ on_enter 'uploading_to_s3'
28
+ result :pending, retry_after: 30.seconds
29
+ result :ok, state: 'uploaded_to_s3'
30
+ result :error, state: 'uploading_to_s3_failed'
31
+ end
32
+
33
+ event :process
34
+ end
35
+ end
36
+
37
+ def attachment
38
+ attachment_on_s3.present? ? attachment_on_s3 : attachment_on_filesystem
39
+ end
40
+
41
+ def attachment=(value)
42
+ self.attachment_on_filesystem = value
43
+ end
44
+
45
+ def keep_on_filesystem_after_upload_to_s3?
46
+ false
47
+ end
48
+
49
+ def retryable?
50
+ can_retry?
51
+ end
52
+
53
+ def url
54
+ if attachment_on_s3.present?
55
+ attachment.url
56
+ end
57
+ end
58
+
59
+ def self.columns(t)
60
+ t.belongs_to(:entry, index: true)
61
+ t.belongs_to(:uploader, index: true)
62
+
63
+ t.string(:state)
64
+ t.string(:rights)
65
+
66
+ t.string(:attachment_on_filesystem_file_name)
67
+ t.string(:attachment_on_filesystem_content_type)
68
+ t.integer(:attachment_on_filesystem_file_size, limit: 8)
69
+ t.datetime(:attachment_on_filesystem_updated_at)
70
+
71
+ t.string(:attachment_on_s3_file_name)
72
+ t.string(:attachment_on_s3_content_type)
73
+ t.integer(:attachment_on_s3_file_size, limit: 8)
74
+ t.datetime(:attachment_on_s3_updated_at)
75
+
76
+ t.timestamps
77
+ end
78
+
79
+ module ClassMethods
80
+ def processing_state_machine(&block)
81
+ state_machine do
82
+ extend StateMachineJob::Macro
83
+
84
+ after_transition(any => 'uploaded_to_s3') do |hosted_file|
85
+ hosted_file.process!
86
+ end
87
+
88
+ instance_eval(&block)
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,21 +1,10 @@
1
1
  module Pageflow
2
2
  class AudioFile < ActiveRecord::Base
3
+ include HostedFile
3
4
  include EncodedFileStateMachine
4
- include UploadedFile
5
5
 
6
6
  belongs_to :confirmed_by, :class_name => 'User'
7
7
 
8
- has_attached_file(:attachment_on_filesystem, Pageflow.config.paperclip_filesystem_default_options)
9
- has_attached_file(:attachment_on_s3, Pageflow.config.paperclip_s3_default_options)
10
-
11
- def attachment
12
- attachment_on_s3
13
- end
14
-
15
- def attachment=(value)
16
- self.attachment_on_filesystem = value
17
- end
18
-
19
8
  def attachment_s3_url
20
9
  "s3://#{File.join(attachment_on_s3.bucket_name, attachment_on_s3.path)}"
21
10
  end
@@ -12,6 +12,7 @@ module Pageflow
12
12
 
13
13
  delegate(:title, :summary, :credits, :manual_start,
14
14
  :chapters, :pages,
15
+ :files,
15
16
  :image_files, :video_files, :audio_files,
16
17
  :to => :draft)
17
18
 
@@ -32,7 +33,7 @@ module Pageflow
32
33
  end
33
34
 
34
35
  def remove_file(file)
35
- collection_containing(file).destroy(file)
36
+ draft.file_usages.where(file: file).destroy_all
36
37
  file.destroy if file.usages.empty?
37
38
  end
38
39
 
@@ -73,15 +74,5 @@ module Pageflow
73
74
  def home_button
74
75
  HomeButton.new(draft, theming)
75
76
  end
76
-
77
- private
78
-
79
- def collection_containing(file)
80
- collection_for(file.class.name)
81
- end
82
-
83
- def collection_for(model_name)
84
- draft.send(model_name.to_s.underscore.split('/').last.pluralize)
85
- end
86
77
  end
87
78
  end
@@ -7,20 +7,10 @@ module Pageflow
7
7
 
8
8
  has_attached_file(:processed_attachment, Pageflow.config.paperclip_s3_default_options
9
9
  .merge(:default_url => ':pageflow_placeholder',
10
- :styles => {
11
- :thumbnail => ["100x100#", :JPG],
12
- :navigation_thumbnail_small => ['85x47#', :JPG],
13
- :navigation_thumbnail_large => ['170x95#', :JPG],
14
- :thumbnail_overview_desktop => ['230x72#', :JPG],
15
- :thumbnail_overview_mobile => ['200x112#', :JPG],
16
-
17
- :link_thumbnail => ['192x108#', :JPG],
18
- :link_thumbnail_large => ['394x226#', :JPG],
19
-
20
- :print => ['300x300>', :JPG],
21
- :medium => ['1024x1024>', :JPG],
22
- :large => ['1920x1920>', :JPG]
23
- },
10
+ :styles => Pageflow.config.thumbnail_styles
11
+ .merge(:print => ['300x300>', :JPG],
12
+ :medium => ['1024x1024>', :JPG],
13
+ :large => ['1920x1920>', :JPG]),
24
14
  :convert_options => {
25
15
  :print => "-quality 10 -interlace Plane",
26
16
  :medium => "-quality 70 -interlace Plane",
@@ -37,6 +27,16 @@ module Pageflow
37
27
  self.unprocessed_attachment = value
38
28
  end
39
29
 
30
+ def thumbnail_url(*args)
31
+ processed_attachment.url(*args)
32
+ end
33
+
34
+ def url
35
+ if processed_attachment.present?
36
+ attachment.url(:large)
37
+ end
38
+ end
39
+
40
40
  private
41
41
 
42
42
  def save_image_dimensions
@@ -16,33 +16,16 @@ module Pageflow
16
16
  configuration['title'].presence || configuration['additional_title']
17
17
  end
18
18
 
19
- def thumbnail
20
- model_name, attachment, property, model_class = thumbnail_definition
19
+ def thumbnail_url(*args)
20
+ thumbnail_file.thumbnail_url(*args)
21
+ end
21
22
 
22
- begin
23
- model_name.to_s.camelcase.constantize.find(configuration[property]).send(attachment)
24
- rescue ActiveRecord::RecordNotFound
25
- ImageFile.new.processed_attachment
26
- end
23
+ def thumbnail_file
24
+ ThumbnailFileResolver.new(page_type.thumbnail_candidates, configuration).find
27
25
  end
28
26
 
29
- def thumbnail_definition
30
- # TODO: this has to be refactored to be page type agnostic
31
- if template == 'video' || template == 'background_video'
32
- if configuration['poster_image_id'].present?
33
- ['pageflow/image_file', :processed_attachment, 'poster_image_id', 'image_file']
34
- else
35
- ['pageflow/video_file', :poster, 'video_file_id', 'video_file']
36
- end
37
- else
38
- if configuration['thumbnail_image_id'].present?
39
- ['pageflow/image_file', :processed_attachment, 'thumbnail_image_id', 'image_file']
40
- elsif configuration['after_image_id'].present?
41
- ['pageflow/image_file', :processed_attachment, 'after_image_id','image_file']
42
- else
43
- ['pageflow/image_file', :processed_attachment, 'background_image_id', 'image_file']
44
- end
45
- end
27
+ def page_type
28
+ Pageflow.config.lookup_page_type(template)
46
29
  end
47
30
 
48
31
  def configuration
@@ -8,6 +8,7 @@ module Pageflow
8
8
  delegate(:account, :theming, :to_model, :to_key, :persisted?, :to => :entry)
9
9
 
10
10
  delegate(:chapters, :pages,
11
+ :files,
11
12
  :image_files, :video_files, :audio_files,
12
13
  :title, :summary, :credits, :manual_start,
13
14
  :to => :revision)
@@ -26,8 +27,8 @@ module Pageflow
26
27
  revision.cache_key
27
28
  end
28
29
 
29
- def thumbnail
30
- pages.first.try(:thumbnail) || ImageFile.new.processed_attachment
30
+ def thumbnail_url(*args)
31
+ pages.first.try(:thumbnail_url, *args) || ImageFile.new.processed_attachment.url(*args)
31
32
  end
32
33
 
33
34
  def self.find(id, scope = Entry)
@@ -33,6 +33,13 @@ module Pageflow
33
33
  validate :published_until_unchanged, :if => :published_until_was_in_past?
34
34
  validate :published_until_blank, :if => :published_at_blank?
35
35
 
36
+ def files(model)
37
+ model
38
+ .select("#{model.table_name}.*, pageflow_file_usages.id AS usage_id")
39
+ .joins(:usages)
40
+ .where(pageflow_file_usages: {revision_id: id})
41
+ end
42
+
36
43
  def creator
37
44
  super || NullUser.new
38
45
  end
@@ -0,0 +1,33 @@
1
+ module Pageflow
2
+ class ThumbnailFileResolver < Struct.new(:candidates, :configuration)
3
+ class Null
4
+ def thumbnail_url(*args)
5
+ ImageFile.new.processed_attachment.url(*args)
6
+ end
7
+
8
+ def blank?
9
+ true
10
+ end
11
+ end
12
+
13
+ def find
14
+ candidates.reduce(nil) do |result, candidate|
15
+ result || file_model(candidate).find_by_id(record_id(candidate))
16
+ end || Null.new
17
+ end
18
+
19
+ private
20
+
21
+ def file_model(candidate)
22
+ file_type(candidate).model
23
+ end
24
+
25
+ def file_type(candidate)
26
+ Pageflow.config.file_types.find_by_collection_name!(candidate.fetch(:file_collection))
27
+ end
28
+
29
+ def record_id(candidate)
30
+ configuration[candidate.fetch(:attribute)]
31
+ end
32
+ end
33
+ end
@@ -1,30 +1,16 @@
1
1
  module Pageflow
2
2
  class VideoFile < ActiveRecord::Base
3
+ include HostedFile
3
4
  include EncodedFileStateMachine
4
- include UploadedFile
5
5
 
6
6
  belongs_to :confirmed_by, :class_name => 'User'
7
7
 
8
- has_attached_file(:attachment_on_filesystem, Pageflow.config.paperclip_filesystem_default_options)
9
-
10
- has_attached_file(:attachment_on_s3, Pageflow.config.paperclip_s3_default_options)
11
-
12
8
  has_attached_file(:poster, Pageflow.config.paperclip_s3_default_options
13
9
  .merge(:default_url => ':pageflow_placeholder',
14
- :styles => {
15
- :thumbnail => ["100x100#", :JPG],
16
- :navigation_thumbnail_small => ['85x47#', :JPG],
17
- :navigation_thumbnail_large => ['170x95#', :JPG],
18
- :thumbnail_overview_desktop => ['230x72#', :JPG],
19
- :thumbnail_overview_mobile => ['200x112#', :JPG],
20
-
21
- :link_thumbnail => ['192x108#', :JPG],
22
- :link_thumbnail_large => ['394x226#', :JPG],
23
-
24
- :medium => ['1920x1920>', :JPG],
25
- :large => ['1024x1024>', :JPG],
26
- :print => ['300x300>', :JPG]
27
- },
10
+ :styles => Pageflow.config.thumbnail_styles
11
+ .merge(:medium => ['1920x1920>', :JPG],
12
+ :large => ['1024x1024>', :JPG],
13
+ :print => ['300x300>', :JPG]),
28
14
  :convert_options => {
29
15
  :medium => "-quality 90 -interlace Plane",
30
16
  :large => "-quality 90 -interlace Plane",
@@ -34,26 +20,16 @@ module Pageflow
34
20
  has_attached_file(:thumbnail, Pageflow.config.paperclip_s3_default_options
35
21
  .merge(:default_url => ':pageflow_placeholder',
36
22
  :default_style => :thumbnail,
37
- :styles => {
38
- :thumbnail => ["100x100#", :JPG],
39
- :navigation_thumbnail_small => ['85x47#', :JPG],
40
- :navigation_thumbnail_large => ['170x95#', :JPG],
41
- :thumbnail_overview_desktop => ['230x72#', :JPG],
42
- :thumbnail_overview_mobile => ['200x112#', :JPG],
43
- :medium => ['1920x1920>', :JPG],
44
- :large => ['1024x1024>', :JPG],
45
- },
23
+ :styles => Pageflow.config.thumbnail_styles
24
+ .merge(:medium => ['1920x1920>', :JPG],
25
+ :large => ['1024x1024>', :JPG]),
46
26
  :convert_options => {
47
27
  :medium => "-quality 60 -interlace Plane",
48
28
  :large => "-quality 60 -interlace Plane"
49
29
  }))
50
30
 
51
- def attachment
52
- attachment_on_s3.present? ? attachment_on_s3 : attachment_on_filesystem
53
- end
54
-
55
- def attachment=(value)
56
- self.attachment_on_filesystem = value
31
+ def thumbnail_url(*args)
32
+ poster.url(*args)
57
33
  end
58
34
 
59
35
  def attachment_s3_url
@@ -14,7 +14,7 @@ module Pageflow
14
14
  def initialize(instance, file_name_pattern, options = {})
15
15
  @instance = instance
16
16
  @file_name_pattern = file_name_pattern
17
- @options = options.merge(default_options)
17
+ @options = options.reverse_merge(default_options)
18
18
 
19
19
  @styles = {}
20
20
  end
@@ -47,7 +47,7 @@ module Pageflow
47
47
  private
48
48
 
49
49
  def ensure_default_protocol(url, url_options)
50
- url =~ /^http/ ? url : [url_options[:default_protocol], url].compact.join(':')
50
+ url =~ %r'^//' ? [url_options[:default_protocol], url].compact.join(':') : url
51
51
  end
52
52
 
53
53
  def url_pattern(url_options)
@@ -3,11 +3,7 @@ module Pageflow
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- state_machine :initial => 'not_uploaded_to_s3' do
7
- extend StateMachineJob::Macro
8
-
9
- state 'not_uploaded_to_s3'
10
- state 'uploading_to_s3'
6
+ processing_state_machine do
11
7
  state 'waiting_for_meta_data'
12
8
  state 'fetching_meta_data'
13
9
  state 'waiting_for_confirmation'
@@ -15,17 +11,15 @@ module Pageflow
15
11
  state 'encoding'
16
12
  state 'encoded'
17
13
 
18
- state 'upload_to_s3_failed'
19
14
  state 'fetching_meta_data_failed'
20
15
  state 'encoding_failed'
21
16
 
22
- event :publish do
23
- transition 'not_uploaded_to_s3' => 'uploading_to_s3'
17
+ event :process do
18
+ transition any => 'waiting_for_meta_data', :if => lambda { Pageflow.config.confirm_encoding_jobs }
19
+ transition any => 'waiting_for_encoding'
24
20
  end
25
21
 
26
22
  event :retry do
27
- transition 'upload_to_s3_failed' => 'uploading_to_s3'
28
-
29
23
  transition 'encoding_failed' => 'waiting_for_confirmation', :if => lambda { Pageflow.config.confirm_encoding_jobs }
30
24
  transition 'encoded' => 'waiting_for_confirmation', :if => lambda { Pageflow.config.confirm_encoding_jobs }
31
25
 
@@ -33,16 +27,6 @@ module Pageflow
33
27
  transition 'encoded' => 'waiting_for_encoding'
34
28
  end
35
29
 
36
- job UploadFileToS3Job do
37
- on_enter 'uploading_to_s3'
38
- result :pending, :retry_after => 30.seconds
39
-
40
- result :ok, :state => 'waiting_for_meta_data', :if => lambda { Pageflow.config.confirm_encoding_jobs }
41
- result :ok, :state => 'waiting_for_encoding'
42
-
43
- result :error => 'uploading_to_s3_failed'
44
- end
45
-
46
30
  job RequestMetaDataFromZencoderJob do
47
31
  on_enter 'waiting_for_meta_data'
48
32
  result :ok => 'fetching_meta_data'
@@ -86,5 +70,9 @@ module Pageflow
86
70
  end
87
71
  end
88
72
  end
73
+
74
+ def retryable?
75
+ can_retry? && !encoded?
76
+ end
89
77
  end
90
78
  end