/** * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview Defines the {@link CKEDITOR.template} class, which represents * an UI template for an editor instance. */ ( function() { var rePlaceholder = /{([^}]+)}/g; /** * Lightweight template used to build the output string from variables. * * // HTML template for presenting a label UI. * var tpl = new CKEDITOR.template( '
*
* @class
* @constructor Creates a template class instance.
* @param {String/Function} source A string with the template source or a callback that will return such string.
* The handling of the `Function` type was added in version 4.12.0 .
*/
CKEDITOR.template = function( source ) {
/**
* The current template source.
*
* Note that support for the `Function` type was added in version 4.12.0 .
*
* @readonly
* @member CKEDITOR.template
* @property {String/Function} source
*/
this.source = typeof source === 'function' ? source : String( source );
};
/**
* Processes the template, filling its variables with the provided data.
*
* @method
* @member CKEDITOR.template
* @param {Object} data An object containing properties whose values will be
* used to fill the template variables. The property names must match the
* template variables names. Variables without matching properties will be
* kept untouched.
* @param {Array} [buffer] An array that the output data will be pushed into.
* The number of entries appended to the array is unknown.
* @returns {String/Number} If `buffer` has not been provided, the processed
* template output data; otherwise the new length of `buffer`.
*/
CKEDITOR.template.prototype.output = function( data, buffer ) {
var template = typeof this.source === 'function' ? this.source( data ) : this.source,
output = template.replace( rePlaceholder, function( fullMatch, dataKey ) {
return data[ dataKey ] !== undefined ? data[ dataKey ] : fullMatch;
} );
return buffer ? buffer.push( output ) : output;
};
} )();