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&nbsp;&nbsp;&nbsp;<i class="fa-sharp fa-arrow-turn-down-left"></i> to use&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;:</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>&nbsp;&nbsp;:</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>&nbsp;&nbsp;:</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>&nbsp;&nbsp;:</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> &middot; <a href="https://groups.io/static/features"> Features </a> &middot; <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> &middot; <a href="https://groups.io/static/tos"> Terms </a> &middot; <a href="https://groups.io/helpcenter" target="_blank"> Help </a> </div> <div style="padding-bottom:5px;"> &copy; 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"> &times; </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"> &times; </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"> &times; </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"> &times; </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> &nbsp;&nbsp; </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> &nbsp; <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> &nbsp; <a rel="nofollow" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/message/17"> <span class="hidden-xs"> #17&nbsp;&nbsp; </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 &#34;day job&#34; 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&#39;m also passionate about sustainability and stewardship generally. I&#39;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">&times;</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"> &times; </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"> &times; </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"> &times; </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&#39;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"> &times; </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> &nbsp; <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&nbsp;&nbsp;&nbsp;<i class="fa-sharp fa-arrow-turn-down-left"></i> to use&nbsp;&nbsp;&nbsp;<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>

Pages: 1 2 3 4 5 6 7 8 9 10