Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-admin/js/widgets
File: media-widgets.js
}
[500] Fix | Delete
if ( ! options.el ) {
[501] Fix | Delete
throw new Error( 'Missing options.el' );
[502] Fix | Delete
}
[503] Fix | Delete
if ( ! options.syncContainer ) {
[504] Fix | Delete
throw new Error( 'Missing options.syncContainer' );
[505] Fix | Delete
}
[506] Fix | Delete
[507] Fix | Delete
control.syncContainer = options.syncContainer;
[508] Fix | Delete
[509] Fix | Delete
control.$el.addClass( 'media-widget-control' );
[510] Fix | Delete
[511] Fix | Delete
// Allow methods to be passed in with control context preserved.
[512] Fix | Delete
_.bindAll( control, 'syncModelToInputs', 'render', 'updateSelectedAttachment', 'renderPreview' );
[513] Fix | Delete
[514] Fix | Delete
if ( ! control.id_base ) {
[515] Fix | Delete
_.find( component.controlConstructors, function( Constructor, idBase ) {
[516] Fix | Delete
if ( control instanceof Constructor ) {
[517] Fix | Delete
control.id_base = idBase;
[518] Fix | Delete
return true;
[519] Fix | Delete
}
[520] Fix | Delete
return false;
[521] Fix | Delete
});
[522] Fix | Delete
if ( ! control.id_base ) {
[523] Fix | Delete
throw new Error( 'Missing id_base.' );
[524] Fix | Delete
}
[525] Fix | Delete
}
[526] Fix | Delete
[527] Fix | Delete
// Track attributes needed to renderPreview in it's own model.
[528] Fix | Delete
control.previewTemplateProps = new Backbone.Model( control.mapModelToPreviewTemplateProps() );
[529] Fix | Delete
[530] Fix | Delete
// Re-render the preview when the attachment changes.
[531] Fix | Delete
control.selectedAttachment = new wp.media.model.Attachment();
[532] Fix | Delete
control.renderPreview = _.debounce( control.renderPreview );
[533] Fix | Delete
control.listenTo( control.previewTemplateProps, 'change', control.renderPreview );
[534] Fix | Delete
[535] Fix | Delete
// Make sure a copy of the selected attachment is always fetched.
[536] Fix | Delete
control.model.on( 'change:attachment_id', control.updateSelectedAttachment );
[537] Fix | Delete
control.model.on( 'change:url', control.updateSelectedAttachment );
[538] Fix | Delete
control.updateSelectedAttachment();
[539] Fix | Delete
[540] Fix | Delete
/*
[541] Fix | Delete
* Sync the widget instance model attributes onto the hidden inputs that widgets currently use to store the state.
[542] Fix | Delete
* In the future, when widgets are JS-driven, the underlying widget instance data should be exposed as a model
[543] Fix | Delete
* from the start, without having to sync with hidden fields. See <https://core.trac.wordpress.org/ticket/33507>.
[544] Fix | Delete
*/
[545] Fix | Delete
control.listenTo( control.model, 'change', control.syncModelToInputs );
[546] Fix | Delete
control.listenTo( control.model, 'change', control.syncModelToPreviewProps );
[547] Fix | Delete
control.listenTo( control.model, 'change', control.render );
[548] Fix | Delete
[549] Fix | Delete
// Update the title.
[550] Fix | Delete
control.$el.on( 'input change', '.title', function updateTitle() {
[551] Fix | Delete
control.model.set({
[552] Fix | Delete
title: $( this ).val().trim()
[553] Fix | Delete
});
[554] Fix | Delete
});
[555] Fix | Delete
[556] Fix | Delete
// Update link_url attribute.
[557] Fix | Delete
control.$el.on( 'input change', '.link', function updateLinkUrl() {
[558] Fix | Delete
var linkUrl = $( this ).val().trim(), linkType = 'custom';
[559] Fix | Delete
if ( control.selectedAttachment.get( 'linkUrl' ) === linkUrl || control.selectedAttachment.get( 'link' ) === linkUrl ) {
[560] Fix | Delete
linkType = 'post';
[561] Fix | Delete
} else if ( control.selectedAttachment.get( 'url' ) === linkUrl ) {
[562] Fix | Delete
linkType = 'file';
[563] Fix | Delete
}
[564] Fix | Delete
control.model.set( {
[565] Fix | Delete
link_url: linkUrl,
[566] Fix | Delete
link_type: linkType
[567] Fix | Delete
});
[568] Fix | Delete
[569] Fix | Delete
// Update display settings for the next time the user opens to select from the media library.
[570] Fix | Delete
control.displaySettings.set( {
[571] Fix | Delete
link: linkType,
[572] Fix | Delete
linkUrl: linkUrl
[573] Fix | Delete
});
[574] Fix | Delete
});
[575] Fix | Delete
[576] Fix | Delete
/*
[577] Fix | Delete
* Copy current display settings from the widget model to serve as basis
[578] Fix | Delete
* of customized display settings for the current media frame session.
[579] Fix | Delete
* Changes to display settings will be synced into this model, and
[580] Fix | Delete
* when a new selection is made, the settings from this will be synced
[581] Fix | Delete
* into that AttachmentDisplay's model to persist the setting changes.
[582] Fix | Delete
*/
[583] Fix | Delete
control.displaySettings = new Backbone.Model( _.pick(
[584] Fix | Delete
control.mapModelToMediaFrameProps(
[585] Fix | Delete
_.extend( control.model.defaults(), control.model.toJSON() )
[586] Fix | Delete
),
[587] Fix | Delete
_.keys( wp.media.view.settings.defaultProps )
[588] Fix | Delete
) );
[589] Fix | Delete
},
[590] Fix | Delete
[591] Fix | Delete
/**
[592] Fix | Delete
* Update the selected attachment if necessary.
[593] Fix | Delete
*
[594] Fix | Delete
* @return {void}
[595] Fix | Delete
*/
[596] Fix | Delete
updateSelectedAttachment: function updateSelectedAttachment() {
[597] Fix | Delete
var control = this, attachment;
[598] Fix | Delete
[599] Fix | Delete
if ( 0 === control.model.get( 'attachment_id' ) ) {
[600] Fix | Delete
control.selectedAttachment.clear();
[601] Fix | Delete
control.model.set( 'error', false );
[602] Fix | Delete
} else if ( control.model.get( 'attachment_id' ) !== control.selectedAttachment.get( 'id' ) ) {
[603] Fix | Delete
attachment = new wp.media.model.Attachment({
[604] Fix | Delete
id: control.model.get( 'attachment_id' )
[605] Fix | Delete
});
[606] Fix | Delete
attachment.fetch()
[607] Fix | Delete
.done( function done() {
[608] Fix | Delete
control.model.set( 'error', false );
[609] Fix | Delete
control.selectedAttachment.set( attachment.toJSON() );
[610] Fix | Delete
})
[611] Fix | Delete
.fail( function fail() {
[612] Fix | Delete
control.model.set( 'error', 'missing_attachment' );
[613] Fix | Delete
});
[614] Fix | Delete
}
[615] Fix | Delete
},
[616] Fix | Delete
[617] Fix | Delete
/**
[618] Fix | Delete
* Sync the model attributes to the hidden inputs, and update previewTemplateProps.
[619] Fix | Delete
*
[620] Fix | Delete
* @return {void}
[621] Fix | Delete
*/
[622] Fix | Delete
syncModelToPreviewProps: function syncModelToPreviewProps() {
[623] Fix | Delete
var control = this;
[624] Fix | Delete
control.previewTemplateProps.set( control.mapModelToPreviewTemplateProps() );
[625] Fix | Delete
},
[626] Fix | Delete
[627] Fix | Delete
/**
[628] Fix | Delete
* Sync the model attributes to the hidden inputs, and update previewTemplateProps.
[629] Fix | Delete
*
[630] Fix | Delete
* @return {void}
[631] Fix | Delete
*/
[632] Fix | Delete
syncModelToInputs: function syncModelToInputs() {
[633] Fix | Delete
var control = this;
[634] Fix | Delete
control.syncContainer.find( '.media-widget-instance-property' ).each( function() {
[635] Fix | Delete
var input = $( this ), value, propertyName;
[636] Fix | Delete
propertyName = input.data( 'property' );
[637] Fix | Delete
value = control.model.get( propertyName );
[638] Fix | Delete
if ( _.isUndefined( value ) ) {
[639] Fix | Delete
return;
[640] Fix | Delete
}
[641] Fix | Delete
[642] Fix | Delete
if ( 'array' === control.model.schema[ propertyName ].type && _.isArray( value ) ) {
[643] Fix | Delete
value = value.join( ',' );
[644] Fix | Delete
} else if ( 'boolean' === control.model.schema[ propertyName ].type ) {
[645] Fix | Delete
value = value ? '1' : ''; // Because in PHP, strval( true ) === '1' && strval( false ) === ''.
[646] Fix | Delete
} else {
[647] Fix | Delete
value = String( value );
[648] Fix | Delete
}
[649] Fix | Delete
[650] Fix | Delete
if ( input.val() !== value ) {
[651] Fix | Delete
input.val( value );
[652] Fix | Delete
input.trigger( 'change' );
[653] Fix | Delete
}
[654] Fix | Delete
});
[655] Fix | Delete
},
[656] Fix | Delete
[657] Fix | Delete
/**
[658] Fix | Delete
* Get template.
[659] Fix | Delete
*
[660] Fix | Delete
* @return {Function} Template.
[661] Fix | Delete
*/
[662] Fix | Delete
template: function template() {
[663] Fix | Delete
var control = this;
[664] Fix | Delete
if ( ! $( '#tmpl-widget-media-' + control.id_base + '-control' ).length ) {
[665] Fix | Delete
throw new Error( 'Missing widget control template for ' + control.id_base );
[666] Fix | Delete
}
[667] Fix | Delete
return wp.template( 'widget-media-' + control.id_base + '-control' );
[668] Fix | Delete
},
[669] Fix | Delete
[670] Fix | Delete
/**
[671] Fix | Delete
* Render template.
[672] Fix | Delete
*
[673] Fix | Delete
* @return {void}
[674] Fix | Delete
*/
[675] Fix | Delete
render: function render() {
[676] Fix | Delete
var control = this, titleInput;
[677] Fix | Delete
[678] Fix | Delete
if ( ! control.templateRendered ) {
[679] Fix | Delete
control.$el.html( control.template()( control.model.toJSON() ) );
[680] Fix | Delete
control.renderPreview(); // Hereafter it will re-render when control.selectedAttachment changes.
[681] Fix | Delete
control.templateRendered = true;
[682] Fix | Delete
}
[683] Fix | Delete
[684] Fix | Delete
titleInput = control.$el.find( '.title' );
[685] Fix | Delete
if ( ! titleInput.is( document.activeElement ) ) {
[686] Fix | Delete
titleInput.val( control.model.get( 'title' ) );
[687] Fix | Delete
}
[688] Fix | Delete
[689] Fix | Delete
control.$el.toggleClass( 'selected', control.isSelected() );
[690] Fix | Delete
},
[691] Fix | Delete
[692] Fix | Delete
/**
[693] Fix | Delete
* Render media preview.
[694] Fix | Delete
*
[695] Fix | Delete
* @abstract
[696] Fix | Delete
* @return {void}
[697] Fix | Delete
*/
[698] Fix | Delete
renderPreview: function renderPreview() {
[699] Fix | Delete
throw new Error( 'renderPreview must be implemented' );
[700] Fix | Delete
},
[701] Fix | Delete
[702] Fix | Delete
/**
[703] Fix | Delete
* Whether a media item is selected.
[704] Fix | Delete
*
[705] Fix | Delete
* @return {boolean} Whether selected and no error.
[706] Fix | Delete
*/
[707] Fix | Delete
isSelected: function isSelected() {
[708] Fix | Delete
var control = this;
[709] Fix | Delete
[710] Fix | Delete
if ( control.model.get( 'error' ) ) {
[711] Fix | Delete
return false;
[712] Fix | Delete
}
[713] Fix | Delete
[714] Fix | Delete
return Boolean( control.model.get( 'attachment_id' ) || control.model.get( 'url' ) );
[715] Fix | Delete
},
[716] Fix | Delete
[717] Fix | Delete
/**
[718] Fix | Delete
* Handle click on link to Media Library to open modal, such as the link that appears when in the missing attachment error notice.
[719] Fix | Delete
*
[720] Fix | Delete
* @param {jQuery.Event} event - Event.
[721] Fix | Delete
* @return {void}
[722] Fix | Delete
*/
[723] Fix | Delete
handleMediaLibraryLinkClick: function handleMediaLibraryLinkClick( event ) {
[724] Fix | Delete
var control = this;
[725] Fix | Delete
event.preventDefault();
[726] Fix | Delete
control.selectMedia();
[727] Fix | Delete
},
[728] Fix | Delete
[729] Fix | Delete
/**
[730] Fix | Delete
* Open the media select frame to chose an item.
[731] Fix | Delete
*
[732] Fix | Delete
* @return {void}
[733] Fix | Delete
*/
[734] Fix | Delete
selectMedia: function selectMedia() {
[735] Fix | Delete
var control = this, selection, mediaFrame, defaultSync, mediaFrameProps, selectionModels = [];
[736] Fix | Delete
[737] Fix | Delete
if ( control.isSelected() && 0 !== control.model.get( 'attachment_id' ) ) {
[738] Fix | Delete
selectionModels.push( control.selectedAttachment );
[739] Fix | Delete
}
[740] Fix | Delete
[741] Fix | Delete
selection = new wp.media.model.Selection( selectionModels, { multiple: false } );
[742] Fix | Delete
[743] Fix | Delete
mediaFrameProps = control.mapModelToMediaFrameProps( control.model.toJSON() );
[744] Fix | Delete
if ( mediaFrameProps.size ) {
[745] Fix | Delete
control.displaySettings.set( 'size', mediaFrameProps.size );
[746] Fix | Delete
}
[747] Fix | Delete
[748] Fix | Delete
mediaFrame = new component.MediaFrameSelect({
[749] Fix | Delete
title: control.l10n.add_media,
[750] Fix | Delete
frame: 'post',
[751] Fix | Delete
text: control.l10n.add_to_widget,
[752] Fix | Delete
selection: selection,
[753] Fix | Delete
mimeType: control.mime_type,
[754] Fix | Delete
selectedDisplaySettings: control.displaySettings,
[755] Fix | Delete
showDisplaySettings: control.showDisplaySettings,
[756] Fix | Delete
metadata: mediaFrameProps,
[757] Fix | Delete
state: control.isSelected() && 0 === control.model.get( 'attachment_id' ) ? 'embed' : 'insert',
[758] Fix | Delete
invalidEmbedTypeError: control.l10n.unsupported_file_type
[759] Fix | Delete
});
[760] Fix | Delete
wp.media.frame = mediaFrame; // See wp.media().
[761] Fix | Delete
[762] Fix | Delete
// Handle selection of a media item.
[763] Fix | Delete
mediaFrame.on( 'insert', function onInsert() {
[764] Fix | Delete
var attachment = {}, state = mediaFrame.state();
[765] Fix | Delete
[766] Fix | Delete
// Update cached attachment object to avoid having to re-fetch. This also triggers re-rendering of preview.
[767] Fix | Delete
if ( 'embed' === state.get( 'id' ) ) {
[768] Fix | Delete
_.extend( attachment, { id: 0 }, state.props.toJSON() );
[769] Fix | Delete
} else {
[770] Fix | Delete
_.extend( attachment, state.get( 'selection' ).first().toJSON() );
[771] Fix | Delete
}
[772] Fix | Delete
[773] Fix | Delete
control.selectedAttachment.set( attachment );
[774] Fix | Delete
control.model.set( 'error', false );
[775] Fix | Delete
[776] Fix | Delete
// Update widget instance.
[777] Fix | Delete
control.model.set( control.getModelPropsFromMediaFrame( mediaFrame ) );
[778] Fix | Delete
});
[779] Fix | Delete
[780] Fix | Delete
// Disable syncing of attachment changes back to server (except for deletions). See <https://core.trac.wordpress.org/ticket/40403>.
[781] Fix | Delete
defaultSync = wp.media.model.Attachment.prototype.sync;
[782] Fix | Delete
wp.media.model.Attachment.prototype.sync = function( method ) {
[783] Fix | Delete
if ( 'delete' === method ) {
[784] Fix | Delete
return defaultSync.apply( this, arguments );
[785] Fix | Delete
} else {
[786] Fix | Delete
return $.Deferred().rejectWith( this ).promise();
[787] Fix | Delete
}
[788] Fix | Delete
};
[789] Fix | Delete
mediaFrame.on( 'close', function onClose() {
[790] Fix | Delete
wp.media.model.Attachment.prototype.sync = defaultSync;
[791] Fix | Delete
});
[792] Fix | Delete
[793] Fix | Delete
mediaFrame.$el.addClass( 'media-widget' );
[794] Fix | Delete
mediaFrame.open();
[795] Fix | Delete
[796] Fix | Delete
// Clear the selected attachment when it is deleted in the media select frame.
[797] Fix | Delete
if ( selection ) {
[798] Fix | Delete
selection.on( 'destroy', function onDestroy( attachment ) {
[799] Fix | Delete
if ( control.model.get( 'attachment_id' ) === attachment.get( 'id' ) ) {
[800] Fix | Delete
control.model.set({
[801] Fix | Delete
attachment_id: 0,
[802] Fix | Delete
url: ''
[803] Fix | Delete
});
[804] Fix | Delete
}
[805] Fix | Delete
});
[806] Fix | Delete
}
[807] Fix | Delete
[808] Fix | Delete
/*
[809] Fix | Delete
* Make sure focus is set inside of modal so that hitting Esc will close
[810] Fix | Delete
* the modal and not inadvertently cause the widget to collapse in the customizer.
[811] Fix | Delete
*/
[812] Fix | Delete
mediaFrame.$el.find( '.media-frame-menu .media-menu-item.active' ).focus();
[813] Fix | Delete
},
[814] Fix | Delete
[815] Fix | Delete
/**
[816] Fix | Delete
* Get the instance props from the media selection frame.
[817] Fix | Delete
*
[818] Fix | Delete
* @param {wp.media.view.MediaFrame.Select} mediaFrame - Select frame.
[819] Fix | Delete
* @return {Object} Props.
[820] Fix | Delete
*/
[821] Fix | Delete
getModelPropsFromMediaFrame: function getModelPropsFromMediaFrame( mediaFrame ) {
[822] Fix | Delete
var control = this, state, mediaFrameProps, modelProps;
[823] Fix | Delete
[824] Fix | Delete
state = mediaFrame.state();
[825] Fix | Delete
if ( 'insert' === state.get( 'id' ) ) {
[826] Fix | Delete
mediaFrameProps = state.get( 'selection' ).first().toJSON();
[827] Fix | Delete
mediaFrameProps.postUrl = mediaFrameProps.link;
[828] Fix | Delete
[829] Fix | Delete
if ( control.showDisplaySettings ) {
[830] Fix | Delete
_.extend(
[831] Fix | Delete
mediaFrameProps,
[832] Fix | Delete
mediaFrame.content.get( '.attachments-browser' ).sidebar.get( 'display' ).model.toJSON()
[833] Fix | Delete
);
[834] Fix | Delete
}
[835] Fix | Delete
if ( mediaFrameProps.sizes && mediaFrameProps.size && mediaFrameProps.sizes[ mediaFrameProps.size ] ) {
[836] Fix | Delete
mediaFrameProps.url = mediaFrameProps.sizes[ mediaFrameProps.size ].url;
[837] Fix | Delete
}
[838] Fix | Delete
} else if ( 'embed' === state.get( 'id' ) ) {
[839] Fix | Delete
mediaFrameProps = _.extend(
[840] Fix | Delete
state.props.toJSON(),
[841] Fix | Delete
{ attachment_id: 0 }, // Because some media frames use `attachment_id` not `id`.
[842] Fix | Delete
control.model.getEmbedResetProps()
[843] Fix | Delete
);
[844] Fix | Delete
} else {
[845] Fix | Delete
throw new Error( 'Unexpected state: ' + state.get( 'id' ) );
[846] Fix | Delete
}
[847] Fix | Delete
[848] Fix | Delete
if ( mediaFrameProps.id ) {
[849] Fix | Delete
mediaFrameProps.attachment_id = mediaFrameProps.id;
[850] Fix | Delete
}
[851] Fix | Delete
[852] Fix | Delete
modelProps = control.mapMediaToModelProps( mediaFrameProps );
[853] Fix | Delete
[854] Fix | Delete
// Clear the extension prop so sources will be reset for video and audio media.
[855] Fix | Delete
_.each( wp.media.view.settings.embedExts, function( ext ) {
[856] Fix | Delete
if ( ext in control.model.schema && modelProps.url !== modelProps[ ext ] ) {
[857] Fix | Delete
modelProps[ ext ] = '';
[858] Fix | Delete
}
[859] Fix | Delete
});
[860] Fix | Delete
[861] Fix | Delete
return modelProps;
[862] Fix | Delete
},
[863] Fix | Delete
[864] Fix | Delete
/**
[865] Fix | Delete
* Map media frame props to model props.
[866] Fix | Delete
*
[867] Fix | Delete
* @param {Object} mediaFrameProps - Media frame props.
[868] Fix | Delete
* @return {Object} Model props.
[869] Fix | Delete
*/
[870] Fix | Delete
mapMediaToModelProps: function mapMediaToModelProps( mediaFrameProps ) {
[871] Fix | Delete
var control = this, mediaFramePropToModelPropMap = {}, modelProps = {}, extension;
[872] Fix | Delete
_.each( control.model.schema, function( fieldSchema, modelProp ) {
[873] Fix | Delete
[874] Fix | Delete
// Ignore widget title attribute.
[875] Fix | Delete
if ( 'title' === modelProp ) {
[876] Fix | Delete
return;
[877] Fix | Delete
}
[878] Fix | Delete
mediaFramePropToModelPropMap[ fieldSchema.media_prop || modelProp ] = modelProp;
[879] Fix | Delete
});
[880] Fix | Delete
[881] Fix | Delete
_.each( mediaFrameProps, function( value, mediaProp ) {
[882] Fix | Delete
var propName = mediaFramePropToModelPropMap[ mediaProp ] || mediaProp;
[883] Fix | Delete
if ( control.model.schema[ propName ] ) {
[884] Fix | Delete
modelProps[ propName ] = value;
[885] Fix | Delete
}
[886] Fix | Delete
});
[887] Fix | Delete
[888] Fix | Delete
if ( 'custom' === mediaFrameProps.size ) {
[889] Fix | Delete
modelProps.width = mediaFrameProps.customWidth;
[890] Fix | Delete
modelProps.height = mediaFrameProps.customHeight;
[891] Fix | Delete
}
[892] Fix | Delete
[893] Fix | Delete
if ( 'post' === mediaFrameProps.link ) {
[894] Fix | Delete
modelProps.link_url = mediaFrameProps.postUrl || mediaFrameProps.linkUrl;
[895] Fix | Delete
} else if ( 'file' === mediaFrameProps.link ) {
[896] Fix | Delete
modelProps.link_url = mediaFrameProps.url;
[897] Fix | Delete
}
[898] Fix | Delete
[899] Fix | Delete
// Because some media frames use `id` instead of `attachment_id`.
[900] Fix | Delete
if ( ! mediaFrameProps.attachment_id && mediaFrameProps.id ) {
[901] Fix | Delete
modelProps.attachment_id = mediaFrameProps.id;
[902] Fix | Delete
}
[903] Fix | Delete
[904] Fix | Delete
if ( mediaFrameProps.url ) {
[905] Fix | Delete
extension = mediaFrameProps.url.replace( /#.*$/, '' ).replace( /\?.*$/, '' ).split( '.' ).pop().toLowerCase();
[906] Fix | Delete
if ( extension in control.model.schema ) {
[907] Fix | Delete
modelProps[ extension ] = mediaFrameProps.url;
[908] Fix | Delete
}
[909] Fix | Delete
}
[910] Fix | Delete
[911] Fix | Delete
// Always omit the titles derived from mediaFrameProps.
[912] Fix | Delete
return _.omit( modelProps, 'title' );
[913] Fix | Delete
},
[914] Fix | Delete
[915] Fix | Delete
/**
[916] Fix | Delete
* Map model props to media frame props.
[917] Fix | Delete
*
[918] Fix | Delete
* @param {Object} modelProps - Model props.
[919] Fix | Delete
* @return {Object} Media frame props.
[920] Fix | Delete
*/
[921] Fix | Delete
mapModelToMediaFrameProps: function mapModelToMediaFrameProps( modelProps ) {
[922] Fix | Delete
var control = this, mediaFrameProps = {};
[923] Fix | Delete
[924] Fix | Delete
_.each( modelProps, function( value, modelProp ) {
[925] Fix | Delete
var fieldSchema = control.model.schema[ modelProp ] || {};
[926] Fix | Delete
mediaFrameProps[ fieldSchema.media_prop || modelProp ] = value;
[927] Fix | Delete
});
[928] Fix | Delete
[929] Fix | Delete
// Some media frames use attachment_id.
[930] Fix | Delete
mediaFrameProps.attachment_id = mediaFrameProps.id;
[931] Fix | Delete
[932] Fix | Delete
if ( 'custom' === mediaFrameProps.size ) {
[933] Fix | Delete
mediaFrameProps.customWidth = control.model.get( 'width' );
[934] Fix | Delete
mediaFrameProps.customHeight = control.model.get( 'height' );
[935] Fix | Delete
}
[936] Fix | Delete
[937] Fix | Delete
return mediaFrameProps;
[938] Fix | Delete
},
[939] Fix | Delete
[940] Fix | Delete
/**
[941] Fix | Delete
* Map model props to previewTemplateProps.
[942] Fix | Delete
*
[943] Fix | Delete
* @return {Object} Preview Template Props.
[944] Fix | Delete
*/
[945] Fix | Delete
mapModelToPreviewTemplateProps: function mapModelToPreviewTemplateProps() {
[946] Fix | Delete
var control = this, previewTemplateProps = {};
[947] Fix | Delete
_.each( control.model.schema, function( value, prop ) {
[948] Fix | Delete
if ( ! value.hasOwnProperty( 'should_preview_update' ) || value.should_preview_update ) {
[949] Fix | Delete
previewTemplateProps[ prop ] = control.model.get( prop );
[950] Fix | Delete
}
[951] Fix | Delete
});
[952] Fix | Delete
[953] Fix | Delete
// Templates need to be aware of the error.
[954] Fix | Delete
previewTemplateProps.error = control.model.get( 'error' );
[955] Fix | Delete
return previewTemplateProps;
[956] Fix | Delete
},
[957] Fix | Delete
[958] Fix | Delete
/**
[959] Fix | Delete
* Open the media frame to modify the selected item.
[960] Fix | Delete
*
[961] Fix | Delete
* @abstract
[962] Fix | Delete
* @return {void}
[963] Fix | Delete
*/
[964] Fix | Delete
editMedia: function editMedia() {
[965] Fix | Delete
throw new Error( 'editMedia not implemented' );
[966] Fix | Delete
}
[967] Fix | Delete
});
[968] Fix | Delete
[969] Fix | Delete
/**
[970] Fix | Delete
* Media widget model.
[971] Fix | Delete
*
[972] Fix | Delete
* @class wp.mediaWidgets.MediaWidgetModel
[973] Fix | Delete
* @augments Backbone.Model
[974] Fix | Delete
*/
[975] Fix | Delete
component.MediaWidgetModel = Backbone.Model.extend(/** @lends wp.mediaWidgets.MediaWidgetModel.prototype */{
[976] Fix | Delete
[977] Fix | Delete
/**
[978] Fix | Delete
* Id attribute.
[979] Fix | Delete
*
[980] Fix | Delete
* @type {string}
[981] Fix | Delete
*/
[982] Fix | Delete
idAttribute: 'widget_id',
[983] Fix | Delete
[984] Fix | Delete
/**
[985] Fix | Delete
* Instance schema.
[986] Fix | Delete
*
[987] Fix | Delete
* This adheres to JSON Schema and subclasses should have their schema
[988] Fix | Delete
* exported from PHP to JS such as is done in WP_Widget_Media_Image::enqueue_admin_scripts().
[989] Fix | Delete
*
[990] Fix | Delete
* @type {Object.<string, Object>}
[991] Fix | Delete
*/
[992] Fix | Delete
schema: {
[993] Fix | Delete
title: {
[994] Fix | Delete
type: 'string',
[995] Fix | Delete
'default': ''
[996] Fix | Delete
},
[997] Fix | Delete
attachment_id: {
[998] Fix | Delete
type: 'integer',
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function