| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | /** * @file * Provides theme functions for all of Quick Edit's client-side HTML. */(function ($, Drupal) {  /**   * Theme function for a "backstage" for the Quick Edit module.   *   * @param {object} settings   *   Settings object used to construct the markup.   * @param {string} settings.id   *   The id to apply to the backstage.   *   * @return {string}   *   The corresponding HTML.   */  Drupal.theme.quickeditBackstage = function (settings) {    let html = '';    html += `<div id="${settings.id}" />`;    return html;  };  /**   * Theme function for a toolbar container of the Quick Edit module.   *   * @param {object} settings   *   Settings object used to construct the markup.   * @param {string} settings.id   *   the id to apply to the backstage.   *   * @return {string}   *   The corresponding HTML.   */  Drupal.theme.quickeditEntityToolbar = function (settings) {    let html = '';    html += `<div id="${settings.id}" class="quickedit quickedit-toolbar-container clearfix">`;    html += '<i class="quickedit-toolbar-pointer"></i>';    html += '<div class="quickedit-toolbar-content">';    html += '<div class="quickedit-toolbar quickedit-toolbar-entity clearfix icon icon-pencil">';    html += '<div class="quickedit-toolbar-label" />';    html += '</div>';    html += '<div class="quickedit-toolbar quickedit-toolbar-field clearfix" />';    html += '</div><div class="quickedit-toolbar-lining"></div></div>';    return html;  };  /**   * Theme function for a toolbar container of the Quick Edit module.   *   * @param {object} settings   *   Settings object used to construct the markup.   * @param {string} settings.entityLabel   *   The title of the active entity.   * @param {string} settings.fieldLabel   *   The label of the highlighted or active field.   *   * @return {string}   *   The corresponding HTML.   */  Drupal.theme.quickeditEntityToolbarLabel = function (settings) {    // @todo Add XSS regression test coverage in https://www.drupal.org/node/2547437    return `<span class="field">${Drupal.checkPlain(settings.fieldLabel)}</span>${Drupal.checkPlain(settings.entityLabel)}`;  };  /**   * Element defining a containing box for the placement of the entity toolbar.   *   * @return {string}   *   The corresponding HTML.   */  Drupal.theme.quickeditEntityToolbarFence = function () {    return '<div id="quickedit-toolbar-fence" />';  };  /**   * Theme function for a toolbar container of the Quick Edit module.   *   * @param {object} settings   *   Settings object used to construct the markup.   * @param {string} settings.id   *   The id to apply to the toolbar container.   *   * @return {string}   *   The corresponding HTML.   */  Drupal.theme.quickeditFieldToolbar = function (settings) {    return `<div id="${settings.id}" />`;  };  /**   * Theme function for a toolbar toolgroup of the Quick Edit module.   *   * @param {object} settings   *   Settings object used to construct the markup.   * @param {string} [settings.id]   *   The id of the toolgroup.   * @param {string} settings.classes   *   The class of the toolgroup.   * @param {Array} settings.buttons   *   See {@link Drupal.theme.quickeditButtons}.   *   * @return {string}   *   The corresponding HTML.   */  Drupal.theme.quickeditToolgroup = function (settings) {    // Classes.    const classes = (settings.classes || []);    classes.unshift('quickedit-toolgroup');    let html = '';    html += `<div class="${classes.join(' ')}"`;    if (settings.id) {      html += ` id="${settings.id}"`;    }    html += '>';    html += Drupal.theme('quickeditButtons', { buttons: settings.buttons });    html += '</div>';    return html;  };  /**   * Theme function for buttons of the Quick Edit module.   *   * Can be used for the buttons both in the toolbar toolgroups and in the   * modal.   *   * @param {object} settings   *   Settings object used to construct the markup.   * @param {Array} settings.buttons   * - String type: the type of the button (defaults to 'button')   * - Array classes: the classes of the button.   * - String label: the label of the button.   *   * @return {string}   *   The corresponding HTML.   */  Drupal.theme.quickeditButtons = function (settings) {    let html = '';    for (let i = 0; i < settings.buttons.length; i++) {      const button = settings.buttons[i];      if (!button.hasOwnProperty('type')) {        button.type = 'button';      }      // Attributes.      const attributes = [];      const attrMap = settings.buttons[i].attributes || {};      Object.keys(attrMap).forEach((attr) => {        attributes.push(attr + ((attrMap[attr]) ? `="${attrMap[attr]}"` : ''));      });      html += `<button type="${button.type}" class="${button.classes}" ${attributes.join(' ')}>${button.label}</button>`;    }    return html;  };  /**   * Theme function for a form container of the Quick Edit module.   *   * @param {object} settings   *   Settings object used to construct the markup.   * @param {string} settings.id   *   The id to apply to the toolbar container.   * @param {string} settings.loadingMsg   *   The message to show while loading.   *   * @return {string}   *   The corresponding HTML.   */  Drupal.theme.quickeditFormContainer = function (settings) {    let html = '';    html += `<div id="${settings.id}" class="quickedit-form-container">`;    html += '  <div class="quickedit-form">';    html += '    <div class="placeholder">';    html += settings.loadingMsg;    html += '    </div>';    html += '  </div>';    html += '</div>';    return html;  };}(jQuery, Drupal));
 |