File: src/gallery-paginator/js/ValidationPageLinks.js
- /**
- * @module gallery-paginator
- */
-
- /**********************************************************************
- * Adds per-page error notification to Paginator.ui.PageLinks.
- *
- * @class Paginator.ui.ValidationPageLinks
- * @constructor
- * @param p {Pagintor} Paginator instance to attach to
- */
-
- Paginator.ui.ValidationPageLinks = function(
- /* Paginator */ p)
- {
- Paginator.ui.ValidationPageLinks.superclass.constructor.call(this, p);
-
- p.after('pageStatusChange', this.rebuild, this);
- };
-
- var vpl_status_prefix = 'yui3-has';
-
- /**
- * Array of status strings for each page. If the status value for a page
- * is not empty, it is used to build a CSS class for the page:
- * yui3-has<status>
- *
- * @attribute pageStatus
- */
- Paginator.ATTRS.pageStatus =
- {
- value: [],
- validator: Y.Lang.isArray
- };
-
- /**
- * Templates for generating page links.
- * @property templates
- * @static
- */
- Paginator.ui.ValidationPageLinks.templates =
- {
- currentPageLink: '<span class="{link} {curr} {status}">{label}</span>',
- pageLink: '<a href="#" class="{link} {status}" page="{page}">{label}</a>',
- disabledPageLink: '<span class="{link} disabled {status}" page="{page}">{label}</span>'
- };
-
- Y.extend(Paginator.ui.ValidationPageLinks, Paginator.ui.PageLinks,
- {
- update: function(e)
- {
- if (e && e.prevVal === e.newVal)
- {
- return;
- }
-
- var currentPage = this.paginator.getCurrentPage();
-
- if (this.current !== currentPage || !currentPage || e.rebuild)
- {
- var linkClass = this.paginator.get('pageLinkClass'),
- status = this.paginator.get('pageStatus'),
- labelBuilder = this.paginator.get('pageLabelBuilder'),
- totalPages = this.paginator.getTotalPages(),
- linkMarkup = this.paginator.get('disabled') ?
- Paginator.ui.ValidationPageLinks.templates.disabledPageLink :
- Paginator.ui.ValidationPageLinks.templates.pageLink;
-
- var range =
- Paginator.ui.PageLinks.calculateRange(
- currentPage, totalPages, this.paginator.get('pageLinks'));
-
- var content = '';
-
- if (0 < range[0] && range[0] <= range[1])
- {
- if (range[0] > 1)
- {
- range[0]++;
- content += Y.Lang.sub(linkMarkup,
- {
- link: linkClass,
- curr: '',
- status: status[0] ? vpl_status_prefix + status[0] : '',
- page: 1,
- label: labelBuilder(1, this.paginator)
- });
- content += '…'
- }
-
- if (range[1] < totalPages)
- {
- range[1]--;
- var showLast = true;
- }
-
- for (var i=range[0]; i<=range[1]; i++)
- {
- content += Y.Lang.sub(i === currentPage ? Paginator.ui.ValidationPageLinks.templates.currentPageLink : linkMarkup,
- {
- link: linkClass,
- curr: (i === currentPage ? this.paginator.get('currentPageClass') : ''),
- status: status[i-1] ? vpl_status_prefix + status[i-1] : '',
- page: i,
- label: labelBuilder(i, this.paginator)
- });
- }
-
- if (showLast)
- {
- content += '…';
- content += Y.Lang.sub(linkMarkup,
- {
- link: linkClass,
- curr: '',
- status: status[totalPages-1] ? vpl_status_prefix + status[totalPages-1] : '',
- page: totalPages,
- label: labelBuilder(totalPages, this.paginator)
- });
- }
- }
-
- this.container.set('innerHTML', content);
- }
- }
-
- });
-
-