text:
/**
 * @file
 * Some basic behaviors and utility functions for Views UI.
 */
(function ($, Drupal, drupalSettings, debounce) {

"use strict";

Drupal.viewsUi = {};

/**
 * Improve the user experience of the views edit interface.
 */
Drupal.behaviors.viewsUiEditView = {
  attach: function () {
    // Only show the SQL rewrite warning when the user has chosen the
    // corresponding checkbox.
    $('#edit-query-options-disable-sql-rewrite').on('click', function () {
      $('.sql-rewrite-warning').toggleClass('js-hide');
    });
  }
};

/**
 * In the add view wizard, use the view name to prepopulate form fields such as
 * page title and menu link.
 */
Drupal.behaviors.viewsUiAddView = {
  attach: function (context) {
    var $context = $(context);
    // Set up regular expressions to allow only numbers, letters, and dashes.
    var exclude = new RegExp('[^a-z0-9\\-]+', 'g');
    var replace = '-';
    var suffix;

    // The page title, block title, and menu link fields can all be prepopulated
    // with the view name - no regular expression needed.
    var $fields = $context.find('[id^="edit-page-title"], [id^="edit-block-title"], [id^="edit-page-link-properties-title"]');
    if ($fields.length) {
      if (!this.fieldsFiller) {
        this.fieldsFiller = new Drupal.viewsUi.FormFieldFiller($fields);
      }
      else {
        // After an AJAX response, this.fieldsFiller will still have event
        // handlers bound to the old version of the form fields (which don't exist
        // anymore). The event handlers need to be unbound and then rebound to the
        // new markup. Note that jQuery.live is difficult to make work in this
        // case because the IDs of the form fields change on every AJAX response.
        this.fieldsFiller.rebind($fields);
      }
    }

    // Prepopulate the path field with a URLified version of the view name.
    var $pathField = $context.find('[id^="edit-page-path"]');
    if ($pathField.length) {
      if (!this.pathFiller) {
        this.pathFiller = new Drupal.viewsUi.FormFieldFiller($pathField, exclude, replace);
      }
      else {
        this.pathFiller.rebind($pathField);
      }
    }

    // Populate the RSS feed field with a URLified version of the view name, and
    // an .xml suffix (to make it unique).
    var $feedField = $context.find('[id^="edit-page-feed-properties-path"]');
    if ($feedField.length) {
      if (!this.feedFiller) {
        suffix = '.xml';
        this.feedFiller = new Drupal.viewsUi.FormFieldFiller($feedField, exclude, replace, suffix);
      }
      else {
        this.feedFiller.rebind($feedField);
      }
    }
  }
};

/**
 * Constructor for the Drupal.viewsUi.FormFieldFiller object.
 *
 * Prepopulates a form field based on the view name.
 *
 * @param $target
 *   A jQuery object representing the form field to prepopulate.
 * @param exclude
 *   Optional. A regular expression representing characters to exclude from the
 *   target field.
 * @param replace
 *   Optional. A string to use as the replacement value for disallowed
 *   characters.
 * @param suffix
 *   Optional. A suffix to append at the end of the target field content.
 */
Drupal.viewsUi.FormFieldFiller = function ($target, exclude, replace, suffix) {
  this.source = $('#edit-label');
  this.target = $target;
  this.exclude = exclude || false;
  this.replace = replace || '';
  this.suffix = suffix || '';

  // Create bound versions of this instance's object methods to use as event
  // handlers. This will let us easily unbind those specific handlers later on.
  // NOTE: jQuery.proxy will not work for this because it assumes we want only
  // one bound version of an object method, whereas we need one version per
  // object instance.
  var self = this;
  this.populate = function () {return self._populate.call(self);};
  this.unbind = function () {return self._unbind.call(self);};

  this.bind();
  // Object constructor; no return value.
};

$.extend(Drupal.viewsUi.FormFieldFiller.prototype, {
  /**
   * Bind the form-filling behavior.
   */
  bind: function () {
    this.unbind();
    // Populate the form field when the source changes.
    this.source.on('keyup.viewsUi change.viewsUi', this.populate);
    // Quit populating the field as soon as it gets focus.
    this.target.on('focus.viewsUi', this.unbind);
  },

  /**
   * Get the source form field value as altered by the passed-in parameters.
   */
  getTransliterated: function () {
    var from = this.source.val();
    if (this.exclude) {
      from = from.toLowerCase().replace(this.exclude, this.replace);
    }
    return from + this.suffix;
  },

  /**
   * Populate the target form field with the altered source field value.
   */
  _populate: function () {
    var transliterated = this.getTransliterated();
    this.target.val(transliterated);
  },

  /**
   * Stop prepopulating the form fields.
   */
  _unbind: function () {
    this.source.off('keyup.viewsUi change.viewsUi', this.populate);
    this.target.off('focus.viewsUi', this.unbind);
  },

  /**
   * Bind event handlers to the new form fields, after they're replaced via AJAX.
   */
  rebind: function ($fields) {
    this.target = $fields;
    this.bind();
  }});

Drupal.behaviors.addItemForm = {
  attach: function (context) {
    // The add item form may have an id of views-ui-add-item-form--n.
    var $form = $(context).find('form[id^="views-ui-add-item-form"]').first();
    // Make sure we don't add more than one event handler to the same form.
    $form = $form.once('views-ui-add-item-form');
    if ($form.length) {
      new Drupal.viewsUi.AddItemForm($form);
    }
  }
};

Drupal.viewsUi.AddItemForm = function ($form) {
  this.$form = $form;
  this.$form.find('.views-filterable-options :checkbox').on('click', $.proxy(this.handleCheck, this));
  // Find the wrapper of the displayed text.
  this.$selected_div = this.$form.find('.views-selected-options').parent();
  this.$selected_div.hide();
  this.checkedItems = [];
};

Drupal.viewsUi.AddItemForm.prototype.handleCheck = function (event) {
  var $target = $(event.target);
  var label = $.trim($target.next().text());
  // Add/remove the checked item to the list.
  if ($target.is(':checked')) {
    this.$selected_div.show();
    this.checkedItems.push(label);
  }
  else {
    var position = $.inArray(label, this.checkedItems);
    // Delete the item from the list and take sure that the list doesn't have undefined items left.
    for (var i = 0; i < this.checkedItems.length; i++) {
      if (i === position) {
        this.checkedItems.splice(i, 1);
        i--;
        break;
      }
    }
    // Hide it again if none item is selected.
    if (this.checkedItems.length === 0) {
      this.$selected_div.hide();
    }
  }
  this.refreshCheckedItems();
};

/**
 * Refresh the display of the checked items.
 */
Drupal.viewsUi.AddItemForm.prototype.refreshCheckedItems = function () {
  // Perhaps we should precache the text div, too.
  this.$selected_div.find('.views-selected-options').html(this.checkedItems.join(', '));
  Drupal.viewsUi.resizeModal('', true);
};

/**
 * The input field items that add displays must be rendered as <input> elements.
 * The following behavior detaches the <input> elements from the DOM, wraps them
 * in an unordered list, then appends them to the list of tabs.
 */
Drupal.behaviors.viewsUiRenderAddViewButton = {
  attach: function (context) {
    // Build the add display menu and pull the display input buttons into it.
    var $menu = $(context).find('#views-display-menu-tabs').once('views-ui-render-add-view-button-processed');
    if (!$menu.length) {
      return;
    }

    var $addDisplayDropdown = $('
' + Drupal.t('Add') + '

');
    var $displayButtons = $menu.nextAll('input.add-display').detach();
    $displayButtons.appendTo($addDisplayDropdown.find('.action-list')).wrap('
')
      .parent().first().addClass('first').end().last().addClass('last');
    // Remove the 'Add ' prefix from the button labels since they're being palced
    // in an 'Add' dropdown.
    // @todo This assumes English, but so does $addDisplayDropdown above. Add
    //   support for translation.
    $displayButtons.each(function () {
      var label = $(this).val();
      if (label.substr(0, 4) === 'Add ') {
        $(this).val(label.substr(4));
      }
    });
    $addDisplayDropdown.appendTo($menu);

    // Add the click handler for the add display button
    $menu.find('li.add > a').on('click', function (event) {
      event.preventDefault();
      var $trigger = $(this);
      Drupal.behaviors.viewsUiRenderAddViewButton.toggleMenu($trigger);
    });
    // Add a mouseleave handler to close the dropdown when the user mouses
    // away from the item. We use mouseleave instead of mouseout because
    // the user is going to trigger mouseout when she moves from the trigger
    // link to the sub menu items.
    // We use the live binder because the open class on this item will be
    // toggled on and off and we want the handler to take effect in the cases
    // that the class is present, but not when it isn't.
    $('li.add', $menu).on('mouseleave', function (event) {
      var $this = $(this);
      var $trigger = $this.children('a[href="#"]');
      if ($this.children('.action-list').is(':visible')) {
        Drupal.behaviors.viewsUiRenderAddViewButton.toggleMenu($trigger);
      }
    });
  }
};

/**
 * @note [@jessebeach] I feel like the following should be a more generic function and
 * not written specifically for this UI, but I'm not sure where to put it.
 */
Drupal.behaviors.viewsUiRenderAddViewButton.toggleMenu = function ($trigger) {
  $trigger.parent().toggleClass('open');
  $trigger.next().slideToggle('fast');
};

Drupal.behaviors.viewsUiSearchOptions = {
  attach: function (context) {
    // The add item form may have an id of views-ui-add-item-form--n.
    var $form = $(context).find('form[id^="views-ui-add-item-form"]').first();
    // Make sure we don't add more than one event handler to the same form.
    $form = $form.once('views-ui-filter-options');
    if ($form.length) {
      new Drupal.viewsUi.OptionsSearch($form);
    }
  }
};

/**
 * Constructor for the viewsUi.OptionsSearch object.
 *
 * The OptionsSearch object filters the available options on a form according
 * to the user's search term. Typing in "taxonomy" will show only those options
 * containing "taxonomy" in their label.
 */
Drupal.viewsUi.OptionsSearch = function ($form) {
  this.$form = $form;
  // Add a keyup handler to the search box.
  this.$searchBox = this.$form.find('#edit-override-controls-options-search');
  this.$searchBox.keyup($.proxy(this.handleKeyup, this));
  // Get a list of option labels and their corresponding divs and maintain it
  // in memory, so we have as little overhead as possible at keyup time.
  this.options = this.getOptions(this.$form.find('.filterable-option'));
  // Restripe on initial loading.
  this.handleKeyup();
  // Trap the ENTER key in the search box so that it doesn't submit the form.
  this.$searchBox.on('keypress', function (event) {
    if (event.which === 13) {
      event.preventDefault();
    }
  });
};

$.extend(Drupal.viewsUi.OptionsSearch.prototype, {
  /**
   * Assemble a list of all the filterable options on the form.
   *
   * @param $allOptions
   *   A $ object representing the rows of filterable options to be
   *   shown and hidden depending on the user's search terms.
   */
  getOptions: function ($allOptions) {
    var i, $label, $description, $option;
    var options = [];
    var length = $allOptions.length;
    for (i = 0; i < length; i++) {
      $option = $($allOptions[i]);
      $label = $option.find('label');
      $description = $option.find('div.description');
      options[i] = {
        // Search on the lowercase version of the label text + description.
        'searchText': $label.text().toLowerCase() + " " + $description.text().toLowerCase(),
        // Maintain a reference to the jQuery object for each row, so we don't
        // have to create a new object inside the performance-sensitive keyup
        // handler.
        '$div': $option
      };
    }
    return options;
  },

  /**
   * Keyup handler for the search box that hides or shows the relevant options.
   */
  handleKeyup: function (event) {
    var found, i, j, option, search, words, wordsLength, zebraClass, zebraCounter;

    // Determine the user's search query. The search text has been converted to
    // lowercase.
    search = this.$searchBox.val().toLowerCase();
    words = search.split(' ');
    wordsLength = words.length;

    // Start the counter for restriping rows.
    zebraCounter = 0;

    // Search through the search texts in the form for matching text.
    var length = this.options.length;
    for (i = 0; i < length; i++) {
      // Use a local variable for the option being searched, for performance.
      option = this.options[i];
      found = true;
      // Each word in the search string has to match the item in order for the
      // item to be shown.
      for (j = 0; j < wordsLength; j++) {
        if (option.searchText.indexOf(words[j]) === -1) {
          found = false;
        }
      }
      if (found) {
        // Show the checkbox row, and restripe it.
        zebraClass = (zebraCounter % 2) ? 'odd' : 'even';
        option.$div.show();
        option.$div.removeClass('even odd');
        option.$div.addClass(zebraClass);
        zebraCounter++;
      }
      else {
        // The search string wasn't found; hide this item.
        option.$div.hide();
      }
    }
  }
});

Drupal.behaviors.viewsUiPreview = {
  attach: function (context) {
    // Only act on the edit view form.
    var $contextualFiltersBucket = $(context).find('.views-display-column .views-ui-display-tab-bucket.contextual-filters');
    if ($contextualFiltersBucket.length === 0) {
      return;
    }

    // If the display has no contextual filters, hide the form where you enter
    // the contextual filters for the live preview. If it has contextual filters,
    // show the form.
    var $contextualFilters = $contextualFiltersBucket.find('.views-display-setting a');
    if ($contextualFilters.length) {
      $('#preview-args').parent().show();
    }
    else {
      $('#preview-args').parent().hide();
    }

    // Executes an initial preview.
    if ($('#edit-displays-live-preview').once('edit-displays-live-preview').is(':checked')) {
      $('#preview-submit').once('edit-displays-live-preview').trigger('click');
    }
  }
};

Drupal.behaviors.viewsUiRearrangeFilter = {
  attach: function (context) {
    // Only act on the rearrange filter form.
    if (typeof Drupal.tableDrag === 'undefined' || typeof Drupal.tableDrag['views-rearrange-filters'] === 'undefined') {
      return;
    }
    var $context = $(context);
    var $table = $context.find('#views-rearrange-filters').once('views-rearrange-filters');
    var $operator = $context.find('.form-item-filter-groups-operator').once('views-rearrange-filters');
    if ($table.length) {
      new Drupal.viewsUi.RearrangeFilterHandler($table, $operator);
    }
  }
};

/**
 * Improve the UI of the rearrange filters dialog box.
 */
Drupal.viewsUi.RearrangeFilterHandler = function ($table, $operator) {
  // Keep a reference to the
 being altered and to the div containing
  // the filter groups operator dropdown (if it exists).
  this.table = $table;
  this.operator = $operator;
  this.hasGroupOperator = this.operator.length > 0;

  // Keep a reference to all draggable rows within the table.
  this.draggableRows = $table.find('.draggable');

  // Keep a reference to the buttons for adding and removing filter groups.
  this.addGroupButton = $('input#views-add-group');
  this.removeGroupButtons = $table.find('input.views-remove-group');

  // Add links that duplicate the functionality of the (hidden) add and remove
  // buttons.
  this.insertAddRemoveFilterGroupLinks();

  // When there is a filter groups operator dropdown on the page, create
  // duplicates of the dropdown between each pair of filter groups.
  if (this.hasGroupOperator) {
    this.dropdowns = this.duplicateGroupsOperator();
    this.syncGroupsOperators();
  }

  // Add methods to the tableDrag instance to account for operator cells (which
  // span multiple rows), the operator labels next to each filter (e.g., "And"
  // or "Or"), the filter groups, and other special aspects of this tableDrag
  // instance.
  this.modifyTableDrag();

  // Initialize the operator labels (e.g., "And" or "Or") that are displayed
  // next to the filters in each group, and bind a handler so that they change
  // based on the values of the operator dropdown within that group.
  this.redrawOperatorLabels();
  $table.find('.views-group-title select')
    .once('views-rearrange-filter-handler')
    .on('change.views-rearrange-filter-handler', $.proxy(this, 'redrawOperatorLabels'));

  // Bind handlers so that when a "Remove" link is clicked, we:
  // - Update the rowspans of cells containing an operator dropdown (since they
  //   need to change to reflect the number of rows in each group).
  // - Redraw the operator labels next to the filters in the group (since the
  //   filter that is currently displayed last in each group is not supposed to
  //   have a label display next to it).
  $table.find('a.views-groups-remove-link')
    .once('views-rearrange-filter-handler')
    .on('click.views-rearrange-filter-handler', $.proxy(this, 'updateRowspans'))
    .on('click.views-rearrange-filter-handler', $.proxy(this, 'redrawOperatorLabels'));
};

$.extend(Drupal.viewsUi.RearrangeFilterHandler.prototype, {
  /**
   * Insert links that allow filter groups to be added and removed.
   */
  insertAddRemoveFilterGroupLinks: function () {

    // Insert a link for adding a new group at the top of the page, and make it
    // match the action links styling used in a typical page.tpl.php. Note that
    // Drupal does not provide a theme function for this markup, so this is the
    // best we can do.
    $('

' + this.addGroupButton.val() + '

')
      .prependTo(this.table.parent())
      // When the link is clicked, dynamically click the hidden form button for
      // adding a new filter group.
      .once('views-rearrange-filter-handler')
      .on('click.views-rearrange-filter-handler', $.proxy(this, 'clickAddGroupButton'));

    // Find each (visually hidden) button for removing a filter group and insert
    // a link next to it.
    var length = this.removeGroupButtons.length;
    var i;
    for (i = 0; i < length; i++) {
      var $removeGroupButton = $(this.removeGroupButtons[i]);
      var buttonId = $removeGroupButton.attr('id');
      $('' + Drupal.t('Remove group') + '')
        .insertBefore($removeGroupButton)
        // When the link is clicked, dynamically click the corresponding form
        // button.
        .once('views-rearrange-filter-handler')
        .on('click.views-rearrange-filter-handler', { buttonId: buttonId }, $.proxy(this, 'clickRemoveGroupButton'));
    }
  },

  /**
   * Dynamically click the button that adds a new filter group.
   */
  clickAddGroupButton: function () {
    // Due to conflicts between Drupal core's AJAX system and the Views AJAX
    // system, the only way to get this to work seems to be to trigger both the
    // .mousedown() and .submit() events.
    this.addGroupButton
      .trigger('mousedown')
      .trigger('submit');
    event.preventDefault();
  },

  /**
   * Dynamically click a button for removing a filter group.
   *
   * @param event
   *   Event being triggered, with event.data.buttonId set to the ID of the
   *   form button that should be clicked.
   */
  clickRemoveGroupButton: function (event) {
    // For some reason, here we only need to trigger .submit(), unlike for
    // Drupal.viewsUi.RearrangeFilterHandler.prototype.clickAddGroupButton()
    // where we had to trigger .mousedown() also.
    this.table.find('#' + event.data.buttonId).trigger('submit');
    event.preventDefault();
  },

  /**
   * Move the groups operator so that it's between the first two groups, and
   * duplicate it between any subsequent groups.
   */
  duplicateGroupsOperator: function () {
    var dropdowns, newRow, titleRow;

    var titleRows = $('tr.views-group-title');

    // Get rid of the explanatory text around the operator; its placement is
    // explanatory enough.
    this.operator.find('label').add('div.description').addClass('element-invisible');
    this.operator.find('select').addClass('form-select');

    // Keep a list of the operator dropdowns, so we can sync their behavior later.
    dropdowns = this.operator;

    // Move the operator to a new row just above the second group.
    titleRow = $('tr#views-group-title-2');
  this.operator.find('label').add('div.description').addClass('visually-hidden');
  this.operator.find('select').addClass('form-select');

  // Keep a list of the operator dropdowns, so we can sync their behavior later.
  dropdowns = this.operator;

  // Move the operator to a new row just above the second group.
  titleRow = $('tr#views-group-title-2');
  newRow = $('

');
  newRow.find('td').append(this.operator);
  newRow.insertBefore(titleRow);
  var i, length = titleRows.length;
  // Starting with the third group, copy the operator to a new row above the
  // group title.
  for (i = 2; i < length; i++) {
    titleRow = $(titleRows[i]);
    // Make a copy of the operator dropdown and put it in a new table row.
    var fakeOperator = this.operator.clone();
    fakeOperator.attr('id', '');
    newRow = $('

');
      newRow.find('td').append(fakeOperator);
      newRow.insertBefore(titleRow);
      dropdowns = dropdowns.add(fakeOperator);
    }

    return dropdowns;
  },

  /**
   * Make the duplicated groups operators change in sync with each other.
   */
  syncGroupsOperators: function () {
    if (this.dropdowns.length < 2) {
      // We only have one dropdown (or none at all), so there's nothing to sync.
      return;
    }

    this.dropdowns.on('change', $.proxy(this, 'operatorChangeHandler'));
  },

  /**
   * Click handler for the operators that appear between filter groups.
   *
   * Forces all operator dropdowns to have the same value.
   */
  operatorChangeHandler: function (event) {
    var $target = $(event.target);
    var operators = this.dropdowns.find('select').not($target);

    // Change the other operators to match this new value.
    operators.val($target.val());
  },

  modifyTableDrag: function () {
    var tableDrag = Drupal.tableDrag['views-rearrange-filters'];
    var filterHandler = this;

    /**
     * Override the row.onSwap method from tabledrag.js.
     *
     * When a row is dragged to another place in the table, several things need
     * to occur.
     * - The row needs to be moved so that it's within one of the filter groups.
     * - The operator cells that span multiple rows need their rowspan attributes
     *   updated to reflect the number of rows in each group.
     * - The operator labels that are displayed next to each filter need to be
     *   redrawn, to account for the row's new location.
     */
    tableDrag.row.prototype.onSwap = function () {
      if (filterHandler.hasGroupOperator) {
        // Make sure the row that just got moved (this.group) is inside one of
        // the filter groups (i.e. below an empty marker row or a draggable). If
        // it isn't, move it down one.
        var thisRow = $(this.group);
        var previousRow = thisRow.prev('tr');
        if (previousRow.length && !previousRow.hasClass('group-message') && !previousRow.hasClass('draggable')) {
          // Move the dragged row down one.
          var next = thisRow.next();
          if (next.is('tr')) {
            this.swap('after', next);
          }
        }
        filterHandler.updateRowspans();
      }
      // Redraw the operator labels that are displayed next to each filter, to
      // account for the row's new location.
      filterHandler.redrawOperatorLabels();
    };

    /**
     * Override the onDrop method from tabledrag.js.
     */
    tableDrag.onDrop = function () {
      // If the tabledrag change marker (i.e., the "*") has been inserted inside
      // a row after the operator label (i.e., "And" or "Or") rearrange the items
      // so the operator label continues to appear last.
      var changeMarker = $(this.oldRowElement).find('.tabledrag-changed');
      if (changeMarker.length) {
        // Search for occurrences of the operator label before the change marker,
        // and reverse them.
        var operatorLabel = changeMarker.prevAll('.views-operator-label');
        if (operatorLabel.length) {
          operatorLabel.insertAfter(changeMarker);
        }
      }

      // Make sure the "group" dropdown is properly updated when rows are dragged
      // into an empty filter group. This is borrowed heavily from the block.js
      // implementation of tableDrag.onDrop().
      var groupRow = $(this.rowObject.element).prevAll('tr.group-message').get(0);
      var groupName = groupRow.className.replace(/([^ ]+[ ]+)*group-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
      var groupField = $('select.views-group-select', this.rowObject.element);
      if ($(this.rowObject.element).prev('tr').is('.group-message') && !groupField.is('.views-group-select-' + groupName)) {
        var oldGroupName = groupField.attr('class').replace(/([^ ]+[ ]+)*views-group-select-([^ ]+)([ ]+[^ ]+)*/, '$2');
        groupField.removeClass('views-group-select-' + oldGroupName).addClass('views-group-select-' + groupName);
        groupField.val(groupName);
      }
    };
  },

  /**
   * Redraw the operator labels that are displayed next to each filter.
   */
  redrawOperatorLabels: function () {
    for (var i = 0; i < this.draggableRows.length; i++) {
      // Within the row, the operator labels are displayed inside the first table
      // cell (next to the filter name).
      var $draggableRow = $(this.draggableRows[i]);
      var $firstCell = $draggableRow.find('td:first');
      if ($firstCell.length) {
        // The value of the operator label ("And" or "Or") is taken from the
        // first operator dropdown we encounter, going backwards from the current
        // row. This dropdown is the one associated with the current row's filter
        // group.
        var operatorValue = $draggableRow.prevAll('.views-group-title').find('option:selected').html();
        var operatorLabel = '' + operatorValue + '';
        // If the next visible row after this one is a draggable filter row,
        // display the operator label next to the current row. (Checking for
        // visibility is necessary here since the "Remove" links hide the removed
        // row but don't actually remove it from the document).
        var $nextRow = $draggableRow.nextAll(':visible').eq(0);
        var $existingOperatorLabel = $firstCell.find('.views-operator-label');
        if ($nextRow.hasClass('draggable')) {
          // If an operator label was already there, replace it with the new one.
          if ($existingOperatorLabel.length) {
            $existingOperatorLabel.replaceWith(operatorLabel);
          }
          // Otherwise, append the operator label to the end of the table cell.
          else {
            $firstCell.append(operatorLabel);
          }
        }
        // If the next row doesn't contain a filter, then this is the last row
        // in the group. We don't want to display the operator there (since
        // operators should only display between two related filters, e.g.
        // "filter1 AND filter2 AND filter3"). So we remove any existing label
        // that this row has.
        else {
          $existingOperatorLabel.remove();
        }
      }
    }
  },

  /**
   * Update the rowspan attribute of each cell containing an operator dropdown.
   */
  updateRowspans: function () {
    var i, $row, $currentEmptyRow, draggableCount, $operatorCell;
    var rows = $(this.table).find('tr');
    var length = rows.length;
    for (i = 0; i < length; i++) {
      $row = $(rows[i]);
      if ($row.hasClass('views-group-title')) {
        // This row is a title row.
        // Keep a reference to the cell containing the dropdown operator.
        $operatorCell = $row.find('td.group-operator');
        // Assume this filter group is empty, until we find otherwise.
        draggableCount = 0;
        $currentEmptyRow = $row.next('tr');
        $currentEmptyRow.removeClass('group-populated').addClass('group-empty');
        // The cell with the dropdown operator should span the title row and
        // the "this group is empty" row.
        $operatorCell.attr('rowspan', 2);
      }
      else if ($row.hasClass('draggable') && $row.is(':visible')) {
        // We've found a visible filter row, so we now know the group isn't empty.
        draggableCount++;
        $currentEmptyRow.removeClass('group-empty').addClass('group-populated');
        // The operator cell should span all draggable rows, plus the title.
        $operatorCell.attr('rowspan', draggableCount + 1);
      }
    }
  }});

/**
 * Add a select all checkbox, which checks each checkbox at once.
 */
Drupal.behaviors.viewsFilterConfigSelectAll = {
  attach: function (context) {
    // Show the select all checkbox.
    $(context).find('#views-ui-config-item-form div.form-item-options-value-all').once('filterConfigSelectAll')
      .show()
      .find('input[type=checkbox]')
      .on('click', function () {
        var checked = $(this).is(':checked');
        // Update all checkbox beside the select all checkbox.
        $(this).parents('.form-checkboxes').find('input[type=checkbox]').each(function () {
          $(this).attr('checked', checked);
        });
      });
    // Uncheck the select all checkbox if any of the others are unchecked.
    $('#views-ui-config-item-form').find('div.form-type-checkbox').not($('.form-item-options-value-all'))
      .find('input[type=checkbox]')
      .on('click', function () {
        if ($(this).is('checked') === false) {
          $('#edit-options-value-all').prop('checked', false);
        }
      });
  }
};

/**
 * Remove icon class from elements that are themed as buttons or dropbuttons.
 */
Drupal.behaviors.viewsRemoveIconClass = {
  attach: function (context) {
    $(context).find('.dropbutton').once('dropbutton-icon', function () {
      $(this).find('.icon').removeClass('icon');
    });
  }
};

/**
 * Change "Expose filter" buttons into checkboxes.
 */
Drupal.behaviors.viewsUiCheckboxify = {
  attach: function (context, settings) {
    var $buttons = $('#edit-options-expose-button-button, #edit-options-group-button-button').once('views-ui-checkboxify');
    var length = $buttons.length;
    var i;
    for (i = 0; i < length; i++) {
      new Drupal.viewsUi.Checkboxifier($buttons[i]);
    }
  }
};

/**
 * Change the default widget to select the default group according to the
 * selected widget for the exposed group.
 */
Drupal.behaviors.viewsUiChangeDefaultWidget = {
  attach: function () {
    function changeDefaultWidget (event) {
      if ($(event.target).prop('checked')) {
        $('input.default-radios').hide();
        $('td.any-default-radios-row').parent().hide();
        $('input.default-checkboxes').show();
      }
      else {
        $('input.default-checkboxes').hide();
        $('td.any-default-radios-row').parent().show();
        $('input.default-radios').show();
      }
    }
    // Update on widget change.
    $('input[name="options[group_info][multiple]"]')
      .on('change', changeDefaultWidget)
      // Update the first time the form is rendered.
      .trigger('change');
  }
};

/**
 * Attaches an expose filter button to a checkbox that triggers its click event.
 *
 * @param button
 *   The DOM object representing the button to be checkboxified.
 */
Drupal.viewsUi.Checkboxifier = function (button) {
  this.$button = $(button);
  this.$parent = this.$button.parent('div.views-expose, div.views-grouped');
  this.$input = this.$parent.find('input:checkbox, input:radio');
  // Hide the button and its description.
  this.$button.hide();
  this.$parent.find('.exposed-description, .grouped-description').hide();

  this.$input.click($.proxy(this, 'clickHandler'));

};

/**
 * When the checkbox is checked or unchecked, simulate a button press.
 */
Drupal.viewsUi.Checkboxifier.prototype.clickHandler = function (e) {
  this.$button.mousedown();
  this.$button.submit();
};

/**
 * Change the Apply button text based upon the override select state.
 */
Drupal.behaviors.viewsUiOverrideSelect = {
  attach: function (context) {
    $(context).find('#edit-override-dropdown').once('views-ui-override-button-text', function () {
      // Closures! :(
      var $submit = $('#edit-submit');
      var old_value = $submit.val();

      $submit.once('views-ui-override-button-text')
        .on('mouseup', function () {
          $(this).val(old_value);
          return true;
        });

      $(this).on('change', function () {
        var $this = $(this);
        if ($this.val() === 'default') {
          $submit.val(Drupal.t('Apply (all displays)'));
        }
        else if ($this.val() === 'default_revert') {
          $submit.val(Drupal.t('Revert to default'));
        }
        else {
          $submit.val(Drupal.t('Apply (this display)'));
        }
      })
        .trigger('change');
    });

  }
};

Drupal.viewsUi.resizeModal = function (e, no_shrink) {
  var $modal = $('.views-ui-dialog');
  var $window = $(window);
  var windowWidth = $window.width();
  var $scroll = $modal.find('.scroll');
  if ($modal.size() === 0 || $modal.css('display') === 'none') {
    return;
  }

  var maxWidth = parseInt(windowWidth * 0.85, 10); // 85% of window
  var minWidth = parseInt(windowWidth * 0.6, 10); // 60% of window

  // Set the modal to the minwidth so that our width calculation of
  // children works.
  $modal.css('width', minWidth);
  var width = minWidth;

  // Don't let the window get more than 80% of the display high.
  var maxHeight = parseInt($window.height() * 0.8, 10);
  var minHeight = 200;
  if (no_shrink) {
    minHeight = $modal.height();
  }

  if (minHeight > maxHeight) {
    minHeight = maxHeight;
  }

  var height = 0;

  // Calculate the height of the 'scroll' region.
  var scrollHeight = 0;

  scrollHeight += parseInt($scroll.css('padding-top'), 10);
  scrollHeight += parseInt($scroll.css('padding-bottom'), 10);

  $scroll.children().each(function () {
    var w = $(this).innerWidth();
    if (w > width) {
      width = w;
    }
    scrollHeight += $(this).outerHeight(true);
  });

  // Now, calculate what the difference between the scroll and the modal
  // will be.

  var difference = 0;
  difference += parseInt($scroll.css('padding-top'), 10);
  difference += parseInt($scroll.css('padding-bottom'), 10);
  difference += $('.views-override').outerHeight(true);
  difference += $('.views-messages').outerHeight(true);
  difference += $('#views-ajax-title').outerHeight(true);
  difference += $('.views-add-form-selected').outerHeight(true);
  difference += $('.form-buttons', $modal).outerHeight(true);

  height = scrollHeight + difference;

  if (height > maxHeight) {
    height = maxHeight;
    scrollHeight = maxHeight - difference;
  }
  else if (height < minHeight) {
    height = minHeight;
    scrollHeight = minHeight - difference;
  }

  if (width > maxWidth) {
    width = maxWidth;
  }

  // Get where we should move content to
  var top = ($(window).height() / 2) - (height / 2);
  var left = ($(window).width() / 2) - (width / 2);

  $modal.css({
    'top': top + 'px',
    'left': left + 'px',
    'width': width + 'px',
    'height': height + 'px'
  });

  // Ensure inner popup height matches.
  $(Drupal.settings.views.ajax.popup).css('height', height + 'px');

  $scroll.css({
    'height': scrollHeight + 'px',
    'max-height': scrollHeight + 'px'
  });

};

Drupal.behaviors.viewsUiHandlerRemoveLink = {
  attach: function (context) {
    var $context = $(context);
    // Handle handler deletion by looking for the hidden checkbox and hiding the
    // row.
    $context.find('a.views-remove-link').once('views').on('click', function (event) {
      var id = $(this).attr('id').replace('views-remove-link-', '');
      $context.find('#views-row-' + id).hide();
      $context.find('#views-removed-' + id).prop('checked', true);
      event.preventDefault();
    });

    // Handle display deletion by looking for the hidden checkbox and hiding the
    // row.
    $context.find('a.display-remove-link').once('display').on('click', function (event) {
      var id = $(this).attr('id').replace('display-remove-link-', '');
      $context.find('#display-row-' + id).hide();
      $context.find('#display-removed-' + id).prop('checked', true);
      event.preventDefault();
    });
  }
};

$(window).on('resize scroll', debounce(Drupal.viewsUi.resizeModal, 100));

})(jQuery, Drupal, drupalSettings, Drupal.debounce);


text:
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="BuildServerSettings">
    <option name="LOGIN" value="" />
    <option name="SERVER_URL" value="http://buildserver" />
    <option name="PASSWORD" />
    <option name="REMEMBER_ME" value="true" />
    <option name="USE_IDEA_PROXY_SETTINGS" value="true" />
    <option name="INSPECTIONS_BUILD_TYPE_IDS" />
    <option name="DUPLICATES_BUILD_TYPE_IDS" />
    <option name="COVERAGE_SETTINGS" />
    <option name="TEST_STATUS_ENABLED" value="true" />
    <option name="TEST_STATUS_SHOW_SUCCESSFUL" value="false" />
    <option name="ARTIFACTS_BUILD_TYPE_IDS" />
    <option name="PERFORM_COMMIT_IF_SUCCESSFUL" value="true" />
    <option name="PERFORM_COMMIT_IF_NO_NEW_FAILED_TESTS" value="false" />
    <option name="REQUEST_CONFIRMATON" value="false" />
    <option name="PRE_TESTED_COMMIT" value="true" />
    <option name="PROJECT_STATUS_DIALOG_SPLITTER_DIVIDER_LOCATION" value="500" />
    <option name="CHANGES_STATUS_DIALOG_SPLITTER_DIVIDER_LOCATION" value="500" />
    <option name="FILTER_BY_STATUS" value="false" />
    <option name="FILTER_MARKED_AS_FIXED" value="false" />
    <option name="SHOW_CLOSE_PROMPT" value="true" />
    <option name="TOOL_WINDOW_SELECTED_CONTENT_INDEX" value="0" />
    <option name="FILTER_BY_CURRENT_PROJECT" value="true" />
  </component>
  <component name="ChangeListManager">
    <list default="true" id="3d03ac7f-91e9-4470-95b2-2e44a4657000" name="Default" comment="">
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/.name" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.swagger-codegen-ignore" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/api/ApiException.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/api/ApiOriginFilter.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/api/ApiResponseMessage.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/api/DefaultApi.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/api/DefaultApiController.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/configuration/HomeController.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_1_7.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__ch_qos_logback_logback_core_1_1_7.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_classmate_1_3_1.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_6_6.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_6_6.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_6_6.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_joda_2_6_6.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_google_guava_guava_18_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_springfox_springfox_core_2_5_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_springfox_springfox_schema_2_5_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_springfox_springfox_spi_2_5_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_springfox_springfox_spring_web_2_5_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_springfox_springfox_swagger2_2_5_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_springfox_springfox_swagger_common_2_5_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_springfox_springfox_swagger_ui_2_5_0.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_swagger_swagger_annotations_1_5_9.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_swagger_swagger_models_1_5_9.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__javax_validation_validation_api_1_1_0_Final.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__joda_time_joda_time_2_8_2.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_8_0_33.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_8_0_33.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_logging_juli_8_0_33.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_0_33.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_hibernate_hibernate_validator_5_2_4_Final.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_0_Final.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_mapstruct_mapstruct_1_0_0_Final.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_21.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_21.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_log4j_over_slf4j_1_7_21.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_21.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_1_3_5_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_1_3_5_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_1_3_5_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_1_3_5_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_1_3_5_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_1_3_5_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_1_3_5_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_aop_4_2_6_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_beans_4_2_6_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_context_4_2_6_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_core_4_2_6_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_expression_4_2_6_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_web_4_2_6_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_springframework_spring_webmvc_4_2_6_RELEASE.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_yaml_snakeyaml_1_16.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/api/NotFoundException.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/model/Pet.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/api/PetIdApi.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/api/PetIdApiController.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/RFC3339DateFormat.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/Swagger2SpringBoot.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/io/swagger/configuration/SwaggerDocumentationConfig.java" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/resources/application.properties" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/compiler.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/encodings.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/modules.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/swagger-spring.iml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" />
      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/pom.xml" afterPath="$PROJECT_DIR$/pom.xml" />
    </list>
    <ignored path="swagger-spring.iws" />
    <ignored path=".idea/workspace.xml" />
    <ignored path="$PROJECT_DIR$/target/" />
    <ignored path=".idea/dataSources.local.xml" />
    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
    <option name="TRACKING_ENABLED" value="true" />
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
    <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
  <component name="CreatePatchCommitExecutor">
    <option name="PATCH_PATH" value="" />
  </component>
  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
  <component name="FavoritesManager">
    <favorites_list name="swagger-spring" />
  </component>
  <component name="FileEditorManager">
    <leaf>
      <file leaf-file-name=".swagger-codegen-ignore" pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/.swagger-codegen-ignore">
          <provider editor-type-id="com.intellij.database.editor.CsvTableFileEditorProvider">
            <state />
          </provider>
          <provider selected="true" editor-type-id="text-editor">
            <state vertical-scroll-proportion="-0.0">
              <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
              <folding />
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="HomeController.java" pinned="false" current-in-tab="true">
        <entry file="file://$PROJECT_DIR$/src/main/java/io/swagger/configuration/HomeController.java">
          <provider selected="true" editor-type-id="text-editor">
            <state vertical-scroll-proportion="0.0">
              <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
              <folding>
                <element signature="imports" expanded="false" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
    </leaf>
  </component>
  <component name="Git.Settings">
    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  </component>
  <component name="GradleLocalSettings">
    <option name="modificationStamps">
      <map>
        <entry key="$PROJECT_DIR$/../graphql-java" value="2959989612000" />
      </map>
    </option>
    <option name="externalProjectsViewState">
      <projects_view />
    </option>
  </component>
  <component name="JsBuildToolGruntFileManager" detection-done="true" />
  <component name="JsGulpfileManager">
    <detection-done>true</detection-done>
  </component>
  <component name="MavenImportPreferences">
    <option name="generalSettings">
      <MavenGeneralSettings>
        <option name="mavenHome" value="Bundled (Maven 3)" />
      </MavenGeneralSettings>
    </option>
  </component>
  <component name="MavenProjectNavigator">
    <treeState>
      <PATH>
        <PATH_ELEMENT>
          <option name="myItemId" value="" />
          <option name="myItemType" value="org.jetbrains.idea.maven.navigator.MavenProjectsStructure$RootNode" />
        </PATH_ELEMENT>
      </PATH>
    </treeState>
  </component>
  <component name="NamedScopeManager">
    <order />
  </component>
  <component name="ProjectFrameBounds">
    <option name="y" value="23" />
    <option name="width" value="1392" />
    <option name="height" value="877" />
  </component>
  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
    <OptionsSetting value="true" id="Add" />
    <OptionsSetting value="true" id="Remove" />
    <OptionsSetting value="true" id="Checkout" />
    <OptionsSetting value="true" id="Update" />
    <OptionsSetting value="true" id="Status" />
    <OptionsSetting value="true" id="Edit" />
    <ConfirmationsSetting value="0" id="Add" />
    <ConfirmationsSetting value="0" id="Remove" />
  </component>
  <component name="ProjectView">
    <navigator currentView="ProjectPane" proportions="" version="1">
      <flattenPackages />
      <showMembers />
      <showModules />
      <showLibraryContents />
      <hideEmptyPackages />
      <abbreviatePackageNames />
      <autoscrollToSource />
      <autoscrollFromSource />
      <sortByType />
    </navigator>
    <panes>
      <pane id="Scratches" />
      <pane id="Scope" />
      <pane id="ProjectPane">
        <subPane>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger-spring" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger-spring" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="GithubPagesProject" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger-spring" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="GithubPagesProject" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="main" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger-spring" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="GithubPagesProject" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="main" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="java" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger-spring" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="GithubPagesProject" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="main" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="java" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="configuration" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger-spring" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="GithubPagesProject" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="main" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="java" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="swagger" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="api" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
        </subPane>
      </pane>
      <pane id="PackagesPane" />
    </panes>
  </component>
  <component name="PropertiesComponent">
    <property name="recentsLimit" value="5" />
    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
    <property name="aspect.path.notification.shown" value="true" />
    <property name="WebServerToolWindowFactoryState" value="false" />
  </component>
  <component name="RecentsManager">
    <key name="CopyFile.RECENT_KEYS">
      <recent name="$PROJECT_DIR$" />
    </key>
  </component>
  <component name="RunManager">
    <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
      <module name="" />
      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
      <option name="PROGRAM_PARAMETERS" />
      <method />
    </configuration>
    <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application">
      <module name="" />
      <option name="ACTIVITY_CLASS" value="" />
      <option name="MODE" value="default_activity" />
      <option name="DEPLOY" value="true" />
      <option name="ARTIFACT_NAME" value="" />
      <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
      <option name="PREFERRED_AVD" value="" />
      <option name="USE_COMMAND_LINE" value="true" />
      <option name="COMMAND_LINE" value="" />
      <option name="WIPE_USER_DATA" value="false" />
      <option name="DISABLE_BOOT_ANIMATION" value="false" />
      <option name="NETWORK_SPEED" value="full" />
      <option name="NETWORK_LATENCY" value="none" />
      <option name="CLEAR_LOGCAT" value="false" />
      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
      <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" />
      <method />
    </configuration>
    <configuration default="true" type="AntRunConfiguration" factoryName="Ant Target">
      <method />
    </configuration>
    <configuration default="true" type="Applet" factoryName="Applet">
      <option name="WIDTH" value="400" />
      <option name="HEIGHT" value="300" />
      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
      <module />
      <method />
    </configuration>
    <configuration default="true" type="Application" factoryName="Application">
      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
      <option name="MAIN_CLASS_NAME" />
      <option name="VM_PARAMETERS" />
      <option name="PROGRAM_PARAMETERS" />
      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
      <option name="ALTERNATIVE_JRE_PATH" />
      <option name="ENABLE_SWING_INSPECTOR" value="false" />
      <option name="ENV_VARIABLES" />
      <option name="PASS_PARENT_ENVS" value="true" />
      <module name="" />
      <envs />
      <method />
    </configuration>
    <configuration default="true" type="JUnit" factoryName="JUnit">
      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
      <module name="" />
      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
      <option name="ALTERNATIVE_JRE_PATH" />
      <option name="PACKAGE_NAME" />
      <option name="MAIN_CLASS_NAME" />
      <option name="METHOD_NAME" />
      <option name="TEST_OBJECT" value="class" />
      <option name="VM_PARAMETERS" value="-ea" />
      <option name="PARAMETERS" />
      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
      <option name="ENV_VARIABLES" />
      <option name="PASS_PARENT_ENVS" value="true" />
      <option name="TEST_SEARCH_SCOPE">
        <value defaultName="singleModule" />
      </option>
      <envs />
      <patterns />
      <method />
    </configuration>
    <configuration default="true" type="Remote" factoryName="Remote">
      <option name="USE_SOCKET_TRANSPORT" value="true" />
      <option name="SERVER_MODE" value="false" />
      <option name="SHMEM_ADDRESS" value="javadebug" />
      <option name="HOST" value="localhost" />
      <option name="PORT" value="5005" />
      <method />
    </configuration>
    <configuration default="true" type="TestNG" factoryName="TestNG">
      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
      <module name="" />
      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
      <option name="ALTERNATIVE_JRE_PATH" />
      <option name="SUITE_NAME" />
      <option name="PACKAGE_NAME" />
      <option name="MAIN_CLASS_NAME" />
      <option name="METHOD_NAME" />
      <option name="GROUP_NAME" />
      <option name="TEST_OBJECT" value="CLASS" />
      <option name="VM_PARAMETERS" value="-ea" />
      <option name="PARAMETERS" />
      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
      <option name="OUTPUT_DIRECTORY" />
      <option name="ANNOTATION_TYPE" />
      <option name="ENV_VARIABLES" />
      <option name="PASS_PARENT_ENVS" value="true" />
      <option name="TEST_SEARCH_SCOPE">
        <value defaultName="singleModule" />
      </option>
      <option name="USE_DEFAULT_REPORTERS" value="false" />
      <option name="PROPERTIES_FILE" />
      <envs />
      <properties />
      <listeners />
      <method />
    </configuration>
  </component>
  <component name="ShelveChangesManager" show_recycled="false" />
  <component name="TaskManager">
    <task active="true" id="Default" summary="Default task">
      <changelist id="3d03ac7f-91e9-4470-95b2-2e44a4657000" name="Default" comment="" />
      <created>1488878633384</created>
      <option name="number" value="Default" />
      <updated>1488878633384</updated>
      <workItem from="1488878635819" duration="201000" />
    </task>
    <servers />
  </component>
  <component name="TimeTrackingManager">
    <option name="totallyTimeSpent" value="201000" />
  </component>
  <component name="ToolWindowManager">
    <frame x="0" y="23" width="1392" height="877" extended-state="6" />
    <editor active="false" />
    <layout>
      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
      <window_info id="Palette	" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
      <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32962963" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="CheckStyle" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32938075" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.35555556" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
      <window_info id="Bean Validation" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="TeamCity" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
      <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
    </layout>
  </component>
  <component name="VcsContentAnnotationSettings">
    <option name="myLimit" value="2678400000" />
  </component>
  <component name="XDebuggerManager">
    <breakpoint-manager />
    <watches-manager />
  </component>
  <component name="editorHistoryManager">
    <entry file="file://$PROJECT_DIR$/.swagger-codegen-ignore">
      <provider editor-type-id="com.intellij.database.editor.CsvTableFileEditorProvider">
        <state />
      </provider>
      <provider selected="true" editor-type-id="text-editor">
        <state vertical-scroll-proportion="0.0">
          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/main/java/io/swagger/configuration/HomeController.java">
      <provider selected="true" editor-type-id="text-editor">
        <state vertical-scroll-proportion="0.0">
          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
          <folding>
            <element signature="imports" expanded="false" />
          </folding>
        </state>
      </provider>
    </entry>
  </component>
</project>

redpajama_set_name: RedPajamaGithub


text:
<?php

class ErrorPage {
	public static function static_init() {
	}

	public static function send($message) {
		$_SESSION['error_message'] = $message;
		header('Location: error.php');
	}

	public static function receive() {
		return $_SESSION['error_message'];
	}
}


text:
import boto3

# Create an S3 client
s3 = boto3.client('s3')

# Call S3 to retrieve CORS configuration for selected bucket
result = s3.get_bucket_cors(Bucket='my-bucket')


text:
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE UnicodeSyntax #-}

{-# OPTIONS_GHC -fno-warn-orphans #-}

-- |
-- Module: Configuration.Utils.Maybe
-- Description: Configuration of Optional Values
-- Copyright: Copyright © 2015 PivotCloud, Inc.
-- License: MIT
-- Maintainer: Lars Kuhtz <lkuhtz@pivotmail.com>
-- Stability: experimental
--
-- This module provides tools for defining Maybe configuration types.
--
module Configuration.Utils.Maybe
(
-- * Simple Maybe Values
-- $simplemaybe

-- * Record Maybe Values
-- $recordmaybe
  maybeOption

) where

import Data.Aeson

-- -------------------------------------------------------------------------- --
-- Simple Maybe Value

-- $simplemaybe
-- Optional configuration values are supposed to be encoded by wrapping
-- the respective type with 'Maybe'.
--
-- For simple values the standard 'FromJSON' instance from the aeson
-- package can be used along with the '..:' operator.
--
-- > data LogConfig = LogConfig
-- >    { _logLevel ∷ !Int
-- >    , _logFile ∷ !(Maybe String)
-- >    }
-- >
-- > $(makeLenses ''LogConfig)
-- >
-- > defaultLogConfig ∷ LogConfig
-- > defaultLogConfig = LogConfig
-- >     { _logLevel = 1
-- >     , _logFile = Nothing
-- >     }
-- >
-- > instance FromJSON (LogConfig → LogConfig) where
-- >     parseJSON = withObject "LogConfig" $ \o → id
-- >         <$< logLevel ..: "LogLevel" % o
-- >         <*< logFile ..: "LogConfig" % o
-- >
-- > instance ToJSON LogConfig where
-- >     toJSON config = object
-- >         [ "LogLevel" .= _logLevel config
-- >         , "LogConfig" .= _logFile config
-- >         ]
-- >
--
-- When defining command line option parsers with '.::' and '%::' all
-- options are optional. When an option is not present on the command
-- line the default value is used. For 'Maybe' values it is therefore
-- enough to wrap the parsed value into 'Just'.
--
-- > pLogConfig ∷ MParser LogConfig
-- > pLogConfig = id
-- >     <$< logLevel .:: option auto
-- >         % long "log-level"
-- >         % metavar "INTEGER"
-- >         % help "log level"
-- >     <*< logFile .:: fmap Just % strOption
-- >         % long "log-file"
-- >         % metavar "FILENAME"
-- >         % help "log file name"
--

-- $recordmaybe
--
-- For 'Maybe' types that wrap product (record) types the following orphan 'FromJSON'
-- instance is provided:
--
-- > instance (FromJSON (a → a), FromJSON a) ⇒ FromJSON (Maybe a → Maybe a)
-- >     parseJSON Null = pure (const Nothing)
-- >     parseJSON v = f <$> parseJSON v <*> parseJSON v
-- >       where
-- >         f g _ Nothing = Just g
-- >         f _ g (Just x) = Just (g x)
--
-- (Using an orphan instance is generally problematic but convenient in
-- this case. It's unlikely that an instance for this type is needed elsewhere.
-- If this is an issue for you, please let me know. In that case we can define a
-- new type for optional configuration values.)
--
-- The semantics are as follows:
--
-- * If the parsed configuration value is 'Null' the result is 'Nothing'.
-- * If the parsed configuration value is not 'Null' then the result is
--   an update function that
--
--     * updates the given default value if this value is @Just x@
--       or
--     * is a constant function that returns the value that is parsed
--       from the configuration using the 'FromJSON' instance for the
--       configuration type.
--
-- Note, that this instance requires an 'FromJSON' instance for the
-- configuration type itself as well as a 'FromJSON' instance for the update
-- function of the configuration type. The former can be defined by means of the
-- latter as follows:
--
-- > instance FromJSON MyType where
-- >     parseJSON v = parseJSON v <*> pure defaultMyType
--
-- This instance will cause the usage of 'defaultMyType' as default value if the
-- default value that is given to the configuration parser is 'Nothing' and the
-- parsed configuration is not 'Null'.
--
instance (FromJSON (a → a), FromJSON a) ⇒ FromJSON (Maybe a → Maybe a) where

    -- | If the configuration explicitly requires 'Null' the result
    -- is 'Nothing'.
    --
    parseJSON Null = pure (const Nothing)

    -- | If the default value is @(Just x)@ and the configuration
    -- provides and update function @f@ then result is @Just f@.
    --
    -- If the default value is 'Nothing' and the configuration
    -- is parsed using a parser for a constant value (and not
    -- an update function).
    --
    parseJSON v = f <$> parseJSON v <*> parseJSON v
      where
        f g _ Nothing = Just g
        f _ g (Just x) = Just (g x)

-- | Command line parser for record 'Maybe' values
--
-- == Example:
--
-- > data Setting = Setting
-- >     { _setA ∷ !Int
-- >     , _setB ∷ !String
-- >     }
-- >     deriving (Show, Read, Eq, Ord, Typeable)
-- >
-- > $(makeLenses ''Setting)
-- >
-- > defaultSetting ∷ Setting
-- > defaultSetting = Setting
-- >     { _setA = 0
-- >     , _setB = 1
-- >     }
-- >
-- > instance ToJSON Setting where
-- >     toJSON setting = object
-- >        [ "a" .= _setA setting
-- >        , "b" .= _setB setting
-- >        ]
-- >
-- > instance FromJSON (Setting → Setting) where
-- >     parseJSON = withObject "Setting" $ \o → id
-- >         <$< setA ..: "a" % o
-- >         <*< setB ..: "b" % o
-- >
-- > instance FromJSON Setting where
-- >    parseJSON v = parseJSON v <*> pure defaultSetting
-- >
-- > pSetting ∷ MParser Setting
-- > pSetting = id
-- >     <$< setA .:: option auto
-- >         % short 'a'
-- >         <> metavar "INT"
-- >         <> help "set a"
-- >     <*< setB .:: option auto
-- >         % short 'b'
-- >         <> metavar "INT"
-- >         <> help "set b"
-- >
-- > -- | Use 'Setting' as 'Maybe' in a configuration:
-- > --
-- > data Config = Config
-- >     { _maybeSetting ∷ !(Maybe Setting)
-- >     }
-- >     deriving (Show, Read, Eq, Ord, Typeable)
-- >
-- > $(makeLenses ''Config)
-- >
-- > defaultConfig ∷ Config
-- > defaultConfig = Config
-- >     { _maybeSetting = defaultSetting
-- >     }
-- >
-- > instance ToJSON Config where
-- >     toJSON config = object
-- >         [ "setting" .= maybeSetting
-- >         ]
-- >
-- > instance FromJSON (Config → Config) where
-- >     parseJSON = withObject "Config" $ \o → id
-- >         <$< maybeSetting %.: "setting" % o
-- >
-- > pConfig ∷ MParser Config
-- > pConfig = id
-- >     <$< maybeSetting %:: (maybeOption defaultSetting
-- >         <$> pEnableSetting
-- >         <*> pSetting)
-- >   where
-- >     pEnableSetting = boolOption
-- >         % long "setting-enable"
-- >         <> value False
-- >         <> help "Enable configuration flags for setting"
--
maybeOption
    ∷ a
        -- ^ default value that is used if base configuration is 'Nothing'
    → Bool
        -- ^ whether to enable this parser or not (usually is a boolean option parser)
    → (a → a)
        -- ^ update function (usually given as applicative 'MParser a')
    → Maybe a
        -- ^ the base value that is updated (usually the result of parsing the configuration file)
    → Maybe a
maybeOption _ False _ Nothing = Nothing -- not enabled
maybeOption defA True update Nothing = Just $ update defA -- disabled in config file but enabled by command line
maybeOption _ _ update (Just val) = Just $ update val -- enabled by config file and possibly by command line


text:
#ifndef ALITPCCALIBTIMEGAIN_H
#define ALITPCCALIBTIMEGAIN_H

#include "AliTPCcalibBase.h"
#include "TH2F.h"
#include "TF1.h"
#include "THnSparse.h"
#include "TArrayD.h"
#include "TObjArray.h"
#include "AliSplineFit.h"

class TH1F;
class TH3F;
class TH2F;
class TList;
class TGraphErrors;
class AliVEvent;
class AliVTrack;
class AliTPCcalibLaser;
class AliTPCseed;

#include "TTreeStream.h"

class AliTPCcalibTimeGain:public AliTPCcalibBase {
public:
  AliTPCcalibTimeGain();
  AliTPCcalibTimeGain(const Text_t *name, const Text_t *title, UInt_t StartTime, UInt_t EndTime, Int_t deltaIntegrationTimeGain);
  virtual ~AliTPCcalibTimeGain();
  //
  virtual void           Process(AliVEvent *event);
  virtual Long64_t       Merge(TCollection *li);
  virtual void           AnalyzeRun(Int_t minEntries);
  //
  void                   ProcessCosmicEvent(AliVEvent *event);
  void                   ProcessBeamEvent(AliVEvent *event);
  //
  void                   CalculateBetheAlephParams(TH2F *hist, Double_t * ini);
  static void            BinLogX(THnSparse *h, Int_t axisDim);
  static void            BinLogX(TH1 *h);
  //
  THnSparse *            GetHistGainTime() const {return (THnSparse*) fHistGainTime;}
  TH2F      *            GetHistDeDxTotal() const {return (TH2F*) fHistDeDxTotal;}
  //
  TGraphErrors *         GetGraphGainVsTime(Int_t runNumber = 0, Int_t minEntries = 2000);
  static AliSplineFit *  MakeSplineFit(TGraphErrors * graph);
  TGraphErrors *         GetGraphAttachment(Int_t minEntries, Int_t nmaxBin, Float_t fracLow=0.1, Float_t fracUp=0.9);
  //
  void SetMIP(Float_t MIP){fMIP = MIP;};
  void SetUseMax(Bool_t UseMax){fUseMax = UseMax;};
  void SetLowerTrunc(Float_t LowerTrunc){fLowerTrunc = LowerTrunc;};
  void SetUpperTrunc(Float_t UpperTrunc){fUpperTrunc = UpperTrunc;};
  void SetUseShapeNorm(Bool_t UseShapeNorm){fUseShapeNorm = UseShapeNorm;};
  void SetUsePosNorm(Bool_t UsePosNorm){fUsePosNorm = UsePosNorm;};
  void SetUsePadNorm(Int_t UsePadNorm){fUsePadNorm = UsePadNorm;};
  void SetIsCosmic(Bool_t IsCosmic){fIsCosmic = IsCosmic;};
  void SetLowMemoryConsumption(Bool_t LowMemoryConsumption){fLowMemoryConsumption = LowMemoryConsumption;};
  void SetUseCookAnalytical(Bool_t UseCookAnalytical){fUseCookAnalytical = UseCookAnalytical;};
  //
  void SetCutMinCrossRows(Int_t crossRows){fCutCrossRows = crossRows;};
  void SetCutMaxEta(Float_t maxEta){fCutEtaWindow = maxEta;};
  void SetCutRequireITSrefit(Bool_t requireItsRefit = kFALSE){fCutRequireITSrefit = requireItsRefit;};
  void SetCutMaxDcaXY(Float_t maxXY){fCutMaxDcaXY = maxXY;};
  void SetCutMaxDcaZ(Float_t maxZ){fCutMaxDcaZ = maxZ;};
  //
  void    SetMinTPCsignalN(Float_t minSignalN) { fMinTPCsignalN=minSignalN; }
  Float_t GetMinTPCsignalN() const             { return fMinTPCsignalN;     }
  //
  void SetMinMomentumMIP(Float_t minMom = 0.4){fMinMomentumMIP = minMom;};
  void SetMaxMomentumMIP(Float_t maxMom = 0.6){fMaxMomentumMIP = maxMom;};
  void SetAlephParameters(Float_t * parameters){for(Int_t j=0;j<5;j++) fAlephParameters[j] = parameters[j];};

  static void SetMergeEntriesCut(Double_t entriesCut){fgMergeEntriesCut = entriesCut;}

  Double_t GetEntries() const {return fHistGainTime->GetEntries();}

  // full reset: discard all statistics, zero histograms, start again.
  // called in online mode (HLT) after sending output for merging.
  virtual Bool_t            ResetOutputData();

private:
  static Double_t fgMergeEntriesCut;  //maximal number of entries for merging  -can be modified via setter

  Float_t GetTPCdEdx(AliTPCseed * seed);   // wrapper for CookdEdxNorm or analytical
  //
  THnSparse    * fHistGainTime;            // dEdx vs. time, type, Driftlength, momentum P
  TGraphErrors * fGainVsTime;              // multiplication factor vs. time
  TH2F         * fHistDeDxTotal;           // dEdx vs. momentum for quality assurance
  //
  Float_t fIntegrationTimeDeDx;         // required statistics for each dEdx time bin
  //
  Float_t fMIP;                         // rough MIP position in order to have scaleable histograms
  //
  // track cuts
  //
  Int_t   fCutCrossRows;                // minimum number of crossed rows
  Float_t fCutEtaWindow;                // maximum eta of tracks
  Bool_t  fCutRequireITSrefit;          // if ITSrefit should be required (dangerous in cpass0)
  Float_t fCutMaxDcaXY;                 // max dca_xy (only TPConly resolution is guaranteed!)
  Float_t fCutMaxDcaZ;                  // max dca_z  (dangerous if vDrift is not calibrated)
  Float_t fMinTPCsignalN;               // minimum number of PID clusters
  //
  // definition of MIP window
  //
  Float_t fMinMomentumMIP;              // minimum momentum of MIP region, e.g. 400 MeV
  Float_t fMaxMomentumMIP;              // maximum momentum of MIP region, e.g. 600 MeV
  Float_t fAlephParameters[5];          // parameters for equalization in MIP window, parameter set should be =1 at MIP
  //
  //
  Bool_t  fUseMax;                      // true: use max charge for dE/dx calculation, false: use total charge for dE/dx calculation
  Float_t fLowerTrunc;                  // lower truncation of dE/dx ; at most 5%
  Float_t fUpperTrunc;                  // upper truncation of dE/dx ; ca. 70%
  Bool_t  fUseShapeNorm;                // use empirical correction of dependencies
  Bool_t  fUsePosNorm;                  // charge correction (analytical?)
  Int_t   fUsePadNorm;                  // normalization of pad geometries
  Bool_t  fUseCookAnalytical;           // true if CookdEdxAnalytical should be used
  //
  Bool_t  fIsCosmic;                    // kTRUE if the analyzed runs contain cosmic events
  Bool_t  fLowMemoryConsumption;        // set this option kTRUE if the momenta information should not be stored in order to save memory
  //
  AliTPCcalibTimeGain(const AliTPCcalibTimeGain&);
  AliTPCcalibTimeGain& operator=(const AliTPCcalibTimeGain&);
  void     Process(AliVTrack *track, Int_t runNo=-1){AliTPCcalibBase::Process(track,runNo);}
  void     Process(AliTPCseed *track){return AliTPCcalibBase::Process(track);}

  ClassDef(AliTPCcalibTimeGain, 3);
};

#endif


text:
<?xml version="1.0" encoding="UTF-8"?>
<ldswebml type="image" uri="/media-library/images/motherhood#mother-baby-258638" xml:lang="eng" locale="eng" status="publish">
  <search-meta>
      <uri-title its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">mother-baby-258638</uri-title>
      <source>mother-baby-258638</source>
      <publication-type its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">image</publication-type>
      <media-type its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">image</media-type>
      <publication value="ldsorg">LDS.org</publication>
      <publication-date value="2012-04-09">2012-04-09</publication-date>
      <title/>
      <description/>
      <collections>
          <collection its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">global-search</collection>
          <collection its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">media</collection>
          <collection its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">images</collection>
      </collections>
      <subjects>
          <subject>Chileans</subject>
          <subject>Family</subject>
          <subject>Hispanics</subject>
          <subject>Mothers</subject>
          <subject>Children</subject>
          <subject>Babies</subject>
          <subject>Toddlers</subject>
          <subject>Motherhood</subject>
          <subject>Chile</subject>
      </subjects>
  </search-meta>
  <no-search>
      <path>http://media.ldscdn.org/images/media-library/motherhood/mother-baby-258638-gallery.jpg</path>
      <images>
          http://media.ldscdn.org/images/media-library/motherhood/mother-baby-258638-thumbnail.jpg
      </images>
          <download-urls>
              <download-url>
                  Mobile
                  <size>131 KB</size>
                  <path>http://media.ldscdn.org/images/media-library/motherhood/mother-baby-258638-mobile.jpg</path>
              </download-url>
              <download-url>
                  Tablet
                  <size>148 KB</size>
                  <path>http://media.ldscdn.org/images/media-library/motherhood/mother-baby-258638-tablet.jpg</path>
              </download-url>
              <download-url>
                  Print
                  <size>334 KB</size>
                  <path>http://media.ldscdn.org/images/media-library/motherhood/mother-baby-258638-print.jpg</path>
              </download-url>
              <download-url>
                  Wallpaper
                  <size>710 KB</size>
                  <path>http://media.ldscdn.org/images/media-library/motherhood/mother-baby-258638-wallpaper.jpg</path>
              </download-url>
          </download-urls>
  </no-search>
<ldse-meta its:translate="no" xmlns="http://lds.org/code/lds-edit" xmlns:its="http://www.w3.org/2005/11/its"><document id="mother-baby-258638" locale="eng" uri="/media-library/images/motherhood#mother-baby-258638" status="publish" site="ldsorg" source="chq" words="116" tgp="0.4056"/><created username="lds-edit" userid=""/><last-modified date="2012-05-10T12:26:12.550235-06:00" username="lds-edit" userid=""/></ldse-meta></ldswebml>


text:
{% load staticfiles %}
{% static 'herders/images/' as img_url_prefix %}

            {{ skill.max_level }}

            {{ skill.description }}
            {% if skill.cooltime %}
                (Reusable in {{ skill.cooltime }} turn{{ skill.cooltime|pluralize }}).
            {% endif %}

    {% if skill.level_progress_description %}

Level-up Progress:

        {{ skill.level_progress_description|linebreaks }}

    {% endif %}
    {% if skill.effect|length > 0 or skill.aoe %}

Skill Effects:

        {% if skill.aoe %}

                AOE

        {% endif %}
        {% for effect in skill.effect %}
            {% if effect.icon_filename %}

            {% else %}

                    {{ effect.name }}

            {% endif %}
        {% endfor %}

    {% endif %}
    {% if skill.multiplier_formula %}

Multiplier Formula:

{{ skill.multiplier_formula|safe }} {% if skill.hits > 1 %}x{{ skill.hits }}{% endif %}

    {% endif %}


text:
<?xml version="1.0" encoding="UTF-8"?>
<ldswebml type="image" uri="/media-library/images/fatherhood#father-greeting-young-daughter-745935" xml:lang="eng" locale="eng" status="publish">
  <search-meta>
      <uri-title its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">father-greeting-young-daughter-745935</uri-title>
      <source>father-greeting-young-daughter-745935</source>
      <publication-type its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">image</publication-type>
      <media-type its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">image</media-type>
      <publication value="ldsorg">LDS.org</publication>
      <publication-date value="2012-04-09">2012-04-09</publication-date>
      <title/>
      <description/>
      <collections>
          <collection its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">global-search</collection>
          <collection its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">media</collection>
          <collection its:translate="no" xmlns:its="http://www.w3.org/2005/11/its">images</collection>
      </collections>
      <subjects>
          <subject>AV100830cah0276.eps</subject>
          <subject>AV100830cah0276.jpg</subject>
          <subject>Church employees</subject>
          <subject>Daughters</subject>
          <subject>Fatherhood</subject>
          <subject>Fathers</subject>
          <subject>Girls</subject>
          <subject>Greetings</subject>
          <subject>Smith</subject>
          <subject>Christina</subject>
      </subjects>
  </search-meta>
  <no-search>
      <path>http://media.ldscdn.org/images/media-library/fatherhood/father-greeting-young-daughter-745935-gallery.jpg</path>
      <images>
          http://media.ldscdn.org/images/media-library/fatherhood/father-greeting-young-daughter-745935-thumbnail.jpg
      </images>
          <download-urls>
              <download-url>
                  Mobile
                  <size>186 KB</size>
                  <path>http://media.ldscdn.org/images/media-library/fatherhood/father-greeting-young-daughter-745935-mobile.jpg</path>
              </download-url>
              <download-url>
                  Tablet
                  <size>207 KB</size>
                  <path>http://media.ldscdn.org/images/media-library/fatherhood/father-greeting-young-daughter-745935-tablet.jpg</path>
              </download-url>
              <download-url>
                  Print
                  <size>432 KB</size>
                  <path>http://media.ldscdn.org/images/media-library/fatherhood/father-greeting-young-daughter-745935-print.jpg</path>
              </download-url>
              <download-url>
                  Wallpaper
                  <size>836 KB</size>
                  <path>http://media.ldscdn.org/images/media-library/fatherhood/father-greeting-young-daughter-745935-wallpaper.jpg</path>
              </download-url>
          </download-urls>
  </no-search>
<ldse-meta its:translate="no" xmlns="http://lds.org/code/lds-edit" xmlns:its="http://www.w3.org/2005/11/its"><document id="father-greeting-young-daughter-745935" locale="eng" uri="/media-library/images/fatherhood#father-greeting-young-daughter-745935" status="publish" site="ldsorg" source="chq" words="136" tgp="0.4755"/><created username="lds-edit" userid=""/><last-modified date="2012-05-10T12:26:05.692556-06:00" username="lds-edit" userid=""/></ldse-meta></ldswebml>


text:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<textarea id="txt1">Hello world....</textarea>
<br />
<input type="button" onclick="setFocus()" value="Set focus" />
<input type="button" onclick="loseFocus()" value="Lose focus" />

<script type="text/javascript">
    function setFocus()
    {
        document.getElementById('txt1').focus()
    }
    function loseFocus()
    {
        document.getElementById('txt1').blur()
    }
</script>

</body>
</html>


text:
package com.zandero.rest.injection;

import org.slf4j.*;

import java.lang.annotation.Annotation;
import java.lang.reflect.*;

/**
 * Common class to implement in order to provide injection for RESTs
 */
public interface InjectionProvider {

    Logger log = LoggerFactory.getLogger(InjectionProvider.class);

    String GUICE_INJECT = "com.google.inject.Inject";
    String JAVA_INJECT = "javax.inject.Inject";

    <T> T getInstance(Class<T> clazz) throws Throwable;

    /**
     * Class can potentially be injected if Injection provider is present
     *
     * @param clazz to be injected
     * @return true if only one constructor present, false otherwise
     */
    static boolean canBeInjected(Class<?> clazz) {
        Constructor<?>[] constructors = clazz.getDeclaredConstructors();
        return constructors.length == 1;
    }

    /**
     * Class is annotated with @Inject annotation
     *
     * @param clazz to be injected
     * @return true if injection is specified, false otherwise
     */
    static boolean hasInjection(Class<?> clazz) {

        // checks if any constructors are annotated with @Inject annotation
        Constructor<?>[] constructors = clazz.getDeclaredConstructors();

        for (Constructor<?> constructor : constructors) {
            Annotation found = findAnnotation(constructor.getAnnotations(), JAVA_INJECT, GUICE_INJECT);
            if (found != null) {
                return true;
            }
        }

        // check if any class members are injected
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            Annotation found = findAnnotation(field.getAnnotations(), JAVA_INJECT, GUICE_INJECT);
            if (found != null) {
                return true;
            }
        }

        // check methods if they need injection
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {
            Annotation found = findAnnotation(method.getAnnotations(), JAVA_INJECT, GUICE_INJECT);
            if (found != null) {
                return true;
            }
        }

        return false;
    }

    static Annotation findAnnotation(Annotation[] annotations, String... packages) {

        if (annotations != null && annotations.length > 0) {
            for (Annotation annotation : annotations) {
                for (String name : packages) {
                    if (annotation.annotationType().getName().equals(name)) {
                        return annotation;
                    }
                }
            }
        }

        return null;
    }
}


text:
require 'spec_helper'

describe Cronut::Parser::Exact do
  describe '#initialize' do
    context 'with a non-integer segment' do
      it 'raises an ArgumentError' do
        expect { described_class.new(segment: 'cheese', minimum: 1, maximum: 2) }.to raise_error(ArgumentError)
      end
    end

    context 'with a value outside of minimum and maximum' do
      it 'raises an ArgumentError' do
        expect { described_class.new(segment: '100', minimum: 1, maximum: 2) }.to raise_error(ArgumentError)
      end
    end
  end

  describe '#possibilities' do
    subject { described_class.new(segment: '2', minimum: 1, maximum: 5) }

    it 'returns the supplied integer as a single element in an array' do
      expect(subject.possibilities).to eq([2])
    end
  end
end


text:
var path = require("path");
var home = process.env[(process.platform === "win32") ? "USERPROFILE" : "HOME"];
var mac = "/Library/Application Support/Google/Chrome/Default/Extensions";

module.exports = function () {
  if (process.platform === "win32") {
    console.error("unsupported OS");
    return;
  }
  return path.join(home, mac);
};


text:
namespace impeller {

class EntityPlayground : public PlaygroundTest {
 public:
  using EntityPlaygroundCallback =
      std::function<bool(ContentContext& context, RenderPass& pass)>;

  EntityPlayground();

  ~EntityPlayground();

  bool OpenPlaygroundHere(Entity entity);

  bool OpenPlaygroundHere(EntityPlaygroundCallback callback);

 private:
  FML_DISALLOW_COPY_AND_ASSIGN(EntityPlayground);
};

}  // namespace impeller