pagesjs 0.0.2 → 0.0.3

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/ChangeLog ADDED
@@ -0,0 +1,11 @@
1
+ == 0.0.3 (Sergey Muravyov-Apostol)
2
+ * Allow to add listener for all new content.
3
+ * Allow to set animation page options in JS.
4
+ * Cache page options to tag data.
5
+ * Fix gemspec issue with Bundler.
6
+
7
+ == 0.0.2 (Kondraty Ryleyev)
8
+ * Fix Pages.js disabling in onready event.
9
+
10
+ == 0.0.1 (Pavel Pestel)
11
+ * Initial release.
data/README.md CHANGED
@@ -57,7 +57,7 @@ For Ruby on Rails you can use gem for Assets Pipeline.
57
57
  1. Add `pagesjs` gem to `Gemfile`:
58
58
 
59
59
  ```ruby
60
- gem 'pagesjs'
60
+ gem "pagesjs"
61
61
  ```
62
62
 
63
63
  2. Install gems:
@@ -110,6 +110,8 @@ by `selector`:
110
110
  visible (it is happened when document ready and when URL is changed).
111
111
  * `close`: `function ($, $$, page)` which will be called, when page becomes
112
112
  hidden (URL changed and another page become to be open).
113
+ * `animation`: `function (prev)` to return animation, depend on previous page.
114
+ For simple solution use `data-page-animation` attribute in page or link tags.
113
115
 
114
116
  Callbacks get three arguments:
115
117
 
@@ -33,7 +33,7 @@
33
33
  window.Pages = {
34
34
 
35
35
  // Is history management disabled.
36
- disabled: true,
36
+ disabled: false,
37
37
 
38
38
  // jQuery node for current page.
39
39
  //
@@ -74,14 +74,16 @@
74
74
  animations: { },
75
75
 
76
76
  // Add description for page with `selector`. Allow options:
77
- // * `load`: `function ($, $$, page)` which is called, when page is
78
- // loaded (contained in document or loaded after by AJAX).
79
- // Good place to add events handlers to HTML tags.
80
- // * `open`: `function ($, $$, page)` which is called, when page become
81
- // to be visible (called on document ready and when
82
- // URL is changed).
77
+ // * `load`: `function ($, $$, page)` which is called, when page is loaded
78
+ // (contained in document or loaded after by AJAX).
79
+ // Good place to add events handlers to HTML tags.
80
+ // * `open`: `function ($, $$, page)` which is called, when page become
81
+ // to be visible (called on document ready and when URL is changed).
83
82
  // * `close`: `function ($, $$, page)` which is called, when page become
84
- // to be hidden (URL changed and another page become to be open).
83
+ // to be hidden (URL changed and another page become to be open).
84
+ // * `animation`: `function (prev)` to return animation, depend on
85
+ // previous page. For simple solution use `data-page-animation` attribute
86
+ // in page or link tags.
85
87
  //
86
88
  // Pages.add('.comments-page', {
87
89
  // load: function($, $$, page) {
@@ -109,18 +111,32 @@
109
111
  // Pages.add('.comments-page', function($, $$, page) {
110
112
  // $$('.pagination').ajaxPagination();
111
113
  // });
114
+ //
115
+ // You can set callback to be runned on every content added to DOM
116
+ // (for example, to bind events for controls common for all pages).
117
+ // Just miss `selector`:
118
+ //
119
+ // Pages.add(function($, $$, content) {
120
+ // $$('[rel=submit]').click(function() {
121
+ // $(this).closest('form').submit();
122
+ // });
123
+ // });
112
124
  add: function(selector, options) {
113
- if ( typeof(options) == 'function' ) {
114
- options = { load: options };
125
+ if ( typeof(options) == 'undefined' ) {
126
+ this._liveCallbacks.push(selector);
127
+ } else {
128
+ if ( typeof(options) == 'function' ) {
129
+ options = { load: options };
130
+ }
131
+ options.selector = selector;
132
+ this._pages.push(options);
115
133
  }
116
- options.selector = selector;
117
- this._pages.push(options);
118
134
  },
119
135
 
120
136
  // Run Pages.js. It’s called automatically on document ready.
121
137
  // It’s used for tests.
122
138
  init: function() {
123
- this._loadEvent($(this._document));
139
+ this._enlive($(this._document));
124
140
  var current = this._findCurrent();
125
141
  if ( current.length ) {
126
142
  this._setCurrent(current);
@@ -303,6 +319,9 @@
303
319
  // Event listeners are already binded.
304
320
  _events: false,
305
321
 
322
+ // Callbacks was setted by `Pages.live`.
323
+ _liveCallbacks: [],
324
+
306
325
  // Find first current page.
307
326
  _findCurrent: function() {
308
327
  return $(this.pagesSelector + ':visible:first', this._document)
@@ -315,16 +334,22 @@
315
334
  };
316
335
  },
317
336
 
318
- // Find pages in new content and trigger load event on them.
319
- _loadEvent: function(nodes) {
320
- var page, $$;
337
+ // Find pages in new content, set caches and trigger load event on them.
338
+ _enlive: function(nodes) {
339
+ var $$ = this._subfind(nodes);
340
+ for (var i = 0; i < this._liveCallbacks.length; i++) {
341
+ this._liveCallbacks[i].call(nodes, $, $$, nodes);
342
+ }
343
+
344
+ var page;
321
345
  for (var i = 0; i < this._pages.length; i++) {
322
346
  page = this._pages[i];
323
- if ( page.load ) {
324
- var div = nodes.filter(page.selector);
325
- div = div.add( nodes.find(page.selector) );
326
- if ( div.length ) {
327
- page.load.call(div, $, this._subfind(div), div);
347
+ var divs = nodes.filter(page.selector);
348
+ divs = divs.add( nodes.find(page.selector) );
349
+ if ( divs.length ) {
350
+ divs.data('page', page);
351
+ if ( page.load ) {
352
+ page.load.call(divs, $, this._subfind(divs), divs);
328
353
  }
329
354
  }
330
355
  }
@@ -333,32 +358,16 @@
333
358
  // Find page descriptions for current and next page and fire `close` and
334
359
  // `open` events.
335
360
  _setCurrent: function(next) {
336
- var page, $$, currentPage, nextPage, current = this.current;
337
- if ( current && current.length ) {
338
- for (var i = 0; i < this._pages.length; i++) {
339
- page = this._pages[i];
340
- if ( page.close ) {
341
- if ( current.is(page.selector) ) {
342
- currentPage = page;
343
- break
344
- }
345
- }
346
- }
347
- }
348
- for (var i = 0; i < this._pages.length; i++) {
349
- page = this._pages[i];
350
- if ( page.open ) {
351
- if ( next.is(page.selector) ) {
352
- nextPage = page;
353
- break
354
- }
361
+ var current = this.current;
362
+ if ( current ) {
363
+ var currentPage = current.data('page');
364
+ if ( currentPage && currentPage.close ) {
365
+ currentPage.close.call(current, $, this._subfind(current), current);
355
366
  }
356
367
  }
357
368
 
358
- if ( currentPage ) {
359
- currentPage.close.call(current, $, this._subfind(current), current);
360
- }
361
- if ( nextPage ) {
369
+ var nextPage = next.data('page');
370
+ if ( nextPage && nextPage.open ) {
362
371
  nextPage.open.call(next, $, this._subfind(next), next);
363
372
  }
364
373
 
@@ -384,8 +393,13 @@
384
393
 
385
394
  // Open loaded page.
386
395
  _openPage: function(page, data) {
387
- data = $.extend(page.data(), data);
388
- var anim = data.pageAnimation || Pages.animation;
396
+ var pageData = page.data();
397
+ data = $.extend(pageData, data);
398
+ if ( pageData.page && pageData.page.animation ) {
399
+ var anim = page.data('page').animation(this.current);
400
+ } else {
401
+ var anim = data.pageAnimation || Pages.animation;
402
+ }
389
403
  this.animating.wait(function() {
390
404
  if ( typeof(data.title) != 'undefined' ) {
391
405
  Pages.title(data.title);
@@ -422,7 +436,7 @@
422
436
  data.link.trigger('page-loaded', data);
423
437
  }
424
438
 
425
- Pages._loadEvent(nodes);
439
+ Pages._enlive(nodes);
426
440
  callback(nodes);
427
441
  });
428
442
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pagesjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,19 +9,19 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-11 00:00:00.000000000 Z
12
+ date: 2012-05-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sprockets
16
- requirement: &11613200 !ruby/object:Gem::Requirement
16
+ requirement: &8204980 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 2.0.0.beta.5
21
+ version: '2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *11613200
24
+ version_requirements: *8204980
25
25
  description: Pages.js allow you to manage pages JS code and forget about low-level
26
26
  History API.
27
27
  email:
@@ -31,11 +31,13 @@ extensions: []
31
31
  extra_rdoc_files:
32
32
  - LICENSE
33
33
  - README.md
34
+ - ChangeLog
34
35
  files:
35
36
  - vendor/assets/javascripts/pages.js
36
37
  - lib/pagesjs.rb
37
38
  - LICENSE
38
39
  - README.md
40
+ - ChangeLog
39
41
  homepage: https://github.com/ai/pages.js
40
42
  licenses: []
41
43
  post_install_message: