| // Copyright 2012 The Closure Library Authors. All Rights Reserved. |
| // |
| // 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. |
| |
| /** |
| * @fileoverview Vendor prefix getters. |
| */ |
| |
| goog.provide('goog.dom.vendor'); |
| |
| goog.require('goog.string'); |
| goog.require('goog.userAgent'); |
| |
| |
| /** |
| * Returns the JS vendor prefix used in CSS properties. Different vendors |
| * use different methods of changing the case of the property names. |
| * |
| * @return {?string} The JS vendor prefix or null if there is none. |
| */ |
| goog.dom.vendor.getVendorJsPrefix = function() { |
| if (goog.userAgent.WEBKIT) { |
| return 'Webkit'; |
| } else if (goog.userAgent.GECKO) { |
| return 'Moz'; |
| } else if (goog.userAgent.IE) { |
| return 'ms'; |
| } else if (goog.userAgent.OPERA) { |
| return 'O'; |
| } |
| |
| return null; |
| }; |
| |
| |
| /** |
| * Returns the vendor prefix used in CSS properties. |
| * |
| * @return {?string} The vendor prefix or null if there is none. |
| */ |
| goog.dom.vendor.getVendorPrefix = function() { |
| if (goog.userAgent.WEBKIT) { |
| return '-webkit'; |
| } else if (goog.userAgent.GECKO) { |
| return '-moz'; |
| } else if (goog.userAgent.IE) { |
| return '-ms'; |
| } else if (goog.userAgent.OPERA) { |
| return '-o'; |
| } |
| |
| return null; |
| }; |
| |
| |
| /** |
| * @param {string} propertyName A property name. |
| * @param {!Object=} opt_object If provided, we verify if the property exists in |
| * the object. |
| * @return {?string} A vendor prefixed property name, or null if it does not |
| * exist. |
| */ |
| goog.dom.vendor.getPrefixedPropertyName = function(propertyName, opt_object) { |
| // We first check for a non-prefixed property, if available. |
| if (opt_object && propertyName in opt_object) { |
| return propertyName; |
| } |
| var prefix = goog.dom.vendor.getVendorJsPrefix(); |
| if (prefix) { |
| prefix = prefix.toLowerCase(); |
| var prefixedPropertyName = prefix + goog.string.toTitleCase(propertyName); |
| return (!goog.isDef(opt_object) || prefixedPropertyName in opt_object) ? |
| prefixedPropertyName : null; |
| } |
| return null; |
| }; |
| |
| |
| /** |
| * @param {string} eventType An event type. |
| * @return {string} A lower-cased vendor prefixed event type. |
| */ |
| goog.dom.vendor.getPrefixedEventType = function(eventType) { |
| var prefix = goog.dom.vendor.getVendorJsPrefix() || ''; |
| return (prefix + eventType).toLowerCase(); |
| }; |