<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you 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.
-->
<div class="col-md-12 col-lg-12 col-sm-12" style="margin-top:20px;">
  <div class="form-group">
    <label class="col-md-2 col-lg-2 col-sm-2 control-label">
      Where:
    </label>
    <div class="col-md-10 col-lg-10 col-sm-10 ">
      <input type="text" class="form-control" id="where" name="where" placeholder=" dt=#yyyyMMdd# AND hour=#HH#"
             [(ngModel)]="where" (change)="upward()">
    </div>
  </div>
</div>
<div class="col-md-12 col-lg-12 col-sm-12" style="margin-top:10px;">
  <div class="form-group">
    <label class="col-md-2 col-lg-2 col-sm-2 control-label" title="Your minimum partition size">
      Partition Size:
    </label>
    <div class="col-md-3 col-lg-3 col-sm-3" style="padding-right: 0px;">
      <input type="number" min="0" class="form-control" [(ngModel)]="num" (change)="upward()">
    </div>
    <div class="col-md-3 col-lg-3 col-sm-3" style="padding-left: 0px;">
      <select id="typeSelector" class="form-control" [(ngModel)]="timetype" required name="type" (change)="upward()">
        <option *ngFor="let item of timetypes;let i = index" [value]="item">{{item}}</option>
      </select>
    </div>
  </div>
</div>
<div class="col-md-12 col-lg-12 col-sm-12" style="margin-top:10px;">
  <div class="form-group">
    <label class="col-md-2 col-lg-2 col-sm-2 control-label">
      Time Zone:
    </label>
    <div class="col-md-10 col-lg-10 col-sm-10 scrollable">
      <select id="timezone" class="form-control" name="zone" [(ngModel)]="timezone" required (change)="upward()">
        <option *ngFor="let item of timezones.keys(); let i = index" [value]="timezones.get(item)">{{item}}</option>
      </select>
    </div>
  </div>
</div>
<div class="col-md-12 col-lg-12 col-sm-12" style="margin-top: 30px; height: 30px;">
  <div class="form-group">
    <input style="margin-left:15px" type="checkbox" [checked]="needpath" (change)="needpath=!needpath;upward()">
    <label>
      has Done file
    </label>
  </div>
</div>
<div class="form-group" *ngIf="needpath">
  <div style="margin-left:45px;font-weight: bold;">
    please write the Done file path relative to {{location}}
  </div>
  <div style="margin-left:45px">
    <input type="text" class="form-control" id="path" [(ngModel)]="path" name="filepath" (change)="upward()"
           placeholder="/dt=#yyyyMMdd#/hour=#HH#/_DONE">
  </div>
</div>
