EditorView.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /**
  2. * DO NOT EDIT THIS FILE.
  3. * See the following change record for more information,
  4. * https://www.drupal.org/node/2815083
  5. * @preserve
  6. **/
  7. (function ($, Backbone, Drupal) {
  8. Drupal.quickedit.EditorView = Backbone.View.extend({
  9. initialize: function initialize(options) {
  10. this.fieldModel = options.fieldModel;
  11. this.listenTo(this.fieldModel, 'change:state', this.stateChange);
  12. },
  13. remove: function remove() {
  14. this.setElement();
  15. Backbone.View.prototype.remove.call(this);
  16. },
  17. getEditedElement: function getEditedElement() {
  18. return this.$el;
  19. },
  20. getQuickEditUISettings: function getQuickEditUISettings() {
  21. return {
  22. padding: false,
  23. unifiedToolbar: false,
  24. fullWidthToolbar: false,
  25. popup: false
  26. };
  27. },
  28. stateChange: function stateChange(fieldModel, state) {
  29. var from = fieldModel.previous('state');
  30. var to = state;
  31. switch (to) {
  32. case 'inactive':
  33. break;
  34. case 'candidate':
  35. if (from === 'invalid') {
  36. this.removeValidationErrors();
  37. }
  38. break;
  39. case 'highlighted':
  40. break;
  41. case 'activating':
  42. {
  43. var loadDependencies = function loadDependencies(callback) {
  44. callback();
  45. };
  46. loadDependencies(function () {
  47. fieldModel.set('state', 'active');
  48. });
  49. break;
  50. }
  51. case 'active':
  52. break;
  53. case 'changed':
  54. break;
  55. case 'saving':
  56. if (from === 'invalid') {
  57. this.removeValidationErrors();
  58. }
  59. this.save();
  60. break;
  61. case 'saved':
  62. break;
  63. case 'invalid':
  64. this.showValidationErrors();
  65. break;
  66. }
  67. },
  68. revert: function revert() {},
  69. save: function save() {
  70. var fieldModel = this.fieldModel;
  71. var editorModel = this.model;
  72. var backstageId = 'quickedit_backstage-' + this.fieldModel.id.replace(/[/[\]_\s]/g, '-');
  73. function fillAndSubmitForm(value) {
  74. var $form = $('#' + backstageId).find('form');
  75. $form.find(':input[type!="hidden"][type!="submit"]:not(select)').not('[name$="\\[summary\\]"]').val(value);
  76. $form.find('.quickedit-form-submit').trigger('click.quickedit');
  77. }
  78. var formOptions = {
  79. fieldID: this.fieldModel.get('fieldID'),
  80. $el: this.$el,
  81. nocssjs: true,
  82. other_view_modes: fieldModel.findOtherViewModes(),
  83. reset: !this.fieldModel.get('entity').get('inTempStore')
  84. };
  85. var self = this;
  86. Drupal.quickedit.util.form.load(formOptions, function (form, ajax) {
  87. var $backstage = $(Drupal.theme('quickeditBackstage', { id: backstageId })).appendTo('body');
  88. var $form = $(form).appendTo($backstage);
  89. $form.prop('novalidate', true);
  90. var $submit = $form.find('.quickedit-form-submit');
  91. self.formSaveAjax = Drupal.quickedit.util.form.ajaxifySaving(formOptions, $submit);
  92. function removeHiddenForm() {
  93. Drupal.quickedit.util.form.unajaxifySaving(self.formSaveAjax);
  94. delete self.formSaveAjax;
  95. $backstage.remove();
  96. }
  97. self.formSaveAjax.commands.quickeditFieldFormSaved = function (ajax, response, status) {
  98. removeHiddenForm();
  99. fieldModel.set('state', 'saved');
  100. fieldModel.set('htmlForOtherViewModes', response.other_view_modes);
  101. fieldModel.set('html', response.data);
  102. };
  103. self.formSaveAjax.commands.quickeditFieldFormValidationErrors = function (ajax, response, status) {
  104. removeHiddenForm();
  105. editorModel.set('validationErrors', response.data);
  106. fieldModel.set('state', 'invalid');
  107. };
  108. self.formSaveAjax.commands.quickeditFieldForm = function () {};
  109. fillAndSubmitForm(editorModel.get('currentValue'));
  110. });
  111. },
  112. showValidationErrors: function showValidationErrors() {
  113. var $errors = $('<div class="quickedit-validation-errors"></div>').append(this.model.get('validationErrors'));
  114. this.getEditedElement().addClass('quickedit-validation-error').after($errors);
  115. },
  116. removeValidationErrors: function removeValidationErrors() {
  117. this.getEditedElement().removeClass('quickedit-validation-error').next('.quickedit-validation-errors').remove();
  118. }
  119. });
  120. })(jQuery, Backbone, Drupal);