mirror of
https://github.com/arnaucube/openworktime.git
synced 2026-02-06 19:26:41 +01:00
signup and login system added, making the webapp online
This commit is contained in:
@@ -3,7 +3,7 @@ module.exports = {
|
|||||||
/*'secret': process.env.SECRET,
|
/*'secret': process.env.SECRET,
|
||||||
'database': process.env.MONGO_DSN,*/
|
'database': process.env.MONGO_DSN,*/
|
||||||
'secret': 'secretfortoken',
|
'secret': 'secretfortoken',
|
||||||
'database': 'mongodb://localhost/comunalcar',
|
'database': 'mongodb://localhost/openworktime',
|
||||||
"port" : process.env.PORT || 3000
|
"port" : process.env.PORT || 3000
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -71,10 +71,10 @@ exports.addUser = function(req, res) {
|
|||||||
username: req.body.username,
|
username: req.body.username,
|
||||||
password: req.body.password,
|
password: req.body.password,
|
||||||
description: req.body.description,
|
description: req.body.description,
|
||||||
avatar: req.body.avatar,
|
|
||||||
mail: req.body.mail,
|
mail: req.body.mail,
|
||||||
phone: req.body.phone,
|
avatar: req.body.avatar,
|
||||||
telegram: req.body.telegram
|
github: req.body.github,
|
||||||
|
web: req.body.web
|
||||||
});
|
});
|
||||||
|
|
||||||
user.save(function(err, user) {
|
user.save(function(err, user) {
|
||||||
@@ -138,13 +138,13 @@ exports.login = function(req, res) {
|
|||||||
//expiresInMinutes: 1440 // expires in 24 hours
|
//expiresInMinutes: 1440 // expires in 24 hours
|
||||||
expiresIn: '60m'
|
expiresIn: '60m'
|
||||||
});
|
});
|
||||||
console.log(user);
|
//console.log(user);
|
||||||
// return the information including token as JSON
|
// return the information including token as JSON
|
||||||
res.json({
|
res.json({
|
||||||
success: true,
|
success: true,
|
||||||
message: 'Enjoy your token!',
|
message: 'Enjoy your token!',
|
||||||
token: token,
|
token: token,
|
||||||
avatar: user.avatar
|
user: user
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ var userSchema = new Schema({
|
|||||||
username: { type: String },
|
username: { type: String },
|
||||||
password: { type: String },
|
password: { type: String },
|
||||||
description: { type: String },
|
description: { type: String },
|
||||||
avatar: { type: String },
|
|
||||||
mail: { type: String },
|
mail: { type: String },
|
||||||
phone: { type: String },
|
avatar: { type: String },
|
||||||
telegram: { type: String }
|
github: { type: String },
|
||||||
|
web: { type: String },
|
||||||
|
projects: { type: String }
|
||||||
})
|
})
|
||||||
module.exports = mongoose.model('userModel', userSchema);
|
module.exports = mongoose.model('userModel', userSchema);
|
||||||
|
|||||||
45
server.js
45
server.js
@@ -29,8 +29,8 @@ app.use(morgan('dev'));
|
|||||||
var userMdl = require('./models/userModel')(app, mongoose);
|
var userMdl = require('./models/userModel')(app, mongoose);
|
||||||
var userCtrl = require('./controllers/userController');
|
var userCtrl = require('./controllers/userController');
|
||||||
|
|
||||||
var travelMdl = require('./models/travelModel')(app, mongoose);
|
/*var projectMdl = require('./models/projectModel')(app, mongoose);
|
||||||
var travelCtrl = require('./controllers/travelController');
|
var projectCtrl = require('./controllers/projectController');*/
|
||||||
|
|
||||||
/*// Example Route
|
/*// Example Route
|
||||||
var router = express.Router();
|
var router = express.Router();
|
||||||
@@ -53,24 +53,10 @@ app.use(function(req, res, next) {
|
|||||||
var apiRoutes = express.Router();
|
var apiRoutes = express.Router();
|
||||||
|
|
||||||
apiRoutes.route('/users')
|
apiRoutes.route('/users')
|
||||||
.get(userCtrl.findAllUsers)
|
|
||||||
.post(userCtrl.addUser);
|
.post(userCtrl.addUser);
|
||||||
apiRoutes.route('/users/:id')
|
|
||||||
.get(userCtrl.findById);
|
|
||||||
apiRoutes.route('/users/byusername/:username')
|
|
||||||
.get(userCtrl.findUserByUsername);
|
|
||||||
apiRoutes.route('/travels/user/:username')
|
|
||||||
.get(travelCtrl.findAllTravelsFromUsername);
|
|
||||||
|
|
||||||
apiRoutes.route('/auth')
|
apiRoutes.route('/auth')
|
||||||
.post(userCtrl.login);
|
.post(userCtrl.login);
|
||||||
|
|
||||||
apiRoutes.route('/travels')
|
|
||||||
.get(travelCtrl.findAllTravels);
|
|
||||||
|
|
||||||
apiRoutes.route('/travels/:id')
|
|
||||||
.get(travelCtrl.findById)
|
|
||||||
|
|
||||||
// OJU AQUÏ TREC la verificació de token temporalment, per fer les proves des de l'app
|
// OJU AQUÏ TREC la verificació de token temporalment, per fer les proves des de l'app
|
||||||
// route middleware to verify a token
|
// route middleware to verify a token
|
||||||
apiRoutes.use(function(req, res, next) {
|
apiRoutes.use(function(req, res, next) {
|
||||||
@@ -104,18 +90,35 @@ apiRoutes.use(function(req, res, next) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}); //fi verificació de token
|
}); //fi verificació de token
|
||||||
|
apiRoutes.route('/users')
|
||||||
|
.get(userCtrl.findAllUsers);
|
||||||
|
|
||||||
|
|
||||||
|
apiRoutes.route('/users/:id')
|
||||||
|
.get(userCtrl.findById);
|
||||||
|
apiRoutes.route('/users/byusername/:username')
|
||||||
|
.get(userCtrl.findUserByUsername);
|
||||||
|
/*apiRoutes.route('/projects/user/:username')
|
||||||
|
.get(projectCtrl.findAllprojectsFromUsername);
|
||||||
|
|
||||||
|
|
||||||
|
apiRoutes.route('/projects')
|
||||||
|
.get(projectCtrl.findAllprojects);
|
||||||
|
|
||||||
|
apiRoutes.route('/projects/:id')
|
||||||
|
.get(projectCtrl.findById);
|
||||||
|
|
||||||
|
|
||||||
apiRoutes.route('/users/:id')
|
apiRoutes.route('/users/:id')
|
||||||
.put(userCtrl.updateUser)
|
.put(userCtrl.updateUser)
|
||||||
.delete(userCtrl.deleteUser);
|
.delete(userCtrl.deleteUser);
|
||||||
|
|
||||||
apiRoutes.route('/travels')
|
apiRoutes.route('/projects')
|
||||||
.post(travelCtrl.addTravel);
|
.post(projectCtrl.addproject);
|
||||||
|
|
||||||
apiRoutes.route('/travels/:id')
|
apiRoutes.route('/projects/:id')
|
||||||
.put(travelCtrl.updateTravel)
|
.put(projectCtrl.updateproject)
|
||||||
.delete(travelCtrl.deleteTravel);
|
.delete(projectCtrl.deleteproject);*/
|
||||||
|
|
||||||
app.use('/api', apiRoutes);
|
app.use('/api', apiRoutes);
|
||||||
// end of API routes -------------------------------------
|
// end of API routes -------------------------------------
|
||||||
|
|||||||
@@ -1,16 +1,62 @@
|
|||||||
|
var urlapi = "http://localhost:3000/api/";
|
||||||
|
|
||||||
angular.module('workApp', ['chart.js'])
|
angular.module('workApp', ['chart.js'])
|
||||||
.controller('workController', function(
|
.controller('workController', function(
|
||||||
$scope,
|
$scope,
|
||||||
$interval
|
$interval,
|
||||||
|
$http
|
||||||
) {
|
) {
|
||||||
$scope.user={
|
$scope.currentInclude='login.html';
|
||||||
username: "idoctnef",
|
if(localStorage.getItem("owt_user")){
|
||||||
avatar: "toucan",
|
$scope.user=JSON.parse(localStorage.getItem("owt_user"));
|
||||||
github: ["github.com/idoctnef", "https://github.com/idoctnef"],
|
$scope.currentInclude="dashboard.html";
|
||||||
taiga: ["project page", "https://projects.primustech.io"],
|
}else{
|
||||||
totalWorkedTime: 4520
|
//window.location="index.html";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LOGIN SIGNUP */
|
||||||
|
$scope.showSignup = function(){
|
||||||
|
|
||||||
};
|
};
|
||||||
|
$scope.onBtnSignup = function(){
|
||||||
|
$scope.user.projects=[];
|
||||||
|
$http({
|
||||||
|
url: urlapi + 'users',
|
||||||
|
method: "POST",
|
||||||
|
data: $scope.user
|
||||||
|
}).then(function(response) {
|
||||||
|
window.location="index.html";
|
||||||
|
},
|
||||||
|
function(response) {// failed
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.onBtnLogin = function(){
|
||||||
|
$http({
|
||||||
|
url: urlapi + 'auth',
|
||||||
|
method: "POST",
|
||||||
|
data: $scope.user
|
||||||
|
}).then(function(response) {
|
||||||
|
console.log(response);
|
||||||
|
if(response.data.success)
|
||||||
|
{
|
||||||
|
localStorage.setItem("owt_token", angular.toJson(response.data.token));
|
||||||
|
localStorage.setItem("owt_user", angular.toJson(response.data.user));
|
||||||
|
window.location="dashboard.html";
|
||||||
|
}else{
|
||||||
|
toastr.error("login error", response.data.message);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
function(response) {// failed
|
||||||
|
});
|
||||||
|
};
|
||||||
|
$scope.onBtnLogout = function(){
|
||||||
|
localStorage.removeItem("owt_token");
|
||||||
|
localStorage.removeItem("owt_user");
|
||||||
|
//window.location.reload();
|
||||||
|
};
|
||||||
|
/* </ LOGIN SIGNUP */
|
||||||
|
|
||||||
//localStorage.clear();
|
//localStorage.clear();
|
||||||
$scope.working=false;
|
$scope.working=false;
|
||||||
$scope.projects=[];
|
$scope.projects=[];
|
||||||
@@ -125,6 +171,7 @@ angular.module('workApp', ['chart.js'])
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
.filter('secondsToDateTime', [function() {
|
.filter('secondsToDateTime', [function() {
|
||||||
return function(seconds) {
|
return function(seconds) {
|
||||||
return new Date(2016, 0, 1).setSeconds(seconds);
|
return new Date(2016, 0, 1).setSeconds(seconds);
|
||||||
|
|||||||
142
webapp/dashboard.html
Normal file
142
webapp/dashboard.html
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<div class="nav-wrapper blue-grey darken-4">
|
||||||
|
<a href="#" class="brand-logo">Open Work Time <small>- v0.1</small></a>
|
||||||
|
<ul id="nav-mobile" class="right">
|
||||||
|
<li>
|
||||||
|
<a ng-click="openCode()" target="_blank">
|
||||||
|
<i class="large material-icons" title="Visit code">code</i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a ng-click="deleteStorage()">
|
||||||
|
<i class="large material-icons" title="Delete storage">info_outline</i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a ng-click="onBtnLogout()" title="Logout">
|
||||||
|
<i class="large material-icons">power_settings_new</i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s12 m4 l2 blue-grey darken-3 white-text">
|
||||||
|
<!-- Grey navigation panel -->
|
||||||
|
<br>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s4">
|
||||||
|
<img ng-src="img/avatars/{{user.avatar}}.png" alt="" class="circle responsive-img blue-grey lighten-5">
|
||||||
|
</div>
|
||||||
|
<div class="col s8">
|
||||||
|
<h5>{{user.username}}</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
{{user.description}}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a ng-href="http://{{user.github}}" target="_blank">{{user.github}}</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a ng-href="http://{{user.web}}" target="_blank">{{user.web}}</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Total worked time: {{user.totalWorkedTime | secondsToDateTime | date:'HH:mm'}}h
|
||||||
|
</p>
|
||||||
|
<br/><br/><br/><br/><br/><br/><br/><br/>
|
||||||
|
<br/><br/><br/><br/><br/><br/><br/><br/>
|
||||||
|
<br/><br/><br/><br/><br/><br/><br/><br/>
|
||||||
|
<br/><br/><br/><br/><br/><br/><br/><br/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col s12 m8 l10">
|
||||||
|
<div class="row">
|
||||||
|
<div class="card white col s12 m12 l5">
|
||||||
|
<div class="card-content">
|
||||||
|
<span class="card-title">Projects</span>
|
||||||
|
<div class="collection">
|
||||||
|
<a href="#!" ng-click="projectSelect($index)" ng-repeat="project in projects" class="collection-item avatar white">
|
||||||
|
<div class="right">
|
||||||
|
<div class="waves-effect waves-light btn-floating indigo lighten-2" ng-click="editProject($index)">
|
||||||
|
<i class="material-icons"><img src="img/edit.png" class="o_trash_icon" /></i>
|
||||||
|
</div>
|
||||||
|
<div class="waves-effect waves-light btn-floating deep-orange lighten-2" ng-click="removeProject($index)">
|
||||||
|
<i class="material-icons"><img src="img/trash.png" class="o_trash_icon" /></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img ng-src="img/{{project.icon}}.png" class="circle"/>
|
||||||
|
<span class="title">{{project.title}}</span>
|
||||||
|
<p class="grey-text">{{project.totaltime | secondsToDateTime | date:'HH:mm:ss'}}</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-action" ng-show="!editingProject">
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="newproject.title" id="newprojectname" type="text" class="validate">
|
||||||
|
<label for="newprojectname">New project name</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="newproject.icon" id="icon" type="text" class="validate">
|
||||||
|
<label for="icon">icon</label>
|
||||||
|
</div>
|
||||||
|
<a ng-click="addNewProject()" class="waves-effect waves-light btn blue-grey lighten-1 right">Add new project</a>
|
||||||
|
</div>
|
||||||
|
<div class="card-action" ng-show="editingProject">
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="editingProject.title" id="newprojectname" value=" " type="text" class="validate">
|
||||||
|
<label for="newprojectname">New project name</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="editingProject.icon" id="icon" value=" " type="text" class="validate">
|
||||||
|
<label for="icon">icon</label>
|
||||||
|
</div>
|
||||||
|
<a ng-click="cancelEditProject()" class="waves-effect waves-light btn red lighten-2">Cancel</a>
|
||||||
|
<a ng-click="updateProject()" class="waves-effect waves-light btn blue lighten-2 right">Update project</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-show="currentproject.title" class="card white col s12 m12 l7">
|
||||||
|
<div class="card-content">
|
||||||
|
<span class="card-title">
|
||||||
|
<img ng-src="img/{{currentproject.icon}}.png" class="o_project_title_img"/>
|
||||||
|
{{currentproject.title}}
|
||||||
|
</span>
|
||||||
|
<p>
|
||||||
|
Total time: {{currentproject.totaltime | secondsToDateTime | date:'HH:mm:ss'}}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Current strike time: <b>{{currentStrike | secondsToDateTime | date:'HH:mm:ss'}}</b>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="card-action">
|
||||||
|
<a ng-click="btnWork()" ng-show="!working" class="waves-effect waves-light btn green lighten-2">Work!</a>
|
||||||
|
<a ng-click="btnStop()" ng-show="working" class="waves-effect waves-light btn red lighten-2">Stop!</a>
|
||||||
|
|
||||||
|
<!--<a class="waves-effect waves-light btn deep-orange lighten-2">Stop working!</a>-->
|
||||||
|
</div>
|
||||||
|
<div class="divider"></div>
|
||||||
|
<div class="card-content">
|
||||||
|
<!-- here the charts -->
|
||||||
|
<canvas id="bar" class="chart chart-bar"
|
||||||
|
chart-data="currentproject.chart.data" chart-labels="currentproject.chart.labels" chart-series="currentproject.chart.series">
|
||||||
|
</canvas>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div ng-show="!currentproject.title" class="card white col s12 m12 l7" style="height: 200px;">
|
||||||
|
<span class="card-title">
|
||||||
|
Select a project
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div><!-- </row -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -21,147 +21,10 @@
|
|||||||
<body ng-controller="workController as work" class="grey lighten-2">
|
<body ng-controller="workController as work" class="grey lighten-2">
|
||||||
|
|
||||||
|
|
||||||
<nav>
|
<ng-include src="currentInclude"></ng-include>
|
||||||
<div class="nav-wrapper blue-grey darken-4">
|
|
||||||
<a href="#" class="brand-logo">Open Work Time <small>- v0.1</small></a>
|
|
||||||
<ul id="nav-mobile" class="right">
|
|
||||||
<li>
|
|
||||||
<a ng-click="openCode()" target="_blank">
|
|
||||||
<i class="large material-icons" title="Visit code">code</i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a ng-click="deleteStorage()">
|
|
||||||
<i class="large material-icons" title="Delete storage">info_outline</i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a ng-click="saveStorage()" title="Save all to storage">
|
|
||||||
<i class="large material-icons">perm_identity</i>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col s12 m4 l2 blue-grey darken-3 white-text">
|
|
||||||
<!-- Grey navigation panel -->
|
|
||||||
<br>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col s4">
|
|
||||||
<img ng-src="img/avatars/{{user.avatar}}.png" alt="" class="circle responsive-img blue-grey lighten-5">
|
|
||||||
</div>
|
|
||||||
<div class="col s8">
|
|
||||||
<h5>{{user.username}}</h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p>
|
|
||||||
<a ng-href="{{user.github[1]}}" target="_blank">{{user.github[0]}}</a>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<a ng-href="{{user.taiga[1]}}" target="_blank">{{user.taiga[0]}}</a>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Total worked time: {{user.totalWorkedTime | secondsToDateTime | date:'HH:mm'}}h
|
|
||||||
</p>
|
|
||||||
<br/><br/><br/><br/><br/><br/><br/><br/>
|
|
||||||
<br/><br/><br/><br/><br/><br/><br/><br/>
|
|
||||||
<br/><br/><br/><br/><br/><br/><br/><br/>
|
|
||||||
<br/><br/><br/><br/><br/><br/><br/><br/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="col s12 m8 l10">
|
|
||||||
<div class="row">
|
|
||||||
<div class="card white col s12 m12 l5">
|
|
||||||
<div class="card-content">
|
|
||||||
<span class="card-title">Projects</span>
|
|
||||||
<div class="collection">
|
|
||||||
<a href="#!" ng-click="projectSelect($index)" ng-repeat="project in projects" class="collection-item avatar white">
|
|
||||||
<div class="right">
|
|
||||||
<div class="waves-effect waves-light btn-floating indigo lighten-2" ng-click="editProject($index)">
|
|
||||||
<i class="material-icons"><img src="img/edit.png" class="o_trash_icon" /></i>
|
|
||||||
</div>
|
|
||||||
<div class="waves-effect waves-light btn-floating deep-orange lighten-2" ng-click="removeProject($index)">
|
|
||||||
<i class="material-icons"><img src="img/trash.png" class="o_trash_icon" /></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<img ng-src="img/{{project.icon}}.png" class="circle"/>
|
|
||||||
<span class="title">{{project.title}}</span>
|
|
||||||
<p class="grey-text">{{project.totaltime | secondsToDateTime | date:'HH:mm:ss'}}</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-action" ng-show="!editingProject">
|
|
||||||
<div class="input-field col s6">
|
|
||||||
<input ng-model="newproject.title" id="newprojectname" type="text" class="validate">
|
|
||||||
<label for="newprojectname">New project name</label>
|
|
||||||
</div>
|
|
||||||
<div class="input-field col s6">
|
|
||||||
<input ng-model="newproject.icon" id="icon" type="text" class="validate">
|
|
||||||
<label for="icon">icon</label>
|
|
||||||
</div>
|
|
||||||
<a ng-click="addNewProject()" class="waves-effect waves-light btn blue-grey lighten-1 right">Add new project</a>
|
|
||||||
</div>
|
|
||||||
<div class="card-action" ng-show="editingProject">
|
|
||||||
<div class="input-field col s6">
|
|
||||||
<input ng-model="editingProject.title" id="newprojectname" value=" " type="text" class="validate">
|
|
||||||
<label for="newprojectname">New project name</label>
|
|
||||||
</div>
|
|
||||||
<div class="input-field col s6">
|
|
||||||
<input ng-model="editingProject.icon" id="icon" value=" " type="text" class="validate">
|
|
||||||
<label for="icon">icon</label>
|
|
||||||
</div>
|
|
||||||
<a ng-click="cancelEditProject()" class="waves-effect waves-light btn red lighten-2">Cancel</a>
|
|
||||||
<a ng-click="updateProject()" class="waves-effect waves-light btn blue lighten-2 right">Update project</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-show="currentproject.title" class="card white col s12 m12 l7">
|
|
||||||
<div class="card-content">
|
|
||||||
<span class="card-title">
|
|
||||||
<img ng-src="img/{{currentproject.icon}}.png" class="o_project_title_img"/>
|
|
||||||
{{currentproject.title}}
|
|
||||||
</span>
|
|
||||||
<p>
|
|
||||||
Total time: {{currentproject.totaltime | secondsToDateTime | date:'HH:mm:ss'}}
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Current strike time: <b>{{currentStrike | secondsToDateTime | date:'HH:mm:ss'}}</b>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="card-action">
|
|
||||||
<a ng-click="btnWork()" ng-show="!working" class="waves-effect waves-light btn green lighten-2">Work!</a>
|
|
||||||
<a ng-click="btnStop()" ng-show="working" class="waves-effect waves-light btn red lighten-2">Stop!</a>
|
|
||||||
|
|
||||||
<!--<a class="waves-effect waves-light btn deep-orange lighten-2">Stop working!</a>-->
|
|
||||||
</div>
|
|
||||||
<div class="divider"></div>
|
|
||||||
<div class="card-content">
|
|
||||||
<!-- here the charts -->
|
|
||||||
<canvas id="bar" class="chart chart-bar"
|
|
||||||
chart-data="currentproject.chart.data" chart-labels="currentproject.chart.labels" chart-series="currentproject.chart.series">
|
|
||||||
</canvas>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div ng-show="!currentproject.title" class="card white col s12 m12 l7" style="height: 200px;">
|
|
||||||
<span class="card-title">
|
|
||||||
Select a project
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div><!-- </row -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- ELECTRON
|
|
||||||
Insert this line above script imports
|
|
||||||
Works for both browser and electron with the same code -->
|
|
||||||
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
|
|
||||||
|
|
||||||
<!-- ANGULAR -->
|
<!-- ANGULAR -->
|
||||||
<script src="libraries/angular.min.js"></script>
|
<script src="libraries/angular.min.js"></script>
|
||||||
@@ -180,9 +43,6 @@ Works for both browser and electron with the same code -->
|
|||||||
<script src="libraries/toastr.js"></script>
|
<script src="libraries/toastr.js"></script>
|
||||||
<link type="text/css" rel="stylesheet" href="libraries/toastr.css"/>
|
<link type="text/css" rel="stylesheet" href="libraries/toastr.css"/>
|
||||||
|
|
||||||
<!-- ELECTRON
|
|
||||||
Insert this line after script imports -->
|
|
||||||
<script>if (window.module) module = window.module;</script>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
31
webapp/login.html
Normal file
31
webapp/login.html
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col s0 m2 l3">
|
||||||
|
</div>
|
||||||
|
<div class="col s12 m8 l6">
|
||||||
|
<div class="card white">
|
||||||
|
<div class="card-content">
|
||||||
|
<span class="card-title">Login</span>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s12">
|
||||||
|
<input ng-model="user.username" id="username" type="text" class="validate">
|
||||||
|
<label for="username">Username</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s12">
|
||||||
|
<input ng-model="user.password" id="password" type="password" class="validate">
|
||||||
|
<label for="password">Password</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-action">
|
||||||
|
<a ng-click="showSignup()" class="waves-effect waves-light btn green lighten-2">
|
||||||
|
<i class="material-icons left">perm_identity</i>Signup
|
||||||
|
</a>
|
||||||
|
<a ng-click="onBtnLogin()" class="waves-effect waves-light btn blue lighten-2 right">
|
||||||
|
<i class="material-icons left">input</i>Login
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
115
webapp/signup.html
Normal file
115
webapp/signup.html
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html ng-app="workApp">
|
||||||
|
<head>
|
||||||
|
<!--Import Google Icon Font-->
|
||||||
|
<link href="fonts/icons.css" rel="stylesheet">
|
||||||
|
<!--Import materialize.css-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection"/>
|
||||||
|
|
||||||
|
|
||||||
|
<link type="text/css" rel="stylesheet" href="own.css"/>
|
||||||
|
|
||||||
|
<!--Let browser know website is optimized for mobile-->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
|
<title>Open Work Time - online version</title>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body{
|
||||||
|
background: #ffffff; /* fallback for old browsers */
|
||||||
|
background: -webkit-linear-gradient(to left, #ffffff , #37474f); /* Chrome 10-25, Safari 5.1-6 */
|
||||||
|
background: linear-gradient(to left, #ffffff , #37474f); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body ng-controller="loginController as login" class="grey lighten-2">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s0 m2 l3">
|
||||||
|
</div>
|
||||||
|
<div class="col s12 m8 l6">
|
||||||
|
<div class="card white">
|
||||||
|
<div class="card-content">
|
||||||
|
<span class="card-title">Signup</span>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s12">
|
||||||
|
<input ng-model="user.username" id="username" type="text" class="validate">
|
||||||
|
<label for="username">Username</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="user.password" id="password" type="password" class="validate">
|
||||||
|
<label for="password">Password</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="user.repassword" id="repassword" type="password" class="validate">
|
||||||
|
<label for="repassword">Confirm password</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s12">
|
||||||
|
<input ng-model="user.description" id="description" type="text" class="validate">
|
||||||
|
<label for="description">Description</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="user.mail" id="mail" type="email" class="validate">
|
||||||
|
<label for="mail">Mail</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="user.avatar" id="avatar" type="text" class="validate">
|
||||||
|
<label for="avatar">Avatar</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="user.github" id="github" type="text" class="validate">
|
||||||
|
<label for="github">Github</label>
|
||||||
|
</div>
|
||||||
|
<div class="input-field col s6">
|
||||||
|
<input ng-model="user.web" id="web" type="text" class="validate">
|
||||||
|
<label for="web">Web</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-action">
|
||||||
|
<a href="index.html" class="waves-effect waves-light btn red lighten-2">
|
||||||
|
<i class="material-icons left">not_interested</i>Cancel
|
||||||
|
</a>
|
||||||
|
<a ng-click="onBtnSignup()" class="waves-effect waves-light btn green lighten-2 right">
|
||||||
|
<i class="material-icons left">done</i>Signup
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ANGULAR -->
|
||||||
|
<script src="libraries/angular.min.js"></script>
|
||||||
|
|
||||||
|
<!-- ANGULAR CHART JS -->
|
||||||
|
<script src="node_modules/chart.js/dist/Chart.min.js"></script>
|
||||||
|
<script src="node_modules/angular-chart.js/dist/angular-chart.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<!--Import jQuery before materialize.js-->
|
||||||
|
<script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
|
||||||
|
<script type="text/javascript" src="js/materialize.min.js"></script>
|
||||||
|
|
||||||
|
<script src="controllers.js"></script>
|
||||||
|
|
||||||
|
<script src="libraries/toastr.js"></script>
|
||||||
|
<link type="text/css" rel="stylesheet" href="libraries/toastr.css"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user