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
File: customize-controls.js
title: l10n.chooseImage,
[5000] Fix | Delete
library: wp.media.query({ type: 'image' }),
[5001] Fix | Delete
multiple: false,
[5002] Fix | Delete
date: false,
[5003] Fix | Delete
priority: 20,
[5004] Fix | Delete
suggestedWidth: _wpCustomizeHeader.data.width,
[5005] Fix | Delete
suggestedHeight: _wpCustomizeHeader.data.height
[5006] Fix | Delete
}),
[5007] Fix | Delete
new wp.media.controller.Cropper({
[5008] Fix | Delete
imgSelectOptions: this.calculateImageSelectOptions
[5009] Fix | Delete
})
[5010] Fix | Delete
]
[5011] Fix | Delete
});
[5012] Fix | Delete
[5013] Fix | Delete
this.frame.on('select', this.onSelect, this);
[5014] Fix | Delete
this.frame.on('cropped', this.onCropped, this);
[5015] Fix | Delete
this.frame.on('skippedcrop', this.onSkippedCrop, this);
[5016] Fix | Delete
[5017] Fix | Delete
this.frame.open();
[5018] Fix | Delete
},
[5019] Fix | Delete
[5020] Fix | Delete
/**
[5021] Fix | Delete
* After an image is selected in the media modal,
[5022] Fix | Delete
* switch to the cropper state.
[5023] Fix | Delete
*/
[5024] Fix | Delete
onSelect: function() {
[5025] Fix | Delete
this.frame.setState('cropper');
[5026] Fix | Delete
},
[5027] Fix | Delete
[5028] Fix | Delete
/**
[5029] Fix | Delete
* After the image has been cropped, apply the cropped image data to the setting.
[5030] Fix | Delete
*
[5031] Fix | Delete
* @param {Object} croppedImage Cropped attachment data.
[5032] Fix | Delete
*/
[5033] Fix | Delete
onCropped: function(croppedImage) {
[5034] Fix | Delete
var url = croppedImage.url,
[5035] Fix | Delete
attachmentId = croppedImage.attachment_id,
[5036] Fix | Delete
w = croppedImage.width,
[5037] Fix | Delete
h = croppedImage.height;
[5038] Fix | Delete
this.setImageFromURL(url, attachmentId, w, h);
[5039] Fix | Delete
},
[5040] Fix | Delete
[5041] Fix | Delete
/**
[5042] Fix | Delete
* If cropping was skipped, apply the image data directly to the setting.
[5043] Fix | Delete
*
[5044] Fix | Delete
* @param {Object} selection
[5045] Fix | Delete
*/
[5046] Fix | Delete
onSkippedCrop: function(selection) {
[5047] Fix | Delete
var url = selection.get('url'),
[5048] Fix | Delete
w = selection.get('width'),
[5049] Fix | Delete
h = selection.get('height');
[5050] Fix | Delete
this.setImageFromURL(url, selection.id, w, h);
[5051] Fix | Delete
},
[5052] Fix | Delete
[5053] Fix | Delete
/**
[5054] Fix | Delete
* Creates a new wp.customize.HeaderTool.ImageModel from provided
[5055] Fix | Delete
* header image data and inserts it into the user-uploaded headers
[5056] Fix | Delete
* collection.
[5057] Fix | Delete
*
[5058] Fix | Delete
* @param {string} url
[5059] Fix | Delete
* @param {number} attachmentId
[5060] Fix | Delete
* @param {number} width
[5061] Fix | Delete
* @param {number} height
[5062] Fix | Delete
*/
[5063] Fix | Delete
setImageFromURL: function(url, attachmentId, width, height) {
[5064] Fix | Delete
var choice, data = {};
[5065] Fix | Delete
[5066] Fix | Delete
data.url = url;
[5067] Fix | Delete
data.thumbnail_url = url;
[5068] Fix | Delete
data.timestamp = _.now();
[5069] Fix | Delete
[5070] Fix | Delete
if (attachmentId) {
[5071] Fix | Delete
data.attachment_id = attachmentId;
[5072] Fix | Delete
}
[5073] Fix | Delete
[5074] Fix | Delete
if (width) {
[5075] Fix | Delete
data.width = width;
[5076] Fix | Delete
}
[5077] Fix | Delete
[5078] Fix | Delete
if (height) {
[5079] Fix | Delete
data.height = height;
[5080] Fix | Delete
}
[5081] Fix | Delete
[5082] Fix | Delete
choice = new api.HeaderTool.ImageModel({
[5083] Fix | Delete
header: data,
[5084] Fix | Delete
choice: url.split('/').pop()
[5085] Fix | Delete
});
[5086] Fix | Delete
api.HeaderTool.UploadsList.add(choice);
[5087] Fix | Delete
api.HeaderTool.currentHeader.set(choice.toJSON());
[5088] Fix | Delete
choice.save();
[5089] Fix | Delete
choice.importImage();
[5090] Fix | Delete
},
[5091] Fix | Delete
[5092] Fix | Delete
/**
[5093] Fix | Delete
* Triggers the necessary events to deselect an image which was set as
[5094] Fix | Delete
* the currently selected one.
[5095] Fix | Delete
*/
[5096] Fix | Delete
removeImage: function() {
[5097] Fix | Delete
api.HeaderTool.currentHeader.trigger('hide');
[5098] Fix | Delete
api.HeaderTool.CombinedList.trigger('control:removeImage');
[5099] Fix | Delete
}
[5100] Fix | Delete
[5101] Fix | Delete
});
[5102] Fix | Delete
[5103] Fix | Delete
/**
[5104] Fix | Delete
* wp.customize.ThemeControl
[5105] Fix | Delete
*
[5106] Fix | Delete
* @class wp.customize.ThemeControl
[5107] Fix | Delete
* @augments wp.customize.Control
[5108] Fix | Delete
*/
[5109] Fix | Delete
api.ThemeControl = api.Control.extend(/** @lends wp.customize.ThemeControl.prototype */{
[5110] Fix | Delete
[5111] Fix | Delete
touchDrag: false,
[5112] Fix | Delete
screenshotRendered: false,
[5113] Fix | Delete
[5114] Fix | Delete
/**
[5115] Fix | Delete
* @since 4.2.0
[5116] Fix | Delete
*/
[5117] Fix | Delete
ready: function() {
[5118] Fix | Delete
var control = this, panel = api.panel( 'themes' );
[5119] Fix | Delete
[5120] Fix | Delete
function disableSwitchButtons() {
[5121] Fix | Delete
return ! panel.canSwitchTheme( control.params.theme.id );
[5122] Fix | Delete
}
[5123] Fix | Delete
[5124] Fix | Delete
// Temporary special function since supplying SFTP credentials does not work yet. See #42184.
[5125] Fix | Delete
function disableInstallButtons() {
[5126] Fix | Delete
return disableSwitchButtons() || false === api.settings.theme._canInstall || true === api.settings.theme._filesystemCredentialsNeeded;
[5127] Fix | Delete
}
[5128] Fix | Delete
function updateButtons() {
[5129] Fix | Delete
control.container.find( 'button.preview, button.preview-theme' ).toggleClass( 'disabled', disableSwitchButtons() );
[5130] Fix | Delete
control.container.find( 'button.theme-install' ).toggleClass( 'disabled', disableInstallButtons() );
[5131] Fix | Delete
}
[5132] Fix | Delete
[5133] Fix | Delete
api.state( 'selectedChangesetStatus' ).bind( updateButtons );
[5134] Fix | Delete
api.state( 'changesetStatus' ).bind( updateButtons );
[5135] Fix | Delete
updateButtons();
[5136] Fix | Delete
[5137] Fix | Delete
control.container.on( 'touchmove', '.theme', function() {
[5138] Fix | Delete
control.touchDrag = true;
[5139] Fix | Delete
});
[5140] Fix | Delete
[5141] Fix | Delete
// Bind details view trigger.
[5142] Fix | Delete
control.container.on( 'click keydown touchend', '.theme', function( event ) {
[5143] Fix | Delete
var section;
[5144] Fix | Delete
if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
[5145] Fix | Delete
return;
[5146] Fix | Delete
}
[5147] Fix | Delete
[5148] Fix | Delete
// Bail if the user scrolled on a touch device.
[5149] Fix | Delete
if ( control.touchDrag === true ) {
[5150] Fix | Delete
return control.touchDrag = false;
[5151] Fix | Delete
}
[5152] Fix | Delete
[5153] Fix | Delete
// Prevent the modal from showing when the user clicks the action button.
[5154] Fix | Delete
if ( $( event.target ).is( '.theme-actions .button, .update-theme' ) ) {
[5155] Fix | Delete
return;
[5156] Fix | Delete
}
[5157] Fix | Delete
[5158] Fix | Delete
event.preventDefault(); // Keep this AFTER the key filter above.
[5159] Fix | Delete
section = api.section( control.section() );
[5160] Fix | Delete
section.showDetails( control.params.theme, function() {
[5161] Fix | Delete
[5162] Fix | Delete
// Temporary special function since supplying SFTP credentials does not work yet. See #42184.
[5163] Fix | Delete
if ( api.settings.theme._filesystemCredentialsNeeded ) {
[5164] Fix | Delete
section.overlay.find( '.theme-actions .delete-theme' ).remove();
[5165] Fix | Delete
}
[5166] Fix | Delete
} );
[5167] Fix | Delete
});
[5168] Fix | Delete
[5169] Fix | Delete
control.container.on( 'render-screenshot', function() {
[5170] Fix | Delete
var $screenshot = $( this ).find( 'img' ),
[5171] Fix | Delete
source = $screenshot.data( 'src' );
[5172] Fix | Delete
[5173] Fix | Delete
if ( source ) {
[5174] Fix | Delete
$screenshot.attr( 'src', source );
[5175] Fix | Delete
}
[5176] Fix | Delete
control.screenshotRendered = true;
[5177] Fix | Delete
});
[5178] Fix | Delete
},
[5179] Fix | Delete
[5180] Fix | Delete
/**
[5181] Fix | Delete
* Show or hide the theme based on the presence of the term in the title, description, tags, and author.
[5182] Fix | Delete
*
[5183] Fix | Delete
* @since 4.2.0
[5184] Fix | Delete
* @param {Array} terms - An array of terms to search for.
[5185] Fix | Delete
* @return {boolean} Whether a theme control was activated or not.
[5186] Fix | Delete
*/
[5187] Fix | Delete
filter: function( terms ) {
[5188] Fix | Delete
var control = this,
[5189] Fix | Delete
matchCount = 0,
[5190] Fix | Delete
haystack = control.params.theme.name + ' ' +
[5191] Fix | Delete
control.params.theme.description + ' ' +
[5192] Fix | Delete
control.params.theme.tags + ' ' +
[5193] Fix | Delete
control.params.theme.author + ' ';
[5194] Fix | Delete
haystack = haystack.toLowerCase().replace( '-', ' ' );
[5195] Fix | Delete
[5196] Fix | Delete
// Back-compat for behavior in WordPress 4.2.0 to 4.8.X.
[5197] Fix | Delete
if ( ! _.isArray( terms ) ) {
[5198] Fix | Delete
terms = [ terms ];
[5199] Fix | Delete
}
[5200] Fix | Delete
[5201] Fix | Delete
// Always give exact name matches highest ranking.
[5202] Fix | Delete
if ( control.params.theme.name.toLowerCase() === terms.join( ' ' ) ) {
[5203] Fix | Delete
matchCount = 100;
[5204] Fix | Delete
} else {
[5205] Fix | Delete
[5206] Fix | Delete
// Search for and weight (by 10) complete term matches.
[5207] Fix | Delete
matchCount = matchCount + 10 * ( haystack.split( terms.join( ' ' ) ).length - 1 );
[5208] Fix | Delete
[5209] Fix | Delete
// Search for each term individually (as whole-word and partial match) and sum weighted match counts.
[5210] Fix | Delete
_.each( terms, function( term ) {
[5211] Fix | Delete
matchCount = matchCount + 2 * ( haystack.split( term + ' ' ).length - 1 ); // Whole-word, double-weighted.
[5212] Fix | Delete
matchCount = matchCount + haystack.split( term ).length - 1; // Partial word, to minimize empty intermediate searches while typing.
[5213] Fix | Delete
});
[5214] Fix | Delete
[5215] Fix | Delete
// Upper limit on match ranking.
[5216] Fix | Delete
if ( matchCount > 99 ) {
[5217] Fix | Delete
matchCount = 99;
[5218] Fix | Delete
}
[5219] Fix | Delete
}
[5220] Fix | Delete
[5221] Fix | Delete
if ( 0 !== matchCount ) {
[5222] Fix | Delete
control.activate();
[5223] Fix | Delete
control.params.priority = 101 - matchCount; // Sort results by match count.
[5224] Fix | Delete
return true;
[5225] Fix | Delete
} else {
[5226] Fix | Delete
control.deactivate(); // Hide control.
[5227] Fix | Delete
control.params.priority = 101;
[5228] Fix | Delete
return false;
[5229] Fix | Delete
}
[5230] Fix | Delete
},
[5231] Fix | Delete
[5232] Fix | Delete
/**
[5233] Fix | Delete
* Rerender the theme from its JS template with the installed type.
[5234] Fix | Delete
*
[5235] Fix | Delete
* @since 4.9.0
[5236] Fix | Delete
*
[5237] Fix | Delete
* @return {void}
[5238] Fix | Delete
*/
[5239] Fix | Delete
rerenderAsInstalled: function( installed ) {
[5240] Fix | Delete
var control = this, section;
[5241] Fix | Delete
if ( installed ) {
[5242] Fix | Delete
control.params.theme.type = 'installed';
[5243] Fix | Delete
} else {
[5244] Fix | Delete
section = api.section( control.params.section );
[5245] Fix | Delete
control.params.theme.type = section.params.action;
[5246] Fix | Delete
}
[5247] Fix | Delete
control.renderContent(); // Replaces existing content.
[5248] Fix | Delete
control.container.trigger( 'render-screenshot' );
[5249] Fix | Delete
}
[5250] Fix | Delete
});
[5251] Fix | Delete
[5252] Fix | Delete
/**
[5253] Fix | Delete
* Class wp.customize.CodeEditorControl
[5254] Fix | Delete
*
[5255] Fix | Delete
* @since 4.9.0
[5256] Fix | Delete
*
[5257] Fix | Delete
* @class wp.customize.CodeEditorControl
[5258] Fix | Delete
* @augments wp.customize.Control
[5259] Fix | Delete
*/
[5260] Fix | Delete
api.CodeEditorControl = api.Control.extend(/** @lends wp.customize.CodeEditorControl.prototype */{
[5261] Fix | Delete
[5262] Fix | Delete
/**
[5263] Fix | Delete
* Initialize.
[5264] Fix | Delete
*
[5265] Fix | Delete
* @since 4.9.0
[5266] Fix | Delete
* @param {string} id - Unique identifier for the control instance.
[5267] Fix | Delete
* @param {Object} options - Options hash for the control instance.
[5268] Fix | Delete
* @return {void}
[5269] Fix | Delete
*/
[5270] Fix | Delete
initialize: function( id, options ) {
[5271] Fix | Delete
var control = this;
[5272] Fix | Delete
control.deferred = _.extend( control.deferred || {}, {
[5273] Fix | Delete
codemirror: $.Deferred()
[5274] Fix | Delete
} );
[5275] Fix | Delete
api.Control.prototype.initialize.call( control, id, options );
[5276] Fix | Delete
[5277] Fix | Delete
// Note that rendering is debounced so the props will be used when rendering happens after add event.
[5278] Fix | Delete
control.notifications.bind( 'add', function( notification ) {
[5279] Fix | Delete
[5280] Fix | Delete
// Skip if control notification is not from setting csslint_error notification.
[5281] Fix | Delete
if ( notification.code !== control.setting.id + ':csslint_error' ) {
[5282] Fix | Delete
return;
[5283] Fix | Delete
}
[5284] Fix | Delete
[5285] Fix | Delete
// Customize the template and behavior of csslint_error notifications.
[5286] Fix | Delete
notification.templateId = 'customize-code-editor-lint-error-notification';
[5287] Fix | Delete
notification.render = (function( render ) {
[5288] Fix | Delete
return function() {
[5289] Fix | Delete
var li = render.call( this );
[5290] Fix | Delete
li.find( 'input[type=checkbox]' ).on( 'click', function() {
[5291] Fix | Delete
control.setting.notifications.remove( 'csslint_error' );
[5292] Fix | Delete
} );
[5293] Fix | Delete
return li;
[5294] Fix | Delete
};
[5295] Fix | Delete
})( notification.render );
[5296] Fix | Delete
} );
[5297] Fix | Delete
},
[5298] Fix | Delete
[5299] Fix | Delete
/**
[5300] Fix | Delete
* Initialize the editor when the containing section is ready and expanded.
[5301] Fix | Delete
*
[5302] Fix | Delete
* @since 4.9.0
[5303] Fix | Delete
* @return {void}
[5304] Fix | Delete
*/
[5305] Fix | Delete
ready: function() {
[5306] Fix | Delete
var control = this;
[5307] Fix | Delete
if ( ! control.section() ) {
[5308] Fix | Delete
control.initEditor();
[5309] Fix | Delete
return;
[5310] Fix | Delete
}
[5311] Fix | Delete
[5312] Fix | Delete
// Wait to initialize editor until section is embedded and expanded.
[5313] Fix | Delete
api.section( control.section(), function( section ) {
[5314] Fix | Delete
section.deferred.embedded.done( function() {
[5315] Fix | Delete
var onceExpanded;
[5316] Fix | Delete
if ( section.expanded() ) {
[5317] Fix | Delete
control.initEditor();
[5318] Fix | Delete
} else {
[5319] Fix | Delete
onceExpanded = function( isExpanded ) {
[5320] Fix | Delete
if ( isExpanded ) {
[5321] Fix | Delete
control.initEditor();
[5322] Fix | Delete
section.expanded.unbind( onceExpanded );
[5323] Fix | Delete
}
[5324] Fix | Delete
};
[5325] Fix | Delete
section.expanded.bind( onceExpanded );
[5326] Fix | Delete
}
[5327] Fix | Delete
} );
[5328] Fix | Delete
} );
[5329] Fix | Delete
},
[5330] Fix | Delete
[5331] Fix | Delete
/**
[5332] Fix | Delete
* Initialize editor.
[5333] Fix | Delete
*
[5334] Fix | Delete
* @since 4.9.0
[5335] Fix | Delete
* @return {void}
[5336] Fix | Delete
*/
[5337] Fix | Delete
initEditor: function() {
[5338] Fix | Delete
var control = this, element, editorSettings = false;
[5339] Fix | Delete
[5340] Fix | Delete
// Obtain editorSettings for instantiation.
[5341] Fix | Delete
if ( wp.codeEditor && ( _.isUndefined( control.params.editor_settings ) || false !== control.params.editor_settings ) ) {
[5342] Fix | Delete
[5343] Fix | Delete
// Obtain default editor settings.
[5344] Fix | Delete
editorSettings = wp.codeEditor.defaultSettings ? _.clone( wp.codeEditor.defaultSettings ) : {};
[5345] Fix | Delete
editorSettings.codemirror = _.extend(
[5346] Fix | Delete
{},
[5347] Fix | Delete
editorSettings.codemirror,
[5348] Fix | Delete
{
[5349] Fix | Delete
indentUnit: 2,
[5350] Fix | Delete
tabSize: 2
[5351] Fix | Delete
}
[5352] Fix | Delete
);
[5353] Fix | Delete
[5354] Fix | Delete
// Merge editor_settings param on top of defaults.
[5355] Fix | Delete
if ( _.isObject( control.params.editor_settings ) ) {
[5356] Fix | Delete
_.each( control.params.editor_settings, function( value, key ) {
[5357] Fix | Delete
if ( _.isObject( value ) ) {
[5358] Fix | Delete
editorSettings[ key ] = _.extend(
[5359] Fix | Delete
{},
[5360] Fix | Delete
editorSettings[ key ],
[5361] Fix | Delete
value
[5362] Fix | Delete
);
[5363] Fix | Delete
}
[5364] Fix | Delete
} );
[5365] Fix | Delete
}
[5366] Fix | Delete
}
[5367] Fix | Delete
[5368] Fix | Delete
element = new api.Element( control.container.find( 'textarea' ) );
[5369] Fix | Delete
control.elements.push( element );
[5370] Fix | Delete
element.sync( control.setting );
[5371] Fix | Delete
element.set( control.setting() );
[5372] Fix | Delete
[5373] Fix | Delete
if ( editorSettings ) {
[5374] Fix | Delete
control.initSyntaxHighlightingEditor( editorSettings );
[5375] Fix | Delete
} else {
[5376] Fix | Delete
control.initPlainTextareaEditor();
[5377] Fix | Delete
}
[5378] Fix | Delete
},
[5379] Fix | Delete
[5380] Fix | Delete
/**
[5381] Fix | Delete
* Make sure editor gets focused when control is focused.
[5382] Fix | Delete
*
[5383] Fix | Delete
* @since 4.9.0
[5384] Fix | Delete
* @param {Object} [params] - Focus params.
[5385] Fix | Delete
* @param {Function} [params.completeCallback] - Function to call when expansion is complete.
[5386] Fix | Delete
* @return {void}
[5387] Fix | Delete
*/
[5388] Fix | Delete
focus: function( params ) {
[5389] Fix | Delete
var control = this, extendedParams = _.extend( {}, params ), originalCompleteCallback;
[5390] Fix | Delete
originalCompleteCallback = extendedParams.completeCallback;
[5391] Fix | Delete
extendedParams.completeCallback = function() {
[5392] Fix | Delete
if ( originalCompleteCallback ) {
[5393] Fix | Delete
originalCompleteCallback();
[5394] Fix | Delete
}
[5395] Fix | Delete
if ( control.editor ) {
[5396] Fix | Delete
control.editor.codemirror.focus();
[5397] Fix | Delete
}
[5398] Fix | Delete
};
[5399] Fix | Delete
api.Control.prototype.focus.call( control, extendedParams );
[5400] Fix | Delete
},
[5401] Fix | Delete
[5402] Fix | Delete
/**
[5403] Fix | Delete
* Initialize syntax-highlighting editor.
[5404] Fix | Delete
*
[5405] Fix | Delete
* @since 4.9.0
[5406] Fix | Delete
* @param {Object} codeEditorSettings - Code editor settings.
[5407] Fix | Delete
* @return {void}
[5408] Fix | Delete
*/
[5409] Fix | Delete
initSyntaxHighlightingEditor: function( codeEditorSettings ) {
[5410] Fix | Delete
var control = this, $textarea = control.container.find( 'textarea' ), settings, suspendEditorUpdate = false;
[5411] Fix | Delete
[5412] Fix | Delete
settings = _.extend( {}, codeEditorSettings, {
[5413] Fix | Delete
onTabNext: _.bind( control.onTabNext, control ),
[5414] Fix | Delete
onTabPrevious: _.bind( control.onTabPrevious, control ),
[5415] Fix | Delete
onUpdateErrorNotice: _.bind( control.onUpdateErrorNotice, control )
[5416] Fix | Delete
});
[5417] Fix | Delete
[5418] Fix | Delete
control.editor = wp.codeEditor.initialize( $textarea, settings );
[5419] Fix | Delete
[5420] Fix | Delete
// Improve the editor accessibility.
[5421] Fix | Delete
$( control.editor.codemirror.display.lineDiv )
[5422] Fix | Delete
.attr({
[5423] Fix | Delete
role: 'textbox',
[5424] Fix | Delete
'aria-multiline': 'true',
[5425] Fix | Delete
'aria-label': control.params.label,
[5426] Fix | Delete
'aria-describedby': 'editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4'
[5427] Fix | Delete
});
[5428] Fix | Delete
[5429] Fix | Delete
// Focus the editor when clicking on its label.
[5430] Fix | Delete
control.container.find( 'label' ).on( 'click', function() {
[5431] Fix | Delete
control.editor.codemirror.focus();
[5432] Fix | Delete
});
[5433] Fix | Delete
[5434] Fix | Delete
/*
[5435] Fix | Delete
* When the CodeMirror instance changes, mirror to the textarea,
[5436] Fix | Delete
* where we have our "true" change event handler bound.
[5437] Fix | Delete
*/
[5438] Fix | Delete
control.editor.codemirror.on( 'change', function( codemirror ) {
[5439] Fix | Delete
suspendEditorUpdate = true;
[5440] Fix | Delete
$textarea.val( codemirror.getValue() ).trigger( 'change' );
[5441] Fix | Delete
suspendEditorUpdate = false;
[5442] Fix | Delete
});
[5443] Fix | Delete
[5444] Fix | Delete
// Update CodeMirror when the setting is changed by another plugin.
[5445] Fix | Delete
control.setting.bind( function( value ) {
[5446] Fix | Delete
if ( ! suspendEditorUpdate ) {
[5447] Fix | Delete
control.editor.codemirror.setValue( value );
[5448] Fix | Delete
}
[5449] Fix | Delete
});
[5450] Fix | Delete
[5451] Fix | Delete
// Prevent collapsing section when hitting Esc to tab out of editor.
[5452] Fix | Delete
control.editor.codemirror.on( 'keydown', function onKeydown( codemirror, event ) {
[5453] Fix | Delete
var escKeyCode = 27;
[5454] Fix | Delete
if ( escKeyCode === event.keyCode ) {
[5455] Fix | Delete
event.stopPropagation();
[5456] Fix | Delete
}
[5457] Fix | Delete
});
[5458] Fix | Delete
[5459] Fix | Delete
control.deferred.codemirror.resolveWith( control, [ control.editor.codemirror ] );
[5460] Fix | Delete
},
[5461] Fix | Delete
[5462] Fix | Delete
/**
[5463] Fix | Delete
* Handle tabbing to the field after the editor.
[5464] Fix | Delete
*
[5465] Fix | Delete
* @since 4.9.0
[5466] Fix | Delete
* @return {void}
[5467] Fix | Delete
*/
[5468] Fix | Delete
onTabNext: function onTabNext() {
[5469] Fix | Delete
var control = this, controls, controlIndex, section;
[5470] Fix | Delete
section = api.section( control.section() );
[5471] Fix | Delete
controls = section.controls();
[5472] Fix | Delete
controlIndex = controls.indexOf( control );
[5473] Fix | Delete
if ( controls.length === controlIndex + 1 ) {
[5474] Fix | Delete
$( '#customize-footer-actions .collapse-sidebar' ).trigger( 'focus' );
[5475] Fix | Delete
} else {
[5476] Fix | Delete
controls[ controlIndex + 1 ].container.find( ':focusable:first' ).focus();
[5477] Fix | Delete
}
[5478] Fix | Delete
},
[5479] Fix | Delete
[5480] Fix | Delete
/**
[5481] Fix | Delete
* Handle tabbing to the field before the editor.
[5482] Fix | Delete
*
[5483] Fix | Delete
* @since 4.9.0
[5484] Fix | Delete
* @return {void}
[5485] Fix | Delete
*/
[5486] Fix | Delete
onTabPrevious: function onTabPrevious() {
[5487] Fix | Delete
var control = this, controls, controlIndex, section;
[5488] Fix | Delete
section = api.section( control.section() );
[5489] Fix | Delete
controls = section.controls();
[5490] Fix | Delete
controlIndex = controls.indexOf( control );
[5491] Fix | Delete
if ( 0 === controlIndex ) {
[5492] Fix | Delete
section.contentContainer.find( '.customize-section-title .customize-help-toggle, .customize-section-title .customize-section-description.open .section-description-close' ).last().focus();
[5493] Fix | Delete
} else {
[5494] Fix | Delete
controls[ controlIndex - 1 ].contentContainer.find( ':focusable:first' ).focus();
[5495] Fix | Delete
}
[5496] Fix | Delete
},
[5497] Fix | Delete
[5498] Fix | Delete
/**
[5499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function