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); |