Browse Source

html structure

master
nau 7 years ago
parent
commit
6fc97f805a
194 changed files with 17612 additions and 0 deletions
  1. +41
    -0
      .gitignore
  2. +3
    -0
      README.md
  3. +9
    -0
      config.js
  4. +102
    -0
      controllers/travelController.js
  5. +154
    -0
      controllers/userController.js
  6. +25
    -0
      models/travelModel.js
  7. +14
    -0
      models/userModel.js
  8. +17
    -0
      package.json
  9. BIN
      screenshot2.png
  10. +126
    -0
      server.js
  11. +29
    -0
      webapp/controllers.js
  12. +8461
    -0
      webapp/css/materialize.css
  13. +16
    -0
      webapp/css/materialize.min.css
  14. BIN
      webapp/fonts/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2
  15. +23
    -0
      webapp/fonts/icons.css
  16. BIN
      webapp/fonts/roboto/Roboto-Bold.eot
  17. BIN
      webapp/fonts/roboto/Roboto-Bold.ttf
  18. BIN
      webapp/fonts/roboto/Roboto-Bold.woff
  19. BIN
      webapp/fonts/roboto/Roboto-Bold.woff2
  20. BIN
      webapp/fonts/roboto/Roboto-Light.eot
  21. BIN
      webapp/fonts/roboto/Roboto-Light.ttf
  22. BIN
      webapp/fonts/roboto/Roboto-Light.woff
  23. BIN
      webapp/fonts/roboto/Roboto-Light.woff2
  24. BIN
      webapp/fonts/roboto/Roboto-Medium.eot
  25. BIN
      webapp/fonts/roboto/Roboto-Medium.ttf
  26. BIN
      webapp/fonts/roboto/Roboto-Medium.woff
  27. BIN
      webapp/fonts/roboto/Roboto-Medium.woff2
  28. BIN
      webapp/fonts/roboto/Roboto-Regular.eot
  29. BIN
      webapp/fonts/roboto/Roboto-Regular.ttf
  30. BIN
      webapp/fonts/roboto/Roboto-Regular.woff
  31. BIN
      webapp/fonts/roboto/Roboto-Regular.woff2
  32. BIN
      webapp/fonts/roboto/Roboto-Thin.eot
  33. BIN
      webapp/fonts/roboto/Roboto-Thin.ttf
  34. BIN
      webapp/fonts/roboto/Roboto-Thin.woff
  35. BIN
      webapp/fonts/roboto/Roboto-Thin.woff2
  36. BIN
      webapp/img/avatars/anteater.png
  37. BIN
      webapp/img/avatars/bat.png
  38. BIN
      webapp/img/avatars/beetle.png
  39. BIN
      webapp/img/avatars/bulldog.png
  40. BIN
      webapp/img/avatars/butterfly.png
  41. BIN
      webapp/img/avatars/camel.png
  42. BIN
      webapp/img/avatars/cat.png
  43. BIN
      webapp/img/avatars/chameleon.png
  44. BIN
      webapp/img/avatars/clown-fish.png
  45. BIN
      webapp/img/avatars/cobra.png
  46. BIN
      webapp/img/avatars/cow.png
  47. BIN
      webapp/img/avatars/crab.png
  48. BIN
      webapp/img/avatars/crocodile.png
  49. BIN
      webapp/img/avatars/duck.png
  50. BIN
      webapp/img/avatars/elephant.png
  51. BIN
      webapp/img/avatars/frog.png
  52. BIN
      webapp/img/avatars/giraffe.png
  53. BIN
      webapp/img/avatars/hen.png
  54. BIN
      webapp/img/avatars/hippopotamus.png
  55. BIN
      webapp/img/avatars/kangaroo.png
  56. BIN
      webapp/img/avatars/lion.png
  57. BIN
      webapp/img/avatars/llama.png
  58. BIN
      webapp/img/avatars/macaw.png
  59. BIN
      webapp/img/avatars/monkey.png
  60. BIN
      webapp/img/avatars/moose.png
  61. BIN
      webapp/img/avatars/mouse.png
  62. BIN
      webapp/img/avatars/octopus.png
  63. BIN
      webapp/img/avatars/ostrich.png
  64. BIN
      webapp/img/avatars/owl.png
  65. BIN
      webapp/img/avatars/panda.png
  66. BIN
      webapp/img/avatars/pelican.png
  67. BIN
      webapp/img/avatars/penguin.png
  68. BIN
      webapp/img/avatars/pig.png
  69. BIN
      webapp/img/avatars/rabbit.png
  70. BIN
      webapp/img/avatars/racoon.png
  71. BIN
      webapp/img/avatars/ray.png
  72. BIN
      webapp/img/avatars/rhinoceros.png
  73. BIN
      webapp/img/avatars/sea-cow.png
  74. BIN
      webapp/img/avatars/shark.png
  75. BIN
      webapp/img/avatars/sheep.png
  76. BIN
      webapp/img/avatars/siberian-husky.png
  77. BIN
      webapp/img/avatars/sloth.png
  78. BIN
      webapp/img/avatars/snake.png
  79. BIN
      webapp/img/avatars/spider.png
  80. BIN
      webapp/img/avatars/squirrel.png
  81. BIN
      webapp/img/avatars/swan.png
  82. BIN
      webapp/img/avatars/tiger.png
  83. BIN
      webapp/img/avatars/toucan.png
  84. BIN
      webapp/img/avatars/turtle.png
  85. BIN
      webapp/img/avatars/whale.png
  86. BIN
      webapp/img/webicons/ai.png
  87. BIN
      webapp/img/webicons/allocation-1.png
  88. BIN
      webapp/img/webicons/allocation-2.png
  89. BIN
      webapp/img/webicons/allocation.png
  90. BIN
      webapp/img/webicons/attach.png
  91. BIN
      webapp/img/webicons/avatar-1.png
  92. BIN
      webapp/img/webicons/avatar.png
  93. BIN
      webapp/img/webicons/background-1.png
  94. BIN
      webapp/img/webicons/background.png
  95. BIN
      webapp/img/webicons/browser-1.png
  96. BIN
      webapp/img/webicons/browser-2.png
  97. BIN
      webapp/img/webicons/browser-3.png
  98. BIN
      webapp/img/webicons/browser-4.png
  99. BIN
      webapp/img/webicons/browser-5.png
  100. BIN
      webapp/img/webicons/browser-6.png

+ 41
- 0
.gitignore

@ -0,0 +1,41 @@
# Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules
jspm_packages
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history

+ 3
- 0
README.md

@ -1,2 +1,5 @@
# openworktime
time traking web app for work projects [frontend: angular + materializecss. backend: nodejs+express+mongodb]
![Alt text](https://raw.githubusercontent.com/idoctnef/openworktime/master/screenshot2.png "developing in progress")

+ 9
- 0
config.js

@ -0,0 +1,9 @@
module.exports = {
/*'secret': process.env.SECRET,
'database': process.env.MONGO_DSN,*/
'secret': 'secretfortoken',
'database': 'mongodb://localhost/comunalcar',
"port" : process.env.PORT || 3000
};

+ 102
- 0
controllers/travelController.js

@ -0,0 +1,102 @@
//File: controllers/travelController.js
var mongoose = require('mongoose');
var travelModel = mongoose.model('travelModel');
var userModel = mongoose.model('userModel');
//GET
exports.findAllTravels = function(req, res) {
travelModel.find(function(err, travels) {
if(err) res.send(500, err.message);
res.status(200).jsonp(travels);
});
};
//GET
exports.findById = function(req, res) {
travelModel.findById(req.params.id, function(err, travel) {
if(err) return res.send(500, err.message);
console.log('GET /travel/' + req.params.id);
res.status(200).jsonp(travel);
});
};
exports.findAllTravelsFromUsername = function(req, res) {
travelModel.find({
owner: req.params.username
}, function(err, travels) {
if (err) throw err;
if (!travels) {
res.json({ success: false, message: 'no travels for user' });
} else if (travels) {
console.log(travels);
// return the information including token as JSON
res.jsonp(travels);
}
});
};
exports.addTravel = function(req, res) {
console.log('POST new travel, title: ' + req.body.title);
var travel = new travelModel({
title: req.body.title,
description: req.body.description,
owner: req.body.owner,
from: req.body.from,
to: req.body.to,
date: req.body.date,
periodic: req.body.periodic,
generateddate: req.body.generateddate,
seats: req.body.seats,
package: req.body.package,
icon: req.body.icon,
phone: req.body.phone,
telegram: req.body.telegram,
collectivized: req.body.collectivized,
modality: req.body.modality
});
travel.save(function(err, travel) {
if(err) return res.send(500, err.message);
res.status(200).jsonp(travel);
});
};
//PUT
exports.updateTravel = function(req, res) {
ActivityModel.findById(req.params.id, function(err, tvshow) {
tvshow.title = req.body.petId;
tvshow.year = req.body.year;
tvshow.country = req.body.country;
tvshow.poster = req.body.poster;
tvshow.seasons = req.body.seasons;
tvshow.genre = req.body.genre;
tvshow.summary = req.body.summary;
tvshow.save(function(err) {
if(err) return res.send(500, err.message);
res.status(200).jsonp(tvshow);
});
});
};
//DELETE
exports.deleteTravel = function(req, res) {
ActivityModel.findById(req.params.id, function(err, activity) {
activity.remove(function(err) {
if(err) return res.send(500, err.message);
res.status(200).jsonp(req.params.id);
console.log('DELETE /activities/' + req.params.id);
})
});
};

+ 154
- 0
controllers/userController.js

@ -0,0 +1,154 @@
//File: controllers/userController.js
var mongoose = require('mongoose');
var userModel = mongoose.model('userModel');
/* */
var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
var express = require("express");
var app = express();
var config = require('../config'); // get our config file
app.set('superSecret', config.secret); // secret variable
/* */
//GET - Return all Users in the DB
exports.findAllUsers = function(req, res) {
userModel.find(function(err, users) {
if(err) res.send(500, err.message);
//password deletion
for(var i=0; i<users.length; i++)
{
users[i].password="";
console.log(users[i].password);
}
console.log('GET /users');
res.status(200).jsonp(users);
});
};
//GET - Return a User with specified ID
exports.findById = function(req, res) {
userModel.findById(req.params.id, function(err, user) {
if(err) return res.send(500, err.message);
console.log('GET /users/' + req.params.id);
//password deletion
user.password="";
res.status(200).jsonp(user);
});
};
exports.findUserByUsername = function(req, res) {
userModel.find({
username: req.params.username
}, function(err, user) {
if (err) throw err;
if (!user) {
res.json({ success: false, message: 'no user found' });
} else if (user) {
// return the information including token as JSON
//res.jsonp(user);
user.password="";
console.log(user);
res.status(200).jsonp(user[0]);
}
});
};
//POST - Insert a new User in the DB
exports.addUser = function(req, res) {
console.log('POST new user, name: ' + req.body.username);
//console.log(req.body);
var user = new userModel({
username: req.body.username,
password: req.body.password,
description: req.body.description,
avatar: req.body.avatar,
mail: req.body.mail,
phone: req.body.phone,
telegram: req.body.telegram
});
user.save(function(err, user) {
if(err) return res.send(500, err.message);
res.status(200).jsonp(user);
});
};
//PUT - Update a user already exists
exports.updateUser = function(req, res) {
userModel.findById(req.params.id, function(err, user) {
user.username = req.body.username;
user.password = req.body.password;
user.description = req.body.description;
user.avatar = req.body.avatar;
user.mail = req.body.mail;
user.phone = req.body.phone;
user.telegram = req.body.telegram;
user.save(function(err) {
if(err) return res.send(500, err.message);
user.password="";
res.status(200).jsonp(user);
});
});
};
//DELETE - Delete a user with specified ID
exports.deleteUser = function(req, res) {
userModel.findById(req.params.id, function(err, user) {
user.remove(function(err) {
if(err) return res.send(500, err.message);
res.status(200).jsonp(req.params.id);
console.log('DELETE /users/' + req.params.id);
})
});
};
//POST - auth user
exports.login = function(req, res) {
// find the user
userModel.findOne({
username: req.body.username
}, function(err, user) {
if (err) throw err;
if (!user) {
res.json({ success: false, message: 'Authentication failed. User not found.' });
} else if (user) {
// check if password matches
if (user.password != req.body.password) {
res.json({ success: false, message: 'Authentication failed. Wrong password.' });
} else {
// if user is found and password is right
// create a token
var token = jwt.sign(user, app.get('superSecret'), {
//expiresInMinutes: 1440 // expires in 24 hours
expiresIn: '60m'
});
console.log(user);
// return the information including token as JSON
res.json({
success: true,
message: 'Enjoy your token!',
token: token,
avatar: user.avatar
});
}
}
});
};

+ 25
- 0
models/travelModel.js

@ -0,0 +1,25 @@
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var travelSchema = new Schema({
title: { type: String },
description: { type: String },
owner: { type: String },
from: { type: String },
to: { type: String },
date: { type: Date },
periodic: { type: Boolean },
generateddate: { type: Date },
seats: { type: Number },
package: { type: Boolean },
icon: { type: String },
phone: { type: Number },
telegram: { type: String },
collectivized: { type: Boolean },
modality: { type: String } //if is an offering travel or asking for travel
})
module.exports = mongoose.model('travelModel', travelSchema);
//modality can be: offering, asking, package

+ 14
- 0
models/userModel.js

@ -0,0 +1,14 @@
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var userSchema = new Schema({
username: { type: String },
password: { type: String },
description: { type: String },
avatar: { type: String },
mail: { type: String },
phone: { type: String },
telegram: { type: String }
})
module.exports = mongoose.model('userModel', userSchema);

+ 17
- 0
package.json

@ -0,0 +1,17 @@
{
"name": "openworktime",
"version": "0.0.1",
"description": "openworktime, time traking app",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"body-parser": "latest",
"express": "^4.7.1",
"jsonwebtoken": "latest",
"method-override": "^2.1.2",
"mongoose": "latest",
"morgan": "latest"
}
}

BIN
screenshot2.png

Before After
Width: 1275  |  Height: 687  |  Size: 93 KiB

+ 126
- 0
server.js

@ -0,0 +1,126 @@
var express = require("express"),
app = express(),
bodyParser = require("body-parser"),
methodOverride = require("method-override"),
mongoose = require('mongoose');
var morgan = require('morgan');
var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
var config = require('./config'); // get our config file
mongoose.Promise = global.Promise;
// Connection to DB
mongoose.connect(config.database, function(err, res) {
if(err) throw err;
console.log('Connected to Database');
});
app.set('superSecret', config.secret); // secret variable
// Middlewares
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride());
// use morgan to log requests to the console
app.use(morgan('dev'));
// Import Models and controllers
var userMdl = require('./models/userModel')(app, mongoose);
var userCtrl = require('./controllers/userController');
var travelMdl = require('./models/travelModel')(app, mongoose);
var travelCtrl = require('./controllers/travelController');
/*// Example Route
var router = express.Router();
router.get('/', function(req, res) {
res.send("Hello world!");
});
app.use(router);*/
app.use(express.static(__dirname + '/web'));
//CORS
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Access-Token");
next();
});
// API routes ------------------------------------------------------
var apiRoutes = express.Router();
apiRoutes.route('/users')
.get(userCtrl.findAllUsers)
.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')
.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
// route middleware to verify a token
apiRoutes.use(function(req, res, next) {
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
// decode token
if (token) {
// verifies secret and checks exp
jwt.verify(token, app.get('superSecret'), function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
} else {
// if everything is good, save to request for use in other routes
req.decoded = decoded;
//console.log("decoded " + decoded);
next();
}
});
} else {
// if there is no token
// return an error
return res.status(201).send({
success: false,
message: 'No token provided.'
});
}
}); //fi verificació de token
apiRoutes.route('/users/:id')
.put(userCtrl.updateUser)
.delete(userCtrl.deleteUser);
apiRoutes.route('/travels')
.post(travelCtrl.addTravel);
apiRoutes.route('/travels/:id')
.put(travelCtrl.updateTravel)
.delete(travelCtrl.deleteTravel);
app.use('/api', apiRoutes);
// end of API routes -------------------------------------
// Start server
app.listen(config.port, function() {
console.log("Node server running on http://localhost:3000");
});

+ 29
- 0
webapp/controllers.js

@ -0,0 +1,29 @@
angular.module('workApp', [])
.controller('workController', function(
$scope, $http
) {
$scope.username="";
if(localStorage.getItem('w_username')){
$scope.username=localStorage.getItem('w_username');
}
$scope.onNew = function(){
};
$scope.openCode = function(){
toastr.info("Visiting code");
var urlCode="https://github.com/idoctnef/openworktime";
if(typeof process !== 'undefined'){
console.log(process.versions['electron']);
const {shell} = require('electron');
shell.openExternal(urlCode);
}else{
window.open(urlCode);
}
};
});

+ 8461
- 0
webapp/css/materialize.css
File diff suppressed because it is too large
View File


+ 16
- 0
webapp/css/materialize.min.css
File diff suppressed because it is too large
View File


BIN
webapp/fonts/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2


+ 23
- 0
webapp/fonts/icons.css

@ -0,0 +1,23 @@
/* fallback */
@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: local('Material Icons'), local('MaterialIcons-Regular'), url(2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2) format('woff2');
}
.material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
-moz-font-feature-settings: 'liga';
-moz-osx-font-smoothing: grayscale;
}

BIN
webapp/fonts/roboto/Roboto-Bold.eot


BIN
webapp/fonts/roboto/Roboto-Bold.ttf


BIN
webapp/fonts/roboto/Roboto-Bold.woff


BIN
webapp/fonts/roboto/Roboto-Bold.woff2


BIN
webapp/fonts/roboto/Roboto-Light.eot


BIN
webapp/fonts/roboto/Roboto-Light.ttf


BIN
webapp/fonts/roboto/Roboto-Light.woff


BIN
webapp/fonts/roboto/Roboto-Light.woff2


BIN
webapp/fonts/roboto/Roboto-Medium.eot


BIN
webapp/fonts/roboto/Roboto-Medium.ttf


BIN
webapp/fonts/roboto/Roboto-Medium.woff


BIN
webapp/fonts/roboto/Roboto-Medium.woff2


BIN
webapp/fonts/roboto/Roboto-Regular.eot


BIN
webapp/fonts/roboto/Roboto-Regular.ttf


BIN
webapp/fonts/roboto/Roboto-Regular.woff


BIN
webapp/fonts/roboto/Roboto-Regular.woff2


BIN
webapp/fonts/roboto/Roboto-Thin.eot


BIN
webapp/fonts/roboto/Roboto-Thin.ttf


BIN
webapp/fonts/roboto/Roboto-Thin.woff


BIN
webapp/fonts/roboto/Roboto-Thin.woff2


BIN
webapp/img/avatars/anteater.png

Before After
Width: 512  |  Height: 512  |  Size: 8.1 KiB

BIN
webapp/img/avatars/bat.png

Before After
Width: 512  |  Height: 512  |  Size: 10 KiB

BIN
webapp/img/avatars/beetle.png

Before After
Width: 512  |  Height: 512  |  Size: 16 KiB

BIN
webapp/img/avatars/bulldog.png

Before After
Width: 512  |  Height: 512  |  Size: 17 KiB

BIN
webapp/img/avatars/butterfly.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/avatars/camel.png

Before After
Width: 512  |  Height: 512  |  Size: 13 KiB

BIN
webapp/img/avatars/cat.png

Before After
Width: 512  |  Height: 512  |  Size: 17 KiB

BIN
webapp/img/avatars/chameleon.png

Before After
Width: 512  |  Height: 512  |  Size: 15 KiB

BIN
webapp/img/avatars/clown-fish.png

Before After
Width: 512  |  Height: 512  |  Size: 21 KiB

BIN
webapp/img/avatars/cobra.png

Before After
Width: 512  |  Height: 512  |  Size: 17 KiB

BIN
webapp/img/avatars/cow.png

Before After
Width: 512  |  Height: 512  |  Size: 21 KiB

BIN
webapp/img/avatars/crab.png

Before After
Width: 512  |  Height: 512  |  Size: 17 KiB

BIN
webapp/img/avatars/crocodile.png

Before After
Width: 512  |  Height: 512  |  Size: 8.7 KiB

BIN
webapp/img/avatars/duck.png

Before After
Width: 512  |  Height: 512  |  Size: 9.6 KiB

BIN
webapp/img/avatars/elephant.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/avatars/frog.png

Before After
Width: 512  |  Height: 512  |  Size: 15 KiB

BIN
webapp/img/avatars/giraffe.png

Before After
Width: 512  |  Height: 512  |  Size: 17 KiB

BIN
webapp/img/avatars/hen.png

Before After
Width: 512  |  Height: 512  |  Size: 12 KiB

BIN
webapp/img/avatars/hippopotamus.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/avatars/kangaroo.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/avatars/lion.png

Before After
Width: 512  |  Height: 512  |  Size: 17 KiB

BIN
webapp/img/avatars/llama.png

Before After
Width: 512  |  Height: 512  |  Size: 8.4 KiB

BIN
webapp/img/avatars/macaw.png

Before After
Width: 512  |  Height: 512  |  Size: 14 KiB

BIN
webapp/img/avatars/monkey.png

Before After
Width: 512  |  Height: 512  |  Size: 16 KiB

BIN
webapp/img/avatars/moose.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/avatars/mouse.png

Before After
Width: 512  |  Height: 512  |  Size: 10 KiB

BIN
webapp/img/avatars/octopus.png

Before After
Width: 512  |  Height: 512  |  Size: 21 KiB

BIN
webapp/img/avatars/ostrich.png

Before After
Width: 512  |  Height: 512  |  Size: 12 KiB

BIN
webapp/img/avatars/owl.png

Before After
Width: 512  |  Height: 512  |  Size: 15 KiB

BIN
webapp/img/avatars/panda.png

Before After
Width: 512  |  Height: 512  |  Size: 12 KiB

BIN
webapp/img/avatars/pelican.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/avatars/penguin.png

Before After
Width: 512  |  Height: 512  |  Size: 14 KiB

BIN
webapp/img/avatars/pig.png

Before After
Width: 512  |  Height: 512  |  Size: 13 KiB

BIN
webapp/img/avatars/rabbit.png

Before After
Width: 512  |  Height: 512  |  Size: 12 KiB

BIN
webapp/img/avatars/racoon.png

Before After
Width: 512  |  Height: 512  |  Size: 13 KiB

BIN
webapp/img/avatars/ray.png

Before After
Width: 512  |  Height: 512  |  Size: 12 KiB

BIN
webapp/img/avatars/rhinoceros.png

Before After
Width: 512  |  Height: 512  |  Size: 10 KiB

BIN
webapp/img/avatars/sea-cow.png

Before After
Width: 512  |  Height: 512  |  Size: 7.5 KiB

BIN
webapp/img/avatars/shark.png

Before After
Width: 512  |  Height: 512  |  Size: 9.5 KiB

BIN
webapp/img/avatars/sheep.png

Before After
Width: 512  |  Height: 512  |  Size: 10 KiB

BIN
webapp/img/avatars/siberian-husky.png

Before After
Width: 512  |  Height: 512  |  Size: 19 KiB

BIN
webapp/img/avatars/sloth.png

Before After
Width: 512  |  Height: 512  |  Size: 15 KiB

BIN
webapp/img/avatars/snake.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/avatars/spider.png

Before After
Width: 512  |  Height: 512  |  Size: 20 KiB

BIN
webapp/img/avatars/squirrel.png

Before After
Width: 512  |  Height: 512  |  Size: 14 KiB

BIN
webapp/img/avatars/swan.png

Before After
Width: 512  |  Height: 512  |  Size: 12 KiB

BIN
webapp/img/avatars/tiger.png

Before After
Width: 512  |  Height: 512  |  Size: 22 KiB

BIN
webapp/img/avatars/toucan.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/avatars/turtle.png

Before After
Width: 512  |  Height: 512  |  Size: 20 KiB

BIN
webapp/img/avatars/whale.png

Before After
Width: 512  |  Height: 512  |  Size: 9.2 KiB

BIN
webapp/img/webicons/ai.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/webicons/allocation-1.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/webicons/allocation-2.png

Before After
Width: 512  |  Height: 512  |  Size: 16 KiB

BIN
webapp/img/webicons/allocation.png

Before After
Width: 512  |  Height: 512  |  Size: 3.0 KiB

BIN
webapp/img/webicons/attach.png

Before After
Width: 512  |  Height: 512  |  Size: 11 KiB

BIN
webapp/img/webicons/avatar-1.png

Before After
Width: 512  |  Height: 512  |  Size: 20 KiB

BIN
webapp/img/webicons/avatar.png

Before After
Width: 512  |  Height: 512  |  Size: 19 KiB

BIN
webapp/img/webicons/background-1.png

Before After
Width: 512  |  Height: 512  |  Size: 3.4 KiB

BIN
webapp/img/webicons/background.png

Before After
Width: 512  |  Height: 512  |  Size: 13 KiB

BIN
webapp/img/webicons/browser-1.png

Before After
Width: 512  |  Height: 512  |  Size: 13 KiB

BIN
webapp/img/webicons/browser-2.png

Before After
Width: 512  |  Height: 512  |  Size: 14 KiB

BIN
webapp/img/webicons/browser-3.png

Before After
Width: 512  |  Height: 512  |  Size: 12 KiB

BIN
webapp/img/webicons/browser-4.png

Before After
Width: 512  |  Height: 512  |  Size: 17 KiB

BIN
webapp/img/webicons/browser-5.png

Before After
Width: 512  |  Height: 512  |  Size: 12 KiB

BIN
webapp/img/webicons/browser-6.png

Before After
Width: 512  |  Height: 512  |  Size: 18 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save