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 plugin v28.5 - https://yoast.com/product/yoast-seo-wordpress/ --> 13 <title>Featured Archives - Windpower Engineering & Development</title> 14 <link rel="canonical" href="https://www.windpowerengineering.com/category/featured/" /> 15 <link rel="next" href="https://www.windpowerengineering.com/category/featured/page/2/" /> 16 <meta name="twitter:card" content="summary_large_image" /> 17 <meta name="twitter:title" content="Featured Archives - Windpower Engineering & Development" /> 18 <meta name="twitter:description" content="Windpower Engineering brings the design engineer of today the latest data and computations for designing a windpower system. Read through our featured articles for more details." /> 19 <meta name="twitter:site" content="@windpower_eng" /> 20
20<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"CollectionPage","@id":"https:\/\/www.windpowerengineering.com\/category\/featured\/","url":"https:\/\/www.windpowerengineering.com\/category\/featured\/","name":"Featured Archives - Windpower Engineering & Development","isPartOf":{"@id":"https:\/\/www.windpowerengineering.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.windpowerengineering.com\/category\/featured\/#primaryimage"},"image":{"@id":"https:\/\/www.windpowerengineering.com\/category\/featured\/#primaryimage"},"thumbnailUrl":"https:\/\/www.windpowerengineering.com\/wp-content\/uploads\/2016\/03\/edf.jpg","breadcrumb":{"@id":"https:\/\/www.windpowerengineering.com\/category\/featured\/#breadcrumb"},"inLanguage":"en-US"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.windpowerengineering.com\/category\/featured\/#primaryimage","url":"https:\/\/www.windpowerengineering.com\/wp-content\/uploads\/2016\/03\/edf.jpg","contentUrl":"https:\/\/www.windpowerengineering.com\/wp-content\/uploads\/2016\/03\/edf.jpg","width":800,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/www.windpowerengineering.com\/category\/featured\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.windpowerengineering.com\/"},{"@type":"ListItem","position":2,"name":"Featured"}]},{"@type":"WebSite","@id":"https:\/\/www.windpowerengineering.com\/#website","url":"https:\/\/www.windpowerengineering.com\/","name":"Windpower Engineering & Development","description":"The technical resource for wind power profitability","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.windpowerengineering.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}</script>
20 21 <!-- / Yoast SEO plugin. --> 22 23 24<link rel='dns-prefetch' href='//scripts.wtwhmedia.com' /> 25<link rel='dns-prefetch' href='//fonts.googleapis.com' /> 26<link rel="alternate" type="application/rss+xml" title="Windpower Engineering & Development » Feed" href="https://www.windpowerengineering.com/feed/" /> 27<link rel="alternate" type="application/rss+xml" title="Windpower Engineering & Development » Comments Feed" href="https://www.windpowerengineering.com/comments/feed/" /> 28<link rel="alternate" type="application/rss+xml" title="Windpower Engineering & Development » Featured Category Feed" href="https://www.windpowerengineering.com/category/featured/feed/" /> 29<style id="wp-img-auto-sizes-contain-inline-css"> 30img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 31/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 32</style> 33<link rel='stylesheet' id='theme-wtwh-amplifying-css' href='https://www.windpowerengineering.com/wp-content/themes/ThemeWTWH/style.css?ver=1749457156' media='all' /> 34<style id="wp-emoji-styles-inline-css"> 35 36 img.wp-smiley, img.emoji { 37 display: inline !important; 38 border: none !important; 39 box-shadow: none !important; 40 height: 1em !important; 41 width: 1em !important; 42 margin: 0 0.07em !important; 43 vertical-align: -0.1em !important; 44 background: none !important; 45 padding: 0 !important; 46 } 47/*# sourceURL=wp-emoji-styles-inline-css */ 48</style> 49<style id="wp-block-library-inline-css"> 50: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;
50--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}} 51 52/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */ 53</style> 54<style id="classic-theme-styles-inline-css"> 55/*! This file is auto-generated */ 56.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} 57/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 58</style> 59 60<style id="global-styles-inline-css"> 61: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,
610) 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;}
61.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;} 62/*# sourceURL=global-styles-inline-css */ 63</style> 64 65<link rel='stylesheet' id='buttons-css' href='https://www.windpowerengineering.com/wp-includes/css/buttons.min.css?ver=7.1.1' media='all' /> 66<link rel='stylesheet' id='dashicons-css' href='https://www.windpowerengineering.com/wp-includes/css/dashicons.min.css?ver=7.1.1' media='all' /> 67<link rel='stylesheet' id='mediaelement-css' href='https://www.windpowerengineering.com/wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css?ver=4.2.17' media='all' /> 68<link rel='stylesheet' id='wp-mediaelement-css' href='https://www.windpowerengineering.com/wp-includes/js/mediaelement/wp-mediaelement.min.css?ver=7.1.1' media='all' /> 69<link rel='stylesheet' id='media-views-css' href='https://www.windpowerengineering.com/wp-includes/css/media-views.min.css?ver=7.1.1' media='all' /> 70<link rel='stylesheet' id='imgareaselect-css' href='https://www.windpowerengineering.com/wp-includes/js/imgareaselect/imgareaselect.css?ver=0.9.8' media='all' /> 71<link rel='stylesheet' id='frontend-sponsored-ads-css-css' href='https://www.windpowerengineering.com/wp-content/plugins/sponsored-content-ad/css/frontend-sponsored-ads.css?ver=1.01202609241790240494' media='all' /> 72<link rel='stylesheet' id='ea-fonts-css' href='https://fonts.googleapis.com/css?family=Open+Sans:300,700&ver=7.1.1' media='all' /> 73<link rel='stylesheet' id='ea-style-css' href='https://www.windpowerengineering.com/wp-content/themes/ThemeWTWH/assets/css/main.css?ver=1749457156' media='all' />
74<script id="jquery-core-js" src="https://www.windpowerengineering.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 74
74
75<script id="jquery-migrate-js" src="https://www.windpowerengineering.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 75
75
76<script id="utils-js-extra"> 77var userSettings = {"url":"/","uid":"0","time":"1790240494","secure":"1"}; 78//# sourceURL=utils-js-extra 79</script>
vendor: 1 bytes, line 79
79
80<script id="utils-js" src="https://www.windpowerengineering.com/wp-includes/js/utils.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 80
80
81<script id="moxiejs-js" src="https://www.windpowerengineering.com/wp-includes/js/plupload/moxie.min.js?ver=1.3.5.1"></script>
vendor: 1 bytes, line 81
81
82<script id="plupload-js" src="https://www.windpowerengineering.com/wp-includes/js/plupload/plupload.min.js?ver=2.1.9"></script>
vendor: 1 bytes, line 82
82
83<script id="frontend-sponsored-ads-script-js" src="https://www.windpowerengineering.com/wp-content/plugins/sponsored-content-ad/js/frontend-sponsored-ads.js"></script>
vendor: 1 bytes, line 83
83
84<script id="wtwh-uni-gam-unified-ad-logic-js-extra"> 85var wtwh_gam_ad_config = {"slots":[{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_header","div_id":"div-gpt-wpe-header","desktop_sizes":["728x90"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_interstitial","div_id":"div-gpt-wpe_interstitial","desktop_sizes":["640x480"],"mobile_sizes":["0x0"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_wallpaper","div_id":"div-gpt-wpe_wallpaper","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"wallpaper"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_allstreamflex","div_id":"div-gpt-wpe_allstreamflex","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_allstreamprelude","div_id":"div-gpt-wpe_allstreamprelude","desktop_sizes":["1x1"],"mobile_sizes":["1x1"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_sidebar1","div_id":"div-gpt-wpe_sidebar1","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_sidebar2","div_id":"div-gpt-wpe_sidebar2","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_sidebarbottom","div_id":"div-gpt-wpe_sidebarbottom","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_sidebar1","div_id":"div-gpt-wpe-sidebar-ad","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_sidebarbottom","div_id":"div-gpt-wpe_sidebarbottom_home","desktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_sidebarbottom","div_id":"div-gpt-wpe_sidebarbottom_primary","de
85sktop_sizes":["300x250","300x600"],"mobile_sizes":["300x250"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"},{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_largeleader","div_id":"jumbo-banner-ad-container","desktop_sizes":["970x90","970x250"],"mobile_sizes":["0x0"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"display"}],"prestitial":{"account_id":"5272491","network_code":"renew_network","ad_unit_code":"wpe_prestitial","div_id":"gam-holder-prestitial-banner","desktop_sizes":["640x480"],"mobile_sizes":["300x225"],"targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"skip_ads":false,"ad_type":"prestitial"},"enable_single_request":"","collapse_empty_divs":"1","page_url":"https://www.windpowerengineering.com/category/featured/","default_page_targeting":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"},"auto_display_ads":"1","lazy_load_ads":"","load_gpt_library":"","has_keyword_ads":"0"}; 86var wtwh_gam_ga4_targeting_values = {"ga4_targeting_values":{"articletitle":"case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health","cat_target":"dd1f7c6c1bf019c3abe87801adcccc41,featured,ros","contentHash":"dd1f7c6c1bf019c3abe87801adcccc41","category":"Featured","ParentCategory":"Featured"}}; 87//# sourceURL=wtwh-uni-gam-unified-ad-logic-js-extra 88</script>
vendor: 1 bytes, line 88
88
89<script id="wtwh-uni-gam-unified-ad-logic-js" src="https://www.windpowerengineering.com/wp-content/plugins/wtwh-universal-gam/assets/js/frontend/ad-config/unified-ad-logic.js?ver=1790240494"></script>
89 90<link rel="https://api.w.org/" href="https://www.windpowerengineering.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.windpowerengineering.com/wp-json/wp/v2/categories/126" /><meta property="og:description" content="Windpower Engineering brings the design engineer of today the latest data and computations for designing a windpower system. Read through our featured articles for more details."> 91<meta property="og:site_name" content="Windpower Engineering & Development"> 92<meta property="og:title" content="Featured"> 93<meta property="og:type" content="article"> 94<meta property="og:url" content="https://www.windpowerengineering.com/category/featured/"> 95<meta property="og:locale" content="en_US"> 96<!-- Google Tag Manager for Glboal Container-->
97<script>
vendor: 327 bytes, lines 97-101
97(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 98new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 99j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 100'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 101})(window,document,'script','dataLayer','
101GTM-MMC9PJ9
vendor: 3 bytes, line 101
101');
101</script>
101 102<!-- End Google Tag Manager --> 103 104 105<!-- Google Tag Manager -->
106<script>
vendor: 327 bytes, lines 106-110
106(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 107new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 108j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 109'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 110})(window,document,'script','dataLayer','
110GTM-5WXXHJ7
vendor: 3 bytes, line 110
110');
110</script>
110 111<!-- End Google Tag Manager --> 112 113 114 115 116 117 118 119 120 121 122 123<style> 124#interContainer{ 125position: absolute; 126width: 690px; /*Width of interstitial box*/ 127left: 0; 128top: 0; 129padding: 15px; 130padding-top: 0; 131background-color: #ffffff; 132 133visibility: hidden; 134z-index: 600; 135} 136 137#interContainer .headerbar{ /*CSS for header bar of interstitial box*/ 138color: gray; 139padding: 5px 0; 140text-align: right; 141} 142 143#interContainer .headerbar a{ /*CSS for header bar links of interstitial box*/ 144font-size: 120%; 145text-decoration: none; 146} 147 148 149#interContent{ /*CSS for div that holds the content to show*/ 150 151 152background-color: white; 153} 154 155#interVeil{ /*CSS for background veil that covers entire page while interstitial box is visible*/ 156position: absolute; 157background: black url(/interstitial/blackdot.gif); 158right: 0; 159width: 10px; 160top: 0; 161z-index: 599; 162visibility: hidden; 163filter:progid:DXImageTransform.Microsoft.alpha(opacity=80); 164opacity: 0.8; 165} 166 167 168 169</style><link rel="icon" href="https://www.windpowerengineering.com/wp-content/uploads/2018/08/cropped-windpower-32x32.png" sizes="32x32" /> 170<link rel="icon" href="https://www.windpowerengineering.com/wp-content/uploads/2018/08/cropped-windpower-192x192.png" sizes="192x192" /> 171<link rel="apple-touch-icon" href="https://www.windpowerengineering.com/wp-content/uploads/2018/08/cropped-windpower-180x180.png" /> 172<meta name="msapplication-TileImage" content="https://www.windpowerengineering.com/wp-content/uploads/2018/08/cropped-windpower-270x270.png" /> 173<style id="wp-custom-css"> 174.SoundCloudPubDate{padding:10px} 175 .SoundCloudTitle{padding:10px} 176 177/*Fix for Categories/home page article display*/ 178@media only screen and (max-width: 500px) { 179 .content .entry .entry-header, .archive-entry .entry-header { 180 181 } 182 183 184 .entry-content img { 185 text-align: center !important; 186 width: 100% !important; 187 } 188 189 .archive-entry { 190 display: flex; 191 flex-direction: column-reverse; 192 width: 100% !important; 193 } 194 195 .archive-entry > .entry-header, .archive-entry .entry-content { 196 width: 100% !important; 197 } 198} 199 200@media only screen and (max-width: 767px) { 201.archive.category .entry-content p { 202 display: none !important 203} 204 205 .blog .entry-content p { 206 display: none !important; 207 } 208 209 210} 211 212.slick-slider.header-slides .header-slide .overlay h4, .slick-slider.header-slides .header-slide .overlay h2 { 213text-shadow: 2px 2px 5px black; 214background: none !important; 215-webkit-text-stroke-width: 0px !important; 216-webkit-text-stroke-color: transparent !important; 217} 218 219/* Search Page */ 220body.search .site-inner { 221 padding-left: unset; 222 padding-right: unset; 223} 224 225/*SUBSCRIBE BUTTON CSS*/ 226 227.site-header--subscribe{ 228 background-color: #80a0c1; 229 color: white; 230 padding: 0 16px; 231} 232 233.site-header--subscribe a{ 234 color: white !important; 235} 236 237/*GATED COUNTRY FIELD FULL WIDTH & TERMS====*/ 238#input_67_54_6_container{ 239flex: 0 0 100%; 240} 241 242.terms{ 243 font-size: 10px; 244 font-style: italic; 245} 246 247.type-gated .entry-title{ 248 text-align: left; 249} 250 251.type-gated .entry-content img{ 252 width: 100%; 253} 254 255#div-gpt-wpe_sidebarbottom_home, #div-gpt-wpe_sidebarbottom_primary { margin-top: 20px; 256} 257</style> 258
258<script id="wtwh-uni-gam-content-hash-variables"> 259 var contentHash = "dd1f7c6c1bf019c3abe87801adcccc41"; 260 var cat_target = "dd1f7c6c1bf019c3abe87801adcccc41,featured,ros"; 261 </script>
261 262
262<script> 263 (function () { 264 'use strict'; 265 266 // âââ Globals ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 267 window.dataLayer = window.dataLayer || []; 268 window.gtag = window.gtag || function () { dataLayer.push(arguments); }; 269 window.googletag = window.googletag || { cmd: [] }; 270 271 window.__cmpRegion = { 272 country: "US", 273 regulated: false 274 }; 275 276 window.__wtwhConsentDebug = { 277 consentEvents: [], 278 gptMode: null 279 }; 280 281 // âââ Helpers ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 282 function log() { 283 try { 284 var args = Array.prototype.slice.call(arguments); 285 args.unshift('[WTWH Consent/GPT]'); 286 console.log.apply(console, args); 287 } catch (e) {} 288 } 289 290 function dispatchWindowEvent(eventName, detail) { 291 try { 292 window.dispatchEvent(new CustomEvent(eventName, { detail: detail || {} })); 293 } catch (e) { 294 try { 295 var ev = document.createEvent('CustomEvent'); 296 ev.initCustomEvent(eventName, false, false, detail || {}); 297 window.dispatchEvent(ev); 298 } catch (err) {} 299 } 300 } 301 302 function getCookie(name) { 303 var nameEQ = name + '='; 304 var parts = document.cookie.split(';'); 305 for (var i = 0; i < parts.length; i++) { 306 var c = parts[i]; 307 while (c.charAt(0) === ' ') c = c.substring(1); 308 if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length); 309 } 310 return null; 311 } 312 313 function hasKlaroCookie() { 314 return !!getCookie('klaro-consent'); 315 } 316 317 function getKlaroManager() { 318 try { 319 if (!window.klaro || typeof window.klaro.getManager !== 'function') return null; 320 return window.klaro.getManager(); 321 } catch (e) { 322 return null; 323 } 324 } 325 326 function getStoredConsents() { 327 try { 328 var manager = getKlaroManager(); 329 if (!manager || !manager.consents) return null; 330 return { 331 analytics: !!manager.consents.analytics, 332 marketing: !!manager.consents.marketing 333 }; 334 } catch (e) { 335 return null; 336 } 337 } 338 339 function getMarketingConsentState() { 340 var c = getStoredConsents(); 341 return c ? c.marketing : null; 342 } 343 344 // âââ Consent state tracker âââââââââââââââââââââââââââââââââââââââââââââââââââ 345 var consentState = { 346 initialized: false, 347 lastAppliedSignature: null 348 }; 349 350 function consentSignature(consents) { 351 return (consents.analytics ? '1' : '0') + '|' + (consents.marketing ? '1' : '0'); 352 } 353 354 // âââ Core consent application ââââââââââââââââââââââââââââââââââââââââââââââââ 355 function pushConsentEvent(eventName, analyticsGranted, marketingGranted) { 356 var detail = { 357 consent_analytics: analyticsGranted ? 'granted' : 'denied', 358 consent_marketing: marketingGranted ? 'granted' : 'denied', 359 consent_country: window.__cmpRegion.country, 360 consent_regulated_region: window.__cmpRegion.regulated ? 'true' : 'false' 361 }; 362 363 window.dataLayer.push({ 364 event: eventName, 365 consent_analytics: detail.consent_analytics, 366 consent_marketing: detail.consent_marketing, 367 consent_country: detail.consent_country, 368 consent_regulated_region: detail.consent_regulated_region 369 }); 370 371 window.__wtwhConsentDebug.consentEvents.push({ event: eventName, detail: detail, ts: Date.now() }); 372 dispatchWindowEvent(eventName, detail); 373 log('Consent event fired:', eventName, detail); 374 } 375 376 function updateGoogleConsent(consents) { 377 gtag('consent', 'update', { 378 analytics_storage: consents.analytics ? 'granted' : 'denied', 379 ad_storage: consents.marketing ? 'granted' : 'denied', 380 ad_user_data: consents.marketing ? 'granted' : 'denied', 381 ad_personalization: consents.marketing ? 'granted' : 'denied', 382 functionality_storage: 'granted', 383 security_storage: 'granted' 384 }); 385 } 386 387 function applyInitialConsent(consents) { 388 if (!consents) return; 389 var sig = consentSignature(consents); 390 if (consentState.initialized) { 391 log('applyInitialConsent called after already initialized â skipping'); 392 return; 393 } 394 updateGoogleConsent(consents); 395 pushConsentEvent('consent_initialized', consents.analytics, c
395onsents.marketing); 396 consentState.initialized = true; 397 consentState.lastAppliedSignature = sig; 398 } 399 400 function applyUpdatedConsent(consents) { 401 if (!consents) return; 402 var sig = consentSignature(consents); 403 if (sig === consentState.lastAppliedSignature) { 404 log('Consent unchanged â skipping duplicate consent_updated'); 405 return; 406 } 407 updateGoogleConsent(consents); 408 pushConsentEvent('consent_updated', consents.analytics, consents.marketing); 409 consentState.initialized = true; 410 consentState.lastAppliedSignature = sig; 411 } 412 413 // âââ Step 1: gtag default ââââââââââââââââââââââââââââââââââââââââââââââââââââ 414 gtag('consent', 'default', { 415 ad_storage: window.__cmpRegion.regulated ? 'denied' : 'granted', 416 ad_user_data: window.__cmpRegion.regulated ? 'denied' : 'granted', 417 ad_personalization: window.__cmpRegion.regulated ? 'denied' : 'granted', 418 analytics_storage: window.__cmpRegion.regulated ? 'denied' : 'granted', 419 functionality_storage: 'granted', 420 security_storage: 'granted' 421 }); 422 423 // âââ Step 2: Non-regulated â initialize immediately as fully granted âââââââââ 424 if (!window.__cmpRegion.regulated) { 425 var openConsents = { analytics: true, marketing: true }; 426 consentState.initialized = true; 427 consentState.lastAppliedSignature = consentSignature(openConsents); 428 pushConsentEvent('consent_initialized', true, true); 429 } 430 431 // âââ Klaro config ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 432 window.klaroConfig = { 433 version: 1, 434 elementID: 'klaro', 435 storageMethod: 'cookie', 436 storageName: 'klaro-consent', 437 cookieExpiresAfterDays: 365, 438 default: false, 439 mustConsent: true, 440 acceptAll: true, 441 hideDeclineAll: false, 442 htmlTexts: true, 443 lang: 'en', 444 translations: { 445 en: { 446 consentNotice: { 447 description: 'We use cookies for analytics and marketing. You can manage your preferences at any time.', 448 learnMore: 'Manage preferences' 449 }, 450 consentModal: { 451 title: 'This website uses cookies', 452 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.' 453 }, 454 ok: 'Accept all', 455 decline: 'Reject all', 456 save: 'Save preferences', 457 close: 'Close' 458 } 459 }, 460 services: [ 461 { name: 'analytics', title: 'Analytics', purposes: ['analytics'], required: false, default: false }, 462 { name: 'marketing', title: 'Marketing', purposes: ['marketing'], required: false, default: false } 463 ], 464 callback: function (consent, service) { 465 try { 466 var manager = getKlaroManager(); 467 if (!manager || !manager.consents) return; 468 469 var currentConsents = { 470 analytics: !!manager.consents.analytics, 471 marketing: !!manager.consents.marketing 472 }; 473 474 if (!consentState.initialized && hasKlaroCookie()) { 475 applyInitialConsent(currentConsents); 476 return; 477 } 478 479 applyUpdatedConsent(currentConsents); 480 } catch (e) { 481 console.error('Klaro callback error', e); 482 } 483 } 484 }; 485 486 // âââ Open consent modal ââââââââââââââââââââââââââââââââââââââââââââââââââââââ 487 window.openConsentSettings = function () {
488 try { 489 if (window.klaro && typeof window.klaro.show === 'function') { 490 window.klaro.show(window.klaroConfig, true); 491 return; 492 } 493 var manager = getKlaroManager(); 494 if (manager && typeof manager.showConsentModal === 'function') { 495 manager.showConsentModal(); 496 } 497 } catch (e) { 498 console.warn('Unable to open Klaro consent settings', e); 499 } 500 }; 501 502 // âââ Klaro onload handler ââââââââââââââââââââââââââââââââââââââââââââââââââââ 503 window.__applyKlaroInitialConsent = function () { 504 try { 505 if (!window.__cmpRegion.regulated) return; 506 if (!hasKlaroCookie()) return; 507 var manager = getKlaroManager(); 508 if (!manager || !manager.consents) return; 509 applyInitialConsent({ 510 analytics: !!manager.consents.analytics, 511 marketing: !!manager.consents.marketing 512 }); 513 } catch (e) { 514 console.warn('Klaro consent initialization failed', e); 515 } 516 }; 517 518 // âââ GPT bootstrap âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 519 // Always uses securepubads (standard GPT). 520 // For denied-consent users, applies nonPersonalizedAds instead of switching 521 // to the limited GPT URL â this preserves pubads() availability and gives 522 // access to the standard demand pool (contextual only, no user signals). 523 (function () { 524 if (window.__wtwhGptBootstrapInitialized) return; 525 window.__wtwhGptBootstrapInitialized = true; 526 527 var GPT_MODE_FULL = 'full'; 528 var GPT_MODE_NPA = 'npa'; // non-personalized ads â replaces "limited" 529 530 // Single GPT URL for all cases 531 var GPT_URL = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js'; 532 533 var gptScriptRequested = false; 534 var gptScriptLoaded = false; 535 var gptDecisionFinalized = false; 536 537 function redactUrl(rawUrl) { 538 if (!rawUrl) return ''; 539 try { 540 var url = new URL(rawUrl, window.location.origin); 541 ['s', 'loc'].forEach(function (key) { 542 if (url.searchParams.has(key)) url.searchParams.set(key, 'REDACTED'); 543 }); 544 return url.href; 545 } catch (e) { 546 return rawUrl; 547 } 548 } 549 550 // Returns null when consent state is not yet known (regulated, Klaro not loaded yet). 551 // Returning null defers GPT loading until a consent signal arrives. 552 function selectGptMode() { 553 if (!window.__cmpRegion.regulated) return GPT_MODE_FULL; 554 555 var marketingConsent = getMarketingConsentState(); 556 if (marketingConsent === true) return GPT_MODE_FULL; 557 if (marketingConsent === false) return GPT_MODE_NPA; 558 559 // null = Klaro hasn't restored consent yet â wait 560 return null; 561 } 562 563 function dispatchGptReady(mode) { 564 window.__gptMode = mode; 565 window.__gptReady = true; 566 window.__wtwhConsentDebug.gptMode = mode; 567 568 window.dataLayer.push({ event: 'gpt_ready', gpt_mode: mode }); 569 dispatchWindowEvent('gpt_ready', { gpt_mode: mode }); 570 log('gpt_ready dispatched with mode:', mode); 571 } 572 573 function configureGptAfterLoad(mode) { 574 window.googletag.cmd.push(function () { 575 try { 576 if (typeof googletag.pubads !== 'function') { 577 log('pubads() unavailable after GPT load'); 578 return; 579 } 580 581 if (mode === GPT_MODE_NPA) { 582 // Consent denied: serve non-personalized ads. 583 // Uses standard GPT pipeline with no user signals. 584 // Better fill rate than limited ads URL; compliant with 585 // ad_storage: denied + nonPersonalizedAds: true. 586 try { 587 googletag.pubads().setPrivacySettings({ 588 nonPersonalizedAds: true 589 }); 590 log('Configured GPT for non-personalized ads (consent denied)'); 591 } catch (e) { 592 log('Failed to set nonPersonalizedAds', e); 593 } 594 } else { 595 log('Configured GPT for full personalized ads'); 596 } 597 598 var cleanPage = redactUrl(window.location.href); 599 var cleanRef = redactUrl(document.referrer); 600 601 try { googletag.pubads().set('page_url', cleanPage); } catch (e) {} 602 if (cleanRef) { 603 try { googletag.pubads().set('referrer_url', cleanRef); } catch (e) {} 604 } 605 try { 606 googletag.pubads().setTargeting('s', 'REDACTED'); 607 googletag.pubads().setTargeting('loc', 'REDACTED'); 608 } catch (e) {} 609 610 dispatchGptReady(mode); 611 } catch (e) { 612 log('Error during GPT configuration', e); 613 } 614 }); 615 } 616 617 function loadGptScript(mode) { 618 if (gptScriptRequested || gptScriptLoaded || gptDecisionFinalized) { 619 log('GPT already requested/loaded â skipping'); 620 return; 621 } 622 623 gptDecisionFinalized = true; 624 gptScriptRequested = true; 625 626 var script = document.createElement('script'); 627 script.async = true; 628 script.src = GPT_URL; 629 630 script.onload = function () { 631 gptScriptLoaded = true; 632 log('GPT script loaded, mode:', mode); 633 configureGptAfterLoad(mode); 634 }; 635 636 script.onerror = function () { 637 gptScriptRequested = false;
638 gptScriptLoaded = false; 639 gptDecisionFinalized = false; 640 log('Failed to load GPT script'); 641 }; 642 643 document.head.appendChild(script); 644 log('Requested GPT script, mode:', mode); 645 } 646 647 function tryLoadGpt() { 648 if (gptDecisionFinalized) return true; 649 var mode = selectGptMode(); 650 if (mode === null) return false; 651 loadGptScript(mode); 652 return true; 653 } 654 655 // Non-regulated: load immediately 656 if (!window.__cmpRegion.regulated) { 657 tryLoadGpt(); 658 return; 659 } 660 661 // Regulated: wait for a consent signal before loading GPT 662 window.addEventListener('consent_initialized', tryLoadGpt); 663 window.addEventListener('consent_updated', tryLoadGpt); 664 665 // Poll briefly in case Klaro resolves before listeners fire 666 var pollCount = 0; 667 var maxPolls = 3; 668 var pollInterval = setInterval(function () { 669 pollCount++; 670 if (tryLoadGpt() || pollCount >= maxPolls) { 671 clearInterval(pollInterval); 672 } 673 }, 100); 674 675 // Hard fallback: no consent signal after a short bootstrap grace period â load NPA 676 setTimeout(function () { 677 if (!gptDecisionFinalized) { 678 log('Consent timeout â falling back to non-personalized GPT'); 679 loadGptScript(GPT_MODE_NPA); 680 } 681 }, 300); 682 })(); 683 })(); 684</script>
vendor: 1 bytes, line 684
684
685<script data-wtwh-analytics-loader>(function(w,d){'use strict'; 686var cfg={"scriptUrl":"https://scripts.wtwhmedia.com/developer/wtwh_analytics/env/prod/index.js","endpoint":"https://collect.wtwhmedia.com/v1/events","site":"www.windpowerengineering.com","pageUrl":"https://www.windpowerengineering.com/category/featured/","country":"US","consentDenied":false}; 687var consentMessageType="arrowfly:analytics-consent"; 688if(w.__wtwhAnalyticsEdgeLoaderInstalled)return; 689w.__wtwhAnalyticsEdgeLoaderInstalled=true; 690var analytics=null; 691var pageTracker=null; 692var consentGranted=!cfg.consentDenied; 693function browserConsent(){ 694 var n=w.navigator||{}; 695 return n.globalPrivacyControl!==true&&n.doNotTrack!=='1'; 696} 697function canTrack(){return consentGranted&&browserConsent();} 698function embedFrames(){ 699 return d.querySelectorAll('iframe[src*="embeds.wtwhmedia.com"],iframe[src*="embeds.dev.wtwhmedia.com"]'); 700} 701function broadcastEmbedConsent(){ 702 var msg={type:consentMessageType,granted:canTrack()}; 703 var frames=embedFrames(); 704 for(var i=0;i<frames.length;i++){ 705 try{ 706 var frame=frames[i]; 707 var targetOrigin=new URL(frame.src,w.location.href).origin; 708 if(frame.contentWindow)frame.contentWindow.postMessage(msg,targetOrigin); 709 }catch(_){} 710 } 711} 712function startPageTracking(){ 713 if(!analytics||pageTracker||!canTrack())return; 714 var api=w.wtwh&&w.wtwh.analytics; 715 if(api&&typeof api.trackPage==='function'){ 716 pageTracker=api.trackPage(analytics,{props:{source:'edge-router',country:cfg.country}}); 717 return; 718 } 719 analytics.track('page_view',{ 720 page_url:cfg.pageUrl, 721 page_host:w.location.hostname, 722 page_path:w.location.pathname, 723 referer:d.referrer||'', 724 props:{source:'edge-router',country:cfg.country,navigation_type:'initial'} 725 }); 726 analytics.flush(); 727} 728function stopPageTracking(){ 729 if(!pageTracker)return; 730 pageTracker.destroy(); 731 pageTracker=null; 732} 733function setConsent(granted){ 734 consentGranted=!!granted; 735 if(consentGranted)startPageTracking(); 736 else stopPageTracking(); 737 broadcastEmbedConsent(); 738} 739function applyConsentEvent(event){ 740 var value=event&&event.detail&&event.detail.consent_analytics; 741 if(value==='granted')setConsent(true); 742 else if(value==='denied')setConsent(false); 743} 744function readKlaroConsent(){ 745 try{ 746 var manager=w.klaro&&typeof w.klaro.getManager==='function'&&w.klaro.getManager(); 747 if(manager&&manager.consents&&typeof manager.consents.analytics==='boolean'){ 748 setConsent(manager.consents.analytics); 749 return true; 750 } 751 }catch(_){} 752 return false; 753} 754function pollKlaroConsent(){ 755 if(!cfg.consentDenied)return; 756 var attempts=0; 757 var timer=w.setInterval(function(){ 758 attempts++; 759 if(readKlaroConsent()||attempts>=20)w.clearInterval(timer); 760 },500); 761} 762function start(){ 763 var api=w.wtwh&&w.wtwh.analytics; 764 if(!api||typeof api.create!=='function')return; 765 analytics=api.create({ 766 site:String(cfg.site||w.location.hostname), 767 endpoint:String(cfg.endpoint), 768 context:{ 769 page_url:String(cfg.pageUrl||w.location.href), 770 page_host:w.location.hostname, 771 page_path:w.location.pathname, 772 referer:d.referrer||'' 773 }, 774 consent:canTrack 775 }); 776 readKlaroConsent(); 777 startPageTracking(); 778 broadcastEmbedConsent(); 779} 780w.addEventListener('consent_initialized',applyConsentEvent); 781w.addEventListener('consent_updated',applyConsentEvent); 782w.addEventListener('load',broadcastEmbedConsent); 783d.addEventListener('load',function(event){ 784 if(event.target&&event.target.tagName==='IFRAME')broadcastEmbedConsent(); 785},true); 786if(w.wtwh&&w.wtwh.analytics)start(); 787else{ 788 var script=d.createElement('script'); 789 script.async=true; 790 script.src=String(cfg.scriptUrl); 791 script.onload=start; 792 (d.head||d.documentElement).appendChild(script); 793} 794pollKlaroConsent(); 795})(window,document);</script>
795<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>
795</head> 796<body class="archive category category-featured category-126 wp-theme-genesis wp-child-theme-ThemeWTWH content-sidebar genesis-breadcrumbs-hidden"> <div id="div-gpt-wpe_wallpaper"></div> 797 <div class="site-container"><header class="site-header"><div class="wrap"><div class="title-area"><p class="site-title"><a href="https://www.windpowerengineering.com/">Windpower Engineering & Development</a></p></div><div class="widget-area header-widget-area"><section id="custom_html-23" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><div id='div-gpt-wpe-header'> 798
798<script> 799 googletag.cmd.push(function() { googletag.display('div-gpt-wpe-header'); }); 800 </script>
800 801</div> 802</div></div></section> 803</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-top" class="menu genesis-nav-menu menu-primary"><li id="menu-item-11217" class="home menu-item"><a href="https://www.windpowerengineering.com/"><span >Home</span></a></li> 804<li id="menu-item-11218" class="menu-item current-menu-ancestor menu-item-has-children"><a href="/recent-windpower-articles/"><span >Articles</span></a> 805<ul class="sub-menu"> 806 <li id="menu-item-47679" class="menu-item"><a href="https://www.windpowerengineering.com/recent-windpower-articles/"><span >Most recent posts</span></a></li> 807 <li id="menu-item-47680" class="menu-item"><a href="https://www.windpowerengineering.com/category/news/"><span >News</span></a></li> 808 <li id="menu-item-47681" class="menu-item current-menu-item"><a href="https://www.windpowerengineering.com/category/featured/" aria-current="page"><span >Featured</span></a></li> 809</ul> 810</li> 811<li id="menu-item-11249" class="menu-item menu-item-has-children"><a><span >Resources</span></a> 812<ul class="sub-menu"> 813 <li id="menu-item-23264" class="menu-item"><a href="https://www.windpowerengineering.com/category/featured/digital-issues/"><span >Digital issues</span></a></li> 814 <li id="menu-item-14495" class="menu-item"><a href="https://www.windpowerengineering.com/category/featured/podcasts/"><span >Podcasts</span></a></li> 815 <li id="menu-item-11531" class="menu-item"><a href="/suppliers/"><span >Suppliers</span></a></li> 816 <li id="menu-item-50170" class="menu-item"><a target="_blank" href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415917/windpower-engineering-development"><span >Webinars</span></a></li> 817 <li id="menu-item-48079" class="menu-item"><a href="https://www.windpowerengineering.com/wind-power-events/"><span >Events</span></a></li> 818</ul> 819</li> 820<li id="menu-item-47684" class="menu-item"><a href="https://www.windpowerengineering.com/windpower-videos/"><span >Videos</span></a></li> 821<li id="menu-item-50249" class="menu-item menu-item-has-children"><a target="_blank" href="https://leadership.solarpowerworldonline.com/"><span >2025 Leadership</span></a> 822<ul class="sub-menu"> 823 <li id="menu-item-50595" class="menu-item"><a target="_blank" href="https://leadership.solarpowerworldonline.com/2024-winners/"><span >2024 Winners</span></a></li> 824 <li id="menu-item-49890" class="menu-item"><a href="https://www.windpowerengineering.com/2023-leadership-in-wind-energy/"><span >2023 Winners</span></a></li> 825 <li id="menu-item-49747" class="menu-item"><a href="https://www.windpowerengineering.com/2022-leadership-in-wind-energy-winners/"><span >2022 Winners</span></a></li> 826</ul> 827</li> 828<li id="menu-item-49017" class="menu-item"><a href="/windpower-engineering-development-magazine-subscription-form"><span >Magazine</span></a></li> 829<li id="menu-item-50678" class="menu-item"><a target="_blank" href="https://www.mediakit.windpowerengineering.com/"><span >Advertise</span></a></li> 830<li id="menu-item-11255" class="site-header--subscribe menu-item"><a href="/subscribe-to-newsletter/"><span >Subscribe</span></a></li> 831<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"> 832 <div id="jumbo-banner-ad-container" style="min-width: 970px; min-height: 90px;"></div> 833 </div> 834 <div class="archive-intro"><div class="wrap"><h1 class="archive-title"><span>Featured</span></h1><div class="archive-description"><p>Windpower Engineering brings the design engineer of today the latest data and computations for designing a windpower system. Read through our featured articles for more details.</p> 835</div></div></div><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="Case study: BLADEcontrol delivers timely monitoring on blade structural health"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.windpowerengineering.com/author/contributor/" class="entry-author-link" rel="author"><span class="entry-author-name">WPED Contributor</span></a></span> | <time class="entry-time">October 7, 2025</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health/">Case study: BLADEcontrol delivers timely monitoring on blade structural health</a></h2> 836</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/case-study-bladecontrol-delivers-timely-monitoring-on-blade-structural-health/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2016/03/edf-268x170.jpg" class="alignleft post-image entry-image wp-image-26821" alt="" decoding="async" /></a><p>EDF power solutions was interested in advancing its wind blade monitoring capabilities for potential blade damage in its fleet of Senvi
836on MM92 turbines in California. Scheduling crane usage can be costly and disruptive to operations, so having a more proactive and discrete blade monitoring solution would allow EDF to identify potential cracks. Most importantly, EDF…</p> 837</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Overlooked and underleveraged: Why ‘lite repowering’ is wind energy’s best near-term bet"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://pivotgen.com/" class="entry-author-link" rel="author"><span class="entry-author-name">Bryan Reed and Meredyth Crichton, PivotGen</span></a></span> | <time class="entry-time">May 8, 2025</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/overlooked-and-underleveraged-why-lite-repowering-is-wind-energys-best-near-term-bet/">Overlooked and underleveraged: Why ‘lite repowering’ is wind energy’s best near-term bet</a></h2> 838</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/overlooked-and-underleveraged-why-lite-repowering-is-wind-energys-best-near-term-bet/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2025/05/Stockyard-Wind-Farm-Porterhouse-site-268x170.jpg" class="alignleft post-image entry-image wp-image-50683" alt="" decoding="async" loading="lazy" /></a><p>Despite years of investment and innovation, the U.S. energy transition continues to lag. According to Ember, a globally recognized climate and energy think tank, wind and solar accounted for just over 17% of Americaâs electricity generation in 2024 â far from whatâs needed to reach net-zero targets. Transmission bottlenecks, overloaded interconnection queues, and stalled feasibility…</p> 839</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="The smarter the wind turbine, the stronger the grid"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.emerson.com/en-us" class="entry-author-link" rel="author"><span class="entry-author-name">Thomas Andersen, VP of renewable technologies, Emerson</span></a></span> | <time class="entry-time">April 17, 2025</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/the-smarter-the-wind-turbine-the-stronger-the-grid/">The smarter the wind turbine, the stronger the grid</a></h2> 840</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/the-smarter-the-wind-turbine-the-stronger-the-grid/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2025/04/emerson-stock-wind-268x170.jpg" class="alignleft post-image entry-image wp-image-50661" alt="" decoding="async" loading="lazy" /></a><p>Electrification continues to expand around the globe. While the sudden upsurge in the number of electric vehicles may be the most obvious example of the growth of electrification, people are also adding a wide array of new appliances, tools, mobile devices and more to their lifestyles, consuming far more electrical energy than ever before. Rising…</p> 841</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Smart software: Unlocking the true potential of wind power"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://new.abb.com/about/our-businesses/motion" class="entry-author-link" rel="author"><span class="entry-author-name">Jonas Wahlstroem, CTO, Renewable Business, ABB Motion</span></a></span> | <time class="entry-time">November 19, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/smart-software-unlocking-the-true-potential-of-wind-power/">Smart software: Unlocking the true potential of wind power</a></h2> 842</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/smart-software-unlocking-the-true-potential-of-wind-power/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2021/08/abb-wind-composite-268x170.jpg" class="alignleft post-image entry-image wp-image-48899" alt="" decoding="async" loading="lazy" /></a><p>While wind turbines have become a familiar sight across our landscapes and are an important source of energy, many of these impressive structures have potential to generate even more energy and operate more efficiently. Much has been discussed around the creation of new wind projects, but there are many aging wind farms that could be…</p> 843</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Repowering wind farms to repower America: A case for upgrading existing projects to meet climate goals"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.exuspartners.com/" class="entry-author-link" rel="author"><span class="entry-author-name">Jim Spencer, President & CEO, Exus Renewables North America</span></a></span> | <time class="entry-time">October 29, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/repowering-wind-farms-to-repower-america-a-case-for-upgrading-existing-projects-to-meet-climate-goals/">Repowering wind farms to repower America: A case for upgrading existing projects to meet climate goals</a></h2> 844</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/repowering-wind-farms-to-repower-america-a-case-for-upgrading-existing-projects-to-meet-climate-goals/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2022/01/Pattern_Energy_Group_NM-stock-268x170.jpg" class="alignleft post-image entry-image wp-image-49175" alt="" decoding="async" loading="lazy" /></a><p>The United States is on pace to miss its climate goals by a wide margin. In the 2015 Paris Agreement, the country pledged to cut greenhouse gas emissions by 50% by 2030. But as of January 2024, nine years on, the reduction has been only 17%, leaving the remaining 33% to be eliminated over the…</p> 845</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Strategic uses of AI in wind resource assessment for wind farms"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.triumphus.com/" class="entry-author-link" rel="author"><span class="entry-author-name">Dave Hopson, managing partner and founder, Triumphus</span></a></span> | <time class="entry-time">October 24, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/strategic-uses-of-ai-in-wind-resource-assessment-for-wind-farms/">Strategic uses of AI in wind resource assessment for wind farms</a></h2> 846</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/strategic-uses-of-ai-in-wind-resource-assessment-for-wind-farms/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2022/10/stock-wind-under-268x170.jpg" class="alignleft post-image entry-image wp-image-49698" alt="" decoding="async" loading="lazy" /></a><p>The potential of artificial intelligence (AI) in the renewables industry is immense. By harnessing advanced data analysis, machine learning and predictive modeling techniques, AI can revolutionize wind resource assessment and vibration analysis of wind farms. While there are many opportunities to apply AI to wind farm development, it is essential to have an enterprise-wide AI…</p> 847</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Fireproofing offshore wind for a sustainable future"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://blazeman.uk/" class="entry-author-link" rel="author"><span class="entry-author-name">Stuart White, Operations Director at Blaze Manufacturing Solutions</span></a></span> | <time class="entry-time">October 15, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/fireproofing-offshore-wind-for-a-sustainable-future/">Fireproofing offshore wind for a sustainable future</a></h2> 848</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/fireproofing-offshore-wind-for-a-sustainable-future/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2021/11/stock-offshore-lightning-268x170.jpg" class="alignleft post-image entry-image wp-image-49075" alt="" decoding="async" loading="lazy" /></a><p>The offshore wind sector is critical to achieving net-zero goals and ensuring energy security. As governments around the world hedge their bets on offshore wind being a key driver to meeting those sustainability goals, it has never been more important to ensure that safety is at the forefront of decision making to keep critical assets…</p> 849</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="September 2024 Issue: Caring for offshore wind vessels"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.windpowerengineering.com/author/wpednews/" class="entry-author-link" rel="author"><span class="entry-author-name">WPED Staff</span></a></span> | <time class="entry-time">September 1, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/september-2024-issue-caring-for-offshore-wind-vessels/">September 2024 Issue: Caring for offshore wind vessels</a></h2> 850</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/september-2024-issue-caring-for-offshore-wind-vessels/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2024/09/WPE-sept-2024-cover-268x170.jpg" class="alignleft post-image entry-image wp-image-50484" alt="" decoding="async" loading="lazy" srcset="https://www.windpowerengineering.com/wp-content/uploads/2024/09/WPE-sept-2024-cover-268x170.jpg 268w, https://www.windpowerengineering.com/wp-content/uploads/2024/09/WPE-sept-2024-cover-500x317.jpg 500w, https://www.windpowerengineering.com/wp-content/uploads/2024/09/WPE-sept-2024-cover-368x233.jpg 368w, https://www.windpowerengineering.com/wp-content/uploads/2024/09/WPE-sept-2024-cover.jpg 536w" sizes="auto, (max-width: 268px) 100vw, 268px" /></a><p>Windpower Engineering & Development is a growing wind-power resource targeting professionals involved in all aspects of a wind farmâs lifecycle, including developers, engineers, technicians, manufacturers and researchers that work to
850site, build, maintain, repair and optimize wind-related components, software and projects. The goal at Windpower Engineering & Development is to educate and expand the knowledge…</p> 851</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="How should carbon be valued in offshore wind?"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.cowi.com/" class="entry-author-link" rel="author"><span class="entry-author-name">Greg Matzat, VP & Market Director of Offshore Renewables, COWI in North America</span></a></span> | <time class="entry-time">August 21, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/how-should-carbon-be-valued-in-offshore-wind/">How should carbon be valued in offshore wind?</a></h2> 852</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/how-should-carbon-be-valued-in-offshore-wind/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2019/12/nrel-stock-offshore-wave-268x170.jpg" class="alignleft post-image entry-image wp-image-47909" alt="" decoding="async" loading="lazy" /></a><p>The offshore wind industry in North America stands on the cusp of transformative growth, with considerable progress made toward the U.S. goal to deploy 30 GW of offshore wind by 2030. Yet, as the sector races toward ambitious deployment targets, the critical lens of sustainability has, at times, been overshadowed by the immediate objectives of…</p> 853</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="A conversation on offshore wind opinions in New England"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.cesa.org/" class="entry-author-link" rel="author"><span class="entry-author-name">Clean Energy States Alliance (CESA)</span></a></span> | <time class="entry-time">August 12, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/a-conversation-on-offshore-wind-opinions-in-new-england/">A conversation on offshore wind opinions in New England</a></h2> 854</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/a-conversation-on-offshore-wind-opinions-in-new-england/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2020/11/stock-orsted-offshore-268x170.jpg" class="alignleft post-image entry-image wp-image-48530" alt="" decoding="async" loading="lazy" /></a><p>In the fall of 2023, Connecticut, Massachusetts and Rhode Island signed a memorandum of understanding to collaborate on offshore wind procurement. The MOU allows project developers to submit bids to multiple states at once, which could attract larger projects and drive down energy costs. This past July, the Barr Foundation and Hart Research published views on findings from…</p> 855</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Advancements in carbon fiber composites recycling"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.fairmat.tech/" class="entry-author-link" rel="author"><span class="entry-author-name">Dr. Michael Gaultois, Chief Scientific Officer, Fairmat</span></a></span> | <time class="entry-time">August 12, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/advancements-in-carbon-fiber-composites-recycling/">Advancements in carbon fiber composites recycling</a></h2> 856</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/advancements-in-carbon-fiber-composites-recycling/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2024/08/fairmat-chips-770-268x170.jpg" class="alignleft post-image entry-image wp-image-50433" alt="" decoding="async" loading="lazy" /></a><p>In various high-performance sectors like wind energy, carbon fiber composites are indispensable due to their light weight and high-strength properties. However, the end-of-life management of carbon fiber waste poses a significant environmental challenge. Traditional disposal methods, including incineration and landfilling, are not sustainable. Recent advancements in carbon fiber recycling have fostered sustainable solutions across multiple…</p> 857</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Fortifying Gulf of Mexico wind farms against hurricanes"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.stormgeo.com/" class="entry-author-link" rel="author"><span class="entry-author-name">Rick Scott, senior industry manager and meteorologist, StormGeo</span></a></span> | <time class="entry-time">April 30, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/fortifying-gulf-of-mexico-wind-farms-against-hurricanes/">Fortifying Gulf of Mexico wind farms against hurricanes</a></h2> 858</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/fortifying-gulf-of-mexico-wind-farms-against-hurricanes/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2022/04/stock-hurricane-cyclone-268x170.jpg" class="alignleft post-image entry-image wp-image-49396" alt="" decoding="async" loading="lazy" /></a><p>The Gulf of Mexico, with its vast expanse and untapped potential, has become a focal point for wind energy development. However, the regionâs susceptibility to hurricanes and extreme weather events poses significant challenges to these renewable energy infrastru
858ctures. The devastating impacts of such events have underscored the urgent need for robust preparedness strategies to safeguard…</p> 859</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="April 2024 Issue: Knowledge Is Power: Blade condition monitoring’s powerful insight for wind project owners"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.windpowerengineering.com/author/wpednews/" class="entry-author-link" rel="author"><span class="entry-author-name">WPED Staff</span></a></span> | <time class="entry-time">April 2, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/april-2024-issue-knowledge-is-power/">April 2024 Issue: Knowledge Is Power: Blade condition monitoring’s powerful insight for wind project owners</a></h2> 860</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/april-2024-issue-knowledge-is-power/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2024/04/WPE-Apr-2020-cover-268x170.jpg" class="alignleft post-image entry-image wp-image-50349" alt="" decoding="async" loading="lazy" srcset="https://www.windpowerengineering.com/wp-content/uploads/2024/04/WPE-Apr-2020-cover-268x170.jpg 268w, https://www.windpowerengineering.com/wp-content/uploads/2024/04/WPE-Apr-2020-cover-500x317.jpg 500w, https://www.windpowerengineering.com/wp-content/uploads/2024/04/WPE-Apr-2020-cover-368x233.jpg 368w, https://www.windpowerengineering.com/wp-content/uploads/2024/04/WPE-Apr-2020-cover.jpg 536w" sizes="auto, (max-width: 268px) 100vw, 268px" /></a><p>Windpower Engineering & Development is a growing wind-power resource targeting professionals involved in all aspects of a wind farmâs lifecycle, including developers, engineers, technicians, manufacturers and researchers that work to site, build, maintain, repair and optimize wind-related components, software and projects. The goal at Windpower Engineering & Development is to educate and expand the knowledge…</p> 861</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="As wind turbines grow larger, so do risks in tornado-prone areas"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://alliant.com/risk-management/alliant-specialty/power-utility-renewables/" class="entry-author-link" rel="author"><span class="entry-author-name">Edward Stewart, senior VP, Alliant Insurance Services</span></a></span> | <time class="entry-time">March 18, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/as-wind-turbines-grow-larger-so-do-risks-in-tornado-prone-areas/">As wind turbines grow larger, so do risks in tornado-prone areas</a></h2> 862</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/as-wind-turbines-grow-larger-so-do-risks-in-tornado-prone-areas/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2024/02/tornado-lightning-268x170.jpg" class="alignleft post-image entry-image wp-image-50319" alt="" decoding="async" loading="lazy" /></a><p>Underwriting insurance for wind turbines involves a comprehensive evaluation of factors that can influence the risk and potential losses associated with these structures. Insurers consider a range of specific elements to determine the level of risk and to determine insurance premiums. Key factors involved in underwriting wind turbine insurance include the geographic location and climate…</p> 863</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Transmission issues are key hurdle for offshore wind projects in the USA"><header class="entry-header"><p class="entry-meta"><span class="entry-author">
863By <a href="https://www.wsp.com/en-us/" class="entry-author-link" rel="author"><span class="entry-author-name">Tershara Matthews, Offshore Wind Policy Lead, WSP USA</span></a></span> | <time class="entry-time">March 11, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/transmission-issues-are-key-hurdle-for-offshore-wind-projects-in-the-usa/">Transmission issues are key hurdle for offshore wind projects in the USA</a></h2> 864</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/transmission-issues-are-key-hurdle-for-offshore-wind-projects-in-the-usa/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2024/02/vineyard-wind-tow-2-offshore-usa-268x170.jpg" class="alignleft post-image entry-image wp-image-50316" alt="" decoding="async" loading="lazy" /></a><p>Recent news of offshore wind turbine projects in New England waters shows that there is renewed interest in this water-bound source of wind power. Although the United States has been slower to adopt offshore wind energy â the European and Asian markets already boast more than 10,000 offshore wind turbines â it is encouraging to…</p> 865</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="The cost-efficient floating wind conundrum"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.houlderltd.com/" class="entry-author-link" rel="author"><span class="entry-author-name">Mark Goalen, Chief Operating Officer, Houlder</span></a></span> | <time class="entry-time">March 4, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/the-cost-efficient-floating-wind-conundrum/">The cost-efficient floating wind conundrum</a></h2> 866</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/the-cost-efficient-floating-wind-conundrum/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2022/10/stock-float-construction-equinor-hywind-Tampen-268x170.jpg" class="alignleft post-image entry-image wp-image-49729" alt="" decoding="async" loading="lazy" /></a><p>Demonstrator projects show that offshore floating wind is technically proven as a feasible concept. The challenge is how to deliver it for utility-scale projects within the budgets already committed to. Finding a cost-efficient and practical solution that best meets the demands of developers â while also taking into account the perspectives of all stakeholders â…</p> 867</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Knowledge is power: Blade condition monitoringâs powerful insight with web-based visualization"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.weidmuller.com/en/index.jsp" class="entry-author-link" rel="author"><span class="entry-author-name">Scott Sattler, wind business development manager, and Pete Tecos, director of new energy solutions, Weidmuller USA</span></a></span> | <time class="entry-time">February 20, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/knowledge-is-power-blade-condition-monitorings-powerful-insight-with-web-based-visualization/">Knowledge is power: Blade condition monitoringâs powerful insight with web-based visualization</a></h2> 868</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/knowledge-is-power-blade-condition-monitorings-powerful-insight-with-web-based-visualization/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2024/02/wind-turbine-blade-268x170.jpg" class="alignleft post-image entry-image wp-image-50278" alt="" decoding="async" loading="lazy" /></a><p>The profitability of a wind farm is inextricably linked to the energy output and availability of the turbines at the site. Therefore, as every wind site manager knows all too well, turbine downtime must be prevented or significantly reduced to optimize power production throughout the year. While itâs an indisputable fact that a mechanical or…</p> 869</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="Essential safety tips for wind farm technicians: Protecting workers in extreme conditions"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.allseasonsuniforms.com/" class="entry-author-link" rel="author"><span class="entry-author-name">Nick Warrick, Sales Manager, All Seasons Uniforms</span></a></span> | <time class="entry-time">February 6, 2024</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/essential-safety-tips-for-wind-farm-technicians-protecting-workers-in-extreme-conditions/">Essential safety tips for wind farm technicians: Protecting workers in extreme conditions</a></h2> 870</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/essential-safety-tips-for-wind-farm-technicians-protecting-workers-in-extreme-conditions/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2024/02/stock-wind-tech-268x170.jpg" class="alignleft post-image entry-image wp-image-50257" alt="" decoding="async" loading="lazy" /></a><p>The job market for wind turbine technicians is growing rapidly. The Bureau of Labor Statistics (BLS) estimates that employment for wind farm techs will grow 45% between 2022 and 2032. Wind farm workers and turbine technicians perform vital maintenance and repairs on wind turbines, ensuring that they can continue to deliver reliable, clean energy to…</p> 871</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="December 2023 Issue: Renewable Energy: A Year in Review"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.windpowerengineering.com/author/wpednews/" class="entry-author-link" rel="author"><span class="entry-author-name">WPED Staff</span></a></span> | <time class="entry-time">December 14, 2023</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/december-2023-issue-renewable-energy-a-year-in-review/">December 2023 Issue: Renewable Energy: A Year in Review</a></h2> 872</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/december-2023-issue-renewable-energy-a-year-in-review/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2024/01/WPE-Dec-2023-cover-268x170.jpg" class="alignleft post-image entry-image wp-image-50233" alt="" decoding="async" loading="lazy" srcset="https://www.windpowerengineering.com/wp-content/uploads/2024/01/WPE-Dec-2023-cover-268x170.jpg 268w, https://www.windpowerengineering.com/wp-content/uploads/2024/01/WPE-Dec-2023-cover-500x317.jpg 500w, https://www.windpowerengineering.com/wp-content/uploads/2024/01/WPE-Dec-2023-cover-368x233.jpg 368w, https://www.windpowerengineering.com/wp-content/uploads/2024/01/WPE-Dec-2023-cover.jpg 536w" sizes="auto, (max-width: 268px) 100vw, 268px" /></a><p>
872Renewable Energy 2023: A Year in Review Welcome to this special edition of Solar Power World and Windpower Engineering & Development, what we are calling âRenewable Energy 2023: A Year in Review.â Each year, the staff of WTWH Mediaâs two renewable brands reflects on the last 12 months to prepare for whatâs trending into the…</p> 873</div><footer class="entry-footer"></footer></article><article class="type-post entry has-post-thumbnail" aria-label="The turbulent forces affecting the U.S. wind and renewables industry in 2024"><header class="entry-header"><p class="entry-meta"><span class="entry-author">By <a href="https://www.ardian.com/infrastructure" class="entry-author-link" rel="author"><span class="entry-author-name">Todd Wynn, CEO of Skyline Renewables, and Olivia Genereux, Senior Investment Manager of Ardian Infrastructure</span></a></span> | <time class="entry-time">December 4, 2023</time></p><h2 class="entry-title"><a class="entry-title-link" rel="bookmark" href="https://www.windpowerengineering.com/the-turbulent-forces-affecting-the-u-s-wind-and-renewables-industry-in-2024/">The turbulent forces affecting the U.S. wind and renewables industry in 2024</a></h2> 874</header><div class="entry-content"><a class="entry-image-link" href="https://www.windpowerengineering.com/the-turbulent-forces-affecting-the-u-s-wind-and-renewables-industry-in-2024/" aria-hidden="true" tabindex="-1"><img width="268" height="170" src="https://www.windpowerengineering.com/wp-content/uploads/2023/11/stock-wind-1-268x170.jpg" class="alignleft post-image entry-image wp-image-50186" alt="" decoding="async" loading="lazy" /></a><p>As the United States positions itself for a sustainable and greener future, the wind power and renewables industry faces a pivotal moment in 2024. Despite over a decade of unrestrained growth in new renewable capacity additions, sector headwinds have tempered that trajectory. The past year has shown how renewables are particularly influenced by the dynamic…</p> 875</div><footer class="entry-footer"></footer></article><div class="archive-pagination pagination"><div class="pagination-next alignright"><a href="https://www.windpowerengineering.com/category/featured/page/2/" class="button">Next ></a></div></div></main><aside class="sidebar sidebar-primary widget-area" role="complementary" aria-label="Primary Sidebar"><section id="custom_html-24" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><div id='div-gpt-wpe_sidebar1'> 876
876<script> 877 googletag.cmd.push(function() { googletag.display('div-gpt-wpe_sidebar1'); }); 878 </script>
878 879</div> 880<div id='div-gpt-wpe_sidebarbottom_primary'> 881
881<script> 882 googletag.cmd.push(function() { googletag.display('div-gpt-wpe_sidebarbottom_primary'); }); 883 </script>
883 884</div></div></div></section> 885<section id="wtwh_soundcloud_widget-2" class="widget wtwh_soundcloud_widget"><div class="widget-wrap"><h4 class="widget-title widgettitle">Podcasts</h4> 886<div class="wtwh-soundcloud-player-wrapper"><div class="wtwh-soundcloud-player"><div><iframe width="100%" height="300" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1675662996&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"></iframe><div class="SoundCloudTitle">Wind Spotlight: Looking back at a year of Thrive with ZF Wind Power</div></div> <a href="/category/featured/podcasts/" class="SoundCloudTitle SoundCloudPubDate" target="_blank">See More ></a></div></div></div></section> 887<section id="custom_html-22" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">Windpower Engineering & Development Digital Edition Archive</h4> 888<div class="textwidget custom-html-widget"><div id="digital" style="padding: 0 15px 10px 15px;"> 889 <a href="/category/digital-issues/"> 890 <img align="left" style="padding:0 10px; width: 100px;" src="https://www.windpowerengineering.com/wp-content/uploads/2022/03/WPE-March-2022-cover-300.jpg" alt="Digital Edition" /> 891 </a> 892 <p> 893 <a href="/category/digital-issues/" style="text-decoration: underline;">Explore the full archive of digital issues</a> of <em>Windpower Engineering & Development</em>, presented in a high-quality, user-friendly format. Access current and past editions, clip, share, and download valuable content from the industryâs leading wind power engineering resource. 894 </p> 895 <div style="text-align: center; height: 60px; width: 136px; margin: 0 auto;"> 896 <div> 897 <a href="/category/digital-issues/" target="_parent" rel="nofollow"> 898 <button class="greenbutton" style="background-color: #80a0c1; color: white; font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor: pointer;">Back Issues</button> 899 </a> 900 </div> 901 </div> 902</div> 903 904</div></div></section> 905<section id="custom_html-25" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"> 906<div id='div-gpt-wpe_sidebar2'> 907
907<script> 908 googletag.cmd.push(function() { googletag.display('div-gpt-wpe_sidebar2'); }); 909 </script>
909 910</div> 911</div></div></section> 912</aside></div></div></div><div class="footer-socials"><div class="wrap"><label style="color:#ffffff">Connect with Windpower Engineering & Development </label> <a href="https://www.facebook.com/WindpowerEngineering" target="_blank" rel="noopener noreferrer"><i class="icon-facebook"></i></a><a href="https://twitter.com/Windpower_Eng" target="_blank" rel="noopener noreferrer"><i class="icon-twitter"></i></a><a href="https://www.linkedin.com/company/windpower-engineering-development/" target="_blank" rel="noopener noreferrer"><i class="icon-linkedin"></i></a><a href="https://www.youtube.com/windpowerengineering" target="_blank" rel="noopener noreferrer"><i class="icon-youtube"></i></a></div></div><footer class="site-footer"><div class="wrap"><div class="row"><div class="footer-logo"><a href="https://www.windpowerengineering.com">Windpower Engineering & Development</a></div><div class="footer-menu"><div class="menu-footer-menu-container"><ul id="menu-footer-menu" class="menu"><li id="menu-item-38344" class="menu-item"><a href="/recent-windpower-articles/">Wind Articles</a></li> 913<li id="menu-item-48883" class="menu-item"><a href="https://www.solarpowerworldonline.com/">Solar Power World</a></li> 914<li id="menu-item-42305" class="menu-item"><a target="_blank" href="/windpower-engineering-development-magazine-subscription-form/">Subscribe to Windpower Engineering</a></li> 915<li id="menu-item-45015" class="menu-item"><a href="https://www.windpowerengineering.com/meetourteam/">About Us/Contact Us</a></li> 916</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="http://www.arrowfly.com/privacy-policy/" target="_blank">Privacy Policy</a> | <a href="https://www.mediakit.windpowerengineering.com/" target="_blank">Advertising</a> </p></div></div></div></footer></div><div class="site-search"><div class="wrap"><div class="search-inner"><h2>Search Windpower Engineering & Development </h2><form class="search-form" method="get" action="https://www.windpowerengineering.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.windpowerengineering.com/?s={s}"></form></div></div></div>
916<script type="speculationrules"> 917{"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"}]} 918</script>
918 919<!-- Google Tag Manager (noscript) Global -->
vendor: 68 bytes, lines 919-920
919 920<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
920GTM-MMC9PJ9
vendor: 83 bytes, lines 920-921
920" 921height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
922<!-- End Google Tag Manager (noscript) --> 923 924<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 924-925
924 925<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
925GTM-5WXXHJ7
vendor: 83 bytes, lines 925-926
925" 926height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
927<!-- End Google Tag Manager (noscript) --> 928 929 930 931<div id='div-gpt-wpe_interstitial'> 932
932<script> 933 googletag.cmd.push(function() { googletag.display('div-gpt-wpe_interstitial'); }); 934 </script>
934 935</div> 936 937<div id='div-gpt-wpe_wallpaper'> 938
938<script> 939 googletag.cmd.push(function() { googletag.display('div-gpt-wpe_wallpaper'); }); 940 </script>
940 941</div> 942 943<div id='div-gpt-wpe_allstreamflex'> 944
944<script> 945 googletag.cmd.push(function() { googletag.display('div-gpt-wpe_allstreamflex'); }); 946 </script>
946 947</div> 948 949 950<div id='div-gpt-wpe_allstreamprelude'> 951
951<script> 952 googletag.cmd.push(function() { googletag.display('div-gpt-wpe_allstreamprelude'); }); 953 </script>
953 954</div> 955 956<div id="sidr-mobile-menu" class="sidr right"><a class="sidr-menu-close" href="#"><i class="icon-close"></i></a><div class="menu-main-top-container"><ul id="menu-main-top-1" class="menu"><li class="home menu-item"><a href="https://www.windpowerengineering.com/">Home</a></li> 957<li class="menu-item current-menu-ancestor menu-item-has-children"><a href="/recent-windpower-articles/">Articles</a> 958<ul class="sub-menu"> 959 <li class="menu-item"><a href="https://www.windpowerengineering.com/recent-windpower-articles/">Most recent posts</a></li> 960 <li class="menu-item"><a href="https://www.windpowerengineering.com/category/news/">News</a></li> 961 <li class="menu-item current-menu-item"><a href="https://www.windpowerengineering.com/category/featured/" aria-current="page">Featured</a></li> 962</ul> 963</li> 964<li class="menu-item menu-item-has-children"><a>Resources</a> 965<ul class="sub-menu"> 966 <li class="menu-item"><a href="https://www.windpowerengineering.com/category/featured/digital-issues/">Digital issues</a></li> 967 <li class="menu-item"><a href="https://www.windpowerengineering.com/category/featured/podcasts/">Podcasts</a></li> 968 <li class="menu-item"><a href="/suppliers/">Suppliers</a></li> 969 <li class="menu-item"><a target="_blank" href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415917/windpower-engineering-development">Webinars</a></li> 970 <li class="menu-item"><a href="https://www.windpowerengineering.com/wind-power-events/">Events</a></li> 971</ul> 972</li> 973<li class="menu-item"><a href="https://www.windpowerengineering.com/windpower-videos/">Videos</a></li> 974<li class="menu-item menu-item-has-children"><a target="_blank" href="https://leadership.solarpowerworldonline.com/">2025 Leadership</a> 975<ul class="sub-menu"> 976 <li class="menu-item"><a target="_blank" href="https://leadership.solarpowerworldonline.com/2024-winners/">2024 Winners</a></li> 977 <li class="menu-item"><a href="https://www.windpowerengineering.com/2023-leadership-in-wind-energy/">2023 Winners</a></li> 978 <li class="menu-item"><a href="https://www.windpowerengineering.com/2022-leadership-in-wind-energy-winners/">2022 Winners</a></li> 979</ul> 980</li> 981<li class="menu-item"><a href="/windpower-engineering-development-magazine-subscription-form">Magazine</a></li> 982<li class="menu-item"><a target="_blank" href="https://www.mediakit.windpowerengineering.com/">Advertise</a></li> 983<li class="site-header--subscribe menu-item"><a href="/subscribe-to-newsletter/">Subscribe</a></li> 984</ul></div></div></div> 985
985<script type="text/html" id="tmpl-media-frame"> 986 <div class="media-frame-title" id="media-frame-title"></div> 987 <h2 class="media-frame-menu-heading">Actions</h2> 988 <button type="button" class="button button-link media-frame-menu-toggle" aria-expanded="false"> 989 Menu <span class="dashicons dashicons-arrow-down" aria-hidden="true"></span> 990 </button> 991 <div class="media-frame-menu"></div> 992 <div class="media-frame-tab-panel"> 993 <div class="media-frame-router"></div> 994 <div class="media-frame-content"></div> 995 </div> 996 <h2 class="media-frame-actions-heading screen-reader-text"> 997 Selected media actions </h2> 998 <div class="media-frame-toolbar"></div> 999 <div class="media-frame-uploader"></div> 1000 </script>
1000 1001 1002
1002<script type="text/html" id="tmpl-media-modal"> 1003 <div id="wp-media-modal" tabindex="0" class="media-modal wp-core-ui" role="dialog" aria-labelledby="media-frame-title"> 1004 <# if ( data.hasCloseButton ) { #> 1005 <button type="button" class="media-modal-close"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text"> 1006 Close dialog </span></button> 1007 <# } #> 1008 <div class="media-modal-content" role="document"></div> 1009 </div> 1010 <div class="media-modal-backdrop"></div> 1011 </script>
1011 1012 1013
1013<script type="text/html" id="tmpl-uploader-window"> 1014 <div class="uploader-window-content"> 1015 <div class="uploader-editor-title">Drop files to upload</div> 1016 </div> 1017 </script>
1017 1018 1019
1019<script type="text/html" id="tmpl-uploader-editor"> 1020 <div class="uploader-editor-content"> 1021 <div class="uploader-editor-title">Drop files to upload</div> 1022 </div> 1023 </script>
1023 1024 1025
1025<script type="text/html" id="tmpl-uploader-inline"> 1026 <# var messageClass = data.message ? 'has-upload-message' : 'no-upload-message'; #> 1027 <# if ( data.canClose ) { #> 1028 <button class="close dashicons dashicons-no"><span class="screen-reader-text"> 1029 Close uploader </span></button> 1030 <# } #> 1031 <div class="uploader-inline-content {{ messageClass }}"> 1032 <# if ( data.message ) { #> 1033 <h2 class="upload-message">{{ data.message }}</h2> 1034 <# } #> 1035 <div class="upload-ui"> 1036 <h2 class="upload-instructions drop-instructions">Drop files to upload</h2> 1037 <p class="upload-instructions drop-instructions">or</p> 1038 <button type="button" class="browser button button-hero" aria-describedby="post-upload-info">Select Files</button> 1039 </div> 1040 1041 <div class="upload-inline-status"></div> 1042 1043 <div class="post-upload-ui" id="post-upload-info"> 1044 1045 <p class="max-upload-size"> 1046 Maximum upload file size: 50 MB. </p> 1047 1048 <# if ( data.suggestedWidth && data.suggestedHeight ) { #> 1049 <p class="suggested-dimensions"> 1050 Suggested image dimensions: {{data.suggestedWidth}} by {{data.suggestedHeight}} pixels. </p> 1051 <# } #> 1052 1053 </div> 1054 </div> 1055 </script>
1055 1056 1057
1057<script type="text/html" id="tmpl-media-library-view-switcher"> 1058 <a href="https://www.windpowerengineering.com/wp-admin/upload.php?mode=list" class="view-list"> 1059 <span class="screen-reader-text"> 1060 List view </span> 1061 </a> 1062 <a href="https://www.windpowerengineering.com/wp-admin/upload.php?mode=grid" class="view-grid current" aria-current="page"> 1063 <span class="screen-reader-text"> 1064 Grid view </span> 1065 </a> 1066 </script>
1066 1067 1068
1068<script type="text/html" id="tmpl-uploader-status"> 1069 <h2>Uploading</h2> 1070 1071 <div class="media-progress-bar"><div></div></div> 1072 <div class="upload-details"> 1073 <span class="upload-count"> 1074 <span class="upload-index"></span> / <span class="upload-total"></span> 1075 </span> 1076 <span class="upload-detail-separator">–</span> 1077 <span class="upload-filename"></span> 1078 </div> 1079 <div class="upload-errors"></div> 1080 <button type="button" class="button upload-dismiss-errors">Dismiss errors</button> 1081 </script>
1081 1082 1083
1083<script type="text/html" id="tmpl-uploader-status-error"> 1084 <span class="upload-error-filename word-wrap-break-word">{{{ data.filename }}}</span> 1085 <span class="upload-error-message">{{ data.message }}</span> 1086 </script>
1086 1087 1088
1088<script type="text/html" id="tmpl-edit-attachment-frame"> 1089 <div class="edit-media-header"> 1090 <button class="left dashicons"<# if ( ! data.hasPrevious ) { #> disabled<# } #>><span class="screen-reader-text">Edit previous media item</span></button> 1091 <button class="right dashicons"<# if ( ! data.hasNext ) { #> disabled<# } #>><span class="screen-reader-text">Edit next media item</span></button> 1092 <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> 1093 </div> 1094 <div class="media-frame-title"></div> 1095 <div class="media-frame-content"></div> 1096 </script>
1096 1097 1098
1098<script type="text/html" id="tmpl-attachment-details-two-column"> 1099 <div class="attachment-media-view {{ data.orientation }}"> 1100 <h2 class="screen-reader-text">Attachment Preview</h2> 1101 <div class="thumbnail thumbnail-{{ data.type }}"> 1102 <# if ( data.uploading ) { #> 1103 <div class="media-progress-bar"><div></div></div> 1104 <# } else if ( data.sizes && data.sizes.full ) { #> 1105 <img class="details-image" src="{{ data.sizes.full.url }}" draggable="false" alt="" /> 1106 <# } else if ( data.sizes && data.sizes.large ) { #> 1107 <img class="details-image" src="{{ data.sizes.large.url }}" draggable="false" alt="" /> 1108 <# } else if ( -1 === jQuery.inArray( data.type, [ 'audio', 'video' ] ) ) { #> 1109 <img class="details-image icon" src="{{ data.icon }}" draggable="false" alt="" /> 1110 <# } #> 1111 1112 <# if ( 'audio' === data.type ) { #> 1113 <div class="wp-media-wrapper wp-audio"> 1114 <audio crossorigin="anonymous" style="visibility: hidden" controls class="wp-audio-shortcode" width="100%" preload="none"> 1115 <source type="{{ data.mime }}" src="{{ data.url }}" /> 1116 </audio> 1117 </div> 1118 <# } else if ( 'video' === data.type ) { 1119 var w_rule = ''; 1120 if ( data.width ) { 1121 w_rule = 'width: ' + data.width + 'px;'; 1122 } else if ( wp.media.view.settings.contentWidth ) { 1123 w_rule = 'width: ' + wp.media.view.settings.contentWidth + 'px;'; 1124 } 1125 #> 1126 <div style="{{ w_rule }}" class="wp-media-wrapper wp-video"> 1127 <video crossorigin="anonymous" controls="controls" class="wp-video-shortcode" preload="metadata" 1128 <# if ( data.width ) { #>width="{{ data.width }}"<# } #> 1129 <# if ( data.height ) { #>height="{{ data.height }}"<# } #> 1130 <# if ( data.image && data.image.src !== data.icon ) { #>poster="{{ data.image.src }}"<# } #>> 1131 <source type="{{ data.mime }}" src="{{ data.url }}" /> 1132 </video> 1133 </div> 1134 <# } #> 1135 1136 <div class="attachment-actions"> 1137 <# if ( 'image' === data.type && ! data.uploading && data.sizes && data.can.save ) { #> 1138 <button type="button" class="button edit-attachment">Edit Image</button> 1139 <# } else if ( 'pdf' === data.subtype && data.sizes ) { #> 1140 <p>Document Preview</p> 1141 <# } #> 1142 </div> 1143 </div> 1144 </div> 1145 <div class="attachment-info"> 1146 <span class="settings-save-status" role="status"> 1147 <span class="spinner"></span> 1148 <span class="saved">Saved.</span> 1149 </span> 1150 <div class="details"> 1151 <h2 class="screen-reader-text"> 1152 Details </h2> 1153 <div class="uploaded"><strong>Uploaded on:</strong> {{ data.dateFormatted }}</div> 1154 <div class="uploaded-by word-wrap-break-word"> 1155 <strong>Uploaded by:</strong> 1156 <# if ( data.authorLink ) { #> 1157 <a href="{{ data.authorLink }}">{{ data.authorName }}</a> 1158 <# } else { #> 1159 {{ data.authorName }} 1160 <# } #> 1161 </div> 1162 <# if ( data.uploadedToTitle ) { #> 1163 <div class="uploaded-to"> 1164 <strong>Uploaded to:</strong> 1165 <# if ( data.uploadedToLink ) { #> 1166 <a href="{{ data.uploadedToLink }}">{{ data.uploadedToTitle }}</a> 1167 <# } else { #> 1168 {{ data.uploadedToTitle }} 1169 <# } #> 1170 </div> 1171 <# } #> 1172 <div class="filename"><strong>File name:</strong> {{ data.filename }}</div> 1173 <div class="file-type"><strong>File type:</strong> {{ data.mime }}</div> 1174 <div class="file-size"><strong>File size:</strong> {{ data.filesizeHumanReadable }}</div> 1175 <# if ( 'image' === data.type && ! data.uploading ) { #> 1176 <# if ( data.width && data.height ) { #> 1177 <div class="dimensions"><strong>Dimensions:</strong> 1178 {{ data.width }} by {{ data.height }} pixels </div> 1179 <# } #> 1180 1181 <# if ( data.originalImageURL && data.originalImageName ) { #> 1182 <div class="word-wrap-break-word"> 1183 <strong>Original image:</strong> 1184 <a href="{{ data.originalImageURL }}">{{data.originalImageName}}</a> 1185 </div> 1186 <# } #> 1187 <# } #> 1188 1189 <# if ( data.fileLength && data.fileLengthHumanReadable ) { #> 1190 <div class="file-length"><strong>Length:</strong> 1191 <span aria-hidden="true">{{ data.fileLengthHumanReadable }}</span> 1192 <span class="screen-reader-text">{{ data.fileLengthHumanReadable }}</span> 1193 </div> 1194 <# } #> 1195 1196 <# if ( 'audio' === data.type && data.meta.bitrate ) { #> 1197 <div class="bitrate"> 1198 <strong>Bitrate:</strong> {{ Math.round( data.meta.bitrate / 1000 ) }}kb/s 1199 <# if ( data.meta.bitrate_mode ) { #> 1200 {{ ' ' + data.meta.bitrate_mode.toUpperCase() }} 1201 <# } #> 1202 </div> 1203 <# } #> 1204 1205 <# if ( data.mediaStates ) { #> 1206 <div class="media-states"><strong>Used as:</strong> {{ data.mediaStates }}</div> 1207 <# } #> 1208 1209 <div class="compat-meta"> 1210 <# if ( data.compat && data.compat.meta ) { #> 1211 {{{ data.compat.meta }}} 1212 <# } #>
1213 </div> 1214 </div> 1215 1216 <div class="settings"> 1217 <# var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #> 1218 <# if ( 'image' === data.type ) { #> 1219 <span class="setting alt-text has-description" data-setting="alt"> 1220 <label for="attachment-details-two-column-alt-text" class="name">Alternative Text</label> 1221 <textarea id="attachment-details-two-column-alt-text" aria-describedby="alt-text-description" {{ maybeReadOnly }}>{{ data.alt }}</textarea> 1222 </span> 1223 <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> 1224 <# } #> 1225 <span class="setting" data-setting="title"> 1226 <label for="attachment-details-two-column-title" class="name">Title</label> 1227 <input type="text" id="attachment-details-two-column-title" value="{{ data.title }}" {{ maybeReadOnly }} /> 1228 </span> 1229 <# if ( 'audio' === data.type ) { #> 1230 <span class="setting" data-setting="artist"> 1231 <label for="attachment-details-two-column-artist" class="name">Artist</label> 1232 <input type="text" id="attachment-details-two-column-artist" value="{{ data.artist || data.meta.artist || '' }}" /> 1233 </span> 1234 <span class="setting" data-setting="album"> 1235 <label for="attachment-details-two-column-album" class="name">Album</label> 1236 <input type="text" id="attachment-details-two-column-album" value="{{ data.album || data.meta.album || '' }}" /> 1237 </span> 1238 <# } #> 1239 <span class="setting" data-setting="caption"> 1240 <# if ( 'image' === data.type ) { #> 1241 <label for="attachment-details-two-column-caption" class="name">Image Caption</label> 1242 <# } else { #> 1243 <label for="attachment-details-two-column-caption" class="name">Short Description</label> 1244 <# } #> 1245 <textarea id="attachment-details-two-column-caption" {{ maybeReadOnly }}>{{ data.caption }}</textarea> 1246 </span> 1247 <span class="setting" data-setting="description"> 1248 <label for="attachment-details-two-column-description" class="name">Description</label> 1249 <textarea id="attachment-details-two-column-description" {{ maybeReadOnly }}>{{ data.description }}</textarea> 1250 </span> 1251 <span class="setting" data-setting="url"> 1252 <label for="attachment-details-two-column-copy-link" class="name">File URL:</label> 1253 <input type="text" class="attachment-details-copy-link ltr" id="attachment-details-two-column-copy-link" value="{{ data.url }}" readonly />
1254 <span class="copy-to-clipboard-container"> 1255 <button type="button" class="button button-small copy-attachment-url" data-clipboard-target="#attachment-details-two-column-copy-link">Copy URL to clipboard</button> 1256 <span class="success hidden" aria-hidden="true">Copied!</span> 1257 </span> 1258 </span> 1259 <div class="attachment-compat"></div> 1260 </div> 1261 1262 <div class="actions"> 1263 <# if ( data.link ) { #> 1264 <a class="view-attachment" href="{{ data.link }}">View attachment page</a> 1265 <# } #> 1266 <# if ( data.can.save ) { #> 1267 <# if ( data.link ) { #> 1268 <span class="links-separator">|</span> 1269 <# } #> 1270 <a href="{{ data.editLink }}">Edit more details</a> 1271 <# } #> 1272 <# if ( data.can.save && data.link ) { #> 1273 <span class="links-separator">|</span> 1274 <a href="{{ data.url }}" download>Download file</a> 1275 <# } #> 1276 <# if ( ! data.uploading && data.can.remove ) { #> 1277 <# if ( data.link || data.can.save ) { #> 1278 <span class="links-separator">|</span> 1279 <# } #> 1280 <button type="button" class="button-link delete-attachment">Delete permanently</button> 1281 <# } #> 1282 </div> 1283 </div> 1284 </script>
1284 1285 1286
1286<script type="text/html" id="tmpl-attachment"> 1287 <div class="attachment-preview js--select-attachment type-{{ data.type }} subtype-{{ data.subtype }} {{ data.orientation }}"> 1288 <div class="thumbnail"> 1289 <# if ( data.uploading ) { #> 1290 <div class="media-progress-bar"><div style="width: {{ data.percent }}%"></div></div> 1291 <# } else if ( 'image' === data.type && data.size && data.size.url ) { #> 1292 <div class="centered"> 1293 <img src="{{ data.size.url }}" draggable="false" alt="" /> 1294 </div> 1295 <# } else { #> 1296 <div class="centered"> 1297 <# if ( data.image && data.image.src && data.image.src !== data.icon ) { #> 1298 <img src="{{ data.image.src }}" class="thumbnail" draggable="false" alt="" /> 1299 <# } else if ( data.sizes ) { 1300 if ( data.sizes.medium ) { #> 1301 <img src="{{ data.sizes.medium.url }}" class="thumbnail" draggable="false" alt="" /> 1302 <# } else { #> 1303 <img src="{{ data.sizes.full.url }}" class="thumbnail" draggable="false" alt="" /> 1304 <# } #> 1305 <# } else { #> 1306 <img src="{{ data.icon }}" class="icon" draggable="false" alt="" /> 1307 <# } #> 1308 </div> 1309 <div class="filename"> 1310 <div>{{ data.filename }}</div> 1311 </div> 1312 <# } #> 1313 </div> 1314 <# if ( data.buttons.close ) { #> 1315 <button type="button" class="button-link attachment-close"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text"> 1316 Remove </span></button> 1317 <# } #> 1318 </div> 1319 <# if ( data.buttons.check ) { #> 1320 <button type="button" class="check" tabindex="-1"><span class="media-modal-icon" aria-hidden="true"></span><span class="screen-reader-text"> 1321 Deselect </span></button> 1322 <# } #> 1323 <# 1324 var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; 1325 if ( data.describe ) { 1326 if ( 'image' === data.type ) { #> 1327 <input type="text" value="{{ data.caption }}" class="describe" data-setting="caption" 1328 aria-label="Caption" 1329 placeholder="Caption…" {{ maybeReadOnly }} /> 1330 <# } else { #> 1331 <input type="text" value="{{ data.title }}" class="describe" data-setting="title" 1332 <# if ( 'video' === data.type ) { #> 1333 aria-label="Video title" 1334 placeholder="Video title…" 1335 <# } else if ( 'audio' === data.type ) { #> 1336 aria-label="Audio title" 1337 placeholder="Audio title…" 1338 <# } else { #> 1339 aria-label="Media title" 1340 placeholder="Media title…" 1341 <# } #> {{ maybeReadOnly }} /> 1342 <# } 1343 } #> 1344 </script>
1344 1345 1346
1346<script type="text/html" id="tmpl-attachment-details"> 1347 <h2> 1348 Attachment Details <span class="settings-save-status" role="status"> 1349 <span class="spinner"></span> 1350 <span class="saved">Saved.</span> 1351 </span> 1352 </h2> 1353 <div class="attachment-info"> 1354 1355 <# if ( 'audio' === data.type ) { #> 1356 <div class="wp-media-wrapper wp-audio"> 1357 <audio crossorigin="anonymous" style="visibility: hidden" controls class="wp-audio-shortcode" width="100%" preload="none"> 1358 <source type="{{ data.mime }}" src="{{ data.url }}" /> 1359 </audio> 1360 </div> 1361 <# } else if ( 'video' === data.type ) { 1362 var w_rule = ''; 1363 if ( data.width ) { 1364 w_rule = 'width: ' + data.width + 'px;'; 1365 } else if ( wp.media.view.settings.contentWidth ) { 1366 w_rule = 'width: ' + wp.media.view.settings.contentWidth + 'px;'; 1367 } 1368 #> 1369 <div style="{{ w_rule }}" class="wp-media-wrapper wp-video"> 1370 <video crossorigin="anonymous" controls="controls" class="wp-video-shortcode" preload="metadata" 1371 <# if ( data.width ) { #>width="{{ data.width }}"<# } #> 1372 <# if ( data.height ) { #>height="{{ data.height }}"<# } #> 1373 <# if ( data.image && data.image.src !== data.icon ) { #>poster="{{ data.image.src }}"<# } #>> 1374 <source type="{{ data.mime }}" src="{{ data.url }}" /> 1375 </video> 1376 </div> 1377 <# } else { #> 1378 <div class="thumbnail thumbnail-{{ data.type }}"> 1379 <# if ( data.uploading ) { #> 1380 <div class="media-progress-bar"><div></div></div> 1381 <# } else if ( 'image' === data.type && data.size && data.size.url ) { #> 1382 <img src="{{ data.size.url }}" draggable="false" alt="" /> 1383 <# } else { #> 1384 <img src="{{ data.icon }}" class="icon" draggable="false" alt="" /> 1385 <# } #> 1386 </div> 1387 <# } #> 1388 1389 <div class="details"> 1390 <div class="filename">{{ data.filename }}</div> 1391 <div class="uploaded">{{ data.dateFormatted }}</div> 1392 1393 <div class="file-size">{{ data.filesizeHumanReadable }}</div> 1394 <# if ( 'image' === data.type && ! data.uploading ) { #> 1395 <# if ( data.width && data.height ) { #> 1396 <div class="dimensions"> 1397 {{ data.width }} by {{ data.height }} pixels </div> 1398 <# } #> 1399 1400 <# if ( data.originalImageURL && data.originalImageName ) { #> 1401 <div class="word-wrap-break-word"> 1402 Original image: <a href="{{ data.originalImageURL }}">{{data.originalImageName}}</a> 1403 </div> 1404 <# } #> 1405 1406 <# if ( data.can.save && data.sizes ) { #> 1407 <a class="edit-attachment" href="{{ data.editLink }}&image-editor" target="_blank">Edit Image</a> 1408 <# } #> 1409 <# } #> 1410 1411 <# if ( data.fileLength && data.fileLengthHumanReadable ) { #> 1412 <div class="file-length">Length: <span aria-hidden="true">{{ data.fileLengthHumanReadable }}</span> 1413 <span class="screen-reader-text">{{ data.fileLengthHumanReadable }}</span> 1414 </div> 1415 <# } #> 1416 1417 <# if ( data.mediaStates ) { #> 1418 <div class="media-states"><strong>Used as:</strong> {{ data.mediaStates }}</div> 1419 <# } #> 1420 1421 <# if ( ! data.uploading && data.can.remove ) { #> 1422 <button type="button" class="button-link delete-attachment">Delete permanently</button> 1423 <# } #> 1424 1425 <div class="compat-meta"> 1426 <# if ( data.compat && data.compat.meta ) { #> 1427 {{{ data.compat.meta }}} 1428 <# } #> 1429 </div> 1430 </div> 1431 </div> 1432 <# var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #> 1433 <# if ( 'image' === data.type ) { #> 1434 <span class="setting alt-text has-description" data-setting="alt"> 1435 <label for="attachment-details-alt-text" class="name">Alt Text</label> 1436 <textarea id="attachment-details-alt-text" aria-describedby="alt-text-description" {{ maybeReadOnly }}>{{ data.alt }}</textarea> 1437 </span> 1438 <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> 1439 <# } #> 1440 <span class="setting" data-setting="title"> 1441 <label for="attachment-details-title" class="name">Title</label> 1442 <input type="text" id="attachment-details-title" value="{{ data.title }}" {{ maybeReadOnly }} /> 1443 </span> 1444 <# if ( 'audio' === data.type ) { #> 1445 <span class="setting" data-setting="artist"> 1446 <label for="attachment-details-artist" class="name">Artist</label> 1447 <input type="text" id="attachment-details-artist" value="{{ data.artist || data.meta.artist || '' }}" /> 1448 </span> 1449 <span class="setting" data-setting="album"> 1450 <label for="attachment-details-album" class="name">Album</label> 1451 <input type="text" id="attachment-details-album" value="{{ data.album || data.meta.album || '' }}" /> 1452 </span> 1453 <# } #> 1454 <span class="setting" data-setting="caption"> 1455 <# if ( 'image' === data.type ) { #> 1456 <label for="attachment-details-caption" class="name">Image Caption</label> 1457 <# } else { #> 1458 <label for="attachment-details-caption" class="name">Short Description</label> 1459 <# } #> 1460 <textarea id="attachment-details-caption" {{ maybeReadOnly }}>{{ data.caption }}</textarea> 1461 </span> 1462 <span class="setting" data-setting="description"> 1463 <label for="attachment-details-description" class="name">Description</label> 1464 <textarea id="attachment-details-description" {{ maybeReadOnly }}>{{ data.description }}</textarea> 1465 </span> 1466 <span class="setting" data-setting="url"> 1467 <label for="attachment-details-copy-link" class="name">File URL:</label> 1468 <input type="text" class="attachment-details-copy-link ltr" id="attachment-details-copy-link" value="{{ data.url }}" readonly />
1469 <div class="copy-to-clipboard-container"> 1470 <button type="button" class="button button-small copy-attachment-url" data-clipboard-target="#attachment-details-copy-link">Copy URL to clipboard</button> 1471 <span class="success hidden" aria-hidden="true">Copied!</span> 1472 </div> 1473 </span> 1474 </script>
1474 1475 1476
1476<script type="text/html" id="tmpl-media-selection"> 1477 <div class="selection-info"> 1478 <span class="count"></span> 1479 <# if ( data.editable ) { #> 1480 <button type="button" class="button-link edit-selection">Edit Selection</button> 1481 <# } #> 1482 <# if ( data.clearable ) { #> 1483 <button type="button" class="button-link clear-selection">Clear</button> 1484 <# } #> 1485 </div> 1486 <div class="selection-view"></div> 1487 </script>
1487 1488 1489
1489<script type="text/html" id="tmpl-attachment-display-settings"> 1490 <h2>Attachment Display Settings</h2> 1491 1492 <# if ( 'image' === data.type ) { #> 1493 <span class="setting align"> 1494 <label for="attachment-display-settings-alignment" class="name">Alignment</label> 1495 <select id="attachment-display-settings-alignment" class="alignment" 1496 data-setting="align" 1497 <# if ( data.userSettings ) { #> 1498 data-user-setting="align" 1499 <# } #>> 1500 1501 <option value="left"> 1502 Left </option> 1503 <option value="center"> 1504 Center </option> 1505 <option value="right"> 1506 Right </option> 1507 <option value="none" selected> 1508 None </option> 1509 </select> 1510 </span> 1511 <# } #> 1512 1513 <span class="setting"> 1514 <label for="attachment-display-settings-link-to" class="name"> 1515 <# if ( data.model.canEmbed ) { #> 1516 Embed or Link <# } else { #> 1517 Link To <# } #> 1518 </label> 1519 <select id="attachment-display-settings-link-to" class="link-to" 1520 data-setting="link" 1521 <# if ( data.userSettings && ! data.model.canEmbed ) { #> 1522 data-user-setting="urlbutton" 1523 <# } #>> 1524 1525 <# if ( data.model.canEmbed ) { #> 1526 <option value="embed" selected> 1527 Embed Media Player </option> 1528 <option value="file"> 1529 <# } else { #> 1530 <option value="none" selected> 1531 None </option> 1532 <option value="file"> 1533 <# } #> 1534 <# if ( data.model.canEmbed ) { #> 1535 Link to Media File <# } else { #> 1536 Media File <# } #> 1537 </option> 1538 <option value="post"> 1539 <# if ( data.model.canEmbed ) { #> 1540 Link to Attachment Page <# } else { #> 1541 Attachment Page <# } #> 1542 </option> 1543 <# if ( 'image' === data.type ) { #> 1544 <option value="custom"> 1545 Custom URL </option> 1546 <# } #> 1547 </select> 1548 </span> 1549 <span class="setting"> 1550 <label for="attachment-display-settings-link-to-custom" class="name">URL</label> 1551 <input type="text" id="attachment-display-settings-link-to-custom" class="link-to-custom" data-setting="linkUrl" /> 1552 </span> 1553 1554 <# if ( 'undefined' !== typeof data.sizes ) { #> 1555 <span class="setting"> 1556 <label for="attachment-display-settings-size" class="name">Size</label> 1557 <select id="attachment-display-settings-size" class="size" name="size" 1558 data-setting="size" 1559 <# if ( data.userSettings ) { #> 1560 data-user-setting="imgsize" 1561 <# } #>> 1562 <# 1563 var size = data.sizes['thumbnail']; 1564 if ( size ) { #> 1565 <option value="thumbnail" > 1566 Thumbnail – {{ size.width }} × {{ size.height }} 1567 </option> 1568 <# } #> 1569 <# 1570 var size = data.sizes['medium']; 1571 if ( size ) { #> 1572 <option value="medium" > 1573 Medium – {{ size.width }} × {{ size.height }} 1574 </option> 1575 <# } #> 1576 <# 1577 var size = data.sizes['large']; 1578 if ( size ) { #> 1579 <option value="large" > 1580 Large – {{ size.width }} × {{ size.height }} 1581 </option> 1582 <# } #> 1583 <# 1584 var size = data.sizes['full']; 1585 if ( size ) { #> 1586 <option value="full" selected='selected'> 1587 Full Size – {{ size.width }} × {{ size.height }} 1588 </option> 1589 <# } #> 1590 </select> 1591 </span> 1592 <# } #> 1593 </script>
1593 1594 1595
1595<script type="text/html" id="tmpl-gallery-settings"> 1596 <h2>Gallery Settings</h2> 1597 1598 <span class="setting"> 1599 <label for="gallery-settings-link-to" class="name">Link To</label> 1600 <select id="gallery-settings-link-to" class="link-to" 1601 data-setting="link" 1602 <# if ( data.userSettings ) { #> 1603 data-user-setting="urlbutton" 1604 <# } #>> 1605 1606 <option value="post" <# if ( ! wp.media.galleryDefaults.link || 'post' === wp.media.galleryDefaults.link ) { 1607 #>selected="selected"<# } 1608 #>> 1609 Attachment Page </option> 1610 <option value="file" <# if ( 'file' === wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>> 1611 Media File </option> 1612 <option value="none" <# if ( 'none' === wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>> 1613 None </option> 1614 </select> 1615 </span> 1616 1617 <span class="setting"> 1618 <label for="gallery-settings-columns" class="name select-label-inline">Columns</label> 1619 <select id="gallery-settings-columns" class="columns" name="columns" 1620 data-setting="columns"> 1621 <option value="1" <# 1622 if ( 1 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1623 #>> 1624 1 </option> 1625 <option value="2" <# 1626 if ( 2 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1627 #>> 1628 2 </option> 1629 <option value="3" <# 1630 if ( 3 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1631 #>> 1632 3 </option> 1633 <option value="4" <# 1634 if ( 4 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1635 #>> 1636 4 </option> 1637 <option value="5" <# 1638 if ( 5 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1639 #>> 1640 5 </option> 1641 <option value="6" <# 1642 if ( 6 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1643 #>> 1644 6 </option> 1645 <option value="7" <# 1646 if ( 7 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1647 #>> 1648 7 </option> 1649 <option value="8" <# 1650 if ( 8 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1651 #>> 1652 8 </option> 1653 <option value="9" <# 1654 if ( 9 == wp.media.galleryDefaults.columns ) { #>selected="selected"<# } 1655 #>> 1656 9 </option> 1657 </select> 1658 </span> 1659 1660 <span class="setting"> 1661 <input type="checkbox" id="gallery-settings-random-order" data-setting="_orderbyRandom" /> 1662 <label for="gallery-settings-random-order" class="checkbox-label-inline">Random Order</label> 1663 </span> 1664 1665 <span class="setting size"> 1666 <label for="gallery-settings-size" class="name">Size</label> 1667 <select id="gallery-settings-size" class="size" name="size" 1668 data-setting="size" 1669 <# if ( data.userSettings ) { #> 1670 data-user-setting="imgsize" 1671 <# } #> 1672 > 1673 <option value="thumbnail"> 1674 Thumbnail </option> 1675 <option value="medium"> 1676 Medium </option> 1677 <option value="large"> 1678 Large </option> 1679 <option value="full"> 1680 Full Size </option> 1681 </select> 1682 </span> 1683 </script>
1683 1684 1685
1685<script type="text/html" id="tmpl-playlist-settings"> 1686 <h2>Playlist Settings</h2> 1687 1688 <# var emptyModel = _.isEmpty( data.model ), 1689 isVideo = 'video' === data.controller.get('library').props.get('type'); #> 1690 1691 <span class="setting"> 1692 <input type="checkbox" id="playlist-settings-show-list" data-setting="tracklist" <# if ( emptyModel ) { #> 1693 checked="checked" 1694 <# } #> /> 1695 <label for="playlist-settings-show-list" class="checkbox-label-inline"> 1696 <# if ( isVideo ) { #> 1697 Show Video List <# } else { #> 1698 Show Tracklist <# } #> 1699 </label> 1700 </span> 1701 1702 <# if ( ! isVideo ) { #> 1703 <span class="setting"> 1704 <input type="checkbox" id="playlist-settings-show-artist" data-setting="artists" <# if ( emptyModel ) { #> 1705 checked="checked" 1706 <# } #> /> 1707 <label for="playlist-settings-show-artist" class="checkbox-label-inline"> 1708 Show Artist Name in Tracklist </label> 1709 </span> 1710 <# } #> 1711 1712 <span class="setting"> 1713 <input type="checkbox" id="playlist-settings-show-images" data-setting="images" <# if ( emptyModel ) { #> 1714 checked="checked" 1715 <# } #> /> 1716 <label for="playlist-settings-show-images" class="checkbox-label-inline"> 1717 Show Images </label> 1718 </span> 1719 </script>
1719 1720 1721
1721<script type="text/html" id="tmpl-embed-link-settings"> 1722 <span class="setting link-text"> 1723 <label for="embed-link-settings-link-text" class="name">Link Text</label> 1724 <input type="text" id="embed-link-settings-link-text" class="alignment" data-setting="linkText" /> 1725 </span> 1726 <div class="embed-container" style="display: none;"> 1727 <div class="embed-preview"></div> 1728 </div> 1729 </script>
1729 1730 1731
1731<script type="text/html" id="tmpl-embed-image-settings"> 1732 <div class="wp-clearfix"> 1733 <div class="thumbnail"> 1734 <img src="{{ data.model.url }}" draggable="false" alt="" /> 1735 </div> 1736 </div> 1737 1738 <span class="setting alt-text has-description"> 1739 <label for="embed-image-settings-alt-text" class="name">Alternative Text</label> 1740 <textarea id="embed-image-settings-alt-text" data-setting="alt" aria-describedby="alt-text-description"></textarea> 1741 </span> 1742 <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> 1743 1744 <span class="setting caption"> 1745 <label for="embed-image-settings-caption" class="name">Caption</label> 1746 <textarea id="embed-image-settings-caption" data-setting="caption"></textarea> 1747 </span> 1748 1749 <fieldset class="setting-group"> 1750 <legend class="name">Align</legend> 1751 <span class="setting align"> 1752 <span class="button-group button-large" data-setting="align"> 1753 <button class="button" value="left"> 1754 Left </button> 1755 <button class="button" value="center"> 1756 Center </button> 1757 <button class="button" value="right"> 1758 Right </button> 1759 <button class="button active" value="none"> 1760 None </button> 1761 </span> 1762 </span> 1763 </fieldset> 1764 1765 <fieldset class="setting-group"> 1766 <legend class="name">Link To</legend> 1767 <span class="setting link-to"> 1768 <span class="button-group button-large" data-setting="link"> 1769 <button class="button" value="file"> 1770 Image URL </button> 1771 <button class="button" value="custom"> 1772 Custom URL </button> 1773 <button class="button active" value="none"> 1774 None </button> 1775 </span> 1776 </span> 1777 <span class="setting"> 1778 <label for="embed-image-settings-link-to-custom" class="name">URL</label> 1779 <input type="text" id="embed-image-settings-link-to-custom" class="link-to-custom" data-setting="linkUrl" /> 1780 </span> 1781 </fieldset> 1782 </script>
1782 1783 1784
1784<script type="text/html" id="tmpl-image-details"> 1785 <div class="media-embed"> 1786 <div class="embed-media-settings"> 1787 <div class="column-settings"> 1788 <span class="setting alt-text has-description"> 1789 <label for="image-details-alt-text" class="name">Alternative Text</label> 1790 <textarea id="image-details-alt-text" data-setting="alt" aria-describedby="alt-text-description">{{ data.model.alt }}</textarea> 1791 </span> 1792 <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> 1793 1794 <span class="setting caption"> 1795 <label for="image-details-caption" class="name">Caption</label> 1796 <textarea id="image-details-caption" data-setting="caption">{{ data.model.caption }}</textarea> 1797 </span> 1798 1799 <h2>Display Settings</h2> 1800 <fieldset class="setting-group"> 1801 <legend class="legend-inline">Align</legend> 1802 <span class="setting align"> 1803 <span class="button-group button-large" data-setting="align"> 1804 <button class="button" value="left"> 1805 Left </button> 1806 <button class="button" value="center"> 1807 Center </button> 1808 <button class="button" value="right"> 1809 Right </button> 1810 <button class="button active" value="none"> 1811 None </button> 1812 </span> 1813 </span> 1814 </fieldset> 1815 1816 <# if ( data.attachment ) { #> 1817 <# if ( 'undefined' !== typeof data.attachment.sizes ) { #> 1818 <span class="setting size"> 1819 <label for="image-details-size" class="name">Size</label> 1820 <select id="image-details-size" class="size" name="size" 1821 data-setting="size" 1822 <# if ( data.userSettings ) { #> 1823 data-user-setting="imgsize" 1824 <# } #>> 1825 <# 1826 var size = data.sizes['thumbnail']; 1827 if ( size ) { #> 1828 <option value="thumbnail"> 1829 Thumbnail – {{ size.width }} × {{ size.height }} 1830 </option> 1831 <# } #> 1832 <# 1833 var size = data.sizes['medium']; 1834 if ( size ) { #> 1835 <option value="medium"> 1836 Medium – {{ size.width }} × {{ size.height }} 1837 </option> 1838 <# } #> 1839 <# 1840 var size = data.sizes['large']; 1841 if ( size ) { #> 1842 <option value="large"> 1843 Large – {{ size.width }} × {{ size.height }} 1844 </option> 1845 <# } #> 1846 <# 1847 var size = data.sizes['full']; 1848 if ( size ) { #> 1849 <option value="full"> 1850 Full Size – {{ size.width }} × {{ size.height }} 1851 </option> 1852 <# } #> 1853 <option value="custom"> 1854 Custom Size </option> 1855 </select> 1856 </span> 1857 <# } #> 1858 <div class="custom-size wp-clearfix<# if ( data.model.size !== 'custom' ) { #> hidden<# } #>"> 1859 <span class="custom-size-setting"> 1860 <label for="image-details-size-width">Width</label> 1861 <input type="number" id="image-details-size-width" aria-describedby="image-size-desc" data-setting="customWidth" step="1" value="{{ data.model.customWidth }}" /> 1862 </span> 1863 <span class="sep" aria-hidden="true">×</span> 1864 <span class="custom-size-setting"> 1865 <label for="image-details-size-height">Height</label> 1866 <input type="number" id="image-details-size-height" aria-describedby="image-size-desc" data-setting="customHeight" step="1" value="{{ data.model.customHeight }}" /> 1867 </span> 1868 <p id="image-size-desc" class="description">Image size in pixels</p> 1869 </div> 1870 <# } #> 1871 1872 <span class="setting link-to"> 1873 <label for="image-details-link-to" class="name">Link To</label> 1874 <select id="image-details-link-to" data-setting="link"> 1875 <# if ( data.attachment ) { #> 1876 <option value="file"> 1877 Media File </option> 1878 <option value="post"> 1879 Attachment Page </option> 1880 <# } else { #> 1881 <option value="file"> 1882 Image URL </option> 1883 <# } #> 1884 <option value="custom"> 1885 Custom URL </option> 1886 <option value="none"> 1887 None </option> 1888 </select> 1889 </span> 1890 <span class="setting"> 1891 <label for="image-details-link-to-custom" class="name">URL</label> 1892 <input type="text" id="image-details-link-to-custom" class="link-to-custom" data-setting="linkUrl" /> 1893 </span> 1894 1895 <div class="advanced-section"> 1896 <h2><button type="button" class="button-link advanced-toggle">Advanced Options</button></h2> 1897 <div class="advanced-settings hidden"> 1898 <div class="advanced-image"> 1899 <span class="setting title-text"> 1900 <label for="image-details-title-attribute" class="name">Image Title Attribute</label> 1901 <input type="text" id="image-details-title-attribute" data-setting="title" value="{{ data.model.title }}" /> 1902 </span> 1903 <span class="setting extra-classes"> 1904 <label for="image-details-css-class" class="name">Image CSS Class</label> 1905 <input type="text" id="image-details-css-class" data-setting="extraClasse
1905s" value="{{ data.model.extraClasses }}" /> 1906 </span> 1907 </div> 1908 <div class="advanced-link"> 1909 <span class="setting link-target"> 1910 <input type="checkbox" id="image-details-link-target" data-setting="linkTargetBlank" value="_blank" <# if ( data.model.linkTargetBlank ) { #>checked="checked"<# } #>> 1911 <label for="image-details-link-target" class="checkbox-label">Open link in a new tab</label> 1912 </span> 1913 <span class="setting link-rel"> 1914 <label for="image-details-link-rel" class="name">Link Rel</label> 1915 <input type="text" id="image-details-link-rel" data-setting="linkRel" value="{{ data.model.linkRel }}" /> 1916 </span> 1917 <span class="setting link-class-name"> 1918 <label for="image-details-link-css-class" class="name">Link CSS Class</label> 1919 <input type="text" id="image-details-link-css-class" data-setting="linkClassName" value="{{ data.model.linkClassName }}" /> 1920 </span> 1921 </div> 1922 </div> 1923 </div> 1924 </div> 1925 <div class="column-image"> 1926 <div class="image"> 1927 <img src="{{ data.model.url }}" draggable="false" alt="" /> 1928 <# if ( data.attachment && window.imageEdit ) { #> 1929 <div class="actions"> 1930 <input type="button" class="edit-attachment button" value="Edit Original" /> 1931 <input type="button" class="replace-attachment button" value="Replace" /> 1932 </div> 1933 <# } #> 1934 </div> 1935 </div> 1936 </div> 1937 </div> 1938 </script>
1938 1939 1940
1940<script type="text/html" id="tmpl-image-editor"> 1941 <div id="media-head-{{ data.id }}"></div> 1942 <div id="image-editor-{{ data.id }}"></div> 1943 </script>
1943 1944 1945
1945<script type="text/html" id="tmpl-audio-details"> 1946 <# var ext, html5types = { 1947 mp3: wp.media.view.settings.embedMimes.mp3, 1948 ogg: wp.media.view.settings.embedMimes.ogg 1949 }; #> 1950 1951 <div class="media-embed media-embed-details"> 1952 <div class="embed-media-settings embed-audio-settings"> 1953 <audio crossorigin="anonymous" style="visibility: hidden" 1954 controls 1955 class="wp-audio-shortcode" 1956 width="{{ _.isUndefined( data.model.width ) ? 400 : data.model.width }}" 1957 preload="{{ _.isUndefined( data.model.preload ) ? 'none' : data.model.preload }}" 1958 <# 1959 if ( ! _.isUndefined( data.model.autoplay ) && data.model.autoplay ) { 1960 #> autoplay<# 1961 } 1962 if ( ! _.isUndefined( data.model.loop ) && data.model.loop ) { 1963 #> loop<# 1964 } 1965 #> 1966> 1967 <# if ( ! _.isEmpty( data.model.src ) ) { #> 1968 <source src="{{ data.model.src }}" type="{{ wp.media.view.settings.embedMimes[ data.model.src.split('.').pop() ] }}" /> 1969 <# } #> 1970 1971 <# if ( ! _.isEmpty( data.model.mp3 ) ) { #> 1972 <source src="{{ data.model.mp3 }}" type="{{ wp.media.view.settings.embedMimes[ 'mp3' ] }}" /> 1973 <# } #> 1974 <# if ( ! _.isEmpty( data.model.ogg ) ) { #> 1975 <source src="{{ data.model.ogg }}" type="{{ wp.media.view.settings.embedMimes[ 'ogg' ] }}" /> 1976 <# } #> 1977 <# if ( ! _.isEmpty( data.model.flac ) ) { #> 1978 <source src="{{ data.model.flac }}" type="{{ wp.media.view.settings.embedMimes[ 'flac' ] }}" /> 1979 <# } #> 1980 <# if ( ! _.isEmpty( data.model.m4a ) ) { #> 1981 <source src="{{ data.model.m4a }}" type="{{ wp.media.view.settings.embedMimes[ 'm4a' ] }}" /> 1982 <# } #> 1983 <# if ( ! _.isEmpty( data.model.wav ) ) { #> 1984 <source src="{{ data.model.wav }}" type="{{ wp.media.view.settings.embedMimes[ 'wav' ] }}" /> 1985 <# } #> 1986 </audio> 1987 1988 <# if ( ! _.isEmpty( data.model.src ) ) { 1989 ext = data.model.src.split('.').pop(); 1990 if ( html5types[ ext ] ) { 1991 delete html5types[ ext ]; 1992 } 1993 #> 1994 <span class="setting"> 1995 <label for="audio-details-source" class="name">URL</label> 1996 <input type="text" id="audio-details-source" readonly data-setting="src" value="{{ data.model.src }}" /> 1997 <button type="button" class="button-link remove-setting">Remove audio source</button> 1998 </span> 1999 <# } #> 2000 <# if ( ! _.isEmpty( data.model.mp3 ) ) { 2001 if ( ! _.isUndefined( html5types.mp3 ) ) { 2002 delete html5types.mp3; 2003 } 2004 #> 2005 <span class="setting"> 2006 <label for="audio-details-mp3-source" class="name">MP3</label> 2007 <input type="text" id="audio-details-mp3-source" readonly data-setting="mp3" value="{{ data.model.mp3 }}" /> 2008 <button type="button" class="button-link remove-setting">Remove audio source</button> 2009 </span> 2010 <# } #> 2011 <# if ( ! _.isEmpty( data.model.ogg ) ) { 2012 if ( ! _.isUndefined( html5types.ogg ) ) { 2013 delete html5types.ogg; 2014 } 2015 #> 2016 <span class="setting"> 2017 <label for="audio-details-ogg-source" class="name">OGG</label> 2018 <input type="text" id="audio-details-ogg-source" readonly data-setting="ogg" value="{{ data.model.ogg }}" /> 2019 <button type="button" class="button-link remove-setting">Remove audio source</button> 2020 </span> 2021 <# } #> 2022 <# if ( ! _.isEmpty( data.model.flac ) ) { 2023 if ( ! _.isUndefined( html5types.flac ) ) { 2024 delete html5types.flac; 2025 } 2026 #> 2027 <span class="setting"> 2028 <label for="audio-details-flac-source" class="name">FLAC</label> 2029 <input type="text" id="audio-details-flac-source" readonly data-setting="flac" value="{{ data.model.flac }}" /> 2030 <button type="button" class="button-link remove-setting">Remove audio source</button> 2031 </span> 2032 <# } #> 2033 <# if ( ! _.isEmpty( data.model.m4a ) ) { 2034 if ( ! _.isUndefined( html5types.m4a ) ) { 2035 delete html5types.m4a; 2036 } 2037 #> 2038 <span class="setting"> 2039 <label for="audio-details-m4a-source" class="name">M4A</label> 2040 <input type="text" id="audio-details-m4a-source" readonly data-setting="m4a" value="{{ data.model.m4a }}" /> 2041 <button type="button" class="button-link remove-setting">Remove audio source</button> 2042 </span> 2043 <# } #> 2044 <# if ( ! _.isEmpty( data.model.wav ) ) { 2045 if ( ! _.isUndefined( html5types.wav ) ) { 2046 delete html5types.wav; 2047 } 2048 #> 2049 <span class="setting"> 2050 <label for="audio-details-wav-source" class="name">WAV</label> 2051 <input type="text" id="audio-details-wav-source" readonly data-setting="wav" value="{{ data.model.wav }}" /> 2052 <button type="button" class="button-link remove-setting">Remove audio source</button> 2053 </span> 2054 <# } #> 2055 2056 <# if ( ! _.isEmpty( html5types ) ) { #> 2057 <fieldset class="setting-group"> 2058 <legend class="name">Add alternate sources for maximum HTML5 playback</legend> 2059 <span class="setting"> 2060 <span class="button-large"> 2061 <# _.each( html5types, function (mime, type) { #> 2062 <button class="button add-media-source" data-mime="{{ mime }}">{{ type }}</button> 2063 <# } ) #> 2064 </span> 2065 </span> 2066 </fieldset> 2067 <# } #> 2068 2069 <fieldset class="setting-group"> 2070 <legend class="name">Preload</legend> 2071 <span class="setting preload"> 2072 <span class="button-group button-large" data-setting="preload"> 2073 <button class="button" value="auto">Auto</button> 2074 <button class="button" value="metadata">Metadata</button> 2075 <button class="button active" value="none">None</button> 2076 </span> 2077 </span> 2078 </fieldset> 2079 2080 <span class="setting-group"> 2081 <span class="setting checkbox-setting autoplay"> 2082 <input type="checkbox" id="audio-details-autoplay" data-setting="autoplay" /> 2083 <label for="audio-details-autoplay" class="checkbox-label">Autoplay</label> 2084 </span> 2085 2086 <span class="setting checkbox-setting"> 2087 <input type="checkbox" id="audio-details-loop" data-setting="loop" /> 2088 <label for="audio-details-loop" class="checkbox-label">Loop</label> 2089 </span> 2090 </span> 2091 </div> 2092 </div> 2093 </script>
2093 2094 2095
2095<script type="text/html" id="tmpl-video-details"> 2096 <# var ext, html5types = { 2097 mp4: wp.media.view.settings.embedMimes.mp4, 2098 ogv: wp.media.view.settings.embedMimes.ogv, 2099 webm: wp.media.view.settings.embedMimes.webm 2100 }; #> 2101 2102 <div class="media-embed media-embed-details"> 2103 <div class="embed-media-settings embed-video-settings"> 2104 <div class="wp-video-holder"> 2105 <# 2106 var w = ! data.model.width || data.model.width > 640 ? 640 : data.model.width, 2107 h = ! data.model.height ? 360 : data.model.height; 2108 2109 if ( data.model.width && w !== data.model.width ) { 2110 h = Math.ceil( ( h * w ) / data.model.width ); 2111 } 2112 #> 2113 2114 <# var w_rule = '', classes = [], 2115 w, h, settings = wp.media.view.settings, 2116 isYouTube = isVimeo = false; 2117 2118 if ( ! _.isEmpty( data.model.src ) ) { 2119 isYouTube = data.model.src.match(/youtube|youtu\.be/); 2120 isVimeo = -1 !== data.model.src.indexOf('vimeo'); 2121 } 2122 2123 if ( settings.contentWidth && data.model.width >= settings.contentWidth ) { 2124 w = settings.contentWidth; 2125 } else { 2126 w = data.model.width; 2127 } 2128 2129 if ( w !== data.model.width ) { 2130 h = Math.ceil( ( data.model.height * w ) / data.model.width ); 2131 } else { 2132 h = data.model.height; 2133 } 2134 2135 if ( w ) { 2136 w_rule = 'width: ' + w + 'px; '; 2137 } 2138 2139 if ( isYouTube ) { 2140 classes.push( 'youtube-video' ); 2141 } 2142 2143 if ( isVimeo ) { 2144 classes.push( 'vimeo-video' ); 2145 } 2146 2147#> 2148<div style="{{ w_rule }}" class="wp-video"> 2149<video crossorigin="anonymous" controls 2150 class="wp-video-shortcode {{ classes.join( ' ' ) }}" 2151 <# if ( w ) { #>width="{{ w }}"<# } #> 2152 <# if ( h ) { #>height="{{ h }}"<# } #> 2153 <# 2154 if ( ! _.isUndefined( data.model.poster ) && data.model.poster ) { 2155 #> poster="{{ data.model.poster }}"<# 2156 } #> 2157 preload ="{{ _.isUndefined( data.model.preload ) ? 'metadata' : data.model.preload }}" 2158 <# 2159 if ( ! _.isUndefined( data.model.autoplay ) && data.model.autoplay ) { 2160 #> autoplay<# 2161 } 2162 if ( ! _.isUndefined( data.model.loop ) && data.model.loop ) { 2163 #> loop<# 2164 } 2165 #> 2166> 2167 <# if ( ! _.isEmpty( data.model.src ) ) { 2168 if ( isYouTube ) { #> 2169 <source src="{{ data.model.src }}" type="video/youtube" /> 2170 <# } else if ( isVimeo ) { #> 2171 <source src="{{ data.model.src }}" type="video/vimeo" /> 2172 <# } else { #> 2173 <source src="{{ data.model.src }}" type="{{ settings.embedMimes[ data.model.src.split('.').pop() ] }}" /> 2174 <# } 2175 } #> 2176 2177 <# if ( data.model.mp4 ) { #> 2178 <source src="{{ data.model.mp4 }}" type="{{ settings.embedMimes[ 'mp4' ] }}" /> 2179 <# } #> 2180 <# if ( data.model.m4v ) { #> 2181 <source src="{{ data.model.m4v }}" type="{{ settings.embedMimes[ 'm4v' ] }}" /> 2182 <# } #> 2183 <# if ( data.model.webm ) { #> 2184 <source src="{{ data.model.webm }}" type="{{ settings.embedMimes[ 'webm' ] }}" /> 2185 <# } #> 2186 <# if ( data.model.ogv ) { #> 2187 <source src="{{ data.model.ogv }}" type="{{ settings.embedMimes[ 'ogv' ] }}" /> 2188 <# } #> 2189 <# if ( data.model.flv ) { #> 2190 <source src="{{ data.model.flv }}" type="{{ settings.embedMimes[ 'flv' ] }}" /> 2191 <# } #> 2192 {{{ data.model.content }}} 2193</video> 2194</div> 2195 2196 <# if ( ! _.isEmpty( data.model.src ) ) { 2197 ext = data.model.src.split('.').pop(); 2198 if ( html5types[ ext ] ) { 2199 delete html5types[ ext ]; 2200 } 2201 #> 2202 <span class="setting"> 2203 <label for="video-details-source" class="name">URL</label> 2204 <input type="text" id="video-details-source" readonly data-setting="src" value="{{ data.model.src }}" /> 2205 <button type="button" class="button-link remove-setting">Remove video source</button> 2206 </span> 2207 <# } #> 2208 <# if ( ! _.isEmpty( data.model.mp4 ) ) { 2209 if ( ! _.isUndefined( html5types.mp4 ) ) { 2210 delete html5types.mp4; 2211 } 2212 #> 2213 <span class="setting"> 2214 <label for="video-details-mp4-source" class="name">MP4</label> 2215 <input type="text" id="video-details-mp4-source" readonly data-setting="mp4" value="{{ data.model.mp4 }}" /> 2216 <button type="button" class="button-link remove-setting">Remove video source</button> 2217 </span> 2218 <# } #> 2219 <# if ( ! _.isEmpty( data.model.m4v ) ) { 2220 if ( ! _.isUndefined( html5types.m4v ) ) { 2221 delete html5types.m4v; 2222 } 2223 #> 2224 <span class="setting">
2225 <label for="video-details-m4v-source" class="name">M4V</label> 2226 <input type="text" id="video-details-m4v-source" readonly data-setting="m4v" value="{{ data.model.m4v }}" /> 2227 <button type="button" class="button-link remove-setting">Remove video source</button> 2228 </span> 2229 <# } #> 2230 <# if ( ! _.isEmpty( data.model.webm ) ) { 2231 if ( ! _.isUndefined( html5types.webm ) ) { 2232 delete html5types.webm; 2233 } 2234 #> 2235 <span class="setting"> 2236 <label for="video-details-webm-source" class="name">WEBM</label> 2237 <input type="text" id="video-details-webm-source" readonly data-setting="webm" value="{{ data.model.webm }}" /> 2238 <button type="button" class="button-link remove-setting">Remove video source</button> 2239 </span> 2240 <# } #> 2241 <# if ( ! _.isEmpty( data.model.ogv ) ) { 2242 if ( ! _.isUndefined( html5types.ogv ) ) { 2243 delete html5types.ogv; 2244 } 2245 #> 2246 <span class="setting"> 2247 <label for="video-details-ogv-source" class="name">OGV</label> 2248 <input type="text" id="video-details-ogv-source" readonly data-setting="ogv" value="{{ data.model.ogv }}" /> 2249 <button type="button" class="button-link remove-setting">Remove video source</button> 2250 </span> 2251 <# } #> 2252 <# if ( ! _.isEmpty( data.model.flv ) ) { 2253 if ( ! _.isUndefined( html5types.flv ) ) { 2254 delete html5types.flv; 2255 } 2256 #> 2257 <span class="setting"> 2258 <label for="video-details-flv-source" class="name">FLV</label> 2259 <input type="text" id="video-details-flv-source" readonly data-setting="flv" value="{{ data.model.flv }}" /> 2260 <button type="button" class="button-link remove-setting">Remove video source</button> 2261 </span> 2262 <# } #> 2263 </div> 2264 2265 <# if ( ! _.isEmpty( html5types ) ) { #> 2266 <fieldset class="setting-group"> 2267 <legend class="name">Add alternate sources for maximum HTML5 playback</legend> 2268 <span class="setting"> 2269 <span class="button-large"> 2270 <# _.each( html5types, function (mime, type) { #> 2271 <button class="button add-media-source" data-mime="{{ mime }}">{{ type }}</button> 2272 <# } ) #> 2273 </span> 2274 </span> 2275 </fieldset> 2276 <# } #> 2277 2278 <# if ( ! _.isEmpty( data.model.poster ) ) { #> 2279 <span class="setting"> 2280 <label for="video-details-poster-image" class="name">Poster Image</label> 2281 <input type="text" id="video-details-poster-image" readonly data-setting="poster" value="{{ data.model.poster }}" /> 2282 <button type="button" class="button-link remove-setting">Remove poster image</button> 2283 </span> 2284 <# } #> 2285 2286 <fieldset class="setting-group"> 2287 <legend class="name">Preload</legend> 2288 <span class="setting preload"> 2289 <span class="button-group button-large" data-setting="preload"> 2290 <button class="button" value="auto">Auto</button> 2291 <button class="button" value="metadata">Metadata</button> 2292 <button class="button active" value="none">None</button> 2293 </span> 2294 </span> 2295 </fieldset> 2296 2297 <span class="setting-group"> 2298 <span class="setting checkbox-setting autoplay"> 2299 <input type="checkbox" id="video-details-autoplay" data-setting="autoplay" /> 2300 <label for="video-details-autoplay" class="checkbox-label">Autoplay</label> 2301 </span> 2302 2303 <span class="setting checkbox-setting"> 2304 <input type="checkbox" id="video-details-loop" data-setting="loop" /> 2305 <label for="video-details-loop" class="checkbox-label">Loop</label> 2306 </span> 2307 </span> 2308 2309 <span class="setting" data-setting="content"> 2310 <# 2311 var content = ''; 2312 if ( ! _.isEmpty( data.model.content ) ) { 2313 var tracks = jQuery( data.model.content ).filter( 'track' ); 2314 _.each( tracks.toArray(), function( track, index ) { 2315 content += track.outerHTML; #> 2316 <label for="video-details-track-{{ index }}" class="name">Tracks (subtitles, captions, descriptions, chapters, or metadata)</label> 2317 <input class="content-track" type="text" id="video-details-track-{{ index }}" aria-describedby="video-details-track-desc-{{ index }}" value="{{ track.outerHTML }}" />
2318 <span class="description" id="video-details-track-desc-{{ index }}"> 2319 The srclang, label, and kind values can be edited to set the video track language and kind. </span> 2320 <button type="button" class="button-link remove-setting remove-track">Remove video track</button><br /> 2321 <# } ); #> 2322 <# } else { #> 2323 <span class="name">Tracks (subtitles, captions, descriptions, chapters, or metadata)</span><br /> 2324 <em>There are no associated subtitles.</em> 2325 <# } #> 2326 <textarea class="hidden content-setting">{{ content }}</textarea> 2327 </span> 2328 </div> 2329 </div> 2330 </script>
2330 2331 2332
2332<script type="text/html" id="tmpl-editor-gallery"> 2333 <# if ( data.attachments.length ) { #> 2334 <div class="gallery gallery-columns-{{ data.columns }}"> 2335 <# _.each( data.attachments, function( attachment, index ) { #> 2336 <dl class="gallery-item"> 2337 <dt class="gallery-icon"> 2338 <# if ( attachment.thumbnail ) { #> 2339 <img src="{{ attachment.thumbnail.url }}" width="{{ attachment.thumbnail.width }}" height="{{ attachment.thumbnail.height }}" alt="{{ attachment.alt }}" /> 2340 <# } else { #> 2341 <img src="{{ attachment.url }}" alt="{{ attachment.alt }}" /> 2342 <# } #> 2343 </dt> 2344 <# if ( attachment.caption ) { #> 2345 <dd class="wp-caption-text gallery-caption"> 2346 {{{ data.verifyHTML( attachment.caption ) }}} 2347 </dd> 2348 <# } #> 2349 </dl> 2350 <# if ( index % data.columns === data.columns - 1 ) { #> 2351 <br style="clear: both;" /> 2352 <# } #> 2353 <# } ); #> 2354 </div> 2355 <# } else { #> 2356 <div class="wpview-error"> 2357 <div class="dashicons dashicons-format-gallery"></div><p>No items found.</p> 2358 </div> 2359 <# } #> 2360 </script>
2360 2361 2362
2362<script type="text/html" id="tmpl-crop-content"> 2363 <img class="crop-image" src="{{ data.url }}" alt="Image crop area preview. Requires mouse interaction." /> 2364 <div class="upload-errors"></div> 2365 </script>
2365 2366 2367
2367<script type="text/html" id="tmpl-site-icon-preview-crop"> 2368 <style> 2369 :root{ 2370 --site-icon-url: url( "{{ data.url }}" ); 2371 } 2372 </style> 2373 <h2>Site Icon Preview</h2> 2374 <p>As an app icon and a browser icon.</p> 2375 <div class="site-icon-preview crop"> 2376 <div class="image-preview-wrap app-icon-preview"> 2377 <img id="preview-app-icon" src="{{ data.url }}" class="app-icon-preview" alt="Preview as an app icon" /> 2378 </div> 2379 <div class="site-icon-preview-browser"> 2380 <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> 2381 <div class="site-icon-preview-tab"> 2382 <div class="image-preview-wrap browser"> 2383 <img id="preview-favicon" src="{{ data.url }}" class="browser-icon-preview" alt="Preview as a browser icon" /> 2384 </div> 2385 <div class="site-icon-preview-site-title" aria-hidden="true"><# print( 'Windpower Engineering & Development' ) #></div> 2386 <svg role="img" aria-hidden="true" fill="none" xmlns="http://www.w3.org/2000/svg" class="close-button"> 2387 <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" /> 2388 </svg> 2389 </div> 2390 </div> 2391 </div> 2392 </div> 2393 </script>
2393 2394 2395
2395<script id="wtwh-ai-search-script-js" src="https://scripts.wtwhmedia.com/developer/ai_search/env/prod/index.js?ver=1790240494"></script>
vendor: 1 bytes, line 2395
2395
2396<script id="thickbox-js-extra"> 2397var 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.windpowerengineering.com/wp-includes/js/thickbox/loadingAnimation.gif"}; 2398//# sourceURL=thickbox-js-extra 2399</script>
vendor: 1 bytes, line 2399
2399
2400<script id="thickbox-js" src="https://www.windpowerengineering.com/wp-includes/js/thickbox/thickbox.js?ver=3.1-20121105"></script>
vendor: 1 bytes, line 2400
2400
2401<script id="underscore-js" src="https://www.windpowerengineering.com/wp-includes/js/underscore.min.js?ver=1.13.8"></script>
vendor: 1 bytes, line 2401
2401
2402<script id="shortcode-js" src="https://www.windpowerengineering.com/wp-includes/js/shortcode.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2402
2402
2403<script id="media-upload-js" src="https://www.windpowerengineering.com/wp-admin/js/media-upload.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2403
2403
2404<script id="backbone-js" src="https://www.windpowerengineering.com/wp-includes/js/backbone.min.js?ver=1.6.1"></script>
vendor: 1 bytes, line 2404
2404
2405<script id="wp-util-js-extra"> 2406var _wpUtilSettings = {"ajax":{"url":"/wp-admin/admin-ajax.php"}}; 2407//# sourceURL=wp-util-js-extra 2408</script>
vendor: 1 bytes, line 2408
2408
2409<script id="wp-util-js" src="https://www.windpowerengineering.com/wp-includes/js/wp-util.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2409
2409
2410<script id="wp-backbone-js" src="https://www.windpowerengineering.com/wp-includes/js/wp-backbone.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2410
2410
2411<script id="media-models-js-extra"> 2412var _wpMediaModelsL10n = {"settings":{"ajaxurl":"/wp-admin/admin-ajax.php","post":{"id":0}}}; 2413//# sourceURL=media-models-js-extra 2414</script>
vendor: 1 bytes, line 2414
2414
2415<script id="media-models-js" src="https://www.windpowerengineering.com/wp-includes/js/media-models.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2415
2415
2416<script id="wp-plupload-js-extra"> 2417var 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"}; 2418var _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":"79fcf5c09d"}},"browser":{"mobile":false,"supported":true},"limitExceeded":false}; 2419//# sourceURL=wp-plupload-js-extra 2420</script>
vendor: 1 bytes, line 2420
2420
2421<script id="wp-plupload-js" src="https://www.windpowerengineering.com/wp-includes/js/plupload/wp-plupload.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2421
2421
2422<script id="jquery-ui-core-js-before"> 2423jQuery.uiBackCompat = true; 2424//# sourceURL=jquery-ui-core-js-before 2425</script>
vendor: 1 bytes, line 2425
2425
2426<script id="jquery-ui-core-js" src="https://www.windpowerengineering.com/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2426
2426
2427<script id="jquery-ui-mouse-js" src="https://www.windpowerengineering.com/wp-includes/js/jquery/ui/mouse.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2427
2427
2428<script id="jquery-ui-sortable-js" src="https://www.windpowerengineering.com/wp-includes/js/jquery/ui/sortable.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 2428
2428
2429<script id="mediaelement-core-js-before"> 2430var 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"}}; 2431//# sourceURL=mediaelement-core-js-before 2432</script>
vendor: 1 bytes, line 2432
2432
2433<script id="mediaelement-core-js" src="https://www.windpowerengineering.com/wp-includes/js/mediaelement/mediaelement-and-player.min.js?ver=4.2.17"></script>
vendor: 1 bytes, line 2433
2433
2434<script id="mediaelement-migrate-js" src="https://www.windpowerengineering.com/wp-includes/js/mediaelement/mediaelement-migrate.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2434
2434
2435<script id="mediaelement-js-extra"> 2436var _wpmejsSettings = {"pluginPath":"/wp-includes/js/mediaelement/","classPrefix":"mejs-","stretching":"responsive","audioShortcodeLibrary":"mediaelement","videoShortcodeLibrary":"mediaelement"}; 2437//# sourceURL=mediaelement-js-extra 2438</script>
vendor: 1 bytes, line 2438
2438
2439<script id="wp-mediaelement-js" src="https://www.windpowerengineering.com/wp-includes/js/mediaelement/wp-mediaelement.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2439
2439
2440<script id="wp-api-request-js-extra"> 2441var wpApiSettings = {"root":"https://www.windpowerengineering.com/wp-json/","nonce":"9963a1ed94","versionString":"wp/v2/"}; 2442//# sourceURL=wp-api-request-js-extra 2443</script>
vendor: 1 bytes, line 2443
2443
2444<script id="wp-api-request-js" src="https://www.windpowerengineering.com/wp-includes/js/api-request.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2444
2444
2445<script id="wp-dom-ready-js" src="https://www.windpowerengineering.com/wp-includes/js/dist/dom-ready.min.js?ver=3fe927cab37bf38d6a23"></script>
vendor: 1 bytes, line 2445
2445
2446<script id="wp-hooks-js" src="https://www.windpowerengineering.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 2446
2446
2447<script id="wp-i18n-js" src="https://www.windpowerengineering.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 2447
2447
2448<script id="wp-i18n-js-after"> 2449wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); 2450//# sourceURL=wp-i18n-js-after 2451</script>
vendor: 1 bytes, line 2451
2451
2452<script id="wp-a11y-js" src="https://www.windpowerengineering.com/wp-includes/js/dist/a11y.min.js?ver=31c6cec5a4ff7aff483d"></script>
vendor: 1 bytes, line 2452
2452
2453<script id="clipboard-js" src="https://www.windpowerengineering.com/wp-includes/js/clipboard.min.js?ver=2.0.11"></script>
vendor: 1 bytes, line 2453
2453
2454<script id="media-views-js-extra"> 2455var _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.windpowerengineering.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
2455pplication/x-tar,application/zip,application/x-7z-compressed":"Archives"},"captions":true,"nonce":{"sendToEditor":"5d8fa3901b","setAttachmentThumbnail":"816b1b6ab9"},"post":{"id":0},"defaultProps":{"link":"none","align":"","size":""},"attachmentCounts":{"audio":1,"video":1},"oEmbedProxyUrl":"https://www.windpowerengineering.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":"6","text":"June 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":"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"},{"year":"2023","month":"7","text":"July 2023"},{"year":"2023","month":"6","text":"June 2023"},{"year":"2023","month":"5","text":"May 2023"},{"year":"2023","month":"4","text":"April 2023"},{"year":"2023","month":"3","text":"March 2023"},{"year":"2023","month":"2","text":"February 2023"},{"year":"2023","month":"1","text":"January 2023"},{"year":"2022","month":"12","text":"December 2022"},{"year":"2022","month":"11","text":"November 2022"},{"year":"2022","month":"10","text":"October 2022"},{"year":"2022","month":"9","text":"September 2022"},{"year":"2022","month":"8","text":"August 2022"},{"year":"2022","month":"7","text":"July 2022"},{"year":"2022","month":"6","text":"June 2022"},{"year":"2022","month":"5","text":"May 2022"},{"year":"2022","month":"4","text":"April 2022"},{"year":"2022","month":"3","text":"March 2022"},{"year":"2022","month":"2","text":"February 2022"},{"year":"2022","month":"1","text":"January 2022"},{"year":"2021","month":"12","text":"December 2021"},{"year":"2021","month":"11","text":"November 2021"},{"year":"2021","month":"10","text":"October 2021"},{"year":"2021","month":"9","text":"September 2021"},{"year":"2021","month":"8","text":"August 2021"},{"year":"2021","month":"7","text":"July 2021"},{"year":"2021","month":"6","text":"June 2021"},{"year":"2021","month":"5","text":"May 2021"},{"year":"2021","month":"4","text":"April 2021"},{"year":"2021","month":"3","text":"March 2021"},{"year":"2021","month":"2","text":"February 2021"},{"year":"2021","month":"1","text":"January 2021"},{"year":"2020","month":"12","text":"December 2020"},{"year":"2020","month":"11","text":"November 2020"},{"year":"2020","month":"10","text":"October 2020"},{"year":"2020","month":"9","text":"September 2020"},{"year":"2020","month":"8","text":"August 2020"},{"year":"2020","month":"7","text":"July 2020"},{"year":"2020","month":"6","text":"June 2020"},{"year":"2020","month":"5","text":"May 2020"},{"year":"2020","month":"4","text":"April 2020"},{"year":"2020","month":"3","text":"March 2020"},{"year":"2020","month":"2","text":"February 2020"},{"year":"2020","month":"1","text":"January 2020"},{"year":"2019","month":"12","text":"December 2019"},{"year":"2019","month":"11","text":"November 2019"},{"year":"2019","month":"10","text":"October 2019"},{"year":"2019","month":"9","text":"September 2019"},{"year":"2019","month":"8","text":"August 2019"},{"year":"2019","month":"7","text":"July 2019"},{"year":"2019","month":"6","text":"June 2019"},{"year":"2019","month":"5","text":"May 2019"},{"year":"2019","month":"4","text":"April 2019"},{"year":"2019","month":"3","text":"March 2019"},{"year":"2019","month":"2","text":"February 2019"},{"year":"2019","month":"1","text":"January 2019"},{"year":"2018","month":"12","text":"December 2018"},{"year":"2018","month":"11","text":"November 2018"},{"year":"2018","month":"10","text":"October 2018"},{"year":"2018","month":"9","text":"September 2018"},{"year":"2018","month":"8","text":"August 2018"},{"year":"2018","month":"7","text":"July 2018"},{"year":"2018","month":"6","text":"June 2018"},{"year":"2018","month":"5","text":"May 2018"},{"year":"2018","month":"4","text":"April 2018"},{"year":"2018","month":"3","text":"March 2018"},{"year":"2018","month":"2","text":"February 2018"},{"year":"2018","month":"1","text":"January 2018"},{"year":"2017","month":"12","text":"December 2017"},{"year":"2017","month":"11","text":"November 2017"},{"year":"2017","month":"10","text":"October 2017"},{"year":"2017","month":"9","text":"September 2017"},{"year":"2017","month":"8","text":"August 2017"},{"year":"2017","month":"7","text":"July 2017"},{"year":"2017","month":"6","text":"June 2017"},{"year":"2017","month":"5","text":"May 2017"},{"year":"2017","month":"4","text":"April 2017"},{"year":"2017","month":"3","text":"March 2017"},{"year":"2017","month":"2","text":"February 2017"},{"year":"2017","month":"1","text":"January 2017"},{"year":"2016","month":"12","text":"December 2016"},{"year":"2016","month":"11","text":"November 2016"},{"year":"2016","month":"10","text":"October 2016"},{"year":"2016","month":"9","text":"September 2016"},{"year":"2016","month":"8","text":"August 2016"},{"year":"2016","month":"7","text":"July 2016"},{"year":"2016","month":"6","text":"June 2016"},{"year":"2016","month":"5","text":"May 2016"},{"year":"2016","month":"4","text":"April 2016"},{"year":"2016","month":"3","text":"March 2016"},{"year":"2016","month":"2","text":"February 2016"},{"year":"2016","month":"1","text":"January 2016"},{"year":"2015","month":"12","text":"December 2015"},{"year":"2015","month":"11","text":"November 2015"},{"year":"2015","month":"10","text":"October 2015"},{"year":"2015","month":"9","text":"September 2015"},{"year":"2015","month":"8","text":"August 2015"},{"year":"2015","month":"7","text":"July 2015"},{"year":"2015","month":"6","text":"June 2015"},{"year":"2015","month":"5","text":"May 2015"},{"year":"2015","month":"4","text":"April 2015"},{"year":"2015","month":"3","text":"March 2015"},{"year":"2015","month":"2","text":"February 2015"},{"year":"2015","month":"1","text":"January 2015"},{"year":"2014","month":"12","text":"December 2014"},{"year":"2014","month":"11","text":"November 2014"},{"year":"2014","month":"10","text":"October 2014"},{"year":"2014","month":"9","text":"September 2014"},{"year":"2014","month":"8","text":"August 2014"},{"year":"2014","month":"7","text":"July 2014"},{"year":"2014","month":"6","text":"June 2014"},{"year":"2014","month":"5","text":"May 2014"},{"year":"2014","month":"4","text":"April 2014"},{"year":"2014","month":"3","text":"March 2014"},{"year":"2014","month":"2","text":"February 2014"},{"year":"2014","month":"1","text":"January 2014"},{"year":"2013","month":"12","text":"December 2013"},{"year":"2013","month":"11","text":"November 2013"},{"year":"2013","month":"10","text":"October 2013"},{"year":"2013","month":"9","text":"September 2013"},{"year":"2013","month":"8","text":"August 2013"},{"year":"2013","month":"7","text":"July 2013"},{"year":"2013","month":"6","text":"June 2013"},{"year":"2013","month":"5","text":"May 2013"},{"year":"2013","month":"4","text":"April 2013"},{"year":"2013","month":"3","text":"March 2013"},{"year":"2013","month":"2","text":"February 2013"},{"year":"2013","month":"1","text":"January 2013"},{"year":"2012","month":"12","text":"December 2012"},{"year":"2012","month":"11","text":"November 2012"},{"year":"2012","month":"10","text":"October 2012"},{"year":"2012","month":"9","text":"September 2012"},{"year":"2012","month":"8","text":"August 2012"},{"year":"2012","month":"7","text":"July 2012"},{"year":"2012","month":"6","text":"June 2012"},{"year":"2012","month":"5","text":"May 2012"},{"year":"2012","month":"4","text":"April 2012"},{"year":"2012","month":"3","text":"March 2012"},{"year":"2012","month":"2","text":"February 2012"},{"year":"2012","month":"1","text":"January 2012"},{"year":"2011","month":"12","text":"December 2011"},{"year":"2011","month":"11","text":"November 2011"},{"year":"2011","month":"10","text":"October 2011"},{"year":"2011","month":"9","text":"September 2011"},{"year":"2011","month":"8","text":"August 2011"},{"year":"2011","month":"7","text":"July 2011"},{"year":"2011","month":"6","text":"June 2011"},{"year":"2011","month":"5","text":"May 2011"},{"year":"2011","month":"4","text":"April 2011"},{"year":"2011","month":"3","text":"March 2011"},{"year":"2011","month":"2","text":"February 2011"},{"year":"2011","month":"1","text":"January 2011"},{"year":"2010","month":"12","text":"December 2010"},{"year":"2010","month":"11","text":"November 2010"},{"year":"2010","month":"10","text":"October 2010"},{"year":"2010","month":"9","text":"September 2010"},{"year":"2010","month":"8","text":"August 2010"},{"year":"2010","month":"7","text":"July 2010"},{"year":"2010","month":"6","text":"June 2010"},{"year":"2010","month":"5","text":"May 2010"},{"year":"2010","month":"4","text":"April 2010"},{"year":"2010","month":"3","text":"March 2010"},{"year":"2010","month":"2","text":"February 2010"},{"year":"2010","month":"1","text":"January 2010"},{"year":"2009","month":"12","text":"December 2009"},{"year":"2009","month":"11","text":"November 2009"},{"year":"2009","month":"10","text":"October 2009"},{"year":"2009","month":"9","text":"September 2009"},{"year":"2009","month":"8","text":"August 2009"},{"year":"2009","month":"7","text":"July 2009"},{"year":"2009","month":"6","text":"June 2009"},{"year":"2009","month":"5","text":"May 2009"}],"mediaTrash":0,"infiniteScrolling":1}}; 2456//# sourceURL=media-views-js-extra 2457</script>
vendor: 1 bytes, line 2457
2457
2458<script id="media-views-js" src="https://www.windpowerengineering.com/wp-includes/js/media-views.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2458
2458
2459<script id="media-editor-js" src="https://www.windpowerengineering.com/wp-includes/js/media-editor.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2459
2459
2460<script id="media-audiovideo-js" src="https://www.windpowerengineering.com/wp-includes/js/media-audiovideo.min.js?ver=7.1.1"></script>
vendor: 1 bytes, line 2460
2460
2461<script id="ea-global-js" src="https://www.windpowerengineering.com/wp-content/themes/ThemeWTWH/assets/js/global-min.js?ver=1749457156"></script>
vendor: 1 bytes, line 2461
2461
2462<script id="wp-emoji-settings" type="application/json"> 2463{"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.windpowerengineering.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.1"}} 2464</script>
vendor: 1 bytes, line 2464
2464
2465<script type="module"> 2466/*! This file is auto-generated */ 2467var 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)))}); 2468//# sourceURL=https://www.windpowerengineering.com/wp-includes/js/wp-emoji-loader.min.js 2469</script>
vendor: 1 bytes, line 2469
2469
2470<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:'a400b28f4f6ac071',t:'MTc5MDI0MTQ2MQ=='};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>
2470</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.