Diff: STRATO-apps/wordpress_03/app/wp-includes/js/customize-models.js

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + /**
2 + * @output wp-includes/js/customize-models.js
3 + */
4 +
5 + /* global _wpCustomizeHeader */
6 + (function( $, wp ) {
7 + var api = wp.customize;
8 + /** @namespace wp.customize.HeaderTool */
9 + api.HeaderTool = {};
10 +
11 +
12 + /**
13 + * wp.customize.HeaderTool.ImageModel
14 + *
15 + * A header image. This is where saves via the Customizer API are
16 + * abstracted away, plus our own Ajax calls to add images to and remove
17 + * images from the user's recently uploaded images setting on the server.
18 + * These calls are made regardless of whether the user actually saves new
19 + * Customizer settings.
20 + *
21 + * @memberOf wp.customize.HeaderTool
22 + * @alias wp.customize.HeaderTool.ImageModel
23 + *
24 + * @constructor
25 + * @augments Backbone.Model
26 + */
27 + api.HeaderTool.ImageModel = Backbone.Model.extend(/** @lends wp.customize.HeaderTool.ImageModel.prototype */{
28 + defaults: function() {
29 + return {
30 + header: {
31 + attachment_id: 0,
32 + url: '',
33 + timestamp: _.now(),
34 + thumbnail_url: ''
35 + },
36 + choice: '',
37 + selected: false,
38 + random: false
39 + };
40 + },
41 +
42 + initialize: function() {
43 + this.on('hide', this.hide, this);
44 + },
45 +
46 + hide: function() {
47 + this.set('choice', '');
48 + api('header_image').set('remove-header');
49 + api('header_image_data').set('remove-header');
50 + },
51 +
52 + destroy: function() {
53 + var data = this.get('header'),
54 + curr = api.HeaderTool.currentHeader.get('header').attachment_id;
55 +
56 + // If the image we're removing is also the current header,
57 + // unset the latter.
58 + if (curr && data.attachment_id === curr) {
59 + api.HeaderTool.currentHeader.trigger('hide');
60 + }
61 +
62 + wp.ajax.post( 'custom-header-remove', {
63 + nonce: _wpCustomizeHeader.nonces.remove,
64 + wp_customize: 'on',
65 + theme: api.settings.theme.stylesheet,
66 + attachment_id: data.attachment_id
67 + });
68 +
69 + this.trigger('destroy', this, this.collection);
70 + },
71 +
72 + save: function() {
73 + if (this.get('random')) {
74 + api('header_image').set(this.get('header').random);
75 + api('header_image_data').set(this.get('header').random);
76 + } else {
77 + if (this.get('header').defaultName) {
78 + api('header_image').set(this.get('header').url);
79 + api('header_image_data').set(this.get('header').defaultName);
80 + } else {
81 + api('header_image').set(this.get('header').url);
82 + api('header_image_data').set(this.get('header'));
83 + }
84 + }
85 +
86 + api.HeaderTool.combinedList.trigger('control:setImage', this);
87 + },
88 +
89 + importImage: function() {
90 + var data = this.get('header');
91 + if (data.attachment_id === undefined) {
92 + return;
93 + }
94 +
95 + wp.ajax.post( 'custom-header-add', {
96 + nonce: _wpCustomizeHeader.nonces.add,
97 + wp_customize: 'on',
98 + theme: api.settings.theme.stylesheet,
99 + attachment_id: data.attachment_id
100 + } );
101 + },
102 +
103 + shouldBeCropped: function() {
104 + if (this.get('themeFlexWidth') === true &&
105 + this.get('themeFlexHeight') === true) {
106 + return false;
107 + }
108 +
109 + if (this.get('themeFlexWidth') === true &&
110 + this.get('themeHeight') === this.get('imageHeight')) {
111 + return false;
112 + }
113 +
114 + if (this.get('themeFlexHeight') === true &&
115 + this.get('themeWidth') === this.get('imageWidth')) {
116 + return false;
117 + }
118 +
119 + if (this.get('themeWidth') === this.get('imageWidth') &&
120 + this.get('themeHeight') === this.get('imageHeight')) {
121 + return false;
122 + }
123 +
124 + if (this.get('imageWidth') <= this.get('themeWidth')) {
125 + return false;
126 + }
127 +
128 + return true;
129 + }
130 + });
131 +
132 +
133 + /**
134 + * wp.customize.HeaderTool.ChoiceList
135 + *
136 + * @memberOf wp.customize.HeaderTool
137 + * @alias wp.customize.HeaderTool.ChoiceList
138 + *
139 + * @constructor
140 + * @augments Backbone.Collection
141 + */
142 + api.HeaderTool.ChoiceList = Backbone.Collection.extend({
143 + model: api.HeaderTool.ImageModel,
144 +
145 + // Ordered from most recently used to least.
146 + comparator: function(model) {
147 + return -model.get('header').timestamp;
148 + },
149 +
150 + initialize: function() {
151 + var current = api.HeaderTool.currentHeader.get('choice').replace(/^https?:\/\//, ''),
152 + isRandom = this.isRandomChoice(api.get().header_image);
153 +
154 + // Overridable by an extending class.
155 + if (!this.type) {
156 + this.type = 'uploaded';
157 + }
158 +
159 + // Overridable by an extending class.
160 + if (typeof this.data === 'undefined') {
161 + this.data = _wpCustomizeHeader.uploads;
162 + }
163 +
164 + if (isRandom) {
165 + // So that when adding data we don't hide regular images.
166 + current = api.get().header_image;
167 + }
168 +
169 + this.on('control:setImage', this.setImage, this);
170 + this.on('control:removeImage', this.removeImage, this);
171 + this.on('add', this.maybeRemoveOldCrop, this);
172 + this.on('add', this.maybeAddRandomChoice, this);
173 +
174 + _.each(this.data, function(elt, index) {
175 + if (!elt.attachment_id) {
176 + elt.defaultName = index;
177 + }
178 +
179 + if (typeof elt.timestamp === 'undefined') {
180 + elt.timestamp = 0;
181 + }
182 +
183 + this.add({
184 + header: elt,
185 + choice: elt.url.split('/').pop(),
186 + selected: current === elt.url.replace(/^https?:\/\//, '')
187 + }, { silent: true });
188 + }, this);
189 +
190 + if (this.size() > 0) {
191 + this.addRandomChoice(current);
192 + }
193 + },
194 +
195 + maybeRemoveOldCrop: function( model ) {
196 + var newID = model.get( 'header' ).attachment_id || false,
197 + oldCrop;
198 +
199 + // Bail early if we don't have a new attachment ID.
200 + if ( ! newID ) {
201 + return;
202 + }
203 +
204 + oldCrop = this.find( function( item ) {
205 + return ( item.cid !== model.cid && item.get( 'header' ).attachment_id === newID );
206 + } );
207 +
208 + // If we found an old crop, remove it from the collection.
209 + if ( oldCrop ) {
210 + this.remove( oldCrop );
211 + }
212 + },
213 +
214 + maybeAddRandomChoice: function() {
215 + if (this.size() === 1) {
216 + this.addRandomChoice();
217 + }
218 + },
219 +
220 + addRandomChoice: function(initialChoice) {
221 + var isRandomSameType = RegExp(this.type).test(initialChoice),
222 + randomChoice = 'random-' + this.type + '-image';
223 +
224 + this.add({
225 + header: {
226 + timestamp: 0,
227 + random: randomChoice,
228 + width: 245,
229 + height: 41
230 + },
231 + choice: randomChoice,
232 + random: true,
233 + selected: isRandomSameType
234 + });
235 + },
236 +
237 + isRandomChoice: function(choice) {
238 + return (/^random-(uploaded|default)-image$/).test(choice);
239 + },
240 +
241 + shouldHideTitle: function() {
242 + return this.size() < 2;
243 + },
244 +
245 + setImage: function(model) {
246 + this.each(function(m) {
247 + m.set('selected', false);
248 + });
249 +
250 + if (model) {
251 + model.set('selected', true);
252 + }
253 + },
254 +
255 + removeImage: function() {
256 + this.each(function(m) {
257 + m.set('selected', false);
258 + });
259 + }
260 + });
261 +
262 +
263 + /**
264 + * wp.customize.HeaderTool.DefaultsList
265 + *
266 + * @memberOf wp.customize.HeaderTool
267 + * @alias wp.customize.HeaderTool.DefaultsList
268 + *
269 + * @constructor
270 + * @augments wp.customize.HeaderTool.ChoiceList
271 + * @augments Backbone.Collection
272 + */
273 + api.HeaderTool.DefaultsList = api.HeaderTool.ChoiceList.extend({
274 + initialize: function() {
275 + this.type = 'default';
276 + this.data = _wpCustomizeHeader.defaults;
277 + api.HeaderTool.ChoiceList.prototype.initialize.apply(this);
278 + }
279 + });
280 +
281 + })( jQuery, window.wp );
282 +