Make WordPress Core

Changeset 55980


Ignore:
Timestamp:
06/22/2023 05:59:43 AM (16 months ago)
Author:
audrasjb
Message:

Twenty Seventeen: Remove IE specific resources.

This changeset switches the wp_enqueue_* functions to wp_register_* for IE-related resources, which maintains handles, source references, etc., keeps all
IE-specific files within the theme package to avoid errors, and requires site admins to opt in to loading them in the theme.

It also replace the content of html5.js shiv with a comment (to avoid 404s) and removes IE-specific code in general stylesheets.

Props desrosj, sabernhardt, audrasjb, neychok, oglekler.
See #56699.

Location:
trunk/src/wp-content/themes/twentyseventeen
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-content/themes/twentyseventeen/assets/js/html5.js

    r46586 r55980  
    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));
     1// This theme does not support old versions of Microsoft Internet Explorer anymore.
  • trunk/src/wp-content/themes/twentyseventeen/functions.php

    r55929 r55980  
    463463    }
    464464
    465     // Load the Internet Explorer 9 specific stylesheet, to fix display issues in the Customizer.
     465    // Register the Internet Explorer 9 specific stylesheet, to fix display issues in the Customizer.
    466466    if ( is_customize_preview() ) {
    467         wp_enqueue_style( 'twentyseventeen-ie9', get_theme_file_uri( '/assets/css/ie9.css' ), array( 'twentyseventeen-style' ), '20161202' );
     467        wp_register_style( 'twentyseventeen-ie9', get_theme_file_uri( '/assets/css/ie9.css' ), array( 'twentyseventeen-style' ), '20161202' );
    468468        wp_style_add_data( 'twentyseventeen-ie9', 'conditional', 'IE 9' );
    469469    }
    470470
    471     // Load the Internet Explorer 8 specific stylesheet.
    472     wp_enqueue_style( 'twentyseventeen-ie8', get_theme_file_uri( '/assets/css/ie8.css' ), array( 'twentyseventeen-style' ), '20161202' );
     471    // Register the Internet Explorer 8 specific stylesheet.
     472    wp_register_style( 'twentyseventeen-ie8', get_theme_file_uri( '/assets/css/ie8.css' ), array( 'twentyseventeen-style' ), '20161202' );
    473473    wp_style_add_data( 'twentyseventeen-ie8', 'conditional', 'lt IE 9' );
    474474
    475     // Load the html5 shiv.
    476     wp_enqueue_script( 'html5', get_theme_file_uri( '/assets/js/html5.js' ), array(), '20161020' );
     475    // Register the html5 shiv.
     476    wp_register_style( 'html5', get_theme_file_uri( '/assets/js/html5.js' ), array(), '20161020' );
    477477    wp_script_add_data( 'html5', 'conditional', 'lt IE 9' );
    478478
  • trunk/src/wp-content/themes/twentyseventeen/readme.txt

    r55476 r55980  
    3737
    3838Twenty Seventeen bundles the following third-party resources:
    39 
    40 HTML5 Shiv, Copyright 2014 Alexander Farkas
    41 Licenses: MIT/GPL2
    42 Source: https://github.com/aFarkas/html5shiv
    4339
    4440jQuery scrollTo, Copyright 2007-2015 Ariel Flesler
  • trunk/src/wp-content/themes/twentyseventeen/style.css

    r55476 r55980  
    16871687    background: -webkit-linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 75%, rgba(0, 0, 0, 0.3) 100%); /* Chrome10-25,Safari5.1-6 */
    16881688    background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 75%, rgba(0, 0, 0, 0.3) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
    1689     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000", endColorstr="#4d000000", GradientType=0); /* IE6-9 */
    16901689    bottom: 0;
    16911690    content: "";
     
    18131812    background: -webkit-linear-gradient(to top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 100%);
    18141813    background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.3) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
    1815     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000", endColorstr="#4d000000", GradientType=0); /* IE6-9 */
    18161814    bottom: 0;
    18171815    content: "";
Note: See TracChangeset for help on using the changeset viewer.