1<!DOCTYPE html> 2<html lang="en"> 3<head> 4<!-- ================================================================================================================= --> 5<!-- 6o Well, hello there! :-) 7o The Content Management System for this website is RocketFusion.com 8o RocketFusion and the RocketFusion logo are copyright Montague WebWorks, Inc. 9o Please direct code comments/feedback to https://MontagueWebWorks.com/contact 10o All content updated by the client: WMCB-LP, 107.9FM Community Radio for Greenfield, MA 11--> 12<!-- ================================================================================================================= --> 13<!-- Title and App Tags --> 14<!-- 20260911135257 --> 15<title>Valley Post Radio, Dummerston, VT - WMCB-LP, 107.9FM Community Radio for Greenfield, MA</title> 16<meta property="og:title" content="Valley Post Radio, Dummerston, VT"> 17<meta property="twitter:title" content="Valley Post Radio, Dummerston, VT - WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 18<meta itemprop="name" content="Valley Post Radio, Dummerston, VT - WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 19<!-- safari --> 20<meta name="apple-mobile-web-app-title" content="Valley Post Radio, Dummerston, VT - WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 21<meta name="apple-mobile-web-app-capable" content="yes"> 22<meta name="apple-touch-fullscreen" content="yes"> 23<!-- chrome --> 24<meta name="mobile-web-app-capable" content="yes"> 25<!-- ie 10 --> 26<meta name="application-name" content="Valley Post Radio, Dummerston, VT - WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 27<meta name="msapplication-tooltip" content="Valley Post Radio, Dummerston, VT - WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 28<meta name="msapplication-starturl" content="/"> 29<!-- ================================================================================================================= --> 30<!-- Standard on all pages --> 31<meta charset="UTF-8" /> 32<meta http-equiv="content-type" content="text/html;charset=UTF-8"> 33<meta http-equiv="cache-control" content="public, max-age=86400"> 34<meta http-equiv="imagetoolbar" content="no"> 35<meta name="format-detection" content="telephone=yes"/><!-- was yes but Edge breaks it --> 36<!-- new google fonts --> 37<link rel="preconnect" href="https://fonts.googleapis.com"> 38<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 39<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Bitcount+Grid+Double|Freckle+Face|Parastoo|Roboto+Condensed"> 40<meta name="theme-color" content="white" /> 41<meta name="Language" content="en" /> 42<meta name="apple-mobile-web-app-status-bar-style" content="black" /> 43<meta name="verify-v1" content=" " /> 44<meta name="source" content="exists" /> 45<meta name="geo.placename" content="Greenfield" /> 46<meta name="google-site-verification" content=" " /> 47<meta name="p:domain_verify" content=" " /> 48<meta name="geo.position" content=" " /> 49<meta name="msapplication-TileColor" content="white" /> 50<meta name="last-modified" content="2026-09-25" /> 51<meta name="geo.region" content="US-MA" /> 52<meta name="msvalidate.01" content=" " /> 53<!-- no Facebook Pixel ID --> 54<meta name="author" content="WMCB-LP, 107.9FM Community Radio for Greenfield, MA" /> 55<meta name="owner" content="WMCB-LP, 107.9FM Community Radio for Greenfield, MA" /> 56<meta name="copyright" content="Copyright 2026 WMCB-LP, 107.9FM Community Radio for Greenfield, MA" /> 57<meta name="expires" content="Sep 25, 2026"> 58<meta name="generator" content="RocketFusion CMS" /> 59<meta name="Robots" content="noodp,noydir" /> 60<meta name="slurp" content="noydir" /> 61<meta name="googlebot" content="noodp" /> 62<meta name="msnbot" content="noodp" /> 63<meta name="MSSmartTagsPreventParsing" content="TRUE" /><!-- stops MS browsers from adding parsed keyword advertising on websites --> 64<meta name="viewport" content="width=device-width, initial-scale=1"><!-- , maximum-scale=1 --> 65<meta property="og:site_name" content="WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 66<meta property="og:type" content="website" /> 67<!-- ================================================================================================================= --> 68<!-- FAVICONS start --> 69<!-- favicon info --> 70<link rel="shortcut icon" href="/favicon.ico" /> 71<link rel="icon" href="/favicon.ico" type="image/x-icon" /> 72<link rel="apple-touch-icon" href="/favicon.ico"> 73<meta name="msapplication-TileImage" content="/favicon.ico"> 74<link rel="manifest" href="/icons/manifest.json"> 75<meta name="apple-mobile-web-app-status-bar-style" content="black"> 76<meta name="msapplication-TileColor" content="white"> 77<meta name="theme-color" content="white"> 78<!-- MS Application Tasks (off for now) --> 79<!-- FAVICONS end --> 80<!-- this is a business card page --> 81<meta property="og:url" content="/business"> 82<link rel="canonical" href="/business"> 83<meta itemprop="image" content="/business/business_23_large.jpg"> 84<meta property="og:image" content="/business/business_23_large.jpg"> 85<meta property="twitter:image" content="/business/business_23_large.jpg"> 86<link rel="image_src" href="/business/business_23_large.jpg"> 87<meta property="og:image:alt" content="Valley Post Radio, Dummerston, VT"> 88<meta name="description" content="WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 89<meta itemprop="description" content="WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 90<meta property="og:description" content="WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 91<meta property="twitter:description" content="WMCB-LP, 107.9FM Community Radio for Greenfield, MA"> 92<!-- ================================================================================================================= -->
93<script src="https://kit.fontawesome.com/d3bffd01a6.js" crossorigin="anonymous"></script>
93 94<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> 95<link rel="stylesheet" href="/RFassets/css/datatables-bs4.min.css"> 96<link rel="stylesheet" href="/RFAssets/css/RFtables.css?ver=20260911135257"> 97<link rel="stylesheet" href="/RFAssets/css/joey.css?ver=20260911135257"> 98<link rel="stylesheet" href="/site_style.css?ver=20260911135257"> 99<link rel="stylesheet" href="/header_style.css?ver=20260911135257"> 100<link rel="stylesheet" href="/RFAssets/css/_admin.css?ver=20260911135257"> 101<!-- custom stylesheet --> 102<link rel="stylesheet" href="/tmpl_TMPL01.css?ver=20260911135257">
103<script src="/RFAssets/js/boxover.js" type="text/javascript"></script>
vendor: 1 bytes, line 103
103
104<script type="text/javascript"> 105function toggleLayer(whichLayer,what) { 106if (document.getElementById) 107{ 108var style2 = document.getElementById(whichLayer).style; 109style2.display = what; 110} 111else if (document.all) 112{ 113var style2 = document.all[whichLayer].style; 114style2.display = what; 115} 116else if (document.layers) 117{ 118var style2 = document.layers[whichLayer].style; 119style2.display = what; 120} 121} 122function toggleCheckbox(source) { 123checkboxes = document.getElementsByName('file_delete'); 124for(var i=0, n=checkboxes.length;i<n;i++) { 125checkboxes[i].checked = source.checked; 126} 127} 128</script>
vendor: 1 bytes, line 128
128
129<script> 130/** 131* Function that tracks a click on an outbound link in Analytics. 132* This function takes a valid URL string as an argument, and uses that URL string 133* as the event label. Setting the transport method to 'beacon' lets the hit be sent 134* using 'navigator.sendBeacon' in browser that support it. 135*/ 136var trackOutboundLink = function(url) { 137ga('send', 'event', 'outbound', 'click', url, { 138'transport': 'beacon', 139'hitCallback': function(){document.location = url;} 140}); 141} 142</script>
142 143<!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 64 bytes, lines 143-144
143 144<script async src="https://www.googletagmanager.com/gtag/js?id=
144G-HCCEPDJW0T
vendor: 12 bytes, line 144
144"></script>
145<script>
vendor: 127 bytes, lines 146-149
146window.dataLayer = window.dataLayer || []; 147function gtag(){dataLayer.push(arguments);} 148gtag('js', new Date()); 149gtag('config', '
149G-HCCEPDJW0T
vendor: 4 bytes, line 149
149');
150</script>
150 151<!-- No text_Google_Tag_Manager_ID defined --> 152<!-- end of metatags -->
153<script src="https://www.paypal.com/sdk/js?client-id=BAAKGIKYYiv41nhCy4idHEiZ79JLodQfBH4xNSqhkfBBhc4lES17KL0v-RMlQW4EYZoSBbPv_nLtyXhz0c&components=hosted-buttons&enable-funding=venmo�cy=USD"></script>
vendor: 1 bytes, line 153
153
154<script src="/RFAssets/playerjs.js" type="text/javascript"></script>
154 155</head> 156<body class="notMobile" 157id="default"> 158<!-- THESE ARE HERE (ADMIN) BECAUSE THEY NEED TO BE AT THE TOP OF THE BODY, NOT IN THE META TAGS --> 159<!-- No text_Google_Tag_Manager_ID defined --> 160<!-- ************************** start of head_header ***********************--> 161<style> 162nav .navbar-brand img { 163height: 70px; /*!important*/ 164transition: all .25s ease-in-out; 165-webkit-transition: all .25s ease-in-out; 166} 167nav.shrink .navbar-brand img { 168height: 60px; /*!important*/ 169transition: all .25s ease-in-out; 170-webkit-transition: all .25s ease-in-out; 171} 172</style> 173<header class="header_default sticky "> 174<div class=" inside-header-container"> 175<div class=" inside-header-row"> 176<div class=" inside-header-col"> 177<div class="NavInfoBar"> 178<!-- woot navbar --> 179<div class="nav-info-bar pl-0 pr-0 pt-1 pb-1 mt-0 mb-0 noprint"> 180<div class="brand-not-info-bar-1"> 181<div class="brand-not-info-bar-2"> 182<div class="container pl-0 pr-0"> 183<div class="row m-0 pl-0 pr-0 align-items-center"> 184<div class="col-sm-5 iconset-list text-left pl-0"> 185<span class="iconset text1"> 186<a id="infobar_1" href="/" class="IBTextColorClass"> 187<i class="fa fa-home" aria-hidden="true" aria-label="home icon"></i> 188<span class="IBTextColorClass">WMCB-LP 107.9 FM</span> 189</a> 190</span> 191<span class="iconset text2"> 192<a id="infobar_2" href="/p/17/DONATE-to-WMCB-LP" class="IBTextColorClass"> 193<span class="">DONATE!</span> 194</a> 195</span> 196<span class="iconset text3"> 197<a id="infobar_3" target="_blank" href="https://gctv.org" class=""> 198<span class="">GCTV >></span> 199</a> 200</span> 201</div> 202<div class="col-sm-2 text-right"> 203<search class="center inline-block" style=""> 204<form method="get" action="/z/0/" class="sitesearch noprint mb-0" role="search" aria-label="search" class="inline-block" id="search" style=""> 205<div class="input-group" > 206<label for="term" class="sr-only" aria-label="Search">Search</label> 207<input title="Search Term" type="search" class="form-control" maxlength="30" name="term" id="term" placeholder="Search our website" value="" style="background:white!important;color:black!important;"> 208<span class="input-group-btn"> 209<button id="go" type="submit" aria-label="submit" class="btn btn-default black">Go!</button> 210</span> 211</div> 212<input type="hidden" name="module" value=""> 213</form> 214</search> 215</div> 216<div class="col-sm-5 pr-0 text-right"> 217<span class="iconset text5"> 218<a id="infobar_5" target="_blank" href="https://visitgreenfieldma.com/events/" class=""> 219<span class="">Local Events</span> 220</a> 221</span> 222<span class="iconset text6"> 223<span class="">Greenfield, MA</span> 224</span> 225<span class="iconset text7"> 226<span class="">413-475-3958</span> 227</span> 228<span class="iconset text8"> 229<a id="infobar_8" target="_blank" href="https://en.wikipedia.org/wiki/WMCB-LP" class=""> 230<span class="">W</span> 231</a> 232</span> 233<span class="social fa-size" style=""> 234<span class="text-info iconset"><a href="https://www.facebook.com/wmcbgreenfield/" target="_blank" alt="facebook"><i aria-label="facebook icon" class="fab fa-facebook"></i><span class="sr-only">facebook</span></a></span> 235</span> 236</div> 237</div> 238</div> 239</div> 240</div> 241</div> 242</div> 243<!-- start pagenav tag --> 244<nav id="navmainpageNavID2" class="navbar pagenav-dropdown navbar-expand-md 245pl-0 pr-0 pt-0 pb-0 mt-0 mb-0 ml-0 mr-0"> 246<div class="container pl-0 pr-0"> 247<a class="navbar-brand-img navbar-brand pt-0 pb-0 pl-2 pr-2 d-flex align-items-center" href="/"> 248<span class="brand-image"><img src="/header/wmcb-dial-no-text.png" alt="WMCB-LP logo radio dial" class="img-responsive mb-0 navbar-image mr-2" id="headerLogo"></span> 249</a> 250<button class="navbar-toggler navbar-dark" data-toggle="collapse" aria-label="Open Menu" data-target="#navbar-1"> 251<span class="navbar-toggler-icon navbar-dark"></span> 252</button> 253<div id="navbar-1" class="navbar-collapse collapse"> 254<!-- REALESTATE ERROR 161 Invalid object name 'custom_MLSPIN.dbo.mls_listing_all'.: --> 255<ul class='nav navbar-nav ml-auto'><li class='nav-item'> 256<!-- IMAGES!! --> 257<!-- no images drop-down --> 258</li><li class='dropdown nav-item'> 259<a id="menu_p16" 260class="nav-link dropdown-toggle" 261href="/p/16/About-WMCB-LP-1079-FM-Greenfield-MA"><span>About</span></a><!-- yo1 --> 262<!-- yo2 --> 263<!-- hello from pagenav! --> 264<!-- sub-nav start --> 265<!-- qsImagesCat.recordCount = 9 --> 266<div class='subnav_p16 dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'> 267<!-- hoohah 167 --> 268<!-- PAGES! --> 269<!-- hoohah 202 --> 270<!-- thecount = 1 --> 271<a id="menu_p18" 272href="/p/18/Become-a-DJ-at-WMCB"> 273<span>Become a DJ at WMCB</span> 274</a> 275<!-- thecount = 2 --> 276</li><li class='dropdown-item'> 277<a id="menu_p19" 278href="/psa"> 279<span>Send WMCB Your Audio PSA</span> 280</a> 281</li></ul></div> 282<!-- yo3 --> 283<!-- yo4 --> 284</li><li class='dropdown nav-item'> 285<a id="menu_b" 286class="nav-link dropdown-toggle" 287href="/businesses"><span>DJs</span></a> 288<div class='subnav_p[id] dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'> 289<a id="menu_b2" href="/b/0/2/Live-DJ-Shows-on-WMCB-LP"><span>Live DJ Shows on WMCB-LP (18)</span></a> 290</li><li class='dropdown-item'> 291<a id="menu_b4" href="/b/0/4/Local-Pre-recorded-Shows-for-WMCB-LP"><span>Local Pre-recorded Shows for WMCB-LP (12)</span></a> 292</li><li class='dropdown-item'> 293<a id="menu_b3" href="/b/0/3/Remote-Shows-Sent-to-WMCB-LP"><span>Remote Shows Sent to WMCB-LP (6)</span></a> 294</li><li class='dropdown-item'> 295<a id="menu_b7" href="/b/0/7/Special-Programs"><span>Special Programs (2)</span></a> 296</li><li class='dropdown-item'> 297<a id="menu_b8" href="/b/0/8/WMCB-Old-Shows-Archive"><span>WMCB Old Shows Archive (2)</span></a> 298</li></ul></div> 299</li><li class='dropdown nav-item'> 300<a id="menu_q" 301class="nav-link dropdown-toggle" 302href="/FAQ"><span>FAQs</span></a> 303<div class='subnav_p[id] dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'> 304<a id="menu_q6" href="/FAQ/6/DJ-Tips">DJ Tips</a> 305</li><li class='dropdown-item'> 306<a id="menu_q5" href="/FAQ/5/WMCB-LP-Station-FAQs">WMCB-LP Station FAQs</a> 307</li></ul></div> 308</li><li class='dropdown nav-item'> 309<a id="menu_x" 310class="nav-link dropdown-toggle" 311href="/forms"><span>Forms</span></a> 312<div class='subnav_p[id] dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'> 313<a id="menu_x8" href="/x/8/Corporate-Underwriting-Agreement">Corporate Underwriting Agreement</a> 314</li><li class='dropdown-item'> 315<a id="menu_x9" href="/x/9/Special-Event-Sponsorship-Agreement">Special Event Sponsorship Agreement</a> 316</li><li class='dropdown-item'> 317<a id="menu_x7" href="/x/7/Specific-Show-Sponsorship-Agreement">Specific Show Sponsorship Agreement</a> 318</li><li class='dropdown-item'> 319<a id="menu_x4" href="/x/4/WMCB-LP-DJ-Producer-Agreement">WMCB-LP DJ Producer Agreement</a> 320</li><li class='dropdown-item'> 321<a id="menu_x6" href="/x/6/WMCB-LP-Annual-DJ-Contract">WMCB-LP Annual DJ Contract</a> 322</li><li class='dropdown-item'>
323<a id="menu_x5" href="/x/5/WMCB-LP-Station-Indemnification-Form">WMCB-LP Station Indemnification Form</a> 324</li></ul></div> 325</li><li class='dropdown nav-item'> 326<a id="menu_n" 327class="nav-link dropdown-toggle" 328href="/news"><span>News</span></a> 329<div class='subnav_p[id] dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'> 330<a id="menu_n4" href="/news/4/Latest-WMCB-News">Latest WMCB News</a> 331</li><li class='dropdown-item'> 332<a id="menu_n5" href="/news/5/DJ-Scuttlebutt">DJ Scuttlebutt</a> 333</li><li class='dropdown-item'> 334<a id="menu_n6" href="/news/6/WMCB-News-Archive">WMCB News Archive</a> 335</li></ul></div> 336</li><li class='nav-item'> 337<a id="menu_c" 338class="nav-link" 339href="/contact"><span>Contact</span></a> 340</li></ul> 341</div><!-- /.nav-collapse --> 342</div> 343</nav> 344<!-- end pagenav tag --> 345</div> 346</div> 347</div> 348</header> 349<!-- ************************** end of header head ***********************--> 350<main> 351<!-- START PAGE DIV --> 352<div class="page b b23 " style=""> 353<div class="container maincontent"> 354<div class="row"> 355<div class="col-sm-12"> 356<section class="business container"> 357<h1 class="business"><span>Valley Post Radio</span></h1> 358<!-- HELLO FROM INSIDE FIGURE --> 359<figure 360class="pos-rel figure col-xs-12 col-sm-6 col-md-5" 361style="float:right; margin:0 0 10px 10px;padding:0px;text-align:center;"> 362<!-- call image --> 363<!-- hello from inside figure_image --> 364<div class="business_image "> 365<!-- hoohah 4 --> 366<!-- yes --> 367<img id="topImg" 368class="business img-responsive img-fluid figure-img rf-image-dropzone" 369style="margin:0 auto; border:0; box-shadow:0px 0px 0px #ffffff; border-radius:10px;" 370src="/business/business_23_small.jpg?20260317115451" 371alt="Eesha Williams, valley Post Radio"> 372<!-- hoohah 34 --> 373</div> 374<!-- goodbye from inside figure_image --> 375</figure> 376<div id="myModal" class="modal-img" style="display:none;"> 377<div class="modal-img-container"> 378<span class="close"><i class="fas fa-times-circle"></i></span> 379<img class="modal-content" id="img01" alt="Eesha Williams, valley Post Radio"> 380</div> 381</div> 382<style> 383img.page:hover { cursor: pointer; } 384</style> 385<!-- ======== File robot modals / scripts ======== -->
386<script> 387// Get the modal 388var modal = document.getElementById('myModal'); 389// Set Parameters for image and generate image src 390var imgParam = { name: 'business_', imgID: '23', size: 'large', fileType: 'jpg' }; 391console.log('imgParam', imgParam); 392var imageChange = '/business/' + imgParam.name + imgParam.imgID + '_' + imgParam.size + '.' + imgParam.fileType; 393// Get the image and insert it inside the modal - use its "alt" text as a caption 394var img = document.getElementById('topImg'); 395var modalImg = document.getElementById("img01"); 396// onClick display modal 397if (img) { 398img.onclick = function () { 399console.log('[DEBUG] Image clicked. - ' + imageChange); 400modal.classList.add('modalFadeImg'); 401modalImg.src = this.innerHTML = imageChange; 402// modalImg.onerror = function(event) { 403// console.log(event); 404// modalImg.src = this.innerHTML = '/business/' + imgParam.name + '_' + imgParam.imgID + '_' + 'large' + '.' + imgParam.fileType; 405// } 406} 407}; 408// Get the <span> element that closes the modal 409var span = document.getElementsByClassName("close")[0]; 410//close the modal 411if(span) { 412span.onclick = function () { 413modal.classList.remove('modalFadeImg'); 414} 415}; 416if(modal) { 417modal.onclick = function() { 418modal.classList.remove('modalFadeImg'); 419} 420}; 421</script>
421 422<!-- GOODBYE FROM INSIDE FIGURE --> 423<p class="address">Dummerston, VT </p> 424<p class="biz-contact"> 425<span class="contactname">Eesha Williams</span> 426</p> 427<p class="biz-contact"> 428Links: 429<span class="website"><a href="https://www.valleypost.org/" target="_blank">website</a></span> 430</p> 431<p class="description"><em>Valley Post Radio covers news from the Pioneer Valley and Brattleboro. Host Eesha Williams is an award-winning journalist and author.</em></p> 432<p> 433<a class="btn btn-default" href="/contact?cc=b.23">contact</a> 434</p> 435<p class="links"><a href="/b/0/3/Remote-Shows-Sent-to-WMCB-LP">Remote Shows Sent to WMCB-LP</a></p> 436</section> 437</div> 438</div> 439</div> 440</div> 441<!-- END PAGE DIV --> 442<div class="lowercontent"> 443<!-- START PAGE SECTIONS --> 444<!-- inside page sections --> 445<!-- this is NOT a p (62) --> 446<!-- canview = 1 (83) --> 447<!-- END PAGE SECTIONS --> 448</div> 449</main> 450<footer> 451<div class="footer_default noprint"> 452<div id="footer" class="container"> 453<div class="footerO row pt-2"> 454<!-- starting from 1 --> 455<!-- this is c: 1 --> 456<div class="col-sm-12 col-md-4 text-center" id="footerRow1"> 457<!-- listfind(attributes.staticPageCol,'col1') --> 458<!-- yes --> 459<div class="static footer-defaultcol1"> 460<!-- from var application.static.footer_defaultcol1 --> 461</div> 462<!-- attributes.footerSocialCol eq 'col1' --> 463<!-- attributes.footerNavCol eq 'col1' --> 464<!-- yes --> 465<!-- hello from pagenav! --> 466<!-- SHOW PARENT = 0 --> 467<!-- qsImagesCat.recordCount = 9 --> 468<ul><li> 469<!-- hoohah 167 --> 470<!-- PAGES! --> 471<!-- hoohah 202 --> 472<!-- thecount = 1 --> 473<a id="menu_p16" 474href="/p/16/About-WMCB-LP-1079-FM-Greenfield-MA"> 475<span>About</span> 476</a> 477</li><li><a id="menu_d" 478title="DJs" 479class="active" 480href="/business"><span>DJs</span></a> 481</li><li><a id="menu_f" 482title="FAQs" 483href="/FAQ"><span>FAQs</span></a> 484</li><li><a id="menu_n" 485title="News" 486href="/news"><span>News</span></a> 487</li><li><a id="menu_x" 488title="Forms" 489href="/forms"><span>Forms</span></a> 490</li><li><a id="menu_c" 491title="Contact" 492href="/contact"><span>Contact</span></a> 493</li></ul> 494<!-- attributes.footerShowSearchCol eq 'col1' --> 495<!-- attributes.loginCol eq 'col1' --> 496</div> 497<!-- this is c: 2 --> 498<div class="col-sm-12 col-md-4 text-center" id="footerRow2"> 499<!-- listfind(attributes.staticPageCol,'col2') --> 500<!-- yes --> 501<div class="static footer-defaultcol2"> 502<!-- from var application.static.footer_defaultcol2 --> 503<p style="text-align: justify;">At a time when corporate media severely limits the range of information, opinion, music and cultural programming available, WMCB-LP radio intends to provide a broadcast voice to the diverse and culturally rich community of Franklin County, MA, through the operation of a volunteer-based, low-power FM and internet streaming radio station.</p> 504<p style="text-align: justify;"><a href="/p/16/About-WMCB-LP-1079-FM-Greenfield-MA">Read more about WMCB-LP.</a></p> 505</div> 506<!-- attributes.footerSocialCol eq 'col2' --> 507<!-- attributes.footerNavCol eq 'col2' --> 508<!-- attributes.footerShowSearchCol eq 'col2' --> 509<!-- attributes.loginCol eq 'col2' --> 510</div> 511<!-- this is c: 3 --> 512<div class="col-sm-12 col-md-4 text-center" id="footerRow3"> 513<!-- listfind(attributes.staticPageCol,'col3') --> 514<!-- yes --> 515<div class="static footer-defaultcol3"> 516<!-- from var application.static.footer_defaultcol3 --> 517<p><strong>WMCB-LP, 107.9FM Community Radio for Greenfield, MA</strong></p> 518<p>A project of <a href="https://GCTV.org" target="_blank">GCTV</a></p> 519<p>393 Main Street, Greenfield, MA 01301</p> 520<p><strong><a href="tel:413-475-3958">413-475-3958</a></strong></p> 521<p><a href="/contact"><strong>Email Us</strong></a></p> 522</div> 523<!-- attributes.footerSocialCol eq 'col3' --> 524<!-- yes --> 525<span class="social fa-size" style=""> 526<span class="text-info iconset"><a href="https://www.facebook.com/wmcbgreenfield/" target="_blank" alt="facebook"><i aria-label="facebook icon" class="fab fa-facebook"></i><span class="sr-only">facebook</span></a></span> 527</span> 528<!-- attributes.footerNavCol eq 'col3' --> 529<!-- attributes.footerShowSearchCol eq 'col3' --> 530<!-- attributes.loginCol eq 'col3' --> 531</div> 532</div> 533</div> 534</div> 535<div id="lowerFooter" class="text-center"> 536<div id="footer"> 537<span class="footerO"> 538<span class="footerL"> 539© 2026 WMCB-LP, 107.9FM Community Radio for Greenfield, MA 540| 541Site by <a href=http://MontagueWebWorks.com target=_blank>Montague WebWorks</a> 542</span> 543<span class="footerM"> 544| 545</span> 546<span class="footerR">
547<a href="https://RocketFusion.com" target="_blank">Powered by RocketFusion 123</a> 548</span> 549</span> 550</div> 551<span class="login-link"> 552<a class="login noprint p-3" href="" style="cursor:pointer;" rel="nofollow" aria-label="log in" data-toggle="modal" data-target="#Login" data-remote="/inc/divLogin.cfm?edit=Login">Admin Login</a> 553<div class="modal fade" id="Login" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"></div></div></div></div> 554</span> 555</div> 556</footer> 557<!-- BS4 Init --> 558<div class="modal fade" id="reserve" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-body"></div></div></div><div id="load-res" class="loading-reserve d-none"></div></div>
559<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
vendor: 1 bytes, line 559
559
560<script type="text/javascript" src="https://scaleflex.cloudimg.io/v7/plugins/filerobot-image-editor/latest/filerobot-image-editor.min.js?func=proxy"></script>
vendor: 1 bytes, line 560
560
561<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script>
vendor: 1 bytes, line 561
561
562<script> 563// Assuming we have a div with id="editor_container" 564const filerobotImageEditor = new window.FilerobotImageEditor( 565document.querySelector("#rf-image-editor-edit") 566); 567const image_file_upload = document.getElementById("rf-image-upload"); 568// const btn_image_upload_edit = document.getElementById("btn-image-upload-edit"); 569var source_image = ''; // the HTMLImageElement 570var save_image_name = ''; // name to save image with 571var global_fr_folder = ''; // where to upload 572var global_fr_table = ''; // db table to update 573var global_fr_prefix = ''; // image file prefix, ie; blocks_ 574var global_fr_pid = 0; // image ID, ie; blocks_2323 575var dropzone_website_dir = 'WMCB.net\\httpdocs'; 576const file_robot_defaults = { 577save_image_quality : 1, // 0.1 - 1 (default 0.92) - applies to jpeg, jpg and webp images only 578}; 579function renderFileRobotEditor(source,fr_folder=global_fr_folder,fr_table=global_fr_table,fr_prefix=global_fr_prefix,fr_pid=global_fr_pid) { 580console.group("renderFileRobotEditor() called"); 581console.log('source:', source); 582console.log('fr_folder:', fr_folder); 583console.log('fr_table:', fr_table); 584console.log('fr_prefix:', fr_prefix); 585console.log('fr_pid:', fr_pid); 586console.groupEnd(); 587source_image = source; 588filerobotImageEditor.render({ 589source: source_image, 590useBackendTranslations: false, 591defaultSavedImageName: save_image_name, 592defaultSavedImageQuality: file_robot_defaults.save_image_quality, 593tabsIds: [ 594window.FilerobotImageEditor.TABS.ADJUST, 595window.FilerobotImageEditor.TABS.FINETUNE, 596window.FilerobotImageEditor.TABS.FILTERS, 597window.FilerobotImageEditor.TABS.ANNOTATE, 598window.FilerobotImageEditor.TABS.WATERMARK], // or ['Adjust', 'Annotate', 'Watermark'] 599defaultTabId: window.FilerobotImageEditor.TABS.ADJUST, 600Crop: { 601minWidth: 14, 602minHeight: 14, 603maxWidth: null, 604maxHeight: null, 605ratio: 'custom', 606ratioTitleKey: 'custom', 607noPresets: false, 608autoResize: false, 609presetsItems: [], 610presetsFolders: [], 611lockCropAreaAt: null, // 'top-left' 612}, 613// disable save modal 614onBeforeSave: () => { 615return false; 616}, 617onSave: async (imageInfo, designState) => { 618// console.log('onSave() imageInfo', imageInfo); 619// console.log('onSave() designState', designState); 620// create formData object to populate and send with fetch request 621const formData = new FormData(); 622formData.append('image64', imageInfo.imageBase64); 623formData.append('image_extension', imageInfo.extension); 624formData.append('image_height', imageInfo.height); 625formData.append('image_name', imageInfo.name); 626formData.append('image_name_with_extension', imageInfo.fullName); 627formData.append('image_quality', imageInfo.quality); 628formData.append('image_width', imageInfo.width); 629formData.append('dropzone_website_dir', dropzone_website_dir); // e.g. MikMuller.com\httpdocs 630formData.append('rf_dropzone_dir', fr_folder); 631console.log('onSave() formData [2]', formData); 632// add dropzone options for compatibility with current upload script 633const drop_zone_options = { 634tbl: fr_table, 635imgbase: `${fr_prefix}${fr_pid}`, 636imgname: imageInfo.fullName, 637id: fr_pid 638} 639formData.append("dropzone_options", JSON.stringify(drop_zone_options)); 640console.log('onSave() drop_zone_options', drop_zone_options); 641try { 642// _dropzone-file-upload-ajax.cfm 643// _upload-base64.cfm (for testing) 644console.log('renderFileRobotEditor.onSave() imageInfo', imageInfo); 645const upload_request = await fetch('/inc/_dropzone-file-upload-ajax.cfm', { 646method: 'POST', 647body: formData 648}); 649const upload_result = await upload_request.json(); 650// console.log('DEBUG: [onSave] upload_result', upload_result); 651// close modal 652$('#rfImageModalEdit').modal('hide'); 653// page reload 654window.location.reload(); 655} catch (error) { 656console.log('onSave() error', error); 657const upload_result = { 658code: 1, 659message: error.message, 660success: false 661} 662} 663}, 664onClose: (closingReason) => { 665console.log("Closing reason", closingReason); 666filerobotImageEditor.terminate(); 667// reset the input field 668document.getElementById('rf-image-upload').value = ''; 669}, 670}); 671} 672/** 673* Function to handle image selection from the file input field 674* async as we use a promise to await image load 675*/ 676async function onImageSelected(event, file_obj, fr_folder, fr_table, fr_prefix, fr_pid) { 677let file; 678if (file_obj) { 679console.log('onImageSelected file_obj', file_obj, fr_folder, fr_table, fr_prefix, fr_pid); 680file = file_obj; 681} else { 682file = event.target.files[0]; 683} 684save_image_name = file.name; 685console.log('onImageSelected file', file); 686// const reader = new FileReader(); 687const image = new Image(); 688const img_max_width = 1600; 689image.src = URL.createObjectURL(file); 690// Promise to await image load 691await new Promise((resolve) => { 692image.onload = () => { 693const img_width = image.width; 694const img_height = image.height; 695// console.log('onImageSelected img load', img_width, img_height); 696if (img_width > img_max_width) { 697const img_scale = img_max_width / img_width;
698image.width = img_width * img_scale; 699image.height = img_height * img_scale; 700} 701// resolve the promise 702resolve(); 703}; 704}); 705// open the modal 706$('#rfImageModalEdit').modal('show'); 707// Render file robot 708renderFileRobotEditor(image, fr_folder, fr_table, fr_prefix, fr_pid); 709} 710/** Function to handle image editing */ 711function editExistingImage(image_url, image_name, fr_folder=global_fr_folder, fr_table=global_fr_table, fr_prefix=global_fr_prefix, fr_pid=global_fr_pid) { 712console.log('[DEBUG] editExistingImage() called.'); 713console.log('image_url:', image_url); 714console.log('image_name:', image_name); 715console.log('fr_folder:', fr_folder); 716console.log('fr_table:', fr_table); 717console.log('fr_prefix:', fr_prefix); 718console.log('fr_pid:', fr_pid); 719save_image_name = image_name; 720renderFileRobotEditor(image_url, fr_folder, fr_table, fr_prefix, fr_pid); 721} 722/** Function to open the hidden input file field */ 723function openFileInput(fr_folder='', fr_table='', fr_prefix='', fr_pid=0) { 724console.log('[DEBUG] openFileInput() called.', fr_folder, fr_table, fr_prefix, fr_pid); 725global_fr_folder = fr_folder; // where to upload 726global_fr_table = fr_table; // db table to update 727global_fr_prefix = fr_prefix; // image file prefix, ie; blocks_ 728global_fr_pid = fr_pid; 729image_file_upload.click(); 730} 731/** Function to open RF File Manager in a modal 732* Will be used by ckeditor/plugins/rffilemanager/browse.cfm 733* Need the image full url to make a copy of for ai images 734*/ 735function openRFFileManager(current_image_url, fr_folder=global_fr_folder, fr_table=global_fr_table, fr_prefix=global_fr_prefix, fr_pid=global_fr_pid) { 736// $($(this).data( "target" ) + ' .modal-body').load( data_remote ); 737console.group("bs4_init openRFFileManager() called"); 738console.log("current_image_url:", current_image_url); 739console.log("fr_folder:", fr_folder); 740console.log("fr_table:", fr_table); 741console.log("fr_prefix:", fr_prefix); 742console.log("fr_pid:", fr_pid); 743console.groupEnd(); 744const rfFileManagerModalIframe = document.getElementById('rfFileManagerModalIframe'); 745rfFileManagerModalIframe.src = `/ckeditor/plugins/rffilemanager/browse.cfm?CKEditor=editor1&CKEditorFuncNum=1&langCode=en&direct=true&rf_website_dir=${fr_folder}&pid=` + fr_pid + `&image_url=` + encodeURIComponent(current_image_url) + `&page_parent_directory=${fr_folder}&image_prefix=${fr_prefix}&image_table=${fr_table}`; ; 746$('#rfFileManagerModal').modal('show'); 747} 748/** Function to close the RF File Manager modal 749* Will be used by ckeditor/plugins/rffilemanager/browse.cfm 750* Need to upload the image and then close the modal 751*/ 752function closeRFFileManagerModal(image_path, img_name='', fr_folder='', fr_table='', fr_prefix='', fr_pid=0) { 753console.group("bs4_init closeRFFileManagerModal() called"); 754console.log("image_path:",image_path); 755console.log("img_name:",img_name); 756console.log("fr_folder:",fr_folder); 757console.log("fr_table:",fr_table); 758console.log("fr_prefix:",fr_prefix); 759console.log("fr_pid:",fr_pid); 760console.groupEnd(); 761$('#rfFileManagerModal').modal('hide'); 762$('#rfImageModalEdit').modal('show'); 763save_image_name = img_name; 764// renderFileRobotEditor(image_path); 765renderFileRobotEditor(image_path, fr_folder, fr_table, fr_prefix, fr_pid); 766} 767/** Function to close the RF File Manager modal without opening File Robot 768* Will be used by ckeditor/plugins/rffilemanager/browse.cfm 769*/ 770function closeRFFileManagerModalOnly(reload=false) { 771$('#rfFileManagerModal').modal('hide');
772if (reload) { 773setTimeout(() => { 774window.location.reload(); 775}, 500); 776} 777} 778// Handle closing of modal without saving (must cleanup file robot editor) 779$('#rfImageModalEdit').on('hidden.bs.modal', function (event) { 780// console.log('modal closed'); 781filerobotImageEditor.terminate(); 782image_file_upload.value = ''; 783}); 784/** Rocketfusion - enable drag/drop zone on an image with the .rf-image-dropzone class */ 785// Create dropzone object for all images with the .rf-image-dropzone class 786const rf_image_drop_zone = document.querySelectorAll('.rf-image-dropzone'); 787// Attach event listeners to all instances of rf_image_drop_zone 788rf_image_drop_zone.forEach(function (i) { 789// Handle drag over event 790i.addEventListener('dragover', function(e) { 791event.target.classList.add('image-dragover'); 792dragOverHandler(e); 793}); 794// Handle drag leave event 795i.addEventListener('dragleave', function(e) { 796// console.log('Image dropzone dragleave'); 797event.target.classList.remove('image-dragover'); 798}); 799// Handle drop event 800i.addEventListener('drop', function(e) { 801event.target.classList.remove('image-dragover'); 802dropHandler(e); 803}); 804}); 805/** 806* Handles the drop event of files in the drop zone. 807* Prevents the default behavior of opening the file and logs the names of the dropped files. 808* 809* @param {Event} ev - The drop event. 810* @returns {undefined} 811*/ 812function dropHandler(ev) { 813// console.log('File(s) dropped'); 814// Prevent default behavior (Prevent file from being opened) 815ev.preventDefault(); 816if (ev.dataTransfer.items) { 817// Use DataTransferItemList interface to access the file(s) 818[...ev.dataTransfer.items].forEach((item, i) => { 819// If dropped items aren't files, reject them 820if (item.kind === 'file') { 821const file = item.getAsFile(); 822console.log(`file[${i}].name = ${file.name}`); 823onImageSelected(i, file); 824} 825}); 826} else { 827// Use DataTransfer interface to access the file(s) 828[...ev.dataTransfer.files].forEach((file, i) => { 829console.log(`file[${i}].name = ${file.name}`); 830onImageSelected(i, file); 831}); 832} 833} 834/** 835* Handles the drag over event of files in the drop zone. 836* Prevents the default behavior of opening the file. 837* 838* @param {Event} ev - The drag over event. 839* @returns {undefined} 840*/ 841function dragOverHandler(ev) { 842// Prevent default behavior (Prevent file from being opened) 843ev.preventDefault(); 844} 845</script>
845 846<style> 847.modal-fullscreen { 848width: 100vw; 849max-width: none; 850height: 100%; 851margin: 0; 852} 853.modal-content { 854height: 100%; 855border: 0; 856@include border-radius(0); 857} 858.modal-body { 859overflow-y: auto; 860} 861.image-dragover { 862opacity: 0.5; 863} 864</style>
865<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
vendor: 1 bytes, line 865
865
866<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
vendor: 1 bytes, line 866
866
867<script>$(window).scroll(function() { if ($(document).scrollTop() > 50) { $('nav').addClass('shrink'); } else { $('nav').removeClass('shrink'); } }); </script>
vendor: 1 bytes, line 867
867
868<script type="text/javascript" src="/RFAssets/js/joey.js?ver=20260911135257" charset="UTF-8"></script>
vendor: 1 bytes, line 868
868
869<script type="text/javascript"> 870$( 'body' ).on( 'click', '[data-toggle="modal"]', function(){ 871let data_remote = $(this).data( "remote" ); 872if ( data_remote && data_remote.length >= 2 ) { 873$($(this).data( "target" ) + ' .modal-content').load( data_remote ); 874} 875}); 876</script>
vendor: 1 bytes, line 876
876
877<script> 878$(document).ready(function() { 879//$('nav').animate({opacity:'1'}, 50);<!-- set to 0.25 to make see thru --> 880//$(img).animate({opacity:'1'}); 881$initNavHgt = $('nav').outerHeight(); 882$initHeadLogoHgt = $('#headerLogo').outerHeight(); 883}); 884</script>
884 885<!-- no userway account --> 886</body> 887</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.