PageSourceSearch

https://industrialhistory.org/k/2041/7/Practical-Machinist-Museum-Tour-Video

html industrialhistory.org collected 2026-10-01 14:57:54 UTC 34,891 bytes, 892 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: Museum of Our Industrial Heritage
11-->
12<!-- ================================================================================================================= -->
13<!-- Title and App Tags -->
14<!-- 20260930205421 -->
15<title>Practical Machinist Museum Tour Video - Museum of Our Industrial Heritage</title>
16<meta property="og:title" content="Practical Machinist Museum Tour Video">
17<meta property="twitter:title" content="Practical Machinist Museum Tour Video - Museum of Our Industrial Heritage">
18<meta itemprop="name" content="Practical Machinist Museum Tour Video - Museum of Our Industrial Heritage">
19<!-- safari -->
20<meta name="apple-mobile-web-app-title" content="Practical Machinist Museum Tour Video - Museum of Our Industrial Heritage">
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="Practical Machinist Museum Tour Video - Museum of Our Industrial Heritage">
27<meta name="msapplication-tooltip" content="Practical Machinist Museum Tour Video - Museum of Our Industrial Heritage">
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="Greenfield" />
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-08-31" />
48<meta name="geo.region" content="US-MA" />
49<meta name="msvalidate.01" content=" " />
50<!-- no Facebook Pixel ID -->
51<meta name="author" content="Museum of Our Industrial Heritage" />
52<meta name="owner" content="Museum of Our Industrial Heritage" />
53<meta name="copyright" content="Copyright 2026 Museum of Our Industrial Heritage" />
54<meta name="expires" content="Oct 1, 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="Museum of Our Industrial Heritage">
63<meta property="og:type" content="website" />
64<!-- ================================================================================================================= -->
65<!-- FAVICONS start -->
66<link rel="shortcut icon" href="/icons/favicon.png">
67<link rel="icon" href="/icons/favicon.png" type="image/x-icon">
68<link rel="apple-touch-icon" href="/icons/favicon.png">
69<meta name="msapplication-TileImage" content="/icons/favicon.png">
70<link rel="apple-touch-startup-image" href="/icons/favicon.png">
71<link rel="apple-touch-icon" sizes="16x16" href="/icons/favicon-16x16.png">
72<link rel="icon" sizes="16x16" href="/icons/favicon-16x16.png">
73<meta name="msapplication-square16x16logo" content="/icons/favicon-16x16.png"/>
74<link rel="apple-touch-icon" sizes="24x24" href="/icons/favicon-24x24.png">
75<link rel="icon" sizes="24x24" href="/icons/favicon-24x24.png">
76<meta name="msapplication-square24x24logo" content="/icons/favicon-24x24.png"/>
77<link rel="apple-touch-icon" sizes="32x32" href="/icons/favicon-32x32.png">
78<link rel="icon" sizes="32x32" href="/icons/favicon-32x32.png">
79<meta name="msapplication-square32x32logo" content="/icons/favicon-32x32.png"/>
80<link rel="apple-touch-icon" sizes="48x48" href="/icons/favicon-48x48.png">
81<link rel="icon" sizes="48x48" href="/icons/favicon-48x48.png">
82<meta name="msapplication-square48x48logo" content="/icons/favicon-48x48.png"/>
83<link rel="apple-touch-icon" sizes="57x57" href="/icons/favicon-57x57.png">
84<link rel="icon" sizes="57x57" href="/icons/favicon-57x57.png">
85<meta name="msapplication-square57x57logo" content="/icons/favicon-57x57.png"/>
86<link rel="apple-touch-icon" sizes="60x60" href="/icons/favicon-60x60.png">
87<link rel="icon" sizes="60x60" href="/icons/favicon-60x60.png">
88<meta name="msapplication-square60x60logo" content="/icons/favicon-60x60.png"/>
89<link rel="apple-touch-icon" sizes="64x64" href="/icons/favicon-64x64.png">
90<link rel="icon" sizes="64x64" href="/icons/favicon-64x64.png">
91<meta name="msapplication-square64x64logo" content="/icons/favicon-64x64.png"/>
92<link rel="apple-touch-icon" sizes="70x70" href="/icons/favicon-70x70.png">
93<link rel="icon" sizes="70x70" href="/icons/favicon-70x70.png">
94<meta name="msapplication-square70x70logo" content="/icons/favicon-70x70.png"/>
95<link rel="apple-touch-icon" sizes="72x72" href="/icons/favicon-72x72.png">
96<link rel="icon" sizes="72x72" href="/icons/favicon-72x72.png">
97<meta name="msapplication-square72x72logo" content="/icons/favicon-72x72.png"/>
98<link rel="apple-touch-icon" sizes="76x76" href="/icons/favicon-76x76.png">
99<link rel="icon" sizes="76x76" href="/icons/favicon-76x76.png">
100<meta name="msapplication-square76x76logo" content="/icons/favicon-76x76.png"/>
101<link rel="apple-touch-icon" sizes="96x96" href="/icons/favicon-96x96.png">
102<link rel="icon" sizes="96x96" href="/icons/favicon-96x96.png">
103<meta name="msapplication-square96x96logo" content="/icons/favicon-96x96.png"/>
104<link rel="apple-touch-icon" sizes="114x114" href="/icons/favicon-114x114.png">
105<link rel="icon" sizes="114x114" href="/icons/favicon-114x114.png">
106<meta name="msapplication-square114x114logo" content="/icons/favicon-114x114.png"/>
107<link rel="apple-touch-icon" sizes="120x120" href="/icons/favicon-120x120.png">
108<link rel="icon" sizes="120x120" href="/icons/favicon-120x120.png">
109<meta name="msapplication-square120x120logo" content="/icons/favicon-120x120.png"/>
110<link rel="apple-touch-icon" sizes="128x128" href="/icons/favicon-128x128.png">
111<link rel="icon" sizes="128x128" href="/icons/favicon-128x128.png">
112<meta name="msapplication-square128x128logo" content="/icons/favicon-128x128.png"/>
113<link rel="apple-touch-icon" sizes="144x144" href="/icons/favicon-144x144.png">
114<link rel="icon" sizes="144x144" href="/icons/favicon-144x144.png">
115<meta name="msapplication-square144x144logo" content="/icons/favicon-144x144.png"/>
116<link rel="apple-touch-icon" sizes="150x150" href="/icons/favicon-150x150.png">
117<link rel="icon" sizes="150x150" href="/icons/favicon-150x150.png">
118<meta name="msapplication-square150x150logo" content="/icons/favicon-150x150.png"/>
119<link rel="apple-touch-icon" sizes="152x152" href="/icons/favicon-152x152.png">
120<link rel="icon" sizes="152x152" href="/icons/favicon-152x152.png">
121<meta name="msapplication-square152x152logo" content="/icons/favicon-152x152.png"/>
122<link rel="apple-touch-icon" sizes="196x196" href="/icons/favicon-196x196.png">
123<link rel="icon" sizes="196x196" href="/icons/favicon-196x196.png">
124<meta name="msapplication-square196x196logo" content="/icons/favicon-196x196.png"/>
125<link rel="apple-touch-icon" sizes="310x310" href="/icons/favicon-310x310.png">
126<link rel="icon" sizes="310x310" href="/icons/favicon-310x310.png">
127<meta name="msapplication-square310x310logo" content="/icons/favicon-310x310.png"/>
128<link rel="manifest" href="/icons/manifest.json">
129<meta name="apple-mobile-web-app-status-bar-style" content="black">
130<meta name="msapplication-TileColor" content="white">
131<meta name="theme-color" content="white">
132<!-- MS Application Tasks (off for now) -->
133<!-- FAVICONS end -->
134<!-- this is a BLOCK page -->
135<meta property="og:url" content="/k/2041/Practical-Machinist-Museum-Tour-Video">
136<link rel="canonical" href="/k/2041/Practical-Machinist-Museum-Tour-Video">
137<meta itemprop="image" content="/blocks/blocks_2041_large.jpg">
138<meta property="og:image" content="/blocks/blocks_2041_large.jpg">
139<meta property="twitter:image" content="/blocks/blocks_2041_large.jpg">
140<link rel="image_src" href="/blocks/blocks_2041_large.jpg">
141<meta property="og:image:alt" content="Practical Machinist Museum Tour Video">
142<meta name="description" content="">
143<meta itemprop="description" content="">
144<meta property="og:description" content="">
145<meta property="twitter:description" content="">
146<!-- ================================================================================================================= -->
147<script src="https://kit.fontawesome.com/d3bffd01a6.js" crossorigin="anonymous"></script>
147
148<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
149<link rel="stylesheet" href="/RFassets/css/datatables-bs4.min.css">
150<link rel="stylesheet" href="/RFAssets/css/RFtables.css?ver=20260930205421">
151<link rel="stylesheet" href="/RFAssets/css/joey.css?ver=20260930205421">
152<link rel="stylesheet" href="/site_style.css?ver=20260930205421">
153<link rel="stylesheet" href="/header_style.css?ver=20260930205421">
154<link rel="stylesheet" href="/RFAssets/css/_admin.css?ver=20260930205421">
155<!-- custom stylesheet -->
156<link rel="stylesheet" href="/tmpl_TMPL01.css?ver=20260930205421">
157<script src="/RFAssets/js/boxover.js" type="text/javascript"></script>
vendor: 1 bytes, line 157
157
158<script type="text/javascript">
159function toggleLayer(whichLayer,what) {
160if (document.getElementById)
161{
162var style2 = document.getElementById(whichLayer).style;
163style2.display = what;
164}
165else if (document.all)
166{
167var style2 = document.all[whichLayer].style;
168style2.display = what;
169}
170else if (document.layers)
171{
172var style2 = document.layers[whichLayer].style;
173style2.display = what;
174}
175}
176function toggleCheckbox(source) {
177checkboxes = document.getElementsByName('file_delete');
178for(var i=0, n=checkboxes.length;i<n;i++) {
179checkboxes[i].checked = source.checked;
180}
181}
182</script>
182
183<!-- No text_Google_Analytics_account defined -->
184<!-- No text_Google_Tag_Manager_ID defined -->
185<!-- end of metatags -->
186</head>
187<body class="notMobile"
188id="default">
189<!-- THESE ARE HERE (ADMIN) BECAUSE THEY NEED TO BE AT THE TOP OF THE BODY, NOT IN THE META TAGS -->
190<!-- No text_Google_Tag_Manager_ID defined -->
191<header id="header" class="head">
192<div class="container">
193<div class="row align-items-center">
194<div class="col-1 d-none d-sm-none d-md-none d-lg-block">
195<img class="logo" src="/site/logo_sm.png" /> 
196</div>
197<div class="col-md-12 col-lg-11">
198<!-- Top Header INFO BAR -->
199<div class="row text-light pt-3 top-info">
200<div class="col-sm-4">
201<strong>Museum of Our Industrial Heritage</strong>
202</div>
203<div class="col-sm-8">
204<ul class="list-inline head-list">
205<li class="list-inline-item">
206<i class="far fa-clock"></i>
207Open By Appointment
208</li>
209<li class="list-inline-item">
210<i class="fas fa-map-marker-alt"></i>
2112 Mead Street | Greenfield, Ma
212</li>
213</ul>
214</div>
215</div>
216<!-- Navbar -->
217<section id="navbar" class="top-nav">
218<div class="container">
219<div id="inner-n" class="row b-nav pos-rel">
220<div class="col-12 col-sm-12 col-md-9">
221<!-- start pagenav tag -->
222<style>
223#navmainmain *, #navmainmain1 *, #navBarContainer {
224color: !important;
225background-color :!important; 
226}
227</style>
228<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">
229<div class="container">
230<!-- no title bar -->
231<button class="navbar-toggler" data-toggle="collapse" aria-label="Open Menu" data-target="#navbar-1">
232<span class="navbar-toggler-icon"></span>
233</button>
234<div id="navbar-1" class="navbar-collapse collapse">
235<!-- REALESTATE ERROR 161 Invalid object name 'custom_MLSPIN.dbo.mls_listing_all'.: -->
236<ul class='nav navbar-nav ml-auto'><li class='nav-item'>
237<a id="menu_h" class="nav-link" href="/"><span>Home</span></a>
238</li><li class='dropdown nav-item'>
239<a id="menu_p20"
240class="nav-link dropdown-toggle"
241href="/p/20/About"><span>About</span></a>
242<!-- hello from pagenav! -->
243<!-- SHOW PARENT = 0 -->
244<!-- qsImagesCat.recordCount = 34 -->
245<div class='dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'><span class='hi'></span>
246<!-- hoohah 167 -->
247<!-- PAGES! -->
248<!-- hoohah 202 -->
249<!-- thecount = 1 -->
250<a id="menu_p21" 
251href="/p/21/History-of-the-Museum">
252<span>History of the Museum</span>
253</a>
254<!-- thecount = 2 -->
255</li><li class='dropdown-item'>
256<a id="menu_p22" 
257href="/p/22/History-of-the-Mill-Site">
258<span>History of the Mill Site</span>
259</a>
260<!-- thecount = 3 -->
261</li><li class='dropdown-item'>
262<a id="menu_p23" 
263href="/p/23/Research-Opportunities">
264<span>Research Opportunities</span>
265</a>
266<!-- thecount = 4 -->
267</li><li class='dropdown-item'>
268<a id="menu_p33" 
269href="/p/33/Educational-Programs">
270<span>Educational Programs</span>
271</a>
272<!-- thecount = 5 -->
273</li><li class='dropdown-item'>
274<a id="menu_p24" 
275href="/p/24/Board-Members">
276<span>Board Members</span>
277</a>
278</li></ul></div>
279</li><li class='nav-item'>
280<a id="menu_p14"
281class="nav-link"
282href="/p/14/Visit"><span>Visit</span></a>
283</li><li class='dropdown nav-item'>
284<a id="menu_p16"
285class="nav-link dropdown-toggle"
286href="/p/16/Exhibits"><span>Exhibits</span></a>
287<!-- hello from pagenav! -->
288<!-- SHOW PARENT = 0 -->
289<!-- qsImagesCat.recordCount = 34 -->
290<div class='dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'><span class='hi'></span>
291<!-- hoohah 167 -->
292<!-- PAGES! -->
293<!-- hoohah 202 -->
294<!-- thecount = 1 -->
295<a id="menu_p25" 
296href="/p/25/Main-Gallery">
297<span>Main Gallery</span>
298</a>
299<!-- thecount = 2 -->
300</li><li class='dropdown-item'>
301<a id="menu_p27" 
302href="/p/27/Technology-Transportation--Trade-Early-Water-Power-History-in-the-Small-Hill-Towns">
303<span>Technology-Transportation & Trade</span>
304</a>
305<!-- thecount = 3 -->
306</li><li class='dropdown-item'>
307<a id="menu_p28" 
308href="/p/28/Museum-Live-Demonstrations">
309<span>Museum Live Demonstrations</span>
310</a>
311<!-- thecount = 4 -->
312</li><li class='dropdown-item'>
313<a id="menu_p29" 
314href="/p/29/Gage-Room">
315<span>Gage Room</span>
316</a>
317<!-- thecount = 5 -->
318</li><li class='dropdown-item'>
319<a id="menu_p30" 
320href="/p/30/New-and-Temporary-Displays">
321<span>New and Temporary Displays</span>
322</a>
323</li></ul></div>
324</li><li class='dropdown nav-item'>
325<a id="menu_p17"
326class="nav-link dropdown-toggle"
327href="/p/17/Online-Resources"><span>Online Resources</span></a>
328<!-- hello from pagenav! -->
329<!-- SHOW PARENT = 0 -->
330<!-- qsImagesCat.recordCount = 34 -->
331<div class='dropdown-menu dropdown-menu-left'><ul><li class='dropdown-item'><span class='hi'></span>
332<!-- hoohah 167 -->
333<!-- PAGES! -->
334<!-- hoohah 202 -->
335<!-- thecount = 1 -->
336<a id="menu_p1107" 
337href="/p/1107/Ask-Our-Historian">
338<span>Ask Our Historian</span>
339</a>
340<!-- thecount = 2 -->
341</li><li class='dropdown-item'>
342<a id="menu_p31" 
343href="/p/31/Our-Film-Library">
344<span>Videos</span>
345</a>
346<!-- thecount = 3 -->
347</li><li class='dropdown-item'>
348<a id="menu_p34" 
349href="/p/34/Industries-Represented">
350<span>Industries Represented</span>
351</a>
352<!-- thecount = 4 -->
353</li><li class='dropdown-item'>
354<a id="menu_p36" 
355href="/p/36/Social-History">
356<span>Social History</span>
357</a>
358<!-- thecount = 5 -->
359</li><li class='dropdown-item'>
360<a id="menu_p37" 
361href="/p/37/Heritage-Technology-Library">
362<span>Tech Library</span>
363</a>
364</li></ul></div>
365</li><li class='nav-item'>
366<a id="menu_p18"
367class="nav-link"
368href="/p/18/Support-Our-Work"><span>Support</span></a>
369</li><li class='nav-item'>
370<a id="menu_p19"
371class="nav-link"
372target="_blank"
373href="https://silverscreendesign.chipply.com/MOIH/"><span>Store</span></a>
374</li><li class='nav-item'>
375<a id="menu_c"
376class="nav-link"
377href="/contact"><span>Contact</span></a>
378</li></ul>
379</div><!-- /.nav-collapse -->
380</div>
381</nav>
382<!-- end pagenav tag -->
383</div>
384<div class="col-6 col-sm-6 col-md-3 social-head-container">
385<div class="social-head">
386<div class="social fa-size" style="margin:0 auto!important;width:auto!important;">
387</div>
388</div>
389</div>
390</div>
391</div>
392</section>
393</div>
394</div>
395</div>
396</header>
397<!-- Jumbotron -->
398<section id="jumbo" class="jumbotron">
399<div class="container">
400</div>
401</section>
402<!-- Content/Footer -->
403<main id="main-content" class="m-content">
404<section id="content" class="content pb-5">
405<main>
406<!-- START PAGE DIV -->
407<div class="page k k2041 " style="">
408<div class="container maincontent">
409<div class="row">
410<div class="col-sm-12">
411<div class="">
412<h1 class="page"><span>Practical Machinist Museum Tour Video</span></h1>
413<!-- HELLO FROM INSIDE FIGURE -->
414<figure
415class="pos-rel figure col-xs-12 col-sm-6 col-md-5"
416style="float:right; margin:0 0 10px 10px;padding:0px;text-align:center;">
417<!-- call image -->
418<!-- hello from inside figure_image -->
419<div class="blocks_image ">
420<!-- hoohah 4 -->
421<!-- yes -->
422<img id="topImg"
423class="blocks img-responsive img-fluid figure-img rf-image-dropzone"
424style="margin:0 auto; border:0; box-shadow:0px 0px 0px #FFFFFF; border-radius:0px;"
425src="/blocks/blocks_2041_small.jpg?20230807094916"
426alt="Practical Machinist Museum Tour Video">
427<!-- hoohah 34 -->
428</div>
429<!-- goodbye from inside figure_image -->
430</figure>
431<div id="myModal" class="modal-img" style="display:none;">
432<div class="modal-img-container">
433<span class="close"><i class="fas fa-times-circle"></i></span>
434<img class="modal-content" id="img01" alt="Practical Machinist Museum Tour Video">
435</div>
436</div>
437<style>
438img.page:hover { cursor: pointer; }
439</style>
440<!-- ======== File robot modals / scripts ======== -->
441<script>
442// Get the modal
443var modal = document.getElementById('myModal');
444// Set Parameters for image and generate image src
445var imgParam = { name: 'blocks_', imgID: '2041', size: 'large', fileType: 'jpg' };
446console.log('imgParam', imgParam);
447var imageChange = '/blocks/' + imgParam.name + imgParam.imgID + '_' + imgParam.size + '.' + imgParam.fileType;
448// Get the image and insert it inside the modal - use its "alt" text as a caption
449var img = document.getElementById('topImg');
450var modalImg = document.getElementById("img01");
451// onClick display modal
452if (img) {
453img.onclick = function () {
454console.log('[DEBUG] Image clicked. - ' + imageChange);
455modal.classList.add('modalFadeImg');
456modalImg.src = this.innerHTML = imageChange;
457// modalImg.onerror = function(event) {
458// console.log(event);
459// modalImg.src = this.innerHTML = '/blocks/' + imgParam.name + '_' + imgParam.imgID + '_' + 'large' + '.' + imgParam.fileType;
460// }
461}
462};
463// Get the <span> element that closes the modal
464var span = document.getElementsByClassName("close")[0];
465//close the modal
466if(span) {
467span.onclick = function () {
468modal.classList.remove('modalFadeImg');
469}
470};
471if(modal) {
472modal.onclick = function() {
473modal.classList.remove('modalFadeImg');
474}
475};
476</script>
476
477<!-- GOODBYE FROM INSIDE FIGURE -->
478<h5>In May 2023, the Museum hosted a team from Practical Machinist for a tour of the Museum.</h5>
479<h5>A video of the tour is available on the <a href="https://www.youtube.com/user/PracticalMachinist">Practical Machinist YouTube Channel</a> and can be viewed <a href="https://youtu.be/M_MXNKiFnG8">HERE</a></h5>
480</div>
481</div>
482</div>
483</div>
484</div>
485<!-- END PAGE DIV -->
486<div class="lowercontent">
487<!-- START PAGE SECTIONS -->
488<!-- inside page sections -->
489<!-- this is NOT a p (62) -->
490<!-- canview = 1 (83) -->
491<!-- END PAGE SECTIONS -->
492</div>
493</main>
494</section>
495<footer id="footer" class="foot bg-dark text-light pt-5">
496<div class="container pb-3">
497<div class="row">
498<div class="col-sm-6 col-md-6 col-lg-3">
499<div class="static footer-1">
500<!-- from var application.static.footer_1 -->
501</div>
502</div>
503<div class="col-sm-6 col-md-6 col-lg-3 links">
504<div class="static footer-2">
505<!-- from var application.static.footer_2 -->
506</div>
507</div>
508<div class="col-sm-6 col-md-6 col-lg-3">
509<div class="static footer-3">
510<!-- from var application.static.footer_3 -->
511</div>
512</div>
513<div class="col-sm-6 col-md-6 col-lg-3">
514<div class="static footer-4">
515<!-- from var application.static.footer_4 -->
516</div>
517<p>2 Mead Street, Greenfield, MA 01301</p>
518<p>(We do not have a phone number. Please use our Email form to contact us.)</p>
519<p>Our direct email address is [email protected]</p>
520<div class="social fa-size" style="margin:0 auto!important;width:auto!important;">
521</div>
522</div>
523</div>
524</div>
525<div class="bg-black pb-5 pt-5 text-center">
526<div id="footer">
527<span class="footerO">
528<span class="footerL">
529&copy; 2026 Museum of Our Industrial Heritage
530|
531Software by <a href=http://MontagueWebWorks.com target=_blank>Montague WebWorks</a>
532</span>
533<span class="footerM">
534|
535</span>
536<span class="footerR">
537<a href="https://RocketFusion.com" target="_blank">Powered by RocketFusion 123</a>
538</span>
539</span>
540</div>
541<span class="login-link">
542<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>
543<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>
544</span>
545</div>
546</footer>
547</main>
548<!-- BS4 Init -->
549<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>
550<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
vendor: 1 bytes, line 550
550
551<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 551
551
552<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 552
552
553<script>
554// Assuming we have a div with id="editor_container"
555const filerobotImageEditor = new window.FilerobotImageEditor(
556document.querySelector("#rf-image-editor-edit")
557);
558const image_file_upload = document.getElementById("rf-image-upload");
559// const btn_image_upload_edit = document.getElementById("btn-image-upload-edit");
560var source_image = ''; // the HTMLImageElement
561var save_image_name = ''; // name to save image with
562var global_fr_folder = ''; // where to upload
563var global_fr_table = ''; // db table to update
564var global_fr_prefix = ''; // image file prefix, ie; blocks_
565var global_fr_pid = 0; // image ID, ie; blocks_2323
566var dropzone_website_dir = 'IndustrialHistory.org\\httpdocs';
567const file_robot_defaults = {
568save_image_quality : 1, // 0.1 - 1 (default 0.92) - applies to jpeg, jpg and webp images only
569};
570function renderFileRobotEditor(source,fr_folder=global_fr_folder,fr_table=global_fr_table,fr_prefix=global_fr_prefix,fr_pid=global_fr_pid) {
571console.group("renderFileRobotEditor() called");
572console.log('source:', source);
573console.log('fr_folder:', fr_folder);
574console.log('fr_table:', fr_table);
575console.log('fr_prefix:', fr_prefix);
576console.log('fr_pid:', fr_pid);
577console.groupEnd();
578source_image = source;
579filerobotImageEditor.render({
580source: source_image,
581useBackendTranslations: false,
582defaultSavedImageName: save_image_name,
583defaultSavedImageQuality: file_robot_defaults.save_image_quality,
584tabsIds: [
585window.FilerobotImageEditor.TABS.ADJUST,
586window.FilerobotImageEditor.TABS.FINETUNE,
587window.FilerobotImageEditor.TABS.FILTERS,
588window.FilerobotImageEditor.TABS.ANNOTATE,
589window.FilerobotImageEditor.TABS.WATERMARK], // or ['Adjust', 'Annotate', 'Watermark']
590defaultTabId: window.FilerobotImageEditor.TABS.ADJUST,
591Crop: {
592minWidth: 14,
593minHeight: 14,
594maxWidth: null,
595maxHeight: null,
596ratio: 'custom',
597ratioTitleKey: 'custom',
598noPresets: false,
599autoResize: false,
600presetsItems: [],
601presetsFolders: [],
602lockCropAreaAt: null, // 'top-left'
603},
604// disable save modal
605onBeforeSave: () => {
606return false;
607},
608onSave: async (imageInfo, designState) => {
609// console.log('onSave() imageInfo', imageInfo);
610// console.log('onSave() designState', designState);
611// create formData object to populate and send with fetch request
612const formData = new FormData();
613formData.append('image64', imageInfo.imageBase64);
614formData.append('image_extension', imageInfo.extension);
615formData.append('image_height', imageInfo.height);
616formData.append('image_name', imageInfo.name);
617formData.append('image_name_with_extension', imageInfo.fullName);
618formData.append('image_quality', imageInfo.quality);
619formData.append('image_width', imageInfo.width);
620formData.append('dropzone_website_dir', dropzone_website_dir); // e.g. MikMuller.com\httpdocs
621formData.append('rf_dropzone_dir', fr_folder);
622console.log('onSave() formData [2]', formData);
623// add dropzone options for compatibility with current upload script
624const drop_zone_options = {
625tbl: fr_table,
626imgbase: `${fr_prefix}${fr_pid}`,
627imgname: imageInfo.fullName,
628id: fr_pid
629}
630formData.append("dropzone_options", JSON.stringify(drop_zone_options));
631console.log('onSave() drop_zone_options', drop_zone_options);
632try {
633// _dropzone-file-upload-ajax.cfm
634// _upload-base64.cfm (for testing)
635console.log('renderFileRobotEditor.onSave() imageInfo', imageInfo);
636const upload_request = await fetch('/inc/_dropzone-file-upload-ajax.cfm', {
637method: 'POST',
638body: formData
639});
640const upload_result = await upload_request.json();
641// console.log('DEBUG: [onSave] upload_result', upload_result);
642// close modal
643$('#rfImageModalEdit').modal('hide');
644// page reload
645window.location.reload();
646} catch (error) {
647console.log('onSave() error', error);
648const upload_result = {
649code: 1,
650message: error.message,
651success: false
652}
653}
654},
655onClose: (closingReason) => {
656console.log("Closing reason", closingReason);
657filerobotImageEditor.terminate();
658// reset the input field
659document.getElementById('rf-image-upload').value = '';
660},
661});
662}
663/**
664* Function to handle image selection from the file input field
665* async as we use a promise to await image load
666*/
667async function onImageSelected(event, file_obj, fr_folder, fr_table, fr_prefix, fr_pid) {
668let file;
669if (file_obj) {
670console.log('onImageSelected file_obj', file_obj, fr_folder, fr_table, fr_prefix, fr_pid);
671file = file_obj;
672} else {
673file = event.target.files[0];
674}
675save_image_name = file.name;
676console.log('onImageSelected file', file);
677// const reader = new FileReader();
678const image = new Image();
679const img_max_width = 1600;
680image.src = URL.createObjectURL(file);
681// Promise to await image load
682await new Promise((resolve) => {
683image.onload = () => {
684const img_width = image.width;
685const img_height = image.height;
686// console.log('onImageSelected img load', img_width, img_height);
687if (img_width > img_max_width) {
688const img_scale = img_max_width / img_width;
689image.width = img_width * img_scale;
690image.height = img_height * img_scale;
691}
692// resolve the promise
693resolve();
694};
695});
696// open the modal
697$('#rfImageModalEdit').modal('show');
698// Render file robot
699renderFileRobotEditor(image, fr_folder, fr_table, fr_prefix, fr_pid);
700}
701/** Function to handle image editing */
702function 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) {
703console.log('[DEBUG] editExistingImage() called.');
704console.log('image_url:', image_url);
705console.log('image_name:', image_name);
706console.log('fr_folder:', fr_folder);
707console.log('fr_table:', fr_table);
708console.log('fr_prefix:', fr_prefix);
709console.log('fr_pid:', fr_pid);
710save_image_name = image_name;
711renderFileRobotEditor(image_url, fr_folder, fr_table, fr_prefix, fr_pid);
712}
713/** Function to open the hidden input file field */
714function openFileInput(fr_folder='', fr_table='', fr_prefix='', fr_pid=0) {
715console.log('[DEBUG] openFileInput() called.', fr_folder, fr_table, fr_prefix, fr_pid);
716global_fr_folder = fr_folder; // where to upload
717global_fr_table = fr_table; // db table to update
718global_fr_prefix = fr_prefix; // image file prefix, ie; blocks_
719global_fr_pid = fr_pid;
720image_file_upload.click();
721}
722/** Function to open RF File Manager in a modal
723* Will be used by ckeditor/plugins/rffilemanager/browse.cfm
724* Need the image full url to make a copy of for ai images
725*/
726function openRFFileManager(current_image_url, fr_folder=global_fr_folder, fr_table=global_fr_table, fr_prefix=global_fr_prefix, fr_pid=global_fr_pid) {
727// $($(this).data( "target" ) + ' .modal-body').load( data_remote );
728console.group("bs4_init openRFFileManager() called");
729console.log("current_image_url:", current_image_url);
730console.log("fr_folder:", fr_folder);
731console.log("fr_table:", fr_table);
732console.log("fr_prefix:", fr_prefix);
733console.log("fr_pid:", fr_pid);
734console.groupEnd();
735const rfFileManagerModalIframe = document.getElementById('rfFileManagerModalIframe');
736rfFileManagerModalIframe.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}`; ;
737$('#rfFileManagerModal').modal('show');
738}
739/** Function to close the RF File Manager modal
740* Will be used by ckeditor/plugins/rffilemanager/browse.cfm
741* Need to upload the image and then close the modal
742*/
743function closeRFFileManagerModal(image_path, img_name='', fr_folder='', fr_table='', fr_prefix='', fr_pid=0) {
744console.group("bs4_init closeRFFileManagerModal() called");
745console.log("image_path:",image_path);
746console.log("img_name:",img_name);
747console.log("fr_folder:",fr_folder);
748console.log("fr_table:",fr_table);
749console.log("fr_prefix:",fr_prefix);
750console.log("fr_pid:",fr_pid);
751console.groupEnd();
752$('#rfFileManagerModal').modal('hide');
753$('#rfImageModalEdit').modal('show');
754save_image_name = img_name;
755// renderFileRobotEditor(image_path);
756renderFileRobotEditor(image_path, fr_folder, fr_table, fr_prefix, fr_pid);
757}
758/** Function to close the RF File Manager modal without opening File Robot
759* Will be used by ckeditor/plugins/rffilemanager/browse.cfm
760*/
761function closeRFFileManagerModalOnly(reload=false) {
762$('#rfFileManagerModal').modal('hide');
763if (reload) {
764setTimeout(() => {
765window.location.reload();
766}, 500);
767}
768}
769// Handle closing of modal without saving (must cleanup file robot editor)
770$('#rfImageModalEdit').on('hidden.bs.modal', function (event) {
771// console.log('modal closed');
772filerobotImageEditor.terminate();
773image_file_upload.value = '';
774});
775/** Rocketfusion - enable drag/drop zone on an image with the .rf-image-dropzone class */
776// Create dropzone object for all images with the .rf-image-dropzone class
777const rf_image_drop_zone = document.querySelectorAll('.rf-image-dropzone');
778// Attach event listeners to all instances of rf_image_drop_zone
779rf_image_drop_zone.forEach(function (i) {
780// Handle drag over event
781i.addEventListener('dragover', function(e) {
782event.target.classList.add('image-dragover');
783dragOverHandler(e);
784});
785// Handle drag leave event
786i.addEventListener('dragleave', function(e) {
787// console.log('Image dropzone dragleave');
788event.target.classList.remove('image-dragover');
789});
790// Handle drop event
791i.addEventListener('drop', function(e) {
792event.target.classList.remove('image-dragover');
793dropHandler(e);
794});
795});
796/**
797* Handles the drop event of files in the drop zone.
798* Prevents the default behavior of opening the file and logs the names of the dropped files.
799*
800* @param {Event} ev - The drop event.
801* @returns {undefined}
802*/
803function dropHandler(ev) {
804// console.log('File(s) dropped');
805// Prevent default behavior (Prevent file from being opened)
806ev.preventDefault();
807if (ev.dataTransfer.items) {
808// Use DataTransferItemList interface to access the file(s)
809[...ev.dataTransfer.items].forEach((item, i) => {
810// If dropped items aren't files, reject them
811if (item.kind === 'file') {
812const file = item.getAsFile();
813console.log(`file[${i}].name = ${file.name}`);
814onImageSelected(i, file);
815}
816});
817} else {
818// Use DataTransfer interface to access the file(s)
819[...ev.dataTransfer.files].forEach((file, i) => {
820console.log(`file[${i}].name = ${file.name}`);
821onImageSelected(i, file);
822});
823}
824}
825/**
826* Handles the drag over event of files in the drop zone.
827* Prevents the default behavior of opening the file.
828*
829* @param {Event} ev - The drag over event.
830* @returns {undefined}
831*/
832function dragOverHandler(ev) {
833// Prevent default behavior (Prevent file from being opened)
834ev.preventDefault();
835}
836</script>
836
837<style>
838.modal-fullscreen {
839width: 100vw;
840max-width: none;
841height: 100%;
842margin: 0;
843}
844.modal-content {
845height: 100%;
846border: 0;
847@include border-radius(0);
848}
849.modal-body {
850overflow-y: auto;
851}
852.image-dragover {
853opacity: 0.5;
854}
855</style>
856<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 856
856
857<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 857
857
858<script type="text/javascript" src="/RFAssets/js/joey.js?ver=20260930205421" charset="UTF-8"></script>
vendor: 1 bytes, line 858
858
859<script type="text/javascript">
860$( 'body' ).on( 'click', '[data-toggle="modal"]', function(){
861let data_remote = $(this).data( "remote" );
862if ( data_remote && data_remote.length >= 2 ) {
863$($(this).data( "target" ) + ' .modal-content').load( data_remote );
864}
865});
866</script>
vendor: 1 bytes, line 866
866
867<script>
868$(document).ready(function() {
869//$('nav').animate({opacity:'1'}, 50);<!-- set to 0.25 to make see thru -->
870//$(img).animate({opacity:'1'});
871$initNavHgt = $('nav').outerHeight();
872$initHeadLogoHgt = $('#headerLogo').outerHeight();
873});
874</script>
874
875<!-- no userway account -->
876<script>
877var nav = document.getElementById('header');
878var sticky = navbar.offsetTop;
879var border = document.getElementById('inner-n');
880window.onscroll = function() {
881scrollNav()
882};
883function scrollNav() {
884if (window.pageYOffset >= sticky) {
885nav.classList.add("fixed-nav");
886} else {
887nav.classList.remove("fixed-nav");
888}
889}
890</script>
890
891</body>
892</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.