@ -1,8 +1,45 @@
var Whisper = Whisper || { } ;
/ * v i m : t s = 4 : s w = 4 : e x p a n d t a b
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
( function ( ) {
'use strict' ;
var AttachmentView = Backbone . View . extend ( {
tagName : "img" ,
encode : function ( ) {
return new Promise ( function ( resolve , reject ) {
var blob = new Blob ( [ this . model . data ] , { type : this . model . contentType } ) ;
var FR = new FileReader ( ) ;
FR . onload = function ( e ) {
resolve ( e . target . result ) ;
} ;
FR . onerror = reject ;
FR . readAsDataURL ( blob ) ;
} . bind ( this ) ) ;
} ,
render : function ( ) {
this . encode ( ) . then ( function ( base64 ) {
this . $el . attr ( 'src' , base64 ) ;
this . $el . trigger ( 'update' ) ;
} . bind ( this ) ) ;
return this ;
}
} ) ;
window . Whisper = window . Whisper || { } ;
Whisper . MessageView = Backbone . View . extend ( {
tagName : "li" ,
className : "entry" ,
@ -19,17 +56,22 @@ var Whisper = Whisper || {};
} ,
render : function ( ) {
this . $el . html (
Mustache . render ( this . template , {
message : this . model . get ( 'body' ) ,
timestamp : moment ( this . model . get ( 'timestamp' ) ) . fromNow ( ) ,
attachments : this . model . get ( 'attachments' ) ,
bubble _class : this . model . get ( 'type' ) === 'outgoing' ? 'sent' : 'incoming' ,
sender : this . model . get ( 'conversationType' ) === 'group' ? this . model . get ( 'sender' ) : ''
} )
) ;
return this ;
this . $el . html (
Mustache . render ( this . template , {
message : this . model . get ( 'body' ) ,
timestamp : moment ( this . model . get ( 'timestamp' ) ) . fromNow ( ) ,
bubble _class : this . model . get ( 'type' ) === 'outgoing' ? 'sent' : 'incoming' ,
sender : this . model . get ( 'conversationType' ) === 'group' ? this . model . get ( 'sender' ) : ''
} )
) ;
this . $el . find ( '.attachments' ) . append (
this . model . get ( 'attachments' ) . map ( function ( attachment ) {
return new AttachmentView ( { model : attachment } ) . render ( ) . el ;
} )
) ;
return this ;
}
} ) ;