pageflow 0.1.0 → 0.2.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 (183) hide show
  1. checksums.yaml +8 -8
  2. data/admins/pageflow/accounts.rb +17 -49
  3. data/admins/pageflow/entry.rb +13 -6
  4. data/app/assets/fonts/pageflow/entypo.eot +0 -0
  5. data/app/assets/fonts/pageflow/entypo.svg +834 -0
  6. data/app/assets/fonts/pageflow/entypo.ttf +0 -0
  7. data/app/assets/fonts/pageflow/entypo.woff +0 -0
  8. data/app/assets/fonts/pageflow/fontawesome-webfont.eot +0 -0
  9. data/app/assets/fonts/pageflow/fontawesome-webfont.otf +0 -0
  10. data/app/assets/fonts/pageflow/fontawesome-webfont.svg +504 -0
  11. data/app/assets/fonts/pageflow/fontawesome-webfont.ttf +0 -0
  12. data/app/assets/fonts/pageflow/fontawesome-webfont.woff +0 -0
  13. data/app/assets/images/pageflow/themes/default/audio_sprite.png +0 -0
  14. data/app/assets/images/pageflow/themes/default/image_sprite.png +0 -0
  15. data/app/assets/images/pageflow/themes/default/internal_links_sprite.png +0 -0
  16. data/app/assets/images/pageflow/themes/default/loading_spinner.png +0 -0
  17. data/app/assets/images/pageflow/themes/default/loading_spinner_bg.png +0 -0
  18. data/app/assets/images/pageflow/themes/default/logo_header.png +0 -0
  19. data/app/assets/images/pageflow/themes/default/logo_header_invert.png +0 -0
  20. data/app/assets/images/pageflow/themes/default/scroll_indicator_sprite.png +0 -0
  21. data/app/assets/images/pageflow/themes/default/text_sprite.png +0 -0
  22. data/app/assets/images/pageflow/themes/default/video_sprite.png +0 -0
  23. data/app/assets/javascripts/pageflow/editor/base.js +1 -0
  24. data/app/assets/javascripts/pageflow/editor/collections/mixins/files_collection.js +11 -0
  25. data/app/assets/javascripts/pageflow/editor/collections/subset_collection.js +11 -0
  26. data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +8 -1
  27. data/app/assets/javascripts/pageflow/editor/initializers/setup_config.js +3 -0
  28. data/app/assets/javascripts/pageflow/editor/models/audio_file.js +1 -0
  29. data/app/assets/javascripts/pageflow/editor/models/chapter.js +1 -0
  30. data/app/assets/javascripts/pageflow/editor/models/configuration.js +1 -0
  31. data/app/assets/javascripts/pageflow/editor/models/encoding_confirmation.js +45 -0
  32. data/app/assets/javascripts/pageflow/editor/models/entry.js +6 -14
  33. data/app/assets/javascripts/pageflow/editor/models/entry_publication.js +40 -0
  34. data/app/assets/javascripts/pageflow/editor/models/file_stage.js +5 -0
  35. data/app/assets/javascripts/pageflow/editor/models/image_file.js +5 -0
  36. data/app/assets/javascripts/pageflow/editor/models/mixins/encoded_file.js +31 -14
  37. data/app/assets/javascripts/pageflow/editor/models/mixins/files_count_watcher.js +4 -0
  38. data/app/assets/javascripts/pageflow/editor/models/mixins/stage_provider.js +2 -2
  39. data/app/assets/javascripts/pageflow/editor/models/other_entry.js +1 -0
  40. data/app/assets/javascripts/pageflow/editor/models/page.js +1 -0
  41. data/app/assets/javascripts/pageflow/editor/models/video_file.js +1 -0
  42. data/app/assets/javascripts/pageflow/editor/routers/sidebar_router.js +2 -0
  43. data/app/assets/javascripts/pageflow/editor/templates/confirm_encoding.jst.ejs +15 -0
  44. data/app/assets/javascripts/pageflow/editor/templates/confirmable_file_item.jst.ejs +7 -0
  45. data/app/assets/javascripts/pageflow/editor/templates/{quota_decorator.jst.ejs → entry_publication_quota_decorator.jst.ejs} +1 -1
  46. data/app/assets/javascripts/pageflow/editor/templates/files_explorer.jst.ejs +5 -3
  47. data/app/assets/javascripts/pageflow/editor/templates/notifications.jst.ejs +6 -1
  48. data/app/assets/javascripts/pageflow/editor/views/confirm_encoding_view.js +76 -0
  49. data/app/assets/javascripts/pageflow/editor/views/confirmable_file_item_view.js +42 -0
  50. data/app/assets/javascripts/pageflow/editor/views/entry_publication_quota_decorator_view.js +49 -0
  51. data/app/assets/javascripts/pageflow/editor/views/file_meta_data_item_view.js +1 -1
  52. data/app/assets/javascripts/pageflow/editor/views/file_stage_item_view.js +1 -0
  53. data/app/assets/javascripts/pageflow/editor/views/file_thumbnail_view.js +2 -1
  54. data/app/assets/javascripts/pageflow/editor/views/files_explorer_view.js +3 -3
  55. data/app/assets/javascripts/pageflow/editor/views/input_view.js +2 -2
  56. data/app/assets/javascripts/pageflow/editor/views/inputs/select_input_view.js +1 -1
  57. data/app/assets/javascripts/pageflow/editor/views/notifications_view.js +12 -1
  58. data/app/assets/javascripts/pageflow/editor/views/publish_entry_view.js +5 -4
  59. data/app/assets/javascripts/pageflow/page_types/video.js +0 -1
  60. data/app/assets/javascripts/pageflow/widgets/player_controls.js +1 -1
  61. data/app/assets/stylesheets/pageflow/editor/base.css.scss +1 -0
  62. data/app/assets/stylesheets/pageflow/editor/confirmable_files.css.scss +67 -0
  63. data/app/assets/stylesheets/pageflow/editor/file_stages.css.scss +5 -0
  64. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.css.scss +10 -0
  65. data/app/assets/stylesheets/pageflow/editor/files.css.scss +3 -1
  66. data/app/assets/stylesheets/pageflow/editor/files_explorer.css.scss +30 -2
  67. data/app/assets/stylesheets/pageflow/editor/files_gallery.css.scss +1 -2
  68. data/app/assets/stylesheets/pageflow/editor/notifications.css.scss +18 -1
  69. data/app/assets/stylesheets/pageflow/editor/quotas.css.scss +1 -1
  70. data/app/assets/stylesheets/pageflow/editor/tabs_view.css.scss +2 -0
  71. data/app/assets/stylesheets/pageflow/mixins.css.scss +2 -1
  72. data/app/assets/stylesheets/pageflow/mixins/icons.css.scss +4 -308
  73. data/app/assets/stylesheets/pageflow/mixins/icons/entypo.css.scss +295 -0
  74. data/app/assets/stylesheets/pageflow/mixins/icons/fontawesome.css.scss +520 -0
  75. data/app/assets/stylesheets/pageflow/mixins/label.css.scss +5 -0
  76. data/app/assets/stylesheets/pageflow/themes/default.css.scss +11 -0
  77. data/app/assets/stylesheets/pageflow/themes/default/anchors.css.scss +3 -8
  78. data/app/assets/stylesheets/pageflow/themes/default/loading_spinner.css.scss +96 -9
  79. data/app/assets/stylesheets/pageflow/themes/default/navigation.css.scss +128 -183
  80. data/app/assets/stylesheets/pageflow/themes/default/overview.css.scss +48 -6
  81. data/app/assets/stylesheets/pageflow/themes/default/page.css.scss +3 -6
  82. data/app/assets/stylesheets/pageflow/themes/default/player_controls.css.scss +31 -0
  83. data/app/controllers/concerns/pageflow/quota_verification.rb +4 -4
  84. data/app/controllers/pageflow/editor/encoding_confirmations_controller.rb +45 -0
  85. data/app/controllers/pageflow/editor/entry_publications_controller.rb +48 -0
  86. data/app/controllers/pageflow/entries_controller.rb +8 -3
  87. data/app/controllers/pageflow/revisions_controller.rb +0 -10
  88. data/app/controllers/pageflow/video_files_controller.rb +7 -1
  89. data/app/helpers/pageflow/config_helper.rb +9 -0
  90. data/app/helpers/pageflow/entries_helper.rb +3 -3
  91. data/app/helpers/pageflow/pages_helper.rb +2 -2
  92. data/app/helpers/pageflow/quota_helper.rb +1 -1
  93. data/app/jobs/pageflow/poll_meta_data_from_zencoder_job.rb +9 -0
  94. data/app/jobs/pageflow/poll_zencoder_job.rb +3 -3
  95. data/app/jobs/pageflow/request_meta_data_from_zencoder_job.rb +14 -0
  96. data/app/jobs/pageflow/submit_file_to_zencoder_job.rb +0 -2
  97. data/app/models/pageflow/account.rb +9 -4
  98. data/app/models/pageflow/audio_file.rb +2 -0
  99. data/app/models/pageflow/draft_entry.rb +5 -1
  100. data/app/models/pageflow/edit_lock.rb +2 -0
  101. data/app/models/pageflow/encoding_confirmation.rb +40 -0
  102. data/app/models/pageflow/entry.rb +3 -3
  103. data/app/models/pageflow/entry_publication.rb +27 -0
  104. data/app/models/pageflow/page.rb +6 -6
  105. data/app/models/pageflow/published_entry.rb +3 -3
  106. data/app/models/pageflow/theming.rb +20 -0
  107. data/app/models/pageflow/video_file.rb +2 -0
  108. data/app/state_machines/pageflow/encoded_file_state_machine.rb +41 -1
  109. data/app/views/admin/accounts/_account_details.html.arb +5 -0
  110. data/app/views/admin/accounts/_entries_panel.html.arb +15 -0
  111. data/app/views/admin/accounts/_form.html.erb +18 -0
  112. data/app/views/admin/accounts/_theming_details.html.arb +6 -0
  113. data/app/views/admin/accounts/_users_panel.html.arb +15 -0
  114. data/app/views/admin/entries/_links.html.arb +3 -2
  115. data/app/views/admin/users/_form.html.erb +2 -2
  116. data/app/views/admin/users/_quota_exhausted.html.erb +1 -0
  117. data/app/views/pageflow/config/_editor_seeds.json.jbuilder +2 -0
  118. data/app/views/pageflow/editor/encoding_confirmations/_summary.html.erb +1 -0
  119. data/app/views/pageflow/editor/encoding_confirmations/check.json.jbuilder +3 -0
  120. data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +11 -0
  121. data/app/views/pageflow/editor/quotas/{_published_entries_exceeded.html.erb → _published_entries_exhausted.html.erb} +1 -1
  122. data/app/views/pageflow/entries/_entry.html.erb +1 -1
  123. data/app/views/pageflow/entries/_navigation.html.erb +2 -2
  124. data/app/views/pageflow/entries/_social_meta_tags.html.erb +2 -2
  125. data/app/views/pageflow/entries/_theming.css.erb +1 -0
  126. data/app/views/pageflow/entries/edit.html.erb +3 -1
  127. data/app/views/pageflow/entries/navigation/_bar_top.html.erb +2 -2
  128. data/app/views/pageflow/entries/show.css.erb +3 -1
  129. data/app/views/pageflow/entries/show.html.erb +13 -13
  130. data/config/initializers/page_type_helpers.rb +1 -0
  131. data/config/locales/activerecord.de.yml +41 -22
  132. data/config/locales/admin/accounts.yml +0 -1
  133. data/config/locales/admin/entries.yml +6 -2
  134. data/config/locales/admin/themings.yml +7 -0
  135. data/config/locales/admin/users/me.de.yml +2 -2
  136. data/config/locales/editor.de.yml +9 -3
  137. data/config/locales/quotas.de.yml +1 -1
  138. data/config/routes.rb +34 -27
  139. data/db/migrate/20140624135420_create_themings.rb +15 -0
  140. data/db/migrate/20140624135421_create_themings_for_existing_accounts.rb +26 -0
  141. data/db/migrate/20140624135422_change_theme_references_to_theming_references.rb +45 -0
  142. data/db/migrate/20140624135423_remove_attributes_from_themes.rb +10 -0
  143. data/db/migrate/20140624135424_create_accounts_themes_join_table.rb +8 -0
  144. data/db/migrate/20140624135425_move_cname_from_account_to_theming.rb +21 -0
  145. data/db/migrate/20140625184800_drop_themes.rb +14 -0
  146. data/db/migrate/20140704110631_add_confirmed_by_to_encoded_files.rb +6 -0
  147. data/lib/generators/pageflow/initializer/templates/pageflow.rb +9 -0
  148. data/lib/generators/pageflow/theme/theme_generator.rb +28 -0
  149. data/lib/pageflow.rb +9 -2
  150. data/lib/pageflow/ability_mixin.rb +1 -1
  151. data/lib/pageflow/built_in_page_type.rb +1 -1
  152. data/lib/pageflow/configuration.rb +49 -6
  153. data/lib/pageflow/engine.rb +11 -1
  154. data/lib/pageflow/quota.rb +42 -15
  155. data/lib/pageflow/quotas.rb +15 -0
  156. data/lib/pageflow/seeds.rb +12 -16
  157. data/lib/pageflow/theme.rb +14 -0
  158. data/lib/pageflow/themes.rb +25 -0
  159. data/lib/pageflow/user_mixin.rb +1 -1
  160. data/lib/pageflow/version.rb +1 -1
  161. data/lib/pageflow/zencoder_meta_data_output_definition.rb +23 -0
  162. data/spec/factories/accounts.rb +9 -0
  163. data/spec/factories/audio_files.rb +46 -0
  164. data/spec/factories/chapters.rb +21 -0
  165. data/spec/factories/edit_locks.rb +11 -0
  166. data/spec/factories/entries.rb +33 -0
  167. data/spec/factories/file_usages.rb +8 -0
  168. data/spec/factories/folders.rb +8 -0
  169. data/spec/factories/image_files.rb +38 -0
  170. data/spec/factories/invited_user.rb +10 -0
  171. data/spec/factories/memberships.rb +8 -0
  172. data/spec/factories/pages.rb +14 -0
  173. data/spec/factories/revisions.rb +22 -0
  174. data/spec/factories/themings.rb +8 -0
  175. data/spec/factories/users.rb +39 -0
  176. data/spec/factories/video_files.rb +46 -0
  177. metadata +103 -39
  178. data/app/assets/javascripts/pageflow/editor/models/quota.js +0 -18
  179. data/app/assets/javascripts/pageflow/editor/views/quota_decorator_view.js +0 -45
  180. data/app/controllers/pageflow/editor/quotas_controller.rb +0 -13
  181. data/app/models/pageflow/theme.rb +0 -4
  182. data/app/views/admin/users/_quota_exceeded.html.erb +0 -1
  183. data/app/views/pageflow/editor/quotas/show.json.jbuilder +0 -5
@@ -35,6 +35,7 @@
35
35
  //= require_tree ./views/configuration_editors
36
36
  //= require_tree ./views
37
37
 
38
+ //= require ./initializers/setup_config
38
39
  //= require ./initializers/setup_collections
39
40
  //= require ./initializers/setup_page_types
40
41
  //= require ./initializers/edit_lock
@@ -18,6 +18,17 @@ pageflow.filesCollection = {
18
18
  return this.entry || pageflow.entry;
19
19
  },
20
20
 
21
+ confirmable: function() {
22
+ return new pageflow.SubsetCollection({
23
+ parent: this,
24
+ watchAttribute: 'state',
25
+
26
+ filter: function(item) {
27
+ return item.get('state') === 'waiting_for_confirmation';
28
+ },
29
+ });
30
+ },
31
+
21
32
  fileType: function() {
22
33
  var plural = _.map(this.name.split('_'), upperCaseFirst).join('');
23
34
 
@@ -28,6 +28,17 @@ pageflow.SubsetCollection = Backbone.Collection.extend({
28
28
  adding = false;
29
29
  });
30
30
 
31
+ if (options.watchAttribute) {
32
+ this.listenTo(this.parent, 'change:' + options.watchAttribute, function(model) {
33
+ if (this.filter(model)) {
34
+ this.add(model);
35
+ }
36
+ else {
37
+ this.remove(model);
38
+ }
39
+ });
40
+ }
41
+
31
42
  this.listenTo(this, 'sort', function() {
32
43
  this.parent.sort();
33
44
  });
@@ -31,6 +31,12 @@ pageflow.SidebarController = Backbone.Marionette.Controller.extend({
31
31
  }));
32
32
  },
33
33
 
34
+ confirmableFiles: function() {
35
+ this.region.show(pageflow.ConfirmEncodingView.create({
36
+ model: new pageflow.EncodingConfirmation()
37
+ }));
38
+ },
39
+
34
40
  metaData: function() {
35
41
  this.region.show(new pageflow.EditMetaDataView({
36
42
  model: this.entry
@@ -39,7 +45,8 @@ pageflow.SidebarController = Backbone.Marionette.Controller.extend({
39
45
 
40
46
  publish: function() {
41
47
  this.region.show(pageflow.PublishEntryView.create({
42
- model: this.entry
48
+ model: this.entry,
49
+ entryPublication: new pageflow.EntryPublication()
43
50
  }));
44
51
  },
45
52
 
@@ -0,0 +1,3 @@
1
+ pageflow.app.addInitializer(function(options) {
2
+ pageflow.config = options.config;
3
+ });
@@ -1,6 +1,7 @@
1
1
  pageflow.AudioFile = Backbone.Model.extend({
2
2
  modelName: 'audio_file',
3
3
  paramRoot: 'audio_file',
4
+ i18nKey: 'pageflow/audio_file',
4
5
 
5
6
  mixins: [pageflow.file, pageflow.encodedFile, pageflow.stageProvider, pageflow.retryable],
6
7
 
@@ -1,6 +1,7 @@
1
1
  pageflow.Chapter = Backbone.Model.extend({
2
2
  modelName: 'chapter',
3
3
  paramRoot: 'chapter',
4
+ i18nKey: 'pageflow/chapter',
4
5
 
5
6
  mixins: [pageflow.failureTracking, pageflow.delayedDestroying],
6
7
 
@@ -1,5 +1,6 @@
1
1
  pageflow.Configuration = Backbone.Model.extend({
2
2
  modelName: 'page',
3
+ i18nKey: 'pageflow/page',
3
4
 
4
5
  mixins: [pageflow.transientReferences],
5
6
 
@@ -0,0 +1,45 @@
1
+ pageflow.EncodingConfirmation = Backbone.Model.extend({
2
+ paramRoot: 'encoding_confirmation',
3
+
4
+ initialize: function() {
5
+ this.videoFiles = new Backbone.Collection();
6
+ this.audioFiles = new Backbone.Collection();
7
+
8
+ this.watchCollections();
9
+ },
10
+
11
+ watchCollections: function() {
12
+ this.listenTo(this.videoFiles, 'add remove', this.check);
13
+ this.listenTo(this.audioFiles, 'add remove', this.check);
14
+
15
+ this.check();
16
+ },
17
+
18
+ check: function() {
19
+ var model = this;
20
+
21
+ this.set('empty', this.videoFiles.length === 0 && this.audioFiles.length === 0);
22
+ this.set('checking', true);
23
+
24
+ this.save({}, {
25
+ url: this.url() + '/check',
26
+ success: function() {
27
+ model.set('checking', false);
28
+ },
29
+ error: function() {
30
+ model.set('checking', false);
31
+ }
32
+ });
33
+ },
34
+
35
+ url: function() {
36
+ return '/editor/entries/' + pageflow.entry.get('id') + '/encoding_confirmations';
37
+ },
38
+
39
+ toJSON: function() {
40
+ return {
41
+ video_file_ids: this.videoFiles.pluck('id'),
42
+ audio_file_ids: this.audioFiles.pluck('id'),
43
+ };
44
+ }
45
+ });
@@ -2,6 +2,7 @@ pageflow.Entry = Backbone.Model.extend({
2
2
  paramRoot: 'entry',
3
3
  urlRoot: '/entries',
4
4
  modelName: 'entry',
5
+ i18nKey: 'pageflow/entry',
5
6
 
6
7
  mixins: [pageflow.filesCountWatcher, pageflow.polling, pageflow.failureTracking],
7
8
 
@@ -84,7 +85,11 @@ pageflow.Entry = Backbone.Model.extend({
84
85
  },
85
86
 
86
87
  getFileCollection: function(filetype) {
87
- return this[lowerCaseFirst(filetype) + 's'];
88
+ return this[lowerCaseFirst(removeNamespace(filetype)) + 's'];
89
+
90
+ function removeNamespace(string) {
91
+ return string.split('::').pop();
92
+ }
88
93
 
89
94
  function lowerCaseFirst(string) {
90
95
  return string.charAt(0).toLowerCase() + string.slice(1);
@@ -99,19 +104,6 @@ pageflow.Entry = Backbone.Model.extend({
99
104
  this.togglePolling(this.get('pending_files_count') > 0);
100
105
  },
101
106
 
102
- publish: function(attrs) {
103
- var model = this;
104
-
105
- return Backbone.sync('create', this, {
106
- url: this.url() + '/revisions',
107
- attrs: attrs,
108
-
109
- success: function(response) {
110
- model.parse(response);
111
- }
112
- });
113
- },
114
-
115
107
  parse: function(response, options) {
116
108
  if (response) {
117
109
  this.set(_.pick(response, 'published', 'published_until'));
@@ -0,0 +1,40 @@
1
+ pageflow.EntryPublication = Backbone.Model.extend({
2
+ paramRoot: 'entry_publication',
3
+
4
+ quota: function() {
5
+ return new Backbone.Model(this.get('quota') || {});
6
+ },
7
+
8
+ check: function() {
9
+ var model = this;
10
+ this.set('checking', true);
11
+
12
+ this.save({}, {
13
+ url: this.url() + '/check',
14
+ success: function() {
15
+ model.set('checking', false);
16
+ },
17
+ error: function() {
18
+ model.set('checking', false);
19
+ }
20
+ });
21
+ },
22
+
23
+ publish: function(attributes) {
24
+ var model = this;
25
+
26
+ return this.save(attributes, {
27
+ success: function(model) {
28
+ pageflow.entry.parse(model.get('entry'));
29
+ },
30
+
31
+ error: function(model, xhr) {
32
+ model.set(xhr.responseJSON);
33
+ }
34
+ });
35
+ },
36
+
37
+ url: function() {
38
+ return '/editor/entries/' + pageflow.entry.get('id') + '/entry_publications';
39
+ }
40
+ });
@@ -5,6 +5,7 @@ pageflow.FileStage = Backbone.Model.extend({
5
5
  this.activeStates = options.activeStates;
6
6
  this.finishedStates = options.finishedStates;
7
7
  this.failedStates = options.failedStates;
8
+ this.actionRequiredStates = options.actionRequiredStates || [];
8
9
 
9
10
  this.update();
10
11
  this.listenTo(this.file, 'change:state', this.update);
@@ -24,6 +25,7 @@ pageflow.FileStage = Backbone.Model.extend({
24
25
  this.set('active', this.activeStates.indexOf(state) >= 0);
25
26
  this.set('finished', this.finishedStates.indexOf(state) >= 0);
26
27
  this.set('failed', this.failedStates.indexOf(state) >= 0);
28
+ this.set('action_required', this.actionRequiredStates.indexOf(state) >= 0);
27
29
 
28
30
  if (this.get('active')) {
29
31
  this.set('state', 'active');
@@ -34,6 +36,9 @@ pageflow.FileStage = Backbone.Model.extend({
34
36
  else if (this.get('failed')) {
35
37
  this.set('state', 'failed');
36
38
  }
39
+ else if (this.get('action_required')) {
40
+ this.set('state', 'action_required');
41
+ }
37
42
  else {
38
43
  this.set('state', 'pending');
39
44
  }
@@ -1,6 +1,7 @@
1
1
  pageflow.ImageFile = Backbone.Model.extend({
2
2
  modelName: 'image_file',
3
3
  paramRoot: 'image_file',
4
+ i18nKey: 'pageflow/image_file',
4
5
 
5
6
  mixins: [pageflow.file, pageflow.stageProvider, pageflow.retryable],
6
7
 
@@ -33,6 +34,10 @@ pageflow.ImageFile = Backbone.Model.extend({
33
34
  return this.get('state') === 'processing_failed';
34
35
  },
35
36
 
37
+ isConfirmable: function() {
38
+ return false;
39
+ },
40
+
36
41
  isPositionable: function() {
37
42
  return this.isReady();
38
43
  }
@@ -1,25 +1,42 @@
1
1
  pageflow.encodedFile = {
2
- stageMapping: {
3
- uploading: {
4
- activeStates: ['uploading'],
5
- finishedStates: ['not_uploaded_to_s3', 'upload_to_s3', 'uploading_to_s3', 'upload_to_s3_failed', 'waiting_for_encoding', 'encoding', 'encoded', 'encoding_failed'],
6
- failedStates: ['upload_failed']
7
- },
8
- uploading_to_s3: {
9
- activeStates: ['uploading_to_s3'],
10
- finishedStates: ['waiting_for_encoding', 'encoding', 'encoded', 'encoding_failed'],
11
- failedStates: ['upload_to_s3_failed']},
12
- encoding: {
13
- activeStates: ['waiting_for_encoding', 'encoding'],
14
- finishedStates: ['encoded'],
15
- failedStates: ['encoding_failed']
2
+ stageMapping: function() {
3
+ var mapping = {
4
+ uploading: {
5
+ activeStates: ['uploading'],
6
+ finishedStates: ['not_uploaded_to_s3', 'upload_to_s3', 'uploading_to_s3', 'upload_to_s3_failed', 'waiting_for_meta_data', 'fetching_meta_data', 'fetching_meta_data_failed', 'waiting_for_confirmation', 'waiting_for_encoding', 'encoding', 'encoded', 'encoding_failed'],
7
+ failedStates: ['upload_failed']
8
+ },
9
+ uploading_to_s3: {
10
+ activeStates: ['uploading_to_s3'],
11
+ finishedStates: ['waiting_for_meta_data', 'fetching_meta_data', 'fetching_meta_data_failed', 'waiting_for_confirmation', 'waiting_for_encoding', 'encoding', 'encoded', 'encoding_failed'],
12
+ failedStates: ['upload_to_s3_failed']},
13
+ fetching_meta_data: {
14
+ activeStates: ['waiting_for_meta_data', 'fetching_meta_data'],
15
+ finishedStates: ['waiting_for_confirmation', 'waiting_for_encoding', 'encoding', 'encoded', 'encoding_failed'],
16
+ failedStates: ['fetching_meta_data_failed']},
17
+ encoding: {
18
+ actionRequiredStates: ['waiting_for_confirmation'],
19
+ activeStates: ['waiting_for_encoding', 'encoding'],
20
+ finishedStates: ['encoded'],
21
+ failedStates: ['fetching_meta_data_failed', 'encoding_failed']
22
+ }
23
+ };
24
+
25
+ if (!pageflow.config.confirmEncodingJobs) {
26
+ delete mapping.fetching_meta_data;
16
27
  }
28
+
29
+ return mapping;
17
30
  },
18
31
 
19
32
  isReady: function() {
20
33
  return this.get('state') === 'encoded';
21
34
  },
22
35
 
36
+ isConfirmable: function() {
37
+ return this.get('state') === 'waiting_for_confirmation';
38
+ },
39
+
23
40
  isFailed: function() {
24
41
  return this.get('state').match(/_failed$/);
25
42
  },
@@ -23,6 +23,10 @@ pageflow.filesCountWatcher = {
23
23
  return file.isUploading();
24
24
  });
25
25
 
26
+ this.updateFilesCount('confirmable', name, collection, function(file) {
27
+ return file.isConfirmable();
28
+ });
29
+
26
30
  this.updateFilesCount('pending', name, collection, function(file) {
27
31
  return file.isPending();
28
32
  });
@@ -1,6 +1,6 @@
1
1
  pageflow.stageProvider = {
2
2
  initialize: function() {
3
- this.stages = new Backbone.Collection(_.chain(this.stageMapping).pairs().map(function (pair) {
3
+ this.stages = new Backbone.Collection(_.chain(this).result('stageMapping').pairs().map(function (pair) {
4
4
  var name = pair[0];
5
5
  var options = pair[1];
6
6
 
@@ -11,7 +11,7 @@ pageflow.stageProvider = {
11
11
 
12
12
  currentStage: function() {
13
13
  return this.stages.find(function(stage) {
14
- return stage.get('active') || stage.get('failed');
14
+ return stage.get('active') || stage.get('action_required') || stage.get('failed');
15
15
  });
16
16
  }
17
17
  };
@@ -2,6 +2,7 @@ pageflow.OtherEntry = Backbone.Model.extend({
2
2
  paramRoot: 'entry',
3
3
  urlRoot: '/entries',
4
4
  modelName: 'entry',
5
+ i18nKey: 'pageflow/entry',
5
6
 
6
7
  initialize: function() {
7
8
  this.imageFiles = new pageflow.ImageFilesCollection([], {entry: this});
@@ -1,6 +1,7 @@
1
1
  pageflow.Page = Backbone.Model.extend({
2
2
  modelName: 'page',
3
3
  paramRoot: 'page',
4
+ i18nKey: 'pageflow/page',
4
5
 
5
6
  defaults: {
6
7
  template: 'background_image',
@@ -1,6 +1,7 @@
1
1
  pageflow.VideoFile = Backbone.Model.extend({
2
2
  modelName: 'video_file',
3
3
  paramRoot: 'video_file',
4
+ i18nKey: 'pageflow/video_file',
4
5
 
5
6
  mixins: [pageflow.file, pageflow.encodedFile, pageflow.stageProvider, pageflow.retryable],
6
7
 
@@ -15,6 +15,8 @@ pageflow.SidebarRouter = Backbone.Marionette.AppRouter.extend({
15
15
  'files?page=:page_id&attribute=:attribute': 'files',
16
16
  'files': 'files',
17
17
 
18
+ 'confirmable_files': 'confirmableFiles',
19
+
18
20
  'meta_data': 'metaData',
19
21
  'publish': 'publish',
20
22
 
@@ -0,0 +1,15 @@
1
+ <div class="blank_slate">
2
+ Keine Dateien freizugeben.
3
+ </div>
4
+
5
+ <div class="video_files_panel">
6
+ <h2>Videos</h2>
7
+ </div>
8
+
9
+ <div class="audio_files_panel">
10
+ <h2>Audios</h2>
11
+ </div>
12
+
13
+ <div class="summary">
14
+ </div>
15
+ <button class="confirm_encoding">Ausgewählte Dateien transcodieren</button>
@@ -0,0 +1,7 @@
1
+ <input type="checkbox">
2
+ <label class="file_name"></label>
3
+ <span class="duration"></span>
4
+
5
+ <div class="actions">
6
+ <a class="remove" title="Löschen"></a>
7
+ </div>