(function(factory) { "use strict"; if (typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if (window.jQuery && !window.jQuery.fn.ProxyMapper) { factory(window.jQuery); } } (function($) { 'use strict'; var ProxyMapper = function(mapping, data, options) { this.mapping = mapping; this.data = data; this._default_options = { fillValue: 0 }; this.options = $.extend({}, this._default_options, options); this.result = {}; this.result.dates = []; this.mappingDate = {}; this.perform_mapping(); return this.result; }; ProxyMapper.prototype = { constructor: ProxyMapper, perform_mapping: function(data) { if (this.mapping.dates.length > 0) { this.c_dates(this.data, this.mapping.dates); // probe and fetch all dates } if (this.mapping.labels.length > 0) { this.c_labels(this.data, this.mapping.labels); // probe and fetch all labels } if (this.mapping.labels.length > 0 && this.mapping.values.length > 0) { this.c_values(this.data, this.mapping.labels); // fetch values and overwrite default values for (var k in this.result) { this.result[k] = this.result[k].filter(function(n){ return n != undefined }); } } }, c_dates: function(intermediate, instructions) { var that = this; var matchingFun = function (intermediate, instructions, additionalData) { let index = instructions; let val = intermediate[index]; that.mappingDate[val] = that.result['dates'].length; that.result['dates'].push(val); }; this.iter(intermediate, instructions, matchingFun, {}); }, c_labels: function(intermediate, instructions, valuesLength) { var that = this; var matchingFun = function (intermediate, instructions, additionalData) { let index = instructions; let label = intermediate[index]; let val = []; for (var i=0; i