+++ /dev/null
-/*
- * Fuel UX Data components - static data source
- * https://github.com/ExactTarget/fuelux-data
- *
- * Copyright (c) 2012 ExactTarget
- * Licensed under the MIT license.
- */
-
-(function (root, factory) {
- if (typeof define === 'function' && define.amd) {
- define(['underscore'], factory);
- } else {
- root.StaticDataSource = factory();
- }
-}(this, function () {
-
- var StaticDataSource = function (options) {
- this._formatter = options.formatter;
- this._columns = options.columns;
- this._delay = options.delay || 0;
- this._data = options.data;
- };
-
- StaticDataSource.prototype = {
-
- columns: function () {
- return this._columns;
- },
-
- data: function (options, callback) {
- var self = this;
-
- setTimeout(function () {
- var data = $.extend(true, [], self._data);
-
- // SEARCHING
- if (options.search) {
- data = _.filter(data, function (item) {
- var match = false;
-
- _.each(item, function (prop) {
- if (_.isString(prop) || _.isFinite(prop)) {
- if (prop.toString().toLowerCase().indexOf(options.search.toLowerCase()) !== -1) match = true;
- }
- });
-
- return match;
- });
- }
-
- // FILTERING
- if (options.filter) {
- data = _.filter(data, function (item) {
- switch(options.filter.value) {
- case 'lt5m':
- if(item.population < 5000000) return true;
- break;
- case 'gte5m':
- if(item.population >= 5000000) return true;
- break;
- default:
- return true;
- break;
- }
- });
- }
-
- var count = data.length;
-
- // SORTING
- if (options.sortProperty) {
- data = _.sortBy(data, options.sortProperty);
- if (options.sortDirection === 'desc') data.reverse();
- }
-
- // PAGING
- var startIndex = options.pageIndex * options.pageSize;
- var endIndex = startIndex + options.pageSize;
- var end = (endIndex > count) ? count : endIndex;
- var pages = Math.ceil(count / options.pageSize);
- var page = options.pageIndex + 1;
- var start = startIndex + 1;
-
- data = data.slice(startIndex, endIndex);
-
- if (self._formatter) self._formatter(data);
-
- callback({ data: data, start: start, end: end, count: count, pages: pages, page: page });
-
- }, this._delay)
- }
- };
-
- return StaticDataSource;
-}));