pageflow 0.6.0 → 0.7.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 (210) hide show
  1. checksums.yaml +8 -8
  2. data/admins/pageflow/entry.rb +8 -8
  3. data/admins/pageflow/revisions.rb +1 -1
  4. data/admins/pageflow/user.rb +24 -20
  5. data/app/assets/images/pageflow/scroll_down_indicator.png +0 -0
  6. data/app/assets/images/pageflow/scroll_down_indicator_invert.png +0 -0
  7. data/app/assets/images/pageflow/touch_indicator.png +0 -0
  8. data/app/assets/images/pageflow/touch_indicator_invert.png +0 -0
  9. data/app/assets/javascripts/pageflow/audio_player.js +8 -1
  10. data/app/assets/javascripts/pageflow/audio_player/media_events.js +27 -0
  11. data/app/assets/javascripts/pageflow/base.js +2 -1
  12. data/app/assets/javascripts/pageflow/editor/api.js +15 -0
  13. data/app/assets/javascripts/pageflow/editor/base.js +17 -1
  14. data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +9 -1
  15. data/app/assets/javascripts/pageflow/editor/initializers/setup_help_entries.js +5 -0
  16. data/app/assets/javascripts/pageflow/editor/models/edit_lock_container.js +30 -9
  17. data/app/assets/javascripts/pageflow/editor/models/entry.js +8 -0
  18. data/app/assets/javascripts/pageflow/editor/models/file_stage.js +1 -1
  19. data/app/assets/javascripts/pageflow/editor/models/mixins/transient_references.js +1 -1
  20. data/app/assets/javascripts/pageflow/editor/templates/back_button_decorator.jst.ejs +1 -1
  21. data/app/assets/javascripts/pageflow/editor/templates/background_positioning.jst.ejs +5 -5
  22. data/app/assets/javascripts/pageflow/editor/templates/blank_entry.jst.ejs +6 -6
  23. data/app/assets/javascripts/pageflow/editor/templates/chapter_item.jst.ejs +2 -2
  24. data/app/assets/javascripts/pageflow/editor/templates/confirm_encoding.jst.ejs +7 -6
  25. data/app/assets/javascripts/pageflow/editor/templates/confirmable_file_item.jst.ejs +1 -1
  26. data/app/assets/javascripts/pageflow/editor/templates/edit_chapter.jst.ejs +4 -4
  27. data/app/assets/javascripts/pageflow/editor/templates/edit_entry.jst.ejs +7 -7
  28. data/app/assets/javascripts/pageflow/editor/templates/edit_meta_data.jst.ejs +3 -3
  29. data/app/assets/javascripts/pageflow/editor/templates/edit_page.jst.ejs +4 -4
  30. data/app/assets/javascripts/pageflow/editor/templates/embedded/page_link.jst.ejs +1 -1
  31. data/app/assets/javascripts/pageflow/editor/templates/file_item.jst.ejs +8 -8
  32. data/app/assets/javascripts/pageflow/editor/templates/files.jst.ejs +1 -1
  33. data/app/assets/javascripts/pageflow/editor/templates/files_blank_slate.jst.ejs +1 -1
  34. data/app/assets/javascripts/pageflow/editor/templates/files_explorer.jst.ejs +3 -3
  35. data/app/assets/javascripts/pageflow/editor/templates/files_explorer_blank_slate.jst.ejs +1 -1
  36. data/app/assets/javascripts/pageflow/editor/templates/files_gallery_blank_slate.jst.ejs +1 -1
  37. data/app/assets/javascripts/pageflow/editor/templates/help.jst.ejs +9 -0
  38. data/app/assets/javascripts/pageflow/editor/templates/help_button.jst.ejs +1 -1
  39. data/app/assets/javascripts/pageflow/editor/templates/loading.jst.ejs +1 -1
  40. data/app/assets/javascripts/pageflow/editor/templates/locked.jst.ejs +4 -4
  41. data/app/assets/javascripts/pageflow/editor/templates/notifications.jst.ejs +6 -6
  42. data/app/assets/javascripts/pageflow/editor/templates/other_entries_blank_slate.jst.ejs +1 -1
  43. data/app/assets/javascripts/pageflow/editor/templates/page_item.jst.ejs +1 -1
  44. data/app/assets/javascripts/pageflow/editor/templates/publish_entry.jst.ejs +13 -13
  45. data/app/assets/javascripts/pageflow/editor/templates/select_button.jst.ejs +1 -1
  46. data/app/assets/javascripts/pageflow/editor/views/background_positioning_view.js +1 -1
  47. data/app/assets/javascripts/pageflow/editor/views/chapter_item_view.js +2 -2
  48. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio_loop.js +0 -3
  49. data/app/assets/javascripts/pageflow/editor/views/edit_chapter_view.js +1 -1
  50. data/app/assets/javascripts/pageflow/editor/views/edit_meta_data_view.js +7 -0
  51. data/app/assets/javascripts/pageflow/editor/views/edit_page_view.js +11 -2
  52. data/app/assets/javascripts/pageflow/editor/views/editor_view.js +4 -4
  53. data/app/assets/javascripts/pageflow/editor/views/entry_preview_view.js +4 -1
  54. data/app/assets/javascripts/pageflow/editor/views/entry_publication_quota_decorator_view.js +1 -1
  55. data/app/assets/javascripts/pageflow/editor/views/files_explorer_view.js +1 -1
  56. data/app/assets/javascripts/pageflow/editor/views/files_view.js +4 -4
  57. data/app/assets/javascripts/pageflow/editor/views/help_view.js +37 -24
  58. data/app/assets/javascripts/pageflow/editor/views/locked_view.js +4 -2
  59. data/app/assets/javascripts/pageflow/editor/views/page_item_view.js +1 -1
  60. data/app/assets/javascripts/pageflow/editor/views/page_preview_view.js +7 -0
  61. data/app/assets/javascripts/pageflow/editor/views/publish_entry_view.js +8 -1
  62. data/app/assets/javascripts/pageflow/links.js +42 -0
  63. data/app/assets/javascripts/pageflow/page_types/audio.js +3 -1
  64. data/app/assets/javascripts/pageflow/page_types/video.js +1 -0
  65. data/app/assets/javascripts/pageflow/ready.js +1 -20
  66. data/app/assets/javascripts/pageflow/ui.js +2 -2
  67. data/app/assets/javascripts/pageflow/ui/templates/inputs/file_input.jst.ejs +3 -3
  68. data/app/assets/javascripts/pageflow/ui/templates/inputs/page_reference.jst.ejs +1 -1
  69. data/app/assets/javascripts/pageflow/ui/templates/inputs/text_area_input.jst.ejs +7 -7
  70. data/app/assets/javascripts/pageflow/ui/views/collection_view.js +10 -1
  71. data/app/assets/javascripts/pageflow/ui/views/configuration_editor_view.js +1 -1
  72. data/app/assets/javascripts/pageflow/ui/views/inputs/check_box_input_view.js +5 -1
  73. data/app/assets/javascripts/pageflow/ui/views/inputs/extended_select_input_view.js +106 -0
  74. data/app/assets/javascripts/pageflow/ui/views/inputs/file_input_view.js +1 -1
  75. data/app/assets/javascripts/pageflow/ui/views/inputs/proxy_url_input_view.js +2 -2
  76. data/app/assets/javascripts/pageflow/ui/views/inputs/select_input_view.js +50 -14
  77. data/app/assets/javascripts/pageflow/ui/views/inputs/text_area_input_view.js +1 -1
  78. data/app/assets/javascripts/pageflow/ui/views/inputs/text_input_view.js +1 -1
  79. data/app/assets/javascripts/pageflow/ui/views/inputs/url_input_view.js +4 -4
  80. data/app/assets/javascripts/pageflow/ui/views/mixins/input_view.js +1 -1
  81. data/app/assets/javascripts/pageflow/video_player.js +5 -0
  82. data/app/assets/javascripts/pageflow/video_player/media_events.js +27 -0
  83. data/app/assets/stylesheets/pageflow/editor/base.css.scss +4 -0
  84. data/app/assets/stylesheets/pageflow/editor/help.css.scss +91 -45
  85. data/app/assets/stylesheets/pageflow/entries.css.scss +18 -5
  86. data/app/assets/stylesheets/pageflow/jquery_ui.css.scss +3 -2
  87. data/app/assets/stylesheets/pageflow/page.css.scss +23 -21
  88. data/app/assets/stylesheets/pageflow/subshare.css.scss +1 -1
  89. data/app/assets/stylesheets/pageflow/text_variants.css.scss +11 -2
  90. data/app/assets/stylesheets/pageflow/themes/default.css.scss +1 -41
  91. data/app/assets/stylesheets/pageflow/themes/default/base.css.scss +21 -0
  92. data/app/assets/stylesheets/pageflow/themes/default/overview.css.scss +16 -1
  93. data/app/assets/stylesheets/pageflow/themes/default/page.css.scss +5 -0
  94. data/app/assets/stylesheets/pageflow/themes/default/variables.css.scss +20 -0
  95. data/app/assets/stylesheets/pageflow/ui.css.scss +2 -0
  96. data/app/assets/stylesheets/pageflow/ui/input/extended_select_input.css.scss +105 -0
  97. data/app/controllers/concerns/pageflow/edit_locking.rb +2 -2
  98. data/app/controllers/concerns/pageflow/quota_verification.rb +1 -1
  99. data/app/controllers/pageflow/application_controller.rb +6 -2
  100. data/app/controllers/pageflow/editor/entries_controller.rb +5 -0
  101. data/app/controllers/pageflow/entries_controller.rb +3 -1
  102. data/app/controllers/pageflow/revisions_controller.rb +2 -0
  103. data/app/helpers/pageflow/admin/locales_helper.rb +11 -0
  104. data/app/helpers/pageflow/admin/users_helper.rb +1 -1
  105. data/app/helpers/pageflow/entries_helper.rb +8 -2
  106. data/app/helpers/pageflow/file_thumbnails_helper.rb +1 -1
  107. data/app/helpers/pageflow/files_helper.rb +13 -0
  108. data/app/helpers/pageflow/help_entries_helper.rb +19 -0
  109. data/app/helpers/pageflow/render_json_helper.rb +11 -0
  110. data/app/mailers/pageflow/user_mailer.rb +4 -1
  111. data/app/models/pageflow/draft_entry.rb +1 -0
  112. data/app/models/pageflow/positioned_file.rb +45 -0
  113. data/app/models/pageflow/published_entry.rb +12 -1
  114. data/app/models/pageflow/revision.rb +4 -0
  115. data/app/models/pageflow/theming.rb +1 -1
  116. data/app/models/pageflow/thumbnail_file_resolver.rb +20 -12
  117. data/app/views/admin/entries/_attributes_table.html.arb +3 -3
  118. data/app/views/admin/entries/_links.html.arb +3 -3
  119. data/app/views/admin/revisions/_form.html.erb +1 -1
  120. data/app/views/admin/users/_form.html.erb +8 -2
  121. data/app/views/admin/users/delete_me.html.erb +3 -3
  122. data/app/views/admin/users/me.html.erb +11 -3
  123. data/app/views/components/pageflow/admin/entries_tab.rb +1 -1
  124. data/app/views/components/pageflow/admin/grouped_folder_list.rb +7 -7
  125. data/app/views/components/pageflow/admin/members_tab.rb +4 -4
  126. data/app/views/components/pageflow/admin/revisions_tab.rb +8 -8
  127. data/app/views/components/pageflow/admin/users_tab.rb +1 -1
  128. data/app/views/layouts/pageflow/application.html.erb +2 -2
  129. data/app/views/pageflow/config/_editor_seeds.json.jbuilder +1 -1
  130. data/app/views/pageflow/devise/mailer/reset_password_instructions.html.erb +6 -4
  131. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +1 -1
  132. data/app/views/pageflow/editor/entries/_help_entries_seed.html.erb +6 -0
  133. data/app/views/pageflow/editor/entries/seed.json.erb +14 -0
  134. data/app/views/pageflow/editor/entry_publications/_published_message.html.erb +1 -0
  135. data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +3 -0
  136. data/app/views/pageflow/entries/_entry.html.erb +3 -3
  137. data/app/views/pageflow/entries/_ie8_hint.html.erb +2 -13
  138. data/app/views/pageflow/entries/_mobile_navigation.html.erb +6 -6
  139. data/app/views/pageflow/entries/_multimedia_alert.html.erb +5 -9
  140. data/app/views/pageflow/entries/_non_js_hint.html.erb +1 -1
  141. data/app/views/pageflow/entries/_skip_links.html.erb +3 -3
  142. data/app/views/pageflow/entries/edit.html.erb +5 -23
  143. data/app/views/pageflow/entries/navigation/_bar_bottom.html.erb +5 -5
  144. data/app/views/pageflow/entries/navigation/_bar_top.html.erb +15 -15
  145. data/app/views/pageflow/entries/navigation/_home_button.html.erb +2 -2
  146. data/app/views/pageflow/entries/overview/_chapter.html.erb +1 -1
  147. data/app/views/pageflow/entries/overview/_entry.html.erb +6 -4
  148. data/app/views/pageflow/entries/show.html.erb +2 -2
  149. data/app/views/pageflow/help_entries/_menu.html.erb +5 -0
  150. data/app/views/pageflow/help_entries/_menu_item.html.erb +7 -0
  151. data/app/views/pageflow/help_entries/_section.html.erb +3 -0
  152. data/app/views/pageflow/page_types/_page_type.json.jbuilder +1 -1
  153. data/app/views/pageflow/pages/_page.html.erb +1 -1
  154. data/app/views/pageflow/pages/_video_tag.html.erb +1 -1
  155. data/app/views/pageflow/pages/templates/_audio.html.erb +1 -1
  156. data/app/views/pageflow/pages/templates/_background_video.html.erb +1 -1
  157. data/app/views/pageflow/pages/templates/_video.html.erb +1 -1
  158. data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +3 -0
  159. data/app/views/pageflow/social_share/_image_tags.html.erb +4 -0
  160. data/app/views/pageflow/social_share/_page_meta_tags.html.erb +3 -0
  161. data/app/views/pageflow/user_mailer/invitation.html.erb +4 -6
  162. data/app/views/pageflow/user_mailer/invitation.text.erb +5 -6
  163. data/config/initializers/help_entries.rb +17 -0
  164. data/config/locales/de.yml +1866 -2
  165. data/config/locales/en.yml +1800 -1
  166. data/config/routes.rb +2 -0
  167. data/db/migrate/20141128150305_add_locale_to_users.rb +5 -0
  168. data/db/migrate/20141208161030_add_locale_to_revisions.rb +5 -0
  169. data/lib/active_admin/patches/views/pages/base.rb +8 -0
  170. data/lib/generators/pageflow/{active_admin_menu/active_admin_menu_generator.rb → active_admin_initializer/active_admin_initializer_generator.rb} +3 -1
  171. data/lib/generators/pageflow/install/install_generator.rb +1 -1
  172. data/lib/pageflow.rb +6 -0
  173. data/lib/pageflow/built_in_page_type.rb +8 -0
  174. data/lib/pageflow/configuration.rb +29 -0
  175. data/lib/pageflow/engine.rb +8 -5
  176. data/lib/pageflow/help_entries.rb +55 -0
  177. data/lib/pageflow/help_entry.rb +19 -0
  178. data/lib/pageflow/page_type.rb +23 -33
  179. data/lib/pageflow/plugin.rb +13 -0
  180. data/lib/pageflow/user_mixin.rb +4 -0
  181. data/lib/pageflow/version.rb +1 -1
  182. data/vendor/assets/javascripts/jquery.ui.all.js +4 -0
  183. metadata +52 -39
  184. data/app/assets/javascripts/pageflow/editor/templates/help.jst.ejs.erb +0 -160
  185. data/config/locales/activeadmin.de.yml +0 -114
  186. data/config/locales/activerecord.de.yml +0 -182
  187. data/config/locales/admin/accounts.yml +0 -5
  188. data/config/locales/admin/entries.yml +0 -42
  189. data/config/locales/admin/folders.de.yml +0 -7
  190. data/config/locales/admin/revisions.yml +0 -4
  191. data/config/locales/admin/tabs.de.yml +0 -8
  192. data/config/locales/admin/themings.yml +0 -7
  193. data/config/locales/admin/users.yml +0 -26
  194. data/config/locales/admin/users/delete_me.de.yml +0 -7
  195. data/config/locales/admin/users/me.de.yml +0 -9
  196. data/config/locales/devise.de.yml +0 -72
  197. data/config/locales/devise.en.yml +0 -59
  198. data/config/locales/edit_locks.de.yml +0 -16
  199. data/config/locales/editor.de.yml +0 -64
  200. data/config/locales/editor/blank_entry.yml +0 -9
  201. data/config/locales/editor/quotas.de.yml +0 -4
  202. data/config/locales/formtastic.de.yml +0 -10
  203. data/config/locales/pageflow/audio.de.yml +0 -4
  204. data/config/locales/pageflow/editor/background_positioning.de.yml +0 -13
  205. data/config/locales/pageflow/editor/errors.de.yml +0 -6
  206. data/config/locales/pageflow/ui.de.yml +0 -6
  207. data/config/locales/pageflow/user_mailer.yml +0 -5
  208. data/config/locales/pageflow/widgets.de.yml +0 -14
  209. data/config/locales/quotas.de.yml +0 -3
  210. data/config/locales/rails.de.yml +0 -199
@@ -2,5 +2,5 @@
2
2
  <span class="name"></span>
3
3
  <span class="inline_help"></span>
4
4
  </label>
5
- <p>Ziehen Sie Seiten per Drag &amp; Drop in die Seite um Verweise zu erstellen.</p>
5
+ <p><%= I18n.t('pageflow.ui.templates.inputs.page_reference.drag_hint') %></p>
6
6
  <ul class="chapters outline"></ul>
@@ -7,17 +7,17 @@
7
7
  <textarea style="width: 100%;"></textarea>
8
8
 
9
9
  <div class="toolbar">
10
- <a data-wysihtml5-command="bold" title="Fett">bold</a>
11
- <a data-wysihtml5-command="italic" title="Kursiv">italic</a>
12
- <a data-wysihtml5-command="underline" title="Unterstrichen">underline</a>
13
- <a data-wysihtml5-command="createLink" title="Link einfügen"></a>
10
+ <a data-wysihtml5-command="bold" title="<%= I18n.t('pageflow.ui.templates.inputs.text_area_input.bold') %>"></a>
11
+ <a data-wysihtml5-command="italic" title="<%= I18n.t('pageflow.ui.templates.inputs.text_area_input.italic') %>"></a>
12
+ <a data-wysihtml5-command="underline" title="<%= I18n.t('pageflow.ui.templates.inputs.text_area_input.underline') %>"></a>
13
+ <a data-wysihtml5-command="createLink" title="<%= I18n.t('pageflow.ui.templates.inputs.text_area_input.create_link') %>"></a>
14
14
 
15
15
  <div data-wysihtml5-dialog="createLink" class="dialog" style="display: none;">
16
16
  <label>
17
- URL:
17
+ <%= I18n.t('pageflow.ui.templates.inputs.text_area_input.url') %>:
18
18
  <input data-wysihtml5-dialog-field="href" value="http://">
19
19
  </label>
20
- <a data-wysihtml5-dialog-action="save">OK</a>
21
- <a data-wysihtml5-dialog-action="cancel">Abbrechen</a>
20
+ <a data-wysihtml5-dialog-action="save"><%= I18n.t('pageflow.ui.templates.inputs.text_area_input.ok') %></a>
21
+ <a data-wysihtml5-dialog-action="cancel"><%= I18n.t('pageflow.ui.templates.inputs.text_area_input.cancel') %></a>
22
22
  </div>
23
23
  </div>
@@ -43,7 +43,7 @@ pageflow.CollectionView = Backbone.Marionette.View.extend({
43
43
  addItem: function(item) {
44
44
  var view = new this.options.itemViewConstructor(_.extend({
45
45
  model: item
46
- }, this.options.itemViewOptions || {}));
46
+ }, this.getItemViewOptions(item)));
47
47
 
48
48
  this.itemViews.add(view);
49
49
 
@@ -92,6 +92,15 @@ pageflow.CollectionView = Backbone.Marionette.View.extend({
92
92
  }, this);
93
93
  },
94
94
 
95
+ getItemViewOptions: function(item) {
96
+ if (typeof this.options.itemViewOptions === 'function') {
97
+ return this.options.itemViewOptions(item);
98
+ }
99
+ else {
100
+ return this.options.itemViewOptions || {};
101
+ }
102
+ },
103
+
95
104
  closePlaceHolderView: function() {
96
105
  if (this.placeHolderView) {
97
106
  this.placeHolderView.close();
@@ -3,7 +3,7 @@ pageflow.ConfigurationEditorView = Backbone.Marionette.View.extend({
3
3
 
4
4
  initialize: function() {
5
5
  this.tabsView = new pageflow.TabsView({
6
- i18n: 'editor.configuration_editor.tabs',
6
+ i18n: 'pageflow.ui.configuration_editor.tabs',
7
7
  defaultTab: this.options.tab
8
8
  });
9
9
  this.configure();
@@ -16,7 +16,9 @@ pageflow.CheckBoxInputView = Backbone.Marionette.ItemView.extend({
16
16
  onRender: function() {
17
17
  this.ui.label.attr('for', this.cid);
18
18
  this.ui.input.attr('id', this.cid);
19
+
19
20
  this.load();
21
+ this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
20
22
  },
21
23
 
22
24
  save: function() {
@@ -26,7 +28,9 @@ pageflow.CheckBoxInputView = Backbone.Marionette.ItemView.extend({
26
28
  },
27
29
 
28
30
  load: function() {
29
- this.ui.input.attr('checked', this.displayValue());
31
+ if (!this.isClosed) {
32
+ this.ui.input.prop('checked', this.displayValue());
33
+ }
30
34
  },
31
35
 
32
36
  displayValue: function() {
@@ -0,0 +1,106 @@
1
+ pageflow.ExtendedSelectInputView = pageflow.SelectInputView.extend({
2
+ className: 'extended_select_input',
3
+
4
+ initialize: function() {
5
+ pageflow.SelectInputView.prototype.initialize.apply(this, arguments);
6
+
7
+ if (this.options.collection) {
8
+ if (this.options.descriptionProperty) {
9
+ this.options.descriptions = _.pluck(this.options.collection, this.options.descriptionProperty);
10
+ }
11
+ else if (this.options.descriptionTranslationKeyProperty) {
12
+ this.options.descriptionTanslationKeys = _.pluck(this.options.collection, this.options.descriptionTranslationKeyProperty);
13
+ }
14
+ }
15
+
16
+ if (!this.options.descriptions) {
17
+ this.options.descriptions = _.map(this.options.descriptionTanslationKeys, function(key) {
18
+ return I18n.t(key);
19
+ });
20
+ }
21
+ },
22
+
23
+ onRender: function() {
24
+ var view = this,
25
+ options = this.options;
26
+
27
+ pageflow.SelectInputView.prototype.onRender.apply(this, arguments);
28
+
29
+ $.widget("custom.extendedselectmenu", $.ui.selectmenu, {
30
+ _renderItem: function(ul, item) {
31
+ var widget = this;
32
+ var li = $('<li>', { class: item.value });
33
+ var container = $('<div>', { class: 'text-container' }).appendTo(li);
34
+ var index = options.values.indexOf(item.value);
35
+
36
+ if (item.disabled) {
37
+ li.addClass('ui-state-disabled');
38
+ }
39
+
40
+ if (options.pictogramClass) {
41
+ $('<span>', {
42
+ class: options.pictogramClass
43
+ }).prependTo(li);
44
+ }
45
+
46
+ $('<p>', {
47
+ text: item.label,
48
+ class: 'item-text'
49
+ }).appendTo(container);
50
+
51
+ $('<p>', {
52
+ text: options.descriptions[index],
53
+ class: 'item-description'
54
+ }).appendTo(container);
55
+
56
+ if (options.helpLinkClicked) {
57
+ $('<a>', {
58
+ href: '#',
59
+ title: I18n.t('pageflow.ui.views.extended_select_input_view.display_help'),
60
+ })
61
+ .on('click', function() {
62
+ widget.close();
63
+ options.helpLinkClicked(item.value);
64
+ return false;
65
+ })
66
+ .appendTo(li);
67
+ }
68
+
69
+ return li.appendTo(ul);
70
+ },
71
+
72
+ _resizeMenu: function() {
73
+ this.menuWrap.addClass('extended_select_input_menu');
74
+
75
+ var menuHeight = this.menu.height(),
76
+ menuOffset = this.button.offset().top + this.button.outerHeight(),
77
+ bodyHeight = $('body').height();
78
+
79
+ if (menuHeight + menuOffset > bodyHeight) {
80
+ this.menuWrap.outerHeight(bodyHeight - menuOffset - 5).css({ 'overflow-y': 'scroll' });
81
+ }
82
+ else {
83
+ this.menuWrap.css({
84
+ height: 'initial',
85
+ 'overflow-y': 'initial'
86
+ });
87
+ }
88
+ }
89
+ });
90
+
91
+ this.ui.select.extendedselectmenu({
92
+ select: view.select.bind(view),
93
+ width: '100%',
94
+ position: {
95
+ my: 'right top',
96
+ at: 'right bottom'
97
+ }
98
+ });
99
+ },
100
+
101
+ select: function(event, ui) {
102
+ this.ui.select.val(ui.item.value);
103
+ this.save();
104
+ }
105
+
106
+ });
@@ -63,7 +63,7 @@ pageflow.FileInputView = Backbone.Marionette.ItemView.extend({
63
63
  update: function() {
64
64
  var file = this._getFile();
65
65
 
66
- this.ui.fileName.text(file ? file.get('file_name') : '(Kein)');
66
+ this.ui.fileName.text(file ? file.get('file_name') : I18n.t('pageflow.ui.views.inputs.file_input_view.none'));
67
67
  this.ui.unsetButton.toggle(!!file);
68
68
  this.ui.editPositioningButton.toggle(this.options.positioning && !!file && file.isPositionable());
69
69
 
@@ -6,7 +6,7 @@ pageflow.ProxyUrlInputView = pageflow.UrlInputView.extend({
6
6
  var view = this;
7
7
 
8
8
  return $.Deferred(function(deferred) {
9
- deferred.notify('Pr<C3><BC>fe Erreichbarkeit der URL...');
9
+ deferred.notify(I18n.t('pageflow.ui.views.inputs.proxy_url_input_view.url_validation'));
10
10
 
11
11
  $.ajax({
12
12
  url: view.rewriteUrl(url),
@@ -14,7 +14,7 @@ pageflow.ProxyUrlInputView = pageflow.UrlInputView.extend({
14
14
  })
15
15
  .done(deferred.resolve)
16
16
  .fail(function(xhr) {
17
- deferred.reject('Die URL konnte nicht erfolgreich abgerufen werden (Der Server antwortete mit HTTP Status Code ' + xhr.status + ')');
17
+ deferred.reject(I18n.t('pageflow.ui.views.inputs.proxy_url_input_view.http_error', { status: xhr.status}));
18
18
  });
19
19
  }).promise();
20
20
  },
@@ -8,7 +8,8 @@ pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
8
8
  },
9
9
 
10
10
  ui: {
11
- select: 'select'
11
+ select: 'select',
12
+ input: 'select'
12
13
  },
13
14
 
14
15
  initialize: function() {
@@ -21,6 +22,13 @@ pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
21
22
  else if (this.options.translationKeyProperty) {
22
23
  this.options.translationKeys = _.pluck(this.options.collection, this.options.translationKeyProperty);
23
24
  }
25
+
26
+ if (this.options.groupProperty) {
27
+ this.options.groups = _.pluck(this.options.collection, this.options.groupProperty);
28
+ }
29
+ else if (this.options.groupTranslationKeyProperty) {
30
+ this.options.groupTanslationKeys = _.pluck(this.options.collection, this.options.groupTranslationKeyProperty);
31
+ }
24
32
  }
25
33
 
26
34
  if (!this.options.texts) {
@@ -35,23 +43,22 @@ pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
35
43
  });
36
44
  }
37
45
 
38
- this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
46
+ if (!this.options.groups) {
47
+ this.options.groups = _.map(this.options.groupTanslationKeys, function(key) {
48
+ return I18n.t(key);
49
+ });
50
+ }
51
+
52
+ this.optGroups = {};
39
53
  },
40
54
 
41
55
  onRender: function() {
42
56
  this.appendBlank();
43
57
  this.appendPlaceholder();
44
-
45
- _.each(this.options.values, function(value, index) {
46
- var option = document.createElement('option');
47
-
48
- option.value = value;
49
- option.text = this.options.texts[index];
50
-
51
- this.ui.select.append(option);
52
- }, this);
58
+ this.appendOptions();
53
59
 
54
60
  this.load();
61
+ this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
55
62
 
56
63
  if (this.options.ensureValueDefined && !this.ui.select.val()) {
57
64
  this.ui.select.val(this.options.values[0]);
@@ -71,7 +78,7 @@ pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
71
78
  var option = document.createElement('option');
72
79
 
73
80
  option.value = '';
74
- option.text = this.options.blankText || I18n.t('pageflow.ui.select_input_view.blank');
81
+ option.text = this.options.blankText || I18n.t('pageflow.ui.views.inputs.select_input_view.none');
75
82
 
76
83
  this.ui.select.append(option);
77
84
  },
@@ -88,17 +95,46 @@ pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
88
95
  var option = document.createElement('option');
89
96
 
90
97
  option.value = '';
91
- option.text = I18n.t('pageflow.ui.select_input_view.placeholder', {text: this.options.texts[placeholderIndex]});
98
+ option.text = I18n.t('pageflow.ui.views.inputs.select_input_view.placeholder', {text: this.options.texts[placeholderIndex]});
92
99
 
93
100
  this.ui.select.append(option);
94
101
  }
95
102
  },
96
103
 
104
+ appendOptions: function() {
105
+ _.each(this.options.values, function(value, index) {
106
+ var option = document.createElement('option');
107
+ var group = this.options.groups[index];
108
+
109
+ option.value = value;
110
+ option.text = this.options.texts[index];
111
+
112
+ if (group) {
113
+ option.setAttribute('data-group', group);
114
+ this.findOrCreateOptGroup(group).append(option);
115
+ }
116
+ else {
117
+ this.ui.select.append(option);
118
+ }
119
+ }, this);
120
+ },
121
+
122
+ findOrCreateOptGroup: function(label) {
123
+ if (!this.optGroups[label]) {
124
+ this.optGroups[label] = $('<optgroup />', {label: label})
125
+ .appendTo(this.ui.select);
126
+ }
127
+
128
+ return this.optGroups[label];
129
+ },
130
+
97
131
  save: function() {
98
132
  this.model.set(this.options.propertyName, this.ui.select.val());
99
133
  },
100
134
 
101
135
  load: function() {
102
- this.ui.select.val(this.model.get(this.options.propertyName));
136
+ if (!this.isClosed) {
137
+ this.ui.select.val(this.model.get(this.options.propertyName));
138
+ }
103
139
  }
104
140
  });
@@ -28,7 +28,7 @@ pageflow.TextAreaInputView = Backbone.Marionette.ItemView.extend({
28
28
  br: {},
29
29
  a: {
30
30
  check_attributes: {
31
- href: "url"
31
+ href: "href"
32
32
  },
33
33
  set_attributes: {
34
34
  rel: "nofollow",
@@ -34,7 +34,7 @@ pageflow.TextInputView = Backbone.Marionette.ItemView.extend({
34
34
 
35
35
  validate: function() {
36
36
  if (this.options.required && !this.ui.input.val()) {
37
- this.displayValidationError('Muss ausgefüllt werden');
37
+ this.displayValidationError(I18n.t('pageflow.ui.views.inputs.text_input_view.required_field'));
38
38
  }
39
39
  else {
40
40
  this.resetValidationError();
@@ -84,19 +84,19 @@ pageflow.UrlInputView = Backbone.Marionette.Layout.extend({
84
84
  var value = this.ui.input.val();
85
85
 
86
86
  if (options.required && !value) {
87
- displayValidationError('Muss ausgefüllt werden.');
87
+ displayValidationError(I18n.t('pageflow.ui.views.inputs.url_input_view.required_field'));
88
88
  }
89
89
  else if (value && !isValidUrl(value)) {
90
- var errorMessage = 'URL muss mit http:// beginnen.';
90
+ var errorMessage = I18n.t('pageflow.ui.views.inputs.url_input_view.url_hint');
91
91
 
92
92
  if (options.permitHttps) {
93
- errorMessage = 'URL muss mit http:// oder https:// beginnen.';
93
+ errorMessage = I18n.t('pageflow.ui.views.inputs.url_input_view.url_hint_https');
94
94
  }
95
95
 
96
96
  displayValidationError(errorMessage);
97
97
  }
98
98
  else if (value && !hasSupportedHost(value)) {
99
- displayValidationError('Es werden nur die folgenden Anbieter unterstützt:' +
99
+ displayValidationError(I18n.t('pageflow.ui.views.inputs.url_input_view.supported_vendors') +
100
100
  _.map(view.supportedHosts(), function(url) {
101
101
  return '<li>' + url +'</li>';
102
102
  }).join(''));
@@ -27,7 +27,7 @@ pageflow.inputView = {
27
27
  },
28
28
 
29
29
  inlineHelpText: function() {
30
- var key = 'editor.inline_help.' + this.model.i18nKey + '.' + this.options.propertyName;
30
+ var key = 'pageflow.ui.inline_help.' + this.model.i18nKey + '.' + this.options.propertyName;
31
31
  var text = I18n.t(key, {defaultValue: ''});
32
32
 
33
33
  if (this.options.disabled) {
@@ -1,4 +1,5 @@
1
1
  //= require_self
2
+ //= require ./video_player/media_events
2
3
  //= require ./video_player/prebuffering
3
4
  //= require ./video_player/buffer_underrun_waiting
4
5
  //= require ./video_player/src_from_options_method
@@ -16,6 +17,10 @@ pageflow.VideoPlayer = function(element, options) {
16
17
  pageflow.VideoPlayer.prebuffering(player);
17
18
  pageflow.VideoPlayer.srcFromOptionsMethod(player);
18
19
 
20
+ if (options.mediaEvents) {
21
+ pageflow.VideoPlayer.mediaEvents(player);
22
+ }
23
+
19
24
  if (options.bufferUnderrunWaiting) {
20
25
  pageflow.VideoPlayer.bufferUnderrunWaiting(player);
21
26
  }
@@ -0,0 +1,27 @@
1
+ pageflow.VideoPlayer.mediaEvents = function(player) {
2
+ function triggerMediaEvent(name) {
3
+ pageflow.events.trigger('media:' + name, {
4
+ fileName: player.currentSrc(),
5
+ currentTime: player.currentTime(),
6
+ duration: player.duration(),
7
+ volume: player.volume(),
8
+ bitrate: pageflow.features.has('high bandwidth') ? 3500000 : 2000000
9
+ });
10
+ }
11
+
12
+ player.on('play', function() {
13
+ triggerMediaEvent('play');
14
+ });
15
+
16
+ player.on('timeupdate', function() {
17
+ triggerMediaEvent('timeupdate');
18
+ });
19
+
20
+ player.on('pause', function() {
21
+ triggerMediaEvent('pause');
22
+ });
23
+
24
+ player.on('ended', function() {
25
+ triggerMediaEvent('ended');
26
+ });
27
+ };
@@ -120,6 +120,10 @@ main > .container {
120
120
  height: 100%;
121
121
  }
122
122
 
123
+ #help_entries_seed {
124
+ display: none;
125
+ }
126
+
123
127
  form#upload {
124
128
  visibility: hidden;
125
129
  }