1<!DOCTYPE html> 2<html lang="en-US"> 3<head > 4<meta charset="UTF-8" /> 5<meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <meta property="fb:admins" content="1140409510" /> 7 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 8 <meta property="fb:admins" content="107031532675062" /> 9 <meta name="msvalidate.01" content="40BA1B879066C83CDFCA374CA4B490C3" /> 10 <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 11 12 <!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v28.5) - https://yoast.com/product/yoast-seo-premium-wordpress/ --> 13 <title>EV Engineering Articles - EV Engineering & Infrastructure</title> 14 <link rel="canonical" href="https://www.evengineeringonline.com/ev-engineering-articles/" /> 15 <link rel="next" href="https://www.evengineeringonline.com/ev-engineering-articles/page/2/" /> 16 <meta property="og:locale" content="en_US" /> 17 <meta property="og:type" content="article" /> 18 <meta property="og:title" content="EV Engineering Articles" /> 19 <meta property="og:url" content="https://www.evengineeringonline.com/ev-engineering-articles/" /> 20 <meta property="og:site_name" content="EV Engineering & Infrastructure" /> 21 <meta name="twitter:card" content="summary_large_image" /> 22
22<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":["WebPage","CollectionPage"],"@id":"https:\/\/www.evengineeringonline.com\/ev-engineering-articles\/","url":"https:\/\/www.evengineeringonline.com\/ev-engineering-articles\/","name":"EV Engineering Articles - EV Engineering & Infrastructure","isPartOf":{"@id":"https:\/\/www.evengineeringonline.com\/#website"},"datePublished":"2023-11-03T20:37:03+00:00","breadcrumb":{"@id":"https:\/\/www.evengineeringonline.com\/ev-engineering-articles\/#breadcrumb"},"inLanguage":"en-US"},{"@type":"BreadcrumbList","@id":"https:\/\/www.evengineeringonline.com\/ev-engineering-articles\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.evengineeringonline.com\/"},{"@type":"ListItem","position":2,"name":"EV Engineering Articles"}]},{"@type":"WebSite","@id":"https:\/\/www.evengineeringonline.com\/#website","url":"https:\/\/www.evengineeringonline.com\/","name":"EV Engineering & Infrastructure","description":"Technical insights on the vehicles of tomorrow.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.evengineeringonline.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}</script>
22 23 <!-- / Yoast SEO Premium plugin. --> 24 25 26<link rel='dns-prefetch' href='//scripts.wtwhmedia.com' /> 27<link rel='dns-prefetch' href='//static.addtoany.com' /> 28<link rel='dns-prefetch' href='//fonts.googleapis.com' /> 29<link rel="alternate" type="application/rss+xml" title="EV Engineering & Infrastructure » Feed" href="https://www.evengineeringonline.com/feed/" /> 30<link rel="alternate" type="application/rss+xml" title="EV Engineering & Infrastructure » Comments Feed" href="https://www.evengineeringonline.com/comments/feed/" /> 31<!-- Google Tag Manager GLOBAL -->
32<script>
vendor: 331 bytes, lines 32-36
32(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 33new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 34j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 35'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 36})(window,document,'script','dataLayer','
36GTM-MMC9PJ9
vendor: 3 bytes, line 36
36');
36</script>
36 37<!-- End Google Tag Manager GLOBAL--> 38 39<!-- Google Tag Manager -->
40<script>
vendor: 331 bytes, lines 40-44
40(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 41new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 42j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 43'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 44})(window,document,'script','dataLayer','
44GTM-WKS3GR3W
vendor: 3 bytes, line 44
44');
44</script>
44 45<!-- End Google Tag Manager --> 46 47<style id="wp-img-auto-sizes-contain-inline-css"> 48img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 49/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 50</style> 51<link rel='stylesheet' id='theme-wtwh-amplifying-css' href='https://www.evengineeringonline.com/wp-content/themes/ThemeWTWH/style.css?ver=1749463231' media='all' /> 52<style id="wp-emoji-styles-inline-css"> 53 54 img.wp-smiley, img.emoji { 55 display: inline !important; 56 border: none !important; 57 box-shadow: none !important; 58 height: 1em !important; 59 width: 1em !important; 60 margin: 0 0.07em !important; 61 vertical-align: -0.1em !important; 62 background: none !important; 63 padding: 0 !important; 64 } 65/*# sourceURL=wp-emoji-styles-inline-css */ 66</style> 67<style id="wp-block-library-inline-css"> 68:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
68--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 69 70/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */ 71</style> 72<style id="classic-theme-styles-inline-css"> 73/*! This file is auto-generated */ 74.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 75/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 76</style> 77 78<style id="global-styles-inline-css"> 79:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
790) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
79.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 80/*# sourceURL=global-styles-inline-css */ 81</style> 82 83<link rel='stylesheet' id='buttons-css' href='https://www.evengineeringonline.com/wp-includes/css/buttons.min.css?ver=7.1.2' media='all' /> 84<link rel='stylesheet' id='dashicons-css' href='https://www.evengineeringonline.com/wp-includes/css/dashicons.min.css?ver=7.1.2' media='all' /> 85<link rel='stylesheet' id='mediaelement-css' href='https://www.evengineeringonline.com/wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css?ver=4.2.17' media='all' /> 86<link rel='stylesheet' id='wp-mediaelement-css' href='https://www.evengineeringonline.com/wp-includes/js/mediaelement/wp-mediaelement.min.css?ver=7.1.2' media='all' /> 87<link rel='stylesheet' id='media-views-css' href='https://www.evengineeringonline.com/wp-includes/css/media-views.min.css?ver=7.1.2' media='all' /> 88<link rel='stylesheet' id='imgareaselect-css' href='https://www.evengineeringonline.com/wp-includes/js/imgareaselect/imgareaselect.css?ver=0.9.8' media='all' /> 89<link rel='stylesheet' id='frontend-sponsored-ads-css-css' href='https://www.evengineeringonline.com/wp-content/plugins/sponsored-content-ad/css/frontend-sponsored-ads.css?ver=1.01202609291790659979' media='all' /> 90<link rel='stylesheet' id='ea-fonts-css' href='https://fonts.googleapis.com/css?family=Open+Sans:300,700&ver=7.1.2' media='all' /> 91<link rel='stylesheet' id='ea-style-css' href='https://www.evengineeringonline.com/wp-content/themes/ThemeWTWH/assets/css/main.css?ver=1749463231' media='all' /> 92<link rel='stylesheet' id='addtoany-css' href='https://www.evengineeringonline.com/wp-content/plugins/add-to-any/addtoany.min.css?ver=1.16' media='all' />
93<script id="addtoany-core-js-before"> 94window.a2a_config=window.a2a_config||{};a2a_config.callbacks=[];a2a_config.overlays=[];a2a_config.templates={}; 95 96//# sourceURL=addtoany-core-js-before 97</script>
vendor: 1 bytes, line 97
97
98<script id="addtoany-core-js" defer src="https://static.addtoany.com/menu/page.js"></script>
vendor: 1 bytes, line 98
98
99<script id="jquery-core-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 99
99
100<script id="jquery-migrate-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 100
100
101<script id="addtoany-jquery-js" defer src="https://www.evengineeringonline.com/wp-content/plugins/add-to-any/addtoany.min.js?ver=1.1"></script>
vendor: 1 bytes, line 101
101
102<script id="utils-js-extra"> 103var userSettings = {"url":"/","uid":"0","time":"1790659979","secure":"1"}; 104//# sourceURL=utils-js-extra 105</script>
vendor: 1 bytes, line 105
105
106<script id="utils-js" src="https://www.evengineeringonline.com/wp-includes/js/utils.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 106
106
107<script id="moxiejs-js" src="https://www.evengineeringonline.com/wp-includes/js/plupload/moxie.min.js?ver=1.3.5.1"></script>
vendor: 1 bytes, line 107
107
108<script id="plupload-js" src="https://www.evengineeringonline.com/wp-includes/js/plupload/plupload.min.js?ver=2.1.9"></script>
vendor: 1 bytes, line 108
108
109<script id="frontend-sponsored-ads-script-js" src="https://www.evengineeringonline.com/wp-content/plugins/sponsored-content-ad/js/frontend-sponsored-ads.js"></script>
vendor: 1 bytes, line 109
109
110<script id="wtwh-uni-gam-unified-ad-logic-js-extra"> 111var wtwh_gam_ad_config = {"slots":[{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_header","div_id":"div-gpt-eveng-header","desktop_sizes":["728x90"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_sidebar1","div_id":"div-gpt-eveng_sidebar1","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_sidebarbotton","div_id":"div-gpt-eveng_sidebarbotton","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_largeleader","div_id":"jumbo-banner-ad-container","desktop_sizes":["970x90","970x250"],"mobile_sizes":["0x0"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_wallpaper","div_id":"div-gpt-wallpaper","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"wallpaper"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_allstreamflex","div_id":"div-gpt-allstreamflex","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"spotible"},{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_allstreamprelude","div_id":"div-gpt-allstreamprelude","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"spotible"}],"prestitial":{"account_id":"5272491","network_code":"ee_network","ad_unit_code":"eveng_prestitial","div_id":"gam-holder-prestitial-banner","desktop_sizes":["640x480"],"mobile_sizes":["300x225"],"targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"skip_ads":false,"ad_type":"prestitial"},"enable_single_request":"","collapse_empty_divs":"1","page_url":"https://www.evengineeringonline.com/ev-engineering-articles/","default_page_targeting":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"},"auto_display_ads":"1","lazy_load_ads":"","load_gpt_library":"","has_keyword_ads":"0"}; 112var wtwh_gam_ga4_targeting_values = {"ga4_targeting_values":{"articletitle":"home-page","cat_target":"dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros","contentHash":"dffaf9ccb635aab40aaf9e6487b63402","category":"QAs","ParentCategory":"QAs"}}; 113//# sourceURL=wtwh-uni-gam-unified-ad-logic-js-extra 114</script>
vendor: 1 bytes, line 114
114
115<script id="wtwh-uni-gam-unified-ad-logic-js" src="https://www.evengineeringonline.com/wp-content/plugins/wtwh-universal-gam/assets/js/frontend/ad-config/unified-ad-logic.js?ver=1790659979"></script>
115 116<link rel="https://api.w.org/" href="https://www.evengineeringonline.com/wp-json/" /><style> 117 #category-posts-5-internal ul {padding: 0;} 118#category-posts-5-internal .cat-post-item img {max-width: initial; max-height: initial; margin: initial;} 119#category-posts-5-internal .cat-post-author {margin-bottom: 0;} 120#category-posts-5-internal .cat-post-thumbnail {margin: 5px 10px 5px 0;} 121#category-posts-5-internal .cat-post-item:before {content: ""; clear: both;} 122#category-posts-5-internal .cat-post-excerpt-more {display: inline-block;} 123#category-posts-5-internal .cat-post-item {list-style: none; margin: 3px 0 10px; padding: 3px 0;} 124#category-posts-5-internal .cat-post-current .cat-post-title {font-weight: bold; text-transform: uppercase;} 125#category-posts-5-internal [class*=cat-post-tax] {font-size: 0.85em;} 126#category-posts-5-internal [class*=cat-post-tax] * {display:inline-block;} 127#category-posts-5-internal .cat-post-item:after {content: ""; display: table; clear: both;} 128#category-posts-5-internal .cat-post-item .cat-post-title {overflow: hidden;text-overflow: ellipsis;white-space: initial;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;padding-bottom: 0 !important;} 129#category-posts-5-internal .cat-post-item:after {content: ""; display: table; clear: both;} 130#category-posts-5-internal .cat-post-thumbnail {display:block; float:left; margin:5px 10px 5px 0;} 131#category-posts-5-internal .cat-post-crop {overflow:hidden;display:block;} 132#category-posts-5-internal p {margin:5px 0 0 0} 133#category-posts-5-internal li > div {margin:5px 0 0 0; clear:both;} 134#category-posts-5-internal .dashicons {vertical-align:middle;} 135#category-posts-5-internal .cat-post-thumbnail .cat-post-crop img {height: 95px;} 136#category-posts-5-internal .cat-post-thumbnail .cat-post-crop img {width: 150px;} 137#category-posts-5-internal .cat-post-thumbnail .cat-post-crop img {object-fit: cover; max-width: 100%; display: block;} 138#category-posts-5-internal .cat-post-thumbnail .cat-post-crop-not-supported img {width: 100%;} 139#category-posts-5-internal .cat-post-thumbnail {max-width:100%;} 140#category-posts-5-internal .cat-post-item img {margin: initial;} 141#category-posts-5-internal .cat-post-dark img {padding-bottom: 0 !important; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease;} 142#category-posts-5-internal .cat-post-dark:hover img {-webkit-filter: brightness(75%); -moz-filter: brightness(75%); -ms-filter: brightness(75%); -o-filter: brightness(75%); filter: brightness(75%);} 143#category-posts-4-internal ul {padding: 0;} 144#category-posts-4-internal .cat-post-item img {max-width: initial; max-height: initial; margin: initial;} 145#category-posts-4-internal .cat-post-author {margin-bottom: 0;} 146#category-posts-4-internal .cat-post-thumbnail {margin: 5px 10px 5px 0;} 147#category-posts-4-internal .cat-post-item:before {content: ""; clear: both;} 148#category-posts-4-internal .cat-post-excerpt-more {display: inline-block;} 149#category-posts-4-internal .cat-post-item {list-style: none; margin: 3px 0 10px; padding: 3px 0;} 150#category-posts-4-internal .cat-post-current .cat-post-title {font-weight: bold; text-transform: uppercase;} 151#category-posts-4-internal [class*=cat-post-tax] {font-size: 0.85em;} 152#category-posts-4-internal [class*=cat-post-tax] * {display:inline-block;} 153#category-posts-4-internal .cat-post-item:after {content: ""; display: table; clear: both;} 154#category-posts-4-internal .cat-post-item .cat-post-title {overflow: hidden;text-overflow: ellipsis;white-space: initial;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;padding-bottom: 0 !important;} 155#category-posts-4-internal .cat-post-item:after {content: ""; display: table; clear: both;} 156#category-posts-4-internal .cat-post-thumbnail {display:block; float:left; margin:5px 10px 5px 0;} 157#category-posts-4-internal .cat-post-crop {overflow:hidden;display:block;} 158#category-posts-4-internal p {margin:5px 0 0 0} 159#category-posts-4-internal li > div {margin:5px 0 0 0; clear:both;} 160#category-posts-4-internal .dashicons {vertical-align:middle;} 161#category-posts-4-internal .cat-post-thumbnail .cat-post-crop img {height: 95px;} 162#category-posts-4-internal .cat-post-thumbnail .cat-post-crop img {width: 150px;} 163#category-posts-4-internal .cat-post-thumbnail .cat-post-crop img {object-fit: cover; max-width: 100%; display: block;} 164#category-posts-4-internal .cat-post-thumbnail .cat-post-crop-not-supported img {width: 100%;} 165#category-posts-4-internal .cat-post-thumbnail {max-width:100%;} 166#category-posts-4-internal .cat-post-item img {margin: initial;} 167#category-posts-4-internal .cat-post-dark img {padding-bottom: 0 !important; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease;} 168#category-posts-4-internal .cat-post-dark:hover img {-webkit-filter: brightness(75%); -moz-filter: brightness(75%); -ms-filter: brightness(75%); -o-filter: brightness(75%); filter: brightness(75%);} 169#category-posts-3-internal ul {padding: 0;} 170#category-posts-3-internal .cat-post-item img {max-width: initial; max-height: initial; margin: initial;} 171#category-posts-3-internal .cat-post-author {margin-bottom: 0;} 172#category-posts-3-internal .cat-post-thumbnail {margin: 5px 10px 5px 0;} 173#category-posts-3-internal .cat-post-item:before {content: ""; clear: both;} 174#category-posts-3-internal .cat-post-excerpt-more {display: inline-block;} 175#category-posts-3-internal .cat-post-item {list-style: none; margin: 3px 0 10px; padding: 3px 0;} 176#category-posts-3-internal .cat-post-current .cat-post-title {font-weight: bold; text-transform: uppercase;} 177#category-posts-3-internal [class*=cat-post-tax] {font-size: 0.85em;} 178#category-posts-3-internal [class*=cat-post-tax] * {display:inline-block;} 179#category-posts-3-internal .cat-post-item:after {content: ""; display: table; clear: both;} 180#category-posts-3-internal .cat-post-item .cat-post-title {overflow: hidden;text-overflow: ellipsis;white-space: initial;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;padding-bottom: 0 !important;} 181#category-posts-3-internal .cat-post-item:after {content: ""; display: table; clear: both;} 182#category-posts-3-internal .cat-post-thumbnail {display:block; float:left; margin:5px 10px 5px 0;} 183#category-posts-3-internal .cat-post-crop {overflow:hidden;display:block;} 184#category-posts-3-internal p {margin:5px 0 0 0} 185#category-posts-3-internal li > div {margin:5px 0 0 0; clear:both;} 186#category-posts-3-internal .dashicons {vertical-align:middle;} 187#category-posts-3-internal .cat-post-thumbnail .cat-post-crop img {height: 95px;} 188#category-posts-3-internal .cat-post-thumbnail .cat-post-crop img {width: 150px;} 189#category-posts-3-internal .cat-post-thumbnail .cat-post-crop img {object-fit: cover; max-width: 100%; display: block;} 190#category-posts-3-internal .cat-post-thumbnail .cat-post-crop-not-supported img {width: 100%;} 191#category-posts-3-internal .cat-post-thumbnail {max-width:100%;} 192#category-posts-3-internal .cat-post-item img {margin: initial;} 193#category-posts-3-internal .cat-post-dark img {padding-bottom: 0 !important; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease;} 194#category-posts-3-internal .cat-post-dark:hover img {-webkit-filter: brightness(75%); -moz-filter: brightness(75%); -ms-filter: brightness(75%); -o-filter: brightness(75%); filter: brightness(75%);} 195</style> 196 197<link rel="icon" href="https://www.evengineeringonline.com/wp-content/uploads/2023/08/cropped-fav
197icon-ev-engineering-32x32.png" sizes="32x32" /> 198<link rel="icon" href="https://www.evengineeringonline.com/wp-content/uploads/2023/08/cropped-favicon-ev-engineering-192x192.png" sizes="192x192" /> 199<link rel="apple-touch-icon" href="https://www.evengineeringonline.com/wp-content/uploads/2023/08/cropped-favicon-ev-engineering-180x180.png" /> 200<meta name="msapplication-TileImage" content="https://www.evengineeringonline.com/wp-content/uploads/2023/08/cropped-favicon-ev-engineering-270x270.png" /> 201<style id="wp-custom-css"> 202/* Update logo */ 203.spw-logo, .site-footer .footer-logo a, .nav-primary .menu-item.home a, .site-header .title-area .site-title a{ 204 background-image:url('https://www.evengineeringonline.com/wp-content/uploads/2024/12/ev-logo.png') 205} 206 207.dropbtn { 208 background-color: #04AA6D; 209 color: white; 210 padding: 16px; 211 font-size: 16px; 212 border: none; 213} 214 215.dropdown { 216 217 display: inline-block; 218} 219 220.dropdown-content { 221 display: none; 222 position: absolute; 223 background-color: #f1f1f1; 224 min-width: 160px; 225 box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 226 z-index: 1; 227} 228 229.dropdown-content a { 230 color: black; 231 padding: 12px 16px; 232 text-decoration: none; 233 display: block; 234} 235 236.dropdown-content a:hover {background-color: #ddd;} 237 238.dropdown:hover .dropdown-content {display: block;} 239 240.dropdown:hover .dropbtn {background-color: #3e8e41;} 241 242 243/*Design Guide Drop Down Menu*/ 244.motion-design-guides { 245 font-size: 16px; 246 font-family: Raleway, sans-serif; 247 width: 270px; 248 height: 50px; 249 text-align: center; 250 text-align-last: center; 251 -moz-text-align-last: center; 252 border-radius: 0px; 253 text-transform: uppercase; 254 white-space: wrap; 255} 256 257.motion-design-guides-button { 258 font-size: 16px; 259 font-family: Raleway, sans-serif; 260 width: 270px; 261 height: 50px; 262 text-align: center; 263 text-align-last: center; 264 -moz-text-align-last: center; 265 border-radius: 0px; 266 text-transform: uppercase; 267 white-space: wrap; 268 margin-top: 10px; 269} 270 271.motion-design-guides-button a { 272 color: white !important; 273} 274 275.motion-design-guide-option { 276 text-align: center; 277 text-align-last: center; 278 -moz-text-align-last: center; 279 text-transform: uppercase; 280 width: 255px; 281 white-space: wrap; 282 283} 284 285.motion-design-guides:after { 286 content: ""; 287 border: solid #fff; 288 border-width: 0 2px 2px 0; 289 margin-left: 10px; 290 display: inline-block; 291 padding: 4px; 292 transform: rotate(45deg); 293 -webkit-transform: rotate(45deg); 294} 295 296.dropdown-content { 297 max-height: 400px; 298 overflow-y: scroll; 299} 300 301 302/*Login Button / Link Fix*/ 303p.must-log-in a, p.logged-in-as a { 304 color: #12bcc1 !important; 305 font-weight: bold; 306} 307 308div.entry-content a { 309 color: #12bcc1 !important; 310 font-weight: bold; 311} 312 313 314 315.nav-previous{ 316 float:left; 317 margin-bottom:50px 318} 319.nav-next{ 320 float:right; 321 margin-bottom:50px 322} 323 324/*Digital Issue Widget Fix*/ 325 326.type-post.entry.has-post-thumbnail { 327 display: flex; 328 flex-direction: column; 329 justify-content: center; 330 margin-top: 20px; 331} 332 333.type-post.entry.has-post-thumbnail .entry-header h2 { 334 font-size: 20px !important; 335 margin-left: 20px; 336 margin-right: 20px; 337} 338 339.type-post.entry.has-post-thumbnail .entry-content p { 340 margin-left: 20px; 341 margin-right: 20px; 342} 343 344.more-from-category { 345 width: 100%; 346 display: flex; 347 justify-content: center; 348} 349 350.widget-wrap > .more-from-category a { 351 text-align: center; 352 background-color: #12bcc1; 353 padding: 12px 16px; 354 color: white; 355 font-weight: bold; 356} 357 358 359 360/* Search Page */ 361 362body.search .site-inner { 363 padding-left: unset; 364 padding-right: unset; 365} 366 367@media only screen and (min-width: 988px) { 368 369 .search .content { 370 width: 66% !important; 371 float: left; 372} 373 374.search .sidebar { 375 width: 30%; 376 float: right; 377} 378 379} 380 381/* SUBSCRIBE BTN */ 382 383.site-header--subscribe{ 384 background-color: #12bcc1; 385 padding: 0 20px; 386} 387 388.site-header--subscribe a span{ 389 color: white; 390} 391 392/*fixed mobile view*/ 393 394@media only screen and (max-width: 767px) { 395.home .archive-entry { 396 display: flex; 397 flex-direction: column-reverse; 398 width: 100% !important; 399} 400 401.home .archive-entry .entry-content, .home .archive-entry .entry-header { 402 width: 100%; 403 } 404 405} 406 407 408@media only screen and (max-width: 450px) { 409 410div.bawmrp > ul { 411 margin-left: 0px !important; 412 display: flex; 413 flex-direction: row; 414 flex-wrap: wrap; 415 align-content: center; 416} 417 418div.bawmrp > ul > li { 419 width: 49% !important; 420} 421 422article > div > div.bawmrp > ul > li > a > img { 423 display: inline; 424} 425 426} 427 428/*GATED COUNTRY FIELD FULL WIDTH & TERMS==== 429#input_6_54_6_container{ 430flex: 0 0 100%; 431}*/ 432 433.terms{ 434 font-size: 10px; 435 font-style: italic; 436} 437 438.type-gated-download .entry-title{ 439 text-align: left; 440} 441 442.type-gated-download .entry-content img{width: 100%} 443 444/* Voices */ 445 446.voices-template-default .addtoany_share_save_container{ 447 padding:0 7rem; 448} 449 450@media (max-width: 600px) { 451 452 .voices-template-default .addtoany_share_save_container{ 453 padding: 0 5rem; 454} 455} 456 457 458 459/*Lytics======================*/ 460.pf-form-required{ 461width: 48%; 462 display: block; 463 float: left; 464 margin-right: 1%; 465margin-left: 1%; 466} 467 468.pf-form-label{
469font-weight: 400; 470 font-size: 10px; 471 text-transform: uppercase; 472} 473 474.pf-has-label { 475 margin-top: -2px !important; 476} 477 478.pf-widget-btn.pf-widget-cancel{ 479 display:none; 480 opacity: 0; 481 visibility: hidden; 482 pointer-events: none; 483 width: 0; 484 margin: 0 !important; 485 padding: 0 !important; 486} 487 488.pf-widget-btn.pf-widget-ok{ 489background-color: #12bcc1 !important; 490 text-transform: uppercase; 491 color: white !important; 492} 493 494.pf-form-required #country::placeholder{ 495 color: white !important; 496} 497 498.pf-form-required #country { 499 -webkit-appearance: none; 500 -moz-appearance: none; 501 appearance: none; 502 503 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 640'%3E%3Cpath d='M297.4 470.6C309.9 483.1 330.2 483.1 342.7 470.6L534.7 278.6C547.2 266.1 547.2 245.8 534.7 233.3C522.2 220.8 501.9 220.8 489.4 233.3L320 402.7L150.6 233.4C138.1 220.9 117.8 220.9 105.3 233.4C92.8 245.9 92.8 266.2 105.3 278.7L297.3 470.7z'/%3E%3C/svg%3E"); 504 505 background-repeat: no-repeat; 506 background-position: right 12px center; 507 background-size: 14px 14px; 508 padding-right: 40px; 509} 510 511.pf-widget-close{ 512 font-weight: 300; 513 font-family: 'san-serif'; 514 color: #212121 !important; 515 font-size: 43px; 516} 517 518 519.pf-widget-content{ 520 max-width: 550px !important; 521} 522 523.pf-required-flag{ 524 position: relative; 525 z-index: 3; 526} 527 528/*End Lytics======================*/ 529</style> 530
530<script id="wtwh-uni-gam-content-hash-variables"> 531 var contentHash = "dffaf9ccb635aab40aaf9e6487b63402"; 532 var cat_target = "dffaf9ccb635aab40aaf9e6487b63402,featured-contributions,qas,ros"; 533 </script>
533 534
534<script> 535 (function () { 536 'use strict'; 537 538 // âââ Globals ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 539 window.dataLayer = window.dataLayer || []; 540 window.gtag = window.gtag || function () { dataLayer.push(arguments); }; 541 window.googletag = window.googletag || { cmd: [] }; 542 543 window.__cmpRegion = { 544 country: "US", 545 regulated: false 546 }; 547 548 window.__wtwhConsentDebug = { 549 consentEvents: [], 550 gptMode: null 551 }; 552 553 // âââ Helpers ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 554 function log() { 555 try { 556 var args = Array.prototype.slice.call(arguments); 557 args.unshift('[WTWH Consent/GPT]'); 558 console.log.apply(console, args); 559 } catch (e) {} 560 } 561 562 function dispatchWindowEvent(eventName, detail) { 563 try { 564 window.dispatchEvent(new CustomEvent(eventName, { detail: detail || {} })); 565 } catch (e) { 566 try { 567 var ev = document.createEvent('CustomEvent'); 568 ev.initCustomEvent(eventName, false, false, detail || {}); 569 window.dispatchEvent(ev); 570 } catch (err) {} 571 } 572 } 573 574 function getCookie(name) { 575 var nameEQ = name + '='; 576 var parts = document.cookie.split(';'); 577 for (var i = 0; i < parts.length; i++) { 578 var c = parts[i]; 579 while (c.charAt(0) === ' ') c = c.substring(1); 580 if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length); 581 } 582 return null; 583 } 584 585 function hasKlaroCookie() { 586 return !!getCookie('klaro-consent'); 587 } 588 589 function getKlaroManager() { 590 try { 591 if (!window.klaro || typeof window.klaro.getManager !== 'function') return null; 592 return window.klaro.getManager(); 593 } catch (e) { 594 return null; 595 } 596 } 597 598 function getStoredConsents() { 599 try { 600 var manager = getKlaroManager(); 601 if (!manager || !manager.consents) return null; 602 return { 603 analytics: !!manager.consents.analytics, 604 marketing: !!manager.consents.marketing 605 }; 606 } catch (e) { 607 return null; 608 } 609 } 610 611 function getMarketingConsentState() { 612 var c = getStoredConsents(); 613 return c ? c.marketing : null; 614 } 615 616 // âââ Consent state tracker âââââââââââââââââââââââââââââââââââââââââââââââââââ 617 var consentState = { 618 initialized: false, 619 lastAppliedSignature: null 620 }; 621 622 function consentSignature(consents) { 623 return (consents.analytics ? '1' : '0') + '|' + (consents.marketing ? '1' : '0'); 624 } 625 626 // âââ Core consent application ââââââââââââââââââââââââââââââââââââââââââââââââ 627 function pushConsentEvent(eventName, analyticsGranted, marketingGranted) { 628 var detail = { 629 consent_analytics: analyticsGranted ? 'granted' : 'denied', 630 consent_marketing: marketingGranted ? 'granted' : 'denied', 631 consent_country: window.__cmpRegion.country, 632 consent_regulated_region: window.__cmpRegion.regulated ? 'true' : 'false' 633 }; 634 635 window.dataLayer.push({ 636 event: eventName, 637 consent_analytics: detail.consent_analytics, 638 consent_marketing: detail.consent_marketing, 639 consent_country: detail.consent_country, 640 consent_regulated_region: detail.consent_regulated_region 641 }); 642 643 window.__wtwhConsentDebug.consentEvents.push({ event: eventName, detail: detail, ts: Date.now() }); 644 dispatchWindowEvent(eventName, detail); 645 log('Consent event fired:', eventName, detail); 646 } 647 648 function updateGoogleConsent(consents) { 649 gtag('consent', 'update', { 650 analytics_storage: consents.analytics ? 'granted' : 'denied', 651 ad_storage: consents.marketing ? 'granted' : 'denied', 652 ad_user_data: consents.marketing ? 'granted' : 'denied', 653 ad_personalization: consents.marketing ? 'granted' : 'denied', 654 functionality_storage: 'granted', 655 security_storage: 'granted' 656 }); 657 } 658 659 function applyInitialConsent(consents) { 660 if (!consents) return; 661 var sig = consentSignature(consents); 662 if (consentState.initialized) { 663 log('applyInitialConsent called after already initialized â skipping'); 664 return; 665 } 666 updateGoogleConsent(consents); 667 pushConsentEvent('consent_initialized', consents.analytics, c
667onsents.marketing); 668 consentState.initialized = true; 669 consentState.lastAppliedSignature = sig; 670 } 671 672 function applyUpdatedConsent(consents) { 673 if (!consents) return; 674 var sig = consentSignature(consents); 675 if (sig === consentState.lastAppliedSignature) { 676 log('Consent unchanged â skipping duplicate consent_updated'); 677 return; 678 } 679 updateGoogleConsent(consents); 680 pushConsentEvent('consent_updated', consents.analytics, consents.marketing); 681 consentState.initialized = true; 682 consentState.lastAppliedSignature = sig; 683 } 684 685 // âââ Step 1: gtag default ââââââââââââââââââââââââââââââââââââââââââââââââââââ 686 gtag('consent', 'default', { 687 ad_storage: window.__cmpRegion.regulated ? 'denied' : 'granted', 688 ad_user_data: window.__cmpRegion.regulated ? 'denied' : 'granted', 689 ad_personalization: window.__cmpRegion.regulated ? 'denied' : 'granted', 690 analytics_storage: window.__cmpRegion.regulated ? 'denied' : 'granted', 691 functionality_storage: 'granted', 692 security_storage: 'granted' 693 }); 694 695 // âââ Step 2: Non-regulated â initialize immediately as fully granted âââââââââ 696 if (!window.__cmpRegion.regulated) { 697 var openConsents = { analytics: true, marketing: true }; 698 consentState.initialized = true; 699 consentState.lastAppliedSignature = consentSignature(openConsents); 700 pushConsentEvent('consent_initialized', true, true); 701 } 702 703 // âââ Klaro config ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 704 window.klaroConfig = { 705 version: 1, 706 elementID: 'klaro', 707 storageMethod: 'cookie', 708 storageName: 'klaro-consent', 709 cookieExpiresAfterDays: 365, 710 default: false, 711 mustConsent: true, 712 acceptAll: true, 713 hideDeclineAll: false, 714 htmlTexts: true, 715 lang: 'en', 716 translations: { 717 en: { 718 consentNotice: { 719 description: 'We use cookies for analytics and marketing. You can manage your preferences at any time.', 720 learnMore: 'Manage preferences' 721 }, 722 consentModal: { 723 title: 'This website uses cookies', 724 description: 'We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners who may combine it with other information that you\u2019ve provided to them or that they\u2019ve collected from your use of their services.' 725 }, 726 ok: 'Accept all', 727 decline: 'Reject all', 728 save: 'Save preferences', 729 close: 'Close' 730 } 731 }, 732 services: [ 733 { name: 'analytics', title: 'Analytics', purposes: ['analytics'], required: false, default: false }, 734 { name: 'marketing', title: 'Marketing', purposes: ['marketing'], required: false, default: false } 735 ], 736 callback: function (consent, service) { 737 try { 738 var manager = getKlaroManager(); 739 if (!manager || !manager.consents) return; 740 741 var currentConsents = { 742 analytics: !!manager.consents.analytics, 743 marketing: !!manager.consents.marketing 744 }; 745 746 if (!consentState.initialized && hasKlaroCookie()) { 747 applyInitialConsent(currentConsents); 748 return; 749 } 750 751 applyUpdatedConsent(currentConsents); 752 } catch (e) { 753 console.error('Klaro callback error', e); 754 } 755 } 756 }; 757 758 // âââ Open consent modal ââââââââââââââââââââââââââââââââââââââââââââââââââââââ 759 window.openConsentSettings = function () {
760 try { 761 if (window.klaro && typeof window.klaro.show === 'function') { 762 window.klaro.show(window.klaroConfig, true); 763 return; 764 } 765 var manager = getKlaroManager(); 766 if (manager && typeof manager.showConsentModal === 'function') { 767 manager.showConsentModal(); 768 } 769 } catch (e) { 770 console.warn('Unable to open Klaro consent settings', e); 771 } 772 }; 773 774 // âââ Klaro onload handler ââââââââââââââââââââââââââââââââââââââââââââââââââââ 775 window.__applyKlaroInitialConsent = function () { 776 try { 777 if (!window.__cmpRegion.regulated) return; 778 if (!hasKlaroCookie()) return; 779 var manager = getKlaroManager(); 780 if (!manager || !manager.consents) return; 781 applyInitialConsent({ 782 analytics: !!manager.consents.analytics, 783 marketing: !!manager.consents.marketing 784 }); 785 } catch (e) { 786 console.warn('Klaro consent initialization failed', e); 787 } 788 }; 789 790 // âââ GPT bootstrap âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 791 // Always uses securepubads (standard GPT). 792 // For denied-consent users, applies nonPersonalizedAds instead of switching 793 // to the limited GPT URL â this preserves pubads() availability and gives 794 // access to the standard demand pool (contextual only, no user signals). 795 (function () { 796 if (window.__wtwhGptBootstrapInitialized) return; 797 window.__wtwhGptBootstrapInitialized = true; 798 799 var GPT_MODE_FULL = 'full'; 800 var GPT_MODE_NPA = 'npa'; // non-personalized ads â replaces "limited" 801 802 // Single GPT URL for all cases 803 var GPT_URL = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js'; 804 805 var gptScriptRequested = false; 806 var gptScriptLoaded = false; 807 var gptDecisionFinalized = false; 808 809 function redactUrl(rawUrl) { 810 if (!rawUrl) return ''; 811 try { 812 var url = new URL(rawUrl, window.location.origin); 813 ['s', 'loc'].forEach(function (key) { 814 if (url.searchParams.has(key)) url.searchParams.set(key, 'REDACTED'); 815 }); 816 return url.href; 817 } catch (e) { 818 return rawUrl; 819 } 820 } 821 822 // Returns null when consent state is not yet known (regulated, Klaro not loaded yet). 823 // Returning null defers GPT loading until a consent signal arrives. 824 function selectGptMode() { 825 if (!window.__cmpRegion.regulated) return GPT_MODE_FULL; 826 827 var marketingConsent = getMarketingConsentState(); 828 if (marketingConsent === true) return GPT_MODE_FULL; 829 if (marketingConsent === false) return GPT_MODE_NPA; 830 831 // null = Klaro hasn't restored consent yet â wait 832 return null; 833 } 834 835 function dispatchGptReady(mode) { 836 window.__gptMode = mode; 837 window.__gptReady = true; 838 window.__wtwhConsentDebug.gptMode = mode; 839 840 window.dataLayer.push({ event: 'gpt_ready', gpt_mode: mode }); 841 dispatchWindowEvent('gpt_ready', { gpt_mode: mode }); 842 log('gpt_ready dispatched with mode:', mode); 843 } 844 845 function configureGptAfterLoad(mode) { 846 window.googletag.cmd.push(function () { 847 try { 848 if (typeof googletag.pubads !== 'function') { 849 log('pubads() unavailable after GPT load'); 850 return; 851 } 852 853 if (mode === GPT_MODE_NPA) { 854 // Consent denied: serve non-personalized ads. 855 // Uses standard GPT pipeline with no user signals. 856 // Better fill rate than limited ads URL; compliant with 857 // ad_storage: denied + nonPersonalizedAds: true. 858 try { 859 googletag.pubads().setPrivacySettings({ 860 nonPersonalizedAds: true 861 }); 862 log('Configured GPT for non-personalized ads (consent denied)'); 863 } catch (e) { 864 log('Failed to set nonPersonalizedAds', e); 865 } 866 } else { 867 log('Configured GPT for full personalized ads'); 868 } 869 870 var cleanPage = redactUrl(window.location.href); 871 var cleanRef = redactUrl(document.referrer); 872 873 try { googletag.pubads().set('page_url', cleanPage); } catch (e) {} 874 if (cleanRef) { 875 try { googletag.pubads().set('referrer_url', cleanRef); } catch (e) {} 876 } 877 try { 878 googletag.pubads().setTargeting('s', 'REDACTED'); 879 googletag.pubads().setTargeting('loc', 'REDACTED'); 880 } catch (e) {} 881 882 dispatchGptReady(mode); 883 } catch (e) { 884 log('Error during GPT configuration', e); 885 } 886 }); 887 } 888 889 function loadGptScript(mode) { 890 if (gptScriptRequested || gptScriptLoaded || gptDecisionFinalized) { 891 log('GPT already requested/loaded â skipping'); 892 return; 893 } 894 895 gptDecisionFinalized = true; 896 gptScriptRequested = true; 897 898 var script = document.createElement('script'); 899 script.async = true; 900 script.src = GPT_URL; 901 902 script.onload = function () { 903 gptScriptLoaded = true; 904 log('GPT script loaded, mode:', mode); 905 configureGptAfterLoad(mode); 906 }; 907 908 script.onerror = function () { 909 gptScriptRequested = false;
910 gptScriptLoaded = false; 911 gptDecisionFinalized = false; 912 log('Failed to load GPT script'); 913 }; 914 915 document.head.appendChild(script); 916 log('Requested GPT script, mode:', mode); 917 } 918 919 function tryLoadGpt() { 920 if (gptDecisionFinalized) return true; 921 var mode = selectGptMode(); 922 if (mode === null) return false; 923 loadGptScript(mode); 924 return true; 925 } 926 927 // Non-regulated: load immediately 928 if (!window.__cmpRegion.regulated) { 929 tryLoadGpt(); 930 return; 931 } 932 933 // Regulated: wait for a consent signal before loading GPT 934 window.addEventListener('consent_initialized', tryLoadGpt); 935 window.addEventListener('consent_updated', tryLoadGpt); 936 937 // Poll briefly in case Klaro resolves before listeners fire 938 var pollCount = 0; 939 var maxPolls = 3; 940 var pollInterval = setInterval(function () { 941 pollCount++; 942 if (tryLoadGpt() || pollCount >= maxPolls) { 943 clearInterval(pollInterval); 944 } 945 }, 100); 946 947 // Hard fallback: no consent signal after a short bootstrap grace period â load NPA 948 setTimeout(function () { 949 if (!gptDecisionFinalized) { 950 log('Consent timeout â falling back to non-personalized GPT'); 951 loadGptScript(GPT_MODE_NPA); 952 } 953 }, 300); 954 })(); 955 })(); 956</script>
vendor: 1 bytes, line 956
956
957<script data-wtwh-analytics-loader>(function(w,d){'use strict'; 958var cfg={"scriptUrl":"https://scripts.wtwhmedia.com/developer/wtwh_analytics/env/prod/index.js","endpoint":"https://collect.wtwhmedia.com/v1/events","site":"www.evengineeringonline.com","pageUrl":"https://www.evengineeringonline.com/ev-engineering-articles/","country":"US","consentDenied":false}; 959var consentMessageType="arrowfly:analytics-consent"; 960if(w.__wtwhAnalyticsEdgeLoaderInstalled)return; 961w.__wtwhAnalyticsEdgeLoaderInstalled=true; 962var analytics=null; 963var pageTracker=null; 964var consentGranted=!cfg.consentDenied; 965function browserConsent(){ 966 var n=w.navigator||{}; 967 return n.globalPrivacyControl!==true&&n.doNotTrack!=='1'; 968} 969function canTrack(){return consentGranted&&browserConsent();} 970function embedFrames(){ 971 return d.querySelectorAll('iframe[src*="embeds.wtwhmedia.com"],iframe[src*="embeds.dev.wtwhmedia.com"]'); 972} 973function broadcastEmbedConsent(){ 974 var msg={type:consentMessageType,granted:canTrack()}; 975 var frames=embedFrames(); 976 for(var i=0;i<frames.length;i++){ 977 try{ 978 var frame=frames[i]; 979 var targetOrigin=new URL(frame.src,w.location.href).origin; 980 if(frame.contentWindow)frame.contentWindow.postMessage(msg,targetOrigin); 981 }catch(_){} 982 } 983} 984function startPageTracking(){ 985 if(!analytics||pageTracker||!canTrack())return; 986 var api=w.wtwh&&w.wtwh.analytics; 987 if(api&&typeof api.trackPage==='function'){ 988 pageTracker=api.trackPage(analytics,{props:{source:'edge-router',country:cfg.country}}); 989 return; 990 } 991 analytics.track('page_view',{ 992 page_url:cfg.pageUrl, 993 page_host:w.location.hostname, 994 page_path:w.location.pathname, 995 referer:d.referrer||'', 996 props:{source:'edge-router',country:cfg.country,navigation_type:'initial'} 997 }); 998 analytics.flush(); 999} 1000function stopPageTracking(){ 1001 if(!pageTracker)return; 1002 pageTracker.destroy(); 1003 pageTracker=null; 1004} 1005function setConsent(granted){ 1006 consentGranted=!!granted; 1007 if(consentGranted)startPageTracking(); 1008 else stopPageTracking(); 1009 broadcastEmbedConsent(); 1010} 1011function applyConsentEvent(event){ 1012 var value=event&&event.detail&&event.detail.consent_analytics; 1013 if(value==='granted')setConsent(true); 1014 else if(value==='denied')setConsent(false); 1015} 1016function readKlaroConsent(){ 1017 try{ 1018 var manager=w.klaro&&typeof w.klaro.getManager==='function'&&w.klaro.getManager(); 1019 if(manager&&manager.consents&&typeof manager.consents.analytics==='boolean'){ 1020 setConsent(manager.consents.analytics); 1021 return true; 1022 } 1023 }catch(_){} 1024 return false; 1025} 1026function pollKlaroConsent(){ 1027 if(!cfg.consentDenied)return; 1028 var attempts=0; 1029 var timer=w.setInterval(function(){ 1030 attempts++; 1031 if(readKlaroConsent()||attempts>=20)w.clearInterval(timer); 1032 },500); 1033} 1034function start(){ 1035 var api=w.wtwh&&w.wtwh.analytics; 1036 if(!api||typeof api.create!=='function')return; 1037 analytics=api.create({ 1038 site:String(cfg.site||w.location.hostname), 1039 endpoint:String(cfg.endpoint), 1040 context:{ 1041 page_url:String(cfg.pageUrl||w.location.href), 1042 page_host:w.location.hostname, 1043 page_path:w.location.pathname, 1044 referer:d.referrer||'' 1045 }, 1046 consent:canTrack 1047 }); 1048 readKlaroConsent(); 1049 startPageTracking(); 1050 broadcastEmbedConsent(); 1051} 1052w.addEventListener('consent_initialized',applyConsentEvent); 1053w.addEventListener('consent_updated',applyConsentEvent); 1054w.addEventListener('load',broadcastEmbedConsent); 1055d.addEventListener('load',function(event){ 1056 if(event.target&&event.target.tagName==='IFRAME')broadcastEmbedConsent(); 1057},true); 1058if(w.wtwh&&w.wtwh.analytics)start(); 1059else{ 1060 var script=d.createElement('script'); 1061 script.async=true; 1062 script.src=String(cfg.scriptUrl); 1063 script.onload=start; 1064 (d.head||d.documentElement).appendChild(script); 1065} 1066pollKlaroConsent(); 1067})(window,document);</script>
1067<script data-wtwh-ad-info>window.dataLayer=window.dataLayer||[];window.dataLayer.push({"wtwhAdInfo":{"request":"unrestricted","verified_bot_category":"","traffic_channel":"direct_or_unknown","traffic_channel_group":"direct_or_unknown"}});</script>
1067</head> 1068<body class="blog wp-theme-genesis wp-child-theme-ThemeWTWH header-image content-sidebar genesis-breadcrumbs-hidden archive"><!-- Google Tag Manager GLOBAL (noscript) -->
vendor: 69 bytes, lines 1068-1069
1068 1069<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1069GTM-MMC9PJ9
vendor: 85 bytes, lines 1069-1070
1069" 1070height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1071<!-- End Google Tag Manager GLOBAL (noscript) --> 1072 1073<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 1073-1074
1073 1074<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1074GTM-WKS3GR3W
vendor: 85 bytes, lines 1074-1075
1074" 1075height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1076<!-- End Google Tag Manager (noscript) --> 1077 1078 <div id="div-gpt-wallpaper"></div> 1079 <div id="spotible-wallpaper-ad-container"></div> 1080 <div id="div-gpt-allstreamflex"></div> 1081 <div id="spotible-allstreamflex-ad-container"></div> 1082 <div id="div-gpt-allstreamprelude"></div> 1083 <div id="spotible-allstreamprelude-ad-container"></div> 1084 <div class="site-container"><header class="site-header"><div class="wrap"><div class="title-area"><p class="site-title"><a href="https://www.evengineeringonline.com/">EV Engineering & Infrastructure</a></p></div><div class="widget-area header-widget-area"><section id="custom_html-3" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><div id='div-gpt-eveng-header'> 1085
1085<script> 1086 googletag.cmd.push(function() { googletag.display('div-gpt-eveng-header'); }); 1087 </script>
1087 1088</div></div></div></section> 1089</div><div class="mobile-toggles"><a href="#" class="search-toggle"><i class="icon-search"></i></a><a href="#" class="mobile-menu-toggle"><i class="icon-menu"></i></a></div></div></header><nav class="nav-primary" aria-label="Main"><div class="wrap"><ul id="menu-main-menu" class="menu genesis-nav-menu menu-primary"><li id="menu-item-22" class="menu-item"><a href="https://www.evengineeringonline.com/category/technology-news/"><span >News</span></a></li> 1090<li id="menu-item-4023" class="menu-item menu-item-has-children"><a href="https://www.evengineeringonline.com/category/faq/"><span >Articles</span></a> 1091<ul class="sub-menu"> 1092 <li id="menu-item-9992" class="menu-item"><a href="https://www.evengineeringonline.com/category/qas/"><span >Q&As</span></a></li> 1093 <li id="menu-item-9991" class="menu-item"><a href="https://www.evengineeringonline.com/category/tech-spotlight/"><span >Tech Spotlight</span></a></li> 1094</ul> 1095</li> 1096<li id="menu-item-17" class="menu-item"><a href="https://www.evengineeringonline.com/category/batteries/"><span >Batteries</span></a></li> 1097<li id="menu-item-3554" class="menu-item menu-item-has-children"><a href="https://www.evengineeringonline.com/category/charging/"><span >Charging</span></a> 1098<ul class="sub-menu"> 1099 <li id="menu-item-4671" class="menu-item"><a href="https://www.evengineeringonline.com/category/charging/wireless-charging/"><span >Wireless Charging</span></a></li> 1100 <li id="menu-item-4670" class="menu-item"><a href="https://www.evengineeringonline.com/category/charging/vehicle-to-grid-v2g/"><span >Vehicle-to-Grid (V2G)</span></a></li> 1101</ul> 1102</li> 1103<li id="menu-item-2716" class="menu-item"><a href="https://www.evengineeringonline.com/category/electrification/"><span >Electrification</span></a></li> 1104<li id="menu-item-20" class="menu-item"><a href="https://www.evengineeringonline.com/category/testing-safety/"><span >Testing and Safety</span></a></li> 1105<li id="menu-item-2087" class="menu-item menu-item-has-children"><a><span >Learn</span></a> 1106<ul class="sub-menu"> 1107 <li id="menu-item-2088" class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/learning-center"><span >Learning Center</span></a></li> 1108 <li id="menu-item-10291" class="menu-item"><a href="https://www.evengineeringonline.com/category/tech-toolboxes/"><span >Tech Toolboxes</span></a></li> 1109 <li id="menu-item-1979" class="menu-item"><a target="_blank" href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415889/ev-engineering"><span >Webinars</span></a></li> 1110</ul> 1111</li> 1112<li id="menu-item-2084" class="menu-item menu-item-has-children"><a><span >Resources</span></a> 1113<ul class="sub-menu"> 1114 <li id="menu-item-12735" class="menu-item"><a href="https://www.evengineeringonline.com/category/digital-issues/"><span >Digital Editions</span></a></li> 1115 <li id="menu-item-2086" class="menu-item"><a target="_blank" href="https://www.designworldonline.com/category/news/engineering-diversity/"><span >Diversity & Inclusion</span></a></li> 1116 <li id="menu-item-9096" class="menu-item"><a href="/voices/"><span >Voices</span></a></li> 1117</ul> 1118</li> 1119<li id="menu-item-8517" class="menu-item"><a target="_blank" href="https://www.mediakit.evengineeringonline.com/"><span >Advertise</span></a></li> 1120<li id="menu-item-12734" class="site-header--subscribe menu-item"><a href="https://www.evengineeringonline.com/welcome-ev-community/"><span >Subscribe</span></a></li> 1121<li class="menu-item search"><a href="#" class="search-toggle"><i class="icon-search"></i></a></li></ul></div></nav> <div style="padding-top:10px;text-align:center"> 1122 <div id="jumbo-banner-ad-container" style="min-width: 970px; min-height: 90px;"></div> 1123 </div> 1124 <div class="site-inner"><div class="wrap"><div class="content-sidebar-wrap"><main class="content"><article class="type-post entry has-post-thumbnail" aria-label="Q&A: How EV architectures are changing high-speed connectivity"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">
1124Michelle Froese</span></a></span> | <time class="entry-time">September 28, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/">Q&A: How EV architectures are changing high-speed connectivity</a></h2> 1125</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/" aria-hidden="true" tabindex="-1"><img width="300" height="169" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-300x169.png" class="alignleft post-image entry-image wp-image-13688" alt="" decoding="async" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-300x169.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-1024x576.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-768x432.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-1536x864.png 1536w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-368x207.png 368w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator.png 1672w" sizes="(max-width: 300px) 100vw, 300px" /></a><p>As electric vehicles (EVs) add more cameras, radar, and other high-bandwidth sensors, the amount of data moving through the vehicle continues to grow. 1126 1127 1128 1129At the same time, those data links have to operate alongside high-voltage power electronics … <a href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="White paper calls for new reliability testing approach for EV BMS"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 28, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/white-paper-calls-for-new-reliability-testing-approach-for-ev-bms/">White paper calls for new reliability testing approach for EV BMS</a></h2> 1130</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/white-paper-calls-for-new-reliability-testing-approach-for-ev-bms/" aria-hidden="true" tabindex="-1"><img width="300" height="271" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-300x271.png" class="alignleft post-image entry-image wp-image-13674" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-300x271.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-1024x926.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-768x695.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM-263x238.png 263w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-25-at-7.57.04-AM.png 1276w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>The Global Electronics Association has released a new white paper examining reliability challenges in battery management systems as electric vehicle (EV) architectures move toward higher voltages, continuous operation and longer service lives. 1131 1132The … <a href="https://www.evengineeringonline.com/white-paper-calls-for-new-reliability-testing-approach-for-ev-bms/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Coesia to showcase integrated battery manufacturing at The Battery Show"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">
1132Michelle Froese</span></a></span> | <time class="entry-time">September 28, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/coesia-to-showcase-integrated-battery-manufacturing-at-the-battery-show/">Coesia to showcase integrated battery manufacturing at The Battery Show</a></h2> 1133</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/coesia-to-showcase-integrated-battery-manufacturing-at-the-battery-show/" aria-hidden="true" tabindex="-1"><img width="300" height="225" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/3110-3110-300x225.jpg" class="alignleft post-image entry-image wp-image-13677" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/3110-3110-300x225.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/3110-3110-317x238.jpg 317w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/3110-3110.jpg 700w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Coesia will showcase a range of manufacturing technologies at The Battery Show North America, designed to support higher-volume lithium-ion battery production, with a focus on improving process control, automation, and scalability for electric … <a href="https://www.evengineeringonline.com/coesia-to-showcase-integrated-battery-manufacturing-at-the-battery-show/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="ROHM SiC MOSFETs selected for BMW Neue Klasse EV powertrain"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 28, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/rohm-sic-mosfets-selected-for-bmw-neue-klasse-ev-powertrain/">ROHM SiC MOSFETs selected for BMW Neue Klasse EV powertrain</a></h2> 1134</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/rohm-sic-mosfets-selected-for-bmw-neue-klasse-ev-powertrain/" aria-hidden="true" tabindex="-1"><img width="300" height="200" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic-300x200.webp" class="alignleft post-image entry-image wp-image-13680" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic-300x200.webp 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic-768x512.webp 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic-357x238.webp 357w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/bmw-neue-klasse-sic.webp 810w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>ROHMâs silicon carbide (SiC) MOSFETs are being integrated into BMWâs Neue Klasse electric powertrain architecture as part of the automakerâs sixth-generation electric vehicle (EV) technology. 1135 1136The SiC devices will support power conversion within … <a href="https://www.evengineeringonline.com/rohm-sic-mosfets-selected-for-bmw-neue-klasse-ev-powertrain/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Researchers improve anode-free lithium metal battery stability"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 25, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/researchers-improve-anode-free-lithium-metal-battery-stability/">Researchers improve anode-free lithium metal battery stability</a></h2> 1137</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/researchers-improve-anode-free-lithium-metal-battery-stability/" aria-hidden="true" tabindex="-1"><img width="300" height="225" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260922105028_00gfc8yriz96mbwrdym79cas4hlmw1-300x225.jpg" class="alignleft post-image entry-image wp-image-13671" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260922105028_00gfc8yriz96mbwrdym79cas4hlmw1-300x225.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260922105028_00gfc8yriz96mbwrdym79cas4hlmw1-317x238.jpg 317w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260922105028_00gfc8yriz96mbwrdym79cas4hlmw1.jpg 430w" sizes="auto, (max-width: 300px) 100v
1137w, 300px" /></a><p>Researchers patterned copper current collectors with nanoscale structures and an MXene coating to suppress lithium dendrite growth without adding excess lithium. 1138 1139 1140 1141A research team at the Korea Advanced Institute of Science and Technology (KAIST) … <a href="https://www.evengineeringonline.com/researchers-improve-anode-free-lithium-metal-battery-stability/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Semi-dry braking architecture reduces residual brake drag"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 25, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/semi-dry-braking-architecture-reduces-residual-brake-drag/">Semi-dry braking architecture reduces residual brake drag</a></h2> 1142</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/semi-dry-braking-architecture-reduces-residual-brake-drag/" aria-hidden="true" tabindex="-1"><img width="300" height="296" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM-300x296.png" class="alignleft post-image entry-image wp-image-13667" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM-300x296.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM-768x757.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM-241x238.png 241w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-9.31.51-AM.png 866w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>AUMOVIO has developed a semi-dry brake system that combines electromechanical braking with a conventional hydraulic front axle, using active brake-pad clearance to reduce residual drag in electric vehicles (EVs). 1143The system uses a near-production … <a href="https://www.evengineeringonline.com/semi-dry-braking-architecture-reduces-residual-brake-drag/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Mercedes-Benz to test ProLogium Gen4 solid-state cells for future EVs"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 25, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/mercedes-benz-to-test-prologium-gen4-solid-state-cells-for-future-evs/">Mercedes-Benz to test ProLogium Gen4 solid-state cells for future EVs</a></h2> 1144</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/mercedes-benz-to-test-prologium-gen4-solid-state-cells-for-future-evs/" aria-hidden="true" tabindex="-1"><img width="300" height="157" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-300x157.png" class="alignleft post-image entry-image wp-image-13664" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-300x157.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-1024x536.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-768x402.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-1536x804.png 1536w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM-368x193.png 368w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.55.30-AM.png 1906w" sizes="auto, (max-width: 300px) 100v
1144w, 300px" /></a><p>Mercedes-Benz and ProLogium have signed a joint testing agreement covering ProLogiumâs latest Gen4 solid-state battery cells, with the automaker evaluating the technology for potential use in future electric vehicles (EVs). 1145Testing will include … <a href="https://www.evengineeringonline.com/mercedes-benz-to-test-prologium-gen4-solid-state-cells-for-future-evs/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Automotive rectifiers combine low forward voltage with high avalanche capability"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 25, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/automotive-rectifiers-combine-low-forward-voltage-with-high-avalanche-capability/">Automotive rectifiers combine low forward voltage with high avalanche capability</a></h2> 1146</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/automotive-rectifiers-combine-low-forward-voltage-with-high-avalanche-capability/" aria-hidden="true" tabindex="-1"><img width="300" height="230" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP-300x230.jpg" class="alignleft post-image entry-image wp-image-13655" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP-300x230.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP-768x589.jpg 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP-310x238.jpg 310w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/DIO1106_image_SBRFP.jpg 900w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Diodes Incorporated has introduced a family of AEC-qualified field-plated Super Barrier Rectifiers designed for automotive power systems. 1147The devices are intended as drop-in replacements for comparable Schottky and PN junction diodes, with lower … <a href="https://www.evengineeringonline.com/automotive-rectifiers-combine-low-forward-voltage-with-high-avalanche-capability/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Battery intelligence software adds deeper health data to EV battery passports"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/battery-intelligence-software-adds-deeper-health-data-to-ev-battery-passports/">Battery intelligence software adds deeper health data to EV battery passports</a></h2> 1148</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/battery-intelligence-software-adds-deeper-health-data-to-ev-battery-passports/" aria-hidden="true" tabindex="-1"><img width="300" height="209" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.31.03-AM-300x209.png" class="alignleft post-image entry-image wp-image-13660" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.31.03-AM-300x209.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.31.03-AM-342x238.png 342w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-24-at-8.31.03-AM.png 692w" sizes="auto, (max-width: 300px) 100v
1148w, 300px" /></a><p>Qnovo has introduced a new software application built on its Battery Genome platform to give automakers a more detailed view of electric vehicle (EV) battery condition and residual value. 1149The application is intended to address limitations in battery … <a href="https://www.evengineeringonline.com/battery-intelligence-software-adds-deeper-health-data-to-ev-battery-passports/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Why e-axle fluids have become an EV engineering problem"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/why-e-axle-fluids-have-become-an-ev-engineering-problem/">Why e-axle fluids have become an EV engineering problem</a></h2> 1150</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/why-e-axle-fluids-have-become-an-ev-engineering-problem/" aria-hidden="true" tabindex="-1"><img width="300" height="225" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-300x225.png" class="alignleft post-image entry-image wp-image-13649" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-300x225.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-1024x768.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-768x576.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle-317x238.png 317w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/E-axle.png 1448w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Electric vehicle (EV) drive units keep getting smaller and more integrated, and that's changed what the fluid inside them has to do. In a conventional gearbox, lubricant selection mostly comes down to protecting the gears while keeping friction … <a href="https://www.evengineeringonline.com/why-e-axle-fluids-have-become-an-ev-engineering-problem/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Cabot expands US production of battery conductive additives"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/cabot-expands-us-production-of-battery-conductive-additives/">Cabot expands US production of battery conductive additives</a></h2> 1151</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/cabot-expands-us-production-of-battery-conductive-additives/" aria-hidden="true" tabindex="-1"><img width="300" height="169" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-300x169.jpg" class="alignleft post-image entry-image wp-image-13639" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-300x169.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-1024x576.jpg 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-768x432.jpg 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black-368x207.jpg 368w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Carbon-Black.jpg 1280w" sizes="auto, (max-width: 300px) 100v
1151w, 300px" /></a><p>Cabot Corporation plans to expand domestic production of battery-grade conductive additives at its facilities in Franklin, Louisiana, and Pampa, Texas, with support from a modified $50 million US Department of Energy (DOE) grant and approximately $75 … <a href="https://www.evengineeringonline.com/cabot-expands-us-production-of-battery-conductive-additives/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="New Titan rare-earth-free motor for heavy-duty EVs"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/new-titan-rare-earth-free-motor-for-heavy-duty-evs/">New Titan rare-earth-free motor for heavy-duty EVs</a></h2> 1152</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/new-titan-rare-earth-free-motor-for-heavy-duty-evs/" aria-hidden="true" tabindex="-1"><img width="300" height="214" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM-300x214.png" class="alignleft post-image entry-image wp-image-13636" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM-300x214.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM-768x548.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM-334x238.png 334w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Screenshot-2026-09-23-at-12.57.02-PM.png 962w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Advanced Electric Machines (AEM) has developed Titan, a new heavy-duty electric motor that expands the companyâs HDRM range for commercial vehicle applications. 1153Titan is the largest and highest-torque motor in the HDRM family and is designed for … <a href="https://www.evengineeringonline.com/new-titan-rare-earth-free-motor-for-heavy-duty-evs/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Brake-by-wire and steer-by-wire systems expand for EV platforms"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/brake-by-wire-and-steer-by-wire-systems-expand-for-ev-platforms/">Brake-by-wire and steer-by-wire systems expand for EV platforms</a></h2> 1154</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/brake-by-wire-and-steer-by-wire-systems-expand-for-ev-platforms/" aria-hidden="true" tabindex="-1"><img width="300" height="200" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260923013519EDT_image_1-300x200.jpg" class="alignleft post-image entry-image wp-image-13633" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260923013519EDT_image_1-300x200.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260923013519EDT_image_1-357x238.jpg 357w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/20260923013519EDT_image_1.jpg 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Leekr Technology is expanding its intelligent chassis portfolio for electric and software-defined vehicles, with technologies spanning brake-by-wire, electric steering, steer-by-wire, and centralized chassis control. 1155The company has moved its DHB-LK … <a href="https://www.evengineeringonline.com/brake-by-wire-and-steer-by-wire-systems-expand-for-ev-platforms/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Velion chargers receive Make It American certification"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">
1155Michelle Froese</span></a></span> | <time class="entry-time">September 24, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/velion-chargers-receive-make-it-american-certification/">Velion chargers receive Make It American certification</a></h2> 1156</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/velion-chargers-receive-make-it-american-certification/" aria-hidden="true" tabindex="-1"><img width="300" height="214" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger-300x214.jpeg" class="alignleft post-image entry-image wp-image-13630" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger-300x214.jpeg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger-768x549.jpeg 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger-333x238.jpeg 333w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/Lincoln-Electric-dc-fast-charger.jpeg 784w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Lincoln Electric has received product-level certification under NEMAâs Make It American program for its Velion dc fast-charging equipment. 1157The certification verifies domestic manufacturing and content requirements for the chargers, which Lincoln … <a href="https://www.evengineeringonline.com/velion-chargers-receive-make-it-american-certification/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="How to catch EV faults before they become failures"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.such.com" class="entry-author-link" rel="author"><span class="entry-author-name">Faisal Mahmood; Content Strategist | SUCH.COM</span></a></span> | <time class="entry-time">September 23, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/">How to catch EV faults before they become failures</a></h2> 1158</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/" aria-hidden="true" tabindex="-1"><img width="300" height="202" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-300x202.png" class="alignleft post-image entry-image wp-image-13624" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-300x202.png 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-1024x688.png 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-768x516.png 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-354x238.png 354w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults.png 1306w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Most electric vehicle (EV) battery failures do not happen out of nowhere. Long before a pack trips into a protective shutdown, there are usually small signs sitting quietly in the data, a cell running a few millivolts higher than its neighbors, or a … <a href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Wide-bandgap-ready MCUs add high-speed control for EV charging"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.evengineeringonline.com/author/michelle-froese/" class="entry-author-link" rel="author"><span class="entry-author-name">
1158Michelle Froese</span></a></span> | <time class="entry-time">September 23, 2026</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.evengineeringonline.com/wide-bandgap-ready-mcus-add-high-speed-control-for-ev-charging/">Wide-bandgap-ready MCUs add high-speed control for EV charging</a></h2> 1159</header><div class="entry-content"><a class="entry-image-link" href="https://www.evengineeringonline.com/wide-bandgap-ready-mcus-add-high-speed-control-for-ev-charging/" aria-hidden="true" tabindex="-1"><img width="300" height="280" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-300x280.jpg" class="alignleft post-image entry-image wp-image-13619" alt="" decoding="async" loading="lazy" srcset="https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-300x280.jpg 300w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-1024x957.jpg 1024w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-768x717.jpg 768w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-1536x1435.jpg 1536w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-2048x1913.jpg 2048w, https://www.evengineeringonline.com/wp-content/uploads/2026/09/inf-psoc-control-performance-255x238.jpg 255w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><p>Infineon Technologies has introduced its PSOC Control C3 Performance Line microcontroller family for real-time control in power-conversion and motor-control applications, including electric vehicle (EV) charging systems. 1160The MCUs use an Arm … <a href="https://www.evengineeringonline.com/wide-bandgap-ready-mcus-add-high-speed-control-for-ev-charging/" class="more-link">[Read more...]</a></p></div><footer class="entry-footer"></footer></article><div class="archive-pagination pagination"><div class="pagination-next alignright"><a href="https://www.evengineeringonline.com/ev-engineering-articles/page/2/" class="button">Next ></a></div></div></main><aside class="sidebar sidebar-primary widget-area" role="complementary" aria-label="Primary Sidebar"><section id="search-3" class="widget widget_search"><div class="widget-wrap"><form class="search-form" method="get" action="https://www.evengineeringonline.com/" role="search"><input class="search-form-input" type="search" name="s" id="searchform-1" placeholder="Search this website"><input class="search-form-submit" type="submit" value="GO"><meta content="https://www.evengineeringonline.com/?s={s}"></form></div></section> 1161<section id="custom_html-4" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"> 1162<div id='div-gpt-eveng_sidebar1'> 1163
1163<script> 1164 googletag.cmd.push(function() { googletag.display('div-gpt-eveng_sidebar1'); }); 1165 </script>
1165 1166</div></div></div></section> 1167<section id="custom_html-2" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><center> 1168<div style="display: flex; flex-direction: column; justify-content: center; width: 300px;"> 1169<div align="center"><a href="/welcome-ev-community/" target="_blank"><img src="https://www.evengineeringonline.com/wp-content/uploads/2025/11/AdobeStock_437936229.jpg" alt=âee newsletterâ></a></div> 1170<div align="center" style="width: 300px; line-height: 20px; padding-top: 10px;"><span style="font-weight: bold; color: #0c506d; text-align: center; font-size: 20px;">EXPAND YOUR KNOWLEDGE AND STAY CONNECTED</span></div> 1171<div align="center" style="line-height: 16px; padding-top: 5px;"><span style="text-align: center; font-size: 16px;">Get the latest info on technologies, tools and strategies for EV professionals.</span></div> 1172<div align="center" style="padding-top: 10px;"><a href="/welcome-ev-community/" target="_self"><button style="background-color: #57bf9b; color: white; font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor: pointer;">GET THE ENEWSLETTER</button></a></div> 1173</div> 1174</center></div></div></section> 1175<section id="category-posts-5" class="widget cat-post-widget"><div class="widget-wrap"><h4 class="widget-title widgettitle">Tech Spotlight</h4> 1176<ul id="category-posts-5-internal" class="category-posts-internal"> 1177<li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/why-high-power-ev-charging-is-pushing-control-integration-into-one-ecu/" title="Why high-power EV charging is pushing control integration into one ECU"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/07/Screenshot-2026-07-13-at-4.36.57-PM-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-12559 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/why-high-power-ev-charging-is-pushing-control-integration-into-one-ecu/" rel="bookmark">Why high-power EV charging is pushing control integration into one ECU</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/designing-safety-into-the-cell-the-case-for-system-level-solid-state-batteries/" title="Designing safety into the cell: The case for system-level solid-state batteries"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/06/PhotoforTechSpotlight2-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-12257 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/designing-safety-into-the-cell-the-case-for-system-level-solid-state-batteries/" rel="bookmark">Designing safety into the cell: The case for system-level solid-state batteries</a></div></li></ul> 1178<a class="cat-post-footer-link" href="https://www.evengineeringonline.com/category/tech-spotlight/">More Tech Spotlight</a></div></section> 1179<section id="category-posts-4" class="widget cat-post-widget"><div class="widget-wrap"><h4 class="widget-title widgettitle">Featured Contributions</h4> 1180<ul id="category-posts-4-internal" class="category-posts-internal"> 1181<li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/" title="Q&A: How EV architectures are changing high-speed connectivity"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Valensr-rotator-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-13688 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/how-ev-architectures-are-changing-high-speed-connectivity/" rel="bookmark">Q&A: How EV architectures are changing high-speed connectivity</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/" title="How to catch EV faults before they become failures"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/EV-Battery-faults-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-13624 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/how-to-catch-ev-faults-before-they-become-failures/" rel="bookmark">How to catch EV faults before they become failures</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/busbar-design-and-stray-inductance-affect-ev-power-electronics/" title="How do busbar design and stray inductance affect EV power electronics?"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Featured-Image-800-X-500-EV-Engineering-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-image-13597
1181wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/busbar-design-and-stray-inductance-affect-ev-power-electronics/" rel="bookmark">How do busbar design and stray inductance affect EV power electronics?</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/how-do-battery-pack-design-choices-affect-ev-assembly/" title="Q&A: How do battery-pack design choices affect EV assembly?"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/9M0A2129_B_01_edit-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-13570 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/how-do-battery-pack-design-choices-affect-ev-assembly/" rel="bookmark">Q&A: How do battery-pack design choices affect EV assembly?</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/engineering-reliable-charging-hubs-for-autonomous-ev-fleets/" title="Engineering reliable charging hubs for autonomous EV fleets"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2026/09/Voltera-LA-Site-CS3_005-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-image-13536 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/engineering-reliable-charging-hubs-for-autonomous-ev-fleets/" rel="bookmark">Engineering reliable charging hubs for autonomous EV fleets</a></div></li></ul> 1182<a class="cat-post-footer-link" href="https://www.evengineeringonline.com/category/featured-contributions/">More Featured Contributions</a></div></section> 1183<section id="custom_html-9" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">EV TECH TOOLBOX</h4> 1184<div class="textwidget custom-html-widget"><center> 1185<div style="display: flex; flex-direction: column; justify-content: center; 1186width: 300px;"> 1187<div align="center"><a href="https://www.evengineeringonline.com/category/tech-toolboxes/" target="_blank"><img src="https://www.evengineeringonline.com/wp-content/uploads/2025/11/EV-TechToolbox-BatteryBasics_Cover-scaled.jpg" alt=âee 1188tech toolboxâ></a></div> 1189<div align="center" style="line-height: 18px; padding-top: 10px;"><span 1190style="text-align: center; font-size: 16px;"> Explore the EV Engineering Tech Toolboxes: a collection of high-impact articles that break down the latest EV design trends and technologies. Download to stay aligned with todayâs evolving EV design challenges. 1191</span></div> 1192<div align="center" style="padding-top: 10px;"><a 1193href="https://www.evengineeringonline.com/category/tech-toolboxes/" 1194target="_blank"><button style="background-color: #57BF9B; color: white; 1195font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor: 1196pointer;">View All Tech Toolboxes</button></a></div> 1197</div> 1198</center></div></div></section> 1199<section id="custom_html-6" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">Learning Center</h4> 1200<div class="textwidget custom-html-widget"><center><div style="display: flex; flex-direction: column; width: 270px;"><a href="https://www.eeworldonline.com/learning-center" target="_blank" rel="noopener"><img src="https://www.evengineeringonline.com/wp-content/uploads/2024/08/300x250-2-EE-LearnCtr.png" alt="EE Learning Center" style="max-width: 270px;" /></a> 1201</div> 1202</center></div></div></section> 1203<section id="category-posts-3" class="widget cat-post-widget"><div class="widget-wrap"><h4 class="widget-title widgettitle">Sponsored Content</h4> 1204<ul id="category-posts-3-internal" class="category-posts-internal"> 1205<li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/converting-custom-materials-for-ev-applications/" title="Converting custom materials for EV applications"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2024/11/Prismatic-EV-Battery--150x150.jpg" class="attachment-thumbnail size-thumbnail wp-image-6808 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/converting-custom-materials-for-ev-applications/" rel="bookmark">Converting custom materials for EV applications</a></div></li><li class="cat-post-item"><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.evengineeringonline.com/advantech-powers-versatile-electric-vehicle-charging-systems/" title="Advantech Powers Versatile Electric Vehicle Charging Systems"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.evengineeringonline.com/wp-content/uploads/2023/12/advantechembeddediotgroup-sponsored-featured-image-january2024-150x150.png" class="attachment-thumbnail size-thumbnail wp-image-2175 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" loading="lazy" /></span></a> <a class="cat-post-title" href="https://www.evengineeringonline.com/advantech-powers-versatile-electric-vehicle-charging-systems/" rel="bookmark">Advantech Powers Versatile Electric Vehicle Charging Systems</a></div></li></ul> 1206</div></section> 1207<section id="custom_html-12" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">EV Training Days</h4> 1208<div class="textwidget custom-html-widget"><center><div style="display: flex; flex-direction: column; width: 270px;"><a href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415889/ev-engineering" target="_blank" rel="noopener"><img src="https://www.evengineeringonline.com/wp-content/uploads/2026/05/300x250-EV.jpg" alt="ev" /></a> 1209</div> 1210</center></div></div></section> 1211<section id="custom_html-5" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><div id='div-gpt-eveng_sidebarbotton'> 1212
1212<script> 1213 googletag.cmd.push(function() { googletag.display('div-gpt-eveng_sidebarbotton'); }); 1214 </script>
1214 1215</div></div></div></section> 1216<section id="custom_html-13" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><a href="/category/qas/"><img src="/wp-content/uploads/2025/12/qa-series-ad.jpg" alt="Q&A"></a></div></div></section> 1217</aside></div></div></div><div class="footer-socials"><div class="wrap"><label style="color:#ffffff">Connect with EV Engineering & Infrastructure</label> <a href="https://www.linkedin.com/company/evengineering/" target="_blank" rel="noopener noreferrer"><i class="icon-linkedin"></i></a></div></div><footer class="site-footer"><div class="wrap"><div class="row"><div class="footer-logo"><a href="https://www.evengineeringonline.com">EV Engineering & Infrastructure</a></div><div class="footer-menu"><div class="menu-footer-menu-container"><ul id="menu-footer-menu" class="menu"><li id="menu-item-1090" class="menu-item"><a target="_blank" href="https://www.5gtechnologyworld.com/">5G Technology</a></li> 1218<li id="menu-item-1091" class="menu-item"><a target="_blank" href="https://www.analogictips.com/">Analog IC Tips</a></li> 1219<li id="menu-item-1325" class="menu-item"><a target="_blank" href="https://www.batterypowertips.com/">Battery Power Tips</a></li> 1220<li id="menu-item-1092" class="menu-item"><a target="_blank" href="https://www.connectortips.com/">Connector Tips</a></li> 1221<li id="menu-item-1094" class="menu-item"><a target="_blank" href="https://www.edaboard.com/">EDABoard Forums</a></li> 1222<li id="menu-item-1095" class="menu-item"><a target="_blank" href="https://www.electro-tech-online.com/">Electro-Tech-Online Forums</a></li> 1223<li id="menu-item-1096" class="menu-item"><a target="_blank" href="https://www.engineersgarage.com/">Engineer’s Garage</a></li> 1224<li id="menu-item-1097" class="menu-item"><a target="_blank" href="https://www.microcontrollertips.com/">Microcontroller Tips</a></li> 1225<li id="menu-item-1098" class="menu-item"><a target="_blank" href="https://www.powerelectronictips.com/">Power Electronic Tips</a></li> 1226<li id="menu-item-1099" class="menu-item"><a target="_blank" href="https://www.sensortips.com/">Sensor Tips</a></li> 1227<li id="menu-item-1100" class="menu-item"><a target="_blank" href="https://www.testandmeasurementtips.com/">Test and Measurement Tips</a></li> 1228<li id="menu-item-1103" class="menu-item"><a href="/contact/">Contact Us</a></li> 1229</ul></div></div><div class="footer-copyright"><p>Copyright © 2026 Arrowfly LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of Arrowfly<br /> <a href="https://www.arrowfly.com/privacy-policy/" target="_blank">Privacy Policy</a> | <a href="https://www.mediakit.evengineeringonline.com/" target="_blank">Advertising</a> | <a href="/about-ev-engineering/">About Us</a> </p></div></div></div></footer></div><div class="site-search"><div class="wrap"><div class="search-inner"><h2>Search EV Engineering & Infrastructure</h2><form class="search-form" method="get" action="https://www.evengineeringonline.com/" role="search"><input class="search-form-input" type="search" name="s" id="searchform-2" placeholder="Search this website"><input class="search-form-submit" type="submit" value="GO"><meta content="https://www.evengineeringonline.com/?s={s}"></form></div></div></div>
1229<script type="speculationrules"> 1230{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/ThemeWTWH/*","/wp-content/themes/genesis/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 1231</script>
1231 1232 1233 1234<div id="sidr-mobile-menu" class="sidr right"><a class="sidr-menu-close" href="#"><i class="icon-close"></i></a><div class="menu-main-menu-container"><ul id="menu-main-menu-1" class="menu"><li class="menu-item"><a href="https://www.evengineeringonline.com/category/technology-news/">News</a></li> 1235<li class="menu-item menu-item-has-children"><a href="https://www.evengineeringonline.com/category/faq/">Articles</a> 1236<ul class="sub-menu"> 1237 <li class="menu-item"><a href="https://www.evengineeringonline.com/category/qas/">Q&As</a></li> 1238 <li class="menu-item"><a href="https://www.evengineeringonline.com/category/tech-spotlight/">Tech Spotlight</a></li> 1239</ul> 1240</li> 1241<li class="menu-item"><a href="https://www.evengineeringonline.com/category/batteries/">Batteries</a></li> 1242<li class="menu-item menu-item-has-children"><a href="https://www.evengineeringonline.com/category/charging/">Charging</a> 1243<ul class="sub-menu"> 1244 <li class="menu-item"><a href="https://www.evengineeringonline.com/category/charging/wireless-charging/">Wireless Charging</a></li> 1245 <li class="menu-item"><a href="https://www.evengineeringonline.com/category/charging/vehicle-to-grid-v2g/">Vehicle-to-Grid (V2G)</a></li> 1246</ul> 1247</li> 1248<li class="menu-item"><a href="https://www.evengineeringonline.com/category/electrification/">Electrification</a></li> 1249<li class="menu-item"><a href="https://www.evengineeringonline.com/category/testing-safety/">Testing and Safety</a></li> 1250<li class="menu-item menu-item-has-children"><a>Learn</a> 1251<ul class="sub-menu"> 1252 <li class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/learning-center">Learning Center</a></li> 1253 <li class="menu-item"><a href="https://www.evengineeringonline.com/category/tech-toolboxes/">Tech Toolboxes</a></li> 1254 <li class="menu-item"><a target="_blank" href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415889/ev-engineering">Webinars</a></li> 1255</ul> 1256</li> 1257<li class="menu-item menu-item-has-children"><a>Resources</a> 1258<ul class="sub-menu"> 1259 <li class="menu-item"><a href="https://www.evengineeringonline.com/category/digital-issues/">Digital Editions</a></li> 1260 <li class="menu-item"><a target="_blank" href="https://www.designworldonline.com/category/news/engineering-diversity/">Diversity & Inclusion</a></li> 1261 <li class="menu-item"><a href="/voices/">Voices</a></li> 1262</ul> 1263</li> 1264<li class="menu-item"><a target="_blank" href="https://www.mediakit.evengineeringonline.com/">Advertise</a></li> 1265<li class="site-header--subscribe menu-item"><a href="https://www.evengineeringonline.com/welcome-ev-community/">Subscribe</a></li> 1266</ul></div></div></div>
1266<script type="text/javascript"> 1267jQuery( function() { 1268if ( window.Cookies ) { 1269Cookies.set( "gp_easy_passthrough_session", "72803481f17b7c2c6347f273c6b3bf37||1790661779||1790661419", {"expires": new Date( new Date().getTime() + 1800000 ),"path": "/","domain": "","SameSite": "Lax","secure": false} ); 1270} 1271} ); 1272</script>
1272 1273 1274
1274<script type="text/html" id="tmpl-media-frame"> 1275 <div class="media-frame-title" id="media-frame-title"></div> 1276 <h2 class="media-frame-menu-heading">Actions</h2> 1277 <button type="button" class="button button-link media-frame-menu-toggle" aria-expanded="false"> 1278 Menu <span class="dashicons dashicons-arrow-down" aria-hidden="true"></span> 1279 </button> 1280 <div class="media-frame-menu"></div> 1281 <div class="media-frame-tab-panel"> 1282 <div class="media-frame-router"></div> 1283 <div class="media-frame-content"></div> 1284 </div> 1285 <h2 class="media-frame-actions-heading screen-reader-text"> 1286 Selected media actions </h2> 1287 <div class="media-frame-toolbar"></div> 1288 <div class="media-frame-uploader"></div> 1289 </script>
1289 1290 1291
1291<script type="text/html" id="tmpl-media-modal"> 1292 <div id="wp-media-modal" tabindex="0" class="media-modal wp-core-ui" role="dialog" aria-labelledby="media-frame-title"> 1293 <# if ( data.hasCloseButton ) { #> 1294 <button type="button" class="media-modal-close"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text"> 1295 Close dialog </span></button> 1296 <# } #> 1297 <div class="media-modal-content" role="document"></div> 1298 </div> 1299 <div class="media-modal-backdrop"></div> 1300 </script>
1300 1301 1302
1302<script type="text/html" id="tmpl-uploader-window"> 1303 <div class="uploader-window-content"> 1304 <div class="uploader-editor-title">Drop files to upload</div> 1305 </div> 1306 </script>
1306 1307 1308
1308<script type="text/html" id="tmpl-uploader-editor"> 1309 <div class="uploader-editor-content"> 1310 <div class="uploader-editor-title">Drop files to upload</div> 1311 </div> 1312 </script>
1312 1313 1314
1314<script type="text/html" id="tmpl-uploader-inline"> 1315 <# var messageClass = data.message ? 'has-upload-message' : 'no-upload-message'; #> 1316 <# if ( data.canClose ) { #> 1317 <button class="close dashicons dashicons-no"><span class="screen-reader-text"> 1318 Close uploader </span></button> 1319 <# } #> 1320 <div class="uploader-inline-content {{ messageClass }}"> 1321 <# if ( data.message ) { #> 1322 <h2 class="upload-message">{{ data.message }}</h2> 1323 <# } #> 1324 <div class="upload-ui"> 1325 <h2 class="upload-instructions drop-instructions">Drop files to upload</h2> 1326 <p class="upload-instructions drop-instructions">or</p> 1327 <button type="button" class="browser button button-hero" aria-describedby="post-upload-info">Select Files</button> 1328 </div> 1329 1330 <div class="upload-inline-status"></div> 1331 1332 <div class="post-upload-ui" id="post-upload-info"> 1333 1334 <p class="max-upload-size"> 1335 Maximum upload file size: 50 MB. </p> 1336 1337 <# if ( data.suggestedWidth && data.suggestedHeight ) { #> 1338 <p class="suggested-dimensions"> 1339 Suggested image dimensions: {{data.suggestedWidth}} by {{data.suggestedHeight}} pixels. </p> 1340 <# } #> 1341 1342 </div> 1343 </div> 1344 </script>
1344 1345 1346
1346<script type="text/html" id="tmpl-media-library-view-switcher"> 1347 <a href="https://www.evengineeringonline.com/wp-admin/upload.php?mode=list" class="view-list"> 1348 <span class="screen-reader-text"> 1349 List view </span> 1350 </a> 1351 <a href="https://www.evengineeringonline.com/wp-admin/upload.php?mode=grid" class="view-grid current" aria-current="page"> 1352 <span class="screen-reader-text"> 1353 Grid view </span> 1354 </a> 1355 </script>
1355 1356 1357
1357<script type="text/html" id="tmpl-uploader-status"> 1358 <h2>Uploading</h2> 1359 1360 <div class="media-progress-bar"><div></div></div> 1361 <div class="upload-details"> 1362 <span class="upload-count"> 1363 <span class="upload-index"></span> / <span class="upload-total"></span> 1364 </span> 1365 <span class="upload-detail-separator">–</span> 1366 <span class="upload-filename"></span> 1367 </div> 1368 <div class="upload-errors"></div> 1369 <button type="button" class="button upload-dismiss-errors">Dismiss errors</button> 1370 </script>
1370 1371 1372
1372<script type="text/html" id="tmpl-uploader-status-error"> 1373 <span class="upload-error-filename word-wrap-break-word">{{{ data.filename }}}</span> 1374 <span class="upload-error-message">{{ data.message }}</span> 1375 </script>
1375 1376 1377
1377<script type="text/html" id="tmpl-edit-attachment-frame"> 1378 <div class="edit-media-header"> 1379 <button class="left dashicons"<# if ( ! data.hasPrevious ) { #> disabled<# } #>><span class="screen-reader-text">Edit previous media item</span></button> 1380 <button class="right dashicons"<# if ( ! data.hasNext ) { #> disabled<# } #>><span class="screen-reader-text">Edit next media item</span></button> 1381 <button type="button" class="media-modal-close"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text">Close dialog</span></button> 1382 </div> 1383 <div class="media-frame-title"></div> 1384 <div class="media-frame-content"></div> 1385 </script>
1385 1386 1387
1387<script type="text/html" id="tmpl-attachment-details-two-column"> 1388 <div class="attachment-media-view {{ data.orientation }}"> 1389 <h2 class="screen-reader-text">Attachment Preview</h2> 1390 <div class="thumbnail thumbnail-{{ data.type }}"> 1391 <# if ( data.uploading ) { #> 1392 <div class="media-progress-bar"><div></div></div> 1393 <# } else if ( data.sizes && data.sizes.full ) { #> 1394 <img class="details-image" src="{{ data.sizes.full.url }}" draggable="false" alt="" /> 1395 <# } else if ( data.sizes && data.sizes.large ) { #> 1396 <img class="details-image" src="{{ data.sizes.large.url }}" draggable="false" alt="" /> 1397 <# } else if ( -1 === jQuery.inArray( data.type, [ 'audio', 'video' ] ) ) { #> 1398 <img class="details-image icon" src="{{ data.icon }}" draggable="false" alt="" /> 1399 <# } #> 1400 1401 <# if ( 'audio' === data.type ) { #> 1402 <div class="wp-media-wrapper wp-audio"> 1403 <audio crossorigin="anonymous" style="visibility: hidden" controls class="wp-audio-shortcode" width="100%" preload="none"> 1404 <source type="{{ data.mime }}" src="{{ data.url }}" /> 1405 </audio> 1406 </div> 1407 <# } else if ( 'video' === data.type ) { 1408 var w_rule = ''; 1409 if ( data.width ) { 1410 w_rule = 'width: ' + data.width + 'px;'; 1411 } else if ( wp.media.view.settings.contentWidth ) { 1412 w_rule = 'width: ' + wp.media.view.settings.contentWidth + 'px;'; 1413 } 1414 #> 1415 <div style="{{ w_rule }}" class="wp-media-wrapper wp-video"> 1416 <video crossorigin="anonymous" controls="controls" class="wp-video-shortcode" preload="metadata" 1417 <# if ( data.width ) { #>width="{{ data.width }}"<# } #> 1418 <# if ( data.height ) { #>height="{{ data.height }}"<# } #> 1419 <# if ( data.image && data.image.src !== data.icon ) { #>poster="{{ data.image.src }}"<# } #>> 1420 <source type="{{ data.mime }}" src="{{ data.url }}" /> 1421 </video> 1422 </div> 1423 <# } #> 1424 1425 <div class="attachment-actions"> 1426 <# if ( 'image' === data.type && ! data.uploading && data.sizes && data.can.save ) { #> 1427 <button type="button" class="button edit-attachment">Edit Image</button> 1428 <# } else if ( 'pdf' === data.subtype && data.sizes ) { #> 1429 <p>Document Preview</p> 1430 <# } #> 1431 </div> 1432 </div> 1433 </div> 1434 <div class="attachment-info"> 1435 <span class="settings-save-status" role="status"> 1436 <span class="spinner"></span> 1437 <span class="saved">Saved.</span> 1438 </span> 1439 <div class="details"> 1440 <h2 class="screen-reader-text"> 1441 Details </h2> 1442 <div class="uploaded"><strong>Uploaded on:</strong> {{ data.dateFormatted }}</div> 1443 <div class="uploaded-by word-wrap-break-word"> 1444 <strong>Uploaded by:</strong> 1445 <# if ( data.authorLink ) { #> 1446 <a href="{{ data.authorLink }}">{{ data.authorName }}</a> 1447 <# } else { #> 1448 {{ data.authorName }} 1449 <# } #> 1450 </div> 1451 <# if ( data.uploadedToTitle ) { #> 1452 <div class="uploaded-to"> 1453 <strong>Uploaded to:</strong> 1454 <# if ( data.uploadedToLink ) { #> 1455 <a href="{{ data.uploadedToLink }}">{{ data.uploadedToTitle }}</a> 1456 <# } else { #> 1457 {{ data.uploadedToTitle }} 1458 <# } #> 1459 </div> 1460 <# } #> 1461 <div class="filename"><strong>File name:</strong> {{ data.filename }}</div> 1462 <div class="file-type"><strong>File type:</strong> {{ data.mime }}</div> 1463 <div class="file-size"><strong>File size:</strong> {{ data.filesizeHumanReadable }}</div> 1464 <# if ( 'image' === data.type && ! data.uploading ) { #> 1465 <# if ( data.width && data.height ) { #> 1466 <div class="dimensions"><strong>Dimensions:</strong> 1467 {{ data.width }} by {{ data.height }} pixels </div> 1468 <# } #> 1469 1470 <# if ( data.originalImageURL && data.originalImageName ) { #> 1471 <div class="word-wrap-break-word"> 1472 <strong>Original image:</strong> 1473 <a href="{{ data.originalImageURL }}">{{data.originalImageName}}</a> 1474 </div> 1475 <# } #> 1476 <# } #> 1477 1478 <# if ( data.fileLength && data.fileLengthHumanReadable ) { #> 1479 <div class="file-length"><strong>Length:</strong> 1480 <span aria-hidden="true">{{ data.fileLengthHumanReadable }}</span> 1481 <span class="screen-reader-text">{{ data.fileLengthHumanReadable }}</span> 1482 </div> 1483 <# } #> 1484 1485 <# if ( 'audio' === data.type && data.meta.bitrate ) { #> 1486 <div class="bitrate"> 1487 <strong>Bitrate:</strong> {{ Math.round( data.meta.bitrate / 1000 ) }}kb/s 1488 <# if ( data.meta.bitrate_mode ) { #> 1489 {{ ' ' + data.meta.bitrate_mode.toUpperCase() }} 1490 <# } #> 1491 </div> 1492 <# } #> 1493 1494 <# if ( data.mediaStates ) { #> 1495 <div class="media-states"><strong>Used as:</strong> {{ data.mediaStates }}</div> 1496 <# } #> 1497 1498 <div class="compat-meta"> 1499 <# if ( data.compat && data.compat.meta ) { #> 1500 {{{ data.compat.meta }}} 1501 <# } #>
1502 </div> 1503 </div> 1504 1505 <div class="settings"> 1506 <# var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #> 1507 <# if ( 'image' === data.type ) { #> 1508 <span class="setting alt-text has-description" data-setting="alt"> 1509 <label for="attachment-details-two-column-alt-text" class="name">Alternative Text</label> 1510 <textarea id="attachment-details-two-column-alt-text" aria-describedby="alt-text-description" {{ maybeReadOnly }}>{{ data.alt }}</textarea> 1511 </span> 1512 <p class="description" id="alt-text-description"><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" target="_blank">Learn how to describe the purpose of the image<span class="screen-reader-text"> (opens in a new tab)</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>. Leave empty if the image is purely decorative.</p> 1513 <# } #> 1514 <span class="setting" data-setting="title"> 1515 <label for="attachment-details-two-column-title" class="name">Title</label> 1516 <input type="text" id="attachment-details-two-column-title" value="{{ data.title }}" {{ maybeReadOnly }} /> 1517 </span> 1518 <# if ( 'audio' === data.type ) { #> 1519 <span class="setting" data-setting="artist"> 1520 <label for="attachment-details-two-column-artist" class="name">Artist</label> 1521 <input type="text" id="attachment-details-two-column-artist" value="{{ data.artist || data.meta.artist || '' }}" /> 1522 </span> 1523 <span class="setting" data-setting="album"> 1524 <label for="attachment-details-two-column-album" class="name">Album</label> 1525 <input type="text" id="attachment-details-two-column-album" value="{{ data.album || data.meta.album || '' }}" /> 1526 </span> 1527 <# } #> 1528 <span class="setting" data-setting="caption"> 1529 <# if ( 'image' === data.type ) { #> 1530 <label for="attachment-details-two-column-caption" class="name">Image Caption</label> 1531 <# } else { #> 1532 <label for="attachment-details-two-column-caption" class="name">Short Description</label> 1533 <# } #> 1534 <textarea id="attachment-details-two-column-caption" {{ maybeReadOnly }}>{{ data.caption }}</textarea> 1535 </span> 1536 <span class="setting" data-setting="description"> 1537 <label for="attachment-details-two-column-description" class="name">Description</label> 1538 <textarea id="attachment-details-two-column-description" {{ maybeReadOnly }}>{{ data.description }}</textarea> 1539 </span> 1540 <span class="setting" data-setting="url"> 1541 <label for="attachment-details-two-column-copy-link" class="name">File URL:</label> 1542 <input type="text" class="attachment-details-copy-link ltr" id="attachment-details-two-column-copy-link" value="{{ data.url }}" readonly />
1543 <span class="copy-to-clipboard-container"> 1544 <button type="button" class="button button-small copy-attachment-url" data-clipboard-target="#attachment-details-two-column-copy-link">Copy URL to clipboard</button> 1545 <span class="success hidden" aria-hidden="true">Copied!</span> 1546 </span> 1547 </span> 1548 <div class="attachment-compat"></div> 1549 </div> 1550 1551 <div class="actions"> 1552 <# if ( data.link ) { #> 1553 <a class="view-attachment" href="{{ data.link }}">View attachment page</a> 1554 <# } #> 1555 <# if ( data.can.save ) { #> 1556 <# if ( data.link ) { #> 1557 <span class="links-separator">|</span> 1558 <# } #> 1559 <a href="{{ data.editLink }}">Edit more details</a> 1560 <# } #> 1561 <# if ( data.can.save && data.link ) { #> 1562 <span class="links-separator">|</span> 1563 <a href="{{ data.url }}" download>Download file</a> 1564 <# } #> 1565 <# if ( ! data.uploading && data.can.remove ) { #> 1566 <# if ( data.link || data.can.save ) { #> 1567 <span class="links-separator">|</span> 1568 <# } #> 1569 <button type="button" class="button-link delete-attachment">Delete permanently</button> 1570 <# } #> 1571 </div> 1572 </div> 1573 </script>
1573 1574 1575
1575<script type="text/html" id="tmpl-attachment"> 1576 <div class="attachment-preview js--select-attachment type-{{ data.type }} subtype-{{ data.subtype }} {{ data.orientation }}"> 1577 <div class="thumbnail"> 1578 <# if ( data.uploading ) { #> 1579 <div class="media-progress-bar"><div style="width: {{ data.percent }}%"></div></div> 1580 <# } else if ( 'image' === data.type && data.size && data.size.url ) { #> 1581 <div class="centered"> 1582 <img src="{{ data.size.url }}" draggable="false" alt="" /> 1583 </div> 1584 <# } else { #> 1585 <div class="centered"> 1586 <# if ( data.image && data.image.src && data.image.src !== data.icon ) { #> 1587 <img src="{{ data.image.src }}" class="thumbnail" draggable="false" alt="" /> 1588 <# } else if ( data.sizes ) { 1589 if ( data.sizes.medium ) { #> 1590 <img src="{{ data.sizes.medium.url }}" class="thumbnail" draggable="false" alt="" /> 1591 <# } else { #> 1592 <img src="{{ data.sizes.full.url }}" class="thumbnail" draggable="false" alt="" /> 1593 <# } #> 1594 <# } else { #> 1595 <img src="{{ data.icon }}" class="icon" draggable="false" alt="" /> 1596 <# } #> 1597 </div> 1598 <div class="filename"> 1599 <div>{{ data.filename }}</div> 1600 </div> 1601 <# } #> 1602 </div> 1603 <# if ( data.buttons.close ) { #> 1604 <button type="button" class="button-link attachment-close"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text"> 1605 Remove </span></button> 1606 <# } #> 1607 </div> 1608 <# if ( data.buttons.check ) { #> 1609 <button type="button" class="check" tabindex="-1"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text"> 1610 Deselect </span></button> 1611 <# } #> 1612 <# 1613 var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; 1614 if ( data.describe ) { 1615 if ( 'image' === data.type ) { #> 1616 <input type="text" value="{{ data.caption }}" class="describe" data-setting="caption" 1617 aria-label="Caption" 1618 placeholder="Caption…" {{ maybeReadOnly }} /> 1619 <# } else { #> 1620 <input type="text" value="{{ data.title }}" class="describe" data-setting="title" 1621 <# if ( 'video' === data.type ) { #> 1622 aria-label="Video title" 1623 placeholder="Video title…" 1624 <# } else if ( 'audio' === data.type ) { #> 1625 aria-label="Audio title" 1626 placeholder="Audio title…" 1627 <# } else { #> 1628 aria-label="Media title" 1629 placeholder="Media title…" 1630 <# } #> {{ maybeReadOnly }} /> 1631 <# } 1632 } #> 1633 </script>
1633 1634 1635
1635<script type="text/html" id="tmpl-attachment-details"> 1636 <h2> 1637 Attachment Details <span class="settings-save-status" role="status"> 1638 <span class="spinner"></span> 1639 <span class="saved">Saved.</span> 1640 </span> 1641 </h2> 1642 <div class="attachment-info"> 1643 1644 <# if ( 'audio' === data.type ) { #> 1645 <div class="wp-media-wrapper wp-audio"> 1646 <audio crossorigin="anonymous" style="visibility: hidden" controls class="wp-audio-shortcode" width="100%" preload="none"> 1647 <source type="{{ data.mime }}" src="{{ data.url }}" /> 1648 </audio> 1649 </div> 1650 <# } else if ( 'video' === data.type ) { 1651 var w_rule = ''; 1652 if ( data.width ) { 1653 w_rule = 'width: ' + data.width + 'px;'; 1654 } else if ( wp.media.view.settings.contentWidth ) { 1655 w_rule = 'width: ' + wp.media.view.settings.contentWidth + 'px;'; 1656 } 1657 #> 1658 <div style="{{ w_rule }}" class="wp-media-wrapper wp-video"> 1659 <video crossorigin="anonymous" controls="controls" class="wp-video-shortcode" preload="metadata" 1660 <# if ( data.width ) { #>width="{{ data.width }}"<# } #> 1661 <# if ( data.height ) { #>height="{{ data.height }}"<# } #> 1662 <# if ( data.image && data.image.src !== data.icon ) { #>poster="{{ data.image.src }}"<# } #>> 1663 <source type="{{ data.mime }}" src="{{ data.url }}" /> 1664 </video> 1665 </div> 1666 <# } else { #> 1667 <div class="thumbnail thumbnail-{{ data.type }}"> 1668 <# if ( data.uploading ) { #> 1669 <div class="media-progress-bar"><div></div></div> 1670 <# } else if ( 'image' === data.type && data.size && data.size.url ) { #> 1671 <img src="{{ data.size.url }}" draggable="false" alt="" /> 1672 <# } else { #> 1673 <img src="{{ data.icon }}" class="icon" draggable="false" alt="" /> 1674 <# } #> 1675 </div> 1676 <# } #> 1677 1678 <div class="details"> 1679 <div class="filename">{{ data.filename }}</div> 1680 <div class="uploaded">{{ data.dateFormatted }}</div> 1681 1682 <div class="file-size">{{ data.filesizeHumanReadable }}</div> 1683 <# if ( 'image' === data.type && ! data.uploading ) { #> 1684 <# if ( data.width && data.height ) { #> 1685 <div class="dimensions"> 1686 {{ data.width }} by {{ data.height }} pixels </div> 1687 <# } #> 1688 1689 <# if ( data.originalImageURL && data.originalImageName ) { #> 1690 <div class="word-wrap-break-word"> 1691 Original image: <a href="{{ data.originalImageURL }}">{{data.originalImageName}}</a> 1692 </div> 1693 <# } #> 1694 1695 <# if ( data.can.save && data.sizes ) { #> 1696 <a class="edit-attachment" href="{{ data.editLink }}&image-editor" target="_blank">Edit Image</a> 1697 <# } #> 1698 <# } #> 1699 1700 <# if ( data.fileLength && data.fileLengthHumanReadable ) { #> 1701 <div class="file-length">Length: <span aria-hidden="true">{{ data.fileLengthHumanReadable }}</span> 1702 <span class="screen-reader-text">{{ data.fileLengthHumanReadable }}</span> 1703 </div> 1704 <# } #> 1705 1706 <# if ( data.mediaStates ) { #> 1707 <div class="media-states"><strong>Used as:</strong> {{ data.mediaStates }}</div> 1708 <# } #> 1709 1710 <# if ( ! data.uploading && data.can.remove ) { #> 1711 <button type="button" class="button-link delete-attachment">Delete permanently</button> 1712 <# } #> 1713 1714 <div class="compat-meta"> 1715 <# if ( data.compat && data.compat.meta ) { #> 1716 {{{ data.compat.meta }}} 1717 <# } #> 1718 </div> 1719 </div> 1720 </div> 1721 <# var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #> 1722 <# if ( 'image' === data.type ) { #> 1723 <span class="setting alt-text has-description" data-setting="alt"> 1724 <label for="attachment-details-alt-text" class="name">Alt Text</label> 1725 <textarea id="attachment-details-alt-text" aria-describedby="alt-text-description" {{ maybeReadOnly }}>{{ data.alt }}</textarea> 1726 </span> 1727 <p class="description" id="alt-text-description"><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" target="_blank">Learn how to describe the purpose of the image<span class="screen-reader-text"> (opens in a new tab)</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>. Leave empty if the image is purely decorative.</p> 1728 <# } #> 1729 <span class="setting" data-setting="title"> 1730 <label for="attachment-details-title" class="name">Title</label> 1731 <input type="text" id="attachment-details-title" value="{{ data.title }}" {{ maybeReadOnly }} /> 1732 </span> 1733 <# if ( 'audio' === data.type ) { #> 1734 <span class="setting" data-setting="artist"> 1735 <label for="attachment-details-artist" class="name">Artist</label> 1736 <input type="text" id="attachment-details-artist" value="{{ data.artist || data.meta.artist || '' }}" /> 1737 </span> 1738 <span class="setting" data-setting="album"> 1739 <label for="attachment-details-album" class="name">Album</label> 1740 <input type="text" id="attachment-details-album" value="{{ data.album || data.meta.album || '' }}" /> 1741 </span> 1742 <# } #> 1743 <span class="setting" data-setting="caption"> 1744 <# if ( 'image' === data.type ) { #> 1745 <label for="attachment-details-caption" class="name">Image Caption</label> 1746 <# } else { #> 1747 <label for="attachment-details-caption" class="name">Short Description</label> 1748 <# } #> 1749 <textarea id="attachment-details-caption" {{ maybeReadOnly }}>{{ data.caption }}</textarea> 1750 </span> 1751 <span class="setting" data-setting="description"> 1752 <label for="attachment-details-description" class="name">Description</label> 1753 <textarea id="attachment-details-description" {{ maybeReadOnly }}>{{ data.description }}</textarea> 1754 </span> 1755 <span class="setting" data-setting="url"> 1756 <label for="attachment-details-copy-link" class="name">File URL:</label> 1757 <input type="text" class="attachment-details-copy-link ltr" id="attachment-details-copy-link" value="{{ data.url }}" readonly />
1758 <div class="copy-to-clipboard-container"> 1759 <button type="button" class="button button-small copy-attachment-url" data-clipboard-target="#attachment-details-copy-link">Copy URL to clipboard</button> 1760 <span class="success hidden" aria-hidden="true">Copied!</span> 1761 </div> 1762 </span> 1763 </script>
1763 1764 1765
1765<script type="text/html" id="tmpl-media-selection"> 1766 <div class="selection-info"> 1767 <span class="count"></span> 1768 <# if ( data.editable ) { #> 1769 <button type="button" class="button-link edit-selection">Edit Selection</button> 1770 <# } #> 1771 <# if ( data.clearable ) { #> 1772 <button type="button" class="button-link clear-selection">Clear</button> 1773 <# } #> 1774 </div> 1775 <div class="selection-view"></div> 1776 </script>
1776 1777 1778
1778<script type="text/html" id="tmpl-attachment-display-settings"> 1779 <h2>Attachment Display Settings</h2> 1780 1781 <# if ( 'image' === data.type ) { #> 1782 <span class="setting align"> 1783 <label for="attachment-display-settings-alignment" class="name">Alignment</label> 1784 <select id="attachment-display-settings-alignment" class="alignment" 1785 data-setting="align" 1786 <# if ( data.userSettings ) { #> 1787 data-user-setting="align" 1788 <# } #>> 1789 1790 <option value="left"> 1791 Left </option> 1792 <option value="center"> 1793 Center </option> 1794 <option value="right"> 1795 Right </option> 1796 <option value="none" selected> 1797 None </option> 1798 </select> 1799 </span> 1800 <# } #> 1801 1802 <span class="setting"> 1803 <label for="attachment-display-settings-link-to" class="name"> 1804 <# if ( data.model.canEmbed ) { #> 1805 Embed or Link <# } else { #> 1806 Link To <# } #> 1807 </label> 1808 <select id="attachment-display-settings-link-to" class="link-to" 1809 data-setting="link" 1810 <# if ( data.userSettings && ! data.model.canEmbed ) { #> 1811 data-user-setting="urlbutton" 1812 <# } #>> 1813 1814 <# if ( data.model.canEmbed ) { #> 1815 <option value="embed" selected> 1816 Embed Media Player </option> 1817 <option value="file"> 1818 <# } else { #> 1819 <option value="none" selected> 1820 None </option> 1821 <option value="file"> 1822 <# } #> 1823 <# if ( data.model.canEmbed ) { #> 1824 Link to Media File <# } else { #> 1825 Media File <# } #> 1826 </option> 1827 <option value="post"> 1828 <# if ( data.model.canEmbed ) { #> 1829 Link to Attachment Page <# } else { #> 1830 Attachment Page <# } #> 1831 </option> 1832 <# if ( 'image' === data.type ) { #> 1833 <option value="custom"> 1834 Custom URL </option> 1835 <# } #> 1836 </select> 1837 </span> 1838 <span class="setting"> 1839 <label for="attachment-display-settings-link-to-custom" class="name">URL</label> 1840 <input type="text" id="attachment-display-settings-link-to-custom" class="link-to-custom" data-setting="linkUrl" /> 1841 </span> 1842 1843 <# if ( 'undefined' !== typeof data.sizes ) { #> 1844 <span class="setting"> 1845 <label for="attachment-display-settings-size" class="name">Size</label> 1846 <select id="attachment-display-settings-size" class="size" name="size" 1847 data-setting="size" 1848 <# if ( data.userSettings ) { #> 1849 data-user-setting="imgsize" 1850 <# } #>> 1851 <# 1852 var size = data.sizes['thumbnail']; 1853 if ( size ) { #> 1854 <option value="thumbnail" > 1855 Thumbnail – {{ size.width }} × {{ size.height }} 1856 </option> 1857 <# } #> 1858 <# 1859 var size = data.sizes['medium']; 1860 if ( size ) { #> 1861 <option value="medium" > 1862 Medium – {{ size.width }} × {{ size.height }} 1863 </option> 1864 <# } #> 1865 <# 1866 var size = data.sizes['large']; 1867 if ( size ) { #> 1868 <option value="large" > 1869 Large – {{ size.width }} × {{ size.height }} 1870 </option> 1871 <# } #> 1872 <# 1873 var size = data.sizes['full']; 1874 if ( size ) { #> 1875 <option value="full" selected='selected'> 1876 Full Size – {{ size.width }} × {{ size.height }} 1877 </option> 1878 <# } #> 1879 </select> 1880 </span> 1881 <# } #> 1882 </script>
1882 1883 1884
1884<script type="text/html" id="tmpl-gallery-settings"> 1885 <h2>Gallery Settings</h2> 1886 1887 <span class="setting"> 1888 <label for="gallery-settings-link-to" class="name">Link To</label> 1889 <select id="gallery-settings-link-to" class="link-to" 1890 data-setting="link" 1891 <# if ( data.userSettings ) { #> 1892 data-user-setting="urlbutton" 1893 <# } #>> 1894 1895 <option value="post" <# if ( ! wp.media.galleryDefaults.link || 'post' === wp.media.galleryDefaults.link ) { 1896 #>selected="selected"<# } 1897 #>> 1898 Attachment Page </option> 1899 <option value="file" <# if ( 'file' === wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>> 1900 Media File </option> 1901 <option value="none" <# if ( 'none' === wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>> 1902 None </option> 1903 </select> 1904 </span> 1905 1906 <span class="setting"> 1907 <label for="gallery-settings-columns" class="name select-label-inline">Columns</label> 1908 <select id="gallery-settings-columns" class="columns" name="columns" 1909 data-setting="columns"> 1910 <option value="1" <# 1911 if ( 1 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1912 #>> 1913 1 </option> 1914 <option value="2" <# 1915 if ( 2 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1916 #>> 1917 2 </option> 1918 <option value="3" <# 1919 if ( 3 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1920 #>> 1921 3 </option> 1922 <option value="4" <# 1923 if ( 4 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1924 #>> 1925 4 </option> 1926 <option value="5" <# 1927 if ( 5 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1928 #>> 1929 5 </option> 1930 <option value="6" <# 1931 if ( 6 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1932 #>> 1933 6 </option> 1934 <option value="7" <# 1935 if ( 7 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1936 #>> 1937 7 </option> 1938 <option value="8" <# 1939 if ( 8 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1940 #>> 1941 8 </option> 1942 <option value="9" <# 1943 if ( 9 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1944 #>> 1945 9 </option> 1946 </select> 1947 </span> 1948 1949 <span class="setting"> 1950 <input type="checkbox" id="gallery-settings-random-order" data-setting="_orderbyRandom" /> 1951 <label for="gallery-settings-random-order" class="checkbox-label-inline">Random Order</label> 1952 </span> 1953 1954 <span class="setting size"> 1955 <label for="gallery-settings-size" class="name">Size</label> 1956 <select id="gallery-settings-size" class="size" name="size" 1957 data-setting="size" 1958 <# if ( data.userSettings ) { #> 1959 data-user-setting="imgsize" 1960 <# } #> 1961 > 1962 <option value="thumbnail"> 1963 Thumbnail </option> 1964 <option value="medium"> 1965 Medium </option> 1966 <option value="large"> 1967 Large </option> 1968 <option value="full"> 1969 Full Size </option> 1970 </select> 1971 </span> 1972 </script>
1972 1973 1974
1974<script type="text/html" id="tmpl-playlist-settings"> 1975 <h2>Playlist Settings</h2> 1976 1977 <# var emptyModel = _.isEmpty( data.model ), 1978 isVideo = 'video' === data.controller.get('library').props.get('type'); #> 1979 1980 <span class="setting"> 1981 <input type="checkbox" id="playlist-settings-show-list" data-setting="tracklist" <# if ( emptyModel ) { #> 1982 checked="checked" 1983 <# } #> /> 1984 <label for="playlist-settings-show-list" class="checkbox-label-inline"> 1985 <# if ( isVideo ) { #> 1986 Show Video List <# } else { #> 1987 Show Tracklist <# } #> 1988 </label> 1989 </span> 1990 1991 <# if ( ! isVideo ) { #> 1992 <span class="setting"> 1993 <input type="checkbox" id="playlist-settings-show-artist" data-setting="artists" <# if ( emptyModel ) { #> 1994 checked="checked" 1995 <# } #> /> 1996 <label for="playlist-settings-show-artist" class="checkbox-label-inline"> 1997 Show Artist Name in Tracklist </label> 1998 </span> 1999 <# } #> 2000 2001 <span class="setting"> 2002 <input type="checkbox" id="playlist-settings-show-images" data-setting="images" <# if ( emptyModel ) { #> 2003 checked="checked" 2004 <# } #> /> 2005 <label for="playlist-settings-show-images" class="checkbox-label-inline"> 2006 Show Images </label> 2007 </span> 2008 </script>
2008 2009 2010
2010<script type="text/html" id="tmpl-embed-link-settings"> 2011 <span class="setting link-text"> 2012 <label for="embed-link-settings-link-text" class="name">Link Text</label> 2013 <input type="text" id="embed-link-settings-link-text" class="alignment" data-setting="linkText" /> 2014 </span> 2015 <div class="embed-container" style="display: none;"> 2016 <div class="embed-preview"></div> 2017 </div> 2018 </script>
2018 2019 2020
2020<script type="text/html" id="tmpl-embed-image-settings"> 2021 <div class="wp-clearfix"> 2022 <div class="thumbnail"> 2023 <img src="{{ data.model.url }}" draggable="false" alt="" /> 2024 </div> 2025 </div> 2026 2027 <span class="setting alt-text has-description"> 2028 <label for="embed-image-settings-alt-text" class="name">Alternative Text</label> 2029 <textarea id="embed-image-settings-alt-text" data-setting="alt" aria-describedby="alt-text-description"></textarea> 2030 </span> 2031 <p class="description" id="alt-text-description"><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" target="_blank">Learn how to describe the purpose of the image<span class="screen-reader-text"> (opens in a new tab)</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>. Leave empty if the image is purely decorative.</p> 2032 2033 <span class="setting caption"> 2034 <label for="embed-image-settings-caption" class="name">Caption</label> 2035 <textarea id="embed-image-settings-caption" data-setting="caption"></textarea> 2036 </span> 2037 2038 <fieldset class="setting-group"> 2039 <legend class="name">Align</legend> 2040 <span class="setting align"> 2041 <span class="button-group button-large" data-setting="align"> 2042 <button class="button" value="left"> 2043 Left </button> 2044 <button class="button" value="center"> 2045 Center </button> 2046 <button class="button" value="right"> 2047 Right </button> 2048 <button class="button active" value="none"> 2049 None </button> 2050 </span> 2051 </span> 2052 </fieldset> 2053 2054 <fieldset class="setting-group"> 2055 <legend class="name">Link To</legend> 2056 <span class="setting link-to"> 2057 <span class="button-group button-large" data-setting="link"> 2058 <button class="button" value="file"> 2059 Image URL </button> 2060 <button class="button" value="custom"> 2061 Custom URL </button> 2062 <button class="button active" value="none"> 2063 None </button> 2064 </span> 2065 </span> 2066 <span class="setting"> 2067 <label for="embed-image-settings-link-to-custom" class="name">URL</label> 2068 <input type="text" id="embed-image-settings-link-to-custom" class="link-to-custom" data-setting="linkUrl" /> 2069 </span> 2070 </fieldset> 2071 </script>
2071 2072 2073
2073<script type="text/html" id="tmpl-image-details"> 2074 <div class="media-embed"> 2075 <div class="embed-media-settings"> 2076 <div class="column-settings"> 2077 <span class="setting alt-text has-description"> 2078 <label for="image-details-alt-text" class="name">Alternative Text</label> 2079 <textarea id="image-details-alt-text" data-setting="alt" aria-describedby="alt-text-description">{{ data.model.alt }}</textarea> 2080 </span> 2081 <p class="description" id="alt-text-description"><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" target="_blank">Learn how to describe the purpose of the image<span class="screen-reader-text"> (opens in a new tab)</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>. Leave empty if the image is purely decorative.</p> 2082 2083 <span class="setting caption"> 2084 <label for="image-details-caption" class="name">Caption</label> 2085 <textarea id="image-details-caption" data-setting="caption">{{ data.model.caption }}</textarea> 2086 </span> 2087 2088 <h2>Display Settings</h2> 2089 <fieldset class="setting-group"> 2090 <legend class="legend-inline">Align</legend> 2091 <span class="setting align"> 2092 <span class="button-group button-large" data-setting="align"> 2093 <button class="button" value="left"> 2094 Left </button> 2095 <button class="button" value="center"> 2096 Center </button> 2097 <button class="button" value="right"> 2098 Right </button> 2099 <button class="button active" value="none"> 2100 None </button> 2101 </span> 2102 </span> 2103 </fieldset> 2104 2105 <# if ( data.attachment ) { #> 2106 <# if ( 'undefined' !== typeof data.attachment.sizes ) { #> 2107 <span class="setting size"> 2108 <label for="image-details-size" class="name">Size</label> 2109 <select id="image-details-size" class="size" name="size" 2110 data-setting="size" 2111 <# if ( data.userSettings ) { #> 2112 data-user-setting="imgsize" 2113 <# } #>> 2114 <# 2115 var size = data.sizes['thumbnail']; 2116 if ( size ) { #> 2117 <option value="thumbnail"> 2118 Thumbnail – {{ size.width }} × {{ size.height }} 2119 </option> 2120 <# } #> 2121 <# 2122 var size = data.sizes['medium']; 2123 if ( size ) { #> 2124 <option value="medium"> 2125 Medium – {{ size.width }} × {{ size.height }} 2126 </option> 2127 <# } #> 2128 <# 2129 var size = data.sizes['large']; 2130 if ( size ) { #> 2131 <option value="large"> 2132 Large – {{ size.width }} × {{ size.height }} 2133 </option> 2134 <# } #> 2135 <# 2136 var size = data.sizes['full']; 2137 if ( size ) { #> 2138 <option value="full"> 2139 Full Size – {{ size.width }} × {{ size.height }} 2140 </option> 2141 <# } #> 2142 <option value="custom"> 2143 Custom Size </option> 2144 </select> 2145 </span> 2146 <# } #> 2147 <div class="custom-size wp-clearfix<# if ( data.model.size !== 'custom' ) { #> hidden<# } #>"> 2148 <span class="custom-size-setting"> 2149 <label for="image-details-size-width">Width</label> 2150 <input type="number" id="image-details-size-width" aria-describedby="image-size-desc" data-setting="customWidth" step="1" value="{{ data.model.customWidth }}" /> 2151 </span> 2152 <span class="sep" aria-hidden="true">×</span> 2153 <span class="custom-size-setting"> 2154 <label for="image-details-size-height">Height</label> 2155 <input type="number" id="image-details-size-height" aria-describedby="image-size-desc" data-setting="customHeight" step="1" value="{{ data.model.customHeight }}" /> 2156 </span> 2157 <p id="image-size-desc" class="description">Image size in pixels</p> 2158 </div> 2159 <# } #> 2160 2161 <span class="setting link-to"> 2162 <label for="image-details-link-to" class="name">Link To</label> 2163 <select id="image-details-link-to" data-setting="link"> 2164 <# if ( data.attachment ) { #> 2165 <option value="file"> 2166 Media File </option> 2167 <option value="post"> 2168 Attachment Page </option> 2169 <# } else { #> 2170 <option value="file"> 2171 Image URL </option> 2172 <# } #> 2173 <option value="custom"> 2174 Custom URL </option> 2175 <option value="none"> 2176 None </option> 2177 </select> 2178 </span> 2179 <span class="setting"> 2180 <label for="image-details-link-to-custom" class="name">URL</label> 2181 <input type="text" id="image-details-link-to-custom" class="link-to-custom" data-setting="linkUrl" /> 2182 </span> 2183 2184 <div class="advanced-section"> 2185 <h2><button type="button" class="button-link advanced-toggle">Advanced Options</button></h2> 2186 <div class="advanced-settings hidden"> 2187 <div class="advanced-image"> 2188 <span class="setting title-text"> 2189 <label for="image-details-title-attribute" class="name">Image Title Attribute</label> 2190 <input type="text" id="image-details-title-attribute" data-setting="title" value="{{ data.model.title }}" /> 2191 </span> 2192 <span class="setting extra-classes"> 2193 <label for="image-details-css-class" class="name">Image CSS Class</label> 2194 <input type="text" id="image-details-css-class" data-setting="extraClasse
2194s" value="{{ data.model.extraClasses }}" /> 2195 </span> 2196 </div> 2197 <div class="advanced-link"> 2198 <span class="setting link-target"> 2199 <input type="checkbox" id="image-details-link-target" data-setting="linkTargetBlank" value="_blank" <# if ( data.model.linkTargetBlank ) { #>checked="checked"<# } #>> 2200 <label for="image-details-link-target" class="checkbox-label">Open link in a new tab</label> 2201 </span> 2202 <span class="setting link-rel"> 2203 <label for="image-details-link-rel" class="name">Link Rel</label> 2204 <input type="text" id="image-details-link-rel" data-setting="linkRel" value="{{ data.model.linkRel }}" /> 2205 </span> 2206 <span class="setting link-class-name"> 2207 <label for="image-details-link-css-class" class="name">Link CSS Class</label> 2208 <input type="text" id="image-details-link-css-class" data-setting="linkClassName" value="{{ data.model.linkClassName }}" /> 2209 </span> 2210 </div> 2211 </div> 2212 </div> 2213 </div> 2214 <div class="column-image"> 2215 <div class="image"> 2216 <img src="{{ data.model.url }}" draggable="false" alt="" /> 2217 <# if ( data.attachment && window.imageEdit ) { #> 2218 <div class="actions"> 2219 <input type="button" class="edit-attachment button" value="Edit Original" /> 2220 <input type="button" class="replace-attachment button" value="Replace" /> 2221 </div> 2222 <# } #> 2223 </div> 2224 </div> 2225 </div> 2226 </div> 2227 </script>
2227 2228 2229
2229<script type="text/html" id="tmpl-image-editor"> 2230 <div id="media-head-{{ data.id }}"></div> 2231 <div id="image-editor-{{ data.id }}"></div> 2232 </script>
2232 2233 2234
2234<script type="text/html" id="tmpl-audio-details"> 2235 <# var ext, html5types = { 2236 mp3: wp.media.view.settings.embedMimes.mp3, 2237 ogg: wp.media.view.settings.embedMimes.ogg 2238 }; #> 2239 2240 <div class="media-embed media-embed-details"> 2241 <div class="embed-media-settings embed-audio-settings"> 2242 <audio crossorigin="anonymous" style="visibility: hidden" 2243 controls 2244 class="wp-audio-shortcode" 2245 width="{{ _.isUndefined( data.model.width ) ? 400 : data.model.width }}" 2246 preload="{{ _.isUndefined( data.model.preload ) ? 'none' : data.model.preload }}" 2247 <# 2248 if ( ! _.isUndefined( data.model.autoplay ) && data.model.autoplay ) { 2249 #> autoplay<# 2250 } 2251 if ( ! _.isUndefined( data.model.loop ) && data.model.loop ) { 2252 #> loop<# 2253 } 2254 #> 2255> 2256 <# if ( ! _.isEmpty( data.model.src ) ) { #> 2257 <source src="{{ data.model.src }}" type="{{ wp.media.view.settings.embedMimes[ data.model.src.split('.').pop() ] }}" /> 2258 <# } #> 2259 2260 <# if ( ! _.isEmpty( data.model.mp3 ) ) { #> 2261 <source src="{{ data.model.mp3 }}" type="{{ wp.media.view.settings.embedMimes[ 'mp3' ] }}" /> 2262 <# } #> 2263 <# if ( ! _.isEmpty( data.model.ogg ) ) { #> 2264 <source src="{{ data.model.ogg }}" type="{{ wp.media.view.settings.embedMimes[ 'ogg' ] }}" /> 2265 <# } #> 2266 <# if ( ! _.isEmpty( data.model.flac ) ) { #> 2267 <source src="{{ data.model.flac }}" type="{{ wp.media.view.settings.embedMimes[ 'flac' ] }}" /> 2268 <# } #> 2269 <# if ( ! _.isEmpty( data.model.m4a ) ) { #> 2270 <source src="{{ data.model.m4a }}" type="{{ wp.media.view.settings.embedMimes[ 'm4a' ] }}" /> 2271 <# } #> 2272 <# if ( ! _.isEmpty( data.model.wav ) ) { #> 2273 <source src="{{ data.model.wav }}" type="{{ wp.media.view.settings.embedMimes[ 'wav' ] }}" /> 2274 <# } #> 2275 </audio> 2276 2277 <# if ( ! _.isEmpty( data.model.src ) ) { 2278 ext = data.model.src.split('.').pop(); 2279 if ( html5types[ ext ] ) { 2280 delete html5types[ ext ]; 2281 } 2282 #> 2283 <span class="setting"> 2284 <label for="audio-details-source" class="name">URL</label> 2285 <input type="text" id="audio-details-source" readonly data-setting="src" value="{{ data.model.src }}" /> 2286 <button type="button" class="button-link remove-setting">Remove audio source</button> 2287 </span> 2288 <# } #> 2289 <# if ( ! _.isEmpty( data.model.mp3 ) ) { 2290 if ( ! _.isUndefined( html5types.mp3 ) ) { 2291 delete html5types.mp3; 2292 } 2293 #> 2294 <span class="setting"> 2295 <label for="audio-details-mp3-source" class="name">MP3</label> 2296 <input type="text" id="audio-details-mp3-source" readonly data-setting="mp3" value="{{ data.model.mp3 }}" /> 2297 <button type="button" class="button-link remove-setting">Remove audio source</button> 2298 </span> 2299 <# } #> 2300 <# if ( ! _.isEmpty( data.model.ogg ) ) { 2301 if ( ! _.isUndefined( html5types.ogg ) ) { 2302 delete html5types.ogg; 2303 } 2304 #> 2305 <span class="setting"> 2306 <label for="audio-details-ogg-source" class="name">OGG</label> 2307 <input type="text" id="audio-details-ogg-source" readonly data-setting="ogg" value="{{ data.model.ogg }}" /> 2308 <button type="button" class="button-link remove-setting">Remove audio source</button> 2309 </span> 2310 <# } #> 2311 <# if ( ! _.isEmpty( data.model.flac ) ) { 2312 if ( ! _.isUndefined( html5types.flac ) ) { 2313 delete html5types.flac; 2314 } 2315 #> 2316 <span class="setting"> 2317 <label for="audio-details-flac-source" class="name">FLAC</label> 2318 <input type="text" id="audio-details-flac-source" readonly data-setting="flac" value="{{ data.model.flac }}" /> 2319 <button type="button" class="button-link remove-setting">Remove audio source</button> 2320 </span> 2321 <# } #> 2322 <# if ( ! _.isEmpty( data.model.m4a ) ) { 2323 if ( ! _.isUndefined( html5types.m4a ) ) { 2324 delete html5types.m4a; 2325 } 2326 #> 2327 <span class="setting"> 2328 <label for="audio-details-m4a-source" class="name">M4A</label> 2329 <input type="text" id="audio-details-m4a-source" readonly data-setting="m4a" value="{{ data.model.m4a }}" /> 2330 <button type="button" class="button-link remove-setting">Remove audio source</button> 2331 </span> 2332 <# } #> 2333 <# if ( ! _.isEmpty( data.model.wav ) ) { 2334 if ( ! _.isUndefined( html5types.wav ) ) { 2335 delete html5types.wav; 2336 } 2337 #> 2338 <span class="setting"> 2339 <label for="audio-details-wav-source" class="name">WAV</label> 2340 <input type="text" id="audio-details-wav-source" readonly data-setting="wav" value="{{ data.model.wav }}" /> 2341 <button type="button" class="button-link remove-setting">Remove audio source</button> 2342 </span> 2343 <# } #> 2344 2345 <# if ( ! _.isEmpty( html5types ) ) { #> 2346 <fieldset class="setting-group"> 2347 <legend class="name">Add alternate sources for maximum HTML5 playback</legend> 2348 <span class="setting"> 2349 <span class="button-large"> 2350 <# _.each( html5types, function (mime, type) { #> 2351 <button class="button add-media-source" data-mime="{{ mime }}">{{ type }}</button> 2352 <# } ) #> 2353 </span> 2354 </span> 2355 </fieldset> 2356 <# } #> 2357 2358 <fieldset class="setting-group"> 2359 <legend class="name">Preload</legend> 2360 <span class="setting preload"> 2361 <span class="button-group button-large" data-setting="preload"> 2362 <button class="button" value="auto">Auto</button> 2363 <button class="button" value="metadata">Metadata</button> 2364 <button class="button active" value="none">None</button> 2365 </span> 2366 </span> 2367 </fieldset> 2368 2369 <span class="setting-group"> 2370 <span class="setting checkbox-setting autoplay"> 2371 <input type="checkbox" id="audio-details-autoplay" data-setting="autoplay" /> 2372 <label for="audio-details-autoplay" class="checkbox-label">Autoplay</label> 2373 </span> 2374 2375 <span class="setting checkbox-setting"> 2376 <input type="checkbox" id="audio-details-loop" data-setting="loop" /> 2377 <label for="audio-details-loop" class="checkbox-label">Loop</label> 2378 </span> 2379 </span> 2380 </div> 2381 </div> 2382 </script>
2382 2383 2384
2384<script type="text/html" id="tmpl-video-details"> 2385 <# var ext, html5types = { 2386 mp4: wp.media.view.settings.embedMimes.mp4, 2387 ogv: wp.media.view.settings.embedMimes.ogv, 2388 webm: wp.media.view.settings.embedMimes.webm 2389 }; #> 2390 2391 <div class="media-embed media-embed-details"> 2392 <div class="embed-media-settings embed-video-settings"> 2393 <div class="wp-video-holder"> 2394 <# 2395 var w = ! data.model.width || data.model.width > 640 ? 640 : data.model.width, 2396 h = ! data.model.height ? 360 : data.model.height; 2397 2398 if ( data.model.width && w !== data.model.width ) { 2399 h = Math.ceil( ( h * w ) / data.model.width ); 2400 } 2401 #> 2402 2403 <# var w_rule = '', classes = [], 2404 w, h, settings = wp.media.view.settings, 2405 isYouTube = isVimeo = false; 2406 2407 if ( ! _.isEmpty( data.model.src ) ) { 2408 isYouTube = data.model.src.match(/youtube|youtu\.be/); 2409 isVimeo = -1 !== data.model.src.indexOf('vimeo'); 2410 } 2411 2412 if ( settings.contentWidth && data.model.width >= settings.contentWidth ) { 2413 w = settings.contentWidth; 2414 } else { 2415 w = data.model.width; 2416 } 2417 2418 if ( w !== data.model.width ) { 2419 h = Math.ceil( ( data.model.height * w ) / data.model.width ); 2420 } else { 2421 h = data.model.height; 2422 } 2423 2424 if ( w ) { 2425 w_rule = 'width: ' + w + 'px; '; 2426 } 2427 2428 if ( isYouTube ) { 2429 classes.push( 'youtube-video' ); 2430 } 2431 2432 if ( isVimeo ) { 2433 classes.push( 'vimeo-video' ); 2434 } 2435 2436#> 2437<div style="{{ w_rule }}" class="wp-video"> 2438<video crossorigin="anonymous" controls 2439 class="wp-video-shortcode {{ classes.join( ' ' ) }}" 2440 <# if ( w ) { #>width="{{ w }}"<# } #> 2441 <# if ( h ) { #>height="{{ h }}"<# } #> 2442 <# 2443 if ( ! _.isUndefined( data.model.poster ) && data.model.poster ) { 2444 #> poster="{{ data.model.poster }}"<# 2445 } #> 2446 preload ="{{ _.isUndefined( data.model.preload ) ? 'metadata' : data.model.preload }}" 2447 <# 2448 if ( ! _.isUndefined( data.model.autoplay ) && data.model.autoplay ) { 2449 #> autoplay<# 2450 } 2451 if ( ! _.isUndefined( data.model.loop ) && data.model.loop ) { 2452 #> loop<# 2453 } 2454 #> 2455> 2456 <# if ( ! _.isEmpty( data.model.src ) ) { 2457 if ( isYouTube ) { #> 2458 <source src="{{ data.model.src }}" type="video/youtube" /> 2459 <# } else if ( isVimeo ) { #> 2460 <source src="{{ data.model.src }}" type="video/vimeo" /> 2461 <# } else { #> 2462 <source src="{{ data.model.src }}" type="{{ settings.embedMimes[ data.model.src.split('.').pop() ] }}" /> 2463 <# } 2464 } #> 2465 2466 <# if ( data.model.mp4 ) { #> 2467 <source src="{{ data.model.mp4 }}" type="{{ settings.embedMimes[ 'mp4' ] }}" /> 2468 <# } #> 2469 <# if ( data.model.m4v ) { #> 2470 <source src="{{ data.model.m4v }}" type="{{ settings.embedMimes[ 'm4v' ] }}" /> 2471 <# } #> 2472 <# if ( data.model.webm ) { #> 2473 <source src="{{ data.model.webm }}" type="{{ settings.embedMimes[ 'webm' ] }}" /> 2474 <# } #> 2475 <# if ( data.model.ogv ) { #> 2476 <source src="{{ data.model.ogv }}" type="{{ settings.embedMimes[ 'ogv' ] }}" /> 2477 <# } #> 2478 <# if ( data.model.flv ) { #> 2479 <source src="{{ data.model.flv }}" type="{{ settings.embedMimes[ 'flv' ] }}" /> 2480 <# } #> 2481 {{{ data.model.content }}} 2482</video> 2483</div> 2484 2485 <# if ( ! _.isEmpty( data.model.src ) ) { 2486 ext = data.model.src.split('.').pop(); 2487 if ( html5types[ ext ] ) { 2488 delete html5types[ ext ]; 2489 } 2490 #> 2491 <span class="setting"> 2492 <label for="video-details-source" class="name">URL</label> 2493 <input type="text" id="video-details-source" readonly data-setting="src" value="{{ data.model.src }}" /> 2494 <button type="button" class="button-link remove-setting">Remove video source</button> 2495 </span> 2496 <# } #> 2497 <# if ( ! _.isEmpty( data.model.mp4 ) ) { 2498 if ( ! _.isUndefined( html5types.mp4 ) ) { 2499 delete html5types.mp4; 2500 } 2501 #> 2502 <span class="setting"> 2503 <label for="video-details-mp4-source" class="name">MP4</label> 2504 <input type="text" id="video-details-mp4-source" readonly data-setting="mp4" value="{{ data.model.mp4 }}" /> 2505 <button type="button" class="button-link remove-setting">Remove video source</button> 2506 </span> 2507 <# } #> 2508 <# if ( ! _.isEmpty( data.model.m4v ) ) { 2509 if ( ! _.isUndefined( html5types.m4v ) ) { 2510 delete html5types.m4v; 2511 } 2512 #> 2513 <span class="setting">
2514 <label for="video-details-m4v-source" class="name">M4V</label> 2515 <input type="text" id="video-details-m4v-source" readonly data-setting="m4v" value="{{ data.model.m4v }}" /> 2516 <button type="button" class="button-link remove-setting">Remove video source</button> 2517 </span> 2518 <# } #> 2519 <# if ( ! _.isEmpty( data.model.webm ) ) { 2520 if ( ! _.isUndefined( html5types.webm ) ) { 2521 delete html5types.webm; 2522 } 2523 #> 2524 <span class="setting"> 2525 <label for="video-details-webm-source" class="name">WEBM</label> 2526 <input type="text" id="video-details-webm-source" readonly data-setting="webm" value="{{ data.model.webm }}" /> 2527 <button type="button" class="button-link remove-setting">Remove video source</button> 2528 </span> 2529 <# } #> 2530 <# if ( ! _.isEmpty( data.model.ogv ) ) { 2531 if ( ! _.isUndefined( html5types.ogv ) ) { 2532 delete html5types.ogv; 2533 } 2534 #> 2535 <span class="setting"> 2536 <label for="video-details-ogv-source" class="name">OGV</label> 2537 <input type="text" id="video-details-ogv-source" readonly data-setting="ogv" value="{{ data.model.ogv }}" /> 2538 <button type="button" class="button-link remove-setting">Remove video source</button> 2539 </span> 2540 <# } #> 2541 <# if ( ! _.isEmpty( data.model.flv ) ) { 2542 if ( ! _.isUndefined( html5types.flv ) ) { 2543 delete html5types.flv; 2544 } 2545 #> 2546 <span class="setting"> 2547 <label for="video-details-flv-source" class="name">FLV</label> 2548 <input type="text" id="video-details-flv-source" readonly data-setting="flv" value="{{ data.model.flv }}" /> 2549 <button type="button" class="button-link remove-setting">Remove video source</button> 2550 </span> 2551 <# } #> 2552 </div> 2553 2554 <# if ( ! _.isEmpty( html5types ) ) { #> 2555 <fieldset class="setting-group"> 2556 <legend class="name">Add alternate sources for maximum HTML5 playback</legend> 2557 <span class="setting"> 2558 <span class="button-large"> 2559 <# _.each( html5types, function (mime, type) { #> 2560 <button class="button add-media-source" data-mime="{{ mime }}">{{ type }}</button> 2561 <# } ) #> 2562 </span> 2563 </span> 2564 </fieldset> 2565 <# } #> 2566 2567 <# if ( ! _.isEmpty( data.model.poster ) ) { #> 2568 <span class="setting"> 2569 <label for="video-details-poster-image" class="name">Poster Image</label> 2570 <input type="text" id="video-details-poster-image" readonly data-setting="poster" value="{{ data.model.poster }}" /> 2571 <button type="button" class="button-link remove-setting">Remove poster image</button> 2572 </span> 2573 <# } #> 2574 2575 <fieldset class="setting-group"> 2576 <legend class="name">Preload</legend> 2577 <span class="setting preload"> 2578 <span class="button-group button-large" data-setting="preload"> 2579 <button class="button" value="auto">Auto</button> 2580 <button class="button" value="metadata">Metadata</button> 2581 <button class="button active" value="none">None</button> 2582 </span> 2583 </span> 2584 </fieldset> 2585 2586 <span class="setting-group"> 2587 <span class="setting checkbox-setting autoplay"> 2588 <input type="checkbox" id="video-details-autoplay" data-setting="autoplay" /> 2589 <label for="video-details-autoplay" class="checkbox-label">Autoplay</label> 2590 </span> 2591 2592 <span class="setting checkbox-setting"> 2593 <input type="checkbox" id="video-details-loop" data-setting="loop" /> 2594 <label for="video-details-loop" class="checkbox-label">Loop</label> 2595 </span> 2596 </span> 2597 2598 <span class="setting" data-setting="content"> 2599 <# 2600 var content = ''; 2601 if ( ! _.isEmpty( data.model.content ) ) { 2602 var tracks = jQuery( data.model.content ).filter( 'track' ); 2603 _.each( tracks.toArray(), function( track, index ) { 2604 content += track.outerHTML; #> 2605 <label for="video-details-track-{{ index }}" class="name">Tracks (subtitles, captions, descriptions, chapters, or metadata)</label> 2606 <input class="content-track" type="text" id="video-details-track-{{ index }}" aria-describedby="video-details-track-desc-{{ index }}" value="{{ track.outerHTML }}" />
2607 <span class="description" id="video-details-track-desc-{{ index }}"> 2608 The srclang, label, and kind values can be edited to set the video track language and kind. </span> 2609 <button type="button" class="button-link remove-setting remove-track">Remove video track</button><br /> 2610 <# } ); #> 2611 <# } else { #> 2612 <span class="name">Tracks (subtitles, captions, descriptions, chapters, or metadata)</span><br /> 2613 <em>There are no associated subtitles.</em> 2614 <# } #> 2615 <textarea class="hidden content-setting">{{ content }}</textarea> 2616 </span> 2617 </div> 2618 </div> 2619 </script>
2619 2620 2621
2621<script type="text/html" id="tmpl-editor-gallery"> 2622 <# if ( data.attachments.length ) { #> 2623 <div class="gallery gallery-columns-{{ data.columns }}"> 2624 <# _.each( data.attachments, function( attachment, index ) { #> 2625 <dl class="gallery-item"> 2626 <dt class="gallery-icon"> 2627 <# if ( attachment.thumbnail ) { #> 2628 <img src="{{ attachment.thumbnail.url }}" width="{{ attachment.thumbnail.width }}" height="{{ attachment.thumbnail.height }}" alt="{{ attachment.alt }}" /> 2629 <# } else { #> 2630 <img src="{{ attachment.url }}" alt="{{ attachment.alt }}" /> 2631 <# } #> 2632 </dt> 2633 <# if ( attachment.caption ) { #> 2634 <dd class="wp-caption-text gallery-caption"> 2635 {{{ data.verifyHTML( attachment.caption ) }}} 2636 </dd> 2637 <# } #> 2638 </dl> 2639 <# if ( index % data.columns === data.columns - 1 ) { #> 2640 <br style="clear: both;" /> 2641 <# } #> 2642 <# } ); #> 2643 </div> 2644 <# } else { #> 2645 <div class="wpview-error"> 2646 <div class="dashicons dashicons-format-gallery"></div><p>No items found.</p> 2647 </div> 2648 <# } #> 2649 </script>
2649 2650 2651
2651<script type="text/html" id="tmpl-crop-content"> 2652 <img class="crop-image" src="{{ data.url }}" alt="Image crop area preview. Requires mouse interaction." /> 2653 <div class="upload-errors"></div> 2654 </script>
2654 2655 2656
2656<script type="text/html" id="tmpl-site-icon-preview-crop"> 2657 <style> 2658 :root{ 2659 --site-icon-url: url( "{{ data.url }}" ); 2660 } 2661 </style> 2662 <h2>Site Icon Preview</h2> 2663 <p>As an app icon and a browser icon.</p> 2664 <div class="site-icon-preview crop"> 2665 <div class="image-preview-wrap app-icon-preview"> 2666 <img id="preview-app-icon" src="{{ data.url }}" class="app-icon-preview" alt="Preview as an app icon" /> 2667 </div> 2668 <div class="site-icon-preview-browser"> 2669 <svg role="img" aria-hidden="true" fill="none" xmlns="http://www.w3.org/2000/svg" class="browser-buttons"><path fill-rule="evenodd" clip-rule="evenodd" d="M0 20a6 6 0 1 1 12 0 6 6 0 0 1-12 0Zm18 0a6 6 0 1 1 12 0 6 6 0 0 1-12 0Zm24-6a6 6 0 1 0 0 12 6 6 0 0 0 0-12Z" /></svg> 2670 <div class="site-icon-preview-tab"> 2671 <div class="image-preview-wrap browser"> 2672 <img id="preview-favicon" src="{{ data.url }}" class="browser-icon-preview" alt="Preview as a browser icon" /> 2673 </div> 2674 <div class="site-icon-preview-site-title" aria-hidden="true"><# print( 'EV Engineering & Infrastructure' ) #></div> 2675 <svg role="img" aria-hidden="true" fill="none" xmlns="http://www.w3.org/2000/svg" class="close-button"> 2676 <path d="M12 13.0607L15.7123 16.773L16.773 15.7123L13.0607 12L16.773 8.28772L15.7123 7.22706L12 10.9394L8.28771 7.22705L7.22705 8.28771L10.9394 12L7.22706 15.7123L8.28772 16.773L12 13.0607Z" /> 2677 </svg> 2678 </div> 2679 </div> 2680 </div> 2681 </div> 2682 </script>
2682 2683 2684
2684<script id="wtwh-ai-search-script-js" src="https://scripts.wtwhmedia.com/developer/ai_search/env/prod/index.js?ver=1790659979"></script>
vendor: 1 bytes, line 2684
2684
2685<script id="thickbox-js-extra"> 2686var thickboxL10n = {"next":"Next \u003E","prev":"\u003C Prev","image":"Image","of":"of","close":"Close","noiframes":"This feature requires inline frames. You have iframes disabled or your browser does not support them.","loadingAnimation":"https://www.evengineeringonline.com/wp-includes/js/thickbox/loadingAnimation.gif"}; 2687//# sourceURL=thickbox-js-extra 2688</script>
vendor: 1 bytes, line 2688
2688
2689<script id="thickbox-js" src="https://www.evengineeringonline.com/wp-includes/js/thickbox/thickbox.js?ver=3.1-20121105"></script>
vendor: 1 bytes, line 2689
2689
2690<script id="underscore-js" src="https://www.evengineeringonline.com/wp-includes/js/underscore.min.js?ver=1.13.8"></script>
vendor: 1 bytes, line 2690
2690
2691<script id="shortcode-js" src="https://www.evengineeringonline.com/wp-includes/js/shortcode.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2691
2691
2692<script id="media-upload-js" src="https://www.evengineeringonline.com/wp-admin/js/media-upload.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2692
2692
2693<script id="backbone-js" src="https://www.evengineeringonline.com/wp-includes/js/backbone.min.js?ver=1.6.1"></script>
vendor: 1 bytes, line 2693
2693
2694<script id="wp-util-js-extra"> 2695var _wpUtilSettings = {"ajax":{"url":"/wp-admin/admin-ajax.php"}}; 2696//# sourceURL=wp-util-js-extra 2697</script>
vendor: 1 bytes, line 2697
2697
2698<script id="wp-util-js" src="https://www.evengineeringonline.com/wp-includes/js/wp-util.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2698
2698
2699<script id="wp-backbone-js" src="https://www.evengineeringonline.com/wp-includes/js/wp-backbone.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2699
2699
2700<script id="media-models-js-extra"> 2701var _wpMediaModelsL10n = {"settings":{"ajaxurl":"/wp-admin/admin-ajax.php","post":{"id":0}}}; 2702//# sourceURL=media-models-js-extra 2703</script>
vendor: 1 bytes, line 2703
2703
2704<script id="media-models-js" src="https://www.evengineeringonline.com/wp-includes/js/media-models.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2704
2704
2705<script id="wp-plupload-js-extra"> 2706var pluploadL10n = {"queue_limit_exceeded":"You have attempted to queue too many files.","file_exceeds_size_limit":"%s exceeds the maximum upload size for this site.","zero_byte_file":"This file is empty. Please try another.","invalid_filetype":"This file cannot be processed by the web server.","not_an_image":"This file is not an image. Please try another.","image_memory_exceeded":"Memory exceeded. Please try another smaller file.","image_dimensions_exceeded":"This is larger than the maximum size. Please try another.","default_error":"An error occurred in the upload. Please try again later.","missing_upload_url":"There was a configuration error. Please contact the server administrator.","upload_limit_exceeded":"You may only upload 1 file.","http_error":"Unexpected response from the server. The file may have been uploaded successfully. Check in the Media Library or reload the page.","http_error_image":"The server cannot process the image. This can happen if the server is busy or does not have enough resources to complete the task. Uploading a smaller image may help. Suggested maximum size is 2560 pixels.","upload_failed":"Upload failed.","big_upload_failed":"Please try uploading this file with the %1$sbrowser uploader%2$s.","big_upload_queued":"%s exceeds the maximum upload size for the multi-file uploader when used in your browser.","io_error":"IO error.","security_error":"Security error.","file_cancelled":"File canceled.","upload_stopped":"Upload stopped.","dismiss":"Dismiss","crunching":"Crunching\u2026","deleted":"moved to the Trash.","error_uploading":"\u201c%s\u201d has failed to upload.","unsupported_image":"The server cannot process HEIC images. Convert it to JPEG before uploading.","noneditable_image":"The web server cannot generate responsive image sizes for this image. Convert it to JPEG or PNG before uploading.","file_url_copied":"The file URL has been copied to your clipboard"}; 2707var _wpPluploadSettings = {"defaults":{"file_data_name":"async-upload","url":"/wp-admin/async-upload.php","filters":{"max_file_size":"52428800b","mime_types":[{"extensions":"jpg,jpeg,jpe,gif,png,bmp,tiff,tif,webp,avif,ico,heic,heif,heics,heifs,asf,asx,wmv,wmx,wm,avi,divx,flv,mov,qt,mpeg,mpg,mpe,mp4,m4v,ogv,webm,mkv,3gp,3gpp,3g2,3gp2,txt,asc,c,cc,h,srt,csv,tsv,ics,rtx,css,vtt,dfxp,mp3,m4a,m4b,aac,ra,ram,wav,x-wav,ogg,oga,flac,mid,midi,wma,wax,mka,rtf,pdf,class,tar,zip,gz,gzip,rar,7z,psd,xcf,doc,pot,pps,ppt,wri,xla,xls,xlt,xlw,mdb,mpp,docx,docm,dotx,dotm,xlsx,xlsm,xlsb,xltx,xltm,xlam,pptx,pptm,ppsx,ppsm,potx,potm,ppam,sldx,sldm,onetoc,onetoc2,onetmp,onepkg,oxps,xps,odt,odp,ods,odg,odc,odb,odf,wp,wpd,key,numbers,pages"}]},"multipart_params":{"action":"upload-attachment","_wpnonce":"ad9d4e6d50"}},"browser":{"mobile":false,"supported":true},"limitExceeded":false}; 2708//# sourceURL=wp-plupload-js-extra 2709</script>
vendor: 1 bytes, line 2709
2709
2710<script id="wp-plupload-js" src="https://www.evengineeringonline.com/wp-includes/js/plupload/wp-plupload.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2710
2710
2711<script id="jquery-ui-core-js-before"> 2712jQuery.uiBackCompat = true; 2713//# sourceURL=jquery-ui-core-js-before 2714</script>
vendor: 1 bytes, line 2714
2714
2715<script id="jquery-ui-core-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2715
2715
2716<script id="jquery-ui-mouse-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/ui/mouse.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2716
2716
2717<script id="jquery-ui-sortable-js" src="https://www.evengineeringonline.com/wp-includes/js/jquery/ui/sortable.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2717
2717
2718<script id="mediaelement-core-js-before"> 2719var mejsL10n = {"language":"en","strings":{"mejs.download-file":"Download File","mejs.install-flash":"You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/","mejs.fullscreen":"Fullscreen","mejs.play":"Play","mejs.pause":"Pause","mejs.time-slider":"Time Slider","mejs.time-help-text":"Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.","mejs.live-broadcast":"Live Broadcast","mejs.volume-help-text":"Use Up/Down Arrow keys to increase or decrease volume.","mejs.unmute":"Unmute","mejs.mute":"Mute","mejs.volume-slider":"Volume Slider","mejs.video-player":"Video Player","mejs.audio-player":"Audio Player","mejs.captions-subtitles":"Captions/Subtitles","mejs.captions-chapters":"Chapters","mejs.none":"None","mejs.afrikaans":"Afrikaans","mejs.albanian":"Albanian","mejs.arabic":"Arabic","mejs.belarusian":"Belarusian","mejs.bulgarian":"Bulgarian","mejs.catalan":"Catalan","mejs.chinese":"Chinese","mejs.chinese-simplified":"Chinese (Simplified)","mejs.chinese-traditional":"Chinese (Traditional)","mejs.croatian":"Croatian","mejs.czech":"Czech","mejs.danish":"Danish","mejs.dutch":"Dutch","mejs.english":"English","mejs.estonian":"Estonian","mejs.filipino":"Filipino","mejs.finnish":"Finnish","mejs.french":"French","mejs.galician":"Galician","mejs.german":"German","mejs.greek":"Greek","mejs.haitian-creole":"Haitian Creole","mejs.hebrew":"Hebrew","mejs.hindi":"Hindi","mejs.hungarian":"Hungarian","mejs.icelandic":"Icelandic","mejs.indonesian":"Indonesian","mejs.irish":"Irish","mejs.italian":"Italian","mejs.japanese":"Japanese","mejs.korean":"Korean","mejs.latvian":"Latvian","mejs.lithuanian":"Lithuanian","mejs.macedonian":"Macedonian","mejs.malay":"Malay","mejs.maltese":"Maltese","mejs.norwegian":"Norwegian","mejs.persian":"Persian","mejs.polish":"Polish","mejs.portuguese":"Portuguese","mejs.romanian":"Romanian","mejs.russian":"Russian","mejs.serbian":"Serbian","mejs.slovak":"Slovak","mejs.slovenian":"Slovenian","mejs.spanish":"Spanish","mejs.swahili":"Swahili","mejs.swedish":"Swedish","mejs.tagalog":"Tagalog","mejs.thai":"Thai","mejs.turkish":"Turkish","mejs.ukrainian":"Ukrainian","mejs.vietnamese":"Vietnamese","mejs.welsh":"Welsh","mejs.yiddish":"Yiddish"}}; 2720//# sourceURL=mediaelement-core-js-before 2721</script>
vendor: 1 bytes, line 2721
2721
2722<script id="mediaelement-core-js" src="https://www.evengineeringonline.com/wp-includes/js/mediaelement/mediaelement-and-player.min.js?ver=4.2.17"></script>
vendor: 1 bytes, line 2722
2722
2723<script id="mediaelement-migrate-js" src="https://www.evengineeringonline.com/wp-includes/js/mediaelement/mediaelement-migrate.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2723
2723
2724<script id="mediaelement-js-extra"> 2725var _wpmejsSettings = {"pluginPath":"/wp-includes/js/mediaelement/","classPrefix":"mejs-","stretching":"responsive","audioShortcodeLibrary":"mediaelement","videoShortcodeLibrary":"mediaelement"}; 2726//# sourceURL=mediaelement-js-extra 2727</script>
vendor: 1 bytes, line 2727
2727
2728<script id="wp-mediaelement-js" src="https://www.evengineeringonline.com/wp-includes/js/mediaelement/wp-mediaelement.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2728
2728
2729<script id="wp-api-request-js-extra"> 2730var wpApiSettings = {"root":"https://www.evengineeringonline.com/wp-json/","nonce":"63a515630f","versionString":"wp/v2/"}; 2731//# sourceURL=wp-api-request-js-extra 2732</script>
vendor: 1 bytes, line 2732
2732
2733<script id="wp-api-request-js" src="https://www.evengineeringonline.com/wp-includes/js/api-request.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2733
2733
2734<script id="wp-dom-ready-js" src="https://www.evengineeringonline.com/wp-includes/js/dist/dom-ready.min.js?ver=3fe927cab37bf38d6a23"></script>
vendor: 1 bytes, line 2734
2734
2735<script id="wp-hooks-js" src="https://www.evengineeringonline.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 2735
2735
2736<script id="wp-i18n-js" src="https://www.evengineeringonline.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 2736
2736
2737<script id="wp-i18n-js-after"> 2738wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); 2739//# sourceURL=wp-i18n-js-after 2740</script>
vendor: 1 bytes, line 2740
2740
2741<script id="wp-a11y-js" src="https://www.evengineeringonline.com/wp-includes/js/dist/a11y.min.js?ver=31c6cec5a4ff7aff483d"></script>
vendor: 1 bytes, line 2741
2741
2742<script id="clipboard-js" src="https://www.evengineeringonline.com/wp-includes/js/clipboard.min.js?ver=2.0.11"></script>
vendor: 1 bytes, line 2742
2742
2743<script id="media-views-js-extra"> 2744var _wpMediaViewsL10n = {"mediaFrameDefaultTitle":"Media","url":"URL","addMedia":"Add media","search":"Search","select":"Select","cancel":"Cancel","update":"Update","replace":"Replace","remove":"Remove","back":"Back","selected":"%d selected","dragInfo":"Drag and drop to reorder media files.","uploadFilesTitle":"Upload files","uploadImagesTitle":"Upload images","mediaLibraryTitle":"Media Library","insertMediaTitle":"Add media","createNewGallery":"Create a new gallery","createNewPlaylist":"Create a new playlist","createNewVideoPlaylist":"Create a new video playlist","returnToLibrary":"\u2190 Go to library","allMediaItems":"All media items","allDates":"All dates","noItemsFound":"No items found.","insertIntoPost":"Insert into post","unattached":"Unattached","mine":"Mine","trash":"Trash","uploadedToThisPost":"Uploaded to this post","warnDelete":"You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete.","warnBulkDelete":"You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete.","warnBulkTrash":"You are about to trash these items.\n 'Cancel' to stop, 'OK' to delete.","bulkSelect":"Bulk select","trashSelected":"Move to Trash","restoreSelected":"Restore from Trash","deletePermanently":"Delete permanently","errorDeleting":"Error in deleting the attachment.","apply":"Apply","filterByDate":"Filter by date","filterByType":"Filter by type","searchLabel":"Search media","searchMediaLabel":"Search media","searchMediaPlaceholder":"Search media items...","mediaFound":"Number of media items found: %d","noMedia":"No media items found.","noMediaTryNewSearch":"No media items found. Try a different search.","mediaItemViewed":"Viewing media item: %s","attachmentDetails":"Attachment details","insertFromUrlTitle":"Insert from URL","setFeaturedImageTitle":"Featured image","setFeaturedImage":"Set featured image","createGalleryTitle":"Create gallery","editGalleryTitle":"Edit gallery","cancelGalleryTitle":"\u2190 Cancel gallery","insertGallery":"Insert gallery","updateGallery":"Update gallery","addToGallery":"Add to gallery","addToGalleryTitle":"Add to gallery","reverseOrder":"Reverse order","imageDetailsTitle":"Image details","imageReplaceTitle":"Replace image","imageDetailsCancel":"Cancel edit","editImage":"Edit image","chooseImage":"Choose image","selectAndCrop":"Select and crop","skipCropping":"Skip cropping","cropImage":"Crop image","cropYourImage":"Crop your image","cropping":"Cropping\u2026","suggestedDimensions":"Suggested image dimensions: %1$s by %2$s pixels.","cropError":"There has been an error cropping your image.","audioDetailsTitle":"Audio details","audioReplaceTitle":"Replace audio","audioAddSourceTitle":"Add audio source","audioDetailsCancel":"Cancel edit","videoDetailsTitle":"Video details","videoReplaceTitle":"Replace video","videoAddSourceTitle":"Add video source","videoDetailsCancel":"Cancel edit","videoSelectPosterImageTitle":"Select poster image","videoAddTrackTitle":"Add subtitles","playlistDragInfo":"Drag and drop to reorder tracks.","createPlaylistTitle":"Create audio playlist","editPlaylistTitle":"Edit audio playlist","cancelPlaylistTitle":"\u2190 Cancel audio playlist","insertPlaylist":"Insert audio playlist","updatePlaylist":"Update audio playlist","addToPlaylist":"Add to audio playlist","addToPlaylistTitle":"Add to Audio Playlist","videoPlaylistDragInfo":"Drag and drop to reorder videos.","createVideoPlaylistTitle":"Create video playlist","editVideoPlaylistTitle":"Edit video playlist","cancelVideoPlaylistTitle":"\u2190 Cancel video playlist","insertVideoPlaylist":"Insert video playlist","updateVideoPlaylist":"Update video playlist","addToVideoPlaylist":"Add to video playlist","addToVideoPlaylistTitle":"Add to video Playlist","filterAttachments":"Filter media","attachmentsList":"Media list","settings":{"tabs":[],"tabUrl":"https://www.evengineeringonline.com/wp-admin/media-upload.php?chromeless=1","mimeTypes":{"image":"Images","audio":"Audio","video":"Video","application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-word.document.macroEnabled.12,application/vnd.ms-word.template.macroEnabled.12,application/vnd.oasis.opendocument.text,application/vnd.apple.pages,application/pdf,application/vnd.ms-xpsdocument,application/oxps,application/rtf,application/wordperfect,application/octet-stream":"Documents","application/vnd.apple.numbers,application/vnd.oasis.opendocument.spreadsheet,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel.sheet.macroEnabled.12,application/vnd.ms-excel.sheet.binary.macroEnabled.12":"Spreadsheets","application/x-gzip,application/rar,a
2744pplication/x-tar,application/zip,application/x-7z-compressed":"Archives"},"captions":true,"nonce":{"sendToEditor":"97af9d88b4","setAttachmentThumbnail":"cbfa373a68"},"post":{"id":0},"defaultProps":{"link":"none","align":"","size":""},"attachmentCounts":{"audio":1,"video":1},"oEmbedProxyUrl":"https://www.evengineeringonline.com/wp-json/oembed/1.0/proxy","embedExts":["mp3","ogg","flac","m4a","wav","mp4","m4v","webm","ogv","flv"],"embedMimes":{"mp3":"audio/mpeg","ogg":"audio/ogg","flac":"audio/flac","m4a":"audio/mpeg","wav":"audio/wav","mp4":"video/mp4","m4v":"video/mp4","webm":"video/webm","ogv":"video/ogg","flv":"video/x-flv"},"contentWidth":740,"months":[{"year":"2026","month":"9","text":"September 2026"},{"year":"2026","month":"8","text":"August 2026"},{"year":"2026","month":"7","text":"July 2026"},{"year":"2026","month":"6","text":"June 2026"},{"year":"2026","month":"5","text":"May 2026"},{"year":"2026","month":"4","text":"April 2026"},{"year":"2026","month":"3","text":"March 2026"},{"year":"2026","month":"2","text":"February 2026"},{"year":"2026","month":"1","text":"January 2026"},{"year":"2025","month":"12","text":"December 2025"},{"year":"2025","month":"11","text":"November 2025"},{"year":"2025","month":"10","text":"October 2025"},{"year":"2025","month":"9","text":"September 2025"},{"year":"2025","month":"8","text":"August 2025"},{"year":"2025","month":"7","text":"July 2025"},{"year":"2025","month":"6","text":"June 2025"},{"year":"2025","month":"5","text":"May 2025"},{"year":"2025","month":"4","text":"April 2025"},{"year":"2025","month":"3","text":"March 2025"},{"year":"2025","month":"2","text":"February 2025"},{"year":"2025","month":"1","text":"January 2025"},{"year":"2024","month":"12","text":"December 2024"},{"year":"2024","month":"11","text":"November 2024"},{"year":"2024","month":"10","text":"October 2024"},{"year":"2024","month":"9","text":"September 2024"},{"year":"2024","month":"8","text":"August 2024"},{"year":"2024","month":"7","text":"July 2024"},{"year":"2024","month":"6","text":"June 2024"},{"year":"2024","month":"5","text":"May 2024"},{"year":"2024","month":"4","text":"April 2024"},{"year":"2024","month":"3","text":"March 2024"},{"year":"2024","month":"2","text":"February 2024"},{"year":"2024","month":"1","text":"January 2024"},{"year":"2023","month":"12","text":"December 2023"},{"year":"2023","month":"11","text":"November 2023"},{"year":"2023","month":"10","text":"October 2023"},{"year":"2023","month":"9","text":"September 2023"},{"year":"2023","month":"8","text":"August 2023"}],"mediaTrash":0,"infiniteScrolling":1}}; 2745//# sourceURL=media-views-js-extra 2746</script>
vendor: 1 bytes, line 2746
2746
2747<script id="media-views-js" src="https://www.evengineeringonline.com/wp-includes/js/media-views.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2747
2747
2748<script id="media-editor-js" src="https://www.evengineeringonline.com/wp-includes/js/media-editor.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2748
2748
2749<script id="media-audiovideo-js" src="https://www.evengineeringonline.com/wp-includes/js/media-audiovideo.min.js?ver=7.1.2"></script>
vendor: 1 bytes, line 2749
2749
2750<script id="ea-global-js" src="https://www.evengineeringonline.com/wp-content/themes/ThemeWTWH/assets/js/global-min.js?ver=1749463231"></script>
vendor: 1 bytes, line 2750
2750
2751<script id="wp-emoji-settings" type="application/json"> 2752{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.evengineeringonline.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}} 2753</script>
vendor: 1 bytes, line 2753
2753
2754<script type="module"> 2755/*! This file is auto-generated */ 2756var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 2757//# sourceURL=https://www.evengineeringonline.com/wp-includes/js/wp-emoji-loader.min.js 2758</script>
vendor: 1 bytes, line 2758
2758
2759<script>"undefined"!=typeof jQuery&&jQuery(document).ready(function(){"objectFit"in document.documentElement.style==!1&&(jQuery(".cat-post-item figure").removeClass("cat-post-crop"),jQuery(".cat-post-item figure").addClass("cat-post-crop-not-supported")),(document.documentMode||/Edge/.test(navigator.userAgent))&&(jQuery(".cat-post-item figure img").height("+=1"),window.setTimeout(function(){jQuery(".cat-post-item figure img").height("-=1")},0))});</script>
2759
2759<script type="text/javascript"> 2760 if (typeof jQuery !== 'undefined') { 2761 2762 var cat_posts_namespace = window.cat_posts_namespace || {}; 2763 cat_posts_namespace.layout_wrap_text = cat_posts_namespace.layout_wrap_text || {}; 2764 cat_posts_namespace.layout_img_size = cat_posts_namespace.layout_img_size || {}; 2765 2766 cat_posts_namespace.layout_wrap_text = { 2767 2768 add : function(_this){ 2769 var _that = jQuery(_this), 2770 _text = _that.find('p.cpwp-excerpt-text'), 2771 _stage = _text.closest('.cpwp-wrap-text-stage'); 2772 2773 if ( 0 === _text.length ) { 2774 return; 2775 } 2776 2777 _stage.removeClass( "cpwp-wrap-text" ); 2778 _text.addClass( "cpwp-wrap-text" ); 2779 2780 if (_text.height() < _that.find('.cat-post-thumbnail').height()) { 2781 return; 2782 } 2783 2784 _text.removeClass( "cpwp-wrap-text" ); 2785 _stage.addClass( "cpwp-wrap-text" ); 2786 return; 2787 }, 2788 2789 handleLazyLoading : function(_this) { 2790 var width = jQuery(_this).find('img').width(); 2791 2792 if( 0 !== width ){ 2793 cat_posts_namespace.layout_wrap_text.add(_this); 2794 } else { 2795 jQuery(_this).find('img').one("load", function(){ 2796 cat_posts_namespace.layout_wrap_text.add(_this); 2797 }); 2798 } 2799 return; 2800 }, 2801 2802 setClass : function (widget) { 2803 // var _widget = jQuery(widget); 2804 jQuery(widget).find('.cat-post-item').each(function(){ 2805 cat_posts_namespace.layout_wrap_text.handleLazyLoading(this); 2806 }); 2807 return; 2808 } 2809 } 2810 cat_posts_namespace.layout_img_size = { 2811 2812 replace : function(_this){ 2813 var _that = jQuery(_this), 2814 resp_w = _that.width(), 2815 resp_h = _that.height(), 2816 orig_w = _that.data('cat-posts-width'), 2817 orig_h = _that.data('cat-posts-height'); 2818 2819 if( resp_w < orig_w ){ 2820 _that.height( resp_w * orig_h / orig_w ); 2821 } else { 2822 _that.height( '' ); 2823 } 2824 return; 2825 }, 2826 2827 handleLazyLoading : function(_this) { 2828 var width = jQuery(_this).width(); 2829 2830 if( 0 !== width ){ 2831 cat_posts_namespace.layout_img_size.replace(_this); 2832 } else { 2833 jQuery(_this).one("load", function(){ 2834 cat_posts_namespace.layout_img_size.replace(_this); 2835 }); 2836 } 2837 return; 2838 }, 2839 setHeight : function (widget) { 2840 jQuery(widget).find('.cat-post-item img').each(function(){ 2841 cat_posts_namespace.layout_img_size.handleLazyLoading(this); 2842 }); 2843 return; 2844 } 2845 } 2846 2847 let widget = jQuery('#category-posts-5-internal'); 2848 2849 2850 const observer = new MutationObserver(function () { 2851 let widget = jQuery('#category-posts-5-internal'); 2852 if (widget.length) { 2853 cat_posts_namespace.layout_wrap_text.setClass(widget); 2854 } 2855 }); 2856 2857 observer.observe(document.body, { 2858 childList: true, 2859 subtree: true, 2860 characterData: true 2861 }); 2862 2863 2864 2865 jQuery( document ).ready(function () { 2866 cat_posts_namespace.layout_wrap_text.setClass(widget); 2867 2868 2869 2870 cat_posts_namespace.layout_img_size.setHeight(widget); 2871 2872 }); 2873 2874 jQuery(window).on('load resize', function() { 2875 cat_posts_namespace.layout_wrap_text.setClass(widget); 2876 2877 2878 2879 cat_posts_namespace.layout_img_size.setHeight(widget); 2880 2881 }); 2882 2883 // low-end mobile 2884 cat_posts_namespace.layout_wrap_text.setClass(widget); 2885 2886 2887 2888 cat_posts_namespace.layout_img_size.setHeight(widget); 2889 2890 2891 } 2892 </script>
2892 2893
2893<script type="text/javascript"> 2894 if (typeof jQuery !== 'undefined') { 2895 2896 var cat_posts_namespace = window.cat_posts_namespace || {}; 2897 cat_posts_namespace.layout_wrap_text = cat_posts_namespace.layout_wrap_text || {}; 2898 cat_posts_namespace.layout_img_size = cat_posts_namespace.layout_img_size || {}; 2899 2900 cat_posts_namespace.layout_wrap_text = { 2901 2902 add : function(_this){ 2903 var _that = jQuery(_this), 2904 _text = _that.find('p.cpwp-excerpt-text'), 2905 _stage = _text.closest('.cpwp-wrap-text-stage'); 2906 2907 if ( 0 === _text.length ) { 2908 return; 2909 } 2910 2911 _stage.removeClass( "cpwp-wrap-text" ); 2912 _text.addClass( "cpwp-wrap-text" ); 2913 2914 if (_text.height() < _that.find('.cat-post-thumbnail').height()) { 2915 return; 2916 } 2917 2918 _text.removeClass( "cpwp-wrap-text" ); 2919 _stage.addClass( "cpwp-wrap-text" ); 2920 return; 2921 }, 2922 2923 handleLazyLoading : function(_this) { 2924 var width = jQuery(_this).find('img').width(); 2925 2926 if( 0 !== width ){ 2927 cat_posts_namespace.layout_wrap_text.add(_this); 2928 } else { 2929 jQuery(_this).find('img').one("load", function(){ 2930 cat_posts_namespace.layout_wrap_text.add(_this); 2931 }); 2932 } 2933 return; 2934 }, 2935 2936 setClass : function (widget) { 2937 // var _widget = jQuery(widget); 2938 jQuery(widget).find('.cat-post-item').each(function(){ 2939 cat_posts_namespace.layout_wrap_text.handleLazyLoading(this); 2940 }); 2941 return; 2942 } 2943 } 2944 cat_posts_namespace.layout_img_size = { 2945 2946 replace : function(_this){ 2947 var _that = jQuery(_this), 2948 resp_w = _that.width(), 2949 resp_h = _that.height(), 2950 orig_w = _that.data('cat-posts-width'), 2951 orig_h = _that.data('cat-posts-height'); 2952 2953 if( resp_w < orig_w ){ 2954 _that.height( resp_w * orig_h / orig_w ); 2955 } else { 2956 _that.height( '' ); 2957 } 2958 return; 2959 }, 2960 2961 handleLazyLoading : function(_this) { 2962 var width = jQuery(_this).width(); 2963 2964 if( 0 !== width ){ 2965 cat_posts_namespace.layout_img_size.replace(_this); 2966 } else { 2967 jQuery(_this).one("load", function(){ 2968 cat_posts_namespace.layout_img_size.replace(_this); 2969 }); 2970 } 2971 return; 2972 }, 2973 setHeight : function (widget) { 2974 jQuery(widget).find('.cat-post-item img').each(function(){ 2975 cat_posts_namespace.layout_img_size.handleLazyLoading(this); 2976 }); 2977 return; 2978 } 2979 } 2980 2981 let widget = jQuery('#category-posts-4-internal'); 2982 2983 2984 const observer = new MutationObserver(function () { 2985 let widget = jQuery('#category-posts-4-internal'); 2986 if (widget.length) { 2987 cat_posts_namespace.layout_wrap_text.setClass(widget); 2988 } 2989 }); 2990 2991 observer.observe(document.body, { 2992 childList: true, 2993 subtree: true, 2994 characterData: true 2995 }); 2996 2997 2998 2999 jQuery( document ).ready(function () { 3000 cat_posts_namespace.layout_wrap_text.setClass(widget); 3001 3002 3003 3004 cat_posts_namespace.layout_img_size.setHeight(widget); 3005 3006 }); 3007 3008 jQuery(window).on('load resize', function() { 3009 cat_posts_namespace.layout_wrap_text.setClass(widget); 3010 3011 3012 3013 cat_posts_namespace.layout_img_size.setHeight(widget); 3014 3015 }); 3016 3017 // low-end mobile 3018 cat_posts_namespace.layout_wrap_text.setClass(widget); 3019 3020 3021 3022 cat_posts_namespace.layout_img_size.setHeight(widget); 3023 3024 3025 } 3026 </script>
3026 3027
3027<script type="text/javascript"> 3028 if (typeof jQuery !== 'undefined') { 3029 3030 var cat_posts_namespace = window.cat_posts_namespace || {}; 3031 cat_posts_namespace.layout_wrap_text = cat_posts_namespace.layout_wrap_text || {}; 3032 cat_posts_namespace.layout_img_size = cat_posts_namespace.layout_img_size || {}; 3033 3034 cat_posts_namespace.layout_wrap_text = { 3035 3036 add : function(_this){ 3037 var _that = jQuery(_this), 3038 _text = _that.find('p.cpwp-excerpt-text'), 3039 _stage = _text.closest('.cpwp-wrap-text-stage'); 3040 3041 if ( 0 === _text.length ) { 3042 return; 3043 } 3044 3045 _stage.removeClass( "cpwp-wrap-text" ); 3046 _text.addClass( "cpwp-wrap-text" ); 3047 3048 if (_text.height() < _that.find('.cat-post-thumbnail').height()) { 3049 return; 3050 } 3051 3052 _text.removeClass( "cpwp-wrap-text" ); 3053 _stage.addClass( "cpwp-wrap-text" ); 3054 return; 3055 }, 3056 3057 handleLazyLoading : function(_this) { 3058 var width = jQuery(_this).find('img').width(); 3059 3060 if( 0 !== width ){ 3061 cat_posts_namespace.layout_wrap_text.add(_this); 3062 } else { 3063 jQuery(_this).find('img').one("load", function(){ 3064 cat_posts_namespace.layout_wrap_text.add(_this); 3065 }); 3066 } 3067 return; 3068 }, 3069 3070 setClass : function (widget) { 3071 // var _widget = jQuery(widget); 3072 jQuery(widget).find('.cat-post-item').each(function(){ 3073 cat_posts_namespace.layout_wrap_text.handleLazyLoading(this); 3074 }); 3075 return; 3076 } 3077 } 3078 cat_posts_namespace.layout_img_size = { 3079 3080 replace : function(_this){ 3081 var _that = jQuery(_this), 3082 resp_w = _that.width(), 3083 resp_h = _that.height(), 3084 orig_w = _that.data('cat-posts-width'), 3085 orig_h = _that.data('cat-posts-height'); 3086 3087 if( resp_w < orig_w ){ 3088 _that.height( resp_w * orig_h / orig_w ); 3089 } else { 3090 _that.height( '' ); 3091 } 3092 return; 3093 }, 3094 3095 handleLazyLoading : function(_this) { 3096 var width = jQuery(_this).width(); 3097 3098 if( 0 !== width ){ 3099 cat_posts_namespace.layout_img_size.replace(_this); 3100 } else { 3101 jQuery(_this).one("load", function(){ 3102 cat_posts_namespace.layout_img_size.replace(_this); 3103 }); 3104 } 3105 return; 3106 }, 3107 setHeight : function (widget) { 3108 jQuery(widget).find('.cat-post-item img').each(function(){ 3109 cat_posts_namespace.layout_img_size.handleLazyLoading(this); 3110 }); 3111 return; 3112 } 3113 } 3114 3115 let widget = jQuery('#category-posts-3-internal'); 3116 3117 3118 const observer = new MutationObserver(function () { 3119 let widget = jQuery('#category-posts-3-internal'); 3120 if (widget.length) { 3121 cat_posts_namespace.layout_wrap_text.setClass(widget); 3122 } 3123 }); 3124 3125 observer.observe(document.body, { 3126 childList: true, 3127 subtree: true, 3128 characterData: true 3129 }); 3130 3131 3132 3133 jQuery( document ).ready(function () { 3134 cat_posts_namespace.layout_wrap_text.setClass(widget); 3135 3136 3137 3138 cat_posts_namespace.layout_img_size.setHeight(widget); 3139 3140 }); 3141 3142 jQuery(window).on('load resize', function() { 3143 cat_posts_namespace.layout_wrap_text.setClass(widget); 3144 3145 3146 3147 cat_posts_namespace.layout_img_size.setHeight(widget); 3148 3149 }); 3150 3151 // low-end mobile 3152 cat_posts_namespace.layout_wrap_text.setClass(widget); 3153 3154 3155 3156 cat_posts_namespace.layout_img_size.setHeight(widget); 3157 3158 3159 } 3160 </script>
3160 3161
3161<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4289c458953018a',t:'MTc5MDY1OTk3OQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
3161</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.