[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-content/themes/twentysixteen/js/ -> html5.js (source)

   1  /**
   2  * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
   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|optgroup)$/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 document */
  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 browser 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] || ownerDocument.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 new 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 element
 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 ? data.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 document.
 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': false };
 257     */
 258    var html5 = {
 259  
 260      /**
 261       * An array or space separated string of node names of the elements to shiv.
 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 nav 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 `createDocumentFragment`
 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));


Generated: Wed Dec 25 01:00:02 2024 Cross-referenced by PHPXref 0.7.1