commonroutesApp/www/js/controllers.js
www/js/controllers.jsRaw
1
2//var urlapi="http://localhost:3000/api/";
3var urlapi="https://collectivecar.paas.primustech.io/api/";
4
5
6//localStorage.setItem("c_username", "user2");
7//localStorage.setItem("c_token", "");
8
9
10angular.module('starter.controllers', ['pascalprecht.translate'])
11
12.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http, $window, $ionicLoading) {
13 // With the new view caching in Ionic, Controllers are only called
14 // when they are recreated or on app start, instead of every page change.
15 // To listen for when this page is active (for example, to refresh data),
16 // listen for the $ionicView.enter event:
17 //$scope.$on('$ionicView.enter', function(e) {
18 //});
19
20 // Form data for the login modal
21 $scope.loginData = {};
22 $scope.signupData= {};
23
24 $scope.storageusername=localStorage.getItem("c_username");
25 $scope.storageavatar=localStorage.getItem("c_avatar");
26 // Create the login modal that we will use later
27 $ionicModal.fromTemplateUrl('templates/login.html', {
28 scope: $scope
29 }).then(function(modal) {
30 $scope.modalLogin = modal;
31 });
32 $ionicModal.fromTemplateUrl('templates/signup.html', {
33 scope: $scope
34 }).then(function(modal) {
35 $scope.modalSignup = modal;
36 });
37
38 // Triggered in the login modal to close it
39 $scope.closeLogin = function() {
40 $scope.modalLogin.hide();
41 };
42 $scope.closeSignup = function() {
43 $scope.modalSignup.hide();
44 };
45
46 // Open the login modal
47 $scope.login = function() {
48 $scope.modalLogin.show();
49 };
50 $scope.signup = function() {
51 $scope.modalSignup.show();
52 };
53
54 // Perform the login action when the user submits the login form
55 $scope.doLogin = function() {
56 console.log('Doing login', $scope.loginData);
57
58 $http({
59 url: urlapi + 'auth',
60 method: "POST",
61 data: $scope.loginData
62 })
63 .then(function(response) {
64 // success
65 console.log("response: ");
66 console.log(response.data);
67 if(response.data.success==true)
68 {
69 console.log("login successful");
70 localStorage.setItem("c_username", $scope.loginData.username);
71 localStorage.setItem("c_token", response.data.token);
72 localStorage.setItem("c_userid", response.data.userid);
73 localStorage.setItem("c_avatar", response.data.avatar);
74
75 localStorage.setItem("c_userdata", JSON.stringify(response.data.userdata));
76 }else{
77 console.log("login failed");
78 }
79 $timeout(function() {
80 $scope.closeLogin();
81 $window.location.reload(true);
82 }, 1000);
83
84 },
85 function(response) { // optional
86 // failed
87 console.log(response);
88 });
89
90 };
91 $scope.doSignup = function() {
92 console.log('Doing signup', $scope.signupData);
93 if($scope.emptyParams($scope.signupData))
94 {
95 $http({
96 url: urlapi + 'users',
97 method: "POST",
98 data: $scope.signupData
99 })
100 .then(function(response) {
101 // success
102 console.log("response: ");
103 console.log(response.data);
104 $timeout(function() {
105 $scope.closeSignup();
106 $scope.login();
107 }, 1000);
108
109 },
110 function(response) { // optional
111 // failed
112 $ionicLoading.show({ template: 'Username already taken', noBackdrop: true, duration: 2000 });
113 });
114 }else{
115 $ionicLoading.show({ template: 'First complete all parameters', noBackdrop: true, duration: 2000 });
116 }
117
118 };
119 $scope.emptyParams = function(obj){
120 if(obj.username==undefined)
121 {
122 return(false);
123 }
124 if(obj.password==undefined)
125 {
126 return(false);
127 }
128 if(obj.mail==undefined)
129 {
130 return(false);
131 }
132 if(obj.phone==undefined)
133 {
134 return(false);
135 }
136 if(obj.avatar==undefined)
137 {
138 return(false);
139 }
140 return(true);
141 };
142 $scope.avatars=[
143 "turtle",
144 "cat",
145 "toucan",
146 "racoon",
147 "tiger",
148 "squirrel",
149 "sheep",
150 "penguin",
151 "panda",
152 "owl",
153 "pelican",
154 "whale",
155 "snake",
156 "mouse",
157 "giraffe",
158 "macaw",
159 "lion",
160 "llama",
161 "kangaroo",
162 "hen",
163 "frog",
164 "clown-fish",
165 "chameleon",
166 "octopus"
167 ];
168 $scope.avatarSelect = function(avat){
169 $scope.signupData.avatar=avat;
170 //alert($scope.signupData.avatar);
171 };
172 $scope.logout = function(){
173 localStorage.removeItem("c_username");
174 localStorage.removeItem("c_token");
175 localStorage.removeItem("c_avatar");
176 localStorage.removeItem("c_userid");
177 localStorage.removeItem("c_userdata");
178 $window.location.reload(true);
179 };
180
181 /* if no logged, suggest to login */
182 if(localStorage.getItem('c_token')){// adding token to the headers
183 $http.defaults.headers.common['X-Access-Token'] = localStorage.getItem('c_token');
184 }else{
185 setTimeout(function(){
186 $scope.login();
187 },1000);
188 }
189})
190
191
192.controller('TravelsCtrl', function($scope, $http, $ionicModal, $timeout, $ionicLoading) {
193 if(localStorage.getItem('c_token')){// adding token to the headers
194 //console.log("token added to headers in run module");
195 //console.log($http.defaults);
196 $http.defaults.headers.post['X-Access-Token'] = localStorage.getItem('c_token');
197 //$http.defaults.headers.post['Content-Type'] = "application/x-www-form-urlencoded; charset=UTF-8";
198 //console.log($http.defaults.headers);
199 }
200 /*if(localStorage.getItem('c_token')){// adding token to the headers
201 $http.defaults.headers.token = localStorage.getItem('c_token');
202 }*/
203
204 $scope.travels="";
205
206 $scope.travels=JSON.parse(localStorage.getItem('c_travels'));
207 $scope.userdata=JSON.parse(localStorage.getItem('c_userdata'));
208 console.log($scope.userdata);
209
210 $scope.doRefresh = function() {
211 /* travels refresh: */
212 $http.get(urlapi + 'travels')
213 .success(function(data, status, headers,config){
214 console.log('data success');
215 console.log(data); // for browser console
216 $scope.travels = data; // for UI
217 localStorage.setItem('c_travels', JSON.stringify($scope.travels));
218 localStorage.setItem('c_travelsLastDate', JSON.stringify(new Date()));
219 $scope.$broadcast('scroll.refreshComplete');//refresher stop
220
221 })
222 .error(function(data, status, headers,config){
223 console.log('data error');
224 $scope.$broadcast('scroll.refreshComplete');//refresher stop
225 $ionicLoading.show({ template: 'Error connecting server', noBackdrop: true, duration: 2000 });
226
227 })
228 .then(function(result){
229 travels = result.data;
230 $ionicLoading.show({ template: 'Travels actualized from server!', noBackdrop: true, duration: 2000 });
231 });
232
233 /* users refresh: */
234 $http.get(urlapi + 'users')
235 .success(function(data, status, headers, config){
236 console.log('data success');
237 console.log(data); // for browser console
238 $scope.users = data; // for UI
239 localStorage.setItem('c_users', JSON.stringify($scope.users));
240 $scope.$broadcast('scroll.refreshComplete');//refresher stop
241 })
242 .error(function(data, status, headers,config){
243 console.log('data error');
244 $scope.$broadcast('scroll.refreshComplete');//refresher stop
245 })
246 .then(function(result){
247 users = result.data;
248 });
249 };
250 $scope.newtravel={};
251 /*$scope.newtravel={
252 title: "prova",
253 from: "prova",
254 to: "prova",
255 seats: 3,
256 package: true,
257 phone: 123,
258 telegram: "telusr",
259 description: "this is the description of prova"
260 };*/
261
262 // Create the login modal that we will use later
263 $ionicModal.fromTemplateUrl('templates/newofferingtravel.html', {
264 scope: $scope
265 }).then(function(modal) {
266 $scope.modalOffering = modal;
267 });
268
269 // Create the login modal that we will use later
270 $ionicModal.fromTemplateUrl('templates/newaskingtravel.html', {
271 scope: $scope
272 }).then(function(modal) {
273 $scope.modalAsking = modal;
274 });
275
276 $ionicModal.fromTemplateUrl('templates/newaskingpackage.html', {
277 scope: $scope
278 }).then(function(modal) {
279 $scope.modalPackage = modal;
280 });
281
282 // Triggered in the login modal to close it
283 $scope.closeNewOfferingTravel = function() {
284 $scope.modalOffering.hide();
285 };
286 // Triggered in the login modal to close it
287 $scope.closeNewAskingTravel = function() {
288 $scope.modalAsking.hide();
289 };
290 $scope.closeNewAskingPackage = function() {
291 $scope.modalPackage.hide();
292 };
293
294 // Open the login modal
295 $scope.showNewOfferingTravel = function() {
296 $scope.modalOffering.show();
297 };
298 // Open the login modal
299 $scope.showNewAskingTravel = function() {
300 $scope.modalAsking.show();
301 };
302 $scope.showNewAskingPackage = function() {
303 $scope.modalPackage.show();
304 };
305
306 // Perform the login action when the user submits the login form
307 $scope.doNewOfferingTravel = function() {
308 console.log('Doing new travel', $scope.newtravel);
309 $scope.newtravel.icon="lorry";
310 $scope.newtravel.generateddate=$scope.newtravel.date;
311 $scope.newtravel.owner=localStorage.getItem("c_username");
312 $scope.newtravel.telegram=JSON.parse(localStorage.getItem("c_userdata")).telegram;
313 $scope.newtravel.phone=JSON.parse(localStorage.getItem("c_userdata")).phone;
314 $scope.newtravel.modality="offering";
315 //$scope.newtravel.token=localStorage.getItem("c_token");
316 console.log($scope.newtravel);
317 $http({
318 url: urlapi + 'travels',
319 method: "POST",
320 data: $scope.newtravel
321 })
322 .then(function(response) {
323 // success
324 console.log("response: ");
325 console.log(response);
326 //$scope.newtravel._id=response.data._id;
327 //$scope.travels.push($scope.newtravel);
328 $scope.travels=response.data;
329 localStorage.setItem('c_travels', JSON.stringify($scope.travels));
330 localStorage.setItem('c_travelsLastDate', JSON.stringify(new Date()));
331 $scope.newtravel={};
332 if(response.data.success==false){
333
334 $ionicLoading.show({ template: 'failed to generate new travel', noBackdrop: true, duration: 2000 });
335 }
336 },
337 function(response) { // optional
338 // failed
339 });
340
341 // Simulate a login delay. Remove this and replace with your login
342 // code if using a login system
343 $timeout(function() {
344 $scope.closeNewOfferingTravel();
345 }, 1000);
346 };
347
348 $scope.doNewAskingTravel = function() {
349 console.log('Doing new travel', $scope.newtravel);
350 $scope.newtravel.icon="lorry";
351 $scope.newtravel.generateddate=$scope.newtravel.date;
352 $scope.newtravel.owner=localStorage.getItem("c_username");
353 $scope.newtravel.telegram=JSON.parse(localStorage.getItem("c_userdata")).telegram;
354 $scope.newtravel.phone=JSON.parse(localStorage.getItem("c_userdata")).phone;
355
356 $scope.newtravel.modality="asking";
357 console.log($scope.newtravel);
358 $http({
359 url: urlapi + 'travels',
360 method: "POST",
361 data: $scope.newtravel
362 })
363 .then(function(response) {
364 // success
365 console.log("response: ");
366 console.log(response);
367 //$scope.newtravel._id=response.data._id;
368 //$scope.travels.push($scope.newtravel);
369 $scope.travels=response.data;
370 localStorage.setItem('c_travels', JSON.stringify($scope.travels));
371 localStorage.setItem('c_travelsLastDate', JSON.stringify(new Date()));
372 $scope.newtravel={};
373 if(response.data.success==false){
374
375 $ionicLoading.show({ template: 'failed to generate new asking travel', noBackdrop: true, duration: 2000 });
376 }
377 },
378 function(response) { // optional
379 // failed
380 });
381
382 // Simulate a login delay. Remove this and replace with your login
383 // code if using a login system
384 $timeout(function() {
385 $scope.closeNewAskingTravel();
386 }, 1000);
387 };
388
389 $scope.doNewAskingPackage = function() {
390 console.log('Doing new package', $scope.newtravel);
391 $scope.newtravel.icon="lorry";
392 $scope.newtravel.generateddate=$scope.newtravel.date;
393 $scope.newtravel.owner=localStorage.getItem("c_username");
394 $scope.newtravel.telegram=JSON.parse(localStorage.getItem("c_userdata")).telegram;
395 $scope.newtravel.phone=JSON.parse(localStorage.getItem("c_userdata")).phone;
396
397 $scope.newtravel.package=true;
398
399 $scope.newtravel.modality="package";
400 console.log($scope.newtravel);
401 $http({
402 url: urlapi + 'travels',
403 method: "POST",
404 data: $scope.newtravel
405 })
406 .then(function(response) {
407 // success
408 console.log("response: ");
409 console.log(response);
410 //$scope.newtravel._id=response.data._id;
411 //$scope.travels.push($scope.newtravel);
412 $scope.travels=response.data;
413 localStorage.setItem('c_travels', JSON.stringify($scope.travels));
414 localStorage.setItem('c_travelsLastDate', JSON.stringify(new Date()));
415 $scope.newtravel={};
416 if(response.data.success==false){
417
418 $ionicLoading.show({ template: 'failed to generate new asking package', noBackdrop: true, duration: 2000 });
419 }
420 },
421 function(response) { // optional
422 // failed
423 });
424
425 // Simulate a login delay. Remove this and replace with your login
426 // code if using a login system
427 $timeout(function() {
428 $scope.closeNewAskingPackage();
429 }, 1000);
430 };
431})
432
433.controller('TravelCtrl', function($scope, $stateParams, $http, $ionicModal, $ionicPopup, $filter) {
434 if(localStorage.getItem('c_token')){// adding token to the headers
435 $http.defaults.headers.common['X-Access-Token'] = localStorage.getItem('c_token');
436 }
437 $scope.storageusername=localStorage.getItem("c_username");
438 console.log($stateParams.travelId);
439 $scope.travels= JSON.parse(localStorage.getItem('c_travels'));
440 $scope.travel = $filter('filter')($scope.travels, $stateParams.travelId, true)[0];
441
442 /*$http.get(urlapi + 'travels/comment/'+$stateParams.travelId)
443 .success(function(data, status, headers,config){
444 console.log(data); // for browser console
445 $scope.comments = data; // for UI
446 })
447 .error(function(data, status, headers,config){
448 console.log('data error');
449 })
450 .then(function(result){
451 comments = result.data;
452 });*/
453
454 $scope.deleteTravel = function(){
455
456 var confirmPopup = $ionicPopup.confirm({
457 title: 'Deleting publication',
458 template: 'Are you sure you want to delete <b>'+ $scope.travel.title+'</b>?'
459 });
460 confirmPopup.then(function(res) {
461 if(res) {
462 console.log('You are sure');
463 console.log("delete travel: " + $stateParams.travelId);
464 $http({
465 url: urlapi + 'travels/' + $stateParams.travelId,
466 method: "DELETE"
467 })
468 .then(function(response) {
469 console.log(response);
470 },
471 function(response) { // optional
472 // failed
473 });
474 } else {
475 console.log('You are not sure');
476 }
477 });
478
479
480 };
481 $scope.joinTravel = function(){
482 $scope.newjoin={
483 //travelId: $stateParams.travelId,
484 joinedUserId: localStorage.getItem("c_userid"),
485 joinedUsername: localStorage.getItem("c_username"),
486 joinedAvatar: localStorage.getItem("c_avatar")
487 };
488 $http({
489 url: urlapi + 'travels/'+ $stateParams.travelId+'/join',
490 method: "POST",
491 data: $scope.newjoin
492 })
493 .then(function(response) {
494 // success
495 console.log("response: ");
496 console.log(response);
497
498 $scope.travels=response.data;
499 localStorage.setItem('c_travels', JSON.stringify($scope.travels));
500 localStorage.setItem('c_travelsLastDate', JSON.stringify(new Date()));
501 $scope.travel = $filter('filter')($scope.travels, $stateParams.travelId, true)[0];
502
503 },
504 function(response) { // optional
505 // failed
506 });
507 };
508 $scope.unjoinTravel = function(){
509 console.log("unjoin");
510 $scope.unjoin={
511 travelId: $stateParams.travelId,
512 joinedUserId: localStorage.getItem("c_userid"),
513 joinedUsername: localStorage.getItem("c_username"),
514 joinedAvatar: localStorage.getItem("c_avatar")
515 };
516 $http({
517 url: urlapi + 'travels/'+ $stateParams.travelId+'/unjoin',
518 method: "POST",
519 data: $scope.unjoin
520 })
521 .then(function(response) {
522 // success
523 console.log("response: ");
524 console.log(response);
525
526 $scope.travels=response.data;
527 localStorage.setItem('c_travels', JSON.stringify($scope.travels));
528 localStorage.setItem('c_travelsLastDate', JSON.stringify(new Date()));
529 $scope.travel = $filter('filter')($scope.travels, $stateParams.travelId, true)[0];
530
531 },
532 function(response) { // optional
533 // failed
534 });
535 };
536
537 /* adding comment */
538 $scope.doingNewComment=false;
539 $scope.newComment={};
540
541 $scope.showNewComment = function() {
542 $scope.doingNewComment=true;
543 };
544 $scope.closeNewComment = function() {
545 $scope.doingNewComment=false;
546 };
547 $scope.doNewComment = function() {
548 $scope.newComment.commentUserId=localStorage.getItem("c_userid");
549 $scope.newComment.commentUsername=localStorage.getItem("c_username");
550 $scope.newComment.commentAvatar=localStorage.getItem("c_avatar");
551console.log($scope.newComment);
552 $http({
553 url: urlapi + 'travels/'+ $stateParams.travelId+'/comment',
554 method: "POST",
555 data: $scope.newComment
556 })
557 .then(function(response) {
558 // success
559 console.log("newComment added to server: " + response);
560 console.log(response);
561 $scope.travels=response.data;
562 localStorage.setItem('c_travels', JSON.stringify($scope.travels));
563 localStorage.setItem('c_travelsLastDate', JSON.stringify(new Date()));
564 $scope.travel = $filter('filter')($scope.travels, $stateParams.travelId, true)[0];
565
566 if(response.data.success==false){
567
568 $ionicLoading.show({ template: 'failed to generate new asking package', noBackdrop: true, duration: 2000 });
569 }
570 },
571 function(response) { // optional
572 // failed
573 });
574 $scope.closeNewComment();
575 };
576 console.log("a");
577 console.log($scope.storageusername);
578 console.log($scope.travel.owner);
579
580
581 $scope.arrayObjectIndexOf = function(myArray, searchTerm, property) {
582 //console.log(myArray+", "+searchTerm+", "+property);
583 if(myArray)
584 {
585 for(var i = 0, len = myArray.length; i < len; i++) {
586 if (myArray[i][property] === searchTerm){
587 //console.log("i: " + i);
588 return i;
589 }
590 }
591 }
592 //console.log("i: -1");
593 return -1;
594 };
595})
596
597.controller('UsersCtrl', function($scope, $http, $ionicModal, $timeout, $ionicLoading) {
598 $scope.users="";
599
600 $scope.users=JSON.parse(localStorage.getItem('c_users'));
601
602 $scope.doRefresh = function() {
603 /* travels refresh: */
604 $http.get(urlapi + 'travels')
605 .success(function(data, status, headers,config){
606 console.log('data success');
607 console.log(data); // for browser console
608 $scope.travels = data; // for UI
609 localStorage.setItem('c_travels', JSON.stringify($scope.travels));
610 localStorage.setItem('c_travelsLastDate', JSON.stringify(new Date()));
611 $scope.$broadcast('scroll.refreshComplete');//refresher stop
612
613 })
614 .error(function(data, status, headers,config){
615 console.log('data error');
616 $scope.$broadcast('scroll.refreshComplete');//refresher stop
617 $ionicLoading.show({ template: 'Error connecting server', noBackdrop: true, duration: 2000 });
618
619 })
620 .then(function(result){
621 travels = result.data;
622 $ionicLoading.show({ template: 'Travels actualized from server!', noBackdrop: true, duration: 2000 });
623 });
624
625 /* users refresh: */
626 $http.get(urlapi + 'users')
627 .success(function(data, status, headers, config){
628 console.log('data success');
629 console.log(data); // for browser console
630 $scope.users = data; // for UI
631 localStorage.setItem('c_users', JSON.stringify($scope.users));
632 $scope.$broadcast('scroll.refreshComplete');//refresher stop
633 })
634 .error(function(data, status, headers,config){
635 console.log('data error');
636 $scope.$broadcast('scroll.refreshComplete');//refresher stop
637 })
638 .then(function(result){
639 users = result.data;
640 });
641 };
642})
643
644.controller('UserCtrl', function($scope, $stateParams, $http, $filter) {
645 if(localStorage.getItem('c_token')){// adding token to the headers
646 $http.defaults.headers.common['X-Access-Token'] = localStorage.getItem('c_token');
647 }
648 $scope.storageusername=localStorage.getItem("c_username");
649 $scope.users= JSON.parse(localStorage.getItem('c_users'));
650 $scope.user = $filter('filter')($scope.users, $stateParams.username, true)[0];
651 //$scope.user="";
652 console.log($stateParams.username);
653 /*$http.get(urlapi + 'users/byusername/'+$stateParams.username)
654 .success(function(data, status, headers,config){
655 console.log('data success');
656 console.log(data); // for browser console
657 $scope.user = data; // for UI
658 })
659 .error(function(data, status, headers,config){
660 console.log('data error');
661 })
662 .then(function(result){
663 user = result.data;
664 });*/
665
666 $http.get(urlapi + 'travels/user/'+$stateParams.username)
667 .success(function(data, status, headers,config){
668 console.log('data success');
669 console.log(data); // for browser console
670 $scope.travels = data; // for UI
671 })
672 .error(function(data, status, headers,config){
673 console.log('data error');
674 })
675 .then(function(result){
676 travels = result.data;
677 });
678
679
680
681 $scope.favUser = function(){
682 $scope.newfav={
683 //travelId: $stateParams.travelId,
684 userId: localStorage.getItem("c_userid"),
685 username: localStorage.getItem("c_username"),
686 avatar: localStorage.getItem("c_avatar")
687 };
688 $http({
689 //url: urlapi + 'users/'+ $stateParams.username+'/fav',
690 url: urlapi + 'users/'+ $scope.user._id+'/fav',
691 method: "POST",
692 data: $scope.newfav
693 })
694 .then(function(response) {
695 // success
696 console.log("response: ");
697 console.log(response);
698
699 $scope.users=response.data;
700 localStorage.setItem('c_users', JSON.stringify($scope.users));
701 $scope.user = $filter('filter')($scope.users, $stateParams.username, true)[0];
702
703 },
704 function(response) { // optional
705 // failed
706 });
707 };
708 $scope.unfavUser = function(){
709 console.log("unfav");
710 $scope.unfav={
711 userId: localStorage.getItem("c_userid"),
712 username: localStorage.getItem("c_username"),
713 avatar: localStorage.getItem("c_avatar")
714 };
715 $http({
716 //url: urlapi + 'users/'+ $stateParams.username+'/fav',
717 url: urlapi + 'users/'+ $scope.user._id+'/unfav',
718 method: "POST",
719 data: $scope.unfav
720 })
721 .then(function(response) {
722 // success
723 console.log("response: ");
724 console.log(response);
725
726 $scope.users=response.data;
727 localStorage.setItem('c_users', JSON.stringify($scope.users));
728 $scope.user = $filter('filter')($scope.users, $stateParams.username, true)[0];
729
730 },
731 function(response) { // optional
732 // failed
733 });
734 };
735
736 $scope.arrayObjectIndexOf = function(myArray, searchTerm, property) {
737 if(myArray){
738 for(var i = 0, len = myArray.length; i < len; i++) {
739 if (myArray[i][property] === searchTerm){
740 return i;
741 }
742 }
743 }
744 return -1;
745 };
746})
747.controller('SettingsCtrl', function($scope, $stateParams, $translate) {
748 if(localStorage.getItem('lang'))//initialization
749 {
750 $scope.lang=localStorage.getItem('lang');
751 }else{
752 localStorage.setItem('lang', 'english');
753 $scope.lang=localStorage.getItem('lang');
754 }
755
756 $scope.langChange = function(lang){
757 console.log(lang);
758 window.localStorage.setItem('lang', lang);
759 $translate.use(lang);
760 };
761})
762.controller('HelpCtrl', function($scope, $stateParams, $translate) {
763 console.log("help page");
764});