| 1 | // Copyright 2010 The Closure Library Authors. All Rights Reserved. |
| 2 | // |
| 3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | // you may not use this file except in compliance with the License. |
| 5 | // You may obtain a copy of the License at |
| 6 | // |
| 7 | // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | // |
| 9 | // Unless required by applicable law or agreed to in writing, software |
| 10 | // distributed under the License is distributed on an "AS-IS" BASIS, |
| 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | // See the License for the specific language governing permissions and |
| 13 | // limitations under the License. |
| 14 | |
| 15 | /** |
| 16 | * @fileoverview Browser capability checks for the dom package. |
| 17 | * |
| 18 | */ |
| 19 | |
| 20 | |
| 21 | goog.provide('goog.dom.BrowserFeature'); |
| 22 | |
| 23 | goog.require('goog.userAgent'); |
| 24 | |
| 25 | |
| 26 | /** |
| 27 | * Enum of browser capabilities. |
| 28 | * @enum {boolean} |
| 29 | */ |
| 30 | goog.dom.BrowserFeature = { |
| 31 | /** |
| 32 | * Whether attributes 'name' and 'type' can be added to an element after it's |
| 33 | * created. False in Internet Explorer prior to version 9. |
| 34 | */ |
| 35 | CAN_ADD_NAME_OR_TYPE_ATTRIBUTES: !goog.userAgent.IE || |
| 36 | goog.userAgent.isDocumentModeOrHigher(9), |
| 37 | |
| 38 | /** |
| 39 | * Whether we can use element.children to access an element's Element |
| 40 | * children. Available since Gecko 1.9.1, IE 9. (IE<9 also includes comment |
| 41 | * nodes in the collection.) |
| 42 | */ |
| 43 | CAN_USE_CHILDREN_ATTRIBUTE: !goog.userAgent.GECKO && !goog.userAgent.IE || |
| 44 | goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9) || |
| 45 | goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher('1.9.1'), |
| 46 | |
| 47 | /** |
| 48 | * Opera, Safari 3, and Internet Explorer 9 all support innerText but they |
| 49 | * include text nodes in script and style tags. Not document-mode-dependent. |
| 50 | */ |
| 51 | CAN_USE_INNER_TEXT: ( |
| 52 | goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9')), |
| 53 | |
| 54 | /** |
| 55 | * MSIE, Opera, and Safari>=4 support element.parentElement to access an |
| 56 | * element's parent if it is an Element. |
| 57 | */ |
| 58 | CAN_USE_PARENT_ELEMENT_PROPERTY: goog.userAgent.IE || goog.userAgent.OPERA || |
| 59 | goog.userAgent.WEBKIT, |
| 60 | |
| 61 | /** |
| 62 | * Whether NoScope elements need a scoped element written before them in |
| 63 | * innerHTML. |
| 64 | * MSDN: http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx#1 |
| 65 | */ |
| 66 | INNER_HTML_NEEDS_SCOPED_ELEMENT: goog.userAgent.IE, |
| 67 | |
| 68 | /** |
| 69 | * Whether we use legacy IE range API. |
| 70 | */ |
| 71 | LEGACY_IE_RANGES: goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9) |
| 72 | }; |