code: function(spec) {
              var self = this,
                  acceptFiles = spec.accept || this._options.validation.acceptFiles,
                  allowedExtensions = spec.allowedExtensions || this._options.validation.allowedExtensions,
                  button;
  
              function allowMultiple() {
                  if (qq.supportedFeatures.ajaxUploading) {
                      // Workaround for bug in iOS7+ (see #1039)
                      if (self._options.workarounds.iosEmptyVideos &&
                          qq.ios() &&
                          !qq.ios6() &&
                          self._isAllowedExtension(allowedExtensions, ".mov")) {
  
                          return false;
                      }
  
                      if (spec.multiple === undefined) {
                          return self._options.multiple;
                      }
  
                      return spec.multiple;
                  }
  
                  return false;
              }
  
              button = new qq.UploadButton({
                  acceptFiles: acceptFiles,
                  element: spec.element,
                  focusClass: this._options.classes.buttonFocus,
                  folders: spec.folders,
                  hoverClass: this._options.classes.buttonHover,
                  ios8BrowserCrashWorkaround: this._options.workarounds.ios8BrowserCrash,
                  multiple: allowMultiple(),
                  name: this._options.request.inputName,
                  onChange: function(input) {
                      self._onInputChange(input);
                  },
                  title: spec.title == null ? this._options.text.fileInputTitle : spec.title
              });
  
              this._disposeSupport.addDisposer(function() {
                  button.dispose();
              });
  
              self._buttons.push(button);
  
              return button;
          }
docs: Generate a tracked upload button.
  
  @param spec Object containing a required `element` property
  along with optional `multiple`, `accept`, and `folders`.
  @returns {qq.UploadButton}
  @private