@ -0,0 +1,74 @@ |
|||||
|
<div class="container"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12"> |
||||
|
<h2> |
||||
|
Search: {{searchString}} |
||||
|
</h2> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-6"> |
||||
|
<div class="panel"> |
||||
|
<div class="panel-heading c_deepPurple300"> |
||||
|
<h3 class="panel-title">Users</h3> |
||||
|
</div> |
||||
|
<div class="panel-body" style="max-height: 500px;overflow-y: scroll;"> |
||||
|
<div class="list-group"> |
||||
|
<a ng-repeat="user in users" ng-href="#!/user/{{user._id}}" class="list-group-item"> |
||||
|
<div class="row-picture"> |
||||
|
<img class="circle" ng-src="{{user.avatar}}" alt="icon"> |
||||
|
</div> |
||||
|
<div class="row-content"> |
||||
|
<h4 class="list-group-item-heading">{{user.username}}</h4> |
||||
|
|
||||
|
<p class="list-group-item-text">{{user.description}}</p> |
||||
|
<p class="list-group-item-text">{{user.travels.length}} published travels</p> |
||||
|
<p class="list-group-item-text">{{user.likes.length}} likes</p> |
||||
|
</div> |
||||
|
<div class="list-group-separator"></div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-sm-6"> |
||||
|
<div class="panel"> |
||||
|
<div class="panel-heading c_deepPurple300"> |
||||
|
<h3 class="panel-title">Travels</h3> |
||||
|
</div> |
||||
|
<div class="panel-body" style="max-height: 500px;overflow-y: scroll;"> |
||||
|
<table class="table table-striped table-hover "> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th>Type</th> |
||||
|
<th>Title</th> |
||||
|
<th>Date</th> |
||||
|
<th>User</th> |
||||
|
<th>nºJoins</th> |
||||
|
<th></th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr ng-repeat="travel in travels"> |
||||
|
<td> |
||||
|
<i ng-show="travel.type=='offering'" class="fa fa-car fa-2x"></i> |
||||
|
<i ng-show="travel.type=='asking'" class="fa fa-question fa-2x"></i> |
||||
|
<i ng-show="travel.type=='package'" class="fa fa-archive fa-2x"></i> |
||||
|
</td> |
||||
|
<td>{{travel.title}}</td> |
||||
|
<td>{{travel.date | date}}</td> |
||||
|
<td> |
||||
|
<a ng-href="#!/user/{{travel.user._id}}"> |
||||
|
{{travel.user.username}} |
||||
|
</a> |
||||
|
</td> |
||||
|
<td>{{travel.joins.length}}</td> |
||||
|
<td><a ng-href="#!/travel/{{travel._id}}">View</a></td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
@ -0,0 +1,28 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
angular.module('app.search', ['ngRoute']) |
||||
|
|
||||
|
.config(['$routeProvider', function($routeProvider) { |
||||
|
$routeProvider.when('/search/:searchstring', { |
||||
|
templateUrl: 'views/search/search.html', |
||||
|
controller: 'SearchCtrl' |
||||
|
}); |
||||
|
}]) |
||||
|
|
||||
|
.controller('SearchCtrl', function($scope, $http, $routeParams) { |
||||
|
$scope.users = []; |
||||
|
$scope.travels = []; |
||||
|
$scope.loadMorePagination = true; |
||||
|
$scope.page = 0; |
||||
|
$scope.searchString = $routeParams.searchstring; |
||||
|
$http.get(urlapi + 'search/' + $routeParams.searchstring) |
||||
|
.then(function(data) { |
||||
|
console.log('data success travels'); |
||||
|
console.log(data); |
||||
|
$scope.users = data.data.users; |
||||
|
$scope.travels = data.data.travels; |
||||
|
|
||||
|
}, function(data) { |
||||
|
console.log('data error'); |
||||
|
}); |
||||
|
}); |
@ -0,0 +1,54 @@ |
|||||
|
<div class="container"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-4"> |
||||
|
<div class="panel"> |
||||
|
<div class="panel-heading c_deepPurple300"> |
||||
|
<h3 class="panel-title">All travels</h3> |
||||
|
</div> |
||||
|
<div class="panel-body" style="max-height: 500px;overflow-y: scroll;"> |
||||
|
<table class="table table-striped table-hover "> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th>Type</th> |
||||
|
<th>Title</th> |
||||
|
<th>Date</th> |
||||
|
<th>User</th> |
||||
|
<th>nºJoins</th> |
||||
|
<th></th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr ng-repeat="travel in travels"> |
||||
|
<td> |
||||
|
<i ng-show="travel.type=='offering'" class="fa fa-car fa-2x"></i> |
||||
|
<i ng-show="travel.type=='asking'" class="fa fa-question fa-2x"></i> |
||||
|
<i ng-show="travel.type=='package'" class="fa fa-archive fa-2x"></i> |
||||
|
</td> |
||||
|
<td>{{travel.title}}</td> |
||||
|
<td>{{travel.date | date}}</td> |
||||
|
<td> |
||||
|
<a ng-href="#!/user/{{travel.user._id}}"> |
||||
|
{{travel.user.username}} |
||||
|
</a> |
||||
|
</td> |
||||
|
<td>{{travel.joins.length}}</td> |
||||
|
<td><a ng-href="#!/travel/{{travel._id}}">View</a></td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-sm-8"> |
||||
|
<div class="panel"> |
||||
|
<div class="panel-heading c_deepPurple300"> |
||||
|
<h3 class="panel-title">Map</h3> |
||||
|
</div> |
||||
|
<div class="panel-body"> |
||||
|
<leaflet width="100%" height="600px" markers="markers" paths="paths" center="center" |
||||
|
tiles="tiles" id="map-simple-map"></leaflet> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
@ -0,0 +1,73 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
angular.module('app.travels', ['ngRoute', 'ui-leaflet']) |
||||
|
|
||||
|
.config(['$routeProvider', function($routeProvider) { |
||||
|
$routeProvider.when('/travels', { |
||||
|
templateUrl: 'views/travels/travels.html', |
||||
|
controller: 'TravelsCtrl' |
||||
|
}); |
||||
|
}]) |
||||
|
|
||||
|
.controller('TravelsCtrl', function($scope, $http) { |
||||
|
$scope.travels = []; |
||||
|
$scope.loadMorePagination = true; |
||||
|
$scope.page = 0; |
||||
|
|
||||
|
//map
|
||||
|
$scope.center = {}; |
||||
|
$scope.bounds = {}; |
||||
|
$scope.markers = []; |
||||
|
$scope.paths = []; |
||||
|
$scope.tiles = { |
||||
|
url: "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", |
||||
|
options: { |
||||
|
attribution: '<a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
$http.get(urlapi + 'travels?page=' + $scope.page) |
||||
|
.then(function(data) { |
||||
|
console.log('data success'); |
||||
|
console.log(data); |
||||
|
$scope.travels = data.data; |
||||
|
//draw markers on map
|
||||
|
$scope.markers = []; |
||||
|
for (var i = 0; i < $scope.travels.length; i++) { |
||||
|
$scope.markers.push({ |
||||
|
lat: Number($scope.travels[i].from.lat), |
||||
|
lng: Number($scope.travels[i].from.long), |
||||
|
message: $scope.travels[i].from.name |
||||
|
}); |
||||
|
$scope.markers.push({ |
||||
|
lat: Number($scope.travels[i].to.lat), |
||||
|
lng: Number($scope.travels[i].to.long), |
||||
|
message: $scope.travels[i].to.name |
||||
|
}); |
||||
|
} |
||||
|
//draw lines between markers on map
|
||||
|
$scope.paths = {}; |
||||
|
var paths = []; |
||||
|
for (var i = 0; i < $scope.markers.length; i++) { |
||||
|
var x = $scope.markers[i].lat; |
||||
|
var y = $scope.markers[i].lng; |
||||
|
paths.push([x, y]); |
||||
|
} |
||||
|
$scope.paths = { |
||||
|
p1: { |
||||
|
color: '#9575CD', |
||||
|
weight: 8, |
||||
|
latlngs: paths |
||||
|
} |
||||
|
}; |
||||
|
//var maplines = L.polyline(lines).addTo(map)
|
||||
|
|
||||
|
$scope.center = { |
||||
|
lat: (Number($scope.travels[0].from.lat) + Number($scope.travels[0].to.lat)) / 2, |
||||
|
lng: (Number($scope.travels[0].from.long) + Number($scope.travels[0].to.long)) / 2, |
||||
|
zoom: 4 |
||||
|
}; |
||||
|
}, function(data) { |
||||
|
console.log('data error'); |
||||
|
}); |
||||
|
}); |
@ -0,0 +1,36 @@ |
|||||
|
<div class="container"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-3"> |
||||
|
<div class="panel"> |
||||
|
<div class="panel-heading c_deepPurple300"> |
||||
|
<h3 class="panel-title">All users</h3> |
||||
|
</div> |
||||
|
<div class="panel-body" style="max-height: 500px;overflow-y: scroll;"> |
||||
|
<div class="list-group"> |
||||
|
<a ng-repeat="user in users" ng-click="getUserNetwork(user)" class="list-group-item"> |
||||
|
<div class="row-picture"> |
||||
|
<img class="circle" ng-src="{{user.avatar}}" alt="icon"> |
||||
|
</div> |
||||
|
<div class="row-content"> |
||||
|
<h4 class="list-group-item-heading">{{user.username}}</h4> |
||||
|
|
||||
|
<p class="list-group-item-text">{{user.description}}</p> |
||||
|
<p class="list-group-item-text">{{user.travels.length}} published travels</p> |
||||
|
<p class="list-group-item-text">{{user.likes.length}} likes</p> |
||||
|
</div> |
||||
|
<div class="list-group-separator"></div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-sm-9"> |
||||
|
<div class="panel-heading c_deepPurple300"> |
||||
|
<h3 class="panel-title">Network</h3> |
||||
|
</div> |
||||
|
<div class="panel-body"> |
||||
|
<div id="mynetwork" style="height:500px;"></div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
@ -0,0 +1,98 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
angular.module('app.userNetwork', ['ngRoute']) |
||||
|
|
||||
|
.config(['$routeProvider', function($routeProvider) { |
||||
|
$routeProvider.when('/userNetwork', { |
||||
|
templateUrl: 'views/userNetwork/userNetwork.html', |
||||
|
controller: 'UserNetworkCtrl' |
||||
|
}); |
||||
|
}]) |
||||
|
|
||||
|
.controller('UserNetworkCtrl', function($scope, $http, $routeParams) { |
||||
|
$scope.data = []; |
||||
|
$scope.nodes = []; |
||||
|
$scope.edges = []; |
||||
|
var nodes, edges, container; |
||||
|
var options = { |
||||
|
layout: { |
||||
|
improvedLayout: false |
||||
|
}, |
||||
|
interaction: { |
||||
|
hover: true |
||||
|
}, |
||||
|
physics: { |
||||
|
stabilization: false, |
||||
|
//enabled: false
|
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
$scope.showMap = function() { |
||||
|
var nodes = $scope.nodes; |
||||
|
var edges = $scope.edges; |
||||
|
|
||||
|
var container = document.getElementById('mynetwork'); |
||||
|
var data = { |
||||
|
nodes: nodes, |
||||
|
edges: edges |
||||
|
}; |
||||
|
var network = new vis.Network(container, data, options); |
||||
|
network.on("click", function(params) { |
||||
|
params.event = "[original event]"; |
||||
|
//$scope.selectedNode = JSON.stringify(params, null, 4);
|
||||
|
$scope.selectedNode = params; |
||||
|
console.log($scope.selectedNode); |
||||
|
console.log($scope.selectedNode.nodes); |
||||
|
var options = { |
||||
|
// position: {x:positionx,y:positiony}, // this is not relevant when focusing on nodes
|
||||
|
scale: 1, |
||||
|
offset: { |
||||
|
x: 0, |
||||
|
y: 0 |
||||
|
}, |
||||
|
animation: { |
||||
|
duration: 500, |
||||
|
easingFunction: "easeInOutQuad" |
||||
|
} |
||||
|
}; |
||||
|
network.focus($scope.selectedNode.nodes[0], options); |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
$http.get(urlapi + 'admin/network') |
||||
|
.then(function(data, status, headers, config) { |
||||
|
console.log('data success'); |
||||
|
console.log(data); |
||||
|
|
||||
|
$scope.nodes = data.data.nodes; |
||||
|
$scope.edges = data.data.edges; |
||||
|
$scope.showMap(); |
||||
|
}, function(data, status, headers, config) { |
||||
|
console.log('data error'); |
||||
|
}); |
||||
|
$http.get(urlapi + 'users?page=' + $scope.page) |
||||
|
.then(function(data) { |
||||
|
console.log('data success'); |
||||
|
console.log(data); |
||||
|
$scope.users=data.data; |
||||
|
|
||||
|
}, function(data) { |
||||
|
console.log('data error'); |
||||
|
}); |
||||
|
|
||||
|
$scope.getUserNetwork = function(user) { |
||||
|
console.log(user); |
||||
|
$http.get(urlapi + 'admin/user/network/' + user._id) |
||||
|
.then(function(data, status, headers, config) { |
||||
|
console.log('data success'); |
||||
|
console.log(data); |
||||
|
$scope.nodes = data.data.nodes; |
||||
|
$scope.edges = data.data.edges; |
||||
|
$scope.showMap(); |
||||
|
}, function(data, status, headers, config) { |
||||
|
console.log('data error'); |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
}); |