158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/**
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @fileoverview Some utility functions that don't belong anywhere else in the
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * code.
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)var util = (function() {
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  var util = {};
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  util.object = {};
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * Calls a function for each element in an object/map/hash.
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   *
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param obj The object to iterate over.
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param f The function to call on every value in the object.  F should have
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * the following arguments: f(value, key, object) where value is the value
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * of the property, key is the corresponding key, and obj is the object that
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * was passed in originally.
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   * @param optObj The object use as 'this' within f.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  util.object.forEach = function(obj, f, optObj) {
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    'use strict';
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    var key;
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    for (key in obj) {
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      if (obj.hasOwnProperty(key)) {
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        f.call(optObj, obj[key], key, obj);
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      }
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    }
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  };
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  util.millisecondsToString = function(timeMillis) {
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    function pad(num) {
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      num = num.toString();
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      if (num.length < 2) {
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        return '0' + num;
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      }
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      return num;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    var date = new Date(timeMillis);
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return pad(date.getUTCHours()) + ':' + pad(date.getUTCMinutes()) + ':' +
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        pad(date.getUTCSeconds()) + ' ' + pad((date.getMilliseconds()) % 1000);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return util;
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}());
48