annotate core/modules/quickedit/js/views/FieldDecorationView.js @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
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 ($, Backbone, Drupal) {
Chris@0 9 Drupal.quickedit.FieldDecorationView = Backbone.View.extend({
Chris@0 10 _widthAttributeIsEmpty: null,
Chris@0 11
Chris@0 12 events: {
Chris@0 13 'mouseenter.quickedit': 'onMouseEnter',
Chris@0 14 'mouseleave.quickedit': 'onMouseLeave',
Chris@0 15 click: 'onClick',
Chris@0 16 'tabIn.quickedit': 'onMouseEnter',
Chris@0 17 'tabOut.quickedit': 'onMouseLeave'
Chris@0 18 },
Chris@0 19
Chris@0 20 initialize: function initialize(options) {
Chris@0 21 this.editorView = options.editorView;
Chris@0 22
Chris@0 23 this.listenTo(this.model, 'change:state', this.stateChange);
Chris@0 24 this.listenTo(this.model, 'change:isChanged change:inTempStore', this.renderChanged);
Chris@0 25 },
Chris@0 26 remove: function remove() {
Chris@0 27 this.setElement();
Chris@0 28 Backbone.View.prototype.remove.call(this);
Chris@0 29 },
Chris@0 30 stateChange: function stateChange(model, state) {
Chris@0 31 var from = model.previous('state');
Chris@0 32 var to = state;
Chris@0 33 switch (to) {
Chris@0 34 case 'inactive':
Chris@0 35 this.undecorate();
Chris@0 36 break;
Chris@0 37
Chris@0 38 case 'candidate':
Chris@0 39 this.decorate();
Chris@0 40 if (from !== 'inactive') {
Chris@0 41 this.stopHighlight();
Chris@0 42 if (from !== 'highlighted') {
Chris@0 43 this.model.set('isChanged', false);
Chris@0 44 this.stopEdit();
Chris@0 45 }
Chris@0 46 }
Chris@0 47 this._unpad();
Chris@0 48 break;
Chris@0 49
Chris@0 50 case 'highlighted':
Chris@0 51 this.startHighlight();
Chris@0 52 break;
Chris@0 53
Chris@0 54 case 'activating':
Chris@0 55 this.prepareEdit();
Chris@0 56 break;
Chris@0 57
Chris@0 58 case 'active':
Chris@0 59 if (from !== 'activating') {
Chris@0 60 this.prepareEdit();
Chris@0 61 }
Chris@0 62 if (this.editorView.getQuickEditUISettings().padding) {
Chris@0 63 this._pad();
Chris@0 64 }
Chris@0 65 break;
Chris@0 66
Chris@0 67 case 'changed':
Chris@0 68 this.model.set('isChanged', true);
Chris@0 69 break;
Chris@0 70
Chris@0 71 case 'saving':
Chris@0 72 break;
Chris@0 73
Chris@0 74 case 'saved':
Chris@0 75 break;
Chris@0 76
Chris@0 77 case 'invalid':
Chris@0 78 break;
Chris@0 79 }
Chris@0 80 },
Chris@0 81 renderChanged: function renderChanged() {
Chris@0 82 this.$el.toggleClass('quickedit-changed', this.model.get('isChanged') || this.model.get('inTempStore'));
Chris@0 83 },
Chris@0 84 onMouseEnter: function onMouseEnter(event) {
Chris@0 85 var that = this;
Chris@0 86 that.model.set('state', 'highlighted');
Chris@0 87 event.stopPropagation();
Chris@0 88 },
Chris@0 89 onMouseLeave: function onMouseLeave(event) {
Chris@0 90 var that = this;
Chris@0 91 that.model.set('state', 'candidate', { reason: 'mouseleave' });
Chris@0 92 event.stopPropagation();
Chris@0 93 },
Chris@0 94 onClick: function onClick(event) {
Chris@0 95 this.model.set('state', 'activating');
Chris@0 96 event.preventDefault();
Chris@0 97 event.stopPropagation();
Chris@0 98 },
Chris@0 99 decorate: function decorate() {
Chris@0 100 this.$el.addClass('quickedit-candidate quickedit-editable');
Chris@0 101 },
Chris@0 102 undecorate: function undecorate() {
Chris@0 103 this.$el.removeClass('quickedit-candidate quickedit-editable quickedit-highlighted quickedit-editing');
Chris@0 104 },
Chris@0 105 startHighlight: function startHighlight() {
Chris@0 106 var that = this;
Chris@0 107
Chris@0 108 that.$el.addClass('quickedit-highlighted');
Chris@0 109 },
Chris@0 110 stopHighlight: function stopHighlight() {
Chris@0 111 this.$el.removeClass('quickedit-highlighted');
Chris@0 112 },
Chris@0 113 prepareEdit: function prepareEdit() {
Chris@0 114 this.$el.addClass('quickedit-editing');
Chris@0 115
Chris@0 116 if (this.editorView.getQuickEditUISettings().popup) {
Chris@0 117 this.$el.addClass('quickedit-editor-is-popup');
Chris@0 118 }
Chris@0 119 },
Chris@0 120 stopEdit: function stopEdit() {
Chris@0 121 this.$el.removeClass('quickedit-highlighted quickedit-editing');
Chris@0 122
Chris@0 123 if (this.editorView.getQuickEditUISettings().popup) {
Chris@0 124 this.$el.removeClass('quickedit-editor-is-popup');
Chris@0 125 }
Chris@0 126
Chris@0 127 $('.quickedit-candidate').addClass('quickedit-editable');
Chris@0 128 },
Chris@0 129 _pad: function _pad() {
Chris@0 130 if (this.$el.data('quickedit-padded')) {
Chris@0 131 return;
Chris@0 132 }
Chris@0 133 var self = this;
Chris@0 134
Chris@0 135 if (this.$el[0].style.width === '') {
Chris@0 136 this._widthAttributeIsEmpty = true;
Chris@0 137 this.$el.addClass('quickedit-animate-disable-width').css('width', this.$el.width());
Chris@0 138 }
Chris@0 139
Chris@0 140 var posProp = this._getPositionProperties(this.$el);
Chris@0 141 setTimeout(function () {
Chris@0 142 self.$el.removeClass('quickedit-animate-disable-width');
Chris@0 143
Chris@0 144 self.$el.css({
Chris@0 145 position: 'relative',
Chris@0 146 top: posProp.top - 5 + 'px',
Chris@0 147 left: posProp.left - 5 + 'px',
Chris@0 148 'padding-top': posProp['padding-top'] + 5 + 'px',
Chris@0 149 'padding-left': posProp['padding-left'] + 5 + 'px',
Chris@0 150 'padding-right': posProp['padding-right'] + 5 + 'px',
Chris@0 151 'padding-bottom': posProp['padding-bottom'] + 5 + 'px',
Chris@0 152 'margin-bottom': posProp['margin-bottom'] - 10 + 'px'
Chris@0 153 }).data('quickedit-padded', true);
Chris@0 154 }, 0);
Chris@0 155 },
Chris@0 156 _unpad: function _unpad() {
Chris@0 157 if (!this.$el.data('quickedit-padded')) {
Chris@0 158 return;
Chris@0 159 }
Chris@0 160 var self = this;
Chris@0 161
Chris@0 162 if (this._widthAttributeIsEmpty) {
Chris@0 163 this.$el.addClass('quickedit-animate-disable-width').css('width', '');
Chris@0 164 }
Chris@0 165
Chris@0 166 var posProp = this._getPositionProperties(this.$el);
Chris@0 167 setTimeout(function () {
Chris@0 168 self.$el.removeClass('quickedit-animate-disable-width');
Chris@0 169
Chris@0 170 self.$el.css({
Chris@0 171 position: 'relative',
Chris@0 172 top: posProp.top + 5 + 'px',
Chris@0 173 left: posProp.left + 5 + 'px',
Chris@0 174 'padding-top': posProp['padding-top'] - 5 + 'px',
Chris@0 175 'padding-left': posProp['padding-left'] - 5 + 'px',
Chris@0 176 'padding-right': posProp['padding-right'] - 5 + 'px',
Chris@0 177 'padding-bottom': posProp['padding-bottom'] - 5 + 'px',
Chris@0 178 'margin-bottom': posProp['margin-bottom'] + 10 + 'px'
Chris@0 179 });
Chris@0 180 }, 0);
Chris@0 181
Chris@0 182 this.$el.removeData('quickedit-padded');
Chris@0 183 },
Chris@0 184 _getPositionProperties: function _getPositionProperties($e) {
Chris@0 185 var p = void 0;
Chris@0 186 var r = {};
Chris@0 187 var props = ['top', 'left', 'bottom', 'right', 'padding-top', 'padding-left', 'padding-right', 'padding-bottom', 'margin-bottom'];
Chris@0 188
Chris@0 189 var propCount = props.length;
Chris@0 190 for (var i = 0; i < propCount; i++) {
Chris@0 191 p = props[i];
Chris@0 192 r[p] = parseInt(this._replaceBlankPosition($e.css(p)), 10);
Chris@0 193 }
Chris@0 194 return r;
Chris@0 195 },
Chris@0 196 _replaceBlankPosition: function _replaceBlankPosition(pos) {
Chris@0 197 if (pos === 'auto' || !pos) {
Chris@0 198 pos = '0px';
Chris@0 199 }
Chris@0 200 return pos;
Chris@0 201 }
Chris@0 202 });
Chris@0 203 })(jQuery, Backbone, Drupal);