scrivito_sdk 0.66.0 → 0.70.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/scrivito/blobs_controller.rb +5 -0
  3. data/app/controllers/scrivito/objs_controller.rb +2 -1
  4. data/app/controllers/scrivito/ui_controller.rb +33 -3
  5. data/app/helpers/scrivito_helper.rb +14 -20
  6. data/app/views/scrivito/objs/update.json.jbuilder +1 -1
  7. data/app/views/scrivito/ui/index.html.erb +1 -1
  8. data/app/views/scrivito/webservice/_workspace.json.jbuilder +2 -1
  9. data/config/ca-bundle.crt +1 -1
  10. data/config/precedence_routes.rb +3 -2
  11. data/lib/assets/javascripts/scrivito.js +46 -0
  12. data/lib/assets/javascripts/scrivito_ui.js +931 -501
  13. data/lib/assets/stylesheets/scrivito.css +1 -0
  14. data/lib/assets/stylesheets/scrivito_ui.css +1 -1
  15. data/lib/generators/scrivito/install/templates/app/views/page/index.html.erb +3 -3
  16. data/lib/generators/scrivito/page/page_generator.rb +3 -0
  17. data/lib/generators/scrivito/page/templates/model.erb +3 -0
  18. data/lib/generators/scrivito/widget/templates/model.erb +3 -0
  19. data/lib/generators/scrivito/widget/widget_generator.rb +3 -0
  20. data/lib/scrivito/attribute_content.rb +93 -60
  21. data/lib/scrivito/attribute_definition.rb +3 -3
  22. data/lib/scrivito/attribute_serializer.rb +2 -2
  23. data/lib/scrivito/backend/obj_data_cache.rb +22 -9
  24. data/lib/scrivito/basic_obj.rb +238 -130
  25. data/lib/scrivito/basic_widget.rb +32 -20
  26. data/lib/scrivito/binary.rb +74 -45
  27. data/lib/scrivito/binary_routing.rb +52 -0
  28. data/lib/scrivito/cache_middleware.rb +0 -5
  29. data/lib/scrivito/client_attribute_serializer.rb +134 -0
  30. data/lib/scrivito/cms_backend.rb +51 -33
  31. data/lib/scrivito/cms_data_cache.rb +1 -0
  32. data/lib/scrivito/cms_dispatch_controller.rb +1 -1
  33. data/lib/scrivito/cms_env.rb +1 -11
  34. data/lib/scrivito/cms_field_tag.rb +10 -7
  35. data/lib/scrivito/cms_rest_api/rate_limit.rb +5 -5
  36. data/lib/scrivito/cms_rest_api/request_timer.rb +27 -0
  37. data/lib/scrivito/cms_rest_api/widget_extractor.rb +8 -6
  38. data/lib/scrivito/cms_rest_api.rb +107 -54
  39. data/lib/scrivito/cms_routing.rb +13 -25
  40. data/lib/scrivito/configuration.rb +5 -2
  41. data/lib/scrivito/controller_actions.rb +68 -7
  42. data/lib/scrivito/controller_runtime.rb +8 -0
  43. data/lib/scrivito/date_attribute.rb +8 -0
  44. data/lib/scrivito/errors.rb +6 -3
  45. data/lib/scrivito/generator_helper.rb +13 -0
  46. data/lib/scrivito/image_tag.rb +24 -30
  47. data/lib/scrivito/layout_tags.rb +12 -6
  48. data/lib/scrivito/link.rb +46 -30
  49. data/lib/scrivito/log_subscriber.rb +15 -0
  50. data/lib/scrivito/membership.rb +3 -3
  51. data/lib/scrivito/membership_collection.rb +10 -10
  52. data/lib/scrivito/meta_data_collection.rb +22 -0
  53. data/lib/scrivito/model_library.rb +7 -1
  54. data/lib/scrivito/obj_collection.rb +18 -16
  55. data/lib/scrivito/obj_params_parser.rb +1 -1
  56. data/lib/scrivito/obj_search_enumerator.rb +35 -35
  57. data/lib/scrivito/page_config.rb +55 -0
  58. data/lib/scrivito/request_homepage.rb +23 -0
  59. data/lib/scrivito/routing_helper.rb +8 -8
  60. data/lib/scrivito/sdk_engine.rb +2 -3
  61. data/lib/scrivito/ui_config.rb +85 -0
  62. data/lib/scrivito/user.rb +30 -23
  63. data/lib/scrivito/user_definition.rb +48 -47
  64. data/lib/scrivito/widget_tag.rb +11 -0
  65. data/lib/scrivito/workspace.rb +93 -35
  66. data/lib/scrivito/workspace_selection_middleware.rb +8 -1
  67. data/lib/scrivito_sdk.rb +24 -24
  68. metadata +24 -33
  69. data/lib/assets/javascripts/scrivito_sdk.js +0 -57
  70. data/lib/assets/stylesheets/scrivito_sdk.css +0 -1
  71. data/lib/scrivito/client_config.rb +0 -113
  72. data/lib/scrivito/editing_context_helper.rb +0 -19
  73. data/lib/scrivito/named_link.rb +0 -39
@@ -26089,37 +26089,127 @@ helpers = helpers || Handlebars.helpers; data = data || {};
26089
26089
  var buffer = "", stack1, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
26090
26090
 
26091
26091
 
26092
- buffer += "<div class=\"scrivito_changes_overview scrivito_modal_large scrivito_adjust_dialog\" >\n\n <div class=\"scrivito_modal_header\">\n <h3>\n <i class=\"scrivito_icon\">&#xf080;</i>\n ";
26092
+ buffer += "<div class=\"scrivito_changes_overview scrivito_modal_large scrivito_adjust_dialog\" >\n <div class=\"scrivito_changes_dialog_content scrivito_auto_height\"></div>\n <div class=\"scrivito_modal_footer\">\n <a href=\"#\" class=\"scrivito_button scrivito_cancel scrivito_green\">";
26093
26093
  options = {hash:{},data:data};
26094
- buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.title", depth0.selected_workspace_title, options) : helperMissing.call(depth0, "translate", "changes_dialog.title", depth0.selected_workspace_title, options)))
26095
- + "\n <span id=\"scrivito_obj_count\" class=\"scrivito_hidden\">\n (<span id=\"scrivito_loaded_obj_count\"></span> / <span id=\"scrivito_total_obj_count\"></span>)\n </span>\n </h3>\n </div>\n <div class=\"scrivito_modal_body scrivito_auto_height\">\n\n <table class=\"scrivito_changes_table\">\n <thead>\n <tr>\n <th><span class=\"scrivito_sortable\" data-scrivito-private-sort-by=\"modification\">";
26094
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "done", options) : helperMissing.call(depth0, "translate", "done", options)))
26095
+ + "</a>\n </div>\n</div>\n";
26096
+ return buffer;
26097
+ });
26098
+ return this.ScrivitoHandlebarsTemplates["changes_dialog"];
26099
+ }).call(this);
26100
+ (function() {
26101
+ this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
26102
+ this.ScrivitoHandlebarsTemplates["changes_dialog/content"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
26103
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
26104
+ helpers = helpers || Handlebars.helpers; data = data || {};
26105
+ var buffer = "", stack1, stack2, functionType="function", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
26106
+
26107
+ function program1(depth0,data) {
26108
+
26109
+ var buffer = "", stack1, stack2;
26110
+ buffer += "<span>("
26111
+ + escapeExpression(((stack1 = ((stack1 = depth0.objs),stack1 == null || stack1 === false ? stack1 : stack1.length)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))
26112
+ + " / ";
26113
+ if (stack2 = helpers.total) { stack2 = stack2.call(depth0, {hash:{},data:data}); }
26114
+ else { stack2 = depth0.total; stack2 = typeof stack2 === functionType ? stack2.apply(depth0) : stack2; }
26115
+ buffer += escapeExpression(stack2)
26116
+ + ")</span>";
26117
+ return buffer;
26118
+ }
26119
+
26120
+ function program3(depth0,data) {
26121
+
26122
+ var buffer = "", stack1, stack2;
26123
+ buffer += "\n <table class=\"scrivito_changes_table\">\n ";
26124
+ stack2 = helpers['if'].call(depth0, ((stack1 = depth0.objs),stack1 == null || stack1 === false ? stack1 : stack1.length), {hash:{},inverse:self.noop,fn:self.program(4, program4, data),data:data});
26125
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26126
+ buffer += "\n\n <tbody>\n ";
26127
+ stack2 = helpers['if'].call(depth0, ((stack1 = depth0.objs),stack1 == null || stack1 === false ? stack1 : stack1.length), {hash:{},inverse:self.program(9, program9, data),fn:self.program(6, program6, data),data:data});
26128
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26129
+ buffer += "\n </tbody>\n </table>\n ";
26130
+ return buffer;
26131
+ }
26132
+ function program4(depth0,data) {
26133
+
26134
+ var buffer = "", stack1, options;
26135
+ buffer += "\n <thead>\n <tr>\n <th>\n <span data-scrivito-sort-by=\"_modification\">\n ";
26136
+ options = {hash:{},data:data};
26137
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.modification", options) : helperMissing.call(depth0, "translate", "changes_dialog.modification", options)))
26138
+ + "\n </span>\n </th>\n <th><span>";
26096
26139
  options = {hash:{},data:data};
26097
- buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.row.change", options) : helperMissing.call(depth0, "translate", "changes_dialog.row.change", options)))
26098
- + "</span></th>\n <th><span class=\"scrivito_sortable\" data-scrivito-private-sort-by=\"rights\">";
26140
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.rights", options) : helperMissing.call(depth0, "translate", "changes_dialog.rights", options)))
26141
+ + "</span></th>\n <th><span>";
26099
26142
  options = {hash:{},data:data};
26100
- buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.row.rights", options) : helperMissing.call(depth0, "translate", "changes_dialog.row.rights", options)))
26101
- + "</span></th>\n <th><span>";
26143
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.description_for_editor", options) : helperMissing.call(depth0, "translate", "changes_dialog.description_for_editor", options)))
26144
+ + "</span></th>\n <th>\n <span data-scrivito-sort-by=\"_obj_class_name\">\n ";
26102
26145
  options = {hash:{},data:data};
26103
- buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.row.description_for_editor", options) : helperMissing.call(depth0, "translate", "changes_dialog.row.description_for_editor", options)))
26104
- + "</span></th>\n <th><span class=\"scrivito_sortable\" data-scrivito-private-sort-by=\"obj_class_name\">";
26146
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.obj_class_name", options) : helperMissing.call(depth0, "translate", "changes_dialog.obj_class_name", options)))
26147
+ + "\n </span>\n </th>\n <th>\n <span data-scrivito-sort-by=\"_last_changed\">\n ";
26105
26148
  options = {hash:{},data:data};
26106
- buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.row.type", options) : helperMissing.call(depth0, "translate", "changes_dialog.row.type", options)))
26107
- + "</span></th>\n <th><span class=\"scrivito_sortable sort_down\" data-scrivito-private-sort-by=\"last_changed\">";
26149
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.last_changed", options) : helperMissing.call(depth0, "translate", "changes_dialog.last_changed", options)))
26150
+ + "\n </span>\n </th>\n </tr>\n </thead>\n ";
26151
+ return buffer;
26152
+ }
26153
+
26154
+ function program6(depth0,data) {
26155
+
26156
+ var buffer = "", stack1;
26157
+ buffer += "\n ";
26158
+ stack1 = helpers.each.call(depth0, depth0.objs, {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});
26159
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26160
+ buffer += "\n ";
26161
+ return buffer;
26162
+ }
26163
+ function program7(depth0,data) {
26164
+
26165
+ var stack1, options;
26108
26166
  options = {hash:{},data:data};
26109
- buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.row.last_changed", options) : helperMissing.call(depth0, "translate", "changes_dialog.row.last_changed", options)))
26110
- + "</span></th>\n </tr>\n </thead>\n <tbody id=\"scrivito_changes_table_loaded\">\n </tbody>\n <tbody id=\"scrivito_changes_table_empty_result\" class=\"scrivito_hidden\">\n <tr>\n <td colspan=\"5\">\n ";
26167
+ return escapeExpression(((stack1 = helpers.render),stack1 ? stack1.call(depth0, "changes_dialog/row", depth0, options) : helperMissing.call(depth0, "render", "changes_dialog/row", depth0, options)));
26168
+ }
26169
+
26170
+ function program9(depth0,data) {
26171
+
26172
+ var buffer = "", stack1, options;
26173
+ buffer += "\n <tr>\n <td class=\"scrivito_empty_result\" colspan=\"5\">";
26111
26174
  options = {hash:{},data:data};
26112
- buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.empty_result", options) : helperMissing.call(depth0, "translate", "changes_dialog.empty_result", options)))
26113
- + "\n </td>\n </tr>\n </tbody>\n <tbody id=\"scrivito_changes_table_loading\">\n <tr>\n <td colspan=\"5\">\n <i class=\"scrivito_icon scrivito_spinning\">&#xf023;</i>\n </td>\n </tr>\n </tbody>\n\n </table>\n\n <span class=\"scrivito_load_more scrivito_hidden\">";
26175
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.empty", options) : helperMissing.call(depth0, "translate", "changes_dialog.empty", options)))
26176
+ + "</td>\n </tr>\n ";
26177
+ return buffer;
26178
+ }
26179
+
26180
+ function program11(depth0,data) {
26181
+
26182
+
26183
+ return "\n <tr><td colspan=\"5\"><i class=\"scrivito_icon scrivito_spinning\">&#xf023;</i></td></tr>\n ";
26184
+ }
26185
+
26186
+ function program13(depth0,data) {
26187
+
26188
+ var buffer = "", stack1, options;
26189
+ buffer += "<span class=\"scrivito_load_more\">";
26114
26190
  options = {hash:{},data:data};
26115
26191
  buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "changes_dialog.more", options) : helperMissing.call(depth0, "translate", "changes_dialog.more", options)))
26116
- + "</span>\n\n </div>\n <div class=\"scrivito_modal_footer\">\n <a class=\"scrivito_button scrivito_cancel scrivito_green\" href=\"#\">";
26117
- options = {hash:{},data:data};
26118
- buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "done", options) : helperMissing.call(depth0, "translate", "done", options)))
26119
- + "</a>\n </div>\n\n</div>\n";
26192
+ + "</span>";
26193
+ return buffer;
26194
+ }
26195
+
26196
+ buffer += "<div class=\"scrivito_modal_header\">\n <h3>\n <i class=\"scrivito_icon\">&#xf080;</i> ";
26197
+ if (stack1 = helpers.title) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26198
+ else { stack1 = depth0.title; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26199
+ buffer += escapeExpression(stack1)
26200
+ + "\n ";
26201
+ stack2 = helpers['if'].call(depth0, ((stack1 = depth0.objs),stack1 == null || stack1 === false ? stack1 : stack1.length), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
26202
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26203
+ buffer += "\n </h3>\n</div>\n\n<div class=\"scrivito_modal_body scrivito_auto_height\">\n ";
26204
+ stack2 = helpers['if'].call(depth0, depth0.is_loaded, {hash:{},inverse:self.program(11, program11, data),fn:self.program(3, program3, data),data:data});
26205
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26206
+ buffer += "\n\n ";
26207
+ stack2 = helpers['if'].call(depth0, depth0.has_more, {hash:{},inverse:self.noop,fn:self.program(13, program13, data),data:data});
26208
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26209
+ buffer += "\n</div>\n";
26120
26210
  return buffer;
26121
26211
  });
26122
- return this.ScrivitoHandlebarsTemplates["changes_dialog"];
26212
+ return this.ScrivitoHandlebarsTemplates["changes_dialog/content"];
26123
26213
  }).call(this);
26124
26214
  (function() {
26125
26215
  this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
@@ -26137,7 +26227,7 @@ function program1(depth0,data) {
26137
26227
  function program3(depth0,data) {
26138
26228
 
26139
26229
  var buffer = "", stack1, stack2, options;
26140
- buffer += "\n <span class=\"scrivito_restriction\" title=\"";
26230
+ buffer += "\n <span class=\"scrivito_restriction\" title=\"";
26141
26231
  options = {hash:{},data:data};
26142
26232
  stack2 = ((stack1 = helpers.array_to_title),stack1 ? stack1.call(depth0, depth0.restriction_messages, options) : helperMissing.call(depth0, "array_to_title", depth0.restriction_messages, options));
26143
26233
  if(stack2 || stack2 === 0) { buffer += stack2; }
@@ -26148,53 +26238,45 @@ function program3(depth0,data) {
26148
26238
  function program5(depth0,data) {
26149
26239
 
26150
26240
 
26151
- return "\n <span></span>\n ";
26241
+ return "\n <span></span>\n ";
26152
26242
  }
26153
26243
 
26154
26244
  function program7(depth0,data) {
26155
26245
 
26156
26246
  var buffer = "", stack1, options;
26157
- buffer += "\n <span><time datetime=\"";
26247
+ buffer += "\n <span>\n <time datetime=\"";
26158
26248
  if (stack1 = helpers.last_changed) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26159
26249
  else { stack1 = depth0.last_changed; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26160
26250
  buffer += escapeExpression(stack1)
26161
26251
  + "\" title=\"";
26162
26252
  options = {hash:{},data:data};
26163
26253
  buffer += escapeExpression(((stack1 = helpers.localize_date),stack1 ? stack1.call(depth0, depth0.last_changed, options) : helperMissing.call(depth0, "localize_date", depth0.last_changed, options)))
26164
- + "\">\n ";
26254
+ + "\">\n ";
26165
26255
  options = {hash:{},data:data};
26166
26256
  buffer += escapeExpression(((stack1 = helpers.localize_date_relative),stack1 ? stack1.call(depth0, depth0.last_changed, options) : helperMissing.call(depth0, "localize_date_relative", depth0.last_changed, options)))
26167
- + "\n </time></span>\n ";
26257
+ + "\n </time>\n </span>\n ";
26168
26258
  return buffer;
26169
26259
  }
26170
26260
 
26171
- buffer += "<tr class=\"scrivito_link_to_obj\" title=\"";
26261
+ buffer += "<tr title=\"";
26172
26262
  if (stack1 = helpers.tooltip) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26173
26263
  else { stack1 = depth0.tooltip; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26174
26264
  buffer += escapeExpression(stack1)
26175
- + "\"\n data-scrivito-private-changes-list-obj-id=\"";
26265
+ + "\" data-scrivito-obj-id=\"";
26176
26266
  if (stack1 = helpers.id) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26177
26267
  else { stack1 = depth0.id; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26178
26268
  buffer += escapeExpression(stack1)
26179
- + "\"\n data-scrivito-private-changes-list-obj-modification=\"";
26180
- if (stack1 = helpers.modification) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26181
- else { stack1 = depth0.modification; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26182
- buffer += escapeExpression(stack1)
26183
- + "\"\n data-scrivito-private-changes-list-obj-is-binary=\"";
26184
- if (stack1 = helpers.is_binary) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26185
- else { stack1 = depth0.is_binary; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26186
- buffer += escapeExpression(stack1)
26187
- + "\">\n <td><span class=\"scrivito_changes_state ";
26269
+ + "\">\n <td>\n <span class=\"scrivito_changes_state ";
26188
26270
  if (stack1 = helpers.modification) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26189
26271
  else { stack1 = depth0.modification; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26190
26272
  buffer += escapeExpression(stack1)
26191
26273
  + " ";
26192
26274
  stack1 = helpers['if'].call(depth0, depth0.has_conflict, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
26193
26275
  if(stack1 || stack1 === 0) { buffer += stack1; }
26194
- buffer += "\"></span></td>\n <td>\n ";
26276
+ buffer += "\">\n </span>\n </td>\n\n <td>\n ";
26195
26277
  stack1 = helpers['if'].call(depth0, depth0.has_restriction, {hash:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),data:data});
26196
26278
  if(stack1 || stack1 === 0) { buffer += stack1; }
26197
- buffer += "\n </td>\n <td><span class=\"scrivito_title\">";
26279
+ buffer += "\n </td>\n\n <td><span class=\"scrivito_title\">";
26198
26280
  if (stack1 = helpers.description_for_editor) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26199
26281
  else { stack1 = depth0.description_for_editor; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26200
26282
  buffer += escapeExpression(stack1)
@@ -26202,7 +26284,7 @@ function program7(depth0,data) {
26202
26284
  if (stack1 = helpers.obj_class_name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26203
26285
  else { stack1 = depth0.obj_class_name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26204
26286
  buffer += escapeExpression(stack1)
26205
- + "</span></td>\n <td>\n ";
26287
+ + "</span></td>\n\n <td>\n ";
26206
26288
  stack1 = helpers.unless.call(depth0, depth0.is_deleted, {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});
26207
26289
  if(stack1 || stack1 === 0) { buffer += stack1; }
26208
26290
  buffer += "\n </td>\n</tr>\n";
@@ -26238,41 +26320,78 @@ helpers = helpers || Handlebars.helpers; data = data || {};
26238
26320
  }).call(this);
26239
26321
  (function() {
26240
26322
  this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
26241
- this.ScrivitoHandlebarsTemplates["choose_obj_class_list"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
26323
+ this.ScrivitoHandlebarsTemplates["choose_obj_class_dialog/item"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
26242
26324
  this.compilerInfo = [3,'>= 1.0.0-rc.4'];
26243
26325
  helpers = helpers || Handlebars.helpers; data = data || {};
26244
- var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
26326
+ var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
26327
+
26328
+
26329
+ buffer += "<div class=\"scrivito_obj_class_thumbnail scrivito_editing_widget_preview\"\n data-scrivito-private-obj-class-name=\"";
26330
+ if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26331
+ else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26332
+ buffer += escapeExpression(stack1)
26333
+ + "\">\n ";
26334
+ if (stack1 = helpers.markup) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26335
+ else { stack1 = depth0.markup; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26336
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26337
+ buffer += "\n</div>\n";
26338
+ return buffer;
26339
+ });
26340
+ return this.ScrivitoHandlebarsTemplates["choose_obj_class_dialog/item"];
26341
+ }).call(this);
26342
+ (function() {
26343
+ this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
26344
+ this.ScrivitoHandlebarsTemplates["choose_obj_class_dialog/list"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
26345
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
26346
+ helpers = helpers || Handlebars.helpers; data = data || {};
26347
+ var buffer = "", stack1, stack2, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;
26245
26348
 
26246
26349
  function program1(depth0,data) {
26247
26350
 
26248
- var buffer = "", stack1;
26249
- buffer += "\n ";
26250
- stack1 = helpers['with'].call(depth0, depth0, {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
26251
- if(stack1 || stack1 === 0) { buffer += stack1; }
26351
+ var buffer = "", stack1, stack2, options;
26352
+ buffer += "\n <div class=\"scrivito_editing_widget_preview_divider\">\n <span>";
26353
+ options = {hash:{},data:data};
26354
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "choose_obj_class_dialog.last_used", options) : helperMissing.call(depth0, "translate", "choose_obj_class_dialog.last_used", options)))
26355
+ + "</span>\n </div>\n\n ";
26356
+ stack2 = helpers.each.call(depth0, ((stack1 = depth0.obj_class_selection),stack1 == null || stack1 === false ? stack1 : stack1.recent), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});
26357
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26252
26358
  buffer += "\n";
26253
26359
  return buffer;
26254
26360
  }
26255
26361
  function program2(depth0,data) {
26256
26362
 
26257
- var buffer = "", stack1;
26258
- buffer += "\n <div class=\"scrivito_obj_class_thumbnail scrivito_editing_widget_preview\" data-scrivito-private-obj-class-name=\"";
26259
- if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26260
- else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26261
- buffer += escapeExpression(stack1)
26262
- + "\">\n ";
26263
- if (stack1 = helpers.markup) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26264
- else { stack1 = depth0.markup; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26265
- if(stack1 || stack1 === 0) { buffer += stack1; }
26266
- buffer += "\n </div>\n ";
26363
+ var buffer = "", stack1, stack2, options;
26364
+ buffer += "\n ";
26365
+ options = {hash:{},data:data};
26366
+ stack2 = ((stack1 = helpers.render),stack1 ? stack1.call(depth0, "choose_obj_class_dialog/item", depth0, options) : helperMissing.call(depth0, "render", "choose_obj_class_dialog/item", depth0, options));
26367
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26368
+ buffer += "\n ";
26267
26369
  return buffer;
26268
26370
  }
26269
26371
 
26270
- stack1 = helpers.each.call(depth0, depth0.obj_classes, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
26271
- if(stack1 || stack1 === 0) { buffer += stack1; }
26372
+ function program4(depth0,data) {
26373
+
26374
+ var buffer = "", stack1, stack2, options;
26375
+ buffer += "\n ";
26376
+ options = {hash:{},data:data};
26377
+ stack2 = ((stack1 = helpers.render),stack1 ? stack1.call(depth0, "choose_obj_class_dialog/item", depth0, options) : helperMissing.call(depth0, "render", "choose_obj_class_dialog/item", depth0, options));
26378
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26379
+ buffer += "\n";
26380
+ return buffer;
26381
+ }
26382
+
26383
+ stack2 = helpers['if'].call(depth0, ((stack1 = depth0.obj_class_selection),stack1 == null || stack1 === false ? stack1 : stack1.recent), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
26384
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26385
+ buffer += "\n\n<div class=\"scrivito_editing_widget_preview_divider\">\n <span>";
26386
+ options = {hash:{},data:data};
26387
+ buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "choose_obj_class_dialog.all", options) : helperMissing.call(depth0, "translate", "choose_obj_class_dialog.all", options)))
26388
+ + "</span>\n</div>\n\n";
26389
+ stack2 = helpers.each.call(depth0, ((stack1 = depth0.obj_class_selection),stack1 == null || stack1 === false ? stack1 : stack1.all), {hash:{},inverse:self.noop,fn:self.program(4, program4, data),data:data});
26390
+ if(stack2 || stack2 === 0) { buffer += stack2; }
26272
26391
  buffer += "\n";
26273
26392
  return buffer;
26274
26393
  });
26275
- return this.ScrivitoHandlebarsTemplates["choose_obj_class_list"];
26394
+ return this.ScrivitoHandlebarsTemplates["choose_obj_class_dialog/list"];
26276
26395
  }).call(this);
26277
26396
  (function() {
26278
26397
  this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
@@ -26672,6 +26791,94 @@ helpers = helpers || Handlebars.helpers; data = data || {};
26672
26791
  });
26673
26792
  return this.ScrivitoHandlebarsTemplates["element_overlay"];
26674
26793
  }).call(this);
26794
+ (function() {
26795
+ this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
26796
+ this.ScrivitoHandlebarsTemplates["iframe_dialog"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
26797
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
26798
+ helpers = helpers || Handlebars.helpers; data = data || {};
26799
+ var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
26800
+
26801
+ function program1(depth0,data) {
26802
+
26803
+ var buffer = "", stack1;
26804
+ buffer += "scrivito_";
26805
+ if (stack1 = helpers.color) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26806
+ else { stack1 = depth0.color; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26807
+ buffer += escapeExpression(stack1);
26808
+ return buffer;
26809
+ }
26810
+
26811
+ function program3(depth0,data) {
26812
+
26813
+ var buffer = "", stack1;
26814
+ buffer += "\n ";
26815
+ stack1 = helpers['with'].call(depth0, depth0.cancel, {hash:{},inverse:self.noop,fn:self.program(4, program4, data),data:data});
26816
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26817
+ buffer += "\n ";
26818
+ return buffer;
26819
+ }
26820
+ function program4(depth0,data) {
26821
+
26822
+ var buffer = "", stack1;
26823
+ buffer += "\n <a href=\"#\" class=\"scrivito_button scrivito_cancel ";
26824
+ stack1 = helpers['if'].call(depth0, depth0.color, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
26825
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26826
+ buffer += "\">\n ";
26827
+ stack1 = helpers['if'].call(depth0, depth0.title, {hash:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),data:data});
26828
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26829
+ buffer += "\n </a>\n ";
26830
+ return buffer;
26831
+ }
26832
+ function program5(depth0,data) {
26833
+
26834
+ var stack1;
26835
+ if (stack1 = helpers.title) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
26836
+ else { stack1 = depth0.title; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
26837
+ return escapeExpression(stack1);
26838
+ }
26839
+
26840
+ function program7(depth0,data) {
26841
+
26842
+
26843
+ return escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0));
26844
+ }
26845
+
26846
+ function program9(depth0,data) {
26847
+
26848
+ var buffer = "", stack1;
26849
+ buffer += "\n ";
26850
+ stack1 = helpers['with'].call(depth0, depth0.confirm, {hash:{},inverse:self.noop,fn:self.program(10, program10, data),data:data});
26851
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26852
+ buffer += "\n ";
26853
+ return buffer;
26854
+ }
26855
+ function program10(depth0,data) {
26856
+
26857
+ var buffer = "", stack1;
26858
+ buffer += "\n <a href=\"#\" class=\"scrivito_button scrivito_confirm ";
26859
+ stack1 = helpers['if'].call(depth0, depth0.color, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
26860
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26861
+ buffer += "\">\n ";
26862
+ stack1 = helpers['if'].call(depth0, depth0.title, {hash:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),data:data});
26863
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26864
+ buffer += "\n </a>\n ";
26865
+ return buffer;
26866
+ }
26867
+
26868
+ buffer += "<div id=\"scrivito_iframe_dialog\"\n class=\"scrivito_modal_large scrivito_adjust_dialog ";
26869
+ stack1 = helpers['if'].call(depth0, depth0.color, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
26870
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26871
+ buffer += "\">\n <div class=\"scrivito_modal_body scrivito_auto_height\"></div>\n <div class=\"scrivito_modal_footer\">\n ";
26872
+ stack1 = helpers.unless.call(depth0, depth0.disable_cancel, {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});
26873
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26874
+ buffer += "\n ";
26875
+ stack1 = helpers.unless.call(depth0, depth0.disable_confirm, {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});
26876
+ if(stack1 || stack1 === 0) { buffer += stack1; }
26877
+ buffer += "\n </div>\n</div>\n";
26878
+ return buffer;
26879
+ });
26880
+ return this.ScrivitoHandlebarsTemplates["iframe_dialog"];
26881
+ }).call(this);
26675
26882
  (function() {
26676
26883
  this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
26677
26884
  this.ScrivitoHandlebarsTemplates["inplace_marker"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
@@ -26749,7 +26956,7 @@ function program5(depth0,data) {
26749
26956
  buffer += "\">\n ";
26750
26957
  stack1 = helpers.each.call(depth0, depth0.menu_items, {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});
26751
26958
  if(stack1 || stack1 === 0) { buffer += stack1; }
26752
- buffer += "\n </ul>\n</div>\n";
26959
+ buffer += "\n <li class=\"scrivito_menu_box_overlay\"></li>\n </ul>\n</div>\n";
26753
26960
  return buffer;
26754
26961
  });
26755
26962
  return this.ScrivitoHandlebarsTemplates["menu"];
@@ -27147,6 +27354,23 @@ function program1(depth0,data) {
27147
27354
  });
27148
27355
  return this.ScrivitoHandlebarsTemplates["obj_sorting_dialog"];
27149
27356
  }).call(this);
27357
+ (function() {
27358
+ this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
27359
+ this.ScrivitoHandlebarsTemplates["option_marker"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
27360
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
27361
+ helpers = helpers || Handlebars.helpers; data = data || {};
27362
+ var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
27363
+
27364
+
27365
+ buffer += "<span class=\"scrivito_option_marker scrivito_";
27366
+ if (stack1 = helpers.position) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
27367
+ else { stack1 = depth0.position; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
27368
+ buffer += escapeExpression(stack1)
27369
+ + "\">\n <i class=\"scrivito_icon scrivito_icon_marker_plus\"></i>\n</span>\n";
27370
+ return buffer;
27371
+ });
27372
+ return this.ScrivitoHandlebarsTemplates["option_marker"];
27373
+ }).call(this);
27150
27374
  (function() {
27151
27375
  this.ScrivitoHandlebarsTemplates || (this.ScrivitoHandlebarsTemplates = {});
27152
27376
  this.ScrivitoHandlebarsTemplates["overlay"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
@@ -27315,56 +27539,56 @@ function program2(depth0,data) {
27315
27539
  function program4(depth0,data) {
27316
27540
 
27317
27541
  var buffer = "", stack1, stack2, options;
27318
- buffer += "\n <li class=\"scrivito_menu_separator\">\n <span>";
27542
+ buffer += "\n <li class=\"scrivito_menu_separator\">\n <span>";
27319
27543
  options = {hash:{},data:data};
27320
27544
  buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "workspace_select.this_workspace", options) : helperMissing.call(depth0, "translate", "workspace_select.this_workspace", options)))
27321
- + "</span>\n </li>\n ";
27545
+ + "</span>\n </li>\n ";
27322
27546
  stack2 = helpers.each.call(depth0, ((stack1 = depth0.commands),stack1 == null || stack1 === false ? stack1 : stack1.for_editable), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});
27323
27547
  if(stack2 || stack2 === 0) { buffer += stack2; }
27324
- buffer += "\n <li class=\"scrivito_menu_separator\"></li>\n ";
27548
+ buffer += "\n <li class=\"scrivito_menu_separator\"></li>\n ";
27325
27549
  return buffer;
27326
27550
  }
27327
27551
  function program5(depth0,data) {
27328
27552
 
27329
27553
  var buffer = "", stack1, stack2, options;
27330
- buffer += "\n ";
27554
+ buffer += "\n ";
27331
27555
  options = {hash:{},data:data};
27332
27556
  stack2 = ((stack1 = helpers.render),stack1 ? stack1.call(depth0, "workspace_select/menu_item", depth0, options) : helperMissing.call(depth0, "render", "workspace_select/menu_item", depth0, options));
27333
27557
  if(stack2 || stack2 === 0) { buffer += stack2; }
27334
- buffer += "\n ";
27558
+ buffer += "\n ";
27335
27559
  return buffer;
27336
27560
  }
27337
27561
 
27338
27562
  function program7(depth0,data) {
27339
27563
 
27340
27564
  var buffer = "", stack1, stack2, options;
27341
- buffer += "\n <li class=\"scrivito_menu_separator\"></li>\n ";
27565
+ buffer += "\n <li class=\"scrivito_menu_separator\"></li>\n ";
27342
27566
  options = {hash:{},data:data};
27343
27567
  stack2 = ((stack1 = helpers.render),stack1 ? stack1.call(depth0, "workspace_select/menu_item", ((stack1 = depth0.commands),stack1 == null || stack1 === false ? stack1 : stack1.select_published), options) : helperMissing.call(depth0, "render", "workspace_select/menu_item", ((stack1 = depth0.commands),stack1 == null || stack1 === false ? stack1 : stack1.select_published), options));
27344
27568
  if(stack2 || stack2 === 0) { buffer += stack2; }
27345
- buffer += "\n ";
27569
+ buffer += "\n ";
27346
27570
  return buffer;
27347
27571
  }
27348
27572
 
27349
27573
  stack1 = helpers['with'].call(depth0, depth0.selected_workspace, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});
27350
27574
  if(stack1 || stack1 === 0) { buffer += stack1; }
27351
- buffer += "\n\n<div class=\"scrivito_menu_box scrivito_hidden\">\n <ul>\n ";
27575
+ buffer += "\n\n<ul class=\"scrivito_menu_box scrivito_hidden\">\n ";
27352
27576
  stack2 = helpers['if'].call(depth0, ((stack1 = depth0.selected_workspace),stack1 == null || stack1 === false ? stack1 : stack1.is_editable), {hash:{},inverse:self.noop,fn:self.program(4, program4, data),data:data});
27353
27577
  if(stack2 || stack2 === 0) { buffer += stack2; }
27354
- buffer += "\n\n <li class=\"scrivito_menu_separator\">\n <span>";
27578
+ buffer += "\n\n <li class=\"scrivito_menu_separator\">\n <span>";
27355
27579
  options = {hash:{},data:data};
27356
27580
  buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "workspace_select.other_workspaces", options) : helperMissing.call(depth0, "translate", "workspace_select.other_workspaces", options)))
27357
- + "</span>\n </li>\n\n ";
27581
+ + "</span>\n </li>\n\n ";
27358
27582
  options = {hash:{},data:data};
27359
27583
  stack2 = ((stack1 = helpers.render),stack1 ? stack1.call(depth0, "workspace_select/menu_item", ((stack1 = depth0.commands),stack1 == null || stack1 === false ? stack1 : stack1.create_workspace), options) : helperMissing.call(depth0, "render", "workspace_select/menu_item", ((stack1 = depth0.commands),stack1 == null || stack1 === false ? stack1 : stack1.create_workspace), options));
27360
27584
  if(stack2 || stack2 === 0) { buffer += stack2; }
27361
- buffer += "\n\n ";
27585
+ buffer += "\n\n ";
27362
27586
  stack2 = helpers.unless.call(depth0, ((stack1 = depth0.selected_workspace),stack1 == null || stack1 === false ? stack1 : stack1.is_published), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});
27363
27587
  if(stack2 || stack2 === 0) { buffer += stack2; }
27364
- buffer += "\n\n <li class=\"scrivito_menu_item scrivito_workspace_list\">\n <span>\n <i class=\"scrivito_icon scrivito_spinning\">&#xf023;</i>\n ";
27588
+ buffer += "\n\n <li class=\"scrivito_menu_item scrivito_workspace_list\">\n <span>\n <i class=\"scrivito_icon scrivito_spinning\">&#xf023;</i>\n ";
27365
27589
  options = {hash:{},data:data};
27366
27590
  buffer += escapeExpression(((stack1 = helpers.translate),stack1 ? stack1.call(depth0, "menu_bar.loading_workspaces", options) : helperMissing.call(depth0, "translate", "menu_bar.loading_workspaces", options)))
27367
- + "\n </span>\n </li>\n </ul>\n</div>\n";
27591
+ + "\n </span>\n </li>\n\n <li class=\"scrivito_menu_box_overlay\"></li>\n</ul>\n";
27368
27592
  return buffer;
27369
27593
  });
27370
27594
  return this.ScrivitoHandlebarsTemplates["workspace_select"];
@@ -27545,6 +27769,8 @@ $.i18n().load({
27545
27769
 
27546
27770
  'choose_obj_class_dialog.add_child_page.title': 'Seitenvorlage auswählen',
27547
27771
  'choose_obj_class_dialog.create_widget.title': 'Widget auswählen',
27772
+ 'choose_obj_class_dialog.last_used': 'Zuletzt verwendet',
27773
+ 'choose_obj_class_dialog.all': 'Alle (a - z)',
27548
27774
 
27549
27775
  'editable_ws_dialog.title.select_or_create': 'Arbeitskopie wählen',
27550
27776
  'editable_ws_dialog.title.select': 'Arbeitskopie auswählen',
@@ -27614,13 +27840,13 @@ $.i18n().load({
27614
27840
  'child_list_menu.description': 'Elemente von $1',
27615
27841
 
27616
27842
  'changes_dialog.title': 'Änderungen von "$1"',
27617
- 'changes_dialog.empty_result': 'In dieser Arbeitskopie wurde nichts geändert.',
27843
+ 'changes_dialog.empty': 'In dieser Arbeitskopie wurde nichts geändert.',
27618
27844
  'changes_dialog.more': 'Mehr...',
27619
- 'changes_dialog.row.change': 'Änderung',
27620
- 'changes_dialog.row.rights': 'Veröffentlichen erlaubt',
27621
- 'changes_dialog.row.description_for_editor': 'Titel',
27622
- 'changes_dialog.row.type': 'Typ',
27623
- 'changes_dialog.row.last_changed': 'Letzte Änderung',
27845
+ 'changes_dialog.modification': 'Änderung',
27846
+ 'changes_dialog.rights': 'Veröffentlichen erlaubt',
27847
+ 'changes_dialog.description_for_editor': 'Titel',
27848
+ 'changes_dialog.obj_class_name': 'Typ',
27849
+ 'changes_dialog.last_changed': 'Letzte Änderung',
27624
27850
 
27625
27851
  'current_page_link_dialog.title': 'Diese Seite teilen',
27626
27852
  'current_page_link_dialog.description': 'Mit dieser URL können Sie die aktuelle Seite als Teil dieser Arbeitskopie teilen. Die Empfänger müssen angemeldet sein und Zugriff auf die Arbeitskopie haben.',
@@ -27804,6 +28030,8 @@ $.i18n().load({
27804
28030
 
27805
28031
  'choose_obj_class_dialog.add_child_page.title': 'Select Page Type',
27806
28032
  'choose_obj_class_dialog.create_widget.title': 'Select Widget',
28033
+ 'choose_obj_class_dialog.last_used': 'Last used',
28034
+ 'choose_obj_class_dialog.all': 'All (a - z)',
27807
28035
 
27808
28036
  'editable_ws_dialog.title.select_or_create': 'Choose a working copy',
27809
28037
  'editable_ws_dialog.title.select': 'Select a working copy',
@@ -27873,13 +28101,13 @@ $.i18n().load({
27873
28101
  'child_list_menu.description': 'Items of $1',
27874
28102
 
27875
28103
  'changes_dialog.title': 'Changes to "$1"',
27876
- 'changes_dialog.empty_result': 'Nothing was changed in this working copy.',
28104
+ 'changes_dialog.empty': 'Nothing was changed in this working copy.',
27877
28105
  'changes_dialog.more': 'More...',
27878
- 'changes_dialog.row.change': 'Change',
27879
- 'changes_dialog.row.rights': 'Publishing permitted',
27880
- 'changes_dialog.row.description_for_editor': 'Title',
27881
- 'changes_dialog.row.type': 'Type',
27882
- 'changes_dialog.row.last_changed': 'Last change',
28106
+ 'changes_dialog.modification': 'Change',
28107
+ 'changes_dialog.rights': 'Publishing permitted',
28108
+ 'changes_dialog.description_for_editor': 'Title',
28109
+ 'changes_dialog.obj_class_name': 'Type',
28110
+ 'changes_dialog.last_changed': 'Last change',
27883
28111
 
27884
28112
  'current_page_link_dialog.title': 'Share this page',
27885
28113
  'current_page_link_dialog.description': 'Using the URL below, you can share the current page as part of this working copy. The recipients need to be logged in and have access to the working copy.',
@@ -28041,6 +28269,8 @@ var scrivito = {};
28041
28269
  (function() {
28042
28270
  var inited = false;
28043
28271
 
28272
+ var ui_config_attr_name = 'data-scrivito-private-ui-config';
28273
+
28044
28274
  var wait_until_write_ends = function() {
28045
28275
  var deferred = $.Deferred();
28046
28276
  if (scrivito.write_monitor.is_writing()) {
@@ -28060,6 +28290,18 @@ var scrivito = {};
28060
28290
  return {message: error.message};
28061
28291
  };
28062
28292
 
28293
+ var restore_prior_attr = function(promise, dom_element, attr_name) {
28294
+ var prior_attr = dom_element.attr(attr_name);
28295
+ promise.always(function() {
28296
+ if (prior_attr) {
28297
+ dom_element.attr(attr_name, prior_attr);
28298
+ } else {
28299
+ // jQuery#removeAttr violates CSP by assigning an empty value.
28300
+ dom_element.get(0).removeAttribute(attr_name);
28301
+ }
28302
+ });
28303
+ };
28304
+
28063
28305
  _.extend(scrivito, {
28064
28306
  suppress_alerts: false,
28065
28307
 
@@ -28095,6 +28337,36 @@ var scrivito = {};
28095
28337
  return scrivito.redirect_to(scrivito.editing_context.location(params).href());
28096
28338
  },
28097
28339
 
28340
+ open_obj: function(obj) {
28341
+ if (obj.is_binary() && (
28342
+ obj.is_edited() ||
28343
+ obj.is_new() && !scrivito.editing_context.is_deleted_mode() ||
28344
+ obj.is_deleted() && scrivito.editing_context.is_deleted_mode())) {
28345
+ scrivito.resource_dialog.open(obj);
28346
+ } else {
28347
+ var url = scrivito.root_path();
28348
+ var params = {};
28349
+
28350
+ if (obj.is_binary()) {
28351
+ url = '/__scrivito/resource_details/';
28352
+ params.return_to = document.URL;
28353
+ }
28354
+
28355
+ if (obj.is_new() && scrivito.editing_context.is_deleted_mode()) {
28356
+ params._scrivito_display_mode = 'added';
28357
+ }
28358
+
28359
+ if (obj.is_deleted() && !scrivito.editing_context.is_deleted_mode()) {
28360
+ params._scrivito_display_mode = 'deleted';
28361
+ }
28362
+
28363
+ url += obj.id();
28364
+ if (!_.isEmpty(params)) { url += '?'+$.param(params); }
28365
+
28366
+ scrivito.with_saving_overlay(scrivito.redirect_to(url));
28367
+ }
28368
+ },
28369
+
28098
28370
  // For testing purpose only.
28099
28371
  location: function() {
28100
28372
  return window.location;
@@ -28202,7 +28474,6 @@ var scrivito = {};
28202
28474
  scrivito.warn(message);
28203
28475
  },
28204
28476
 
28205
- // @api public
28206
28477
  on: function(event, callback) {
28207
28478
  if (event === 'load') {
28208
28479
  scrivito.gui.on('open', function() {
@@ -28229,14 +28500,12 @@ var scrivito = {};
28229
28500
  }
28230
28501
  },
28231
28502
 
28232
- // @api public
28233
28503
  create_obj: function(attributes) {
28234
28504
  return scrivito.obj.create(attributes).then(function(obj) {
28235
28505
  return {id: obj.id()};
28236
28506
  }, convert_internal_error);
28237
28507
  },
28238
28508
 
28239
- // @api public
28240
28509
  delete_obj: function(id) {
28241
28510
  if (id) {
28242
28511
  return scrivito.obj.create_instance({id: id}).destroy()
@@ -28246,9 +28515,8 @@ var scrivito = {};
28246
28515
  }
28247
28516
  },
28248
28517
 
28249
- // @api public
28250
28518
  is_current_page_restricted: function() {
28251
- var current_page = scrivito.application_window.document().page();
28519
+ var current_page = scrivito.application_document().page();
28252
28520
  if (current_page) {
28253
28521
  return current_page.has_restriction();
28254
28522
  }
@@ -28258,7 +28526,6 @@ var scrivito = {};
28258
28526
  return $.Deferred();
28259
28527
  },
28260
28528
 
28261
- // @api public
28262
28529
  trigger: function(event_name, dom_element) {
28263
28530
  if (event_name === 'content') {
28264
28531
  _.each($(dom_element), function(e) {
@@ -28273,7 +28540,6 @@ var scrivito = {};
28273
28540
  }
28274
28541
  },
28275
28542
 
28276
- // @api public
28277
28543
  in_editable_view: function() {
28278
28544
  return scrivito.editing_context.display_mode === 'editing' &&
28279
28545
  scrivito.editing_context.visible_workspace.is_editable();
@@ -28329,17 +28595,14 @@ var scrivito = {};
28329
28595
  scrivito.info_dialog(scrivito.t('workspace_limit_exceeded.message'));
28330
28596
  },
28331
28597
 
28332
- // @api public
28333
28598
  register_default_obj_class_for_content_type: function(mapping) {
28334
28599
  scrivito.obj_class_defaults.register(mapping);
28335
28600
  },
28336
28601
 
28337
- // @api public
28338
28602
  default_obj_class_for_content_type: function(content_type) {
28339
28603
  return scrivito.obj_class_defaults.lookup(content_type);
28340
28604
  },
28341
28605
 
28342
- // @api public
28343
28606
  configure_menu_order: function(order) {
28344
28607
  scrivito.menu_order = order;
28345
28608
  },
@@ -28373,20 +28636,46 @@ var scrivito = {};
28373
28636
  }
28374
28637
  },
28375
28638
 
28376
- // @api beta
28377
28639
  register_select_content: function(select_content) {
28378
28640
  scrivito.select_content = select_content;
28379
28641
  },
28380
28642
 
28381
- // @api public
28382
28643
  page_menu: function(cms_document) {
28383
28644
  return scrivito.menu_builder.create_instance(cms_document);
28384
28645
  },
28385
28646
 
28647
+ custom_dialog: function(iframe, doc, content, options) {
28648
+ var dialog = scrivito.iframe_dialog.open(iframe, options);
28649
+ dialog.when_open.done(function(dialog_body) {
28650
+ var panel = scrivito.full_screen_panel(doc, dialog.when_closed);
28651
+ panel.css('background-color', dialog_body.css('background-color'));
28652
+ panel.append(content);
28653
+ });
28654
+ return {when_closed: dialog.when_closed};
28655
+ },
28656
+
28386
28657
  register_browse_content: function (browse_content) {
28387
28658
  scrivito.browse_content = browse_content;
28388
28659
  },
28389
28660
 
28661
+ ui_config: function() {
28662
+ return scrivito.dom_config.read($('body'), ui_config_attr_name);
28663
+ },
28664
+
28665
+ // For test purpose only.
28666
+ mock_ui_config: function(config) {
28667
+ if (config) {
28668
+ scrivito.dom_config.write($('body'), ui_config_attr_name, config);
28669
+ } else {
28670
+ $('body').removeAttr(ui_config_attr_name);
28671
+ }
28672
+ },
28673
+
28674
+ restore_styles_afterwards: function(promise, dom_element) {
28675
+ restore_prior_attr(promise, dom_element, 'class');
28676
+ restore_prior_attr(promise, dom_element, 'style');
28677
+ },
28678
+
28390
28679
  // FIXME content-widget
28391
28680
  enable_content_upload: false,
28392
28681
 
@@ -28404,6 +28693,7 @@ var scrivito = {};
28404
28693
  scrivito.is_development_mode = config.is_development_mode;
28405
28694
 
28406
28695
  scrivito.inplace_marker.init();
28696
+ scrivito.option_marker.init();
28407
28697
  scrivito.menu_bar_saving_indicator.init();
28408
28698
  scrivito.menu_bar_device_toggle.init();
28409
28699
  scrivito.menu_bar_warning.init();
@@ -28430,6 +28720,8 @@ var scrivito = {};
28430
28720
  scrivito.widget_reloading.init();
28431
28721
  scrivito.widget_sorting.init();
28432
28722
 
28723
+ scrivito.no_turbolinks.init();
28724
+
28433
28725
  // FIXME content-widget
28434
28726
  if (scrivito.enable_content_upload) {
28435
28727
  scrivito.content_upload.init();
@@ -28440,6 +28732,7 @@ var scrivito = {};
28440
28732
  window.onbeforeunload = scrivito.warn_before_unloading;
28441
28733
 
28442
28734
  scrivito.url_update(scrivito.application_window, scrivito.cms_window.from(window));
28735
+ scrivito.application_window.use_fragment_of(scrivito.cms_window.from(window));
28443
28736
 
28444
28737
  inited = true;
28445
28738
  }
@@ -28570,19 +28863,17 @@ var scrivito = {};
28570
28863
 
28571
28864
  }());
28572
28865
  (function() {
28573
- var attr_name = 'data-scrivito-private-config';
28574
- var selector = '[' + attr_name + ']';
28575
-
28576
28866
  _.extend(scrivito, {
28577
28867
  dom_config: {
28578
- read: function(dom_element) {
28868
+ read: function(dom_element, attr_name) {
28869
+ var selector = '[' + attr_name + ']';
28579
28870
  var config = dom_element.find(selector).addBack(selector).attr(attr_name);
28580
28871
  if (config) {
28581
28872
  return JSON.parse(config);
28582
28873
  }
28583
28874
  },
28584
28875
 
28585
- write: function(dom_element, config) {
28876
+ write: function(dom_element, attr_name, config) {
28586
28877
  dom_element.attr(attr_name, JSON.stringify(config));
28587
28878
  }
28588
28879
  }
@@ -28638,16 +28929,6 @@ var scrivito = {};
28638
28929
  }
28639
28930
  };
28640
28931
 
28641
- var assert_no_turbolinks = function() {
28642
- if (scrivito.application_window.browser_window().Turbolinks) {
28643
- scrivito.alert_dialog(
28644
- 'You have Turbolinks enabled. ' +
28645
- 'Scrivito does not yet support Turbolink. ' +
28646
- 'Please remove it from your assets.'
28647
- );
28648
- }
28649
- };
28650
-
28651
28932
  _.extend(scrivito, {
28652
28933
  gui: {
28653
28934
  start: function() {
@@ -28660,7 +28941,6 @@ var scrivito = {};
28660
28941
  $('body').append('<div id="scrivito_editing"></div>');
28661
28942
  run_open_callbacks();
28662
28943
  scrivito.gui.run_content_callbacks(window.document);
28663
- assert_no_turbolinks();
28664
28944
 
28665
28945
  is_started = true;
28666
28946
  },
@@ -29329,9 +29609,8 @@ var scrivito = {};
29329
29609
  .attr('class', 'scrivito_icon scrivito_icon_'+device);
29330
29610
  };
29331
29611
 
29332
- $('#scrivito_ui').addClass('scrivito_iframe_resize_bg');
29333
-
29334
29612
  scrivito.menu_bar.register_item_renderer(function(menu_bar) {
29613
+ $('#scrivito_ui').addClass('scrivito_iframe_resize_bg');
29335
29614
  device_toggle = $(scrivito.template.render('menu_bar_device_toggle',
29336
29615
  {device: current_device()}
29337
29616
  )).appendTo(menu_bar.find('#scrivito_menu_bar_device_toggle'));
@@ -29349,8 +29628,11 @@ var scrivito = {};
29349
29628
  }
29350
29629
  },
29351
29630
  execute: function() {
29352
- toggle_device(device);
29353
- $('iframe[name=scrivito_application]').addClass('scrivito_iframe_animate_resize');
29631
+ var iframe = $('iframe[name=scrivito_application]');
29632
+ scrivito.transition(iframe, function() {
29633
+ toggle_device(device);
29634
+ iframe.addClass('scrivito_iframe_animate_resize');
29635
+ }).done(function() { iframe.removeClass('scrivito_iframe_animate_resize'); });
29354
29636
  }
29355
29637
  });
29356
29638
  });
@@ -29592,14 +29874,14 @@ var scrivito = {};
29592
29874
  _.extend(scrivito, {
29593
29875
  current_page_restriction: {
29594
29876
  init: function() {
29595
- var current_page = scrivito.application_window.document().page();
29596
- if (current_page && current_page.has_restriction()) {
29597
- scrivito.menu_bar.register_item_renderer(function(menu_bar) {
29877
+ scrivito.menu_bar.register_item_renderer(function(menu_bar) {
29878
+ var current_page = scrivito.application_document().page();
29879
+ if (current_page && current_page.has_restriction()) {
29598
29880
  $(scrivito.template.render('current_page_restriction', {
29599
29881
  restriction_messages: current_page.restriction_messages
29600
29882
  })).appendTo(menu_bar.find('#scrivito_current_page_restriction'));
29601
- });
29602
- }
29883
+ }
29884
+ });
29603
29885
  }
29604
29886
  }
29605
29887
  });
@@ -29661,240 +29943,88 @@ var scrivito = {};
29661
29943
  has_separator: selected_workspace.is_published() && commands.length,
29662
29944
  commands: commands
29663
29945
  }
29664
- ));
29665
-
29666
- _.each(commands, function(command) { bind_command(command); });
29667
- }).always(function() {
29668
- spinner.removeAttr('data-scrivito-private-loading');
29669
- });
29670
- }
29671
-
29672
- return false;
29673
- });
29674
- });
29675
- }
29676
- }
29677
- });
29678
- }());
29679
- (function() {
29680
- _.extend(scrivito, {
29681
- changes_dialog: {
29682
- open: function() {
29683
- loaded_objs = [];
29684
- total_obj_count = 0;
29685
- batch = basic_batch();
29686
-
29687
- view = $(scrivito.template.render('changes_dialog', {
29688
- selected_workspace_title: scrivito.editing_context.selected_workspace.title()
29689
- }));
29690
-
29691
- $('#scrivito_editing').append(view);
29692
- var next_loader = view.find('.scrivito_load_more');
29693
-
29694
- target = view.find('#scrivito_changes_table_loaded');
29695
- var spinner = view.find('#scrivito_changes_table_loading');
29696
- var empty_result = view.find('#scrivito_changes_table_empty_result');
29697
-
29698
- var obj_count = view.find('#scrivito_obj_count');
29699
-
29700
- loaded_obj_count_ref = view.find('#scrivito_loaded_obj_count');
29701
- total_obj_count_ref = view.find('#scrivito_total_obj_count');
29702
-
29703
- load_markup = function() {
29704
- loading_in_progress = true;
29705
- spinner.show();
29706
-
29707
- batch.load_batch().then(function(data, next) {
29708
- loading_in_progress = false;
29709
-
29710
- batch = next;
29711
- if (!batch) {
29712
- next_loader.hide();
29713
- } else {
29714
- next_loader.show();
29715
- }
29716
-
29717
- if (data.total > 0) {
29718
- loaded_objs = loaded_objs.concat(data.hits);
29719
- total_obj_count = data.total;
29720
-
29721
- render_objs(loaded_objs);
29722
- } else {
29723
- empty_result.show();
29724
- }
29725
-
29726
- spinner.hide();
29727
-
29728
- loaded_obj_count_ref.text(loaded_objs.length);
29729
- total_obj_count_ref.text(total_obj_count);
29730
- obj_count.show();
29731
-
29732
- view.on('click.scrivito_link_to_obj', '.scrivito_link_to_obj', function(e) {
29733
- var element = $(e.currentTarget);
29734
- var obj_id = element.attr('data-scrivito-private-changes-list-obj-id');
29735
- var obj_modification = element.attr(
29736
- 'data-scrivito-private-changes-list-obj-modification');
29737
- var obj_is_binary = element.attr('data-scrivito-private-changes-list-obj-is-binary');
29738
-
29739
- if (can_use_resource_dialog_directly(obj_modification, obj_is_binary)) {
29740
- var loaded_obj = _.find(loaded_objs, function(obj) {
29741
- return obj.id === obj_id;
29742
- });
29743
- scrivito.resource_dialog.open(scrivito.obj.create_instance(loaded_obj));
29744
- } else {
29745
- scrivito.changes_dialog.redirect_to_obj(obj_id, obj_modification, obj_is_binary);
29746
- }
29747
-
29748
- return false;
29749
- });
29750
- });
29751
- };
29752
-
29753
- next_loader.on('click', load_markup);
29754
- load_markup();
29755
- activate_sorting();
29756
-
29757
- var deferred = $.Deferred();
29758
-
29759
- cancel = function() {
29760
- scrivito.dialog.close(view);
29761
- deferred.resolve();
29762
- return false;
29763
- };
29764
-
29765
- view.find('.scrivito_cancel').on('click', cancel);
29766
-
29767
- scrivito.dialog.open_and_adjust(view);
29768
- return scrivito.with_dialog_behaviour(view, deferred, {escape: cancel});
29769
- },
29946
+ ));
29770
29947
 
29771
- redirect_to_obj: function(obj_id, modification, is_binary) {
29772
- var base_url = scrivito.root_path();
29773
- var query_params = {};
29948
+ _.each(commands, function(command) { bind_command(command); });
29949
+ }).always(function() {
29950
+ spinner.removeAttr('data-scrivito-private-loading');
29951
+ });
29952
+ }
29774
29953
 
29775
- if (!!is_binary) {
29776
- base_url += '__scrivito/resource_details/';
29777
- query_params.return_to = document.URL;
29778
- }
29954
+ return false;
29955
+ });
29956
+ });
29957
+ }
29958
+ }
29959
+ });
29960
+ }());
29961
+ (function() {
29962
+ var dialog;
29779
29963
 
29780
- if (modification === 'deleted' && !scrivito.editing_context.is_deleted_mode()) {
29781
- query_params._scrivito_display_mode = 'deleted';
29782
- }
29964
+ _.extend(scrivito, {
29965
+ changes_dialog: {
29966
+ open: function() {
29967
+ var promise = $.Deferred();
29968
+ dialog = $(scrivito.template.render('changes_dialog')).appendTo($('#scrivito_editing'));
29969
+ open_batch(scrivito.obj_changes());
29783
29970
 
29784
- if (modification === 'new' && scrivito.editing_context.is_deleted_mode()) {
29785
- query_params._scrivito_display_mode = 'added';
29786
- }
29971
+ var close = function() {
29972
+ scrivito.dialog.close_without_transition(dialog);
29973
+ promise.resolve();
29974
+ return false;
29975
+ };
29787
29976
 
29788
- cancel();
29789
- var redirect_url = base_url + obj_id;
29790
- if (!_.isEmpty(query_params)) {
29791
- redirect_url += '?' + $.param(query_params);
29792
- }
29793
- scrivito.with_saving_overlay(scrivito.redirect_to(redirect_url));
29977
+ dialog.find('.scrivito_cancel').on('click', close);
29978
+ scrivito.dialog.open_and_adjust_without_transition(dialog);
29979
+ return scrivito.with_dialog_behaviour(dialog, promise, {escape: close});
29794
29980
  }
29795
29981
  }
29796
29982
  });
29797
29983
 
29798
- var batch;
29799
- var view;
29800
- var loaded_obj_count_ref;
29801
- var total_obj_count_ref;
29802
- var loaded_objs;
29803
- var total_obj_count;
29804
- var target;
29805
- var load_markup;
29806
- var loading_in_progress;
29807
- var cancel;
29808
-
29809
- var can_use_resource_dialog_directly = function(modification, is_binary) {
29810
- return is_binary && (
29811
- modification === 'edited' ||
29812
- modification === 'deleted' && scrivito.editing_context.is_deleted_mode() ||
29813
- modification === 'new' && !scrivito.editing_context.is_deleted_mode());
29814
- };
29815
-
29816
- var basic_batch = function() {
29817
- return scrivito.
29818
- obj_where('_modification', 'equals', ['new', 'edited', 'deleted']).
29819
- batch_size(100).
29820
- order('_last_changed').
29821
- reverse_order().
29822
- format('_default').
29823
- include_deleted();
29984
+ var open_batch = function(chainable_search, objs) {
29985
+ render(chainable_search);
29986
+ chainable_search.load_batch().then(function(result, next) {
29987
+ objs = (objs || []).concat(_.map(result.hits, function(hit) {
29988
+ return scrivito.obj.create_instance(hit);
29989
+ }));
29990
+ render(chainable_search, result, objs, next);
29991
+ });
29824
29992
  };
29825
29993
 
29826
- var render_objs = function(obj_specs) {
29827
- target.html(_.map(obj_specs, function(obj_spec) {
29828
- return scrivito.template.render('changes_dialog/row', scrivito.obj.create_instance(obj_spec));
29994
+ var render = function(chainable_search, result, objs, next) {
29995
+ var view = dialog.find('.scrivito_changes_dialog_content');
29996
+ view.html(scrivito.template.render('changes_dialog/content', {
29997
+ title: scrivito.t('changes_dialog.title', scrivito.editing_context.selected_workspace.title()),
29998
+ is_loaded: !!result,
29999
+ total: result && result.total,
30000
+ objs: objs,
30001
+ has_more: !!next
29829
30002
  }));
29830
- };
30003
+ scrivito.update_auto_height_for(view);
29831
30004
 
29832
- var activate_sorting = function() {
29833
- var sortables = view.find('.scrivito_sortable');
29834
-
29835
- view.on('click.scrivito_sortable', '.scrivito_sortable', function() {
29836
- if (loading_in_progress) {
29837
- return;
29838
- }
30005
+ view.find('[data-scrivito-sort-by="'+chainable_search.query().order+'"]')
30006
+ .addClass('scrivito_'+(chainable_search.query().reverse_order ? 'sort_down' : 'sort_up'));
29839
30007
 
30008
+ view.find('[data-scrivito-sort-by]').on('click', function() {
29840
30009
  var sortable = $(this);
29841
- var sorting_by = {};
29842
- sorting_by.attribute = sortable.attr('data-scrivito-private-sort-by');
29843
-
29844
- var order_was_asc = sortable.hasClass('sort_up');
29845
- if (order_was_asc) {
29846
- sorting_by.order = 'desc';
29847
- } else {
29848
- sorting_by.order = 'asc';
29849
- }
29850
- sortables.removeClass('sort_up').removeClass('sort_down');
29851
-
29852
- var local_sort = function() {
29853
- var sort_function_or_attribute = sorting_by.attribute;
29854
-
29855
- if (sort_function_or_attribute === 'rights') {
29856
- sort_function_or_attribute = function(obj) {
29857
- return -obj.restriction_messages.length;
29858
- };
29859
- }
29860
-
29861
- var objs = _.sortBy(loaded_objs, sort_function_or_attribute);
29862
-
29863
- if (sorting_by.order === 'desc') {
29864
- objs = objs.reverse();
29865
- }
29866
-
29867
- render_objs(objs);
29868
- };
29869
-
29870
- var backend_sort = function() {
29871
- batch = basic_batch();
29872
- batch.order('_' + sorting_by.attribute);
29873
-
29874
- if (sorting_by.order === 'asc') {
29875
- batch.reverse_order();
29876
- }
29877
-
29878
- loaded_objs = [];
29879
- render_objs(loaded_objs);
29880
- load_markup();
29881
- };
29882
-
29883
- if (loaded_objs.length === total_obj_count || sorting_by.attribute === 'rights') {
29884
- local_sort();
29885
- } else {
29886
- backend_sort();
29887
- }
30010
+ var chainable_search = scrivito.obj_changes();
30011
+ chainable_search.order(sortable.attr('data-scrivito-sort-by'));
30012
+ if (sortable.hasClass('scrivito_sort_down')) { chainable_search.reverse_order(); }
30013
+ open_batch(chainable_search);
30014
+ return false;
30015
+ });
29888
30016
 
29889
- if (sorting_by.order === 'asc') {
29890
- sortable.addClass('sort_up');
29891
- } else {
29892
- sortable.addClass('sort_down');
29893
- }
30017
+ view.find('[data-scrivito-obj-id]').on('click', function() {
30018
+ var obj_id = $(this).attr('data-scrivito-obj-id');
30019
+ scrivito.open_obj(_.find(objs, function(obj) { return obj.id() === obj_id; }));
30020
+ return false;
29894
30021
  });
29895
30022
 
30023
+ view.find('.scrivito_load_more').on('click', function() {
30024
+ open_batch(next, objs);
30025
+ return false;
30026
+ });
29896
30027
  };
29897
-
29898
30028
  }());
29899
30029
  (function() {
29900
30030
  _.extend(scrivito, {
@@ -29910,13 +30040,13 @@ var scrivito = {};
29910
30040
  view.find('input').focus().select();
29911
30041
 
29912
30042
  var done = function() {
29913
- scrivito.dialog.close(view);
30043
+ scrivito.dialog.close_with_transition(view);
29914
30044
  deferred.resolve();
29915
30045
  return false;
29916
30046
  };
29917
30047
  view.find('.scrivito_done').on('click', done);
29918
30048
 
29919
- scrivito.dialog.open_and_adjust(view);
30049
+ scrivito.dialog.open_and_adjust_with_transition(view);
29920
30050
  scrivito.with_dialog_behaviour(view, deferred, {enter: done, escape: done});
29921
30051
  }
29922
30052
  });
@@ -29945,6 +30075,31 @@ var scrivito = {};
29945
30075
 
29946
30076
  scrivito.obj_class_defaults.reset();
29947
30077
  }());
30078
+ (function() {
30079
+ _.extend(scrivito, {
30080
+ obj_class_selection: {
30081
+ store: function(obj_class) {
30082
+ var new_storage = get_storage();
30083
+ new_storage.unshift(obj_class);
30084
+ new_storage = _.uniq(new_storage);
30085
+ new_storage = _.take(new_storage, 200);
30086
+ scrivito.storage.set(scrivito.obj_class_selection.storage_key, new_storage);
30087
+ },
30088
+
30089
+ recent: function(valid_obj_classes) {
30090
+ var recent_valid_obj_classes = _.intersection(get_storage(), valid_obj_classes);
30091
+ return _.take(recent_valid_obj_classes, 5);
30092
+ },
30093
+
30094
+ // for testing only
30095
+ storage_key: 'obj_class_selection.used_classes'
30096
+ }
30097
+ });
30098
+
30099
+ var get_storage = function() {
30100
+ return scrivito.storage.get(scrivito.obj_class_selection.storage_key) || [];
30101
+ };
30102
+ }());
29948
30103
  (function() {
29949
30104
  var expando = "scrivito_cms_element";
29950
30105
 
@@ -29971,6 +30126,18 @@ var scrivito = {};
29971
30126
 
29972
30127
  set_menu: function(menu) {
29973
30128
  dom_element.data('scrivito-menu', menu);
30129
+ },
30130
+
30131
+ enrich_obj_classes_with_recent: function(obj_classes_markup) {
30132
+ var sorted_all = _.map(obj_classes_markup, function(obj_class_markup) {
30133
+ return obj_class_markup.name;
30134
+ }).sort();
30135
+ var recent = scrivito.obj_class_selection.recent(sorted_all);
30136
+
30137
+ return {
30138
+ all: format_obj_classes(sorted_all, obj_classes_markup),
30139
+ recent: format_obj_classes(recent, obj_classes_markup)
30140
+ };
29974
30141
  }
29975
30142
  };
29976
30143
 
@@ -30016,22 +30183,48 @@ var scrivito = {};
30016
30183
  }
30017
30184
  }
30018
30185
  });
30186
+
30187
+ var format_obj_classes = function(obj_classes, obj_classes_markup) {
30188
+ return _.map(obj_classes, function(obj_class) {
30189
+ return {
30190
+ name: obj_class,
30191
+ markup: _.find(obj_classes_markup, function(obj_class_markup) {
30192
+ return obj_class_markup.name === obj_class;
30193
+ }).markup
30194
+ };
30195
+ });
30196
+ };
30019
30197
  }());
30020
30198
  (function() {
30021
30199
  _.extend(scrivito, {
30022
30200
  blob: {
30023
- create: function(file) {
30201
+ create: function(obj_id, binary) {
30202
+ var uploaded_binary = binary.is_uploaded_binary ? binary : scrivito.blob.upload_binary(binary);
30024
30203
  return get_upload_permission().then(function(permission) {
30025
30204
  scrivito.write_monitor.start_write();
30026
- return upload_to_s3(file, permission).always(function() {
30027
- scrivito.write_monitor.end_write();
30028
- });
30205
+ return upload_to_s3(uploaded_binary, permission).then(function(blob) {
30206
+ return activate_upload(obj_id, blob, binary.filename, binary.content_type)
30207
+ .then(function() { return blob; });
30208
+ }).always(function() { scrivito.write_monitor.end_write(); });
30029
30209
  });
30030
30210
  },
30031
30211
 
30032
30212
  // For testing purpose only.
30033
30213
  get_form_data: function() {
30034
30214
  return new FormData();
30215
+ },
30216
+
30217
+ upload_binary: function(params) {
30218
+ var blob = params.blob || params.file;
30219
+ if (!blob) { $.error('need blob or file'); }
30220
+ if (!params.content_type) { params.content_type = blob.type; }
30221
+ if (!params.filename) {
30222
+ if (params.blob) { $.error('blob needs a filename'); }
30223
+ params.filename = blob.name;
30224
+ }
30225
+ params.filename = params.filename.replace(/[^\w\-_\.$]/g, '-');
30226
+
30227
+ return $.extend(params, {is_uploaded_binary: true});
30035
30228
  }
30036
30229
  }
30037
30230
  });
@@ -30040,15 +30233,17 @@ var scrivito = {};
30040
30233
  return scrivito.ajax('GET', 'blobs/upload_permission');
30041
30234
  };
30042
30235
 
30043
- var upload_to_s3 = function(file, permission) {
30236
+ var upload_to_s3 = function(binary, permission) {
30044
30237
  var form_data = scrivito.blob.get_form_data();
30045
30238
  _.each(permission.fields, function(value, name) {
30046
30239
  form_data.append(name, value);
30047
30240
  });
30048
- form_data.append('file', file); // File must be appended last, otherwise S3 will complain.
30049
30241
 
30050
- permission.blob.filename = file.name.replace(/[^\w\-_\.$]/g, '-');
30051
- permission.blob.content_type = file.type;
30242
+ // File must be appended last, otherwise S3 will complain.
30243
+ form_data.append('file', binary.blob || binary.file);
30244
+
30245
+ permission.blob.filename = binary.filename;
30246
+ permission.blob.content_type = binary.content_type;
30052
30247
 
30053
30248
  return $.ajax({type: 'POST', url: permission.url, data: form_data,
30054
30249
  // These are needed in order for jQuery to work properly with a FormData.
@@ -30057,6 +30252,14 @@ var scrivito = {};
30057
30252
  }).then(function() { return permission.blob; });
30058
30253
  };
30059
30254
 
30255
+ var activate_upload = function(obj_id, blob, filename, content_type) {
30256
+ return scrivito.ajax('PUT', 'blobs/activate_upload', {data: {
30257
+ obj_id: obj_id,
30258
+ upload: blob,
30259
+ filename: filename,
30260
+ content_type: content_type
30261
+ }});
30262
+ };
30060
30263
  }());
30061
30264
  (function() {
30062
30265
  _.extend(scrivito, {
@@ -30079,8 +30282,10 @@ var scrivito = {};
30079
30282
  },
30080
30283
 
30081
30284
  fetch_page_class_selection: function() {
30082
- return scrivito.ajax('GET', 'objs/page_class_selection?' +
30083
- $.param({parent_path: that.path()}));
30285
+ var request_path = 'objs/page_class_selection?' + $.param({parent_path: that.path()});
30286
+ return scrivito.ajax('GET', request_path).then(function(obj_classes_markup) {
30287
+ return that.enrich_obj_classes_with_recent(obj_classes_markup);
30288
+ });
30084
30289
  },
30085
30290
 
30086
30291
  allowed_classes: function() {
@@ -30090,6 +30295,7 @@ var scrivito = {};
30090
30295
 
30091
30296
  create_child: function(obj_class) {
30092
30297
  var id = scrivito.random_id();
30298
+ scrivito.obj_class_selection.store(obj_class);
30093
30299
  return scrivito.obj.create({
30094
30300
  _id: id,
30095
30301
  _path: that.path() + '/' + id,
@@ -30200,6 +30406,7 @@ var scrivito = {};
30200
30406
  });
30201
30407
 
30202
30408
  var additional_public_api = {};
30409
+ var page_config_attr_name = 'data-scrivito-private-page-config';
30203
30410
 
30204
30411
  var create_instance = function(cms_element) {
30205
30412
  var that = cms_element;
@@ -30209,6 +30416,7 @@ var scrivito = {};
30209
30416
  install_public_api: function() {
30210
30417
  local_$().fn.scrivito = scrivito.jquery_plugin;
30211
30418
 
30419
+ // @api public
30212
30420
  browser_window.scrivito = _.extend({}, additional_public_api, {
30213
30421
  on: local_on_function,
30214
30422
  trigger: scrivito.trigger,
@@ -30219,12 +30427,25 @@ var scrivito = {};
30219
30427
  in_editable_view: scrivito.in_editable_view,
30220
30428
  register_default_obj_class_for_content_type: scrivito.register_default_obj_class_for_content_type,
30221
30429
  default_obj_class_for_content_type: scrivito.default_obj_class_for_content_type,
30222
- register_select_content: scrivito.register_select_content,
30430
+ register_select_content: scrivito.register_select_content, // @api beta
30223
30431
  configure_menu_order: scrivito.configure_menu_order,
30224
- page_menu: function() { return scrivito.page_menu(that); }
30432
+ upload_binary: scrivito.blob.upload_binary,
30433
+ page_menu: function() { return scrivito.page_menu(that); },
30434
+ // @api beta
30435
+ dialog: function(content, options) {
30436
+ var iframe = that.window().iframe();
30437
+ return scrivito.custom_dialog(iframe, browser_document, content, options);
30438
+ }
30225
30439
  });
30226
30440
  },
30227
30441
 
30442
+ assert_user_logged_in: function() {
30443
+ if (that.user_id() !== scrivito.user.current.id()) {
30444
+ // editing is either no longer allowed, or user changed => closing UI
30445
+ scrivito.change_location(window.location, window.parent);
30446
+ }
30447
+ },
30448
+
30228
30449
  connect: function() {
30229
30450
  if (connected) { $.error("document connected twice!"); }
30230
30451
 
@@ -30248,11 +30469,9 @@ var scrivito = {};
30248
30469
  });
30249
30470
  },
30250
30471
 
30251
- page: function() {
30252
- var config = scrivito.dom_config.read(that.dom_element());
30253
- if (config && !_.isEmpty(config.current_page)) {
30254
- return scrivito.obj.create_instance(config.current_page);
30255
- }
30472
+ add_app_extensions: function() {
30473
+ var app_extension_tags = scrivito.ui_config().app_extension_tags;
30474
+ browser_window.document.write(app_extension_tags);
30256
30475
  },
30257
30476
 
30258
30477
  window: function() {
@@ -30282,14 +30501,36 @@ var scrivito = {};
30282
30501
  }
30283
30502
  },
30284
30503
 
30504
+ page: function() {
30505
+ var config = that.page_config();
30506
+ if (config && !_.isEmpty(config.current_page)) {
30507
+ return scrivito.obj.create_instance(config.current_page);
30508
+ }
30509
+ },
30510
+
30511
+ user_id: function() {
30512
+ var config = that.page_config();
30513
+ if (config) {
30514
+ return config.user_id;
30515
+ }
30516
+ },
30517
+
30518
+ page_config: function() {
30519
+ return scrivito.dom_config.read(that.dom_element().find('body'), page_config_attr_name);
30520
+ },
30521
+
30285
30522
  // For test purpose only.
30286
- mock_config: function(config) {
30287
- scrivito.dom_config.write(that.dom_element().find('body'), config);
30523
+ mock_page_config: function(config) {
30524
+ if (config) {
30525
+ scrivito.dom_config.write(that.dom_element().find('body'), page_config_attr_name, config);
30526
+ } else {
30527
+ that.dom_element().find('body').removeAttr(page_config_attr_name);
30528
+ }
30288
30529
  },
30289
30530
 
30290
30531
  // For test purpose only.
30291
30532
  mock_current_page: function(attrs) {
30292
- that.mock_config({current_page: attrs});
30533
+ that.mock_page_config({current_page: attrs});
30293
30534
  }
30294
30535
  });
30295
30536
 
@@ -30299,7 +30540,15 @@ var scrivito = {};
30299
30540
  var browser_window = browser_document.defaultView;
30300
30541
 
30301
30542
  var local_$ = function() {
30302
- return browser_window.jQuery;
30543
+ if (browser_window.jQuery) {
30544
+ return browser_window.jQuery;
30545
+ } else {
30546
+ var jquery_missing = 'jQuery is missing! ' +
30547
+ 'In order for Scrivito to work, jQuery is needed. ' +
30548
+ 'Please add jQuery to your assets.';
30549
+ scrivito.alert_dialog(jquery_missing);
30550
+ $.error(jquery_missing);
30551
+ }
30303
30552
  };
30304
30553
 
30305
30554
  var connected = false;
@@ -30404,10 +30653,7 @@ var scrivito = {};
30404
30653
  }
30405
30654
 
30406
30655
  return request_promise.then(function(model_data) {
30407
- var field_data = model_data[that.field_name()];
30408
- if (field_data) {
30409
- return field_data[0];
30410
- }
30656
+ return model_data[that.field_name()];
30411
30657
  });
30412
30658
  },
30413
30659
 
@@ -30568,6 +30814,17 @@ var scrivito = {};
30568
30814
  return with_saving_overlay(scrivito.redirect_to(location, browser_window));
30569
30815
  },
30570
30816
 
30817
+ use_fragment_of: function(other_cms_window) {
30818
+ if (that === other_cms_window) { return; }
30819
+
30820
+ var ui_hash = other_cms_window.browser_window().location.hash;
30821
+ if (ui_hash) {
30822
+ var src_uri = new URI(that.iframe().src);
30823
+ src_uri.fragment(ui_hash);
30824
+ that.iframe().src = src_uri.href();
30825
+ }
30826
+ },
30827
+
30571
30828
  is_frame: function() {
30572
30829
  return browser_window.parent !== browser_window;
30573
30830
  },
@@ -30693,22 +30950,26 @@ var scrivito = {};
30693
30950
 
30694
30951
  var serialize_date = function(date) {
30695
30952
  return date.getUTCFullYear().toString() +
30696
- format_date_number(date.getUTCMonth() + 1) + // Month numbers are starting at 0.
30697
- format_date_number(date.getUTCDate()) +
30698
- format_date_number(date.getUTCHours()) +
30699
- format_date_number(date.getUTCMinutes()) +
30700
- format_date_number(date.getUTCSeconds());
30953
+ '-' + format_date_number(date.getUTCMonth() + 1) + // Month numbers are starting at 0.
30954
+ '-' + format_date_number(date.getUTCDate()) +
30955
+ 'T' + format_date_number(date.getUTCHours()) +
30956
+ ':' + format_date_number(date.getUTCMinutes()) +
30957
+ ':' + format_date_number(date.getUTCSeconds()) +
30958
+ 'Z';
30701
30959
  };
30702
30960
 
30703
- var convert_attrs = function(attrs) {
30961
+ var convert_attrs = function(obj_id, attrs) {
30704
30962
  var collected_promises = _.map(attrs, function(value, field_name) {
30705
30963
  if (is_file(value)) {
30706
- return scrivito.blob.create(value).then(function(value) {
30707
- return [field_name, value];
30964
+ return scrivito.blob.create(obj_id, {file: value}).then(function(blob) {
30965
+ return [field_name, blob];
30966
+ });
30967
+ } else if (value && value.is_uploaded_binary) {
30968
+ return scrivito.blob.create(obj_id, value).then(function(blob) {
30969
+ return [field_name, blob];
30708
30970
  });
30709
- } else {
30710
- return $.Deferred().resolve([field_name, scrivito.obj.serialize_value(value)]);
30711
30971
  }
30972
+ return $.Deferred().resolve([field_name, scrivito.obj.serialize_value(value)]);
30712
30973
  });
30713
30974
 
30714
30975
  return $.when.apply(this, collected_promises).then(function() {
@@ -30716,10 +30977,10 @@ var scrivito = {};
30716
30977
  });
30717
30978
  };
30718
30979
 
30719
- var convert_widget_pool = function(widget_pool) {
30980
+ var convert_widget_pool = function(obj_id, widget_pool) {
30720
30981
  if (widget_pool) {
30721
30982
  var conversion_promises = _.map(widget_pool, function(attrs, widget_id) {
30722
- return convert_attrs(attrs).then(function(converted_attrs) {
30983
+ return convert_attrs(obj_id, attrs).then(function(converted_attrs) {
30723
30984
  return [widget_id, converted_attrs];
30724
30985
  });
30725
30986
  });
@@ -30732,9 +30993,9 @@ var scrivito = {};
30732
30993
  }
30733
30994
  };
30734
30995
 
30735
- var prepare_attrs = function(attrs) {
30736
- return convert_widget_pool(attrs._widget_pool).then(function(widget_pool) {
30737
- return convert_attrs(attrs).then(function(converted_attrs) {
30996
+ var prepare_attrs = function(obj_id, attrs) {
30997
+ return convert_widget_pool(obj_id, attrs._widget_pool).then(function(widget_pool) {
30998
+ return convert_attrs(obj_id, attrs).then(function(converted_attrs) {
30738
30999
  converted_attrs._widget_pool = widget_pool;
30739
31000
  return converted_attrs;
30740
31001
  });
@@ -30816,7 +31077,7 @@ var scrivito = {};
30816
31077
  },
30817
31078
 
30818
31079
  save: function(attrs) {
30819
- return prepare_attrs(attrs).then(function(prepared_attrs) {
31080
+ return prepare_attrs(that.id(), attrs).then(function(prepared_attrs) {
30820
31081
  return scrivito.ajax('PUT', 'objs/'+that.id(), {data: {obj: prepared_attrs}});
30821
31082
  });
30822
31083
  },
@@ -30912,7 +31173,7 @@ var scrivito = {};
30912
31173
  },
30913
31174
 
30914
31175
  create: function(attrs) {
30915
- return prepare_attrs(attrs).then(function(prepared_attrs) {
31176
+ return prepare_attrs(scrivito.random_id(), attrs).then(function(prepared_attrs) {
30916
31177
  return scrivito.ajax('POST', 'objs', {data: {obj: prepared_attrs}}).then(function(data) {
30917
31178
  return scrivito.obj.create_instance(data);
30918
31179
  });
@@ -30921,6 +31182,18 @@ var scrivito = {};
30921
31182
  }
30922
31183
  });
30923
31184
  }());
31185
+ (function() {
31186
+ _.extend(scrivito, {
31187
+ obj_changes: function() {
31188
+ return scrivito.obj_where('_modification', 'equals', ['new', 'edited', 'deleted']).
31189
+ batch_size(100).
31190
+ order('_last_changed').
31191
+ reverse_order().
31192
+ format('_default').
31193
+ include_deleted();
31194
+ }
31195
+ });
31196
+ }());
30924
31197
  (function() {
30925
31198
  _.extend(scrivito, {
30926
31199
  obj_element: {
@@ -31242,7 +31515,7 @@ var scrivito = {};
31242
31515
  save: function(widget_attributes) {
31243
31516
  var obj_attributes = build_obj_attributes(widget_attributes);
31244
31517
  return that.obj().save(obj_attributes).then(function(obj_data) {
31245
- return obj_data._widget_pool[0][that.id()];
31518
+ return obj_data._widget_pool[that.id()];
31246
31519
  });
31247
31520
  },
31248
31521
 
@@ -31389,37 +31662,46 @@ var scrivito = {};
31389
31662
  return that.widget_elements().length === 0;
31390
31663
  },
31391
31664
 
31392
- add_widget: function(widget_spec, widget_element) {
31393
- var position;
31665
+ add_widget: function(widget_spec, widget_element, position) {
31666
+ var index;
31394
31667
  if (widget_element) {
31395
- position = widget_element.dom_element()
31396
- .prevAll('[data-scrivito-private-widget-id]').length;
31668
+ index = widget_element.dom_element()
31669
+ .prevAll('[data-scrivito-private-widget-id]').length;
31670
+ if (position === 'bottom') { index += 1; }
31397
31671
  } else {
31398
- position = that.widget_elements().length;
31672
+ index = that.widget_elements().length;
31399
31673
  }
31400
31674
 
31401
31675
  var content = that.content();
31402
- content.splice(position, 0, widget_spec);
31676
+ content.splice(index, 0, widget_spec);
31403
31677
 
31404
31678
  return that.save(content).then(function(field_data) {
31405
- var new_widget_id;
31406
- if (field_data.list) {
31407
- new_widget_id = field_data.list[position].widget;
31408
- } else {
31409
- new_widget_id = field_data[position];
31410
- }
31679
+ var new_widget_id = field_data[index];
31411
31680
  var widget = scrivito.widget.create_instance(that.obj(), new_widget_id);
31412
- return prepend_widget(widget, widget_element);
31681
+ return insert_widget(widget, widget_element, position);
31413
31682
  });
31414
31683
  },
31415
31684
 
31685
+ add_widget_via_create: function(widget_params, widget_element, position) {
31686
+ scrivito.obj_class_selection.store(widget_params._obj_class);
31687
+ return that.add_widget({create: widget_params}, widget_element, position);
31688
+ },
31689
+
31690
+ add_widget_via_copy: function(widget_params, widget_element, position) {
31691
+ return that.add_widget({copy: widget_params}, widget_element, position);
31692
+ },
31693
+
31416
31694
  fetch_widget_class_selection: function() {
31417
31695
  var params = {field_name: that.field_name()};
31418
31696
  if (that.widget()) {
31419
31697
  params.widget_id = that.widget().id();
31420
31698
  }
31421
- return scrivito.ajax('GET', 'objs/' + that.obj().id() + '/widget_class_selection?' +
31422
- $.param(params));
31699
+ var request_path = 'objs/' + that.obj().id() + '/widget_class_selection?' +
31700
+ $.param(params);
31701
+
31702
+ return scrivito.ajax('GET', request_path).then(function(obj_classes_markup) {
31703
+ return that.enrich_obj_classes_with_recent(obj_classes_markup);
31704
+ });
31423
31705
  },
31424
31706
 
31425
31707
  allowed_classes: function() {
@@ -31482,12 +31764,16 @@ var scrivito = {};
31482
31764
  .attr('data-scrivito-private-field-widget-allowed-classes'));
31483
31765
  };
31484
31766
 
31485
- var prepend_widget = function(widget, widget_element) {
31767
+ var insert_widget = function(widget, widget_element, position) {
31486
31768
  return widget.fetch_markup(that.template_name(), that.inner_tag()).then(
31487
31769
  function(widget_markup) {
31488
31770
  var dom_element = $($.trim(widget_markup));
31489
31771
  if (widget_element) {
31490
- widget_element.dom_element().before(dom_element);
31772
+ if (position === 'bottom') {
31773
+ widget_element.dom_element().after(dom_element);
31774
+ } else {
31775
+ widget_element.dom_element().before(dom_element);
31776
+ }
31491
31777
  } else {
31492
31778
  that.dom_element().prepend(dom_element);
31493
31779
  }
@@ -31586,12 +31872,6 @@ var scrivito = {};
31586
31872
  return scrivito.ajax('DELETE', 'workspaces/' + that.id());
31587
31873
  },
31588
31874
 
31589
- fetch_memberships: function() {
31590
- return scrivito.ajax('GET', 'workspaces/' + that.id()).then(function(details) {
31591
- return details.memberships;
31592
- });
31593
- },
31594
-
31595
31875
  has_conflicts: function() {
31596
31876
  return scrivito.obj_where('_conflicts', 'equals', true).size().then(function(size) {
31597
31877
  var promise = $.Deferred();
@@ -31917,17 +32197,23 @@ var scrivito = {};
31917
32197
  _.extend(scrivito, {
31918
32198
  template: {
31919
32199
  load_templates_from_server: false,
32200
+ template_cache: {},
31920
32201
 
31921
32202
  render: function(template_path, data) {
31922
32203
  var template;
31923
32204
  if(typeof ScrivitoHandlebarsTemplates !== 'undefined') {
31924
32205
  template = ScrivitoHandlebarsTemplates[template_path];
31925
32206
  }
31926
- if(template === undefined) {
32207
+ if(!template) {
31927
32208
  if(scrivito.template.load_templates_from_server) {
31928
- var url = "/app/assets/javascripts/templates/" + template_path + ".hbs?" + Math.random();
31929
- var source = jQuery.ajax(url, { async: false }).responseText;
31930
- template = Handlebars.compile(source);
32209
+ template = scrivito.template.template_cache[template_path];
32210
+ if(!template) {
32211
+ var url = "/app/assets/javascripts/templates/" + template_path + ".hbs?" +
32212
+ Math.random();
32213
+ var source = jQuery.ajax(url, { async: false }).responseText;
32214
+ template = Handlebars.compile(source);
32215
+ scrivito.template.template_cache[template_path] = template;
32216
+ }
31931
32217
  } else {
31932
32218
  throw('could not load template' + template_path);
31933
32219
  }
@@ -32111,14 +32397,14 @@ var scrivito = {};
32111
32397
  var promise = $.Deferred();
32112
32398
 
32113
32399
  var close = function() {
32114
- scrivito.dialog.close(view);
32400
+ scrivito.dialog.close_with_transition(view);
32115
32401
  promise.resolve();
32116
32402
  return false;
32117
32403
  };
32118
32404
 
32119
32405
  view.find('.scrivito_close').on('click', close);
32120
32406
 
32121
- scrivito.dialog.open_and_center(view);
32407
+ scrivito.dialog.open_and_center_with_transition(view);
32122
32408
 
32123
32409
  return scrivito.with_dialog_behaviour(view, promise, {enter: close, escape: close});
32124
32410
  },
@@ -32156,13 +32442,13 @@ var scrivito = {};
32156
32442
  var deferred = $.Deferred();
32157
32443
 
32158
32444
  var accept = function() {
32159
- scrivito.dialog.close(view);
32445
+ scrivito.dialog.close_with_transition(view);
32160
32446
  deferred.resolve();
32161
32447
  return false;
32162
32448
  };
32163
32449
 
32164
32450
  var cancel = function() {
32165
- scrivito.dialog.close(view);
32451
+ scrivito.dialog.close_with_transition(view);
32166
32452
  deferred.reject();
32167
32453
  return false;
32168
32454
  };
@@ -32170,7 +32456,7 @@ var scrivito = {};
32170
32456
  view.find('.scrivito_confirm').on('click', accept);
32171
32457
  view.find('.scrivito_cancel').on('click', cancel);
32172
32458
 
32173
- scrivito.dialog.open_and_center(view);
32459
+ scrivito.dialog.open_and_center_with_transition(view);
32174
32460
  return scrivito.with_dialog_behaviour(view, deferred, {enter: accept, escape: cancel});
32175
32461
  },
32176
32462
 
@@ -32202,14 +32488,14 @@ var scrivito = {};
32202
32488
  var accept = function() {
32203
32489
  var val = view.find('input').val();
32204
32490
  if (val) {
32205
- scrivito.dialog.close(view);
32491
+ scrivito.dialog.close_with_transition(view);
32206
32492
  deferred.resolve(val);
32207
32493
  }
32208
32494
  return false;
32209
32495
  };
32210
32496
 
32211
32497
  var cancel = function() {
32212
- scrivito.dialog.close(view);
32498
+ scrivito.dialog.close_with_transition(view);
32213
32499
  deferred.reject();
32214
32500
  return false;
32215
32501
  };
@@ -32217,7 +32503,7 @@ var scrivito = {};
32217
32503
  view.find('.scrivito_accept').on('click', accept);
32218
32504
  view.find('.scrivito_cancel').on('click', cancel);
32219
32505
 
32220
- scrivito.dialog.open_and_center(view).then(function() {
32506
+ scrivito.dialog.open_and_center_with_transition(view).then(function() {
32221
32507
  view.find('input').focus();
32222
32508
  });
32223
32509
 
@@ -32228,25 +32514,34 @@ var scrivito = {};
32228
32514
  (function() {
32229
32515
  _.extend(scrivito, {
32230
32516
  dialog: {
32231
- open: function(view) {
32517
+ open_without_transition: function(view) {
32518
+ view.addClass('scrivito_show');
32519
+ },
32520
+
32521
+ open_and_adjust_without_transition: function(view) {
32522
+ scrivito.dialog.open_without_transition(view);
32523
+ scrivito.dialog.adjust(view);
32524
+ },
32525
+
32526
+ open_with_transition: function(view) {
32232
32527
  return scrivito.transition(view, function() {
32233
- view.addClass('scrivito_show');
32528
+ scrivito.dialog.open_without_transition(view);
32234
32529
  });
32235
32530
  },
32236
32531
 
32237
- open_and_adjust: function(view) {
32238
- return scrivito.dialog.open(view).then(function() {
32532
+ open_and_adjust_with_transition: function(view) {
32533
+ return scrivito.dialog.open_with_transition(view).then(function() {
32239
32534
  scrivito.dialog.adjust(view);
32240
32535
  });
32241
32536
  },
32242
32537
 
32243
- open_and_center: function(view) {
32244
- return scrivito.dialog.open(view).then(function() {
32538
+ open_and_center_with_transition: function(view) {
32539
+ return scrivito.dialog.open_with_transition(view).then(function() {
32245
32540
  scrivito.center(view);
32246
32541
  });
32247
32542
  },
32248
32543
 
32249
- close: function(view) {
32544
+ close_with_transition: function(view) {
32250
32545
  scrivito.transition(view, function() {
32251
32546
  view.removeClass('scrivito_show');
32252
32547
  }).then(function() {
@@ -32255,6 +32550,12 @@ var scrivito = {};
32255
32550
  });
32256
32551
  },
32257
32552
 
32553
+ close_without_transition: function(view) {
32554
+ view.removeClass('scrivito_show');
32555
+ view.remove();
32556
+ view = null;
32557
+ },
32558
+
32258
32559
  adjust: function(view) {
32259
32560
  scrivito.invalidate_auto_height_for(view);
32260
32561
  scrivito.update_auto_height_for(view);
@@ -32308,8 +32609,8 @@ var scrivito = {};
32308
32609
  }));
32309
32610
 
32310
32611
  obj_classes_deferred.done(function(obj_class_selection) {
32311
- var selection_view = scrivito.template.render('choose_obj_class_list',
32312
- {obj_classes: obj_class_selection});
32612
+ var selection_view = scrivito.template.render('choose_obj_class_dialog/list',
32613
+ {obj_class_selection: obj_class_selection});
32313
32614
 
32314
32615
  selection_view = $($.trim(selection_view));
32315
32616
 
@@ -32317,7 +32618,7 @@ var scrivito = {};
32317
32618
 
32318
32619
  view.on('click', '.scrivito_obj_class_thumbnail', function(e) {
32319
32620
  e.preventDefault();
32320
- scrivito.dialog.close(view);
32621
+ scrivito.dialog.close_without_transition(view);
32321
32622
  deferred.resolve($(this).attr('data-scrivito-private-obj-class-name'));
32322
32623
  });
32323
32624
  });
@@ -32325,14 +32626,14 @@ var scrivito = {};
32325
32626
  $('#scrivito_editing').append(view);
32326
32627
 
32327
32628
  var cancel = function() {
32328
- scrivito.dialog.close(view);
32629
+ scrivito.dialog.close_without_transition(view);
32329
32630
  deferred.reject();
32330
32631
  return false;
32331
32632
  };
32332
32633
 
32333
32634
  view.find('.scrivito_cancel').on('click', cancel);
32334
32635
 
32335
- scrivito.dialog.open_and_adjust(view);
32636
+ scrivito.dialog.open_and_adjust_without_transition(view);
32336
32637
  return scrivito.with_dialog_behaviour(view, deferred, {escape: cancel});
32337
32638
  }
32338
32639
  });
@@ -32368,25 +32669,20 @@ var scrivito = {};
32368
32669
  var modal_size = iframe.contents().find('['+size_attr+']').attr(size_attr);
32369
32670
  if (_.contains(['small', 'medium', 'large'], modal_size)) {
32370
32671
  view.removeClass('scrivito_modal_medium');
32371
- scrivito.transition(view, function() {
32372
- view.addClass('scrivito_modal_' + modal_size);
32373
- }).then(function() {
32374
- scrivito.dialog.adjust(view);
32375
- });
32376
- } else {
32377
- scrivito.dialog.adjust(view);
32672
+ view.addClass('scrivito_modal_' + modal_size);
32378
32673
  }
32674
+ scrivito.dialog.adjust(view);
32379
32675
  });
32380
32676
 
32381
32677
  var cancel = function() {
32382
32678
  indicator.destroy();
32383
- scrivito.dialog.close(view);
32679
+ scrivito.dialog.close_without_transition(view);
32384
32680
  deferred.resolve();
32385
32681
  return false;
32386
32682
  };
32387
32683
 
32388
32684
  view.find('.scrivito_cancel').on('click', cancel);
32389
- scrivito.dialog.open_and_adjust(view);
32685
+ scrivito.dialog.open_and_adjust_without_transition(view);
32390
32686
  return scrivito.with_dialog_behaviour(view, deferred, {escape: cancel});
32391
32687
  }
32392
32688
  }
@@ -32396,14 +32692,17 @@ var scrivito = {};
32396
32692
  _.extend(scrivito, {
32397
32693
  menus: {
32398
32694
  open: function(dom_element, commands, options) {
32399
- scrivito.close_all_menus();
32400
-
32401
32695
  var menu = $(scrivito.template.render('menu', _.extend(options || {}, {
32402
32696
  menu_items: _.map(scrivito.pattern_sort(commands, scrivito.menu_order), function(command) {
32403
32697
  return scrivito.menu_item.create_instance(command);
32404
32698
  })
32405
32699
  })));
32406
32700
 
32701
+ menu.find('.scrivito_menu_box_overlay').on('click', function() {
32702
+ menu.data('scrivito-menu-close')();
32703
+ return false;
32704
+ });
32705
+
32407
32706
  dom_element.data('scrivito-menu-dom', menu);
32408
32707
 
32409
32708
  menu.data('scrivito-menu-close', function() {
@@ -32506,15 +32805,6 @@ var scrivito = {};
32506
32805
  }
32507
32806
  });
32508
32807
  }());
32509
- (function() {
32510
- _.extend(scrivito, {
32511
- close_all_menus: function() {
32512
- _.each($('.scrivito_editing_marker_menu'), function(menu) {
32513
- $(menu).data('scrivito-menu-close')();
32514
- });
32515
- }
32516
- });
32517
- }());
32518
32808
  (function() {
32519
32809
  var callbacks = [];
32520
32810
 
@@ -32626,6 +32916,38 @@ var scrivito = {};
32626
32916
  }
32627
32917
  };
32628
32918
  }());
32919
+ (function() {
32920
+ _.extend(scrivito, {
32921
+ option_marker: {
32922
+ init: function() {
32923
+ scrivito.on('content', function(content) {
32924
+ if (scrivito.editing_context.is_editing_mode()) {
32925
+ _.each(scrivito.widget_element.all($(content)), function(widget_element) {
32926
+ if (!widget_element.has_widgetlist()) {
32927
+ scrivito.option_marker.create(widget_element, 'top');
32928
+ scrivito.option_marker.create(widget_element, 'bottom');
32929
+ }
32930
+ });
32931
+ }
32932
+ });
32933
+ },
32934
+
32935
+ create: function(widget_element, position) {
32936
+ var marker = $(scrivito.template.render('option_marker', {position: position}));
32937
+ marker.appendTo(widget_element.dom_element());
32938
+ marker.on('click', function() {
32939
+ var widgetlist_field_element = widget_element.widget_field();
32940
+ if (widgetlist_field_element.can_choose_widget_class()) {
32941
+ scrivito.choose_and_create_widget_command(widget_element, position).execute();
32942
+ } else {
32943
+ scrivito.create_widget_command(widget_element, position).execute();
32944
+ }
32945
+ return false;
32946
+ });
32947
+ }
32948
+ }
32949
+ });
32950
+ }());
32629
32951
  (function() {
32630
32952
  _.extend(scrivito, {
32631
32953
  resource_dialog: {
@@ -32633,20 +32955,21 @@ var scrivito = {};
32633
32955
  if (config.obj) {
32634
32956
  var obj = scrivito.obj.create_instance(config.obj);
32635
32957
  scrivito.gui.on('open', function() {
32636
- scrivito.resource_dialog.open(obj).then(function() {
32958
+ scrivito.resource_dialog.open(obj, config.return_to).then(function() {
32637
32959
  return scrivito.with_saving_overlay(scrivito.redirect_to(config.return_to));
32638
32960
  });
32639
32961
  });
32640
32962
  }
32641
32963
  },
32642
32964
 
32643
- open: function(obj) {
32965
+ open: function(obj, return_to) {
32644
32966
  var title = scrivito.t('resource_dialog.title', obj.obj_class_name());
32645
32967
  return scrivito.details_dialog.open(obj.details_src(), title, obj, [
32646
32968
  scrivito.revert_obj_command(obj, 'resource_dialog.commands.revert_obj'),
32647
32969
  scrivito.restore_obj_command(obj, 'resource_dialog.commands.restore_obj'),
32648
32970
  scrivito.mark_resolved_obj_command(obj, 'resource_dialog.commands.mark_resolved_obj'),
32649
- scrivito.delete_obj_command(obj, 'resource_dialog.commands.delete_obj')
32971
+ scrivito.delete_obj_command(obj, 'resource_dialog.commands.delete_obj',
32972
+ return_to || '/'+scrivito.application_document().page().id())
32650
32973
  ]);
32651
32974
  }
32652
32975
  }
@@ -32711,6 +33034,99 @@ var scrivito = {};
32711
33034
  return target;
32712
33035
  };
32713
33036
  }());
33037
+ (function() {
33038
+ _.extend(scrivito, {
33039
+ iframe_dialog: {
33040
+ open: function(iframe, options) {
33041
+ iframe = $(iframe);
33042
+ options = options || {};
33043
+
33044
+ var iframe_container;
33045
+ if (!iframe.parent().is('body')) {
33046
+ iframe_container = iframe.closest('#scrivito_editing > div');
33047
+ }
33048
+
33049
+ var view = $(scrivito.template.render('iframe_dialog', {
33050
+ color: options.color,
33051
+ confirm: options.confirm || scrivito.t('confirm'),
33052
+ cancel: options.cancel || scrivito.t('cancel'),
33053
+ disable_confirm: options.confirm === false,
33054
+ disable_cancel: options.cancel === false
33055
+ }));
33056
+
33057
+ $('#scrivito_editing').append(view);
33058
+
33059
+ var dialog_body = view.find('.scrivito_modal_body');
33060
+ var when_closed = $.Deferred();
33061
+
33062
+ var confirm = function() {
33063
+ scrivito.dialog.close_without_transition(view);
33064
+ when_closed.resolve();
33065
+ return false;
33066
+ };
33067
+
33068
+ var cancel = function() {
33069
+ scrivito.dialog.close_without_transition(view);
33070
+ when_closed.reject();
33071
+ return false;
33072
+ };
33073
+
33074
+ view.find('.scrivito_confirm').on('click', confirm);
33075
+ view.find('.scrivito_cancel').on('click', cancel);
33076
+
33077
+ scrivito.with_dialog_behaviour(view, when_closed, {enter: confirm, escape: cancel});
33078
+ scrivito.dialog.open_and_adjust_without_transition(view);
33079
+
33080
+ scrivito.restore_styles_afterwards(when_closed, iframe);
33081
+ iframe.css('z-index', scrivito.iframe_dialog.z_index(view) + 1);
33082
+
33083
+ if (iframe_container) {
33084
+ scrivito.restore_styles_afterwards(when_closed, iframe_container);
33085
+ iframe_container.addClass('scrivito_dialog_mode');
33086
+ } else {
33087
+ iframe.attr('class', ''); // Remove device toggle classes.
33088
+ }
33089
+
33090
+ var adjust = function() {
33091
+ // Make sure to never manipulate the iFrame after the dialog has been closed.
33092
+ if (when_closed.state() !== 'pending') { return; }
33093
+ iframe.width(dialog_body.width());
33094
+ iframe.height(dialog_body.height());
33095
+ iframe.offset(dialog_body.offset());
33096
+ };
33097
+
33098
+ $(window).on('resize', adjust);
33099
+ adjust();
33100
+
33101
+ return {
33102
+ when_open: $.Deferred().resolve(dialog_body),
33103
+ when_closed: when_closed.promise()
33104
+ };
33105
+ },
33106
+
33107
+ // For test purpose only.
33108
+ z_index: function(view) {
33109
+ return parseInt(view.css('z-index'), 10);
33110
+ }
33111
+ }
33112
+ });
33113
+ }());
33114
+ (function() {
33115
+ _.extend(scrivito, {
33116
+ full_screen_panel: function(doc, promise) {
33117
+ var body = $(doc).find('body');
33118
+ var panel = $('<div class="scrivito_full_screen_panel"></div>');
33119
+
33120
+ body.append(panel);
33121
+ promise.always(function() { panel.detach(); });
33122
+
33123
+ scrivito.restore_styles_afterwards(promise, body);
33124
+ body.css('overflow', 'hidden');
33125
+
33126
+ return panel;
33127
+ }
33128
+ });
33129
+ }());
32714
33130
  (function() {
32715
33131
  _.extend(scrivito, {
32716
33132
  add_content_command: function(cms_element) {
@@ -32747,14 +33163,12 @@ var scrivito = {};
32747
33163
  var content = contents[0];
32748
33164
  if (content) {
32749
33165
  var widget_params = {
32750
- create: {
32751
- _obj_class: 'Scrivito::ContentWidget',
32752
- content: content
32753
- }
33166
+ _obj_class: 'Scrivito::ContentWidget',
33167
+ content: content
32754
33168
  };
32755
33169
 
32756
33170
  scrivito.with_saving_overlay(
32757
- widgetlist_field_element.add_widget(widget_params, widget_element)
33171
+ widgetlist_field_element.add_widget_via_create(widget_params, widget_element)
32758
33172
  );
32759
33173
  }
32760
33174
  });
@@ -32789,7 +33203,7 @@ var scrivito = {};
32789
33203
  }());
32790
33204
  (function() {
32791
33205
  _.extend(scrivito, {
32792
- choose_and_create_widget_command: function(cms_element) {
33206
+ choose_and_create_widget_command: function(cms_element, position) {
32793
33207
  var widgetlist_field_element, widget_element;
32794
33208
  if (cms_element.widget_field) {
32795
33209
  widget_element = cms_element;
@@ -32820,9 +33234,9 @@ var scrivito = {};
32820
33234
  var choose_obj_class = scrivito.choose_obj_class_dialog(
32821
33235
  widgetlist_field_element.fetch_widget_class_selection(), 'create_widget');
32822
33236
  return choose_obj_class.then(function(obj_class) {
33237
+ var widget_params = {_obj_class: obj_class};
32823
33238
  return scrivito.with_saving_overlay(
32824
- widgetlist_field_element.add_widget({create: {_obj_class: obj_class}}, widget_element)
32825
- );
33239
+ widgetlist_field_element.add_widget_via_create(widget_params, widget_element, position));
32826
33240
  });
32827
33241
  }
32828
33242
  });
@@ -32901,15 +33315,13 @@ var scrivito = {};
32901
33315
  }
32902
33316
  var widget = scrivito.widget_clipboard.widget();
32903
33317
  var workspace_id = scrivito.widget_clipboard.workspace_id();
32904
- var copy_params = {
32905
- copy: {
32906
- workspace_id: workspace_id,
32907
- obj_id: widget.obj().id(),
32908
- widget_id: widget.id()
32909
- }
33318
+ var widget_params = {
33319
+ workspace_id: workspace_id,
33320
+ obj_id: widget.obj().id(),
33321
+ widget_id: widget.id()
32910
33322
  };
32911
33323
  return scrivito.with_saving_overlay(
32912
- widgetlist_field_element.add_widget(copy_params, widget_element)
33324
+ widgetlist_field_element.add_widget_via_copy(widget_params, widget_element)
32913
33325
  );
32914
33326
  }
32915
33327
  });
@@ -32918,7 +33330,7 @@ var scrivito = {};
32918
33330
  }());
32919
33331
  (function() {
32920
33332
  _.extend(scrivito, {
32921
- create_widget_command: function(cms_element) {
33333
+ create_widget_command: function(cms_element, position) {
32922
33334
  var widgetlist_field_element, widget_element, description, obj_class;
32923
33335
  if (cms_element.widget_field) {
32924
33336
  widget_element = cms_element;
@@ -32943,10 +33355,9 @@ var scrivito = {};
32943
33355
  },
32944
33356
 
32945
33357
  execute: function() {
32946
- var widget_params = {create: {_obj_class: obj_class}};
33358
+ var params = {_obj_class: obj_class};
32947
33359
  return scrivito.with_saving_overlay(
32948
- widgetlist_field_element.add_widget(widget_params, widget_element)
32949
- );
33360
+ widgetlist_field_element.add_widget_via_create(params, widget_element, position));
32950
33361
  }
32951
33362
  });
32952
33363
  }
@@ -33003,7 +33414,7 @@ var scrivito = {};
33003
33414
  }());
33004
33415
  (function() {
33005
33416
  _.extend(scrivito, {
33006
- delete_obj_command: function(obj, translations_namespace) {
33417
+ delete_obj_command: function(obj, translations_namespace, redirect_target) {
33007
33418
  if (!translations_namespace) {
33008
33419
  translations_namespace = 'commands.delete_obj';
33009
33420
  }
@@ -33040,7 +33451,11 @@ var scrivito = {};
33040
33451
  scrivito.obj_clipboard.obj().id() === obj.id()) {
33041
33452
  scrivito.obj_clipboard.clear();
33042
33453
  }
33043
- return scrivito.redirect_to(redirect_to);
33454
+ var redirect_url = URI({
33455
+ path: scrivito.root_path() + (redirect_target || redirect_to)
33456
+ });
33457
+ redirect_url.normalizePath();
33458
+ return scrivito.redirect_to(redirect_url.path());
33044
33459
  }));
33045
33460
  });
33046
33461
  }
@@ -33723,16 +34138,16 @@ var scrivito = {};
33723
34138
  icon: '&#xf030;',
33724
34139
 
33725
34140
  execute: function() {
33726
- workspace.fetch_memberships().then(function(memberships) {
33727
- var title = scrivito.t('commands.workspace_settings.dialog.title', workspace.title());
33728
- scrivito.workspace_settings_dialog.open(title, memberships).then(function(memberships) {
34141
+ var title = scrivito.t('commands.workspace_settings.dialog.title', workspace.title());
34142
+ scrivito.workspace_settings_dialog.open(title, workspace.memberships()).then(
34143
+ function(memberships) {
33729
34144
  scrivito.with_saving_overlay(
33730
34145
  workspace.update({memberships: memberships}).then(function() {
33731
34146
  return scrivito.reload();
33732
34147
  })
33733
34148
  );
33734
- });
33735
- });
34149
+ }
34150
+ );
33736
34151
  }
33737
34152
  });
33738
34153
  }
@@ -33800,7 +34215,6 @@ var scrivito = {};
33800
34215
  if (!scrivito.editing_context.is_view_mode()) {
33801
34216
  scrivito.on('content', function(content) {
33802
34217
  _.each(scrivito.widget_element.all($(content)), function(widget_element) {
33803
- var widgetlist_field_element = widget_element.widget_field();
33804
34218
  widget_element.set_menu([
33805
34219
  scrivito.create_widget_command(widget_element),
33806
34220
  scrivito.choose_and_create_widget_command(widget_element),
@@ -34054,8 +34468,6 @@ var scrivito = {};
34054
34468
  var cms_document = scrivito.cms_document.from(ui.item);
34055
34469
  cms_document.dom_element().find('body').addClass('scrivito_widget_dragging_active');
34056
34470
 
34057
- scrivito.close_all_menus();
34058
-
34059
34471
  var widget_element = scrivito.cms_element.from_dom_element(ui.item);
34060
34472
  var widget_class_name = widget_element.widget().widget_class_name();
34061
34473
  _.each(widgetlist_field_elements, function(widgetlist_field_element) {
@@ -34193,6 +34605,23 @@ var scrivito = {};
34193
34605
  add_field_changes(changes._widget_pool[widget_id], widgetlist_field_element);
34194
34606
  };
34195
34607
  }());
34608
+ (function() {
34609
+ _.extend(scrivito, {
34610
+ no_turbolinks: {
34611
+ init: function() {
34612
+ scrivito.gui.on('document', function(cms_document) {
34613
+ if (cms_document.browser_window().Turbolinks) {
34614
+ scrivito.alert_dialog(
34615
+ 'You have Turbolinks enabled. ' +
34616
+ 'Scrivito does not yet support Turbolinks. ' +
34617
+ 'Please remove it from your assets.'
34618
+ );
34619
+ }
34620
+ });
34621
+ }
34622
+ }
34623
+ });
34624
+ }());
34196
34625
  (function() {
34197
34626
  _.extend(scrivito, {
34198
34627
  content_upload: {
@@ -34328,7 +34757,7 @@ var scrivito = {};
34328
34757
 
34329
34758
  var create_workspace = function() {
34330
34759
  var title = $('#scrivito_new_ws_name').val();
34331
- scrivito.dialog.close(view);
34760
+ scrivito.dialog.close_with_transition(view);
34332
34761
  scrivito.with_saving_overlay(scrivito.workspace.create(title)).then(function(workspace) {
34333
34762
  deferred.resolve(workspace.id());
34334
34763
  }, function() { deferred.reject(); });
@@ -34336,12 +34765,12 @@ var scrivito = {};
34336
34765
 
34337
34766
  var select_workspace = function() {
34338
34767
  var ws_id = $('select#scrivito_list_of_ws').val();
34339
- scrivito.dialog.close(view);
34768
+ scrivito.dialog.close_with_transition(view);
34340
34769
  deferred.resolve(ws_id);
34341
34770
  };
34342
34771
 
34343
34772
  var cancel_action = function() {
34344
- scrivito.dialog.close(view);
34773
+ scrivito.dialog.close_with_transition(view);
34345
34774
  deferred.reject();
34346
34775
  return false;
34347
34776
  };
@@ -34349,7 +34778,7 @@ var scrivito = {};
34349
34778
  view.find('.scrivito_confirm').on('click', confirm_action);
34350
34779
  view.find('.scrivito_cancel').on('click', cancel_action);
34351
34780
 
34352
- scrivito.dialog.open_and_center(view);
34781
+ scrivito.dialog.open_and_center_with_transition(view);
34353
34782
 
34354
34783
  if (can_select) {
34355
34784
  view.find('.scrivito_input_list_of_ws').click();
@@ -34393,14 +34822,14 @@ var scrivito = {};
34393
34822
  });
34394
34823
  deferred.resolve(sorted_children);
34395
34824
 
34396
- scrivito.dialog.close(view);
34825
+ scrivito.dialog.close_without_transition(view);
34397
34826
 
34398
34827
  return false;
34399
34828
  };
34400
34829
 
34401
34830
  var cancel_action = function(e) {
34402
34831
  deferred.reject();
34403
- scrivito.dialog.close(view);
34832
+ scrivito.dialog.close_without_transition(view);
34404
34833
 
34405
34834
  return false;
34406
34835
  };
@@ -34408,7 +34837,7 @@ var scrivito = {};
34408
34837
  view.find('.scrivito_confirm').on('click', confirm_action);
34409
34838
  view.find('.scrivito_cancel').on('click', cancel_action);
34410
34839
 
34411
- scrivito.dialog.open_and_adjust(view);
34840
+ scrivito.dialog.open_and_adjust_without_transition(view);
34412
34841
 
34413
34842
  return scrivito.with_dialog_behaviour(view, deferred, {
34414
34843
  enter: confirm_action,
@@ -34438,13 +34867,13 @@ var scrivito = {};
34438
34867
  new_memberships[user_id] = {role: 'owner'};
34439
34868
  });
34440
34869
  promise.resolve(new_memberships);
34441
- scrivito.dialog.close(view);
34870
+ scrivito.dialog.close_without_transition(view);
34442
34871
  return false;
34443
34872
  };
34444
34873
 
34445
34874
  var cancel = function() {
34446
34875
  promise.reject();
34447
- scrivito.dialog.close(view);
34876
+ scrivito.dialog.close_without_transition(view);
34448
34877
  return false;
34449
34878
  };
34450
34879
 
@@ -34478,7 +34907,7 @@ var scrivito = {};
34478
34907
  view.find('.scrivito_confirm').on('click', confirm);
34479
34908
  view.find('.scrivito_cancel').on('click', cancel);
34480
34909
 
34481
- scrivito.dialog.open_and_adjust(view);
34910
+ scrivito.dialog.open_and_adjust_without_transition(view);
34482
34911
 
34483
34912
  view.on('keyup', function(e) {
34484
34913
  if ((e.keyCode === 13 || e.keyCode === 27) &&
@@ -34650,6 +35079,9 @@ var scrivito = {};
34650
35079
 
34651
35080
 
34652
35081
 
35082
+
35083
+
35084
+
34653
35085
 
34654
35086
 
34655
35087
 
@@ -34677,6 +35109,7 @@ var scrivito = {};
34677
35109
 
34678
35110
 
34679
35111
 
35112
+
34680
35113
  //
34681
35114
 
34682
35115
 
@@ -34688,28 +35121,25 @@ var scrivito = {};
34688
35121
  // Fallback behavior in case that application window renders a page with no SDK, e.g. an error
34689
35122
  // or a static page.
34690
35123
  iframe.on('load', function() {
34691
- var has_config = !!scrivito.application_document().dom_element()
34692
- .find('[data-scrivito-private-config]').length;
34693
- var has_sdk = !!scrivito.application_window.browser_window().scrivito;
35124
+ var application_document = scrivito.application_document();
35125
+ var browser_window = scrivito.application_window.browser_window();
35126
+
35127
+ var has_config = !!application_document.page_config();
35128
+ var has_sdk = !!browser_window.scrivito;
34694
35129
 
34695
35130
  // The application window is completely missing the SDK and the config.
34696
35131
  if (!has_config && !has_sdk) {
34697
35132
  // Install jQuery in order to allow correct application document bootstrapping.
34698
- var browser_window = scrivito.application_window.browser_window();
34699
35133
  if (!browser_window.jQuery) { browser_window.jQuery = jQuery; }
34700
35134
  if (!browser_window.$) { browser_window.$ = $; }
34701
35135
 
34702
35136
  // Bootstrap the application document.
34703
- var application_document = scrivito.application_document();
34704
35137
  application_document.install_public_api();
34705
- if (!scrivito.is_inited()) {
34706
- // Start the UI if it is the first open, which responds with an error.
34707
- // Use the fallback config with no page context.
34708
- scrivito.init(scrivito.dom_config.read($('body')));
34709
- scrivito.gui.start();
34710
- }
34711
35138
  application_document.connect();
34712
35139
  }
34713
35140
  });
35141
+
35142
+ scrivito.init(scrivito.ui_config());
35143
+ scrivito.gui.start();
34714
35144
  });
34715
35145
  }());