NOBUG: Fixed file access permissions
[moodle.git] / lib / yuilib / 3.13.0 / paginator-core / paginator-core-debug.js
blob7d5c3143ad659530b84a16f3e476fe73fde02d17
1 /*
2 YUI 3.13.0 (build 508226d)
3 Copyright 2013 Yahoo! Inc. All rights reserved.
4 Licensed under the BSD License.
5 http://yuilibrary.com/license/
6 */
8 YUI.add('paginator-core', function (Y, NAME) {
10 /**
11  Paginator's core functionality consists of keeping track of the current page
12  being displayed and providing information for previous and next pages.
14  @module paginator
15  @submodule paginator-core
16  @since 3.11.0
17  */
19 /**
20  _API docs for this extension are included in the Paginator class._
22  Class extension providing the core API and structure for the Paginator module.
24  Use this class extension with Widget or another Base-based superclass to
25  create the basic Paginator model API and composing class structure.
27  @class Paginator.Core
28  @for Paginator
29  @since 3.11.0
30  */
32 var PaginatorCore = Y.namespace('Paginator').Core = function () {};
34 PaginatorCore.ATTRS = {
35     /**
36      Current page count. First page is 1.
38      @attribute page
39      @type Number
40      @default 1
41      **/
42     page: {
43         value: 1
44     },
46     /**
47      Total number of pages to display
49      @readOnly
50      @attribute totalPages
51      @type Number
52      **/
53     totalPages: {
54         readOnly: true,
55         getter: '_getTotalPagesFn'
56     },
58     /**
59      Maximum number of items per page. A value of negative one (-1) indicates
60          all items on one page.
62      @attribute itemsPerPage
63      @type Number
64      @default 10
65      **/
66     itemsPerPage: {
67         value: 10
68     },
70     /**
71      Total number of items in all pages.
73      @attribute totalItems
74      @type Number
75      @default 0
76      **/
77     totalItems: {
78         value: 0
79     }
82 Y.mix(PaginatorCore.prototype, {
83     /**
84      Sets the page to the previous page in the set, if there is a previous page.
85      @method prevPage
86      @chainable
87      */
88     prevPage: function () {
89         if (this.hasPrevPage()) {
90             this.set('page', this.get('page') - 1);
91         }
93         return this;
94     },
96     /**
97      Sets the page to the next page in the set, if there is a next page.
99      @method nextPage
100      @chainable
101      */
102     nextPage: function () {
103         if (this.hasNextPage()) {
104             this.set('page', this.get('page') + 1);
105         }
107         return this;
108     },
110     /**
111      Returns True if there is a previous page in the set.
113      @method hasPrevPage
114      @return {Boolean} `true` if there is a previous page, `false` otherwise.
115      */
116     hasPrevPage: function () {
117         return this.get('page') > 1;
118     },
120     /**
121      Returns True if there is a next page in the set.
123      If totalItems isn't set, assume there is always next page.
125      @method hasNextPage
126      @return {Boolean} `true` if there is a next page, `false` otherwise.
127      */
128     hasNextPage: function () {
129         return (!this.get('totalItems') || this.get('page') < this.get('totalPages'));
130     },
133     //--- P R O T E C T E D
135     /**
136      Returns the total number of pages based on the total number of
137        items provided and the number of items per page
139      @protected
140      @method _getTotalPagesFn
141      @return {Number} Total number of pages based on total number of items and
142        items per page or one if itemsPerPage is less than one
143      */
144     _getTotalPagesFn: function () {
145         var itemsPerPage = this.get('itemsPerPage');
147         return (itemsPerPage < 1) ? 1 : Math.ceil(this.get('totalItems') / itemsPerPage);
148     }
153 }, '3.13.0', {"requires": ["base"]});