PageSourceSearch

https://wmcb.net/b/23/Valley-Post-Radio

html wmcb.net collected 2026-09-26 01:12:19 UTC 36,119 bytes, 887 lines download raw bytes

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&copy; 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.