mirror of
https://github.com/ansible/awx.git
synced 2026-05-09 10:27:37 -02:30
Removed accordions from jobs page.
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
"jquery": true,
|
"jquery": true,
|
||||||
"esnext": true,
|
"esnext": true,
|
||||||
"globalstrict": true,
|
"globalstrict": true,
|
||||||
"globals": { "angular":false, "alert":false, "$AnsibleConfig":true, "$basePath":true, "jsyaml":false },
|
"globals": { "angular":false, "alert":false, "$AnsibleConfig":true, "$basePath":true, "jsyaml":false, "_":true },
|
||||||
"strict": false,
|
"strict": false,
|
||||||
"quotmark": false,
|
"quotmark": false,
|
||||||
"smarttabs": true,
|
"smarttabs": true,
|
||||||
|
|||||||
@@ -5,8 +5,6 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global _ */
|
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
function JobDetailController ($scope, $compile, $routeParams, ClearScope, Breadcrumbs, LoadBreadCrumbs, GetBasePath, Wait, Rest, ProcessErrors, DigestEvents,
|
function JobDetailController ($scope, $compile, $routeParams, ClearScope, Breadcrumbs, LoadBreadCrumbs, GetBasePath, Wait, Rest, ProcessErrors, DigestEvents,
|
||||||
@@ -251,8 +249,6 @@ function JobDetailController ($scope, $compile, $routeParams, ClearScope, Breadc
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Use debounce from the underscore library. We're including underscore
|
|
||||||
// for the timezone stuff, so might as well take advantage of it.
|
|
||||||
function adjustSize() {
|
function adjustSize() {
|
||||||
var height, ww = $(window).width();
|
var height, ww = $(window).width();
|
||||||
if (ww < 1240) {
|
if (ww < 1240) {
|
||||||
@@ -293,6 +289,7 @@ function JobDetailController ($scope, $compile, $routeParams, ClearScope, Breadc
|
|||||||
adjustSize();
|
adjustSize();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Use debounce for the underscore library to adjust after user resizes window.
|
||||||
$(window).resize(_.debounce(function(){
|
$(window).resize(_.debounce(function(){
|
||||||
adjustSize();
|
adjustSize();
|
||||||
}, 500));
|
}, 500));
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ function JobsListController ($scope, $compile, ClearScope, Breadcrumbs, LoadBrea
|
|||||||
|
|
||||||
var e,
|
var e,
|
||||||
completed_scope, running_scope, queued_scope, scheduled_scope,
|
completed_scope, running_scope, queued_scope, scheduled_scope,
|
||||||
choicesCount = 0;
|
choicesCount = 0,
|
||||||
|
listCount = 0;
|
||||||
|
|
||||||
LoadBreadCrumbs();
|
LoadBreadCrumbs();
|
||||||
|
|
||||||
@@ -26,6 +27,15 @@ function JobsListController ($scope, $compile, ClearScope, Breadcrumbs, LoadBrea
|
|||||||
e.html(Breadcrumbs({ list: { editTitle: 'Jobs' } , mode: 'edit' }));
|
e.html(Breadcrumbs({ list: { editTitle: 'Jobs' } , mode: 'edit' }));
|
||||||
$compile(e)($scope);
|
$compile(e)($scope);
|
||||||
|
|
||||||
|
if ($scope.removeListLoaded) {
|
||||||
|
$scope.removeListLoaded();
|
||||||
|
}
|
||||||
|
$scope.removeListLoaded = $scope.$on('listLoaded', function() {
|
||||||
|
listCount++;
|
||||||
|
if (listCount === 4) {
|
||||||
|
resizeContainers();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// After all choices are ready, load up the lists and populate the page
|
// After all choices are ready, load up the lists and populate the page
|
||||||
if ($scope.removeBuildJobsList) {
|
if ($scope.removeBuildJobsList) {
|
||||||
@@ -81,6 +91,10 @@ function JobsListController ($scope, $compile, ClearScope, Breadcrumbs, LoadBrea
|
|||||||
completed_scope.search('completed_job');
|
completed_scope.search('completed_job');
|
||||||
scheduled_scope.search('schedule');
|
scheduled_scope.search('schedule');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$(window).resize(_.debounce(function() {
|
||||||
|
resizeContainers();
|
||||||
|
}, 500));
|
||||||
});
|
});
|
||||||
|
|
||||||
if ($scope.removeChoicesReady) {
|
if ($scope.removeChoicesReady) {
|
||||||
@@ -111,6 +125,44 @@ function JobsListController ($scope, $compile, ClearScope, Breadcrumbs, LoadBrea
|
|||||||
callback: 'choicesReady'
|
callback: 'choicesReady'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function resizeContainers() {
|
||||||
|
var docw = $(document).width(),
|
||||||
|
available_height,
|
||||||
|
search_row, page_row, height, header, row_height, rows;
|
||||||
|
|
||||||
|
if (docw > 1240) {
|
||||||
|
// customize the container height and # of rows based on available viewport height
|
||||||
|
available_height = $('#wrap').height() - $('#main_tabs').height() - $('#breadcrumbs').outerHeight() - $('.site-footer').outerHeight() - 15;
|
||||||
|
$('.jobs-list-container').each(function() {
|
||||||
|
$(this).height(Math.floor(available_height / 2));
|
||||||
|
});
|
||||||
|
search_row = $('.search-row:eq(0)').outerHeight();
|
||||||
|
page_row = $('.page-row:eq(0)').outerHeight();
|
||||||
|
header = $('#completed_jobs_table thead').height();
|
||||||
|
height = Math.floor(available_height / 2) - header - page_row - search_row;
|
||||||
|
row_height = $('.jobs-list-container tbody tr:eq(0)').height();
|
||||||
|
rows = Math.floor(height / row_height);
|
||||||
|
completed_scope[CompletedJobsList.iterator + '_page_size'] = rows;
|
||||||
|
completed_scope.changePageSize(CompletedJobsList.name, CompletedJobsList.iterator);
|
||||||
|
running_scope[RunningJobsList.iterator + '_page_size'] = rows;
|
||||||
|
running_scope.changePageSize(RunningJobsList.name, RunningJobsList.iterator);
|
||||||
|
queued_scope[QueuedJobsList.iterator + '_page_size'] = rows;
|
||||||
|
queued_scope.changePageSize(QueuedJobsList.name, QueuedJobsList.iterator);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// when width < 1240px put things back to their default state
|
||||||
|
$('.jobs-list-container').each(function() {
|
||||||
|
$(this).css({ 'height': 'auto' });
|
||||||
|
});
|
||||||
|
rows = 5;
|
||||||
|
completed_scope[CompletedJobsList.iterator + '_page_size'] = rows;
|
||||||
|
completed_scope.changePageSize(CompletedJobsList.name, CompletedJobsList.iterator);
|
||||||
|
running_scope[RunningJobsList.iterator + '_page_size'] = rows;
|
||||||
|
running_scope.changePageSize(RunningJobsList.name, RunningJobsList.iterator);
|
||||||
|
queued_scope[QueuedJobsList.iterator + '_page_size'] = rows;
|
||||||
|
queued_scope.changePageSize(QueuedJobsList.name, QueuedJobsList.iterator);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JobsListController.$inject = ['$scope', '$compile', 'ClearScope', 'Breadcrumbs', 'LoadBreadCrumbs', 'LoadSchedulesScope', 'LoadJobsScope', 'RunningJobsList', 'CompletedJobsList',
|
JobsListController.$inject = ['$scope', '$compile', 'ClearScope', 'Breadcrumbs', 'LoadBreadCrumbs', 'LoadSchedulesScope', 'LoadJobsScope', 'RunningJobsList', 'CompletedJobsList',
|
||||||
|
|||||||
@@ -732,6 +732,14 @@ function(UpdatePlayStatus, UpdateHostStatus, UpdatePlayChild, AddHostResult, Sel
|
|||||||
setTimeout( function() { $('#hosts-table-detail').mCustomScrollbar("scrollTo", "bottom"); }, 700);
|
setTimeout( function() { $('#hosts-table-detail').mCustomScrollbar("scrollTo", "bottom"); }, 700);
|
||||||
}, 100);
|
}, 100);
|
||||||
};
|
};
|
||||||
|
}])
|
||||||
|
|
||||||
|
.factory('GetHostSummary', [ function() {
|
||||||
|
|
||||||
|
}])
|
||||||
|
|
||||||
|
.factory('DrawGraph', [ function() {
|
||||||
|
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -347,24 +347,32 @@ angular.module('JobsHelper', ['Utilities', 'RestServices', 'FormGenerator', 'Job
|
|||||||
* Called from JobsList controller to load each section or list on the page
|
* Called from JobsList controller to load each section or list on the page
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
.factory('LoadJobsScope', ['$routeParams', '$location', 'SearchInit', 'PaginateInit', 'GenerateList', 'JobsControllerInit', 'JobsListUpdate',
|
.factory('LoadJobsScope', ['$routeParams', '$location', '$compile', 'SearchInit', 'PaginateInit', 'GenerateList', 'JobsControllerInit', 'JobsListUpdate', 'SearchWidget',
|
||||||
function($routeParams, $location, SearchInit, PaginateInit, GenerateList, JobsControllerInit, JobsListUpdate) {
|
function($routeParams, $location, $compile, SearchInit, PaginateInit, GenerateList, JobsControllerInit, JobsListUpdate, SearchWidget) {
|
||||||
return function(params) {
|
return function(params) {
|
||||||
var parent_scope = params.parent_scope,
|
var parent_scope = params.parent_scope,
|
||||||
scope = params.scope,
|
scope = params.scope,
|
||||||
list = params.list,
|
list = params.list,
|
||||||
id = params.id,
|
id = params.id,
|
||||||
url = params.url,
|
url = params.url,
|
||||||
base = $location.path().replace(/^\//, '').split('/')[0];
|
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||||
|
e, html;
|
||||||
|
|
||||||
|
// Add the search widget. We want it arranged differently, so we're injecting and compiling it separately
|
||||||
|
html = SearchWidget({
|
||||||
|
iterator: list.iterator,
|
||||||
|
template: params.list,
|
||||||
|
includeSize: false
|
||||||
|
});
|
||||||
|
e = angular.element(document.getElementById(id + '-search-container')).append(html);
|
||||||
|
$compile(e)(scope);
|
||||||
|
|
||||||
GenerateList.inject(list, {
|
GenerateList.inject(list, {
|
||||||
mode: 'edit',
|
mode: 'edit',
|
||||||
id: id,
|
id: id,
|
||||||
breadCrumbs: false,
|
breadCrumbs: false,
|
||||||
scope: scope,
|
scope: scope,
|
||||||
searchSize: 'col-lg-4 col-md-6',
|
showSearch: false
|
||||||
listSize: 'col-lg-8 col-md-6',
|
|
||||||
showSearch: true
|
|
||||||
});
|
});
|
||||||
|
|
||||||
SearchInit({
|
SearchInit({
|
||||||
|
|||||||
@@ -144,8 +144,7 @@ angular.module('PaginationHelpers', ['Utilities', 'RefreshHelper', 'RefreshRelat
|
|||||||
|
|
||||||
scope.changePageSize = function (set, iterator) {
|
scope.changePageSize = function (set, iterator) {
|
||||||
// Called whenever a new page size is selected
|
// Called whenever a new page size is selected
|
||||||
// Using the session cookie, keep track of user rows per page selection
|
scope[iterator + '_page'] = 1;
|
||||||
scope[iterator + '_page'] = 0;
|
|
||||||
var new_url = scope[iterator + '_url'].replace(/\?page_size\=\d+/, ''),
|
var new_url = scope[iterator + '_url'].replace(/\?page_size\=\d+/, ''),
|
||||||
connect = (/\/$/.test(new_url)) ? '?' : '&';
|
connect = (/\/$/.test(new_url)) ? '?' : '&';
|
||||||
new_url += (scope[iterator + 'SearchParams']) ? connect + scope[iterator + 'SearchParams'] + '&page_size=' + scope[iterator + '_page_size'] :
|
new_url += (scope[iterator + 'SearchParams']) ? connect + scope[iterator + 'SearchParams'] + '&page_size=' + scope[iterator + '_page_size'] :
|
||||||
|
|||||||
@@ -78,14 +78,7 @@ angular.module('CompletedJobsDefinition', [])
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: { },
|
||||||
columnClass: 'col-md-2 col-sm-3 col-xs-3',
|
|
||||||
refresh: {
|
|
||||||
mode: 'all',
|
|
||||||
awToolTip: "Refresh the page",
|
|
||||||
ngClick: "refreshJobs()"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
fieldActions: {
|
fieldActions: {
|
||||||
submit: {
|
submit: {
|
||||||
|
|||||||
@@ -63,14 +63,7 @@ angular.module('QueuedJobsDefinition', [])
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: { },
|
||||||
columnClass: 'col-md-2 col-sm-3 col-xs-3',
|
|
||||||
refresh: {
|
|
||||||
mode: 'all',
|
|
||||||
awToolTip: "Refresh the page",
|
|
||||||
ngClick: "refreshJobs()"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
fieldActions: {
|
fieldActions: {
|
||||||
submit: {
|
submit: {
|
||||||
|
|||||||
@@ -63,14 +63,7 @@ angular.module('RunningJobsDefinition', [])
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: { },
|
||||||
columnClass: 'col-md-2 col-sm-3 col-xs-3',
|
|
||||||
refresh: {
|
|
||||||
mode: 'all',
|
|
||||||
awToolTip: "Refresh the page",
|
|
||||||
ngClick: "refreshJobs()"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
fieldActions: {
|
fieldActions: {
|
||||||
submit: {
|
submit: {
|
||||||
|
|||||||
@@ -61,14 +61,7 @@ angular.module('ScheduledJobsDefinition', [])
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: { },
|
||||||
columnClass: 'col-md-2 col-sm-3 col-xs-3',
|
|
||||||
refresh: {
|
|
||||||
mode: 'all',
|
|
||||||
awToolTip: "Refresh the page",
|
|
||||||
ngClick: "refreshSchedules()"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
fieldActions: {
|
fieldActions: {
|
||||||
"play": {
|
"play": {
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
@import "angular-scheduler.less";
|
@import "angular-scheduler.less";
|
||||||
@import "log-viewer.less";
|
@import "log-viewer.less";
|
||||||
@import "job-details.less";
|
@import "job-details.less";
|
||||||
|
@import "jobs.less";
|
||||||
|
|
||||||
|
|
||||||
html, body { height: 100%; }
|
html, body { height: 100%; }
|
||||||
@@ -376,7 +377,7 @@ dd {
|
|||||||
|
|
||||||
/* The sticky footer: http://css-tricks.com/snippets/css/sticky-footer, with less variables */
|
/* The sticky footer: http://css-tricks.com/snippets/css/sticky-footer, with less variables */
|
||||||
@footer-height: 68px;
|
@footer-height: 68px;
|
||||||
@footer-margin: 40px;
|
@footer-margin: 22px;
|
||||||
@push-height: (@footer-height + @footer-margin);
|
@push-height: (@footer-height + @footer-margin);
|
||||||
#wrap {
|
#wrap {
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
@@ -965,7 +966,7 @@ input[type="checkbox"].checkbox-no-label {
|
|||||||
padding: 15px 0;
|
padding: 15px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Jobs pages */
|
/* Status Icons */
|
||||||
|
|
||||||
.license-expired,
|
.license-expired,
|
||||||
.license-invalid,
|
.license-invalid,
|
||||||
@@ -1088,24 +1089,7 @@ input[type="checkbox"].checkbox-no-label {
|
|||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.job-list.ui-accordion-content {
|
/* job_events page */
|
||||||
padding: 25px 15px 25px 15px;
|
|
||||||
}
|
|
||||||
.job-list {
|
|
||||||
thead >tr >th, .page-row {
|
|
||||||
font-size: 12px;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.pagination li a {
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
i[class*="icon-job-"] {
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#completed_jobs_table i[class*="icon-job-"] {
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#jobevents_table {
|
#jobevents_table {
|
||||||
div.return-code {
|
div.return-code {
|
||||||
|
|||||||
70
awx/ui/static/less/jobs.less
Normal file
70
awx/ui/static/less/jobs.less
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*********************************************
|
||||||
|
* Copyright (c) 2014 AnsibleWorks, Inc.
|
||||||
|
*
|
||||||
|
* jobs.less
|
||||||
|
*
|
||||||
|
* custom styles for the jobs pages
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#jobs {
|
||||||
|
|
||||||
|
.jobs-list-container {
|
||||||
|
border: 1px solid @grey;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.job-list {
|
||||||
|
thead >tr >th, .page-row {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.pagination li a {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
i[class*="icon-job-"] {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#completed_jobs_table i[class*="icon-job-"] {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
#jobs {
|
||||||
|
.left-side {
|
||||||
|
padding-right: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-side {
|
||||||
|
padding-left: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom-row {
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1023px) {
|
||||||
|
#jobs .jobs-list-container {
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
#jobs .jobs-list-container.completed {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.title{
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,37 +4,57 @@
|
|||||||
<div class="col-md-12" id="breadcrumbs"></div>
|
<div class="col-md-12" id="breadcrumbs"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-6 left-side">
|
||||||
<div id="jobs-page ">
|
<div class="jobs-list-container completed">
|
||||||
<div id="job-page-accordion-0" aw-accordion>
|
<div class="row search-row">
|
||||||
<h3>Completed</h3>
|
<div class="col-md-6"><div class="title">Completed</div></div>
|
||||||
<div class="job-list" id="completed-jobs-container">
|
<div class="col-md-6" id="completed-jobs-search-container"></div>
|
||||||
<div id="completed-jobs" class="job-list-target"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="job-page-accordion-1" aw-accordion>
|
<div class="job-list" id="completed-jobs-container">
|
||||||
<h3>Active</h3>
|
<div id="completed-jobs" class="job-list-target"></div>
|
||||||
<div class="job-list" id="active-jobs-container">
|
|
||||||
<div id="active-jobs" class="job-list-target"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="job-page-accordion-2" aw-accordion>
|
|
||||||
<h3>Queued</h3>
|
|
||||||
<div class="job-list" id="queued-jobs-container">
|
|
||||||
<div id="queued-jobs" class="job-list-target"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="job-page-accordion-3" aw-accordion>
|
|
||||||
<h3>Scheduled</h3>
|
|
||||||
<div class="job-list" id="scheduled-jobs-container">
|
|
||||||
<div id="scheduled-jobs" class="job-list-target"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-md-6 right-side">
|
||||||
|
<div class="jobs-list-container">
|
||||||
|
<div class="row search-row">
|
||||||
|
<div class="col-md-6"><div class="title">Active</div></div>
|
||||||
|
<div class="col-md-6" id="active-jobs-search-container"></div>
|
||||||
|
</div>
|
||||||
|
<div class="job-list" id="active-jobs-container">
|
||||||
|
<div id="active-jobs" class="job-list-target"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><!-- row -->
|
||||||
|
<div class="row bottom-row">
|
||||||
|
<div class="col-md-6 left-side">
|
||||||
|
<div class="jobs-list-container">
|
||||||
|
<div class="row search-row">
|
||||||
|
<div class="col-md-6"><div class="title">Queued</div></div>
|
||||||
|
<div class="col-md-6" id="queued-jobs-search-container"></div>
|
||||||
|
</div>
|
||||||
|
<div class="job-list" id="queued-jobs-container">
|
||||||
|
<div id="queued-jobs" class="job-list-target"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 right-side">
|
||||||
|
<div class="jobs-list-container">
|
||||||
|
<div class="row search-row">
|
||||||
|
<div class="col-md-6"><div class="title">Scheduled</div></div>
|
||||||
|
<div class="col-md-6" id="scheduled-jobs-search-container"></div>
|
||||||
|
</div>
|
||||||
|
<div class="job-list" id="scheduled-jobs-container">
|
||||||
|
<div id="scheduled-jobs" class="job-list-target"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><!-- row -->
|
||||||
|
|
||||||
<div id="schedule-dialog-target"></div>
|
<div id="schedule-dialog-target"></div>
|
||||||
<div ng-include="'/static/partials/logviewer.html'"></div>
|
<div ng-include="'/static/partials/logviewer.html'"></div>
|
||||||
<div ng-include="'/static/partials/schedule_dialog.html'"></div>
|
<div ng-include="'/static/partials/schedule_dialog.html'"></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Reference in New Issue
Block a user