scrivito_sdk 0.40.0 → 0.41.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 (32) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/scrivito/objs_controller.rb +5 -1
  3. data/app/helpers/scrivito_helper.rb +22 -11
  4. data/app/models/scrivito/content_widget.rb +11 -0
  5. data/app/views/scrivito/content_widget/show.html.erb +7 -0
  6. data/config/ca-bundle.crt +1 -1
  7. data/config/cms_routes.rb +3 -1
  8. data/config/routes.rb +0 -1
  9. data/lib/assets/javascripts/scrivito_sdk.js +1 -1
  10. data/lib/assets/javascripts/scrivito_ui.js +415 -137
  11. data/lib/assets/stylesheets/scrivito_sdk.css +13 -0
  12. data/lib/assets/stylesheets/scrivito_ui.css +121 -0
  13. data/lib/generators/scrivito/install/install_generator.rb +6 -1
  14. data/lib/generators/scrivito/install/templates/app/views/download/embed.html.erb +1 -0
  15. data/lib/generators/scrivito/install/templates/app/views/image/embed.html.erb +1 -0
  16. data/lib/generators/scrivito/install/templates/scrivito/migrate/install_scrivito_migration.rb +4 -0
  17. data/lib/scrivito/basic_obj.rb +9 -1
  18. data/lib/scrivito/basic_widget.rb +5 -1
  19. data/lib/scrivito/cache/chainable.rb +52 -0
  20. data/lib/scrivito/cache/file_store.rb +26 -0
  21. data/lib/scrivito/cache/ram_store.rb +32 -0
  22. data/lib/scrivito/cache.rb +1 -40
  23. data/lib/scrivito/cache_garbage_collector.rb +1 -1
  24. data/lib/scrivito/cms_backend.rb +5 -5
  25. data/lib/scrivito/{cms_cache_storage.rb → cms_data_cache.rb} +22 -10
  26. data/lib/scrivito/cms_rest_api/widget_extractor.rb +1 -1
  27. data/lib/scrivito/configuration.rb +41 -6
  28. data/lib/scrivito/content_state.rb +6 -6
  29. data/lib/scrivito/controller_actions.rb +8 -2
  30. data/lib/scrivito/obj_params_parser.rb +4 -2
  31. data/lib/scrivito/workspace_data_from_service.rb +2 -2
  32. metadata +12 -5
@@ -23777,9 +23777,9 @@ function program5(depth0,data) {
23777
23777
  return escapeExpression(stack1);
23778
23778
  }
23779
23779
 
23780
- buffer += "<li class=\"scrivito_menu_item scrivito_";
23781
- if (stack1 = helpers.id) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
23782
- else { stack1 = depth0.id; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
23780
+ buffer += "<li class=\"scrivito_menu_item ";
23781
+ if (stack1 = helpers.dom_id) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
23782
+ else { stack1 = depth0.dom_id; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
23783
23783
  buffer += escapeExpression(stack1)
23784
23784
  + " ";
23785
23785
  stack1 = helpers['if'].call(depth0, depth0.is_disabled, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
@@ -23787,11 +23787,10 @@ function program5(depth0,data) {
23787
23787
  buffer += "\">\n <span title=\"";
23788
23788
  stack1 = helpers['if'].call(depth0, depth0.is_enabled, {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});
23789
23789
  if(stack1 || stack1 === 0) { buffer += stack1; }
23790
- buffer += "\">\n <i class=\"scrivito_icon\">";
23790
+ buffer += "\">\n ";
23791
23791
  if (stack1 = helpers.icon) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
23792
23792
  else { stack1 = depth0.icon; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
23793
23793
  if(stack1 || stack1 === 0) { buffer += stack1; }
23794
- buffer += "</i>";
23795
23794
  if (stack1 = helpers.title) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
23796
23795
  else { stack1 = depth0.title; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
23797
23796
  buffer += escapeExpression(stack1)
@@ -23800,6 +23799,40 @@ function program5(depth0,data) {
23800
23799
  });
23801
23800
  return this.ScrivitoHandlebarsTemplates["menu_item"];
23802
23801
  }).call(this);
23802
+ (function() {
23803
+ this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
23804
+ this.ScrivitoHandlebarsTemplates["menu_item/customer_icon"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
23805
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
23806
+ helpers = helpers || Handlebars.helpers; data = data || {};
23807
+ var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
23808
+
23809
+
23810
+ buffer += "<i class=\"scrivito_customer_icon sci_";
23811
+ if (stack1 = helpers.icon) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
23812
+ else { stack1 = depth0.icon; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
23813
+ buffer += escapeExpression(stack1)
23814
+ + "\"></i>\n";
23815
+ return buffer;
23816
+ });
23817
+ return this.ScrivitoHandlebarsTemplates["menu_item/customer_icon"];
23818
+ }).call(this);
23819
+ (function() {
23820
+ this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
23821
+ this.ScrivitoHandlebarsTemplates["menu_item/factory_icon"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
23822
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
23823
+ helpers = helpers || Handlebars.helpers; data = data || {};
23824
+ var buffer = "", stack1, functionType="function";
23825
+
23826
+
23827
+ buffer += "<i class=\"scrivito_icon\">";
23828
+ if (stack1 = helpers.icon) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
23829
+ else { stack1 = depth0.icon; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
23830
+ if(stack1 || stack1 === 0) { buffer += stack1; }
23831
+ buffer += "</i>\n";
23832
+ return buffer;
23833
+ });
23834
+ return this.ScrivitoHandlebarsTemplates["menu_item/factory_icon"];
23835
+ }).call(this);
23803
23836
  (function() {
23804
23837
  this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
23805
23838
  this.ScrivitoHandlebarsTemplates["menu_item/spinner"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
@@ -24170,11 +24203,15 @@ function program7(depth0,data) {
24170
24203
  return escapeExpression(stack1);
24171
24204
  }
24172
24205
 
24173
- buffer += "<li id=\"scrivito_";
24174
- if (stack1 = helpers.id) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
24175
- else { stack1 = depth0.id; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
24206
+ buffer += "<li id=\"";
24207
+ if (stack1 = helpers.dom_id) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
24208
+ else { stack1 = depth0.dom_id; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
24176
24209
  buffer += escapeExpression(stack1)
24177
- + "\" class=\"scrivito_menu_item\n ";
24210
+ + "\" class=\"scrivito_menu_item ";
24211
+ if (stack1 = helpers.dom_id) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
24212
+ else { stack1 = depth0.dom_id; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
24213
+ buffer += escapeExpression(stack1)
24214
+ + "\n ";
24178
24215
  stack1 = helpers['if'].call(depth0, depth0.is_action_required, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
24179
24216
  if(stack1 || stack1 === 0) { buffer += stack1; }
24180
24217
  buffer += "\n ";
@@ -24397,7 +24434,8 @@ $.i18n().load({
24397
24434
  'commands.revert_obj.dialog.description': 'Verworfene Änderungen können nicht wiederhergestellt werden.',
24398
24435
  'commands.revert_obj.dialog.confirm': 'Verwerfen',
24399
24436
 
24400
- 'commands.revert_widget.title': 'Änderungen am Widget verwerfen',
24437
+ 'commands.revert_widget.content_title': 'Änderungen am Inhalt verwerfen',
24438
+ 'commands.revert_widget.widget_title': 'Änderungen am Widget verwerfen',
24401
24439
  'commands.revert_widget.rtc_workspace': 'Dieses Widget ist Teil der "rtc"-Arbeitskopie, bei der Änderungen an Widgets nicht verworfen werden können.',
24402
24440
  'commands.revert_widget.is_new': 'Dies ist ein neues Widget. Um die Erstellung dieses Widgets rückgängig zu machen, löschen Sie es bitte.',
24403
24441
  'commands.revert_widget.is_not_modified': 'Dieses Widget wurde nicht geändert. Daher gibt es nichts zu verwerfen.',
@@ -24436,18 +24474,24 @@ $.i18n().load({
24436
24474
 
24437
24475
  'commands.add_widget.title': 'Widget einfügen',
24438
24476
 
24477
+ 'commands.add_content.title': 'Inhalt einfügen',
24478
+ 'commands.add_content.not_allowed': 'Es ist nicht erlaubt in dieses Feld beliebige Inhalte einzufügen',
24479
+
24439
24480
  'obj_sorting_dialog.title': 'Elemente sortieren',
24440
24481
 
24441
24482
  'commands.widget_details.title': 'Widget-Eigenschaften',
24442
24483
  'commands.widget_details.no_details_view': 'Dieses Widget hat keine Eigenschaften',
24443
24484
  'commands.widget_details.dialog.title': 'Eigenschaften von "$1"',
24444
24485
 
24445
- 'commands.save_widget_to_clipboard.title': 'Widget zum Kopieren markieren',
24486
+ 'commands.save_widget_to_clipboard.content_title': 'Inhalt zum Kopieren markieren',
24487
+ 'commands.save_widget_to_clipboard.widget_title': 'Widget zum Kopieren markieren',
24446
24488
 
24447
- 'commands.copy_widget_from_clipboard.title': 'Kopie des markierten Widgets anhängen',
24489
+ 'commands.copy_widget_from_clipboard.content_title': 'Kopie des markierten Inhalts anhängen',
24490
+ 'commands.copy_widget_from_clipboard.widget_title': 'Kopie des markierten Widgets anhängen',
24448
24491
  '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',
24449
24492
 
24450
- 'commands.delete_widget.title': 'Widget löschen',
24493
+ 'commands.delete_widget.content_title': 'Inhalt löschen',
24494
+ 'commands.delete_widget.widget_title': 'Widget löschen',
24451
24495
  'commands.delete_widget.dialog.title': 'Wirklich dieses Widget löschen?',
24452
24496
  'commands.delete_widget.dialog.description': 'Ein gelöschtes Widget kann nicht wiederhergestellt werden.',
24453
24497
  'commands.delete_widget.dialog.confirm': 'Löschen',
@@ -24612,7 +24656,8 @@ $.i18n().load({
24612
24656
  'commands.revert_obj.dialog.description': 'Discarded changes cannot be restored.',
24613
24657
  'commands.revert_obj.dialog.confirm': 'Discard',
24614
24658
 
24615
- 'commands.revert_widget.title': 'Discard changes to widget',
24659
+ 'commands.revert_widget.content_title': 'Discard changes to content',
24660
+ 'commands.revert_widget.widget_title': 'Discard changes to widget',
24616
24661
  'commands.revert_widget.rtc_workspace': 'This widget is part of the "rtc" working copy, for which discarding changes to a widgets is not supported.',
24617
24662
  'commands.revert_widget.is_new': 'This is a new widget. To discard the creation of this widget, please delete it.',
24618
24663
  'commands.revert_widget.is_not_modified': 'This widget has not been modified. Therefore, nothing can be discarded.',
@@ -24653,16 +24698,22 @@ $.i18n().load({
24653
24698
 
24654
24699
  'commands.add_widget.title': 'Insert widget',
24655
24700
 
24701
+ 'commands.add_content.title': 'Insert content',
24702
+ 'commands.add_content.not_allowed': 'It is not allowed to insert random content into this field.',
24703
+
24656
24704
  'commands.widget_details.title': 'Widget properties',
24657
24705
  'commands.widget_details.no_details_view': 'This widget has no properties',
24658
24706
  'commands.widget_details.dialog.title': 'Properties of "$1"',
24659
24707
 
24660
- 'commands.save_widget_to_clipboard.title': 'Mark widget for copying',
24708
+ 'commands.save_widget_to_clipboard.content_title': 'Mark content for copying',
24709
+ 'commands.save_widget_to_clipboard.widget_title': 'Mark widget for copying',
24661
24710
 
24662
- 'commands.copy_widget_from_clipboard.title': 'Append copy of marked widget',
24711
+ 'commands.copy_widget_from_clipboard.content_title': 'Append copy of marked content',
24712
+ 'commands.copy_widget_from_clipboard.widget_title': 'Append copy of marked widget',
24663
24713
  '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',
24664
24714
 
24665
- 'commands.delete_widget.title': 'Delete widget',
24715
+ 'commands.delete_widget.content_title': 'Delete content',
24716
+ 'commands.delete_widget.widget_title': 'Delete widget',
24666
24717
  'commands.delete_widget.dialog.title': 'Really delete this widget?',
24667
24718
  'commands.delete_widget.dialog.description': 'A deleted widget cannot be restored.',
24668
24719
  'commands.delete_widget.dialog.confirm': 'Delete',
@@ -24978,6 +25029,45 @@ var scrivito = {};
24978
25029
  return scrivito.obj_class_defaults.lookup(content_type);
24979
25030
  },
24980
25031
 
25032
+ // @api public
25033
+ configure_menu_order: function(order) {
25034
+ scrivito.menu_order = order;
25035
+ },
25036
+
25037
+ pattern_sort: function(items, patterns) {
25038
+ if (patterns && patterns.length) {
25039
+ var results = [];
25040
+ _.each(patterns, function(pattern, index) {
25041
+ if (!pattern.match(/(.*)\.\*$/)) {
25042
+ var hit = _.find(items, function(item) { return item.id() === pattern; });
25043
+ if (hit) {
25044
+ results[index] = hit;
25045
+ items = _.without(items, hit);
25046
+ }
25047
+ }
25048
+ });
25049
+ _.each(patterns, function(pattern, index) {
25050
+ if (pattern.match(/(.*)\.\*$/)) {
25051
+ var hits = _.select(items, function(item) {
25052
+ return !item.id().indexOf(pattern.replace('.*', ''));
25053
+ });
25054
+ if (hits.length) {
25055
+ results[index] = hits;
25056
+ items = _.difference(items, hits);
25057
+ }
25058
+ }
25059
+ });
25060
+ return _.flatten(_.compact(results.concat(items)));
25061
+ } else {
25062
+ return items;
25063
+ }
25064
+ },
25065
+
25066
+ // @api beta
25067
+ register_select_content: function(select_content) {
25068
+ scrivito.select_content = select_content;
25069
+ },
25070
+
24981
25071
  init: function(config) {
24982
25072
  scrivito.config = config;
24983
25073
 
@@ -25007,6 +25097,7 @@ var scrivito = {};
25007
25097
 
25008
25098
  scrivito.widget_reloading.init();
25009
25099
  scrivito.widget_sorting.init();
25100
+ scrivito.content_upload.init();
25010
25101
  scrivito.reloading.init();
25011
25102
 
25012
25103
  window.onbeforeunload = scrivito.warn_before_unloading;
@@ -25110,11 +25201,41 @@ var scrivito = {};
25110
25201
  var get_menu = function(dom_element) {
25111
25202
  assert_valid_dom_element(dom_element);
25112
25203
  var cms_element = build_cms_element(dom_element);
25204
+ var fetch_menu = function() { return cms_element.menu(); };
25205
+
25113
25206
  return {
25114
- add: function(command_options) {
25115
- var menu = cms_element.menu();
25116
- menu.push(scrivito.command.create_instance(command_options));
25207
+ list: function() { return fetch_menu(); },
25208
+
25209
+ add: function(id, params) {
25210
+ var menu = fetch_menu();
25211
+ menu.push(scrivito.command.create_instance(_.extend(params, {id: id})));
25212
+ cms_element.set_menu(menu);
25213
+ },
25214
+
25215
+ update: function(id, params) {
25216
+ var menu = fetch_menu();
25217
+ _.find(menu, function(command, index) {
25218
+ if (command.id() === id) {
25219
+ return command.update_params(params);
25220
+ }
25221
+ });
25222
+ cms_element.set_menu(menu);
25223
+ },
25224
+
25225
+ replace: function(id, params) {
25226
+ var menu = fetch_menu();
25227
+ _.find(menu, function(command, index) {
25228
+ if (command.id() === id) {
25229
+ return menu[index] = scrivito.command.create_instance(_.extend(params, {id: id}));
25230
+ }
25231
+ });
25117
25232
  cms_element.set_menu(menu);
25233
+ },
25234
+
25235
+ remove: function(id) {
25236
+ var menu = fetch_menu();
25237
+ var command = _.find(menu, function(command) { return command.id() === id; });
25238
+ cms_element.set_menu(_.without(menu, command));
25118
25239
  }
25119
25240
  };
25120
25241
  };
@@ -25230,8 +25351,9 @@ var scrivito = {};
25230
25351
  gui: {
25231
25352
  start: function() {
25232
25353
  scrivito.gui.on('document', function(document) {
25233
- document.dom_element().find('body').attr('data-scrivito-display-mode',
25234
- scrivito.editing_context.display_mode);
25354
+ var body = document.dom_element().find('body');
25355
+ body.attr('data-scrivito-display-mode', scrivito.editing_context.display_mode);
25356
+ _.each(['dragenter', 'dragover', 'drop'], function(e) { body.on(e, false); });
25235
25357
  });
25236
25358
 
25237
25359
  $('body').append('<div id="scrivito_editing"></div>');
@@ -25518,12 +25640,17 @@ var scrivito = {};
25518
25640
  return params.id;
25519
25641
  },
25520
25642
 
25643
+ dom_id: function() {
25644
+ return params.id.replace(/\./g, '_');
25645
+ },
25646
+
25521
25647
  title: function() {
25522
- return params.title;
25648
+ var title = params.title;
25649
+ return typeof title === 'function' ? title() : title;
25523
25650
  },
25524
25651
 
25525
25652
  icon: function() {
25526
- return params.icon;
25653
+ return params.icon || '&#xf000;';
25527
25654
  },
25528
25655
 
25529
25656
  tooltip: function() {
@@ -25578,6 +25705,10 @@ var scrivito = {};
25578
25705
  return true;
25579
25706
  }
25580
25707
  return false;
25708
+ },
25709
+
25710
+ update_params: function(new_params) {
25711
+ return _.extend(params, new_params);
25581
25712
  }
25582
25713
  };
25583
25714
 
@@ -25590,8 +25721,13 @@ var scrivito = {};
25590
25721
  $.extend(scrivito, {
25591
25722
  menu_item: {
25592
25723
  create_instance: function(command) {
25724
+ var icon = command.icon();
25725
+ var icon_template = 'menu_item/' + (icon.indexOf('&') ? 'customer' : 'factory') + '_icon';
25726
+
25593
25727
  var render_menu_item = function() {
25594
- return scrivito.template.render('menu_item', command);
25728
+ return scrivito.template.render('menu_item', _.extend({}, command, {icon: function() {
25729
+ return scrivito.template.render(icon_template, {icon: icon});
25730
+ }}));
25595
25731
  };
25596
25732
 
25597
25733
  return {
@@ -25599,11 +25735,9 @@ var scrivito = {};
25599
25735
  if (command.is_present()) {
25600
25736
  var view;
25601
25737
  if (command.needs_update()) {
25602
- var id = _.uniqueId('scrivito_' + command.id());
25738
+ var id = _.uniqueId(command.dom_id());
25603
25739
  view = scrivito.template.render('menu_item/spinner', {id: id});
25604
- command.update().then(function() {
25605
- $('#' + id).replaceWith(render_menu_item());
25606
- });
25740
+ command.update().then(function() { $('#'+id).replaceWith(render_menu_item()); });
25607
25741
  } else {
25608
25742
  view = render_menu_item();
25609
25743
  }
@@ -25889,7 +26023,7 @@ var scrivito = {};
25889
26023
  }));
25890
26024
 
25891
26025
  var bind_command = function(command) {
25892
- workspace_select.on('click', '#scrivito_' + command.id(), function() {
26026
+ workspace_select.on('click', '#'+command.dom_id(), function() {
25893
26027
  return command.execute();
25894
26028
  });
25895
26029
  };
@@ -26030,7 +26164,7 @@ var scrivito = {};
26030
26164
  var query_params = {};
26031
26165
 
26032
26166
  if (!!is_binary) {
26033
- base_url += '__scrivito/details_page/';
26167
+ base_url += '__scrivito/resource_details/';
26034
26168
  query_params.return_to = document.URL;
26035
26169
  }
26036
26170
 
@@ -26453,7 +26587,9 @@ var scrivito = {};
26453
26587
  is_current_page_restricted: scrivito.is_current_page_restricted,
26454
26588
  in_editable_view: scrivito.in_editable_view,
26455
26589
  register_default_obj_class_for_content_type: scrivito.register_default_obj_class_for_content_type,
26456
- default_obj_class_for_content_type: scrivito.default_obj_class_for_content_type
26590
+ default_obj_class_for_content_type: scrivito.default_obj_class_for_content_type,
26591
+ register_select_content: scrivito.register_select_content,
26592
+ configure_menu_order: scrivito.configure_menu_order
26457
26593
  });
26458
26594
  },
26459
26595
 
@@ -27076,13 +27212,7 @@ var scrivito = {};
27076
27212
 
27077
27213
  details_src: function() {
27078
27214
  // TODO unify with ajax url generation
27079
- return '/__scrivito/objs/' + that.id() + '/details';
27080
- },
27081
-
27082
- fetch_details_markup: function() {
27083
- return scrivito.ajax('GET', 'objs/' + that.id() + '/details').then(function(data) {
27084
- return data.markup;
27085
- });
27215
+ return '/__scrivito/page_details/' + that.id();
27086
27216
  },
27087
27217
 
27088
27218
  mark_resolved: function() {
@@ -27443,6 +27573,10 @@ var scrivito = {};
27443
27573
  return !!that.placement_modification();
27444
27574
  },
27445
27575
 
27576
+ is_content_widget: function() {
27577
+ return widget_class_name === 'Scrivito::ContentWidget';
27578
+ },
27579
+
27446
27580
  save: function(widget_attributes) {
27447
27581
  var obj_attributes = build_obj_attributes(widget_attributes);
27448
27582
  return that.obj().save(obj_attributes).then(function(obj_data) {
@@ -27454,10 +27588,6 @@ var scrivito = {};
27454
27588
  return that.obj().destroy_widget(that.id());
27455
27589
  },
27456
27590
 
27457
- fetch_details_markup: function() {
27458
- return that.fetch_markup('widget_details');
27459
- },
27460
-
27461
27591
  details_src: function() {
27462
27592
  // TODO unify with ajax url generation
27463
27593
  return "/__scrivito/" + that.markup_url("widget_details");
@@ -27535,11 +27665,7 @@ var scrivito = {};
27535
27665
  },
27536
27666
 
27537
27667
  has_details_view: function() {
27538
- return that.dom_element().attr('data-scrivito-private-widget-has-details-view') ? true : false;
27539
- },
27540
-
27541
- fetch_details_markup: function() {
27542
- return that.widget().fetch_details_markup();
27668
+ return !!that.dom_element().attr('data-scrivito-private-widget-has-details-view');
27543
27669
  },
27544
27670
 
27545
27671
  fetch_show_markup: function() {
@@ -27602,13 +27728,16 @@ var scrivito = {};
27602
27728
  },
27603
27729
 
27604
27730
  create_widget: function(widget_class, widget_element) {
27605
- var widget_spec = {create: {_obj_class: widget_class}};
27606
- return add_widget(widget_spec, widget_element);
27731
+ return add_widget({create: {_obj_class: widget_class}}, widget_element);
27607
27732
  },
27608
27733
 
27609
- copy_widget: function(src_obj_id, src_widget_id, widget_element) {
27610
- var widget_spec = {copy: {src_obj_id: src_obj_id, src_widget_id: src_widget_id}};
27611
- return add_widget(widget_spec, widget_element);
27734
+ copy_widget: function(params, widget_element) {
27735
+ return add_widget({copy: params}, widget_element);
27736
+ },
27737
+
27738
+ create_content_widget: function(content, widget_element) {
27739
+ return add_widget({create: {_obj_class: 'Scrivito::ContentWidget', content: content}},
27740
+ widget_element);
27612
27741
  },
27613
27742
 
27614
27743
  fetch_widget_class_selection: function() {
@@ -27641,6 +27770,21 @@ var scrivito = {};
27641
27770
  }
27642
27771
  },
27643
27772
 
27773
+ is_content_widget_allowed: function() {
27774
+ return that.is_valid_child_class('Scrivito::ContentWidget');
27775
+ },
27776
+
27777
+ prepend_widget_markup: function(widget_markup, widget_element) {
27778
+ var dom_element = $($.trim(widget_markup));
27779
+ if (widget_element) {
27780
+ widget_element.dom_element().before(dom_element);
27781
+ } else {
27782
+ that.dom_element().prepend(dom_element);
27783
+ }
27784
+ scrivito.gui.new_content(dom_element.get(0));
27785
+ return dom_element;
27786
+ },
27787
+
27644
27788
  append_widget_markup: function(widget_markup, widget_element) {
27645
27789
  var dom_element = $($.trim(widget_markup));
27646
27790
  if (widget_element) {
@@ -28543,7 +28687,7 @@ var scrivito = {};
28543
28687
  scrivito.close_all_menus();
28544
28688
 
28545
28689
  var menu = $(scrivito.template.render('menu', {
28546
- menu_items: _.map(commands, function(command) {
28690
+ menu_items: _.map(scrivito.pattern_sort(commands, scrivito.menu_order), function(command) {
28547
28691
  return scrivito.menu_item.create_instance(command);
28548
28692
  })
28549
28693
  }));
@@ -28563,7 +28707,7 @@ var scrivito = {};
28563
28707
  });
28564
28708
 
28565
28709
  _.each(commands, function(command) {
28566
- menu.on('click', '.scrivito_' + command.id(), function() {
28710
+ menu.on('click', '.'+command.dom_id(), function() {
28567
28711
  if (command.is_enabled()) {
28568
28712
  menu.data('scrivito-menu-close')();
28569
28713
  }
@@ -28627,7 +28771,7 @@ var scrivito = {};
28627
28771
  });
28628
28772
 
28629
28773
  _.each(commands, function(command) {
28630
- menu.on('click', '.scrivito_' + command.id(), function() {
28774
+ menu.on('click', '.'+command.dom_id(), function() {
28631
28775
  if (command.is_enabled()) {
28632
28776
  menu.data('scrivito-menu-close')();
28633
28777
  }
@@ -28740,11 +28884,61 @@ var scrivito = {};
28740
28884
  }
28741
28885
  });
28742
28886
  }());
28887
+ (function() {
28888
+ $.extend(scrivito, {
28889
+ add_content_command: function(cms_element) {
28890
+ var widget_field_element, widget_element;
28891
+ if (cms_element.widget_field) {
28892
+ widget_element = cms_element;
28893
+ } else {
28894
+ widget_field_element = cms_element;
28895
+ }
28896
+
28897
+ return scrivito.command.create_instance({
28898
+ id: 'scrivito.sdk.add_content',
28899
+ title: scrivito.t('commands.add_content.title'),
28900
+ icon: '&#xf082;',
28901
+
28902
+ present: function() {
28903
+ return scrivito.select_content && scrivito.editing_context.is_editing_mode() &&
28904
+ (widget_element || widget_field_element.is_empty());
28905
+ },
28906
+
28907
+ disabled: function() {
28908
+ if (!(widget_field_element || widget_element.widget_field())
28909
+ .is_content_widget_allowed()) {
28910
+ return scrivito.t('commands.add_content.not_allowed');
28911
+ }
28912
+ },
28913
+
28914
+ execute: function() {
28915
+ if (!widget_field_element) {
28916
+ widget_field_element = widget_element.widget_field();
28917
+ }
28918
+
28919
+ scrivito.select_content().then(function(contents) {
28920
+ var content = contents[0];
28921
+ if (content) {
28922
+ var create_widget = widget_field_element.create_content_widget(content, widget_element);
28923
+ scrivito.with_saving_overlay(create_widget.then(function(widget) {
28924
+ return widget.fetch_show_markup().then(function(markup) {
28925
+ var dom_element = widget_field_element.append_widget_markup(markup, widget_element);
28926
+ scrivito.ensure_fully_visible_within_application_window(dom_element);
28927
+ scrivito.widget_sorting.update_placeholder(widget_field_element);
28928
+ });
28929
+ }));
28930
+ }
28931
+ });
28932
+ }
28933
+ });
28934
+ }
28935
+ });
28936
+ }());
28743
28937
  (function() {
28744
28938
  $.extend(scrivito, {
28745
28939
  add_subpage_command: function(child_list_element) {
28746
28940
  return scrivito.command.create_instance({
28747
- id: 'add_subpage',
28941
+ id: 'scrivito.sdk.add_subpage',
28748
28942
  title: scrivito.t('commands.add_subpage.title'),
28749
28943
  icon: '&#xf022;',
28750
28944
  tooltip: scrivito.t('commands.add_subpage.tooltip',
@@ -28766,22 +28960,29 @@ var scrivito = {};
28766
28960
  }());
28767
28961
  (function() {
28768
28962
  $.extend(scrivito, {
28769
- add_widget_command: function(widget_field_element, widget_element) {
28963
+ add_widget_command: function(cms_element) {
28964
+ var widget_field_element, widget_element;
28965
+ if (cms_element.widget_field) {
28966
+ widget_element = cms_element;
28967
+ } else {
28968
+ widget_field_element = cms_element;
28969
+ }
28970
+
28770
28971
  return scrivito.command.create_instance({
28771
- id: 'add_widget',
28972
+ id: 'scrivito.sdk.add_widget',
28772
28973
  title: scrivito.t('commands.add_widget.title'),
28773
28974
  icon: '&#xf022;',
28774
28975
 
28775
28976
  present: function() {
28776
- if (widget_element) {
28777
- return scrivito.editing_context.is_editing_mode();
28778
- } else {
28779
- return scrivito.editing_context.is_editing_mode() &&
28780
- widget_field_element.widget_elements().length === 0;
28781
- }
28977
+ return scrivito.editing_context.is_editing_mode() &&
28978
+ (widget_element || widget_field_element.is_empty());
28782
28979
  },
28783
28980
 
28784
28981
  execute: function() {
28982
+ if (!widget_field_element) {
28983
+ widget_field_element = widget_element.widget_field();
28984
+ }
28985
+
28785
28986
  var selection = widget_field_element.fetch_widget_class_selection();
28786
28987
  var choose_widget_obj_class = scrivito.choose_obj_class_dialog(selection, 'add_widget');
28787
28988
  return choose_widget_obj_class.then(function(obj_class) {
@@ -28805,7 +29006,7 @@ var scrivito = {};
28805
29006
  $.extend(scrivito, {
28806
29007
  copy_page_from_clipboard_command: function(child_list_element) {
28807
29008
  return scrivito.command.create_instance({
28808
- id: 'copy_page_from_clipboard',
29009
+ id: 'scrivito.sdk.copy_page_from_clipboard',
28809
29010
  title: scrivito.t('commands.copy_page_from_clipboard.title'),
28810
29011
  icon: '&#xf015;',
28811
29012
 
@@ -28833,24 +29034,33 @@ var scrivito = {};
28833
29034
  }());
28834
29035
  (function() {
28835
29036
  $.extend(scrivito, {
28836
- copy_widget_from_clipboard_command: function(widget_field_element, widget_element) {
29037
+ copy_widget_from_clipboard_command: function(cms_element) {
29038
+ var widget_field_element, widget_element;
29039
+ if (cms_element.widget_field) {
29040
+ widget_element = cms_element;
29041
+ } else {
29042
+ widget_field_element = cms_element;
29043
+ }
29044
+
28837
29045
  return scrivito.command.create_instance({
28838
- id: 'copy_widget_from_clipboard',
28839
- title: scrivito.t('commands.copy_widget_from_clipboard.title'),
29046
+ id: 'scrivito.sdk.copy_widget_from_clipboard',
29047
+ title: function() {
29048
+ return scrivito.t('commands.copy_widget_from_clipboard.' +
29049
+ (scrivito.widget_clipboard.widget().is_content_widget() ? 'content' : 'widget') +
29050
+ '_title');
29051
+ },
28840
29052
  icon: '&#xf015;',
28841
29053
 
28842
29054
  present: function() {
28843
- var is_editing_mode = scrivito.editing_context.is_editing_mode();
28844
- var is_clipboard_present = scrivito.widget_clipboard.is_present();
28845
- if (widget_element) {
28846
- return is_editing_mode && is_clipboard_present;
28847
- } else {
28848
- var is_empty_widget_field = widget_field_element.widget_elements().length === 0;
28849
- return is_editing_mode && is_clipboard_present && is_empty_widget_field;
28850
- }
29055
+ return scrivito.editing_context.is_editing_mode() &&
29056
+ scrivito.widget_clipboard.is_present() &&
29057
+ (widget_element || widget_field_element.is_empty());
28851
29058
  },
28852
29059
 
28853
29060
  disabled: function() {
29061
+ if (!widget_field_element) {
29062
+ widget_field_element = widget_element.widget_field();
29063
+ }
28854
29064
  var widget_class_name = scrivito.widget_clipboard.widget().widget_class_name();
28855
29065
  if (!widget_field_element.is_valid_child_class(widget_class_name)) {
28856
29066
  return scrivito.t('commands.copy_widget_from_clipboard.paste_forbidden',
@@ -28859,11 +29069,15 @@ var scrivito = {};
28859
29069
  },
28860
29070
 
28861
29071
  execute: function() {
29072
+ if (!widget_field_element) {
29073
+ widget_field_element = widget_element.widget_field();
29074
+ }
28862
29075
  var widget = scrivito.widget_clipboard.widget();
28863
- var widget_id = widget.id();
28864
- var obj_id = widget.obj().id();
28865
-
28866
- var copy_widget = widget_field_element.copy_widget(obj_id, widget_id, widget_element);
29076
+ var copy_widget = widget_field_element.copy_widget({
29077
+ workspace_id: scrivito.editing_context.selected_workspace.id(),
29078
+ obj_id: widget.obj().id(),
29079
+ widget_id: widget.id()
29080
+ }, widget_element);
28867
29081
  return scrivito.with_saving_overlay(copy_widget.then(function(widget) {
28868
29082
  return widget.fetch_show_markup().then(function(widget_markup) {
28869
29083
  var dom_element = widget_field_element
@@ -28882,7 +29096,7 @@ var scrivito = {};
28882
29096
  $.extend(scrivito, {
28883
29097
  create_workspace_command: function() {
28884
29098
  return scrivito.command.create_instance({
28885
- id: 'create_workspace',
29099
+ id: 'scrivito.sdk.create_workspace',
28886
29100
  title: scrivito.t('commands.create_workspace.title'),
28887
29101
  icon: '&#xf022;',
28888
29102
 
@@ -28917,7 +29131,7 @@ var scrivito = {};
28917
29131
  }
28918
29132
 
28919
29133
  return scrivito.command.create_instance({
28920
- id: 'delete_obj',
29134
+ id: 'scrivito.sdk.delete_obj',
28921
29135
  title: scrivito.t(translations_namespace + '.title'),
28922
29136
  icon: '&#xf018;',
28923
29137
 
@@ -28958,15 +29172,14 @@ var scrivito = {};
28958
29172
  }());
28959
29173
  (function() {
28960
29174
  $.extend(scrivito, {
28961
- delete_widget_command: function(widget_field_element, widget_element) {
29175
+ delete_widget_command: function(widget_element) {
28962
29176
  return scrivito.command.create_instance({
28963
- id: 'delete_widget',
28964
- title: scrivito.t('commands.delete_widget.title'),
29177
+ id: 'scrivito.sdk.delete_widget',
29178
+ title: scrivito.t('commands.delete_widget.' +
29179
+ (widget_element.widget().is_content_widget() ? 'content' : 'widget') + '_title'),
28965
29180
  icon: '&#xf018;',
28966
29181
 
28967
- present: function() {
28968
- return scrivito.editing_context.is_editing_mode();
28969
- },
29182
+ present: function() { return scrivito.editing_context.is_editing_mode(); },
28970
29183
 
28971
29184
  execute: function() {
28972
29185
  return scrivito.confirmation_dialog({
@@ -28977,13 +29190,12 @@ var scrivito = {};
28977
29190
  confirm_button_text: scrivito.t('commands.delete_widget.dialog.confirm'),
28978
29191
  confirm_button_color: 'red'
28979
29192
  }).then(function() {
29193
+ var widget_field_element = widget_element.widget_field();
28980
29194
  var widget = widget_element.widget();
28981
29195
  widget_element.dom_element().remove();
28982
-
28983
- if (widget_field_element.widget_elements().length === 0) {
29196
+ if (widget_field_element.is_empty()) {
28984
29197
  scrivito.inplace_marker.refresh();
28985
29198
  }
28986
-
28987
29199
  scrivito.widget_sorting.update_placeholder(widget_field_element);
28988
29200
 
28989
29201
  return widget.destroy().then(function() {
@@ -29002,7 +29214,7 @@ var scrivito = {};
29002
29214
  $.extend(scrivito, {
29003
29215
  delete_workspace_command: function(workspace) {
29004
29216
  return scrivito.command.create_instance({
29005
- id: 'delete_workspace',
29217
+ id: 'scrivito.sdk.delete_workspace',
29006
29218
  title: scrivito.t('commands.delete_workspace.title'),
29007
29219
  icon: '&#xf018;',
29008
29220
 
@@ -29028,7 +29240,7 @@ var scrivito = {};
29028
29240
  $.extend(scrivito, {
29029
29241
  duplicate_obj_command: function(obj) {
29030
29242
  return scrivito.command.create_instance({
29031
- id: 'duplicate_obj',
29243
+ id: 'scrivito.sdk.duplicate_obj',
29032
29244
  title: scrivito.t('commands.duplicate_obj.title'),
29033
29245
  icon: '&#xf015;',
29034
29246
 
@@ -29062,7 +29274,7 @@ var scrivito = {};
29062
29274
  }
29063
29275
 
29064
29276
  return scrivito.command.create_instance({
29065
- id: 'mark_resolved_obj',
29277
+ id: 'scrivito.sdk.mark_resolved_obj',
29066
29278
  title: scrivito.t(translations_namespace + '.title'),
29067
29279
  icon: '&#xf124;',
29068
29280
 
@@ -29092,7 +29304,7 @@ var scrivito = {};
29092
29304
  $.extend(scrivito, {
29093
29305
  move_page_from_clipboard_command: function(child_list_element) {
29094
29306
  return scrivito.command.create_instance({
29095
- id: 'move_page_from_clipboard',
29307
+ id: 'scrivito.sdk.move_page_from_clipboard',
29096
29308
  title: scrivito.t('commands.move_page_from_clipboard.title'),
29097
29309
  icon: '&#xf016;',
29098
29310
 
@@ -29123,7 +29335,7 @@ var scrivito = {};
29123
29335
  $.extend(scrivito, {
29124
29336
  obj_details_command: function(obj) {
29125
29337
  return scrivito.command.create_instance({
29126
- id: 'obj_details',
29338
+ id: 'scrivito.sdk.obj_details',
29127
29339
  title: scrivito.t('commands.obj_details.title'),
29128
29340
  icon: '&#xf030;',
29129
29341
 
@@ -29170,7 +29382,7 @@ var scrivito = {};
29170
29382
  };
29171
29383
 
29172
29384
  return scrivito.command.create_instance({
29173
- id: 'publish_workspace',
29385
+ id: 'scrivito.sdk.publish_workspace',
29174
29386
  title: scrivito.t('commands.publish_workspace.title'),
29175
29387
  icon: '&#xf033;',
29176
29388
  tooltip: scrivito.t('commands.publish_workspace.title', workspace.title()),
@@ -29205,7 +29417,7 @@ var scrivito = {};
29205
29417
  $.extend(scrivito, {
29206
29418
  rebase_workspace_command: function(workspace) {
29207
29419
  return scrivito.command.create_instance({
29208
- id: 'rebase_workspace',
29420
+ id: 'scrivito.sdk.rebase_workspace',
29209
29421
  title: scrivito.t('commands.rebase_workspace.title'),
29210
29422
  icon: '&#xf023;',
29211
29423
  tooltip: scrivito.t('commands.rebase_workspace.tooltip', workspace.title()),
@@ -29233,7 +29445,7 @@ var scrivito = {};
29233
29445
  $.extend(scrivito, {
29234
29446
  rename_workspace_command: function(workspace) {
29235
29447
  return scrivito.command.create_instance({
29236
- id: 'rename_workspace',
29448
+ id: 'scrivito.sdk.rename_workspace',
29237
29449
  title: scrivito.t('commands.rename_workspace.title'),
29238
29450
  icon: '&#xf04f;',
29239
29451
 
@@ -29264,7 +29476,7 @@ var scrivito = {};
29264
29476
  }
29265
29477
 
29266
29478
  return scrivito.command.create_instance({
29267
- id: 'restore_obj',
29479
+ id: 'scrivito.sdk.restore_obj',
29268
29480
  title: scrivito.t(translations_namespace + '.title'),
29269
29481
  icon: '&#xf032;',
29270
29482
 
@@ -29292,7 +29504,7 @@ var scrivito = {};
29292
29504
  restore_widget_command: function(widget_element) {
29293
29505
  var widget = widget_element.widget();
29294
29506
  return scrivito.command.create_instance({
29295
- id: 'restore_widget',
29507
+ id: 'scrivito.sdk.restore_widget',
29296
29508
  title: scrivito.t('commands.restore_widget.title'),
29297
29509
  icon: '&#xf032;',
29298
29510
 
@@ -29323,7 +29535,7 @@ var scrivito = {};
29323
29535
  }
29324
29536
 
29325
29537
  return scrivito.command.create_instance({
29326
- id: 'revert_obj',
29538
+ id: 'scrivito.sdk.revert_obj',
29327
29539
  title: scrivito.t(translations_namespace + '.title'),
29328
29540
  icon: '&#xf032;',
29329
29541
 
@@ -29371,8 +29583,9 @@ var scrivito = {};
29371
29583
  revert_widget_command: function(widget_element) {
29372
29584
  var widget = widget_element.widget();
29373
29585
  return scrivito.command.create_instance({
29374
- id: 'revert_widget',
29375
- title: scrivito.i18n.translate('commands.revert_widget.title'),
29586
+ id: 'scrivito.sdk.revert_widget',
29587
+ title: scrivito.t('commands.revert_widget.' +
29588
+ (widget.is_content_widget() ? 'content' : 'widget') + '_title'),
29376
29589
  icon: '&#xf032;',
29377
29590
 
29378
29591
  present: function() {
@@ -29384,24 +29597,22 @@ var scrivito = {};
29384
29597
  return scrivito.t('commands.revert_widget.rtc_workspace');
29385
29598
  }
29386
29599
  if (widget.is_new()) {
29387
- return scrivito.i18n.translate('commands.revert_widget.is_new');
29600
+ return scrivito.t('commands.revert_widget.is_new');
29388
29601
  }
29389
29602
  if (!widget.is_modified()) {
29390
- return scrivito.i18n.translate('commands.revert_widget.is_not_modified');
29603
+ return scrivito.t('commands.revert_widget.is_not_modified');
29391
29604
  }
29392
29605
  },
29393
29606
 
29394
- update: function() {
29395
- return widget.update_modification();
29396
- },
29607
+ update: function() { return widget.update_modification(); },
29397
29608
 
29398
29609
  execute: function() {
29399
29610
  return scrivito.confirmation_dialog({
29400
- title: scrivito.i18n.translate('commands.revert_widget.dialog.title'),
29401
- description: scrivito.i18n.translate('commands.revert_widget.dialog.description'),
29611
+ title: scrivito.t('commands.revert_widget.dialog.title'),
29612
+ description: scrivito.t('commands.revert_widget.dialog.description'),
29402
29613
  icon: '&#xf032;',
29403
29614
  color: 'red',
29404
- confirm_button_text: scrivito.i18n.translate('commands.revert_obj.dialog.confirm'),
29615
+ confirm_button_text: scrivito.t('commands.revert_obj.dialog.confirm'),
29405
29616
  confirm_button_color: 'red'
29406
29617
  }).then(function() {
29407
29618
  var dom_element = widget_element.dom_element();
@@ -29418,7 +29629,7 @@ var scrivito = {};
29418
29629
  $.extend(scrivito, {
29419
29630
  save_obj_to_clipboard_command: function(obj) {
29420
29631
  return scrivito.command.create_instance({
29421
- id: 'save_obj_to_clipboard',
29632
+ id: 'scrivito.sdk.save_obj_to_clipboard',
29422
29633
  title: scrivito.t('commands.save_obj_to_clipboard.title'),
29423
29634
  icon: '&#xf017;',
29424
29635
 
@@ -29443,17 +29654,12 @@ var scrivito = {};
29443
29654
  $.extend(scrivito, {
29444
29655
  save_widget_to_clipboard_command: function(widget_element) {
29445
29656
  return scrivito.command.create_instance({
29446
- id: 'save_widget_to_clipboard',
29447
- title: scrivito.t('commands.save_widget_to_clipboard.title'),
29657
+ id: 'scrivito.sdk.save_widget_to_clipboard',
29658
+ title: scrivito.t('commands.save_widget_to_clipboard.' +
29659
+ (widget_element.widget().is_content_widget() ? 'content' : 'widget') + '_title'),
29448
29660
  icon: '&#xf017;',
29449
-
29450
- present: function() {
29451
- return scrivito.editing_context.is_editing_mode();
29452
- },
29453
-
29454
- execute: function() {
29455
- scrivito.widget_clipboard.save_widget(widget_element.widget());
29456
- }
29661
+ present: function() { return scrivito.editing_context.is_editing_mode(); },
29662
+ execute: function() { scrivito.widget_clipboard.save_widget(widget_element.widget()); }
29457
29663
  });
29458
29664
  }
29459
29665
  });
@@ -29462,13 +29668,13 @@ var scrivito = {};
29462
29668
  $.extend(scrivito, {
29463
29669
  select_workspace_command: function(workspace) {
29464
29670
  return scrivito.command.create_instance({
29465
- id: 'select_workspace_' + workspace.id(),
29671
+ id: 'scrivito.sdk.select_workspace_'+workspace.id(),
29466
29672
  title: workspace.title(),
29467
29673
  icon: workspace.icon(),
29468
29674
 
29469
29675
  execute: function() {
29470
29676
  scrivito.with_saving_overlay(
29471
- scrivito.redirect_to('?_scrivito_workspace_id=' + workspace.id()));
29677
+ scrivito.redirect_to('?_scrivito_workspace_id='+workspace.id()));
29472
29678
  }
29473
29679
  });
29474
29680
  }
@@ -29478,7 +29684,7 @@ var scrivito = {};
29478
29684
  $.extend(scrivito, {
29479
29685
  sort_items_command: function(child_list_element) {
29480
29686
  return scrivito.command.create_instance({
29481
- id: 'sort_items',
29687
+ id: 'scrivito.sdk.sort_items',
29482
29688
  title: scrivito.t('commands.sort_items.title'),
29483
29689
  icon: '&#xf03c;',
29484
29690
  tooltip: scrivito.t('commands.sort_items.tooltip',
@@ -29566,14 +29772,13 @@ var scrivito = {};
29566
29772
  };
29567
29773
 
29568
29774
  return scrivito.command.create_instance({
29569
- id: 'widget_details',
29775
+ id: 'scrivito.sdk.widget_details',
29570
29776
  title: scrivito.t('commands.widget_details.title'),
29571
29777
  icon: '&#xf030;',
29572
29778
 
29573
29779
  present: function() {
29574
- return scrivito.editing_context.is_editing_mode() ||
29575
- widget().is_modified() ||
29576
- widget().is_placement_modified();
29780
+ return !widget().is_content_widget() && (scrivito.editing_context.is_editing_mode() ||
29781
+ widget().is_modified() || widget().is_placement_modified());
29577
29782
  },
29578
29783
 
29579
29784
  disabled: function() {
@@ -29596,7 +29801,7 @@ var scrivito = {};
29596
29801
  $.extend(scrivito, {
29597
29802
  workspace_changes_command: function() {
29598
29803
  return scrivito.command.create_instance({
29599
- id: 'workspace_changes',
29804
+ id: 'scrivito.sdk.workspace_changes',
29600
29805
  title: scrivito.t('commands.workspace_changes.title'),
29601
29806
  icon: '&#xf080;',
29602
29807
 
@@ -29611,7 +29816,7 @@ var scrivito = {};
29611
29816
  $.extend(scrivito, {
29612
29817
  workspace_settings_command: function(workspace) {
29613
29818
  return scrivito.command.create_instance({
29614
- id: 'workspace_settings',
29819
+ id: 'scrivito.sdk.workspace_settings',
29615
29820
  title: scrivito.t('commands.workspace_settings.title'),
29616
29821
  icon: '&#xf030;',
29617
29822
 
@@ -29660,13 +29865,14 @@ var scrivito = {};
29660
29865
  _.each(scrivito.widget_element.all($(content)), function(widget_element) {
29661
29866
  var widget_field_element = widget_element.widget_field();
29662
29867
  widget_element.set_menu([
29663
- scrivito.add_widget_command(widget_field_element, widget_element),
29868
+ scrivito.add_widget_command(widget_element),
29869
+ scrivito.add_content_command(widget_element),
29664
29870
  scrivito.widget_details_command(widget_element),
29665
29871
  scrivito.save_widget_to_clipboard_command(widget_element),
29666
- scrivito.copy_widget_from_clipboard_command(widget_field_element, widget_element),
29872
+ scrivito.copy_widget_from_clipboard_command(widget_element),
29667
29873
  scrivito.revert_widget_command(widget_element),
29668
29874
  scrivito.restore_widget_command(widget_element),
29669
- scrivito.delete_widget_command(widget_field_element, widget_element)
29875
+ scrivito.delete_widget_command(widget_element)
29670
29876
  ].concat(widget_element.menu()));
29671
29877
  });
29672
29878
  });
@@ -29684,6 +29890,7 @@ var scrivito = {};
29684
29890
  _.each(scrivito.widget_field_element.all($(content)), function(widget_field_element) {
29685
29891
  widget_field_element.set_menu([
29686
29892
  scrivito.add_widget_command(widget_field_element),
29893
+ scrivito.add_content_command(widget_field_element),
29687
29894
  scrivito.copy_widget_from_clipboard_command(widget_field_element)
29688
29895
  ].concat(widget_field_element.menu()));
29689
29896
  });
@@ -30003,6 +30210,76 @@ var scrivito = {};
30003
30210
  add_field_changes(changes._widget_pool[parent_widget_id], widget_field_element);
30004
30211
  };
30005
30212
  }());
30213
+ (function() {
30214
+ $.extend(scrivito, {
30215
+ content_upload: {
30216
+ init: function() {
30217
+ scrivito.on('content', function(content) {
30218
+ if (scrivito.in_editable_view()) {
30219
+ _.each(scrivito.widget_field_element.all($(content)), function(widget_field_element) {
30220
+ scrivito.content_upload.create(widget_field_element);
30221
+ });
30222
+
30223
+ _.each(scrivito.widget_element.all($(content)), function(widget_element) {
30224
+ scrivito.content_upload.create(widget_element.widget_field(), widget_element);
30225
+ });
30226
+ }
30227
+ });
30228
+ },
30229
+
30230
+ create: function(widget_field_element, widget_element) {
30231
+ var dropzone = (widget_element || widget_field_element).dom_element();
30232
+ var is_active = function() { return widget_element || widget_field_element.is_empty(); };
30233
+
30234
+ dropzone.on('dragenter', function() {
30235
+ if (is_active()) {
30236
+ dropzone.addClass('scrivito_content_upload');
30237
+ }
30238
+ return false;
30239
+ });
30240
+
30241
+ dropzone.on('dragleave', function() {
30242
+ if (is_active()) {
30243
+ dropzone.removeClass('scrivito_content_upload');
30244
+ }
30245
+ return false;
30246
+ });
30247
+
30248
+ dropzone.on('drop', function(event) {
30249
+ if (is_active()) {
30250
+ dropzone.removeClass('scrivito_content_upload');
30251
+ var data_transfer = event.originalEvent.dataTransfer;
30252
+ if (data_transfer) {
30253
+ var files = data_transfer.files;
30254
+ if (files.length === 1) {
30255
+ scrivito.content_upload.upload(files[0], widget_field_element, widget_element);
30256
+ }
30257
+ }
30258
+ }
30259
+ return false;
30260
+ });
30261
+ },
30262
+
30263
+ upload: function(file, widget_field_element, widget_element) {
30264
+ var name = file.name.replace(/[^a-z0-9_.$\-]/ig, '-');
30265
+ var path = '_resources/'+Math.floor(Math.random() * 1000)+'/'+name;
30266
+ var obj_class = scrivito.default_obj_class_for_content_type(file.type);
30267
+
30268
+ var create_obj = scrivito.create_obj({blob: file, _path: path, _obj_class: obj_class});
30269
+ scrivito.with_saving_overlay(create_obj.then(function(obj) {
30270
+ var create_widget = widget_field_element.create_content_widget(obj.id, widget_element);
30271
+ return create_widget.then(function(widget) {
30272
+ return widget.fetch_show_markup().then(function(markup) {
30273
+ var dom_element = widget_field_element.prepend_widget_markup(markup, widget_element);
30274
+ scrivito.ensure_fully_visible_within_application_window(dom_element);
30275
+ scrivito.widget_sorting.update_placeholder(widget_field_element);
30276
+ });
30277
+ });
30278
+ }));
30279
+ }
30280
+ }
30281
+ });
30282
+ }());
30006
30283
  (function() {
30007
30284
  $.extend(scrivito, {
30008
30285
  hotkeys: {
@@ -30116,7 +30393,7 @@ var scrivito = {};
30116
30393
  var child_list = _.map(children, function(child) { return child.obj(); });
30117
30394
 
30118
30395
  var view = $(scrivito.template.render('obj_sorting_dialog', {
30119
- icon: '\uF03C',
30396
+ icon: '&#xf03c;',
30120
30397
  child_list: child_list
30121
30398
  }));
30122
30399
 
@@ -30402,6 +30679,7 @@ var scrivito = {};
30402
30679
 
30403
30680
 
30404
30681
 
30682
+
30405
30683
  //
30406
30684
 
30407
30685