PageSourceSearch

https://masportsmen.org/contact

html masportsmen.org collected 2026-10-08 21:15:14 UTC 33,610 bytes, 851 lines download raw bytes

1<!DOCTYPE html>
2<html>
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: Mass Sportsmen's Council
11-->
12<!-- ================================================================================================================= -->
13<!-- Title and App Tags -->
14<!-- 20260930205701 -->
15<title>Contact - Mass Sportsmen's Council</title>
16<meta property="og:title" content="Contact">
17<meta property="twitter:title" content="Contact - Mass Sportsmen's Council">
18<meta itemprop="name" content="Contact - Mass Sportsmen's Council">
19<!-- safari -->
20<meta name="apple-mobile-web-app-title" content="Contact - Mass Sportsmen's Council">
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="Contact - Mass Sportsmen's Council">
27<meta name="msapplication-tooltip" content="Contact - Mass Sportsmen's Council">
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<!-- no google fonts -->
37<meta name="theme-color" content="white" />
38<meta name="Language" content="en" />
39<meta name="apple-mobile-web-app-status-bar-style" content="black" />
40<meta name="verify-v1" content=" " />
41<meta name="source" content="exists" />
42<meta name="geo.placename" content="Rockland" />
43<meta name="google-site-verification" content=" " />
44<meta name="p:domain_verify" content=" " />
45<meta name="geo.position" content="" />
46<meta name="msapplication-TileColor" content="white" />
47<meta name="last-modified" content="2026-06-06" />
48<meta name="geo.region" content="US-MA" />
49<meta name="msvalidate.01" content=" " />
50<!-- no Facebook Pixel ID -->
51<meta name="author" content="Mass Sportsmen's Council" />
52<meta name="owner" content="Mass Sportsmen's Council" />
53<meta name="copyright" content="Copyright 2026 Mass Sportsmen's Council" />
54<meta name="expires" content="Oct 8, 2026">
55<meta name="generator" content="RocketFusion CMS" />
56<meta name="Robots" content="noodp,noydir" />
57<meta name="slurp" content="noydir" />
58<meta name="googlebot" content="noodp" />
59<meta name="msnbot" content="noodp" />
60<meta name="MSSmartTagsPreventParsing" content="TRUE" /><!-- stops MS browsers from adding parsed keyword advertising on websites -->
61<meta name="viewport" content="width=device-width, initial-scale=1"><!-- , maximum-scale=1 -->
62<meta property="og:site_name" content="Mass Sportsmen's Council">
63<meta property="og:type" content="website" />
vendor: 77 bytes, lines 63-64
63
64<script src="https://www.google.com/recaptcha/api.js" async defer></script>
65<!-- ================================================================================================================= -->
66<!-- FAVICONS start -->
67<!-- favicon info -->
68<link rel="shortcut icon" href="/favicon.ico" />
69<link rel="icon" href="/favicon.ico" type="image/x-icon" />
70<link rel="apple-touch-icon" href="/favicon.ico">
71<meta name="msapplication-TileImage" content="/favicon.ico">
72<link rel="manifest" href="/icons/manifest.json">
73<meta name="apple-mobile-web-app-status-bar-style" content="black">
74<meta name="msapplication-TileColor" content="white">
75<meta name="theme-color" content="white">
76<!-- MS Application Tasks (off for now) -->
77<!-- FAVICONS end -->
78<!-- this is the contact page -->
79<meta property="og:url" content="/contact">
80<link rel="canonical" href="/contact">
81<meta itemprop="image" content="/library/logo.png">
82<meta property="og:image" content="/library/logo.png">
83<meta property="twitter:image" content="/library/logo.png">
84<link rel="image_src" href="/library/logo.png">
85<meta property="og:image:alt" content="Contact">
86<meta name="description" content="Mass Sportsmen's Council">
87<meta itemprop="description" content="Mass Sportsmen's Council">
88<meta property="og:description" content="Mass Sportsmen's Council">
89<meta property="twitter:description" content="Mass Sportsmen's Council">
90<!-- ================================================================================================================= -->
91<script src="https://kit.fontawesome.com/d3bffd01a6.js" crossorigin="anonymous"></script>
91
92<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
93<link rel="stylesheet" href="/RFassets/css/datatables-bs4.min.css">
94<link rel="stylesheet" href="/RFAssets/css/RFtables.css?ver=20260930205701">
95<link rel="stylesheet" href="/RFAssets/css/joey.css?ver=20260930205701">
96<link rel="stylesheet" href="/site_style.css?ver=20260930205701">
97<link rel="stylesheet" href="/header_style.css?ver=20260930205701">
98<link rel="stylesheet" href="/RFAssets/css/_admin.css?ver=20260930205701">
99<!-- custom stylesheet -->
100<link rel="stylesheet" href="/tmpl_TMPL01.css?ver=20260930205701">
101<script src="/RFAssets/js/boxover.js" type="text/javascript"></script>
vendor: 1 bytes, line 101
101
102<script type="text/javascript">
103function toggleLayer(whichLayer,what) {
104if (document.getElementById)
105{
106var style2 = document.getElementById(whichLayer).style;
107style2.display = what;
108}
109else if (document.all)
110{
111var style2 = document.all[whichLayer].style;
112style2.display = what;
113}
114else if (document.layers)
115{
116var style2 = document.layers[whichLayer].style;
117style2.display = what;
118}
119}
120function toggleCheckbox(source) {
121checkboxes = document.getElementsByName('file_delete');
122for(var i=0, n=checkboxes.length;i<n;i++) {
123checkboxes[i].checked = source.checked;
124}
125}
126</script>
126
127<!-- No text_Google_Analytics_account defined -->
128<!-- No text_Google_Tag_Manager_ID defined -->
129<!-- end of metatags -->
130</head>
131<body class="notMobile"
132id="default">
133<!-- THESE ARE HERE (ADMIN) BECAUSE THEY NEED TO BE AT THE TOP OF THE BODY, NOT IN THE META TAGS -->
134<!-- No text_Google_Tag_Manager_ID defined -->
135<div id="nav-container" class="nav-off">
136<!-- NAVBAR WITH RESPONSIVE TOGGLE -->
137<!-- start pagenav tag -->
138<style>
139#navmainmain *, #navmainmain1 *, #navBarContainer {
140color: dark!important;
141background-color :dark!important; 
142}
143</style>
144<nav style="position:sticky;top:0;z-index:2000;" id="navmainmain" class="navbar pagenav-dropdown navbar-expand-md pl-0 pr-0 pt-0 pb-0 mt-0 mb-0">
145<div class="container">
146<!-- no title bar -->
147<a class="navbar-brand" href="/"><img src='/site/logo.png' />.</a>
148<button class="navbar-toggler navbar-dark" data-toggle="collapse" aria-label="Open Menu" data-target="#navbar-1">
149<span class="navbar-toggler-icon"></span>
150</button>
151<div id="navbar-1" class="navbar-collapse collapse">
152<!-- REALESTATE ERROR 161 Invalid object name 'custom_MLSPIN.dbo.mls_listing_all'.: -->
153<ul class='nav navbar-nav ml-auto'><li class='nav-item'>
154<a id="menu_i"
155class="nav-link"
156href="/gallery/4/0/">
157<span>Photos</span>
158</a>
159</li><li class='nav-item'>
160<a id="menu_p15"
161class="nav-link"
162href="/p/15/Legislation-Watch"><span>Legislation</span></a>
163</li><li class='nav-item'>
164<a id="menu_p16"
165class="nav-link"
166href="/p/16/MSC-Members"><span>Members</span></a>
167</li><li class='nav-item'>
168<a id="menu_p17"
169class="nav-link"
170href="/p/17/Links-and-Resources"><span>Links</span></a>
171</li><li class='nav-item'>
172<a id="menu_p18"
173class="nav-link"
174href="/p/18/Some-Council-Accomplishments"><span>Accomplishments</span></a>
175</li><li class='dropdown nav-item'>
176<a id="menu_d"
177class="nav-link"
178href="/calendar"><span>Calendar</span></a>
179</li><li class='dropdown nav-item'>
180<a id="menu_f"
181class="nav-link dropdown-toggle"
182href="/files"><span>Files</span></a>
183<div class='dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'>
184<a id="menu_q6" href="/f/0/6/Legislative-Documents">Legislative Documents</a>
185</li><li class='dropdown-item'>
186<a id="menu_q4" href="/f/0/4/Meeting-Minutes">Meeting Minutes</a>
187</li><li class='dropdown-item'>
188<a id="menu_q7" href="/f/0/7/MSC-Awards">MSC Awards</a>
189</li><li class='dropdown-item'>
190<a id="menu_q5" href="/f/0/5/Posters-and-Fliers">Posters and Fliers</a>
191</li></ul></div>
192</li><li class='nav-item'>
193<a id="menu_n"
194class="nav-link"
195href="/news"><span>News</span></a>
196</li><li class='nav-item'>
197<a id="menu_c"
198class="nav-link"
199href="/contact"><span>Contact</span></a>
200</li></ul>
201</div><!-- /.nav-collapse -->
202</div>
203</nav>
204<!-- end pagenav tag -->
205</div>
206<header class="head-h">
207<section class="bg-dark text-light head-h-c">
208<div class="container">
209<ul class="list-inline p-1 m-0">
210<li class="list-inline-item">P.O. Box 462,</li>
211<li class="list-inline-item">Rockland, MA 02370</li>
212<li class="list-inline-item">Phone: <a href="tel:+1-339-788-3612">339-788-3612</a></li>
213</ul>
214</div>
215</section>
216<!-- start pagenav tag -->
217<style>
218#navmainmain *, #navmainmain1 *, #navBarContainer {
219color: dark!important;
220background-color :dark!important; 
221}
222</style>
223<nav style="position:sticky;top:0;z-index:2000;" id="navmainmain" class="navbar pagenav-dropdown navbar-expand-md pl-0 pr-0 pt-0 pb-0 mt-0 mb-0">
224<div class="container">
225<!-- no title bar -->
226<a class="navbar-brand" href="/"><img src='/site/logo.png' /></a>
227<button class="navbar-toggler navbar-dark" data-toggle="collapse" aria-label="Open Menu" data-target="#navbar-1">
228<span class="navbar-toggler-icon"></span>
229</button>
230<div id="navbar-1" class="navbar-collapse collapse">
231<!-- REALESTATE ERROR 161 Invalid object name 'custom_MLSPIN.dbo.mls_listing_all'.: -->
232<ul class='nav navbar-nav ml-auto'><li class='nav-item'>
233<a id="menu_i"
234class="nav-link"
235href="/gallery/4/0/">
236<span>Photos</span>
237</a>
238</li><li class='nav-item'>
239<a id="menu_p15"
240class="nav-link"
241href="/p/15/Legislation-Watch"><span>Legislation</span></a>
242</li><li class='nav-item'>
243<a id="menu_p16"
244class="nav-link"
245href="/p/16/MSC-Members"><span>Members</span></a>
246</li><li class='nav-item'>
247<a id="menu_p17"
248class="nav-link"
249href="/p/17/Links-and-Resources"><span>Links</span></a>
250</li><li class='nav-item'>
251<a id="menu_p18"
252class="nav-link"
253href="/p/18/Some-Council-Accomplishments"><span>Accomplishments</span></a>
254</li><li class='dropdown nav-item'>
255<a id="menu_d"
256class="nav-link"
257href="/calendar"><span>Calendar</span></a>
258</li><li class='dropdown nav-item'>
259<a id="menu_f"
260class="nav-link dropdown-toggle"
261href="/files"><span>Files</span></a>
262<div class='dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'>
263<a id="menu_q6" href="/f/0/6/Legislative-Documents">Legislative Documents</a>
264</li><li class='dropdown-item'>
265<a id="menu_q4" href="/f/0/4/Meeting-Minutes">Meeting Minutes</a>
266</li><li class='dropdown-item'>
267<a id="menu_q7" href="/f/0/7/MSC-Awards">MSC Awards</a>
268</li><li class='dropdown-item'>
269<a id="menu_q5" href="/f/0/5/Posters-and-Fliers">Posters and Fliers</a>
270</li></ul></div>
271</li><li class='nav-item'>
272<a id="menu_n"
273class="nav-link"
274href="/news"><span>News</span></a>
275</li><li class='nav-item'>
276<a id="menu_c"
277class="nav-link"
278href="/contact"><span>Contact</span></a>
279</li></ul>
280</div><!-- /.nav-collapse -->
281</div>
282</nav>
283<!-- end pagenav tag -->
284</header>
285<!-- Jumbo -->
286<section id="hero-d" class="jumbotron jumbotron-d">
287<div class="jumbo-d-content">
288</div>
289</section>
290<!-- Content/Footer -->
291<main id="main-d" class="pt-5">
292<section id="content-d" class="content-d content">
293<main>
294<!-- START PAGE DIV -->
295<div class="page c c0 " style="">
296<div class="container maincontent">
297<div class="row">
298<div class="col-sm-12">
299<h1 class="contact page"><span>Contact</span></h1>
300<h3>
300<strong class="textownername">Mass Sportsmen's Council</strong></h3>
301<span class="social fa-size" style="float:right;font-size:2em">
302</span>
303<p>
304<p>P.O. Box 462, Rockland, MA 02370 -- <strong>(339) 788-3612</strong></p>
305<ul>
306<li>President -- <a href="mailto:[email protected]">John Kellstrand</a></li>
307<li>Vice President -- <a href="mailto:[email protected]">D</a><a href="mailto:[email protected]">avid Harbison</a></li>
308<li>Secretary -- <a href="mailto:[email protected]">Peter Bernard</a></li>
309</ul>
310</p>
311<span class="contactIntro">
312<p>To get in touch with us via email, please fill out the form below:</p>
313</span>
314<form action="/action.cfm?p=c.add" method="post" role="form">
315<input type="hidden" name="cc" value="">
316<input type="hidden" name="cc_email" value="">
317<input type="hidden" name="include" value="contact">
318<input type="hidden" name="run" value="1">
319<input type="hidden" name="referer" value="">
320<input type="hidden" name="site" value="http://masportsmen.org">
321<input type="Hidden" name="fu" value="%(U>RU,">
322<input type="Hidden" name="fullform" value="1">
323<div class="form-group">
324<label for="email">Your Email: (required)</label>
325<input type="text" name="email" id="email" class="email form-control" placeholder="Your email address" required="yes">
326</div>
327<div class="form-group">
328<label for="Name">Your Name:</label>
329<input type="Text" name="Name" id="Name" class="Name form-control" maxlength="250">
330</div>
331<div class="form-group">
332<label for="City">Your City:</label>
333<input type="Text" name="City" id="City" class="City form-control" maxlength="250">
334</div>
335<div class="form-group">
336<label for="State">Your State:</label>
337<input type="Text" name="State" id="State" class="State form-control" maxlength="2">
338</div>
339<div class="form-group">
340<label for="Phone">Your Phone:</label>
341<input type="Text" name="Phone" id="Phone" class="Phone form-control" data-mask="000-000-0000">
342</div>
343<div class="form-group">
344<label for="custom1">Where did you hear about us?</label>
345<input type="Text" name="custom1" id="custom1" class="custom1 form-control" maxlength="250">
346</div>
347<div class="form-group">
348<label for="Comments">Your Questions / Comments:<br/>(1000 char max)</label>
349<script type="text/javascript">
350/***********************************************
351* Textarea Maxlength script- Dynamic Drive (www.dynamicdrive.com)
352* This notice must stay intact for legal use.
353* Visit http://www.dynamicdrive.com/ for full source code
354***********************************************/
355function ismaxlength(obj){
356var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
357if (obj.getAttribute && obj.value.length>mlength)
358obj.value=obj.value.substring(0,mlength)
359}
360</script>
360
361<textarea name="Comments" id="Comments" class="Comments form-control" rows="5" maxlength="1000" onkeyup="return ismaxlength(this)"></textarea>
362</div>
363<div class="form-groop">
364<label for="field_0"><h5>Your Thursday Color*</h5></label>
365<input class="form-control" type="text" name="field_0" maxlength="25" value="">
366</div>
367<div class="form-group row">
368<div class="col-sm-4">
369<label for="typeid">Please inform me of:</label>
370</div>
371<div class="col-sm-8">
372<div class="contactListItem" title="list">
373<input type="Checkbox" name="typeid" value="7" CHECKED="checked" >
374General Information
375</div>
376<div class="contactListItem" title="list">
377<input type="Checkbox" name="typeid" value="1007" >
378Upcoming Meetings
379</div>
380<div class="contactListItem" title="list">
381<input type="Checkbox" name="typeid" value="1008" >
382Upcoming Events
383</div>
384</div>
385</div>
386<div class="form-group row">
387<div class="col-sm-12">
388<div class="g-recaptcha" data-sitekey="6Lfo-HAUAAAAABch_SFTJZYTJnx2X40d-Uc217Ib"></div>
389</div>
390</div>
391<div class="form-group row">
392<div class="col-sm-12">
393<span class="privacyPolicy button btn btn-default pull-right"
394title="cssbody=[ttbdy] cssheader=[tthdr] offsety=[-100] offsetx=[5] header=[Privacy Notice:] body=[By filling in this form and checking any of the boxes above, you are opting-in to receive emails from this website. All emails you receive from this website will have instructions at the bottom on how to unsubscribe. When filling in the form, please do not include any sensitive personal information, such as financial or social security numbers. That type of information will never be requested from this website.]"
395>Privacy Notice</span>
396<p><button type="Submit" name="submit" id="submitbutton" class="btn btn-primary pull-left mt-4 mb-3" onclick="document.getElementById('submitbutton').style.opacity='0.5';" title="Click only ONCE!">Send Now</button></p>
397</div>
398</div>
399<div class="form-group row">
400<div class="col-sm-12"><p style="font-size:10px;"><input type="Checkbox" name="neversend" style="float:left;margin-right:10px;" value="1"><em>On occasion we send out newsletters, announcements or alerts to those who fill out this form. If you would like to never receive this kind of email from us, check the box to the left to opt-out.</em></p></div>
401</div>
402</form>
403</div>
404</div>
405</div>
406</div>
407<!-- END PAGE DIV -->
408<div class="lowercontent">
409<!-- START PAGE SECTIONS -->
410<!-- inside page sections -->
411<!-- this is NOT a p (62) -->
412<!-- canview = 1 (83) -->
413<!-- END PAGE SECTIONS -->
414</div>
415</main>
416</section>
417<footer id="footer" class="foot bg-dark text-light">
418<div class="container">
419<div class="row pt-5 pb-5">
420<div class="col-sm-6 col-md-6 col-lg-3">
421<div class="static footer-1">
422<!-- from var application.static.footer_1 -->
423</div>
424</div>
425<div class="col-sm-6 col-md-6 col-lg-3">
426<div class="static footer-2">
427<!-- from var application.static.footer_2 -->
428</div>
429</div>
430<div class="col-sm-6 col-md-6 col-lg-3">
431<div class="static footer-3">
432<!-- from var application.static.footer_3 -->
433</div>
434</div>
435<div class="col-sm-6 col-md-6 col-lg-3">
436<div class="static footer-4">
437<!-- from var application.static.footer_4 -->
438</div>
439<div class="social fa-size" style="margin:0 auto!important;width:auto!important;">
440</div>
441</div>
442</div>
443</div>
444<div class="pt-2 pb-2 bg-black text-center">
445<div id="footer">
446<span class="footerO">
447<span class="footerL">
448&copy; 2026 Mass Sportsmen's Council
449|
450Software by <a href=http://MontagueWebWorks.com target=_blank>Montague WebWorks</a>
451</span>
452<span class="footerM">
453|
454</span>
455<span class="footerR">
456<a href="https://RocketFusion.com" target="_blank">Powered by RocketFusion 123</a>
457</span>
458</span>
459</div>
460<span class="login-link">
461<a class="login noprint" 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>
462<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>
463</span>
464</div>
465</footer>
466</main>
467<!-- BS4 Init -->
468<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>
469<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
vendor: 1 bytes, line 469
469
470<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 470
470
471<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 471
471
472<script>
473// Assuming we have a div with id="editor_container"
474const filerobotImageEditor = new window.FilerobotImageEditor(
475document.querySelector("#rf-image-editor-edit")
476);
477const image_file_upload = document.getElementById("rf-image-upload");
478// const btn_image_upload_edit = document.getElementById("btn-image-upload-edit");
479var source_image = ''; // the HTMLImageElement
480var save_image_name = ''; // name to save image with
481var global_fr_folder = ''; // where to upload
482var global_fr_table = ''; // db table to update
483var global_fr_prefix = ''; // image file prefix, ie; blocks_
484var global_fr_pid = 0; // image ID, ie; blocks_2323
485var dropzone_website_dir = 'MASportsmen.org\\httpdocs';
486const file_robot_defaults = {
487save_image_quality : 1, // 0.1 - 1 (default 0.92) - applies to jpeg, jpg and webp images only
488};
489function renderFileRobotEditor(source,fr_folder=global_fr_folder,fr_table=global_fr_table,fr_prefix=global_fr_prefix,fr_pid=global_fr_pid) {
490console.group("renderFileRobotEditor() called");
491console.log('source:', source);
492console.log('fr_folder:', fr_folder);
493console.log('fr_table:', fr_table);
494console.log('fr_prefix:', fr_prefix);
495console.log('fr_pid:', fr_pid);
496console.groupEnd();
497source_image = source;
498filerobotImageEditor.render({
499source: source_image,
500useBackendTranslations: false,
501defaultSavedImageName: save_image_name,
502defaultSavedImageQuality: file_robot_defaults.save_image_quality,
503tabsIds: [
504window.FilerobotImageEditor.TABS.ADJUST,
505window.FilerobotImageEditor.TABS.FINETUNE,
506window.FilerobotImageEditor.TABS.FILTERS,
507window.FilerobotImageEditor.TABS.ANNOTATE,
508window.FilerobotImageEditor.TABS.WATERMARK], // or ['Adjust', 'Annotate', 'Watermark']
509defaultTabId: window.FilerobotImageEditor.TABS.ADJUST,
510Crop: {
511minWidth: 14,
512minHeight: 14,
513maxWidth: null,
514maxHeight: null,
515ratio: 'custom',
516ratioTitleKey: 'custom',
517noPresets: false,
518autoResize: false,
519presetsItems: [],
520presetsFolders: [],
521lockCropAreaAt: null, // 'top-left'
522},
523// disable save modal
524onBeforeSave: () => {
525return false;
526},
527onSave: async (imageInfo, designState) => {
528// console.log('onSave() imageInfo', imageInfo);
529// console.log('onSave() designState', designState);
530// create formData object to populate and send with fetch request
531const formData = new FormData();
532formData.append('image64', imageInfo.imageBase64);
533formData.append('image_extension', imageInfo.extension);
534formData.append('image_height', imageInfo.height);
535formData.append('image_name', imageInfo.name);
536formData.append('image_name_with_extension', imageInfo.fullName);
537formData.append('image_quality', imageInfo.quality);
538formData.append('image_width', imageInfo.width);
539formData.append('dropzone_website_dir', dropzone_website_dir); // e.g. MikMuller.com\httpdocs
540formData.append('rf_dropzone_dir', fr_folder);
541console.log('onSave() formData [2]', formData);
542// add dropzone options for compatibility with current upload script
543const drop_zone_options = {
544tbl: fr_table,
545imgbase: `${fr_prefix}${fr_pid}`,
546imgname: imageInfo.fullName,
547id: fr_pid
548}
549formData.append("dropzone_options", JSON.stringify(drop_zone_options));
550console.log('onSave() drop_zone_options', drop_zone_options);
551try {
552// _dropzone-file-upload-ajax.cfm
553// _upload-base64.cfm (for testing)
554console.log('renderFileRobotEditor.onSave() imageInfo', imageInfo);
555const upload_request = await fetch('/inc/_dropzone-file-upload-ajax.cfm', {
556method: 'POST',
557body: formData
558});
559const upload_result = await upload_request.json();
560// console.log('DEBUG: [onSave] upload_result', upload_result);
561// close modal
562$('#rfImageModalEdit').modal('hide');
563// page reload
564window.location.reload();
565} catch (error) {
566console.log('onSave() error', error);
567const upload_result = {
568code: 1,
569message: error.message,
570success: false
571}
572}
573},
574onClose: (closingReason) => {
575console.log("Closing reason", closingReason);
576filerobotImageEditor.terminate();
577// reset the input field
578document.getElementById('rf-image-upload').value = '';
579},
580});
581}
582/**
583* Function to handle image selection from the file input field
584* async as we use a promise to await image load
585*/
586async function onImageSelected(event, file_obj, fr_folder, fr_table, fr_prefix, fr_pid) {
587let file;
588if (file_obj) {
589console.log('onImageSelected file_obj', file_obj, fr_folder, fr_table, fr_prefix, fr_pid);
590file = file_obj;
591} else {
592file = event.target.files[0];
593}
594save_image_name = file.name;
595console.log('onImageSelected file', file);
596// const reader = new FileReader();
597const image = new Image();
598const img_max_width = 1600;
599image.src = URL.createObjectURL(file);
600// Promise to await image load
601await new Promise((resolve) => {
602image.onload = () => {
603const img_width = image.width;
604const img_height = image.height;
605// console.log('onImageSelected img load', img_width, img_height);
606if (img_width > img_max_width) {
607const img_scale = img_max_width / img_width;
608image.width = img_width * img_scale;
609image.height = img_height * img_scale;
610}
611// resolve the promise
612resolve();
613};
614});
615// open the modal
616$('#rfImageModalEdit').modal('show');
617// Render file robot
618renderFileRobotEditor(image, fr_folder, fr_table, fr_prefix, fr_pid);
619}
620/** Function to handle image editing */
621function 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) {
622console.log('[DEBUG] editExistingImage() called.');
623console.log('image_url:', image_url);
624console.log('image_name:', image_name);
625console.log('fr_folder:', fr_folder);
626console.log('fr_table:', fr_table);
627console.log('fr_prefix:', fr_prefix);
628console.log('fr_pid:', fr_pid);
629save_image_name = image_name;
630renderFileRobotEditor(image_url, fr_folder, fr_table, fr_prefix, fr_pid);
631}
632/** Function to open the hidden input file field */
633function openFileInput(fr_folder='', fr_table='', fr_prefix='', fr_pid=0) {
634console.log('[DEBUG] openFileInput() called.', fr_folder, fr_table, fr_prefix, fr_pid);
635global_fr_folder = fr_folder; // where to upload
636global_fr_table = fr_table; // db table to update
637global_fr_prefix = fr_prefix; // image file prefix, ie; blocks_
638global_fr_pid = fr_pid;
639image_file_upload.click();
640}
641/** Function to open RF File Manager in a modal
642* Will be used by ckeditor/plugins/rffilemanager/browse.cfm
643* Need the image full url to make a copy of for ai images
644*/
645function openRFFileManager(current_image_url, fr_folder=global_fr_folder, fr_table=global_fr_table, fr_prefix=global_fr_prefix, fr_pid=global_fr_pid) {
646// $($(this).data( "target" ) + ' .modal-body').load( data_remote );
647console.group("bs4_init openRFFileManager() called");
648console.log("current_image_url:", current_image_url);
649console.log("fr_folder:", fr_folder);
650console.log("fr_table:", fr_table);
651console.log("fr_prefix:", fr_prefix);
652console.log("fr_pid:", fr_pid);
653console.groupEnd();
654const rfFileManagerModalIframe = document.getElementById('rfFileManagerModalIframe');
655rfFileManagerModalIframe.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}`; ;
656$('#rfFileManagerModal').modal('show');
657}
658/** Function to close the RF File Manager modal
659* Will be used by ckeditor/plugins/rffilemanager/browse.cfm
660* Need to upload the image and then close the modal
661*/
662function closeRFFileManagerModal(image_path, img_name='', fr_folder='', fr_table='', fr_prefix='', fr_pid=0) {
663console.group("bs4_init closeRFFileManagerModal() called");
664console.log("image_path:",image_path);
665console.log("img_name:",img_name);
666console.log("fr_folder:",fr_folder);
667console.log("fr_table:",fr_table);
668console.log("fr_prefix:",fr_prefix);
669console.log("fr_pid:",fr_pid);
670console.groupEnd();
671$('#rfFileManagerModal').modal('hide');
672$('#rfImageModalEdit').modal('show');
673save_image_name = img_name;
674// renderFileRobotEditor(image_path);
675renderFileRobotEditor(image_path, fr_folder, fr_table, fr_prefix, fr_pid);
676}
677/** Function to close the RF File Manager modal without opening File Robot
678* Will be used by ckeditor/plugins/rffilemanager/browse.cfm
679*/
680function closeRFFileManagerModalOnly(reload=false) {
681$('#rfFileManagerModal').modal('hide');
682if (reload) {
683setTimeout(() => {
684window.location.reload();
685}, 500);
686}
687}
688// Handle closing of modal without saving (must cleanup file robot editor)
689$('#rfImageModalEdit').on('hidden.bs.modal', function (event) {
690// console.log('modal closed');
691filerobotImageEditor.terminate();
692image_file_upload.value = '';
693});
694/** Rocketfusion - enable drag/drop zone on an image with the .rf-image-dropzone class */
695// Create dropzone object for all images with the .rf-image-dropzone class
696const rf_image_drop_zone = document.querySelectorAll('.rf-image-dropzone');
697// Attach event listeners to all instances of rf_image_drop_zone
698rf_image_drop_zone.forEach(function (i) {
699// Handle drag over event
700i.addEventListener('dragover', function(e) {
701event.target.classList.add('image-dragover');
702dragOverHandler(e);
703});
704// Handle drag leave event
705i.addEventListener('dragleave', function(e) {
706// console.log('Image dropzone dragleave');
707event.target.classList.remove('image-dragover');
708});
709// Handle drop event
710i.addEventListener('drop', function(e) {
711event.target.classList.remove('image-dragover');
712dropHandler(e);
713});
714});
715/**
716* Handles the drop event of files in the drop zone.
717* Prevents the default behavior of opening the file and logs the names of the dropped files.
718*
719* @param {Event} ev - The drop event.
720* @returns {undefined}
721*/
722function dropHandler(ev) {
723// console.log('File(s) dropped');
724// Prevent default behavior (Prevent file from being opened)
725ev.preventDefault();
726if (ev.dataTransfer.items) {
727// Use DataTransferItemList interface to access the file(s)
728[...ev.dataTransfer.items].forEach((item, i) => {
729// If dropped items aren't files, reject them
730if (item.kind === 'file') {
731const file = item.getAsFile();
732console.log(`file[${i}].name = ${file.name}`);
733onImageSelected(i, file);
734}
735});
736} else {
737// Use DataTransfer interface to access the file(s)
738[...ev.dataTransfer.files].forEach((file, i) => {
739console.log(`file[${i}].name = ${file.name}`);
740onImageSelected(i, file);
741});
742}
743}
744/**
745* Handles the drag over event of files in the drop zone.
746* Prevents the default behavior of opening the file.
747*
748* @param {Event} ev - The drag over event.
749* @returns {undefined}
750*/
751function dragOverHandler(ev) {
752// Prevent default behavior (Prevent file from being opened)
753ev.preventDefault();
754}
755</script>
755
756<style>
757.modal-fullscreen {
758width: 100vw;
759max-width: none;
760height: 100%;
761margin: 0;
762}
763.modal-content {
764height: 100%;
765border: 0;
766@include border-radius(0);
767}
768.modal-body {
769overflow-y: auto;
770}
771.image-dragover {
772opacity: 0.5;
773}
774</style>
775<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 775
775
776<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
776
777<!-- contact and forms -->
778<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.min.js"></script>
vendor: 1 bytes, line 778
778
779<script src="//cdnjs.cloudflare.com/ajax/libs/parsley.js/2.8.1/parsley.js"></script>
vendor: 1 bytes, line 779
779
780<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.min.js"></script>
vendor: 1 bytes, line 780
780
781<script>
782function limitText(limitField, limitNum) {
783if (limitField.value.length > limitNum) {
784limitField.value = limitField.value.substring(0, limitNum);
785}
786}
787$(document).ready(function(){
788// this code is in bs4_init
789// Real time formatting, added by Andrew Kelly, 2/14/19
790// (US phone formatter) - on document load, attach handler to the phone-us class and mask the input
791$('.phone-us').mask('000-000-0000');
792// Max length of a number input
793$('.numbers-only').keyup(function() {
794var maxLen = $(this).data('max-length');
795var input = $('.numbers-only').val()
796var inputLen = input.length;
797console.log('[DEBUG] inputLen:' + inputLen);
798console.log('[DEBUG] maxLen:' + maxLen);
799if ( inputLen >= 9 ) {
800console.log('[DEBUG] Trim to 9 chars');
801$('.numbers-only').val( input.substring(0, 9) );
802}
803});
804});
805// Validation performed on form SUBMIT
806$("#fRocketfusion").parsley({
807errorClass: 'is-invalid text-danger',
808//successClass: 'is-valid', // Comment this option if you don't want the field to become green when valid. Recommended in Google material design to prevent too many hints for user experience. Only report when a field is wrong.
809errorsWrapper: '<span class="form-text text-danger"></span>',
810errorTemplate: '<span></span>',
811trigger: 'change'
812});
813</script>
vendor: 1 bytes, line 813
813
814<script type="text/javascript" src="/RFAssets/js/joey.js?ver=20260930205701" charset="UTF-8"></script>
vendor: 1 bytes, line 814
814
815<script type="text/javascript">
816$( 'body' ).on( 'click', '[data-toggle="modal"]', function(){
817let data_remote = $(this).data( "remote" );
818if ( data_remote && data_remote.length >= 2 ) {
819$($(this).data( "target" ) + ' .modal-content').load( data_remote );
820}
821});
822</script>
vendor: 1 bytes, line 822
822
823<script>
824$(document).ready(function() {
825//$('nav').animate({opacity:'1'}, 50);<!-- set to 0.25 to make see thru -->
826//$(img).animate({opacity:'1'});
827$initNavHgt = $('nav').outerHeight();
828$initHeadLogoHgt = $('#headerLogo').outerHeight();
829});
830</script>
830
831<!-- no userway account -->
832<script src="https://unpkg.com/[email protected]/dist/aos.js"></script>
vendor: 1 bytes, line 832
832
833<script src="https://cdnjs.cloudflare.com/ajax/libs/smoothscroll/1.4.9/SmoothScroll.min.js"></script>
vendor: 1 bytes, line 833
833
834<script>
835AOS.init();
836</script>
vendor: 1 bytes, line 836
836
837<script>
838window.onscroll = function() {myFunction()};
839/*---- Variables ----*/
840var topNavbar = document.getElementById("nav-container");
841/*---- Scrolled-Nav ----*/
842function myFunction() {
843if (document.body.scrollTop > 200 || document.documentElement.scrollTop > 200) {
844topNavbar.classList.add("nav-fade");
845} else {
846topNavbar.classList.remove("nav-fade");
847}
848} 
849</script>
849
850</body>
851</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.