CINXE.COM
cncf-tag-env-sustainability@lists.cncf.io | Saw the announcement!
<!DOCTYPE html> <html lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="pinterest" content="nopin" /> <meta name="pinterest" content="nohover" /> <meta name="3778517eb4810dfb5d143ed8f1b359b3b5a82923" content="0f56257c3db4a222e91b11bc6871c4df2e263b28" /> <link rel="apple-touch-icon" sizes="57x57" href="/img/org.10/favicons/apple-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="/img/org.10/favicons/apple-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="/img/org.10/favicons/apple-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="/img/org.10/favicons/apple-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="/img/org.10/favicons/apple-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="/img/org.10/favicons/apple-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="/img/org.10/favicons/apple-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="/img/org.10/favicons/apple-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/img/org.10/favicons/apple-icon-180x180.png"> <link rel="icon" type="image/png" sizes="192x192" href="/img/org.10/favicons/android-icon-192x192.png"> <link rel="icon" type="image/png" sizes="32x32" href="/img/org.10/favicons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="96x96" href="/img/org.10/favicons/favicon-96x96.png"> <link rel="icon" type="image/png" sizes="16x16" href="/img/org.10/favicons/favicon-16x16.png"> <link rel="manifest" href="/img/org.10/favicons/manifest.json"> <meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileImage" content="/ms-icon-144x144.png"> <script> /* stubs */ const hapticsImpactHeavy = async () => { }; const hapticsImpactMedium = async () => { }; const hapticsImpactLight = async () => { }; const hapticsVibrate = async () => { }; const hapticsSelectionStart = async () => { }; const hapticsSelectionChanged = async () => { }; const hapticsSelectionEnd = async () => { }; </script> <script> function setPullToRefresh() {} function gotoURL(inurl) { window.location.href = inurl; return; } function contentLoaded(isHTMX, f, caller = "") { console.log("contentLoaded: " + isHTMX + " " + caller); if (isHTMX == true) { document.body.addEventListener('htmx:afterSettle', f, {once: true}); } else { if (document.readyState !== 'loading') { console.log('document is already ready, just execute code here'); f(); } else { console.log('document was not ready, place code here'); document.addEventListener('DOMContentLoaded', f, {once: true}); } } } function HideAppSidebarOnKeyboard() { console.log("In HideAppSidebarOnKeyboard"); } // stub function logError(data, url, linenumber) { console.log(data) return; } var pushSubToken; var ignoreErrors = false; var lastError = ""; window.onerror = function(errorMessage, errorUrl, errorLine, errorColumn, errorObj) { let column; let stack; if (console && console.log) { console.log("msg:", errorMessage); console.log("url:", errorUrl); console.log("line:", errorLine); if (errorColumn !== undefined && errorObj != null) { console.log("column:", errorColumn); column = errorColumn; } if (errorObj !== undefined && errorObj != null) { console.log("stack:", errorObj.stack); stack = errorObj.stack; } console.log("client_id:", "web.web08.6135423.1732401347933632668"); console.log("last_error:", lastError); console.log("stack:", stack); } if (errorUrl == "" || errorUrl === null) { errorUrl = window.location.href; } if (errorMessage.includes("SecurityError:") == true) { ignoreErrors = true; } if (ignoreErrors == true) { console.log("cookies, disabled, ignoring"); lastError = errorMessage; return; } jQuery.ajax({ type: 'POST', url: '/jsclienterror', data: { msg: errorMessage, url: errorUrl, line: errorLine, column: column, stack: stack, last_error: lastError, client_id: "web.web08.6135423.1732401347933632668" }, success: function() { if (console && console.log) { console.log('JS error report successful.'); } lastError = errorMessage; }, error: function() { if (console && console.error) { console.error('JS error report submission failed!'); } lastError = errorMessage; } }); return true; } </script> <script src="/tinymce-5.10.9/tinymce.min.js"></script> <script src="/js/browser-image-compression-2.0.2.min.js"></script> <link href="/css/application-6630163a3be19b6cee26ce35342d0d92.css" rel="stylesheet" id="groupsio-css"> <script src="/js/application-9b2c27b802a13063cf8a712fe566f004.js" id="groupsio-js"></script> <script src="/js/run_prettify.js"></script> <title> cncf-tag-env-sustainability@lists.cncf.io | Saw the announcement! </title> <link rel="canonical" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/saw_the_announcement/91479410"> <meta property="og:title" content="Saw the announcement!" /> <meta property="og:description" content="" /> <meta property="og:image" content="https://lists.cncf.io/g/cncf-tag-env-sustainability/coverphoto" /> <script> htmx.config.scrollBehavior = "instant"; htmx.config.historyCacheSize = 0; htmx.config.defaultSettleDelay = 0; console.log("FULL PAGE LOAD"); </script> </head> <body id="body" class="" hx-headers='{"Accept-Version": "58f989bb651da14c2b1295c4c0447aef4773d1f9"}' hx-ext="preload" hx-boost="false"> <script> if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { document.body.classList.add('dark-mode'); } </script> <div class="navbar navbar-head navbar-fixed-top" role="navigation" id="headerbar"> <div class="container-fluid" style="padding-left:0px;"> <a href="https://lists.cncf.io" class="navbar-left" hx-boost="false" hx-disinherit="*"> <img src="https://lists.cncf.io/img/org.10/mainlogo.png?cachebust" height="50" alt="Groups.io"> </a> <ul class="nav navbar-nav pull-right visible-xs" style="margin-top:5px;margin-bottom:5px;"> <li> <a href="#" data-toggle="modal" data-target="#mobileAccount"> <i class="fa-fw fa fa-bars fa-lg"></i> </a> </li> </ul> <ul class="nav navbar-nav pull-right hidden-xs"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa-fw fa-regular fa-globe"></i> EN <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="https://lists.cncf.io/unsetlang"> EN </a> </li> <li> <a href="https://lists.cncf.io/setlang/de"> DE </a> </li> <li> <a href="https://lists.cncf.io/setlang/es"> ES </a> </li> <li> <a href="https://lists.cncf.io/setlang/fr"> FR </a> </li> <li> <a href="https://lists.cncf.io/setlang/it"> IT </a> </li> <li> <a href="https://lists.cncf.io/setlang/pt"> PT </a> </li> <li> <a href="https://lists.cncf.io/setlang/uk"> UK </a> </li> </ul> </li> <li> <a href="https://lists.cncf.io/helpcenter" target="_blank"> Help </a> </li> <li> <a href="https://lists.cncf.io/login" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In </a> </li> </ul> </div> </div> <div class="modal fade" id="mobileAccount" role="dialog"> <div class="modal-dialog" style="margin-top:50px;"> <div class="modal-content"> <div class="modal-body"> <ul class="list-group noborderlist"> <li class="noborderitem list-group-item"> <a href="https://lists.cncf.io/login" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In </a> </li> <li class="noborderitem list-group-item"> <a href="https://lists.cncf.io/helpcenter" target="_blank"> <i class="fa-fw fa fa-question-circle"></i> Help </a> </li> <li class="dropdown noborderitem list-group-item"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa-fw fa-regular fa-globe"></i> EN <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="https://lists.cncf.io/unsetlang"> EN </a> </li> <li> <a href="https://lists.cncf.io/setlang/de"> DE </a> </li> <li> <a href="https://lists.cncf.io/setlang/es"> ES </a> </li> <li> <a href="https://lists.cncf.io/setlang/fr"> FR </a> </li> <li> <a href="https://lists.cncf.io/setlang/it"> IT </a> </li> <li> <a href="https://lists.cncf.io/setlang/pt"> PT </a> </li> <li> <a href="https://lists.cncf.io/setlang/uk"> UK </a> </li> </ul> </li> </ul> </div> </div> </div> </div> <script> var groupnavigatorData = [ ]; </script> <!-- Modal Dialog for Autocomplete --> <div class="modal fade" id="groupnavigatorModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <input type="text" class="form-control" id="groupnavigatorInput" placeholder="Go to group..." style="margin-bottom:10px"> <div id="groupnavigatorContainer" class="autocompleteResults" style="max-height:250px; overflow-y: auto;"></div> <div class="text-center" style="margin-top:10px; font-size:12px;"><i class="fa-sharp fa-arrow-up-arrow-down"></i> to navigate <i class="fa-sharp fa-arrow-turn-down-left"></i> to use <strong>esc</strong> to dismiss</div> </div> </div> </div> </div> <script> // Keep track of the currently selected index var selectedIndex = -1; // Function to highlight the matched substring function highlightSubstring(str, substring) { var index = str.toLowerCase().indexOf(substring.toLowerCase()); if (index !== -1) { var before = str.substring(0, index); var middle = str.substring(index, index + substring.length); var after = str.substring(index + substring.length); return before + '<span class="autocomplete-highlight">' + middle + '</span>' + after; } return str; } // Function to highlight the selected item and ensure it is visible in the scrollable list function highlightSelectedItem(modalName) { var listContainer = document.getElementById(modalName + 'Container'); var items = document.getElementsByClassName(modalName + '-list-item'); Array.from(items).forEach(function(item, idx) { item.className = idx === selectedIndex ? modalName + '-list-item autocomplete-list-item btn-primary no-hover' : modalName + '-list-item autocomplete-list-item no-hover'; // Apply btn-primary class to the selected item }); if (items.length > 0 && selectedIndex >= 0) { var selectedItem = items[selectedIndex]; var containerTop = listContainer.scrollTop; var containerBottom = containerTop + listContainer.clientHeight; var itemTop = selectedItem.offsetTop; var itemBottom = itemTop + selectedItem.offsetHeight; const fudge = 59; if (selectedIndex > 0 && itemTop > containerBottom) { // If there are items below the selected item and the selected item is not fully visible, scroll down listContainer.scrollTop = itemTop - listContainer.clientHeight + items[selectedIndex - 1].offsetHeight; } else if (selectedIndex < items.length - 1 && (itemTop - fudge) < containerTop) { // If there are items above the selected item and the selected item is not fully visible, scroll up listContainer.scrollTop = itemTop - fudge - items[selectedIndex + 1].offsetHeight; } } } // function to populate the list based on the input function populateList(modalName, data) { var input = document.getElementById(modalName+'Input').value; var listContainer = document.getElementById(modalName+'Container'); listContainer.innerHTML = ''; data.forEach(function(item) { if (item.name.toLowerCase().includes(input.toLowerCase())) { var div = document.createElement('div'); div.innerHTML = highlightSubstring(item.name, input); div.className = modalName+'-list-item autocomplete-list-item no-hover'; // Apply no-hover class div.addEventListener('click', function() { // Navigate to the specified URL when a list item is clicked window.location.href = item.url; }); div.addEventListener('mousemove', function() { // Remove no-hover class from all items when the mouse is moved over any item console.log("mouse move"); var items = document.getElementsByClassName(modalName+'-list-item'); Array.from(items).forEach(function(item) { item.classList.remove('no-hover'); }); }); listContainer.appendChild(div); } }); highlightSelectedItem(modalName); } function InitAutocomplete(modalName, data) { // Focus the input field when the modal is shown and populate the list $('#' + modalName + 'Modal').on('shown.bs.modal', function () { $('#' + modalName + 'Input').focus().val(''); populateList(modalName, data); selectedIndex = 0; highlightSelectedItem(modalName); }); // Event listener for input field typing document.getElementById(modalName + 'Input').addEventListener('input', function() { populateList(modalName, data); selectedIndex = 0; }); // Event listener for arrow keys and enter key document.getElementById(modalName + 'Input').addEventListener('keydown', function(event) { var items = document.getElementsByClassName(modalName + '-list-item'); if (event.key === 'ArrowDown') { event.preventDefault(); if (selectedIndex < items.length - 1) selectedIndex++; highlightSelectedItem(modalName); } else if (event.key === 'ArrowUp') { event.preventDefault(); if (selectedIndex > 0) selectedIndex--; highlightSelectedItem(modalName); } else if (event.key === 'Enter' && selectedIndex >= 0 && selectedIndex < items.length) { event.preventDefault(); items[selectedIndex].click(); } }); } function showAutocompleteModal(modalName) { $('#' + modalName + 'Modal').modal('show'); selectedIndex = -1; } </script> <div id="content" class="container-fluid"> <script> InitAutocomplete("groupnavigator", groupnavigatorData); document.body.addEventListener("showReloadPageDialog", function(evt) { console.log("Forced reload"); location.reload(); }); function ShowBackButton(label) { var logoElement = document.getElementById("logo"); if (logoElement) { html = ` <span style="color:#fff;margin-top:14px;margin-left:12px;float:left !important; height:36px;"> <a onclick="goBack()" style="color:#fff"> <i class="fa-fw fa-solid fa-chevron-left fa-lg"></i> </a></span>`; if (label != "") { html += `<div style="position:absolute;left:50%;transform:translateX(-50%);text-align:center;color:#ecf0f1;margin-top:5px;"><h4>` + label + `</h4></div>`; } logoElement.innerHTML = html; } } function HideBackButton() { var logoElement = document.getElementById("logo"); if (logoElement) { logoElement.innerHTML = ` <a href="https://lists.cncf.io" class="navbar-left"> <img src="https://lists.cncf.io/img/org.10/mainlogo.png?cachebust" height="50" alt="Groups.io"> </a>`; } } function goBack() { history.back(); } // submitEvent acts like .submit(), except it is compatible with the app, by using events instead. function submitEvent(ele) { console.log("in submitEvent"); if (ele.startsWith('#')) { ele = ele.slice(1); } document.getElementById(ele).submit(); return; /* const theEvent = new CustomEvent('submit', { bubbles: true, cancelable: true }); if (typeof ele === 'string' || ele instanceof String) { if (ele.startsWith("#") == true) { ele = ele.slice(1); } if (document.getElementById(ele).dispatchEvent(theEvent) == true) { // if not cancelled, do normal submit console.log("calling submit"); document.getElementById(ele).submit(); } return; } // assume ele is the element if (ele.dispatchEvent(theEvent) == true) { // if not cancelled, do normal submit console.log("calling submit"); ele.submit(); } */ } // gioDestroy is a convenience function for destroy callbacks function gioDestroy(eventCB) { let internalGioDestroy = function(evt) { // do not activate on infinite scroll events if (evt.detail.target !== undefined && evt.detail.target.id != "maincontent-refresh") { console.log("Ignoring infinite scroll event"); return; } console.log("Calling destroy callback"); eventCB(evt); } document.body.addEventListener("htmx:beforeSwap", internalGioDestroy, {once: true}); document.body.addEventListener("htmx:historyCacheMiss", internalGioDestroy, {once: true}); } var drawerCloseFunc = function(evt) { console.log("in drawerCloseFunc"); // Find all elements with the class 'drawer' var drawers = document.querySelectorAll('.drawer'); // Iterate over each element and call closeDrawer() on each drawers.forEach(function(obj) { drawerObj.closeDrawer(obj); }); $('.modal').modal('hide'); } document.body.addEventListener('htmx:beforeSwap', drawerCloseFunc); document.body.addEventListener('htmx:historyCacheMiss', drawerCloseFunc); var keydownFunc = function(event) { var tagName = event.target.tagName.toLowerCase(); if (tagName === 'input' || tagName === 'textarea' || event.target.isContentEditable) { if (event.key === 'Escape') { event.target.blur(); } return; } // check if the viewimages viewer is up let element = document.getElementById('overlay'); if (element && element.classList.contains('visible')) { return; } console.log("HERE: " + event.key + " " + event.ctrlKey + " " + event.shiftKey + " " + event.metaKey); if (event.ctrlKey && event.shiftKey && (event.key === '?' || event.key === '/')) { event.preventDefault(); // Prevent the default action // Show the modal dialog for keyboard shortcuts $('#shortcutModal').modal('show'); return; } $('#shortcutModal').modal('hide'); if (event.key.toLowerCase() === 'g') { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); showAutocompleteModal("groupnavigator"); return; } } // Check if the pressed key is '/' if ((event.key === 'f' || event.key === 'F') && event.shiftKey) { if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { if (event.metaKey) { event.preventDefault(); // Prevent the default action // Focus on the search box let box = document.getElementById('searchbox') if (box != null) { document.getElementById('searchbox').focus(); } } } else { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); // Prevent the default action // Focus on the search box let box = document.getElementById('searchbox') if (box != null) { document.getElementById('searchbox').focus(); } } } } } document.addEventListener('keydown', keydownFunc); var removeDrawerCloseFunc = function(evt) { document.body.removeEventListener('htmx:beforeSwap', drawerCloseFunc); document.body.removeEventListener('htmx:historyCacheMiss', drawerCloseFunc); document.removeEventListener('keydown', keydownFunc); } document.body.addEventListener("htmx:historyCacheMiss", removeDrawerCloseFunc, {once: true}); </script> <!-- Modal Dialog for Keyboard Shortcuts --> <div class="modal fade" id="shortcutModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="myModalLabel">Keyboard Shortcuts</h4> </div> <div class="modal-body"> <div class="row"> <div class="col-xs-3 text-right"><strong>ctrl</strong> + <strong>shift</strong> + <strong>?</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Show all keyboard shortcuts</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong>ctrl</strong> + <strong>g</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Navigate to a group</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong class="ctrlmeta">ctrl</strong> + <strong>shift</strong> + <strong>f</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Find</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong class="ctrlmeta">ctrl</strong> + <strong>/</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Quick actions</div> </div> </div> <div class="text-center" style="margin-top:10px; margin-bottom:10px; font-size:12px;"><strong>esc</strong> to dismiss</div> </div> </div> </div> <div id="mainrow" class="row" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div id="groupsidebar" class="scrollbar hidden-print"> <div class="scrollbar-content"> <div id="accordion" role="tablist" aria-multiselectable="true" style="margin-bottom:20px;"> <div class="list-group noborderlist" style="border:0;margin-bottom:0px"> <a title="Group Home" href="https://lists.cncf.io/g/cncf-tag-env-sustainability" class="list-group-item sidebar-item"> <i class="fa-fw fa fa-home fa-lg"></i> Home </a> <a title="Messages" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?sidebar=true" id="sidebar-archives" class="noborderitem list-group-item sidebar-item sidebar-item-archives active"> <i class="fa-fw fa fa-comments fa-lg"></i> Messages <span id="sidebar-archives-badge" class="badge"></span> </a> <a title="Hashtags" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/hashtags" id="sidebar-hashtags" class="noborderitem list-group-item sidebar-item sidebar-item-hashtags"> <i class="fa-fw fa fa-hashtag fa-lg"></i> Hashtags <span id="sidebar-hashtags-badge" class="badge"></span> </a> <a title="Subgroups" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/subgroups" id="sidebar-subgroups" class="noborderitem list-group-item sidebar-item sidebar-item-subgroups"> <i class="fa-fw fa fa-chart-pie fa-lg"></i> Subgroups <span id="sidebar-subgroups-badge" class="badge"></span> </a> </div> </div> <div class="text-center" style="font-size:13px;margin-bottom:30px"> <div style="padding-bottom:10px;"> <strong>ctrl</strong> + <strong>shift</strong> + <strong>?</strong> for shortcuts </div> <div style="padding-bottom:5px;"> <a href="https://groups.io/static/about"> About </a> · <a href="https://groups.io/static/features"> Features </a> · <a href="https://groups.io/static/pricing"> Pricing </a> </div> <div style="padding-bottom:5px;"> <a rel="nofollow" href="https://groups.io/g/updates/messages?expanded=1"> Updates </a> · <a href="https://groups.io/static/tos"> Terms </a> · <a href="https://groups.io/helpcenter" target="_blank"> Help </a> </div> <div style="padding-bottom:5px;"> © 2024 Groups.io </div> </div> </div> </div> <div id="maincontent" class="groupmaincontent"> <div id="maincontent-refresh"> <div id="maincontent-column" class="col-xs-12 maincontent-column"> <div id="alertdiv"></div> <div class="noticetemplate template"> <div class="alert alert-success alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true"> × </span> </button> <span class="flashmsg"></span> </div> </div> <div class="alerttemplate template"> <div class="alert alert-danger alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true"> × </span> </button> <span class="flashmsg"></span> </div> </div> <div class="alertnoclosetemplate template"> <div class="alert alert-danger" role="alert"> <span class="flashmsg"></span> </div> </div> <script> function dismiss() { console.log("dismiss"); $.get( "/dismissalert"); } var $alerttemplate = $(".alerttemplate"); var $alertnoclosetemplate = $(".alertnoclosetemplate"); var $noticetemplate = $(".noticetemplate"); function createAlert(msg, isError, autoClose, noClose) { if (isError == false) { $newPanel = $noticetemplate.clone(); } else { if (noClose) { $newPanel = $alertnoclosetemplate.clone(); } else { $newPanel = $alerttemplate.clone(); } } $newPanel.find(".flashmsg").html(msg); if (autoClose == true) { $("#alertdiv").append($newPanel.fadeTo(2000, 500).slideUp(500, function(){ $newPanel.slideUp(500); $newPanel.remove(); })); } else { $("#alertdiv").append($newPanel.fadeIn()); } return $newPanel; } </script> <script> // doLike toggles a like for a person. function doLike(groupname, numlikes, msgid, like, csrf) { $.ajax({ url: groupname+"/like?msgid="+msgid+"&like="+like+"&csrf="+csrf, cache: false, }); if (like == true) { numlikes++ } else { numlikes-- } displayLikes(groupname, numlikes, msgid, like, csrf); displayLikeStats(groupname, numlikes, msgid, like); } // displayLikes displays the Like/Unlike link button. function displayLikes(groupname, numlikes, msgid, hasliked, csrf) { if (hasliked == true) { likedata = "<span id='likebutton"+msgid+"'><a href='#' onclick='doLike(\""+groupname+"\","+numlikes+","+msgid+", false, \""+csrf+"\");return false;'><i class=\"fa fa-thumbs-up\"></i> Unlike</a></span>" } else { likedata = "<span id='likebutton"+msgid+"'><a href='#' onclick='doLike(\""+groupname+"\","+numlikes+","+msgid+", true, \""+csrf+"\");return false;'><i class=\"fa fa-thumbs-up\"></i> Like</a></span>" } $("#likebutton"+msgid).html(likedata); } // displayLikeStats displays the line that shows how many people have liked this. function displayLikeStats(groupname, numlikes, msgid, hasliked) { if (hasliked == false && numlikes == 0) { $("#likestats"+msgid).html("<span id='likestats"+msgid+"'class='likestats'></span>"); return } likedata = "<span id='likestats" + msgid + "' class='likestats'><i class='fa fa-thumbs-up'></i> " if (hasliked == true) { likedata += "You" if (numlikes > 1) { likedata = likedata + " and <a href='#' onclick='showLikes(\"" + groupname + "\"," + msgid + ");return false;'>" + (numlikes-1) if (numlikes == 2) { likedata = likedata + " Other" } else { likedata = likedata + " Others" } } } else { likedata += "<a href='#' onclick='showLikes(\"" + groupname + "\"," + msgid + ");return false;'>" + numlikes if (numlikes == 1) { likedata = likedata + " Person" } else { likedata = likedata + " People" } } likedata = likedata + "</a> liked this</span>" $("#likestats"+msgid).html(likedata); } // showLikes fetches all the likes for a message and pops up the dialog box to show them. function showLikes(groupname, msgid) { console.log(groupname) $.getJSON(groupname+"/getlikes?msgid="+msgid, function( data ) { htmldata = '<ul class="list-group">' jQuery.each(data, function() { htmldata += '<li class="list-group-item" style="display: flex;align-items: center;">' + this.Icon + ' <span style="margin-left: 10px;">' + this.Profile + '</span></li>' }); htmldata += '</ul>' $("#showlikesbody").html(htmldata); $('#showlikesmodal').modal({show:true}) } ); } </script> <!-- show likes modal --> <div class="modal fade" id="showlikesmodal" tabindex="-1" role="dialog" aria-labelledby="showlikesmodalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="showlikesmodalLabel"> Likes </h4> </div> <div class="modal-body"> <div id="showlikesbody"></div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Close </button> </div> </div> </div> </div> <div class="row breadcrumb-row" style="margin-bottom: 10px"> <div class="col-xs-12 col-sm-9"> <span class="hidden-sm hidden-md hidden-lg pull-right" style="padding:8px 15px;"><a data-toggle="modal" data-target="#searchModal"><i class="fa fa-search"></i></a></span> <div class="breadcrumb-container"> <ol class="breadcrumb scroll-breadcrumb"> <li><a href="https://lists.cncf.io/g/cncf-tag-env-sustainability"><i class="fa fa-home"></i> Cncf-Tag-Env-Sustainability</a></li> <li class="active"><a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?index=91479410"><i class="fa fa-inbox"></i> Topics</a></li> </ol> </div> </div> <div class="col-sm-3 hidden-xs" style="padding-right:0px"> <form class="form-inline pull-right" method="get" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/search"> <input type="hidden" name="p" value="Created,,,20,1,0,0"> <div class="input-group"> <input id="searchbox" type="text" class="form-control" placeholder="Search" title="Search" name="q" size="20" value="" style="height:37px"> <div class="input-group-btn"> <button class="btn btn-primary" type="submit" style="height:37px;" aria-label="Search"> <span class="fa fa-search"></span> </button> </div> </div> </form> </div> </div> <div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="searchModalLabel"> Search </h4> </div> <form class="form-horizontal" method="get" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/search"> <div class="modal-body"> <div class="form-group"> <div class="col-sm-12"> <input type="text" class="form-control" placeholder="Search" title="Search" name="q" value=""> </div> </div> </div> <div class="modal-footer"> <button class="btn btn-primary btn-sm" aria-label="Search"> <i class="fa fa-search"></i> Search </button> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Cancel </button> </div> </form> </div> </div> </div> <div class="pull-right"> <form class="form-inline"> <span class="hidden-xs"> <a class="button-link" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/saw_the_announcement/91479410?dir=asc"> Date <i class="fa fa-xs fa-sort-down"></i> </a> </span> <span class="hidden-sm hidden-md hidden-lg"> <a class="button-link" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/saw_the_announcement/91479410?dir=asc"> Date <i class="fa fa-xs fa-sort-down"></i> </a> </span> <span class="hidden-xs"> <span class="form-group"> 1 - 1 of 1 </span> <ul class="pagination form-group" style="margin: 0px !important;"> <li class="disabled"> <a href="#"> <i class="fa fa-chevron-left"> <span class="sr-only"> previous page </span> </i> </a> </li> <li class="disabled"> <a href="#"> <i class="fa fa-chevron-right"> <span class="sr-only"> next page </span> </i> </a> </li> </ul> </span> </form> </div> <div class="form-group button-link-group"> </div> <h4 style="padding-top:10px;padding-bottom:10px;"> Saw the announcement! </h4> <table id="records" class="table table-condensed table-striped table-fixed" hx-disinherit="*"> <tr></tr> <tr class="background-color" > <td style="padding-left:0px;padding-right:0px;padding-bottom:0px;border:0px;"> <div class="table-background-color expanded-message"> <hr class="sr-only"> <a name="msg17" id="msg17"></a> <div class="row"> <div class="col-md-12"> <div class="pull-left"> <div class="dropdown"> <a class="dropdown-toggle" href="#" role="button" id="dropdownMenu205907373" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span style="display: flex;align-items: center;"> <i class="fa fa-user" style="font-size:40px; padding-right:2px; padding-left:2px;"></i> <u>Daniel Shown</u> <span class="caret"></span> </span> </a> <ul class="dropdown-menu" aria-labelledby="dropdownMenu205907373"> <li> <a rel="nofollow" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/search?q=posterid:6955213"> <i class="fa-fw fa fa-comments"></i> All Messages By This Member </a> </li> </ul> </div> </div> <div class="pull-right" style="text-align: right;"> <font size="-1" class="text-muted"> <script id="timedispmsg205907373"> $('#timedispmsg205907373').replaceWith(DisplayShortTime(1654098349019811529, false )); </script> </font> <a rel="nofollow" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/message/17"> <span class="hidden-xs"> #17 </span> <i class="fa fa-link fa-lg"></i> </a> </div> </div> </div> <br /> <div id="msgbody205907373" class="user-content"> <div class="forcebreak" dir="auto"><div dir="ltr">Hello: I just saw the post about the group on the CNCF blog, and decided to join. In my "day job" I work for a company that provides distributed energy resources behind the meter, and automates management of those resources for optimal聽usage. We use CNCF projects extensively. I'm also passionate about sustainability and stewardship generally. I'm looking forward to finding opportunities to get engaged. :Daniel</div></div> </div> <p></p> <div class="table-highlight-background-color" style="margin-left:-10px;margin-right:-10px;margin-bottom:-10px;padding-left:10px;padding-right:10px;padding-top:4px;padding-bottom:2px;border-bottom-left-radius:4px;border-bottom-right-radius:4px;"> <div class="row"> <div class="col-xs-8"></div> </div> <div class="row"> <div class="col-xs-12"> <div id="likestats205907373"></div> </div> </div> </div> </div> <script> contentLoaded(false, function() { displayLikeStats("/g/cncf-tag-env-sustainability", 4, 205907373, false) }); function replyToChange205907373(element) { var value = element.value; if (value == "1") { subj = $('#subject205907373').val(); $('#subject205907373').val('Private: ' + subj); $('#bccme205907373').show(); } else if (value == "2") { subj = $('#subject205907373').val(); $('#subject205907373').val(subj.replace('Private: ', '')); $('#bccme205907373').show(); } else { subj = $('#subject205907373').val(); $('#subject205907373').val(subj.replace('Private: ', '')); $('#bccme205907373').hide(); } if (tinyMCE.get('editor205907373') != null) { tinyMCE.get('editor205907373').focus(); } } function setFocus205907373() { tinyMCE.activeEditor.focus(); } </script> </td> </tr> </table> <!-- Modal --> <div class="modal fade" id="videoModal" tabindex="-1" role="dialog" aria-labelledby="videoModalLabel"> <div class="modal-dialog" role="document" style="width:80vw; height:80vh;margin-left:auto;margin-right:auto;"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> </div> <div class="modal-body" id="videoModalBody"> </div> </div> </div> </div> <script> videojs.registerPlugin('orientationHandler', function() { this.on('loadedmetadata', function() { player = this; const video = this.tech().el(); console.log("In loadedmetadata"); // Get video orientation from metadata if available const transform = video.style.transform || ''; console.log("transform:"+transform); const rotation = transform.match(/rotate\((\d+)deg\)/); console.log("rotation:"+rotation); const currentRotation = rotation ? parseInt(rotation[1]) : 0; console.log("currentRotation:"+currentRotation); // Check if video dimensions suggest it needs rotation const videoRatio = video.videoWidth / video.videoHeight; console.log("videoRatio:"+videoRatio); if (videoRatio < 1 && currentRotation === 0) { console.log("rotating"); video.style.transform = 'rotate(180deg)'; //player.posterImage.el().style.transform = 'rotate(180deg)'; const posterEl = player.el().querySelector('.vjs-poster'); if (posterEl) { console.log("rotating poster"); posterEl.style.transform = 'rotate(180deg)'; } } }); }); contentLoaded(false, function() { let player; let videoLinks = document.getElementsByClassName('video-link'); for (var i = 0; i < videoLinks.length; i++) { videoLinks[i].addEventListener('click', function(event) { let videoSrc = event.currentTarget.getAttribute('data-video-src'); let videoName = event.currentTarget.getAttribute('data-video-name'); console.log("videoSrc: ", videoSrc); // Create a new video tag let videoTag = document.createElement('video'); videoTag.setAttribute('class', 'video-js vjs-fill center-block vjs-default-skin'); videoTag.setAttribute('controls', ''); videoTag.setAttribute('preload', 'auto'); videoTag.setAttribute('data-setup', '{}'); // Create a new source tag let sourceTag = document.createElement('source'); sourceTag.setAttribute('src', videoSrc); sourceTag.setAttribute('type', 'video/mp4'); // Append the source tag to the video tag videoTag.appendChild(sourceTag); // Get the modal body and clear its contents let modalBody = document.getElementById('videoModalBody'); modalBody.setAttribute('style', 'height:80vh;width:80vw'); modalBody.innerHTML = ''; // Append the video tag to the modal body modalBody.appendChild(videoTag); // Initialize the video player player = videojs(videoTag); player.orientationHandler(); // Create a new button component let Button = videojs.getComponent('Button'); class DownloadButton extends Button { constructor(player, options) { super(player, options); this.el().innerHTML = '<span class="sr-only">Download</span><i class="fas fa-download"></i>'; } handleClick() { window.open(videoSrc, '_blank'); } } // Register the custom Button class videojs.registerComponent('DownloadButton', DownloadButton); // Add the custom button to the control bar player.getChild('controlBar').addChild('DownloadButton', {}); }); } $('#videoModal').on('hide.bs.modal', function (e) { if (player) { player.pause(); } }); var checkboxes = document.querySelectorAll('.delete-checkbox'); // The forEach method will not execute if the NodeList is empty, // so there's no need for an explicit check for the existence of checkboxes. checkboxes.forEach(function(checkbox) { checkbox.addEventListener('click', function(event) { // Stop the event from bubbling up to the parent elements event.stopPropagation(); }); }); }, "attachment.qtpl"); </script> <form class="form" method="POST" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/editmessage"> <input type="hidden" name="mid" id="mid" value="0"> <input type="hidden" name="action_type" id="action_type" value="delete"> <!-- Verify Remove Modal --> <div class="modal fade" id="deleteMessageModal" tabindex="-1" role="dialog" aria-labelledby="deleteMessageModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="deleteMessageModalLabel"> Verify Delete </h4> </div> <div class="modal-body"> Are you sure you wish to delete this message from the message archives of cncf-tag-env-sustainability@lists.cncf.io? <strong>This cannot be undone.</strong> </div> <div class="modal-footer"> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Cancel </button> <button class="btn btn-danger btn-sm" name="delmessage" value="1"> <i class="fa fa-trash-alt"></i> Yes </button> </div> </div> </div> </div> </form> <form class="form" method="POST" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/repostmessage"> <input type="hidden" name="mid" id="repostmid" value="0"> <input type="hidden" name="r" value="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages"> <!-- Verify Repost Modal --> <div class="modal fade" id="repostMessageModal" tabindex="-1" role="dialog" aria-labelledby="repostMessageModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="repostMessageModalLabel"> Verify Repost </h4> </div> <div class="modal-body"> Are you sure you wish to repost this message? </div> <div class="modal-footer"> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Cancel </button> <button class="btn btn-danger btn-sm" name="delmessage" value="1"> <i class="fa fa-retweet"></i> Yes </button> </div> </div> </div> </div> </form> <form class="form" id="reportform" hx-boost="false"> <input type="hidden" name="mid" id="reportmid" value="0"> <!-- Report Message Modal --> <div class="modal fade" id="reportMessageModal" tabindex="-1" role="dialog" aria-labelledby="reportMessageModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="reportMessageModalLabel"> Report Message </h4> </div> <div class="modal-body"> <label for="reason"> Reason </label> <textarea id="reason" name="reason" class="form-control" rows="5"></textarea> <div class="radio"> <label> <input type="radio" name="reportto" value="mods" checked> Report to Moderators </label> <span class="help-block"> I think this message isn't appropriate for our group. The Group moderators are responsible for maintaining their community and can address these issues. </span> <label> <input type="radio" name="reportto" value="support"> Report to CNCF Support </label> <span class="help-block"> I think this violates the Terms of Service. This includes: harm to minors, violence or threats, harassment or privacy invasion, impersonation or misrepresentation, fraud or phishing. </span> </div> <p> <center> <strong> Note: </strong> Your email address is included with the abuse report. </center> </p> </div> <div class="modal-footer"> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Cancel </button> <button class="btn btn-danger btn-sm" name="report" value="1"> <i class="fa fa-flag"></i> Report </button> </div> </div> </div> </div> </form> <script> $('#reportMessageModal').on('show.bs.modal', function(e) { var msgId = $(e.relatedTarget).data('message-id'); $('#reportmid').val(msgId); }); contentLoaded( false , function() { $('#reportform').on('submit', function(event) { event.preventDefault(); $('#reportMessageModal').modal('hide'); $.ajax({ url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/report", type: "POST", data: $(this).serialize(), success: function(html) { createAlert("Your report has been sent.", true); } }); return false; }); }); </script> <form class="form" method="POST" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/editmessage"> <input type="hidden" name="mid" id="splitmid" value="0"> <input type="hidden" name="action_type" id="action_type" value="split"> <input type="hidden" name="r" value="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/91479410"> <!-- Verify Split Modal --> <div class="modal fade" id="splitMessageModal" tabindex="-1" role="dialog" aria-labelledby="splitMessageModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="splitMessageModalLabel"> Split Topic </h4> </div> <div class="modal-body"> <p> The new topic will begin with this message. Subject of the new topic: </p> <input name="subject" class="form-control" size=20 type="text" spellcheck="true"> </div> <div class="modal-footer"> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Cancel </button> <button class="btn btn-danger btn-sm" name="delmessage" value="1"> <i class="fa fa-trash-alt"></i> Split Topic </button> </div> </div> </div> </div> </form> <p></p> <div class="row"> <div class="col-xs-12"> <div class="pull-right"> <form class="form-inline"> <div class="pull-right form-inline"> <span class="form-group"> 1 - 1 of 1 </span> <ul class="pagination form-group" style="margin: 0px !important;vertical-align:middle;"> <li class="disabled"> <a href="#"> <i class="fa fa-chevron-left"> <span class="sr-only"> previous page </span> </i> </a> </li> <li class="hidden-xs disabled"> <a class="currentpage" href="#"> 1 </a> </li> <li class="disabled"> <a href="#"> <i class="fa fa-chevron-right"> <span class="sr-only"> next page </span> </i> </a> </li> </ul> </div> </form> </div> <div class="button-link-group form-group"> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/91135990" class="btn btn-default btn-sm"> <i class="fa fa-arrow-left"></i> <span class="hidden-xs"> Previous Topic </span> </a> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/91507720" class="btn btn-default btn-sm"> <span class="hidden-xs"> Next Topic </span> <i class="fa fa-arrow-right"></i> </a> </div> </div> </div> <script> var editor; contentLoaded(false, function() { $('#deleteMessageModal').on('show.bs.modal', function(e) { var msgId = $(e.relatedTarget).data('message-id'); $('#mid').val(msgId); }); $('#splitMessageModal').on('show.bs.modal', function(e) { var msgId = $(e.relatedTarget).data('message-id'); $('#splitmid').val(msgId); }); $('#repostMessageModal').on('show.bs.modal', function(e) { var msgId = $(e.relatedTarget).data('message-id'); $('#repostmid').val(msgId); }); $('[id^=cancel]').on('click', function() { msg_num = $(this).attr('id').split("-")[1] $("#window-"+msg_num).collapse('hide') }); if (location.hash) { console.log("Setting location.hash"); location.href = location.hash; } $(".modal").on('shown.bs.modal', function () { $(this).find("input:visible:first").focus(); }); $("[data-toggle='tooltip']").tooltip(); UpdateSidebar("archives"); if (document.documentElement.clientWidth <= 992) { ShowBackButton(""); gioDestroy(function(event) { console.log("destructor called"); HideBackButton(); }); } }); </script> </div> </div> </div> </div> <div class="row hidden-print" id="mobileSidebar" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div id="mobileSidebarSub" class="col-xs-12 hidden-md hidden-lg"> <div class="navbar navbar-default navbar-fixed-bottom"> <div class="container" style="display: flex; justify-content: space-around;"> <div id="mobilesidebar-archives" class="mobilesidebar-item" style="margin-top:10px; padding-bottom:20px; flex: 1; text-align: center;" hx-get="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?sidebar=true" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="display: inline-block; position: relative;"> <div style="position: relative;display: inline-block;"> <i class="fa-fw fa-solid fa-comments fa-2x"></i> </div><br> <span style="font-size:12px;">Messages</span> </div> </div> <div style="flex: 1; text-align: center;margin-top:10px" data-drawer-trigger aria-controls="drawer-name" aria-expanded="false"> <i class="fa-fw fa-light fa-bars fa-2x"></i><br> <span style="font-size:12px;">More</span> </div> </div> </div> <section class="drawer drawer-left" id="drawer-name" data-drawer-target> <div class="drawer-overlay" data-drawer-close tabindex="-1"></div> <div class="drawer-wrapper drawer-wrapper-top"> <div class="drawer-header"> <div class="drawer-title"> <i class="fa-fw fa-regular fa-bars fa-3x"></i> <span class="sr-only"> More Options </span> More </div> <button class="drawer-close" data-drawer-close aria-label="Close Drawer"></button> </div> <div class="drawer-content"> <div class="list-group noborderlist"> <a title="Group Home" href="https://lists.cncf.io/g/cncf-tag-env-sustainability" class="list-group-item sidebar-item"> <i class="fa-fw fa fa-home fa-lg"></i> Home </a> <a title="Messages" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?sidebar=true" id="sidebar-archives-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-archives active"> <i class="fa-fw fa fa-comments fa-lg"></i> Messages <span id="sidebar-archives-mobile-badge" class="badge"></span> </a> <a title="Hashtags" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/hashtags" id="sidebar-hashtags-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-hashtags"> <i class="fa-fw fa fa-hashtag fa-lg"></i> Hashtags <span id="sidebar-hashtags-mobile-badge" class="badge"></span> </a> <a title="Subgroups" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/subgroups" id="sidebar-subgroups-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-subgroups"> <i class="fa-fw fa fa-chart-pie fa-lg"></i> Subgroups <span id="sidebar-subgroups-mobile-badge" class="badge"></span> </a> <a class="noborderitem list-group-item sidebar-item" href="https://groups.io/static/tos" target="_blank"> <i class="fa-fw fal fa-newspaper fa-lg"></i> Terms </a> </div> </div> </div> </section> </div> </div> <!-- Modal Dialog for Autocomplete --> <div class="modal fade" id="quickActionsModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <input type="text" class="form-control" id="quickActionsInput" placeholder="Go to page..." style="margin-bottom:10px"> <div id="quickActionsContainer" class="autocompleteResults" style="max-height:250px; overflow-y: auto;"></div> <div class="text-center" style="margin-top:10px; font-size:12px;"><i class="fa-sharp fa-arrow-up-arrow-down"></i> to navigate <i class="fa-sharp fa-arrow-turn-down-left"></i> to use <strong>esc</strong> to dismiss</div> </div> </div> </div> </div> <script> var quickActionsData = [ {name: "Group Home", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability"}, {name: "Topics", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/topics"}, {name: "Messages", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/messages"}, {name: "Expanded Messages", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/messages?expanded=1"}, {name: "Polls", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/polls"}, {name: "Hashtags", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/hashtags"}, {name: "Subgroups", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/subgroups"}, /* other pages */ {name: "Help", url: "/helpcenter"}, {name: "Feed", url: "/feed"}, {name: "Your Groups", url: "/groups"}, {name: "Your Calendar", url: "/calendar"}, {name: "Your Activity", url: "/activity"}, {name: "Your Pending Messages", url: "/pendingmsgs"}, {name: "Account Login", url: "/account"}, {name: "Account Preferences", url: "/account?page=prefs"}, {name: "Account Security", url: "/account?page=security"}, {name: "Account Identity", url: "/account?page=profile&member_info_id=0"}, {name: "Account Notifications", url: "/account?page=notifications"}, {name: "Account Other Services", url: "/account?page=oauth"}, {name: "Account Bounces", url: "/account?page=bounces"}, {name: "Account Billing", url: "/account?page=billing"}, {name: "Find a Group", url: "/search?p=SubsCount,,,20,2,0,0"}, ]; InitAutocomplete("quickActions", quickActionsData); document.addEventListener('keydown', function(event) { var tagName = event.target.tagName.toLowerCase(); if (tagName === 'input' || tagName === 'textarea' || event.target.isContentEditable) { return; } // check if the viewimages viewer is up let element = document.getElementById('overlay'); if (element && element.classList.contains('visible')) { return; } if (event.key.toLowerCase() === '/') { if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { // For Mac // Check if Command (event.metaKey) is pressed, and either Option (event.altKey) is pressed or not if (event.metaKey) { event.preventDefault(); showAutocompleteModal("quickActions"); return; } } else { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); showAutocompleteModal("quickActions"); return; } } } }); function UpdateSidebar(id) { console.log(id + " was clicked"); var sidebarItems = document.querySelectorAll('.mobilesidebar-item'); sidebarItems.forEach(function(item) { var iElement = item.getElementsByTagName('div')[0].getElementsByTagName('i')[0]; if (item.id == "mobilesidebar-" + id) { console.log("making solid " + id) iElement.classList.add('fa-solid'); iElement.classList.remove('fa-light'); } else { iElement.classList.remove('fa-solid'); iElement.classList.add('fa-light'); } }); var sidebarItems = document.querySelectorAll('.sidebar-item'); // remove 'active' class from all 'sidebar-item' elements sidebarItems.forEach(function(item) { if (item.id == "sidebar-" + id) { console.log("making active " + id) item.classList.add('active'); } else { item.classList.remove('active'); } }); } </script> </div> <div id="scroll-top-outer"> <div id="scroll-top" class="scroll-top-wrapper hidden-xs"> <span class="scroll-top-inner"> <i class="fa fa-arrow-circle-up fa-fw fa-2x"></i> </span> </div> </div> <script> $(function() { $(document).on('scroll', function() { if ($(window).scrollTop() > 100) { $('.scroll-top-wrapper').addClass('show'); } else { $('.scroll-top-wrapper').removeClass('show'); } }); $('.scroll-top-wrapper').on('click', scrollToTop); }); function scrollToTop() { verticalOffset = typeof(verticalOffset) != 'undefined' ? verticalOffset : 0; element = $('body'); offset = element.offset(); offsetTop = offset.top; $('html, body').animate({ scrollTop: offsetTop }, 100, 'linear'); } if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { let elements = document.querySelectorAll('strong.ctrlmeta'); elements.forEach((element) => { // Check if the innerText is "ctrl" if (element.innerText === 'ctrl') { // Create a new "i" element let newElement = document.createElement('i'); newElement.classList.add('fa-solid', 'fa-command'); // Replace the old "strong" element with the new "i" element element.parentNode.replaceChild(newElement, element); } }); } </script> </body> </html>