masonry-rails 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
data/README.md
CHANGED
@@ -377,6 +377,20 @@ Or whichever animated loader icon you want to use ;)
|
|
377
377
|
}
|
378
378
|
```
|
379
379
|
|
380
|
+
### Kaminary paging
|
381
|
+
|
382
|
+
You can combine masonry infinite scroll with Kaminari using suggestions here:
|
383
|
+
|
384
|
+
[Create-Infinite-Scrolling-with-jQuery](https://github.com/amatsuda/kaminari/wiki/How-To:-Create-Infinite-Scrolling-with-jQuery)
|
385
|
+
|
386
|
+
[railscast-endless-page](http://railscasts.com/episodes/114-endless-page-revised)
|
387
|
+
|
388
|
+
### jQuery pageless
|
389
|
+
|
390
|
+
[jquery pageless](https://github.com/jney/jquery.pageless) could also be used...
|
391
|
+
|
392
|
+
The jquery pageless plugin is now provided as `masonry/jquery.pageless.min.js`. The [repo]((https://github.com/jney/jquery.pageless) demonstrates how to use pageless with Rails 3.
|
393
|
+
|
380
394
|
## Use with images
|
381
395
|
|
382
396
|
See [image demo](http://masonry.desandro.com/demos/images.html) which uses *imagesLoaded* plugin (included - see below)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
data/masonry-rails.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "masonry-rails"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
@@ -72,6 +72,8 @@ Gem::Specification.new do |s|
|
|
72
72
|
"vendor/assets/javascripts/masonry/jquery.loremimages.min.js",
|
73
73
|
"vendor/assets/javascripts/masonry/jquery.masonry.js",
|
74
74
|
"vendor/assets/javascripts/masonry/jquery.masonry.min.js",
|
75
|
+
"vendor/assets/javascripts/masonry/jquery.pageless.js",
|
76
|
+
"vendor/assets/javascripts/masonry/jquery.pageless.min.js",
|
75
77
|
"vendor/assets/javascripts/masonry/modernizr-transitions.js",
|
76
78
|
"vendor/assets/stylesheets/masonry/basic.css",
|
77
79
|
"vendor/assets/stylesheets/masonry/centered.css",
|
@@ -0,0 +1,194 @@
|
|
1
|
+
// =======================================================================
|
2
|
+
// PageLess - endless page
|
3
|
+
//
|
4
|
+
// Pageless is a jQuery plugin.
|
5
|
+
// As you scroll down you see more results coming back at you automatically.
|
6
|
+
// It provides an automatic pagination in an accessible way : if javascript
|
7
|
+
// is disabled your standard pagination is supposed to work.
|
8
|
+
//
|
9
|
+
// Licensed under the MIT:
|
10
|
+
// http://www.opensource.org/licenses/mit-license.php
|
11
|
+
//
|
12
|
+
// Parameters:
|
13
|
+
// currentPage: current page (params[:page])
|
14
|
+
// distance: distance to the end of page in px when ajax query is fired
|
15
|
+
// loader: selector of the loader div (ajax activity indicator)
|
16
|
+
// loaderHtml: html code of the div if loader not used
|
17
|
+
// loaderImage: image inside the loader
|
18
|
+
// loaderMsg: displayed ajax message
|
19
|
+
// pagination: selector of the paginator divs.
|
20
|
+
// if javascript is disabled paginator is provided
|
21
|
+
// params: paramaters for the ajax query, you can pass auth_token here
|
22
|
+
// totalPages: total number of pages
|
23
|
+
// url: URL used to request more data
|
24
|
+
//
|
25
|
+
// Callback Parameters:
|
26
|
+
// scrape: A function to modify the incoming data.
|
27
|
+
// complete: A function to call when a new page has been loaded (optional)
|
28
|
+
// end: A function to call when the last page has been loaded (optional)
|
29
|
+
//
|
30
|
+
// Usage:
|
31
|
+
// $('#results').pageless({ totalPages: 10
|
32
|
+
// , url: '/articles/'
|
33
|
+
// , loaderMsg: 'Loading more results'
|
34
|
+
// });
|
35
|
+
//
|
36
|
+
// Requires: jquery
|
37
|
+
//
|
38
|
+
// Author: Jean-Sébastien Ney (https://github.com/jney)
|
39
|
+
//
|
40
|
+
// Contributors:
|
41
|
+
// Alexander Lang (https://github.com/langalex)
|
42
|
+
// Lukas Rieder (https://github.com/Overbryd)
|
43
|
+
// Kathryn Reeve (https://github.com/BinaryKitten)
|
44
|
+
//
|
45
|
+
// Thanks to:
|
46
|
+
// * codemonky.com/post/34940898
|
47
|
+
// * www.unspace.ca/discover/pageless/
|
48
|
+
// * famspam.com/facebox
|
49
|
+
// =======================================================================
|
50
|
+
|
51
|
+
(function($) {
|
52
|
+
|
53
|
+
var FALSE = !1
|
54
|
+
, TRUE = !FALSE
|
55
|
+
, element
|
56
|
+
, isLoading = FALSE
|
57
|
+
, loader
|
58
|
+
, namespace = '.pageless'
|
59
|
+
, SCROLL = 'scroll' + namespace
|
60
|
+
, RESIZE = 'resize' + namespace
|
61
|
+
, settings = { container: window
|
62
|
+
, currentPage: 1
|
63
|
+
, distance: 100
|
64
|
+
, pagination: '.pagination'
|
65
|
+
, params: {}
|
66
|
+
, url: location.href
|
67
|
+
, loaderImage: "/images/load.gif"
|
68
|
+
}
|
69
|
+
, container
|
70
|
+
, $container;
|
71
|
+
|
72
|
+
$.pageless = function(opts) {
|
73
|
+
$.isFunction(opts) ? opts.call() : init(opts);
|
74
|
+
};
|
75
|
+
|
76
|
+
$.pagelessReset = function() {
|
77
|
+
settings = { container: window
|
78
|
+
, currentPage: 1
|
79
|
+
, distance: 100
|
80
|
+
, pagination: '.pagination'
|
81
|
+
, params: {}
|
82
|
+
, url: location.href
|
83
|
+
, loaderImage: "/images/load.gif"
|
84
|
+
};
|
85
|
+
stopListener();
|
86
|
+
// if there is a afterStopListener callback we call it
|
87
|
+
if (settings.end) settings.end.call();
|
88
|
+
};
|
89
|
+
|
90
|
+
var loaderHtml = function () {
|
91
|
+
return settings.loaderHtml || '\
|
92
|
+
<div id="pageless-loader" style="display:none;text-align:center;width:100%;">\
|
93
|
+
<div class="msg" style="color:#e9e9e9;font-size:2em"></div>\
|
94
|
+
<img src="' + settings.loaderImage + '" alt="loading more results" style="margin:10px auto" />\
|
95
|
+
</div>';
|
96
|
+
};
|
97
|
+
|
98
|
+
// settings params: totalPages
|
99
|
+
var init = function (opts) {
|
100
|
+
if (settings.inited) return;
|
101
|
+
settings.inited = TRUE;
|
102
|
+
|
103
|
+
if (opts) $.extend(settings, opts);
|
104
|
+
|
105
|
+
container = settings.container;
|
106
|
+
$container = $(container);
|
107
|
+
|
108
|
+
// for accessibility we can keep pagination links
|
109
|
+
// but since we have javascript enabled we remove pagination links
|
110
|
+
if(settings.pagination) $(settings.pagination).remove();
|
111
|
+
|
112
|
+
// start the listener
|
113
|
+
startListener();
|
114
|
+
};
|
115
|
+
|
116
|
+
$.fn.pageless = function (opts) {
|
117
|
+
var $el = $(this)
|
118
|
+
, $loader = $(opts.loader, $el);
|
119
|
+
|
120
|
+
init(opts);
|
121
|
+
element = $el;
|
122
|
+
|
123
|
+
// loader element
|
124
|
+
if (opts.loader && $loader.length) {
|
125
|
+
loader = $loader;
|
126
|
+
} else {
|
127
|
+
loader = $(loaderHtml());
|
128
|
+
$el.append(loader);
|
129
|
+
// if we use the default loader, set the message
|
130
|
+
if (!opts.loaderHtml) {
|
131
|
+
$('#pageless-loader .msg').html(opts.loaderMsg).css(opts.msgStyles || {});
|
132
|
+
}
|
133
|
+
}
|
134
|
+
};
|
135
|
+
|
136
|
+
//
|
137
|
+
var loading = function (bool) {
|
138
|
+
(isLoading = bool)
|
139
|
+
? (loader && loader.fadeIn('normal'))
|
140
|
+
: (loader && loader.fadeOut('normal'));
|
141
|
+
};
|
142
|
+
|
143
|
+
// distance to end of the container
|
144
|
+
var distanceToBottom = function () {
|
145
|
+
return (container === window)
|
146
|
+
? $(document).height()
|
147
|
+
- $container.scrollTop()
|
148
|
+
- $container.height()
|
149
|
+
: $container[0].scrollHeight
|
150
|
+
- $container.scrollTop()
|
151
|
+
- $container.height();
|
152
|
+
};
|
153
|
+
|
154
|
+
var stopListener = function() {
|
155
|
+
$container.unbind(namespace);
|
156
|
+
};
|
157
|
+
|
158
|
+
// * bind a scroll event
|
159
|
+
// * trigger is once in case of reload
|
160
|
+
var startListener = function() {
|
161
|
+
$container.bind(SCROLL+' '+RESIZE, watch)
|
162
|
+
.trigger(SCROLL);
|
163
|
+
};
|
164
|
+
|
165
|
+
var watch = function() {
|
166
|
+
// listener was stopped or we've run out of pages
|
167
|
+
if (settings.totalPages <= settings.currentPage) {
|
168
|
+
stopListener();
|
169
|
+
// if there is a afterStopListener callback we call it
|
170
|
+
if (settings.end) settings.end.call();
|
171
|
+
return;
|
172
|
+
}
|
173
|
+
|
174
|
+
// if slider past our scroll offset, then fire a request for more data
|
175
|
+
if(!isLoading && (distanceToBottom() < settings.distance)) {
|
176
|
+
loading(TRUE);
|
177
|
+
// move to next page
|
178
|
+
settings.currentPage++;
|
179
|
+
// set up ajax query params
|
180
|
+
$.extend( settings.params
|
181
|
+
, { page: settings.currentPage });
|
182
|
+
// finally ajax query
|
183
|
+
$.get( settings.url
|
184
|
+
, settings.params
|
185
|
+
, function (data) {
|
186
|
+
$.isFunction(settings.scrape) ? settings.scrape(data) : data;
|
187
|
+
loader ? loader.before(data) : element.append(data);
|
188
|
+
loading(FALSE);
|
189
|
+
// if there is a complete callback we call it
|
190
|
+
if (settings.complete) settings.complete.call();
|
191
|
+
}, 'html');
|
192
|
+
}
|
193
|
+
};
|
194
|
+
})(jQuery);
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(a){var b=!1,c=!b,d,e=b,f,g=".pageless",h="scroll"+g,i="resize"+g,j={container:window,currentPage:1,distance:100,pagination:".pagination",params:{},url:location.href,loaderImage:"/images/load.gif"},k,l;a.pageless=function(b){a.isFunction(b)?j.call():n(b)};var m=function(){return j.loaderHtml||'\n<div id="pageless-loader" style="display:none;text-align:center;width:100%;">\n <div class="msg" style="color:#e9e9e9;font-size:2em"></div>\n <img src="'+j.loaderImage+'" alt="loading more results" style="margin:10px auto" />\n</div>'};var n=function(b){if(j.inited)return;j.inited=c;if(b)a.extend(j,b);k=j.container;l=a(k);if(j.pagination)a(j.pagination).remove();r()};a.fn.pageless=function(b){var c=a(this),e=a(b.loader,c);n(b);d=c;if(b.loader&&e.length){f=e}else{f=a(m());c.append(f);if(!b.loaderHtml){a("#pageless-loader .msg").html(b.loaderMsg).css(b.msgStyles||{})}}};var o=function(a){(e=a)?f&&f.fadeIn("normal"):f&&f.fadeOut("normal")};var p=function(){return k===window?a(document).height()-l.scrollTop()-l.height():l[0].scrollHeight-l.scrollTop()-l.height()};var q=function(){l.unbind(g)};var r=function(){l.bind(h+" "+i,s).trigger(h)};var s=function(){if(j.totalPages<=j.currentPage){q();if(j.end)j.end.call();return}if(!e&&p()<j.distance){o(c);j.currentPage++;a.extend(j.params,{page:j.currentPage});a.get(j.url,j.params,function(c){a.isFunction(j.scrape)?j.scrape(c):c;f?f.before(c):d.append(c);o(b);if(j.complete)j.complete.call()},"html")}}})(jQuery)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: masonry-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -170,6 +170,8 @@ files:
|
|
170
170
|
- vendor/assets/javascripts/masonry/jquery.loremimages.min.js
|
171
171
|
- vendor/assets/javascripts/masonry/jquery.masonry.js
|
172
172
|
- vendor/assets/javascripts/masonry/jquery.masonry.min.js
|
173
|
+
- vendor/assets/javascripts/masonry/jquery.pageless.js
|
174
|
+
- vendor/assets/javascripts/masonry/jquery.pageless.min.js
|
173
175
|
- vendor/assets/javascripts/masonry/modernizr-transitions.js
|
174
176
|
- vendor/assets/stylesheets/masonry/basic.css
|
175
177
|
- vendor/assets/stylesheets/masonry/centered.css
|
@@ -193,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
193
195
|
version: '0'
|
194
196
|
segments:
|
195
197
|
- 0
|
196
|
-
hash:
|
198
|
+
hash: 1929806335943321942
|
197
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
200
|
none: false
|
199
201
|
requirements:
|