annotate core/modules/image/js/editors/image.js @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 /**
Chris@0 2 * DO NOT EDIT THIS FILE.
Chris@0 3 * See the following change record for more information,
Chris@0 4 * https://www.drupal.org/node/2815083
Chris@0 5 * @preserve
Chris@0 6 **/
Chris@0 7
Chris@0 8 (function ($, _, Drupal) {
Chris@0 9 Drupal.quickedit.editors.image = Drupal.quickedit.EditorView.extend({
Chris@0 10 initialize: function initialize(options) {
Chris@0 11 Drupal.quickedit.EditorView.prototype.initialize.call(this, options);
Chris@0 12
Chris@0 13 this.model.set('originalValue', this.$el.html().trim());
Chris@0 14
Chris@0 15 this.model.set('currentValue', function (index, value) {
Chris@0 16 var matches = $(this).attr('name').match(/(alt|title)]$/);
Chris@0 17 if (matches) {
Chris@0 18 var name = matches[1];
Chris@0 19 var $toolgroup = $('#' + options.fieldModel.toolbarView.getMainWysiwygToolgroupId());
Chris@0 20 var $input = $toolgroup.find('.quickedit-image-field-info input[name="' + name + '"]');
Chris@0 21 if ($input.length) {
Chris@0 22 return $input.val();
Chris@0 23 }
Chris@0 24 }
Chris@0 25 });
Chris@0 26 },
Chris@0 27 stateChange: function stateChange(fieldModel, state, options) {
Chris@0 28 var from = fieldModel.previous('state');
Chris@0 29 switch (state) {
Chris@0 30 case 'inactive':
Chris@0 31 break;
Chris@0 32
Chris@0 33 case 'candidate':
Chris@0 34 if (from !== 'inactive') {
Chris@0 35 this.$el.find('.quickedit-image-dropzone').remove();
Chris@0 36 this.$el.removeClass('quickedit-image-element');
Chris@0 37 }
Chris@0 38 if (from === 'invalid') {
Chris@0 39 this.removeValidationErrors();
Chris@0 40 }
Chris@0 41 break;
Chris@0 42
Chris@0 43 case 'highlighted':
Chris@0 44 break;
Chris@0 45
Chris@0 46 case 'activating':
Chris@0 47 _.defer(function () {
Chris@0 48 fieldModel.set('state', 'active');
Chris@0 49 });
Chris@0 50 break;
Chris@0 51
Chris@0 52 case 'active':
Chris@14 53 {
Chris@14 54 var self = this;
Chris@0 55
Chris@14 56 this.$el.addClass('quickedit-image-element');
Chris@0 57
Chris@14 58 var $dropzone = this.renderDropzone('upload', Drupal.t('Drop file here or click to upload'));
Chris@0 59
Chris@14 60 $dropzone.on('dragenter', function (e) {
Chris@14 61 $(this).addClass('hover');
Chris@14 62 });
Chris@14 63 $dropzone.on('dragleave', function (e) {
Chris@14 64 $(this).removeClass('hover');
Chris@14 65 });
Chris@0 66
Chris@14 67 $dropzone.on('drop', function (e) {
Chris@14 68 if (e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files.length) {
Chris@14 69 $(this).removeClass('hover');
Chris@14 70 self.uploadImage(e.originalEvent.dataTransfer.files[0]);
Chris@0 71 }
Chris@0 72 });
Chris@0 73
Chris@14 74 $dropzone.on('click', function (e) {
Chris@14 75 $('<input type="file">').trigger('click').on('change', function () {
Chris@14 76 if (this.files.length) {
Chris@14 77 self.uploadImage(this.files[0]);
Chris@14 78 }
Chris@14 79 });
Chris@14 80 });
Chris@0 81
Chris@14 82 $dropzone.on('dragover dragenter dragleave drop click', function (e) {
Chris@14 83 e.preventDefault();
Chris@14 84 e.stopPropagation();
Chris@14 85 });
Chris@14 86
Chris@14 87 this.renderToolbar(fieldModel);
Chris@14 88 break;
Chris@14 89 }
Chris@0 90
Chris@0 91 case 'changed':
Chris@0 92 break;
Chris@0 93
Chris@0 94 case 'saving':
Chris@0 95 if (from === 'invalid') {
Chris@0 96 this.removeValidationErrors();
Chris@0 97 }
Chris@0 98
Chris@0 99 this.save(options);
Chris@0 100 break;
Chris@0 101
Chris@0 102 case 'saved':
Chris@0 103 break;
Chris@0 104
Chris@0 105 case 'invalid':
Chris@0 106 this.showValidationErrors();
Chris@0 107 break;
Chris@0 108 }
Chris@0 109 },
Chris@0 110 uploadImage: function uploadImage(file) {
Chris@0 111 this.renderDropzone('upload loading', Drupal.t('Uploading <i>@file</i>…', { '@file': file.name }));
Chris@0 112
Chris@0 113 var fieldID = this.fieldModel.get('fieldID');
Chris@0 114 var url = Drupal.quickedit.util.buildUrl(fieldID, Drupal.url('quickedit/image/upload/!entity_type/!id/!field_name/!langcode/!view_mode'));
Chris@0 115
Chris@0 116 var data = new FormData();
Chris@0 117 data.append('files[image]', file);
Chris@0 118
Chris@0 119 var self = this;
Chris@0 120 this.ajax({
Chris@0 121 type: 'POST',
Chris@0 122 url: url,
Chris@0 123 data: data,
Chris@0 124 success: function success(response) {
Chris@0 125 var $el = $(self.fieldModel.get('el'));
Chris@0 126
Chris@0 127 self.fieldModel.set('state', 'changed');
Chris@0 128 self.fieldModel.get('entity').set('inTempStore', true);
Chris@0 129 self.removeValidationErrors();
Chris@0 130
Chris@0 131 var $content = $(response.html).closest('[data-quickedit-field-id]').children();
Chris@0 132 $el.empty().append($content);
Chris@0 133 }
Chris@0 134 });
Chris@0 135 },
Chris@0 136 ajax: function ajax(options) {
Chris@0 137 var defaultOptions = {
Chris@0 138 context: this,
Chris@0 139 dataType: 'json',
Chris@0 140 cache: false,
Chris@0 141 contentType: false,
Chris@0 142 processData: false,
Chris@0 143 error: function error() {
Chris@0 144 this.renderDropzone('error', Drupal.t('A server error has occurred.'));
Chris@0 145 }
Chris@0 146 };
Chris@0 147
Chris@0 148 var ajaxOptions = $.extend(defaultOptions, options);
Chris@0 149 var successCallback = ajaxOptions.success;
Chris@0 150
Chris@0 151 ajaxOptions.success = function (response) {
Chris@0 152 if (response.main_error) {
Chris@0 153 this.renderDropzone('error', response.main_error);
Chris@0 154 if (response.errors.length) {
Chris@0 155 this.model.set('validationErrors', response.errors);
Chris@0 156 }
Chris@0 157 this.showValidationErrors();
Chris@0 158 } else {
Chris@0 159 successCallback(response);
Chris@0 160 }
Chris@0 161 };
Chris@0 162
Chris@0 163 $.ajax(ajaxOptions);
Chris@0 164 },
Chris@0 165 renderToolbar: function renderToolbar(fieldModel) {
Chris@0 166 var $toolgroup = $('#' + fieldModel.toolbarView.getMainWysiwygToolgroupId());
Chris@0 167 var $toolbar = $toolgroup.find('.quickedit-image-field-info');
Chris@0 168 if ($toolbar.length === 0) {
Chris@0 169 var fieldID = fieldModel.get('fieldID');
Chris@0 170 var url = Drupal.quickedit.util.buildUrl(fieldID, Drupal.url('quickedit/image/info/!entity_type/!id/!field_name/!langcode/!view_mode'));
Chris@0 171 var self = this;
Chris@0 172 self.ajax({
Chris@0 173 type: 'GET',
Chris@0 174 url: url,
Chris@0 175 success: function success(response) {
Chris@0 176 $toolbar = $(Drupal.theme.quickeditImageToolbar(response));
Chris@0 177 $toolgroup.append($toolbar);
Chris@0 178 $toolbar.on('keyup paste', function () {
Chris@0 179 fieldModel.set('state', 'changed');
Chris@0 180 });
Chris@0 181
Chris@0 182 fieldModel.get('entity').toolbarView.position();
Chris@0 183 }
Chris@0 184 });
Chris@0 185 }
Chris@0 186 },
Chris@0 187 renderDropzone: function renderDropzone(state, text) {
Chris@0 188 var $dropzone = this.$el.find('.quickedit-image-dropzone');
Chris@0 189
Chris@0 190 if ($dropzone.length) {
Chris@0 191 $dropzone.removeClass('upload error hover loading').addClass('.quickedit-image-dropzone ' + state).children('.quickedit-image-text').html(text);
Chris@0 192 } else {
Chris@0 193 $dropzone = $(Drupal.theme('quickeditImageDropzone', {
Chris@0 194 state: state,
Chris@0 195 text: text
Chris@0 196 }));
Chris@0 197 this.$el.append($dropzone);
Chris@0 198 }
Chris@0 199
Chris@0 200 return $dropzone;
Chris@0 201 },
Chris@0 202 revert: function revert() {
Chris@0 203 this.$el.html(this.model.get('originalValue'));
Chris@0 204 },
Chris@0 205 getQuickEditUISettings: function getQuickEditUISettings() {
Chris@17 206 return {
Chris@17 207 padding: false,
Chris@17 208 unifiedToolbar: true,
Chris@17 209 fullWidthToolbar: true,
Chris@17 210 popup: false
Chris@17 211 };
Chris@0 212 },
Chris@0 213 showValidationErrors: function showValidationErrors() {
Chris@0 214 var errors = Drupal.theme('quickeditImageErrors', {
Chris@0 215 errors: this.model.get('validationErrors')
Chris@0 216 });
Chris@0 217 $('#' + this.fieldModel.toolbarView.getMainWysiwygToolgroupId()).append(errors);
Chris@0 218 this.getEditedElement().addClass('quickedit-validation-error');
Chris@0 219
Chris@0 220 this.fieldModel.get('entity').toolbarView.position();
Chris@0 221 },
Chris@0 222 removeValidationErrors: function removeValidationErrors() {
Chris@0 223 $('#' + this.fieldModel.toolbarView.getMainWysiwygToolgroupId()).find('.quickedit-image-errors').remove();
Chris@0 224 this.getEditedElement().removeClass('quickedit-validation-error');
Chris@0 225 }
Chris@0 226 });
Chris@0 227 })(jQuery, _, Drupal);