Skip to content

Commit

Permalink
[#1792] Add polyfill for Object.keys() and remove usage of Array.filter
Browse files Browse the repository at this point in the history
We need this to make sure the code works on older browsers.
  • Loading branch information
vitorbaptista committed Jun 26, 2014
1 parent 3e26483 commit d764e11
Showing 1 changed file with 47 additions and 2 deletions.
49 changes: 47 additions & 2 deletions ckan/public/base/javascript/modules/resource-view-filters.js
Expand Up @@ -25,11 +25,10 @@ this.ckan.module('resource-view-filters', function (jQuery, _) {
}

function _buildAddFilterButton(el, template, columnsValues, filters, onChangeCallback) {
// TODO: Add Object.keys() and .filter() method for browsers that don't implement it.
var addFilterButton = $(template),
currentFilters = Object.keys(filters),
columns = Object.keys(columnsValues),
columnsNotFiltered = columns.filter(function (column) {
columnsNotFiltered = $.grep(columns, function (column) {
return currentFilters.indexOf(column) == -1;
}),
data = $.map(columnsNotFiltered, function (d) {
Expand Down Expand Up @@ -137,3 +136,49 @@ this.ckan.module('resource-view-filters', function (jQuery, _) {
}
};
});

// BEGIN POLYFILLS
// We need these to support older browsers

// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
Object.keys = (function () {
'use strict';

var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;

return function (obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}

var result = [], prop, i;

for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}

if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
}());
}

0 comments on commit d764e11

Please sign in to comment.