Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
// ======================================================================= // EndlessPage - implement endless page with will_paginate plugin // // Author: Shawn Veader (shawn@veader.org) // // Parameters: // total_page: total number of pages, found in @collection.page_count // url: URL used to request more data // auth_token: the authenticity token needed for Rails 2.X // // Requires: Prototype for Javascript and will_paginate plugin for Rails // ======================================================================= var EndlessPage = Class.create(); EndlessPage.prototype = { initialize: function (total_pages, url, auth_token) { this.timer = null; this.current_page = 1; this.total_pages = total_pages; this.ajax_path = url; this.interval = 1000; // 1 second this.scroll_offset = 0.6; // 60% this.auth_token = auth_token; // start the listener this.start_listener(); }, stop_listener: function () { this.timer = null; }, start_listener: function () { this.timer = setTimeout('ep._check_scroll()', this.interval); }, _check_scroll: function () { if(this.timer == undefined || this.total_pages == this.current_page) { // listener was stopped or we've run out of pages return; } var offset = document.viewport.getScrollOffsets()[1]; // second of the pair is the horizontal scroll // if slider past our scroll offset, then fire a request for more data if(offset/document.viewport.getHeight() > this.scroll_offset) { this.current_page++; // move to next page new Ajax.Request(this.ajax_path, { parameters: { authenticity_token: this.auth_token, page: this.current_page } }); } // start the listener again this.start_listener(); } };
This paste will be private.
From the Design Piracy series on my blog: