text: /*****************************************************************************
   * Open MCT, Copyright (c) 2014-2018, United States Government
   * as represented by the Administrator of the National Aeronautics and Space
   * Administration. All rights reserved.
   *
   * Open MCT is licensed under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * http://www.apache.org/licenses/LICENSE-2.0.
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
   * License for the specific language governing permissions and limitations
   * under the License.
   *
   * Open MCT includes source code licensed under additional open source
   * licenses. See the Open Source Licenses file (LICENSES.md) included with
   * this source code distribution or the Licensing information page available
   * at runtime from the About dialog for additional information.
   *****************************************************************************/
  
  define(["zepto"], function ($) {
  
      /**
       * The FileInputService provides an interface for triggering a file input.
       *
       * @constructor
       * @memberof platform/forms
       */
      function FileInputService() {
  
      }
  
      /**
       * Creates, triggers, and destroys a file picker element and returns a
       * promise for an object containing the chosen file's name and contents.
       *
       * @returns {Promise} promise for an object containing file meta-data
       */
      FileInputService.prototype.getInput = function () {
          var input = this.newInput();
          var read = this.readFile;
          var fileInfo = {};
          var file;
  
          return new Promise(function (resolve, reject) {
              input.trigger("click");
              input.on('change', function (event) {
                  // eslint-disable-next-line no-invalid-this
                  file = this.files[0];
                  input.remove();
                  if (file) {
                      read(file)
                          .then(function (contents) {
                              fileInfo.name = file.name;
                              fileInfo.body = contents;
                              resolve(fileInfo);
                          }, function () {
                              reject("File read error");
                          });
                  }
              });
          });
      };
  
      FileInputService.prototype.readFile = function (file) {
          var fileReader = new FileReader();
  
          return new Promise(function (resolve, reject) {
              fileReader.onload = function (event) {
                  resolve(event.target.result);
              };
  
              fileReader.onerror = function () {
                  return reject(event.target.result);
              };
  
              fileReader.readAsText(file);
          });
      };
  
      FileInputService.prototype.newInput = function () {
          var input = $(document.createElement('input'));
          input.attr("type", "file");
          input.css("display", "none");
          $('body').append(input);
  
          return input;
      };
  
      return FileInputService;
  });
  