| |
| <!-- |
| Copyright 2017-present Open Networking Foundation |
| |
| 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. |
| --> |
| |
| <label ng-if="vm.field.type !== 'object' && vm.field.type !== 'array'"> |
| {{vm.field.label}} |
| <span class="required" ng-if="vm.field.validators.required">*</span> |
| </label> |
| <input |
| xos-custom-validator custom-validator="vm.field.validators.custom || null" |
| ng-if="vm.field.type !== 'boolean' && vm.field.type !== 'object' && vm.field.type !== 'select' && vm.field.type !== 'array'" |
| type="{{vm.field.type}}" |
| name="{{vm.name}}" |
| class="form-control" |
| ng-model="vm.ngModel" |
| ng-minlength="vm.field.validators.minlength || 0" |
| ng-maxlength="vm.field.validators.maxlength || 2000" |
| ng-required="vm.field.validators.required || false" /> |
| <select class="form-control" ng-if="vm.field.type === 'select'" |
| name = "{{vm.name}}" |
| ng-options="item.id as item.label for item in vm.field.options" |
| ng-model="vm.ngModel" |
| ng-required="vm.field.validators.required || false"> |
| </select> |
| <span class="boolean-field" ng-if="vm.field.type === 'boolean'"> |
| <a |
| class="btn btn-success" |
| ng-show="vm.ngModel" |
| ng-click="vm.ngModel = false"> |
| <i class="fa fa-check"></i> |
| </a> |
| <a |
| class="btn btn-danger" |
| ng-show="!vm.ngModel" |
| ng-click="vm.ngModel = true"> |
| <i class="fa fa-remove"></i> |
| </a> |
| </span> |
| <div |
| class="panel panel-default object-field" |
| ng-if="vm.field.type == 'object' && (!vm.isEmptyObject(vm.ngModel) || !vm.isEmptyObject(vm.field.properties))" |
| > |
| <div class="panel-heading">{{vm.field.label}}</div> |
| <div class="panel-body"> |
| <div ng-if="!vm.field.properties" ng-repeat="(k, v) in vm.ngModel"> |
| <xos-field |
| name="k" |
| field="{label: vm.formatLabel(k), type: vm.getType(v)}" |
| ng-model="v"> |
| </xos-field> |
| </div> |
| <div ng-if="vm.field.properties" ng-repeat="(k, v) in vm.field.properties"> |
| <xos-field |
| name="k" |
| field="{ |
| label: v.label || vm.formatLabel(k), |
| type: v.type, |
| validators: v.validators |
| }" |
| ng-model="vm.ngModel[k]"> |
| </xos-field> |
| </div> |
| </div> |
| </div> |
| <div |
| class="panel panel-default array-field" |
| ng-if="vm.field.type == 'array'"> |
| <div class="panel-heading">{{vm.field.label}}</div> |
| <div class="panel-body selected"> |
| <ul class="draggable" dnd-list="vm.ngModel"> |
| <li |
| class="array-element" |
| ng-repeat="item in vm.ngModel" |
| dnd-draggable="item" |
| dnd-moved="vm.ngModel.splice($index, 1)" |
| dnd-effect-allowed="move" |
| dnd-selected="models.selected = item" |
| > |
| <div class="well well-sm text-center"> |
| {{item}} |
| </div> |
| </li> |
| <div class="clearfix"></div> |
| </ul> |
| </div> |
| <div class="panel-body unselected"> |
| <ul class="draggable" dnd-list="vm.field.availableOptions"> |
| <li |
| class="array-element" |
| ng-repeat="item in vm.field.availableOptions" |
| dnd-draggable="item" |
| dnd-moved="vm.field.availableOptions.splice($index, 1)" |
| dnd-effect-allowed="move" |
| dnd-selected="models.selected = item" |
| > |
| <div class="well well-sm text-center"> |
| {{item}} |
| </div> |
| </li> |
| <div class="clearfix"></div> |
| </ul> |
| </div> |
| </div> |