| Index: gm/rebaseline_server/static/new/partials/rebaseline-view.html | 
| diff --git a/gm/rebaseline_server/static/new/partials/rebaseline-view.html b/gm/rebaseline_server/static/new/partials/rebaseline-view.html | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..a2c28f7357c342337974fda1e8753f722b1e35d2 | 
| --- /dev/null | 
| +++ b/gm/rebaseline_server/static/new/partials/rebaseline-view.html | 
| @@ -0,0 +1,207 @@ | 
| +<div class="container-fluid ng-cloak" ng-cloak> | 
| + | 
| +    <div class="row" ng-show="state === c.ST_LOADING"> | 
| +        <h4>Loading ...</h4> | 
| +    </div> | 
| + | 
| +    <div class="row" ng-show="state === c.ST_STILL_LOADING"> | 
| +        <h4>Still loading from backend.</h4> | 
| +        <div> | 
| +            Load time so far: {{ loadTime | number:0 }} s. | 
| +        </div> | 
| +    </div> | 
| + | 
| +    <div class="row" ng-show="state === c.ST_READY"> | 
| +        <tabset> | 
| +            <tab heading="Unfiled"> | 
| +                <!-- settings --> | 
| +                <div class="container controlBox"> | 
| +                    <form class="form-inline settingsForm" novalidate > | 
| +                        <legend class="simpleLegend">Settings</legend> | 
| +                            <div class="checkbox formPadding"> | 
| +                                <label> | 
| +                                       <input type="checkbox" | 
| +                                           ng-model="settings.showThumbnails">Show thumbnails | 
| +                                 </label> | 
| +                             </div> | 
| + | 
| +                            <div class="checkbox formPadding"> | 
| +                                <label> | 
| +                                       <input type="checkbox" | 
| +                                     ng-model="settings.mergeIdenticalRows" | 
| +                                      ng-change="mergeRowsChanged(mergeIdenticalRows)"> Merge identical rows | 
| +                                 </label> | 
| +                            </div> | 
| + | 
| +                            <div class="form-group formPadding"> | 
| +                                 <label for="imageWidth">Image Width</label> | 
| +                                     <select ng-model="settings.imageSize" | 
| +                                             ng-options="iSize for iSize in c.IMAGE_SIZES" | 
| +                                             class="form-control input-sm"> | 
| + | 
| +                                     </select> | 
| +                            </div> | 
| +                            <div class="form-group formPadding"> | 
| +                                 <label>Max records</label> | 
| +                                     <select ng-model="settings.nRecords" | 
| +                                             ng-options="n for n in c.MAX_RECORDS" | 
| +                                             ng-change="maxRecordsChanged();" | 
| +                                             class="form-control input-sm"> | 
| +                                     </select> | 
| +                            </div> | 
| +                    </form> | 
| +                    <br> | 
| + | 
| +                    <form class="form settingsForm" novalidate> | 
| +                        <legend class="simpleLegend">Filters</legend> | 
| +                        <div class="container-fluid"> | 
| +                            <div class="col-lg-2 filterBox" ng-repeat="oneCol in filterCols"> | 
| +                                  <div class="filterKey">{{ oneCol.key }}</div> | 
| + | 
| +                                  <!-- If we filter this column using free-form text match... --> | 
| +                                  <div ng-if="oneCol.ftype === c.FILTER_FREE_FORM"> | 
| +                                    <input type="text" | 
| +                                           ng-model="filterVals[$index]" | 
| +                                           typeahead="opt.value for opt in oneCol.foptions | filter:$viewValue" | 
| +                                           class="form-control input-sm"> | 
| +                                    <br> | 
| +                                    <a ng-click="filterVals[$index]=''" | 
| +                                       ng-disabled="'' === filterVals[$index]" | 
| +                                       href=""> | 
| +                                      Clear | 
| +                                    </a> | 
| +                                  </div> | 
| + | 
| +                                  <!-- If we filter this column using checkboxes... --> | 
| +                                  <div ng-if="oneCol.ftype === c.FILTER_CHECK_BOX"> | 
| + | 
| +                                      <div class="checkbox" ng-repeat="oneOpt in oneCol.foptions"> | 
| +                                        <label> | 
| +                                          <input type="checkbox" | 
| +                                                 ng-model="filterVals[$parent.$index][$index]">{{oneOpt.value}} ({{ oneOpt.count }}) | 
| +                                        </label> | 
| +                                    </div> | 
| +                                    <div> | 
| +                                        <a ng-click="setFilterAll($index, true)" href="">All</a> - | 
| +                                        <a ng-click="setFilterAll($index, False)" href="">None</a> - | 
| +                                        <a ng-click="setFilterToggle($index)" href="">Toggle</a> | 
| +                                    </div> | 
| +                                  </div> | 
| +                            </div> | 
| +                            <br> | 
| +                        </div> | 
| + | 
| +                        <div class="container updateBtn"> | 
| +                            <button class="btn btn-success col-lg-4 pull-left" | 
| +                                    ng-click="filtersChanged()" | 
| +                                    ng-disabled="updating"> | 
| +                                        {{ updating && 'Updating ...' || 'Update' }} | 
| +                            </button> | 
| +                        </div> | 
| + | 
| +                    </form> | 
| + | 
| +                    <br> | 
| + | 
| +                    <!-- Rows --> | 
| + | 
| +                    <!-- results header --> | 
| +                    <div class="col-lg-12 resultsHeaderActions well"> | 
| +                            <div class="col-lg-6"> | 
| +                              <h4>Showing {{showingRecords}} of {{selectedRecords}} (of {{totalRecords}} total)</h4> | 
| +                              <span ng-show="renderTime > 0"> | 
| +                                Rendered in {{renderTime | number:0 }} ms (filtered and sorted in {{ filterTime | number:0 }} ms). | 
| +                              </span> | 
| +                              <br> | 
| +                              (click on the column header radio buttons to re-sort by that column) | 
| +                            </div> | 
| + | 
| + | 
| +                            <div class="col-lg-6"> | 
| +                                All tests shown: | 
| +                                <button class="btn btn-default btn-sm" ng-click="selectAllImagePairs()">Select</button> | 
| +                                <button class="btn btn-default btn-sm" ng-click="clearAllImagePairs()">Clear</button> | 
| +                                <button class="btn btn-default btn-sm" ng-click="toggleAllImagePairs()">Toggle</button> | 
| + | 
| +                                <div ng-repeat="otherTab in tabs"> | 
| +                                    <button class="btn btn-default btn-sm" | 
| +                                            ng-click="moveSelectedImagePairsToTab(otherTab)" | 
| +                                            ng-disabled="selectedImagePairs.length == 0" | 
| +                                            ng-show="otherTab != viewingTab"> | 
| +                                            Move {{selectedImagePairs.length}} selected tests to {{otherTab}} tab | 
| +                                    </button> | 
| +                                </div> | 
| +                            </div> | 
| +                            <br> | 
| +                    </div> | 
| + | 
| +                    <!-- results --> | 
| +                    <table class="table table-bordered"> | 
| +                        <thead> | 
| +                            <tr> | 
| +                                <!-- Most column headers are displayed in a common fashion... --> | 
| +                                <th ng-repeat="oneCol in allCols" ng-style="{ 'min-width': getImageWidthStyle(oneCol, 20, 'auto') }"> | 
| +                                    <a ng-class="getSortedClass('sort', $index, '')" | 
| +                                       ng-click="sortBy($index)" | 
| +                                       href="" | 
| +                                       class="sortableHeader"> | 
| +                                          {{ oneCol.ctitle }} | 
| +                                    </a> | 
| +                                </th> | 
| +                                <th> | 
| +                                    <div class="checkbox"> | 
| +                                        <label> | 
| +                                               <input type="checkbox" ng-model="allChecked" ng-change="checkAll()">All | 
| +                                         </label> | 
| +                                     </div> | 
| +                                </th> | 
| +                            </tr> | 
| +                        </thead> | 
| +                        <tbody> | 
| +                            <tr ng-repeat="oneRow in data"> | 
| +                                <td ng-repeat="oneColVal in oneRow.dataCols"> | 
| +                                    {{oneColVal}} | 
| +                                </td> | 
| + | 
| +                                <td ng-repeat="oneCol in oneRow.imageCols" ng-if="oneRow.rowspan > 0" rowspan="{{ oneRow.rowspan }}"> | 
| +                                    <div ng-show="oneCol.url"> | 
| +                                        <a href="{{ oneCol.url }}" target="_blank">View Image</a><br/> | 
| +                                        <img ng-if="settings.showThumbnails" | 
| +                                             ng-style="{ width: settings.imageSize+'px' }" | 
| +                                             ng-src="{{ oneCol.url }}" /> | 
| +                                        <div ng-if="oneCol.percent && oneCol.value"> | 
| +                                            {{oneCol.percent}}% ({{ oneCol.value }}) | 
| +                                        </div> | 
| +                                    </div> | 
| +                                    <div ng-hide="oneCol.url" style="text-align:center"> | 
| +                                        <span ng-show="oneCol.url === null">–none–</span> | 
| +                                        <span ng-hide="oneCol.url === null"> </span> | 
| +                                    </div> | 
| +                                </td> | 
| + | 
| +                                <td ng-if="oneRow.rowspan > 0" rowspan="{{ oneRow.rowspan }}"> | 
| +                                    <div class="checkbox"> | 
| +                                        <input type="checkbox" | 
| +                                               ng-model="checkRows[$index]" | 
| +                                               ng-change="rowCheckChanged($index)"> | 
| +                                    </div> | 
| +                                </td> | 
| +                            </tr> | 
| +                        </tbody> | 
| +                    </table> | 
| + | 
| +                </div> | 
| +            </tab> | 
| + | 
| +            <tab heading="Hidden"> | 
| +                <h3>Hidden</h3> | 
| +            </tab> | 
| + | 
| +            <tab heading="Pending Approval"> | 
| +                <h3>Pending Approval</h3> | 
| +            </tab> | 
| + | 
| +        </tabset> | 
| + | 
| +    </div> | 
| +</div> | 
|  |