| OLD | NEW | 
| (Empty) |  | 
 |    1 /*! | 
 |    2 * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licen
     sed | 
 |    3 */ | 
 |    4 ;(function(window, document) { | 
 |    5   /*jshint evil:true */ | 
 |    6     /** version */ | 
 |    7     var version = '3.7.3'; | 
 |    8    | 
 |    9     /** Preset options */ | 
 |   10     var options = window.html5 || {}; | 
 |   11    | 
 |   12     /** Used to skip problem elements */ | 
 |   13     var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgrou
     p)$/i; | 
 |   14    | 
 |   15     /** Not all elements can be cloned in IE **/ | 
 |   16     var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|
     p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; | 
 |   17    | 
 |   18     /** Detect whether the browser supports default html5 styles */ | 
 |   19     var supportsHtml5Styles; | 
 |   20    | 
 |   21     /** Name of the expando, to work with multiple documents or to re-shiv one d
     ocument */ | 
 |   22     var expando = '_html5shiv'; | 
 |   23    | 
 |   24     /** The id for the the documents expando */ | 
 |   25     var expanID = 0; | 
 |   26    | 
 |   27     /** Cached data for each document */ | 
 |   28     var expandoData = {}; | 
 |   29    | 
 |   30     /** Detect whether the browser supports unknown elements */ | 
 |   31     var supportsUnknownElements; | 
 |   32    | 
 |   33     (function() { | 
 |   34       try { | 
 |   35           var a = document.createElement('a'); | 
 |   36           a.innerHTML = '<xyz></xyz>'; | 
 |   37           //if the hidden property is implemented we can assume, that the browse
     r supports basic HTML5 Styles | 
 |   38           supportsHtml5Styles = ('hidden' in a); | 
 |   39    | 
 |   40           supportsUnknownElements = a.childNodes.length == 1 || (function() { | 
 |   41             // assign a false positive if unable to shiv | 
 |   42             (document.createElement)('a'); | 
 |   43             var frag = document.createDocumentFragment(); | 
 |   44             return ( | 
 |   45               typeof frag.cloneNode == 'undefined' || | 
 |   46               typeof frag.createDocumentFragment == 'undefined' || | 
 |   47               typeof frag.createElement == 'undefined' | 
 |   48             ); | 
 |   49           }()); | 
 |   50       } catch(e) { | 
 |   51         // assign a false positive if detection fails => unable to shiv | 
 |   52         supportsHtml5Styles = true; | 
 |   53         supportsUnknownElements = true; | 
 |   54       } | 
 |   55    | 
 |   56     }()); | 
 |   57    | 
 |   58     /*--------------------------------------------------------------------------
     */ | 
 |   59    | 
 |   60     /** | 
 |   61      * Creates a style sheet with the given CSS text and adds it to the document
     . | 
 |   62      * @private | 
 |   63      * @param {Document} ownerDocument The document. | 
 |   64      * @param {String} cssText The CSS text. | 
 |   65      * @returns {StyleSheet} The style element. | 
 |   66      */ | 
 |   67     function addStyleSheet(ownerDocument, cssText) { | 
 |   68       var p = ownerDocument.createElement('p'), | 
 |   69           parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocumen
     t.documentElement; | 
 |   70    | 
 |   71       p.innerHTML = 'x<style>' + cssText + '</style>'; | 
 |   72       return parent.insertBefore(p.lastChild, parent.firstChild); | 
 |   73     } | 
 |   74    | 
 |   75     /** | 
 |   76      * Returns the value of `html5.elements` as an array. | 
 |   77      * @private | 
 |   78      * @returns {Array} An array of shived element node names. | 
 |   79      */ | 
 |   80     function getElements() { | 
 |   81       var elements = html5.elements; | 
 |   82       return typeof elements == 'string' ? elements.split(' ') : elements; | 
 |   83     } | 
 |   84    | 
 |   85     /** | 
 |   86      * Extends the built-in list of html5 elements | 
 |   87      * @memberOf html5 | 
 |   88      * @param {String|Array} newElements whitespace separated list or array of n
     ew element names to shiv | 
 |   89      * @param {Document} ownerDocument The context document. | 
 |   90      */ | 
 |   91     function addElements(newElements, ownerDocument) { | 
 |   92       var elements = html5.elements; | 
 |   93       if(typeof elements != 'string'){ | 
 |   94         elements = elements.join(' '); | 
 |   95       } | 
 |   96       if(typeof newElements != 'string'){ | 
 |   97         newElements = newElements.join(' '); | 
 |   98       } | 
 |   99       html5.elements = elements +' '+ newElements; | 
 |  100       shivDocument(ownerDocument); | 
 |  101     } | 
 |  102    | 
 |  103      /** | 
 |  104      * Returns the data associated to the given document | 
 |  105      * @private | 
 |  106      * @param {Document} ownerDocument The document. | 
 |  107      * @returns {Object} An object of data. | 
 |  108      */ | 
 |  109     function getExpandoData(ownerDocument) { | 
 |  110       var data = expandoData[ownerDocument[expando]]; | 
 |  111       if (!data) { | 
 |  112           data = {}; | 
 |  113           expanID++; | 
 |  114           ownerDocument[expando] = expanID; | 
 |  115           expandoData[expanID] = data; | 
 |  116       } | 
 |  117       return data; | 
 |  118     } | 
 |  119    | 
 |  120     /** | 
 |  121      * returns a shived element for the given nodeName and document | 
 |  122      * @memberOf html5 | 
 |  123      * @param {String} nodeName name of the element | 
 |  124      * @param {Document|DocumentFragment} ownerDocument The context document. | 
 |  125      * @returns {Object} The shived element. | 
 |  126      */ | 
 |  127     function createElement(nodeName, ownerDocument, data){ | 
 |  128       if (!ownerDocument) { | 
 |  129           ownerDocument = document; | 
 |  130       } | 
 |  131       if(supportsUnknownElements){ | 
 |  132           return ownerDocument.createElement(nodeName); | 
 |  133       } | 
 |  134       if (!data) { | 
 |  135           data = getExpandoData(ownerDocument); | 
 |  136       } | 
 |  137       var node; | 
 |  138    | 
 |  139       if (data.cache[nodeName]) { | 
 |  140           node = data.cache[nodeName].cloneNode(); | 
 |  141       } else if (saveClones.test(nodeName)) { | 
 |  142           node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); | 
 |  143       } else { | 
 |  144           node = data.createElem(nodeName); | 
 |  145       } | 
 |  146    | 
 |  147       // Avoid adding some elements to fragments in IE < 9 because | 
 |  148       // * Attributes like `name` or `type` cannot be set/changed once an elemen
     t | 
 |  149       //   is inserted into a document/fragment | 
 |  150       // * Link elements with `src` attributes that are inaccessible, as with | 
 |  151       //   a 403 response, will cause the tab/window to crash | 
 |  152       // * Script elements appended to fragments will execute when their `src` | 
 |  153       //   or `text` property is set | 
 |  154       return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? da
     ta.frag.appendChild(node) : node; | 
 |  155     } | 
 |  156    | 
 |  157     /** | 
 |  158      * returns a shived DocumentFragment for the given document | 
 |  159      * @memberOf html5 | 
 |  160      * @param {Document} ownerDocument The context document. | 
 |  161      * @returns {Object} The shived DocumentFragment. | 
 |  162      */ | 
 |  163     function createDocumentFragment(ownerDocument, data){ | 
 |  164       if (!ownerDocument) { | 
 |  165           ownerDocument = document; | 
 |  166       } | 
 |  167       if(supportsUnknownElements){ | 
 |  168           return ownerDocument.createDocumentFragment(); | 
 |  169       } | 
 |  170       data = data || getExpandoData(ownerDocument); | 
 |  171       var clone = data.frag.cloneNode(), | 
 |  172           i = 0, | 
 |  173           elems = getElements(), | 
 |  174           l = elems.length; | 
 |  175       for(;i<l;i++){ | 
 |  176           clone.createElement(elems[i]); | 
 |  177       } | 
 |  178       return clone; | 
 |  179     } | 
 |  180    | 
 |  181     /** | 
 |  182      * Shivs the `createElement` and `createDocumentFragment` methods of the doc
     ument. | 
 |  183      * @private | 
 |  184      * @param {Document|DocumentFragment} ownerDocument The document. | 
 |  185      * @param {Object} data of the document. | 
 |  186      */ | 
 |  187     function shivMethods(ownerDocument, data) { | 
 |  188       if (!data.cache) { | 
 |  189           data.cache = {}; | 
 |  190           data.createElem = ownerDocument.createElement; | 
 |  191           data.createFrag = ownerDocument.createDocumentFragment; | 
 |  192           data.frag = data.createFrag(); | 
 |  193       } | 
 |  194    | 
 |  195    | 
 |  196       ownerDocument.createElement = function(nodeName) { | 
 |  197         //abort shiv | 
 |  198         if (!html5.shivMethods) { | 
 |  199             return data.createElem(nodeName); | 
 |  200         } | 
 |  201         return createElement(nodeName, ownerDocument, data); | 
 |  202       }; | 
 |  203    | 
 |  204       ownerDocument.createDocumentFragment = Function('h,f', 'return function(){
     ' + | 
 |  205         'var n=f.cloneNode(),c=n.createElement;' + | 
 |  206         'h.shivMethods&&(' + | 
 |  207           // unroll the `createElement` calls | 
 |  208           getElements().join().replace(/[\w\-:]+/g, function(nodeName) { | 
 |  209             data.createElem(nodeName); | 
 |  210             data.frag.createElement(nodeName); | 
 |  211             return 'c("' + nodeName + '")'; | 
 |  212           }) + | 
 |  213         ');return n}' | 
 |  214       )(html5, data.frag); | 
 |  215     } | 
 |  216    | 
 |  217     /*--------------------------------------------------------------------------
     */ | 
 |  218    | 
 |  219     /** | 
 |  220      * Shivs the given document. | 
 |  221      * @memberOf html5 | 
 |  222      * @param {Document} ownerDocument The document to shiv. | 
 |  223      * @returns {Document} The shived document. | 
 |  224      */ | 
 |  225     function shivDocument(ownerDocument) { | 
 |  226       if (!ownerDocument) { | 
 |  227           ownerDocument = document; | 
 |  228       } | 
 |  229       var data = getExpandoData(ownerDocument); | 
 |  230    | 
 |  231       if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) { | 
 |  232         data.hasCSS = !!addStyleSheet(ownerDocument, | 
 |  233           // corrects block display not defined in IE6/7/8/9 | 
 |  234           'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,
     section{display:block}' + | 
 |  235           // adds styling not present in IE6/7/8/9 | 
 |  236           'mark{background:#FF0;color:#000}' + | 
 |  237           // hides non-rendered elements | 
 |  238           'template{display:none}' | 
 |  239         ); | 
 |  240       } | 
 |  241       if (!supportsUnknownElements) { | 
 |  242         shivMethods(ownerDocument, data); | 
 |  243       } | 
 |  244       return ownerDocument; | 
 |  245     } | 
 |  246    | 
 |  247     /*--------------------------------------------------------------------------
     */ | 
 |  248    | 
 |  249     /** | 
 |  250      * The `html5` object is exposed so that more elements can be shived and | 
 |  251      * existing shiving can be detected on iframes. | 
 |  252      * @type Object | 
 |  253      * @example | 
 |  254      * | 
 |  255      * // options can be changed before the script is included | 
 |  256      * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': fa
     lse }; | 
 |  257      */ | 
 |  258     var html5 = { | 
 |  259    | 
 |  260       /** | 
 |  261        * An array or space separated string of node names of the elements to shi
     v. | 
 |  262        * @memberOf html5 | 
 |  263        * @type Array|String | 
 |  264        */ | 
 |  265       'elements': options.elements || 'abbr article aside audio bdi canvas data 
     datalist details dialog figcaption figure footer header hgroup main mark meter n
     av output picture progress section summary template time video', | 
 |  266    | 
 |  267       /** | 
 |  268        * current version of html5shiv | 
 |  269        */ | 
 |  270       'version': version, | 
 |  271    | 
 |  272       /** | 
 |  273        * A flag to indicate that the HTML5 style sheet should be inserted. | 
 |  274        * @memberOf html5 | 
 |  275        * @type Boolean | 
 |  276        */ | 
 |  277       'shivCSS': (options.shivCSS !== false), | 
 |  278    | 
 |  279       /** | 
 |  280        * Is equal to true if a browser supports creating unknown/HTML5 elements | 
 |  281        * @memberOf html5 | 
 |  282        * @type boolean | 
 |  283        */ | 
 |  284       'supportsUnknownElements': supportsUnknownElements, | 
 |  285    | 
 |  286       /** | 
 |  287        * A flag to indicate that the document's `createElement` and `createDocum
     entFragment` | 
 |  288        * methods should be overwritten. | 
 |  289        * @memberOf html5 | 
 |  290        * @type Boolean | 
 |  291        */ | 
 |  292       'shivMethods': (options.shivMethods !== false), | 
 |  293    | 
 |  294       /** | 
 |  295        * A string to describe the type of `html5` object ("default" or "default 
     print"). | 
 |  296        * @memberOf html5 | 
 |  297        * @type String | 
 |  298        */ | 
 |  299       'type': 'default', | 
 |  300    | 
 |  301       // shivs the document according to the specified `html5` object options | 
 |  302       'shivDocument': shivDocument, | 
 |  303    | 
 |  304       //creates a shived element | 
 |  305       createElement: createElement, | 
 |  306    | 
 |  307       //creates a shived documentFragment | 
 |  308       createDocumentFragment: createDocumentFragment, | 
 |  309    | 
 |  310       //extends list of elements | 
 |  311       addElements: addElements | 
 |  312     }; | 
 |  313    | 
 |  314     /*--------------------------------------------------------------------------
     */ | 
 |  315    | 
 |  316     // expose html5 | 
 |  317     window.html5 = html5; | 
 |  318    | 
 |  319     // shiv the document | 
 |  320     shivDocument(document); | 
 |  321    | 
 |  322     if(typeof module == 'object' && module.exports){ | 
 |  323       module.exports = html5; | 
 |  324     } | 
 |  325    | 
 |  326   }(typeof window !== "undefined" ? window : this, document)); | 
 |  327    | 
| OLD | NEW |