##// END OF EJS Templates
svn-support: Make the reload command timeout configurable via ini file....
svn-support: Make the reload command timeout configurable via ini file. Duration of the reload command may heavily vary between different commands, setups, etc. Therefore we should make the timeout configurable. This way customers can adapt it to their needs.

File last commit:

r983:c5d592d8 default
r1015:c9bcf161 default
Show More
rhodecode-app.js
137 lines | 5.7 KiB | application/javascript | JavascriptLexer
frontend: introduce rhodecode-app for more complex cross element wiring
r787 ccLog = Logger.get('RhodeCodeApp');
ccLog.setLevel(Logger.OFF);
var rhodeCodeApp = Polymer({
is: 'rhodecode-app',
notifications: move all notifications into polymer for consistency fix #4201
r822 attached: function () {
frontend: introduce rhodecode-app for more complex cross element wiring
r787 ccLog.debug('rhodeCodeApp created');
$.Topic('/notifications').subscribe(this.handleNotifications.bind(this));
favicon: added favicon notifications
r882 $.Topic('/favicon/update').subscribe(this.faviconUpdate.bind(this));
frontend: ensure polyfills are loaded as early as possible
r880 $.Topic('/connection_controller/subscribe').subscribe(
this.subscribeToChannelTopic.bind(this));
// this event can be used to coordinate plugins to do their
// initialization before channelstream is kicked off
$.Topic('/__MAIN_APP__').publish({});
frontend: introduce rhodecode-app for more complex cross element wiring
r787
notifications: move all notifications into polymer for consistency fix #4201
r822 for (var i = 0; i < alertMessagePayloads.length; i++) {
$.Topic('/notifications').publish(alertMessagePayloads[i]);
}
topics: remove dependency on __REGISTER__ so we avoid race condition
r838 this.kickoffChannelstreamPlugin();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 },
/** proxy to channelstream connection */
getChannelStreamConnection: function () {
return this.$['channelstream-connection'];
},
handleNotifications: function (data) {
this.$['notifications'].handleNotification(data);
},
favicon: added favicon notifications
r882 faviconUpdate: function (data) {
this.$$('rhodecode-favicon').counter = data.count;
},
frontend: introduce rhodecode-app for more complex cross element wiring
r787 /** opens connection to ws server */
kickoffChannelstreamPlugin: function (data) {
ccLog.debug('kickoffChannelstreamPlugin');
var channels = ['broadcast'];
var addChannels = this.checkViewChannels();
for (var i = 0; i < addChannels.length; i++) {
channels.push(addChannels[i]);
}
channelstream: connect only when enabled
r798 if (window.CHANNELSTREAM_SETTINGS && CHANNELSTREAM_SETTINGS.enabled){
frontend: ensure polyfills are loaded as early as possible
r880 var channelstreamConnection = this.getChannelStreamConnection();
channelstream: connect only when enabled
r798 channelstreamConnection.connectUrl = CHANNELSTREAM_URLS.connect;
channelstreamConnection.subscribeUrl = CHANNELSTREAM_URLS.subscribe;
channelstreamConnection.websocketUrl = CHANNELSTREAM_URLS.ws + '/ws';
channelstreamConnection.longPollUrl = CHANNELSTREAM_URLS.longpoll + '/listen';
// some channels might already be registered by topic
for (var i = 0; i < channels.length; i++) {
channelstreamConnection.push('channels', channels[i]);
}
// append any additional channels registered in other plugins
$.Topic('/connection_controller/subscribe').processPrepared();
channelstreamConnection.connect();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 }
},
checkViewChannels: function () {
var channels = []
// subscribe to PR repo channel for PR's'
if (templateContext.pull_request_data.pull_request_id) {
var channelName = '/repo$' + templateContext.repo_name + '$/pr/' +
String(templateContext.pull_request_data.pull_request_id);
channels.push(channelName);
}
return channels;
},
/** subscribes users from channels in channelstream */
subscribeToChannelTopic: function (channels) {
components: small order of elements change and a cleanup
r983 var channelstreamConnection = this.getChannelStreamConnection();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 var toSubscribe = channelstreamConnection.calculateSubscribe(channels);
ccLog.debug('subscribeToChannelTopic', toSubscribe);
if (toSubscribe.length > 0) {
// if we are connected then subscribe
if (channelstreamConnection.connected) {
channelstreamConnection.subscribe(toSubscribe);
}
// not connected? just push channels onto the stack
else {
for (var i = 0; i < toSubscribe.length; i++) {
channelstreamConnection.push('channels', toSubscribe[i]);
}
}
}
},
/** publish received messages into correct topic */
receivedMessage: function (event) {
for (var i = 0; i < event.detail.length; i++) {
var message = event.detail[i];
if (message.message.topic) {
ccLog.debug('publishing', message.message.topic);
$.Topic(message.message.topic).publish(message);
}
else if (message.type === 'presence'){
$.Topic('/connection_controller/presence').publish(message);
}
else {
ccLog.warn('unhandled message', message);
}
}
},
handleConnected: function (event) {
components: small order of elements change and a cleanup
r983 var channelstreamConnection = this.getChannelStreamConnection();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 channelstreamConnection.set('channelsState',
event.detail.channels_info);
channelstreamConnection.set('userState', event.detail.state);
channelstreamConnection.set('channels', event.detail.channels);
this.propagageChannelsState();
},
handleSubscribed: function (event) {
components: small order of elements change and a cleanup
r983 var channelstreamConnection = this.getChannelStreamConnection();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 var channelInfo = event.detail.channels_info;
var channelKeys = Object.keys(event.detail.channels_info);
for (var i = 0; i < channelKeys.length; i++) {
var key = channelKeys[i];
channelstreamConnection.set(['channelsState', key], channelInfo[key]);
}
channelstreamConnection.set('channels', event.detail.channels);
this.propagageChannelsState();
},
/** propagates channel states on topics */
propagageChannelsState: function (event) {
components: small order of elements change and a cleanup
r983 var channelstreamConnection = this.getChannelStreamConnection();
frontend: introduce rhodecode-app for more complex cross element wiring
r787 var channel_data = channelstreamConnection.channelsState;
var channels = channelstreamConnection.channels;
for (var i = 0; i < channels.length; i++) {
var key = channels[i];
$.Topic('/connection_controller/channel_update').publish(
{channel: key, state: channel_data[key]}
);
}
}
});