You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@htrace.apache.org by cm...@apache.org on 2015/04/23 01:08:22 UTC
[28/41] incubator-htrace git commit: HTRACE-154. Move go and web to
htrace-htraced (abe via cmccabe)
http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/39e89ea0/htrace-core/src/web/lib/js/backgrid-paginator-0.3.5.js
----------------------------------------------------------------------
diff --git a/htrace-core/src/web/lib/js/backgrid-paginator-0.3.5.js b/htrace-core/src/web/lib/js/backgrid-paginator-0.3.5.js
deleted file mode 100644
index 64dd434..0000000
--- a/htrace-core/src/web/lib/js/backgrid-paginator-0.3.5.js
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- backgrid-paginator
- http://github.com/wyuenho/backgrid
-
- Copyright (c) 2013 Jimmy Yuen Ho Wong and contributors
- Licensed under the MIT @license.
-*/
-(function (root, factory) {
-
- // CommonJS
- if (typeof exports == "object") {
- module.exports = factory(require("underscore"),
- require("backbone"),
- require("backgrid"),
- require("backbone.paginator"));
- }
- // AMD. Register as an anonymous module.
- else if (typeof define === 'function' && define.amd) {
- define(['underscore', 'backbone', 'backgrid', 'backbone.paginator'], factory);
- }
- // Browser
- else {
- factory(root._, root.Backbone, root.Backgrid);
- }
-
-}(this, function (_, Backbone, Backgrid) {
-
- "use strict";
-
- /**
- PageHandle is a class that renders the actual page handles and reacts to
- click events for pagination.
-
- This class acts in two modes - control or discrete page handle modes. If
- one of the `is*` flags is `true`, an instance of this class is under
- control page handle mode. Setting a `pageIndex` to an instance of this
- class under control mode has no effect and the correct page index will
- always be inferred from the `is*` flag. Only one of the `is*` flags should
- be set to `true` at a time. For example, an instance of this class cannot
- simultaneously be a rewind control and a fast forward control. A `label`
- and a `title` function or a string are required to be passed to the
- constuctor under this mode. If a `title` function is provided, it __MUST__
- accept a hash parameter `data`, which contains a key `label`. Its result
- will be used to render the generated anchor's title attribute.
-
- If all of the `is*` flags is set to `false`, which is the default, an
- instance of this class will be in discrete page handle mode. An instance
- under this mode requires the `pageIndex` to be passed from the constructor
- as an option and it __MUST__ be a 0-based index of the list of page numbers
- to render. The constuctor will normalize the base to the same base the
- underlying PageableCollection collection instance uses. A `label` is not
- required under this mode, which will default to the equivalent 1-based page
- index calculated from `pageIndex` and the underlying PageableCollection
- instance. A provided `label` will still be honored however. The `title`
- parameter is also not required under this mode, in which case the default
- `title` function will be used. You are encouraged to provide your own
- `title` function however if you wish to localize the title strings.
-
- If this page handle represents the current page, an `active` class will be
- placed on the root list element.
-
- If this page handle is at the border of the list of pages, a `disabled`
- class will be placed on the root list element.
-
- Only page handles that are neither `active` nor `disabled` will respond to
- click events and triggers pagination.
-
- @class Backgrid.Extension.PageHandle
- */
- var PageHandle = Backgrid.Extension.PageHandle = Backbone.View.extend({
-
- /** @property */
- tagName: "li",
-
- /** @property */
- events: {
- "click a": "changePage"
- },
-
- /**
- @property {string|function(Object.<string, string>): string} title
- The title to use for the `title` attribute of the generated page handle
- anchor elements. It can be a string or a function that takes a `data`
- parameter, which contains a mandatory `label` key which provides the
- label value to be displayed.
- */
- title: function (data) {
- return 'Page ' + data.label;
- },
-
- /**
- @property {boolean} isRewind Whether this handle represents a rewind
- control
- */
- isRewind: false,
-
- /**
- @property {boolean} isBack Whether this handle represents a back
- control
- */
- isBack: false,
-
- /**
- @property {boolean} isForward Whether this handle represents a forward
- control
- */
- isForward: false,
-
- /**
- @property {boolean} isFastForward Whether this handle represents a fast
- forward control
- */
- isFastForward: false,
-
- /**
- Initializer.
-
- @param {Object} options
- @param {Backbone.Collection} options.collection
- @param {number} pageIndex 0-based index of the page number this handle
- handles. This parameter will be normalized to the base the underlying
- PageableCollection uses.
- @param {string} [options.label] If provided it is used to render the
- anchor text, otherwise the normalized pageIndex will be used
- instead. Required if any of the `is*` flags is set to `true`.
- @param {string} [options.title]
- @param {boolean} [options.isRewind=false]
- @param {boolean} [options.isBack=false]
- @param {boolean} [options.isForward=false]
- @param {boolean} [options.isFastForward=false]
- */
- initialize: function (options) {
- var collection = this.collection;
- var state = collection.state;
- var currentPage = state.currentPage;
- var firstPage = state.firstPage;
- var lastPage = state.lastPage;
-
- _.extend(this, _.pick(options,
- ["isRewind", "isBack", "isForward", "isFastForward"]));
-
- var pageIndex;
- if (this.isRewind) pageIndex = firstPage;
- else if (this.isBack) pageIndex = Math.max(firstPage, currentPage - 1);
- else if (this.isForward) pageIndex = Math.min(lastPage, currentPage + 1);
- else if (this.isFastForward) pageIndex = lastPage;
- else {
- pageIndex = +options.pageIndex;
- pageIndex = (firstPage ? pageIndex + 1 : pageIndex);
- }
- this.pageIndex = pageIndex;
-
- this.label = (options.label || (firstPage ? pageIndex : pageIndex + 1)) + '';
- var title = options.title || this.title;
- this.title = _.isFunction(title) ? title({label: this.label}) : title;
- },
-
- /**
- Renders a clickable anchor element under a list item.
- */
- render: function () {
- this.$el.empty();
- var anchor = document.createElement("a");
- anchor.href = '#';
- if (this.title) anchor.title = this.title;
- anchor.innerHTML = this.label;
- this.el.appendChild(anchor);
-
- var collection = this.collection;
- var state = collection.state;
- var currentPage = state.currentPage;
- var pageIndex = this.pageIndex;
-
- if (this.isRewind && currentPage == state.firstPage ||
- this.isBack && !collection.hasPreviousPage() ||
- this.isForward && !collection.hasNextPage() ||
- this.isFastForward && (currentPage == state.lastPage || state.totalPages < 1)) {
- this.$el.addClass("disabled");
- }
- else if (!(this.isRewind ||
- this.isBack ||
- this.isForward ||
- this.isFastForward) &&
- state.currentPage == pageIndex) {
- this.$el.addClass("active");
- }
-
- this.delegateEvents();
- return this;
- },
-
- /**
- jQuery click event handler. Goes to the page this PageHandle instance
- represents. No-op if this page handle is currently active or disabled.
- */
- changePage: function (e) {
- e.preventDefault();
- var $el = this.$el, col = this.collection;
- if (!$el.hasClass("active") && !$el.hasClass("disabled")) {
- if (this.isRewind) col.getFirstPage();
- else if (this.isBack) col.getPreviousPage();
- else if (this.isForward) col.getNextPage();
- else if (this.isFastForward) col.getLastPage();
- else col.getPage(this.pageIndex, {reset: true});
- }
- return this;
- }
-
- });
-
- /**
- Paginator is a Backgrid extension that renders a series of configurable
- pagination handles. This extension is best used for splitting a large data
- set across multiple pages. If the number of pages is larger then a
- threshold, which is set to 10 by default, the page handles are rendered
- within a sliding window, plus the rewind, back, forward and fast forward
- control handles. The individual control handles can be turned off.
-
- @class Backgrid.Extension.Paginator
- */
- var Paginator = Backgrid.Extension.Paginator = Backbone.View.extend({
-
- /** @property */
- className: "backgrid-paginator",
-
- /** @property */
- windowSize: 10,
-
- /**
- @property {number} slideScale the number used by #slideHowMuch to scale
- `windowSize` to yield the number of pages to slide. For example, the
- default windowSize(10) * slideScale(0.5) yields 5, which means the window
- will slide forward 5 pages as soon as you've reached page 6. The smaller
- the scale factor the less pages to slide, and vice versa.
-
- Also See:
-
- - #slideMaybe
- - #slideHowMuch
- */
- slideScale: 0.5,
-
- /**
- @property {Object.<string, Object.<string, string>>} controls You can
- disable specific control handles by setting the keys in question to
- null. The defaults will be merged with your controls object, with your
- changes taking precedent.
- */
- controls: {
- rewind: {
- label: "《",
- title: "First"
- },
- back: {
- label: "〈",
- title: "Previous"
- },
- forward: {
- label: "〉",
- title: "Next"
- },
- fastForward: {
- label: "》",
- title: "Last"
- }
- },
-
- /** @property */
- renderIndexedPageHandles: true,
-
- /**
- @property {Backgrid.Extension.PageHandle} pageHandle. The PageHandle
- class to use for rendering individual handles
- */
- pageHandle: PageHandle,
-
- /** @property */
- goBackFirstOnSort: true,
-
- /**
- Initializer.
-
- @param {Object} options
- @param {Backbone.Collection} options.collection
- @param {boolean} [options.controls]
- @param {boolean} [options.pageHandle=Backgrid.Extension.PageHandle]
- @param {boolean} [options.goBackFirstOnSort=true]
- */
- initialize: function (options) {
- var self = this;
- self.controls = _.defaults(options.controls || {}, self.controls,
- Paginator.prototype.controls);
-
- _.extend(self, _.pick(options || {}, "windowSize", "pageHandle",
- "slideScale", "goBackFirstOnSort",
- "renderIndexedPageHandles"));
-
- var col = self.collection;
- self.listenTo(col, "add", self.render);
- self.listenTo(col, "remove", self.render);
- self.listenTo(col, "reset", self.render);
- self.listenTo(col, "backgrid:sorted", function () {
- if (self.goBackFirstOnSort) col.getFirstPage({reset: true});
- });
- },
-
- /**
- Decides whether the window should slide. This method should return 1 if
- sliding should occur and 0 otherwise. The default is sliding should occur
- if half of the pages in a window has been reached.
-
- __Note__: All the parameters have been normalized to be 0-based.
-
- @param {number} firstPage
- @param {number} lastPage
- @param {number} currentPage
- @param {number} windowSize
- @param {number} slideScale
-
- @return {0|1}
- */
- slideMaybe: function (firstPage, lastPage, currentPage, windowSize, slideScale) {
- return Math.round(currentPage % windowSize / windowSize);
- },
-
- /**
- Decides how many pages to slide when sliding should occur. The default
- simply scales the `windowSize` to arrive at a fraction of the `windowSize`
- to increment.
-
- __Note__: All the parameters have been normalized to be 0-based.
-
- @param {number} firstPage
- @param {number} lastPage
- @param {number} currentPage
- @param {number} windowSize
- @param {number} slideScale
-
- @return {number}
- */
- slideThisMuch: function (firstPage, lastPage, currentPage, windowSize, slideScale) {
- return ~~(windowSize * slideScale);
- },
-
- _calculateWindow: function () {
- var collection = this.collection;
- var state = collection.state;
-
- // convert all indices to 0-based here
- var firstPage = state.firstPage;
- var lastPage = +state.lastPage;
- lastPage = Math.max(0, firstPage ? lastPage - 1 : lastPage);
- var currentPage = Math.max(state.currentPage, state.firstPage);
- currentPage = firstPage ? currentPage - 1 : currentPage;
- var windowSize = this.windowSize;
- var slideScale = this.slideScale;
- var windowStart = Math.floor(currentPage / windowSize) * windowSize;
- if (currentPage <= lastPage - this.slideThisMuch()) {
- windowStart += (this.slideMaybe(firstPage, lastPage, currentPage, windowSize, slideScale) *
- this.slideThisMuch(firstPage, lastPage, currentPage, windowSize, slideScale));
- }
- var windowEnd = Math.min(lastPage + 1, windowStart + windowSize);
- return [windowStart, windowEnd];
- },
-
- /**
- Creates a list of page handle objects for rendering.
-
- @return {Array.<Object>} an array of page handle objects hashes
- */
- makeHandles: function () {
-
- var handles = [];
- var collection = this.collection;
-
- var window = this._calculateWindow();
- var winStart = window[0], winEnd = window[1];
-
- if (this.renderIndexedPageHandles) {
- for (var i = winStart; i < winEnd; i++) {
- handles.push(new this.pageHandle({
- collection: collection,
- pageIndex: i
- }));
- }
- }
-
- var controls = this.controls;
- _.each(["back", "rewind", "forward", "fastForward"], function (key) {
- var value = controls[key];
- if (value) {
- var handleCtorOpts = {
- collection: collection,
- title: value.title,
- label: value.label
- };
- handleCtorOpts["is" + key.slice(0, 1).toUpperCase() + key.slice(1)] = true;
- var handle = new this.pageHandle(handleCtorOpts);
- if (key == "rewind" || key == "back") handles.unshift(handle);
- else handles.push(handle);
- }
- }, this);
-
- return handles;
- },
-
- /**
- Render the paginator handles inside an unordered list.
- */
- render: function () {
- this.$el.empty();
-
- if (this.handles) {
- for (var i = 0, l = this.handles.length; i < l; i++) {
- this.handles[i].remove();
- }
- }
-
- var handles = this.handles = this.makeHandles();
-
- var ul = document.createElement("ul");
- for (var i = 0; i < handles.length; i++) {
- ul.appendChild(handles[i].render().el);
- }
-
- this.el.appendChild(ul);
-
- return this;
- }
-
- });
-
-}));
\ No newline at end of file