scrivito_sdk 0.50.1 → 0.60.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/scrivito/objs_controller.rb +25 -21
  3. data/app/controllers/scrivito/ui_controller.rb +1 -1
  4. data/app/controllers/scrivito/webservice_controller.rb +1 -1
  5. data/app/models/scrivito/content_widget.rb +1 -3
  6. data/app/views/cms/index.html.erb +3 -0
  7. data/app/views/scrivito/objs/destroy.json.jbuilder +1 -0
  8. data/app/views/scrivito/objs/show.json.jbuilder +2 -0
  9. data/app/views/scrivito/objs/update.json.jbuilder +1 -1
  10. data/app/views/scrivito/objs/{widget_modification.json.jbuilder → widget.json.jbuilder} +0 -0
  11. data/config/ca-bundle.crt +24 -219
  12. data/config/precedence_routes.rb +60 -0
  13. data/config/routes.rb +13 -46
  14. data/lib/assets/javascripts/scrivito_ui.js +360 -202
  15. data/lib/assets/stylesheets/scrivito_sdk.css +1 -1
  16. data/lib/assets/stylesheets/scrivito_ui.css +1 -1
  17. data/lib/generators/scrivito/install/templates/app/models/download.rb +1 -3
  18. data/lib/generators/scrivito/install/templates/app/models/headline_widget.rb +1 -5
  19. data/lib/generators/scrivito/install/templates/app/models/image.rb +1 -3
  20. data/lib/generators/scrivito/install/templates/app/models/image_widget.rb +1 -5
  21. data/lib/generators/scrivito/install/templates/app/models/page.rb +3 -6
  22. data/lib/generators/scrivito/install/templates/app/models/text_widget.rb +1 -5
  23. data/lib/generators/scrivito/install/templates/scrivito/migrate/install_scrivito_migration.rb +1 -25
  24. data/lib/generators/scrivito/migration/templates/migration.erb +2 -26
  25. data/lib/generators/scrivito/page/page_generator.rb +0 -11
  26. data/lib/generators/scrivito/page/templates/model.erb +3 -7
  27. data/lib/generators/scrivito/widget/widget_generator.rb +0 -11
  28. data/lib/scrivito/attribute.rb +10 -16
  29. data/lib/scrivito/attribute_collection.rb +4 -0
  30. data/lib/scrivito/attribute_content.rb +239 -161
  31. data/lib/scrivito/attribute_definition.rb +16 -10
  32. data/lib/scrivito/attribute_definition_collection.rb +7 -4
  33. data/lib/scrivito/attribute_definition_migrator.rb +1 -3
  34. data/lib/scrivito/attribute_deserializer.rb +111 -0
  35. data/lib/scrivito/attribute_serializer.rb +189 -0
  36. data/lib/scrivito/basic_obj.rb +113 -78
  37. data/lib/scrivito/basic_widget.rb +103 -37
  38. data/lib/scrivito/binary.rb +3 -3
  39. data/lib/scrivito/cache/chainable.rb +10 -4
  40. data/lib/scrivito/cache/file_store.rb +7 -4
  41. data/lib/scrivito/cache/ram_store.rb +1 -1
  42. data/lib/scrivito/class_collection.rb +2 -2
  43. data/lib/scrivito/client_config.rb +7 -6
  44. data/lib/scrivito/cms_backend.rb +2 -2
  45. data/lib/scrivito/cms_field_tag.rb +33 -25
  46. data/lib/scrivito/cms_rest_api/{attribute_serializer.rb → legacy_attribute_serializer.rb} +1 -1
  47. data/lib/scrivito/cms_routing.rb +20 -14
  48. data/lib/scrivito/configuration.rb +1 -1
  49. data/lib/scrivito/controller_actions.rb +12 -4
  50. data/lib/scrivito/date_attribute.rb +8 -0
  51. data/lib/scrivito/diff.rb +1 -1
  52. data/lib/scrivito/editing_context.rb +1 -1
  53. data/lib/scrivito/editing_context_middleware.rb +1 -1
  54. data/lib/scrivito/errors.rb +4 -0
  55. data/lib/scrivito/link_parser.rb +6 -1
  56. data/lib/scrivito/migrations/cms_backend.rb +17 -60
  57. data/lib/scrivito/migrations/migration_store.rb +0 -1
  58. data/lib/scrivito/model_library.rb +6 -6
  59. data/lib/scrivito/obj_class.rb +34 -48
  60. data/lib/scrivito/obj_class_collection.rb +21 -3
  61. data/lib/scrivito/obj_create_params_parser.rb +2 -1
  62. data/lib/scrivito/obj_data.rb +9 -103
  63. data/lib/scrivito/obj_data_from_hash.rb +19 -21
  64. data/lib/scrivito/obj_data_from_service.rb +28 -48
  65. data/lib/scrivito/obj_params_parser.rb +14 -14
  66. data/lib/scrivito/obj_search_enumerator.rb +1 -1
  67. data/lib/scrivito/obj_update_params_parser.rb +2 -2
  68. data/lib/scrivito/restriction_set.rb +1 -1
  69. data/lib/scrivito/sdk_engine.rb +2 -2
  70. data/lib/scrivito/test_request.rb +10 -0
  71. data/lib/scrivito/type_computer.rb +5 -1
  72. data/lib/scrivito/widget_collection.rb +15 -0
  73. data/lib/scrivito/widget_garbage_collection.rb +1 -1
  74. data/lib/scrivito/widget_tag.rb +2 -0
  75. data/lib/scrivito/workspace.rb +2 -1
  76. data/lib/scrivito/workspace_data_from_service.rb +1 -0
  77. data/lib/scrivito_sdk.rb +17 -1
  78. metadata +36 -34
  79. data/app/views/scrivito/objs/modification.json.jbuilder +0 -1
  80. data/config/cms_routes.rb +0 -22
  81. data/lib/generators/scrivito/page/templates/migration.erb +0 -9
  82. data/lib/generators/scrivito/widget/templates/migration.erb +0 -7
data/config/routes.rb CHANGED
@@ -1,48 +1,15 @@
1
1
  Rails.application.routes.draw do
2
- resources :objs, controller: 'scrivito/objs', path: '__scrivito/objs',
3
- only: [:create, :update, :destroy], defaults: {format: :json} do
4
- collection do
5
- get :page_class_selection
6
- get :search
7
- end
8
-
9
- member do
10
- get :widget_class_selection
11
- get :modification
12
- get :widget_modification
13
-
14
- post :copy
15
- post :duplicate
16
-
17
- put :revert
18
- put :restore
19
- put :mark_resolved
20
- put :destroy_widget
21
- put :revert_widget
22
- put :restore_widget
23
- end
24
- end
25
-
26
- resources :tasks, controller: 'scrivito/tasks', path: '__scrivito/tasks', only: [:show],
27
- defaults: {format: :json}
28
-
29
- get '__scrivito/blobs/upload_permission' => 'scrivito/blobs#upload_permission',
30
- defaults: {format: :json}
31
-
32
- resources :workspaces,
33
- controller: 'scrivito/workspaces',
34
- path: '__scrivito/workspaces',
35
- only: [:index, :show, :create, :update, :destroy],
36
- defaults: {format: :json} do
37
- member do
38
- put :rebase
39
- put :publish
40
- get :check
41
- end
42
- end
43
-
44
- get '__scrivito/users/suggest' => 'scrivito/users#suggest', defaults: {format: :json}
45
-
46
- get 'scrivito', to: 'scrivito/ui#index', as: 'scrivito_ui'
47
- get 'scrivito/*application_path', to: 'scrivito/ui#index', format: false
2
+ get '/' => 'scrivito/cms_dispatch#index', as: :scrivito_root
3
+
4
+ match ':id(/*slug)',
5
+ to: 'scrivito/cms_dispatch#index',
6
+ constraints: { id: /\d+|[0-9a-f]{16}/ },
7
+ as: 'cms_id',
8
+ via: :all
9
+
10
+ match '/*permalink',
11
+ to: 'scrivito/cms_dispatch#index',
12
+ as: :scrivito_permalink,
13
+ format: false,
14
+ via: :all
48
15
  end
@@ -23965,7 +23965,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
23965
23965
 
23966
23966
 
23967
23967
 
23968
- return "<div class=\"scrivito_topbar\">\n <div class=\"scrivito_first_level\">\n <div id=\"scrivito_menu_bar_toggle\" class=\"scrivito_viewmodes_wrapper\"></div>\n <div class=\"scrivito_button_bar scrivito_app scrivito_no_hover\"><span class=\"scrivito_logo\"></span></div>\n <div id=\"scrivito_workspace_select\" class=\"scrivito_button_bar\"></div>\n <div id=\"scrivito_current_page_menu\" class=\"scrivito_button_bar scrivito_right\"></div>\n <div id=\"scrivito_current_page_restriction\"></div>\n <div id=\"scrivito_menu_bar_saving_indicator\"></div>\n </div>\n</div>\n";
23968
+ return "<div class=\"scrivito_topbar\">\n <div class=\"scrivito_first_level\">\n <div id=\"scrivito_menu_bar_toggle\" class=\"scrivito_viewmodes_wrapper\"></div>\n <div class=\"scrivito_button_bar scrivito_app scrivito_no_hover\"><span class=\"scrivito_logo\"></span></div>\n <div id=\"scrivito_workspace_select\" class=\"scrivito_button_bar\"></div>\n <div id=\"scrivito_current_page_menu\" class=\"scrivito_button_bar scrivito_right\"></div>\n <div id=\"scrivito_current_page_restriction\"></div>\n <div id=\"scrivito_menu_bar_warning\"></div>\n <div id=\"scrivito_menu_bar_saving_indicator\"></div>\n </div>\n</div>\n";
23969
23969
  });
23970
23970
  return this.ScrivitoHandlebarsTemplates["menu_bar"];
23971
23971
  }).call(this);
@@ -24002,6 +24002,22 @@ helpers = helpers || Handlebars.helpers; data = data || {};
24002
24002
  });
24003
24003
  return this.ScrivitoHandlebarsTemplates["menu_bar_toggle"];
24004
24004
  }).call(this);
24005
+ (function() {
24006
+ this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
24007
+ this.ScrivitoHandlebarsTemplates["menu_bar_warning"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
24008
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
24009
+ helpers = helpers || Handlebars.helpers; data = data || {};
24010
+ var buffer = "", stack1, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
24011
+
24012
+
24013
+ buffer += "<span class=\"scrivito_menu_bar_warning scrivito_hidden\">\n <i class=\"scrivito_icon\">&#xf021;</i>\n <span class=\"scrivito_button_label\"><span>";
24014
+ options = {hash:{},data:data};
24015
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "menu_bar_warning.warning", options) : helperMissing.call(depth0, "translate", "menu_bar_warning.warning", options)))
24016
+ + "</span></span>\n</div>\n";
24017
+ return buffer;
24018
+ });
24019
+ return this.ScrivitoHandlebarsTemplates["menu_bar_warning"];
24020
+ }).call(this);
24005
24021
  (function() {
24006
24022
  this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
24007
24023
  this.ScrivitoHandlebarsTemplates["menu_item"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
@@ -24584,7 +24600,7 @@ $.i18n().load({
24584
24600
  'menu_item.spinner.loading': 'Laden...',
24585
24601
 
24586
24602
  'choose_obj_class_dialog.add_child_page.title': 'Seitenvorlage auswählen',
24587
- 'choose_obj_class_dialog.add_widget.title': 'Widget auswählen',
24603
+ 'choose_obj_class_dialog.create_widget.title': 'Widget auswählen',
24588
24604
 
24589
24605
  'editable_ws_dialog.title.select_or_create': 'Arbeitskopie wählen',
24590
24606
  'editable_ws_dialog.title.select': 'Arbeitskopie auswählen',
@@ -24626,6 +24642,11 @@ $.i18n().load({
24626
24642
  'saving_indicator_item.saving': 'Wird gespeichert...',
24627
24643
  'saving_indicator_item.saved': 'Änderungen gespeichert',
24628
24644
 
24645
+ 'menu_bar_warning.warning': 'JS-Konsole überprüfen',
24646
+ 'menu_bar_warning.open_console': 'Es gibt Warnhinweise. Bitte öffnen Sie die JavaScript-Konsole, um Details zu erfahren.',
24647
+
24648
+ 'inplace_marker.overlapping': 'Zwei oder mehrere Menü-Handles überschneiden sich. Bitte passen Sie Ihr CSS an. Die folgenden Menü-Handles überschneiden sich:',
24649
+
24629
24650
  'widget_marker.widget_is_new': 'Widget ist neu',
24630
24651
  'widget_marker.widget_is_edited': 'Widget wurde geändert',
24631
24652
  'widget_marker.widget_is_edited_and_dragged_here': 'Widget wurde geändert und hierher gezogen',
@@ -24660,6 +24681,9 @@ $.i18n().load({
24660
24681
  'commands.rebase_workspace.title': 'Aktualisieren',
24661
24682
  'commands.rebase_workspace.tooltip': 'Arbeitskopie "$1" is veraltet. Bitte aktualisieren Sie sie.',
24662
24683
  'commands.rebase_workspace.uptodate': 'Arbeitskopie "$1" muss nicht aktualisiert werden.',
24684
+ 'commands.rebase_workspace.has_conflicts.title': 'Geänderte Inhalte wurden zwischenzeitlich veröffentlicht',
24685
+ 'commands.rebase_workspace.has_conflicts.description': 'Ihre Arbeitskopie konnte nicht vollständig aktualisiert werden. Einige Inhalte wurden auch in einer anderen Arbeitskopie geändert, die inzwischen veröffentlicht wurde. Bitte entnehmen Sie die Details der Liste der Änderungen.',
24686
+ 'commands.rebase_workspace.open_changes_dialog': 'Änderungen anzeigen',
24663
24687
 
24664
24688
  'commands.delete_workspace.title': 'Löschen',
24665
24689
  'commands.delete_workspace.dialog.title': 'Wirklich "$1" löschen?',
@@ -24732,7 +24756,9 @@ $.i18n().load({
24732
24756
  'commands.sort_items.auto_sort': 'Diese Navigation wird automatisch sortiert.',
24733
24757
  'commands.sort_items.too_less_children': 'Die Navigation kann nicht sortiert werden, weil sie weniger als zwei Elemente enthält.',
24734
24758
 
24735
- 'commands.add_widget.title': 'Widget einfügen',
24759
+ 'commands.choose_and_create_widget.title': 'Widget einfügen',
24760
+ 'commands.choose_and_create_widget.disabled': 'Es ist nicht erlaubt in dieses Feld Widgets einzufügen',
24761
+ 'commands.create_widget.title': '$1 einfügen',
24736
24762
 
24737
24763
  'commands.add_content.title': 'Inhalt einfügen',
24738
24764
  'commands.add_content.not_allowed': 'Es ist nicht erlaubt in dieses Feld beliebige Inhalte einzufügen',
@@ -24746,8 +24772,8 @@ $.i18n().load({
24746
24772
  'commands.save_widget_to_clipboard.content_title': 'Inhalt zum Kopieren markieren',
24747
24773
  'commands.save_widget_to_clipboard.widget_title': 'Widget zum Kopieren markieren',
24748
24774
 
24749
- 'commands.copy_widget_from_clipboard.content_title': 'Kopie des markierten Inhalts anhängen',
24750
- 'commands.copy_widget_from_clipboard.widget_title': 'Kopie des markierten Widgets anhängen',
24775
+ 'commands.copy_widget_from_clipboard.content_title': 'Kopie des markierten Inhalts einfügen',
24776
+ 'commands.copy_widget_from_clipboard.widget_title': 'Kopie des markierten Widgets einfügen',
24751
24777
  'commands.copy_widget_from_clipboard.paste_forbidden': 'Aufgrund ihres Typs kann das Widget hier nicht eingefügt werden. Nur Widgets der folgenden Typen können hierher verschoben oder kopiert werden: $1',
24752
24778
 
24753
24779
  'commands.delete_widget.content_title': 'Inhalt löschen',
@@ -24768,8 +24794,8 @@ $.i18n().load({
24768
24794
  'commands.publish_workspace.dialog.confirm': 'Veröffentlichen',
24769
24795
  'commands.publish_workspace.dialog.title': '"$1" veröffentlichen?',
24770
24796
  'commands.publish_workspace.dialog.description': 'Eine Arbeitskopie zu veröffentlichen ist endgültig. Dieser Vorgang kann nicht rückgängig gemacht werden.',
24771
- 'commands.publish_workspace.error_dialog.title': 'Fehler beim Publizieren',
24772
- 'commands.publish_workspace.error_dialog.description': 'Ihre Arbeitskopie konnte nicht veröffentlicht werden. Bitte entnehmen Sie die Details der Liste der Änderungen.',
24797
+ 'commands.publish_workspace.error_dialog.title': 'Arbeitskopie konnte nicht veröffentlicht werden',
24798
+ 'commands.publish_workspace.error_dialog.description': 'Bitte entnehmen Sie die Details der Liste der Änderungen.',
24773
24799
  'commands.publish_workspace.error_dialog.confirm': 'Liste der Änderungen',
24774
24800
  'commands.publish_workspace.alert.invalid_certificates': 'Die Arbeitskopie konnte nicht veröffentlicht werden, weil mindestens ein Benutzer gerade Inhalte darin ändert.',
24775
24801
 
@@ -24812,7 +24838,7 @@ $.i18n().load({
24812
24838
  'menu_item.spinner.loading': 'Loading...',
24813
24839
 
24814
24840
  'choose_obj_class_dialog.add_child_page.title': 'Select Page Type',
24815
- 'choose_obj_class_dialog.add_widget.title': 'Select Widget',
24841
+ 'choose_obj_class_dialog.create_widget.title': 'Select Widget',
24816
24842
 
24817
24843
  'editable_ws_dialog.title.select_or_create': 'Choose a working copy',
24818
24844
  'editable_ws_dialog.title.select': 'Select a working copy',
@@ -24854,6 +24880,11 @@ $.i18n().load({
24854
24880
  'saving_indicator_item.saving': 'Saving...',
24855
24881
  'saving_indicator_item.saved': 'Changes saved',
24856
24882
 
24883
+ 'menu_bar_warning.warning': 'Check JS console',
24884
+ 'menu_bar_warning.open_console': 'There are warnings. Please open the JavaScript console for details.',
24885
+
24886
+ 'inplace_marker.overlapping': 'Two or more menu handles are overlapping. Please adjust your CSS. The following menu handles are overlapping:',
24887
+
24857
24888
  'widget_marker.widget_is_new': 'Widget is new',
24858
24889
  'widget_marker.widget_is_edited': 'Widget has been modified',
24859
24890
  'widget_marker.widget_is_edited_and_dragged_here': 'Widget has been modified and dragged here',
@@ -24888,6 +24919,9 @@ $.i18n().load({
24888
24919
  'commands.rebase_workspace.title': 'Update',
24889
24920
  'commands.rebase_workspace.tooltip': 'Working copy "$1" is outdated. Please update it.',
24890
24921
  'commands.rebase_workspace.uptodate': 'Working copy "$1" is up to date.',
24922
+ 'commands.rebase_workspace.has_conflicts.title': 'Changed content has been published intermediately',
24923
+ 'commands.rebase_workspace.has_conflicts.description': 'Your working copy could not be fully updated. Some of its content has also been altered in a different working copy that has been published in the meantime. Please refer to the changes list for details.',
24924
+ 'commands.rebase_workspace.open_changes_dialog': 'Show changes',
24891
24925
 
24892
24926
  'commands.delete_workspace.title': 'Delete',
24893
24927
  'commands.delete_workspace.dialog.title': 'Really delete "$1"?',
@@ -24962,7 +24996,9 @@ $.i18n().load({
24962
24996
 
24963
24997
  'obj_sorting_dialog.title': 'Sort items',
24964
24998
 
24965
- 'commands.add_widget.title': 'Insert widget',
24999
+ 'commands.choose_and_create_widget.title': 'Insert widget',
25000
+ 'commands.choose_and_create_widget.disabled': 'It is not allowed to insert widgets in this field',
25001
+ 'commands.create_widget.title': 'Insert $1',
24966
25002
 
24967
25003
  'commands.add_content.title': 'Insert content',
24968
25004
  'commands.add_content.not_allowed': 'It is not allowed to insert random content into this field.',
@@ -24974,8 +25010,8 @@ $.i18n().load({
24974
25010
  'commands.save_widget_to_clipboard.content_title': 'Mark content for copying',
24975
25011
  'commands.save_widget_to_clipboard.widget_title': 'Mark widget for copying',
24976
25012
 
24977
- 'commands.copy_widget_from_clipboard.content_title': 'Append copy of marked content',
24978
- 'commands.copy_widget_from_clipboard.widget_title': 'Append copy of marked widget',
25013
+ 'commands.copy_widget_from_clipboard.content_title': 'Insert copy of marked content',
25014
+ 'commands.copy_widget_from_clipboard.widget_title': 'Insert copy of marked widget',
24979
25015
  'commands.copy_widget_from_clipboard.paste_forbidden': 'Due to its type, the widget cannot be moved or copied here. Only widgets of the following types can be inserted here: $1',
24980
25016
 
24981
25017
  'commands.delete_widget.content_title': 'Delete content',
@@ -24996,9 +25032,9 @@ $.i18n().load({
24996
25032
  'commands.publish_workspace.dialog.confirm': 'Publish',
24997
25033
  'commands.publish_workspace.dialog.title': 'Publish "$1"?',
24998
25034
  'commands.publish_workspace.dialog.description': 'Publishing a working copy is final. This action cannot be undone.',
24999
- 'commands.publish_workspace.error_dialog.title': 'Error while publishing',
25000
- 'commands.publish_workspace.error_dialog.description': 'Your working copy could not be published. Please check the changes list for details.',
25001
- 'commands.publish_workspace.error_dialog.confirm': 'Open Changes List',
25035
+ 'commands.publish_workspace.error_dialog.title': 'Working copy could not be published',
25036
+ 'commands.publish_workspace.error_dialog.description': 'Please check the changes list for details.',
25037
+ 'commands.publish_workspace.error_dialog.confirm': 'Open changes list',
25002
25038
  'commands.publish_workspace.alert.invalid_certificates': 'The working copy could not be published because at least one user is currently modifying content in it.',
25003
25039
 
25004
25040
  'ajax.error': 'Communication with the CMS failed with error: $1',
@@ -25046,6 +25082,15 @@ var scrivito = {};
25046
25082
  }
25047
25083
  },
25048
25084
 
25085
+ warn: function() {
25086
+ if (scrivito.is_development_mode) {
25087
+ scrivito.menu_bar_warning.show();
25088
+ }
25089
+ if (window.console) {
25090
+ window.console.warn.apply(window.console, arguments);
25091
+ }
25092
+ },
25093
+
25049
25094
  log_error: function(message, exception) {
25050
25095
  if (window.console) {
25051
25096
  window.console.error(message, exception);
@@ -25157,9 +25202,7 @@ var scrivito = {};
25157
25202
  message += ' Please use "' + alternative + '" instead.';
25158
25203
  }
25159
25204
 
25160
- if (window.console) {
25161
- window.console.warn(message);
25162
- }
25205
+ scrivito.warn(message);
25163
25206
  },
25164
25207
 
25165
25208
  // @api public
@@ -25337,6 +25380,8 @@ var scrivito = {};
25337
25380
  // FIXME content-widget
25338
25381
  enable_content_upload: false,
25339
25382
 
25383
+ is_development_mode: false,
25384
+
25340
25385
  init: function(config) {
25341
25386
  scrivito.config = config;
25342
25387
 
@@ -25346,8 +25391,11 @@ var scrivito = {};
25346
25391
  scrivito.user.init(config.user);
25347
25392
  scrivito.user_permissions.init(config.user_permissions);
25348
25393
 
25394
+ scrivito.is_development_mode = config.is_development_mode;
25395
+
25349
25396
  scrivito.inplace_marker.init();
25350
25397
  scrivito.menu_bar_saving_indicator.init();
25398
+ scrivito.menu_bar_warning.init();
25351
25399
  scrivito.menu_bar_toggle.init();
25352
25400
  scrivito.current_page_menu.init();
25353
25401
  scrivito.current_page_restriction.init();
@@ -25356,10 +25404,10 @@ var scrivito = {};
25356
25404
 
25357
25405
  scrivito.child_list_commands.init();
25358
25406
  scrivito.widget_commands.init();
25359
- scrivito.widget_field_commands.init();
25407
+ scrivito.widgetlist_field_commands.init();
25360
25408
 
25361
25409
  scrivito.child_list_marker.init();
25362
- scrivito.widget_field_marker.init();
25410
+ scrivito.widgetlist_field_marker.init();
25363
25411
  scrivito.widget_marker.init();
25364
25412
 
25365
25413
  scrivito.menus.init();
@@ -25458,7 +25506,7 @@ var scrivito = {};
25458
25506
  } else {
25459
25507
  var cms_element = build_cms_element(dom_element);
25460
25508
  cms_element.set_original_content(content);
25461
- return cms_element.save(content).fail(function(error) {
25509
+ return cms_element.save(content).then(function() { return; }, function(error) {
25462
25510
  return {message: error.message};
25463
25511
  });
25464
25512
  }
@@ -26177,6 +26225,34 @@ var scrivito = {};
26177
26225
  }
26178
26226
  });
26179
26227
  }());
26228
+ (function() {
26229
+ $.extend(scrivito, {
26230
+ menu_bar_warning: {
26231
+ init: function() {
26232
+ scrivito.menu_bar.register_item_renderer(function(parent_view) {
26233
+ scrivito.menu_bar_warning.create(
26234
+ parent_view.find('#scrivito_menu_bar_warning'));
26235
+ });
26236
+ },
26237
+
26238
+ create: function(parent_view) {
26239
+ parent_view.append(scrivito.template.render('menu_bar_warning'));
26240
+ $(parent_view).on('click', function() {
26241
+ scrivito.alert_dialog(scrivito.t('menu_bar_warning.open_console'));
26242
+ scrivito.menu_bar_warning.hide();
26243
+ });
26244
+ },
26245
+
26246
+ show: function() {
26247
+ $('.scrivito_menu_bar_warning').show();
26248
+ },
26249
+
26250
+ hide: function() {
26251
+ $('.scrivito_menu_bar_warning').hide();
26252
+ }
26253
+ }
26254
+ });
26255
+ }());
26180
26256
  (function() {
26181
26257
  $.extend(scrivito, {
26182
26258
  menu_bar_toggle: {
@@ -26693,6 +26769,7 @@ var scrivito = {};
26693
26769
  form_data.append('file', file); // File must be appended last, otherwise S3 will complain.
26694
26770
 
26695
26771
  permission.blob.filename = file.name.replace(/[^\w\-_\.$]/g, '-');
26772
+ permission.blob.content_type = file.type;
26696
26773
 
26697
26774
  return $.ajax({type: 'POST', url: permission.url, data: form_data,
26698
26775
  // These are needed in order for jQuery to work properly with a FormData.
@@ -27048,7 +27125,9 @@ var scrivito = {};
27048
27125
 
27049
27126
  return request_promise.then(function(model_data) {
27050
27127
  var field_data = model_data[that.field_name()];
27051
- return _.isArray(field_data) ? field_data[0] : field_data;
27128
+ if (field_data) {
27129
+ return field_data[0];
27130
+ }
27052
27131
  });
27053
27132
  },
27054
27133
 
@@ -27457,7 +27536,9 @@ var scrivito = {};
27457
27536
  },
27458
27537
 
27459
27538
  destroy: function() {
27460
- return scrivito.ajax('DELETE', 'objs/' + that.id());
27539
+ return scrivito.ajax('DELETE', 'objs/' + that.id()).then(function(result) {
27540
+ return result.redirect_to;
27541
+ });
27461
27542
  },
27462
27543
 
27463
27544
  destroy_widget: function(widget_id) {
@@ -27473,10 +27554,6 @@ var scrivito = {};
27473
27554
  return scrivito.ajax('PUT', 'objs/'+that.id()+'/revert_widget?widget_id='+widget_id);
27474
27555
  },
27475
27556
 
27476
- update_widget_modification: function(widget_id) {
27477
- return scrivito.ajax('GET', 'objs/' + that.id() + '/widget_modification?widget_id=' + widget_id);
27478
- },
27479
-
27480
27557
  restore: function() {
27481
27558
  return scrivito.ajax('PUT', 'objs/' + that.id() + '/restore');
27482
27559
  },
@@ -27507,10 +27584,15 @@ var scrivito = {};
27507
27584
  });
27508
27585
  },
27509
27586
 
27510
- update_modification: function() {
27511
- return scrivito.ajax('GET', 'objs/' + that.id() + '/modification').then(function(data) {
27587
+ reload: function() {
27588
+ return scrivito.ajax('GET', 'objs/'+that.id()).then(function(data) {
27589
+ params.has_conflict = data.has_conflict;
27512
27590
  params.modification = data.modification;
27513
27591
  });
27592
+ },
27593
+
27594
+ reload_widget: function(widget_id) {
27595
+ return scrivito.ajax('GET', 'objs/'+that.id()+'/widget?widget_id='+widget_id);
27514
27596
  }
27515
27597
  };
27516
27598
 
@@ -27855,7 +27937,7 @@ var scrivito = {};
27855
27937
  save: function(widget_attributes) {
27856
27938
  var obj_attributes = build_obj_attributes(widget_attributes);
27857
27939
  return that.obj().save(obj_attributes).then(function(obj_data) {
27858
- return obj_data._widget_pool[that.id()];
27940
+ return obj_data._widget_pool[0][that.id()];
27859
27941
  });
27860
27942
  },
27861
27943
 
@@ -27894,8 +27976,8 @@ var scrivito = {};
27894
27976
  return scrivito.ajax('GET', that.markup_url(action_name), {dataType: 'html'});
27895
27977
  },
27896
27978
 
27897
- update_modification: function() {
27898
- return that.obj().update_widget_modification(that.id()).then(function(data) {
27979
+ reload: function() {
27980
+ return that.obj().reload_widget(that.id()).then(function(data) {
27899
27981
  options.modification = data.modification;
27900
27982
  });
27901
27983
  }
@@ -27970,9 +28052,9 @@ var scrivito = {};
27970
28052
  }());
27971
28053
  (function() {
27972
28054
  $.extend(scrivito, {
27973
- widget_field_element: {
28055
+ widgetlist_field_element: {
27974
28056
  create_instance: function(cms_element) {
27975
- if (cms_element.dom_element().attr('data-scrivito-field-type') === 'widget') {
28057
+ if (cms_element.dom_element().attr('data-scrivito-field-type') === 'widgetlist') {
27976
28058
  var that = scrivito.cms_field_element.create_instance(cms_element);
27977
28059
 
27978
28060
  $.extend(that, {
@@ -28002,17 +28084,28 @@ var scrivito = {};
28002
28084
  }
28003
28085
  },
28004
28086
 
28005
- create_widget: function(widget_class, widget_element) {
28006
- return add_widget({create: {_obj_class: widget_class}}, widget_element);
28007
- },
28087
+ add_widget: function(widget_spec, widget_element) {
28088
+ var position;
28089
+ if (widget_element) {
28090
+ position = widget_element.dom_element()
28091
+ .prevAll('[data-scrivito-private-widget-id]').length;
28092
+ } else {
28093
+ position = that.widget_elements().length;
28094
+ }
28008
28095
 
28009
- copy_widget: function(params, widget_element) {
28010
- return add_widget({copy: params}, widget_element);
28011
- },
28096
+ var content = that.content();
28097
+ content.splice(position, 0, widget_spec);
28012
28098
 
28013
- create_content_widget: function(content, widget_element) {
28014
- return add_widget({create: {_obj_class: 'Scrivito::ContentWidget', content: content}},
28015
- widget_element);
28099
+ return that.save(content).then(function(field_data) {
28100
+ var new_widget_id;
28101
+ if (field_data.list) {
28102
+ new_widget_id = field_data.list[position].widget;
28103
+ } else {
28104
+ new_widget_id = field_data[position];
28105
+ }
28106
+ var widget = scrivito.widget.create_instance(that.obj(), new_widget_id);
28107
+ return prepend_widget(widget, widget_element);
28108
+ });
28016
28109
  },
28017
28110
 
28018
28111
  fetch_widget_class_selection: function() {
@@ -28026,12 +28119,28 @@ var scrivito = {};
28026
28119
  },
28027
28120
 
28028
28121
  allowed_classes: function() {
28029
- var allowed_classes = that.dom_element().attr('data-scrivito-private-field-widget-allowed-classes');
28122
+ return _.map(allowed_classes_json(), function(obj_class) {
28123
+ return obj_class.name;
28124
+ });
28125
+ },
28030
28126
 
28031
- if (allowed_classes) {
28032
- return JSON.parse(allowed_classes);
28033
- } else {
28034
- return null;
28127
+ allowed_classes_for_create: function() {
28128
+ return _.without(that.allowed_classes(), 'Scrivito::ContentWidget');
28129
+ },
28130
+
28131
+ can_create_widget: function() {
28132
+ return that.allowed_classes_for_create().length !== 0;
28133
+ },
28134
+
28135
+ can_choose_widget_class: function() {
28136
+ return that.allowed_classes_for_create().length > 1;
28137
+ },
28138
+
28139
+ description_for_allowed_class: function(class_name) {
28140
+ var allowed_class = _.findWhere(allowed_classes_json(), {name: class_name});
28141
+
28142
+ if (allowed_class) {
28143
+ return allowed_class.description;
28035
28144
  }
28036
28145
  },
28037
28146
 
@@ -28047,9 +28156,17 @@ var scrivito = {};
28047
28156
 
28048
28157
  is_content_widget_allowed: function() {
28049
28158
  return that.is_valid_child_class('Scrivito::ContentWidget');
28050
- },
28159
+ }
28160
+ });
28161
+
28162
+ var allowed_classes_json = function() {
28163
+ var allowed_classes = that.dom_element().attr('data-scrivito-private-field-widget-allowed-classes');
28164
+
28165
+ return JSON.parse(allowed_classes);
28166
+ };
28051
28167
 
28052
- prepend_widget_markup: function(widget_markup, widget_element) {
28168
+ var prepend_widget = function(widget, widget_element) {
28169
+ return widget.fetch_show_markup().then(function(widget_markup) {
28053
28170
  var dom_element = $($.trim(widget_markup));
28054
28171
  if (widget_element) {
28055
28172
  widget_element.dom_element().before(dom_element);
@@ -28057,36 +28174,11 @@ var scrivito = {};
28057
28174
  that.dom_element().prepend(dom_element);
28058
28175
  }
28059
28176
  scrivito.gui.new_content(dom_element.get(0));
28060
- return dom_element;
28061
- },
28062
-
28063
- append_widget_markup: function(widget_markup, widget_element) {
28064
- var dom_element = $($.trim(widget_markup));
28065
- if (widget_element) {
28066
- widget_element.dom_element().after(dom_element);
28067
- } else {
28068
- that.dom_element().append(dom_element);
28069
- }
28070
- scrivito.gui.new_content(dom_element.get(0));
28071
- return dom_element;
28072
- }
28073
- });
28074
28177
 
28075
- var add_widget = function(widget_spec, widget_element) {
28076
- var position;
28077
- if (widget_element) {
28078
- position = widget_element.dom_element()
28079
- .prevAll('[data-scrivito-private-widget-id]').length + 1;
28080
- } else {
28081
- position = that.widget_elements().length;
28082
- }
28083
-
28084
- var content = that.content();
28085
- content.splice(position, 0, widget_spec);
28178
+ scrivito.ensure_fully_visible_within_application_window(dom_element);
28179
+ scrivito.widget_sorting.update_placeholder(that);
28086
28180
 
28087
- return that.save(content).then(function(field_data) {
28088
- var new_widget_id = field_data.list[position].widget;
28089
- return scrivito.widget.create_instance(that.obj(), new_widget_id);
28181
+ return widget;
28090
28182
  });
28091
28183
  };
28092
28184
 
@@ -28095,12 +28187,12 @@ var scrivito = {};
28095
28187
  },
28096
28188
 
28097
28189
  all: function(root_element) {
28098
- return scrivito.cms_element.all('[data-scrivito-field-type="widget"]', root_element);
28190
+ return scrivito.cms_element.all('[data-scrivito-field-type="widgetlist"]', root_element);
28099
28191
  }
28100
28192
  }
28101
28193
  });
28102
28194
 
28103
- scrivito.cms_element.definitions.push(scrivito.widget_field_element);
28195
+ scrivito.cms_element.definitions.push(scrivito.widgetlist_field_element);
28104
28196
  }());
28105
28197
  (function() {
28106
28198
  $.extend(scrivito, {
@@ -28180,6 +28272,13 @@ var scrivito = {};
28180
28272
  return scrivito.ajax('GET', 'workspaces/' + that.id()).then(function(details) {
28181
28273
  return details.memberships;
28182
28274
  });
28275
+ },
28276
+
28277
+ has_conflicts: function() {
28278
+ return scrivito.obj_where('_conflicts', 'equals', true).size().then(function(size) {
28279
+ var promise = $.Deferred();
28280
+ return size === 0 ? promise.reject() : promise.resolve();
28281
+ });
28183
28282
  }
28184
28283
  };
28185
28284
 
@@ -29089,8 +29188,7 @@ var scrivito = {};
29089
29188
 
29090
29189
  refresh: function() {
29091
29190
  if (!scrivito.editing_context.is_view_mode()) {
29092
- scrivito.application_window.document().dom_element()
29093
- .find('.scrivito_editing_marker').remove();
29191
+ all_markers().remove();
29094
29192
 
29095
29193
  _.each(callbacks, function(callback) {
29096
29194
  callback(builder);
@@ -29100,6 +29198,15 @@ var scrivito = {};
29100
29198
  }
29101
29199
  },
29102
29200
 
29201
+ are_overlapping: function(dom_element1, dom_element2) {
29202
+ var a = dom_element1.getBoundingClientRect();
29203
+ var b = dom_element2.getBoundingClientRect();
29204
+ return a.left <= b.right &&
29205
+ b.left <= a.right &&
29206
+ a.top <= b.bottom &&
29207
+ b.top <= a.bottom;
29208
+ },
29209
+
29103
29210
  // For test purpose only.
29104
29211
  reset_callbacks: function() {
29105
29212
  callbacks = [];
@@ -29107,12 +29214,29 @@ var scrivito = {};
29107
29214
  }
29108
29215
  });
29109
29216
 
29217
+ var all_markers = function() {
29218
+ return scrivito.application_window.document().dom_element().find('.scrivito_editing_marker');
29219
+ };
29220
+
29221
+ var warn_on_overlap = function(marker_dom) {
29222
+ var overlapping = _.filter(all_markers().not(marker_dom), function(other_marker_dom) {
29223
+ return scrivito.inplace_marker.are_overlapping(marker_dom, other_marker_dom);
29224
+ });
29225
+ if (overlapping.length > 0) {
29226
+ scrivito.warn.apply(null,
29227
+ _.flatten([scrivito.t('inplace_marker.overlapping'), marker_dom, overlapping]));
29228
+ }
29229
+ };
29230
+
29110
29231
  var builder = {
29111
29232
  activate_for: function(cms_element, options) {
29112
29233
  var marker = $(scrivito.template.render('inplace_marker',
29113
29234
  $.extend({icon: '\uf000'}, options || {})));
29114
29235
 
29115
29236
  marker.on('click', function() {
29237
+ if (scrivito.is_development_mode) {
29238
+ warn_on_overlap(marker[0]);
29239
+ }
29116
29240
  scrivito.menus.toggle(marker, cms_element.menu());
29117
29241
  return false;
29118
29242
  });
@@ -29221,11 +29345,11 @@ var scrivito = {};
29221
29345
  (function() {
29222
29346
  $.extend(scrivito, {
29223
29347
  add_content_command: function(cms_element) {
29224
- var widget_field_element, widget_element;
29348
+ var widgetlist_field_element, widget_element;
29225
29349
  if (cms_element.widget_field) {
29226
29350
  widget_element = cms_element;
29227
29351
  } else {
29228
- widget_field_element = cms_element;
29352
+ widgetlist_field_element = cms_element;
29229
29353
  }
29230
29354
 
29231
29355
  return scrivito.command.create_instance({
@@ -29235,32 +29359,34 @@ var scrivito = {};
29235
29359
 
29236
29360
  present: function() {
29237
29361
  return scrivito.select_content && scrivito.editing_context.is_editing_mode() &&
29238
- (widget_element || widget_field_element.is_empty());
29362
+ (widget_element || widgetlist_field_element.is_empty());
29239
29363
  },
29240
29364
 
29241
29365
  disabled: function() {
29242
- if (!(widget_field_element || widget_element.widget_field())
29366
+ if (!(widgetlist_field_element || widget_element.widget_field())
29243
29367
  .is_content_widget_allowed()) {
29244
29368
  return scrivito.t('commands.add_content.not_allowed');
29245
29369
  }
29246
29370
  },
29247
29371
 
29248
29372
  execute: function() {
29249
- if (!widget_field_element) {
29250
- widget_field_element = widget_element.widget_field();
29373
+ if (!widgetlist_field_element) {
29374
+ widgetlist_field_element = widget_element.widget_field();
29251
29375
  }
29252
29376
 
29253
29377
  scrivito.select_content().then(function(contents) {
29254
29378
  var content = contents[0];
29255
29379
  if (content) {
29256
- var create_widget = widget_field_element.create_content_widget(content, widget_element);
29257
- scrivito.with_saving_overlay(create_widget.then(function(widget) {
29258
- return widget.fetch_show_markup().then(function(markup) {
29259
- var dom_element = widget_field_element.append_widget_markup(markup, widget_element);
29260
- scrivito.ensure_fully_visible_within_application_window(dom_element);
29261
- scrivito.widget_sorting.update_placeholder(widget_field_element);
29262
- });
29263
- }));
29380
+ var widget_params = {
29381
+ create: {
29382
+ _obj_class: 'Scrivito::ContentWidget',
29383
+ content: content
29384
+ }
29385
+ };
29386
+
29387
+ scrivito.with_saving_overlay(
29388
+ widgetlist_field_element.add_widget(widget_params, widget_element)
29389
+ );
29264
29390
  }
29265
29391
  });
29266
29392
  }
@@ -29294,41 +29420,39 @@ var scrivito = {};
29294
29420
  }());
29295
29421
  (function() {
29296
29422
  $.extend(scrivito, {
29297
- add_widget_command: function(cms_element) {
29298
- var widget_field_element, widget_element;
29423
+ choose_and_create_widget_command: function(cms_element) {
29424
+ var widgetlist_field_element, widget_element;
29299
29425
  if (cms_element.widget_field) {
29300
29426
  widget_element = cms_element;
29427
+ widgetlist_field_element = widget_element.widget_field();
29301
29428
  } else {
29302
- widget_field_element = cms_element;
29429
+ widgetlist_field_element = cms_element;
29303
29430
  }
29304
29431
 
29305
29432
  return scrivito.command.create_instance({
29306
- id: 'scrivito.sdk.add_widget',
29307
- title: scrivito.t('commands.add_widget.title'),
29433
+ id: 'scrivito.sdk.choose_and_create_widget',
29434
+ title: scrivito.t('commands.choose_and_create_widget.title'),
29308
29435
  icon: '&#xf022;',
29309
29436
 
29310
29437
  present: function() {
29311
29438
  return scrivito.editing_context.is_editing_mode() &&
29312
- (widget_element || widget_field_element.is_empty());
29439
+ (widget_element || widgetlist_field_element.is_empty()) &&
29440
+ (widgetlist_field_element.can_choose_widget_class() ||
29441
+ !widgetlist_field_element.can_create_widget());
29313
29442
  },
29314
29443
 
29315
- execute: function() {
29316
- if (!widget_field_element) {
29317
- widget_field_element = widget_element.widget_field();
29444
+ disabled: function() {
29445
+ if (!widgetlist_field_element.can_create_widget()) {
29446
+ return scrivito.t('commands.choose_and_create_widget.disabled');
29318
29447
  }
29448
+ },
29319
29449
 
29320
- var selection = widget_field_element.fetch_widget_class_selection();
29321
- var choose_widget_obj_class = scrivito.choose_obj_class_dialog(selection, 'add_widget');
29322
- return choose_widget_obj_class.then(function(obj_class) {
29450
+ execute: function() {
29451
+ var choose_obj_class = scrivito.choose_obj_class_dialog(
29452
+ widgetlist_field_element.fetch_widget_class_selection(), 'create_widget');
29453
+ return choose_obj_class.then(function(obj_class) {
29323
29454
  return scrivito.with_saving_overlay(
29324
- widget_field_element.create_widget(obj_class, widget_element).then(function(widget) {
29325
- return widget.fetch_show_markup().then(function(widget_markup) {
29326
- var dom_element = widget_field_element
29327
- .append_widget_markup(widget_markup, widget_element);
29328
- scrivito.ensure_fully_visible_within_application_window(dom_element);
29329
- scrivito.widget_sorting.update_placeholder(widget_field_element);
29330
- });
29331
- })
29455
+ widgetlist_field_element.add_widget({create: {_obj_class: obj_class}}, widget_element)
29332
29456
  );
29333
29457
  });
29334
29458
  }
@@ -29369,11 +29493,11 @@ var scrivito = {};
29369
29493
  (function() {
29370
29494
  $.extend(scrivito, {
29371
29495
  copy_widget_from_clipboard_command: function(cms_element) {
29372
- var widget_field_element, widget_element;
29496
+ var widgetlist_field_element, widget_element;
29373
29497
  if (cms_element.widget_field) {
29374
29498
  widget_element = cms_element;
29375
29499
  } else {
29376
- widget_field_element = cms_element;
29500
+ widgetlist_field_element = cms_element;
29377
29501
  }
29378
29502
 
29379
29503
  return scrivito.command.create_instance({
@@ -29388,40 +29512,72 @@ var scrivito = {};
29388
29512
  present: function() {
29389
29513
  return scrivito.editing_context.is_editing_mode() &&
29390
29514
  scrivito.widget_clipboard.is_present() &&
29391
- (widget_element || widget_field_element.is_empty());
29515
+ (widget_element || widgetlist_field_element.is_empty());
29392
29516
  },
29393
29517
 
29394
29518
  disabled: function() {
29395
- if (!widget_field_element) {
29396
- widget_field_element = widget_element.widget_field();
29519
+ if (!widgetlist_field_element) {
29520
+ widgetlist_field_element = widget_element.widget_field();
29397
29521
  }
29398
29522
  var widget_class_name = scrivito.widget_clipboard.widget().widget_class_name();
29399
- if (!widget_field_element.is_valid_child_class(widget_class_name)) {
29523
+ if (!widgetlist_field_element.is_valid_child_class(widget_class_name)) {
29400
29524
  return scrivito.t('commands.copy_widget_from_clipboard.paste_forbidden',
29401
- widget_field_element.allowed_classes().join(', '));
29525
+ widgetlist_field_element.allowed_classes().join(', '));
29402
29526
  }
29403
29527
  },
29404
29528
 
29405
29529
  execute: function() {
29406
- if (!widget_field_element) {
29407
- widget_field_element = widget_element.widget_field();
29530
+ if (!widgetlist_field_element) {
29531
+ widgetlist_field_element = widget_element.widget_field();
29408
29532
  }
29409
29533
  var widget = scrivito.widget_clipboard.widget();
29410
29534
  var workspace_id = scrivito.widget_clipboard.workspace_id();
29411
- var copy_widget = widget_field_element.copy_widget({
29412
- workspace_id: workspace_id,
29413
- obj_id: widget.obj().id(),
29414
- widget_id: widget.id()
29415
- }, widget_element);
29416
- return scrivito.with_saving_overlay(copy_widget.then(function(widget) {
29417
- return widget.fetch_show_markup().then(function(widget_markup) {
29418
- var dom_element = widget_field_element
29419
- .append_widget_markup(widget_markup, widget_element);
29420
- scrivito.ensure_fully_visible_within_application_window(dom_element);
29421
- scrivito.widget_sorting.update_placeholder(widget_field_element);
29422
- scrivito.inplace_marker.refresh();
29423
- });
29424
- }));
29535
+ var copy_params = {
29536
+ copy: {
29537
+ workspace_id: workspace_id,
29538
+ obj_id: widget.obj().id(),
29539
+ widget_id: widget.id()
29540
+ }
29541
+ };
29542
+ return scrivito.with_saving_overlay(
29543
+ widgetlist_field_element.add_widget(copy_params, widget_element)
29544
+ );
29545
+ }
29546
+ });
29547
+ }
29548
+ });
29549
+ }());
29550
+ (function() {
29551
+ $.extend(scrivito, {
29552
+ create_widget_command: function(cms_element) {
29553
+ var widgetlist_field_element, widget_element, description, obj_class;
29554
+ if (cms_element.widget_field) {
29555
+ widget_element = cms_element;
29556
+ widgetlist_field_element = widget_element.widget_field();
29557
+ } else {
29558
+ widgetlist_field_element = cms_element;
29559
+ }
29560
+
29561
+ obj_class = widgetlist_field_element.allowed_classes_for_create()[0];
29562
+ description = widgetlist_field_element.description_for_allowed_class(obj_class);
29563
+
29564
+ return scrivito.command.create_instance({
29565
+ id: 'scrivito.sdk.create_widget',
29566
+ title: scrivito.t('commands.create_widget.title', description),
29567
+ icon: '&#xf022;',
29568
+
29569
+ present: function() {
29570
+ return scrivito.editing_context.is_editing_mode() &&
29571
+ (widget_element || widgetlist_field_element.is_empty()) &&
29572
+ widgetlist_field_element.can_create_widget() &&
29573
+ !widgetlist_field_element.can_choose_widget_class();
29574
+ },
29575
+
29576
+ execute: function() {
29577
+ var widget_params = {create: {_obj_class: obj_class}};
29578
+ return scrivito.with_saving_overlay(
29579
+ widgetlist_field_element.add_widget(widget_params, widget_element)
29580
+ );
29425
29581
  }
29426
29582
  });
29427
29583
  }
@@ -29498,12 +29654,12 @@ var scrivito = {};
29498
29654
  confirm_button_text: scrivito.t('commands.delete_obj.dialog.confirm'),
29499
29655
  confirm_button_color: 'red'
29500
29656
  }).then(function() {
29501
- return scrivito.with_saving_overlay(obj.destroy().then(function() {
29657
+ return scrivito.with_saving_overlay(obj.destroy().then(function(redirect_to) {
29502
29658
  if (scrivito.obj_clipboard.is_present() &&
29503
29659
  scrivito.obj_clipboard.obj().id() === obj.id()) {
29504
29660
  scrivito.obj_clipboard.clear();
29505
29661
  }
29506
- return scrivito.redirect_to(scrivito.root_path());
29662
+ return scrivito.redirect_to(redirect_to);
29507
29663
  }));
29508
29664
  });
29509
29665
  }
@@ -29531,13 +29687,13 @@ var scrivito = {};
29531
29687
  confirm_button_text: scrivito.t('commands.delete_widget.dialog.confirm'),
29532
29688
  confirm_button_color: 'red'
29533
29689
  }).then(function() {
29534
- var widget_field_element = widget_element.widget_field();
29690
+ var widgetlist_field_element = widget_element.widget_field();
29535
29691
  var widget = widget_element.widget();
29536
29692
  widget_element.dom_element().remove();
29537
- if (widget_field_element.is_empty()) {
29693
+ if (widgetlist_field_element.is_empty()) {
29538
29694
  scrivito.inplace_marker.refresh();
29539
29695
  }
29540
- scrivito.widget_sorting.update_placeholder(widget_field_element);
29696
+ scrivito.widget_sorting.update_placeholder(widgetlist_field_element);
29541
29697
 
29542
29698
  return widget.destroy().then(function() {
29543
29699
  if (scrivito.widget_clipboard.is_present() &&
@@ -29714,7 +29870,6 @@ var scrivito = {};
29714
29870
  scrivito.confirmation_dialog({
29715
29871
  title: scrivito.t('commands.publish_workspace.error_dialog.title'),
29716
29872
  description: scrivito.t('commands.publish_workspace.error_dialog.description'),
29717
- color: 'red',
29718
29873
  icon: '&#xf033;',
29719
29874
  confirm_button_text: scrivito.t('commands.publish_workspace.error_dialog.confirm')
29720
29875
  }).then(function() {
@@ -29775,7 +29930,14 @@ var scrivito = {};
29775
29930
 
29776
29931
  execute: function() {
29777
29932
  scrivito.with_saving_overlay(workspace.rebase().then(function() {
29778
- return scrivito.reload();
29933
+ return workspace.has_conflicts().then(function() {
29934
+ return scrivito.confirmation_dialog({
29935
+ title: scrivito.t('commands.rebase_workspace.has_conflicts.title'),
29936
+ description: scrivito.t('commands.rebase_workspace.has_conflicts.description'),
29937
+ confirm_button_text: scrivito.t('commands.rebase_workspace.open_changes_dialog'),
29938
+ cancel_button_text: scrivito.t('close')
29939
+ }).done(function() { scrivito.changes_dialog.open(); });
29940
+ }).always(function() { return scrivito.application_window.reload(); });
29779
29941
  }));
29780
29942
  }
29781
29943
  });
@@ -29898,7 +30060,7 @@ var scrivito = {};
29898
30060
  },
29899
30061
 
29900
30062
  update: function() {
29901
- return obj.update_modification();
30063
+ return obj.reload();
29902
30064
  },
29903
30065
 
29904
30066
  execute: function() {
@@ -29945,7 +30107,7 @@ var scrivito = {};
29945
30107
  }
29946
30108
  },
29947
30109
 
29948
- update: function() { return widget.update_modification(); },
30110
+ update: function() { return widget.reload(); },
29949
30111
 
29950
30112
  execute: function() {
29951
30113
  return scrivito.confirmation_dialog({
@@ -30204,9 +30366,10 @@ var scrivito = {};
30204
30366
  if (!scrivito.editing_context.is_view_mode()) {
30205
30367
  scrivito.on('content', function(content) {
30206
30368
  _.each(scrivito.widget_element.all($(content)), function(widget_element) {
30207
- var widget_field_element = widget_element.widget_field();
30369
+ var widgetlist_field_element = widget_element.widget_field();
30208
30370
  widget_element.set_menu([
30209
- scrivito.add_widget_command(widget_element),
30371
+ scrivito.create_widget_command(widget_element),
30372
+ scrivito.choose_and_create_widget_command(widget_element),
30210
30373
  //
30211
30374
  // FIXME content-widget
30212
30375
  //
@@ -30227,19 +30390,20 @@ var scrivito = {};
30227
30390
  }());
30228
30391
  (function() {
30229
30392
  $.extend(scrivito, {
30230
- widget_field_commands: {
30393
+ widgetlist_field_commands: {
30231
30394
  init: function() {
30232
30395
  if (scrivito.editing_context.is_editing_mode()) {
30233
30396
  scrivito.on('content', function(content) {
30234
- _.each(scrivito.widget_field_element.all($(content)), function(widget_field_element) {
30235
- widget_field_element.set_menu([
30236
- scrivito.add_widget_command(widget_field_element),
30397
+ _.each(scrivito.widgetlist_field_element.all($(content)), function(widgetlist_field_element) {
30398
+ widgetlist_field_element.set_menu([
30399
+ scrivito.create_widget_command(widgetlist_field_element),
30400
+ scrivito.choose_and_create_widget_command(widgetlist_field_element),
30237
30401
  //
30238
30402
  // FIXME content-widget
30239
30403
  //
30240
- // scrivito.add_content_command(widget_field_element),
30241
- scrivito.copy_widget_from_clipboard_command(widget_field_element)
30242
- ].concat(widget_field_element.menu()));
30404
+ // scrivito.add_content_command(widgetlist_field_element),
30405
+ scrivito.copy_widget_from_clipboard_command(widgetlist_field_element)
30406
+ ].concat(widgetlist_field_element.menu()));
30243
30407
  });
30244
30408
  });
30245
30409
  }
@@ -30266,13 +30430,13 @@ var scrivito = {};
30266
30430
  }());
30267
30431
  (function() {
30268
30432
  $.extend(scrivito, {
30269
- widget_field_marker: {
30433
+ widgetlist_field_marker: {
30270
30434
  init: function() {
30271
30435
  scrivito.inplace_marker.define(function(inplace_marker) {
30272
30436
  if (scrivito.editing_context.is_editing_mode()) {
30273
- _.each(scrivito.widget_field_element.all(), function(widget_field_element) {
30274
- if (widget_field_element.is_empty()) {
30275
- inplace_marker.activate_for(widget_field_element);
30437
+ _.each(scrivito.widgetlist_field_element.all(), function(widgetlist_field_element) {
30438
+ if (widgetlist_field_element.is_empty()) {
30439
+ inplace_marker.activate_for(widgetlist_field_element);
30276
30440
  }
30277
30441
  });
30278
30442
  }
@@ -30287,8 +30451,8 @@ var scrivito = {};
30287
30451
  init: function() {
30288
30452
  scrivito.inplace_marker.define(function(inplace_marker) {
30289
30453
  if (scrivito.editing_context.selected_workspace.is_editable()) {
30290
- _.each(scrivito.widget_field_element.all(), function(widget_field_element) {
30291
- _.each(widget_field_element.widget_elements(), function(widget_element) {
30454
+ _.each(scrivito.widgetlist_field_element.all(), function(widgetlist_field_element) {
30455
+ _.each(widgetlist_field_element.widget_elements(), function(widget_element) {
30292
30456
  var show_as_modified = widget_element.widget().is_modified() ||
30293
30457
  widget_element.widget().is_placement_modified();
30294
30458
  if (scrivito.editing_context.is_editing_mode() ||
@@ -30424,10 +30588,10 @@ var scrivito = {};
30424
30588
 
30425
30589
  var widget_element = scrivito.cms_element.from_dom_element(ui.item);
30426
30590
  var widget_class_name = widget_element.widget().widget_class_name();
30427
- _.each(widget_field_elements, function(widget_field_element) {
30428
- var dom_element = cms_document.local_jquery(widget_field_element.dom_element());
30591
+ _.each(widgetlist_field_elements, function(widgetlist_field_element) {
30592
+ var dom_element = cms_document.local_jquery(widgetlist_field_element.dom_element());
30429
30593
  if (dom_element.data('ui-sortable')) {
30430
- if (widget_field_element.is_valid_child_class(widget_class_name)) {
30594
+ if (widgetlist_field_element.is_valid_child_class(widget_class_name)) {
30431
30595
  dom_element.addClass('scrivito_widget_drop_allowed');
30432
30596
  } else {
30433
30597
  dom_element.sortable('disable');
@@ -30443,8 +30607,8 @@ var scrivito = {};
30443
30607
 
30444
30608
  // Drag the _last_ widget out of a widget field and then drop it back.
30445
30609
  if (!ui.sender) {
30446
- var widget_field_element = scrivito.cms_element.from_dom_element(ui.item).widget_field();
30447
- scrivito.widget_sorting.update_placeholder(widget_field_element);
30610
+ var widgetlist_field_element = scrivito.cms_element.from_dom_element(ui.item).widget_field();
30611
+ scrivito.widget_sorting.update_placeholder(widgetlist_field_element);
30448
30612
  }
30449
30613
 
30450
30614
  scrivito.inplace_marker.refresh();
@@ -30479,19 +30643,19 @@ var scrivito = {};
30479
30643
  // The bug in http://bugs.jqueryui.com/ticket/5671 is still present.
30480
30644
  over: function(event, ui) {
30481
30645
  if (ui.sender) {
30482
- var widget_field_element = scrivito.cms_element.from_dom_element(ui.sender);
30646
+ var widgetlist_field_element = scrivito.cms_element.from_dom_element(ui.sender);
30483
30647
  // If "over" is triggered, then exactly one item has been removed from the sender field.
30484
- var number_of_widget_elements = widget_field_element.widget_elements().length - 1;
30485
- scrivito.widget_sorting.update_placeholder(widget_field_element,
30648
+ var number_of_widget_elements = widgetlist_field_element.widget_elements().length - 1;
30649
+ scrivito.widget_sorting.update_placeholder(widgetlist_field_element,
30486
30650
  number_of_widget_elements);
30487
30651
  }
30488
30652
  },
30489
30653
 
30490
- update_placeholder: function(widget_field_element, number_of_widget_elements) {
30491
- var dom_element = widget_field_element.dom_element();
30654
+ update_placeholder: function(widgetlist_field_element, number_of_widget_elements) {
30655
+ var dom_element = widgetlist_field_element.dom_element();
30492
30656
 
30493
30657
  if (number_of_widget_elements === undefined) {
30494
- number_of_widget_elements = widget_field_element.widget_elements().length;
30658
+ number_of_widget_elements = widgetlist_field_element.widget_elements().length;
30495
30659
  }
30496
30660
 
30497
30661
  if (number_of_widget_elements === 0) {
@@ -30503,21 +30667,21 @@ var scrivito = {};
30503
30667
  }
30504
30668
  });
30505
30669
 
30506
- var widget_field_elements = [];
30670
+ var widgetlist_field_elements = [];
30507
30671
  var widget_field_dom_elements = [];
30508
30672
 
30509
30673
  var create = function(root_element) {
30510
30674
  var cms_document = scrivito.cms_document.from(root_element);
30511
30675
 
30512
30676
  if (scrivito.editing_context.visible_workspace.is_editable()) {
30513
- _.each(scrivito.widget_field_element.all(root_element), function(widget_field_element) {
30514
- var dom_element = cms_document.local_jquery(widget_field_element.dom_element());
30677
+ _.each(scrivito.widgetlist_field_element.all(root_element), function(widgetlist_field_element) {
30678
+ var dom_element = cms_document.local_jquery(widgetlist_field_element.dom_element());
30515
30679
  if (!dom_element.data('ui-sortable')) {
30516
30680
  dom_element.sortable({
30517
30681
  items: '> [data-scrivito-private-widget-id]',
30518
30682
  handle: '> .scrivito_editing_marker',
30519
30683
  placeholder: 'scrivito_widget_drop_placeholder',
30520
- connectWith: '*[data-scrivito-field-type="widget"]',
30684
+ connectWith: '*[data-scrivito-field-type="widgetlist"]',
30521
30685
 
30522
30686
  start: scrivito.widget_sorting.start,
30523
30687
  stop: scrivito.widget_sorting.stop,
@@ -30529,32 +30693,32 @@ var scrivito = {};
30529
30693
  tolerance: 'pointer' // jQuery fails to correctly determine the intersection.
30530
30694
  });
30531
30695
 
30532
- scrivito.widget_sorting.update_placeholder(widget_field_element);
30696
+ scrivito.widget_sorting.update_placeholder(widgetlist_field_element);
30533
30697
 
30534
- widget_field_elements.push(widget_field_element);
30698
+ widgetlist_field_elements.push(widgetlist_field_element);
30535
30699
  widget_field_dom_elements.push(dom_element);
30536
30700
  }
30537
30701
  });
30538
30702
  }
30539
30703
  };
30540
30704
 
30541
- var add_changes = function(changes, widget_field_element) {
30542
- var parent_widget = widget_field_element.parent_widget();
30705
+ var add_changes = function(changes, widgetlist_field_element) {
30706
+ var parent_widget = widgetlist_field_element.parent_widget();
30543
30707
  if (parent_widget) {
30544
- add_widget_changes(changes, widget_field_element, parent_widget.id());
30708
+ add_widget_changes(changes, widgetlist_field_element, parent_widget.id());
30545
30709
  } else {
30546
- add_field_changes(changes, widget_field_element);
30710
+ add_field_changes(changes, widgetlist_field_element);
30547
30711
  }
30548
30712
  };
30549
30713
 
30550
- var add_field_changes = function(changes, widget_field_element) {
30551
- changes[widget_field_element.field_name()] = widget_field_element.content();
30714
+ var add_field_changes = function(changes, widgetlist_field_element) {
30715
+ changes[widgetlist_field_element.field_name()] = widgetlist_field_element.content();
30552
30716
  };
30553
30717
 
30554
- var add_widget_changes = function(changes, widget_field_element, parent_widget_id) {
30718
+ var add_widget_changes = function(changes, widgetlist_field_element, parent_widget_id) {
30555
30719
  if (!changes._widget_pool) { changes._widget_pool = {}; }
30556
30720
  if (!changes._widget_pool[parent_widget_id]) { changes._widget_pool[parent_widget_id] = {}; }
30557
- add_field_changes(changes._widget_pool[parent_widget_id], widget_field_element);
30721
+ add_field_changes(changes._widget_pool[parent_widget_id], widgetlist_field_element);
30558
30722
  };
30559
30723
  }());
30560
30724
  (function() {
@@ -30563,8 +30727,8 @@ var scrivito = {};
30563
30727
  init: function() {
30564
30728
  scrivito.on('content', function(content) {
30565
30729
  if (scrivito.in_editable_view()) {
30566
- _.each(scrivito.widget_field_element.all($(content)), function(widget_field_element) {
30567
- scrivito.content_upload.create(widget_field_element);
30730
+ _.each(scrivito.widgetlist_field_element.all($(content)), function(widgetlist_field_element) {
30731
+ scrivito.content_upload.create(widgetlist_field_element);
30568
30732
  });
30569
30733
 
30570
30734
  _.each(scrivito.widget_element.all($(content)), function(widget_element) {
@@ -30574,9 +30738,9 @@ var scrivito = {};
30574
30738
  });
30575
30739
  },
30576
30740
 
30577
- create: function(widget_field_element, widget_element) {
30578
- var dropzone = (widget_element || widget_field_element).dom_element();
30579
- var is_active = function() { return widget_element || widget_field_element.is_empty(); };
30741
+ create: function(widgetlist_field_element, widget_element) {
30742
+ var dropzone = (widget_element || widgetlist_field_element).dom_element();
30743
+ var is_active = function() { return widget_element || widgetlist_field_element.is_empty(); };
30580
30744
 
30581
30745
  dropzone.on('dragenter', function() {
30582
30746
  if (is_active()) {
@@ -30599,7 +30763,7 @@ var scrivito = {};
30599
30763
  if (data_transfer) {
30600
30764
  var files = data_transfer.files;
30601
30765
  if (files.length === 1) {
30602
- scrivito.content_upload.upload(files[0], widget_field_element, widget_element);
30766
+ scrivito.content_upload.upload(files[0], widgetlist_field_element, widget_element);
30603
30767
  }
30604
30768
  }
30605
30769
  }
@@ -30607,21 +30771,14 @@ var scrivito = {};
30607
30771
  });
30608
30772
  },
30609
30773
 
30610
- upload: function(file, widget_field_element, widget_element) {
30774
+ upload: function(file, widgetlist_field_element, widget_element) {
30611
30775
  var name = file.name.replace(/[^a-z0-9_.$\-]/ig, '-');
30612
30776
  var path = '_resources/'+Math.floor(Math.random() * 1000)+'/'+name;
30613
30777
  var obj_class = scrivito.default_obj_class_for_content_type(file.type);
30614
30778
 
30615
30779
  var create_obj = scrivito.create_obj({blob: file, _path: path, _obj_class: obj_class});
30616
30780
  scrivito.with_saving_overlay(create_obj.then(function(obj) {
30617
- var create_widget = widget_field_element.create_content_widget(obj.id, widget_element);
30618
- return create_widget.then(function(widget) {
30619
- return widget.fetch_show_markup().then(function(markup) {
30620
- var dom_element = widget_field_element.prepend_widget_markup(markup, widget_element);
30621
- scrivito.ensure_fully_visible_within_application_window(dom_element);
30622
- scrivito.widget_sorting.update_placeholder(widget_field_element);
30623
- });
30624
- });
30781
+ return widgetlist_field_element.create_content_widget(obj.id, widget_element);
30625
30782
  }));
30626
30783
  }
30627
30784
  }
@@ -31015,6 +31172,7 @@ var scrivito = {};
31015
31172
 
31016
31173
 
31017
31174
 
31175
+
31018
31176
 
31019
31177
 
31020
31178
  //