pagesjs 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +7 -0
- data/README.md +48 -7
- data/lib/assets/javascripts/pages.js +198 -113
- metadata +8 -8
data/ChangeLog
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.1 (Ignacy Hryniewiecki)
|
2
|
+
* Add API to redefine work with URL.
|
3
|
+
* Rename Pages.pagesSelector to Pages.selector.
|
4
|
+
* Simpler API in Pages.animating.
|
5
|
+
* Abort previous page loading, when start to load new one.
|
6
|
+
* Decrease files size (by compressible code and UnglifyJS 2).
|
7
|
+
|
1
8
|
== 0.0.5 (Pyotr Kakhovsky)
|
2
9
|
* Add data.from with URL changing source.
|
3
10
|
* Pages.open() will change URL if it necessary.
|
data/README.md
CHANGED
@@ -76,7 +76,9 @@ For Ruby on Rails you can use gem for Assets Pipeline.
|
|
76
76
|
|
77
77
|
If you don’t use any assets packaging manager (it’s very bad idea), you can use
|
78
78
|
already minified version of the library.
|
79
|
-
Take
|
79
|
+
Take it from: [github.com/ai/pages.js/downloads].
|
80
|
+
|
81
|
+
[github.com/ai/pages.js/downloads]: https://github.com/ai/pages.js/downloads
|
80
82
|
|
81
83
|
## Usage
|
82
84
|
|
@@ -118,7 +120,7 @@ Callbacks get three arguments:
|
|
118
120
|
* `$`: jQuery.
|
119
121
|
* `$$`: jQuery finder only in current page (a little bit faster and more safely
|
120
122
|
than `$`). For example `$$('a')` is equal to `$('a', page)`.
|
121
|
-
* `page`: jQuery-nodes of selected
|
123
|
+
* `page`: jQuery-nodes of selected page.
|
122
124
|
|
123
125
|
You can pass `load` as second argument without other options:
|
124
126
|
|
@@ -165,7 +167,7 @@ You can create you own animation, just add object with `animate` function.
|
|
165
167
|
When animation ends, you *must* call `done` argument.
|
166
168
|
|
167
169
|
```js
|
168
|
-
Pages.
|
170
|
+
Pages.animations.cool = {
|
169
171
|
animate: function(prev, next, done, data) {
|
170
172
|
prev.coolHiding();
|
171
173
|
next.coolShowing(function() {
|
@@ -185,7 +187,7 @@ Argument `data` contains merged page and link data attributes:
|
|
185
187
|
```
|
186
188
|
|
187
189
|
```js
|
188
|
-
Pages.
|
190
|
+
Pages.animations.slide = {
|
189
191
|
animate: function(prev, next, done, data) {
|
190
192
|
prev.slideHide(data.direction);
|
191
193
|
next.slideShow(data.direction, function() {
|
@@ -222,6 +224,42 @@ $(document).load(function() {
|
|
222
224
|
});
|
223
225
|
```
|
224
226
|
|
227
|
+
### History API support
|
228
|
+
|
229
|
+
I prefer graceful degradation and think, that old browsers should reload full
|
230
|
+
page by old way. But if you want to add page changes animation to old browser,
|
231
|
+
you can redefine `Pages.isSupported`, `Pages.getURL`, `Pages.setURL`,
|
232
|
+
`Pages.watchURL` and `Pages.unwatchURL` methods to support any of History API
|
233
|
+
polyffils.
|
234
|
+
|
235
|
+
### URL Methods
|
236
|
+
|
237
|
+
You can redefine way, that Pages.js use to get/set current page URL.
|
238
|
+
For example, to synchronize open page between different tabs by Session Storage,
|
239
|
+
or to support one page sites:
|
240
|
+
|
241
|
+
```js
|
242
|
+
Pages.isSupported = function() {
|
243
|
+
return true;
|
244
|
+
};
|
245
|
+
|
246
|
+
Pages.setURL = function(url) {
|
247
|
+
location.hash = url;
|
248
|
+
};
|
249
|
+
|
250
|
+
Pages.getURL = function() {
|
251
|
+
return location.hash;
|
252
|
+
};
|
253
|
+
|
254
|
+
Pages.watchURL = function(callback) {
|
255
|
+
$(window).on('hashchange.pages', callback);
|
256
|
+
};
|
257
|
+
|
258
|
+
Pages.unwatchURL = function() {
|
259
|
+
$(window).off('hashchange.pages');
|
260
|
+
};
|
261
|
+
```
|
262
|
+
|
225
263
|
## Contributing
|
226
264
|
|
227
265
|
1. To run tests you need node.js and npm. For example, in Ubuntu run:
|
@@ -239,9 +277,12 @@ $(document).load(function() {
|
|
239
277
|
3. Run test server:
|
240
278
|
|
241
279
|
```sh
|
242
|
-
./node_modules/.bin/cake
|
280
|
+
./node_modules/.bin/cake server
|
243
281
|
```
|
244
282
|
|
245
|
-
4. Open tests in browser:
|
283
|
+
4. Open tests in browser: [localhost:8000].
|
246
284
|
5. Also you can see real usage example in integration test:
|
247
|
-
|
285
|
+
[localhost:8000/integration].
|
286
|
+
|
287
|
+
[localhost:8000]: http://localhost:8000
|
288
|
+
[localhost:8000/integration]: http://localhost:8000/integration
|
@@ -16,7 +16,7 @@
|
|
16
16
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
17
|
*/
|
18
18
|
|
19
|
-
;(function(
|
19
|
+
;(function($, undefined) {
|
20
20
|
"use strict";
|
21
21
|
|
22
22
|
// Pages.js is a framework for History pushState. It allow you to manage
|
@@ -30,7 +30,7 @@
|
|
30
30
|
// page content without layout. Just check `HTTP_X_REQUESTED_WITH`
|
31
31
|
// HTTP header to equal `"XMLHttpRequest"`.
|
32
32
|
// 3. Load jQuery before Pages.js.
|
33
|
-
window.Pages = {
|
33
|
+
var self = window.Pages = {
|
34
34
|
|
35
35
|
// Is history management disabled.
|
36
36
|
disabled: false,
|
@@ -45,8 +45,8 @@
|
|
45
45
|
//
|
46
46
|
// Be default it is `article.page` (`article` tag with `page` class).
|
47
47
|
//
|
48
|
-
// Pages.
|
49
|
-
|
48
|
+
// Pages.selector = '.page';
|
49
|
+
selector: 'article.page',
|
50
50
|
|
51
51
|
// Current animation name. For some page or link you can set
|
52
52
|
// custom animation by `data-page-animation` attribute.
|
@@ -71,7 +71,31 @@
|
|
71
71
|
// }
|
72
72
|
// };
|
73
73
|
// Pages.animation = 'slideUpDown';
|
74
|
-
animations: {
|
74
|
+
animations: {
|
75
|
+
// The simplest “animation”. Just immediately hide/show pages
|
76
|
+
// by CSS display property.
|
77
|
+
immediately: {
|
78
|
+
animate: function(prev, next, done, data) {
|
79
|
+
prev.hide();
|
80
|
+
next.show();
|
81
|
+
done();
|
82
|
+
}
|
83
|
+
},
|
84
|
+
|
85
|
+
// Simple fade in/out animation.
|
86
|
+
fade: {
|
87
|
+
// Animation duration in milliseconds.
|
88
|
+
duration: 300,
|
89
|
+
|
90
|
+
animate: function(prev, next, done, data) {
|
91
|
+
var half = this.duration / 2;
|
92
|
+
prev.fadeOut(half, function() {
|
93
|
+
next.fadeIn(half, done);
|
94
|
+
});
|
95
|
+
}
|
96
|
+
},
|
97
|
+
|
98
|
+
},
|
75
99
|
|
76
100
|
// Add description for page with `selector`. Allow options:
|
77
101
|
// * `load`: `function ($, $$, page)` which is called, when page is loaded
|
@@ -122,24 +146,24 @@
|
|
122
146
|
// });
|
123
147
|
// });
|
124
148
|
add: function(selector, options) {
|
125
|
-
if (
|
126
|
-
|
149
|
+
if ( options == undefined ) {
|
150
|
+
self._liveCallbacks.push(selector);
|
127
151
|
} else {
|
128
152
|
if ( typeof(options) == 'function' ) {
|
129
153
|
options = { load: options };
|
130
154
|
}
|
131
155
|
options.selector = selector;
|
132
|
-
|
156
|
+
self._pages.push(options);
|
133
157
|
}
|
134
158
|
},
|
135
159
|
|
136
160
|
// Run Pages.js. It’s called automatically on document ready.
|
137
161
|
// It’s used for tests.
|
138
162
|
init: function() {
|
139
|
-
|
140
|
-
var current =
|
163
|
+
self._enlive($(self._doc));
|
164
|
+
var current = self._findCurrent();
|
141
165
|
if ( current.length ) {
|
142
|
-
|
166
|
+
self._setCurrent(current);
|
143
167
|
}
|
144
168
|
},
|
145
169
|
|
@@ -148,6 +172,13 @@
|
|
148
172
|
// if ( !Pages.isSupported() ) {
|
149
173
|
// $('.old-browser-notice').show();
|
150
174
|
// }
|
175
|
+
//
|
176
|
+
// If you rewrite `setURL` and other URL methods, you maybe need
|
177
|
+
// to override this method too:
|
178
|
+
//
|
179
|
+
// Pages.isSupported = function() {
|
180
|
+
// return true;
|
181
|
+
// };
|
151
182
|
isSupported: function() {
|
152
183
|
return !!(window.history && history.pushState);
|
153
184
|
},
|
@@ -155,20 +186,20 @@
|
|
155
186
|
// Start session history management. It’s called automatically on
|
156
187
|
// document ready. You can use it manually after `Pages.disable` calling.
|
157
188
|
enable: function() {
|
158
|
-
if (
|
189
|
+
if ( self._events || !self.isSupported() ) {
|
159
190
|
return false;
|
160
191
|
}
|
161
|
-
|
162
|
-
|
192
|
+
self.disabled = false;
|
193
|
+
self._events = true;
|
163
194
|
|
164
|
-
|
165
|
-
if (
|
166
|
-
|
195
|
+
self.watchURL(function() {
|
196
|
+
if ( self._lastUrl != self.getURL() ) {
|
197
|
+
self.open(self.getURL(), { from: 'popstate' });
|
167
198
|
}
|
168
199
|
});
|
169
200
|
|
170
|
-
$(
|
171
|
-
return
|
201
|
+
$(self._doc).on('click.pages', 'a', function() {
|
202
|
+
return self._openLink($(this));
|
172
203
|
});
|
173
204
|
|
174
205
|
return true;
|
@@ -177,10 +208,10 @@
|
|
177
208
|
// Disable session history management. Pages.js will load by default browser
|
178
209
|
// way without AJAX and animations.
|
179
210
|
disable: function() {
|
180
|
-
$(
|
181
|
-
|
182
|
-
|
183
|
-
|
211
|
+
$(self._doc).off('click.pages', 'a');
|
212
|
+
self.unwatchURL();
|
213
|
+
self.disabled = true;
|
214
|
+
self._events = false;
|
184
215
|
},
|
185
216
|
|
186
217
|
// Show page by `url` with overrided page `data`. Return true if page is
|
@@ -190,29 +221,29 @@
|
|
190
221
|
// Pages.open('/gameover');
|
191
222
|
// }, 5000);
|
192
223
|
open: function(url, data) {
|
193
|
-
if (
|
194
|
-
|
224
|
+
if ( self.getURL() != url ) {
|
225
|
+
self.setURL(url);
|
195
226
|
}
|
196
227
|
|
197
|
-
if (
|
228
|
+
if ( data == undefined ) {
|
198
229
|
data = { };
|
199
230
|
}
|
200
|
-
if (
|
231
|
+
if ( data.from == undefined ) {
|
201
232
|
data.from = 'js';
|
202
233
|
}
|
203
234
|
data.url = url;
|
204
|
-
|
235
|
+
self._lastUrl = url;
|
205
236
|
|
206
|
-
var page =
|
237
|
+
var page = self.page(url);
|
207
238
|
if ( page.length ) {
|
208
|
-
|
239
|
+
self._openPage(page, data);
|
209
240
|
return true;
|
210
241
|
} else {
|
211
|
-
|
242
|
+
self._loadPages(url, data, function(nodes) {
|
212
243
|
nodes.hide();
|
213
|
-
page =
|
244
|
+
page = self.page(url, nodes);
|
214
245
|
if ( page.length ) {
|
215
|
-
|
246
|
+
self._openPage(page, data);
|
216
247
|
}
|
217
248
|
});
|
218
249
|
return false;
|
@@ -220,16 +251,16 @@
|
|
220
251
|
},
|
221
252
|
|
222
253
|
// Find loaded page by URL in `data-url` attribute.
|
223
|
-
// It use `Pages.
|
254
|
+
// It use `Pages.selector` to detect pages tags.
|
224
255
|
//
|
225
256
|
// if ( Pages.page('/comments').length ) {
|
226
257
|
// // Comment page is loaded to DOM
|
227
258
|
// }
|
228
259
|
page: function(url, base) {
|
229
260
|
if ( !base ) {
|
230
|
-
base = $(
|
261
|
+
base = $(self._doc);
|
231
262
|
}
|
232
|
-
var selector =
|
263
|
+
var selector = self.selector + '[data-url="' + url + '"]';
|
233
264
|
return base.filter(selector).add(base.find(selector));
|
234
265
|
},
|
235
266
|
|
@@ -247,10 +278,24 @@
|
|
247
278
|
// from AJAX (but `HTTP_X_REQUESTED_WITH` is better way):
|
248
279
|
//
|
249
280
|
// Page.load = function(url, data, callbacks) {
|
250
|
-
// $.get(url + '?no_layout=1', callback);
|
281
|
+
// return $.get(url + '?no_layout=1', callback);
|
251
282
|
// };
|
283
|
+
//
|
284
|
+
// It must return some AJAX request object or ID to use it in `stopLoading`.
|
285
|
+
// If you use non-jQuery AJAX, you need also override `stopLoading`.
|
252
286
|
load: function(url, data, callback) {
|
253
|
-
$.get(url, callback);
|
287
|
+
return $.get(url, callback);
|
288
|
+
},
|
289
|
+
|
290
|
+
// Stop current AJAX page loading. It just abort jQuery AJAX, but allow you
|
291
|
+
// to override it.
|
292
|
+
//
|
293
|
+
// It will get as argument, what `load` was return.
|
294
|
+
//
|
295
|
+
// You need to override this method, only if your `load` override, don’t
|
296
|
+
// return jQuery jqXHR object (`$.get` and `$.post` return correct jqXHR).
|
297
|
+
stopLoading: function(loading) {
|
298
|
+
loading.abort();
|
254
299
|
},
|
255
300
|
|
256
301
|
// Change document title. It is internal method, used by `Pages.open`,
|
@@ -268,17 +313,59 @@
|
|
268
313
|
//
|
269
314
|
// Pages.preload('/posts/all');
|
270
315
|
preload: function(url) {
|
271
|
-
|
316
|
+
self._loadPages(url, { }, function(nodes) {
|
272
317
|
nodes.hide();
|
273
318
|
})
|
274
319
|
},
|
275
320
|
|
321
|
+
// Change document URL to `url`. By default it will use
|
322
|
+
// `history.pushState`, but you can change it to support
|
323
|
+
// your history library or some hacks.
|
324
|
+
//
|
325
|
+
// Pages.setURL = function(url) {
|
326
|
+
// location.hash = url;
|
327
|
+
// };
|
328
|
+
setURL: function(url) {
|
329
|
+
history.pushState({ }, '', url);
|
330
|
+
},
|
331
|
+
|
332
|
+
// Get current page URL. By default it will use `location.pathname`,
|
333
|
+
// but you can change it to support your history library or some hacks.
|
334
|
+
//
|
335
|
+
// Pages.getURL = function() {
|
336
|
+
// return location.hash;
|
337
|
+
// };
|
338
|
+
getURL: function() {
|
339
|
+
return location.pathname;
|
340
|
+
},
|
341
|
+
|
342
|
+
// Set `callback` to watch for current page URL changes.
|
343
|
+
// By default it will bind to `popstate` event, but you can change it
|
344
|
+
// to support your history library or some hacks.
|
345
|
+
//
|
346
|
+
// Pages.watchURL = function(callback) {
|
347
|
+
// $(window).on('hashchange.pages', callback);
|
348
|
+
// };
|
349
|
+
watchURL: function(callback) {
|
350
|
+
$(window).on('popstate.pages', callback);
|
351
|
+
},
|
352
|
+
|
353
|
+
// Disable listening, which was set by `watchURL`.
|
354
|
+
// By default it will unbind from `popstate` event, but you can change it
|
355
|
+
// to support your history library or some hacks.
|
356
|
+
//
|
357
|
+
// Pages.unwatchURL = function() {
|
358
|
+
// $(window).off('hashchange.pages');
|
359
|
+
// };
|
360
|
+
unwatchURL: function() {
|
361
|
+
$(window).off('popstate.pages');
|
362
|
+
},
|
363
|
+
|
276
364
|
// Internal API to wait previous animation, before start new one.
|
277
365
|
//
|
278
|
-
// Pages.animating.
|
279
|
-
// Pages.animating.start();
|
366
|
+
// Pages.animating.run(function(done) {
|
280
367
|
// // Animation code
|
281
|
-
//
|
368
|
+
// done();
|
282
369
|
// });
|
283
370
|
animating: {
|
284
371
|
|
@@ -288,9 +375,14 @@
|
|
288
375
|
// True if some animation is played now.
|
289
376
|
waiting: false,
|
290
377
|
|
291
|
-
//
|
292
|
-
|
293
|
-
|
378
|
+
// If there isn’t animation now, `callback` will be executed now.
|
379
|
+
// Else `callback` will wait, until previous animation will call `end`.
|
380
|
+
wait: function(callback) {
|
381
|
+
if ( this.waiting ) {
|
382
|
+
this._waiters.push(callback);
|
383
|
+
} else {
|
384
|
+
callback();
|
385
|
+
}
|
294
386
|
},
|
295
387
|
|
296
388
|
// Mark, that current animation is ended.
|
@@ -302,20 +394,27 @@
|
|
302
394
|
}
|
303
395
|
},
|
304
396
|
|
305
|
-
//
|
306
|
-
//
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
397
|
+
// Wait for previous animation end, execute `callback` and run another
|
398
|
+
// animations, only after `callback` will execute it first argument.
|
399
|
+
//
|
400
|
+
// Pages.animating.run(function(done) {
|
401
|
+
// // Animation code
|
402
|
+
// done();
|
403
|
+
// });
|
404
|
+
run: function(callback) {
|
405
|
+
var animating = this;
|
406
|
+
animating.wait(function() {
|
407
|
+
animating.waiting = true;
|
408
|
+
callback(function() {
|
409
|
+
animating.end();
|
410
|
+
});
|
411
|
+
});
|
313
412
|
}
|
314
413
|
|
315
414
|
},
|
316
415
|
|
317
416
|
// Link to current `window.document`. It is used for tests.
|
318
|
-
|
417
|
+
_doc: document,
|
319
418
|
|
320
419
|
// Arra of added pages options.
|
321
420
|
_pages: [],
|
@@ -331,19 +430,22 @@
|
|
331
430
|
|
332
431
|
// Find first current page.
|
333
432
|
_findCurrent: function() {
|
334
|
-
return $(
|
433
|
+
return $(self.selector + ':visible:first', self._doc)
|
335
434
|
},
|
336
435
|
|
436
|
+
// AJAX request, if some page is loading now.
|
437
|
+
_loading: null,
|
438
|
+
|
337
439
|
// Find pages in new content, set caches and trigger load event on them.
|
338
440
|
_enlive: function(nodes) {
|
339
|
-
var args =
|
340
|
-
for (var i = 0; i <
|
341
|
-
|
441
|
+
var args = self._callbackArgs(divs)
|
442
|
+
for (var i = 0; i < self._liveCallbacks.length; i++) {
|
443
|
+
self._liveCallbacks[i].apply(nodes, args);
|
342
444
|
}
|
343
445
|
|
344
446
|
var page, pages;
|
345
|
-
for (var i = 0; i <
|
346
|
-
page =
|
447
|
+
for (var i = 0; i < self._pages.length; i++) {
|
448
|
+
page = self._pages[i];
|
347
449
|
var divs = nodes.filter(page.selector);
|
348
450
|
divs = divs.add( nodes.find(page.selector) );
|
349
451
|
if ( divs.length ) {
|
@@ -354,7 +456,7 @@
|
|
354
456
|
divs.data('pages', [page]);
|
355
457
|
}
|
356
458
|
if ( page.load ) {
|
357
|
-
page.load.apply(divs,
|
459
|
+
page.load.apply(divs, self._callbackArgs(divs));
|
358
460
|
}
|
359
461
|
}
|
360
462
|
}
|
@@ -382,7 +484,7 @@
|
|
382
484
|
for (var i = 0; i < pages.length; i++) {
|
383
485
|
page = pages[i];
|
384
486
|
if ( page[type] ) {
|
385
|
-
page[type].apply(div,
|
487
|
+
page[type].apply(div, self._callbackArgs(div));
|
386
488
|
}
|
387
489
|
}
|
388
490
|
},
|
@@ -390,11 +492,11 @@
|
|
390
492
|
// Find page descriptions for current and next page and fire `close` and
|
391
493
|
// `open` events.
|
392
494
|
_setCurrent: function(next) {
|
393
|
-
if (
|
394
|
-
|
495
|
+
if ( self.current ) {
|
496
|
+
self._callback(self.current, 'close');
|
395
497
|
}
|
396
|
-
|
397
|
-
|
498
|
+
self._callback(next, 'open');
|
499
|
+
self.current = next;
|
398
500
|
},
|
399
501
|
|
400
502
|
// Open URL from link.
|
@@ -403,7 +505,7 @@
|
|
403
505
|
if ( !href || href[0] != '/' ) {
|
404
506
|
return true;
|
405
507
|
}
|
406
|
-
if (
|
508
|
+
if ( link.data().pagesDisable != undefined ) {
|
407
509
|
return true;
|
408
510
|
}
|
409
511
|
|
@@ -415,7 +517,7 @@
|
|
415
517
|
var path = href[0];
|
416
518
|
var hash = href[1];
|
417
519
|
|
418
|
-
|
520
|
+
self.open(path, data);
|
419
521
|
if ( hash && location.hash != hash ) {
|
420
522
|
location.hash = hash;
|
421
523
|
}
|
@@ -424,8 +526,8 @@
|
|
424
526
|
|
425
527
|
// Open loaded page.
|
426
528
|
_openPage: function(page, data) {
|
427
|
-
if ( page[0] ==
|
428
|
-
|
529
|
+
if ( page[0] == self.current[0] ) {
|
530
|
+
self._setCurrent(page);
|
429
531
|
return;
|
430
532
|
}
|
431
533
|
|
@@ -442,38 +544,43 @@
|
|
442
544
|
}
|
443
545
|
}
|
444
546
|
if ( pageAnimation ) {
|
445
|
-
anim = pageAnimation(
|
547
|
+
anim = pageAnimation(self.current);
|
446
548
|
}
|
447
549
|
}
|
448
|
-
anim = anim ||
|
550
|
+
anim = anim || self.animation;
|
449
551
|
|
450
|
-
|
451
|
-
if (
|
452
|
-
|
552
|
+
self.animating.run(function(done) {
|
553
|
+
if ( data.title != undefined ) {
|
554
|
+
self.title(data.title);
|
453
555
|
}
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
Pages._setCurrent(page);
|
556
|
+
self.animations[anim].animate(self.current, page, function() {
|
557
|
+
done();
|
558
|
+
self._setCurrent(page);
|
458
559
|
}, data);
|
459
560
|
});
|
460
561
|
},
|
461
562
|
|
462
563
|
// Internal method to load pages. Used in `open` and `preload`.
|
463
564
|
_loadPages: function(url, data, callback) {
|
464
|
-
var body = $('body',
|
565
|
+
var body = $('body', self._doc).addClass('page-loading');
|
465
566
|
body.trigger('page-loading', data);
|
466
567
|
if ( data.link ) {
|
467
568
|
data.link.addClass('page-loading');
|
468
569
|
data.link.trigger('page-loading', data);
|
469
570
|
}
|
470
571
|
|
471
|
-
|
572
|
+
if ( self._loading ) {
|
573
|
+
self.stopLoading(self._loading);
|
574
|
+
}
|
575
|
+
|
576
|
+
self._loading = self.load(url, data, function(html) {
|
577
|
+
self._loading = null;
|
578
|
+
|
472
579
|
var nodes = $(html);
|
473
|
-
if (
|
474
|
-
|
580
|
+
if ( self.current.length ) {
|
581
|
+
self.current.after(nodes);
|
475
582
|
} else {
|
476
|
-
|
583
|
+
$(self._doc.body).append(nodes);
|
477
584
|
}
|
478
585
|
|
479
586
|
body.removeClass('page-loading');
|
@@ -483,41 +590,19 @@
|
|
483
590
|
data.link.trigger('page-loaded', data);
|
484
591
|
}
|
485
592
|
|
486
|
-
|
593
|
+
self._enlive(nodes);
|
487
594
|
callback(nodes);
|
488
595
|
});
|
489
596
|
}
|
490
597
|
|
491
598
|
};
|
492
599
|
|
493
|
-
// The simplest “animation”. Just immediately hide/show pages
|
494
|
-
// by CSS display property.
|
495
|
-
Pages.animations.immediately = {
|
496
|
-
animate: function(prev, next, done, data) {
|
497
|
-
prev.hide();
|
498
|
-
next.show();
|
499
|
-
done();
|
500
|
-
}
|
501
|
-
};
|
502
|
-
|
503
|
-
// Simple fade in/out animation.
|
504
|
-
Pages.animations.fade = {
|
505
|
-
// Animation duration in milliseconds.
|
506
|
-
duration: 300,
|
507
|
-
|
508
|
-
animate: function(prev, next, done, data) {
|
509
|
-
var half = this.duration / 2;
|
510
|
-
prev.fadeOut(half, function() {
|
511
|
-
next.fadeIn(half, done);
|
512
|
-
});
|
513
|
-
}
|
514
|
-
};
|
515
|
-
|
516
600
|
$(document).ready(function() {
|
517
|
-
|
518
|
-
|
519
|
-
if ( !
|
520
|
-
|
601
|
+
self._lastUrl = self.getURL();
|
602
|
+
self.init();
|
603
|
+
if ( !self.disabled ) {
|
604
|
+
self.enable();
|
521
605
|
}
|
522
606
|
});
|
523
|
-
|
607
|
+
|
608
|
+
})(jQuery);
|
metadata
CHANGED
@@ -1,32 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagesjs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.5
|
5
4
|
prerelease:
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Andrey "A.I." Sitnik
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
+
type: :runtime
|
15
16
|
name: sprockets
|
17
|
+
prerelease: false
|
16
18
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
19
|
requirements:
|
19
20
|
- - ! '>='
|
20
21
|
- !ruby/object:Gem::Version
|
21
22
|
version: '2'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
23
|
none: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
25
|
requirements:
|
27
26
|
- - ! '>='
|
28
27
|
- !ruby/object:Gem::Version
|
29
28
|
version: '2'
|
29
|
+
none: false
|
30
30
|
description: Pages.js allow you to manage pages JS code and forget about low-level
|
31
31
|
History API.
|
32
32
|
email:
|
@@ -50,17 +50,17 @@ rdoc_options: []
|
|
50
50
|
require_paths:
|
51
51
|
- lib
|
52
52
|
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
53
|
requirements:
|
55
54
|
- - ! '>='
|
56
55
|
- !ruby/object:Gem::Version
|
57
56
|
version: '0'
|
58
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
57
|
none: false
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
59
|
requirements:
|
61
60
|
- - ! '>='
|
62
61
|
- !ruby/object:Gem::Version
|
63
62
|
version: '0'
|
63
|
+
none: false
|
64
64
|
requirements: []
|
65
65
|
rubyforge_project:
|
66
66
|
rubygems_version: 1.8.23
|