<commit_before><div id="students-list" class="container">
  <div class="panel panel-primary">
    <div class="panel-heading">
      <div class="input-group">
        <input
          class="form-control input-lg"
          placeholder="Search for students or tutors..."
          type="search"
          ng-model="searchText"
          ng-change="searchTextChanged()"
          typeahead-on-select="searchTextChanged()"
          typeahead="text for text in
            unitTypeAheadData(unit) |
            filter:$viewValue |
            limitTo:8"
          typeahead-wait-ms="200"
          autofocus><!--/search-text-->
          <span class="input-group-btn">
            <button class="btn btn-default btn-lg" type="button" ng-model="showSearchOptions" btn-checkbox>
              <i class="fa fa-chevron-{{showSearchOptions ? 'up' : 'down'}}"></i>
            </button>
          </span><!--/search-options-toggle-->
        </div>
      </h4>
    </div><!--/search-header-->
    <form class="panel-body panel-collapseable search-options" ng-show="showSearchOptions">
      <div class="form-group staff-filter">
        <label>Show Students From...</label>
        <div class="input-group">
          <div class="btn-group">
            <button class="btn btn-default col-sm-6" ng-model="staffFilter" ng-click="staffFilterChanged('all')" btn-radio="'all'">
              <i class="fa fa-university"></i> All Tutorials
            </button>
            <button class="btn btn-default col-sm-6" ng-model="staffFilter" ng-click="staffFilterChanged('mine')" btn-radio="'mine'">
              <i class="fa fa-pencil"></i> My Tutorials
            </button>
          </div>
        </div>
      </div><!--/staff-filter-button-group-->
      <div class="form-group flag-sort">
        <label>Sort Flags By...</label>
        <div class="input-group">
          <div class="btn-group">
            <button class="btn btn-default" ng-model="tableSort.order" ng-click="sortTableBy('target_grade')" btn-radio="'target_grade'">
              <i class="fa fa-check"></i> Grade
            </button>
            <button class="btn btn-default" ng-model="tableSort.order" ng-click="sortTableBy('max_pct_copy')" btn-radio="'max_pct_copy'">
              <i class="fa fa-eye"></i> Plagiarism
            </button>
            <button class="btn btn-default" ng-model="tableSort.order" ng-click="sortTableBy('portfolio_status')" btn-radio="'portfolio_status'">
              <i class="fa fa-book"></i> Portfolio Status
            </button>
          </div>
        </div>
        <p class="help-block">
          Click the button twice to reverse the sort ordering.
        </p>
      </div><!--/flag-sort-button-group-->
    </form><!--/search-options-->
    <div class="panel-body" ng-show="filteredStudents.length == 0">
      <div class="callout callout-primary">
        <h4>No students found</h4>
        <p>
          No students were found using the filters specified.
        </p>
      </div>
    </div><!--/no-students-found-->
    <table ng-show="filteredStudents.length > 0" class="table table-condensed table-hover table-pointer">
      <thead>
        <tr>
          <th class="avatar"></th>
          <th class="student-id">
            <a ng-click="sortTableBy('student_id')">
              Student ID <i ng-show="tableSort.order == 'student_id'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/id-column-header-->
          <th class="name">
            <a ng-click="sortTableBy('name')">
              Name <i ng-show="tableSort.order == 'name'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/name-column-header-->
          <th class="stats">
            <a ng-click="sortTableBy('orderScale')">
              Stats <i ng-show="tableSort.order == 'orderScale'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/stats-column-header-->
          <th class="flags">
            <a ng-click="sortTableBy('flags')">
              Flags
              <i ng-show="
                tableSort.order == 'max_pct_copy' ||
                tableSort.order == 'target_grade' ||
                tableSort.order == 'portfolio_status'"
                class="ng-hide fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/flags-column-header-->
          <th class="campus">
            <a ng-click="sortTableBy('campus().name')">
              Campus <i ng-show="tableSort.order == 'campus'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/campus-column-header-->
          <th class="tutorial">
            <a ng-click="sortTableBy('tutorial.abbreviation')">
              Tutorial <i ng-show="tableSort.order == 'tutorial.abbreviation'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/tutorial-column-header-->
        </tr><!--/column-headers-row-->
      </thead>
      <tbody>
        <tr class="task-progress-row" ng-repeat="student in filteredStudents">
          <td class="avatar" ng-click="viewStudent(student)">
            <user-icon [size]="30" [user]="student"></user-icon>
          </td>
          <td ng-click="viewStudent(student)">
            {{student.student_id || "N/A"}}
          </td><!--/student-id-column-->
          <td ng-click="viewStudent(student)">
            {{student.name}}
          </td><!--/name-column-->
          <td ng-click="viewStudent(student)" class="task-progress-bar">
            <progress class="task-progress" animate="true">
              <bar
                ng-repeat="bar in student.task_stats"
                value="bar.value"
                type="{{statusClass(bar.key)}}">
                <span ng-hide="bar.value < 10">{{bar.value}}%</span>
              </bar>
            </progress>
          </td><!--/progress-column-->
          <td class="text-left" ng-click="viewStudent(student)">
            <span class="flags">
              <span class="flag">
                <grade-icon grade="student.target_grade"></grade-icon>
              </span>
              <span ng-show="student.max_pct_copy > 0" class="flag">
                <i class="fa fa-eye fa-2x" ></i>
              </span>
              <span ng-show="student.has_portfolio" class="flag">
                <i class="fa fa-book fa-2x" ng-class="{'text-muted': student.compile_portfolio}"></i>
              </span>
            </span>
          </td><!--/flags-column-->
          <td>
            <student-campus-select [unit]="unit" [student]="student" [update]="true"></student-campus-select>
          </td><!--/campus-column-->
          <td>
            <student-tutorial-select [unit]="unit" [student]="student"></student-tutorial-select>
          </td><!--/tutorial-column-->
        </tr><!--/student-row--><commit_msg>fix: update the student list progress bar behavior<commit_after><div id="students-list" class="container">
  <div class="panel panel-primary">
    <div class="panel-heading">
      <div class="input-group">
        <input
          class="form-control input-lg"
          placeholder="Search for students or tutors..."
          type="search"
          ng-model="searchText"
          ng-change="searchTextChanged()"
          typeahead-on-select="searchTextChanged()"
          typeahead="text for text in
            unitTypeAheadData(unit) |
            filter:$viewValue |
            limitTo:8"
          typeahead-wait-ms="200"
          autofocus><!--/search-text-->
          <span class="input-group-btn">
            <button class="btn btn-default btn-lg" type="button" ng-model="showSearchOptions" btn-checkbox>
              <i class="fa fa-chevron-{{showSearchOptions ? 'up' : 'down'}}"></i>
            </button>
          </span><!--/search-options-toggle-->
        </div>
      </h4>
    </div><!--/search-header-->
    <form class="panel-body panel-collapseable search-options" ng-show="showSearchOptions">
      <div class="form-group staff-filter">
        <label>Show Students From...</label>
        <div class="input-group">
          <div class="btn-group">
            <button class="btn btn-default col-sm-6" ng-model="staffFilter" ng-click="staffFilterChanged('all')" btn-radio="'all'">
              <i class="fa fa-university"></i> All Tutorials
            </button>
            <button class="btn btn-default col-sm-6" ng-model="staffFilter" ng-click="staffFilterChanged('mine')" btn-radio="'mine'">
              <i class="fa fa-pencil"></i> My Tutorials
            </button>
          </div>
        </div>
      </div><!--/staff-filter-button-group-->
      <div class="form-group flag-sort">
        <label>Sort Flags By...</label>
        <div class="input-group">
          <div class="btn-group">
            <button class="btn btn-default" ng-model="tableSort.order" ng-click="sortTableBy('target_grade')" btn-radio="'target_grade'">
              <i class="fa fa-check"></i> Grade
            </button>
            <button class="btn btn-default" ng-model="tableSort.order" ng-click="sortTableBy('max_pct_copy')" btn-radio="'max_pct_copy'">
              <i class="fa fa-eye"></i> Plagiarism
            </button>
            <button class="btn btn-default" ng-model="tableSort.order" ng-click="sortTableBy('portfolio_status')" btn-radio="'portfolio_status'">
              <i class="fa fa-book"></i> Portfolio Status
            </button>
          </div>
        </div>
        <p class="help-block">
          Click the button twice to reverse the sort ordering.
        </p>
      </div><!--/flag-sort-button-group-->
    </form><!--/search-options-->
    <div class="panel-body" ng-show="filteredStudents.length == 0">
      <div class="callout callout-primary">
        <h4>No students found</h4>
        <p>
          No students were found using the filters specified.
        </p>
      </div>
    </div><!--/no-students-found-->
    <table ng-show="filteredStudents.length > 0" class="table table-condensed table-hover table-pointer">
      <thead>
        <tr>
          <th class="avatar"></th>
          <th class="student-id">
            <a ng-click="sortTableBy('student_id')">
              Student ID <i ng-show="tableSort.order == 'student_id'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/id-column-header-->
          <th class="name">
            <a ng-click="sortTableBy('name')">
              Name <i ng-show="tableSort.order == 'name'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/name-column-header-->
          <th class="stats">
            <a ng-click="sortTableBy('orderScale')">
              Stats <i ng-show="tableSort.order == 'orderScale'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/stats-column-header-->
          <th class="flags">
            <a ng-click="sortTableBy('flags')">
              Flags
              <i ng-show="
                tableSort.order == 'max_pct_copy' ||
                tableSort.order == 'target_grade' ||
                tableSort.order == 'portfolio_status'"
                class="ng-hide fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/flags-column-header-->
          <th class="campus">
            <a ng-click="sortTableBy('campus().name')">
              Campus <i ng-show="tableSort.order == 'campus'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/campus-column-header-->
          <th class="tutorial">
            <a ng-click="sortTableBy('tutorial.abbreviation')">
              Tutorial <i ng-show="tableSort.order == 'tutorial.abbreviation'" class="fa fa-caret-{{tableSort.reverse ? 'down' : 'up'}}"></i>
            </a>
          </th><!--/tutorial-column-header-->
        </tr><!--/column-headers-row-->
      </thead>
      <tbody>
        <tr class="task-progress-row" ng-repeat="student in filteredStudents">
          <td class="avatar" ng-click="viewStudent(student)">
            <user-icon [size]="30" [user]="student"></user-icon>
          </td>
          <td ng-click="viewStudent(student)">
            {{student.student_id || "N/A"}}
          </td><!--/student-id-column-->
          <td ng-click="viewStudent(student)">
            {{student.name}}
          </td><!--/name-column-->
          <td ng-click="viewStudent(student)" class="task-progress-bar">
            <progress class="task-progress" animate="true">
              <bar
                ng-repeat="bar in student.task_stats"
                value="(bar.key === 'fail') && (bar.value !== bar.value) ? 0 : bar.value"
                type="{{statusClass(bar.key)}}">
                <span ng-hide="bar.value < 10">{{bar.value !== bar.value ? 'No Interaction' : (bar.value + '%')}}</span>
              </bar>
            </progress>
          </td><!--/progress-column-->
          <td class="text-left" ng-click="viewStudent(student)">
            <span class="flags">
              <span class="flag">
                <grade-icon grade="student.target_grade"></grade-icon>
              </span>
              <span ng-show="student.max_pct_copy > 0" class="flag">
                <i class="fa fa-eye fa-2x" ></i>
              </span>
              <span ng-show="student.has_portfolio" class="flag">
                <i class="fa fa-book fa-2x" ng-class="{'text-muted': student.compile_portfolio}"></i>
              </span>
            </span>
          </td><!--/flags-column-->
          <td>
            <student-campus-select [unit]="unit" [student]="student" [update]="true"></student-campus-select>
          </td><!--/campus-column-->
          <td>
            <student-tutorial-select [unit]="unit" [student]="student"></student-tutorial-select>
          </td><!--/tutorial-column-->
        </tr><!--/student-row-->
{'fraction_non_alphanumeric': 0.19078806862675304, 'fraction_numerical': 0.002634014380294725, 'mean_word_length': 1.9637130801687763, 'pattern_counts': {'":': 0, '<': 343, '<?xml version=': 0, '>': 345, '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': '3312322', 'n_tokens_mistral': 4316, 'n_tokens_neox': 4194, 'n_words': 744}