const util = require( './util' ), Button = require( './Button' ), icons = require( './icons' ); /** * Creates a header * * @ignore * @param {string|View} headingOrView (HTML allowed) * @param {View[]} headerActions * @param {module:mobile.startup/View} [headerCancel] defaults to cancel button * @param {string} [additionalClassNames] (should be escaped) * @return {Element} */ function makeHeader( headingOrView, headerActions, headerCancel, additionalClassNames ) { const heading = typeof headingOrView === 'string' ? headingOrView : undefined, templateData = { hasActions: headerActions && headerActions.length, isHidden: false, heading }, html = util.template( `
` ).render( templateData ); headerCancel = headerCancel || icons.cancel(); const $el = util.parseHTML( html ); // Truncate any text inside in the overlay header. $el.find( 'h2 span' ).addClass( 'truncated-text' ); $el.find( '.header-cancel li' ).append( headerCancel.$el ); if ( heading === undefined ) { headingOrView.$el.insertAfter( $el.find( '.header-cancel' ) ); } if ( headerActions && headerActions.length ) { $el.find( '.header-action' ).append( headerActions.map( ( component ) => component.$el ) ); } return $el[0]; } /** * Creates a header with a h2 heading, internal for use inside GrowthExperiments only. * * @function * @memberof module:mobile.startup * @param {string} heading (HTML allowed) * @param {module:mobile.startup/View[]} headerActions * @param {module:mobile.startup/View} [headerCancel] defaults to cancel button * @param {string} [additionalClassNames] (should be escaped) * @return {Element} */ function header( heading, headerActions, headerCancel, additionalClassNames ) { heading = ``; return makeHeader( heading, headerActions, headerCancel, additionalClassNames ); } /** * Creates a header with a form * * @ignore * @param {string|View} formHTMLOrView of the header * @param {View[]} headerActions * @param {module:mobile.startup/View} [headerCancel] defaults to cancel button * @param {string} [additionalClassNames] (should be escaped) * @return {Element} */ function formHeader( formHTMLOrView, headerActions, headerCancel, additionalClassNames ) { return makeHeader( formHTMLOrView, headerActions, headerCancel, additionalClassNames ); } /** * Creates a header with a form * * @ignore * @param {string} heading of the header * @param {string} additionalClassNames of the header * @return {Element} */ function saveHeader( heading, additionalClassNames ) { return header( heading, [ new Button( { tagName: 'button', additionalClassNames: 'save submit', disabled: true, label: util.saveButtonMessage(), size: 'large' } ) ], icons.back(), additionalClassNames ); } /** * Creates a header with a form * * @ignore * @param {string} heading of the header * @param {string} additionalClassNames of the header * @return {Element} */ function savingHeader( heading ) { return header( heading, [ icons.spinner( { additionalClassNames: 'savespinner loading' } ) ], icons.cancel(), 'saving-header hidden' ); } module.exports = { savingHeader, saveHeader, formHeader, header };