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
@@ -2,5 +2,5 @@
2
2
  </div>
3
3
  <div class="outlet">
4
4
  </div>
5
- <div class="exceeded_message">
5
+ <div class="exhausted_message">
6
6
  </div>
@@ -1,10 +1,12 @@
1
1
  <div class="box">
2
2
  <h2>Dateien Wiederverwenden</h2>
3
3
 
4
- <ul class="entries_panel">
5
- </ul>
4
+ <div class="panels">
5
+ <div class="entries_panel">
6
+ </div>
6
7
 
7
- <div class="files_panel">
8
+ <div class="files_panel">
9
+ </div>
8
10
  </div>
9
11
 
10
12
  <div class="footer">
@@ -1,4 +1,9 @@
1
1
  <li class="uploading"><span class="count">0</span> Dateien werden gerade hochgeladen.</li>
2
2
  <li class="failed"><span class="count">0</span> Datensätze konnten nicht gespeichert werden. <a class="retry">Erneut versuchen</a></li>
3
3
  <li class="saving">Änderungen werden gespeichert...</li>
4
- <li class="saved">Alle Änderungen wurden gespeichert.</li>
4
+ <li class="saved">Alle Änderungen wurden gespeichert.</li>
5
+
6
+ <li class="confirmable_files">
7
+ <span class="count">0</span> Dateien müssen für die Transcodierung freigeben werden.
8
+ <a href="#/confirmable_files" class="display_confirmable_files">Anzeigen</a>
9
+ </li>
@@ -0,0 +1,76 @@
1
+ pageflow.ConfirmEncodingView = Backbone.Marionette.ItemView.extend({
2
+ template: 'templates/confirm_encoding',
3
+
4
+ ui: {
5
+ blankSlate: '.blank_slate',
6
+ videoFilesPanel: '.video_files_panel',
7
+ audioFilesPanel: '.audio_files_panel',
8
+
9
+ summary: '.summary',
10
+ confirmButton: 'button'
11
+ },
12
+
13
+ events: {
14
+ 'click button': function() {
15
+ this.model.save();
16
+ }
17
+ },
18
+
19
+ initialize: function() {
20
+ this.confirmableVideoFiles = pageflow.videoFiles.confirmable();
21
+ this.confirmableAudioFiles = pageflow.audioFiles.confirmable();
22
+ },
23
+
24
+ onRender: function() {
25
+ this.listenTo(this.model, 'change:empty change:exceeding change:checking', this.updateSummary);
26
+
27
+ this.listenTo(this.confirmableAudioFiles, 'add remove', this.update);
28
+ this.listenTo(this.confirmableVideoFiles, 'add remove', this.update);
29
+
30
+ this.ui.videoFilesPanel.append(this.subview(new pageflow.CollectionView({
31
+ tagName: 'ul',
32
+ className: 'confirmable_files',
33
+ collection: this.confirmableVideoFiles,
34
+ itemViewConstructor: pageflow.ConfirmableFileItemView,
35
+ itemViewOptions: {
36
+ selectedFiles: this.model.videoFiles
37
+ }
38
+ })).el);
39
+
40
+ this.ui.audioFilesPanel.append(this.subview(new pageflow.CollectionView({
41
+ tagName: 'ul',
42
+ className: 'confirmable_files',
43
+ collection: this.confirmableAudioFiles,
44
+ itemViewConstructor: pageflow.ConfirmableFileItemView,
45
+ itemViewOptions: {
46
+ selectedFiles: this.model.audioFiles
47
+ }
48
+ })).el);
49
+
50
+ this.update();
51
+ },
52
+
53
+ update: function() {
54
+ this.ui.blankSlate.toggle(!this.confirmableVideoFiles.length && !this.confirmableAudioFiles.length);
55
+ this.ui.videoFilesPanel.toggle(!!this.confirmableVideoFiles.length);
56
+ this.ui.audioFilesPanel.toggle(!!this.confirmableAudioFiles.length);
57
+ },
58
+
59
+ updateSummary: function(enabled) {
60
+ this.ui.summary.html(this.model.get('summary_html'));
61
+ this.ui.confirmButton.toggleClass('checking', !!this.model.get('checking'));
62
+
63
+ if (this.model.get('empty') || this.model.get('exceeding') || this.model.get('checking')) {
64
+ this.ui.confirmButton.attr('disabled', true);
65
+ }
66
+ else {
67
+ this.ui.confirmButton.removeAttr('disabled');
68
+ }
69
+ }
70
+ });
71
+
72
+ pageflow.ConfirmEncodingView.create = function(options) {
73
+ return new pageflow.BackButtonDecoratorView({
74
+ view: new pageflow.ConfirmEncodingView(options)
75
+ });
76
+ };
@@ -0,0 +1,42 @@
1
+ pageflow.ConfirmableFileItemView = Backbone.Marionette.ItemView.extend({
2
+ tagName: 'li',
3
+ template: 'templates/confirmable_file_item',
4
+
5
+ ui: {
6
+ fileName: '.file_name',
7
+ duration: '.duration',
8
+
9
+ label: 'label',
10
+ checkBox: 'input',
11
+ removeButton: '.remove',
12
+ },
13
+
14
+ events: {
15
+ 'click .remove': 'destroy',
16
+
17
+ 'change input': 'updateSelection'
18
+ },
19
+
20
+ onRender: function() {
21
+ this.ui.label.attr('for', this.cid);
22
+ this.ui.checkBox.attr('id', this.cid);
23
+
24
+ this.ui.fileName.text(this.model.get('file_name') || '(Unbekannt)');
25
+ this.ui.duration.text(this.model.get('duration') || '-');
26
+ },
27
+
28
+ destroy: function() {
29
+ if (confirm("Datei wirklich wirklich löschen?")) {
30
+ this.model.destroyUsage();
31
+ }
32
+ },
33
+
34
+ updateSelection: function() {
35
+ if (this.ui.checkBox.is(':checked')) {
36
+ this.options.selectedFiles.add(this.model);
37
+ }
38
+ else {
39
+ this.options.selectedFiles.remove(this.model);
40
+ }
41
+ },
42
+ });
@@ -0,0 +1,49 @@
1
+ pageflow.EntryPublicationQuotaDecoratorView = Backbone.Marionette.Layout.extend({
2
+ template: 'templates/entry_publication_quota_decorator',
3
+ className: 'quota_decorator',
4
+
5
+ regions: {
6
+ outlet: '.outlet'
7
+ },
8
+
9
+ ui: {
10
+ state: '.quota_state',
11
+ exhaustedMessage: '.exhausted_message'
12
+ },
13
+
14
+ modelEvents: {
15
+ 'change:exceeding change:checking change:quota': 'update'
16
+ },
17
+
18
+ onRender: function() {
19
+ this.model.check();
20
+ },
21
+
22
+ update: function() {
23
+ var view = this;
24
+
25
+ if (this.model.get('checking')) {
26
+ view.ui.state.text(I18n.t('editor.quotas.loading'));
27
+ view.ui.exhaustedMessage.hide().html('');
28
+ view.outlet.close();
29
+ }
30
+ else {
31
+ if (view.model.get('exceeding')) {
32
+ view.ui.state.hide();
33
+ view.ui.exhaustedMessage.show().html(view.model.get('exhausted_html'));
34
+ view.outlet.close();
35
+ }
36
+ else {
37
+ if (view.model.quota().get('state_description')) {
38
+ view.ui.state.text(view.model.quota().get('state_description'));
39
+ view.ui.state.show();
40
+ }
41
+ else {
42
+ view.ui.state.hide();
43
+ }
44
+
45
+ view.outlet.show(view.options.view);
46
+ }
47
+ }
48
+ }
49
+ });
@@ -13,7 +13,7 @@ pageflow.FileMetaDataItemView = Backbone.Marionette.ItemView.extend({
13
13
  },
14
14
 
15
15
  update: function() {
16
- this.ui.label.text(I18n.t('activerecord.attributes.' + this.model.modelName + '.' + this.options.attribute));
16
+ this.ui.label.text(I18n.t('activerecord.attributes.' + this.model.i18nKey + '.' + this.options.attribute));
17
17
  this.ui.value.text(this.model.get(this.options.attribute));
18
18
  }
19
19
  });
@@ -36,5 +36,6 @@ pageflow.FileStageItemView = Backbone.Marionette.ItemView.extend({
36
36
  this.$el.toggleClass('active', this.model.get('active'));
37
37
  this.$el.toggleClass('finished', this.model.get('finished'));
38
38
  this.$el.toggleClass('failed', this.model.get('failed'));
39
+ this.$el.toggleClass('action_required', this.model.get('action_required'));
39
40
  }
40
41
  });
@@ -20,6 +20,7 @@ pageflow.FileThumbnailView = Backbone.Marionette.ItemView.extend({
20
20
 
21
21
  if (stage) {
22
22
  this.setStageClassName(stage.get('name'));
23
+ this.ui.pictogram.toggleClass('action_required', stage.get('action_required'));
23
24
  this.ui.pictogram.toggleClass('failed', stage.get('failed'));
24
25
  }
25
26
  else {
@@ -27,7 +28,7 @@ pageflow.FileThumbnailView = Backbone.Marionette.ItemView.extend({
27
28
  }
28
29
 
29
30
  this.ui.pictogram.addClass(this.model.thumbnailPictogram);
30
- this.$el.css('background-image', 'url(' + this._imageUrl() + ')');
31
+ this.$el.css('background-image', this._imageUrl() ? 'url(' + this._imageUrl() + ')' : '');
31
32
  this.$el
32
33
  .removeClass('empty')
33
34
  .toggleClass('always_picogram', !!this.model.thumbnailPictogram)
@@ -111,17 +111,17 @@ pageflow.FilesExplorerView = Backbone.Marionette.ItemView.extend({
111
111
  file;
112
112
 
113
113
  if ((file = sel.get('image_file'))) {
114
- file.set('typeName', 'ImageFile');
114
+ file.set('typeName', 'Pageflow::ImageFile');
115
115
  return file;
116
116
  }
117
117
 
118
118
  if ((file = sel.get('audio_file'))) {
119
- file.set('typeName', 'AudioFile');
119
+ file.set('typeName', 'Pageflow::AudioFile');
120
120
  return file;
121
121
  }
122
122
 
123
123
  if ((file = sel.get('video_file'))) {
124
- file.set('typeName', 'VideoFile');
124
+ file.set('typeName', 'Pageflow::VideoFile');
125
125
  return file;
126
126
  }
127
127
  }
@@ -16,10 +16,10 @@ pageflow.inputView = {
16
16
  },
17
17
 
18
18
  localizedAttributeName: function() {
19
- return I18n.t('activerecord.attributes.' + this.model.modelName + '.' + this.options.propertyName);
19
+ return I18n.t('activerecord.attributes.' + this.model.i18nKey + '.' + this.options.propertyName);
20
20
  },
21
21
 
22
22
  inlineHelpText: function() {
23
- return I18n.t('editor.inline_help.' + this.model.modelName + '.' + this.options.propertyName, {defaultValue: ''});
23
+ return I18n.t('editor.inline_help.' + this.model.i18nKey + '.' + this.options.propertyName, {defaultValue: ''});
24
24
  }
25
25
  };
@@ -26,7 +26,7 @@ pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
26
26
  if (!this.options.texts) {
27
27
  if (!this.options.translationKeys) {
28
28
  this.options.translationKeys = _.map(this.options.values, function(value) {
29
- return 'activerecord.values.' + this.model.modelName + '.' + this.options.propertyName + '.' + value;
29
+ return 'activerecord.values.' + this.model.i18nKey + '.' + this.options.propertyName + '.' + value;
30
30
  }, this);
31
31
  }
32
32
 
@@ -5,7 +5,8 @@ pageflow.NotificationsView = Backbone.Marionette.ItemView.extend({
5
5
 
6
6
  ui: {
7
7
  failedCount: '.failed .count',
8
- uploadingCount: '.uploading .count'
8
+ uploadingCount: '.uploading .count',
9
+ confirmableFilesCount: '.confirmable_files .count',
9
10
  },
10
11
 
11
12
  events: {
@@ -16,12 +17,15 @@ pageflow.NotificationsView = Backbone.Marionette.ItemView.extend({
16
17
 
17
18
  onRender: function() {
18
19
  this.listenTo(pageflow.entry, 'change:uploading_files_count', this.notifyUploadCount);
20
+ this.listenTo(pageflow.entry, 'change:confirmable_files_count', this.notifyConfirmableFilesCount);
21
+
19
22
  this.listenTo(pageflow.failedRecords, 'add', this.update);
20
23
  this.listenTo(pageflow.failedRecords, 'remove', this.update);
21
24
  this.listenTo(pageflow.savingRecords, 'add', this.update);
22
25
  this.listenTo(pageflow.savingRecords, 'remove', this.update);
23
26
 
24
27
  this.update();
28
+ this.notifyConfirmableFilesCount();
25
29
  },
26
30
 
27
31
  update: function() {
@@ -33,5 +37,12 @@ pageflow.NotificationsView = Backbone.Marionette.ItemView.extend({
33
37
  notifyUploadCount: function(model, uploadCount) {
34
38
  this.$el.toggleClass('uploading', uploadCount > 0);
35
39
  this.ui.uploadingCount.text(uploadCount);
40
+ },
41
+
42
+ notifyConfirmableFilesCount: function() {
43
+ var confirmableFilesCount = pageflow.entry.get('confirmable_files_count');
44
+
45
+ this.$el.toggleClass('has_confirmable_files', confirmableFilesCount > 0);
46
+ this.ui.confirmableFilesCount.text(confirmableFilesCount);
36
47
  }
37
48
  });
@@ -96,12 +96,13 @@ pageflow.PublishEntryView = Backbone.Marionette.ItemView.extend({
96
96
 
97
97
  var that = this;
98
98
 
99
- this.model.publish({published_until: publishedUntil})
100
- .done()
99
+ this.options.entryPublication.publish({published_until: publishedUntil})
101
100
  .fail(function() {
102
101
  alert('Beim Veröffentlichen ist ein Fehler aufgetreten');
103
102
  })
104
103
  .always(function() {
104
+ if (that.isClosed) { return; }
105
+
105
106
  that.$el.removeClass('publishing');
106
107
  that.$('input').removeAttr('disabled');
107
108
  that.enableSave();
@@ -186,8 +187,8 @@ pageflow.PublishEntryView = Backbone.Marionette.ItemView.extend({
186
187
 
187
188
  pageflow.PublishEntryView.create = function(options) {
188
189
  return new pageflow.BackButtonDecoratorView({
189
- view: new pageflow.QuotaDecoratorView({
190
- model: pageflow.Quota.byName('published_entries'),
190
+ view: new pageflow.EntryPublicationQuotaDecoratorView({
191
+ model: options.entryPublication,
191
192
  view: new pageflow.PublishEntryView(options)
192
193
  })
193
194
  });
@@ -157,7 +157,6 @@ pageflow.pageType.register('video', _.extend({
157
157
 
158
158
  if (pageflow.features.has('phone platform')) {
159
159
  // alternate poster image handling
160
- video.attr("style", "visibility:hidden");
161
160
  $("<div class='vjs-poster-mobile' style='" +
162
161
  poster.attr('style') +
163
162
  "display:block; background-size: coverr;'></div>").appendTo(pageElement.find(".videoWrapper"));
@@ -22,7 +22,7 @@ jQuery.widget('pageflow.playerControls', {
22
22
  player.on('timeupdate', function (position, duration) {
23
23
  var percent = duration > 0 ? (player.position / player.duration) * 100 : 0;
24
24
  if(!isNaN(position)) {
25
- if(smallTimestamp) {
25
+ if(durationDisplay.html().length === 5 && durationDisplay.html().charAt(0) === "0") {
26
26
  $(currentTimeDisplay).html(player.formatTime(position).substr(1));
27
27
  $(durationDisplay).html(player.formatTime(duration).substr(1));
28
28
  }
@@ -49,6 +49,7 @@
49
49
  @import "./menu";
50
50
  @import "./manage_files";
51
51
  @import "./files";
52
+ @import "./confirmable_files";
52
53
  @import "./files_gallery";
53
54
  @import "./file_meta_data";
54
55
  @import "./file_stages";
@@ -0,0 +1,67 @@
1
+ ul.confirmable_files {
2
+ margin-bottom: 15px;
3
+
4
+ li {
5
+ background-color: #eee;
6
+ margin-bottom: 2px;
7
+ position: relative;
8
+ padding: 10px 10px 0 30px;
9
+ white-space: nowrap;
10
+ overflow: hidden;
11
+ height: 23px;
12
+ }
13
+
14
+ input[type=checkbox] {
15
+ display: block;
16
+ position: absolute;
17
+ top: 10px;
18
+ left: 10px;
19
+ width: auto;
20
+ height: auto;
21
+ }
22
+
23
+ .file_name {
24
+ position: absolute;
25
+ left: 30px;
26
+ top: 9px;
27
+ right: 100px;
28
+ overflow: hidden;
29
+ text-overflow: ellipsis;
30
+
31
+ font-weight: normal;
32
+ font-size: 13px;
33
+ }
34
+
35
+ .duration {
36
+ position: absolute;
37
+ right: 50px;
38
+ top: 9px;
39
+ }
40
+
41
+ .actions {
42
+ position: absolute;
43
+ right: 10px;
44
+ top: 3px;
45
+ text-align: right;
46
+
47
+ a {
48
+ float: left;
49
+ margin-left: 5px;
50
+ }
51
+ }
52
+
53
+ a.remove {
54
+ @include icon-only-button(#aaa);
55
+ @include trash-icon;
56
+ }
57
+ }
58
+
59
+ button.confirm_encoding {
60
+ @include icon-button;
61
+ @include check-icon;
62
+
63
+ &.checking {
64
+ @include arrows-ccw-icon;
65
+ @include background-icon-animation(blink);
66
+ }
67
+ }