· 8 years ago · Jan 31, 2018, 08:08 PM
1angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/flavors/panel.html","<hz-resource-panel resource-type-name=\"OS::Nova::Flavor\">\n <hz-resource-table resource-type-name=\"OS::Nova::Flavor\"></hz-resource-table>\n</hz-resource-panel>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/flavors/summary.html","<hz-resource-property-list\n resource-type-name=\"OS::Nova::Flavor\"\n item=\"item\"\n property-groups=\"[\n [\'name\', \'id\'],\n [\'vcpus\', \'ram\'],\n [\'disk\', \'OS-FLV-EXT-DATA:ephemeral\', \'swap\'],\n [\'rxtx_factor\']]\">\n </hz-resource-property-list>\n<div class=\"row\">\n <div class=\"col-md-4\">\n <dl>\n <div ng-repeat=\"(key, value) in item.extras\">\n <dt>{$ key $}</dt>\n <dd>{$ value $}</dd>\n </div>\n </dl>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/admin-panel.html","<hz-resource-panel resource-type-name=\"OS::Glance::Image\">\n <hz-resource-table resource-type-name=\"OS::Glance::Image\"\n track-by=\"trackBy\"\n list-function-extra-params=\"{is_public: \'None\'}\"></hz-resource-table>\n</hz-resource-panel>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/details/drawer.html","<div ng-controller=\"horizon.app.core.images.DrawerController as drawerCtrl\">\n\n <hz-resource-property-list\n resource-type-name=\"OS::Glance::Image\"\n item=\"item\"\n property-groups=\"[\n [\'name\', \'id\'],\n [\'visibility\', \'protected\'],\n [\'disk_format\', \'size\'],\n [\'min_disk\', \'min_ram\']]\">\n </hz-resource-property-list>\n\n <div class=\"row\" ng-if=\"drawerCtrl.metadataDefs\">\n <div class=\"col-sm-12\">\n <metadata-display\n available=\"::drawerCtrl.metadataDefs\"\n existing=\"item.properties || item\">\n </metadata-display>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/details/overview.html","<div ng-controller=\"ImageOverviewController as ctrl\">\n <div class=\"row\">\n <div class=\"col-md-6 detail\">\n <h3 translate>Image</h3>\n <hr>\n <hz-resource-property-list\n resource-type-name=\"OS::Glance::Image\"\n cls=\"dl-horizontal\"\n item=\"ctrl.image\"\n property-groups=\"[[\n \'id\', \'type\', \'status\', \'size\', \'min_disk\', \'min_ram\', \'disk_format\',\n \'container_format\', \'created_at\', \'updated_at\']]\">\n </hz-resource-property-list>\n </div>\n <div class=\"col-md-6 detail\">\n <h3>{$ \'Security\' | translate $}</h3>\n <hr>\n <dl class=\"dl-horizontal\">\n <dt translate>Owner</dt>\n <dd>{$ ctrl.image.owner $}</dd>\n <dt translate>Filename</dt>\n <dd>{$ ctrl.image.properties.filename | noValue $}</dd>\n <dt translate>Visibility</dt>\n <dd>{$ ctrl.image | imageVisibility:ctrl.projectId $}</dd>\n <dt translate>Protected</dt>\n <dd>{$ ctrl.image.protected | yesno $}</dd>\n <dt translate>Checksum</dt>\n <dd>{$ ctrl.image.checksum | noValue $}</dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 detail\">\n <h3 translate>Custom Properties</h3>\n <hr>\n <dl class=\"dl-horizontal\">\n <div ng-repeat=\"prop in ctrl.image.properties\">\n <dt data-toggle=\"tooltip\" title=\"{$ prop.name $}\">{$ ctrl.resourceType.label(prop.name) $}</dt>\n <dd>{$ prop.value $}</dd>\n </div>\n </dl>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/panel.html","<hz-resource-panel resource-type-name=\"OS::Glance::Image\">\n <hz-resource-table resource-type-name=\"OS::Glance::Image\"\n track-by=\"trackBy\"></hz-resource-table>\n</hz-resource-panel>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/steps/create-image/create-image.help.html","<dl>\n <dt translate>Image Name</dt>\n <dd translate>The name of the image.</dd>\n <dt translate>Image Description</dt>\n <dd translate>A description of the image.</dd>\n <dt translate>Source Type</dt>\n <dd translate>Uploading the image from a local file or from a specified URL.</dd>\n <dt translate>Location</dt>\n <dd translate>If uploading the image via a HTTP URL the image location must be accessible to the Image Service and be a URL direct to the image binary.</dd>\n <dt translate>Format</dt>\n <dd translate>Select the format of the disk from the drop down menu.</dd>\n <dt translate>Kernel</dt>\n <dd translate>Select the kernel to run from the drop down menu.</dd>\n <dt translate>Ramdisk</dt>\n <dd translate>Select the Ramdisk from the drop down menu.</dd>\n <dt translate>Architecture</dt>\n <dd translate>The architecture of the image.</dd>\n <dt translate>Minimum Disk</dt>\n <dd translate>Amount of disk space in GB that is required to boot the image.</dd>\n <dt translate>Minimum RAM</dt>\n <dd translate>Amount of RAM in MB that is required to boot the image.</dd>\n <dt translate>Visibility</dt>\n <dd translate>The access permission for the image.</dd>\n <dt translate>Protected</dt>\n <dd translate>If set to \'Yes\' then the image cannot be deleted.</dd>\n</dl>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/steps/create-image/create-image.html","<div ng-controller=\"horizon.app.core.images.steps.CreateImageController as ctrl\">\n\n <h4 translate>Image Details</h4>\n\n <div class=\"content\">\n\n <div class=\"subtitle\">\n <translate>\n Specify an image to upload to the Image Service.\n </translate>\n </div>\n\n <div class=\"selected-source\">\n <div class=\"row form-group\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group required\"\n ng-class=\"{\'has-error\':imageForm.name.$invalid && imageForm.name.$dirty}\">\n <label class=\"control-label required\" for=\"imageForm-name\">\n <translate>Image Name</translate><span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input required id=\"imageForm-name\" name=\"name\"\n type=\"text\" class=\"form-control\"\n ng-model=\"ctrl.image.name\"\n ng-maxlength=\"ctrl.validationRules.fieldMaxLength\">\n <p class=\"help-block alert alert-danger\"\n ng-show=\"imageForm.name.$invalid && imageForm.name.$dirty\">\n <translate>An image name less than {$ctrl.validationRules.fieldMaxLength + 1$} characters is required.</translate>\n </p>\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\"\n ng-class=\"{\'has-error\':imageForm.description.$invalid && imageForm.description.$dirty}\">\n <label class=\"control-label\" for=\"imageForm-description\">\n <translate>Image Description</translate>\n </label>\n <input id=\"imageForm-description\" name=\"description\"\n type=\"text\" class=\"form-control\"\n ng-model=\"ctrl.image.description\"\n ng-maxlength=\"ctrl.validationRules.fieldMaxLength\">\n <p class=\"help-block alert alert-danger\"\n ng-show=\"imageForm.description.$invalid && imageForm.description.$dirty\">\n <translate>An image description less than {$ctrl.validationRules.fieldMaxLength + 1$} characters is required.</translate>\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <h4 translate>Image Source</h4>\n\n <div class=\"selected-source\">\n <div class=\"row form-group\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\">\n <label class=\"control-label required\">\n <translate>Source Type</translate>\n </label>\n <div class=\"form-field\" ng-if=\"ctrl.image.source_type !== \'\'\">\n <div class=\"btn-group\">\n <label class=\"btn btn-default btn-toggle\"\n ng-repeat=\"option in ctrl.imageSourceOptions\"\n ng-model=\"ctrl.image.source_type\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row form-group\" ng-if=\"ctrl.isLocalFileUpload()\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group file-upload required\">\n <label class=\"control-label\" for=\"imageForm-image_url\">\n <translate>File</translate><span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <div class=\"input-group\" ng-hide=\"ctrl.uploadProgress > -1\">\n <span class=\"input-group-btn\">\n <button class=\"btn btn-primary\" ng-model=\"image_file\"\n ngf-select=\"ctrl.prepareUpload(image_file)\"\n name=\"image_file\" ng-required=\"true\"\n id=\"imageForm-image_file\" translate>Browse...</button>\n </span>\n <input type=\"text\" class=\"form-control\" readonly ng-model=\"image_file.name\">\n </div>\n <div ng-hide=\"ctrl.uploadProgress < 0\" class=\"progress-text\">\n <uib-progressbar value=\"ctrl.uploadProgress\"></uib-progressbar>\n <span class=\"progress-bar-text\">{$ ctrl.uploadProgress $}%</span>\n </div>\n <p class=\"help-block alert alert-danger\"\n ng-show=\"imageForm.image_file.$invalid && imageForm.image_file.$dirty\">\n <translate>A local file should be selected.</translate>\n </p>\n </div>\n </div>\n </div>\n <div class=\"row form-group\" ng-if=\"ctrl.image.source_type === \'url\'\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group required\"\n ng-class=\"{\'has-error\':imageForm.image_url.$invalid && imageForm.image_url.$dirty}\">\n <label class=\"control-label\" for=\"imageForm-image_url\">\n <translate>Location</translate><span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input ng-required=\"true\" id=\"imageForm-image_url\" name=\"image_url\"\n type=\"text\" class=\"form-control\"\n ng-model=\"ctrl.image.image_url\"\n ng-maxlength=\"ctrl.validationRules.fieldMaxLength\"\n placeholder=\"{$ \'An external (HTTP) URL to load the image from\'|translate $}\">\n <p class=\"help-block alert alert-danger\"\n ng-show=\"imageForm.image_url.$invalid && imageForm.image_url.$dirty\">\n <translate>An external (HTTP) URL is required</translate>\n </p>\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\"\n ng-if=\"ctrl.image.source_type === \'url\' && ctrl.apiVersion < 2\">\n <div class=\"form-group\">\n <label class=\"control-label required\">\n <translate>Copy Data</translate>\n </label>\n <div class=\"form-field\">\n <div class=\"btn-group\">\n <label class=\"btn btn-default\"\n ng-repeat=\"option in ctrl.imageCopyOptions\"\n ng-model=\"ctrl.image.is_copying\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row form-group\" ng-if=\"ctrl.image.source_type === \'\'\">\n <div class=\"col-xs-9 col-sm-9\">\n <p class=\"help-block alert alert-danger\">\n <translate>The current Horizon settings indicate no valid\n image creation methods are available. Providing\n an image location and/or uploading from the\n local file system must be allowed to support\n image creation.</translate>\n </p>\n </div>\n </div>\n <div class=\"row form-group\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group required\">\n <label class=\"control-label required\" for=\"imageForm-container_format\" translate>Format</label><span class=\"hz-icon-required fa fa-asterisk\"></span>\n <select class=\"form-control switchable ng-pristine ng-untouched ng-valid\" ng-required=\"true\" id=\"imageForm-format\" name=\"format\" ng-model=\"ctrl.image_format\" ng-options=\"key as label for (key, label) in ctrl.imageFormats\" ng-change=\"ctrl.setFormats()\">\n </select>\n </div>\n </div>\n </div>\n </div>\n\n <h4 translate>Image Requirements</h4>\n\n <div class=\"selected-source\">\n <div class=\"row form-group\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\" for=\"imageForm-kernel\">\n <label class=\"control-label\">\n <translate>Kernel</translate>\n </label>\n <select class=\"form-control\" id=\"imageForm-kernel\" name=\"kernel\" ng-model=\"ctrl.image.kernel\">\n <option value=\"\" selected=\"selected\" translate>Choose an image</option>\n <option ng-repeat=\"kernel in ctrl.kernelImages\" value=\"{$ kernel.id $}\">{$ kernel.name $}</option>\n </select>\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\">\n <label class=\"control-label\" for=\"imageForm-ramdisk\">\n <translate>Ramdisk</translate>\n </label>\n <select class=\"form-control\" id=\"imageForm-ramdisk\" name=\"ramdisk\" ng-model=\"ctrl.image.ramdisk\">\n <option value=\"\" selected=\"selected\" translate>Choose an image</option>\n <option ng-repeat=\"ramdisk in ctrl.ramdiskImages\" value=\"{$ ramdisk.id $}\">{$ ramdisk.name $}</option>\n </select>\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\">\n <label class=\"control-label\" for=\"imageForm-architecture\">\n <translate>Architecture</translate>\n </label>\n <input id=\"imageForm-architecture\" name=\"architecture\"\n type=\"text\" class=\"form-control\"\n ng-model=\"ctrl.image.architecture\"\n ng-maxlength=\"ctrl.validationRules.fieldMaxLength\">\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-3\">\n <div class=\"form-group required\"\n ng-class=\"{\'has-error\':imageForm.min_disk.$invalid && imageForm.min_disk.$dirty}\">\n <label class=\"control-label\" for=\"imageForm-min_disk\">\n <translate>Minimum Disk (GB)</translate>\n </label>\n <input id=\"imageForm-min_disk\" name=\"min_disk\"\n type=\"number\" class=\"form-control\"\n ng-required=\"true\"\n ng-pattern=\"ctrl.validationRules.integer\"\n ng-model=\"ctrl.image.min_disk\"\n min=0>\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-3\">\n <div class=\"form-group required\"\n ng-class=\"{\'has-error\':imageForm.min_ram.$invalid && imageForm.min_ram.$dirty}\">\n <label class=\"control-label required\">\n <translate>Minimum RAM (MB)</translate>\n </label>\n <input id=\"imageForm-min_ram\" name=\"min_ram\"\n type=\"number\" class=\"form-control\"\n ng-required=\"true\"\n ng-pattern=\"ctrl.validationRules.integer\" ng-model=\"ctrl.image.min_ram\"\n min=0>\n </div>\n </div>\n </div>\n </div>\n\n <h4 translate>Image Sharing</h4>\n\n <div class=\"selected-source\">\n <div class=\"row\">\n <div class=\"col-xs-6 col-sm-6\" ng-show=\'ctrl.allowPublicizeImage\'>\n <div class=\"form-group\">\n <label class=\"control-label required\">\n <translate>Visibility</translate>\n </label>\n <div class=\"form-field\">\n <div class=\"btn-group\">\n <label class=\"btn btn-default\"\n ng-repeat=\"option in ctrl.imageVisibilityOptions\"\n ng-model=\"ctrl.image.visibility\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\">\n <label class=\"control-label required\">\n <translate>Protected</translate>\n </label>\n <div class=\"form-field\">\n <div class=\"btn-group\">\n <label class=\"btn btn-default\"\n ng-repeat=\"option in ctrl.imageProtectedOptions\"\n ng-model=\"ctrl.image.protected\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n </div>\n\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/steps/create-volume/create-volume.help.html","<dl>\n <dt translate>Name</dt>\n <dd translate>The name of the Volume.</dd>\n <dt translate>Description</dt>\n <dd translate>A description of the Volume.</dd>\n <dt translate>Type</dt>\n <dd translate>Select the volume type from the drop down menu. In an environment with multiple-storage back ends, the scheduler determines where to send the volume based on the volume type.</dd>\n <dt translate>Size</dt>\n <dd translate>The size of the volume, in gibibytes (GiB).</dd>\n <dt translate>Availability Zone</dt>\n <dd translate>Select the availability zone from the drop down menu.</dd>\n</dl>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/steps/create-volume/create-volume.html","<div ng-controller=\"horizon.app.core.images.steps.CreateVolumeController as createVolumeCtrl\">\n <p translate>Volumes are block devices that can be attached to instances.</p>\n <fieldset ng-disabled=\"createVolumeCtrl.volumeQuota.overMax\">\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <div class=\"form-group\">\n <label class=\"control-label\">\n <span translate>Name</span>\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input class=\"form-control\" type=\"text\" ng-required=\"true\" ng-model=\"createVolumeCtrl.volume.name\">\n </div>\n <div class=\"form-group\">\n <label class=\"control-label\">\n <span translate>Description</span>\n </label>\n <input class=\"form-control\" type=\"text\" ng-model=\"createVolumeCtrl.volume.description\">\n </div>\n <div class=\"form-group\">\n <label class=\"control-label\">\n <span translate>Use image as a source</span>\n </label>\n <input class=\"form-control\" type=\"text\" ng-model=\"createVolumeCtrl.sourceImage\" disabled>\n </div>\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <div class=\"form-group\">\n <label class=\"control-label\">\n <span translate>Type</span>\n </label>\n <select class=\"form-control\"\n ng-model=\"createVolumeCtrl.volumeType\"\n ng-options=\"volumeType as volumeType.name for volumeType in createVolumeCtrl.volumeTypes\">\n </select>\n </div>\n </div>\n <div class=\"col-xs-6\">\n <div class=\"form-group\">\n <label for=\"volume-size\" class=\"control-label\">\n <span translate>Size (GB)</span>\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input name=\"volume-size\" class=\"form-control\" id=\"volume-size\" type=\"number\" min=\"1\" ng-required=\"true\" ng-model=\"createVolumeCtrl.volume.size\">\n </div>\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"availability-zone\" class=\"control-label\">\n <span translate>Availability Zone</span>\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <select ng-options=\"item for item in createVolumeCtrl.availabilityZones\"\n class=\"form-control\"\n id=\"availability-zone\"\n ng-model=\"createVolumeCtrl.volume.availability_zone\"\n ng-required=\"true\">\n </select>\n </div>\n </div>\n <div class=\"col-xs-6\">\n <pie-chart chart-data=\"createVolumeCtrl.storageQuota\"></pie-chart>\n </div>\n <div class=\"col-xs-6\">\n <pie-chart chart-data=\"createVolumeCtrl.volumeQuota\"></pie-chart>\n <p translate>Volume Type Description:</p>\n <dl class>\n <dt>{$ createVolumeCtrl.volumeType.name $}</dt>\n <dd>{$ createVolumeCtrl.volumeType.description $}</dd>\n </dl>\n </div>\n </div>\n </fieldset>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/steps/edit-image/edit-image.help.html","<dl>\n <dt translate>Image Name</dt>\n <dd translate>The name of the image.</dd>\n <dt translate>Image Description</dt>\n <dd translate>A description of the image.</dd>\n <dt translate>Format</dt>\n <dd translate>Select the format of the disk from the drop down menu.</dd>\n <dt translate>Minimum Disk</dt>\n <dd translate>Amount of disk space in GB that is required to boot the image.</dd>\n <dt translate>Minimum RAM</dt>\n <dd translate>Amount of RAM in MB that is required to boot the image.</dd>\n <dt translate>Visibility</dt>\n <dd translate>The access permission for the image.</dd>\n <dt translate>Protected</dt>\n <dd translate>If set to \'Yes\' then the image cannot be deleted.</dd>\n</dl>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/steps/edit-image/edit-image.html","<div ng-controller=\"horizon.app.core.images.steps.EditImageController as ctrl\">\n\n <div class=\"content\">\n\n <h4 translate>Image Detail</h4>\n\n <div class=\"selected-source\">\n <div class=\"row form-group\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group required\"\n ng-class=\"{\'has-error\':imageForm.name.$invalid && imageForm.name.$dirty}\">\n <label class=\"control-label required\" for=\"imageForm-name\" translate>Image Name</label>\n <input required\n id=\"imageForm-name\" name=\"name\"\n type=\"text\" class=\"form-control\"\n ng-model=\"ctrl.image.name\"\n ng-maxlength=\"ctrl.validationRules.fieldMaxLength\"\n placeholder=\"{$ \'Enter an Image name\'|translate $}\">\n <p class=\"help-block\"\n ng-show=\"imageForm.name.$invalid && imageForm.name.$dirty\">\n <translate>An image name less than 256 characters is required.</translate>\n </p>\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\"\n ng-class=\"{\'has-error\':imageForm.description.$invalid && imageForm.description.$dirty}\">\n <label class=\"control-label\" for=\"imageForm-description\" translate>Image Description</label>\n <input id=\"imageForm-description\" name=\"description\"\n type=\"text\" class=\"form-control\"\n ng-model=\"ctrl.image.properties.description\"\n ng-maxlength=\"ctrl.validationRules.fieldMaxLength\"\n placeholder=\"{$ \'Enter an Image Description\'|translate $}\">\n <p class=\"help-block alert alert-danger\"\n ng-show=\"imageForm.description.$invalid && imageForm.description.$dirty\">\n <translate>An image description less than 256 characters is required.</translate>\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"selected-source clearfix\">\n <div class=\"row form-group\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group required\">\n <label class=\"control-label required\" for=\"imageForm-format\">\n <span translate>Format</span>\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <select class=\"form-control switchable ng-pristine ng-untouched ng-valid\" ng-required=\"true\" id=\"imageForm-format\" name=\"format\" ng-model=\"ctrl.image_format\" ng-options=\"key as label for (key, label) in ctrl.imageFormats\" ng-change=\"ctrl.setFormats()\">\n </select>\n </div>\n </div>\n </div>\n </div>\n\n <h4 translate>Image Requirements</h4>\n\n <div class=\"selected-source clearfix\">\n <div class=\"row form-group\">\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\" for=\"imageForm-kernel\">\n <label class=\"control-label\" translate>Kernel ID</label>\n <input id=\"imageForm-kernel\" name=\"kernel\"\n type=\"text\" class=\"form-control\"\n readonly=\"readonly\"\n ng-model=\"ctrl.image.kernel\">\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\">\n <label class=\"control-label\" for=\"imageForm-ramdisk\" translate>Ramdisk ID</label>\n <input id=\"imageForm-ramdisk\" name=\"ramdisk\"\n type=\"text\" class=\"form-control\"\n readonly=\"readonly\"\n ng-model=\"ctrl.image.ramdisk\">\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\">\n <label class=\"control-label\" for=\"imageForm-architecture\" translate>Architecture</label>\n <input id=\"imageForm-architecture\" name=\"architecture\"\n type=\"text\" class=\"form-control\"\n ng-model=\"ctrl.image.architecture\"\n readonly=\"readonly\">\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-3\">\n <div class=\"form-group required\"\n ng-class=\"{\'has-error\':imageForm.min_disk.$invalid && imageForm.min_disk.$dirty}\">\n <label class=\"control-label\" for=\"imageForm-min_disk\" translate>Minimum Disk (GB)</label>\n <input id=\"imageForm-min_disk\" name=\"min_disk\"\n type=\"number\" class=\"form-control\"\n ng-pattern=\"ctrl.validationRules.integer\" ng-model=\"ctrl.image.min_disk\"\n placeholder=\"{$ \'The minimum disk size required to boot the image. If unspecified, this value defaults to 0 (no minimum).\'|translate $}\">\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-3\">\n <div class=\"form-group required\"\n ng-class=\"{\'has-error\':imageForm.min_ram.$invalid && imageForm.min_ram.$dirty}\">\n <label class=\"control-label required\" translate>Minimum RAM (MB)</label>\n <input id=\"imageForm-min_ram\" name=\"min_ram\"\n type=\"number\" class=\"form-control\"\n ng-pattern=\"ctrl.validationRules.integer\" ng-model=\"ctrl.image.min_ram\"\n placeholder=\"{$ \'The minimum memory size required to boot the image. If unspecified, this value defaults to 0 (no minimum).\'|translate $}\">\n </div>\n </div>\n </div>\n </div>\n\n <h4 translate>Image Sharing</h4>\n\n <div class=\"selected-source clearfix\">\n <div class=\"row\">\n <div class=\"col-xs-6 col-sm-6\" hz-if-policies=\"ctrl.allowPublicizeImage\">\n <div class=\"form-group\">\n <label class=\"control-label required\" translate>Visibility</label>\n <div class=\"form-field\">\n <div class=\"btn-group\">\n <label class=\"btn btn-default\"\n ng-repeat=\"option in ctrl.imageVisibilityOptions\"\n ng-model=\"ctrl.image.visibility\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-xs-6 col-sm-6\">\n <div class=\"form-group\">\n <label class=\"control-label required\" translate>Protected</label>\n <div class=\"form-field\">\n <div class=\"btn-group\">\n <label class=\"btn btn-default\"\n ng-repeat=\"option in ctrl.imageProtectedOptions\"\n ng-model=\"ctrl.image.protected\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n </div>\n\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/steps/update-metadata/update-metadata.help.html","<div>\n <p translate>You can add arbitrary metadata to your image.</p>\n <p translate>\n Metadata is used to provide additional information about the\n image. Sometimes this information is only used for sorting and viewing.\n In some installations this information may affect how the instance is\n deployed or behaves.\n </p>\n <p translate>\n Metadata is a collection of key-value pairs associated with an instance.\n The maximum length for each metadata key and value is 255 characters.\n </p>\n</div>\n\n\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/images/steps/update-metadata/update-metadata.html","<div ng-controller=\"horizon.app.core.images.steps.UpdateMetadataController as metadataCtrl\">\n <div class=\"content\">\n <metadata-tree model=\"metadataCtrl.tree\" form=\"updateMetadataForm\"></metadata-tree>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/app/core/metadata/modal/modal.html","<div class=\"modal-header\">\n <button type=\"button\" class=\"close\" ng-click=\"modal.cancel()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-times\"></span>\n </button>\n <h3 class=\"modal-title\">\n <span translate ng-if=\"modal.resourceType===\'aggregate\'\">Update Aggregate Metadata</span>\n <span translate ng-if=\"modal.resourceType===\'flavor\'\">Update Flavor Metadata</span>\n <span translate ng-if=\"modal.resourceType===\'image\'\">Update Image Metadata</span>\n <span translate ng-if=\"modal.resourceType===\'instance\'\">Update Instance Metadata</span>\n <span translate ng-if=\"modal.resourceType===\'volume\'\">Update Volume Metadata</span>\n <span translate ng-if=\"modal.resourceType===\'volume_snapshot\'\">Update Volume Snapshot Metadata</span>\n <span translate ng-if=\"modal.resourceType===\'volume_type\'\">Update Volume Type Metadata</span>\n </h3>\n</div>\n<div class=\"modal-body\">\n <metadata-tree model=\"modal.tree\" form=\"form\"></metadata-tree>\n</div>\n<div class=\"modal-footer\">\n <button class=\"btn btn-default cancel\" ng-click=\"modal.cancel()\">\n <span class=\"fa fa-close\"></span>\n <span translate>Cancel</span>\n </button>\n <button class=\"btn btn-primary\"\n ng-click=\"modal.save()\"\n ng-disabled=\"form.$invalid\">\n <span class=\"fa\" ng-class=\"modal.saving ? \'fa-spinner fa-spin\' : \'fa-save\'\"></span>\n <span translate>Save</span>\n </button>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/auth/login/login.regular.mock.html","<form>\n <p class=\"help_text\">Some help text.</p>\n <fieldset hz-login-finder>\n <div class=\"form-group\"><input id=\"id_username\"></div>\n <div class=\"form-group\"><input id=\"id_password\"></div>\n </fieldset>\n</form>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/auth/login/login.websso.mock.html","<form>\n <p class=\"help_text\">Some help text.</p>\n <fieldset hz-login-finder>\n <div>\n <select id=\"id_auth_type\">\n <option value=\"credentials\">Credentials</option>\n <option value=\"oidc\">OpenID Connect</option>\n </select>\n </div>\n <div class=\"form-group\"><input id=\"id_username\"></div>\n <div class=\"form-group\"><input id=\"id_password\"></div>\n </fieldset>\n</form>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/identity/domains/details/drawer.html","<hz-resource-property-list\n resource-type-name=\"OS::Keystone::Domain\"\n item=\"item\"\n property-groups=\"[[\'id\', \'name\'], [\'description\', \'enabled\']]\">\n</hz-resource-property-list>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/identity/domains/details/overview.html","<div ng-controller=\"DomainOverviewController as ctrl\">\n <div class=\"row\">\n <div class=\"col-md-6 detail\">\n <h3 translate>Domain</h3>\n <hr>\n <hz-resource-property-list\n resource-type-name=\"OS::Keystone::Domain\"\n cls=\"dl-horizontal\"\n item=\"ctrl.domain\"\n property-groups=\"[[\'id\', \'name\', \'description\', \'enabled\']]\">\n </hz-resource-property-list>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/identity/domains/panel.html","<hz-resource-panel resource-type-name=\"OS::Keystone::Domain\">\n <hz-resource-table resource-type-name=\"OS::Keystone::Domain\">\n </hz-resource-table>\n</hz-resource-panel>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/identity/roles/panel.html","<hz-resource-panel resource-type-name=\"OS::Keystone::Role\">\n <hz-resource-table resource-type-name=\"OS::Keystone::Role\">\n </hz-resource-table>\n</hz-resource-panel>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/identity/users/details/drawer.html","<hz-resource-property-list\n resource-type-name=\"OS::Keystone::User\"\n item=\"item\"\n property-groups=\"[[\'domain_id\'],\n [\'default_project_id\'],\n [\'description\']]\">\n</hz-resource-property-list>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/identity/users/details/overview.html","<div ng-controller=\"UserOverviewController as ctrl\">\n <div class=\"row\">\n <div class=\"col-md-6 detail\">\n <h3 translate>User</h3>\n <hr>\n <hz-resource-property-list\n resource-type-name=\"OS::Keystone::User\"\n cls=\"dl-horizontal\"\n item=\"ctrl.user\"\n property-groups=\"[[\n \'domain_id\', \'domain_name\', \'id\', \'name\', \'description\',\n \'email\', \'enabled\', \'default_project_id\', \'project_name\']]\">\n </hz-resource-property-list>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/identity/users/panel.html","<hz-resource-panel resource-type-name=\"OS::Keystone::User\">\n <hz-resource-table resource-type-name=\"OS::Keystone::User\">\n </hz-resource-table>\n</hz-resource-panel>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/containers.html","<div id=\"containers_wrapper\" ng-controller=\"horizon.dashboard.project.containers.ContainersController as cc\" class=\"row\">\n <div class=\"col-md-3\">\n <div class=\"row hz-container-actions\">\n <div class=\"col-xs-12 hz-container-action\">\n <button type=\"button\" class=\"btn btn-default\" ng-click=\"cc.createContainer()\">\n <span class=\"fa fa-plus\"></span>\n <translate>Container</translate>\n </button>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-xs-12\">\n <uib-accordion class=\"hz-container-accordion\">\n <div uib-accordion-group ng-repeat=\"container in cc.model.containers\"\n ng-class=\"{\'panel-primary\': container.name === cc.model.container.name}\"\n class=\"panel-default\"\n ng-click=\"cc.selectContainer(container)\">\n <uib-accordion-heading>\n <div ng-click=\"cc.selectContainer(container)\">\n <span class=\"hz-container-title truncate\"\n uib-tooltip=\"{$ container.name $}\"\n uib-tooltip-placement=\"top\"\n uib-tooltip-popup-delay=\"1000\"\n uib-tooltip-trigger=\"mouseenter\">\n {$ container.name $}\n </span>\n <span uib-tooltip=\"{$ \'Delete Container\' | translate $}\"\n uib-tooltip-placement=\"top\"\n uib-tooltip-trigger=\"mouseenter\"\n class=\"fa fa-trash hz-container-delete-icon\"\n ng-if=\"container.name === cc.model.container.name\"\n ng-click=\"cc.deleteContainer(container)\"></span>\n </div>\n </uib-accordion-heading>\n\n <div ng-if=\"!container.is_fetched\" class=\"horizon-loading-bar container-pending-bar\">\n <div class=\"progress progress-striped active\">\n <div class=\"progress-bar\"></div>\n </div>\n </div>\n <ul ng-if=\"container.is_fetched\" class=\"hz-object-detail list-unstyled\">\n <li class=\"hz-object-count row\">\n <span class=\"hz-object-label col-lg-7 col-md-12\" translate>Object Count</span>\n <span class=\"hz-object-val col-lg-5 col-md-12\">{$container.count$}</span>\n </li>\n <li class=\"hz-object-size row\">\n <span class=\"hz-object-label col-lg-7 col-md-12\" translate>Size</span>\n <span class=\"hz-object-val col-lg-5 col-md-12\">{$container.bytes | bytes$}</span>\n </li>\n <li class=\"hz-object-timestamp row\">\n <span class=\"hz-object-label col-lg-7 col-md-12\" translate>Date Created</span>\n <span class=\"hz-object-val col-lg-5 col-md-12\">{$container.timestamp | date$}</span>\n </li>\n <li class=\"hz-object-link row\">\n <div class=\"themable-checkbox col-lg-7 col-md-12\">\n <input type=\"checkbox\" id=\"id_access\" ng-model=\"container.is_public\"\n ng-if=\"container.name === cc.model.container.name\"\n ng-click=\"cc.toggleAccess(container)\">\n <label class=\"hz-object-label\" for=\"id_access\" translate>Public Access</label>\n </div>\n <span class=\"hz-object-val col-lg-5 col-md-12\">\n <a href=\"{$ container.public_url $}\" target=\"_blank\"\n ng-show=\"container.public_url\" translate>Link</a>\n <span ng-hide=\"container.public_url\" translate>Disabled</span>\n </span>\n </li>\n </ul>\n </div uib-accordion-group>\n </uib-accordion>\n </div>\n </div>\n </div>\n\n <div class=\"col-md-9\">\n <div ng-view class=\"objects_wrapper\"></div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/create-container.help.html","<div class=\"col-sm-6\">\n <p translate>\n A container is a storage compartment for your data and provides a way for\n you to organize your data. You can think of a container as a folder in\n Windows® or a directory in UNIX®. The primary difference between a\n container and these other file system concepts is that containers cannot be\n nested. You can, however, create an unlimited number of containers within\n your account. Data must be stored in a container so you must have at least\n one container defined in your account prior to uploading data.\n </p>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/create-folder-modal.html","<div class=\"modal-header\">\n <button type=\"button\" class=\"close\" ng-click=\"$dismiss()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-times\"></span>\n </button>\n <div class=\"h3 modal-title\">\n <translate>Create Folder In: {$ ctrl.model.container.name $}</translate>\n <span ng-if=\"ctrl.model.folder\">: {$ ctrl.model.folder $}</span>\n </div>\n</div>\n\n<div ng-form=\"uploadForm\">\n <div class=\"modal-body\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <fieldset>\n <div class=\"form-group required\">\n <label class=\"control-label required\" for=\"id_name\" translate>Folder Name</label>\n <div>\n <input class=\"form-control\" id=\"id_name\" maxlength=\"255\" autofocus required\n name=\"name\" ng-model=\"ctrl.model.name\" type=\"text\">\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"col-sm-6\">\n <p translate>\n Note: Delimiters (\'{$ ctrl.model.DELIMETER $}\') are allowed in the\n folder name to create deep folders.\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-default\" ng-click=\"$dismiss()\">\n <span class=\"fa fa-close\"></span>\n <translate>Cancel</translate>\n </button>\n <button class=\"btn btn-primary\"\n ng-disabled=\"uploadForm.$invalid || uploadForm.$pristine\"\n ng-click=\"$close(ctrl.model.name)\">\n <span class=\"fa fa-plus\"></span>\n <translate>Create Folder</translate>\n </button>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/delete-objects-modal.html","<div class=\"modal-header\">\n <a href=\"\" class=\"close\" ng-click=\"$dismiss()\">\n <span class=\"fa fa-times\"></span>\n </a>\n <div class=\"h3 modal-title\" translate>\n Delete Files in {$ ctrl.model.container.name $}\n </div>\n</div>\n\n<div class=\"modal-body\">\n <p>\n <span ng-if=\"ctrl.model.mode === \'discovery\'\" translate>\n Collecting information for deletion:\n </span>\n <span ng-if=\"ctrl.model.mode === \'deletion\'\" translate>Deleting:</span>\n <translate>\n {$ ctrl.model.counted.files $} files in\n {$ ctrl.model.counted.folders $} folders.\n </translate>\n </p>\n <p ng-if=\"ctrl.model.mode === \'deletion\' && ctrl.model.deleted.failures\"\n class=\"text-danger\" translate>\n Encountered {$ ctrl.model.deleted.failures $} failures.\n </p>\n <uib-progressbar ng-if=\"ctrl.model.mode === \'deletion\'\"\n max=\"ctrl.model.counted.files + ctrl.model.counted.folders\"\n value=\"ctrl.model.deleted.files + ctrl.model.deleted.folders + ctrl.model.deleted.failures\"></uib-progressbar>\n</div>\n\n<div class=\"modal-footer\">\n <button class=\"btn btn-default\" ng-click=\"ctrl.dismiss()\" ng-if=\"ctrl.model.mode === \'discovery\'\">\n <span class=\"fa fa-close\"></span>\n <translate>Cancel</translate>\n </button>\n <button class=\"btn btn-primary\" ng-disabled=\"ctrl.model.running\" ng-click=\"ctrl.action()\">\n <translate ng-if=\"ctrl.model.mode === \'discovery\'\">Delete</translate>\n <translate ng-if=\"ctrl.model.mode === \'deletion\'\">OK</translate>\n </button>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/edit-object-modal.html","<div class=\"modal-header\">\n <button type=\"button\" class=\"close\" ng-click=\"$dismiss()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-times\"></span>\n </button>\n <div class=\"h3 modal-title\">\n <translate>Edit File: {$ ctrl.model.container $} : {$ ctrl.model.path $}</translate>\n </div>\n</div>\n\n<div ng-form=\"editForm\">\n <div class=\"modal-body\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <fieldset>\n <div class=\"form-group\">\n <label class=\"control-label required\" for=\"id_object_file\" translate>\n New File Contents\n </label>\n <div>\n <input id=\"id_object_file\" type=\"file\" name=\"file\" required\n ng-model=\"ctrl.model.view_file\" on-file-change=\"ctrl.changeFile\" />\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-default\" ng-click=\"$dismiss()\">\n <span class=\"fa fa-close\"></span>\n <translate>Cancel</translate>\n </button>\n <button class=\"btn btn-primary\" ng-click=\"$close(ctrl.model)\"\n ng-disabled=\"editForm.$invalid\">\n <span class=\"fa fa-upload\"></span>\n <translate>Edit File</translate>\n </button>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/object-details-modal.html","<div class=\"modal-content ui-draggable\">\n <div class=\"modal-header ui-draggable-handle\">\n <button type=\"button\" class=\"close\" ng-click=\"$dismiss()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-times\"></span>\n </button>\n <div class=\"h3 modal-title\" translate>Object Details</div>\n </div>\n <div class=\"modal-body\">\n <div class=\"info detail\">\n <dl class=\"dl-horizontal\">\n <dt translate>Name</dt>\n <dd>{$ctrl.context.name$}</dd>\n <dt translate>Hash</dt>\n <dd>{$ctrl.context.etag$}</dd>\n <dt translate>Content Type</dt>\n <dd>{$ctrl.context.content_type$}</dd>\n <dt translate>Timestamp</dt>\n <dd>{$ctrl.context.timestamp | date:\'medium\'$}</dd>\n <dt translate>Size</dt>\n <dd>{$ctrl.context.bytes | bytes$}</dd>\n </dl>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-default\" ng-click=\"$dismiss()\">\n <span class=\"fa fa-close\"></span>\n <translate>Close</translate>\n </button>\n </div>\n</div>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/objects.html","<div ng-controller=\"horizon.dashboard.project.containers.ObjectsController as oc\">\n <ol class=\"breadcrumb hz-object-path\">\n <li class=\"h4\">\n <a ng-href=\"{$ oc.containerURL $}\">{$ oc.model.container.name $}</a>\n </li>\n <li ng-repeat=\"crumb in oc.breadcrumbs track by $index\" ng-class=\"{\'active\':$last}\">\n <span>\n <a ng-href=\"{$ crumb.url $}\" ng-if=\"!$last\">{$ crumb.label $}</a>\n <span ng-if=\"$last\">{$ crumb.label $}</span>\n </span>\n </li>\n </ol>\n\n <hz-dynamic-table\n config=\"oc.tableConfig\"\n items=\"oc.model.objects\"\n table=\"oc\"\n filter-facets=\"oc.filterFacets\"\n batch-actions=\"oc.batchActions\"\n item-actions=\"oc.rowActions\"\n result-handler=\"oc.actionResultHandler\">\n </hz-dynamic-table>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/select-container.html","<div>\n <div class=\"well text-center h4 hz-object-empty\">\n <span class=\"fa fa-info-circle\"></span>\n <span translate>Select a container to browse.</span>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/containers/upload-object-modal.html","<div class=\"modal-header\">\n <button type=\"button\" class=\"close\" ng-click=\"$dismiss()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-times\"></span>\n </button>\n <div class=\"h3 modal-title\">\n <translate>Upload File To: {$ ctrl.model.container.name $}</translate>\n <span ng-if=\"ctrl.model.folder\">: {$ ctrl.model.folder $}</span>\n </div>\n</div>\n\n<div ng-form=\"ctrl.form\">\n <div class=\"modal-body\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <fieldset>\n <div class=\"form-group \">\n <label class=\"control-label required\" for=\"id_object_file\" translate>File</label>\n <div>\n <input id=\"id_object_file\" type=\"file\" name=\"file\" required\n ng-model=\"ctrl.model.view_file\" on-file-change=\"ctrl.changeFile\">\n </div>\n </div>\n <div class=\"form-group required\"\n ng-class=\"{\'has-error\': ctrl.form.name.$dirty && ctrl.form.name.$invalid}\">\n <label class=\"control-label required\" for=\"id_name\" translate>File Name</label>\n <div>\n <input class=\"form-control\" type=\"text\" id=\"id_name\" maxlength=\"255\" name=\"name\"\n ng-model=\"ctrl.model.name\" required object-name-exists />\n <span class=\"help-block text-info\" ng-show=\"ctrl.form.name.$pending.exists\" translate>\n Checking if this name is used...\n </span>\n <span class=\"help-block text-danger\" ng-show=\"ctrl.form.name.$error.exists\" translate>\n This name already exists.\n </span>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"col-sm-6\">\n <p translate>\n Note: Delimiters (\'{$ ctrl.model.DELIMETER $}\') are allowed in the\n file name to place the new file into a folder that will be created\n when the file is uploaded (to any depth of folders).\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-default\" ng-click=\"$dismiss()\">\n <span class=\"fa fa-close\"></span>\n <translate>Cancel</translate>\n </button>\n <button class=\"btn btn-primary\" ng-click=\"$close(ctrl.model)\"\n ng-disabled=\"ctrl.form.$invalid\">\n <span class=\"fa fa-upload\"></span>\n <translate>Upload File</translate>\n </button>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/configuration/configuration.help.html","<div>\n <p translate>Custom scripts are attached to instances to perform specific actions when the instance is launched. For example, if you are unable to install <samp>cloud-init</samp> inside a guest operating system, you can use a custom script to get a public key and add it to the user account.</p>\n <p translate>Type your script directly into the Customization Script field. If your browser supports the HTML5 File API, you may choose to load your script from a file. The size of your script should not exceed 16 Kb.</p>\n <p translate>An advanced option available when launching an instance is disk partitioning. There are two disk partition options. Selecting <b>Automatic</b> resizes the disk and sets it to a single partition. Selecting <b>Manual</b> allows you to create multiple partitions on the disk.</p>\n <p translate>Check the <b>Configuration Drive</b> box if you want to write metadata to a special configuration drive. When the instance boots, it attaches to the <b>Configuration Drive</b> and accesses the metadata.</p>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/configuration/configuration.html","<div ng-controller=\"LaunchInstanceConfigurationController as config\">\n <p class=\"step-description\" translate>\n You can customize your instance after it has launched using the options available here.\n \"Customization Script\" is analogous to \"User Data\" in other systems.\n </p>\n\n <load-edit config=\"config\"\n user-input=\"model.newInstanceSpec\"\n key=\"user_data\">\n </load-edit>\n\n <div hz-if-nova-extensions=\'[\"DiskConfig\"]\'>\n <div class=\"form-group\">\n <label for=\"disk-partition\" translate>\n Disk Partition\n </label>\n <select class=\"form-control\"\n id=\"disk-partition\"\n ng-model=\"model.newInstanceSpec.disk_config\"\n ng-options=\"option.value as option.text for option in config.diskConfigOptions\">\n </select>\n </div>\n </div>\n\n <div hz-if-nova-extensions=\'[\"ConfigDrive\"]\'>\n <div class=\"form-group\">\n <div class=\"themable-checkbox\">\n <input type=\"checkbox\"\n id=\"config-drive\"\n ng-model=\"model.newInstanceSpec.config_drive\">\n <label for=\"config-drive\">\n <span translate>Configuration Drive</span>\n </label>\n </div>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/details/details.help.html","<p translate>An instance name is required and used to help you uniquely identify your instance in the dashboard.</p>\n\n<p translate>If you select an availability zone and plan to use the \'boot from volume\' option in the Source step, make sure that the availability zone you select for the instance is the same availability zone where your bootable volume resides.</p>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/details/details.html","<div ng-controller=\"LaunchInstanceDetailsController as ctrl\">\n <p class=\"step-description\" translate>Please provide the initial hostname for the instance, the availability zone where it will be deployed, and the instance count.\n Increase the Count to create multiple instances with the same settings.</p>\n\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-8\">\n <div class=\"form-group\"\n ng-class=\"{ \'has-error\': launchInstanceDetailsForm.name.$invalid && launchInstanceDetailsForm.name.$dirty }\">\n <label for=\"name\" class=\"control-label\">\n <translate>Instance Name</translate>\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input id=\"name\" name=\"name\" type=\"text\" class=\"form-control\"\n ng-model=\"model.newInstanceSpec.name\" ng-required=\"true\">\n\n <span class=\"help-block\"\n ng-show=\"launchInstanceDetailsForm.name.$invalid && launchInstanceDetailsForm.name.$dirty\">\n {$ ctrl.instanceNameError $}\n </span>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate for=\"availability-zone\">Availability Zone</label>\n <div class=\"alert alert-warning\"\n ng-if=\"model.availabilityZones.length === 0\"\n translate>There are no Availability Zones.</div>\n <select ng-if=\"model.availabilityZones.length !== 0\"\n class=\"form-control\"\n id=\"availability-zone\"\n ng-options=\"zone.value as zone.label for zone in model.availabilityZones\"\n ng-model=\"model.newInstanceSpec.availability_zone\">\n </select>\n </div>\n\n <div class=\"form-group\" ng-class=\"{ \'has-error\': launchInstanceDetailsForm.count.$invalid }\">\n <label class=\"control-label\" for=\"instance-count\">\n <translate>Count</translate>\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input id=\"instance-count\" name=\"count\" type=\"number\" class=\"form-control\" min=\"1\"\n ng-model=\"model.newInstanceSpec.instance_count\"\n ng-required=\"true\" ng-pattern=\"/^[0-9]+$/\"\n validate-number-min=\"1\"\n validate-number-max=\"{$ ctrl.maxInstanceCount $}\">\n <span class=\"help-block\" ng-show=\"launchInstanceDetailsForm.count.$invalid\">\n {$ launchInstanceDetailsForm[\'instance-count\'].$error.validateNumberMax ? ctrl.instanceCountMaxError : ctrl.instanceCountError $}\n </span>\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-4\">\n <pie-chart chart-data=\"ctrl.instanceStats\" chart-settings=\"ctrl.chartSettings\"></pie-chart>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/flavor/flavor.help.html","<div>\n <p translate>The flavor you select for an instance determines the amount of compute, storage and memory resources that will be carved out for the instance.\n </p>\n <p translate>The flavor you select must have enough resources allocated to support the type of instance you are trying to create. Flavors that do not provide enough resources for your instance are identified on the <b>Available</b> table with a yellow warning icon.\n </p>\n <p translate>Administrators are responsible for creating and managing flavors. A custom flavor can be created for you or for a specific project where it is shared with the users assigned to that project. If you need a custom flavor, contact your administrator.\n </p>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/flavor/flavor.html","<!--\n (c) Copyright 2015 Hewlett-Packard Development Company, L.P.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<div ng-controller=\"LaunchInstanceFlavorController as selectFlavorCtrl\">\n <p class=\"step-description\" translate>\n Flavors manage the sizing for the compute, memory and storage capacity of the instance.\n </p>\n <transfer-table\n tr-model=\"selectFlavorCtrl.transferTableModel\"\n limits=\"selectFlavorCtrl.allocationLimits\">\n <allocated ng-model=\"selectFlavorCtrl.allocatedFlavorFacades.length\"\n validate-number-min=\"1\" name=\"allocated-flavor\">\n <table st-magic-search st-table=\"selectFlavorCtrl.displayedAllocatedFlavorFacades\"\n st-safe-src=\"selectFlavorCtrl.allocatedFlavorFacades\"\n hz-table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr>\n <th class=\"expander\"></th>\n <th st-sort=\"name\" class=\"rsp-p1\" translate>Name</th>\n <th st-sort=\"vcpus\" class=\"rsp-p1\" translate>VCPUS</th>\n <th st-sort=\"ram\" class=\"rsp-p1\" translate>RAM</th>\n <th st-sort=\"totalDisk\" class=\"rsp-p1\" translate>Total Disk</th>\n <th st-sort=\"rootDisk\" class=\"rsp-p2\" translate>Root Disk</th>\n <th st-sort=\"ephemeralDisk\" class=\"rsp-p2\" translate>Ephemeral Disk</th>\n <th st-sort=\"isPublic\" class=\"rsp-p1\" translate>Public</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"selectFlavorCtrl.displayedAllocatedFlavorFacades.length === 0\">\n <td colspan=\"10\">\n <div class=\"no-rows-help\">\n {$ ::trCtrl.helpText.noneAllocText $}\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"item in selectFlavorCtrl.displayedAllocatedFlavorFacades track by item.id\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ ::expandDetailsText $}\"></span>\n </td>\n <td class=\"rsp-p1 word-break\">{$ ::item.name $}</td>\n <td class=\"rsp-p1\">\n <span class=\"invalid fa fa-exclamation-triangle\"\n ng-show=\"item.errors.vcpus\"\n popover=\"{$ item.errors.vcpus $}\"\n popover-placement=\"top\" popover-append-to-body=\"true\"\n popover-trigger=\"mouseenter mouseleave\"/>\n {$ ::item.vcpus $}\n </td>\n <td class=\"rsp-p1\">\n <span class=\"invalid fa fa-exclamation-triangle\"\n ng-show=\"item.errors.ram\"\n popover=\"{$ item.errors.ram $}\"\n popover-placement=\"top\" popover-append-to-body=\"true\"\n popover-trigger=\"mouseenter mouseleave\"/>\n {$ ::item.ram | mb $}\n </td>\n <td class=\"rsp-p1\">{$ ::item.totalDisk | gb $}</td>\n <td class=\"rsp-p2\">\n <span class=\"invalid fa fa-exclamation-triangle\"\n ng-show=\"item.errors.disk\"\n popover=\"{$ item.errors.disk $}\"\n popover-placement=\"top\" popover-append-to-body=\"true\"\n popover-trigger=\"mouseenter mouseleave\"/>\n {$ ::item.rootDisk | gb $}\n </td>\n <td class=\"rsp-p2\">{$ ::item.ephemeralDisk | gb $}</td>\n <td class=\"rsp-p1\">{$ ::item.isPublic | yesno $}</td>\n <td class=\"action-col\">\n <action-list button-tooltip=\"item.disabledMessage\"\n bt-model=\"tooltipModel\"\n bt-disabled=\"!isAvailableTable || item.enabled\"\n warning-classes=\"\'invalid\'\">\n <notifications>\n <span class=\"fa fa-exclamation-triangle invalid\"\n ng-show=\"isAvailableTable && !item.enabled\"></span>\n </notifications>\n <action action-classes=\"\'btn btn-sm btn-default\'\"\n callback=\"trCtrl.deallocate\"\n item=\"item\"\n disabled=\"isAvailableTable && !item.enabled\">\n <span class=\"fa fa-arrow-down\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\">\n <td colspan=\"9\" class=\"detail\">\n <span class=\"h5\" translate>Impact on your quota</span>\n <div class=\"row\">\n <div class=\"col-xs-4\">\n <pie-chart chart-data=\"item.instancesChartData\"\n chart-settings=\"chartSettings\"></pie-chart>\n </div>\n <div class=\"col-xs-4\">\n <pie-chart chart-data=\"item.vcpusChartData\"\n chart-settings=\"chartSettings\"></pie-chart>\n </div>\n <div class=\"col-xs-4\">\n <pie-chart chart-data=\"item.ramChartData\"\n chart-settings=\"chartSettings\"></pie-chart>\n </div>\n </div>\n <div ng-if=\"selectFlavorCtrl.metadataDefs.flavor\">\n <div class=\"row\" ng-if=\"item.extras\">\n <div class=\"col-sm-12\">\n <metadata-display\n available=\"::selectFlavorCtrl.metadataDefs.flavor\"\n existing=\"::item.extras\">\n </metadata-display>\n </div>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </allocated>\n <available>\n<hz-magic-search-context filter-facets=\"selectFlavorCtrl.filterFacets\">\n <hz-magic-search-bar>\n </hz-magic-search-bar>\n <table st-magic-search st-table=\"selectFlavorCtrl.displayedAvailableFlavorFacades\"\n st-safe-src=\"selectFlavorCtrl.availableFlavorFacades\"\n hz-table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr>\n <th class=\"expander\"></th>\n <th st-sort=\"name\" class=\"rsp-p1\" translate>Name</th>\n <th st-sort=\"vcpus\" class=\"rsp-p1\" translate>VCPUS</th>\n <th st-sort-default st-sort=\"ram\" class=\"rsp-p1\" translate>RAM</th>\n <th st-sort=\"totalDisk\" class=\"rsp-p1\" translate>Total Disk</th>\n <th st-sort=\"rootDisk\" class=\"rsp-p2\" translate>Root Disk</th>\n <th st-sort=\"ephemeralDisk\" class=\"rsp-p2\" translate>Ephemeral Disk</th>\n <th st-sort=\"isPublic\" class=\"rsp-p1\" translate>Public</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"selectFlavorCtrl.displayedAvailableFlavorFacades.length === 0\">\n <td colspan=\"10\">\n <div class=\"no-rows-help\">\n {$ ::trCtrl.helpText.noneAvailText $}\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"item in selectFlavorCtrl.displayedAvailableFlavorFacades track by item.id\" ng-if=\"!trCtrl.allocatedIds[item.id]\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ ::expandDetailsText $}\"></span>\n </td>\n <td class=\"rsp-p1 word-break\">{$ ::item.name $}</td>\n <td class=\"rsp-p1\">\n <span class=\"invalid fa fa-exclamation-triangle\"\n ng-show=\"item.errors.vcpus\"\n popover=\"{$ item.errors.vcpus $}\"\n popover-placement=\"top\" popover-append-to-body=\"true\"\n popover-trigger=\"mouseenter mouseleave\"/>\n {$ ::item.vcpus $}\n </td>\n <td class=\"rsp-p1\">\n <span class=\"invalid fa fa-exclamation-triangle\"\n ng-show=\"item.errors.ram\"\n popover=\"{$ item.errors.ram $}\"\n popover-placement=\"top\" popover-append-to-body=\"true\"\n popover-trigger=\"mouseenter mouseleave\"/>\n {$ ::item.ram | mb $}\n </td>\n <td class=\"rsp-p1\">{$ ::item.totalDisk | gb $}</td>\n <td class=\"rsp-p2\">\n <span class=\"invalid fa fa-exclamation-triangle\"\n ng-show=\"item.errors.disk\"\n popover=\"{$ item.errors.disk $}\"\n popover-placement=\"top\" popover-append-to-body=\"true\"\n popover-trigger=\"mouseenter mouseleave\"/>\n {$ ::item.rootDisk | gb $}\n </td>\n <td class=\"rsp-p2\">{$ ::item.ephemeralDisk | gb $}</td>\n <td class=\"rsp-p1\">{$ ::item.isPublic | yesno $}</td>\n <td class=\"action-col\">\n <action-list button-tooltip=\"item.disabledMessage\"\n bt-model=\"tooltipModel\"\n bt-disabled=\"!isAvailableTable || item.enabled\"\n warning-classes=\"\'invalid\'\">\n <notifications>\n <span class=\"fa fa-exclamation-triangle invalid\"\n ng-show=\"isAvailableTable && !item.enabled\"></span>\n </notifications>\n <action action-classes=\"\'btn btn-sm btn-default\'\"\n callback=\"trCtrl.allocate\"\n item=\"item\"\n disabled=\"isAvailableTable && !item.enabled\">\n <span class=\"fa fa-arrow-up\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\" ng-if=\"!trCtrl.allocatedIds[item.id]\">\n <td colspan=\"9\" class=\"detail\">\n <span class=\"h5\" translate>Impact on your quota</span>\n <div class=\"row\">\n <div class=\"col-xs-4\">\n <pie-chart chart-data=\"item.instancesChartData\"\n chart-settings=\"chartSettings\"></pie-chart>\n </div>\n <div class=\"col-xs-4\">\n <pie-chart chart-data=\"item.vcpusChartData\"\n chart-settings=\"chartSettings\"></pie-chart>\n </div>\n <div class=\"col-xs-4\">\n <pie-chart chart-data=\"item.ramChartData\"\n chart-settings=\"chartSettings\"></pie-chart>\n </div>\n </div>\n <div ng-if=\"selectFlavorCtrl.metadataDefs.flavor\">\n <div class=\"row\" ng-if=\"item.extras\">\n <div class=\"col-sm-12\">\n <metadata-display\n available=\"::selectFlavorCtrl.metadataDefs.flavor\"\n existing=\"::item.extras\">\n </metadata-display>\n </div>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</hz-magic-search-context>\n </available>\n </transfer-table>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/keypair/create-keypair.html","<div class=\"ng-wizard\" ng-form=\"wizardForm\">\n\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" ng-click=\"ctrl.cancel()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-close\"></span>\n </button>\n <span translate class=\"h4 modal-title\">Create Key Pair</span>\n </div>\n\n <div class=\"modal-body\">\n <p translate>\n Key Pairs are how you login to your instance after it is launched.\n Choose a key pair name you will recognize.\n Names may only include alphanumeric characters, spaces, or dashes.\n </p>\n\n <div class=\"form-group\" ng-class=\"{\'has-error\': (ctrl.doesKeypairExist() || wizardForm.$invalid) && wizardForm.$dirty }\">\n <label class=\"control-label\" for=\"keypair-name\" translate>\n Key Pair Name\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input class=\"form-control\" name=\"name\"\n id=\"keypair-name\"\n ng-model=\"ctrl.keypair\"\n ng-required=\"true\"\n ng-pattern=\"/^[A-Za-z0-9 -]+$/\">\n <span class=\"help-block\"\n ng-show=\"(ctrl.doesKeypairExist() || wizardForm.$invalid) && wizardForm.$dirty\">\n {$ ctrl.keypairExistsError $}\n </span>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-default pull-left\" ng-click=\"ctrl.cancel()\">\n <span class=\"fa fa-close\"></span>\n <translate>Cancel</translate>\n </button>\n\n <button class=\"btn btn-primary\"\n ng-click=\"ctrl.submit()\" ng-disabled=\"wizardForm.$invalid || ctrl.doesKeypairExist()\">\n <translate>Create Keypair</translate>\n </button>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/keypair/import-keypair.html","<div class=\"ng-wizard\" ng-form=\"wizardForm\">\n\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" ng-click=\"ctrl.cancel()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-close\"></span>\n </button>\n <span translate class=\"h4 modal-title\">Import Key Pair</span>\n </div>\n\n <div class=\"modal-body\">\n <p translate>\n Key Pairs are how you login to your instance after it is launched.\n Choose a key pair name you will recognize and paste your SSH public key into the\n space provided.\n </p>\n\n <div class=\"form-group\">\n <label for=\"keypair-name\" translate>\n Key Pair Name\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input class=\"form-control\" name=\"name\" id=\"keypair-name\"\n ng-model=\"ctrl.model.name\"\n ng-required=\"true\"/>\n </div>\n\n <div class=\"form-group\">\n <label for=\"public-key\" translate>\n Public Key\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <textarea class=\"form-control\" id=\"public-key\" name=\"key\" rows=\"15\"\n ng-model=\"ctrl.model.public_key\"\n ng-required=\"true\">\n </textarea>\n </div>\n\n </div>\n\n <div class=\"modal-footer\">\n <button class=\"btn btn-default pull-left\" ng-click=\"ctrl.cancel()\">\n <span class=\"fa fa-close\"></span>\n <translate>Cancel</translate>\n </button>\n <button class=\"btn btn-primary\"\n ng-click=\"ctrl.submit()\" ng-disabled=\"wizardForm.$invalid\">\n <span class=\"fa fa-upload\"></span>\n <translate>Import Key Pair</translate>\n </button>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/keypair/keypair-details.html","<dl class=\"key-pair-details\">\n <dt translate>Public Key</dt>\n <dd>\n <pre><code>{$ item.public_key $}</code></pre>\n </dd>\n</dl>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/keypair/keypair.help.html","<p translate>\n There are two ways to generate a key pair. From a Linux system,\n generate the key pair with the <samp>ssh-keygen</samp> command:\n</p>\n<p>\n <samp>ssh-keygen -t rsa -f cloud.key</samp>\n</p>\n<p translate>\n This command generates a pair of keys: a private key (cloud.key)\n and a public key (cloud.key.pub).\n</p>\n<p translate>\n From a Windows system, you can use PuTTYGen to create private/public keys.\n Use the PuTTY Key Generator to create and save the keys, then copy\n the public key in the red highlighted box to your <samp>.ssh/authorized_keys</samp>\n file.\n</p>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/keypair/keypair.html","<div ng-controller=\"LaunchInstanceKeypairController as ctrl\">\n <p class=\"step-description\" translate>\n A key pair allows you to SSH into your newly created instance.\n You may select an existing key pair, import a key pair, or generate a new key pair.\n </p>\n\n <div ng-if=\"ctrl.isKeypairCreated\" class=\"alert alert-info\" role=\"alert\">\n <p translate>A key pair named \'{$ctrl.createdKeypair.name$}\' was successfully created. This key pair should automatically download.</p>\n <p translate>If not, you can manually download this keypair at the following link:</p>\n <a class=\"btn btn-default\" role=\"button\" href=\"{$ ctrl.createdKeypair.regenerateUrl $}\">\n <span class=\"fa fa-download\"></span>\n {$ctrl.createdKeypair.name$}\n </a>\n <p translate>\n Note: you will not be able to download this later.\n </p>\n </div>\n\n <button type=\"button\" class=\"btn btn-default\"\n ng-click=\"ctrl.createKeyPair()\">\n <span class=\"fa fa-plus\"></span>\n <translate>Create Key Pair</translate>\n </button>\n <button type=\"button\" class=\"btn btn-default\"\n ng-click=\"ctrl.importKeyPair()\">\n <span class=\"fa fa-upload\"></span>\n <translate>Import Key Pair</translate>\n </button>\n\n <transfer-table tr-model=\"ctrl.tableData\" limits=\"ctrl.tableLimits\" clone-content>\n <hz-dynamic-table\n config=\"$isAvailableTable ? ctrl.availableTableConfig : ctrl.allocatedTableConfig\"\n items=\"$isAvailableTable ? ($sourceItems | filterAvailable:trCtrl.allocatedIds) : $sourceItems\"\n item-actions=\"trCtrl.itemActions\"\n filter-facets=\"$isAvailableTable && ctrl.filterFacets\"\n table=\"ctrl\">\n </hz-dynamic-table>\n </transfer-table> <!-- End Key Pairs Table -->\n</div> <!-- End Controller -->\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/metadata/metadata.help.html","<div>\n <p translate>\n You can add arbitrary metadata to your instance so that you can more easily identify it among other running instances. Metadata is a collection of key-value pairs associated with an instance. The maximum length for each metadata key and value is 255 characters.\n </p>\n <p>\n <span translate>\n The maximum number of key-value pairs that can be supplied per instance is determined by the compute provider.\n </span>\n <span ng-if=\"model.novaLimits.maxServerMeta > -1\" translate>\n This limit is currently set to {$ model.novaLimits.maxServerMeta $}.\n </span>\n <span ng-if=\"model.novaLimits.maxServerMeta <= -1\" translate>\n This limit is currently not set.\n </span>\n </p>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/metadata/metadata.html","<p class=\"step-description\" translate>\n This step allows you to add Metadata items to your instance.\n</p>\n\n<metadata-tree\n ng-if=\"model.metadataDefs.instance && model.novaLimits\"\n available=\"::model.metadataDefs.instance\"\n existing=\"{}\"\n max-key-length=\"255\"\n max-value-length=\"255\"\n max-item-count=\"::model.novaLimits.maxServerMeta\"\n model=\"::model.metadataTree\">\n</metadata-tree>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/network/network.help.html","<div>\n <p translate>\n Provider networks are created by administrators.\n These networks map to an existing physical network in the data center.\n </p>\n <p translate>\n Project networks are created by users.\n These networks are fully isolated and are project-specific.\n </p>\n <p translate>\n An <b>External</b> network is set up by an administrator.\n If you want an instance to communicate outside of the data center,\n then attach a router between your <b>Project</b> network and the <b>External</b> network.\n You can use the <b>Network Topology</b> view to connect the router to the two networks.\n </p>\n <p translate>\n A floating IP allows instances to be addressable from an external network.\n Floating IPs are not allocated to instances at creation time and may be assigned\n after the instance is created. To attach a floating IP, go to the <b>Instances</b>\n view and click the <b>Actions</b> menu to the right of an instance.\n Then, select the <b>Associate Floating IP</b> option and enter the necessary details.\n </p>\n <p translate>\n Administrators set up the pool of floating IPs that are available to attach to instances.\n </p>\n\n <h4 translate>Network characteristics</h4>\n <p translate>\n The subnet identifies a sub-section of a network. A subnet is specified in CIDR format.\n A typical CIDR format looks like <samp>192.xxx.x.x/24</samp>.\n </p>\n <p translate>\n If a network is shared, then all users in the project can access the network.\n </p>\n <p translate>\n When the <b>Admin State</b> for a network is set to <b>Up</b>,\n then the network is available for use. You can set the <b>Admin State</b> to <b>Down</b>\n if you are not ready for other users to access the network.\n </p>\n <p translate>\n The status indicates whether the network has an active connection.\n </p>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/network/network.html","<div ng-controller=\"LaunchInstanceNetworkController as ctrl\">\n <p class=\"step-description\" translate>\n Networks provide the communication channels for instances in the cloud.\n </p>\n\n <div class=\"form-group\" ng-if=\"model.arePortProfilesSupported\">\n <label class=\"control-label\" for=\"profile\" translate>Profile</label>\n <select class=\"form-control\" id=\"profile\" ng-model=\"model.newInstanceSpec.profile\" ng-options=\"profile.name for profile in model.profiles\">\n <option value=\"\" translate>(None)</option>\n </select>\n </div>\n\n <transfer-table tr-model=\"ctrl.tableDataMulti\" help-text=\"ctrl.tableHelpText\" limits=\"ctrl.tableLimits\">\n <allocated validate-number-min=\"{$ ctrl.tableDataMulti.minItems $}\" ng-model=\"ctrl.tableDataMulti.allocated.length\">\n <table st-table=\"ctrl.tableDataMulti.displayedAllocated\" st-safe-src=\"ctrl.tableDataMulti.allocated\" hz-table\n class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr>\n <th class=\"reorder\"></th>\n <th class=\"expander\"></th>\n <th class=\"rsp-p1\" translate>Network</th>\n <th class=\"rsp-p2\" translate>Subnets Associated</th>\n <th class=\"rsp-p1\" translate>Shared</th>\n <th class=\"rsp-p1\" translate>Admin State</th>\n <th class=\"rsp-p1\" translate>Status</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"ctrl.tableDataMulti.allocated.length === 0\">\n <td colspan=\"8\">\n <div class=\"no-rows-help\" translate>\n Select an item from Available items below\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"row in ctrl.tableDataMulti.displayedAllocated track by row.id\"\n lr-drag-data=\"ctrl.tableDataMulti.displayedAllocated\" lr-drag-src=\"reorder\"\n lr-drop-target=\"reorder\" lr-drop-success=\"trCtrl.updateAllocated(e, item, collection)\">\n <td class=\"reorder\">\n <span class=\"fa fa-sort\" title=\"{$ \'Re-order items using drag and drop\'|translate $}\"></span>\n {$ $index + 1 $}\n </td>\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ \'Click to see more details\'|translate $}\"></span>\n </td>\n <td class=\"rsp-p1 word-break\">{$ row.name $}</td>\n <td class=\"rsp-p2\">\n <div ng-repeat=\"subnet in row.subnets\">{$ subnet.name $}</div>\n </td>\n <td class=\"rsp-p1\">{$ row.shared | yesno $}</td>\n <td class=\"rsp-p1\">{$ row.admin_state | decode:ctrl.networkAdminStates $}</td>\n <td class=\"rsp-p1\">{$ row.status | decode:ctrl.networkStatuses $}</td>\n <td class=\"actions_column\">\n <action-list>\n <action action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.deallocate\" item=\"row\">\n <span class=\"fa fa-arrow-down\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\">\n <td colspan=\"9\" class=\"detail\">\n <dl class=\"dl-horizontal\">\n <dt translate>ID</dt>\n <dd>{$ row.id $}</dd>\n <dt translate>Project</dt>\n <dd>{$ row.tenant_id $}</dd>\n <dt translate>External Network</dt>\n <dd>{$ row[\'router:external\'] | yesno $}</dd>\n </dl>\n <span class=\"h5\" translate>Provider Network</span>\n <div class=\"row\" class=\"detail\">\n <dl class=\"col-sm-4\">\n <dt translate>Type</dt>\n <dd translate>{$ row[\'provider:network_type\'] $}</dd>\n </dl>\n <dl class=\"col-sm-4\">\n <dt translate>Segmentation ID</dt>\n <dd>{$ row[\'provider:segmentation_id\'] $}</dd>\n </dl>\n <dl class=\"col-sm-4\">\n <dt translate>Physical Network</dt>\n <dd>{$ row[\'provider:physical_network\'] $}</dd>\n </dl>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </allocated>\n <available>\n <hz-magic-search-context filter-facets=\"ctrl.networkFacets\">\n <hz-magic-search-bar></hz-magic-search-bar>\n <table st-magic-search st-table=\"ctrl.tableDataMulti.displayedAvailable\" st-safe-src=\"ctrl.tableDataMulti.available\"\n hz-table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr>\n <th class=\"expander\"></th>\n <th st-sort=\"name\" st-sort-default class=\"rsp-p1\" translate>Network</th>\n <th class=\"rsp-p2\" translate>Subnets Associated</th>\n <th st-sort=\"shared\" class=\"rsp-p1\" translate>Shared</th>\n <th st-sort=\"admin_state\" class=\"rsp-p1\" translate>Admin State</th>\n <th st-sort=\"status\" class=\"rsp-p1\" translate>Status</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"trCtrl.numAvailable() === 0\">\n <td colspan=\"7\">\n <div class=\"no-rows-help\" translate>\n No available items\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"row in ctrl.tableDataMulti.displayedAvailable track by row.id\" ng-if=\"!trCtrl.allocatedIds[row.id]\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ \'Click to see more details\'|translate $}\"></span>\n </td>\n <td class=\"rsp-p1 word-break\">{$ row.name$}</td>\n <td class=\"rsp-p2\">\n <div ng-repeat=\"subnet in row.subnets\">{$ subnet.name $}</div>\n </td>\n <td class=\"rsp-p1\">{$ row.shared | yesno $}</td>\n <td class=\"rsp-p1\">{$ row.admin_state | decode:ctrl.networkAdminStates $}</td>\n <td class=\"rsp-p1\">{$ row.status | decode:ctrl.networkStatuses $}</td>\n <td class=\"actions_column\">\n <action-list button-tooltip=\"row.warningMessage\"\n bt-model=\"ctrl.tooltipModel\" bt-disabled=\"!row.disabled\"\n warning-classes=\"\'invalid\'\">\n <notifications>\n <span class=\"fa fa-exclamation-circle invalid\" ng-show=\"row.disabled\"></span>\n </notifications>\n <action action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.allocate\" item=\"row\" disabled=\"row.disabled\">\n <span class=\"fa fa-arrow-up\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\" ng-if=\"!trCtrl.allocatedIds[row.id]\">\n <td colspan=\"9\" class=\"detail\">\n <dl class=\"dl-horizontal\">\n <dt translate>ID</dt>\n <dd>{$ row.id $}</dd>\n <dt translate>Project</dt>\n <dd>{$ row.tenant_id $}</dd>\n <dt translate>External Network</dt>\n <dd>{$ row[\'router:external\'] | yesno $}</dd>\n </dl>\n <span class=\"h5\" translate>Provider Network</span>\n <div class=\"row\">\n <dl class=\"col-sm-4\">\n <dt translate>Type</dt>\n <dd translate>{$ row[\'provider:network_type\'] $}</dd>\n </dl>\n <dl class=\"col-sm-4\">\n <dt translate>Segmentation ID</dt>\n <dd>{$ row[\'provider:segmentation_id\'] $}</dd>\n </dl>\n <dl class=\"col-sm-4\">\n <dt translate>Physical Network</dt>\n <dd>{$ row[\'provider:physical_network\'] $}</dd>\n </dl>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </hz-magic-search-context>\n </available>\n </transfer-table>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/networkports/ports.help.html","<p translate>\n A port represents a virtual switch port on a logical network switch.\n</p>\n<p translate>\n Ports can be created under a network by administrators.\n</p>\n<p translate>\n Virtual instances attach their interfaces to ports.\n</p>\n<p translate>\n The logical port also defines the MAC address and the IP address(es) to be assigned to the interfaces plugged into them.\n</p>\n<p translate>\n When IP addresses are associated to a port, this also implies the port is associated with a subnet, as the IP address was taken from the allocation pool for a specific subnet.\n</p>\n<p translate>\n When the <b>Admin State</b> for a port is set to <b>Up</b> and it has no <b>Device Owner</b>,\n then the port is available for use. You can set the <b>Admin State</b> to <b>Down</b>\n if you are not ready for other users to use the port.\n</p>\n<p translate>\n The status indicates whether the port has an active connection.\n</p>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/networkports/ports.html","<div ng-controller=\"LaunchInstanceNetworkPortController as ctrl\">\n <p class=\"step-description\" translate>\n Ports provide extra communication channels to your instances. You can select ports instead of networks or a mix of both.\n </p>\n\n <transfer-table tr-model=\"ctrl.tableDataMulti\" help-text=\"ctrl.tableHelpText\" limits=\"ctrl.tableLimits\">\n <allocated>\n <table st-table=\"ctrl.tableDataMulti.displayedAllocated\" st-safe-src=\"ctrl.tableDataMulti.allocated\"\n hz-table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr>\n <th class=\"reorder\"></th>\n <th class=\"expander\"></th>\n <th st-sort=\"name\" st-sort-default class=\"rsp-p1\" translate>Name</th>\n <th class=\"rsp-p2\" translate>IP</th>\n <th st-sort=\"admin_state\" class=\"rsp-p1\" translate>Admin State</th>\n <th st-sort=\"status\" class=\"rsp-p1\" translate>Status</th>\n <th class=\"actions_column\"></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"ctrl.tableDataMulti.allocated.length === 0\">\n <td colspan=\"7\">\n <div class=\"no-rows-help\" translate>\n Select an item from Available items below\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"item in ctrl.tableDataMulti.displayedAllocated track by item.id\"\n lr-drag-data=\"ctrl.tableDataMulti.displayedAllocated\" lr-drag-src=\"reorder\"\n lr-drop-target=\"reorder\" lr-drop-success=\"trCtrl.updateAllocated(e, item, collection)\">\n <td class=\"reorder\">\n <span class=\"fa fa-sort\" title=\"{$ \'Re-order items using drag and drop\'|translate $}\"></span>\n {$ $index + 1 $}\n </td>\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ \'Click to see more details\'|translate $}\"></span>\n </td>\n <td class=\"rsp-p1 word-break\">{$ ctrl.nameOrID(item) $}</td>\n <td class=\"rsp-p2\">\n <div ng-repeat=\"ip in item.fixed_ips\">\n {$ ip.ip_address $} on subnet: {$ item.subnet_names[ip.ip_address] $}\n </div>\n </td>\n <td class=\"rsp-p1\">{$ item.admin_state | decode:ctrl.portAdminStates $}</td>\n <td class=\"rsp-p1\">{$ item.status | decode:ctrl.portStatuses $}</td>\n <td class=\"actions_column\">\n <action-list>\n <action action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.deallocate\" item=\"item\">\n <span class=\"fa fa-arrow-down\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\">\n <td colspan=\"7\" class=\"detail\">\n <dl class=\"dl-horizontal\">\n <dt translate>ID</dt>\n <dd>{$ item.id $}</dd>\n <dt translate>Project ID</dt>\n <dd>{$ item.tenant_id $}</dd>\n <dt translate>Network ID</dt>\n <dd>{$ item.network_id $}</dd>\n <dt translate>Network</dt>\n <dd>{$ item.network_name $}</dd>\n <dt translate>VNIC type</dt>\n <dd>{$ item[\'binding:vnic_type\'] | decode:ctrl.vnicTypes $}</dd>\n <div ng-if=\"item[\'binding:host_id\']\">\n <dt translate>Host ID</dt>\n <dd>{$ item[\'binding:host_id\'] $}</dd>\n </div>\n </dl>\n </td>\n </tr>\n </tbody>\n </table>\n </allocated>\n\n <available>\n <table st-table=\"ctrl.tableDataMulti.displayedAvailable\" st-safe-src=\"ctrl.tableDataMulti.available\"\n hz-table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr>\n <th class=\"search-header\" colspan=\"6\">\n <hz-search-bar icon-classes=\"fa-search\"></hz-search-bar>\n </th>\n </tr>\n <tr>\n <th class=\"expander\"></th>\n <th st-sort=\"name\" st-sort-default class=\"rsp-p1\" translate>Name</th>\n <th class=\"rsp-p2\" translate>IP</th>\n <th st-sort=\"admin_state\" class=\"rsp-p1\" translate>Admin State</th>\n <th st-sort=\"status\" class=\"rsp-p1\" translate>Status</th>\n <th class=\"actions_column\"></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"trCtrl.numAvailable() === 0\">\n <td colspan=\"6\">\n <div class=\"no-rows-help\" translate>\n No available items\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"item in ctrl.tableDataMulti.displayedAvailable track by item.id\"\n ng-if=\"!trCtrl.allocatedIds[item.id]\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ \'Click to see more details\'|translate $}\"></span>\n </td>\n <td class=\"rsp-p1 word-break\">{$ ctrl.nameOrID(item) $}</td>\n <td class=\"rsp-p2\">\n <div ng-repeat=\"ip in item.fixed_ips\">\n {$ ip.ip_address $} on subnet: {$ item.subnet_names[ip.ip_address] $}\n </div>\n </td>\n <td class=\"rsp-p1\">{$ item.admin_state | decode:ctrl.portAdminStates $}</td>\n <td class=\"rsp-p1\">{$ item.status | decode:ctrl.portStatuses $}</td>\n <td class=\"actions_column\">\n <action-list>\n <action action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.allocate\" item=\"item\">\n <span class=\"fa fa-arrow-up\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\">\n <td colspan=\"6\" class=\"detail\">\n <dl class=\"dl-horizontal\">\n <dt translate>ID</dt>\n <dd>{$ item.id $}</dd>\n <dt translate>Project ID</dt>\n <dd>{$ item.tenant_id $}</dd>\n <dt translate>Network ID</dt>\n <dd>{$ item.network_id $}</dd>\n <dt translate>Network</dt>\n <dd>{$ item.network_name $}</dd>\n <dt translate>VNIC type</dt>\n <dd>{$ item[\'binding:vnic_type\'] | decode:ctrl.vnicTypes $}</dd>\n <div ng-if=\"item[\'binding:host_id\']\">\n <dt translate>Host ID</dt>\n <dd>{$ item[\'binding:host_id\'] $}</dd>\n </div>\n </dl>\n </td>\n </tr>\n </tbody>\n </table>\n </available>\n </transfer-table>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/scheduler-hints/scheduler-hints.help.html","<p translate>\n Scheduler hints allow you to pass additional placement related information to the compute scheduler.\n</p>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/scheduler-hints/scheduler-hints.html","<div ng-controller=\"LaunchInstanceSchedulerHintsController as ctrl\">\n <p translate>\n This step allows you to add scheduler hints to your instance.\n </p>\n <metadata-tree\n ng-if=\"model.metadataDefs.hints\"\n available=\"::model.metadataDefs.hints\"\n existing=\"{}\"\n text=\"::ctrl.text\"\n model=\"::model.hintsTree\">\n </metadata-tree>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/security-groups/security-group-details.html","<table st-table=\"row.security_group_rules\" class=\"table table-condensed table-rsp security-group-details\">\n <thead>\n <tr>\n <th st-sort=\"direction\" st-sort-default translate>Direction</th>\n <th st-sort=\"ethertype\" translate>Ether Type</th>\n <th st-sort=\"protocol\" translate>Protocol</th>\n <th st-sort=\"port_range_min\" translate>Min Port</th>\n <th st-sort=\"port_range_max\" translate>Max Port</th>\n <th st-sort=\"remote_ip_prefix\" translate>Remote</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"d in row.security_group_rules\">\n <td>{$ d.direction | noValue $}</td>\n <td>{$ d.ethertype | noValue $}</td>\n <td>{$ d.protocol | noValue $}</td>\n <td>{$ d.port_range_min | noValue $}</td>\n <td>{$ d.port_range_max | noValue $}</td>\n <td>{$ d.remote_ip_prefix | noValue $}</td>\n </tr>\n </tbody>\n</table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/security-groups/security-groups.help.html","<div>\n <p translate>Security groups define a set of IP filter rules that determine how network traffic flows to and from an instance. Users can add additional rules to an existing security group to further define the access options for an instance. To create additional rules, go to the <b>Compute | Access & Security</b> view, then find the security group and click <b>Manage Rules</b>.</p>\n <p translate>Security groups are project-specific and cannot be shared across projects.</p>\n <p translate>If a security group is not associated with an instance before it is launched, then you will have very limited access to the instance after it is deployed. You will only be able to access the instance from a VNC console.</p>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/security-groups/security-groups.html","<div ng-controller=\"LaunchInstanceSecurityGroupsController as ctrl\">\n <p class=\"step-description\" translate>Select the security groups to launch the instance in.</p>\n\n <transfer-table tr-model=\"ctrl.tableData\"\n help-text=\"ctrl.tableHelp\"\n limits=\"ctrl.tableLimits\">\n\n <!-- Security Groups Allocated -->\n <allocated>\n <table st-table=\"ctrl.tableData.displayedAllocated\"\n st-safe-src=\"ctrl.tableData.allocated\" hz-table\n class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr>\n <th class=\"expander\"></th>\n <th st-sort=\"name\" st-sort-default class=\"rsp-p1\" translate>Name</th>\n <th st-sort=\"description\" class=\"rsp-p2\" translate>Description</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"ctrl.tableData.allocated.length === 0\">\n <td colspan=\"8\">\n <div class=\"no-rows-help\">\n {$ ::trCtrl.helpText.noneAllocText $}\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"row in ctrl.tableData.displayedAllocated track by row.id\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ ::trCtrl.helpText.expandDetailsText $}\"></span>\n </td>\n <td class=\"rsp-p1 word-break\">{$ row.name $}</td>\n <td class=\"rsp-p2\">{$ row.description $}</td>\n <td class=\"actions_column\">\n <action-list>\n <action action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.deallocate\" item=\"row\">\n <span class=\"fa fa-arrow-down\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\">\n <td></td>\n <td class=\"detail\" colspan=\"3\" ng-include=\"ctrl.tableDetails\">\n </td>\n </tr>\n </tbody>\n </table>\n </allocated>\n\n <!-- Security Groups Available -->\n <available>\n <hz-magic-search-context filter-facets=\"ctrl.filterFacets\">\n <hz-magic-search-bar></hz-magic-search-bar>\n <table st-table=\"ctrl.tableData.displayedAvailable\"\n st-magic-search\n st-safe-src=\"ctrl.tableData.available\"\n hz-table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr>\n <th class=\"expander\"></th>\n <th st-sort=\"name\" st-sort-default class=\"rsp-p1\" translate>Name</th>\n <th st-sort=\"description\" class=\"rsp-p1\" translate>Description</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"trCtrl.numAvailable() === 0\">\n <td colspan=\"8\">\n <div class=\"no-rows-help\">\n {$ ::trCtrl.helpText.noneAvailText $}\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"row in ctrl.tableData.displayedAvailable track by row.id\"\n ng-if=\"!trCtrl.allocatedIds[row.id]\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ ::trCtrl.helpText.expandDetailsText $}\"></span>\n </td>\n <td class=\"rsp-p1 word-break\">{$ row.name$}</td>\n <td class=\"rsp-p1\">{$ row.description $}</td>\n <td class=\"actions_column\">\n <action-list>\n <action action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.allocate\" item=\"row\">\n <span class=\"fa fa-arrow-up\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\" ng-if=\"!trCtrl.allocatedIds[row.id]\">\n <td class=\"detail\" colspan=\"4\" ng-include=\"ctrl.tableDetails\">\n </td>\n </tr>\n </tbody>\n </table>\n </hz-magic-search-context>\n </available>\n\n </transfer-table> <!-- End Security Groups Transfer Table -->\n\n</div> <!-- End Controller -->\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/server-groups/server-group-details.html","<table st-table=\"row.policies\"\n class=\"table table-condensed table-rsp server-group-details\">\n <thead>\n <tr>\n <th st-sort=\"policy\" st-sort-default translate>Policy</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"policy in row.policies\">\n <td>{$ policy | noValue $}</td>\n </tr>\n </tbody>\n</table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/server-groups/server-groups.help.html","<div>\n <p translate>\n Server groups define collections of VM\'s so that the entire\n collection can be given specific properties. For example, the policy of a\n server group may specify that VM\'s in this group should not be placed on\n the same physical hardware due to availability requirements.\n </p>\n <p translate>\n Server groups are project-specific and cannot be shared across projects.\n </p>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/server-groups/server-groups.html","<div ng-controller=\"LaunchInstanceServerGroupsController as ctrl\">\n <p class=\"step-description\" translate>\n Select the server group to launch the instance in.\n </p>\n\n <transfer-table tr-model=\"ctrl.tableData\"\n help-text=\"ctrl.tableHelp\"\n limits=\"ctrl.tableLimits\"\n clone-content>\n\n <table st-table=\"$displayedItems\"\n st-safe-src=\"$sourceItems\"\n hz-table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <tr ng-show=\"$isAvailableTable\">\n <th class=\"search-header\" colspan=\"9\">\n <hz-search-bar group-classes=\"input-group-sm\" icon-classes=\"fa-search\">\n </hz-search-bar>\n </th>\n </tr>\n <tr>\n <th class=\"expander\"></th>\n <th st-sort=\"name\" st-sort-default class=\"rsp-p1\" translate>Name</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if=\"$isAllocatedTable && ctrl.tableData.allocated.length === 0\">\n <td colspan=\"8\">\n <div class=\"no-rows-help\">\n {$ ::trCtrl.helpText.noneAllocText $}\n </div>\n </td>\n </tr>\n <tr ng-if=\"$isAvailableTable && trCtrl.numAvailable() === 0\">\n <td colspan=\"8\">\n <div class=\"no-rows-help\">\n {$ ::trCtrl.helpText.noneAvailText $}\n </div>\n </td>\n </tr>\n <tr ng-repeat-start=\"row in $displayedItems track by row.id\"\n ng-if=\"$isAllocatedTable || ($isAvailableTable && !trCtrl.allocatedIds[row.id])\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\" hz-expand-detail\n title=\"{$ ::trCtrl.helpText.expandDetailsText $}\"></span>\n </td>\n <td class=\"rsp-p1\">{$ row.name $}</td>\n <td class=\"actions_column\">\n <action-list>\n <action ng-if=\"$isAllocatedTable\"\n action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.deallocate\" item=\"row\">\n <span class=\"fa fa-arrow-down\"></span>\n </action>\n <action ng-if=\"$isAvailableTable\"\n action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.allocate\" item=\"row\">\n <span class=\"fa fa-arrow-up\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr ng-repeat-end class=\"detail-row\">\n <td></td>\n <td class=\"detail\" colspan=\"3\" ng-include=\"ctrl.tableDetails\">\n </td>\n </tr>\n </tbody>\n </table>\n </transfer-table> <!-- End Server Groups Transfer Table -->\n\n</div> <!-- End Controller -->\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/source/source-details.html","<td colspan=\"{$ ::ctrl.tableHeadCells.length +2 $}\" class=\"detail\">\n\n <div class=\"row\">\n <dl class=\"col-xs-4\">\n <dt translate>Min Disk (GB)</dt>\n <dd>\n {$ (row.properties ? row.min_disk : row.volume_image_metadata.min_disk) || \'--\' $}\n </dd>\n </dl>\n <dl class=\"col-xs-4\">\n <dt translate>Min RAM (MB)</dt>\n <dd>\n {$ (row.properties ? row.min_ram : row.volume_image_metadata.min_ram) || \'--\' $}\n </dd>\n </dl>\n </div>\n\n <div ng-if=\"model.metadataDefs.image || model.metadataDefs.volume\">\n <div ng-if=\"row.properties && model.metadataDefs.image\">\n <metadata-display\n available=\"::model.metadataDefs.image\"\n existing=\"::row.properties\">\n </metadata-display>\n </div>\n\n <div ng-if=\"row.volume_image_metadata && model.metadataDefs.volume\">\n <metadata-display\n available=\"::model.metadataDefs.volume\"\n existing=\"::row.volume_image_metadata\">\n </metadata-display>\n </div>\n </div>\n\n</td>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/source/source.help.html","<div>\n <p translate>If you want to create an instance that uses ephemeral storage, meaning the instance data is lost when the instance is deleted, then choose one of the following boot sources:</p>\n <ul class=\"list-group list-unstyled\">\n <li translate><b>Image</b>: This option uses an image to boot the instance.</li>\n <li translate><b>Instance Snapshot</b>: This option uses an instance snapshot to boot the instance.</li>\n </ul>\n\n <p translate>If you want to create an instance that uses persistent storage, meaning the instance data is saved when the instance is deleted, then select one of the following boot options:</p>\n <ul class=\"list-group list-unstyled\">\n <li translate><b>Image (with Create New Volume checked)</b>: This options uses an image to boot the instance, and creates a new volume to persist instance data. You can specify volume size and whether to delete the volume on deletion of the instance.</li>\n <li translate><b>Volume</b>: This option uses a volume that already exists. It does not create a new volume. You can choose to delete the volume on deletion of the instance. <em>Note: when selecting Volume, you can only launch one instance.</em></li>\n <li translate><b>Volume Snapshot</b>: This option uses a volume snapshot to boot the instance, and creates a new volume to persist instance data. You can choose to delete the volume on deletion of the instance.</li>\n </ul>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/dashboard/project/workflow/launch-instance/source/source.html","<div ng-controller=\"LaunchInstanceSourceController as ctrl\">\n <div ng-show=\"model.allowedBootSources.length > 0\">\n <p class=\"step-description\" translate>\n Instance source is the template used to create an instance.\n You can use an image, a snapshot of an instance (image snapshot),\n a volume or a volume snapshot (if enabled).\n You can also choose to use persistent storage by creating a new volume.\n </p>\n\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <div class=\"form-group\" ng-class=\"{ \'has-error\': launchInstanceSourceForm.boot-source-type.$invalid }\">\n <label for=\"boot-source-type\" class=\"control-label\" translate>Select Boot Source</label>\n <select name=\"boot-source-type\" class=\"form-control\" id=\"boot-source-type\"\n ng-options=\"src.label for src in model.allowedBootSources| orderBy:\'label\' track by src.type\"\n ng-change=\"ctrl.updateBootSourceSelection(model.newInstanceSpec.source_type.type)\"\n ng-model=\"model.newInstanceSpec.source_type\">\n </select>\n <span class=\"help-block\" ng-show=\"launchInstanceSourceForm.boot-source-type.$invalid\">\n {$ ctrl.bootSourceTypeError $}\n </span>\n </div>\n </div>\n\n <div ng-if=\"(model.newInstanceSpec.source_type.type === \'image\' ||\n model.newInstanceSpec.source_type.type === \'snapshot\') &&\n model.allowCreateVolumeFromImage\">\n <div class=\"col-xs-6\">\n <div class=\"form-group\">\n <label for=\"vol-create\" translate>Create New Volume</label><br/>\n <div class=\"btn-group\">\n <label class=\"btn btn-default\" id=\"vol-create\"\n ng-repeat=\"option in ctrl.toggleButtonOptions\"\n ng-model=\"model.newInstanceSpec.vol_create\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n\n <div ng-if=\"model.newInstanceSpec.source_type.type == \'volume\' || model.newInstanceSpec.source_type.type == \'volume_snapshot\'\">\n <div class=\"col-xs-6\">\n <div class=\"form-group\">\n <label translate>Delete Volume on Instance Delete</label><br/>\n <div class=\"btn-group\">\n <label class=\"btn btn-default\"\n ng-repeat=\"option in ctrl.toggleButtonOptions\"\n ng-model=\"model.newInstanceSpec.vol_delete_on_instance_delete\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <div ng-if=\"model.newInstanceSpec.vol_create == true\">\n <div class=\"form-group\" ng-class=\"{ \'has-error\': launchInstanceSourceForm[\'volume-size\'].$invalid }\">\n <label for=\"volume-size\" class=\"control-label\" translate>\n Volume Size (GB)\n <span class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <input name=\"volume-size\"\n min=\"{$ ctrl.minVolumeSize $}\"\n id=\"volume-size\"\n type=\"number\"\n class=\"form-control\"\n ng-model=\"model.newInstanceSpec.vol_size\"\n ng-pattern=\"/^[0-9]+$/\"\n ng-required=\"true\">\n <span class=\"help-block\"\n ng-show=\"launchInstanceSourceForm[\'volume-size\'].$invalid\">\n {$ launchInstanceSourceForm[\'volume-size\'].$error.validateNumberMin ? ctrl.minVolumeSizeError : ctrl.volumeSizeError $}\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"col-xs-6\">\n <div ng-if=\"model.newInstanceSpec.vol_create == true\">\n <div class=\"form-group\">\n <label translate class=\"control-label\">Delete Volume on Instance Delete</label><br/>\n <div class=\"btn-group\">\n <label class=\"btn btn-default\"\n ng-repeat=\"option in ctrl.toggleButtonOptions\"\n ng-model=\"model.newInstanceSpec.vol_delete_on_instance_delete\"\n uib-btn-radio=\"option.value\">{$ ::option.label $}</label>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div hz-if-settings=\'[\"OPENSTACK_HYPERVISOR_FEATURES.can_set_mount_point\"]\'\n ng-if=\"model.newInstanceSpec.vol_create === true\">\n <label translate>Device Name</label>\n <input class=\"form-control\"\n ng-model=\"model.newInstanceSpec.vol_device_name\"\n type=\"text\">\n </div>\n\n <transfer-table help-text=\"ctrl.helpText\"\n tr-model=\"ctrl.tableData\">\n <allocated validate-number-min=\"1\" ng-model=\"ctrl.tableData.allocated.length\">\n <table class=\"table table-striped table-rsp table-detail modern\"\n hz-table\n st-safe-src=\"ctrl.tableData.allocated\"\n st-table=\"ctrl.tableData.displayAllocated\">\n <!-- transfer table, allocated table head -->\n <thead>\n <tr>\n <th class=\"expander\"></th>\n <th ng-class=\"ctrl.tableHeadCells[0].classList\">\n {$ ctrl.tableHeadCells[0].text $}\n </th>\n <th ng-class=\"ctrl.tableHeadCells[1].classList\">\n {$ ctrl.tableHeadCells[1].text $}\n </th>\n <th ng-class=\"ctrl.tableHeadCells[2].classList\">\n {$ ctrl.tableHeadCells[2].text $}\n </th>\n <th ng-class=\"ctrl.tableHeadCells[3].classList\">\n {$ ctrl.tableHeadCells[3].text $}\n </th>\n <th ng-class=\"ctrl.tableHeadCells[4].classList\">\n {$ ctrl.tableHeadCells[4].text $}\n </th>\n <th class=\"action\"></th>\n </tr>\n </thead><!-- /transfer table, allocated table head -->\n\n <!-- transfer table, allocated table body -->\n <tbody>\n\n <tr ng-if=\"ctrl.tableData.allocated.length === 0\">\n <td colspan=\"{$ ctrl.tableHeadCells.length + 2 $}\">\n <div class=\"no-rows-help\">\n {$ ::trCtrl.helpText.noneAllocText $}\n </div>\n </td>\n </tr>\n\n <tr ng-repeat-start=\"row in ctrl.selection\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\"\n hz-expand-detail\n title=\"{$ ::trCtrl.helpText.expandDetailsText $}\"></span>\n </td>\n <td ng-class=\"ctrl.tableBodyCells[0].classList\">\n {$ ctrl.tableBodyCells[0].filter ? ctrl.tableBodyCells[0].filter(row[ctrl.tableBodyCells[0].key], ctrl.tableBodyCells[0].filterArg) : row[ctrl.tableBodyCells[0].key] $}\n </td>\n <td ng-class=\"ctrl.tableBodyCells[1].classList\">\n {$ ctrl.tableBodyCells[1].filter ? ctrl.tableBodyCells[1].filter(row[ctrl.tableBodyCells[1].key], ctrl.tableBodyCells[1].filterArg) : row[ctrl.tableBodyCells[1].key] $}\n </td>\n <td ng-class=\"ctrl.tableBodyCells[2].classList\">\n {$ ctrl.tableBodyCells[2].filter ? ctrl.tableBodyCells[2].filter(row[ctrl.tableBodyCells[2].key], ctrl.tableBodyCells[2].filterArg) : row[ctrl.tableBodyCells[2].key] $}\n </td>\n <td ng-class=\"ctrl.tableBodyCells[3].classList\">\n {$ ctrl.tableBodyCells[3].filter ? ctrl.tableBodyCells[3].filter(ctrl.tableBodyCells[3].filterRawData ? row : row[ctrl.tableBodyCells[3].key], ctrl.tableBodyCells[3].filterArg) : row[ctrl.tableBodyCells[3].key] $}\n </td>\n <td ng-class=\"ctrl.tableBodyCells[4].classList\">\n <span ng-if=\"model.newInstanceSpec.source_type.type === \'volume\' && row.availability_zone !== model.newInstanceSpec.availability_zone\"\n class=\"invalid fa fa-exclamation-triangle\"\n popover=\"{$ ::trCtrl.helpText.volumeAZHelpText $}\"\n popover-trigger=\"mouseenter mouseleave\"\n popover-append-to-body=\"true\"\n popover-placement=\"top\"></span>\n {$ ctrl.tableBodyCells[4].filter ? ctrl.tableBodyCells[4].filter(row[ctrl.tableBodyCells[4].key], ctrl.tableBodyCells[4].filterArg) : row[ctrl.tableBodyCells[4].key] $}\n </td>\n <td class=\"actions_column\">\n <action-list>\n <action action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.deallocate\"\n item=\"row\">\n <span class=\"fa fa-arrow-down\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr class=\"detail-row\"\n ng-repeat-end\n ng-include=\"ctrl.sourceDetails\">\n </tr>\n </tbody><!-- /transfer table, allocated table body -->\n </table>\n </allocated>\n\n <available>\n <hz-magic-search-context filter-facets=\"ctrl.sourceFacets\">\n <hz-magic-search-bar>\n </hz-magic-search-bar>\n <table st-table=\"ctrl.tableData.displayedAvailable\"\n st-safe-src=\"ctrl.tableData.available\"\n hz-table\n st-magic-search\n class=\"table table-striped table-rsp table-detail modern\">\n\n <!-- transfer table, available table head -->\n <thead>\n <tr>\n <th class=\"expander\"></th>\n <th ng-attr-st-sort-default=\"{$ ctrl.tableHeadCells[0].sortDefault $}\"\n ng-class=\"ctrl.tableHeadCells[0].classList\"\n st-sort=\"{$ ctrl.tableHeadCells[0].sortable && ctrl.tableBodyCells[0].key $}\">\n {$ ctrl.tableHeadCells[0].text $}\n </th>\n <th ng-attr-st-sort-default=\"{$ ctrl.tableHeadCells[1].sortDefault $}\"\n ng-class=\"ctrl.tableHeadCells[1].classList\"\n st-sort=\"{$ ctrl.tableHeadCells[1].sortable && ctrl.tableBodyCells[1].key $}\">\n {$ ctrl.tableHeadCells[1].text $}\n </th>\n <th ng-attr-st-sort-default=\"{$ ctrl.tableHeadCells[2].sortDefault $}\"\n ng-class=\"ctrl.tableHeadCells[2].classList\"\n st-sort=\"{$ ctrl.tableHeadCells[2].sortable && ctrl.tableBodyCells[2].key $}\">\n {$ ctrl.tableHeadCells[2].text $}\n </th>\n <th ng-attr-st-sort-default=\"{$ ctrl.tableHeadCells[3].sortDefault $}\"\n ng-class=\"ctrl.tableHeadCells[3].classList\"\n st-sort=\"{$ ctrl.tableHeadCells[3].sortable && ctrl.tableBodyCells[3].key $}\">\n {$ ctrl.tableHeadCells[3].text $}\n </th>\n <th ng-attr-st-sort-default=\"{$ ctrl.tableHeadCells[4].sortDefault $}\"\n ng-class=\"ctrl.tableHeadCells[4].classList\"\n st-sort=\"{$ ctrl.tableHeadCells[4].sortable && ctrl.tableBodyCells[4].key $}\">\n {$ ctrl.tableHeadCells[4].text $}\n </th>\n <th class=\"action\"></th>\n </tr>\n </thead><!-- /transfer table, available table head -->\n\n <tbody>\n\n <tr ng-if=\"trCtrl.numAvailable() === 0\">\n <td colspan=\"{$ ctrl.tableHeadCells.length + 2 $}\">\n <div class=\"no-rows-help\">\n {$ ::trCtrl.helpText.noneAvailText $}\n </div>\n </td>\n </tr>\n\n <tr ng-repeat-start=\"row in ctrl.tableData.displayedAvailable track by row.id\"\n ng-if=\"!trCtrl.allocatedIds[row.id]\">\n <td class=\"expander\">\n <span class=\"fa fa-chevron-right\"\n hz-expand-detail\n title=\"{$ ::trCtrl.helpText.expandDetailsText $}\">\n </span>\n </td>\n <td ng-class=\"ctrl.tableBodyCells[0].classList\">\n {$ ctrl.tableBodyCells[0].filter ? ctrl.tableBodyCells[0].filter(row[ctrl.tableBodyCells[0].key], ctrl.tableBodyCells[0].filterArg) : row[ctrl.tableBodyCells[0].key] $}\n </td>\n <td ng-class=\"ctrl.tableBodyCells[1].classList\">\n {$ ctrl.tableBodyCells[1].filter ? ctrl.tableBodyCells[1].filter(row[ctrl.tableBodyCells[1].key], ctrl.tableBodyCells[1].filterArg) : row[ctrl.tableBodyCells[1].key] $}\n </td>\n <td ng-class=\"ctrl.tableBodyCells[2].classList\">\n {$ ctrl.tableBodyCells[2].filter ? ctrl.tableBodyCells[2].filter(row[ctrl.tableBodyCells[2].key], ctrl.tableBodyCells[2].filterArg) : row[ctrl.tableBodyCells[2].key] $}\n </td>\n <td ng-class=\"ctrl.tableBodyCells[3].classList\">\n {$ ctrl.tableBodyCells[3].filter ? ctrl.tableBodyCells[3].filter(ctrl.tableBodyCells[3].filterRawData ? row : row[ctrl.tableBodyCells[3].key], ctrl.tableBodyCells[3].filterArg) : row[ctrl.tableBodyCells[3].key] $}\n </td>\n <td ng-class=\"ctrl.tableBodyCells[4].classList\">\n <span ng-if=\"model.newInstanceSpec.source_type.type === \'volume\' && row.availability_zone !== model.newInstanceSpec.availability_zone\"\n class=\"invalid fa fa-exclamation-triangle\"\n popover=\"{$ ::trCtrl.helpText.volumeAZHelpText $}\"\n popover-trigger=\"mouseenter mouseleave\"\n popover-append-to-body=\"true\"\n popover-placement=\"top\"></span>\n {$ ctrl.tableBodyCells[4].filter ? ctrl.tableBodyCells[4].filter(row[ctrl.tableBodyCells[4].key], ctrl.tableBodyCells[4].filterArg) : row[ctrl.tableBodyCells[4].key] $}\n </td>\n <td class=\"actions_column\">\n <action-list>\n <action action-classes=\"\'btn btn-default\'\"\n callback=\"trCtrl.allocate\"\n item=\"row\">\n <span class=\"fa fa-arrow-up\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n <tr class=\"detail-row\"\n ng-repeat-end\n ng-include=\"ctrl.sourceDetails\"\n ng-if=\"!trCtrl.allocatedIds[row.id]\">\n </tr>\n </tbody>\n </table>\n </hz-magic-search-context>\n </available>\n </transfer-table>\n </div>\n <div ng-if=\"model.allowedBootSources.length === 0\">\n <div translate class=\"subtitle text-danger\">There are no allowed boot sources.\n If you think this is wrong please contact your administrator.\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/action-list.single-button-dropdown.mock.html","<action-list dropdown>\n <action button-type=\"single-button\">Actions</action>\n <menu>\n <action button-type=\"menu-item\" callback=\"clickMe\" item=\"item\">\n Edit\n </action>\n <action button-type=\"menu-item\" callback=\"clickMe\" item=\"item\">\n Delete\n </action>\n </menu>\n</action-list>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/action-list.split-botton-dropdown.mock.html","<action-list dropdown>\n <action button-type=\"split-button\" callback=\"clickMe\" item=\"item\">\n View\n </action>\n <menu>\n <action button-type=\"menu-item\" callback=\"clickMe\" item=\"item\">\n Edit\n </action>\n <action button-type=\"menu-item\" callback=\"clickMe\" item=\"item\">\n Delete\n </action>\n </menu>\n</action-list>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/action.html","<button tabIndex=\"0\"\n class=\"{$ disabled ? \'disabled\' : \'\' $}\"\n ng-class=\"actionClasses\"\n ng-click=\"disabled || callback(item)\">\n <ng-transclude></ng-transclude>\n</button>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions-batch.template.html","<action action-classes=\"\'$action-classes$ btn btn-default\'\">\n $text$\n</action>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions-create.template.html","<action action-classes=\"\'btn btn-default\'\">\n <span class=\"fa fa-plus\"></span>\n $text$\n</action>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions-danger.template.html","<action action-classes=\"\'$action-classes$\'\" item=\"$item$\">\n $text$\n</action>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions-delete-selected.template.html","<action action-classes=\"\'btn btn-danger\'\"\n disabled=\"tCtrl.selected.length === 0\"\n item=\"tCtrl.selected\">\n <span class=\"fa fa-trash\"></span>\n $text$\n</action>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions-delete.template.html","<action action-classes=\"\'$action-classes$\'\" item=\"$item$\">\n <span class=\"fa fa-trash\"></span>\n $text$\n</action>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions-detail.template.html","<div class=\"col-lg-4 col-md-6\">\n <div class=\"panel $panel-classes$\">\n <div class=\"panel-heading\">\n <h3 class=\"panel-title\">$title$</h3>\n </div>\n <div class=\"panel-body\">\n <p>$description$</p>\n <action action-classes=\"\'$action-classes$\'\" item=\"$item$\">\n $text$\n </action>\n </div>\n </div>\n</div>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions-row.template.html","<action action-classes=\"\'$action-classes$\'\" item=\"$item$\">\n $text$\n</action>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions.batch.mock.html","<actions allowed=\"actions\" type=\"batch\">\n</actions>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions.custom.mock.html","<action action-classes=\"\'btn-custom\'\" item=\"customItem\">Custom Button</action>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions.custom2.mock.html","<action action-classes=\"\'btn-custom-2\'\">Custom Button 2</action>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions.detail.mock.html","<actions allowed=\"actions\" type=\"detail\" item=\"rowItem\">\n</actions>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/actions.row.mock.html","<actions allowed=\"actions\" type=\"row\" item=\"rowItem\">\n</actions>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/button-group.mock.html","<action-list dropdown>\n <action callback=\"clickMe\" item=\"item\">View</action>\n <action callback=\"clickMe\" item=\"item\">Edit</action>\n <action callback=\"clickMe\" item=\"item\">Delete</action>\n</action-list>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/menu-item.html","<!-- Dropdown menu item -->\n<!-- note that we stop all potential handling of the click outside of this tag WITH EXTREME PREJUDICE -->\n<li role=\"presentation\" ng-class=\"{ disabled: disabled }\">\n <a role=\"menuitem\" href=\"#\"\n ng-class=\"actionClasses\"\n ng-click=\"disabled || callback(item); $event.stopPropagation(); $event.preventDefault()\">\n <ng-transclude></ng-transclude>\n </a>\n</li>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/menu.html","<ul role=\"menu\" class=\"dropdown-menu dropdown-menu-right\">\n</ul>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/single-button.html","<!-- Dropdown button -->\n<button type=\"button\" tabindex=\"0\"\n class=\"single-button dropdown-toggle {$ disabled ? \'disabled\' : \'\' $}\"\n ng-class=\"actionClasses\"\n ng-click=\"disabled || callback(item); $event.stopPropagation()\">\n <ng-transclude></ng-transclude>\n <span class=\"fa fa-caret-down\"></span>\n</button>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/split-button.html","<!-- Dropdown button -->\n<button type=\"button\" tabindex=\"0\"\n class=\"split-button {$ disabled ? \'disabled\' : \'\' $}\"\n ng-class=\"actionClasses\"\n ng-click=\"disabled || callback(item); $event.stopPropagation()\">\n <ng-transclude></ng-transclude>\n</button><!--\nDropdown caret button\n--><button class=\"split-caret dropdown-toggle\" uib-dropdown-toggle\n ng-class=\"actionClasses\"\n aria-expanded=\"false\" ng-click=\"$event.stopPropagation()\">\n <span class=\"fa fa-caret-down\"></span>\n <span class=\"sr-only\" translate>Toggle Dropdown</span>\n</button>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/action-list/warning-tooltip.html","<p>{$ ::message $}</p>\n<div>\n <a ng-click=\"expandDetail(); $event.stopPropagation()\">{$ ::clickMessage $}</a>\n</div>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/charts/chart-tooltip.html","<div class=\"chart-tooltip\"\n ng-class=\"{ \'tooltip-enabled\': tooltip.enabled }\"\n ng-style=\"tooltip.style\">\n <span class=\"fa {$ ::tooltip.icon $}\"\n ng-class=\"tooltip.iconClass\"\n ng-style=\"{ color: tooltip.iconColor }\"></span>\n <span class=\"tooltip-key\">{$ tooltip.label $}</span>\n <span class=\"tooltip-value\">{$ tooltip.value $}</span>\n</div>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/charts/pie-chart.html","<div class=\"pie-chart text-center\" ng-class=\"{ \'danger\': chartData.overMax }\">\n <chart-tooltip tooltip-data=\"model.tooltipData\"></chart-tooltip>\n\n <div class=\"pie-chart-title\" ng-if=\"::model.settings.showTitle && chartData.title\">\n {$ ::chartData.title $} ({$ model.totalLabel $})\n </div>\n\n <svg class=\"svg-pie-chart\"\n ng-show=\"chartData.showChart\"\n ng-attr-height=\"{$ ::model.settings.diameter $}\"\n ng-attr-width=\"{$ ::model.settings.diameter $}\">\n <g class=\"chart\"\n ng-attr-transform=\"translate({$ ::model.settings.outerRadius $},{$ ::model.settings.outerRadius $})\">\n <g class=\"slices\"></g>\n <g ng-if=\"::model.settings.showLabel && chartData.label\" class=\"pie-chart-label\">\n <text dy=\"0.35em\" ng-style=\"model.settings.label\"\n ng-class=\"{ \'danger\': chartData.overMax }\">{$ chartData.label $}</text>\n </g>\n </g>\n </svg>\n\n <div ng-if=\"::model.settings.showLegend\" class=\"pie-chart-legend\">\n <div ng-repeat=\"slice in chartData.data | showKeyFilter\"\n class=\"slice-legend\">\n <div ng-if=\"chartData.showChart\" class=\"slice-key\" ng-class=\"slice.colorClass\"></div>\n <div ng-class=\"[slice.colorClass, chartData.chartless]\">{$ slice.value $}</div>\n <div>{$ slice.label $}</div>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/details/details.html","<div ng-if=\"views.length > 1\">\n <uib-tabset class=\"tabset-details\">\n <uib-tab class=\"tab-details\" ng-repeat=\"view in views\" heading=\"{$ view.name $}\">\n <ng-include src=\"view.template\"></ng-include>\n </uib-tab>\n </uib-tabset>\n</div>\n<div ng-if=\"views.length === 1\">\n <ng-include src=\"views[0].template\"></ng-include>\n</div>\n<div ng-if=\"views.length === 0\">\n <ng-include src=\"defaultTemplateUrl\"></ng-include>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/details/routed-details-view.html","<div ng-controller=\"RoutedDetailsViewController as ctrl\">\n\n <div class=\"page-header\">\n <ol class=\"breadcrumb\">\n <li><a href=\"javascript:history.back()\" translate>Back</a></li>\n </ol>\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-9 text-left\">\n <span class=\"h1\">{$ ctrl.itemName $}</span>\n </div>\n\n <div class=\"col-xs-12 col-sm-3 text-right details-item-actions\" ng-if=\"ctrl.itemData\">\n <actions\n ng-if=\"ctrl.showDetails\"\n allowed=\"ctrl.resourceType.itemActions\"\n type=\"row\"\n item=\"ctrl.itemData\"\n result-handler=\"ctrl.resultHandler\"></actions>\n </div>\n </div>\n </div>\n <hz-details ng-if=\"ctrl.showDetails\"\n views=\"ctrl.resourceType.detailsViews\"\n context=\"ctrl.context\"\n default-template-url=\"ctrl.defaultTemplateUrl\"\n ></hz-details>\n</div>\n\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/array.html","<div class=\"hz-array {$::form.htmlClass$}\"\n sf-field-model=\"sf-new-array\"\n sf-new-array>\n <label class=\"control-label\" ng-show=\"showTitle()\">{$:: form.title $}</label>\n <ol class=\"list-group\" sf-field-model ui-sortable=\"form.sortOptions\">\n <li class=\"list-group-item {$::form.fieldHtmlClass$}\"\n schema-form-array-items\n sf-field-model=\"ng-repeat\"\n ng-repeat=\"item in $$value$$ track by $index\">\n <button ng-hide=\"form.readonly || form.remove === null\"\n ng-click=\"deleteFromArray($index)\"\n ng-disabled=\"form.schema.minItems >= modelArray.length\"\n type=\"button\" class=\"close pull-right\">\n <span aria-hidden=\"true\">×</span>\n <span class=\"sr-only\">\n <translate>Close</translate>\n </span>\n </button>\n </li>\n </ol>\n <div class=\"clearfix\" ng-model=\"modelArray\" schema-validate=\"form\">\n <div class=\"help-block\"\n ng-show=\"(hasError() && errorMessage(schemaError())) || form.description\"\n ng-bind-html=\"(hasError() && errorMessage(schemaError())) || form.description\">\n </div>\n\n <button ng-hide=\"form.readonly || form.add === null\"\n ng-click=\"appendToArray()\"\n ng-disabled=\"form.schema.maxItems <= modelArray.length\"\n type=\"button\"\n class=\"btn {$::form.style.add || \'btn-default\' $} pull-right\">\n <span class=\"fa fa-plus\"></span>\n {$::form.add$}\n <span ng-if=\"!form.add\">\n <translate>Add</translate>\n </span>\n </button>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/checkbox.html","<div class=\"form-group hz-checkbox\">\n <div class=\"themable-checkbox {$::form.htmlClass$}\"\n ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\">\n <input type=\"checkbox\"\n sf-changed=\"form\"\n ng-disabled=\"form.readonly\"\n sf-field-model\n schema-validate=\"form\"\n class=\"themable-checkbox {$::form.fieldHtmlClass$}\"\n name=\"{$::form.key.slice(-1)[0]$}\"\n id=\"{$::form.key.slice(-1)[0]$}\">\n <label for=\"{$::form.key.slice(-1)[0]$}\"\n class=\"{$::form.labelHtmlClass$}\">\n <span>{$::form.title$}</span>\n </label>\n <div class=\"help-block\" sf-message=\"form.description\"></div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/checkboxes.html","<div sf-field-model=\"sf-new-array\"\n sf-new-array\n class=\"hz-checkboxes form-group {$::form.htmlClass$}\"\n ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\">\n <label class=\"control-label {$::form.labelHtmlClass$}\"\n sf-field-model\n schema-validate=\"form\"\n ng-show=\"showTitle()\">{$::form.title$}</label>\n\n <div class=\"checkbox\" ng-repeat=\"val in titleMapValues track by $index\" >\n <label>\n <input type=\"checkbox\"\n ng-disabled=\"form.readonly\"\n sf-changed=\"form\"\n class=\"{$::form.fieldHtmlClass$}\"\n ng-model=\"titleMapValues[$index]\"\n name=\"{$::form.key.slice(-1)[0]$}\">\n <span ng-bind-html=\"form.titleMap[$index].name\"></span>\n </label>\n </div>\n <div class=\"help-block\" sf-message=\"form.description\"></div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/default.html","<div class=\"form-group hz-input {$::form.htmlClass$}\"\n ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess(), \'has-feedback\': form.feedback !== false }\">\n <label class=\"control-label {$::form.labelHtmlClass$}\" ng-class=\"{\'sr-only\': !showTitle()}\" for=\"{$::form.key.slice(-1)[0]$}\">\n <span>{$::form.title$}</span>\n <span ng-if=\"form.required\" class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n\n <input ng-if=\"!form.fieldAddonLeft && !form.fieldAddonRight\"\n ng-show=\"form.key\"\n type=\"{$::form.type$}\"\n step=\"any\"\n sf-changed=\"form\"\n placeholder=\"{$::form.placeholder$}\"\n class=\"form-control {$::form.fieldHtmlClass$}\"\n id=\"{$::form.key.slice(-1)[0]$}\"\n sf-field-model\n ng-disabled=\"form.readonly\"\n schema-validate=\"form\"\n name=\"{$::form.key.slice(-1)[0]$}\"\n aria-describedby=\"{$::form.key.slice(-1)[0] + \'Status\'$}\">\n\n <div ng-if=\"form.fieldAddonLeft || form.fieldAddonRight\"\n ng-class=\"{\'input-group\': (form.fieldAddonLeft || form.fieldAddonRight)}\">\n <span ng-if=\"form.fieldAddonLeft\"\n class=\"input-group-addon\"\n ng-bind-html=\"form.fieldAddonLeft\"></span>\n <input ng-show=\"form.key\"\n type=\"{$::form.type$}\"\n step=\"any\"\n sf-changed=\"form\"\n placeholder=\"{$::form.placeholder$}\"\n class=\"form-control {$::form.fieldHtmlClass$}\"\n id=\"{$::form.key.slice(-1)[0]$}\"\n sf-field-model\n ng-disabled=\"form.readonly\"\n schema-validate=\"form\"\n name=\"{$::form.key.slice(-1)[0]$}\"\n aria-describedby=\"{$::form.key.slice(-1)[0] + \'Status\'$}\">\n\n <span ng-if=\"form.fieldAddonRight\"\n class=\"input-group-addon\"\n ng-bind-html=\"form.fieldAddonRight\"></span>\n </div>\n\n <span ng-if=\"form.feedback !== false\"\n class=\"form-control-feedback\"\n ng-class=\"evalInScope(form.feedback) || {\'fa\': true, \'fa-check\': hasSuccess(), \'fa-times\': hasError() }\"\n aria-hidden=\"true\"></span>\n\n <span ng-if=\"hasError() || hasSuccess()\"\n id=\"{$::form.key.slice(-1)[0] + \'Status\'$}\"\n class=\"sr-only\">{$ hasSuccess() ? \'(success)\' : \'(error)\' $}</span>\n\n <div class=\"help-block\" sf-message=\"form.description\"></div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/fieldset.html","<fieldset ng-disabled=\"form.readonly\" class=\"hz-fieldset {$::form.htmlClass$}\">\n <legend ng-class=\"{\'sr-only\': !showTitle() }\">{$:: form.title $}</legend>\n <div class=\"help-block\" ng-show=\"form.description\" ng-bind-html=\"form.description\"></div>\n</fieldset>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/help.html","<p class=\"hz-help {$::form.htmlClass$}\" ng-bind-html=\"form.helpvalue\"></p>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/radio-buttons.html","<div class=\"form-group hz-radio-buttons {$::form.htmlClass$}\"\n ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\">\n <div>\n <label class=\"{$::form.labelHtmlClass$}\" ng-show=\"showTitle()\">{$::form.title$}</label>\n </div>\n <div class=\"btn-group\">\n <label sf-field-model=\"replaceAll\" class=\"btn {$:: (item.value === $$value$$) ? form.style.selected || \'btn-default\' : form.style.unselected || \'btn-default\'; $}\"\n ng-class=\"{ active: item.value === $$value$$ }\"\n ng-repeat=\"item in form.titleMap\">\n <input type=\"radio\"\n class=\"{$::form.fieldHtmlClass$}\"\n sf-changed=\"form\"\n style=\"display: none;\"\n ng-disabled=\"form.readonly\"\n sf-field-model\n schema-validate=\"form\"\n ng-value=\"item.value\"\n name=\"{$::form.key.join(\'.\')$}\">\n <span>{$::item.name$}</span>\n </label>\n </div>\n <div class=\"help-block\" sf-message=\"form.description\"></div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/radios-inline.html","<div class=\"hz-radios-inline form-group {$::form.htmlClass$}\"\n ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\">\n <label class=\"control-label {$::form.labelHtmlClass$}\"\n ng-show=\"showTitle()\" sf-field-model\n schema-validate=\"form\" >{$::form.title$}</label>\n <div>\n <label class=\"radio-inline\" ng-repeat=\"item in form.titleMap\">\n <input type=\"radio\"\n class=\"{$::form.fieldHtmlClass$}\"\n sf-changed=\"form\"\n ng-disabled=\"form.readonly\"\n sf-field-model\n ng-value=\"item.value\"\n name=\"{$::form.key.join(\'.\')$}\">\n <span ng-bind-html=\"item.name\"></span>\n </label>\n </div>\n <div class=\"help-block\" sf-message=\"form.description\"></div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/radios.html","<div class=\"hz-radios form-group {$::form.htmlClass$}\"\n ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\">\n <label class=\"control-label {$::form.labelHtmlClass$}\"\n sf-field-model schema-validate=\"form\"\n ng-show=\"showTitle()\">{$::form.title$}</label>\n <div class=\"radio\" ng-repeat=\"item in form.titleMap\">\n <label>\n <input type=\"radio\"\n class=\"{$::form.fieldHtmlClass$}\"\n sf-changed=\"form\"\n ng-disabled=\"form.readonly\"\n sf-field-model\n ng-value=\"item.value\"\n name=\"{$::form.key.join(\'.\')$}\">\n <span ng-bind-html=\"item.name\"></span>\n </label>\n </div>\n <div class=\"help-block\" sf-message=\"form.description\"></div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/section.html","<div class=\"hz-section {$::form.htmlClass$}\"></div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/select.html","<div class=\"hz-select form-group {$::form.htmlClass$}\"\n ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-feedback\': form.feedback !== false}\">\n <label class=\"control-label {$::form.labelHtmlClass$}\" ng-show=\"showTitle()\">\n <span>{$::form.title$}</span>\n <span ng-if=\"form.required\" class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n <select sf-field-model\n ng-disabled=\"form.readonly\"\n sf-changed=\"form\"\n class=\"form-control {$::form.fieldHtmlClass$}\"\n schema-validate=\"form\"\n ng-options=\"item.value as item.name group by item.group for item in form.titleMap\"\n name=\"{$::form.key.slice(-1)[0]$}\">\n </select>\n <div class=\"help-block\" sf-message=\"form.description\"></div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/submit.html","<div class=\"hz-submit form-group {$::form.htmlClass$}\">\n <input type=\"submit\"\n class=\"btn {$:: form.style || \'btn-primary\' $} {$::form.fieldHtmlClass$}\"\n value=\"{$::form.title$}\"\n ng-disabled=\"form.readonly\"\n ng-if=\"form.type === \'submit\'\">\n <button class=\"btn {$:: form.style || \'btn-default\' $}\"\n type=\"button\"\n ng-click=\"buttonClick($event,form)\"\n ng-disabled=\"form.readonly\"\n ng-if=\"form.type !== \'submit\'\">\n <span ng-if=\"form.icon\" class=\"{$::form.icon$}\"></span>\n <span class=\"hz-submit-title\">{$::form.title$}</span>\n </button>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/tabarray.html","<div ng-init=\"selected = { tab: 0 }\"\n ng-model=\"modelArray\" schema-validate=\"form\"\n sf-field-model=\"sf-new-array\"\n sf-new-array\n class=\"clearfix hz-tabarray schema-form-tabarray-{$form.tabType || \'left\'$} {$form.htmlClass$}\">\n <div ng-if=\"!form.tabType || form.tabType !== \'right\'\"\n ng-class=\"{\'col-xs-3\': !form.tabType || form.tabType === \'left\'}\">\n <ul class=\"nav nav-tabs\"\n ng-class=\"{ \'tabs-left\': !form.tabType || form.tabType === \'left\'}\">\n <li sf-field-model=\"ng-repeat\"\n ng-repeat=\"item in $$value$$ track by $index\"\n ng-click=\"$event.preventDefault() || (selected.tab = $index)\"\n ng-class=\"{active: selected.tab === $index}\">\n <a href=\"#\">{$interp(form.title,{\'$index\':$index, value: item}) || $index$}</a>\n </li>\n <li ng-hide=\"form.readonly\"\n ng-disabled=\"form.schema.maxItems <= modelArray.length\"\n ng-click=\"$event.preventDefault() || (selected.tab = appendToArray().length - 1)\">\n <a href=\"#\">\n <span class=\"fa fa-plus\"></span>\n <span class=\"hz-tabarray-add\">{$ form.add || \'Add\'$}</span>\n </a>\n </li>\n </ul>\n </div>\n\n <div ng-class=\"{\'col-xs-9\': !form.tabType || form.tabType === \'left\' || form.tabType === \'right\'}\">\n <div class=\"tab-content {$form.fieldHtmlClass$}\">\n <div class=\"tab-pane clearfix tab{$selected.tab$} index{$$index$}\"\n sf-field-model=\"ng-repeat\"\n ng-repeat=\"item in $$value$$ track by $index\"\n ng-show=\"selected.tab === $index\"\n ng-class=\"{active: selected.tab === $index}\">\n\n <div schema-form-array-items></div>\n <button ng-hide=\"form.readonly\"\n ng-click=\"selected.tab = deleteFromArray($index).length - 1\"\n ng-disabled=\"form.schema.minItems >= modelArray.length\"\n type=\"button\"\n class=\"btn {$ form.style.remove || \'btn-default\' $} pull-right\">\n <span class=\"fa fa-trash\"></span>\n <span class=\"hz-tabarray-remove\">{$::form.remove || \'Remove\'$}</span>\n </button>\n </div>\n <div class=\"help-block\"\n ng-show=\"(hasError() && errorMessage(schemaError())) || form.description\"\n ng-bind-html=\"(hasError() && errorMessage(schemaError())) || form.description\">\n </div>\n </div>\n </div>\n\n <div ng-if=\"form.tabType === \'right\'\" class=\"col-xs-3\">\n <ul class=\"nav nav-tabs tabs-right\">\n <li sf-field-model=\"ng-repeat\"\n ng-repeat=\"item in $$value$$ track by $index\"\n ng-click=\"$event.preventDefault() || (selected.tab = $index)\"\n ng-class=\"{active: selected.tab === $index}\">\n <a href=\"#\">{$interp(form.title,{\'$index\':$index, value: item}) || $index$}</a>\n </li>\n <li ng-hide=\"form.readonly\"\n ng-disabled=\"form.schema.maxItems <= modelArray.length\"\n ng-click=\"$event.preventDefault() || (selected.tab = appendToArray().length - 1)\">\n <a href=\"#\">\n <span class=\"fa fa-plus\"></span>\n <span class=\"hz-tabarray-add\">{$::form.add || \'Add\'$}</span>\n </a>\n </li>\n </ul>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/tabs.html","<div ng-init=\"model.tabs = { selected: 0 }\" class=\"row hz-tabs {$::form.htmlClass$}\">\n <div class=\"col-xs-12 col-sm-3\">\n <button type=\"button\"\n data-toggle=\"collapse\"\n data-target=\"#wizard-side-nav\"\n aria-expanded=\"false\"\n class=\"navbar-toggle btn btn-default collapsed wizard-nav-toggle\">\n <span translate class=\"sr-only\">Toggle navigation</span>\n <span class=\"fa fa-bars\"></span>\n <span translate>Toggle navigation</span>\n </button>\n\n <div class=\"collapse navbar-collapse wizard-nav\" id=\"wizard-side-nav\">\n <ul class=\"nav nav-pills nav-stacked\">\n <li role=\"presentation\"\n class=\"nav-item\"\n ng-repeat=\"tab in form.tabs\"\n ng-init=\"model.tabs.length = form.tabs.length\"\n ng-disabled=\"form.readonly\"\n ng-click=\"$event.preventDefault() || (model.tabs.selected = $index)\"\n ng-class=\"{active: model.tabs.selected === $index}\">\n <a href=\"#\">\n <span>{$::tab.title$}</span>\n <span class=\"hz-icon-required fa fa-asterisk\"\n ng-show=\"tab.required\"\n aria-hidden=\"true\"></span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"tab-content col-xs-12 col-sm-9 {$::form.fieldHtmlClass$}\"></div>\n\n <help-panel>\n <ng-include src=\"tab.help\"\n ng-repeat=\"tab in form.tabs track by $index\"\n ng-show=\"model.tabs.selected === $index\">\n </ng-include>\n </help-panel>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/fields/textarea.html","<div class=\"form-group hz-textarea has-feedback {$::form.htmlClass$}\"\n ng-class=\"{\'has-error\': form.disableErrorState !== true && hasError(), \'has-success\': form.disableSuccessState !== true && hasSuccess()}\">\n <label class=\"control-label {$::form.labelHtmlClass$}\"\n ng-class=\"{\'sr-only\': !showTitle()}\"\n for=\"{$::form.key.slice(-1)[0]$}\">\n <span>{$::form.title$}</span>\n <span ng-if=\"form.required\" class=\"hz-icon-required fa fa-asterisk\"></span>\n </label>\n\n <textarea ng-if=\"!form.fieldAddonLeft && !form.fieldAddonRight\"\n class=\"form-control {$::form.fieldHtmlClass$}\"\n id=\"{$::form.key.slice(-1)[0]$}\"\n sf-changed=\"form\"\n placeholder=\"{$::form.placeholder$}\"\n ng-disabled=\"form.readonly\"\n sf-field-model\n schema-validate=\"form\"\n name=\"{$::form.key.slice(-1)[0]$}\"></textarea>\n\n <div ng-if=\"form.fieldAddonLeft || form.fieldAddonRight\"\n ng-class=\"{\'input-group\': (form.fieldAddonLeft || form.fieldAddonRight)}\">\n <span ng-if=\"form.fieldAddonLeft\"\n class=\"input-group-addon\"\n ng-bind-html=\"form.fieldAddonLeft\"></span>\n <textarea class=\"form-control {$::form.fieldHtmlClass$}\"\n id=\"{$::form.key.slice(-1)[0]$}\"\n sf-changed=\"form\"\n placeholder=\"{$::form.placeholder$}\"\n ng-disabled=\"form.readonly\"\n sf-field-model\n schema-validate=\"form\"\n name=\"{$::form.key.slice(-1)[0]$}\"></textarea>\n <span ng-if=\"form.fieldAddonRight\"\n class=\"input-group-addon\"\n ng-bind-html=\"form.fieldAddonRight\"></span>\n </div>\n\n <span class=\"help-block\" sf-message=\"form.description\"></span>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/form/modal-form.html","<div class=\"modal-header\">\n <a class=\"close\" ng-click=\"$dismiss()\">\n <span class=\"fa fa-times\"></span>\n </a>\n <div class=\"h4 modal-title\">\n {$::ctrl.formTitle$}\n </div>\n</div>\n\n<div class=\"modal-body\">\n <form name=\"schemaForm\"\n sf-schema=\"ctrl.schema\"\n sf-form=\"ctrl.form\"\n sf-model=\"ctrl.model\"\n sf-options=\"{ validateOnRender: true,\n pristine: { errors: false, success: false } }\">\n </form>\n</div>\n\n<div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-default pull-left\" ng-click=\"$dismiss()\">\n <span class=\"fa fa-close\"></span>\n <translate>Cancel</translate>\n </button>\n\n <button type=\"button\"\n class=\"btn btn-default\"\n ng-click=\"ctrl.model.tabs.selected = ctrl.model.tabs.selected - 1\"\n ng-disabled=\"ctrl.model.tabs.selected === 0\"\n ng-if=\"ctrl.model.tabs.length > 1\">\n <span class=\"fa fa-angle-left\"></span>\n <translate>Back</translate>\n </button>\n\n <button type=\"button\"\n class=\"btn btn-default\"\n ng-click=\"ctrl.model.tabs.selected = ctrl.model.tabs.selected + 1\"\n ng-if=\"ctrl.model.tabs.length > 1\"\n ng-disabled=\"ctrl.model.tabs.selected === ctrl.model.tabs.length-1\">\n <translate>Next</translate>\n <span class=\"fa fa-angle-right\"></span>\n </button>\n\n <button type=\"button\"\n class=\"btn btn-primary\"\n ng-disabled=\"schemaForm.$invalid\"\n ng-click=\"ctrl.submit()\">\n <span class=\"fa fa-{$::ctrl.submitIcon$}\"></span>\n {$::ctrl.submitText$}\n </button>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/headers/hz-page-header.html","<div class=\'page-header\'>\n <h1>{$ ::header $}</h1>\n <p>{$ ::description $}</p>\n <ng-transclude></ng-transclude>\n</div>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/help-panel/help-panel.html","<button class=\"btn btn-default help-toggle collapsed\" data-target=\"#{$::uuid$}\"\n data-toggle=\"collapse\" role=\"button\" aria-expanded=\"false\"\n aria-controls=\"{$::uuid$}\" ng-hide=\"hideHelpBtn\" type=\"button\">\n <span class=\"fa\"></span>\n</button>\n\n<div id=\"{$::uuid$}\" class=\"help-panel collapse width\" ng-class=\"{\'in\': openHelp}\">\n <div class=\"well\" ng-transclude>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/load-edit/load-edit.html","<div class=\"form-group\" ng-class=\"{ \'has-error\': scriptLength >= config.MAX_SCRIPT_SIZE }\">\n <label for=\"customization-script\" class=\"control-label\">\n <span translate>Customization Script</span>\n <span ng-show=\"scriptModified\"\n translate>\n (Modified)</span>\n </label>\n <span class=\"pull-right\" ng-class=\"{ \'text-danger\': scriptLength >= config.MAX_SCRIPT_SIZE }\">\n <span translate translate-comment=\"Strings between {$ and $} should be left untranslated.\">\n Script size: {$ (scriptLength || 0) | bytes $} of {$ config.MAX_SCRIPT_SIZE | bytes $}\n </span>\n </span>\n <textarea class=\"form-control\"\n rows=\"8\"\n id=\"customization-script\"\n name=\"customization-script\"\n ng-maxlength=\"config.MAX_SCRIPT_SIZE\"\n ng-model=\"textContent\">\n </textarea>\n <span class=\"help-block\"\n ng-show=\"scriptLength >= config.MAX_SCRIPT_SIZE\"\n translate>\n The script is larger than the maximum size\n </span>\n</div>\n\n<div class=\"form-group\" ng-show=\"config.fileApiSupported\">\n <label for=\"load-script\" translate>Load script from a file</label>\n <input id=\"load-script\" type=\"file\">\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/magic-search/hz-magic-search-bar.html","<div class=\"form-group has-feedback magic-search-bar\">\n <div class=\"input-group\">\n <span class=\"input-group-addon\">\n <span class=\"fa fa-search\"></span>\n </span>\n <magic-search\n ng-if=\"filterStrings && filterFacets\"\n class=\"form-control\"\n strings=\"filterStrings\"\n facets=\"{{ filterFacets }}\">\n </magic-search>\n <span ng-if=\"showSettings\" class=\"input-group-btn\" ng-click=\"searchSettingsCallback()\">\n <button class=\"btn btn-default\" type=\"button\">\n <span class=\"fa fa-cog fa-lg\"></span>\n </button>\n </span>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/magic-search/magic-search.html","<!--! Magic Searchbar -->\n<div class=\"magic-search\">\n <div class=\"search-bar\">\n <span class=\"fi-filter fa fa-search go\"></span>\n <span class=\"search-main-area\">\n <span class=\"radius secondary item\"\n ng-repeat=\"facet in ctrl.currentSearch\" ng-cloak=\"cloak\" ng-class=\"{\'server-side-item\': facet.isServer}\">\n <span data-toggle=\"tooltip\" title=\"{$ ::strings.serverFacet $}\"\n ng-class=\"{\'fa fa-server\': facet.isServer}\"></span>\n <span data-toggle=\"tooltip\" title=\"{$ ::strings.clientFacet $}\"\n ng-class=\"{\'fa fa-desktop\': !facet.isServer}\"></span>\n <span class=\"magic-search-result-title\">{$ ::facet.label[0] $}:</span>\n <span class=\"magic-search-result-string\">{$ ::facet.label[1] $}</span>\n <a class=\"remove\" ng-click=\"ctrl.removeFacet($index, $event)\" title=\"{$ ::strings.remove $}\">\n <span class=\"fi-x fa fa-times\"></span>\n </a>\n </span>\n <span class=\"search-selected\" ng-cloak=\"\" ng-show=\"ctrl.facetSelected\">\n {$ ctrl.facetSelected.label[0] $}:\n </span>\n <!-- For bootstrap, the uib-dropdown attribute is moved from input up to div. -->\n <span class=\"search-entry\" uib-dropdown is-open=\"ctrl.isMenuOpen\">\n <input class=\"search-input\" type=\"text\" uib-dropdown-toggle\n placeholder=\"{$ strings.prompt $}\" autocomplete=\"off\" />\n <ul class=\"facet-drop f-dropdown dropdown-menu\" data-dropdown-content=\"\"\n ng-if=\"ctrl.filteredObj.length > 0\">\n <li ng-repeat=\"facet in ctrl.filteredObj\" ng-show=\"!ctrl.facetSelected\">\n <a ng-click=\"ctrl.facetClicked($index, $event, facet.name)\"\n ng-show=\"!ctrl.isMatchLabel(facet.label)\">{$ ::facet.label $}</a>\n <a ng-click=\"ctrl.facetClicked($index, $event, facet.name)\"\n ng-show=\"ctrl.isMatchLabel(facet.label)\">\n {$ ::facet.label[0] $}<span class=\"match\">{$ ::facet.label[1] $}</span>{$ ::facet.label[2] $}\n </a>\n </li>\n <li ng-repeat=\"option in ctrl.filteredOptions\" ng-show=\"ctrl.facetSelected\">\n <a ng-click=\"ctrl.optionClicked($index, $event, option.key)\"\n ng-show=\"!ctrl.isMatchLabel(option.label)\">\n {$ option.label $}\n </a>\n <a ng-click=\"ctrl.optionClicked($index, $event, option.key)\"\n ng-show=\"ctrl.isMatchLabel(option.label)\">\n {$ ::option.label[0] $}<span class=\"match\">{$ ::option.label[1] $}</span>{$ ::option.label[2] $}\n </a>\n </li>\n </ul>\n </span>\n </span>\n <a class=\"magic-search-clear\" ng-click=\"ctrl.clearSearch()\" title=\"{$ ::strings.cancel $}\">\n <span class=\"fi-x fa fa-times cancel\"></span>\n </a>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/metadata/display/metadata-display.html","<div class=\"metadata-display\" ng-if=\"!ctrl.hide\">\n <div class=\"row\">\n <div class=\"col-sm-4 col-md-3 selector\">\n <div class=\"selector-item\"\n ng-repeat=\"item in ctrl.tree.flatTree | filter: ctrl.listFilter\"\n ng-click=\"ctrl.onSelect(item)\"\n ng-class=\"{ active: ctrl.selected === item }\">\n <span ng-bind=\"::item.label\"></span>\n </div>\n </div>\n\n <div class=\"col-sm-8 col-md-9 selected-details\">\n <div class=\"row\">\n <div ng-repeat=\"item in ctrl.tree.flatTree | filter: ctrl.childrenFilter\">\n <div class=\"col-sm-3 auto-width\" title=\"{$ ::item.description $}\">\n <strong class=\"text-capitalize\">\n <span ng-bind=\"::item.label\"></span>\n </strong>\n <span ng-bind=\"::item.leaf.value\"></span>\n </div>\n </div>\n </div>\n <div class=\"row description\">\n <div class=\"col-sm-12\">\n <strong><span translate>Detail Information</span></strong>\n </div>\n <div class=\"col-sm-12\">\n <span ng-bind=\"ctrl.selected.description\"></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/metadata/tree/metadata-tree-item.html","<div class=\"metadata-tree-item\" ng-form=\"itemForm\">\n <div class=\"input-group input-group-sm\"\n ng-switch on=\"ctrl.item.leaf.type\"\n ng-if=\"ctrl.item.leaf.type !== \'array\'\"\n ng-class=\"{\'has-error\': itemForm.property.$invalid && itemForm.property.$dirty}\">\n <span class=\"input-group-addon\"\n title=\"{$ ::ctrl.item.leaf.name $}\"\n ng-bind=\"::ctrl.item.leaf.name\">\n </span>\n <input ng-switch-when=\"string\"\n ng-if=\"!ctrl.item.leaf.enum\"\n name=\"property\"\n type=\"text\"\n class=\"form-control\"\n ng-pattern=\"ctrl.item.leaf.pattern\"\n required\n ng-model=\"ctrl.item.leaf.value\"\n ng-minlength=\"{$ ::ctrl.item.leaf.minLength $}\"\n ng-maxlength=\"{$ ::ctrl.item.leaf.maxLength $}\"\n ng-disabled=\"ctrl.item.leaf.readonly\"/>\n <select ng-switch-when=\"string\"\n ng-if=\"ctrl.item.leaf.enum\"\n name=\"property\"\n class=\"form-control\"\n required\n ng-model=\"ctrl.item.leaf.value\"\n ng-options=\"op for op in ctrl.item.leaf.enum\"\n ng-disabled=\"ctrl.item.leaf.readonly\">\n </select>\n <input ng-switch-when=\"integer\"\n name=\"property\"\n type=\"number\"\n class=\"form-control\"\n required\n ng-model=\"ctrl.item.leaf.value\"\n ng-pattern=\"/^-?\\d+$/\"\n min=\"{$ ::ctrl.item.leaf.minimum $}\"\n max=\"{$ ::ctrl.item.leaf.maximum $}\"\n step=\"1\"\n ng-disabled=\"ctrl.item.leaf.readonly\"/>\n <input ng-switch-when=\"number\"\n name=\"property\"\n type=\"number\"\n class=\"form-control\"\n required\n ng-model=\"ctrl.item.leaf.value\"\n min=\"{$ ::ctrl.item.leaf.minimum $}\"\n max=\"{$ ::ctrl.item.leaf.maximum $}\"\n ng-disabled=\"ctrl.item.leaf.readonly\"/>\n <div class=\"input-group-addon bool\"\n ng-switch-when=\"boolean\">\n <input name=\"property\"\n type=\"checkbox\"\n ng-model=\"ctrl.item.leaf.value\"\n ng-disabled=\"ctrl.item.leaf.readonly\"/>\n </div>\n <div class=\"input-group-btn\">\n <a class=\"btn btn-default\"\n ng-click=\"ctrl.action()\">\n <span class=\"fa fa-minus\"></span>\n </a>\n </div>\n </div>\n <div ng-if=\"ctrl.item.leaf.type === \'array\'\"\n class=\"panel panel-default multiselect\">\n <div class=\"panel-heading\">\n <div ng-click=\"ctrl.switchOpened()\">\n <span class=\"metadata-tree-item-icon fa fa-fw\"\n ng-class=\"ctrl.item.leaf.readonly ? \'\' : ctrl.opened ? \'fa-chevron-down\' : \'fa-chevron-right\'\">\n </span>\n <span class=\"metadata-tree-item-label\" ng-bind=\"::ctrl.item.leaf.name\"></span>\n <a class=\"btn btn-xs btn-default metadata-tree-item-button\" ng-click=\"ctrl.action()\">\n <span class=\"fa fa-minus\"></span>\n </a>\n </div>\n </div>\n <div class=\"panel-body values\"\n ng-class=\"{disabled: ctrl.item.leaf.readonly}\">\n <span ng-repeat=\"val in ctrl.item.leaf.value\">\n <span class=\"label label-default\"\n ng-click=\"ctrl.removeValue(val)\">\n <span ng-bind=\"::val\"></span>\n <span class=\"fa fa-times\" ng-if=\"!ctrl.item.leaf.readonly\"></span>\n </span>\n </span>\n </div>\n <ul class=\"list-group options\" ng-show=\"ctrl.opened\">\n <li class=\"list-group-item\"\n ng-repeat=\"val in ctrl.values\"\n ng-click=\"ctrl.addValue(val)\">\n <span ng-bind=\"::val\"></span>\n </li>\n </ul>\n <div class=\"panel-footer\" ng-show=\"ctrl.opened\">\n <div class=\"form-inline clearfix\">\n <div class=\"form-group pull-right\">\n <label>Operator</label>\n <select class=\"form-control input-sm\"\n ng-model=\"ctrl.item.leaf.operator\"\n ng-options=\"val for val in ctrl.item.leaf.operators\">\n </select>\n </div>\n </div>\n </div>\n </div>\n <div class=\"label label-info\">\n <span ng-bind=\"::ctrl.item.breadcrumb()\"></span>\n </div>\n <div class=\"label label-danger\"\n ng-if=\"itemForm.$invalid && itemForm.$dirty\">\n <span ng-bind=\"ctrl.formatErrorMessage(ctrl.item, itemForm.property.$error)\"></span>\n </div>\n</div>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/metadata/tree/metadata-tree.html","<div class=\"metadata-tree\">\n <div class=\"row\">\n <p class=\"col-md-12\">\n <span ng-bind=\"::ctrl.text.help\"></span>\n </p>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"row\">\n <div class=\"col-md-6 v-align\">\n <strong>\n <span ng-bind=\"::ctrl.text.available\"></span>\n </strong>\n </div>\n <div class=\"col-md-6\">\n <div class=\"has-feedback\">\n <input class=\"form-control input-sm\"\n type=\"text\" placeholder=\"{$ ::ctrl.text.filter $}\"\n ng-model=\"ctrl.filterText.available\"/>\n <span class=\"fa fa-search form-control-feedback\"></span>\n </div>\n </div>\n </div>\n </div>\n <ul class=\"list-group metadata-list-group\" ng-cloak>\n <li class=\"list-group-item\" ng-form=\"customItemForm\">\n <div class=\"input-group input-group-sm\"\n ng-class=\"{\'has-error\': customItemForm.$invalid && customItemForm.$dirty}\">\n <span class=\"input-group-addon\" ng-bind=\"::ctrl.text.custom\"></span>\n <input class=\"form-control\" type=\"text\" name=\"customItem\"\n ng-model=\"ctrl.customItem\"\n validate-unique=\"ctrl.checkNameUnique\"/>\n <span class=\"input-group-btn\">\n <button type=\'button\' class=\"btn btn-primary\"\n ng-click=\"ctrl.tree.addCustom(ctrl.customItem); ctrl.customItem=\'\'\"\n ng-disabled=\"!ctrl.customItem || customItemForm.$invalid\">\n <span class=\"fa fa-plus\"></span>\n </button>\n </span>\n </div>\n <div class=\"label label-danger\"\n ng-if=\"customItemForm.$invalid && customItemForm.$dirty\">\n <span ng-bind=\"::ctrl.text.duplicate\"></span>\n </div>\n </li>\n\n <li ng-repeat=\"item in availableList = (ctrl.tree.flatTree | filter: ctrl.availableFilter | filter: ctrl.quickFilter)\"\n ng-class=\"\'level-\' + item.level + (ctrl.tree.selected===item?\' active\':\'\')\"\n ng-class-odd=\"\'dark-stripe\'\"\n ng-class-even=\"\'light-stripe\'\"\n class=\"list-group-item\"\n ng-click=\"ctrl.tree.select(item)\">\n <div class=\"clearfix\">\n <div class=\"pull-left\">\n <span ng-class=\"{leaf: item.leaf}\">\n <span class=\"fa\" ng-show=\"!item.leaf\"\n ng-class=\"item.expanded ? \'fa-chevron-down\' : \'fa-chevron-right\'\"></span>\n <span ng-bind=\"::item.label\"></span>\n </span>\n </div>\n <div class=\"pull-right\">\n <a class=\"btn btn-primary btn-xs\"\n ng-click=\"ctrl.tree.markAsAdded(item)\">\n <span class=\"fa fa-plus\"></span>\n </a>\n </div>\n </div>\n </li>\n <li class=\"list-group-item disabled\"\n ng-show=\"availableList.length===0\">\n <span ng-bind=\"::ctrl.text.noAvailable\"></span>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"col-md-6\">\n <div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <div class=\"row\">\n <div class=\"col-md-6 v-align\">\n <strong>\n <span ng-bind=\"::ctrl.text.existing\"></span>\n </strong>\n </div>\n <div class=\"col-md-6\">\n <div class=\"has-feedback\">\n <input class=\"form-control input-sm\"\n type=\"text\" placeholder=\"{$ ::ctrl.text.filter $}\"\n ng-model=\"ctrl.filterText.existing\"/>\n <span class=\"fa fa-search form-control-feedback\"></span>\n </div>\n </div>\n </div>\n </div>\n <ul class=\"list-group metadata-list-group\" ng-form=\"ctrl.metadataForm\" ng-cloak>\n <li ng-repeat=\"item in existingList = (ctrl.tree.flatTree | filter:{$:ctrl.filterText.existing, added:true, leaf:\'!false\'} | orderBy:\'leaf.name\')\"\n ng-class=\"{\'active\': ctrl.tree.selected===item}\"\n ng-class-odd=\"\'dark-stripe\'\"\n ng-class-even=\"\'light-stripe\'\"\n class=\"list-group-item\"\n ng-click=\"ctrl.tree.select(item)\">\n <metadata-tree-item item=\"item\" text=\"ctrl.text\"\n action=\"ctrl.tree.unmarkAsAdded(item)\">\n </metadata-tree-item>\n </li>\n <li class=\"list-group-item disabled\"\n ng-show=\"existingList.length===0\">\n <span ng-bind=\"::ctrl.text.noExisting\"></span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n\n <div class=\"well\">\n <div ng-show=\"ctrl.tree.selected\">\n <p>\n <strong>\n <span ng-bind=\"ctrl.tree.selected.label\"></span>\n </strong>\n <span ng-show=\"ctrl.tree.selected.leaf\">(<em><span ng-bind=\"ctrl.tree.selected.leaf.name\"></span></em>)</span>\n </p>\n\n <p><span ng-bind=\"ctrl.tree.selected.description\"></span></p>\n </div>\n <div ng-hide=\"ctrl.tree.selected\">\n <span ng-bind=\"::ctrl.text.item_help\"></span>\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/modal/simple-modal.html","<div class=\"modal-header\">\n <button type=\"button\" class=\"close\" ng-click=\"modalCtrl.cancel()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-times\"></span>\n </button>\n <h3 class=\"modal-title\">\n <span ng-bind=\"::modalCtrl.context.title\"></span>\n </h3>\n</div>\n<div class=\"modal-body clearfix\">\n <p ng-bind=\"::modalCtrl.context.body\"></p>\n</div>\n<div class=\"modal-footer\">\n <button class=\"btn btn-default\"\n type=\"button\" ng-click=\"modalCtrl.cancel()\">\n <span ng-bind=\"::modalCtrl.context.cancel\"></span>\n </button>\n <button class=\"btn btn-primary\"\n type=\"button\" ng-click=\"modalCtrl.submit()\">\n <span ng-bind=\"::modalCtrl.context.submit\"></span>\n </button>\n</div>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/panel/hz-resource-panel.html","<div>\n <hz-page-header header=\"{$ ctrl.pageName $}\"></hz-page-header>\n <ng-transclude></ng-transclude>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/property/hz-resource-property-list.html","<div class=\"row\">\n <div ng-repeat=\"propNames in propertyGroups\">\n <dl class=\"col-md-{$ getBootstrapColumnSpan(propertyGroups) $} {$ cls $}\">\n <div ng-repeat=\"propName in propNames\">\n <hz-resource-property\n resource-type-name=\"{$ resourceTypeName $}\"\n prop-name=\"{$ propName $}\"\n item=\"item\"></hz-resource-property>\n </div>\n </dl>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/property/hz-resource-property.html","<dt>{$ ctrl.config.label $}</dt>\n<dd>\n <hz-field config=\'ctrl.config\' item=\'ctrl.item\'></hz-field>\n</dd>\n\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/hz-detail-row.html","<!--\n Default detail row template\n\n May be overridden.\n\n The responsive columns that disappear typically should reappear here\n with the same responsive priority that they disappear.\n E.g. table header with rsp-p2 should be here with rsp-alt-p2\n The layout should minimize vertical space to reduce scrolling.\n-->\n<div class=\"row\">\n <span class=\"rsp-alt-p2\">\n <dl class=\"col-sm-2\" ng-repeat=\"column in config.columns\">\n <dt>{$ column.title $}</dt>\n <dd><hz-cell table=\"table\" column=\"column\" item=\"item\"></hz-cell></dd>\n </dl>\n </span>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/hz-dynamic-table.html","<!--\n Dynamic table template\n-->\n<hz-magic-search-context filter-facets=\"filterFacets\">\n <div hz-table\n track-rows-by=\"config.trackId\"\n ng-cloak\n st-magic-search\n st-table=\"items\"\n st-safe-src=\"safeSrcItems\"\n class=\"hz-magic-search-context\">\n\n <div class=\"row\">\n <div class=\"hz-dynamic-table-preamble col-xs-12\">\n <hz-magic-search-bar class=\"hz-magic-search-bar\" ng-if=\"filterFacets\"></hz-magic-search-bar>\n <actions class=\"hz-dynamic-table-actions\" ng-if=\"batchActions\"\n allowed=\"batchActions\" type=\"batch\" result-handler=\"resultHandler\">\n </actions>\n </div>\n </div>\n\n <table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <!--\n This is where we display number of items and pagination controls in\n the header.\n -->\n <tr>\n <td hz-table-footer colspan=\"100\" items=\"items\"></td>\n </tr>\n <!--\n Table-column-headers:\n Set selectAll to True if you want to enable select all checkbox.\n Set expand to True if you want to inline details.\n -->\n <tr>\n <th ng-show=\"config.selectAll\" class=\"multi_select_column\">\n <div class=\"themable-checkbox\">\n <input type=\"checkbox\" id=\"hz-table-select-all\" hz-select-all=\"items\">\n <label for=\"hz-table-select-all\"></label>\n </div>\n </th>\n <th ng-show=\"config.expand\" class=\"expander\"></th>\n <th ng-repeat=\"column in config.columns\"\n class=\"rsp-p{$ column.priority $}\"\n st-sort=\"{$ column.id $}\"\n ng-attr-st-sort-default=\"{$ column.sortDefault $}\"\n translate\n ng-if=\"columnAllowed(column)\">\n {$ column.title $}\n </th>\n <th ng-if=\"itemActions\"></th>\n </tr>\n </thead>\n\n <tbody>\n <!--\n Table-rows:\n classes rsp-p1 rsp-p2 are responsive priority as user resizes window.\n -->\n <tr ng-repeat-start=\"item in items track by item[config.trackId]\"\n ng-class=\"{\'st-selected\': checked[item[config.trackId]],\n \'warning\': itemInTransitionFunction(item)}\">\n\n <td ng-show=\"config.selectAll\" class=\"multi_select_column\">\n <div class=\"themable-checkbox\">\n <input type=\"checkbox\"\n id=\"{$ item[config.trackId] $}\"\n ng-model=\"tCtrl.selections[item[config.trackId]].checked\"\n hz-select=\"item\">\n <label for=\"{$ item[config.trackId] $}\"></label>\n </div>\n </td>\n <td ng-show=\"config.expand\" class=\"expander\">\n <span class=\"fa fa-chevron-right\"\n hz-expand-detail\n duration=\"200\">\n </span>\n </td>\n <td ng-repeat=\"column in config.columns\"\n class=\"rsp-p{$ column.priority $}\"\n ng-if=\"columnAllowed(column)\">\n <hz-cell table=\"table\" column=\"column\" item=\"item\"></hz-cell>\n </td>\n <td ng-if=\"itemActions\" class=\"actions_column\">\n <!--\n Table-row-action-column:\n Actions taken here apply to a single item/row.\n -->\n <actions allowed=\"itemActions\" type=\"row\" item=\"item\" result-handler=\"resultHandler\"></actions>\n </td>\n </tr>\n\n <!--\n Detail-row:\n Contains detailed information on this item.\n Can be toggled using the chevron button.\n Ensure colspan is greater or equal to number of column-headers.\n -->\n <tr ng-if=\"config.expand\" ng-repeat-end class=\"detail-row\">\n <td class=\"detail\" colspan=\"100\">\n <hz-detail-row template-url=\"config.detailsTemplateUrl\">\n </hz-detail-row>\n </td>\n </tr>\n <tr hz-no-items message=\"config.noItemsMessage\" items=\"items\"></tr>\n </tbody>\n\n <!--\n Table-footer:\n This is where we display number of items and pagination controls.\n -->\n <tfoot hz-table-footer items=\"items\"></tfoot>\n </table>\n </div>\n</hz-magic-search-context>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/hz-no-items.html","<!--\n No-items-found:\n Display message if no items match current filter or table is empty\n-->\n<td colspan=\"100\" class=\"no-rows-help\" ng-if=\"items.length === 0\" translate>{$ message || \'No items to display.\' $}</td>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/hz-resource-table.html","<hz-dynamic-table\n table=\"ctrl\"\n config=\"ctrl.config\"\n items=\"ctrl.itemsSrc\"\n item-actions=\"ctrl.resourceType.itemActions\"\n client-full-text-search=\"true\"\n batch-actions=\"ctrl.batchActions\"\n filter-facets=\"ctrl.searchFacets\"\n result-handler=\"ctrl.actionResultHandler\"\n item-in-transition-function=\"ctrl.itemInTransitionFunction\"\n></hz-dynamic-table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/hz-table-footer.html","<!--\n Table-footer:\n Ensure colspan is greater or equal to number of column-headers.\n TODO: get items per page from the user settings\n-->\n<tr>\n <td colspan=\"100\">\n <span class=\"display\">{$ items.length|itemCount $}</span>\n <div st-pagination=\"\" st-items-by-page=\"20\" st-displayed-pages=\"20\"></div>\n <ng-transclude></ng-transclude>\n </td>\n</tr>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/no-items.mock.html","<table st-table=\"fakeTableData\" st-safe-src=\"safeTableData\" hz-table>\n <thead>\n <tr>\n <th>Animal</th>\n </tr>\n </thead>\n <tbody>\n <tr hz-no-items items=\"fakeTableData\" message=\"message\"></tr>\n </tbody>\n</table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/search-bar.html","<div class=\"form-group basic-search-bar\">\n <div class=\"input-group\">\n <span class=\"input-group-addon\">\n <span class=\"fa\"></span>\n </span>\n <input type=\"text\" st-search class=\"form-control\">\n </div>\n</div>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/st-table.mock.html","<table st-table=\"rows\">\n <thead>\n <tr>\n <th>\n <hz-search-bar group-classes=\"input-group-sm\"\n icon-classes=\"fa-search\">\n </hz-search-bar>\n </th>\n </tr>\n </thead>\n <tbody></tbody>\n</table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/table/table.mock.html","<table st-table=\"fakeData\" st-safe-src=\"safeFakeData\" hz-table>\n <thead>\n <tr>\n <th><input type=\"checkbox\" hz-select-all=\"fakeData\"/></th>\n <th></th>\n <th>Animal</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat-start=\"row in fakeData\">\n <td><input type=\"checkbox\" hz-select=\"row\" ng-model=\"tCtrl.selections[row.id].checked\"></td>\n <td><span class=\"fa fa-chevron-right\" hz-expand-detail item=\"row.animal\"></span></td>\n <td>{{ row.animal }}</td>\n </tr>\n <tr class=\"detail-row\" ng-repeat-end>\n <td class=\"detail\" colspan=\"3\"></td>\n </tr>\n </tbody>\n</table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/toast/toast.html","<div ng-repeat=\"toast in toast.get()\">\n <div class=\"alert alert-{$ ::toast.type $}\">\n <a class=\"close\" ng-click=\"toast.cancel($index)\"><span class=\"fa fa-times\"></span></a>\n <div><strong>{$ toast.typeMsg $}: </strong>{$ toast.msg $}</div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/transfer-table/transfer-table.basic.mock.html","<transfer-table tr-model=\"tableData\" limits=\"limits\">\n <available>\n <table st-table=\"tableData.available\" hz-table>\n <thead>\n <tr>\n <th>Animal</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"row in tableData.available\"\n ng-if=\"!trCtrl.allocatedIds[row.id]\">\n <td>{$ row.animal $}</td>\n <td>\n <action-list>\n <action callback=\"trCtrl.allocate\" item=\"row\">x</action>\n </action-list>\n </td>\n </tr>\n </tbody>\n </table>\n </available>\n <allocated>\n <table st-table=\"tableData.allocated\" hz-table>\n <thead>\n <tr>\n <th>Animal</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"alRow in tableData.allocated\">\n <td>{$ alRow.animal $}</td>\n <td>\n <action-list>\n <action callback=\"trCtrl.deallocate\" item=\"alRow\">x</action>\n </action-list>\n </td>\n </tr>\n </tbody>\n </table>\n </allocated>\n</transfer-table>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/transfer-table/transfer-table.clone.mock.html","<transfer-table tr-model=\"tableData\" clone-content>\n <table st-table=\"$displayItems\" st-safe-src=\"$sourceItems\">\n <tr>\n <th>ID</th>\n <th>Animal</th>\n <th>Action</th>\n </tr>\n <tr ng-repeat=\"item in $displayedItems\"\n ng-if=\"$isAllocatedTable || ($isAvailableTable && !trCtrl.allocatedIds[item.id])\">\n <td>{$ item.id $}</td>\n <td>{$ item.animal $}</td>\n <td>\n <action-list>\n <action ng-if=\"$isAllocatedTable\" callback=\"trCtrl.deallocate\" item=\"item\">-</action>\n <action ng-if=\"$isAvailableTable\" callback=\"trCtrl.allocate\" item=\"item\">+</action>\n </action-list>\n </td>\n </tr>\n </table>\n</transfer-table>");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/transfer-table/transfer-table.example.html","\n<transfer-table tr-model=\"data\" clone-content>\n <table st-table=\"$displayedItems\" st-safe-src=\"$sourceItems\"\n hz-table class=\"table table-striped table-rsp table-detail\">\n <thead>\n <!-- show search bar only for available table -->\n <tr ng-show=\"$isAvailableTable\">\n <th class=\"search-header\" colspan=\"10\">\n <hz-search-bar group-classes=\"input-group-sm\" icon-classes=\"fa-search\">\n </hz-search-bar>\n </th>\n </tr>\n <tr>\n <th st-sort=\"name\" st-sort-default class=\"rsp-p1\" translate>Name</th>\n <th st-sort=\"description\" class=\"rsp-p2\" translate>description</th>\n <th class=\"action-col\"></th>\n </tr>\n </thead>\n <tbody>\n <!-- no item message -->\n <tr ng-if=\"trCtrl.numAvailable() === 0\">\n <td colspan=\"10\">\n <div class=\"no-rows-help\" translate>\n No available items\n </div>\n </td>\n </tr>\n <tr ng-repeat=\"item in $displayedItems track by item.id\"\n ng-if=\"$isAllocatedTable || ($isAvailableTable && !trCtrl.allocatedIds[item.id])\">\n <td class=\"rsp-p1\">{$ item.name $}</td>\n <th class=\"rsp-p2\">{$ item.description $}</th>\n <td class=\"action-col\">\n <action-list>\n <!-- conditional actions -->\n <action ng-if=\"$isAllocatedTable\"\n action-classes=\"\'btn btn-sm btn-default\'\"\n callback=\"trCtrl.deallocate\" item=\"item\">\n <span class=\"fa fa-arrow-down\"></span>\n </action>\n <action ng-if=\"$isAvailableTable\"\n action-classes=\"\'btn btn-sm btn-default\'\"\n callback=\"trCtrl.allocate\" item=\"item\">\n <span class=\"fa fa-arrow-up\"></span>\n </action>\n </action-list>\n </td>\n </tr>\n </tbody>\n </table>\n</transfer-table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/transfer-table/transfer-table.html","<div class=\"transfer-table\">\n <!-- Allocation -->\n <div class=\"transfer-section\">\n <!-- Allocated section heading -->\n <span class=\"transfer-heading\">\n <span title=\"{$ ::trCtrl.helpText.sectionToggleText $}\" class=\"fa\"\n ng-if=\"::(trCtrl.limits.maxAllocation !== 1)\"\n ng-class=\"trCtrl.views.allocated ? \'fa-chevron-down\' : \'fa-chevron-right\'\"\n ng-click=\"trCtrl.toggleView(\'allocated\')\"></span>\n {$ ::trCtrl.helpText.allocTitle $}\n <span ng-if=\"::(trCtrl.limits.maxAllocation !== 1)\"\n ng-show=\"trCtrl.numAllocated()\"\n class=\"badge badge-info\">{$ trCtrl.numAllocated() $}</span>\n <span class=\"pull-right help-text\" ng-if=\"::trCtrl.helpText.allocHelpText\">\n {$ ::trCtrl.helpText.allocHelpText $}\n </span>\n </span>\n <!-- Help text when allocated section collapsed -->\n <div class=\"text-muted\" ng-hide=\"trCtrl.views.allocated\">\n {$ ::trCtrl.helpText.allocHiddenText $}\n </div>\n <div class=\"transfer-allocated\" ng-show=\"trCtrl.views.allocated\">\n <!-- Allocated table transcluded here -->\n </div>\n </div>\n\n <!-- Available -->\n <div class=\"transfer-section\">\n <!-- Available section heading -->\n <span class=\"transfer-heading\">\n <span class=\"fa\" title=\"{$ ::trCtrl.helpText.sectionToggleText $}\"\n ng-class=\"trCtrl.views.available ? \'fa-chevron-down\' : \'fa-chevron-right\'\"\n ng-click=\"trCtrl.toggleView(\'available\')\"></span>\n {$ ::trCtrl.helpText.availTitle $}\n <span class=\"badge badge-info\">{$ trCtrl.numAvailable() $}</span>\n <span class=\"pull-right help-text\" ng-if=\"::trCtrl.helpText.availHelpText\">\n {$ ::trCtrl.helpText.availHelpText $}\n </span>\n </span>\n <!-- Help text when available section collapsed -->\n <div class=\"text-muted\" ng-hide=\"trCtrl.views.available\">\n {$ ::trCtrl.helpText.availHiddenText $}\n </div>\n <div class=\"transfer-available\" ng-show=\"trCtrl.views.available\">\n <!-- Available table transcluded here -->\n </div>\n </div>\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/transfer-table/transfer-table.max-1.mock.html","<transfer-table tr-model=\"tableData\">\n <allocated>\n <table st-table=\"tableData.displayedAllocated\" st-safe-src=\"tableData.allocated\" hz-table>\n <thead>\n <tr>\n <th>Animal</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"alRow in tableData.displayedAllocated\">\n <td>{$ alRow.animal $}</td>\n <td>\n <action-list>\n <action callback=\"trCtrl.deallocate\" item=\"alRow\"></action>\n </action-list>\n </td>\n </tr>\n </tbody>\n </table>\n </allocated>\n <available>\n <table st-table=\"tableData.available\" hz-table>\n <thead>\n <tr>\n <th>Animal</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"row in tableData.available\" ng-if=\"!trCtrl.allocatedIds[row.id]\">\n <td>{$ row.animal $}</td>\n <td>\n <action-list>\n <action callback=\"trCtrl.allocate\" item=\"row\"></action>\n </action-list>\n </td>\n </tr>\n </tbody>\n </table>\n </available>\n</transfer-table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/transfer-table/transfer-table.max-2.mock.html","<transfer-table tr-model=\"tableData\" limits=\"limits\">\n <available>\n <table st-table=\"tableData.available\" hz-table>\n <thead>\n <tr>\n <th>Animal</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"row in tableData.available\" ng-if=\"!trCtrl.allocatedIds[row.id]\">\n <td>{$ row.animal $}</td>\n <td>\n <action-list>\n <action callback=\"trCtrl.allocate\" item=\"row\">x</action>\n </action-list>\n </td>\n </tr>\n </tbody>\n </table>\n </available>\n <allocated>\n <table st-table=\"tableData.allocated\" hz-table>\n <thead>\n <tr>\n <th>Animal</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat=\"alRow in tableData.allocated\">\n <td>{$ alRow.animal $}</td>\n <td>\n <action-list>\n <action callback=\"trCtrl.deallocate\" item=\"alRow\">x</action>\n </action-list>\n </td>\n </tr>\n </tbody>\n </table>\n </allocated>\n</transfer-table>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/framework/widgets/wizard/wizard.html","<div class=\"ng-wizard\" ng-form=\"wizardForm\">\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" ng-click=\"cancel()\" aria-hidden=\"true\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"fa fa-close\"></span>\n </button>\n <span class=\"h4 modal-title\" ng-bind=\"::workflow.title\"></span>\n </div>\n\n <div class=\"modal-body\">\n\n <div class=\"alert alert-danger error-message\" ng-show=\"viewModel.hasError\" ng-bind=\"viewModel.errorMessage\"></div>\n\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 wizard-navigation\">\n <button type=\"button\" data-toggle=\"collapse\"\n data-target=\"#wizard-side-nav\" aria-expanded=\"false\"\n class=\"navbar-toggle btn btn-default collapsed wizard-nav-toggle\">\n <span translate class=\"sr-only\">Toggle navigation</span>\n <span class=\"fa fa-bars\"></span>\n <span translate>Toggle navigation</span>\n </button>\n\n <div class=\"collapse navbar-collapse wizard-nav\" id=\"wizard-side-nav\">\n <ul class=\"nav nav-pills nav-stacked\">\n <li role=\"presentation\"\n class=\"nav-item\"\n ng-class=\"{\'active\': currentIndex===$index}\"\n ng-click=\"switchTo($index)\"\n ng-repeat=\"step in steps\"\n ng-show=\"viewModel.ready\">\n <a href=\"#\">\n <span ng-bind=\"::step.title\"></span>\n <span class=\"hz-icon-required fa fa-asterisk\"\n ng-show=\"wizardForm[steps[$index].formName].$invalid\"\n aria-hidden=\"true\"></span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 wizard-steps\">\n <div class=\"step\"\n ng-repeat=\"step in steps\"\n ng-show=\"currentIndex===$index\">\n <ng-include\n ng-form=\"{$ step.formName $}\"\n src=\"step.templateUrl\">\n </ng-include>\n </div>\n </div>\n </div>\n\n <help-panel class=\"wizard-help\">\n <ng-include src=\"step.helpUrl\"\n ng-repeat=\"step in steps\"\n ng-show=\"currentIndex===$index\"></ng-include>\n </help-panel>\n\n </div>\n\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-default pull-left\"\n ng-click=\"cancel()\">\n <span ng-class=\"::viewModel.btnIcon.cancel||\'fa fa-close\'\"></span>\n <span ng-bind=\"::viewModel.btnText.cancel\"></span>\n </button>\n\n <button type=\"button\" class=\"btn btn-default back\"\n ng-click=\"switchTo(currentIndex - 1)\"\n ng-disabled=\"currentIndex===0\"\n ng-show=\"steps.length > 1\">\n <span ng-class=\"::viewModel.btnIcon.back||\'fa fa-angle-left\'\"></span>\n <span ng-bind=\"::viewModel.btnText.back\"></span>\n </button>\n\n <button type=\"button\" class=\"btn btn-default next\"\n ng-click=\"switchTo(currentIndex + 1)\"\n ng-disabled=\"currentIndex===steps.length - 1\"\n ng-show=\"steps.length > 1\">\n <span ng-bind=\"::viewModel.btnText.next\"></span>\n <span ng-class=\"::viewModel.btnIcon.next||\'fa fa-angle-right\'\"></span>\n </button>\n\n <button type=\"button\" class=\"btn btn-primary finish\"\n ng-click=\"viewModel.onClickFinishBtn()\"\n ng-disabled=\"wizardForm.$invalid||viewModel.isSubmitting\">\n <span class=\"fa\"\n ng-class=\"viewModel.isSubmitting ? \'fa-spinner fa-spin\' : \n (viewModel.btnIcon.finish || \'fa-check\')\">\n </span>\n <span ng-bind=\"::viewModel.btnText.finish\"></span>\n </button>\n </div>\n\n</div>\n");}]);angular.module('horizon.app').run(['$templateCache',function($templateCache){$templateCache.put("/static/horizon/lib/mdi/preview.html","<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\"/>\n<title>Material Design Icons</title>\n<style>\n*{\n margin:0;\n padding:0;\n}\n\n body{\n margin:0;\n padding:0;\n background:#fff;\n color:#222;\n}\n\n h1,h2,div,footer{\n font-family:\"Helvetica Neue\",Arial,sans-serif;\n}\n\n h1{\n padding:20px 20px 16px 20px;\n font-size:26px;\n line-height:26px;\n font-weight:normal;\n color:#FFF;\n background-color:#2196F3;\n}\n\n h1 svg{\n vertical-align:middle;\n width:26px;\n height:26px;\n margin:0 6px 4px 0;\n}\n\n h1 svg path{\n fill:#FFF;\n}\n\n h1.version{\n font-size:14px;\n background:#FFF;\n padding:4px 10px;\n float:right;\n border-radius:2px;\n margin:-3px 0 0 0;\n color:#666;\n font-weight:bold;\n}\n\n h1.version::before{\n content:\'v\';\n}\n\n h2{\n font-size:18px;\n padding:20px;\n}\n\n.icons{\n padding:0 20px 10px 20px;\n-webkit-column-count:5;\n-moz-column-count:5;\n column-count:5;\n-webkit-column-gap:20px;\n-moz-column-gap:20px;\n column-gap:20px;\n}\n\n.icons div{\n line-height:2em;\n cursor:pointer;\n}\n\n.icons div:hover{\n color:#3c90be;\n}\n\n.icons div i{\n display:inline-block;\n width:32px;\n text-align:center;\n}\n\n.mdi::before{\n font-size:24px;\n}\n\n pre{\n margin:0 20px;\n font-family:Consolas,monospace;\n padding:10px;\n border:1px solid#DDD;\n background:#F1F1F1;\n}\n\n footer{\n padding:20px;\n color:#666;\n border-top:1px solid#DDD;\n background:#F1F1F1;\n}\n\n footer a{\n color:#e91e63;\n text-decoration:none;\n}\n</style>\n<link href=\"css/materialdesignicons.min.css\"media=\"all\"rel=\"stylesheet\"type=\"text/css\"/>\n</head>\n<body>\n<h1>\n<svg>\n<path d=\"M0,0H8V3H18V0H26V8H23V18H26V26H18V23H8V21H18V18H21V8H18V5H8V8H5V18H8V26H0V18H3V8H0V0M2,2V6H6V2H2M2,20V24H6V20H2M20,2V6H24V2H20M20,20V24H24V20H20Z\"></path>\n</svg>\n Material Design Icons\n<span class=\"version\">1.4.57</span>\n</h1>\n\n<h2>Usage</h2>\n<pre><code><i class="mdi mdi-<span id=\"name\">name</span>"></i></code></pre>\n\n<h2>Icons</h2>\n<div class=\"icons\"id=\"icons\"></div>\n\n<footer>Generated with<a href=\"https: