<commit_before><div class="row fastProperty-wrapper">

  <div class="col-md-12" ng-if="!fp.properties" style="position: relative; height: 300px">
    <h1 us-spinner="{radius:30, width:8, length: 16}"></h1>
  </div>

  <div class="col-md-12 fastProperty" ng-if="fp.properties">
    <div class="row fp-header">
      <div class="col-md-3">
        <h3>Fast Properties</h3>
      </div>



      <div class="col-md-6">
        <form class="form form-inline">
          <div class="form-group">
            <!--<div class="col-md-12">-->
            <label >Filter </label>
            <input type="search"
                   style="width: 500px"
                   placeholder="Search properties"
                   class="form-control input-md search"
                   focus
                   ng-model="fp.filterString"
                   ng-change="fp.setFilteredProperties()"/>
          </div>
        </form>
      </div>

      <div class="col-md-3 ">
        <button type="button" class="btn btn-primary pull-right" ng-click="fp.newFastPropertyModal()">Start New Property Promotion</button>
      </div>

    </div>


     <div class="row content">
       <div class="rollout">

         <div class="clickable" ng-click="fp.togglePromotionPane()">
           <span class="pull-left glyphicon glyphicon-chevron-{{fp.promotionPaneOpen ? 'down' : 'up'}}"></span>

           <h3>
             Rollouts
           <span class="badge" ng-if="( fp.promotions | filter:{state:'Running'}).length > 0">
            {{ (fp.promotions | filter:{state:'Running'}).length }}</span>
           </h3>
         </div>

         <div class="row" ng-show="fp.promotionPaneOpen && fp.promotions.length > 0">
           <div class="col-md-5 col-md-offset-4">
             <div class="btn-group">
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('')" uib-btn-radio="''">
                 <a href>All</a>
               </label>
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('Pending')" uib-btn-radio="'Pending'">
                 <a href><status-glyph item="{hasNotStarted: true}"></status-glyph> Pending</a>
               </label>
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('Running')" uib-btn-radio="'Running'">
                 <a href><status-glyph item="{isRunning: true}"></status-glyph> Running</a>
               </label>
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('Successful')" uib-btn-radio="'Successful'">
                 <a href><status-glyph item="{isCompleted: true}"></status-glyph> Successful</a>
               </label>
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('Failed')" uib-btn-radio="'Failed'">
                 <a href><status-glyph item="{isFailed: true}"></status-glyph> Failed</a>
               </label>
             </div>
           </div>

           <fast-property-promotion promotions="fp.promotions" filtered-promotions="fp.filteredPromotions" application="fp.application"></fast-property-promotion>
         </div>



       </div>



       <h3>Properties</h3>
       <div class="row">
         <div class="col-md-12">
           <table ng-if="fp.properties" class="table table-hover" style="table-layout: fixed; width: 100%">
             <thead>
             <tr>
               <th width="10%" label="Name" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Property</th>
               <th width="15%" label="Created" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Value</th>
               <th width="10%" label="Updated" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Updated</th>
               <th width="5%" label="Updated" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Region</th>
               <th width="10%" label="Updated" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Stack</th>
               <th width="20%" label="Updated" skrt-model="fp.sortModel" on-change="ctrl.filterApplications()">Additional Scope</th>
               <th width="10%" label="Updated" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Expiration</th>
               <th width="5%" label="edit"></th>
               <th width="5%" label="edit"></th>
             </tr>
             </thead>
             <tbody>
             <tr class="" ng-repeat="property in fp.filteredPage">

               <td style="word-wrap: break-word">
                 {{ property.key }}
               </td>

               <td style="word-wrap: break-word">
                 {{ property.value}}
               </td>

               <td>
                 {{ property.ts | fastPropertyTime }}
               </td>

               <td>
                 {{ property.region }}
               </td>

               <td>
                 {{ property.stack}}
               </td>

               <td class="small-fp-scopes">
                 <dl>
                   <dt ng-if="property.env">Env</dt>
                   <dd ng-if="property.env">{{property.env}}</dd>

                   <dt ng-if="property.cluster" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('cluster') > -1}">Cluster</dt>
                   <dd ng-if="property.cluster" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('cluster') > -1}">
                     {{property.cluster}}
                     <i
                         class="error-message glyphicon glyphicon-exclamation-sign"
                         ng-if="!property.isValid && property.errors.indexOf('cluster') > -1"
                         style="display: inline; padding-left: 5px"
                         uib-tooltip="{{property.cluster}} is not in service"
                         tooltip-placement="right">
                     </i>
                   </dd>

                   <dt ng-if="property.asg" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('asg') > -1}">ASG</dt>
                   <dd ng-if="property.asg" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('asg') > -1}">
                     {{property.asg}}
                     <i
                         class="error-message glyphicon glyphicon-exclamation-sign"
                         ng-if="!property.isValid && property.errors.indexOf('asg') > -1"
                         style="display: inline; padding-left: 5px"
                         uib-tooltip="{{property.asg}} is not in service"
                         tooltip-placement="right">
                     </i>
                   </dd>

                   <dt ng-if="property.zone">AZ</dt>
                   <dd ng-if="property.zone">
                     {{property.zone}}
                   </dd>

                   <dt ng-if="property.serverId" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('serverId') > -1 }">Instance</dt>
                   <dd ng-if="property.serverId" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('serverId') > -1 }">
                     {{property.serverId}} {{property.errors.indexOf('serverId')}}
                       <i
                         class="error-message glyphicon glyphicon-exclamation-sign"
                         ng-if="!property.isValid && property.errors.indexOf('serverId') > -1"
                         style="display: inline; padding-left: 5px"
                         uib-tooltip="{{property.serverId}} is not in service"
                         tooltip-placement="right">
                       </i>
                   </dd>
                 </dl>

               </td>

               <td>
                 {{ property.ttl }}
               </td>

               <td>
                 <span class="clickable clickable-sm glyphicon glyphicon-pencil" ng-click="fp.editFastProperty(property)"></span>
                 <span class="clickable clickable-sm glyphicon glyphicon-trash" ng-click="fp.delete(property)"></span>
               </td>

             </tr>
             </tbody>
           </table>


         </div>

       </div>
     </div>

    <div class="row pagination-footer">
      <div class="col-md-2">
        <select class="form-control input-sm"
                ng-model="fp.itemsPerPage"
                ng-options="i for i in [10, 25, 50, 100]"
                ng-change="fp.setFilteredProperties()">
        </select>
      </div>
      <div class="col-md-10">
        <uib-pagination class="pull-right"
                    ng-if="fp.filteredProps"
                    total-items="fp.filteredProps.length"
                    max-size="fp.pagination.maxSize"
                    ng-model="fp.pagination.currentPage"
                    ng-change="fp.setFilteredProperties()">

        </uib-pagination>
      </div>
    </div>

  </div>

</div>

<commit_msg>SPIN-867: Be explicit when application has no fast properties<commit_after><div class="row fastProperty-wrapper">

  <div class="col-md-12" ng-if="!fp.properties" style="position: relative; height: 300px">
    <h1 us-spinner="{radius:30, width:8, length: 16}"></h1>
  </div>

  <div class="col-md-12 fastProperty" ng-if="fp.properties">
    <div class="row fp-header">
      <div class="col-md-3">
        <h3>Fast Properties</h3>
      </div>



      <div class="col-md-6">
        <form class="form form-inline">
          <div class="form-group">
            <!--<div class="col-md-12">-->
            <label >Filter </label>
            <input type="search"
                   style="width: 500px"
                   placeholder="Search properties"
                   class="form-control input-md search"
                   focus
                   ng-model="fp.filterString"
                   ng-change="fp.setFilteredProperties()"/>
          </div>
        </form>
      </div>

      <div class="col-md-3 ">
        <button type="button" class="btn btn-primary pull-right" ng-click="fp.newFastPropertyModal()">Start New Property Promotion</button>
      </div>

    </div>


     <div class="row content">
       <div class="rollout" ng-show="fp.promotions.length > 0 && fp.promotionPaneOpen">

         <div class="clickable" ng-click="fp.togglePromotionPane()">
           <span class="pull-left glyphicon glyphicon-chevron-{{fp.promotionPaneOpen ? 'down' : 'up'}}"></span>

           <h3>
             Rollouts
           <span class="badge" ng-if="( fp.promotions | filter:{state:'Running'}).length > 0">
            {{ (fp.promotions | filter:{state:'Running'}).length }}</span>
           </h3>
         </div>

         <div class="row">
           <div class="col-md-5 col-md-offset-4">
             <div class="btn-group">
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('')" uib-btn-radio="''">
                 <a href>All</a>
               </label>
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('Pending')" uib-btn-radio="'Pending'">
                 <a href><status-glyph item="{hasNotStarted: true}"></status-glyph> Pending</a>
               </label>
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('Running')" uib-btn-radio="'Running'">
                 <a href><status-glyph item="{isRunning: true}"></status-glyph> Running</a>
               </label>
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('Successful')" uib-btn-radio="'Successful'">
                 <a href><status-glyph item="{isCompleted: true}"></status-glyph> Successful</a>
               </label>
               <label class="btn btn-sm btn-default" ng-model="fp.promotionStateFilter" ng-click="fp.updateStateFilter('Failed')" uib-btn-radio="'Failed'">
                 <a href><status-glyph item="{isFailed: true}"></status-glyph> Failed</a>
               </label>
             </div>
           </div>

           <fast-property-promotion promotions="fp.promotions" filtered-promotions="fp.filteredPromotions" application="fp.application"></fast-property-promotion>
         </div>

       </div>


       <div ng-if="fp.filteredPage.length === 0" class="col-md-12 text-center">
         <h4>We couldn't find any properties for {{application.name}} <span ng-if="fp.filterString">with filter: <b>{{fp.filterString}}</b></span></h4>
       </div>

       <h3 ng-if="fp.filteredPage.length > 0">Properties</h3>
       <div class="row" ng-if="fp.filteredPage.length > 0">
         <div class="col-md-12">
           <table  class="table table-hover" style="table-layout: fixed; width: 100%">
             <thead>
             <tr>
               <th width="10%" label="Name" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Property</th>
               <th width="15%" label="Created" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Value</th>
               <th width="10%" label="Updated" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Updated</th>
               <th width="5%" label="Updated" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Region</th>
               <th width="10%" label="Updated" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Stack</th>
               <th width="20%" label="Updated" skrt-model="fp.sortModel" on-change="ctrl.filterApplications()">Additional Scope</th>
               <th width="10%" label="Updated" sort-model="fp.sortModel" on-change="ctrl.filterApplications()">Expiration</th>
               <th width="5%" label="edit"></th>
               <th width="5%" label="edit"></th>
             </tr>
             </thead>
             <tbody>
             <tr class="" ng-repeat="property in fp.filteredPage">

               <td style="word-wrap: break-word">
                 {{ property.key }}
               </td>

               <td style="word-wrap: break-word">
                 {{ property.value}}
               </td>

               <td>
                 {{ property.ts | fastPropertyTime }}
               </td>

               <td>
                 {{ property.region }}
               </td>

               <td>
                 {{ property.stack}}
               </td>

               <td class="small-fp-scopes">
                 <dl>
                   <dt ng-if="property.env">Env</dt>
                   <dd ng-if="property.env">{{property.env}}</dd>

                   <dt ng-if="property.cluster" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('cluster') > -1}">Cluster</dt>
                   <dd ng-if="property.cluster" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('cluster') > -1}">
                     {{property.cluster}}
                     <i
                         class="error-message glyphicon glyphicon-exclamation-sign"
                         ng-if="!property.isValid && property.errors.indexOf('cluster') > -1"
                         style="display: inline; padding-left: 5px"
                         uib-tooltip="{{property.cluster}} is not in service"
                         tooltip-placement="right">
                     </i>
                   </dd>

                   <dt ng-if="property.asg" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('asg') > -1}">ASG</dt>
                   <dd ng-if="property.asg" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('asg') > -1}">
                     {{property.asg}}
                     <i
                         class="error-message glyphicon glyphicon-exclamation-sign"
                         ng-if="!property.isValid && property.errors.indexOf('asg') > -1"
                         style="display: inline; padding-left: 5px"
                         uib-tooltip="{{property.asg}} is not in service"
                         tooltip-placement="right">
                     </i>
                   </dd>

                   <dt ng-if="property.zone">AZ</dt>
                   <dd ng-if="property.zone">
                     {{property.zone}}
                   </dd>

                   <dt ng-if="property.serverId" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('serverId') > -1 }">Instance</dt>
                   <dd ng-if="property.serverId" ng-class="{'error-message': !property.isValid && property.errors && property.errors.indexOf('serverId') > -1 }">
                     {{property.serverId}} {{property.errors.indexOf('serverId')}}
                       <i
                         class="error-message glyphicon glyphicon-exclamation-sign"
                         ng-if="!property.isValid && property.errors.indexOf('serverId') > -1"
                         style="display: inline; padding-left: 5px"
                         uib-tooltip="{{property.serverId}} is not in service"
                         tooltip-placement="right">
                       </i>
                   </dd>
                 </dl>

               </td>

               <td>
                 {{ property.ttl }}
               </td>

               <td>
                 <span class="clickable clickable-sm glyphicon glyphicon-pencil" ng-click="fp.editFastProperty(property)"></span>
                 <span class="clickable clickable-sm glyphicon glyphicon-trash" ng-click="fp.delete(property)"></span>
               </td>

             </tr>
             </tbody>
           </table>
         </div>
       </div>
     </div>

    <div class="row pagination-footer">
      <div class="col-md-2">
        <select class="form-control input-sm"
                ng-model="fp.itemsPerPage"
                ng-options="i for i in [10, 25, 50, 100]"
                ng-change="fp.setFilteredProperties()">
        </select>
      </div>
      <div class="col-md-10">
        <uib-pagination class="pull-right"
                    ng-if="fp.filteredProps"
                    total-items="fp.filteredProps.length"
                    max-size="fp.pagination.maxSize"
                    ng-model="fp.pagination.currentPage"
                    ng-change="fp.setFilteredProperties()">

        </uib-pagination>
      </div>
    </div>

  </div>

</div>


{'fraction_non_alphanumeric': 0.16358123204596234, 'fraction_numerical': 0.008617938078518992, 'mean_word_length': 1.7645588235294118, 'pattern_counts': {'":': 0, '<': 349, '<?xml version=': 0, '>': 373, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1891262', 'n_tokens_mistral': 5534, 'n_tokens_neox': 5126, 'n_words': 900}