Changeset 902

Show
Ignore:
Timestamp:
02/29/08 14:05:35
Author:
goldoraf
Message:

Refactored JS in order to enhance compatibility with Adobe AIR

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • apps/notifier/public/js/notifier.js

    r900 r902  
    6363                    $('#friends-timeline').append(notifier.ui.htmlForNote(notes[i])); 
    6464                } 
     65                notifier.ui.bindNotesControls('friends-timeline'); 
    6566            } 
    6667        } 
     
    7475        params: {'text': text}, 
    7576        success: function(note) { 
    76             notifier.ui.prependNote(note); 
     77            $('#friends-timeline').prepend(notifier.ui.htmlForNote(note)); 
     78            notifier.ui.bindNotesControls('note_'+note.id); 
    7779            $('#note_text').val(''); 
    7880            $('#note_submit').removeAttr('disabled'); 
     
    8587} 
    8688notifier.actions.editNote = function(noteId) { 
    87     notifier.api.doRequest('users/'+notifier.prefs.username+'/statuses/'+noteId+'.json', { 
     89    var newText = $('#note_'+noteId+'_new_text').val(); 
     90    // hack pour Adobe AIR : 
     91    // apparemment AIR envoie un body vide pour une requête PUT, 
     92    // même lorsque l'on passe des params à l'objet XHR ; 
     93    // on place donc les params dans la querystring 
     94    notifier.api.doRequest('users/'+notifier.prefs.username+'/statuses/'+noteId+'.json?text='+newText, { 
    8895        method: 'PUT', 
    89         params: {'text': $('#note_'+noteId+'_new_text').val()}, 
     96        //params: {'text': $('#note_'+noteId+'_new_text').val()}, 
    9097        success: function(note) { 
    9198            $('#note_'+noteId+' p:first').text(note.text); 
     
    94101    }); 
    95102} 
    96 notifier.actions.deleteNote = function(noteId) { 
     103notifier.actions.deleteNote = function() { 
     104    var noteId = notifier.ui.idFromElt(this.parentNode.parentNode, 'note'); 
    97105    if (!confirm('Etes-vous sûr de vouloir supprimer cette note ?')) return; 
    98106     
     
    114122                    $('#friends-list').append(notifier.ui.htmlForFriend(friends[i])); 
    115123                } 
     124                notifier.ui.bindFriendsControls('friends-list'); 
    116125            } 
    117126        } 
     
    125134        success: function(friend) { 
    126135            $('#friends-list').prepend(notifier.ui.htmlForFriend(friend)); 
     136            notifier.ui.bindFriendsControls('friend_'+friend.id); 
    127137            $('#friend_name').val(''); 
    128138            $('#friend_submit').removeAttr('disabled'); 
     
    134144    });    
    135145} 
    136 notifier.actions.removeFriend = function(friendId) { 
     146notifier.actions.removeFriend = function() { 
     147    var friendId = notifier.ui.idFromElt(this.parentNode.parentNode, 'friend'); 
    137148    notifier.api.doRequest('users/'+notifier.prefs.username+'/friends/'+friendId+'.json', { 
    138149        method: 'DELETE', 
     
    142153    }); 
    143154} 
    144 notifier.actions.addFavorite = function(noteId) { 
     155notifier.actions.addFavorite = function() { 
     156    var noteId = notifier.ui.idFromElt(this.parentNode.parentNode, 'note'); 
    145157    notifier.api.doRequest('users/'+notifier.prefs.username+'/favorites.json', { 
    146158        method: 'POST', 
     
    150162            link.removeClass('not-favorite'); 
    151163            link.addClass('favorite'); 
    152             link.attr('onclick', 'notifier.actions.removeFavorite(\''+noteId+'\');'); 
    153         } 
    154     }); 
    155 
    156 notifier.actions.removeFavorite = function(noteId) { 
     164            link.unbind('click'); 
     165            link.click(notifier.actions.removeFavorite); 
     166        } 
     167    }); 
     168
     169notifier.actions.removeFavorite = function() { 
     170    var noteId = notifier.ui.idFromElt(this.parentNode.parentNode, 'note'); 
    157171    notifier.api.doRequest('users/'+notifier.prefs.username+'/favorites/'+noteId+'.json', { 
    158172        method: 'DELETE', 
     
    161175            link.removeClass('favorite'); 
    162176            link.addClass('not-favorite'); 
    163             link.attr('onclick', 'notifier.actions.addFavorite(\''+noteId+'\');'); 
    164         } 
    165     }); 
    166 
    167 notifier.actions.removeFavInList = function(noteId) { 
     177            link.unbind('click'); 
     178            link.click(notifier.actions.addFavorite); 
     179        } 
     180    }); 
     181
     182notifier.actions.removeFavInList = function() { 
     183    var noteId = notifier.ui.idFromElt(this.parentNode.parentNode, 'fav'); 
    168184    notifier.api.doRequest('users/'+notifier.prefs.username+'/favorites/'+noteId+'.json', { 
    169185        method: 'DELETE', 
     
    183199                    $('#favorites-list').append(notifier.ui.htmlForFav(favs[i])); 
    184200                } 
     201                notifier.ui.bindFavsControls('favorites-list'); 
    185202            } 
    186203        } 
     
    191208notifier.ui.toggleLoading = function() { 
    192209    $('#loading').toggle(); 
     210} 
     211notifier.ui.idFromElt = function(elt, type) { 
     212        id = elt.id; 
     213        return id.replace(new RegExp(type+'_', 'g'), ''); 
    193214} 
    194215notifier.ui.showTab = function(tabLink, tabName) { 
     
    203224             +'<p class="note-details">'+note.sender.name+' le '+note.timestamp 
    204225    if (note.sender.name == notifier.prefs.username) { 
    205         html+= '&nbsp;<a href="#" onclick="notifier.ui.createEditForm(\''+note.id+'\');">edit</a>'; 
    206         html+= '&nbsp;<a href="#" onclick="notifier.actions.deleteNote(\''+note.id+'\');">delete</a>'; 
     226        html+= '&nbsp;<a href="#" class="note-edit">edit</a>'; 
     227        html+= '&nbsp;<a href="#" class="note-delete">delete</a>'; 
    207228    } else { 
    208229        if (note.favorite_id != undefined) { 
    209230            var className = 'favorite'; 
    210             var onclick = 'notifier.actions.removeFavorite(\''+note.id+'\');'; 
    211231        } else { 
    212232            var className = 'not-favorite'; 
    213             var onclick = 'notifier.actions.addFavorite(\''+note.id+'\');'; 
    214         } 
    215         html+= '&nbsp;<a href="#" class="'+className+'" onclick="'+onclick+'"></a>'; 
     233        } 
     234        html+= '&nbsp;<a href="#" class="'+className+'"></a>'; 
    216235    } 
    217236    html+= '</p></div>'; 
     
    222241             +'<p class="note-text">'+note.text+'</p>' 
    223242             +'<p class="note-details">'+note.sender.name+' le '+note.timestamp 
    224              +'&nbsp;<a href="#" class="favorite" onclick="notifier.actions.removeFavInList(\''+note.id+'\');"></a>' 
     243             +'&nbsp;<a href="#" class="favorite"></a>' 
    225244             +'</p></div>'; 
    226245} 
    227 notifier.ui.prependNote = function(note) { 
    228     $('#friends-timeline').prepend(notifier.ui.htmlForNote(note)); 
     246notifier.ui.bindFavsControls = function(eltId) { 
     247    $('#'+eltId+' a.favorite').click(notifier.actions.removeFavInList); 
     248
     249notifier.ui.bindNotesControls = function(eltId) { 
     250    $('#'+eltId+' a.note-edit').click(notifier.ui.createEditForm); 
     251    $('#'+eltId+' a.note-delete').click(notifier.actions.deleteNote); 
     252    $('#'+eltId+' a.favorite').click(notifier.actions.removeFavorite); 
     253    $('#'+eltId+' a.not-favorite').click(notifier.actions.addFavorite); 
    229254} 
    230255notifier.ui.htmlForFriend = function(friend) { 
     
    233258            +'<p class="friend-name">'+friend.name+'</p>' 
    234259            +'<p class="friend-email">'+friend.email 
    235             +'&nbsp;<a href="#" onclick="notifier.actions.removeFriend(\''+friend.id+'\');">remove</a>' 
     260            +'&nbsp;<a href="#" class="remove">remove</a>' 
    236261            +'</p>' 
    237262            +'</div>' 
    238263} 
    239 notifier.ui.createEditForm = function(noteId) { 
     264notifier.ui.bindFriendsControls = function(eltId) { 
     265    $('#'+eltId+' a.remove').click(notifier.actions.removeFriend); 
     266
     267notifier.ui.createEditForm = function() { 
     268    var noteId = notifier.ui.idFromElt(this.parentNode.parentNode, 'note'); 
    240269    var form = document.createElement("form"); 
    241270    form.id = 'edit_note_'+noteId;