Ver código fonte

Integration of statistics module

master
isymchych 9 anos atrás
pai
commit
a10f9437f1

+ 15
- 4
app.js Ver arquivo

@@ -18,6 +18,10 @@ import RoomnameGenerator from './modules/util/RoomnameGenerator';
18 18
 import CQEvents from './service/connectionquality/CQEvents';
19 19
 import UIEvents from './service/UI/UIEvents';
20 20
 
21
+import UI from "./modules/UI/UI";
22
+import statistics from "./modules/statistics/statistics";
23
+import settings from "./modules/settings/Settings";
24
+
21 25
 import {openConnection} from './modules/connection';
22 26
 import AuthHandler from './modules/AuthHandler';
23 27
 
@@ -80,6 +84,10 @@ function buildRoomName () {
80 84
 
81 85
 
82 86
 const APP = {
87
+    UI,
88
+    statistics,
89
+    settings,
90
+
83 91
     init () {
84 92
         let roomName = buildRoomName();
85 93
         this.conference = {
@@ -94,29 +102,28 @@ const APP = {
94 102
             },
95 103
             muteAudio (mute) {
96 104
                 APP.UI.eventEmitter.emit(UIEvents.AUDIO_MUTED, mute);
105
+                APP.statistics.onAudioMute(mute);
97 106
             },
98 107
             toggleAudioMuted () {
99 108
                 this.muteAudio(!this.audioMuted);
100 109
             },
101 110
             muteVideo (mute) {
102 111
                 APP.UI.eventEmitter.emit(UIEvents.VIDEO_MUTED, mute);
112
+                APP.statistics.onVideoMute(mute);
103 113
             },
104 114
             toggleVideoMuted () {
105 115
                 this.muteVideo(!this.videoMuted);
106 116
             }
107 117
         };
108 118
 
109
-        this.UI = require("./modules/UI/UI");
110 119
         this.API = require("./modules/API/API");
111 120
         this.connectionquality =
112 121
             require("./modules/connectionquality/connectionquality");
113
-        this.statistics = require("./modules/statistics/statistics");
114 122
         this.desktopsharing =
115 123
             require("./modules/desktopsharing/desktopsharing");
116 124
         this.keyboardshortcut =
117 125
             require("./modules/keyboardshortcut/keyboardshortcut");
118 126
         this.translation = require("./modules/translation/translation");
119
-        this.settings = require("./modules/settings/Settings");
120 127
         this.configFetch = require("./modules/config/HttpConfigFetch");
121 128
     }
122 129
 };
@@ -126,6 +133,7 @@ function initConference(localTracks, connection) {
126 133
         openSctp: config.openSctp,
127 134
         disableAudioLevels: config.disableAudioLevels
128 135
     });
136
+    APP.conference._room = room; // FIXME do not use this
129 137
 
130 138
     const addTrack = (track) => {
131 139
         room.addTrack(track);
@@ -464,6 +472,8 @@ function initConference(localTracks, connection) {
464 472
                     window.location.pathname = "/";
465 473
                 }, 3000);
466 474
             }
475
+        }, function (err) {
476
+            console.error(err);
467 477
         });
468 478
     });
469 479
 
@@ -598,6 +608,7 @@ function createLocalTracks () {
598 608
         devices: ['audio', 'video']
599 609
     }).catch(function (err) {
600 610
         console.error('failed to create local tracks', err);
611
+        APP.statistics.onGetUserMediaFailed(err);
601 612
         return [];
602 613
     });
603 614
 }
@@ -688,7 +699,7 @@ $(document).ready(function () {
688 699
     URLProcessor.setConfigParametersFromUrl();
689 700
     APP.init();
690 701
 
691
-    APP.translation.init();
702
+    APP.translation.init(settings.getLanguage());
692 703
 
693 704
     if (APP.API.isEnabled()) {
694 705
         APP.API.init();

+ 1
- 2
modules/UI/Feedback.js Ver arquivo

@@ -1,11 +1,10 @@
1
-/* global $, config, interfaceConfig */
1
+/* global $, APP, config, interfaceConfig */
2 2
 
3 3
 /*
4 4
  * Created by Yana Stamcheva on 2/10/15.
5 5
  */
6 6
 var messageHandler = require("./util/MessageHandler");
7 7
 var callStats = require("../statistics/CallStats");
8
-var APP = require("../../app");
9 8
 
10 9
 /**
11 10
  * Constructs the html for the overall feedback window.

+ 3
- 4
modules/UI/UI.js Ver arquivo

@@ -16,16 +16,15 @@ import EtherpadManager from './etherpad/Etherpad';
16 16
 
17 17
 import VideoLayout from "./videolayout/VideoLayout";
18 18
 import SettingsMenu from "./side_pannels/settings/SettingsMenu";
19
+import Settings from "./../settings/Settings";
19 20
 
20 21
 var EventEmitter = require("events");
21
-var Settings = require("./../settings/Settings");
22 22
 UI.messageHandler = require("./util/MessageHandler");
23 23
 var messageHandler = UI.messageHandler;
24 24
 var JitsiPopover = require("./util/JitsiPopover");
25 25
 var CQEvents = require("../../service/connectionquality/CQEvents");
26 26
 var DesktopSharingEventTypes
27 27
     = require("../../service/desktopsharing/DesktopSharingEventTypes");
28
-var StatisticsEvents = require("../../service/statistics/Events");
29 28
 var Feedback = require("./Feedback");
30 29
 
31 30
 var eventEmitter = new EventEmitter();
@@ -611,8 +610,8 @@ UI.updateLocalStats = function (percent, stats) {
611 610
     VideoLayout.updateLocalConnectionStats(percent, stats);
612 611
 };
613 612
 
614
-UI.updateRemoteStats = function (jid, percent, stats) {
615
-    VideoLayout.updateConnectionStats(jid, percent, stats);
613
+UI.updateRemoteStats = function (id, percent, stats) {
614
+    VideoLayout.updateConnectionStats(id, percent, stats);
616 615
 };
617 616
 
618 617
 UI.markVideoInterrupted = function (interrupted) {

+ 6
- 0
modules/UI/videolayout/RemoteVideo.js Ver arquivo

@@ -296,6 +296,12 @@ RemoteVideo.prototype.showPeerContainer = function (state) {
296 296
 
297 297
 };
298 298
 
299
+RemoteVideo.prototype.updateResolution = function (resolution) {
300
+    if (this.connectionIndicator) {
301
+        this.connectionIndicator.updateResolution(resolution);
302
+    }
303
+};
304
+
299 305
 RemoteVideo.prototype.removeConnectionIndicator = function () {
300 306
     if (this.connectionIndicator)
301 307
         this.connectionIndicator.remove();

+ 15
- 13
modules/UI/videolayout/VideoLayout.js Ver arquivo

@@ -733,23 +733,25 @@ var VideoLayout = {
733 733
      * @param object
734 734
      */
735 735
     updateLocalConnectionStats (percent, object) {
736
-        var resolution = null;
736
+        let resolutions = {};
737 737
         if (object.resolution !== null) {
738
-            resolution = object.resolution;
739
-            object.resolution = resolution[APP.xmpp.myJid()];
740
-            delete resolution[APP.xmpp.myJid()];
738
+            resolutions = object.resolution;
739
+            object.resolution = resolutions[APP.conference.localId];
741 740
         }
742 741
         localVideoThumbnail.updateStatsIndicator(percent, object);
743
-        for (var jid in resolution) {
744
-            if (resolution[jid] === null)
745
-                continue;
746
-            var resourceJid = Strophe.getResourceFromJid(jid);
747
-            if (remoteVideos[resourceJid] &&
748
-                remoteVideos[resourceJid].connectionIndicator) {
749
-                remoteVideos[resourceJid].connectionIndicator.
750
-                    updateResolution(resolution[jid]);
742
+
743
+        Object.keys(resolutions).forEach(function (id) {
744
+            if (APP.conference.isLocalId(id)) {
745
+                return;
751 746
             }
752
-        }
747
+
748
+            let resolution = resolutions[id];
749
+            let remoteVideo = remoteVideos[id];
750
+
751
+            if (resolution && remoteVideo) {
752
+                remoteVideo.updateResolution(resolution);
753
+            }
754
+        });
753 755
     },
754 756
 
755 757
     /**

+ 7
- 6
modules/settings/Settings.js Ver arquivo

@@ -1,4 +1,4 @@
1
-var UsernameGenerator = require('../util/UsernameGenerator');
1
+import {generateUsername} from '../util/UsernameGenerator';
2 2
 
3 3
 var email = '';
4 4
 var displayName = '';
@@ -32,7 +32,7 @@ if (supportsLocalStorage()) {
32 32
 
33 33
     if (!window.localStorage.callStatsUserName) {
34 34
         window.localStorage.callStatsUserName
35
-            = UsernameGenerator.generateUsername();
35
+            = generateUsername();
36 36
         console.log('generated callstats uid',
37 37
             window.localStorage.callStatsUserName);
38 38
 
@@ -45,10 +45,10 @@ if (supportsLocalStorage()) {
45 45
 } else {
46 46
     console.log("local storage is not supported");
47 47
     userId = generateUniqueId();
48
-    callStatsUserName = UsernameGenerator.generateUsername();
48
+    callStatsUserName = generateUsername();
49 49
 }
50 50
 
51
-var Settings = {
51
+export default {
52 52
 
53 53
     /**
54 54
      * Sets the local user display name and saves it to local storage
@@ -99,10 +99,11 @@ var Settings = {
99 99
             language: language
100 100
         };
101 101
     },
102
+    getLanguage () {
103
+        return language;
104
+    },
102 105
     setLanguage: function (lang) {
103 106
         language = lang;
104 107
         window.localStorage.language = lang;
105 108
     }
106 109
 };
107
-
108
-module.exports = Settings;

+ 16
- 12
modules/statistics/AnalyticsAdapter.js Ver arquivo

@@ -1,15 +1,19 @@
1
-function NoopAnalytics() {}
2
-NoopAnalytics.prototype.sendEvent = function () {};
3
-
4
-function AnalyticsAdapter() {
5
-  var AnalyticsImpl = window.Analytics || NoopAnalytics;
6
-  this.analytics = new AnalyticsImpl();
1
+class NoopAnalytics {
2
+  sendEvent () {}
7 3
 }
8 4
 
9
-AnalyticsAdapter.prototype.sendEvent = function (action, data) {
10
-  try {
11
-    this.analytics.sendEvent.apply(this.analytics, arguments);
12
-  } catch (ignored) {}
13
-};
5
+const AnalyticsImpl = window.Analytics || NoopAnalytics;
6
+
7
+class AnalyticsAdapter {
8
+  constructor () {
9
+    this.analytics = new AnalyticsImpl();
10
+  }
11
+
12
+  sendEvent (...args) {
13
+    try {
14
+      this.analytics.sendEvent(...args);
15
+    } catch (ignored) {}
16
+  }
17
+}
14 18
 
15
-module.exports = new AnalyticsAdapter();
19
+export default new AnalyticsAdapter();

+ 0
- 128
modules/statistics/LocalStatsCollector.js Ver arquivo

@@ -1,128 +0,0 @@
1
-/* global config, AudioContext */
2
-/**
3
- * Provides statistics for the local stream.
4
- */
5
-
6
-var RTCBrowserType = require('../RTC/RTCBrowserType');
7
-var StatisticsEvents = require('../../service/statistics/Events');
8
-
9
-/**
10
- * Size of the webaudio analyzer buffer.
11
- * @type {number}
12
- */
13
-var WEBAUDIO_ANALYZER_FFT_SIZE = 2048;
14
-
15
-/**
16
- * Value of the webaudio analyzer smoothing time parameter.
17
- * @type {number}
18
- */
19
-var WEBAUDIO_ANALYZER_SMOOTING_TIME = 0.8;
20
-
21
-/**
22
- * Converts time domain data array to audio level.
23
- * @param samples the time domain data array.
24
- * @returns {number} the audio level
25
- */
26
-function timeDomainDataToAudioLevel(samples) {
27
-
28
-    var maxVolume = 0;
29
-
30
-    var length = samples.length;
31
-
32
-    for (var i = 0; i < length; i++) {
33
-        if (maxVolume < samples[i])
34
-            maxVolume = samples[i];
35
-    }
36
-
37
-    return parseFloat(((maxVolume - 127) / 128).toFixed(3));
38
-}
39
-
40
-/**
41
- * Animates audio level change
42
- * @param newLevel the new audio level
43
- * @param lastLevel the last audio level
44
- * @returns {Number} the audio level to be set
45
- */
46
-function animateLevel(newLevel, lastLevel) {
47
-    var value = 0;
48
-    var diff = lastLevel - newLevel;
49
-    if(diff > 0.2) {
50
-        value = lastLevel - 0.2;
51
-    }
52
-    else if(diff < -0.4) {
53
-        value = lastLevel + 0.4;
54
-    }
55
-    else {
56
-        value = newLevel;
57
-    }
58
-
59
-    return parseFloat(value.toFixed(3));
60
-}
61
-
62
-
63
-/**
64
- * <tt>LocalStatsCollector</tt> calculates statistics for the local stream.
65
- *
66
- * @param stream the local stream
67
- * @param interval stats refresh interval given in ms.
68
- * @constructor
69
- */
70
-function LocalStatsCollector(stream, interval,
71
-                             statisticsService, eventEmitter) {
72
-    window.AudioContext = window.AudioContext || window.webkitAudioContext;
73
-    this.stream = stream;
74
-    this.intervalId = null;
75
-    this.intervalMilis = interval;
76
-    this.eventEmitter = eventEmitter;
77
-    this.audioLevel = 0;
78
-    this.statisticsService = statisticsService;
79
-}
80
-
81
-/**
82
- * Starts the collecting the statistics.
83
- */
84
-LocalStatsCollector.prototype.start = function () {
85
-    if (config.disableAudioLevels || !window.AudioContext ||
86
-        RTCBrowserType.isTemasysPluginUsed())
87
-        return;
88
-
89
-    var context = new AudioContext();
90
-    var analyser = context.createAnalyser();
91
-    analyser.smoothingTimeConstant = WEBAUDIO_ANALYZER_SMOOTING_TIME;
92
-    analyser.fftSize = WEBAUDIO_ANALYZER_FFT_SIZE;
93
-
94
-
95
-    var source = context.createMediaStreamSource(this.stream);
96
-    source.connect(analyser);
97
-
98
-
99
-    var self = this;
100
-
101
-    this.intervalId = setInterval(
102
-        function () {
103
-            var array = new Uint8Array(analyser.frequencyBinCount);
104
-            analyser.getByteTimeDomainData(array);
105
-            var audioLevel = timeDomainDataToAudioLevel(array);
106
-            if (audioLevel != self.audioLevel) {
107
-                self.audioLevel = animateLevel(audioLevel, self.audioLevel);
108
-                self.eventEmitter.emit(
109
-                    StatisticsEvents.AUDIO_LEVEL,
110
-                    self.statisticsService.LOCAL_JID,
111
-                    self.audioLevel);
112
-            }
113
-        },
114
-        this.intervalMilis
115
-    );
116
-};
117
-
118
-/**
119
- * Stops collecting the statistics.
120
- */
121
-LocalStatsCollector.prototype.stop = function () {
122
-    if (this.intervalId) {
123
-        clearInterval(this.intervalId);
124
-        this.intervalId = null;
125
-    }
126
-};
127
-
128
-module.exports = LocalStatsCollector;

+ 13
- 5
modules/statistics/RTPStatsCollector.js Ver arquivo

@@ -385,7 +385,7 @@ StatsCollector.prototype.addStatsToBeLogged = function (reports) {
385 385
 
386 386
 StatsCollector.prototype.logStats = function () {
387 387
 
388
-    if(!APP.xmpp.sendLogs(this.statsToBeLogged))
388
+    if(!APP.conference._room.xmpp.sendLogs(this.statsToBeLogged))
389 389
         return;
390 390
     // Reset the stats
391 391
     this.statsToBeLogged.stats = {};
@@ -501,7 +501,7 @@ StatsCollector.prototype.processStatsReport = function () {
501 501
         var ssrc = getStatValue(now, 'ssrc');
502 502
         if(!ssrc)
503 503
             continue;
504
-        var jid = APP.xmpp.getJidFromSSRC(ssrc);
504
+        var jid = APP.conference._room.room.getJidBySSRC(ssrc);
505 505
         if (!jid && (Date.now() - now.timestamp) < 3000) {
506 506
             console.warn("No jid for ssrc: " + ssrc);
507 507
             continue;
@@ -647,12 +647,20 @@ StatsCollector.prototype.processStatsReport = function () {
647 647
         upload:
648 648
             calculatePacketLoss(lostPackets.upload, totalPackets.upload)
649 649
     };
650
+
651
+    let idResolution = {};
652
+    if (resolutions) { // use id instead of jid
653
+        Object.keys(resolutions).forEach(function (jid) {
654
+            let id = Strophe.getResourceFromJid(jid);
655
+            resolution[id] = resolutions[id];
656
+        });
657
+    }
650 658
     this.eventEmitter.emit(StatisticsEvents.CONNECTION_STATS,
651 659
         {
652 660
             "bitrate": PeerStats.bitrate,
653 661
             "packetLoss": PeerStats.packetLoss,
654 662
             "bandwidth": PeerStats.bandwidth,
655
-            "resolution": resolutions,
663
+            "resolution": idResolution,
656 664
             "transport": PeerStats.transport
657 665
         });
658 666
     PeerStats.transport = [];
@@ -681,7 +689,7 @@ StatsCollector.prototype.processAudioLevelReport = function () {
681 689
         }
682 690
 
683 691
         var ssrc = getStatValue(now, 'ssrc');
684
-        var jid = APP.xmpp.getJidFromSSRC(ssrc);
692
+        var jid = APP.conference._room.room.getJidBySSRC(ssrc);
685 693
         if (!jid) {
686 694
             if((Date.now() - now.timestamp) < 3000)
687 695
                 console.warn("No jid for ssrc: " + ssrc);
@@ -713,7 +721,7 @@ StatsCollector.prototype.processAudioLevelReport = function () {
713 721
             // but it seems to vary between 0 and around 32k.
714 722
             audioLevel = audioLevel / 32767;
715 723
             jidStats.setSsrcAudioLevel(ssrc, audioLevel);
716
-            if (jid != APP.xmpp.myJid()) {
724
+            if (jid != APP.conference._room.room.myroomjid) {
717 725
                 this.eventEmitter.emit(
718 726
                     StatisticsEvents.AUDIO_LEVEL, jid, audioLevel);
719 727
             }

+ 29
- 59
modules/statistics/statistics.js Ver arquivo

@@ -2,7 +2,6 @@
2 2
 /**
3 3
  * Created by hristo on 8/4/14.
4 4
  */
5
-var LocalStats = require("./LocalStatsCollector.js");
6 5
 var RTPStats = require("./RTPStatsCollector.js");
7 6
 var EventEmitter = require("events");
8 7
 var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
@@ -13,17 +12,8 @@ var StatisticsEvents = require("../../service/statistics/Events");
13 12
 
14 13
 var eventEmitter = new EventEmitter();
15 14
 
16
-var localStats = null;
17
-
18 15
 var rtpStats = null;
19 16
 
20
-function stopLocal() {
21
-    if (localStats) {
22
-        localStats.stop();
23
-        localStats = null;
24
-    }
25
-}
26
-
27 17
 function stopRemote() {
28 18
     if (rtpStats) {
29 19
         rtpStats.stop();
@@ -41,26 +31,15 @@ function startRemoteStats (peerconnection) {
41 31
     rtpStats.start();
42 32
 }
43 33
 
44
-function onStreamCreated(stream) {
45
-    if(stream.getOriginalStream().getAudioTracks().length === 0) {
46
-        return;
47
-    }
48
-
49
-    localStats = new LocalStats(stream.getOriginalStream(), 200, statistics,
50
-        eventEmitter);
51
-    localStats.start();
52
-}
53
-
54 34
 function onDisposeConference(onUnload) {
55 35
     CallStats.sendTerminateEvent();
56 36
     stopRemote();
57
-    if(onUnload) {
58
-        stopLocal();
37
+    if (onUnload) {
59 38
         eventEmitter.removeAllListeners();
60 39
     }
61 40
 }
62 41
 
63
-var statistics = {
42
+export default {
64 43
     /**
65 44
      * Indicates that this audio level is for local jid.
66 45
      * @type {string}
@@ -74,65 +53,61 @@ var statistics = {
74 53
         eventEmitter.removeListener(type, listener);
75 54
     },
76 55
     stop: function () {
77
-        stopLocal();
78 56
         stopRemote();
79
-        if(eventEmitter)
80
-        {
57
+        if (eventEmitter) {
81 58
             eventEmitter.removeAllListeners();
82 59
         }
83 60
     },
84
-    stopRemoteStatistics: function()
85
-    {
86
-        stopRemote();
61
+    onAudioMute (mute) {
62
+        CallStats.sendMuteEvent(mute, "audio");
63
+    },
64
+    onVideoMute (mute) {
65
+        CallStats.sendMuteEvent(mute, "video");
66
+    },
67
+    onGetUserMediaFailed (e) {
68
+       CallStats.sendGetUserMediaFailed(e);
87 69
     },
88 70
     start: function () {
89
-        return;
90
-        APP.RTC.addStreamListener(onStreamCreated,
91
-            StreamEventTypes.EVENT_TYPE_LOCAL_CREATED);
92
-        APP.xmpp.addListener(XMPPEvents.DISPOSE_CONFERENCE,
93
-                             onDisposeConference);
71
+        const xmpp = APP.conference._room.xmpp;
72
+        xmpp.addListener(
73
+            XMPPEvents.DISPOSE_CONFERENCE,
74
+            onDisposeConference
75
+        );
94 76
         //FIXME: we may want to change CALL INCOMING event to
95 77
         // onnegotiationneeded
96
-        APP.xmpp.addListener(XMPPEvents.CALL_INCOMING, function (event) {
78
+        xmpp.addListener(XMPPEvents.CALL_INCOMING, function (event) {
97 79
             startRemoteStats(event.peerconnection);
98
-//            CallStats.init(event);
80
+            // CallStats.init(event);
99 81
         });
100
-        APP.xmpp.addListener(XMPPEvents.PEERCONNECTION_READY,
82
+        xmpp.addListener(
83
+            XMPPEvents.PEERCONNECTION_READY,
101 84
             function (session) {
102
-            CallStats.init(session);
103
-        });
104
-        APP.RTC.addListener(RTCEvents.AUDIO_MUTE, function (mute) {
105
-            CallStats.sendMuteEvent(mute, "audio");
106
-        });
107
-        APP.xmpp.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function () {
85
+                CallStats.init(session);
86
+            }
87
+        );
88
+        xmpp.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function () {
108 89
             CallStats.sendSetupFailedEvent();
109 90
         });
110
-        APP.RTC.addListener(RTCEvents.VIDEO_MUTE, function (mute) {
111
-            CallStats.sendMuteEvent(mute, "video");
112
-        });
113 91
 
114
-        APP.RTC.addListener(RTCEvents.GET_USER_MEDIA_FAILED, function (e) {
115
-            CallStats.sendGetUserMediaFailed(e);
116
-        });
117
-        APP.xmpp.addListener(RTCEvents.CREATE_OFFER_FAILED, function (e, pc) {
92
+        xmpp.addListener(RTCEvents.CREATE_OFFER_FAILED, function (e, pc) {
118 93
             CallStats.sendCreateOfferFailed(e, pc);
119 94
         });
120
-        APP.xmpp.addListener(RTCEvents.CREATE_ANSWER_FAILED, function (e, pc) {
95
+        xmpp.addListener(RTCEvents.CREATE_ANSWER_FAILED, function (e, pc) {
121 96
             CallStats.sendCreateAnswerFailed(e, pc);
122 97
         });
123
-        APP.xmpp.addListener(
98
+        xmpp.addListener(
124 99
             RTCEvents.SET_LOCAL_DESCRIPTION_FAILED,
125 100
             function (e, pc) {
126 101
                 CallStats.sendSetLocalDescFailed(e, pc);
127 102
             }
128 103
         );
129
-        APP.xmpp.addListener(
104
+        xmpp.addListener(
130 105
             RTCEvents.SET_REMOTE_DESCRIPTION_FAILED,
131 106
             function (e, pc) {
132 107
                 CallStats.sendSetRemoteDescFailed(e, pc);
133 108
             }
134 109
         );
135
-        APP.xmpp.addListener(
110
+        xmpp.addListener(
136 111
             RTCEvents.ADD_ICE_CANDIDATE_FAILED,
137 112
             function (e, pc) {
138 113
                 CallStats.sendAddIceCandidateFailed(e, pc);
@@ -140,8 +115,3 @@ var statistics = {
140 115
         );
141 116
     }
142 117
 };
143
-
144
-
145
-
146
-
147
-module.exports = statistics;

+ 6
- 24
modules/translation/translation.js Ver arquivo

@@ -1,7 +1,6 @@
1 1
 /* global $, require, config, interfaceConfig */
2 2
 var i18n = require("i18next-client");
3 3
 var languages = require("../../service/translation/languages");
4
-var Settings = require("../settings/Settings");
5 4
 var DEFAULT_LANG = languages.EN;
6 5
 
7 6
 i18n.addPostProcessor("resolveAppName", function(value, key, options) {
@@ -68,7 +67,7 @@ function initCompleted(t) {
68 67
     $("[data-i18n]").i18n();
69 68
 }
70 69
 
71
-function checkForParameter() {
70
+function getLangFromQuery() {
72 71
     var query = window.location.search.substring(1);
73 72
     var vars = query.split("&");
74 73
     for (var i=0;i<vars.length;i++) {
@@ -82,27 +81,11 @@ function checkForParameter() {
82 81
 }
83 82
 
84 83
 module.exports = {
85
-    init: function (lang) {
86
-        var options = defaultOptions;
84
+    init: function (settingsLang) {
85
+        let options = defaultOptions;
87 86
 
88
-
89
-        if(!lang)
90
-        {
91
-            lang = checkForParameter();
92
-            if(!lang)
93
-            {
94
-                var settings = Settings.getSettings();
95
-                if(settings)
96
-                    lang = settings.language;
97
-
98
-                if(!lang && config.defaultLanguage)
99
-                {
100
-                    lang = config.defaultLanguage;
101
-                }
102
-            }
103
-        }
104
-
105
-        if(lang) {
87
+        let lang = getLangFromQuery() || settingsLang || config.defaultLanguage;
88
+        if (lang) {
106 89
             options.lng = lang;
107 90
         }
108 91
 
@@ -124,8 +107,7 @@ module.exports = {
124 107
     },
125 108
     generateTranslationHTML: function (key, options) {
126 109
         var str = "<span data-i18n=\"" + key + "\"";
127
-        if(options)
128
-        {
110
+        if (options) {
129 111
             str += " data-i18n-options=\"" + JSON.stringify(options) + "\"";
130 112
         }
131 113
         str += ">";

+ 2
- 6
modules/util/UsernameGenerator.js Ver arquivo

@@ -1,4 +1,4 @@
1
-var RandomUtil = require('./RandomUtil');
1
+import RandomUtil from './RandomUtil';
2 2
 
3 3
 /**
4 4
  * from faker.js - Copyright (c) 2014-2015 Matthew Bergman & Marak Squires
@@ -417,13 +417,9 @@ var names = [
417 417
  * Generate random username.
418 418
  * @returns {string} random username
419 419
  */
420
-function generateUsername () {
420
+export function generateUsername () {
421 421
   var name = RandomUtil.randomElement(names);
422 422
   var suffix = RandomUtil.randomAlphanumStr(3);
423 423
 
424 424
   return name + '-' +  suffix;
425 425
 }
426
-
427
-module.exports = {
428
-  generateUsername: generateUsername
429
-};

Carregando…
Cancelar
Salvar