diff --git a/build/js/be-table.js b/build/js/be-table.js index 2c59c11..058d1ee 100644 --- a/build/js/be-table.js +++ b/build/js/be-table.js @@ -14,8 +14,8 @@ function getNamespace() { * // keeps existing objects intact if extant, otherwise creates empty objects */ var o = window; - for (var _i in arguments) { - var k = arguments[_i]; + for (var i in arguments) { + var k = arguments[i]; o[k] = o[k] || {}; o = o[k]; } @@ -47,8 +47,8 @@ function getOrCall(x) { var classes = ''; - for (var _i2 = 0; _i2 < arguments.length; _i2++) { - var arg = arguments[_i2]; + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; if (!arg) continue; var argType = typeof arg; @@ -575,7 +575,8 @@ var defaultTypes = function defaultTypes(table) { hidden: { header: { className: 'hidden' }, filter: { className: 'hidden' }, - cell: { className: 'hidden' } }, + cell: { className: 'hidden' } + }, string: {}, number: { filter: { @@ -585,7 +586,8 @@ var defaultTypes = function defaultTypes(table) { className: 'scroll_columns is_aligned_right', renderer: function renderer(val) { return formatters.numberRenderer(val, 0); - } } + } + } }, year: { filter: { @@ -594,7 +596,8 @@ var defaultTypes = function defaultTypes(table) { cell: { renderer: function renderer(val) { return formatters.numberRenderer(val, 0, true); - } } + } + } }, date: { filter: { @@ -622,7 +625,8 @@ var defaultTypes = function defaultTypes(table) { } }, filter: { - className: 'check' }, + className: 'check' + }, cell: { className: 'check', renderer: function renderer(val, row, col, opts) { @@ -653,15 +657,19 @@ var completeType = function completeType(filterRenderer) { className: 'scroll_columns', renderer: function renderer(val) { return val; - } }, + } + }, header: { className: 'column_head scroll_columns', renderer: function renderer(col) { return col.title; - } }, + } + }, filter: { className: 'sub_head scroll_columns', - renderer: filterRenderer } }); + renderer: filterRenderer + } + }); }; }; @@ -710,12 +718,14 @@ var BETable = React.createClass({ return { sorting: { column: {}, - ascending: true }, + ascending: true + }, searchFilters: {}, currentPage: 1, numberPerPage: 10, selectedRows: {}, - selectAll: false }; + selectAll: false + }; }, sortingCallback: function sortingCallback(obj) { @@ -726,7 +736,8 @@ var BETable = React.createClass({ this.setState({ sorting: { column: obj, - ascending: ascending }, + ascending: ascending + }, currentPage: 1 }, function () { this.props.callback(this.state, { eventType: 'columnSorted' }); @@ -894,7 +905,8 @@ var Header = React.createClass({ classes = { sorted: true, sort_asc: this.props.sorting.ascending, - sort_desc: !this.props.sorting.ascending }; + sort_desc: !this.props.sorting.ascending + }; } return React.createElement( diff --git a/build/js/be-table.min.js.map b/build/js/be-table.min.js.map index 35aba2c..45d572f 100644 --- a/build/js/be-table.min.js.map +++ b/build/js/be-table.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["be-table.min.js","utils.js","dependencies.js","formatters.js","default-types.jsx","be-table.jsx"],"names":["getNamespace","o","window","_i","arguments","k","getOrCall","x","_len","length","params","Array","_key","_","isFunction","apply","this","React","classNames","classes","_i2","arg","argType","isArray","key","hasOwnProperty","substr","define","amd","module","exports","formatters","ns","dateRenderer","date","format","isString","value","int","str","parseInt","isNumber","isDate","toString","call","concat","array1","array2","index","slice","padNumber","num","digits","trim","neg","dateGetter","name","size","offset","ampmGetter","formats","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","Math","abs","dateStrGetter","shortForm","get","uppercase","jsonStringToDate","string","match","R_ISO8601_STR","Date","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","h","m","s","ms","round","parseFloat","formatter","fn","text","parts","$locale","DATETIME_FORMATS","NUMBER_STRING","test","DATE_FORMATS_SPLIT","exec","pop","push","each","DATE_FORMATS","replace","Object","prototype","toUpperCase","MONTH","split","SHORTMONTH","DAY","SHORTDAY","medium","short","fullDate","longDate","mediumDate","shortDate","mediumTime","shortTime","yyyy","yy","y","MMMM","MMM","MM","M","dd","d","HH","H","hh","mm","ss","sss","EEEE","EEE","a","Z","numberRenderer","number","fractionSize","noCommas","formatNumber","pattern","groupSep","decimalSep","noGroupSep","isFinite","isObject","isNegative","numStr","formatedText","hasExponent","indexOf","toFixed","fractionLen","DECIMAL_SEP","isUndefined","min","max","minFrac","maxFrac","fraction","whole","i","pos","lgroup","lgSize","group","gSize","charAt","negPre","posPre","negSuf","posSuf","join","minInt","makeNormalFilter","filterCallback","col","disabled","filterable","createElement","type","onChange","ev","target","className","required","placeholder","title","makeRangeFilter","minKey","maxKey","defaultTypes","table","hidden","header","filter","cell","renderer","val","year","multiselector","state","checked","selectAll","handler","node","selectAllCallback","row","opts","isSelectedRow","rowCallback","completeType","filterRenderer","defaults","getTableTypes","completer","mergedTypes","assign","props","customTypes","allTypes","mapValues","BETable","createClass","displayName","propTypes","columns","PropTypes","array","isRequired","rows","callback","func","searchmeta","object","objectname","getDefaultProps","buildTypes","getType","types","getInitialState","sorting","column","ascending","searchFilters","currentPage","numberPerPage","selectedRows","sortingCallback","obj","sortable","setState","eventType","previousState","currentProps","paginationCallback","insert","id","prevState","selected","has","render","columnDefs","headers","map","_this","builder","content","Header","handleClick","bind","SearchFilter","Row","numberOfObjects","totalMatchCount","number_matching_search","TableFooter","objectName","e","sorted","sort_asc","sort_desc","onClick","children","thClassString","isSorted","cellValue","cellBuilder","Cell","bool","classString","numberPerPageOptions","enableFirstLast","changePagination","r","numberOfPages","ceil","firstPage","lastPage","nextPage","prevPage","options","opt","pageStart","pageEnd","prevDisabled","prevStyle","cursor","nextDisabled","nextStyle","firstButton","undefined","lastButton","style"],"mappings":"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","file":"be-table.min.js","sourcesContent":[null,"/*jshint esnext: true */\nfunction getNamespace() {\n /**\n * Recursively define a nested object on ``window`` without destroying if it exists\n *\n * e.g.:\n * getNamespace('BE', 'utils', 'formatting') === window.BE.utils.formatting\n * // keeps existing objects intact if extant, otherwise creates empty objects\n */\n let o = window;\n for (let i in arguments) {\n let k = arguments[i];\n o[k] = o[k] || {};\n o = o[k];\n }\n return o;\n}\n\nfunction getOrCall(x, ...params) {\n if (_.isFunction(x)) {\n return x.apply(this, params);\n } else {\n return x;\n }\n}\n\n/*!\n Copyright (c) 2015 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n\n(function () {\n 'use strict';\n\n function classNames () {\n\n let classes = '';\n\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i];\n if (!arg) continue;\n\n let argType = typeof arg;\n\n if ('string' === argType || 'number' === argType) {\n classes += ' ' + arg;\n\n } else if (Array.isArray(arg)) {\n classes += ' ' + classNames.apply(null, arg);\n\n } else if ('object' === argType) {\n for (let key in arg) {\n if (arg.hasOwnProperty(key) && arg[key]) {\n classes += ' ' + key;\n }\n }\n }\n }\n\n return classes.substr(1);\n }\n\n if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function () {\n return classNames;\n });\n } else if (typeof module !== 'undefined' && module.exports) {\n module.exports = classNames;\n } else {\n window.classNames = classNames;\n }\n\n}());\n","\nvar React = window.React;\nvar _ = window._; // lodash\n","/* jshint ignore:start */\n\nvar formatters = {};\ngetNamespace('BE', 'Table').formatters = formatters;\n\n(function (ns){\n /**\n * @ngdoc filter\n * @name date\n * @kind function\n *\n * @description\n * Formats `date` to a string based on the requested `format`.\n *\n * `format` string can be composed of the following elements:\n *\n * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n * * `'MMMM'`: Month in year (January-December)\n * * `'MMM'`: Month in year (Jan-Dec)\n * * `'MM'`: Month in year, padded (01-12)\n * * `'M'`: Month in year (1-12)\n * * `'dd'`: Day in month, padded (01-31)\n * * `'d'`: Day in month (1-31)\n * * `'EEEE'`: Day in Week,(Sunday-Saturday)\n * * `'EEE'`: Day in Week, (Sun-Sat)\n * * `'HH'`: Hour in day, padded (00-23)\n * * `'H'`: Hour in day (0-23)\n * * `'hh'`: Hour in am/pm, padded (01-12)\n * * `'h'`: Hour in am/pm, (1-12)\n * * `'mm'`: Minute in hour, padded (00-59)\n * * `'m'`: Minute in hour (0-59)\n * * `'ss'`: Second in minute, padded (00-59)\n * * `'s'`: Second in minute (0-59)\n * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)\n * * `'a'`: am/pm marker\n * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n *\n * `format` string can also be one of the following predefined\n * {@link guide/i18n localizable formats}:\n *\n * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n * (e.g. Sep 3, 2010 12:05:08 pm)\n * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm)\n * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale\n * (e.g. Friday, September 3, 2010)\n * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)\n * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)\n * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)\n * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm)\n *\n * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.\n * `\"h 'in the morning'\"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence\n * (e.g. `\"h 'o''clock'\"`).\n *\n * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its\n * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n * specified in the string input, the time is considered to be in the local timezone.\n * @param {string=} format Formatting rules (see Description). If not specified,\n * `mediumDate` is used.\n * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n *\n * @example\n \n \n {{1288323623006 | date:'medium'}}:\n {{1288323623006 | date:'medium'}}
\n {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}:\n {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}
\n {{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}:\n {{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}
\n {{1288323623006 | date:\"MM/dd/yyyy 'at' h:mma\"}}:\n {{'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"}}
\n
\n \n it('should format date', function() {\n expect(element(by.binding(\"1288323623006 | date:'medium'\")).getText()).\n toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n expect(element(by.binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).getText()).\n toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n expect(element(by.binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).getText()).\n toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n expect(element(by.binding(\"'1288323623006' | date:\\\"MM/dd/yyyy 'at' h:mma\\\"\")).getText()).\n toMatch(/10\\/2\\d\\/2010 at \\d{1,2}:\\d{2}(AM|PM)/);\n });\n \n
\n */\n function dateRenderer(date, format) {\n var toString = Object.prototype.toString;\n var slice = [].slice;\n function isString(value){return typeof value === 'string';}\n function int(str) {\n return parseInt(str, 10);\n }\n function isNumber(value){return typeof value === 'number';}\n function isDate(value) {\n return toString.call(value) === '[object Date]';\n }\n function concat(array1, array2, index) {\n return array1.concat(slice.call(array2, index));\n }\n var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};\n function padNumber(num, digits, trim) {\n var neg = '';\n if (num < 0) {\n neg = '-';\n num = -num;\n }\n num = '' + num;\n while(num.length < digits) {\n num = '0' + num;\n }\n if (trim) {\n num = num.substr(num.length - digits);\n }\n return neg + num;\n }\n\n function dateGetter(name, size, offset, trim) {\n offset = offset || 0;\n return function(date) {\n var value = date['get' + name]();\n if (offset > 0 || value > -offset){\n value += offset;\n }\n if (value === 0 && offset === -12 ) {\n value = 12;\n }\n return padNumber(value, size, trim);\n };\n }\n function ampmGetter(date, formats) {\n return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n }\n function timeZoneGetter(date) {\n var zone = -1 * date.getTimezoneOffset();\n var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\n paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n padNumber(Math.abs(zone % 60), 2);\n\n return paddedZone;\n }\n\n function dateStrGetter(name, shortForm) {\n return function(date, formats) {\n var value = date['get' + name]();\n var get = uppercase(shortForm ? ('SHORT' + name) : name);\n\n return formats[get][value];\n };\n }\n var $locale = $locale || {};\n $locale.DATETIME_FORMATS = {\n MONTH:\n 'January,February,March,April,May,June,July,August,September,October,November,December'\n .split(','),\n SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),\n AMPMS: ['AM','PM'],\n medium: 'MMM d, y h:mm:ss a',\n short: 'M/d/yy h:mm a',\n fullDate: 'EEEE, MMMM d, y',\n longDate: 'MMMM d, y',\n mediumDate: 'MMM d, y',\n shortDate: 'M/d/yy',\n mediumTime: 'h:mm:ss a',\n shortTime: 'h:mm a'\n };\n var DATE_FORMATS = {\n yyyy: dateGetter('FullYear', 4),\n yy: dateGetter('FullYear', 2, 0, true),\n y: dateGetter('FullYear', 1),\n MMMM: dateStrGetter('Month'),\n MMM: dateStrGetter('Month', true),\n MM: dateGetter('Month', 2, 1),\n M: dateGetter('Month', 1, 1),\n dd: dateGetter('Date', 2),\n d: dateGetter('Date', 1),\n HH: dateGetter('Hours', 2),\n H: dateGetter('Hours', 1),\n hh: dateGetter('Hours', 2, -12),\n h: dateGetter('Hours', 1, -12),\n mm: dateGetter('Minutes', 2),\n m: dateGetter('Minutes', 1),\n ss: dateGetter('Seconds', 2),\n s: dateGetter('Seconds', 1),\n // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n sss: dateGetter('Milliseconds', 3),\n EEEE: dateStrGetter('Day'),\n EEE: dateStrGetter('Day', true),\n a: ampmGetter,\n Z: timeZoneGetter\n };\n\n var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,\n NUMBER_STRING = /^\\-?\\d+$/;\n var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n // 1 2 3 4 5 6 7 8 9 10 11\n function jsonStringToDate(string) {\n var match;\n if (match = string.match(R_ISO8601_STR)) {\n var date = new Date(0),\n tzHour = 0,\n tzMin = 0,\n dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n if (match[9]) {\n tzHour = int(match[9] + match[10]);\n tzMin = int(match[9] + match[11]);\n }\n dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));\n var h = int(match[4]||0) - tzHour;\n var m = int(match[5]||0) - tzMin;\n var s = int(match[6]||0);\n var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);\n timeSetter.call(date, h, m, s, ms);\n return date;\n }\n return string;\n }\n\n\n function formatter(date, format) {\n var text = '',\n parts = [],\n fn, match;\n\n format = format || 'mediumDate';\n format = $locale.DATETIME_FORMATS[format] || format;\n if (isString(date)) {\n date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date);\n }\n\n if (isNumber(date)) {\n date = new Date(date);\n }\n\n if (!isDate(date)) {\n return date;\n }\n\n while(format) {\n match = DATE_FORMATS_SPLIT.exec(format);\n if (match) {\n parts = concat(parts, match, 1);\n format = parts.pop();\n } else {\n parts.push(format);\n format = null;\n }\n }\n\n _.each(parts, function(value){\n fn = DATE_FORMATS[value];\n text += fn ? fn(date, $locale.DATETIME_FORMATS)\n : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n });\n\n return text;\n }\n return formatter(date, format);\n }\n\n\n\n\n /**\n * formats numbers or number strings to proper fractionSize, lifted from\n * AngularJS with support for removing commas, i.e. the group separator.\n *\n * Usage:\n * numberFormatter(123)\n * \"123\"\n * numberFormatter(123, 0)\n * \"123\"\n * numberFormatter(123, 1)\n * \"123.0\"\n * numberFormatter(123.11111111)\n * \"123.111\"\n * numberFormatter(123.11111111, 1)\n * \"123.1\"\n * numberFormatter(123.11, -1)\n * \"120\"\n * numberFormatter(123123, 2)\n * \"123,123.00\"\n * numberFormatter(123123)\n * \"123,123\"\n * numberFormatter(123123, 0)\n * \"123,123\"\n * numberFormatter(123123, 0, true)\n * \"123123\"\n * numberFormatter(123123, 1, true)\n * \"123123.0\"\n * numberFormatter(-123123, 0, true)\n * \"-123123\"\n *\n *\n *\n * @param {number/str} number\n * @param {int} fractionSize\n * @param {bool} commas\n * @return {str}\n */\n function numberRenderer(number, fractionSize, noCommas){\n var pattern = { // Decimal Pattern\n minInt: 1,\n minFrac: 0,\n maxFrac: 3,\n posPre: '',\n posSuf: '',\n negPre: '-',\n negSuf: '',\n gSize: 3,\n lgSize: 3\n };\n var groupSep = ',';\n var decimalSep = '.';\n var isUndefined = _.isUndefined;\n var isObject = _.isObject;\n var DECIMAL_SEP = '.';\n\n\n /**\n * lifted from AngularJS\n */\n function formatNumber(number, pattern, groupSep, decimalSep, fractionSize, noGroupSep) {\n if (number === null || !isFinite(number) || isObject(number)) {\n return '';\n }\n\n var isNegative = number < 0;\n number = Math.abs(number);\n var numStr = number + '',\n formatedText = '',\n parts = [];\n\n var hasExponent = false;\n if (numStr.indexOf('e') !== -1) {\n var match = numStr.match(/([\\d\\.]+)e(-?)(\\d+)/);\n if (match && match[2] === '-' && match[3] > fractionSize + 1) {\n numStr = '0';\n number = 0;\n } else {\n formatedText = numStr;\n hasExponent = true;\n }\n }\n\n if (!hasExponent) {\n var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;\n\n // determine fractionSize if it is not specified\n if (isUndefined(fractionSize)) {\n fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);\n }\n\n // safely round numbers in JS without hitting imprecisions of floating-point arithmetics\n // inspired by:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);\n\n if (number === 0) {\n isNegative = false;\n }\n\n var fraction = ('' + number).split(DECIMAL_SEP);\n var whole = fraction[0];\n fraction = fraction[1] || '';\n\n var i, pos = 0,\n lgroup = pattern.lgSize,\n group = pattern.gSize;\n\n if (whole.length >= (lgroup + group)) {\n pos = whole.length - lgroup;\n for (i = 0; i < pos; i++) {\n if ((pos - i)%group === 0 && i !== 0 && !noGroupSep) {\n formatedText += groupSep;\n }\n formatedText += whole.charAt(i);\n }\n }\n\n for (i = pos; i < whole.length; i++) {\n if ((whole.length - i)%lgroup === 0 && i !== 0 && !noGroupSep) {\n formatedText += groupSep;\n }\n formatedText += whole.charAt(i);\n }\n\n // format fraction part.\n while(fraction.length < fractionSize) {\n fraction += '0';\n }\n\n if (fractionSize && fractionSize !== \"0\") {\n formatedText += decimalSep + fraction.substr(0, fractionSize);\n }\n } else {\n\n if (fractionSize > 0 && number > -1 && number < 1) {\n formatedText = number.toFixed(fractionSize);\n }\n }\n\n parts.push(isNegative ? pattern.negPre : pattern.posPre);\n parts.push(formatedText);\n parts.push(isNegative ? pattern.negSuf : pattern.posSuf);\n return parts.join('');\n }\n return formatNumber(number, pattern, groupSep, decimalSep, fractionSize, noCommas);\n }\n ns.numberRenderer = numberRenderer;\n ns.dateRenderer = dateRenderer;\n})(formatters);\n/* jshint ignore:end */\n","/*jshint esnext: true */\n\nlet makeNormalFilter = (filterCallback) => (col) => {\n let classes = classNames(\"form-control input-sm show\", {\n disabled: col.filterable === false\n });\n\n return (\n filterCallback(col.key, ev.target.value)}\n className={classes}\n disabled={col.filterable === false ? 'disabled' : ''}\n required=\"true\"\n placeholder={col.title} />\n );\n};\n\n/** Convenience function that, given an input type, returns a function\n * that takes a col and renders a range filter\n */\nlet makeRangeFilter = (type, filterCallback) => (col) => {\n let minKey = col.key + \"__gte\";\n let maxKey = col.key + \"__lte\";\n\n let classes = classNames(\"form-control input-sm show\", {\n disabled: col.filterable === false\n });\n\n return (\n
\n
\n filterCallback(minKey, ev.target.value)}\n className={classes}\n disabled={col.filterable === false ? 'disabled' : ''}\n required=\"true\"\n placeholder=\"Min\" />\n
\n
\n filterCallback(maxKey, ev.target.value)}\n className={classes}\n disabled={col.filterable === false ? 'disabled' : ''}\n required=\"true\"\n placeholder=\"Max\" />\n
\n
\n );\n};\n\nlet defaultTypes = function (table) {\n return {\n hidden: {\n header: {className: 'hidden'},\n filter: {className: 'hidden'},\n cell: {className: 'hidden'},\n },\n string: {},\n number: {\n filter: {\n renderer: makeRangeFilter('number', table.filterCallback)\n },\n cell: {\n className: \"scroll_columns is_aligned_right\",\n renderer: function(val) {\n return formatters.numberRenderer(val, 0);\n },\n }\n },\n year: {\n filter: {\n renderer: makeRangeFilter('number', table.filterCallback)\n },\n cell: {\n renderer: function(val) {\n return formatters.numberRenderer(val, 0, true);\n },\n }\n },\n date: {\n filter: {\n renderer: makeRangeFilter('date', table.filterCallback)\n },\n cell: {\n renderer: function(val) {\n return formatters.dateRenderer(val);\n }\n }\n },\n multiselector: {\n header: {\n className: \"check\",\n renderer: (col, state) => {\n let checked = state.selectAll;\n let handler = (ev) => {\n let node = ev.target;\n table.selectAllCallback(node.checked);\n return false;\n };\n return (\n \n );\n }\n },\n filter: {\n className: \"check\",\n },\n cell: {\n className: \"check\",\n renderer: (val, row, col, opts) => {\n let checked = opts.isSelectedRow;\n let handler = (ev) => {\n let node = ev.target;\n table.rowCallback(row, node.checked);\n return false;\n };\n return (\n \n );\n }\n }\n }\n };\n};\n\n/**\n * add defaults to unspecified properties of incomplete types\n * @param {object} type The type definition object\n * @return {object} The fleshed-out type definition\n */\nlet completeType = (filterRenderer) => (type) => {\n return _.defaults(type, {\n cell: {\n className: \"scroll_columns\",\n renderer: (val) => val,\n },\n header: {\n className: \"column_head scroll_columns\",\n renderer: (col) => col.title,\n },\n filter: {\n className: \"sub_head scroll_columns\",\n renderer: filterRenderer,\n },\n });\n};\n\n\n/** Get default and custom types merged, with missing values filled with defaults */\nlet getTableTypes = function (table) {\n let completer = completeType(makeNormalFilter(table.filterCallback));\n let mergedTypes = _.assign({}, defaultTypes(table), table.props.customTypes);\n let allTypes = _.mapValues(mergedTypes, completer);\n return allTypes;\n};\n","/*jshint esnext: true */\n/**\n * BETable react component and table library\n */\n\nlet BETable = React.createClass({\n propTypes: {\n columns: React.PropTypes.array.isRequired,\n rows: React.PropTypes.array.isRequired,\n callback: React.PropTypes.func,\n searchmeta: React.PropTypes.object,\n objectname: React.PropTypes.string,\n customTypes: React.PropTypes.object\n },\n\n getDefaultProps: function () {\n return {\n objectname: 'rows',\n customTypes: {}\n };\n },\n\n buildTypes: function() {\n return getTableTypes(this);\n },\n\n getType: function (type) {\n let types = this.buildTypes();\n return types[type] || types.hidden;\n },\n\n getInitialState: function () {\n return {\n sorting: {\n column: {},\n ascending: true,\n },\n searchFilters: {},\n currentPage: 1,\n numberPerPage: 10,\n selectedRows: {},\n selectAll: false,\n };\n },\n\n sortingCallback: function (obj) {\n if (obj.sortable === false) {\n return;\n }\n let ascending = (this.state.sorting.column === obj) ? !this.state.sorting.ascending : false;\n this.setState({\n sorting: {\n column: obj,\n ascending: ascending,\n },\n currentPage: 1\n }, function () {\n this.props.callback(this.state, {eventType: 'columnSorted'});\n });\n },\n\n filterCallback: function (key, val) {\n this.setState(function (previousState, currentProps) {\n previousState.searchFilters[key] = val;\n return {searchFilters: previousState.searchFilters, currentPage: 1};\n }, function () {\n this.props.callback(this.state, {eventType: 'filterChanged'});\n });\n },\n\n paginationCallback: function (state) {\n this.setState(state, function () {\n this.props.callback(this.state, {eventType: 'pagination'});\n });\n },\n\n rowCallback: function (row, insert) {\n this.setState(function (previousState, currentProps) {\n let rows = previousState.selectedRows;\n if (previousState.selectAll) {\n insert = !insert;\n }\n\n if (insert) {\n rows[row.id] = row;\n } else {\n delete(rows[row.id]);\n }\n\n return {\n selectedRows: rows\n };\n }, function () {\n this.props.callback(this.state, {eventType: 'rowClicked'});\n });\n },\n\n selectAllCallback: function () {\n this.setState((prevState) => {\n let selectAll = !prevState.selectAll;\n return {\n selectedRows: {},\n selectAll: !prevState.selectAll\n };\n }, function () {\n this.props.callback(this.state, {eventType: 'selectAllToggled'});\n });\n },\n\n isSelectedRow: function (row) {\n let selected = _.has(this.state.selectedRows, row.id);\n if (this.state.selectAll) {\n selected = !selected;\n }\n return selected;\n },\n\n render: function() {\n let columnDefs = this.props.columns;\n let types = this.buildTypes();\n\n let headers = columnDefs.map(function (col) {\n let builder = this.getType(col.type).header;\n let className = getOrCall(builder.className, col);\n let content = getOrCall(builder.renderer, col, this.state);\n return (\n
this.sortingCallback(col)}\n sorting={this.state.sorting}>\n {content}\n
\n );\n }.bind(this));\n\n let searchFilters = columnDefs.map(function (col) {\n let builder = this.getType(col.type).filter;\n return (\n \n {getOrCall(builder.renderer, col)}\n \n );\n }.bind(this));\n\n let rows = this.props.rows.map(function (row) {\n return ;\n }.bind(this));\n\n let numberOfObjects = this.props.searchmeta.totalMatchCount || this.props.searchmeta.number_matching_search;\n\n return (\n
\n
\n \n \n \n {headers}\n \n \n {searchFilters}\n \n \n \n {rows}\n \n
\n
\n \n
\n );\n }\n});\n\n\nlet Header = React.createClass({\n propTypes: {\n column : React.PropTypes.object.isRequired,\n handleClick: React.PropTypes.func,\n sorting: React.PropTypes.object.isRequired,\n className: React.PropTypes.string\n },\n getDefaultProps: function () {\n return {\n className: \"\"\n };\n },\n handleClick: function (e) {\n this.props.handleClick(e, this.props.column);\n },\n render: function() {\n let classes = {};\n let column = this.props.column;\n if (column === this.props.sorting.column) {\n classes = {\n sorted: true,\n sort_asc: this.props.sorting.ascending,\n sort_desc: !this.props.sorting.ascending,\n };\n }\n\n return (\n \n {this.props.children}\n \n );\n }\n});\n\n\n/**\n * SearchFilter: the filter sub header\n */\nlet SearchFilter = React.createClass({\n render: function() {\n let thClassString = \"sub_head scroll_columns\" + \" \" + this.props.className;\n\n return (\n \n {this.props.children}\n \n );\n }\n});\n\nlet Row = React.createClass({\n propTypes: {\n row: React.PropTypes.object.isRequired,\n columns: React.PropTypes.array.isRequired,\n sorting: React.PropTypes.object.isRequired,\n getType: React.PropTypes.func.isRequired\n },\n render: function() {\n let row = this.props.columns.map(function (col) {\n let isSorted = col === this.props.sorting.column;\n let cellValue = this.props.row[col.key];\n let cellBuilder = this.props.getType(col.type).cell;\n let content = getOrCall(cellBuilder.renderer, cellValue, this.props.row, col, {isSelectedRow: this.props.isSelectedRow});\n let className = getOrCall(cellBuilder.className, col);\n\n return (\n \n {content}\n \n );\n }.bind(this));\n return (\n \n {row}\n \n );\n }\n});\n\n/**\n * Cell: table row cell: `td`\n * Allows custom React elements to be returned if set in BETable.types\n */\nlet Cell = React.createClass({\n propTypes: {\n className: React.PropTypes.string.isRequired,\n isSorted: React.PropTypes.bool,\n isSelectedRow: React.PropTypes.bool\n },\n render: function () {\n let classString = this.props.className;\n if (this.props.isSorted) {\n classString += \" sorted\";\n }\n return (\n {this.props.children}\n );\n }\n});\n\n/**\n * pagination footer\n */\nlet TableFooter = React.createClass({\n propTypes: {\n numberPerPageOptions: React.PropTypes.array,\n numberPerPage: React.PropTypes.number,\n currentPage: React.PropTypes.number,\n numberOfObjects: React.PropTypes.number,\n paginationCallback: React.PropTypes.func\n },\n getDefaultProps: function () {\n return {\n numberPerPageOptions: [10, 25, 50, 100],\n enableFirstLast: true\n };\n },\n changePagination: function (r) {\n this.props.paginationCallback({numberPerPage: +r.target.value, currentPage: 1});\n },\n numberOfPages: function () {\n return Math.ceil(this.props.numberOfObjects / this.props.numberPerPage);\n },\n firstPage: function() {\n this.props.paginationCallback({currentPage: 1});\n },\n lastPage: function() {\n this.props.paginationCallback({currentPage: this.numberOfPages()});\n },\n nextPage: function () {\n if (this.props.currentPage < this.numberOfPages()) {\n this.props.paginationCallback({currentPage: this.props.currentPage + 1});\n }\n },\n prevPage: function () {\n if (this.props.currentPage > 1) {\n this.props.paginationCallback({currentPage: this.props.currentPage - 1});\n }\n },\n render: function () {\n let options = this.props.numberPerPageOptions.map(function (opt) {\n return ;\n }.bind(this));\n let numberOfPages = this.numberOfPages();\n let pageStart = ((this.props.currentPage - 1) * this.props.numberPerPage) + 1;\n let pageEnd = (this.props.currentPage === numberOfPages) ? this.props.numberOfObjects : this.props.currentPage * this.props.numberPerPage;\n let prevDisabled = this.props.currentPage <= 1 ? \"disabled\" : \"\";\n let prevStyle = this.props.currentPage <= 1 ? {} : {cursor: \"pointer\"};\n let nextDisabled = this.props.currentPage === numberOfPages ? \"disabled\" : \"\";\n let nextStyle = this.props.currentPage === numberOfPages ? {} : {cursor: \"pointer\"};\n let firstButton;\n let lastButton;\n if (this.props.enableFirstLast) {\n firstButton = (
  • First
  • );\n lastButton = (
  • Last
  • );\n }\n\n return (\n
    \n
    \n
    Display:
    \n
    \n \n
    \n
    {this.props.objectName}
    \n
    \n
    \n Showing {pageStart} to {pageEnd} of {this.props.numberOfObjects} {this.props.objectName}\n
    \n
    \n \n
    \n
    \n );\n }\n});\n\n// last step add the react component to the mix\nlet ns = getNamespace('BE', 'Table');\nns.BETable = BETable;\nns.Header = Header;\nns.Row = Row;\nns.Cell = Cell;\nns.SearchFilter = SearchFilter;\n\ntry {\n module.exports = {\n BETable: BETable,\n Header: Header,\n Row: Row,\n Cell: Cell,\n SearchFilter: SearchFilter\n };\n} catch (e) {\n\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["be-table.min.js","utils.js","dependencies.js","formatters.js","default-types.jsx","be-table.jsx"],"names":["getNamespace","o","window","i","arguments","k","getOrCall","x","_len","length","params","Array","_key","_","isFunction","apply","this","React","classNames","classes","arg","argType","isArray","key","hasOwnProperty","substr","define","amd","module","exports","formatters","ns","dateRenderer","date","format","isString","value","int","str","parseInt","isNumber","isDate","toString","call","concat","array1","array2","index","slice","padNumber","num","digits","trim","neg","dateGetter","name","size","offset","ampmGetter","formats","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","Math","abs","dateStrGetter","shortForm","get","uppercase","jsonStringToDate","string","match","R_ISO8601_STR","Date","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","h","m","s","ms","round","parseFloat","formatter","fn","text","parts","$locale","DATETIME_FORMATS","NUMBER_STRING","test","DATE_FORMATS_SPLIT","exec","pop","push","each","DATE_FORMATS","replace","Object","prototype","toUpperCase","MONTH","split","SHORTMONTH","DAY","SHORTDAY","medium","short","fullDate","longDate","mediumDate","shortDate","mediumTime","shortTime","yyyy","yy","y","MMMM","MMM","MM","M","dd","d","HH","H","hh","mm","ss","sss","EEEE","EEE","a","Z","numberRenderer","number","fractionSize","noCommas","formatNumber","pattern","groupSep","decimalSep","noGroupSep","isFinite","isObject","isNegative","numStr","formatedText","hasExponent","indexOf","toFixed","fractionLen","DECIMAL_SEP","isUndefined","min","max","minFrac","maxFrac","fraction","whole","pos","lgroup","lgSize","group","gSize","charAt","negPre","posPre","negSuf","posSuf","join","minInt","makeNormalFilter","filterCallback","col","disabled","filterable","createElement","type","onChange","ev","target","className","required","placeholder","title","makeRangeFilter","minKey","maxKey","defaultTypes","table","hidden","header","filter","cell","renderer","val","year","multiselector","state","checked","selectAll","handler","node","selectAllCallback","row","opts","isSelectedRow","rowCallback","completeType","filterRenderer","defaults","getTableTypes","completer","mergedTypes","assign","props","customTypes","allTypes","mapValues","BETable","createClass","displayName","propTypes","columns","PropTypes","array","isRequired","rows","callback","func","searchmeta","object","objectname","getDefaultProps","buildTypes","getType","types","getInitialState","sorting","column","ascending","searchFilters","currentPage","numberPerPage","selectedRows","sortingCallback","obj","sortable","setState","eventType","previousState","currentProps","paginationCallback","insert","id","prevState","selected","has","render","columnDefs","headers","map","_this","builder","content","Header","handleClick","bind","SearchFilter","Row","numberOfObjects","totalMatchCount","number_matching_search","TableFooter","objectName","e","sorted","sort_asc","sort_desc","onClick","children","thClassString","isSorted","cellValue","cellBuilder","Cell","bool","classString","numberPerPageOptions","enableFirstLast","changePagination","r","numberOfPages","ceil","firstPage","lastPage","nextPage","prevPage","options","opt","pageStart","pageEnd","prevDisabled","prevStyle","cursor","nextDisabled","nextStyle","firstButton","undefined","lastButton","style"],"mappings":"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","file":"be-table.min.js","sourcesContent":[null,"/*jshint esnext: true */\nfunction getNamespace() {\n /**\n * Recursively define a nested object on ``window`` without destroying if it exists\n *\n * e.g.:\n * getNamespace('BE', 'utils', 'formatting') === window.BE.utils.formatting\n * // keeps existing objects intact if extant, otherwise creates empty objects\n */\n let o = window;\n for (let i in arguments) {\n let k = arguments[i];\n o[k] = o[k] || {};\n o = o[k];\n }\n return o;\n}\n\nfunction getOrCall(x, ...params) {\n if (_.isFunction(x)) {\n return x.apply(this, params);\n } else {\n return x;\n }\n}\n\n/*!\n Copyright (c) 2015 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n\n(function () {\n 'use strict';\n\n function classNames () {\n\n let classes = '';\n\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i];\n if (!arg) continue;\n\n let argType = typeof arg;\n\n if ('string' === argType || 'number' === argType) {\n classes += ' ' + arg;\n\n } else if (Array.isArray(arg)) {\n classes += ' ' + classNames.apply(null, arg);\n\n } else if ('object' === argType) {\n for (let key in arg) {\n if (arg.hasOwnProperty(key) && arg[key]) {\n classes += ' ' + key;\n }\n }\n }\n }\n\n return classes.substr(1);\n }\n\n if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function () {\n return classNames;\n });\n } else if (typeof module !== 'undefined' && module.exports) {\n module.exports = classNames;\n } else {\n window.classNames = classNames;\n }\n\n}());\n","\nvar React = window.React;\nvar _ = window._; // lodash\n","/* jshint ignore:start */\n\nvar formatters = {};\ngetNamespace('BE', 'Table').formatters = formatters;\n\n(function (ns){\n /**\n * @ngdoc filter\n * @name date\n * @kind function\n *\n * @description\n * Formats `date` to a string based on the requested `format`.\n *\n * `format` string can be composed of the following elements:\n *\n * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n * * `'MMMM'`: Month in year (January-December)\n * * `'MMM'`: Month in year (Jan-Dec)\n * * `'MM'`: Month in year, padded (01-12)\n * * `'M'`: Month in year (1-12)\n * * `'dd'`: Day in month, padded (01-31)\n * * `'d'`: Day in month (1-31)\n * * `'EEEE'`: Day in Week,(Sunday-Saturday)\n * * `'EEE'`: Day in Week, (Sun-Sat)\n * * `'HH'`: Hour in day, padded (00-23)\n * * `'H'`: Hour in day (0-23)\n * * `'hh'`: Hour in am/pm, padded (01-12)\n * * `'h'`: Hour in am/pm, (1-12)\n * * `'mm'`: Minute in hour, padded (00-59)\n * * `'m'`: Minute in hour (0-59)\n * * `'ss'`: Second in minute, padded (00-59)\n * * `'s'`: Second in minute (0-59)\n * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)\n * * `'a'`: am/pm marker\n * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n *\n * `format` string can also be one of the following predefined\n * {@link guide/i18n localizable formats}:\n *\n * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n * (e.g. Sep 3, 2010 12:05:08 pm)\n * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 pm)\n * * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US locale\n * (e.g. Friday, September 3, 2010)\n * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)\n * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)\n * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)\n * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm)\n *\n * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.\n * `\"h 'in the morning'\"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence\n * (e.g. `\"h 'o''clock'\"`).\n *\n * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its\n * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n * specified in the string input, the time is considered to be in the local timezone.\n * @param {string=} format Formatting rules (see Description). If not specified,\n * `mediumDate` is used.\n * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n *\n * @example\n \n \n {{1288323623006 | date:'medium'}}:\n {{1288323623006 | date:'medium'}}
    \n {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}:\n {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}
    \n {{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}:\n {{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}
    \n {{1288323623006 | date:\"MM/dd/yyyy 'at' h:mma\"}}:\n {{'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"}}
    \n
    \n \n it('should format date', function() {\n expect(element(by.binding(\"1288323623006 | date:'medium'\")).getText()).\n toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n expect(element(by.binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).getText()).\n toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n expect(element(by.binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).getText()).\n toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n expect(element(by.binding(\"'1288323623006' | date:\\\"MM/dd/yyyy 'at' h:mma\\\"\")).getText()).\n toMatch(/10\\/2\\d\\/2010 at \\d{1,2}:\\d{2}(AM|PM)/);\n });\n \n
    \n */\n function dateRenderer(date, format) {\n var toString = Object.prototype.toString;\n var slice = [].slice;\n function isString(value){return typeof value === 'string';}\n function int(str) {\n return parseInt(str, 10);\n }\n function isNumber(value){return typeof value === 'number';}\n function isDate(value) {\n return toString.call(value) === '[object Date]';\n }\n function concat(array1, array2, index) {\n return array1.concat(slice.call(array2, index));\n }\n var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};\n function padNumber(num, digits, trim) {\n var neg = '';\n if (num < 0) {\n neg = '-';\n num = -num;\n }\n num = '' + num;\n while(num.length < digits) {\n num = '0' + num;\n }\n if (trim) {\n num = num.substr(num.length - digits);\n }\n return neg + num;\n }\n\n function dateGetter(name, size, offset, trim) {\n offset = offset || 0;\n return function(date) {\n var value = date['get' + name]();\n if (offset > 0 || value > -offset){\n value += offset;\n }\n if (value === 0 && offset === -12 ) {\n value = 12;\n }\n return padNumber(value, size, trim);\n };\n }\n function ampmGetter(date, formats) {\n return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n }\n function timeZoneGetter(date) {\n var zone = -1 * date.getTimezoneOffset();\n var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\n paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n padNumber(Math.abs(zone % 60), 2);\n\n return paddedZone;\n }\n\n function dateStrGetter(name, shortForm) {\n return function(date, formats) {\n var value = date['get' + name]();\n var get = uppercase(shortForm ? ('SHORT' + name) : name);\n\n return formats[get][value];\n };\n }\n var $locale = $locale || {};\n $locale.DATETIME_FORMATS = {\n MONTH:\n 'January,February,March,April,May,June,July,August,September,October,November,December'\n .split(','),\n SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),\n AMPMS: ['AM','PM'],\n medium: 'MMM d, y h:mm:ss a',\n short: 'M/d/yy h:mm a',\n fullDate: 'EEEE, MMMM d, y',\n longDate: 'MMMM d, y',\n mediumDate: 'MMM d, y',\n shortDate: 'M/d/yy',\n mediumTime: 'h:mm:ss a',\n shortTime: 'h:mm a'\n };\n var DATE_FORMATS = {\n yyyy: dateGetter('FullYear', 4),\n yy: dateGetter('FullYear', 2, 0, true),\n y: dateGetter('FullYear', 1),\n MMMM: dateStrGetter('Month'),\n MMM: dateStrGetter('Month', true),\n MM: dateGetter('Month', 2, 1),\n M: dateGetter('Month', 1, 1),\n dd: dateGetter('Date', 2),\n d: dateGetter('Date', 1),\n HH: dateGetter('Hours', 2),\n H: dateGetter('Hours', 1),\n hh: dateGetter('Hours', 2, -12),\n h: dateGetter('Hours', 1, -12),\n mm: dateGetter('Minutes', 2),\n m: dateGetter('Minutes', 1),\n ss: dateGetter('Seconds', 2),\n s: dateGetter('Seconds', 1),\n // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n sss: dateGetter('Milliseconds', 3),\n EEEE: dateStrGetter('Day'),\n EEE: dateStrGetter('Day', true),\n a: ampmGetter,\n Z: timeZoneGetter\n };\n\n var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,\n NUMBER_STRING = /^\\-?\\d+$/;\n var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n // 1 2 3 4 5 6 7 8 9 10 11\n function jsonStringToDate(string) {\n var match;\n if (match = string.match(R_ISO8601_STR)) {\n var date = new Date(0),\n tzHour = 0,\n tzMin = 0,\n dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n if (match[9]) {\n tzHour = int(match[9] + match[10]);\n tzMin = int(match[9] + match[11]);\n }\n dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));\n var h = int(match[4]||0) - tzHour;\n var m = int(match[5]||0) - tzMin;\n var s = int(match[6]||0);\n var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);\n timeSetter.call(date, h, m, s, ms);\n return date;\n }\n return string;\n }\n\n\n function formatter(date, format) {\n var text = '',\n parts = [],\n fn, match;\n\n format = format || 'mediumDate';\n format = $locale.DATETIME_FORMATS[format] || format;\n if (isString(date)) {\n date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date);\n }\n\n if (isNumber(date)) {\n date = new Date(date);\n }\n\n if (!isDate(date)) {\n return date;\n }\n\n while(format) {\n match = DATE_FORMATS_SPLIT.exec(format);\n if (match) {\n parts = concat(parts, match, 1);\n format = parts.pop();\n } else {\n parts.push(format);\n format = null;\n }\n }\n\n _.each(parts, function(value){\n fn = DATE_FORMATS[value];\n text += fn ? fn(date, $locale.DATETIME_FORMATS)\n : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n });\n\n return text;\n }\n return formatter(date, format);\n }\n\n\n\n\n /**\n * formats numbers or number strings to proper fractionSize, lifted from\n * AngularJS with support for removing commas, i.e. the group separator.\n *\n * Usage:\n * numberFormatter(123)\n * \"123\"\n * numberFormatter(123, 0)\n * \"123\"\n * numberFormatter(123, 1)\n * \"123.0\"\n * numberFormatter(123.11111111)\n * \"123.111\"\n * numberFormatter(123.11111111, 1)\n * \"123.1\"\n * numberFormatter(123.11, -1)\n * \"120\"\n * numberFormatter(123123, 2)\n * \"123,123.00\"\n * numberFormatter(123123)\n * \"123,123\"\n * numberFormatter(123123, 0)\n * \"123,123\"\n * numberFormatter(123123, 0, true)\n * \"123123\"\n * numberFormatter(123123, 1, true)\n * \"123123.0\"\n * numberFormatter(-123123, 0, true)\n * \"-123123\"\n *\n *\n *\n * @param {number/str} number\n * @param {int} fractionSize\n * @param {bool} commas\n * @return {str}\n */\n function numberRenderer(number, fractionSize, noCommas){\n var pattern = { // Decimal Pattern\n minInt: 1,\n minFrac: 0,\n maxFrac: 3,\n posPre: '',\n posSuf: '',\n negPre: '-',\n negSuf: '',\n gSize: 3,\n lgSize: 3\n };\n var groupSep = ',';\n var decimalSep = '.';\n var isUndefined = _.isUndefined;\n var isObject = _.isObject;\n var DECIMAL_SEP = '.';\n\n\n /**\n * lifted from AngularJS\n */\n function formatNumber(number, pattern, groupSep, decimalSep, fractionSize, noGroupSep) {\n if (number === null || !isFinite(number) || isObject(number)) {\n return '';\n }\n\n var isNegative = number < 0;\n number = Math.abs(number);\n var numStr = number + '',\n formatedText = '',\n parts = [];\n\n var hasExponent = false;\n if (numStr.indexOf('e') !== -1) {\n var match = numStr.match(/([\\d\\.]+)e(-?)(\\d+)/);\n if (match && match[2] === '-' && match[3] > fractionSize + 1) {\n numStr = '0';\n number = 0;\n } else {\n formatedText = numStr;\n hasExponent = true;\n }\n }\n\n if (!hasExponent) {\n var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;\n\n // determine fractionSize if it is not specified\n if (isUndefined(fractionSize)) {\n fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);\n }\n\n // safely round numbers in JS without hitting imprecisions of floating-point arithmetics\n // inspired by:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);\n\n if (number === 0) {\n isNegative = false;\n }\n\n var fraction = ('' + number).split(DECIMAL_SEP);\n var whole = fraction[0];\n fraction = fraction[1] || '';\n\n var i, pos = 0,\n lgroup = pattern.lgSize,\n group = pattern.gSize;\n\n if (whole.length >= (lgroup + group)) {\n pos = whole.length - lgroup;\n for (i = 0; i < pos; i++) {\n if ((pos - i)%group === 0 && i !== 0 && !noGroupSep) {\n formatedText += groupSep;\n }\n formatedText += whole.charAt(i);\n }\n }\n\n for (i = pos; i < whole.length; i++) {\n if ((whole.length - i)%lgroup === 0 && i !== 0 && !noGroupSep) {\n formatedText += groupSep;\n }\n formatedText += whole.charAt(i);\n }\n\n // format fraction part.\n while(fraction.length < fractionSize) {\n fraction += '0';\n }\n\n if (fractionSize && fractionSize !== \"0\") {\n formatedText += decimalSep + fraction.substr(0, fractionSize);\n }\n } else {\n\n if (fractionSize > 0 && number > -1 && number < 1) {\n formatedText = number.toFixed(fractionSize);\n }\n }\n\n parts.push(isNegative ? pattern.negPre : pattern.posPre);\n parts.push(formatedText);\n parts.push(isNegative ? pattern.negSuf : pattern.posSuf);\n return parts.join('');\n }\n return formatNumber(number, pattern, groupSep, decimalSep, fractionSize, noCommas);\n }\n ns.numberRenderer = numberRenderer;\n ns.dateRenderer = dateRenderer;\n})(formatters);\n/* jshint ignore:end */\n","/*jshint esnext: true */\n\nlet makeNormalFilter = (filterCallback) => (col) => {\n let classes = classNames(\"form-control input-sm show\", {\n disabled: col.filterable === false\n });\n\n return (\n filterCallback(col.key, ev.target.value)}\n className={classes}\n disabled={col.filterable === false ? 'disabled' : ''}\n required=\"true\"\n placeholder={col.title} />\n );\n};\n\n/** Convenience function that, given an input type, returns a function\n * that takes a col and renders a range filter\n */\nlet makeRangeFilter = (type, filterCallback) => (col) => {\n let minKey = col.key + \"__gte\";\n let maxKey = col.key + \"__lte\";\n\n let classes = classNames(\"form-control input-sm show\", {\n disabled: col.filterable === false\n });\n\n return (\n
    \n
    \n filterCallback(minKey, ev.target.value)}\n className={classes}\n disabled={col.filterable === false ? 'disabled' : ''}\n required=\"true\"\n placeholder=\"Min\" />\n
    \n
    \n filterCallback(maxKey, ev.target.value)}\n className={classes}\n disabled={col.filterable === false ? 'disabled' : ''}\n required=\"true\"\n placeholder=\"Max\" />\n
    \n
    \n );\n};\n\nlet defaultTypes = function (table) {\n return {\n hidden: {\n header: {className: 'hidden'},\n filter: {className: 'hidden'},\n cell: {className: 'hidden'},\n },\n string: {},\n number: {\n filter: {\n renderer: makeRangeFilter('number', table.filterCallback)\n },\n cell: {\n className: \"scroll_columns is_aligned_right\",\n renderer: function(val) {\n return formatters.numberRenderer(val, 0);\n },\n }\n },\n year: {\n filter: {\n renderer: makeRangeFilter('number', table.filterCallback)\n },\n cell: {\n renderer: function(val) {\n return formatters.numberRenderer(val, 0, true);\n },\n }\n },\n date: {\n filter: {\n renderer: makeRangeFilter('date', table.filterCallback)\n },\n cell: {\n renderer: function(val) {\n return formatters.dateRenderer(val);\n }\n }\n },\n multiselector: {\n header: {\n className: \"check\",\n renderer: (col, state) => {\n let checked = state.selectAll;\n let handler = (ev) => {\n let node = ev.target;\n table.selectAllCallback(node.checked);\n return false;\n };\n return (\n \n );\n }\n },\n filter: {\n className: \"check\",\n },\n cell: {\n className: \"check\",\n renderer: (val, row, col, opts) => {\n let checked = opts.isSelectedRow;\n let handler = (ev) => {\n let node = ev.target;\n table.rowCallback(row, node.checked);\n return false;\n };\n return (\n \n );\n }\n }\n }\n };\n};\n\n/**\n * add defaults to unspecified properties of incomplete types\n * @param {object} type The type definition object\n * @return {object} The fleshed-out type definition\n */\nlet completeType = (filterRenderer) => (type) => {\n return _.defaults(type, {\n cell: {\n className: \"scroll_columns\",\n renderer: (val) => val,\n },\n header: {\n className: \"column_head scroll_columns\",\n renderer: (col) => col.title,\n },\n filter: {\n className: \"sub_head scroll_columns\",\n renderer: filterRenderer,\n },\n });\n};\n\n\n/** Get default and custom types merged, with missing values filled with defaults */\nlet getTableTypes = function (table) {\n let completer = completeType(makeNormalFilter(table.filterCallback));\n let mergedTypes = _.assign({}, defaultTypes(table), table.props.customTypes);\n let allTypes = _.mapValues(mergedTypes, completer);\n return allTypes;\n};\n","/*jshint esnext: true */\n/**\n * BETable react component and table library\n */\n\nlet BETable = React.createClass({\n propTypes: {\n columns: React.PropTypes.array.isRequired,\n rows: React.PropTypes.array.isRequired,\n callback: React.PropTypes.func,\n searchmeta: React.PropTypes.object,\n objectname: React.PropTypes.string,\n customTypes: React.PropTypes.object\n },\n\n getDefaultProps: function () {\n return {\n objectname: 'rows',\n customTypes: {}\n };\n },\n\n buildTypes: function() {\n return getTableTypes(this);\n },\n\n getType: function (type) {\n let types = this.buildTypes();\n return types[type] || types.hidden;\n },\n\n getInitialState: function () {\n return {\n sorting: {\n column: {},\n ascending: true,\n },\n searchFilters: {},\n currentPage: 1,\n numberPerPage: 10,\n selectedRows: {},\n selectAll: false,\n };\n },\n\n sortingCallback: function (obj) {\n if (obj.sortable === false) {\n return;\n }\n let ascending = (this.state.sorting.column === obj) ? !this.state.sorting.ascending : false;\n this.setState({\n sorting: {\n column: obj,\n ascending: ascending,\n },\n currentPage: 1\n }, function () {\n this.props.callback(this.state, {eventType: 'columnSorted'});\n });\n },\n\n filterCallback: function (key, val) {\n this.setState(function (previousState, currentProps) {\n previousState.searchFilters[key] = val;\n return {searchFilters: previousState.searchFilters, currentPage: 1};\n }, function () {\n this.props.callback(this.state, {eventType: 'filterChanged'});\n });\n },\n\n paginationCallback: function (state) {\n this.setState(state, function () {\n this.props.callback(this.state, {eventType: 'pagination'});\n });\n },\n\n rowCallback: function (row, insert) {\n this.setState(function (previousState, currentProps) {\n let rows = previousState.selectedRows;\n if (previousState.selectAll) {\n insert = !insert;\n }\n\n if (insert) {\n rows[row.id] = row;\n } else {\n delete(rows[row.id]);\n }\n\n return {\n selectedRows: rows\n };\n }, function () {\n this.props.callback(this.state, {eventType: 'rowClicked'});\n });\n },\n\n selectAllCallback: function () {\n this.setState((prevState) => {\n let selectAll = !prevState.selectAll;\n return {\n selectedRows: {},\n selectAll: !prevState.selectAll\n };\n }, function () {\n this.props.callback(this.state, {eventType: 'selectAllToggled'});\n });\n },\n\n isSelectedRow: function (row) {\n let selected = _.has(this.state.selectedRows, row.id);\n if (this.state.selectAll) {\n selected = !selected;\n }\n return selected;\n },\n\n render: function() {\n let columnDefs = this.props.columns;\n let types = this.buildTypes();\n\n let headers = columnDefs.map(function (col) {\n let builder = this.getType(col.type).header;\n let className = getOrCall(builder.className, col);\n let content = getOrCall(builder.renderer, col, this.state);\n return (\n
    this.sortingCallback(col)}\n sorting={this.state.sorting}>\n {content}\n
    \n );\n }.bind(this));\n\n let searchFilters = columnDefs.map(function (col) {\n let builder = this.getType(col.type).filter;\n return (\n \n {getOrCall(builder.renderer, col)}\n \n );\n }.bind(this));\n\n let rows = this.props.rows.map(function (row) {\n return ;\n }.bind(this));\n\n let numberOfObjects = this.props.searchmeta.totalMatchCount || this.props.searchmeta.number_matching_search;\n\n return (\n
    \n
    \n \n \n \n {headers}\n \n \n {searchFilters}\n \n \n \n {rows}\n \n
    \n
    \n \n
    \n );\n }\n});\n\n\nlet Header = React.createClass({\n propTypes: {\n column : React.PropTypes.object.isRequired,\n handleClick: React.PropTypes.func,\n sorting: React.PropTypes.object.isRequired,\n className: React.PropTypes.string\n },\n getDefaultProps: function () {\n return {\n className: \"\"\n };\n },\n handleClick: function (e) {\n this.props.handleClick(e, this.props.column);\n },\n render: function() {\n let classes = {};\n let column = this.props.column;\n if (column === this.props.sorting.column) {\n classes = {\n sorted: true,\n sort_asc: this.props.sorting.ascending,\n sort_desc: !this.props.sorting.ascending,\n };\n }\n\n return (\n \n {this.props.children}\n \n );\n }\n});\n\n\n/**\n * SearchFilter: the filter sub header\n */\nlet SearchFilter = React.createClass({\n render: function() {\n let thClassString = \"sub_head scroll_columns\" + \" \" + this.props.className;\n\n return (\n \n {this.props.children}\n \n );\n }\n});\n\nlet Row = React.createClass({\n propTypes: {\n row: React.PropTypes.object.isRequired,\n columns: React.PropTypes.array.isRequired,\n sorting: React.PropTypes.object.isRequired,\n getType: React.PropTypes.func.isRequired\n },\n render: function() {\n let row = this.props.columns.map(function (col) {\n let isSorted = col === this.props.sorting.column;\n let cellValue = this.props.row[col.key];\n let cellBuilder = this.props.getType(col.type).cell;\n let content = getOrCall(cellBuilder.renderer, cellValue, this.props.row, col, {isSelectedRow: this.props.isSelectedRow});\n let className = getOrCall(cellBuilder.className, col);\n\n return (\n \n {content}\n \n );\n }.bind(this));\n return (\n \n {row}\n \n );\n }\n});\n\n/**\n * Cell: table row cell: `td`\n * Allows custom React elements to be returned if set in BETable.types\n */\nlet Cell = React.createClass({\n propTypes: {\n className: React.PropTypes.string.isRequired,\n isSorted: React.PropTypes.bool,\n isSelectedRow: React.PropTypes.bool\n },\n render: function () {\n let classString = this.props.className;\n if (this.props.isSorted) {\n classString += \" sorted\";\n }\n return (\n {this.props.children}\n );\n }\n});\n\n/**\n * pagination footer\n */\nlet TableFooter = React.createClass({\n propTypes: {\n numberPerPageOptions: React.PropTypes.array,\n numberPerPage: React.PropTypes.number,\n currentPage: React.PropTypes.number,\n numberOfObjects: React.PropTypes.number,\n paginationCallback: React.PropTypes.func\n },\n getDefaultProps: function () {\n return {\n numberPerPageOptions: [10, 25, 50, 100],\n enableFirstLast: true\n };\n },\n changePagination: function (r) {\n this.props.paginationCallback({numberPerPage: +r.target.value, currentPage: 1});\n },\n numberOfPages: function () {\n return Math.ceil(this.props.numberOfObjects / this.props.numberPerPage);\n },\n firstPage: function() {\n this.props.paginationCallback({currentPage: 1});\n },\n lastPage: function() {\n this.props.paginationCallback({currentPage: this.numberOfPages()});\n },\n nextPage: function () {\n if (this.props.currentPage < this.numberOfPages()) {\n this.props.paginationCallback({currentPage: this.props.currentPage + 1});\n }\n },\n prevPage: function () {\n if (this.props.currentPage > 1) {\n this.props.paginationCallback({currentPage: this.props.currentPage - 1});\n }\n },\n render: function () {\n let options = this.props.numberPerPageOptions.map(function (opt) {\n return ;\n }.bind(this));\n let numberOfPages = this.numberOfPages();\n let pageStart = ((this.props.currentPage - 1) * this.props.numberPerPage) + 1;\n let pageEnd = (this.props.currentPage === numberOfPages) ? this.props.numberOfObjects : this.props.currentPage * this.props.numberPerPage;\n let prevDisabled = this.props.currentPage <= 1 ? \"disabled\" : \"\";\n let prevStyle = this.props.currentPage <= 1 ? {} : {cursor: \"pointer\"};\n let nextDisabled = this.props.currentPage === numberOfPages ? \"disabled\" : \"\";\n let nextStyle = this.props.currentPage === numberOfPages ? {} : {cursor: \"pointer\"};\n let firstButton;\n let lastButton;\n if (this.props.enableFirstLast) {\n firstButton = (
  • First
  • );\n lastButton = (
  • Last
  • );\n }\n\n return (\n
    \n
    \n
    Display:
    \n
    \n \n
    \n
    {this.props.objectName}
    \n
    \n
    \n Showing {pageStart} to {pageEnd} of {this.props.numberOfObjects} {this.props.objectName}\n
    \n
    \n \n
    \n
    \n );\n }\n});\n\n// last step add the react component to the mix\nlet ns = getNamespace('BE', 'Table');\nns.BETable = BETable;\nns.Header = Header;\nns.Row = Row;\nns.Cell = Cell;\nns.SearchFilter = SearchFilter;\n\ntry {\n module.exports = {\n BETable: BETable,\n Header: Header,\n Row: Row,\n Cell: Cell,\n SearchFilter: SearchFilter\n };\n} catch (e) {\n\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/basic/README.md b/examples/basic/README.md new file mode 100644 index 0000000..18fdbca --- /dev/null +++ b/examples/basic/README.md @@ -0,0 +1,20 @@ +# Basic Example + +## Setup + +Make sure be-table has been built -- in the top-level directory: +```sh +gulp build +``` + +Build the example (in this directory): +```sh +gulp build +``` + +## Running +```sh +python -m SimpleHTTPServer +``` + +browse to [http://localhost:8000](http://localhost:8000) diff --git a/examples/basic/gulpfile.js b/examples/basic/gulpfile.js new file mode 100644 index 0000000..cf046d5 --- /dev/null +++ b/examples/basic/gulpfile.js @@ -0,0 +1,13 @@ +var gulp = require('gulp'); +var del = require('del'); + +var beTablePath = '../../build/js/be-table.js'; +var cleanTargets = ['js/vendor']; + +gulp.task('build', function () { + return gulp.src(beTablePath).pipe(gulp.dest('js/vendor')); +}); + +gulp.task('clean', function (done) { + del(cleanTargets, done); +}); diff --git a/examples/basic/index.html b/examples/basic/index.html new file mode 100644 index 0000000..90b93c3 --- /dev/null +++ b/examples/basic/index.html @@ -0,0 +1,14 @@ + + + + + + + + + + +
    Loading...
    + + + diff --git a/examples/basic/js/app.js b/examples/basic/js/app.js new file mode 100644 index 0000000..0940454 --- /dev/null +++ b/examples/basic/js/app.js @@ -0,0 +1,98 @@ +(function (_, React, BE) { + 'use strict'; + + var rows = [ + {id: 1, item: 'kale', price: 4.34, label: {text: 'Leafy'}}, + {id: 2, item: 'almonds', price: 5.44, label: {text: 'Nutty'}}, + {id: 3, item: 'strawberries', price: 3.50, label: {text: 'Ripe'}}, + {id: 4, item: 'apples', price: 14, label: {text: 'Pucker'}}, + {id: 5, item: 'grapes', price: 1.00, label: {text: 'Red'}}, + {id: 6, item: 'grapes', price: 1.20, label: {text: 'Green'}}, + {id: 7, item: 'oranges', price: 2.10, label: {text: 'Cali'}}, + {id: 8, item: 'oats', price: .20, label: {text: 'Steel'}}, + {id: 9, item: 'dates', price: 13.20}, + {id: 10, item: 'granola', price: 7.40, label: {text: 'Honey'}} + ]; + + var columns = [ + {key: 'price', title: 'Price', subtitle: '$', type: 'price'}, + {key: 'item', title: 'Item', type: 'string'}, + {key: 'label', title: 'Label', type: 'label'} + ]; + + var paginationInfo = { totalMatchCount: 11 }; + + var Label = React.createClass({ + displayName: "Label", + render: function () { + return React.createElement("span", {className: "label label-success"}, this.props.children); + } + }); + + var customTypes = { + label: { + cell: { + className: 'scroll_columns', + renderer: function(value, row, col, state) { + if (_.isEmpty(value)) { + return ""; + } else { + return React.createElement(Label, {}, [value.text]); + } + } + } + }, + price: { + cell: { + className: 'scroll_columns text-right', + renderer: function (value, row, col, state) { + return BE.Table.formatters.numberRenderer(value, 2, true); + } + } + } + }; + + function render() { + console.log('rendered table ' + String(Date.now())); + var props = { + columns: columns, + rows: rows, + searchmeta: paginationInfo, + objectname: 'items', + customTypes: customTypes, + callback: tableCallback + }; + return React.render(React.createElement(BE.Table.BETable, props), + document.getElementById('app')); + } + + function tableCallback (state, tableEvent) { + var sortKey = _.get(state, 'sorting.column.key'); + var comparator = _.lt; + var temp; + if (tableEvent && tableEvent.eventType && tableEvent.eventType === 'columnSorted') { + if (!_.get(state, 'sorting.ascending')) { + comparator = _.gt; + } + + // sorting in place works, but you need to re-render the element + // if you are changing a variable reference so using a temp + // variable to demonstrate that + temp = _.clone(rows); + rows = temp.sort(function (a, b) { + var valA = _.get(a, sortKey); + var valB = _.get(b, sortKey); + return comparator(valA, valB); + }); + + // only need to re-render if the data model changes + // e.g. we don't rerender when the number per page changes in this example + // because we are not modifying our data in response to that event + render(); + } + }; + + // kickoff rendering + render(); + +})(window._, window.React, window.BE);