Skip to content
This repository has been archived by the owner on Nov 30, 2017. It is now read-only.

Commit

Permalink
Merge pull request #28 from dirkschumacher/develop
Browse files Browse the repository at this point in the history
iUPB Version V2 with pinboard feature develop -> master
  • Loading branch information
dirkschumacher committed Jan 20, 2013
2 parents 570beae + 522e015 commit 2bdd7e3
Show file tree
Hide file tree
Showing 21 changed files with 470 additions and 48 deletions.
3 changes: 2 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ gem "recaptcha", :require => "recaptcha/rails"
gem "ri_cal"

gem "ruby-oembed", "~> 0.8.8"
gem "sanitize"
gem 'mongoid_slug', :git => "git://github.com/digitalplaywright/mongoid-slug.git", ref: "7f99b27b26d460a5e12bba9accccd1dd215073c8" # Mongoid2 / https://github.com/digitalplaywright/mongoid-slug/issues/100#issuecomment-10030053

gem "mongoid-paperclip", :require => "mongoid_paperclip"
Expand Down Expand Up @@ -71,6 +70,8 @@ gem 'jquery-rails'
gem 'twitter-bootstrap-rails'

gem "high_voltage"
gem "will_paginate_mongoid"
gem 'bootstrap-will_paginate'

gem "nokogiri"

Expand Down
12 changes: 8 additions & 4 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ GEM
bbenezech-nested_form (0.0.6)
bcrypt-ruby (3.0.1)
bootstrap-sass (2.0.4.2)
bootstrap-will_paginate (0.0.9)
will_paginate
bson (1.6.2)
bson_ext (1.6.2)
bson (~> 1.6.2)
Expand Down Expand Up @@ -238,9 +240,6 @@ GEM
ri_cal (0.8.8)
ruby-oembed (0.8.8)
rubyzip (0.9.6.1)
sanitize (2.0.3)
nokogiri (>= 1.4.4, < 1.6)
nokogiri (>= 1.4.4, < 1.6)
sass (3.1.15)
sass-rails (3.2.5)
railties (~> 3.2.0)
Expand Down Expand Up @@ -289,13 +288,18 @@ GEM
uuidtools (2.1.3)
warden (1.2.1)
rack (>= 1.0)
will_paginate (3.0.4)
will_paginate_mongoid (1.1.0)
mongoid (>= 2.4)
will_paginate (~> 3.0)
yajl-ruby (1.1.0)

PLATFORMS
ruby

DEPENDENCIES
aws-sdk
bootstrap-will_paginate
bson_ext
coffee-rails (~> 3.2.1)
compass-rails
Expand Down Expand Up @@ -327,12 +331,12 @@ DEPENDENCIES
recaptcha
ri_cal
ruby-oembed (~> 0.8.8)
sanitize
sass-rails (~> 3.2.3)
sourceninja (~> 0.9.0)
thin
tire
twitter-bootstrap-rails
uglifier (>= 1.0.3)
unicorn
will_paginate_mongoid
yajl-ruby
Binary file added app/assets/images/load.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions app/assets/javascripts/ads.js.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,6 @@
column_count++
return
)
if options.doNotDelete isnt true then $("#post_list").empty()

return grid
1 change: 1 addition & 0 deletions app/assets/javascripts/libs/fallback_icons.js.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"icon-heart": "&hearts;"
"icon-list": "&equiv; "
"icon-ok": "&#x2713;"
"icon-arrow-left": "&lArr;"

@iUPB.fallbackIcons.replace = (fontsAvailable = window.iUPB.fontsAvailable()) ->
if fontsAvailable is false
Expand Down
210 changes: 210 additions & 0 deletions app/assets/javascripts/libs/jquery.pageless.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
// https://raw.github.com/jney/jquery.pageless/master/lib/jquery.pageless.js
//
// =======================================================================
// PageLess - endless page
//
// Pageless is a jQuery plugin.
// As you scroll down you see more results coming back at you automatically.
// It provides an automatic pagination in an accessible way : if javascript
// is disabled your standard pagination is supposed to work.
//
// Licensed under the MIT:
// http://www.opensource.org/licenses/mit-license.php
//
// Parameters:
// currentPage: current page (params[:page])
// distance: distance to the end of page in px when ajax query is fired
// loader: selector of the loader div (ajax activity indicator)
// loaderHtml: html code of the div if loader not used
// loaderImage: image inside the loader
// loaderMsg: displayed ajax message
// pagination: selector of the paginator divs.
// if javascript is disabled paginator is provided
// params: paramaters for the ajax query, you can pass auth_token here
// totalPages: total number of pages
// url: URL used to request more data
// method: HTML method for call URL, default - get
//
// Callback Parameters:
// scrape: A function to modify the incoming data.
// complete: A function to call when a new page has been loaded (optional)
// end: A function to call when the last page has been loaded (optional)
//
// Usage:
// $('#results').pageless({ totalPages: 10
// , url: '/articles/'
// , loaderMsg: 'Loading more results'
// });
//
// Requires: jquery
//
// Author: Jean-Sébastien Ney (https://github.com/jney)
//
// Contributors:
// Alexander Lang (https://github.com/langalex)
// Lukas Rieder (https://github.com/Overbryd)
// Kathryn Reeve (https://github.com/BinaryKitten)
//
// Thanks to:
// * codemonky.com/post/34940898
// * www.unspace.ca/discover/pageless/
// * famspam.com/facebox
// =======================================================================

(function($) {

var FALSE = !1
, TRUE = !FALSE
, element
, isLoading = FALSE
, loader
, namespace = '.pageless'
, SCROLL = 'scroll' + namespace
, RESIZE = 'resize' + namespace
, settings = { container: window
, currentPage: 1
, distance: 100
, pagination: '.pagination'
, params: {}
, url: location.href
, loaderImage: "/images/load.gif"
, method: 'get'
}
, container
, $container;

$.pageless = function(opts) {
$.isFunction(opts) ? opts.call() : init(opts);
};

$.pagelessReset = function() {
settings = { container: window
, currentPage: 1
, distance: 100
, pagination: '.pagination'
, params: {}
, url: location.href
, loaderImage: "/images/load.gif"
, method: 'get'
};
stopListener();
// if there is a afterStopListener callback we call it
if (settings.end) settings.end.call();
};

var loaderHtml = function () {
return settings.loaderHtml || '\
<div id="pageless-loader" style="display:none;text-align:center;width:100%;">\
<div class="msg" style="color:#e9e9e9;font-size:2em"></div>\
<img src="' + settings.loaderImage + '" alt="loading more results" style="margin:10px auto" />\
</div>';
};

// settings params: totalPages
var init = function (opts) {
if (settings.inited) return;
settings.inited = TRUE;

if (opts) $.extend(settings, opts);

container = settings.container;
$container = $(container);

// for accessibility we can keep pagination links
// but since we have javascript enabled we remove pagination links
if(settings.pagination) $(settings.pagination).remove();

// start the listener
startListener();
};

$.fn.pageless = function (opts) {
var $el = $(this)
, $loader = $(opts.loader, $el);

init(opts);
element = $el;

// loader element
if (opts.loader && $loader.length) {
loader = $loader;
} else {
loader = $(loaderHtml());
$el.append(loader);
// if we use the default loader, set the message
if (!opts.loaderHtml) {
$('#pageless-loader .msg').html(opts.loaderMsg).css(opts.msgStyles || {});
}
}
};

//
var loading = function (bool) {
(isLoading = bool)
? (loader && loader.fadeIn('normal'))
: (loader && loader.fadeOut('normal'));
};

// distance to end of the container
var distanceToBottom = function () {
return (container === window)
? $(document).height()
- $container.scrollTop()
- $container.height()
: $container[0].scrollHeight
- $container.scrollTop()
- $container.height();
};

var stopListener = function() {
$container.unbind(namespace);
};

// * bind a scroll event
// * trigger is once in case of reload
var startListener = function() {
$container.bind(SCROLL+' '+RESIZE, watch)
.trigger(SCROLL);
};

var watch = function() {
// listener was stopped or we've run out of pages
if (settings.totalPages <= settings.currentPage) {
stopListener();
// if there is a afterStopListener callback we call it
if (settings.end) settings.end.call();
return;
}

// if slider past our scroll offset, then fire a request for more data
if(!isLoading && (distanceToBottom() < settings.distance)) {
loading(TRUE);
// move to next page
settings.currentPage++;
// set up ajax query params
$.extend( settings.params
, { page: settings.currentPage });
// finally ajax query
if (settings.method == 'post') {
$.post( settings.url
, settings.params
, function (data) {
$.isFunction(settings.scrape) ? settings.scrape(data) : data;
loader ? loader.before(data) : element.append(data);
loading(FALSE);
// if there is a complete callback we call it
if (settings.complete) settings.complete.call();
}, 'html');
} else {
$.get( settings.url
, settings.params
, function (data) {
$.isFunction(settings.scrape) ? settings.scrape(data) : data;
loader ? loader.before(data) : element.append(data);
loading(FALSE);
if (settings.complete) settings.complete.call();
}, 'html');
}
}
};
})(jQuery);
Loading

0 comments on commit 2bdd7e3

Please sign in to comment.