masonry-rails 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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:
|