mirror of
https://github.com/Mibew/tray.git
synced 2024-11-15 09:24:12 +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