<commit_before><div class="batch-wrapper">
  <div class="row">
    <div class="col-md-6">
      <h3>{{ 'BATCHES_PROGRESS_IN' | translate }}</h3>
      <div cam-widget-loader
           loading-state="{{ ctrl.getLoadingState('runtime') }}"
           text-empty="{{ 'BATCHES_PROGRESS_NO_RUNNING' | translate }}">

        <table class="cam-table">
          <thead sortable-table-head
                 head-columns="runtimeHeadColumns"
                 on-sort-change="ctrl.onBatchSortChange('runtime', sortObj)"
                 default-sort="ctrl._batches.runtime.sorting">
          </thead>
          <tbody>
            <tr ng-repeat="batch in ctrl.getBatches('runtime')" ng-class="{selected: ctrl.isSelected(batch)}">
              <td class="uuid"><a ng-href="#/batch?details={{batch.id}}&type=runtime">{{batch.id}}</a></td>
              <td class="type">{{batch.type}}</td>
              <td class="failed">{{ ctrl.getProgressAbsolute(batch, 'failed') }}</td>
              <td>
                <progress>
                  <div class="processed">{{ ctrl.getProgressRoundedPercentage(batch, 'success') }}%</div>
                  <bar value="ctrl.getProgressPercentage(batch, 'success')"
                       type="success"
                       ng-if="ctrl.getProgressAbsolute(batch, 'success') > 0"
                       class="jobs jobs-success">
                  </bar>
                </progress>
              </td>
            </tr>
          </tbody>
        </table>
        <pagination ng-if="ctrl.getBatchCount('runtime') > ctrl.getPageSize()"
                    class="pagination-sm"

                    page="ctrl.getCurrentPage('runtime')"
                    ng-model="ctrl._batches.runtime.currentPage"
                    ng-change="ctrl.updatePage('runtime')"

                    total-items="ctrl.getBatchCount('runtime')"
                    items-per-page="ctrl.getPageSize()"

                    max-size="7"
                    boundary-links="true"></pagination>
      </div>

      <h3>{{ 'BATCHES_PROGRESS_END' | translate }}</h3>

      <div cam-widget-loader
           loading-state="{{ ctrl.getLoadingState('history') }}"
           text-empty="{{ 'BATCHES_PROGRESS_NO_FINISHED' | translate }}">

        <table class="cam-table">
          <thead sortable-table-head
                 head-columns="historyHeadColumns"
                 on-sort-change="ctrl.onBatchSortChange('history', sortObj)"
                 default-sort="ctrl._batches.history.sorting">
          </thead>
          <tbody>
            <tr ng-repeat="batch in ctrl.getBatches('history')" ng-class="{selected: ctrl.isSelected(batch)}">
              <td class="uuid"><a ng-href="#/batch?details={{batch.id}}&type=history">{{batch.id}}</a></td>
              <td>{{batch.type}}</td>
              <td>{{batch.startTime}}</td>
              <td>{{batch.endTime}}</td>
            </tr>
          </tbody>
        </table>
        <pagination ng-if="ctrl.getBatchCount('history') > ctrl.getPageSize()"
                    class="pagination-sm"

                    page="ctrl.getCurrentPage('history')"
                    ng-model="ctrl._batches.history.currentPage"
                    ng-change="ctrl.updatePage('history')"

                    total-items="ctrl.getBatchCount('history')"
                    items-per-page="ctrl.getPageSize()"

                    max-size="7"
                    boundary-links="true"></pagination>
      </div>
    </div>

    <div class="col-md-6">
      <div cam-widget-loader
           loading-state="{{ ctrl.getLoadingState('selection') }}"
           text-error="{{ctrl.getSelection()}}">
        <!-- The check below is needed, because you cannot combine ng-if with transclusion in the loader widget. Thanks Angular -->
        <div ng-if="ctrl.getLoadingState('selection') == 'LOADED'">
          <div class="row"
               ng-init="selection = ctrl.getSelection()">
            <h3 class="col-xs-8">
              <span ng-if="ctrl.getSelectionType() == 'history'">{{ 'BATCHES_PROGRESS_COMPLETED' | translate }}</span>
              <span ng-if="ctrl.getSelectionType() == 'runtime'">{{ 'BATCHES_PROGRESS_IN_PROGRESS' | translate }}</span> {{ 'BATCHES_PROGRESS_BATCH_DETAILS' | translate }}
            </h3>

            <div class="col-xs-4 text-right">
              <div class="btn-group batch-controls">
                <a ng-if="ctrl.getSelectionType() == 'runtime' && !ctrl.getSuspendedState()"
                   ng-click="ctrl.toggleSuspension()"
                   class="btn btn-default"
                   tooltip="{{ 'BATCHES_PROGRESS_TOOLTIP_SUSPEND_BATCH' | translate }}">
                  <span class="glyphicon glyphicon-pause"></span>
                </a>

                <a ng-if="ctrl.getSelectionType() == 'runtime' && ctrl.getSuspendedState()"
                   ng-click="ctrl.toggleSuspension()"
                   class="btn btn-default"
                   tooltip="{{ 'BATCHES_PROGRESS_TOOLTIP_ACTIVATE_BATCH' | translate }}">
                  <span class="glyphicon glyphicon-play"></span>
                </a>

                <a ng-if="ctrl.getSelectionType() == 'runtime' && ctrl.getJobs().length > 0"
                   class="btn btn-default action-button"
                   ng-click="ctrl.retryAll()"
                   tooltip="{{ 'BATCHES_PROGRESS_TOOLTIP_INCREMENT_NUMBER' | translate }}">
                  <span class="glyphicon glyphicon-repeat"></span>
                </a>

                <a ng-if="ctrl.getSelectionType() == 'runtime'"
                   class="btn btn-danger action-button"
                   ng-click="ctrl.openDeleteModal()"
                   tooltip="{{ 'BATCHES_PROGRESS_TOOLTIP_DELETE_BATCH' | translate }}">
                  <span class="glyphicon glyphicon-trash"></span>
                </a>
              </div>
            </div>
          </div>

          <table class="cam-table batch-details">
            <thead>
              <th>{{ 'BATCHES_PROGRESS_PROPERTY' | translate }}</th>
              <th>{{ 'BATCHES_PROGRESS_VALUE' | translate }}</th>
            </thead>
            <tbody>
              <tr ng-repeat="key in ctrl.sortingKeys"
                  ng-if="selection[key] && key !== 'failedJobs'"
                  ng-class="key">
                <td>{{key}}</td>
                <td>{{selection[key]}}
                  <span ng-if="key === 'remainingJobs' && selection.failedJobs"
                        class="failedJobs">({{ 'BATCHES_PROGRESS_FAILED' | translate:'{jobs: selection.failedJobs}' }})</span>
                  </td>
              </tr>
            </tbody><commit_msg>fix(batch): don't show timezone offset<commit_after><div class="batch-wrapper">
  <div class="row">
    <div class="col-md-6">
      <h3>{{ 'BATCHES_PROGRESS_IN' | translate }}</h3>
      <div cam-widget-loader
           loading-state="{{ ctrl.getLoadingState('runtime') }}"
           text-empty="{{ 'BATCHES_PROGRESS_NO_RUNNING' | translate }}">

        <table class="cam-table">
          <thead sortable-table-head
                 head-columns="runtimeHeadColumns"
                 on-sort-change="ctrl.onBatchSortChange('runtime', sortObj)"
                 default-sort="ctrl._batches.runtime.sorting">
          </thead>
          <tbody>
            <tr ng-repeat="batch in ctrl.getBatches('runtime')" ng-class="{selected: ctrl.isSelected(batch)}">
              <td class="uuid"><a ng-href="#/batch?details={{batch.id}}&type=runtime">{{batch.id}}</a></td>
              <td class="type">{{batch.type}}</td>
              <td class="failed">{{ ctrl.getProgressAbsolute(batch, 'failed') }}</td>
              <td>
                <progress>
                  <div class="processed">{{ ctrl.getProgressRoundedPercentage(batch, 'success') }}%</div>
                  <bar value="ctrl.getProgressPercentage(batch, 'success')"
                       type="success"
                       ng-if="ctrl.getProgressAbsolute(batch, 'success') > 0"
                       class="jobs jobs-success">
                  </bar>
                </progress>
              </td>
            </tr>
          </tbody>
        </table>
        <pagination ng-if="ctrl.getBatchCount('runtime') > ctrl.getPageSize()"
                    class="pagination-sm"

                    page="ctrl.getCurrentPage('runtime')"
                    ng-model="ctrl._batches.runtime.currentPage"
                    ng-change="ctrl.updatePage('runtime')"

                    total-items="ctrl.getBatchCount('runtime')"
                    items-per-page="ctrl.getPageSize()"

                    max-size="7"
                    boundary-links="true"></pagination>
      </div>

      <h3>{{ 'BATCHES_PROGRESS_END' | translate }}</h3>

      <div cam-widget-loader
           loading-state="{{ ctrl.getLoadingState('history') }}"
           text-empty="{{ 'BATCHES_PROGRESS_NO_FINISHED' | translate }}">

        <table class="cam-table">
          <thead sortable-table-head
                 head-columns="historyHeadColumns"
                 on-sort-change="ctrl.onBatchSortChange('history', sortObj)"
                 default-sort="ctrl._batches.history.sorting">
          </thead>
          <tbody>
            <tr ng-repeat="batch in ctrl.getBatches('history')" ng-class="{selected: ctrl.isSelected(batch)}">
              <td class="uuid"><a ng-href="#/batch?details={{batch.id}}&type=history">{{batch.id}}</a></td>
              <td>{{batch.type}}</td>
              <td>{{batch.startTime | camDate}}</td>
              <td>{{batch.endTime | camDate}}</td>
            </tr>
          </tbody>
        </table>
        <pagination ng-if="ctrl.getBatchCount('history') > ctrl.getPageSize()"
                    class="pagination-sm"

                    page="ctrl.getCurrentPage('history')"
                    ng-model="ctrl._batches.history.currentPage"
                    ng-change="ctrl.updatePage('history')"

                    total-items="ctrl.getBatchCount('history')"
                    items-per-page="ctrl.getPageSize()"

                    max-size="7"
                    boundary-links="true"></pagination>
      </div>
    </div>

    <div class="col-md-6">
      <div cam-widget-loader
           loading-state="{{ ctrl.getLoadingState('selection') }}"
           text-error="{{ctrl.getSelection()}}">
        <!-- The check below is needed, because you cannot combine ng-if with transclusion in the loader widget. Thanks Angular -->
        <div ng-if="ctrl.getLoadingState('selection') == 'LOADED'">
          <div class="row"
               ng-init="selection = ctrl.getSelection()">
            <h3 class="col-xs-8">
              <span ng-if="ctrl.getSelectionType() == 'history'">{{ 'BATCHES_PROGRESS_COMPLETED' | translate }}</span>
              <span ng-if="ctrl.getSelectionType() == 'runtime'">{{ 'BATCHES_PROGRESS_IN_PROGRESS' | translate }}</span> {{ 'BATCHES_PROGRESS_BATCH_DETAILS' | translate }}
            </h3>

            <div class="col-xs-4 text-right">
              <div class="btn-group batch-controls">
                <a ng-if="ctrl.getSelectionType() == 'runtime' && !ctrl.getSuspendedState()"
                   ng-click="ctrl.toggleSuspension()"
                   class="btn btn-default"
                   tooltip="{{ 'BATCHES_PROGRESS_TOOLTIP_SUSPEND_BATCH' | translate }}">
                  <span class="glyphicon glyphicon-pause"></span>
                </a>

                <a ng-if="ctrl.getSelectionType() == 'runtime' && ctrl.getSuspendedState()"
                   ng-click="ctrl.toggleSuspension()"
                   class="btn btn-default"
                   tooltip="{{ 'BATCHES_PROGRESS_TOOLTIP_ACTIVATE_BATCH' | translate }}">
                  <span class="glyphicon glyphicon-play"></span>
                </a>

                <a ng-if="ctrl.getSelectionType() == 'runtime' && ctrl.getJobs().length > 0"
                   class="btn btn-default action-button"
                   ng-click="ctrl.retryAll()"
                   tooltip="{{ 'BATCHES_PROGRESS_TOOLTIP_INCREMENT_NUMBER' | translate }}">
                  <span class="glyphicon glyphicon-repeat"></span>
                </a>

                <a ng-if="ctrl.getSelectionType() == 'runtime'"
                   class="btn btn-danger action-button"
                   ng-click="ctrl.openDeleteModal()"
                   tooltip="{{ 'BATCHES_PROGRESS_TOOLTIP_DELETE_BATCH' | translate }}">
                  <span class="glyphicon glyphicon-trash"></span>
                </a>
              </div>
            </div>
          </div>

          <table class="cam-table batch-details">
            <thead>
              <th>{{ 'BATCHES_PROGRESS_PROPERTY' | translate }}</th>
              <th>{{ 'BATCHES_PROGRESS_VALUE' | translate }}</th>
            </thead>
            <tbody>
              <tr ng-repeat="key in ctrl.sortingKeys"
                  ng-if="selection[key] && key !== 'failedJobs'"
                  ng-class="key">
                <td>{{key}}</td>
                <td ng-if="key !== 'startTime' && key !== 'endTime'">{{selection[key]}}
                  <span ng-if="key === 'remainingJobs' && selection.failedJobs"
                        class="failedJobs">({{ 'BATCHES_PROGRESS_FAILED' | translate:'{jobs: selection.failedJobs}' }})</span>
                </td>
                <td ng-if="key === 'startTime' || key == 'endTime'">{{selection[key] | camDate}}</td>
              </tr>
            </tbody>
{'fraction_non_alphanumeric': 0.16108228317272053, 'fraction_numerical': 0.0020756115641215717, 'mean_word_length': 1.8088694565896315, 'pattern_counts': {'":': 0, '<': 219, '<?xml version=': 0, '>': 227, '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': '2896144', 'n_tokens_mistral': 4030, 'n_tokens_neox': 3703, 'n_words': 573}