| <!DOCTYPE html> |
| <!-- |
| Copyright 2016 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| --> |
| <!-- |
| The revision-range element is an in-line element that shows a revision range. |
| TODO(qyearsley) Expand this element to take information about revision types |
| (including changelog viewer links, revision type names, etc.) in order |
| to allow it to show links). |
| --> |
| |
| <polymer-element name="revision-range" attributes="start end"> |
| <template> |
| <span>{{displayRevisionRange}}</span> |
| </template> |
| <script> |
| 'use strict'; |
| (function() { |
| /** Returns a date string for the given timestamp. */ |
| function dateDisplay(secondsSinceEpoch) { |
| var d = new Date(secondsSinceEpoch * 1000); |
| return d.toISOString(); |
| } |
| |
| /** |
| * Returns a string to display for the given encoded Cr + CrOS point ID. |
| * |
| * Point IDs for Chrome OS data are of the following form: |
| * [aaaaa][bbb][ccccc][ddd][ee], where: |
| * aaaaa is the Chrome build number |
| * bbb is the Chrome patch number. |
| * ccccc is the Chrome OS tip build number. |
| * ddd is the Chrome OS branch build number. |
| * ee is the Chrome OS branch branch build number. |
| */ |
| function crosDisplay(pointId) { |
| var digits = zeroFill(pointId, 18); |
| var crBuild = Number(digits.substring(0, 5)); |
| var crPatch = Number(digits.substring(5, 8)); |
| var crosTipBuild = Number(digits.substring(8, 13)); |
| var crosBranchBuild = Number(digits.substring(13, 16)); |
| var crosSubbranchBuild = Number(digits.substring(16, 18)); |
| return ('Cr ' + crBuild + '.' + crPatch + |
| ' / CrOS ' + crosTipBuild + '.' + |
| crosBranchBuild + '.' + crosSubbranchBuild); |
| } |
| |
| /** Pads a number with zeroes; returns a string. */ |
| function zeroFill(num, minWidth) { |
| var widthToFill = minWidth - num.toString().length; |
| if (widthToFill <= 0) { |
| return num.toString(); |
| } |
| for (var i = 0; i < widthToFill; i++) { |
| num = '0' + num; |
| } |
| return num.toString(); |
| } |
| |
| /** |
| * Returns the string to display for a single revision number. |
| * @param {number|string} revision |
| * @return {string} Display revision. |
| */ |
| function displayRevision(revision) { |
| if (revision.toString().length >= 16) { |
| return crosDisplay(revision); |
| } |
| if (revision.toString().length == 10) { |
| return dateDisplay(revision); |
| } |
| return revision.toString(); |
| } |
| |
| Polymer('revision-range', { |
| ready: function() { |
| this.displayRevisionRange = this.getDisplayRevisionRange(); |
| }, |
| |
| getDisplayRevisionRange: function() { |
| if (!this.start || !this.end) { |
| return ''; |
| } |
| if (this.start == this.end) { |
| return displayRevision(this.end); |
| } |
| return (displayRevision(this.start) + ' - ' + |
| displayRevision(this.end)); |
| } |
| }); |
| })(); |
| </script> |
| </polymer-element> |