mirror of
				https://github.com/Mibew/design.git
				synced 2025-10-31 18:41:05 +03:00 
			
		
		
		
	Create SoundManager model in Chat JS Application
It help to unbind messages collection view and message form model
This commit is contained in:
		
							parent
							
								
									b3c77aa972
								
							
						
					
					
						commit
						a2db90289a
					
				| @ -5,5 +5,4 @@ | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a){a.Views.MessagesCollection=a.Views.CollectionBase.extend({itemView:a.Views.Message,className:"messages-collection",initialize:function(){this.collection.on("multiple:add",this.messagesAdded,this);a.Objects.Models.messageForm.on("before:post",this.messagePost,this)},skipNextSound:!0,messagePost:function(){this.skipNextSound=!0},messagesAdded:function(){if(!this.skipNextSound&&a.Objects.Models.Controls.sound.get("enabled")){var b=a.Objects.Models.page.get("webimRoot");b&&a.Utils.playSound(b+ | ||||
| "/sounds/new_message.wav")}this.skipNextSound=!1}})})(Mibew); | ||||
| (function(a){a.Views.MessagesCollection=a.Views.CollectionBase.extend({itemView:a.Views.Message,className:"messages-collection"})})(Mibew); | ||||
|  | ||||
| @ -5,4 +5,4 @@ | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a,b,c){a.Views.SoundControl=a.Views.Control.extend({template:b.templates.chat_controls_sound,events:c.extend({},a.Views.Control.prototype.events,{click:"toggle"}),toggle:function(){this.model.set({enabled:!this.model.get("enabled")})}})})(Mibew,Handlebars,_); | ||||
| (function(a,b,c){a.Views.SoundControl=a.Views.Control.extend({template:b.templates.chat_controls_sound,events:c.extend({},a.Views.Control.prototype.events,{click:"toggle"}),toggle:function(){this.model.toggle()}})})(Mibew,Handlebars,_); | ||||
|  | ||||
| @ -5,4 +5,4 @@ | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a,b){a.Models.SoundControl=a.Models.Control.extend({defaults:b.extend({},a.Models.Control.prototype.defaults,{enabled:!0}),getModelType:function(){return"SoundControl"}})})(Mibew,_); | ||||
| (function(a,c){a.Models.SoundControl=a.Models.Control.extend({defaults:c.extend({},a.Models.Control.prototype.defaults,{enabled:!0}),toggle:function(){var b=!this.get("enabled");a.Objects.Models.soundManager.set({enabled:b});this.set({enabled:b})},getModelType:function(){return"SoundControl"}})})(Mibew,_); | ||||
|  | ||||
| @ -0,0 +1,8 @@ | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
| 
 | ||||
|  Licensed under the Apache License, Version 2.0 (the "License"). | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(b,a){b.Models.BaseSoundManager=a.Model.extend({defaults:{enabled:!0},play:function(a){this.get("enabled")&&b.Utils.playSound(a)}})})(Mibew,Backbone); | ||||
| @ -0,0 +1,9 @@ | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
| 
 | ||||
|  Licensed under the Apache License, Version 2.0 (the "License"). | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a,c){a.Models.ChatSoundManager=a.Models.BaseSoundManager.extend({defaults:c.extend({},a.Models.BaseSoundManager.prototype.defaults,{skipNextMessageSound:!1}),initialize:function(){var b=a.Objects,c=this;b.Collections.messages.on("multiple:add",this.playNewMessageSound,this);b.Models.messageForm.on("before:post",function(){c.set({skipNextMessageSound:!0})})},playNewMessageSound:function(){if(!this.get("skipNextMessageSound")){var b=a.Objects.Models.page.get("webimRoot");b&&this.play(b+"/sounds/new_message.wav")}this.set({skipNextMessageSound:!1})}})})(Mibew, | ||||
| _); | ||||
| @ -8,7 +8,7 @@ | ||||
| (function(a){a.Objects.Models.Controls={};a.Objects.Models.Status={};var j=[],l=a.Application,k=l.module("Chat",{startWithParent:!1});k.addInitializer(function(b){var f=a.Objects,d=a.Objects.Models,c=a.Objects.Models.Controls,h=a.Objects.Models.Status;b.page&&d.page.set(b.page);d.thread=new a.Models.Thread(b.thread);d.user=new a.Models.ChatUser(b.user);var g=new a.Layouts.Chat;f.chatLayout=g;l.mainRegion.show(g);var e=new a.Collections.Controls;d.user.get("isAgent")||(c.userName=new a.Models.UserNameControl({weight:220}), | ||||
| e.add(c.userName),c.sendMail=new a.Models.SendMailControl({weight:200,link:b.links.mail,windowParams:b.windowsParams.mail}),e.add(c.sendMail));d.user.get("isAgent")&&(c.redirect=new a.Models.RedirectControl({weight:200,link:b.links.redirect}),e.add(c.redirect),c.history=new a.Models.HistoryControl({weight:180,link:b.links.history,windowParams:b.windowsParams.history}),e.add(c.history));c.sound=new a.Models.SoundControl({weight:160});e.add(c.sound);c.refresh=new a.Models.RefreshControl({weight:140}); | ||||
| e.add(c.refresh);b.links.ssl&&(c.secureMode=new a.Models.SecureModeControl({weight:120,link:b.links.ssl}),e.add(c.secureMode));c.close=new a.Models.CloseControl({weight:100});e.add(c.close);f.Collections.controls=e;g.controlsRegion.show(new a.Views.ControlsCollection({collection:e}));h.message=new a.Models.StatusMessage({hideTimeout:5E3});h.typing=new a.Models.StatusTyping({hideTimeout:5E3});f.Collections.status=new a.Collections.Status([h.message,h.typing]);g.statusRegion.show(new a.Views.StatusCollection({collection:f.Collections.status})); | ||||
| d.user.get("isAgent")||(d.avatar=new a.Models.Avatar,g.avatarRegion.show(new a.Views.Avatar({model:d.avatar})));f.Collections.messages=new a.Collections.Messages;d.messageForm=new a.Models.MessageForm(b.messageForm);g.messageFormRegion.show(new a.Views.MessageForm({model:d.messageForm}));g.messagesRegion.show(new a.Views.MessagesCollection({collection:f.Collections.messages}));j.push(f.server.callFunctionsPeriodically(function(){var b=a.Objects.Models.thread,c=a.Objects.Models.user;return[{"function":"update", | ||||
| arguments:{"return":{typing:"typing",canPost:"canPost"},references:{},threadId:b.get("id"),token:b.get("token"),lastId:b.get("lastId"),typed:c.get("typing"),user:!c.get("isAgent")}}]},function(b){b.errorCode?a.Objects.Models.Status.message.setMessage(b.errorMessage||"refresh failed"):(b.typing&&a.Objects.Models.Status.typing.show(),a.Objects.Models.user.set({canPost:b.canPost||!1}))}))});k.on("start",function(){a.Objects.server.restartUpdater()});k.addFinalizer(function(){a.Objects.chatLayout.close(); | ||||
| for(var b=0;b<j.length;b++)a.Objects.server.stopCallFunctionsPeriodically(j[b]);"undefined"!=typeof a.Objects.Models.avatar&&a.Objects.Models.avatar.finalize();a.Objects.Collections.messages.finalize();delete a.Objects.chatLayout;delete a.Objects.Models.thread;delete a.Objects.Models.user;delete a.Objects.Models.page;delete a.Objects.Models.avatar;delete a.Objects.Models.messageForm;delete a.Objects.Models.Controls;delete a.Objects.Models.Status;delete a.Objects.Collections.messages;delete a.Objects.Collections.controls; | ||||
| delete a.Objects.Collections.status})})(Mibew); | ||||
| d.user.get("isAgent")||(d.avatar=new a.Models.Avatar,g.avatarRegion.show(new a.Views.Avatar({model:d.avatar})));f.Collections.messages=new a.Collections.Messages;d.messageForm=new a.Models.MessageForm(b.messageForm);g.messageFormRegion.show(new a.Views.MessageForm({model:d.messageForm}));g.messagesRegion.show(new a.Views.MessagesCollection({collection:f.Collections.messages}));d.soundManager=new a.Models.ChatSoundManager;j.push(f.server.callFunctionsPeriodically(function(){var b=a.Objects.Models.thread, | ||||
| c=a.Objects.Models.user;return[{"function":"update",arguments:{"return":{typing:"typing",canPost:"canPost"},references:{},threadId:b.get("id"),token:b.get("token"),lastId:b.get("lastId"),typed:c.get("typing"),user:!c.get("isAgent")}}]},function(b){b.errorCode?a.Objects.Models.Status.message.setMessage(b.errorMessage||"refresh failed"):(b.typing&&a.Objects.Models.Status.typing.show(),a.Objects.Models.user.set({canPost:b.canPost||!1}))}))});k.on("start",function(){a.Objects.server.restartUpdater()}); | ||||
| k.addFinalizer(function(){a.Objects.chatLayout.close();for(var b=0;b<j.length;b++)a.Objects.server.stopCallFunctionsPeriodically(j[b]);"undefined"!=typeof a.Objects.Models.avatar&&a.Objects.Models.avatar.finalize();a.Objects.Collections.messages.finalize();delete a.Objects.chatLayout;delete a.Objects.Models.thread;delete a.Objects.Models.user;delete a.Objects.Models.page;delete a.Objects.Models.avatar;delete a.Objects.Models.messageForm;delete a.Objects.Models.Controls;delete a.Objects.Models.Status; | ||||
| delete a.Objects.Collections.messages;delete a.Objects.Collections.controls;delete a.Objects.Collections.status})})(Mibew); | ||||
|  | ||||
| @ -18,6 +18,13 @@ MibewAPIChatInteraction=function(){this.obligatoryArguments={"*":{threadId:null, | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(b,a){b.Models.BaseSoundManager=a.Model.extend({defaults:{enabled:!0},play:function(a){this.get("enabled")&&b.Utils.playSound(a)}})})(Mibew,Backbone); | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
|  Licensed under the Apache License, Version 2.0 (the "License"). | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(b,c){b.Models.Status=b.Models.Base.extend({defaults:{visible:!0,weight:0,hideTimeout:4E3,title:""},initialize:function(){this.hideTimer=null},autoHide:function(a){a=a||this.get("hideTimeout");this.hideTimer&&clearTimeout(this.hideTimer);this.hideTimer=setTimeout(c.bind(function(){this.set({visible:!1})},this),a)}})})(Mibew,_); | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
| @ -88,7 +95,7 @@ MibewAPIChatInteraction=function(){this.obligatoryArguments={"*":{threadId:null, | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a,b){a.Models.SoundControl=a.Models.Control.extend({defaults:b.extend({},a.Models.Control.prototype.defaults,{enabled:!0}),getModelType:function(){return"SoundControl"}})})(Mibew,_); | ||||
| (function(a,c){a.Models.SoundControl=a.Models.Control.extend({defaults:c.extend({},a.Models.Control.prototype.defaults,{enabled:!0}),toggle:function(){var b=!this.get("enabled");a.Objects.Models.soundManager.set({enabled:b});this.set({enabled:b})},getModelType:function(){return"SoundControl"}})})(Mibew,_); | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
|  Licensed under the Apache License, Version 2.0 (the "License"). | ||||
| @ -118,6 +125,14 @@ a):a.trigger("submit:error",a,{code:b.errorCode,message:b.errorMessage||""})},!0 | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a,c){a.Models.ChatSoundManager=a.Models.BaseSoundManager.extend({defaults:c.extend({},a.Models.BaseSoundManager.prototype.defaults,{skipNextMessageSound:!1}),initialize:function(){var b=a.Objects,c=this;b.Collections.messages.on("multiple:add",this.playNewMessageSound,this);b.Models.messageForm.on("before:post",function(){c.set({skipNextMessageSound:!0})})},playNewMessageSound:function(){if(!this.get("skipNextMessageSound")){var b=a.Objects.Models.page.get("webimRoot");b&&this.play(b+"/sounds/new_message.wav")}this.set({skipNextMessageSound:!1})}})})(Mibew, | ||||
| _); | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
|  Licensed under the Apache License, Version 2.0 (the "License"). | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a,b){a.Models.StatusMessage=a.Models.Status.extend({defaults:b.extend({},a.Models.Status.prototype.defaults,{message:"",visible:!1}),getModelType:function(){return"StatusMessage"},setMessage:function(a){this.set({message:a,visible:!0});this.autoHide()}})})(Mibew,_); | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
| @ -222,7 +237,7 @@ window.location.href=b.replace(/\&\;/g,"&")+(c?"&style="+c:"")}}})})(Mibew,Ha | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a,b,c){a.Views.SoundControl=a.Views.Control.extend({template:b.templates.chat_controls_sound,events:c.extend({},a.Views.Control.prototype.events,{click:"toggle"}),toggle:function(){this.model.set({enabled:!this.model.get("enabled")})}})})(Mibew,Handlebars,_); | ||||
| (function(a,b,c){a.Views.SoundControl=a.Views.Control.extend({template:b.templates.chat_controls_sound,events:c.extend({},a.Views.Control.prototype.events,{click:"toggle"}),toggle:function(){this.model.toggle()}})})(Mibew,Handlebars,_); | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
|  Licensed under the Apache License, Version 2.0 (the "License"). | ||||
| @ -298,8 +313,7 @@ disableInput:function(){this.ui.message.attr("disabled","disabled")},clearInput: | ||||
|  You may obtain a copy of the License at | ||||
|      http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| */ | ||||
| (function(a){a.Views.MessagesCollection=a.Views.CollectionBase.extend({itemView:a.Views.Message,className:"messages-collection",initialize:function(){this.collection.on("multiple:add",this.messagesAdded,this);a.Objects.Models.messageForm.on("before:post",this.messagePost,this)},skipNextSound:!0,messagePost:function(){this.skipNextSound=!0},messagesAdded:function(){if(!this.skipNextSound&&a.Objects.Models.Controls.sound.get("enabled")){var b=a.Objects.Models.page.get("webimRoot");b&&a.Utils.playSound(b+ | ||||
| "/sounds/new_message.wav")}this.skipNextSound=!1}})})(Mibew); | ||||
| (function(a){a.Views.MessagesCollection=a.Views.CollectionBase.extend({itemView:a.Views.Message,className:"messages-collection"})})(Mibew); | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
|  Licensed under the Apache License, Version 2.0 (the "License"). | ||||
| @ -344,10 +358,10 @@ disableInput:function(){this.ui.message.attr("disabled","disabled")},clearInput: | ||||
| (function(a){a.Objects.Models.Controls={};a.Objects.Models.Status={};var j=[],l=a.Application,k=l.module("Chat",{startWithParent:!1});k.addInitializer(function(b){var f=a.Objects,d=a.Objects.Models,c=a.Objects.Models.Controls,h=a.Objects.Models.Status;b.page&&d.page.set(b.page);d.thread=new a.Models.Thread(b.thread);d.user=new a.Models.ChatUser(b.user);var g=new a.Layouts.Chat;f.chatLayout=g;l.mainRegion.show(g);var e=new a.Collections.Controls;d.user.get("isAgent")||(c.userName=new a.Models.UserNameControl({weight:220}), | ||||
| e.add(c.userName),c.sendMail=new a.Models.SendMailControl({weight:200,link:b.links.mail,windowParams:b.windowsParams.mail}),e.add(c.sendMail));d.user.get("isAgent")&&(c.redirect=new a.Models.RedirectControl({weight:200,link:b.links.redirect}),e.add(c.redirect),c.history=new a.Models.HistoryControl({weight:180,link:b.links.history,windowParams:b.windowsParams.history}),e.add(c.history));c.sound=new a.Models.SoundControl({weight:160});e.add(c.sound);c.refresh=new a.Models.RefreshControl({weight:140}); | ||||
| e.add(c.refresh);b.links.ssl&&(c.secureMode=new a.Models.SecureModeControl({weight:120,link:b.links.ssl}),e.add(c.secureMode));c.close=new a.Models.CloseControl({weight:100});e.add(c.close);f.Collections.controls=e;g.controlsRegion.show(new a.Views.ControlsCollection({collection:e}));h.message=new a.Models.StatusMessage({hideTimeout:5E3});h.typing=new a.Models.StatusTyping({hideTimeout:5E3});f.Collections.status=new a.Collections.Status([h.message,h.typing]);g.statusRegion.show(new a.Views.StatusCollection({collection:f.Collections.status})); | ||||
| d.user.get("isAgent")||(d.avatar=new a.Models.Avatar,g.avatarRegion.show(new a.Views.Avatar({model:d.avatar})));f.Collections.messages=new a.Collections.Messages;d.messageForm=new a.Models.MessageForm(b.messageForm);g.messageFormRegion.show(new a.Views.MessageForm({model:d.messageForm}));g.messagesRegion.show(new a.Views.MessagesCollection({collection:f.Collections.messages}));j.push(f.server.callFunctionsPeriodically(function(){var b=a.Objects.Models.thread,c=a.Objects.Models.user;return[{"function":"update", | ||||
| arguments:{"return":{typing:"typing",canPost:"canPost"},references:{},threadId:b.get("id"),token:b.get("token"),lastId:b.get("lastId"),typed:c.get("typing"),user:!c.get("isAgent")}}]},function(b){b.errorCode?a.Objects.Models.Status.message.setMessage(b.errorMessage||"refresh failed"):(b.typing&&a.Objects.Models.Status.typing.show(),a.Objects.Models.user.set({canPost:b.canPost||!1}))}))});k.on("start",function(){a.Objects.server.restartUpdater()});k.addFinalizer(function(){a.Objects.chatLayout.close(); | ||||
| for(var b=0;b<j.length;b++)a.Objects.server.stopCallFunctionsPeriodically(j[b]);"undefined"!=typeof a.Objects.Models.avatar&&a.Objects.Models.avatar.finalize();a.Objects.Collections.messages.finalize();delete a.Objects.chatLayout;delete a.Objects.Models.thread;delete a.Objects.Models.user;delete a.Objects.Models.page;delete a.Objects.Models.avatar;delete a.Objects.Models.messageForm;delete a.Objects.Models.Controls;delete a.Objects.Models.Status;delete a.Objects.Collections.messages;delete a.Objects.Collections.controls; | ||||
| delete a.Objects.Collections.status})})(Mibew); | ||||
| d.user.get("isAgent")||(d.avatar=new a.Models.Avatar,g.avatarRegion.show(new a.Views.Avatar({model:d.avatar})));f.Collections.messages=new a.Collections.Messages;d.messageForm=new a.Models.MessageForm(b.messageForm);g.messageFormRegion.show(new a.Views.MessageForm({model:d.messageForm}));g.messagesRegion.show(new a.Views.MessagesCollection({collection:f.Collections.messages}));d.soundManager=new a.Models.ChatSoundManager;j.push(f.server.callFunctionsPeriodically(function(){var b=a.Objects.Models.thread, | ||||
| c=a.Objects.Models.user;return[{"function":"update",arguments:{"return":{typing:"typing",canPost:"canPost"},references:{},threadId:b.get("id"),token:b.get("token"),lastId:b.get("lastId"),typed:c.get("typing"),user:!c.get("isAgent")}}]},function(b){b.errorCode?a.Objects.Models.Status.message.setMessage(b.errorMessage||"refresh failed"):(b.typing&&a.Objects.Models.Status.typing.show(),a.Objects.Models.user.set({canPost:b.canPost||!1}))}))});k.on("start",function(){a.Objects.server.restartUpdater()}); | ||||
| k.addFinalizer(function(){a.Objects.chatLayout.close();for(var b=0;b<j.length;b++)a.Objects.server.stopCallFunctionsPeriodically(j[b]);"undefined"!=typeof a.Objects.Models.avatar&&a.Objects.Models.avatar.finalize();a.Objects.Collections.messages.finalize();delete a.Objects.chatLayout;delete a.Objects.Models.thread;delete a.Objects.Models.user;delete a.Objects.Models.page;delete a.Objects.Models.avatar;delete a.Objects.Models.messageForm;delete a.Objects.Models.Controls;delete a.Objects.Models.Status; | ||||
| delete a.Objects.Collections.messages;delete a.Objects.Collections.controls;delete a.Objects.Collections.status})})(Mibew); | ||||
| /* | ||||
|  Copyright 2005-2013 the original author or authors. | ||||
|  Licensed under the Apache License, Version 2.0 (the "License"). | ||||
|  | ||||
| @ -24,52 +24,7 @@ | ||||
|              * Class name for view's DOM element | ||||
|              * @type String | ||||
|              */ | ||||
|             className: 'messages-collection', | ||||
| 
 | ||||
|             /** | ||||
|              * View initializer. | ||||
|              */ | ||||
|             initialize: function() { | ||||
|                 this.collection.on('multiple:add', this.messagesAdded, this); | ||||
|                 Mibew.Objects.Models.messageForm.on( | ||||
|                     'before:post', | ||||
|                     this.messagePost, | ||||
|                     this | ||||
|                 ); | ||||
|             }, | ||||
| 
 | ||||
|             /** | ||||
|             * Indicates if next sound should be skipped | ||||
|             * @type Boolean | ||||
|             */ | ||||
|             skipNextSound: true, | ||||
| 
 | ||||
|             /** | ||||
|              * Messages form 'after:post' event handler. Disable next sound. | ||||
|              */ | ||||
|             messagePost: function() { | ||||
|                 this.skipNextSound = true; | ||||
|             }, | ||||
| 
 | ||||
|             /** | ||||
|             * Messages collection 'add:all' event handler. Try to play sound | ||||
|             * about new message | ||||
|             */ | ||||
|             messagesAdded: function() { | ||||
|                 if (! this.skipNextSound) { | ||||
|                     // Check if sound disabled by user via sound control
 | ||||
|                     if (Mibew.Objects.Models.Controls.sound.get('enabled')) { | ||||
|                         // Build sound path
 | ||||
|                         var path = Mibew.Objects.Models.page.get('webimRoot'); | ||||
|                         if (path) { | ||||
|                             path += '/sounds/new_message.wav'; | ||||
|                             // Play sound
 | ||||
|                             Mibew.Utils.playSound(path); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 this.skipNextSound = false; | ||||
|             } | ||||
|             className: 'messages-collection' | ||||
|         } | ||||
|     ); | ||||
| 
 | ||||
|  | ||||
| @ -38,9 +38,7 @@ | ||||
|              * Toggle sound state | ||||
|              */ | ||||
|             toggle: function() { | ||||
|                 this.model.set({ | ||||
|                     enabled: !this.model.get('enabled') | ||||
|                 }); | ||||
|                 this.model.toggle(); | ||||
|             } | ||||
|         } | ||||
|     ); | ||||
|  | ||||
| @ -32,6 +32,19 @@ | ||||
|                 } | ||||
|             ), | ||||
| 
 | ||||
|             /** | ||||
|              * Toggles sound control state | ||||
|              */ | ||||
|             toggle: function() { | ||||
|                 var enabled = ! this.get('enabled'); | ||||
| 
 | ||||
|                 // Toggle sound manager state
 | ||||
|                 Mibew.Objects.Models.soundManager.set({'enabled': enabled}); | ||||
| 
 | ||||
|                 // Update self state
 | ||||
|                 this.set({'enabled': enabled}); | ||||
|             }, | ||||
| 
 | ||||
|             /** | ||||
|              * Returns model type | ||||
|              * @returns {String} Model type | ||||
|  | ||||
| @ -0,0 +1,40 @@ | ||||
| /** | ||||
|  * @preserve Copyright 2005-2013 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"). | ||||
|  * You may obtain a copy of the License at | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
|  */ | ||||
| 
 | ||||
| (function(Mibew, Backbone) { | ||||
| 
 | ||||
|     /** | ||||
|      * @class Represents Base helper model which manage all sounds | ||||
|      */ | ||||
|     Mibew.Models.BaseSoundManager = Backbone.Model.extend( | ||||
|         /** @lends Mibew.Models.BaseSoundManager.prototype */ | ||||
|         { | ||||
|             /** | ||||
|              * A list of default model values. | ||||
|              * @type Object | ||||
|              */ | ||||
|             defaults: { | ||||
|                 /** | ||||
|                  * Indicates if sound enabled or not | ||||
|                  */ | ||||
|                 enabled: true | ||||
|             }, | ||||
| 
 | ||||
|             /** | ||||
|              * Play sound file if sound enabled. | ||||
|              * @param {String} file Sound file to play | ||||
|              */ | ||||
|             play: function(file) { | ||||
|                 if (this.get('enabled')) { | ||||
|                     Mibew.Utils.playSound(file); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     ); | ||||
| 
 | ||||
| })(Mibew, Backbone); | ||||
| @ -0,0 +1,75 @@ | ||||
| /** | ||||
|  * @preserve Copyright 2005-2013 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"). | ||||
|  * You may obtain a copy of the License at | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
|  */ | ||||
| 
 | ||||
| (function(Mibew, _) { | ||||
| 
 | ||||
|     /** | ||||
|      * @class Represents Helper model which manage all sounds in chat module. | ||||
|      * An instance of this class must be initialized only after all system | ||||
|      * models. | ||||
|      */ | ||||
|     Mibew.Models.ChatSoundManager = Mibew.Models.BaseSoundManager.extend( | ||||
|         /** @lends Mibew.Models.ChatSoundManager.prototype */ | ||||
|         { | ||||
|             /** | ||||
|              * A list of default model values. | ||||
|              * Inherits values from Mibew.Models.BaseSoundManager | ||||
|              * @type Object | ||||
|              */ | ||||
|             defaults: _.extend( | ||||
|                 {}, | ||||
|                 Mibew.Models.BaseSoundManager.prototype.defaults, | ||||
|                 { | ||||
|                     /** | ||||
|                      * Indicates next sound about new message should be skipped | ||||
|                      * @type Boolean | ||||
|                      */ | ||||
|                     skipNextMessageSound: false | ||||
|                 } | ||||
|             ), | ||||
|             /** | ||||
|              * Model initializer. It links all system elements and play sound | ||||
|              * only when it need. | ||||
|              */ | ||||
|             initialize: function() { | ||||
|                 // Create some shortcuts
 | ||||
|                 var objs = Mibew.Objects; | ||||
|                 var self = this; | ||||
| 
 | ||||
|                 objs.Collections.messages.on( | ||||
|                     'multiple:add', | ||||
|                     this.playNewMessageSound, | ||||
|                     this | ||||
|                 ); | ||||
|                 objs.Models.messageForm.on( | ||||
|                     'before:post', | ||||
|                     function () { | ||||
|                         self.set({skipNextMessageSound: true}); | ||||
|                     } | ||||
|                 ); | ||||
|             }, | ||||
| 
 | ||||
|             /** | ||||
|              * Play sound about new message | ||||
|              */ | ||||
|             playNewMessageSound: function() { | ||||
|                 if (! this.get('skipNextMessageSound')) { | ||||
|                     // Build sound path
 | ||||
|                     var path = Mibew.Objects.Models.page.get('webimRoot'); | ||||
|                     if (path) { | ||||
|                         path += '/sounds/new_message.wav'; | ||||
|                         // Play sound
 | ||||
|                         this.play(path); | ||||
|                     } | ||||
|                 } | ||||
|                 this.set({skipNextMessageSound: false}); | ||||
|             } | ||||
|         } | ||||
|     ); | ||||
| 
 | ||||
| })(Mibew, _); | ||||
| @ -174,6 +174,7 @@ | ||||
|             collection: objs.Collections.messages | ||||
|         })); | ||||
| 
 | ||||
|         models.soundManager = new Mibew.Models.ChatSoundManager(); | ||||
| 
 | ||||
|         // TODO: May be move it somewhere else
 | ||||
|         // Periodically call update function at the server side
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user