Toshimasa Ishibashi - Data.Page-0.02
NAME
Data.Page - Auto generate useful information for pagination
SYNOPSIS
var p = new Data.Page(
120, // total entries
10, // entries per page
1 // current page
);
// get pagination info
p.total_entries() // 120
p.entries_per_page() // 10
p.current_page() // 1
p.entries_on_this_page() // 10
p.first_page() // 1
p.last_page() // 12
p.first() // 1
p.last() // 10
p.previous_page() // undefined
p.next_page() // 2
// get items that are included in this page
var items = [ 'item1' .. 'item99' ];
items = p.splice( items ); // [ 'item1' .. 'item10' ]
DESCRIPTION
By giving minimum parameters, this module auto-calculates all the neccessary information needed to display pagination, which we see (and program) alot in a search result page.
Especially useful for client-side AJAX applications.
Constructor
var page = new Data.Page(
99, // total entries
15, // entries displayed per page
2 // current page number
);
Or, you can set those parameters later:
var page = new Data.Page();
page.total_entries( 99 );
page.entries_per_page( 15 );
page.current_page( 2 );
Methods
total_entries()
page.total_entries( 130 ); // setter
page.total_entries(); // getter
Sets/gets the total number of entries in your result set. Ignored if passed a negative value.
entries_per_page()
page.entries_per_page( 10 ); // setter
page.entries_per_page(); // getter
Sets/gets the total number of entries displayed per page. Ignored if passed a negative value.
current_page()
page.current_page( 10 ); // setter
page.current_page(); // getter
Sets/gets the total number of entries displayed per page. Ignored if passed a negative value.
entries_on_this_page()
page.entries_on_this_page(); // 10
// might be different on last page
page.current_page( page.last_page() );
page.entries_on_this_page(); // 7
Gets the number of items displayed in current page. It's usually same as page.entries_per_page(), but might differ on the last page.
last_page()
page.last_page(); // 5
Gets the last page number. It's also the "total page count".
first_page()
page.first_page(); // 1
Gets the first page number, which will always return 1. Counter-part for page.last_page() method.
first()
page.first(); // 21
Gets the item number of the first item in current page.
last()
page.last(); // 30
Gets the item number of the last item in current page.
previous_page()
page.previous_page(); // 1
Gets the page number of the previous page. Returns "undefined" if called at first page.
next_page()
page.next_page(); // 2
Gets the page number of the next page. Returns "undefined" if called at last page.
splice()
var items = [ 'item1' .. 'item99' ];
items = p.splice( items ); // [ 'item1' .. 'item10' ]
By passing an array with items/records for all pages, it will return an array containing only the items for the current page.
skipped()
var page = new Data.Page( 50, 10, 3 ); // we're at page 3
page.skipped(); // 20
Returns how many items are skipped as for the current page.
SEE ALSO
Perl CPAN - Data::Page module http://search.cpan.org/dist/Data-Page/
AUTHOR
Toshimasa Ishibashi <iandeth99@ybb.ne.jp>
This module was ported from Perl Module - Data::Page
Original perl code by Leon Brocard - http://search.cpan.org/dist/Data-Page/
Thank you Leon for a nice work.
COPYRIGHT
Copyright (c) 2007 Toshimasa Ishibashi. All rights reserved.
This module is free software; you can redistribute it and/or modify it
under the terms of the Artistic license. Or whatever license I choose,
which I will do instead of keeping this documentation like it is.
/*
=head1 NAME
Data.Page - Auto generate useful information for pagination
=head1 SYNOPSIS
var p = new Data.Page(
120, // total entries
10, // entries per page
1 // current page
);
// get pagination info
p.total_entries() // 120
p.entries_per_page() // 10
p.current_page() // 1
p.entries_on_this_page() // 10
p.first_page() // 1
p.last_page() // 12
p.first() // 1
p.last() // 10
p.previous_page() // undefined
p.next_page() // 2
// get items that are included in this page
var items = [ 'item1' .. 'item99' ];
items = p.splice( items ); // [ 'item1' .. 'item10' ]
=head1 DESCRIPTION
By giving minimum parameters, this module auto-calculates all
the neccessary information needed to display pagination, which
we see (and program) alot in a search result page.
Especially useful for client-side AJAX applications.
=head2 Constructor
var page = new Data.Page(
99, // total entries
15, // entries displayed per page
2 // current page number
);
Or, you can set those parameters later:
var page = new Data.Page();
page.total_entries( 99 );
page.entries_per_page( 15 );
page.current_page( 2 );
=head2 Methods
=head3 total_entries()
page.total_entries( 130 ); // setter
page.total_entries(); // getter
Sets/gets the total number of entries in your result set. Ignored if passed a negative value.
=head3 entries_per_page()
page.entries_per_page( 10 ); // setter
page.entries_per_page(); // getter
Sets/gets the total number of entries displayed per page. Ignored if passed a negative value.
=head3 current_page()
page.current_page( 10 ); // setter
page.current_page(); // getter
Sets/gets the total number of entries displayed per page. Ignored if passed a negative value.
=head3 entries_on_this_page()
page.entries_on_this_page(); // 10
// might be different on last page
page.current_page( page.last_page() );
page.entries_on_this_page(); // 7
Gets the number of items displayed in current page. It's usually same as
page.entries_per_page(), but might differ on the last page.
=head3 last_page()
page.last_page(); // 5
Gets the last page number. It's also the "total page count".
=head3 first_page()
page.first_page(); // 1
Gets the first page number, which will always return 1. Counter-part for
page.last_page() method.
=head3 first()
page.first(); // 21
Gets the item number of the first item in current page.
=head3 last()
page.last(); // 30
Gets the item number of the last item in current page.
=head3 previous_page()
page.previous_page(); // 1
Gets the page number of the previous page. Returns "undefined" if called at first page.
=head3 next_page()
page.next_page(); // 2
Gets the page number of the next page. Returns "undefined" if called at last page.
=head3 splice()
var items = [ 'item1' .. 'item99' ];
items = p.splice( items ); // [ 'item1' .. 'item10' ]
By passing an array with items/records for all pages, it will return an array
containing only the items for the current page.
=head3 skipped()
var page = new Data.Page( 50, 10, 3 ); // we're at page 3
page.skipped(); // 20
Returns how many items are skipped as for the current page.
=head1 SEE ALSO
Perl CPAN - Data::Page module
L<http://search.cpan.org/dist/Data-Page/>
=head1 AUTHOR
Toshimasa Ishibashi <F<iandeth99@ybb.ne.jp>>
L<http://iandeth.dyndns.org/>
This module was ported from Perl Module - Data::Page
Original perl code by Leon Brocard - L<http://search.cpan.org/dist/Data-Page/>
Thank you Leon for a nice work.
=head1 COPYRIGHT
Copyright (c) 2007 Toshimasa Ishibashi. All rights reserved.
This module is free software; you can redistribute it and/or modify it
under the terms of the Artistic license. Or whatever license I choose,
which I will do instead of keeping this documentation like it is.
=cut
*/
if( typeof( Data ) != 'function' ) {
Data = function (){};
}
Data.Page = function() {
this.initialize.apply(this, arguments);
};
Data.Page.VERSION = "0.02";
Data.Page.prototype = {
initialize: function ( total_entries, entries_per_page, current_page ){
this._total_entries = 0;
this._entries_per_page = 10;
this._current_page = 1;
this.total_entries( total_entries );
this.entries_per_page( entries_per_page );
this.current_page( current_page );
},
total_entries: function ( int ){
int = parseInt( int );
if ( int > 0 ){
this._total_entries = int;
}
return this._total_entries;
},
entries_per_page: function ( int ){
int = parseInt( int );
if ( int > 0 ){
this._entries_per_page = int;
}
return this._entries_per_page;
},
current_page: function ( int ){
int = parseInt( int );
if ( int > 0 ){
this._current_page = int;
}
return this._current_page;
},
entries_on_this_page: function (){
if( this.total_entries() == 0 ){
return 0;
}
return this.last() - this.first() + 1;
},
first_page: function (){
return 1;
},
last_page: function (){
var pages = this.total_entries() / this.entries_per_page();
var last_page = 1;
if( pages == parseInt( pages ) ){
last_page = pages;
}else{
last_page = 1 + parseInt( pages );
}
if( last_page < 1 ){
last_page = 1;
}
return last_page;
},
first: function (){
if( this.total_entries() == 0 ){
return 0;
}
return ( ( this.current_page() - 1 ) * this.entries_per_page() ) + 1;
},
last: function (){
if( this.current_page() == this.last_page() ){
return this.total_entries();
}
return this.current_page() * this.entries_per_page();
},
previous_page: function (){
if( this.current_page() > 1 ){
return this.current_page() - 1;
}
return undefined;
},
next_page: function (){
if( this.current_page() < this.last_page() ){
return this.current_page() + 1;
}
return undefined;
},
splice: function ( arr ){
var top = arr.length;
if( arr.length > this.last() ){
top = this.last();
}
if( top == 0 ){
return [];
}
var ret = [];
var from = this.first() - 1;
var to = top - 1;
for( var i=0; i<arr.length; i++ ){
if( i < from ){ continue; }
if( i > to ){ break; }
ret.push( arr[i] );
}
return ret;
},
skipped: function (){
var skipped = this.first() - 1;
if( skipped < 0 ){
return 0;
}
return skipped;
}
};