// 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(); };