2015-04-28 14:59:00 +00:00
/ *
* ( c ) Copyright Ascensio System SIA 2010 - 2015
*
* This program is a free software product . You can redistribute it and / or
* modify it under the terms of the GNU Affero General Public License ( AGPL )
* version 3 as published by the Free Software Foundation . In accordance with
* Section 7 ( a ) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non - infringement
* of any third - party rights .
*
* This program is distributed WITHOUT ANY WARRANTY ; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . For
* details , see the GNU AGPL at : http : //www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st . 125 a - 25 , Riga , Latvia ,
* EU , LV - 1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices , as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7 ( b ) of the License you must retain the original Product
* logo when distributing the program . Pursuant to Section 7 ( e ) we decline to
* grant you any rights under trademark law for use of our trademarks .
*
* All the Product ' s GUI elements , including illustrations and icon sets , as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution - ShareAlike 4.0 International . See the License
* terms at http : //creativecommons.org/licenses/by-sa/4.0/legalcode
*
* /
define ( [ "core" , "common/main/lib/collection/Users" , "common/main/lib/collection/ChatMessages" , "common/main/lib/view/Chat" ] , function ( ) {
Common . Controllers . Chat = Backbone . Controller . extend ( _ . extend ( {
models : [ ] ,
collections : [ "Common.Collections.Users" , "Common.Collections.ChatMessages" ] ,
views : [ "Common.Views.Chat" ] ,
initialize : function ( ) {
this . addListeners ( {
"Common.Views.Chat" : {
"message:add" : _ . bind ( this . onSendMessage , this )
}
} ) ;
} ,
events : { } ,
onLaunch : function ( ) {
this . panelChat = this . createView ( "Common.Views.Chat" , {
storeUsers : this . getApplication ( ) . getCollection ( "Common.Collections.Users" ) ,
storeMessages : this . getApplication ( ) . getCollection ( "Common.Collections.ChatMessages" )
} ) ;
} ,
setMode : function ( mode ) {
this . mode = mode ;
if ( this . api ) {
if ( this . mode . canCoAuthoring ) {
this . api . asc _registerCallback ( "asc_onCoAuthoringChatReceiveMessage" , _ . bind ( this . onReceiveMessage , this ) ) ;
}
this . api . asc _registerCallback ( "asc_onAuthParticipantsChanged" , _ . bind ( this . onUsersChanged , this ) ) ;
this . api . asc _registerCallback ( "asc_onConnectionStateChanged" , _ . bind ( this . onUserConnection , this ) ) ;
this . api . asc _coAuthoringGetUsers ( ) ;
if ( this . mode . canCoAuthoring ) {
this . api . asc _coAuthoringChatGetMessages ( ) ;
}
}
return this ;
} ,
setApi : function ( api ) {
this . api = api ;
return this ;
} ,
onUsersChanged : function ( users ) {
if ( ! this . mode . canCoAuthoring ) {
var len = 0 ;
for ( name in users ) {
if ( undefined !== name ) {
len ++ ;
}
}
if ( len > 2 && this . _isCoAuthoringStopped == undefined ) {
this . _isCoAuthoringStopped = true ;
this . api . asc _coAuthoringDisconnect ( ) ;
Common . NotificationCenter . trigger ( "api:disconnect" ) ;
setTimeout ( _ . bind ( function ( ) {
Common . UI . alert ( {
closable : false ,
title : this . notcriticalErrorTitle ,
msg : this . textUserLimit ,
iconCls : "warn" ,
buttons : [ "ok" ]
} ) ;
} ,
this ) , 100 ) ;
return ;
}
}
var usersStore = this . getApplication ( ) . getCollection ( "Common.Collections.Users" ) ;
if ( usersStore ) {
var arrUsers = [ ] ,
name ,
user ;
for ( name in users ) {
if ( undefined !== name ) {
user = users [ name ] ;
if ( user ) {
arrUsers . push ( new Common . Models . User ( {
id : user . asc _getId ( ) ,
username : user . asc _getUserName ( ) ,
online : true ,
color : user . asc _getColor ( )
} ) ) ;
}
}
}
usersStore [ usersStore . size ( ) > 0 ? "add" : "reset" ] ( arrUsers ) ;
}
} ,
onUserConnection : function ( change ) {
var usersStore = this . getApplication ( ) . getCollection ( "Common.Collections.Users" ) ;
if ( usersStore ) {
var user = usersStore . findUser ( change . asc _getId ( ) ) ;
if ( ! user ) {
usersStore . add ( new Common . Models . User ( {
id : change . asc _getId ( ) ,
username : change . asc _getUserName ( ) ,
online : change . asc _getState ( ) ,
color : change . asc _getColor ( )
} ) ) ;
} else {
user . set ( {
online : change . asc _getState ( )
} ) ;
}
}
} ,
onReceiveMessage : function ( messages ) {
var msgStore = this . getApplication ( ) . getCollection ( "Common.Collections.ChatMessages" ) ;
if ( msgStore ) {
var array = [ ] ;
messages . forEach ( function ( msg ) {
array . push ( new Common . Models . ChatMessage ( {
userid : msg . user ,
message : msg . message ,
username : msg . username
} ) ) ;
} ) ;
msgStore [ msgStore . size ( ) > 0 ? "add" : "reset" ] ( array ) ;
}
} ,
onSendMessage : function ( panel , text ) {
if ( text . length > 0 ) {
var splitString = function ( string , chunkSize ) {
var chunks = [ ] ;
while ( string ) {
if ( string . length < chunkSize ) {
chunks . push ( string ) ;
break ;
} else {
chunks . push ( string . substr ( 0 , chunkSize ) ) ;
string = string . substr ( chunkSize ) ;
}
}
return chunks ;
} ;
var me = this ;
splitString ( text , 2048 ) . forEach ( function ( message ) {
me . api . asc _coAuthoringChatSendMessage ( message ) ;
} ) ;
}
} ,
notcriticalErrorTitle : "Warning" ,
textUserLimit : 'You are using ONLYOFFICE Editors free version.<br>Only two users can co-edit the document simultaneously.<br>Want more? Consider buying ONLYOFFICE Editors Pro version.<br><a href="http://www.onlyoffice.com" target="_blank">Read more</a>'
} ,
Common . Controllers . Chat || { } ) ) ;
2014-07-05 18:22:49 +00:00
} ) ;