fixed unworking infinite scroll
This commit is contained in:
parent
48bc4fc214
commit
ece9f50fb1
11 changed files with 180 additions and 66 deletions
|
@ -10,6 +10,7 @@
|
||||||
//= require jquery.ui.selectmenu
|
//= require jquery.ui.selectmenu
|
||||||
//= require jquery.tagify
|
//= require jquery.tagify
|
||||||
//= require jquery.cookie
|
//= require jquery.cookie
|
||||||
|
//= require jquery.endless-scroll
|
||||||
//= require modernizr
|
//= require modernizr
|
||||||
//= require chosen
|
//= require chosen
|
||||||
//= require raphael
|
//= require raphael
|
||||||
|
|
|
@ -2,6 +2,7 @@ var CommitsList = {
|
||||||
ref:null,
|
ref:null,
|
||||||
limit:0,
|
limit:0,
|
||||||
offset:0,
|
offset:0,
|
||||||
|
disable:false,
|
||||||
|
|
||||||
init:
|
init:
|
||||||
function(ref, limit) {
|
function(ref, limit) {
|
||||||
|
@ -36,15 +37,21 @@ var CommitsList = {
|
||||||
$("#commits_list").append(html);
|
$("#commits_list").append(html);
|
||||||
if(count > 0) {
|
if(count > 0) {
|
||||||
this.offset += count;
|
this.offset += count;
|
||||||
this.initLoadMore();
|
} else {
|
||||||
|
this.disable = true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
initLoadMore:
|
initLoadMore:
|
||||||
function() {
|
function() {
|
||||||
$(window).bind('scroll', function(){
|
$(document).endlessScroll({
|
||||||
if($(window).scrollTop() == $(document).height() - $(window).height()){
|
bottomPixels: 400,
|
||||||
$(window).unbind('scroll');
|
fireDelay: 1000,
|
||||||
|
fireOnce:true,
|
||||||
|
ceaseFire: function() {
|
||||||
|
return CommitsList.disable;
|
||||||
|
},
|
||||||
|
callback: function(i) {
|
||||||
CommitsList.getOld();
|
CommitsList.getOld();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -3,6 +3,7 @@ var NoteList = {
|
||||||
first_id: 0,
|
first_id: 0,
|
||||||
last_id: 0,
|
last_id: 0,
|
||||||
resource_name: null,
|
resource_name: null,
|
||||||
|
disable:false,
|
||||||
|
|
||||||
init:
|
init:
|
||||||
function(resource_name, first_id, last_id) {
|
function(resource_name, first_id, last_id) {
|
||||||
|
@ -26,9 +27,12 @@ getOld:
|
||||||
|
|
||||||
append:
|
append:
|
||||||
function(id, html) {
|
function(id, html) {
|
||||||
this.first_id = id;
|
if(this.first_id == id) {
|
||||||
$("#notes-list").append(html);
|
this.disable = true;
|
||||||
this.initLoadMore();
|
} else {
|
||||||
|
this.first_id = id;
|
||||||
|
$("#notes-list").append(html);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
replace:
|
replace:
|
||||||
|
@ -76,11 +80,16 @@ initRefresh:
|
||||||
|
|
||||||
initLoadMore:
|
initLoadMore:
|
||||||
function() {
|
function() {
|
||||||
$(window).bind('scroll', function(){
|
$(document).endlessScroll({
|
||||||
if($(window).scrollTop() == $(document).height() - $(window).height()){
|
bottomPixels: 400,
|
||||||
$(window).unbind('scroll');
|
fireDelay: 1000,
|
||||||
|
fireOnce:true,
|
||||||
|
ceaseFire: function() {
|
||||||
|
return NoteList.disable;
|
||||||
|
},
|
||||||
|
callback: function(i) {
|
||||||
NoteList.getOld();
|
NoteList.getOld();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
var Pager = {
|
var Pager = {
|
||||||
ref:null,
|
|
||||||
limit:0,
|
limit:0,
|
||||||
offset:0,
|
offset:0,
|
||||||
|
disable:false,
|
||||||
|
|
||||||
init:
|
init:
|
||||||
function(ref, limit) {
|
function(limit) {
|
||||||
this.ref=ref;
|
|
||||||
this.limit=limit;
|
this.limit=limit;
|
||||||
this.offset=limit;
|
this.offset=limit;
|
||||||
this.initLoadMore();
|
this.initLoadMore();
|
||||||
|
@ -28,17 +27,24 @@ var Pager = {
|
||||||
$(".content_list").append(html);
|
$(".content_list").append(html);
|
||||||
if(count > 0) {
|
if(count > 0) {
|
||||||
this.offset += count;
|
this.offset += count;
|
||||||
this.initLoadMore();
|
} else {
|
||||||
|
this.disable = true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
initLoadMore:
|
initLoadMore:
|
||||||
function() {
|
function() {
|
||||||
$(window).bind('scroll', function(){
|
$(document).endlessScroll({
|
||||||
if($(window).scrollTop() == $(document).height() - $(window).height()){
|
bottomPixels: 400,
|
||||||
$(window).unbind('scroll');
|
fireDelay: 1000,
|
||||||
|
fireOnce:true,
|
||||||
|
ceaseFire: function() {
|
||||||
|
return Pager.disable;
|
||||||
|
},
|
||||||
|
callback: function(i) {
|
||||||
|
$('.loading').show();
|
||||||
Pager.getOld();
|
Pager.getOld();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
var ProjectsList = {
|
|
||||||
limit:0,
|
|
||||||
offset:0,
|
|
||||||
|
|
||||||
init:
|
|
||||||
function(limit) {
|
|
||||||
this.limit=limit;
|
|
||||||
this.offset=limit;
|
|
||||||
this.initLoadMore();
|
|
||||||
},
|
|
||||||
|
|
||||||
getOld:
|
|
||||||
function() {
|
|
||||||
$('.loading').show();
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: location.href,
|
|
||||||
data: "limit=" + this.limit + "&offset=" + this.offset,
|
|
||||||
complete: function(){ $('.loading').hide()},
|
|
||||||
dataType: "script"});
|
|
||||||
},
|
|
||||||
|
|
||||||
append:
|
|
||||||
function(count, html) {
|
|
||||||
$(".tile").append(html);
|
|
||||||
if(count > 0) {
|
|
||||||
this.offset += count;
|
|
||||||
this.initLoadMore();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
initLoadMore:
|
|
||||||
function() {
|
|
||||||
$(window).bind('scroll', function(){
|
|
||||||
if($(window).scrollTop() == $(document).height() - $(window).height()){
|
|
||||||
$(window).unbind('scroll');
|
|
||||||
$('.loading').show();
|
|
||||||
ProjectsList.getOld();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -13,7 +13,7 @@ class CommitsController < ApplicationController
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@repo = project.repo
|
@repo = project.repo
|
||||||
@limit, @offset = (params[:limit] || 20), (params[:offset] || 0)
|
@limit, @offset = (params[:limit] || 40), (params[:offset] || 0)
|
||||||
@commits = @project.commits(@ref, params[:path], @limit, @offset)
|
@commits = @project.commits(@ref, params[:path], @limit, @offset)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
|
|
@ -26,6 +26,6 @@
|
||||||
- if @commits.count == @limit
|
- if @commits.count == @limit
|
||||||
:javascript
|
:javascript
|
||||||
$(function(){
|
$(function(){
|
||||||
CommitsList.init("#{@ref}", 20);
|
CommitsList.init("#{@ref}", #{@limit});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -14,3 +14,8 @@
|
||||||
|
|
||||||
- else
|
- else
|
||||||
:plain
|
:plain
|
||||||
|
|
||||||
|
- else
|
||||||
|
- if params[:first_id]
|
||||||
|
:plain
|
||||||
|
NoteList.append(#{params[:first_id]}, "");
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
%small= "( #{current_user.projects.count} )"
|
%small= "( #{current_user.projects.count} )"
|
||||||
%hr
|
%hr
|
||||||
- unless @projects.empty?
|
- unless @projects.empty?
|
||||||
%div.tile= render "tile"
|
%div.content_list= render "tile"
|
||||||
|
|
||||||
-# If projects requris paging
|
-# If projects requris paging
|
||||||
-# We add ajax loader & init script
|
-# We add ajax loader & init script
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
:javascript
|
:javascript
|
||||||
$(function(){
|
$(function(){
|
||||||
ProjectsList.init(16);
|
Pager.init(#{@limit});
|
||||||
});
|
});
|
||||||
- else
|
- else
|
||||||
%h2 Nothing here
|
%h2 Nothing here
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
:plain
|
:plain
|
||||||
ProjectsList.append(#{@projects.count}, "#{escape_javascript(render(:partial => 'projects/tile'))}");
|
Pager.append(#{@projects.count}, "#{escape_javascript(render(:partial => 'projects/tile'))}");
|
||||||
|
|
128
vendor/assets/javascripts/jquery.endless-scroll.js
vendored
Normal file
128
vendor/assets/javascripts/jquery.endless-scroll.js
vendored
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
/**
|
||||||
|
* Endless Scroll plugin for jQuery
|
||||||
|
*
|
||||||
|
* v1.4.8
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008 Fred Wu
|
||||||
|
*
|
||||||
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Usage:
|
||||||
|
*
|
||||||
|
* // using default options
|
||||||
|
* $(document).endlessScroll();
|
||||||
|
*
|
||||||
|
* // using some custom options
|
||||||
|
* $(document).endlessScroll({
|
||||||
|
* fireOnce: false,
|
||||||
|
* fireDelay: false,
|
||||||
|
* loader: "<div class=\"loading\"><div>",
|
||||||
|
* callback: function(){
|
||||||
|
* alert("test");
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* Configuration options:
|
||||||
|
*
|
||||||
|
* bottomPixels integer the number of pixels from the bottom of the page that triggers the event
|
||||||
|
* fireOnce boolean only fire once until the execution of the current event is completed
|
||||||
|
* fireDelay integer delay the subsequent firing, in milliseconds, 0 or false to disable delay
|
||||||
|
* loader string the HTML to be displayed during loading
|
||||||
|
* data string|function plain HTML data, can be either a string or a function that returns a string,
|
||||||
|
* when passed as a function it accepts one argument: fire sequence (the number
|
||||||
|
* of times the event triggered during the current page session)
|
||||||
|
* insertAfter string jQuery selector syntax: where to put the loader as well as the plain HTML data
|
||||||
|
* callback function callback function, accepts one argument: fire sequence (the number of times
|
||||||
|
* the event triggered during the current page session)
|
||||||
|
* resetCounter function resets the fire sequence counter if the function returns true, this function
|
||||||
|
* could also perform hook actions since it is applied at the start of the event
|
||||||
|
* ceaseFire function stops the event (no more endless scrolling) if the function returns true
|
||||||
|
*
|
||||||
|
* Usage tips:
|
||||||
|
*
|
||||||
|
* The plugin is more useful when used with the callback function, which can then make AJAX calls to retrieve content.
|
||||||
|
* The fire sequence argument (for the callback function) is useful for 'pagination'-like features.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function($){
|
||||||
|
|
||||||
|
$.fn.endlessScroll = function(options) {
|
||||||
|
|
||||||
|
var defaults = {
|
||||||
|
bottomPixels : 50,
|
||||||
|
fireOnce : true,
|
||||||
|
fireDelay : 150,
|
||||||
|
loader : "<br />Loading...<br />",
|
||||||
|
data : "",
|
||||||
|
insertAfter : "div:last",
|
||||||
|
resetCounter : function() { return false; },
|
||||||
|
callback : function() { return true; },
|
||||||
|
ceaseFire : function() { return false; }
|
||||||
|
};
|
||||||
|
|
||||||
|
var options = $.extend({}, defaults, options),
|
||||||
|
firing = true,
|
||||||
|
fired = false,
|
||||||
|
fireSequence = 0,
|
||||||
|
is_scrollable;
|
||||||
|
|
||||||
|
if (options.ceaseFire.apply(this) === true)
|
||||||
|
firing = false;
|
||||||
|
|
||||||
|
if (firing === true) {
|
||||||
|
$(this).scroll(function() {
|
||||||
|
if (options.ceaseFire.apply(this) === true) {
|
||||||
|
firing = false;
|
||||||
|
return; // Scroll will still get called, but nothing will happen
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this == document || this == window) {
|
||||||
|
is_scrollable = $(document).height() - $(window).height() <= $(window).scrollTop() + options.bottomPixels;
|
||||||
|
} else {
|
||||||
|
// calculates the actual height of the scrolling container
|
||||||
|
var inner_wrap = $(".endless_scroll_inner_wrap", this);
|
||||||
|
if (inner_wrap.length == 0)
|
||||||
|
inner_wrap = $(this).wrapInner("<div class=\"endless_scroll_inner_wrap\" />").find(".endless_scroll_inner_wrap");
|
||||||
|
is_scrollable = inner_wrap.length > 0 &&
|
||||||
|
(inner_wrap.height() - $(this).height() <= $(this).scrollTop() + options.bottomPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_scrollable && (options.fireOnce == false || (options.fireOnce == true && fired != true))) {
|
||||||
|
if (options.resetCounter.apply(this) === true) fireSequence = 0;
|
||||||
|
|
||||||
|
fired = true;
|
||||||
|
fireSequence++;
|
||||||
|
|
||||||
|
$(options.insertAfter).after("<div id=\"endless_scroll_loader\">" + options.loader + "</div>");
|
||||||
|
|
||||||
|
data = typeof options.data == 'function' ? options.data.apply(this, [fireSequence]) : options.data;
|
||||||
|
|
||||||
|
if (data !== false) {
|
||||||
|
$(options.insertAfter).after("<div id=\"endless_scroll_data\">" + data + "</div>");
|
||||||
|
$("#endless_scroll_data").hide().fadeIn(250, function() {$(this).removeAttr("id");});
|
||||||
|
|
||||||
|
options.callback.apply(this, [fireSequence]);
|
||||||
|
|
||||||
|
if (options.fireDelay !== false || options.fireDelay !== 0) {
|
||||||
|
$("body").after("<div id=\"endless_scroll_marker\"></div>");
|
||||||
|
// slight delay for preventing event firing twice
|
||||||
|
$("#endless_scroll_marker").fadeTo(options.fireDelay, 1, function() {
|
||||||
|
$(this).remove();
|
||||||
|
fired = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fired = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#endless_scroll_loader").remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
})(jQuery);
|
Loading…
Reference in a new issue