var NoteList = { notes_path: null, target_params: null, target_id: 0, target_type: null, first_id: 0, last_id: 0, disable:false, init: function(tid, tt, path) { this.notes_path = path + ".js"; this.target_id = tid; this.target_type = tt; this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; // get notes this.getContent(); // get new notes every n seconds this.initRefresh(); $('.delete-note').live('ajax:success', function() { $(this).closest('li').fadeOut(); }); $(".note-form-holder").live("ajax:before", function(){ $(".submit_note").attr("disabled", "disabled"); }) $(".note-form-holder").live("ajax:complete", function(){ $(".submit_note").removeAttr("disabled"); }) disableButtonIfEmtpyField(".note-text", ".submit_note"); $(".note-text").live("focus", function(){ $(this).css("height", "80px"); $('.note_advanced_opts').show(); }); $("#note_attachment").change(function(e){ var val = $('.input-file').val(); var filename = val.replace(/^.*[\\\/]/, ''); $(".file_name").text(filename); }); }, /** * Load new notes to fresh list called 'new_notes_list': * - Replace 'new_notes_list' with new list every n seconds * - Append new notes to this list after submit */ initRefresh: function() { // init timer var intNew = setInterval("NoteList.getNew()", 10000); }, replace: function(html) { $("#new_notes_list").html(html); }, prepend: function(id, html) { if(id != this.last_id) { $("#new_notes_list").prepend(html); } }, getNew: function() { // refersh notes list $.ajax({ type: "GET", url: this.notes_path, data: "last_id=" + this.last_id + this.target_params, dataType: "script"}); }, refresh: function() { // refersh notes list $.ajax({ type: "GET", url: this.notes_path, data: "first_id=" + this.first_id + "&last_id=" + this.last_id + this.target_params, dataType: "script"}); }, /** * Init load of notes: * 1. Get content with ajax call * 2. Set content of notes list with loaded one */ getContent: function() { $.ajax({ type: "GET", url: this.notes_path, data: "?" + this.target_params, complete: function(){ $('.status').removeClass("loading")}, beforeSend: function() { $('.status').addClass("loading") }, dataType: "script"}); }, setContent: function(fid, lid, html) { this.last_id = lid; this.first_id = fid; $("#notes-list").html(html); // Init infinite scrolling this.initLoadMore(); }, /** * Paging for old notes when scroll to bottom: * 1. Init scroll events with 'initLoadMore' * 2. Load onlder notes with 'getOld' method * 3. append old notes to bottom of list with 'append' * */ getOld: function() { $('.loading').show(); $.ajax({ type: "GET", url: this.notes_path, data: "first_id=" + this.first_id + this.target_params, complete: function(){ $('.status').removeClass("loading")}, beforeSend: function() { $('.status').addClass("loading") }, dataType: "script"}); }, append: function(id, html) { if(this.first_id == id) { this.disable = true; } else { this.first_id = id; $("#notes-list").append(html); } }, initLoadMore: function() { $(document).endlessScroll({ bottomPixels: 400, fireDelay: 1000, fireOnce:true, ceaseFire: function() { return NoteList.disable; }, callback: function(i) { NoteList.getOld(); } }); } }; var PerLineNotes = { init: function() { $(".line_note_link, .line_note_reply_link").live("click", function(e) { var form = $(".per_line_form"); $(this).closest("tr").after(form); form.find("#note_line_code").val($(this).attr("line_code")); form.show(); return false; }); disableButtonIfEmtpyField(".line-note-text", ".submit_inline_note"); } }