| // Copyright (c) 2010 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 global object. |
| * @param {!Object} |
| */ |
| const global = this; |
| |
| /** |
| * Alias for document.getElementById. |
| * @param {string} id The ID of the element to find. |
| * @return {HTMLElement} The found element or null if not found. |
| */ |
| function $(id) { |
| return document.getElementById(id); |
| } |
| |
| /** |
| * Calls chrome.send with a callback and restores the original afterwards. |
| * @param {string} name The name of the message to send. |
| * @param {!Array} params The parameters to send. |
| * @param {string} callbackName The name of the function that the backend calls. |
| * @param {!Function} The function to call. |
| */ |
| function chromeSend(name, params, callbackName, callback) { |
| var old = global[callbackName]; |
| global[callbackName] = function() { |
| // restore |
| global[callbackName] = old; |
| |
| var args = Array.prototype.slice.call(arguments); |
| return callback.apply(global, args); |
| }; |
| chrome.send(name, params); |
| } |
| |
| |
| /** |
| * Generates a CSS url string. |
| * @param {string} s The URL to generate the CSS url for. |
| * @return {string} The CSS url string. |
| */ |
| function url(s) { |
| // http://www.w3.org/TR/css3-values/#uris |
| // Parentheses, commas, whitespace characters, single quotes (') and double |
| // quotes (") appearing in a URI must be escaped with a backslash |
| var s2 = s.replace(/(\(|\)|\,|\s|\'|\"|\\)/g, '\\$1'); |
| // WebKit has a bug when it comes to URLs that end with \ |
| // https://bugs.webkit.org/show_bug.cgi?id=28885 |
| if (/\\\\$/.test(s2)) { |
| // Add a space to work around the WebKit bug. |
| s2 += ' '; |
| } |
| return 'url("' + s2 + '")'; |
| } |