/** * @license * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ (function(window) { 'use strict'; const util = window.util || {}; util.parseDate = function(dateStr) { // Timestamps are given in UTC and have the format // "'yyyy-mm-dd hh:mm:ss.fffffffff'" where "'ffffffffff'" represents // nanoseconds. // Munge the date into an ISO 8061 format and parse that. return new Date(dateStr.replace(' ', 'T') + 'Z'); }; util.getCookie = function(name) { const key = name + '='; const cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i++) { let c = cookies[i]; while (c.charAt(0) === ' ') { c = c.substring(1); } if (c.startsWith(key)) { return c.substring(key.length, c.length); } } return ''; }; /** * Make the promise cancelable. * * Returns a promise with a `cancel()` method wrapped around `promise`. * Calling `cancel()` will reject the returned promise with * {isCancelled: true} synchronously. If the inner promise for a cancelled * promise resolves or rejects this is ignored. */ util.makeCancelable = promise => { // True if the promise is either resolved or reject (possibly cancelled) let isDone = false; let rejectPromise; const wrappedPromise = new Promise((resolve, reject) => { rejectPromise = reject; promise.then(val => { if (!isDone) resolve(val); isDone = true; }, error => { if (!isDone) reject(error); isDone = true; }); }); wrappedPromise.cancel = () => { if (isDone) return; rejectPromise({isCanceled: true}); isDone = true; }; return wrappedPromise; }; /** * Get computed style value. * * If ShadyCSS is provided, use ShadyCSS api. * If `getComputedStyleValue` is provided on the elment, use it. * Otherwise fallback to native method (in polymer 2). * */ util.getComputedStyleValue = (name, el) => { let style; if (window.ShadyCSS) { style = ShadyCSS.getComputedStyleValue(el, name); } else if (el.getComputedStyleValue) { style = el.getComputedStyleValue(name); } else { style = getComputedStyle(el).getPropertyValue(name); } return style; }; window.util = util; })(window);