.widget-container.fluid-height.stf-upload(ng-controller='InstallCtrl')
  .heading
    stacked-icon(icon='fa-upload', color='color-red')
    span(translate) App Upload
    clear-button(ng-click='clear()', ng-disabled='!installation').btn-xs

  .widget-content.padded()
    //.input-group.form-inline
      input(type=text, ng-model='remoteUrl', ng-enter='installUrl(remoteUrl)',
      placeholder='http://...').form-control
      span.input-group-btn
        button.btn.btn-primary-outline(ng-click='installUrl(remoteUrl)',
        uib-tooltip='{{ "Upload From Link" | translate }}', ng-disabled='!remoteUrl')
          i.fa.fa-upload

    .drop-area(ng-file-drop='installFile($files)', ng-file-drag-over-class='dragover').file-input.btn-file
      input(type='file', ng-file-select='installFile($files)')

      i.fa.fa-2x.fa-download.drop-area-icon
      .drop-area-text(translate) Drop file to upload

    .upload-status(ng-if='installation').selectable
      uib-progressbar(max='100', value='installation.progress', ng-if='!installation.settled',
        ng-class='{"active": !installation.settled}').progress-striped

      div(ng-if='!installation.error')
        span(ng-switch='installation.state')
          strong(ng-switch-when='uploading')
            span(translate) Uploading...
            span  ({{installation.progress}}%)
          strong(ng-switch-when='processing')
            span(translate) Processing...
            span  ({{installation.progress}}%)
          strong(ng-switch-when='pushing_app')
            span(translate) Pushing app...
            span  ({{installation.progress}}%)
          strong(ng-switch-when='installing_app')
            span(translate) Installing app...
            span  ({{installation.progress}}%)
          strong(ng-switch-when='launching_app')
            span(translate) Launching activity...
            span  ({{installation.progress}}%)
          strong(ng-switch-when='installed')
            accordion(close-others='false', ng-if='installation').pointer
              accordion-group(is-open='accordionOpen')
                accordion-heading.pointer
                  i.fa.fa-file-o
                  span  {{installation.manifest.package || "App" }}

                  button.btn.btn-xs.btn-danger-outline.pull-right(
                  ng-click='uninstall(installation.manifest.package)', ng-show='installation.success')
                    i.fa.fa-trash-o
                    span(translate) Uninstall
                div(ng-include='"control-panes/dashboard/install/activities/activities.jade"')
                button.btn.btn-sm.btn-primary-outline(uib-btn-checkbox, ng-model='showManifest')
                  i.fa.fa-list
                  span(ng-if='showManifest') Hide Manifest
                  span(ng-if='!showManifest') Show Manifest
                pre.manifest-text(ng-if='showManifest') {{ installation.manifest | json }}

      alert(type='danger', close='clear()', ng-if='installation.error')
        strong(translate) Oops!
        | &#x20;
        span {{ installation.error | installError | translate }} ({{ installation.error }})
