|
|
@@ -420,6 +420,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
<div class="tab-pane" id="job-mapreduce-page-tasks">
|
|
|
${_('Filter')}
|
|
|
<input data-bind="value: textFilter" type="text" class="input-xlarge search-query" placeholder="${_('Filter by name')}">
|
|
|
+
|
|
|
<span data-bind="foreach: statesValuesFilter">
|
|
|
<label class="checkbox">
|
|
|
<div data-bind="attr: {'class': 'status-circle ' + klass()}"></div>
|
|
|
@@ -428,6 +429,14 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
</label>
|
|
|
</span>
|
|
|
|
|
|
+ <span data-bind="foreach: typesValuesFilter">
|
|
|
+ <label class="checkbox">
|
|
|
+ <div data-bind="attr: {'class': 'status-circle ' + klass()}"></div>
|
|
|
+ <input type="checkbox" data-bind="checked: checked, attr: {id: name}">
|
|
|
+ <span data-bind="text: name, attr: {for: name}"></span>
|
|
|
+ </label>
|
|
|
+ </span>
|
|
|
+
|
|
|
<table class="table table-condensed">
|
|
|
<thead>
|
|
|
<tr>
|
|
|
@@ -507,14 +516,6 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
</div>
|
|
|
|
|
|
<div class="tab-pane" id="job-mapreduce-task-page-attempts">
|
|
|
- ${_('Filter')} <input type="text" class="input-xlarge search-query" placeholder="${_('Filter by id, name, user...')}" value="user:${ user.username }">
|
|
|
- <span class="btn-group">
|
|
|
- <class="btn-group">
|
|
|
- <a class="btn btn-status btn-success" data-value="completed">${ _('Succeeded') }</a>
|
|
|
- <a class="btn btn-status btn-warning" data-value="running">${ _('Running') }</a>
|
|
|
- <a class="btn btn-status btn-danger disable-feedback" data-value="failed">${ _('Failed') }</a>
|
|
|
- </span>
|
|
|
- </span>
|
|
|
|
|
|
<table class="table table-condensed">
|
|
|
<thead>
|
|
|
@@ -1004,8 +1005,9 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
|
|
|
self.textFilter = ko.observable('').extend({ rateLimit: { method: "notifyWhenChangesStop", timeout: 1000 } });
|
|
|
self.statesValuesFilter = ko.observableArray([
|
|
|
- ko.mapping.fromJS({'value': 'map', 'name': '${_("Map")}', 'checked': true, 'klass': 'green'}),
|
|
|
- ko.mapping.fromJS({'value': 'reduce', 'name': '${_("Reduce")}', 'checked': true, 'klass': 'orange'}),
|
|
|
+ ko.mapping.fromJS({'value': 'completed', 'name': '${_("Succeeded")}', 'checked': true, 'klass': 'green'}),
|
|
|
+ ko.mapping.fromJS({'value': 'running', 'name': '${_("Running")}', 'checked': true, 'klass': 'orange'}),
|
|
|
+ ko.mapping.fromJS({'value': 'failed', 'name': '${_("Failed")}', 'checked': true, 'klass': 'red'}),
|
|
|
]);
|
|
|
self.statesFilter = ko.computed(function () {
|
|
|
var checkedStates = ko.utils.arrayFilter(self.statesValuesFilter(), function (state) {
|
|
|
@@ -1015,10 +1017,23 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
return state.value()
|
|
|
});
|
|
|
});
|
|
|
- self.filters = ko.computed(function() {
|
|
|
+ self.typesValuesFilter = ko.observableArray([
|
|
|
+ ko.mapping.fromJS({'value': 'map', 'name': '${_("Map")}', 'checked': true, 'klass': 'green'}),
|
|
|
+ ko.mapping.fromJS({'value': 'reduce', 'name': '${_("Reduce")}', 'checked': true, 'klass': 'orange'}),
|
|
|
+ ]);
|
|
|
+ self.typesFilter = ko.computed(function () {
|
|
|
+ var checkedTypes = ko.utils.arrayFilter(self.typesValuesFilter(), function (type) {
|
|
|
+ return type.checked();
|
|
|
+ });
|
|
|
+ return ko.utils.arrayMap(checkedTypes, function(type){
|
|
|
+ return type.value()
|
|
|
+ });
|
|
|
+ });
|
|
|
+ self.filters = ko.pureComputed(function() {
|
|
|
return [
|
|
|
{'text': self.textFilter()},
|
|
|
{'states': ko.mapping.toJS(self.statesFilter())},
|
|
|
+ {'types': ko.mapping.toJS(self.typesFilter())},
|
|
|
];
|
|
|
});
|
|
|
self.filters.subscribe(function(value) {
|
|
|
@@ -1347,7 +1362,7 @@ ${ commonheader("Job Browser", "jobbrowser", user, request) | n,unicode }
|
|
|
self.paginationOffset(self.paginationOffset() + self.paginationResultPage());
|
|
|
};
|
|
|
|
|
|
- self.filters = ko.computed(function() {
|
|
|
+ self.filters = ko.pureComputed(function() {
|
|
|
return [
|
|
|
{'text': self.textFilter()},
|
|
|
{'time': {'time_value': self.timeValueFilter(), 'time_unit': self.timeUnitFilter()}},
|