component { /** * I fix Carol's LinkedIn URLs and name (after her name change). */ private void function cleanUpCarolLinks( required string content ) { // The jSoup library allows us to parse, traverse, and mutate HTML on the // ColdFusion server using a familiar, luxurious jQuery-inspired syntax. var dom = jSoupJavaLoader .create( "org.jsoup.Jsoup" ) .parse( content ) .body() ; // Find all the embedded anchor tags in the content that currently point to // Carol's old LinkedIn profile (using a partial match on the LinkedIn slug in // order to make the selector a tiny bit more flexible). for ( var node in dom.select( "a[href*='carol-hamilton-5a869257']" ) ) { // Update the link to point to her new LinkedIn profile. node.attr( "href", "https://www.linkedin.com/in/carol-weiler-5a869257/" ); // This is likely not going to be true in all cases; but, in many cases, the // link to Carol's LinkedIn profile is preceded by her name (such as in the // list of co-hosts on the Working Code podcast). In such a scenario, let's // also try to back-up in the DOM tree and update her name as well. var labelNodes = node .parent() .select( "strong:contains(Carol Hamilton)" ) ; if ( labelNodes.len() ) { labelNodes[ 1 ].text( "Carol Weiler" ); } } } }