diff --git a/webapp/app/js/models/job.js b/webapp/app/js/models/job.js index 8ad8cf35..7b1743e2 100644 --- a/webapp/app/js/models/job.js +++ b/webapp/app/js/models/job.js @@ -10,9 +10,11 @@ treeherder.factory('ThJobModel', [ // ThJobModel is the js counterpart of job var ThJobModel = function(data) { - // creates a new instance of ThJobModel - // using the provided properties - angular.extend(this, data); + if (typeof data === "object" && data !== null) { + for (var k in data) { + this[k] = data[k]; + } + } }; ThJobModel.prototype.get_current_eta = function(){ @@ -55,19 +57,30 @@ treeherder.factory('ThJobModel', [ if(_.has(response.data, 'job_property_names')){ // the results came as list of fields //we need to convert them to objects - item_list = _.map(response.data.results, function(elem){ - var job_obj = _.object(response.data.job_property_names, elem); - return new ThJobModel(job_obj); - }); + item_list = []; + var props = response.data.job_property_names; + var propsLen = props.length; + for (var i = 0, resultsLen = response.data.results.length; i < propsLen; i++) { + var model = new ThJobModel(); + var elem = response.data.results[i]; + for (var j = 0; j < propsLen; j++) { + model[props[j]] = elem[j]; + } + item_list.push(model); + } }else{ item_list = _.map(response.data.results, function(job_obj){ return new ThJobModel(job_obj); }); } + // next_pages_jobs is wrapped in a $q.when call because it could be // either a promise or a value - return $q.when(next_pages_jobs).then(function(maybe_job_list){ - return item_list.concat(maybe_job_list); + return $q.when(next_pages_jobs).then(function(maybe_job_list) { + for (var i = 0, n = maybe_job_list.length; i < n; i++) { + item_list.push(maybe_job_list[i]); + } + return item_list; }) }); }; diff --git a/webapp/app/vendor/jquery-2.0.3.js b/webapp/app/vendor/jquery-2.0.3.js index ebc6c187..98c0545f 100644 --- a/webapp/app/vendor/jquery-2.0.3.js +++ b/webapp/app/vendor/jquery-2.0.3.js @@ -4789,7 +4789,7 @@ jQuery.event = { } // Create a writable copy of the event object and normalize some properties - var i, prop, copy, + var i, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; @@ -4806,8 +4806,18 @@ jQuery.event = { i = copy.length; while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; + (function () { + var prop = copy[ i ]; + var ev = event; + var oe = originalEvent; + Object.defineProperty(ev, prop, { + configurable: true, + get: function () { return oe[prop]; }, + set: function (v) { + Object.defineProperty(ev, prop, { value: v }); + }, + }); + }()); } // Support: Cordova 2.5 (WebKit) (#13255)