CINXE.COM
HELP WANTED | Finding friendly meeting time for Asia & India Time Zones
<!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.web09.1631745.1740478211846773497"); 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.web09.1631745.1740478211846773497" }, 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-ddb8b9131d6cc3df6479ea15af05e501.css" rel="stylesheet" id="groupsio-css"> <script src="/js/application-9b2c27b802a13063cf8a712fe566f004.js" id="groupsio-js"></script> <script src="/js/run_prettify.js"></script> <title>HELP WANTED | Finding friendly meeting time for Asia &amp; India Time Zones</title> <link rel="canonical" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/help_wanted_finding/104124280"> <meta property="og:title" content="HELP WANTED | Finding friendly meeting time for Asia & India Time Zones" /> <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": "57e190f165098182b3664311c44a7ad185e99634"}' 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;"> © 2025 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> <script> var editor; contentLoaded(false, function() { }); </script> <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/messages?msgnum=157"><i class="fa fa-comments"></i> Messages</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=",,,20,0,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="row"> <div class="col-xs-12 col-sm-5 col-md-5" style="padding-right:0px;"> <form class="form-inline" method="get" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages"> <div class="form-group button-link-group"> <div class="btn-group" style="display:inline-block"> <button id="wide-messages" type="button" class="dropdown-wide btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-comment"></i> Single <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> <li> <a title="Messages" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages?msgnum=157"> <i class="fa fa-comments"></i> Messages </a> </li> <li> <a title="Topics" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?threadid=104124280"> <i class="fa fa-inbox"></i> Topics </a> </li> <li> <a title="Expanded" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages?expanded=1&msgnum=157"> <i class="fa fa-comments"></i> Expanded </a> </li> <li> <a title="Polls" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/polls"> <i class="fa fa-chart-bar"></i> Polls </a> </li> </ul> </div> <div class="btn-group"> <a id="narrow-messages" href="javascript:void(0)" class="dropdown-narrow btn btn-sm btn-default " style="margin-left:-4px;" data-drawer-trigger aria-controls="messages-drawer" aria-expanded="false"> <i class="fa fa-comment"></i> Single <span class="caret"></span> </a> </div> <section class="drawer drawer-bottom" id="messages-drawer" data-drawer-target> <div class="drawer-overlay" data-drawer-close tabindex="-1"></div> <div class="drawer-wrapper"> <div class="drawer-content"> <div class="list-group"> <a href="#" class="list-group-item disabled" title="Single"> <i class="fa fa-comment"></i> Single </a> <a class="list-group-item" title="Messages" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages?msgnum=157"> <i class="fa fa-comments"></i> Messages </a> <a class="list-group-item" title="Topics" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?threadid=104124280"> <i class="fa fa-inbox"></i> Topics </a> <a class="list-group-item" title="Expanded" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages?expanded=1&msgnum=157"> <i class="fa fa-comments"></i> Expanded </a> <a class="list-group-item" title="Polls" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/polls"> <i class="fa fa-chart-bar"></i> Polls </a> </div> </div> </div> </section> <script> function modalmessages(target) { drawer = document.getElementById('messages-drawer'); if (drawer != null) { drawerObj.closeDrawer(drawer); } $(target).modal('show'); } </script> </div> </form> </div> <div class="hidden-xs col-sm-7 col-md-7 narrow-padding"> <form class="form-inline" method="get" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages"> <div class="pull-right hidden-xs"> <div class="form-group hidden-xs"> <input type="text" class="form-control" style="display:inline; height:35px;" size="8" placeholder="Msg #" title="Msg #" name="msgnum" value=""> </div> <ul class="pagination form-group" style="margin:0"> <li> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/message/156"> <i class="fa fa-chevron-left"> <span class="sr-only"> previous page </span> </i> </a> </li> <li class="disabled"> <a href="javascript:void(0)"> #157 </a> </li> <li> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/message/158"> <i class="fa fa-chevron-right"> <span class="sr-only"> next page </span> </i> </a> </li> </ul> </div> </form> </div> </div> <div> <h4> HELP WANTED | Finding friendly meeting time for Asia & India Time Zones </h4> </div> <table class="table table-condensed table-striped table-fixed"> <tbody> <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="msg157" id="msg157"></a> <div class="row"> <div class="col-md-12"> <div class="pull-left"> <div class="dropdown"> <a class="dropdown-toggle" href="#" role="button" id="dropdownMenu233634830" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <img src="https://s3-us-west-1.amazonaws.com/groupsiotestprofilephotos/profilephoto.6669220?AWSAccessKeyId=AKIAJECNKOVMCCU3ATNQ&Expires=1740478271&Signature=Tba9RNE%2B9yQGSCTELR95Zzbp8qQ%3D" class="img-rounded" width="40" height="40"> <u>Cara Delia</u> <span class="caret"></span> </a> <ul class="dropdown-menu" aria-labelledby="dropdownMenu233634830"> <li> <a rel="nofollow" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/search?q=posterid:6669220"> <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="timedispmsg233634830"> $('#timedispmsg233634830').replaceWith(DisplayShortTime(1706896094162640556, false )); </script> </font> <a rel="nofollow" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/message/157"> <span class="hidden-xs"> #157 </span> <i class="fa fa-link fa-lg"></i> </a> </div> </div> </div> <br /> <div id="msgbody233634830" class="user-content"> <div class="forcebreak" dir="auto"><p dir="ltr" style="line-height: 1.2"><span style="color: #3c4043; font-family: sans-serif">Hello,<br/><br/>The TAG leads are trying to find time that works for the Asia and India time zones to be included in the Env Sustainability TAG. This will be the first meeting and we can decide as a group the best cadence moving forward. We understand that the times in the poll are during Lunar New Year. If you could still pick a day(s) and time(s) that work for your schedule and we can adjust the actual dates.<br/><br/>Note: the current Europe/NA TAG meeting will remain the same. This is an additional meeting that is time zone adjacent to Asia and India.</span></p> <p dir="ltr" style="line-height: 1.2"><span style="font-family: sans-serif; color: #3c4043; vertical-align: baseline"><br/>Please fill out this POLL <a href="https://doodle.com/meeting/participate/id/e0Aoymya" target="_blank" rel="nofollow noopener">https://doodle.com/meeting/participate/id/e0Aoymya</a><br/><br/>Thank you so much,<br/><br/>Cara Delia<br/>TAG Technical Lead | WG Comms Co-chair</span></p> <p dir="ltr" style="line-height: 1.2">聽</p> <span id="docs-internal-guid-434816a4-7fff-c9dd-2cdd-fe8b0fe2032c"><br/><br/></span></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="likestats233634830"></div> </div> </div> </div> </div> <script> contentLoaded(false, function() { displayLikeStats("/g/cncf-tag-env-sustainability", 0, 233634830, false) }); function replyToChange233634830(element) { var value = element.value; if (value == "1") { subj = $('#subject233634830').val(); $('#subject233634830').val('Private: ' + subj); $('#bccme233634830').show(); } else if (value == "2") { subj = $('#subject233634830').val(); $('#subject233634830').val(subj.replace('Private: ', '')); $('#bccme233634830').show(); } else { subj = $('#subject233634830').val(); $('#subject233634830').val(subj.replace('Private: ', '')); $('#bccme233634830').hide(); } if (tinyMCE.get('editor233634830') != null) { tinyMCE.get('editor233634830').focus(); } } function setFocus233634830() { tinyMCE.activeEditor.focus(); } </script> </td> </tr> </tbody> </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() { const player = this; const video = this.tech().el(); console.log("In loadedmetadata"); // Function to handle rotation const rotateVideo = (degrees) => { console.log(`Rotating video by ${degrees} degrees`); // Clear any existing transforms first video.style.transform = ''; if (degrees !== 0) { video.style.transform = `rotate(${degrees}deg)`; const posterEl = player.el().querySelector('.vjs-poster'); if (posterEl) { console.log("rotating poster"); posterEl.style.transform = `rotate(${degrees}deg)`; } } }; // Check video dimensions and any existing transform const videoRatio = video.videoWidth / video.videoHeight; const currentTransform = video.style.transform || ''; console.log("Video dimensions:", video.videoWidth, "x", video.videoHeight); console.log("Video ratio:", videoRatio); console.log("Current transform:", currentTransform); // Try to detect rotation metadata from video element let hasMetadataRotation = false; try { if (video.videoTracks && video.videoTracks[0]) { hasMetadataRotation = !!video.videoTracks[0].rotation; console.log("Has metadata rotation:", hasMetadataRotation); } } catch (e) { console.log("Error checking video tracks:", e); } // Function to check if video needs rotation const needsRotation = () => { if (videoRatio < 1) { // Portrait video // If it has an existing rotation transform, it's probably HEVC if (currentTransform.includes('rotate')) { console.log("Video has existing rotation transform"); return false; } // If it has rotation metadata, browser might handle it if (hasMetadataRotation) { console.log("Video has rotation metadata"); return false; } // Let's play a frame and check the actual rendered size const videoEl = player.el().querySelector('video'); const renderedRatio = videoEl.offsetWidth / videoEl.offsetHeight; console.log("Rendered ratio:", renderedRatio); // If rendered ratio is significantly different from video ratio, // browser might be handling rotation if (Math.abs(renderedRatio - videoRatio) < 0.1) { console.log("Video needs rotation based on rendered dimensions"); return true; } } return false; }; // Check if rotation is needed if (needsRotation()) { console.log("Applying rotation"); rotateVideo(180); } else { console.log("No rotation needed"); } // Add rotation toggle button for manual override const Button = videojs.getComponent('Button'); class RotateButton extends Button { constructor(player, options) { super(player, options); this.el().innerHTML = '<span class="sr-only">Rotate</span><i class="fas fa-sync"></i>'; this.currentRotation = needsRotation() ? 180 : 0; } handleClick() { this.currentRotation = (this.currentRotation + 180) % 360; rotateVideo(this.currentRotation); } } // Register and add the rotate button videojs.registerComponent('RotateButton', RotateButton); player.getChild('controlBar').addChild('RotateButton', {}, player.controlBar.children().length - 1); }); }); 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> <div class="pull-right"> <ul class="pagination"> <li> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/message/156"> <i class="fa fa-chevron-left"> <span class="sr-only"> previous page </span> </i> </a> </li> <li class="disabled"> <a href="javascript:void(0)"> #157 </a> </li> <li> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/message/158"> <i class="fa fa-chevron-right"> <span class="sr-only"> next page </span> </i> </a> </li> </ul> </div> <div class="row"> <div class="col-sm-offset-1 col-sm-10"> <div class="alert alert-success"> <center> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/join">Join</a> cncf-tag-env-sustainability@lists.cncf.io to automatically receive all group messages. </center> </div> </div> </div> <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="mid" value="0"> <input type="hidden" name="action_type" value="delete"> <input type="hidden" name="r" value="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages"> <!-- 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> <script> contentLoaded(false, function() { $('#deleteMessageModal').on('show.bs.modal', function(e) { var msgId = $(e.relatedTarget).data('message-id'); $('#mid').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') }); $(".modal").on('shown.bs.modal', function () { $(this).find("input:visible:first").focus(); }); $("[data-toggle='tooltip']").tooltip(); setPullToRefresh(); 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>