CINXE.COM
Keep all your favorite posts in one place | Ars OpenForum
<!DOCTYPE html> <meta name="apple-mobile-web-app-title" content="Ars OpenForum"> <link rel="apple-touch-icon" href="https://cdn.arstechnica.net/civis/styles/ars/ars/ars-icon.png"> <html id="XF" lang="en-US" dir="LTR" style="font-size: 62.5%;" data-app="public" data-template="adguest_guest_prompt" data-container-key="" data-content-key="" data-logged-in="false" data-cookie-prefix="xf_" data-csrf="1732822498,0678c3b4c544b35c5e4b88f3afbe3641" class="has-no-js template-adguest_guest_prompt uix_page--fixed uix_responsiveStaffBar " > <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> <title> Keep all your favorite posts in one place | Ars OpenForum</title> <link rel="manifest" href="/civis/webmanifest.php"> <meta name="theme-color" content="#030303" /> <meta name="msapplication-TileColor" content="#030303"> <meta name="apple-mobile-web-app-title" content="Ars OpenForum"> <link rel="apple-touch-icon" href="https://cdn.arstechnica.net/civis/styles/ars/ars/ars-icon.png"> <meta property="og:site_name" content="Ars OpenForum" /> <meta property="og:type" content="website" /> <meta property="og:title" content=" Keep all your favorite posts in one place " /> <meta property="twitter:title" content="Keep all your favorite posts in one place" /> <meta property="og:url" content="https://arstechnica.com/civis/posts/43324925/bookmark" /> <noscript> <link rel="stylesheet" href="https://cdn.arstechnica.net/civis/css.php?css=public%3Anormalize.css%2Cpublic%3Afa.css%2Cpublic%3Acore.less%2Cpublic%3Aapp.less%2Cpublic%3Aac_app.less%2Cpublic%3Aars_xf.less%2Cpublic%3Amessage.less%2Cpublic%3Astructured_list.less&s=3&l=1&d=1732214650&k=691c51242785ede740645a06d0669dc257eac45b" /> </noscript> <link rel="preload" href="https://cdn.arstechnica.net/civis/styles/ars/fonts/icons/material-icons/fonts/materialdesignicons-webfont.woff2?v=5.8.55" as="font" type="font/woff2" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdn.arstechnica.net/civis/styles/ars/fonts/icons/material-icons/css/materialdesignicons.min.css?d=1732214650" /> <noscript> <link rel="stylesheet" href="https://cdn.arstechnica.net/civis/css.php?css=public%3Aac_app.less%2Cpublic%3Aadguest_overlay.less%2Cpublic%3Aars_xf.less%2Cpublic%3Aaud_wpconnect.less%2Cpublic%3Athstyleswitch.less%2Cpublic%3Auix.less%2Cpublic%3Auix_socialMedia.less%2Cpublic%3Aextra.less&s=3&l=1&d=1732214650&k=d6a2c8301f06a03074171b8d3e03767fcd791d1e" /> </noscript> <script>window.thstyleswitchConfig = {"autodetectEnabled":true,"lightStyle":{"id":3,"type":"light","cssUrl":"https:\/\/cdn.arstechnica.net\/civis\/css.php?css=__SENTINEL__&s=3&l=1&d=1732214650","primaryCss":["public:normalize.css","public:core.less","public:app.less"],"primaryCssUrl":"https:\/\/cdn.arstechnica.net\/civis\/css.php?css=public%3Anormalize.css%2Cpublic%3Acore.less%2Cpublic%3Aapp.less%2Cpublic%3Afa.css%2Cpublic%3Aac_app.less%2Cpublic%3Aars_xf.less%2Cpublic%3Amessage.less%2Cpublic%3Astructured_list.less&s=3&l=1&d=1732214650&k=047e4a656706678318c16969b2a96b75c8fa2c02","additionalCss":["public:ac_app.less","public:adguest_overlay.less","public:ars_xf.less","public:aud_wpconnect.less","public:thstyleswitch.less","public:uix.less","public:uix_socialMedia.less","public:extra.less","public:fa.css","public:message.less","public:structured_list.less"],"additionalCssUrl":"https://cdn.arstechnica.net/civis/css.php?css=public%3Aac_app.less%2Cpublic%3Aadguest_overlay.less%2Cpublic%3Aars_xf.less%2Cpublic%3Aaud_wpconnect.less%2Cpublic%3Athstyleswitch.less%2Cpublic%3Auix.less%2Cpublic%3Auix_socialMedia.less%2Cpublic%3Aextra.less%2Cpublic%3Afa.css%2Cpublic%3Amessage.less%2Cpublic%3Astructured_list.less&s=3&l=1&d=1732214650&k=33d8caf81a08edf9a009ee95d78e885d8e6a5b9a","switchStyleUrl":"\/civis\/misc\/thstyleswitch?style_id=6"},"darkStyle":{"id":5,"type":"dark","cssUrl":"https:\/\/cdn.arstechnica.net\/civis\/css.php?css=__SENTINEL__&s=5&l=1&d=1732214650","primaryCss":["public:normalize.css","public:core.less","public:app.less"],"primaryCssUrl":"https:\/\/cdn.arstechnica.net\/civis\/css.php?css=public%3Anormalize.css%2Cpublic%3Acore.less%2Cpublic%3Aapp.less%2Cpublic%3Afa.css%2Cpublic%3Aac_app.less%2Cpublic%3Aars_xf.less%2Cpublic%3Amessage.less%2Cpublic%3Astructured_list.less&s=5&l=1&d=1732214650&k=047e4a656706678318c16969b2a96b75c8fa2c02","additionalCss":["public:ac_app.less","public:adguest_overlay.less","public:ars_xf.less","public:aud_wpconnect.less","public:thstyleswitch.less","public:uix.less","public:uix_socialMedia.less","public:extra.less","public:fa.css","public:message.less","public:structured_list.less"],"additionalCssUrl":"https://cdn.arstechnica.net/civis/css.php?css=public%3Aac_app.less%2Cpublic%3Aadguest_overlay.less%2Cpublic%3Aars_xf.less%2Cpublic%3Aaud_wpconnect.less%2Cpublic%3Athstyleswitch.less%2Cpublic%3Auix.less%2Cpublic%3Auix_socialMedia.less%2Cpublic%3Aextra.less%2Cpublic%3Afa.css%2Cpublic%3Amessage.less%2Cpublic%3Astructured_list.less&s=5&l=1&d=1732214650&k=33d8caf81a08edf9a009ee95d78e885d8e6a5b9a","switchStyleUrl":"\/civis\/misc\/thstyleswitch?style_id=5"},"currentStyleType":"light","originalCss":{"public:ac_app.less":true,"public:adguest_overlay.less":true,"public:ars_xf.less":true,"public:aud_wpconnect.less":true,"public:thstyleswitch.less":true,"public:uix.less":true,"public:uix_socialMedia.less":true,"public:extra.less":true}};</script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/styleswitch/preamble.js?_v=0bff0aba"></script> <script> themehouse.styleSwitch.initAutodetect(); </script> <script src="https://cdn.arstechnica.net/civis/js/xf/preamble.min.js?_v=0bff0aba"></script> <meta name="apple-mobile-web-app-capable" content="yes"> <!-- Parse.ly start --> <script id="parsely-cfg" type="text/plain" class="optanon-category-C0002" src="//cdn.parsely.com/keys/forum.arstechnica.com/p.js"></script> <!-- Parse.ly end --> <!-- OneTrust Cookies Consent Notice start --> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="b10882a1-8446-4e7d-bfb2-ce2c770ad910"> </script> <script type="text/javascript">function OptanonWrapper(){};</script> <script src="https://cdn.cookielaw.org/opt-out/otCCPAiab.js" type="text/javascript" charset="UTF-8" ccpa-opt-out-ids="C0001,C0002,C0003,C0004,C0005" ccpa-opt-out-geo="ca" ccpa-opt-out-lspa="true"> </script> <!-- OneTrust Cookies Consent Notice end --> <script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({"event":"data-layer-loaded","user":{"ars_userId":"9d83fb1dfc00795056b0c0b7cf82f8a7","amg_userId":undefined,"uID":undefined,"sID":undefined,"loginStatus":true,"subscriberStatus":"inactive","infinityId":"","accessPaywall":undefined,"registrationSource":undefined,"mdw_cnd_id":undefined,"monthlyVisits":undefined,"view":undefined,"theme":undefined,"show_comments":undefined},"content":{"pageTemplate":"XF\\Pub\\Controller\\Post:bookmark","pageType":"XF\\Pub\\Controller\\Post:bookmark","contentCategory":undefined,"section":"","subsection":undefined,"contributor":undefined,"contentID":undefined,"contentLength":undefined,"display":"","contentSource":"web","pageAssets":undefined,"uniqueContentCount":undefined,"monthlyContentCount":undefined,"publishDate":undefined,"modifiedDate":undefined,"keywords":undefined,"dataSource":undefined},"marketing":{"campaignName":undefined,"circCampaignId":undefined,"internalCampaignId":undefined,"brand":"Ars Technica","certified_mrc_data":undefined,"condeNastId":undefined},"page":{"pID":"","syndicatorUrl":undefined,"pageURL":"https:\/\/arstechnica.com\/civis\/index.php\/posts\/43324925\/bookmark","canonical":"https:\/\/arstechnica.com\/civis\/index.php\/posts\/43324925\/bookmark","canonicalPathName":"\/civis\/index.php\/posts\/43324925\/bookmark"},"search":{"facets":undefined,"searchTerms":undefined},"site":{"appVersion":"1.0.0"}}); </script> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-NLXNPCQ');</script> <script src="https://www.googletagservices.com/tag/js/gpt.js" id="gpt-script" async ></script> <script>window.googletag=window.googletag||{};window.googletag.cmd=window.googletag.cmd||[];window.cns=window.cns||{};window.cns.queue=[];window.cns.async=function(s,c){cns.queue.push({service:s,callback:c})};</script> <script> window.cns.pageContext = { "contentType": "bundle", "templateType": "forums", "channel": "forums", "subChannel": null, "slug": "forums", "server": "production", "keywords": { "tags": ["forums", "comments"], "cm": [], "platform": ["xenforo"], "copilotid": null } }; </script> <script type="text/javascript"> (function() { var ars = {}; ars.ads = {}; ars.ads.suppressed = false; /** * slotRenderEnded Callback to enable ad slot resizing. */ ars.ads.slotRenderEnded = function () { window.googletag.pubads().addEventListener('slotRenderEnded', ars.ads.sizing); }; /** * ads.pages.create.onSlotRender callback * sets the min-height style on an ars ad wrapper to ensure the height is never lost if there are issues with susequent ad loads. */ ars.ads.sizing = function(event) { var cnsAdStage = document.getElementById(event.slot.getSlotElementId()).parentElement || undefined; var arsAdContainer = cnsAdStage.parentElement || undefined; // grab initial height just before render. var arsAdContainerInitialHeight = (arsAdContainer !== undefined) ? arsAdContainer.offsetHeight : 0; // offsetHeight includes content, padding, and borders. (like box-sizing: border-box). // ignore any empty ad containers if(cnsAdStage.classList.contains('cns-ads-slot-state-empty') || event.isEmpty) return false; // only apply to arsAdContainer with the .ad class if(arsAdContainer === undefined || !arsAdContainer.classList.contains('ad')) return false; // only apply one time. once an original min-height is set. it's set. if(arsAdContainer.hasAttribute('data-ad-height')) return false; // give it just a second to ensure it has rendered completely before calculating the height. setTimeout(function() { var adHeight = cnsAdStage.offsetHeight + parseInt(window.getComputedStyle(cnsAdStage).getPropertyValue('margin-top')) + // include the top/bottom margins from the ad iteslf parseInt(window.getComputedStyle(cnsAdStage).getPropertyValue('margin-bottom')) + parseInt(window.getComputedStyle(arsAdContainer).getPropertyValue('padding-top')) + // include the top/bottom padding from the arsAdContainer parseInt(window.getComputedStyle(arsAdContainer).getPropertyValue('padding-bottom')) + parseInt(window.getComputedStyle(arsAdContainer).getPropertyValue('border-top-width')) + // include the top/bottom border width from the arsAdContainer parseInt(window.getComputedStyle(arsAdContainer).getPropertyValue('border-bottom-width')); // protect one last time against empties. if(adHeight <= 0) return false; // apply whichever height is greater the initial ad slot height or the incoming ad height arsAdContainer.setAttribute('data-ad-height', (arsAdContainerInitialHeight >= adHeight) ? arsAdContainerInitialHeight : adHeight); arsAdContainer.style.minHeight = ((arsAdContainerInitialHeight >= adHeight) ? arsAdContainerInitialHeight : adHeight) + "px"; }, 350); }; /** * enable the Ars Static Ad container size on slotRenderEnded */ (function adsStaticHeight() { window.googletag = window.googletag || {}; window.googletag.cmd = window.googletag.cmd || []; window.googletag.cmd.push(ars.ads.slotRenderEnded); }()); }()); </script> <script src="https://ads-static.conde.digital/production/cns/builds/ars-technica/ars-technica.min.js" async></script> <link rel="icon" type="image/png" href="https://cdn.arstechnica.net/civis/styles/ars/ars/ars-icon.png" sizes="32x32" /> <script type="text/javascript">!(function(o,_name){function n(){(n.q=n.q||[]).push(arguments)}n.v=1,o[_name]=o[_name]||n;!(function(o,t,n,c){function e(n){(function(){try{return(localStorage.getItem("v4ac1eiZr0")||"").split(",")[4]>0}catch(o){}return!1})()&&(n=o[t].pubads())&&n.setTargeting("admiral-engaged","true")}(c=o[t]=o[t]||{}).cmd=c.cmd||[],typeof c.pubads===n?e():typeof c.cmd.unshift===n?c.cmd.unshift(e):c.cmd.push(e)})(window,"googletag","function");})(window,String.fromCharCode(97,100,109,105,114,97,108));!(function(t,c,i){i=t.createElement(c),t=t.getElementsByTagName(c)[0],i.async=1,i.src="https://shiverscissors.com/v2fumwIJOo-LsCB0dlG18VSTW43CpWhUEPJuKeRTzrEQdSPPlMr5GymU",t.parentNode.insertBefore(i,t)})(document,"script");</script> <script class="js-klEditorTemplates" type="application/json"> [] </script> </head> <body data-template="adguest_guest_prompt"> <style> .p-pageWrapper .p-navSticky { top: 40px !important; } @media (max-width: 900px) { .p-pageWrapper .p-navSticky { top: 0 !important; } } .uix_mainTabBar {top: 140px !important;} .uix_stickyBodyElement:not(.offCanvasMenu) { top: 155px !important; min-height: calc(100vh - 155px) !important; } .uix_sidebarInner .uix_sidebar--scroller {margin-top: 155px;} .uix_sidebarInner {margin-top: -155px;} .p-body-sideNavInner .uix_sidebar--scroller {margin-top: 155px;} .p-body-sideNavInner {margin-top: -155px;} .uix_stickyCategoryStrips {top: 155px !important;} #XF .u-anchorTarget { height: 155px; margin-top: -155px; } @media(max-width: 900px) { .uix_mainTabBar {top: 100px !important;} .uix_stickyBodyElement:not(.offCanvasMenu) { top: 115px !important; min-height: calc(100vh - 115px) !important; } .uix_sidebarInner .uix_sidebar--scroller {margin-top: 115px;} .uix_sidebarInner {margin-top: -115px;} .p-body-sideNavInner .uix_sidebar--scroller {margin-top: 115px;} .p-body-sideNavInner {margin-top: -115px;} .uix_stickyCategoryStrips {top: 115px !important;} #XF .u-anchorTarget { height: 115px; margin-top: -115px; } } @media (max-width: $uix_sidebarBreakpoint) { .p-sectionLinks {display: none;} .uix_mainTabBar {top: 100px !important;} .uix_stickyBodyElement:not(.offCanvasMenu) { top: 115px !important; min-height: calc(100vh - 115px) !important; } .uix_sidebarInner .uix_sidebar--scroller {margin-top: 115px;} .uix_sidebarInner {margin-top: -115px;} .p-body-sideNavInner .uix_sidebar--scroller {margin-top: 115px;} .p-body-sideNavInner {margin-top: -115px;} .uix_stickyCategoryStrips {top: 115px !important;} #XF .u-anchorTarget { height: 115px; margin-top: -115px; } @media(max-width: 900px) { .uix_mainTabBar {top: 60px !important;} .uix_stickyBodyElement:not(.offCanvasMenu) { top: 75px !important; min-height: calc(100vh - 75px) !important; } .uix_sidebarInner .uix_sidebar--scroller {margin-top: 75px;} .uix_sidebarInner {margin-top: -75px;} .p-body-sideNavInner .uix_sidebar--scroller {margin-top: 75px;} .p-body-sideNavInner {margin-top: -75px;} .uix_stickyCategoryStrips {top: 75px !important;} #XF .u-anchorTarget { height: 75px; margin-top: -75px; } } } .uix_sidebarNav .uix_sidebar--scroller {max-height: calc(100vh - 75px);} </style> <div id="jumpToTop"></div> <div class="uix_pageWrapper--fixed"> <div class="p-pageWrapper" id="top"> <div class="p-staffBar " data-xf-init="sticky-header"> <div class="pageContent"> <div class="p-nav-opposite"> <div class="p-navgroup p-account p-navgroup--guest"> <a href="/civis/login/" class="p-navgroup-link u-ripple p-navgroup-link--textual p-navgroup-link--logIn" data-follow-redirects="on"> <i></i> <span class="p-navgroup-linkText">Log in</span> </a> <a href="/civis/register/" class="button button--cta p-navgroup-link u-ripple p-navgroup-link--textual p-navgroup-link--register" data-follow-redirects="on"> <i></i> <span class="p-navgroup-linkText">Register</span> </a> </div> </div> </div> </div> <header class="p-header" id="header"> <div class="p-header-inner"> <div class="p-header-content"> <div class="p-header-logo p-header-logo--image"> <a class="uix_logo" href="/civis/"> <img src="https://cdn.arstechnica.net/civis/styles/ars/ars/ars-open-forum.svg" srcset="" alt="Ars OpenForum" width="" height="" /> </a> </div> <div class="p-nav-opposite"> <div class="p-navgroup p-discovery"> <a href="/civis/forums/-/-/th-nnm-navigate" class="p-navgroup-link p-navgroup-link--thNnnNavigate" data-xf-click="overlay" aria-label="Browse all forums"> <i class="fa--xf far fa-sitemap" aria-hidden="true"></i> </a> <div class="uix_searchBar"> <div class="uix_searchBarInner"> <form action="/civis/search/search" method="post" class="uix_searchForm" data-xf-init="quick-search"> <a class="uix_search--close"> <i class="fa--xf far fa-window-close" aria-hidden="true"></i> </a> <input type="text" class="input js-uix_syncValue uix_searchInput uix_searchDropdown__trigger" autocomplete="off" data-uixsync="search" name="keywords" placeholder="Search…" aria-label="Search" data-menu-autofocus="true" /> <a href="/civis/search/" class="uix_search--settings u-ripple" data-xf-key="/" aria-label="Search" aria-expanded="false" aria-haspopup="true" title="Search"> <i class="fa--xf far fa-cog" aria-hidden="true"></i> </a> <span class=" uix_searchIcon"> <i class="fa--xf far fa-search" aria-hidden="true"></i> </span> <input type="hidden" name="_xfToken" value="1732822498,0678c3b4c544b35c5e4b88f3afbe3641" /> </form> </div> <a class="uix_searchIconTrigger p-navgroup-link p-navgroup-link--iconic p-navgroup-link--search u-ripple" aria-label="Search" aria-expanded="false" aria-haspopup="true" title="Search"> <i aria-hidden="true"></i> </a> <a href="/civis/search/" class="p-navgroup-link p-navgroup-link--iconic p-navgroup-link--search u-ripple js-uix_minimalSearch__target" data-xf-click="menu" aria-label="Search" aria-expanded="false" aria-haspopup="true" title="Search"> <i aria-hidden="true"></i> </a> <div class="menu menu--structural menu--wide" data-menu="menu" aria-hidden="true"> <form action="/civis/search/search" method="post" class="menu-content" data-xf-init="quick-search"> <h3 class="menu-header">Search</h3> <div class="menu-row"> <input type="text" class="input js-uix_syncValue" name="keywords" data-uixsync="search" placeholder="Search…" aria-label="Search" data-menu-autofocus="true" /> </div> <div class="menu-row"> <label class="iconic"><input type="checkbox" name="c[title_only]" value="1" /><i aria-hidden="true"></i><span class="iconic-label">Search titles only <span tabindex="0" role="button" data-xf-init="tooltip" data-trigger="hover focus click" title="Tags will also be searched"> <i class="fa--xf far fa-question-circle u-muted u-smaller" aria-hidden="true"></i> </span></span></label> </div> <div class="menu-row"> <div class="inputGroup"> <span class="inputGroup-text" id="ctrl_search_menu_by_member">By:</span> <input type="text" class="input" name="c[users]" data-xf-init="auto-complete" placeholder="Member" aria-labelledby="ctrl_search_menu_by_member" /> </div> </div> <div class="menu-footer"> <span class="menu-footer-controls"> <button type="submit" class="button--primary button button--icon button--icon--search"><span class="button-text">Search</span></button> <a href="/civis/search/" class="button"><span class="button-text">Advanced search…</span></a> </span> </div> <input type="hidden" name="_xfToken" value="1732822498,0678c3b4c544b35c5e4b88f3afbe3641" /> </form> </div> <div class="menu menu--structural menu--wide uix_searchDropdown__menu" aria-hidden="true"> <form action="/civis/search/search" method="post" class="menu-content" data-xf-init="quick-search"> <input name="keywords" class="js-uix_syncValue" data-uixsync="search" placeholder="Search…" aria-label="Search" type="hidden" /> <div class="menu-row"> <label class="iconic"><input type="checkbox" name="c[title_only]" value="1" /><i aria-hidden="true"></i><span class="iconic-label">Search titles only <span tabindex="0" role="button" data-xf-init="tooltip" data-trigger="hover focus click" title="Tags will also be searched"> <i class="fa--xf far fa-question-circle u-muted u-smaller" aria-hidden="true"></i> </span></span></label> </div> <div class="menu-row"> <div class="inputGroup"> <span class="inputGroup-text">By:</span> <input class="input" name="c[users]" data-xf-init="auto-complete" placeholder="Member" /> </div> </div> <div class="menu-footer"> <span class="menu-footer-controls"> <button type="submit" class="button--primary button button--icon button--icon--search"><span class="button-text">Search</span></button> <a href="/civis/search/" class="button" rel="nofollow"><span class="button-text">Advanced…</span></a> </span> </div> <input type="hidden" name="_xfToken" value="1732822498,0678c3b4c544b35c5e4b88f3afbe3641" /> </form> </div> </div> </div> </div> </div> </div> </header> <div class="p-navSticky p-navSticky--all " data-top-offset-breakpoints=" [ { "breakpoint": "0", "offset": "0" } ,{ "breakpoint": "900px", "offset": "40px" } ] " data-xf-init="sticky-header"> <nav class="p-nav"> <div class="p-nav-inner"> <button type="button" class="button--plain p-nav-menuTrigger badgeContainer button" data-badge="0" data-xf-click="off-canvas" data-menu=".js-headerOffCanvasMenu" role="button" tabindex="0" aria-label="Menu"><span class="button-text"> <i aria-hidden="true"></i> </span></button> <div class="p-header-logo p-header-logo--image"> <a class="uix_logo" href="/civis/"> <img src="https://cdn.arstechnica.net/civis/styles/ars/ars/ars-open-forum.svg" srcset="" alt="Ars OpenForum" width="" height="" /> </a> </div> <div class="p-nav-scroller hScroller" data-xf-init="h-scroller" data-auto-scroll=".p-navEl.is-selected"> <div class="hScroller-scroll"> <ul class="p-nav-list js-offCanvasNavSource"> <li> <div class="p-navEl u-ripple " > <a href="https://arstechnica.com/" class="p-navEl-link " uix-tab-nav-icon="fa-home" data-xf-key="1" data-nav-id="home_ars"><span>Front Page</span></a> </div> </li> <li> <div class="p-navEl u-ripple is-selected" > <a href="/civis/forums/" class="p-navEl-link " uix-tab-nav-icon="fa-comment" data-xf-key="2" data-nav-id="forums"><span>Forums</span></a> </div> </li> <li> <div class="p-navEl u-ripple " > <a href="/civis/whats-new/posts/" class="p-navEl-link " data-xf-key="3" data-nav-id="newPosts"><span>New posts</span></a> </div> </li> <li> <div class="p-navEl u-ripple " > <a href="https://arstechnica.com/store/product/subscriptions/" class="p-navEl-link " data-xf-key="4" data-nav-id="user_upgrades"><span>Subscribe</span></a> </div> </li> </ul> </div> </div> <div class="p-nav-opposite"> <div class="p-navgroup p-account p-navgroup--guest"> <a href="/civis/login/" class="p-navgroup-link u-ripple p-navgroup-link--textual p-navgroup-link--logIn" data-follow-redirects="on"> <i></i> <span class="p-navgroup-linkText">Log in</span> </a> <a href="/civis/register/" class="button button--cta p-navgroup-link u-ripple p-navgroup-link--textual p-navgroup-link--register" data-follow-redirects="on"> <i></i> <span class="p-navgroup-linkText">Register</span> </a> </div> <div class="p-navgroup p-discovery"> <a href="/civis/forums/-/-/th-nnm-navigate" class="p-navgroup-link p-navgroup-link--thNnnNavigate" data-xf-click="overlay" aria-label="Browse all forums"> <i class="fa--xf far fa-sitemap" aria-hidden="true"></i> </a> <div class="uix_searchBar"> <div class="uix_searchBarInner"> <form action="/civis/search/search" method="post" class="uix_searchForm" data-xf-init="quick-search"> <a class="uix_search--close"> <i class="fa--xf far fa-window-close" aria-hidden="true"></i> </a> <input type="text" class="input js-uix_syncValue uix_searchInput uix_searchDropdown__trigger" autocomplete="off" data-uixsync="search" name="keywords" placeholder="Search…" aria-label="Search" data-menu-autofocus="true" /> <a href="/civis/search/" class="uix_search--settings u-ripple" data-xf-key="/" aria-label="Search" aria-expanded="false" aria-haspopup="true" title="Search"> <i class="fa--xf far fa-cog" aria-hidden="true"></i> </a> <span class=" uix_searchIcon"> <i class="fa--xf far fa-search" aria-hidden="true"></i> </span> <input type="hidden" name="_xfToken" value="1732822498,0678c3b4c544b35c5e4b88f3afbe3641" /> </form> </div> <a class="uix_searchIconTrigger p-navgroup-link p-navgroup-link--iconic p-navgroup-link--search u-ripple" aria-label="Search" aria-expanded="false" aria-haspopup="true" title="Search"> <i aria-hidden="true"></i> </a> <a href="/civis/search/" class="p-navgroup-link p-navgroup-link--iconic p-navgroup-link--search u-ripple js-uix_minimalSearch__target" data-xf-click="menu" aria-label="Search" aria-expanded="false" aria-haspopup="true" title="Search"> <i aria-hidden="true"></i> </a> <div class="menu menu--structural menu--wide" data-menu="menu" aria-hidden="true"> <form action="/civis/search/search" method="post" class="menu-content" data-xf-init="quick-search"> <h3 class="menu-header">Search</h3> <div class="menu-row"> <input type="text" class="input js-uix_syncValue" name="keywords" data-uixsync="search" placeholder="Search…" aria-label="Search" data-menu-autofocus="true" /> </div> <div class="menu-row"> <label class="iconic"><input type="checkbox" name="c[title_only]" value="1" /><i aria-hidden="true"></i><span class="iconic-label">Search titles only <span tabindex="0" role="button" data-xf-init="tooltip" data-trigger="hover focus click" title="Tags will also be searched"> <i class="fa--xf far fa-question-circle u-muted u-smaller" aria-hidden="true"></i> </span></span></label> </div> <div class="menu-row"> <div class="inputGroup"> <span class="inputGroup-text" id="ctrl_search_menu_by_member">By:</span> <input type="text" class="input" name="c[users]" data-xf-init="auto-complete" placeholder="Member" aria-labelledby="ctrl_search_menu_by_member" /> </div> </div> <div class="menu-footer"> <span class="menu-footer-controls"> <button type="submit" class="button--primary button button--icon button--icon--search"><span class="button-text">Search</span></button> <a href="/civis/search/" class="button"><span class="button-text">Advanced search…</span></a> </span> </div> <input type="hidden" name="_xfToken" value="1732822498,0678c3b4c544b35c5e4b88f3afbe3641" /> </form> </div> <div class="menu menu--structural menu--wide uix_searchDropdown__menu" aria-hidden="true"> <form action="/civis/search/search" method="post" class="menu-content" data-xf-init="quick-search"> <input name="keywords" class="js-uix_syncValue" data-uixsync="search" placeholder="Search…" aria-label="Search" type="hidden" /> <div class="menu-row"> <label class="iconic"><input type="checkbox" name="c[title_only]" value="1" /><i aria-hidden="true"></i><span class="iconic-label">Search titles only <span tabindex="0" role="button" data-xf-init="tooltip" data-trigger="hover focus click" title="Tags will also be searched"> <i class="fa--xf far fa-question-circle u-muted u-smaller" aria-hidden="true"></i> </span></span></label> </div> <div class="menu-row"> <div class="inputGroup"> <span class="inputGroup-text">By:</span> <input class="input" name="c[users]" data-xf-init="auto-complete" placeholder="Member" /> </div> </div> <div class="menu-footer"> <span class="menu-footer-controls"> <button type="submit" class="button--primary button button--icon button--icon--search"><span class="button-text">Search</span></button> <a href="/civis/search/" class="button" rel="nofollow"><span class="button-text">Advanced…</span></a> </span> </div> <input type="hidden" name="_xfToken" value="1732822498,0678c3b4c544b35c5e4b88f3afbe3641" /> </form> </div> </div> </div> <div class="p-navgroup"> <a href="javascript:;" class="p-navgroup-link p-navgroup-link--iconic p-navgroup-link--more" title="More options" data-xf-init="tooltip" aria-haspopup="true" data-xf-click="menu" aria-expanded="false"><i aria-hidden="true"></i></a> <div class="menu menu--structural menu--small" data-menu="menu" aria-hidden="true"> <div class="menu-content"> <h4 class="menu-header">More options</h4> <a href="javascript:;" class="menu-linkRow js-uix_togglePageWidth" rel="nofollow">Toggle width</a> </div> </div> </div> </div> </div> </nav> <div class="p-sectionLinks p-sectionLinks--empty"></div> </div> <div class="offCanvasMenu offCanvasMenu--nav js-headerOffCanvasMenu" data-menu="menu" aria-hidden="true" data-ocm-builder="navigation"> <div class="offCanvasMenu-backdrop" data-menu-close="true"></div> <div class="offCanvasMenu-content"> <div class="sidePanel sidePanel--nav sidePanel--visitor"> <div class="sidePanel__tabPanels"> <div data-content="navigation" class="is-active sidePanel__tabPanel js-navigationTabPanel"> <div class="offCanvasMenu-header"> Menu <a class="offCanvasMenu-closer" data-menu-close="true" role="button" tabindex="0" aria-label="Close"></a> </div> <div class="js-offCanvasNavTarget"></div> </div> </div> </div> <div class="offCanvasMenu-installBanner js-installPromptContainer" style="display: none;" data-xf-init="install-prompt"> <div class="offCanvasMenu-installBanner-header">Install the app</div> <button type="button" class="js-installPromptButton button"><span class="button-text">Install</span></button> </div> </div> </div> <div class="p-body"> <div class="p-body-inner "> <!--XF:EXTRA_OUTPUT--> <noscript><div class="blockMessage blockMessage--important blockMessage--iconic u-noJsOnly">JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.</div></noscript> <div class="blockMessage blockMessage--important blockMessage--iconic js-browserWarning" style="display: none">You are using an out of date browser. It may not display this or other websites correctly.<br />You should upgrade or use an <a href="https://www.google.com/chrome/" target="_blank" rel="noopener">alternative browser</a>.</div> <div uix_component="MainContainer" class="uix_contentWrapper"> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NLXNPCQ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <aside class="ad ad_crown" id="ad_crown_top"></aside> <div class="p-body-header"> <div class="pageContent"> <div class="uix_headerInner"> <div class="p-title "> <h1 class="p-title-value"> Keep all your favorite posts in one place </h1> </div> </div> </div> </div> <div data-iframe-size class="p-body-main "> <div uix_component="MainContent" class="p-body-content"> <!-- ABOVE MAIN CONTENT --> <div class="p-body-pageContent"> <div class="block"> <div class="block-container"> <div class="block-body"> <div class="block-row"> Sign up in seconds and get the maximum value out of Ars OpenForum! <a href="/civis/login/login">Already a member?</a> </div> <div class="block-row adguest-align-center"> <a class="button button--cta" href="/civis/register/">Sign up using email.</a> </div> </div> </div> </div> </div> <!-- BELOW MAIN CONTENT --> </div> </div> </div> </div> </div> <footer class="p-footer" id="footer"> <div class="p-footer-inner"> <div class="pageContent"> <div class="p-footer-row"> <div class="p-footer-row-main"> <ul class="p-footer-linkList p-footer-choosers"> <li><a id="uix_widthToggle--trigger" data-xf-init="tooltip" title="Toggle width" rel="nofollow"><i class="fa--xf far fa-compress-alt" aria-hidden="true"></i></a></li> <li><a href="/civis/misc/style" data-xf-click="overlay" data-xf-init="tooltip" title="Style chooser" rel="nofollow">Autodetect theme</a></li> <li> <label class="thstyleswitch_toggleSwitch" data-xf-init="tooltip" title="Toggle style"> <input type="checkbox" class="thstyleswitch_toggleSwitch__checkbox" /> <span class="thstyleswitch_toggleSwitch__slider"></span> </label> </li> </ul> </div> </div> <div class="p-footer-row-opposite"> <ul class="p-footer-linkList"> <li><a href="https://arstechnica.com/contact-us/" data-xf-click="">Contact us</a></li> <li><a href="/staff/2000/01/postguide/">Posting guidelines</a></li> <li><a href="https://arstechnica.com/staff/2000/01/postguide/">Terms and rules</a></li> <li><a href="https://www.condenast.com/privacy-policy/">Privacy policy</a></li> <li><a href="/civis/help/">Help</a></li> <li><a href="#top" title="Top" data-xf-click="scroll-to"><i class="fa fa-arrow-up" aria-hidden="true"></i></a></li> <li><a href="/civis/forums/-/index.rss" target="_blank" class="p-footer-rssLink" title="RSS"><span aria-hidden="true"><i class="fa fa-rss"></i><span class="u-srOnly">RSS</span></span></a></li> </ul> </div> </div> </div> <div class="p-footer-copyrightRow"> <div class="pageContent"> <div class="uix_copyrightBlock"> <div class="p-footer-copyright"> <a href="https://xenforo.com" class="u-concealed" dir="ltr" target="_blank" rel="sponsored noopener">Community platform by XenForo<sup>®</sup> <span class="copyright">© 2010-2021 XenForo Ltd.</span></a> </div> </div> </div> </div> </footer> </div> </div> <div class="u-bottomFixer js-bottomFixTarget"> </div> <script> if (typeof (window.themehouse) !== 'object') { window.themehouse = {}; } if (typeof (window.themehouse.settings) !== 'object') { window.themehouse.settings = {}; } window.themehouse.settings = { common: { '20210125': { init: false, }, }, data: { version: '2.2.8.1.0', jsVersion: 'No JS Files', templateVersion: '2.1.8.0_Release', betaMode: 0, theme: '', url: 'https://arstechnica.com/civis/', user: '0', }, inputSync: {}, minimalSearch: { breakpoint: "900px", dropdownBreakpoint: "900", }, sidebar: { enabled: '1', link: '/civis/uix/toggle-sidebar.json?t=1732822498%2C0678c3b4c544b35c5e4b88f3afbe3641', state: '', }, sidebarNav: { enabled: '', link: '/civis/uix/toggle-sidebar-navigation.json?t=1732822498%2C0678c3b4c544b35c5e4b88f3afbe3641', state: '', }, fab: { enabled: 0, }, checkRadius: { enabled: 0, selectors: '.p-footer-inner, .uix_extendedFooter, .p-nav, .p-sectionLinks, .p-staffBar, .p-header, #wpadminbar', }, nodes: { enabled: 1, }, nodesCollapse: { enabled: '1', link: '/civis/uix/toggle-category.json?t=1732822498%2C0678c3b4c544b35c5e4b88f3afbe3641', state: '', }, widthToggle: { enabled: '1', link: '/civis/uix/toggle-width.json?t=1732822498%2C0678c3b4c544b35c5e4b88f3afbe3641', state: 'fixed', }, } window.document.addEventListener('DOMContentLoaded', function() { try { window.themehouse.common['20210125'].init(); window.themehouse.common['20180112'] = window.themehouse.common['20210125']; // custom projects fallback } catch(e) { console.log('Error caught', e); } var jsVersionPrefix = 'No JS Files'; if (typeof(window.themehouse.settings.data.jsVersion) === 'string') { var jsVersionSplit = window.themehouse.settings.data.jsVersion.split('_'); if (jsVersionSplit.length) { jsVersionPrefix = jsVersionSplit[0]; } } var templateVersionPrefix = 'No JS Template Version'; if (typeof(window.themehouse.settings.data.templateVersion) === 'string') { var templateVersionSplit = window.themehouse.settings.data.templateVersion.split('_'); if (templateVersionSplit.length) { templateVersionPrefix = templateVersionSplit[0]; } } if (jsVersionPrefix !== templateVersionPrefix) { var splitFileVersion = jsVersionPrefix.split('.'); var splitTemplateVersion = templateVersionPrefix.split('.'); console.log('version mismatch', jsVersionPrefix, templateVersionPrefix); } }); </script> <script src="https://cdn.arstechnica.net/civis/js/vendor/jquery/jquery-3.5.1.min.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/vendor/vendor-compiled.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/xf/core-compiled.js?_v=0bff0aba"></script> <!-- Snowplow begin --> <script type='text/javascript' id='snowplow-js-before'> window.snowplowQueue = window.snowplowQueue || []; window.snowplowContexts = {"site":{"orgId":"4gKgcFGUFUvCGFzHakTPfYp85Yi8","orgAppId":null,"appVersion":null,"env":"production"},"content":{"functionalTags":null,"hasBuyButtons":null,"noOfRevisions":null,"editorNames":null,"author_name":null,"contentId":null,"contentLength":null,"contentTitle":null,"contentSource":"web","authorIds":null,"publishDate":null,"modifiedDate":null,"tags":null,"contentLang":"en-US","galleryName":null,"totalGalleryImages":null,"wordCount":null,"contentType":null,"templateType":null,"primaryTag":null,"contentFlag":null,"isCommerceContent":null,"pageTypeProperties":null,"section":null,"subsection":null,"subsection2":null,"dataSource":"web"},"syndication":{"content":null,"originalSource":null,"originalContentLanguage":null},"page":{"canonical":null,"syndicatorUrl":null},"user":{"amguuid":null}}; window.snowplowConfig = {"SNOWPLOW_COLLECTOR":"c.arstechnica.com","SNOWPLOW_SCRIPT":"https:\/\/globalservices.conde.digital\/p77xzrbz9z.js","AVO_API_KEY":"FTJO6mVPBIzdGhjn2Ruy","APP_ID":"ars-technica","APP_NAME":"ars-technica","APP_ENV":"production","APP_VERSION":"1.0.0","COOKIE_DOMAIN":".arstechnica.com"}; </script> <script type='text/javascript' src='https://cdn.arstechnica.net/wp-content/mu-plugins/ars-snowplow/ars-snowplow-js/dist/main-1-0-4.js?ver=1.0.4' id='snowplow-js'></script> <!-- Snowplow end --> <script src="https://cdn.arstechnica.net/civis/js/themehouse/styleswitch/global.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/audentio/guest-prompts/overlay.min.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/audentio/wpconnect/thread.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/vendor/iframe-resizer.child.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/audentio/logincookie/logincookie.min.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/acui/ripple.min.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/global/20210125.min.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/acui/index.min.js?_v=0bff0aba"></script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/acui/vendor/hover-intent/jquery.hoverIntent.min.js?_v=0bff0aba"></script> <script> $(document).ready(function() { var style = 'dark'; $('.uix_styleToggle').click(function() { themehouse.styleSwitch.switchStyle(style); if (style == 'light') { style = 'dark' } else { style = 'light'; } }); }); </script> <script> // detect android device. Added to fix the dark pixel bug https://github.com/Audentio/xf2theme-issues/issues/1055 $(document).ready(function() { var ua = navigator.userAgent.toLowerCase(); var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile"); if(isAndroid) { $('html').addClass('device--isAndroid'); } }) </script> <script> $(document).ready(function() { var sidebar = $('.p-body-sidebar'); var backdrop = $('.p-body-sidebar [data-ocm-class="offCanvasMenu-backdrop"]'); $('.uix_sidebarCanvasTrigger').click(function(e) { e.preventDefault(); sidebar.css('display', 'block'); window.setTimeout(function() { sidebar.addClass('offCanvasMenu offCanvasMenu--blocks is-active is-transitioning'); $('body').addClass('sideNav--open'); }, 50); window.setTimeout(function() { sidebar.removeClass('is-transitioning'); }, 250); $('.uix_sidebarInner').addClass('offCanvasMenu-content'); backdrop.addClass('offCanvasMenu-backdrop'); $('body').addClass('is-modalOpen'); }); backdrop.click(function() { sidebar.addClass('is-transitioning'); sidebar.removeClass('is-active'); window.setTimeout(function() { sidebar.removeClass('offCanvasMenu offCanvasMenu--blocks is-transitioning'); $('.uix_sidebarInner').removeClass('offCanvasMenu-content'); backdrop.removeClass('offCanvasMenu-backdrop'); $('body').removeClass('is-modalOpen'); sidebar.css('display', ''); }, 250); }) }); </script> <script> /****** OFF CANVAS ***/ $(document).ready(function() { var panels = { navigation: { position: 1 }, account: { position: 2 }, inbox: { position: 3 }, alerts: { position: 4 } }; var tabsContainer = $('.sidePanel__tabs'); var activeTab = 'navigation'; var activeTabPosition = panels[activeTab].position; var generateDirections = function() { $('.sidePanel__tabPanel').each(function() { var tabPosition = $(this).attr('data-content'); var activeTabPosition = panels[activeTab].position; if (tabPosition != activeTab) { if (panels[tabPosition].position < activeTabPosition) { $(this).addClass('is-left'); } if (panels[tabPosition].position > activeTabPosition) { $(this).addClass('is-right'); } } }); }; generateDirections(); $('.sidePanel__tab').click(function() { $(tabsContainer).find('.sidePanel__tab').removeClass('sidePanel__tab--active'); $(this).addClass('sidePanel__tab--active'); activeTab = $(this).attr('data-attr'); $('.sidePanel__tabPanel').removeClass('is-active'); $('.sidePanel__tabPanel[data-content="' + activeTab + '"]').addClass('is-active'); $('.sidePanel__tabPanel').removeClass('is-left').removeClass('is-right'); generateDirections(); }); }); /******** extra info post toggle ***********/ $(document).ready(function() { XF.thThreadsUserExtraTrigger = XF.Click.newHandler({ eventNameSpace: 'XFthThreadsUserExtraTrigger', init: function(e) {}, click: function(e) { var parent = this.$target.parents('.message-user'); var triggerContainer = this.$target.parent('.thThreads__userExtra--toggle'); var container = triggerContainer.siblings('.thThreads__message-userExtras'); var child = container.find('.message-userExtras'); var eleHeight = child.height(); if (parent.hasClass('userExtra--expand')) { container.css({ height: eleHeight }); parent.toggleClass('userExtra--expand'); window.setTimeout(function() { container.css({ height: '0' }); window.setTimeout(function() { container.css({ height: '' }); }, 200); }, 17); } else { container.css({ height: eleHeight }); window.setTimeout(function() { parent.toggleClass('userExtra--expand'); container.css({ height: '' }); }, 200); } } }); XF.Click.register('ththreads-userextra-trigger', 'XF.thThreadsUserExtraTrigger'); }); /******** Backstretch images ***********/ $(document).ready(function() { if ( 0 ) { $("body").addClass('uix__hasBackstretch'); $("body").backstretch([ "https://cdn.arstechnica.net/civis/styles/ars/images/bg/1.jpg","https://cdn.arstechnica.net/civis/styles/ars/images/bg/2.jpg","https://cdn.arstechnica.net/civis/styles/ars/images/bg/3.jpg" ], { duration: 4000, fade: 500 }); $("body").css("zIndex",""); } }); // sidenav canvas blur fix $(document).ready(function(){ $('.p-body-sideNavTrigger .button').click(function(){ $('body').addClass('sideNav--open'); }); }) $(document).ready(function(){ $("[data-ocm-class='offCanvasMenu-backdrop']").click(function(){ $('body').removeClass('sideNav--open'); }); }) $(document).on('editor:start', function (m, ed) { if (typeof (m) !== 'undefined' && typeof (m.target) !== 'undefined') { var ele = $(m.target); if (ele.hasClass('js-editor')) { var wrapper = ele.closest('.message-editorWrapper'); if (wrapper.length) { window.setTimeout(function() { var innerEle = wrapper.find('.fr-element'); if (innerEle.length) { innerEle.focus(function (e) { $('html').addClass('uix_editor--focused') }); innerEle.blur(function (e) { $('html').removeClass('uix_editor--focused') }); } }, 0); } } } }); // off canvas menu closer keyboard shortcut $(document).ready(function() { $(document.body).onPassive('keyup', function(e) { switch (e.key) { case 'Escape': $('.offCanvasMenu.is-active .offCanvasMenu-backdrop').click(); return; } }); }); </script> <script> $(document).ready(function() { var uixMegaHovered = false; $('.uix-navEl--hasMegaMenu').hoverIntent({ over: function() { if (uixMegaHovered) { menu = $(this).attr('data-nav-id'); $('.p-nav').addClass('uix_showMegaMenu'); $('.uix_megaMenu__content').removeClass('uix_megaMenu__content--active'); $('.uix_megaMenu__content--' + menu).addClass('uix_megaMenu__content--active'); } }, timeout: 200, }); $('.p-nav').mouseenter(function() { uixMegaHovered = true; }); $('.p-nav').mouseleave(function() { $(this).removeClass('uix_showMegaMenu'); uixMegaHovered = false; }); }); </script> <script> /******** signature collapse toggle ***********/ $(window).on('load', function() { window.setTimeout(function() { var maxHeight = 100; /*** check if expandable ***/ var eles = []; $('.message-signature').each(function() { var height = $(this).height(); if (height > maxHeight) { eles.push($(this)); } }); for (var i = 0; i < eles.length; i++) { eles[i].addClass('message-signature--expandable'); }; /**** expand function ***/ var expand = function(container, canClose) { var inner = container.find('.bbWrapper'); var eleHeight = inner.height(); var isExpanded = container.hasClass('message-signature--expanded'); if (isExpanded) { if (canClose) { container.css({ height: eleHeight }); container.removeClass('message-signature--expanded'); window.setTimeout(function() { container.css({ height: maxHeight }); window.setTimeout(function() { container.css({ height: '' }); }, 200); }, 17); } } else { container.css({ height: eleHeight }); window.setTimeout(function() { container.addClass('message-signature--expanded'); container.css({ height: '' }); }, 200); } } var hash = window.location.hash if (!!hash && hash.indexOf('#') === 0) { var replacedHash = hash.replace('#', ''); var ele = document.getElementById(replacedHash); if (ele) { ele.scrollIntoView(); } } /*** handle hover ***/ /*** handle click ***/ $('.uix_signatureExpand').click(function() { var container = $(this).parent('.message-signature'); expand(container, true); }); }, 0); }); </script> <script> $(document).ready(function() { setTimeout(function () { var editor = XF.getEditorInContainer($(document)); if (!!editor && !!editor.ed) { editor.ed.events.on('focus', function() { $('.uix_fabBar').css('display', 'none'); }) editor.ed.events.on('blur', function() { $('.uix_fabBar').css('display', ''); }) } }, 100) }) </script> <script> $(document).on('ajax:complete', function(e, xhr, status) { var data = xhr.responseJSON; if (!data) { return; } if (data.visitor) { $('.js-uix_badge--totalUnread').data('badge', data.visitor.total_unread); } }); </script> <script> // add items to action bar overflow menu for messages XF.MenuBuilder.actionBarNew = function($menu, $target, handler) { var $menuTarget = $menu.find('.js-menuBuilderTarget'); console.log( $target.closest('.message-main').find('.actionBar-set--internal') ); $target.closest('.message-main').find('.actionBar-set--internal').find('.actionBar-action--menuItem').each(function() { var $item = $(this).clone(); $item.removeClass().addClass('menu-linkRow'); $menuTarget.append($item); }); XF.activate($menuTarget); }; // set profile post comments to open in an overlay $(document).ready(function() { $('.uix_commentsTrigger').click(function() { $(document).on('ajax-submit:response', function(e, data) { console.log(data); if (data && data.html) { XF.Message.insertMessages(data.html, $('.overlay .js-replyNewMessageContainer'), true, function($messages){}); } }); var overlayContent = $(this).closest('.message-main').find('.uix_commentsContainer').clone(); console.log(overlayContent); var $overlay = XF.getOverlayHtml({ title: XF.phrase('Comments'), dismissible: true, html: overlayContent }); var xfOverlay = new XF.Overlay($overlay, { backdropClose: true, keyboard: true }); xfOverlay.show(); return xfOverlay }); }); $(document).ready(function() { $('.actionBar-action--commentLightbox').click(function(e) { e.preventDefault(); th_xfmgCommentClick = true; $(this).closest('.ac_mediaItem').find('.contentRow-title a').click(); }) $('.js-uix_lightboxTrigger').click(function(e) { e.preventDefault(); $(this).closest('.ac_mediaItem').find('.ac_mediaClickTarget a').click(); }) }) $(document).ready(function() { $('.js-uix_togglePageWidth').click(function() { var ele = $('#uix_widthToggle--trigger'); if (ele && ele.length > 0) { ele[0].click() } }) }) $(document).ready(function() { $('.uix_sidebarTrigger__component').click(XF.MenuWatcher.closeAll); $('.js-feedSelectMenu .js-tab').click(XF.MenuWatcher.closeAll); }) </script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/acui/defer.min.js?_v=0bff0aba" defer></script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/acui/deferFab.min.js?_v=0bff0aba" defer></script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/acui/deferNodesCollapse.min.js?_v=0bff0aba" defer></script> <script src="https://cdn.arstechnica.net/civis/js/themehouse/acui/deferWidthToggle.min.js?_v=0bff0aba" defer></script> <script> jQuery.extend(true, XF.config, { // userId: 0, enablePush: false, pushAppServerKey: '', url: { fullBase: 'https://arstechnica.com/civis/', basePath: '/civis/', css: 'https://cdn.arstechnica.net/civis/css.php?css=__SENTINEL__&s=3&l=1&d=1732214650', keepAlive: '/civis/login/keep-alive' }, cookie: { path: '/', domain: '.arstechnica.com', prefix: 'xf_', secure: true }, cacheKey: '0612160ee99844876485fe1d1fc38b11', csrf: '1732822498,0678c3b4c544b35c5e4b88f3afbe3641', js: {"https:\/\/cdn.arstechnica.net\/civis\/js\/themehouse\/styleswitch\/global.js?_v=0bff0aba":true,"https:\/\/cdn.arstechnica.net\/civis\/js\/audentio\/guest-prompts\/overlay.min.js?_v=0bff0aba":true,"https:\/\/cdn.arstechnica.net\/civis\/js\/audentio\/wpconnect\/thread.js?_v=0bff0aba":true,"https:\/\/cdn.arstechnica.net\/civis\/js\/vendor\/iframe-resizer.child.js?_v=0bff0aba":true,"https:\/\/cdn.arstechnica.net\/civis\/js\/audentio\/logincookie\/logincookie.min.js?_v=0bff0aba":true,"https:\/\/cdn.arstechnica.net\/civis\/js\/themehouse\/acui\/ripple.min.js?_v=0bff0aba":true,"https:\/\/cdn.arstechnica.net\/civis\/js\/themehouse\/global\/20210125.min.js?_v=0bff0aba":true,"https:\/\/cdn.arstechnica.net\/civis\/js\/themehouse\/acui\/index.min.js?_v=0bff0aba":true,"https:\/\/cdn.arstechnica.net\/civis\/js\/themehouse\/acui\/vendor\/hover-intent\/jquery.hoverIntent.min.js?_v=0bff0aba":true}, css: {"public:ac_app.less":true,"public:adguest_overlay.less":true,"public:ars_xf.less":true,"public:aud_wpconnect.less":true,"public:thstyleswitch.less":true,"public:uix.less":true,"public:uix_socialMedia.less":true,"public:extra.less":true}, time: { now: 1732822498, today: 1732770000, todayDow: 4, tomorrow: 1732856400, yesterday: 1732683600, week: 1732251600 }, borderSizeFeature: '2px', fontAwesomeWeight: 'r', enableRtnProtect: true, enableFormSubmitSticky: true, uploadMaxFilesize: 10485760, allowedVideoExtensions: ["m4v","mov","mp4","mp4v","mpeg","mpg","ogv","webm"], allowedAudioExtensions: ["mp3","opus","ogg","wav"], shortcodeToEmoji: true, visitorCounts: { conversations_unread: '0', alerts_unviewed: '0', total_unread: '0', title_count: true, icon_indicator: true }, jsState: {}, publicMetadataLogoUrl: '', publicPushBadgeUrl: 'https://arstechnica.com/civis/styles/default/xenforo/bell.png' }); jQuery.extend(XF.phrases, { // date_x_at_time_y: "{date} at {time}", day_x_at_time_y: "{day} at {time}", yesterday_at_x: "Yesterday at {time}", x_minutes_ago: "{minutes} minutes ago", one_minute_ago: "1 minute ago", a_moment_ago: "A moment ago", today_at_x: "Today at {time}", in_a_moment: "In a moment", in_a_minute: "In a minute", in_x_minutes: "In {minutes} minutes", later_today_at_x: "Later today at {time}", tomorrow_at_x: "Tomorrow at {time}", day0: "Sunday", day1: "Monday", day2: "Tuesday", day3: "Wednesday", day4: "Thursday", day5: "Friday", day6: "Saturday", dayShort0: "Sun", dayShort1: "Mon", dayShort2: "Tue", dayShort3: "Wed", dayShort4: "Thu", dayShort5: "Fri", dayShort6: "Sat", month0: "January", month1: "February", month2: "March", month3: "April", month4: "May", month5: "June", month6: "July", month7: "August", month8: "September", month9: "October", month10: "November", month11: "December", active_user_changed_reload_page: "The active user has changed. Reload the page for the latest version.", server_did_not_respond_in_time_try_again: "The server did not respond in time. Please try again.", oops_we_ran_into_some_problems: "Oops! We ran into some problems.", oops_we_ran_into_some_problems_more_details_console: "Oops! We ran into some problems. Please try again later. More error details may be in the browser console.", file_too_large_to_upload: "The file is too large to be uploaded.", uploaded_file_is_too_large_for_server_to_process: "The uploaded file is too large for the server to process.", files_being_uploaded_are_you_sure: "Files are still being uploaded. Are you sure you want to submit this form?", attach: "Attach files", rich_text_box: "Rich text box", close: "Close", link_copied_to_clipboard: "Link copied to clipboard.", text_copied_to_clipboard: "Text copied to clipboard.", loading: "Loading…", you_have_exceeded_maximum_number_of_selectable_items: "You have exceeded the maximum number of selectable items.", processing: "Processing", 'processing...': "Processing…", showing_x_of_y_items: "Showing {count} of {total} items", showing_all_items: "Showing all items", no_items_to_display: "No items to display", number_button_up: "Increase", number_button_down: "Decrease", push_enable_notification_title: "Push notifications enabled successfully at Ars OpenForum", push_enable_notification_body: "Thank you for enabling push notifications!" , "svStandardLib_time.day": "{count} day", "svStandardLib_time.days": "{count} days", "svStandardLib_time.hour": "{count} hour", "svStandardLib_time.hours": "{count} hours", "svStandardLib_time.minute": "{count} minutes", "svStandardLib_time.minutes": "{count} minutes", "svStandardLib_time.month": "{count} month", "svStandardLib_time.months": "{count} months", "svStandardLib_time.second": "{count} second", "svStandardLib_time.seconds": "{count} seconds", "svStandardLib_time.week": "time.week", "svStandardLib_time.weeks": "{count} weeks", "svStandardLib_time.year": "{count} year", "svStandardLib_time.years": "{count} years" }); </script> <form style="display:none" hidden="hidden"> <input type="text" name="_xfClientLoadTime" value="" id="_xfClientLoadTime" title="_xfClientLoadTime" tabindex="-1" /> </form> <script type="text/template" id="xfReactTooltipTemplate"> <div class="tooltip-content-inner"> <div class="reactTooltip"> <a href="#" class="reaction reaction--1" data-reaction-id="1"><i aria-hidden="true"></i><img src="https://cdn.arstechnica.net/civis/data/assets/reactions/thumbs-up-32-green-glow.png" srcset="https://cdn.arstechnica.net/civis/data/assets/reactions/thumbs-up-64-green-glow.png 2x" class="reaction-image js-reaction" alt="Like" title="Like" data-xf-init="tooltip" data-extra-class="tooltip--basic tooltip--noninteractive" /></a> <a href="#" class="reaction reaction--2" data-reaction-id="2"><i aria-hidden="true"></i><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="reaction-sprite js-reaction" alt="Love" title="Love" data-xf-init="tooltip" data-extra-class="tooltip--basic tooltip--noninteractive" /></a> <a href="#" class="reaction reaction--3" data-reaction-id="3"><i aria-hidden="true"></i><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="reaction-sprite js-reaction" alt="Haha" title="Haha" data-xf-init="tooltip" data-extra-class="tooltip--basic tooltip--noninteractive" /></a> <a href="#" class="reaction reaction--4" data-reaction-id="4"><i aria-hidden="true"></i><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="reaction-sprite js-reaction" alt="Wow" title="Wow" data-xf-init="tooltip" data-extra-class="tooltip--basic tooltip--noninteractive" /></a> <a href="#" class="reaction reaction--5" data-reaction-id="5"><i aria-hidden="true"></i><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="reaction-sprite js-reaction" alt="Sad" title="Sad" data-xf-init="tooltip" data-extra-class="tooltip--basic tooltip--noninteractive" /></a> <a href="#" class="reaction reaction--7" data-reaction-id="7"><i aria-hidden="true"></i><img src="https://cdn.arstechnica.net/civis/data/assets/reactions/hug-32-blue-orange.png" srcset="https://cdn.arstechnica.net/civis/data/assets/reactions/hug-64-blue-orange.png 2x" class="reaction-image js-reaction" alt="Hug" title="Hug" data-xf-init="tooltip" data-extra-class="tooltip--basic tooltip--noninteractive" /></a> <a href="#" class="reaction reaction--6" data-reaction-id="6"><i aria-hidden="true"></i><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="reaction-sprite js-reaction" alt="Angry" title="Angry" data-xf-init="tooltip" data-extra-class="tooltip--basic tooltip--noninteractive" /></a> <a href="#" class="reaction reaction--8" data-reaction-id="8"><i aria-hidden="true"></i><img src="https://cdn.arstechnica.net/civis/data/assets/reactions/spicy-react.png" srcset="https://cdn.arstechnica.net/civis/data/assets/reactions/spicy-react-2x.png 2x" class="reaction-image js-reaction" alt="Spicy" title="Spicy" data-xf-init="tooltip" data-extra-class="tooltip--basic tooltip--noninteractive" /></a> </div> </div> </script> </body> </html>