mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-22 18:01:02 +00:00
Merge pull request #1096 from simonoff/0.4-database-assets-refactoring
Assets refactoring
This commit is contained in:
commit
8b54d51e04
35 changed files with 2396 additions and 2379 deletions
BIN
cmd/drone-server/drone-server
Executable file
BIN
cmd/drone-server/drone-server
Executable file
Binary file not shown.
|
@ -8,19 +8,20 @@
|
||||||
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600,700' rel='stylesheet' type='text/css'>
|
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600,700' rel='stylesheet' type='text/css'>
|
||||||
<link href='//fonts.googleapis.com/css?family=Open+Sans:400,600,300' rel='stylesheet' type='text/css'>
|
<link href='//fonts.googleapis.com/css?family=Open+Sans:400,600,300' rel='stylesheet' type='text/css'>
|
||||||
<link href='//fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
|
<link href='//fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
|
||||||
<link href='//cdn.rawgit.com/zavoloklom/material-design-iconic-font/master/css/material-design-iconic-font.min.css' rel='stylesheet' type='text/css'>
|
<link href='//fonts.googleapis.com/icon?family=Material+Icons' rel='stylesheet' type='text/css'>
|
||||||
<link href='//cdnjs.cloudflare.com/ajax/libs/octicons/2.1.2/octicons.min.css' rel='stylesheet' type='text/css'>
|
<link href='//cdnjs.cloudflare.com/ajax/libs/octicons/2.1.2/octicons.min.css' rel='stylesheet' type='text/css'>
|
||||||
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Droid+Sans+Mono"/>
|
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Droid+Sans+Mono"/>
|
||||||
<link href='/static/styles/drone.css' rel='stylesheet' type='text/css'>
|
<link href='/static/styles/drone.css' rel='stylesheet' type='text/css'>
|
||||||
<link rel="icon" href="/static/favicon.png">
|
<link rel="icon" href="/static/favicon.png">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div role="main" ng-view ng-cloak></div>
|
<div ui-view="layout"></div>
|
||||||
|
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.js"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-route.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-route.js"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-resource.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-resource.js"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui/0.4.0/angular-ui.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui/0.4.0/angular-ui.js"></script>
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.15/angular-ui-router.js"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.6.0/moment.min.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.6.0/moment.min.js"></script>
|
||||||
|
|
||||||
<!-- main javascript application -->
|
<!-- main javascript application -->
|
||||||
|
|
|
@ -4,10 +4,9 @@
|
||||||
* BuildsCtrl responsible for rendering the repo's
|
* BuildsCtrl responsible for rendering the repo's
|
||||||
* recent build history.
|
* recent build history.
|
||||||
*/
|
*/
|
||||||
function BuildsCtrl($scope, $routeParams, builds, repos, users, logs) {
|
function BuildsCtrl($scope, $stateParams, builds, repos, users, logs) {
|
||||||
|
var owner = $stateParams.owner;
|
||||||
var owner = $routeParams.owner;
|
var name = $stateParams.name;
|
||||||
var name = $routeParams.name;
|
|
||||||
var fullName = owner + '/' + name;
|
var fullName = owner + '/' + name;
|
||||||
|
|
||||||
// Gets the currently authenticated user
|
// Gets the currently authenticated user
|
||||||
|
@ -33,13 +32,13 @@
|
||||||
repos.watch(repo.full_name).then(function (payload) {
|
repos.watch(repo.full_name).then(function (payload) {
|
||||||
$scope.repo.starred = true;
|
$scope.repo.starred = true;
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.unwatch = function (repo) {
|
$scope.unwatch = function (repo) {
|
||||||
repos.unwatch(repo.full_name).then(function () {
|
repos.unwatch(repo.full_name).then(function () {
|
||||||
$scope.repo.starred = false;
|
$scope.repo.starred = false;
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
repos.subscribe(fullName, function (event) {
|
repos.subscribe(fullName, function (event) {
|
||||||
var added = false;
|
var added = false;
|
||||||
|
@ -64,11 +63,10 @@
|
||||||
/**
|
/**
|
||||||
* BuildCtrl responsible for rendering a build.
|
* BuildCtrl responsible for rendering a build.
|
||||||
*/
|
*/
|
||||||
function BuildCtrl($scope, $routeParams, $window, logs, builds, repos, users) {
|
function BuildCtrl($scope, $stateParams, $window, logs, builds, repos, users) {
|
||||||
|
var number = $stateParams.number;
|
||||||
var number = $routeParams.number;
|
var owner = $stateParams.owner;
|
||||||
var owner = $routeParams.owner;
|
var name = $stateParams.name;
|
||||||
var name = $routeParams.name;
|
|
||||||
var fullName = owner + '/' + name;
|
var fullName = owner + '/' + name;
|
||||||
|
|
||||||
// Gets the currently authenticated user
|
// Gets the currently authenticated user
|
||||||
|
@ -98,18 +96,38 @@
|
||||||
$scope.build = event;
|
$scope.build = event;
|
||||||
$scope.$apply();
|
$scope.$apply();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$scope.restart = function () {
|
||||||
|
builds.restart(fullName, number).then(function (payload) {
|
||||||
|
$scope.build = payload.data;
|
||||||
|
}).catch(function (err) {
|
||||||
|
$scope.error = err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.cancel = function () {
|
||||||
|
builds.cancel(fullName, number).then(function (payload) {
|
||||||
|
$scope.build = payload.data;
|
||||||
|
}).catch(function (err) {
|
||||||
|
$scope.error = err;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.tail = function () {
|
||||||
|
tail = !tail;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BuildOutCtrl responsible for rendering a build output.
|
* BuildOutCtrl responsible for rendering a build output.
|
||||||
*/
|
*/
|
||||||
function BuildOutCtrl($scope, $routeParams, $window, logs, builds, repos, users) {
|
function BuildOutCtrl($scope, $stateParams, $window, logs, builds, repos, users) {
|
||||||
|
|
||||||
var step = parseInt($routeParams.step) || 1;
|
var step = parseInt($stateParams.step) || 1;
|
||||||
var number = $routeParams.number;
|
var number = $stateParams.number;
|
||||||
var owner = $routeParams.owner;
|
var owner = $stateParams.owner;
|
||||||
var name = $routeParams.name;
|
var name = $stateParams.name;
|
||||||
var fullName = owner + '/' + name;
|
var fullName = owner + '/' + name;
|
||||||
var streaming = false;
|
var streaming = false;
|
||||||
var tail = false;
|
var tail = false;
|
||||||
|
@ -133,7 +151,7 @@
|
||||||
$window.scrollTo(0, $window.document.body.scrollHeight);
|
$window.scrollTo(0, $window.document.body.scrollHeight);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
// Gets the currently authenticated user
|
// Gets the currently authenticated user
|
||||||
users.getCached().then(function (payload) {
|
users.getCached().then(function (payload) {
|
||||||
|
@ -172,6 +190,25 @@
|
||||||
$scope.error = err;
|
$scope.error = err;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
repos.subscribe(fullName, function (event) {
|
||||||
|
if (event.number !== parseInt(number)) {
|
||||||
|
return; // ignore
|
||||||
|
}
|
||||||
|
// update the build
|
||||||
|
$scope.build = event;
|
||||||
|
console.log(event.builds);
|
||||||
|
$scope.task = event.builds[step - 1];
|
||||||
|
$scope.$apply();
|
||||||
|
|
||||||
|
// start streaming the current build
|
||||||
|
if ($scope.task.status === 'running') {
|
||||||
|
stream();
|
||||||
|
} else {
|
||||||
|
// resets our streaming state
|
||||||
|
streaming = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
$scope.restart = function () {
|
$scope.restart = function () {
|
||||||
builds.restart(fullName, number).then(function (payload) {
|
builds.restart(fullName, number).then(function (payload) {
|
||||||
$scope.build = payload.data;
|
$scope.build = payload.data;
|
||||||
|
@ -193,26 +230,7 @@
|
||||||
$scope.tail = function () {
|
$scope.tail = function () {
|
||||||
tail = !tail;
|
tail = !tail;
|
||||||
};
|
};
|
||||||
|
|
||||||
repos.subscribe(fullName, function(event) {
|
|
||||||
if (event.number !== parseInt(number)) {
|
|
||||||
return; // ignore
|
|
||||||
}
|
}
|
||||||
// update the build
|
|
||||||
$scope.build = event;
|
|
||||||
$scope.task = event.builds[step-1];
|
|
||||||
$scope.$apply();
|
|
||||||
|
|
||||||
// start streaming the current build
|
|
||||||
if ($scope.task.status === 'running') {
|
|
||||||
stream();
|
|
||||||
} else {
|
|
||||||
// resets our streaming state
|
|
||||||
streaming = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
angular
|
angular
|
||||||
.module('drone')
|
.module('drone')
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
* CommitsCtrl responsible for rendering the repo's
|
* CommitsCtrl responsible for rendering the repo's
|
||||||
* recent commit history.
|
* recent commit history.
|
||||||
*/
|
*/
|
||||||
function CommitsCtrl($scope, $routeParams, builds, repos, users, logs) {
|
function CommitsCtrl($scope, $stateParams, builds, repos, users, logs) {
|
||||||
|
|
||||||
var owner = $routeParams.owner;
|
var owner = $stateParams.owner;
|
||||||
var name = $routeParams.name;
|
var name = $stateParams.name;
|
||||||
var fullName = owner+'/'+name;
|
var fullName = owner+'/'+name;
|
||||||
|
|
||||||
// Gets the currently authenticated user
|
// Gets the currently authenticated user
|
||||||
|
|
|
@ -4,8 +4,7 @@
|
||||||
* ReposCtrl responsible for rendering the user's
|
* ReposCtrl responsible for rendering the user's
|
||||||
* repository home screen.
|
* repository home screen.
|
||||||
*/
|
*/
|
||||||
function ReposCtrl($scope, $routeParams, repos, users) {
|
function ReposCtrl($scope, $stateParams, repos, users) {
|
||||||
|
|
||||||
// Gets the currently authenticated user
|
// Gets the currently authenticated user
|
||||||
users.getCached().then(function (payload) {
|
users.getCached().then(function (payload) {
|
||||||
$scope.user = payload.data;
|
$scope.user = payload.data;
|
||||||
|
@ -43,9 +42,9 @@
|
||||||
/**
|
/**
|
||||||
* RepoEditCtrl responsible for editing a repository.
|
* RepoEditCtrl responsible for editing a repository.
|
||||||
*/
|
*/
|
||||||
function RepoEditCtrl($scope, $window, $location, $routeParams, repos, users) {
|
function RepoEditCtrl($scope, $window, $location, $stateParams, repos, users) {
|
||||||
var owner = $routeParams.owner;
|
var owner = $stateParams.owner;
|
||||||
var name = $routeParams.name;
|
var name = $stateParams.name;
|
||||||
var fullName = owner + '/' + name;
|
var fullName = owner + '/' + name;
|
||||||
|
|
||||||
// Inject window for composing url
|
// Inject window for composing url
|
||||||
|
@ -70,7 +69,7 @@
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
$scope.error = err;
|
$scope.error = err;
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.delete = function (repo) {
|
$scope.delete = function (repo) {
|
||||||
repos.delete(repo).then(function (payload) {
|
repos.delete(repo).then(function (payload) {
|
||||||
|
@ -78,15 +77,15 @@
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
$scope.error = err;
|
$scope.error = err;
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.param={}
|
$scope.param = {};
|
||||||
$scope.addParam = function (param) {
|
$scope.addParam = function (param) {
|
||||||
if (!$scope.repo.params) {
|
if (!$scope.repo.params) {
|
||||||
$scope.repo.params = {}
|
$scope.repo.params = {}
|
||||||
}
|
}
|
||||||
$scope.repo.params[param.key] = param.value;
|
$scope.repo.params[param.key] = param.value;
|
||||||
$scope.param={}
|
$scope.param = {};
|
||||||
|
|
||||||
// auto-update
|
// auto-update
|
||||||
repos.update($scope.repo).then(function (payload) {
|
repos.update($scope.repo).then(function (payload) {
|
||||||
|
@ -94,7 +93,7 @@
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
$scope.error = err;
|
$scope.error = err;
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.deleteParam = function (key) {
|
$scope.deleteParam = function (key) {
|
||||||
delete $scope.repo.params[key];
|
delete $scope.repo.params[key];
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
*/
|
*/
|
||||||
angular.module('drone', [
|
angular.module('drone', [
|
||||||
'ngRoute',
|
'ngRoute',
|
||||||
'ui.filters'
|
'ui.filters',
|
||||||
|
'ui.router'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -37,7 +38,7 @@
|
||||||
* Defines the route configuration for the
|
* Defines the route configuration for the
|
||||||
* main application.
|
* main application.
|
||||||
*/
|
*/
|
||||||
function Config ($routeProvider, $httpProvider, $locationProvider) {
|
function Config($stateProvider, $httpProvider, $locationProvider) {
|
||||||
|
|
||||||
// Resolver that will attempt to load the currently
|
// Resolver that will attempt to load the currently
|
||||||
// authenticated user prior to loading the page.
|
// authenticated user prior to loading the page.
|
||||||
|
@ -45,66 +46,167 @@
|
||||||
user: function (users) {
|
user: function (users) {
|
||||||
return users.getCached();
|
return users.getCached();
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
$routeProvider
|
$stateProvider
|
||||||
.when('/', {
|
.state('app', {
|
||||||
templateUrl: '/static/scripts/views/repos.html',
|
abstract: true,
|
||||||
|
views: {
|
||||||
|
'layout': {
|
||||||
|
templateUrl: '/static/scripts/views/layout.html',
|
||||||
|
controller: function ($scope, $routeParams, repos, users) {
|
||||||
|
users.getCached().then(function (payload) {
|
||||||
|
$scope.user = payload.data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.state('app.index', {
|
||||||
|
url: '/',
|
||||||
|
views: {
|
||||||
|
'toolbar': {
|
||||||
|
templateUrl: '/static/scripts/views/repos/index/toolbar.html'
|
||||||
|
},
|
||||||
|
'content': {
|
||||||
|
templateUrl: '/static/scripts/views/repos/index/content.html',
|
||||||
controller: 'ReposCtrl',
|
controller: 'ReposCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title: 'Dashboard'
|
||||||
})
|
})
|
||||||
.when('/login', {
|
.state('login', {
|
||||||
|
url: '/login',
|
||||||
|
views: {
|
||||||
|
'layout': {
|
||||||
templateUrl: '/static/scripts/views/login.html',
|
templateUrl: '/static/scripts/views/login.html',
|
||||||
controller: 'UserLoginCtrl'
|
controller: 'UserLoginCtrl',
|
||||||
|
resolve: resolveUser
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title: 'Login'
|
||||||
})
|
})
|
||||||
.when('/profile', {
|
.state('app.profile', {
|
||||||
templateUrl: '/static/scripts/views/user.html',
|
url: '/profile',
|
||||||
|
views: {
|
||||||
|
'toolbar': {templateUrl: '/static/scripts/views/profile/toolbar.html'},
|
||||||
|
'content': {
|
||||||
|
templateUrl: '/static/scripts/views/profile/content.html',
|
||||||
controller: 'UserCtrl',
|
controller: 'UserCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title: 'Profile'
|
||||||
})
|
})
|
||||||
.when('/users', {
|
.state('app.users', {
|
||||||
templateUrl: '/static/scripts/views/users.html',
|
url: '/users',
|
||||||
|
views: {
|
||||||
|
'toolbar': {templateUrl: '/static/scripts/views/users/toolbar.html'},
|
||||||
|
'content': {
|
||||||
|
templateUrl: '/static/scripts/views/users/content.html',
|
||||||
controller: 'UsersCtrl',
|
controller: 'UsersCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title: 'Users'
|
||||||
})
|
})
|
||||||
.when('/new', {
|
.state('app.new_repo', {
|
||||||
templateUrl: '/static/scripts/views/repos_add.html',
|
url: '/new',
|
||||||
|
views: {
|
||||||
|
'toolbar': {templateUrl: '/static/scripts/views/repos/add/toolbar.html'},
|
||||||
|
'content': {
|
||||||
|
templateUrl: '/static/scripts/views/repos/add/content.html',
|
||||||
controller: 'RepoAddCtrl',
|
controller: 'RepoAddCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title: 'Add Repository'
|
||||||
})
|
})
|
||||||
.when('/:owner/:name', {
|
.state('app.builds', {
|
||||||
templateUrl: '/static/scripts/views/builds.html',
|
url: '/:owner/:name',
|
||||||
controller: 'BuildsCtrl',
|
views: {
|
||||||
|
'toolbar': {
|
||||||
|
templateUrl: '/static/scripts/views/builds/index/toolbar.html',
|
||||||
|
controller: 'RepoEditCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
|
},
|
||||||
|
'content': {
|
||||||
|
templateUrl: '/static/scripts/views/builds/index/content.html',
|
||||||
|
controller: 'BuildsCtrl'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title: 'Builds'
|
||||||
})
|
})
|
||||||
.when('/:owner/:name/edit', {
|
.state('app.repo_edit', {
|
||||||
templateUrl: '/static/scripts/views/repos_edit.html',
|
url: '/:owner/:name/edit',
|
||||||
|
views: {
|
||||||
|
'toolbar': {
|
||||||
|
templateUrl: '/static/scripts/views/repos/toolbar.html',
|
||||||
|
controller: 'RepoEditCtrl',
|
||||||
|
resolve: resolveUser
|
||||||
|
},
|
||||||
|
'content': {
|
||||||
|
templateUrl: '/static/scripts/views/repos/edit.html',
|
||||||
|
controller: 'RepoEditCtrl',
|
||||||
|
resolve: resolveUser
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title: 'Edit Repository'
|
||||||
|
})
|
||||||
|
.state('app.repo.env', {
|
||||||
|
url: '/:owner/:name/edit/env',
|
||||||
|
views: {
|
||||||
|
'toolbar': {templateUrl: '/static/scripts/views/repos/toolbar.html'},
|
||||||
|
'content': {templateUrl: '/static/scripts/views/repos/env.html'}
|
||||||
|
},
|
||||||
controller: 'RepoEditCtrl',
|
controller: 'RepoEditCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
})
|
})
|
||||||
.when('/:owner/:name/edit/env', {
|
.state('app.repo.del', {
|
||||||
templateUrl: '/static/scripts/views/repos_env.html',
|
url: '/:owner/:name/delete',
|
||||||
|
views: {
|
||||||
|
'toolbar': {templateUrl: '/static/scripts/views/repos/toolbar.html'},
|
||||||
|
'content': {templateUrl: '/static/scripts/views/repos/del.html'}
|
||||||
|
},
|
||||||
controller: 'RepoEditCtrl',
|
controller: 'RepoEditCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
})
|
})
|
||||||
.when('/:owner/:name/delete', {
|
.state('app.build', {
|
||||||
templateUrl: '/static/scripts/views/repos_del.html',
|
url: '/:owner/:name/:number',
|
||||||
controller: 'RepoEditCtrl',
|
views: {
|
||||||
resolve: resolveUser
|
'toolbar': {
|
||||||
})
|
templateUrl: '/static/scripts/views/builds/show/toolbar.html',
|
||||||
.when('/:owner/:name/:number', {
|
|
||||||
templateUrl: '/static/scripts/views/build.html',
|
|
||||||
controller: 'BuildCtrl',
|
controller: 'BuildCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
|
},
|
||||||
|
'content': {
|
||||||
|
templateUrl: '/static/scripts/views/builds/show/content.html',
|
||||||
|
controller: 'BuildCtrl',
|
||||||
|
resolve: resolveUser
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title: 'Build'
|
||||||
})
|
})
|
||||||
.when('/:owner/:name/:number/:step', {
|
.state('app.job', {
|
||||||
templateUrl: '/static/scripts/views/build_out.html',
|
url: '/:owner/:name/:number/:step',
|
||||||
|
views: {
|
||||||
|
'toolbar': {
|
||||||
|
templateUrl: '/static/scripts/views/builds/step/toolbar.html',
|
||||||
controller: 'BuildOutCtrl',
|
controller: 'BuildOutCtrl',
|
||||||
resolve: resolveUser
|
resolve: resolveUser
|
||||||
|
},
|
||||||
|
'content': {
|
||||||
|
templateUrl: '/static/scripts/views/builds/step/content.html',
|
||||||
|
controller: 'BuildOutCtrl',
|
||||||
|
resolve: resolveUser
|
||||||
|
},
|
||||||
|
title: 'Build Job'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Enables html5 mode
|
// Enables html5 mode
|
||||||
$locationProvider.html5Mode(true)
|
$locationProvider.html5Mode(true);
|
||||||
|
|
||||||
// Appends the Bearer token to authorize every
|
// Appends the Bearer token to authorize every
|
||||||
// outbound http request.
|
// outbound http request.
|
||||||
|
@ -128,16 +230,15 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function RouteChange($rootScope, repos, logs) {
|
function RouteChange($rootScope, repos, logs) {
|
||||||
$rootScope.$on('$routeChangeStart', function (event, next) {
|
$rootScope.$on('$stateChangeStart', function () {
|
||||||
repos.unsubscribe();
|
repos.unsubscribe();
|
||||||
logs.unsubscribe();
|
logs.unsubscribe();
|
||||||
});
|
});
|
||||||
|
|
||||||
$rootScope.$on('$routeChangeSuccess', function (event, current, previous) {
|
$rootScope.$on('$stateChangeSuccess', function (event, current) {
|
||||||
if (current.$$route.title) {
|
if (current.title) {
|
||||||
document.title = current.$$route.title + ' · drone';
|
document.title = current.title + ' · drone';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,64 +0,0 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a ng-href="/{{ repo.full_name }}" class="icon icon-home"></a>
|
|
||||||
<a ng-href="/{{ repo.full_name }}">{{ repo.owner }} / {{ repo.name }}</a>
|
|
||||||
<span class="spacer"></span>
|
|
||||||
<a ng-href="#">{{ build.number }}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="menu">
|
|
||||||
<a href="settings.html" class="icon icon-settings"></a>
|
|
||||||
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right"></a>
|
|
||||||
<button ng-click="watch(repo)" ng-if="!repo.starred" class="nav-item star float-right"></button>
|
|
||||||
<button ng-click="unwatch(repo)" ng-if="repo.starred" class="nav-item unstar float-right"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<article>
|
|
||||||
|
|
||||||
<section class="commit-section">
|
|
||||||
<div class="row build-row">
|
|
||||||
<div>
|
|
||||||
<div ng-class="[ 'build-num', build.status ]"></div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3>{{ build.head_commit.message }}</h3>
|
|
||||||
<p><strong>{{ build.head_commit.author.login }}</strong> pushed to <strong>{{ build.head_commit.branch }}</strong> {{ build.started_at | fromNow }}</p>
|
|
||||||
<div style="position:absolute;top:30px;right:30px;color:#CCC;"># {{build.number}}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<a class="row build-row sub-build-row" ng-repeat="job in build.jobs" ng-href="{{ repo.full_name }}/{{ build.number }}/{{ job.number }}">
|
|
||||||
<div>
|
|
||||||
<div ng-class="[ 'build-num', build.status ]"></div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3>
|
|
||||||
<div ng-repeat="(key, value) in job.environment">
|
|
||||||
{{ key.toUpperCase() }}={{ value }}
|
|
||||||
</div>
|
|
||||||
</h3>
|
|
||||||
<div style="position:absolute;top:30px;right:30px;color:#CCC;"># {{job.number}}</div>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<button ng-if="build.status !== 'pending' && build.status !== 'running'" ng-click="restart()">Restart</button>
|
|
||||||
<button ng-if="build.status === 'pending' || build.status === 'running'" ng-click="cancel()">Cancel</button>
|
|
|
@ -1,68 +0,0 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a ng-href="/{{ repo.full_name }}/{{ build.sequence }}" class="icon icon-home"></a>
|
|
||||||
<a ng-href="/{{ repo.full_name }}">{{ repo.owner }} / {{ repo.name }}</a>
|
|
||||||
<span class="spacer"></span>
|
|
||||||
<a ng-href="/{{ repo.full_name }}/{{ build.sequence }}">{{ build.sequence }}</a>
|
|
||||||
<span class="spacer"></span>
|
|
||||||
<a href="#">{{ task.sequence }}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="menu">
|
|
||||||
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right"></a>
|
|
||||||
<button ng-click="watch(repo)" ng-if="!repo.starred" class="nav-item star float-right"></button>
|
|
||||||
<button ng-click="unwatch(repo)" ng-if="repo.starred" class="nav-item unstar float-right"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<article>
|
|
||||||
|
|
||||||
<section class="commit-section">
|
|
||||||
<div class="row build-row">
|
|
||||||
<div>
|
|
||||||
<div ng-class="[ 'build-num', task.status ]" ng-if="task"></div>
|
|
||||||
<div ng-class="[ 'build-num', build.status ]" ng-if="!task"></div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3>{{ build.head_commit.message }}</h3>
|
|
||||||
<p><strong>{{ build.head_commit.author.login }}</strong> pushed to <strong>{{ build.head_commit.branch }}</strong> {{ build.started_at | fromNow }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row build-row sub-build-row" ng-if="build.jobs.length > 1">
|
|
||||||
<div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3 style="margin-top:0px">
|
|
||||||
<div ng-repeat="(key, value) in task.environment">
|
|
||||||
{{ key.toUpperCase() }}={{ value }}
|
|
||||||
</div>
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<pre id="term" ng-if="task && task.status !== 'pending'"></pre>
|
|
||||||
<button class="fab" ng-if="build.status === 'running'" ng-click="tail()"></button>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<button ng-if="build.status !== 'pending' && build.status !== 'running'" ng-click="restart()">Restart</button>
|
|
||||||
<button ng-if="build.status === 'pending' || build.status === 'running'" ng-click="cancel()">Cancel</button>
|
|
|
@ -1,39 +0,0 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a href="/" class="icon icon-home"></a>
|
|
||||||
<a href="#">{{ repo.owner }} / {{ repo.name }}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="menu">
|
|
||||||
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right" ng-if="repo.permissions.pull"></a>
|
|
||||||
<button ng-click="watch(repo)" ng-if="!repo.starred && user" class="nav-item star float-right"></button>
|
|
||||||
<button ng-click="unwatch(repo)" ng-if="repo.starred && user" class="nav-item unstar float-right"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<section>
|
|
||||||
<a class="row build-row" ng-repeat="build in builds | orderBy:'-number'" ng-href="/{{ repo.full_name }}/{{ build.number }}">
|
|
||||||
<div>
|
|
||||||
<div ng-class="[ 'build-num', build.status ]"></div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3>{{ build.head_commit.message }}</h3>
|
|
||||||
<p><strong>{{ build.head_commit.author.login }}</strong> pushed to <strong>{{ build.head_commit.branch }}</strong> {{ build.started_at | fromNow }}</p>
|
|
||||||
<div style="position:absolute;top:30px;right:30px;color:#CCC;"># {{build.number}}</div>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
</article>
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
<article>
|
||||||
|
<section>
|
||||||
|
<a class="row build-row" ng-repeat="build in builds | orderBy:'-number'" ng-href="/{{ repo.full_name }}/{{ build.number }}">
|
||||||
|
<div>
|
||||||
|
<div ng-class="[ 'build-num', build.status ]"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>{{ build.head_commit.message }}</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>{{ build.head_commit.author.login }}</strong> pushed to <strong>{{ build.head_commit.branch}}</strong> {{ build.started_at | fromNow }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div style="position:absolute;top:30px;right:30px;color:#CCC;"># {{build.number}}</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</section>
|
||||||
|
</article>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<div class="breadcrumb" style="position:relative;top:0px;">
|
||||||
|
<a href="/" class="icon icon-home">
|
||||||
|
<i class="material-icons md-18">home</i>
|
||||||
|
</a>
|
||||||
|
<a href="#">{{ repo.owner }} / {{ repo.name }}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="menu">
|
||||||
|
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right" ng-if="repo.permissions.pull">
|
||||||
|
<i class="material-icons md-18">edit</i>
|
||||||
|
</a>
|
||||||
|
<button ng-click="watch(repo)" ng-if="!repo.starred && user" class="nav-item star float-right">
|
||||||
|
<i class="material-icons md-18">star_border</i>
|
||||||
|
</button>
|
||||||
|
<button ng-click="unwatch(repo)" ng-if="repo.starred && user" class="nav-item unstar float-right">
|
||||||
|
<i class="material-icons md-18">star</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
|
@ -0,0 +1,40 @@
|
||||||
|
<article>
|
||||||
|
|
||||||
|
<section class="commit-section">
|
||||||
|
<div class="row build-row">
|
||||||
|
<div>
|
||||||
|
<div ng-class="[ 'build-num', build.status ]"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>{{ build.head_commit.message }}</h3>
|
||||||
|
|
||||||
|
<p><strong>{{ build.head_commit.author.login }}</strong> pushed to <strong>{{ build.head_commit.branch}}</strong> {{ build.started_at | fromNow }}</p>
|
||||||
|
|
||||||
|
<div style="position:absolute;top:30px;right:30px;color:#CCC;"># {{build.number}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<p style="padding-top: 20px;">
|
||||||
|
<h3><strong>Build jobs</strong></h3>
|
||||||
|
</p>
|
||||||
|
<section>
|
||||||
|
<a class="row build-row sub-build-row" ng-repeat="job in build.jobs" ng-href="{{ repo.full_name }}/{{ build.number }}/{{ job.number }}">
|
||||||
|
<div>
|
||||||
|
<div ng-class="[ 'build-num', build.status ]"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>
|
||||||
|
<div ng-repeat="(key, value) in job.environment">
|
||||||
|
{{ key.toUpperCase() }}={{ value }}
|
||||||
|
</div>
|
||||||
|
</h3>
|
||||||
|
<div style="position:absolute;top:30px;right:30px;color:#CCC;"># {{job.number}}</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</section>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<div style="padding-left: 20px;">
|
||||||
|
<button ng-if="build.status !== 'pending' && build.status !== 'running'" ng-click="restart()">Restart</button>
|
||||||
|
<button ng-if="build.status === 'pending' || build.status === 'running'" ng-click="cancel()">Cancel</button>
|
||||||
|
</div>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<div class="breadcrumb" style="position:relative;top:0px;">
|
||||||
|
<a ng-href="/{{ repo.full_name }}" class="icon icon-home">
|
||||||
|
<i class="material-icons md-18">home</i>
|
||||||
|
</a>
|
||||||
|
<a ng-href="/{{ repo.full_name }}">{{ repo.owner }} / {{ repo.name }}</a>
|
||||||
|
<span class="spacer"></span>
|
||||||
|
<a ng-href="#">#{{ build.number }}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="menu">
|
||||||
|
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right" ng-if="repo.permissions.pull">
|
||||||
|
<i class="material-icons md-18">edit</i>
|
||||||
|
</a>
|
||||||
|
<button ng-click="watch(repo)" ng-if="!repo.starred && user" class="nav-item star float-right">
|
||||||
|
<i class="material-icons md-18">star_border</i>
|
||||||
|
</button>
|
||||||
|
<button ng-click="unwatch(repo)" ng-if="repo.starred && user" class="nav-item unstar float-right">
|
||||||
|
<i class="material-icons md-18">star</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
|
@ -0,0 +1,37 @@
|
||||||
|
<article>
|
||||||
|
|
||||||
|
<section class="commit-section">
|
||||||
|
<div class="row build-row">
|
||||||
|
<div>
|
||||||
|
<div ng-class="[ 'build-num', task.status ]" ng-if="task"></div>
|
||||||
|
<div ng-class="[ 'build-num', build.status ]" ng-if="!task"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>{{ build.head_commit.message }}</h3>
|
||||||
|
|
||||||
|
<p><strong>{{ build.head_commit.author.login }}</strong> pushed to <strong>{{ build.head_commit.branch}}</strong> {{ build.started_at | fromNow }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row build-row sub-build-row" ng-if="build.jobs.length > 1">
|
||||||
|
<div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 style="margin-top:0px">
|
||||||
|
<div ng-repeat="(key, value) in task.environment">
|
||||||
|
{{ key.toUpperCase() }}={{ value }}
|
||||||
|
</div>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<pre id="term" ng-if="task && task.status !== 'pending'"></pre>
|
||||||
|
<button class="fab" ng-if="build.status === 'running'" ng-click="tail()"></button>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
<button ng-if="build.status !== 'pending' && build.status !== 'running'" ng-click="restart()">Restart</button>
|
||||||
|
<button ng-if="build.status === 'pending' || build.status === 'running'" ng-click="cancel()">Cancel</button>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<div class="breadcrumb" style="position:relative;top:0px;">
|
||||||
|
<a ng-href="/{{ repo.full_name }}/{{ build.sequence }}" class="icon icon-home">
|
||||||
|
<i class="material-icons md-18">home</i>
|
||||||
|
</a>
|
||||||
|
<a ng-href="/{{ repo.full_name }}">{{ repo.owner }} / {{ repo.name }}</a>
|
||||||
|
<span class="spacer"> </span>
|
||||||
|
<a ng-href="/{{ repo.full_name }}/{{ build.number }}">Build # {{ build.number }}</a>
|
||||||
|
<span class="spacer"></span>
|
||||||
|
<a href="#">Job #{{ task.number }}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="menu">
|
||||||
|
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right" ng-if="repo.permissions.pull">
|
||||||
|
<i class="material-icons md-18">edit</i>
|
||||||
|
</a>
|
||||||
|
<button ng-click="watch(repo)" ng-if="!repo.starred && user" class="nav-item star float-right">
|
||||||
|
<i class="material-icons md-18">star_border</i>
|
||||||
|
</button>
|
||||||
|
<button ng-click="unwatch(repo)" ng-if="repo.starred && user" class="nav-item unstar float-right">
|
||||||
|
<i class="material-icons md-18">star</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
15
cmd/drone-server/static/scripts/views/layout.html
Normal file
15
cmd/drone-server/static/scripts/views/layout.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<header>
|
||||||
|
<a class="logo float-left" href="/"></a>
|
||||||
|
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank">
|
||||||
|
<i class="material-icons md-18">help</i>
|
||||||
|
</a>
|
||||||
|
<a class="menu-item users float-right" href="/users" ng-if="user.admin">
|
||||||
|
<i class="material-icons md-18">supervisor_account</i>
|
||||||
|
</a>
|
||||||
|
<a class="menu-item settings float-right" href="/profile">
|
||||||
|
<i class="material-icons md-18">settings</i>
|
||||||
|
</a>
|
||||||
|
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
||||||
|
</header>
|
||||||
|
<div class="toolbar" ui-view="toolbar"></div>
|
||||||
|
<div ui-view="content"></div>
|
|
@ -9,6 +9,7 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.box {
|
a.box {
|
||||||
background: #FFF;
|
background: #FFF;
|
||||||
width: 250px;
|
width: 250px;
|
||||||
|
@ -20,15 +21,18 @@
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.box:hover {
|
a.box:hover {
|
||||||
box-shadow: 7px 7px 0 rgba(255, 255, 255, 0.05);
|
box-shadow: 7px 7px 0 rgba(255, 255, 255, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
div.logo {
|
div.logo {
|
||||||
background: url(/static/images/logo.svg) no-repeat center center;;
|
background: url(/static/images/logo.svg) no-repeat center center;
|
||||||
background-size: 72px;
|
background-size: 72px;
|
||||||
height: 150px;
|
height: 150px;
|
||||||
-webkit-transition: all .5s;
|
-webkit-transition: all .5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.login {
|
div.login {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
|
@ -40,6 +44,7 @@
|
||||||
background: #424242;
|
background: #424242;
|
||||||
color: rgba(255, 255, 255, 0.7);
|
color: rgba(255, 255, 255, 0.7);
|
||||||
}
|
}
|
||||||
|
|
||||||
body > div {
|
body > div {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -61,7 +66,9 @@
|
||||||
<div ng-switch-when="internal_error">Oops. There was an unexpected error. Please try again.</div>
|
<div ng-switch-when="internal_error">Oops. There was an unexpected error. Please try again.</div>
|
||||||
<div ng-switch-when="user_not_found">There was an error authorizing your account.</div>
|
<div ng-switch-when="user_not_found">There was an error authorizing your account.</div>
|
||||||
<div ng-switch-when="access_denied_org">Login is restricted to approved organization members only</div>
|
<div ng-switch-when="access_denied_org">Login is restricted to approved organization members only</div>
|
||||||
<div ng-switch-when="access_denied">Self-registration is disabled. Please contact the system admin to grant access.</div>
|
<div ng-switch-when="access_denied">Self-registration is disabled. Please contact the system admin to grant
|
||||||
|
access.
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="login">Login</div>
|
<div class="login">Login</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -1,19 +1,3 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a href="/" class="icon icon-home"></a>
|
|
||||||
<a href="#">Profile</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<section>
|
<section>
|
||||||
<h2>Login info</h2>
|
<h2>Login info</h2>
|
||||||
|
@ -34,8 +18,12 @@
|
||||||
<section>
|
<section>
|
||||||
<h2>Tokens</h2>
|
<h2>Tokens</h2>
|
||||||
<form>
|
<form>
|
||||||
|
<div style="padding-left: 20px; float: left;">
|
||||||
<input type="label" ng-model="newToken.label" />
|
<input type="label" ng-model="newToken.label" />
|
||||||
|
</div>
|
||||||
|
<div style="padding-top: 20px; padding-left: 20px; float: left;">
|
||||||
<button ng-click="createToken(newToken)">Create</button>
|
<button ng-click="createToken(newToken)">Create</button>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div class="alert" ng-if="tokens && tokens.length === 0">No Personal Tokens Exist</div>
|
<div class="alert" ng-if="tokens && tokens.length === 0">No Personal Tokens Exist</div>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<div class="breadcrumb" style="position:relative;top:0px;">
|
||||||
|
<a href="/" class="icon icon-home">
|
||||||
|
<i class="material-icons md-18">home</i>
|
||||||
|
</a>
|
||||||
|
<a href="#">Profile</a>
|
||||||
|
</div>
|
|
@ -1,34 +0,0 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a href="#">Dashboard</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="menu">
|
|
||||||
<a ng-href="/new" class="nav-item add float-right"></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<a class="row build-row" ng-repeat="repo in repos | orderBy:'full_name'" ng-href="/{{ repo.full_name }}">
|
|
||||||
<div>
|
|
||||||
<div class="icon icon-repo"></div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3>{{ repo.owner }} / {{ repo.name }}</h3>
|
|
||||||
<p>{{ repo.clone_url }}</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
</article>
|
|
|
@ -1,18 +1,3 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a href="/" class="icon icon-home"></a>
|
|
||||||
<a href="#">Add Repository</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
<section style="background:transparent !important;">
|
<section style="background:transparent !important;">
|
||||||
<p style="color:#9E9E9E;font-size:15px;line-height:22px;">Register your repository with Drone to enable automated testing. Note that Drone
|
<p style="color:#9E9E9E;font-size:15px;line-height:22px;">Register your repository with Drone to enable automated testing. Note that Drone
|
|
@ -0,0 +1,6 @@
|
||||||
|
<div class="breadcrumb" style="position:relative;top:0px;">
|
||||||
|
<a href="/" class="icon icon-home">
|
||||||
|
<i class="material-icons md-18">home</i>
|
||||||
|
</a>
|
||||||
|
<a href="#">Add Repository</a>
|
||||||
|
</div>
|
17
cmd/drone-server/static/scripts/views/repos/del.html
Normal file
17
cmd/drone-server/static/scripts/views/repos/del.html
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<article>
|
||||||
|
|
||||||
|
|
||||||
|
<section style="padding:30px; background-color:#EF5350;">
|
||||||
|
<button ng-click="delete(repo.full_name)" style="color:rgba(255,255,255,0.9);
|
||||||
|
text-transform: uppercase;
|
||||||
|
text-decoration: none;
|
||||||
|
border: 1px solid rgba(255,255,255,0.9);
|
||||||
|
padding: 10px;
|
||||||
|
background:transparent;
|
||||||
|
display:inline-block;
|
||||||
|
cursor:pointer;
|
||||||
|
margin-right: 10px;">Delete</button>
|
||||||
|
<span style="color:rgba(255,255,255,0.9);font-size:16px;">Warning: this action cannot be undone.</span>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
75
cmd/drone-server/static/scripts/views/repos/edit.html
Normal file
75
cmd/drone-server/static/scripts/views/repos/edit.html
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
<article>
|
||||||
|
<section>
|
||||||
|
<h2>Settings</h2>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div>Post Commit Hooks</div>
|
||||||
|
<div>
|
||||||
|
<input id="post_commits" type="checkbox" hidden="hidden" ng-model="repo.hooks.push" ng-change="save(repo)"/>
|
||||||
|
<label for="post_commits" class="switch"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div>Pull Request Hooks</div>
|
||||||
|
<div>
|
||||||
|
<input id="pull_requests" type="checkbox" hidden="hidden" ng-model="repo.hooks.pull_request"
|
||||||
|
ng-change="save(repo)"/>
|
||||||
|
<label for="pull_requests" class="switch"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a class="row" ng-href="{{ repo.full_name }}/edit/env">
|
||||||
|
<div>Private Variables</div>
|
||||||
|
<div>
|
||||||
|
Inject private variables into your build environment
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
<a class="row" ng-href="{{ repo.full_name }}/delete">
|
||||||
|
<div>Delete</div>
|
||||||
|
<div>Delete this repository and its build history</div>
|
||||||
|
</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section ng-if="user.admin">
|
||||||
|
<h2>Admin settings</h2>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div>Trusted (Evelvate Privilege)</div>
|
||||||
|
<div>
|
||||||
|
<input id="trusted" type="checkbox" hidden="hidden" ng-model="repo.trusted" ng-change="save(repo)"/>
|
||||||
|
<label for="trusted" class="switch"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div>Timeout in minutes</div>
|
||||||
|
<div>
|
||||||
|
<input type="range" ng-model="repo.timeout" min="0" max="900" ng-blur="save(repo)"/>
|
||||||
|
<span class="slider-label">{{ repo.timeout }} minutes</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Badges</h2>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div>Markdown</div>
|
||||||
|
<div>
|
||||||
|
<pre class="snippet">[![Build Status]({{ window.location.origin }}/api/badges/{{ repo.full_name }}/status.svg)]({{ window.location.origin }}/{{ repo.full_name }})</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div>CCMenu</div>
|
||||||
|
<div>
|
||||||
|
<pre class="snippet">{{ window.location.origin }}/api/badges/{{ repo.full_name }}/cc.xml</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Public Key</h2>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<pre class="snippet snippet-padding">{{ repo.keypair.public }}</pre>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</article>
|
|
@ -1,25 +1,3 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a href="/{{ repo.full_name }}/edit" class="icon icon-home"></a>
|
|
||||||
<a ng-href="/{{ repo.full_name }}">{{ repo.owner }} / {{ repo.name }}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="menu">
|
|
||||||
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right"></a>
|
|
||||||
<button ng-click="watch(repo)" ng-if="!repo.starred" class="nav-item star float-right"></button>
|
|
||||||
<button ng-click="unwatch(repo)" ng-if="repo.starred" class="nav-item unstar float-right"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<article>
|
<article>
|
||||||
<section style="padding:30px;">
|
<section style="padding:30px;">
|
||||||
<h2 style=" padding-left: 0px;
|
<h2 style=" padding-left: 0px;
|
|
@ -0,0 +1,14 @@
|
||||||
|
<article>
|
||||||
|
<section>
|
||||||
|
<a class="row build-row" ng-repeat="repo in repos | orderBy:'full_name'" ng-href="/{{ repo.full_name }}">
|
||||||
|
<div>
|
||||||
|
<div class="icon icon-repo"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>{{ repo.owner }} / {{ repo.name }}</h3>
|
||||||
|
<p>{{ repo.clone_url }}</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</article>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<div class="breadcrumb" style="position:relative;top:0px;">
|
||||||
|
<a href="#">Dashboard</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="menu">
|
||||||
|
<a ng-href="/new" class="nav-item add float-right">
|
||||||
|
<i class="material-icons">add</i>
|
||||||
|
</a>
|
||||||
|
</div>
|
18
cmd/drone-server/static/scripts/views/repos/toolbar.html
Normal file
18
cmd/drone-server/static/scripts/views/repos/toolbar.html
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<div class="breadcrumb">
|
||||||
|
<a href="/{{ repo.full_name }}/edit" class="icon icon-home">
|
||||||
|
<i class="material-icons md-18">home</i>
|
||||||
|
</a>
|
||||||
|
<a ng-href="/{{ repo.full_name }}">{{ repo.owner }} / {{ repo.name }}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="menu">
|
||||||
|
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right" ng-if="repo.permissions.pull">
|
||||||
|
<i class="material-icons md-18">edit</i>
|
||||||
|
</a>
|
||||||
|
<button ng-click="watch(repo)" ng-if="!repo.starred && user" class="nav-item star float-right">
|
||||||
|
<i class="material-icons md-18">star_border</i>
|
||||||
|
</button>
|
||||||
|
<button ng-click="unwatch(repo)" ng-if="repo.starred && user" class="nav-item unstar float-right">
|
||||||
|
<i class="material-icons md-18">star</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
|
@ -1,42 +0,0 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a href="/{{ repo.full_name }}/edit" class="icon icon-home"></a>
|
|
||||||
<a ng-href="/{{ repo.full_name }}">{{ repo.owner }} / {{ repo.name }}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="menu">
|
|
||||||
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right"></a>
|
|
||||||
<button ng-click="watch(repo)" ng-if="!repo.starred" class="nav-item star float-right"></button>
|
|
||||||
<button ng-click="unwatch(repo)" ng-if="repo.starred" class="nav-item unstar float-right"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<article>
|
|
||||||
|
|
||||||
|
|
||||||
<section style="padding:30px; background-color:#EF5350;">
|
|
||||||
<button ng-click="delete(repo.full_name)" style="color:rgba(255,255,255,0.9);
|
|
||||||
text-transform: uppercase;
|
|
||||||
text-decoration: none;
|
|
||||||
border: 1px solid rgba(255,255,255,0.9);
|
|
||||||
padding: 10px;
|
|
||||||
background:transparent;
|
|
||||||
display:inline-block;
|
|
||||||
cursor:pointer;
|
|
||||||
margin-right: 10px;">Delete</button>
|
|
||||||
<span style="color:rgba(255,255,255,0.9);font-size:16px;">Warning: this action cannot be undone.</span>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
|
@ -1,95 +0,0 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a href="/{{ repo.full_name }}" class="icon icon-home"></a>
|
|
||||||
<a ng-href="/{{ repo.full_name }}">{{ repo.owner }} / {{ repo.name }}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="menu">
|
|
||||||
<a href="settings.html" class="icon icon-settings"></a>
|
|
||||||
<a ng-href="/{{ repo.full_name }}/edit" class="nav-item settings float-right"></a>
|
|
||||||
<button ng-click="watch(repo)" ng-if="!repo.starred" class="nav-item star float-right"></button>
|
|
||||||
<button ng-click="unwatch(repo)" ng-if="repo.starred" class="nav-item unstar float-right"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<section>
|
|
||||||
<h2>Settings</h2>
|
|
||||||
<div class="row">
|
|
||||||
<div>Post Commit Hooks</div>
|
|
||||||
<div>
|
|
||||||
<input id="post_commits" type="checkbox" hidden="hidden" ng-model="repo.hooks.push" ng-change="save(repo)" />
|
|
||||||
<label for="post_commits" class="switch"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div>Pull Request Hooks</div>
|
|
||||||
<div>
|
|
||||||
<input id="pull_requests" type="checkbox" hidden="hidden" ng-model="repo.hooks.pull_request" ng-change="save(repo)" />
|
|
||||||
<label for="pull_requests" class="switch"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<a class="row" ng-href="{{ repo.full_name }}/edit/env">
|
|
||||||
<div>Private Variables</div>
|
|
||||||
<div>
|
|
||||||
Inject private variables into your build environment
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
<a class="row" ng-href="{{ repo.full_name }}/delete">
|
|
||||||
<div>Delete</div>
|
|
||||||
<div>Delete this repository and its build history</div>
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section ng-if="user.admin">
|
|
||||||
<h2>Admin settings</h2>
|
|
||||||
<div class="row">
|
|
||||||
<div>Trusted (Evelvate Privilege)</div>
|
|
||||||
<div>
|
|
||||||
<input id="trusted" type="checkbox" hidden="hidden" ng-model="repo.trusted" ng-change="save(repo)" />
|
|
||||||
<label for="trusted" class="switch"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div>Timeout in minutes</div>
|
|
||||||
<div>
|
|
||||||
<input type="range" ng-model="repo.timeout" min="0" max="900" ng-blur="save(repo)" />
|
|
||||||
<span class="slider-label">{{ repo.timeout }} minutes</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<h2>Badges</h2>
|
|
||||||
<div class="row">
|
|
||||||
<div>Markdown</div>
|
|
||||||
<div>
|
|
||||||
<pre class="snippet">[![Build Status]({{ window.location.origin }}/api/badges/{{ repo.full_name }}/status.svg)]({{ window.location.origin }}/{{ repo.full_name }})</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div>CCMenu</div>
|
|
||||||
<div>
|
|
||||||
<pre class="snippet">{{ window.location.origin }}/api/badges/{{ repo.full_name }}/cc.xml</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<h2>Public Key</h2>
|
|
||||||
<div>
|
|
||||||
<pre class="snippet snippet-padding">{{ repo.keypair.public }}</pre>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</article>
|
|
|
@ -1,41 +0,0 @@
|
||||||
<header>
|
|
||||||
<a class="logo float-left" href="/"></a>
|
|
||||||
<a class="menu-item settings float-right" href="/profile"></a>
|
|
||||||
<a class="menu-item users float-right" href="/users" ng-if="user.admin"></a>
|
|
||||||
<a class="menu-item help float-right" href="http://readme.drone.io" target="_blank"></a>
|
|
||||||
<a class="menu-item user-name float-right" href="/profile">{{ "+"+user.login }}</a>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="toolbar">
|
|
||||||
<div class="breadcrumb" style="position:relative;top:0px;">
|
|
||||||
<a href="/" class="icon icon-home"></a>
|
|
||||||
<a href="#">Users</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<form style="padding:30px">
|
|
||||||
<input type="text" ng-model="login" placeholder="i.e. octocat" style="font-size:14px;padding:10px 20px;width:400px;border: 1px solid #d9d9d9;outline:none;"/>
|
|
||||||
<button ng-click="add(login)" style="display: inline-block;background:#EEE;font-size:14px; padding:0px 20px;text-transform:uppercase;cursor:pointer;color:#616161;height:39px;line-height:41px;margin-left:10px;">Add User</button>
|
|
||||||
|
|
||||||
</form>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<div class="row row-user" ng-repeat="user in users">
|
|
||||||
<div>
|
|
||||||
<img ng-src="{{ user.gravatar_id | gravatar }}" />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3>{{ user.login }} <small ng-if="user.admin">Admin</small></h3>
|
|
||||||
<p>{{ user.email }}</p>
|
|
||||||
<button ng-click="toggle(user)" ng-class="{'btn-admin':true, 'btn-checked': user.admin}"></button>
|
|
||||||
<button ng-click="remove(user)" class="btn-remove"></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
36
cmd/drone-server/static/scripts/views/users/content.html
Normal file
36
cmd/drone-server/static/scripts/views/users/content.html
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
<article>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<form style="padding:30px">
|
||||||
|
<input type="text" ng-model="login" placeholder="i.e. octocat"
|
||||||
|
style="font-size:14px;padding:10px 20px;width:400px;border: 1px solid #d9d9d9;outline:none;"/>
|
||||||
|
<button ng-click="add(login)"
|
||||||
|
style="display: inline-block;background:#EEE;font-size:14px; padding:0px 20px;text-transform:uppercase;cursor:pointer;color:#616161;height:39px;line-height:41px;margin-left:10px;">
|
||||||
|
Add User
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<div class="row row-user" ng-repeat="user in users">
|
||||||
|
<div>
|
||||||
|
<img ng-src="{{ user.gravatar_id | gravatar }}"/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>{{ user.login }}
|
||||||
|
<small ng-if="user.admin">Admin</small>
|
||||||
|
</h3>
|
||||||
|
<p>{{ user.email }}</p>
|
||||||
|
<button ng-click="toggle(user)" ng-class="{'btn-admin':true, 'btn-checked': user.admin}">
|
||||||
|
<i class="material-icons md-18">account_circle</i>
|
||||||
|
</button>
|
||||||
|
<button ng-click="remove(user)" class="btn-remove">
|
||||||
|
<i class="material-icons md-18">delete</i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</article>
|
6
cmd/drone-server/static/scripts/views/users/toolbar.html
Normal file
6
cmd/drone-server/static/scripts/views/users/toolbar.html
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<div class="breadcrumb" style="position:relative;top:0px;">
|
||||||
|
<a href="/" class="icon icon-home">
|
||||||
|
<i class="material-icons md-18">home</i>
|
||||||
|
</a>
|
||||||
|
<a href="#">Users</a>
|
||||||
|
</div>
|
|
@ -3,11 +3,34 @@
|
||||||
|
|
||||||
/* RESETS */
|
/* RESETS */
|
||||||
|
|
||||||
html, body { margin: 0; padding: 0; }
|
html, body {
|
||||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; font-weight: normal; font-style: normal; font-size: 100%; line-height: 1; font-family: inherit; }
|
margin: 0;
|
||||||
table { border-collapse: collapse; border-spacing: 0; }
|
padding: 0;
|
||||||
ol, ul { list-style: none; }
|
}
|
||||||
q:before, q:after, blockquote:before, blockquote:after { content: ""; }
|
|
||||||
|
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 100%;
|
||||||
|
line-height: 1;
|
||||||
|
font-family: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol, ul {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
q:before, q:after, blockquote:before, blockquote:after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
-webkit-box-sizing: border-box;
|
-webkit-box-sizing: border-box;
|
||||||
|
@ -15,7 +38,6 @@
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* TRANSITIONS & ANIMATIONS */
|
/* TRANSITIONS & ANIMATIONS */
|
||||||
|
|
||||||
.transition-fade {
|
.transition-fade {
|
||||||
|
@ -34,7 +56,6 @@
|
||||||
transition: all 0s ease-in;
|
transition: all 0s ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* FLEXBOX */
|
/* FLEXBOX */
|
||||||
|
|
||||||
.flex-parent {
|
.flex-parent {
|
||||||
|
@ -63,7 +84,6 @@
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* TABLE MAGIC */
|
/* TABLE MAGIC */
|
||||||
|
|
||||||
table {
|
table {
|
||||||
|
@ -135,16 +155,6 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status:before {
|
|
||||||
cursor: pointer;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
color: #fff;
|
|
||||||
font-size: 14px;
|
|
||||||
font-family: "Material-Design-Iconic-Font";
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.status.success:before {
|
.status.success:before {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
content: '\f084';
|
content: '\f084';
|
||||||
|
@ -160,7 +170,6 @@
|
||||||
opacity: 0.85;
|
opacity: 0.85;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* CARD STUFF */
|
/* CARD STUFF */
|
||||||
|
|
||||||
ul.cardset {
|
ul.cardset {
|
||||||
|
@ -262,7 +271,6 @@
|
||||||
color: #26A65B
|
color: #26A65B
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.card.killed .time-ran,
|
.card.killed .time-ran,
|
||||||
.card.error .time-ran,
|
.card.error .time-ran,
|
||||||
.card.failure .time-ran {
|
.card.failure .time-ran {
|
||||||
|
@ -335,7 +343,6 @@
|
||||||
color: #8a8a8a;
|
color: #8a8a8a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* LIST */
|
/* LIST */
|
||||||
|
|
||||||
.cardset.list {
|
.cardset.list {
|
||||||
|
@ -501,7 +508,6 @@
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.dummy .card {
|
.dummy .card {
|
||||||
background-color: rgba(255, 255, 255, 0.05);
|
background-color: rgba(255, 255, 255, 0.05);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
|
@ -689,8 +695,6 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.show section:first-of-type {
|
.show section:first-of-type {
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
|
@ -724,6 +728,7 @@
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
header {
|
header {
|
||||||
height: 64px;
|
height: 64px;
|
||||||
|
@ -773,14 +778,11 @@
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.nav-item:hover {
|
.nav-item:hover {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-item:after,
|
.nav-item i {
|
||||||
.nav-item:before {
|
|
||||||
font-family: "Material-Design-Iconic-Font";
|
|
||||||
color: rgba(255, 255, 255, 0.749);
|
color: rgba(255, 255, 255, 0.749);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -791,12 +793,6 @@
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-item.settings:before {
|
|
||||||
font-size: 22px;
|
|
||||||
content: '\f060';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.nav-item.unstar,
|
.nav-item.unstar,
|
||||||
.nav-item.star {
|
.nav-item.star {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -804,21 +800,6 @@
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-item.star:after {
|
|
||||||
font-size: 24px;
|
|
||||||
content: "\f2e7";
|
|
||||||
}
|
|
||||||
.nav-item.unstar:after {
|
|
||||||
font-size: 24px;
|
|
||||||
content: "\f2e5";
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-item.add:after {
|
|
||||||
font-size: 24px;
|
|
||||||
content: "\f0fd";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
input.nav-item {
|
input.nav-item {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 59px;
|
height: 59px;
|
||||||
|
@ -938,6 +919,22 @@
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.material-icons.md-18 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.material-icons.md-24 {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.material-icons.md-36 {
|
||||||
|
font-size: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.material-icons.md-48 {
|
||||||
|
font-size: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
.menu-item {
|
.menu-item {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
height: auto;
|
height: auto;
|
||||||
|
@ -948,8 +945,7 @@
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item:before {
|
.menu-item i {
|
||||||
font-family: "Material-Design-Iconic-Font";
|
|
||||||
color: #2f2f2f;
|
color: #2f2f2f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -967,26 +963,6 @@
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item.settings:before {
|
|
||||||
font-size: 20px;
|
|
||||||
content: "\f060";
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-item.users:before {
|
|
||||||
font-size: 20px;
|
|
||||||
content: "\f006";
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-item.help:before {
|
|
||||||
font-size: 20px;
|
|
||||||
content: '\f033';
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-item.plugins:before {
|
|
||||||
font-size: 23px;
|
|
||||||
content: '\f292';
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-item.user-name {
|
.menu-item.user-name {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -998,9 +974,6 @@
|
||||||
padding: 20px 0 18px 0;
|
padding: 20px 0 18px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.subnav {
|
.subnav {
|
||||||
background: rgba(255, 255, 255, 0.8);
|
background: rgba(255, 255, 255, 0.8);
|
||||||
padding: 0px 25px;
|
padding: 0px 25px;
|
||||||
|
@ -1028,6 +1001,7 @@
|
||||||
top: 0px;
|
top: 0px;
|
||||||
right: 25px;
|
right: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
.breadcrumb {
|
.breadcrumb {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -1160,9 +1134,6 @@
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* INFO PANE */
|
/* INFO PANE */
|
||||||
|
|
||||||
.banner {
|
.banner {
|
||||||
|
@ -1201,12 +1172,15 @@
|
||||||
body {
|
body {
|
||||||
background: #f5f5f5;
|
background: #f5f5f5;
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
header {
|
||||||
background: #FFF;
|
background: #FFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
header[show-nav] {
|
header[show-nav] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
section.central-container {
|
section.central-container {
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
}
|
}
|
||||||
|
@ -1237,16 +1211,17 @@ header .logo {
|
||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0px;
|
top: 0px;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
|
||||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
|
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toolbar .breadcrumb {
|
.toolbar .breadcrumb {
|
||||||
max-width: 900px;
|
max-width: 900px;
|
||||||
margin: 0px auto;
|
margin: 0px auto;
|
||||||
line-height: 56px;
|
line-height: 56px;
|
||||||
height: 56px;
|
height: 56px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.breadcrumb a {
|
.breadcrumb a {
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
|
@ -1255,28 +1230,21 @@ header .logo {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.breadcrumb span {
|
.breadcrumb span {
|
||||||
color: rgba(255, 255, 255, 0.749);
|
color: rgba(255, 255, 255, 0.749);
|
||||||
line-height: 56px;
|
line-height: 56px;
|
||||||
height: 56px;
|
height: 56px;
|
||||||
}
|
}
|
||||||
.breadcrumb span:before {
|
|
||||||
font-family: "Material-Design-Iconic-Font";
|
|
||||||
color: rgba(255,255,255,0.749);
|
|
||||||
line-height:56px;
|
|
||||||
content: "\f29c";
|
|
||||||
}
|
|
||||||
|
|
||||||
.breadcrumb a.icon-home {
|
.breadcrumb a.icon-home {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: -50px;
|
left: -50px;
|
||||||
}
|
}
|
||||||
.breadcrumb a.icon-home:after {
|
|
||||||
font-family: "Material-Design-Iconic-Font";
|
.breadcrumb a.icon-home i {
|
||||||
line-height:56px;
|
line-height:56px;
|
||||||
color: rgba(255, 255, 255, 0.749);
|
color: rgba(255, 255, 255, 0.749);
|
||||||
content: "\f297";
|
|
||||||
font-size:24px;
|
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1286,7 +1254,6 @@ header .logo {
|
||||||
top: 0px;
|
top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pre.success {
|
pre.success {
|
||||||
border-left: 10px solid #81C784;
|
border-left: 10px solid #81C784;
|
||||||
background: #424242;
|
background: #424242;
|
||||||
|
@ -1299,7 +1266,6 @@ pre.failure {
|
||||||
background: #424242;
|
background: #424242;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
article > pre {
|
article > pre {
|
||||||
font-family: "Droid Sans Mono", "Roboto", "Arial";
|
font-family: "Droid Sans Mono", "Roboto", "Arial";
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
@ -1313,7 +1279,6 @@ article > pre {
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
article {
|
article {
|
||||||
padding: 0px 20px;
|
padding: 0px 20px;
|
||||||
max-width: 900px;
|
max-width: 900px;
|
||||||
|
@ -1355,16 +1320,6 @@ section a.row:hover {
|
||||||
background: #FAFAFA;
|
background: #FAFAFA;
|
||||||
}
|
}
|
||||||
|
|
||||||
section a.row:after {
|
|
||||||
content: "\f29c";
|
|
||||||
font-family: Material-Design-Iconic-Font;
|
|
||||||
line-height: 74px;
|
|
||||||
font-size: 26px;
|
|
||||||
color: rgb(204, 204, 204);
|
|
||||||
position: absolute;
|
|
||||||
right: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
section .row > div:first-child {
|
section .row > div:first-child {
|
||||||
padding: 30px 0px;
|
padding: 30px 0px;
|
||||||
border-bottom: 1px solid #EEE;
|
border-bottom: 1px solid #EEE;
|
||||||
|
@ -1412,6 +1367,7 @@ section .build-row .build-num.success:after {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
content: '\f084';
|
content: '\f084';
|
||||||
}
|
}
|
||||||
|
|
||||||
section .build-row .build-num.killed:after,
|
section .build-row .build-num.killed:after,
|
||||||
section .build-row .build-num.error:after,
|
section .build-row .build-num.error:after,
|
||||||
section .build-row .build-num.failure:after {
|
section .build-row .build-num.failure:after {
|
||||||
|
@ -1426,10 +1382,10 @@ section .build-row .build-num.failure:after {
|
||||||
content: "\f082";
|
content: "\f082";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
section .build-row > div:last-child {
|
section .build-row > div:last-child {
|
||||||
padding-left: 0px;
|
padding-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
section a.build-row:after {
|
section a.build-row:after {
|
||||||
content: "";
|
content: "";
|
||||||
-line-height: 115px;
|
-line-height: 115px;
|
||||||
|
@ -1443,6 +1399,7 @@ section a.build-row:after {
|
||||||
.success {
|
.success {
|
||||||
background: #66BB6A;
|
background: #66BB6A;
|
||||||
}
|
}
|
||||||
|
|
||||||
.error,
|
.error,
|
||||||
.killed,
|
.killed,
|
||||||
.failure {
|
.failure {
|
||||||
|
@ -1472,6 +1429,7 @@ section .icon {
|
||||||
height: 36px;
|
height: 36px;
|
||||||
line-height: 36px;
|
line-height: 36px;
|
||||||
}
|
}
|
||||||
|
|
||||||
section .icon-repo:after {
|
section .icon-repo:after {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
content: '\f001';
|
content: '\f001';
|
||||||
|
@ -1501,6 +1459,7 @@ section .build-row.sub-build-row > div {
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
section .build-row.sub-build-row h3 {
|
section .build-row.sub-build-row h3 {
|
||||||
color: #212121;
|
color: #212121;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
@ -1512,6 +1471,7 @@ section .build-row.sub-build-row h3 {
|
||||||
section .build-row.sub-build-row h3 > div {
|
section .build-row.sub-build-row h3 > div {
|
||||||
margin-bottom: 7px;
|
margin-bottom: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
section .build-row.sub-build-row h3 > div:last-child {
|
section .build-row.sub-build-row h3 > div:last-child {
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
@ -1535,6 +1495,7 @@ section > .search a {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
section > .search a:hover {
|
section > .search a:hover {
|
||||||
background: #00ACC1;
|
background: #00ACC1;
|
||||||
}
|
}
|
||||||
|
@ -1548,7 +1509,6 @@ pre.snippet {
|
||||||
font-family: "Droid Sans Mono", "Roboto", "Arial";
|
font-family: "Droid Sans Mono", "Roboto", "Arial";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pre.snippet-padding {
|
pre.snippet-padding {
|
||||||
padding: 30px;
|
padding: 30px;
|
||||||
}
|
}
|
||||||
|
@ -1584,20 +1544,20 @@ textarea:focus, input:focus{
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 990px) {
|
@media (max-width: 990px) {
|
||||||
|
.breadcrumb {
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
.breadcrumb a.icon-home {
|
.breadcrumb a.icon-home {
|
||||||
position: static;
|
position: static;
|
||||||
padding-right: 20px;
|
padding-right: 20px;
|
||||||
padding-left:20px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
article {
|
article {
|
||||||
padding-top: 0px;
|
padding-top: 0px;
|
||||||
margin-top: -5px;
|
margin-top: -5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
http://codepen.io/batazor/pen/KwKryj
|
http://codepen.io/batazor/pen/KwKryj
|
||||||
*/
|
*/
|
||||||
|
@ -1614,6 +1574,7 @@ http://codepen.io/batazor/pen/KwKryj
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.switch::before {
|
.switch::before {
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -1626,18 +1587,30 @@ http://codepen.io/batazor/pen/KwKryj
|
||||||
-webkit-transition: left 0.28s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
|
-webkit-transition: left 0.28s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
transition: left 0.28s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
|
transition: left 0.28s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.switch:active::before {
|
.switch:active::before {
|
||||||
box-shadow: 0 2px 10.416666666666668px rgba(0, 0, 0, 0.28), 0 0 0 25px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 2px 10.416666666666668px rgba(0, 0, 0, 0.28), 0 0 0 25px rgba(0, 0, 0, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 10px 20px;
|
||||||
|
width: 400px;
|
||||||
|
border: 1px solid #d9d9d9;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
input:checked + .switch {
|
input:checked + .switch {
|
||||||
background: rgba(0, 150, 136, 0.5);
|
background: rgba(0, 150, 136, 0.5);
|
||||||
background: rgba(102, 187, 106, 0.5);
|
background: rgba(102, 187, 106, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
input:checked + .switch::before {
|
input:checked + .switch::before {
|
||||||
left: 26.562499999999996px;
|
left: 26.562499999999996px;
|
||||||
background: #009688;
|
background: #009688;
|
||||||
background: #66bb6a;
|
background: #66bb6a;
|
||||||
}
|
}
|
||||||
|
|
||||||
input:checked + .switch:active::before {
|
input:checked + .switch:active::before {
|
||||||
box-shadow: 0 2px 10.416666666666668px rgba(0, 0, 0, 0.28), 0 0 0 25px rgba(0, 150, 136, 0.2);
|
box-shadow: 0 2px 10.416666666666668px rgba(0, 0, 0, 0.28), 0 0 0 25px rgba(0, 150, 136, 0.2);
|
||||||
}
|
}
|
||||||
|
@ -1651,6 +1624,7 @@ input:checked + .switch:active::before {
|
||||||
.row.row-user div:last-child {
|
.row.row-user div:last-child {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-user img {
|
.row-user img {
|
||||||
background: #E0E0E0;
|
background: #E0E0E0;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
|
@ -1658,6 +1632,7 @@ input:checked + .switch:active::before {
|
||||||
height: 36px;
|
height: 36px;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-user h3 {
|
.row-user h3 {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
color: #212121;
|
color: #212121;
|
||||||
|
@ -1665,6 +1640,7 @@ input:checked + .switch:active::before {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-user small {
|
.row-user small {
|
||||||
background: #4CAF50;
|
background: #4CAF50;
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
|
@ -1685,10 +1661,12 @@ input:checked + .switch:active::before {
|
||||||
font-family: 'Droid Sans Mono', 'Roboto', 'Arial';
|
font-family: 'Droid Sans Mono', 'Roboto', 'Arial';
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-env span {
|
.row-env span {
|
||||||
color: #2196F3;
|
color: #2196F3;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-env div {
|
.row-env div {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
@ -1707,49 +1685,29 @@ input:checked + .switch:active::before {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.btn-remove:hover {
|
.btn-remove:hover {
|
||||||
background: #EF5350;
|
background: #EF5350;
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
}
|
}
|
||||||
.btn-remove:before {
|
|
||||||
content: "\f102";
|
|
||||||
font-family:"Material-Design-Iconic-Font";
|
|
||||||
/*line-height:25px;
|
|
||||||
width:25px;*/
|
|
||||||
vertical-align: middle;
|
|
||||||
text-align: center;
|
|
||||||
display:inline-block;
|
|
||||||
font-size:16px;
|
|
||||||
}
|
|
||||||
.btn-admin.btn-checked,
|
.btn-admin.btn-checked,
|
||||||
.btn-admin:hover {
|
.btn-admin:hover {
|
||||||
background: #4CAF50;
|
background: #4CAF50;
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
}
|
}
|
||||||
.btn-admin:before {
|
|
||||||
content: "\f08e";
|
|
||||||
font-family:"Material-Design-Iconic-Font";
|
|
||||||
/*line-height:25px;
|
|
||||||
width:25px;*/
|
|
||||||
vertical-align: middle;
|
|
||||||
text-align: center;
|
|
||||||
display:inline-block;
|
|
||||||
font-size:16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.row-env .btn-remove {
|
.row-env .btn-remove {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
top: 12px;
|
top: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-user .btn-remove {
|
.row-user .btn-remove {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
top: 40px;
|
top: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-user .btn-admin {
|
.row-user .btn-admin {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 40px;
|
right: 40px;
|
||||||
|
@ -1760,19 +1718,21 @@ input:checked + .switch:active::before {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="range"]:focus ~ .slider-label {
|
input[type="range"]:focus ~ .slider-label {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
input[type=range] {
|
input[type=range] {
|
||||||
-webkit-appearance: none;
|
-webkit-appearance: none;
|
||||||
margin: 6px 0;
|
margin: 6px 0;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]:focus {
|
input[type=range]:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]::-webkit-slider-runnable-track {
|
input[type=range]::-webkit-slider-runnable-track {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
|
@ -1784,6 +1744,7 @@ input[type=range]::-webkit-slider-runnable-track {
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]::-webkit-slider-thumb {
|
input[type=range]::-webkit-slider-thumb {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
border: none;
|
border: none;
|
||||||
|
@ -1796,10 +1757,12 @@ input[type=range]::-webkit-slider-thumb {
|
||||||
-webkit-appearance: none;
|
-webkit-appearance: none;
|
||||||
margin-top: -10px;
|
margin-top: -10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]:focus::-webkit-slider-runnable-track {
|
input[type=range]:focus::-webkit-slider-runnable-track {
|
||||||
background: rgba(0, 150, 136, 0.5);
|
background: rgba(0, 150, 136, 0.5);
|
||||||
background: rgba(102, 187, 106, 0.5);
|
background: rgba(102, 187, 106, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]::-moz-range-track {
|
input[type=range]::-moz-range-track {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
|
@ -1811,6 +1774,7 @@ input[type=range]::-moz-range-track {
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]::-moz-range-thumb {
|
input[type=range]::-moz-range-thumb {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
border: none;
|
border: none;
|
||||||
|
@ -1821,6 +1785,7 @@ input[type=range]::-moz-range-thumb {
|
||||||
background: #66bb6a;
|
background: #66bb6a;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]::-ms-track {
|
input[type=range]::-ms-track {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 8.4px;
|
height: 8.4px;
|
||||||
|
@ -1831,18 +1796,21 @@ input[type=range]::-ms-track {
|
||||||
border-width: 16px 0;
|
border-width: 16px 0;
|
||||||
color: transparent;
|
color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]::-ms-fill-lower {
|
input[type=range]::-ms-fill-lower {
|
||||||
background: #2a6495;
|
background: #2a6495;
|
||||||
border: 0.2px solid #010101;
|
border: 0.2px solid #010101;
|
||||||
border-radius: 2.6px;
|
border-radius: 2.6px;
|
||||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]::-ms-fill-upper {
|
input[type=range]::-ms-fill-upper {
|
||||||
background: #3071a9;
|
background: #3071a9;
|
||||||
border: 0.2px solid #010101;
|
border: 0.2px solid #010101;
|
||||||
border-radius: 2.6px;
|
border-radius: 2.6px;
|
||||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]::-ms-thumb {
|
input[type=range]::-ms-thumb {
|
||||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
||||||
border: 1px solid #000000;
|
border: 1px solid #000000;
|
||||||
|
@ -1852,17 +1820,15 @@ input[type=range]::-ms-thumb {
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]:focus::-ms-fill-lower {
|
input[type=range]:focus::-ms-fill-lower {
|
||||||
background: #3071a9;
|
background: #3071a9;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=range]:focus::-ms-fill-upper {
|
input[type=range]:focus::-ms-fill-upper {
|
||||||
background: #367ebd;
|
background: #367ebd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
header {
|
header {
|
||||||
background:transparent;
|
background:transparent;
|
||||||
|
|
Loading…
Reference in a new issue