1<!DOCTYPE html> 2<!--[if IE 6]> 3<html id="ie6" lang="en-CA"> 4<![endif]--> 5<!--[if IE 7]> 6<html id="ie7" lang="en-CA"> 7<![endif]--> 8<!--[if IE 8]> 9<html id="ie8" lang="en-CA"> 10<![endif]--> 11<!--[if !(IE 6) | !(IE 7) | !(IE 8) ]><!--> 12<html lang="en-CA"> 13<!--<![endif]--> 14<head> 15<meta charset="UTF-8" /> 16<meta name="viewport" content="width=device-width" /> 17<meta name="lnm.location" content="linknowmedia.fun" /> 18<title>Johnny C's Roofing | Roofing Services</title> 19<link rel="profile" href="http://gmpg.org/xfn/11" /> 20<link rel="pingback" href="https://johnnycsroofing.com/xmlrpc.php" /> 21<!--[if lt IE 9]>
22<script src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/html5.js" type="text/javascript"></script>
22 23<![endif]--> 24 <link rel="shortcut icon" type="image/png" href="https://johnnycsroofing.com/wp-content/uploads/sites/353/2026/03/favicon.png" /> 25<meta name='robots' content='max-image-preview:large' /> 26<meta name="description" content="At Johnny C's Roofing, our masterful roofing services exceed expectations, every time! Click the link to check out our website!" /><meta name="keywords" content="East Providence Roofing Contractor, East Providence Roofing Company, East Providence Siding Services, Narragansett Roofing Contractor, Narragansett Roofing Company, Narragansett Siding Services, Newport Roofing Contractor, Newport Roofing Company, Newport Siding Services" /><meta name="lnm.themename" content="rfr5" /><link rel='dns-prefetch' href='//www.google.com' /> 27<link rel='dns-prefetch' href='//maps.googleapis.com' /> 28<link rel='dns-prefetch' href='//kit.fontawesome.com' /> 29<link rel="alternate" type="application/rss+xml" title="Johnny C's Roofing Co » Home Comments Feed" href="https://johnnycsroofing.com/home/feed/" /> 30<style id="wp-img-auto-sizes-contain-inline-css"> 31img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 32/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 33</style> 34<style id="wp-block-library-inline-css"> 35:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
35--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 36 37/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */ 38</style> 39 40<style id="global-styles-inline-css"> 41:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
41--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
41.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 42/*# sourceURL=global-styles-inline-css */ 43</style> 44 45<link rel='stylesheet' id='normalize-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/normalize.min.css' media='all' /> 46<link rel='stylesheet' id='foundation-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/foundation.css' media='all' /> 47<link rel='stylesheet' id='style-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/style.css' media='all' /> 48<link rel='stylesheet' id='slick-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/slick/slick.css' media='all' /> 49<link rel='stylesheet' id='pagestylephp-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/page-css.php' media='all' />
50<script id="jquery-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/jquery.min.js"></script>
vendor: 1 bytes, line 50
50
51<script id="foundationjs-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/js/foundation/foundation.js"></script>
vendor: 1 bytes, line 51
51
52<script id="topbar-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/js/foundation/foundation.topbar.js"></script>
vendor: 1 bytes, line 52
52
53<script id="fontawesome-js" src="https://kit.fontawesome.com/f9c8f97a41.js"></script>
vendor: 1 bytes, line 53
53
54<script id="modernizr-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/vendor/modernizr.js"></script>
54 55<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://johnnycsroofing.com/xmlrpc.php?rsd" /> 56<meta name="generator" content="WordPress 7.1.2" /> 57<link rel="canonical" href="https://johnnycsroofing.com" /> 58<link rel='shortlink' href='https://johnnycsroofing.com/?p=59' />
59<script src='https://johnnycsroofing.com/?dm=fcba057eea8bd5e2ee7fbd61ba5c4ead&action=load&blogid=353&siteid=1&t=1798213891&back=https%3A%2F%2Fjohnnycsroofing.com%2Fhome%2F' type='text/javascript'></script>
59
59<script type="text/javascript"> 60 var lnmcrAjaxUrl = "https://johnnycsroofing.com/wp-admin/admin-ajax.php"; 61 var lnmcrNonce = "d1e2ddf1ef"; 62 63 // ultimate url regex 64 function urlRegex(string){ 65 var regex = "((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" 66 + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" 67 + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?" 68 + "((?:(?:[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}\\.)+" // named host 69 + "(?:" // plus top level domain 70 + "(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])" 71 + "|(?:biz|b[abdefghijmnorstvwyz])" 72 + "|(?:cat|com|coop|c[acdfghiklmnoruvxyz])" 73 + "|d[ejkmoz]" 74 + "|(?:edu|e[cegrstu])" 75 + "|f[ijkmor]" 76 + "|(?:gov|g[abdefghilmnpqrstuwy])" 77 + "|h[kmnrtu]" 78 + "|(?:info|int|i[delmnoqrst])" 79 + "|(?:jobs|j[emop])" 80 + "|k[eghimnrwyz]" 81 + "|l[abcikrstuvy]" 82 + "|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])" 83 + "|(?:name|net|n[acefgilopruz])" 84 + "|(?:org|om)" 85 + "|(?:pro|p[aefghklmnrstwy])" 86 + "|qa" 87 + "|r[eouw]" 88 + "|s[abcdeghijklmnortuvyz]" 89 + "|(?:tel|travel|t[cdfghjklmnoprtvwz])" 90 + "|u[agkmsyz]" 91 + "|v[aceginu]" 92 + "|w[fs]" 93 + "|y[etu]" 94 + "|z[amw]))" 95 + "|(?:(?:25[0-5]|2[0-4]" // or ip address 96 + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]" 97 + "|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1]" 98 + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}" 99 + "|[1-9][0-9]|[0-9])))" 100 + "(?:\\:\\d{1,5})?)" // plus option port number 101 + "(\\/(?:(?:[a-zA-Z0-9\\;\\/\\?\\:\\@\\&\\=\\#\\~" // plus option query params 102 + "\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?" 103 + "(?:\\b|$)"; 104 if (regex.match(string)) { 105 return 'Error: Urls are not allowed.'; 106 } else { 107 return true; // invalid email. 108 } 109 } 110 111 // detect urls in strings 112 function detectUrl(string) { 113 if (string.match(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)) { 114 return true; 115 } else { 116 return false; 117 } 118 } 119 120 function validateTextareaValue(textarea){ 121 if (textarea.length<8 || textarea.length>1000) { 122 return 'Error: Your review text must be between 8 and 1000 characters in length.'; 123 } else { 124 if (detectUrl(textarea) == true) { 125 // Url detected in textarea body. 126 return 'Error: Your review text must NOT contain any urls.'; 127 } else { 128 return true; 129 } 130 } 131 } 132 133 // for text 134 function reviewTextValidation(){ 135 var erriddiv = '#lnmreviewtext-error'; 136 var validate = urlRegex($('#lnmreviewtext').val()); 137 var validated = validateTextareaValue($('#lnmreviewtext').val()); 138 if (validated !== true || validate !== true) { 139 $('#lnmreviewtext').addClass('review-error'); 140 $(erriddiv).html(validated).slideDown(0); 141 return false; 142 } else { 143 return true; 144 }; 145 } 146 147 148 149 150 151 // for input name 152 function validateNameValue(name){ 153 var regex = /^[a-zA-Z\s]+$/; 154 if (name.length<3 || name.length>32) { 155 return 'Error: Your review name must be between 3 and 32 characters in length.'; 156 } else { 157 if (regex.test(name)) { 158 return true; 159 } else { 160 return 'Error: Please use only letters and spaces.'; 161 } 162 } 163 } 164 // for name 165 function reviewNameValidation(){ 166 var erriddiv = '#lnmreviewname-error'; 167 var validated = validateNameValue($('#lnmreviewname').val()); 168 if (validated !== true) { 169 $('#lnmreviewname').addClass('review-error'); 170 $(erriddiv).html(validated).slideDown(0); 171 return false; 172 } else { 173 return true; 174 }; 175 } 176 177 178 179 180 // for input email 181 function validateEmailValue(email){ 182 var regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 183 if (regex.test(email)) { 184 return true; 185 } else { 186 // invalid email.
187 return 'Error: The email provided is invalid.'; 188 } 189 } 190 191 // for email 192 function reviewEmailValidation(){ 193 var erriddiv = '#lnmreviewemail-error'; 194 var validated = validateEmailValue($('#lnmreviewemail').val()); 195 if (validated !== true) { 196 $('#lnmreviewemail').addClass('review-error'); 197 $(erriddiv).html(validated).slideDown(0); 198 return false; 199 } else { 200 return true; 201 }; 202 } 203 204 205 206 // for terms 207 function reviewTermsValidation(){ 208 var erriddiv = '#lnmreviewterms-error'; 209 if (!$('#lnmreviewterms').is(':checked')) { 210 $('#lnmreviewterms').addClass('review-error'); 211 $(erriddiv).html('You must agree to terms.').slideDown(0); 212 return false; 213 } else { 214 return true; 215 }; 216 } 217 218 function reviewAllValidation(){ 219 var isvalid = true; 220 221 // Validate Terms 222 var terms = reviewTermsValidation(); 223 if (terms === false) { 224 isvalid = false; 225 }; 226 227 // Validate Text 228 var text = reviewTextValidation(); 229 if (text === false) { 230 isvalid = false; 231 }; 232 // Validate Author 233 var name = reviewNameValidation(); 234 if (name === false) { 235 isvalid = false; 236 }; 237 // Validate Email 238 var email = reviewEmailValidation(); 239 if (email === false) { 240 isvalid = false; 241 }; 242 return isvalid; 243 } 244 245 246 $(function(){ 247 $('.review-error-container').slideUp(0); 248 $('.lnmcr-submit').addClass('disabled'); 249 250 251 $( '#lnmreviewform input, #lnmreviewform textarea' ).on("change", function(){ 252 var erriddiv = '#'+$(this).attr('id')+'-error'; 253 $(this).removeClass('review-error'); 254 $(erriddiv).empty().slideUp(0); 255 }); 256 $( '#lnmreviewform input, #lnmreviewform textarea' ).on("blur", function(){ 257 if ($(this).attr('type') !== 'radio') { 258 259 // lnmreviewname 260 if ($(this).attr('id') === 'lnmreviewname') { 261 reviewNameValidation(); 262 }; 263 // lnmreviewemail 264 if ($(this).attr('id') === 'lnmreviewemail') { 265 reviewEmailValidation(); 266 }; 267 // lnmreviewtext 268 if ($(this).attr('id') === 'lnmreviewtext') { 269 reviewTextValidation(); 270 }; 271 // lnmreviewterms 272 if ($(this).attr('id') === 'lnmreviewterms') { 273 reviewTermsValidation(); 274 }; 275 }; 276 }); 277 278 $('#lnmreviewterms').change(function(){ 279 if (this.checked) { 280 var isvalidreview = reviewAllValidation(); 281 if (isvalidreview === false) { 282 $(this).prop('checked', false); 283 $('.lnmcr-submit').addClass('disabled'); 284 } else { 285 $('.lnmcr-submit').removeClass('disabled'); 286 }; 287 }; 288 }); 289 290 $( '.lnmcr-submit' ).on( 'click', function(e) { 291 e.preventDefault(); 292 var isvalidreview = reviewAllValidation(); 293 if (isvalidreview === true) { 294 var serializedata = $("#lnmreviewform").serialize(); 295 serializedata = serializedata.split('&'); 296 for (var i = serializedata.length - 1; i >= 0; i--) { 297 if (!serializedata[i].startsWith('lnmcr')) { 298 delete serializedata[i]; 299 } 300 }; 301 serializedata = serializedata.flat().join("&"); 302 303 $.ajax({
304 url: lnmcrAjaxUrl, // no â?actionâ here 305 method: 'POST', 306 dataType: 'json', // expect JSON back 307 crossDomain: true, 308 xhrFields: { withCredentials: true }, // send cookies/session 309 data: { 310 action: 'lnmcr_ajax_post', 311 security: lnmcrNonce, 312 lnmreviewterms: $('#lnmreviewterms').val(), 313 lnmreviewserialized: serializedata, 314 }, 315 beforeSend() { 316 $('#lnmreviewform').slideUp(250); 317 $('#review-response-container') 318 .html('<i class="fa-solid fa-spinner fa-spin-pulse"></i>'); 319 }, 320 success(response) { 321 console.log(response); 322 setTimeout(() => { 323 $('#review-response-container').html('<span style="background:white;padding:10px;border-radius:4px;display:block">'+response.data+'<span>'); 324 }, 3500); 325 }, 326 error(xhr) { 327 console.error('AJAX error', xhr.status, xhr.responseText); 328 $('#review-response-container') 329 .html('<span style="background:white;padding:10px;border-radius:4px;display:block" class="error-message">Unexpected error occurred.</span>'); 330 } 331 }); 332 333 } 334 }); 335 }); 336 </script>
336 337<!-- pulled from default Schema Settings & Modified by LinkNow Media Customer Reviews -->
337<script type="application/ld+json">{"@context":"http:\/\/schema.org\/","@type":"LocalBusiness","name":"Johnny C's Roofing","description":"Roofing Contractor, Roofing Company and Siding Services","image":"https:\/\/johnnycsroofing.com\/wp-content\/themes\/rfr5\/images\/rich-card.png","url":"https:\/\/johnnycsroofing.com","logo":"https:\/\/johnnycsroofing.com\/wp-content\/uploads\/sites\/353\/2026\/03\/logo.png","faxNumber":"","email":"keith@johnnycsroo\ufb01ng.com","areaServed":"East Providence, Narragansett and Newport","paymentAccepted":"Visa, Mastercard, American Express, Discover, Cash, Check, Debit","address":{"@type":"PostalAddress","streetAddress":"","addressLocality":"East Providence","addressRegion":"RI","postalCode":"02914-4013","postOfficeBoxNumber":""},"sameAs":["https:\/\/www.facebook.com\/JohnnyCsRoofing\/","https:\/\/www.google.com\/maps?cid=17711842953272353810"],"contactPoint":[{"@type":"ContactPoint","telephone":"+1-401-727-1324","contactType":"customer service"}],"telephone":"+1-401-727-1324","openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Monday","opens":"08:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Tuesday","opens":"08:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Wednesday","opens":"08:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Thursday","opens":"08:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Friday","opens":"08:00","closes":"17:00"}],"review":[]}</script>
337 338 <!-- Google tag (gtag.js) (GA4) -->
vendor: 73 bytes, lines 338-339
338 339 <script async src="https://www.googletagmanager.com/gtag/js?id=
339G-E52YFCXG7Y
vendor: 21 bytes, lines 339-340
339"></script> 340
340<script> 341
vendor: 164 bytes, lines 341-344
341window.dataLayer = window.dataLayer || []; 342 function gtag(){dataLayer.push(arguments);} 343 gtag('js', new Date()); 344 gtag('config', '
344G-E52YFCXG7Y
vendor: 13 bytes, lines 344-345
344'); 345
345</script>
345 346 347 <meta name="townorder" id="townorder" content="East Providence, Narragansett and Newport"> 348<meta name="marketspecialties" id="marketspecialties" content="Roofing Contractor, Roofing Company and Siding Services"> 349<meta name="city" id="city" content="East Providence"> 350<link rel='stylesheet' id='datetimecss-css' href='https://johnnycsroofing.com/wp-content/plugins/linknowmedia-email/styles/jquery.datetimepicker.css' media='all' /> 351 352</head> 353<body class="wp-singular page-template-default page page-id-59 wp-theme-rfr5"> 354 355<header class="header-wrapper header-home clearfix"> 356 <div class="mobile-menu hide-for-large-up"> 357 <span class="mobile-navigation navigation-toggle"><i class="toggle-bars fa fa-bars"></i></span> 358 <div class="navigation-wrapper fullwidth-navigation"> 359 <nav class="top-bar fading" data-options=" custom_back_text: true; back_text: Back;" data-topbar itemscope itemtype="http://www.schema.org/SiteNavigationElement"> 360 <ul class="title-area"> 361 <li class="name"></li> 362 <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li> 363 </ul> 364 <div class="top-bar-section section"> 365 <div class="menu"><ul> 366<li class="page_item page-item-59 current_page_item active"><a href="https://johnnycsroofing.com/home/" aria-current="page">Home</a></li> 367<li class="page_item page-item-60 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/about-us/">About</a> 368<ul class='dropdown'> 369 <li class="page_item page-item-507"><a href="https://johnnycsroofing.com/about-us/blog/">Blog</a></li> 370 <li class="page_item page-item-509"><a href="https://johnnycsroofing.com/about-us/reviews/">Testimonials</a></li> 371</ul> 372</li> 373<li class="page_item page-item-61 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/roofing-services/">Roofing Services</a> 374<ul class='dropdown'> 375 <li class="page_item page-item-62"><a href="https://johnnycsroofing.com/roofing-services/commercial-roofing/">Commercial Roofing</a></li> 376 <li class="page_item page-item-63"><a href="https://johnnycsroofing.com/roofing-services/emergency-roof-repair/">Emergency Roof Repair</a></li> 377 <li class="page_item page-item-64"><a href="https://johnnycsroofing.com/roofing-services/hail-and-storm-damage-roof-repair/">Hail and Storm Damage Roof Repair</a></li> 378 <li class="page_item page-item-65"><a href="https://johnnycsroofing.com/roofing-services/roof-inspections/">Roof Inspections</a></li> 379 <li class="page_item page-item-66"><a href="https://johnnycsroofing.com/roofing-services/roof-maintenance/">Roof Maintenance</a></li> 380 <li class="page_item page-item-67"><a href="https://johnnycsroofing.com/roofing-services/roof-repair/">Roof Repair</a></li> 381 <li class="page_item page-item-68"><a href="https://johnnycsroofing.com/roofing-services/roof-restoration/">Roof Restoration</a></li> 382 <li class="page_item page-item-69"><a href="https://johnnycsroofing.com/roofing-services/roofer/">Roofer</a></li> 383 <li class="page_item page-item-70"><a href="https://johnnycsroofing.com/roofing-services/roofing-company/">Roofing Company</a></li> 384 <li class="page_item page-item-71"><a href="https://johnnycsroofing.com/roofing-services/roofing-services/">Roofing Services</a></li> 385 <li class="page_item page-item-221"><a href="https://johnnycsroofing.com/roofing-services/service-areas/">Service Areas</a></li> 386</ul> 387</li> 388<li class="page_item page-item-103 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/siding-and-gutter-services/">Siding and Gutter Services</a> 389<ul class='dropdown'> 390 <li class="page_item page-item-154"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-contractor/">Aluminum Siding Contractor</a></li> 391 <li class="page_item page-item-120"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-installation/">Aluminum Siding Installation</a></li> 392 <li class="page_item page-item-156"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-repair/">Aluminum Siding Repair</a></li> 393 <li class="page_item page-item-122"><a href="https://johnnycsroofing.com/siding-and-gutter-services/downspout-installation/">Downspout Installation</a></li> 394 <li class="page_item page-item-134"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-cleaning/">Gutter Cleaning</a></li> 395 <li class="page_item page-item-136"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-guard-installation/">Gutter Guard Installation</a></li> 396 <li class="page_item page-item-125"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-installation/">Gutter Installation</a></li> 397 <li class="page_item page-item-138"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-repair/">Gutter Repair</a></li> 398 <li class="page_item page-item-128"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-replacement/">Gutter Replacement</a></li> 399 <li class="page_item page-item-140"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-services/">Gutter Services</a></li> 400 <li class="page_item page-item-130"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-company/">Siding Company</a></li> 401 <li class="page_item page-item-142"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-contractor/">Siding Contractor</a></li> 402 <li class="page_item page-item-132"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-installation/">Siding Installation</a></li> 403 <li class="page_item page-item-144"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-repair/">Siding Repair</a></li> 404 <li class="page_item page-item-116"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-replacement/">Siding Replacement</a></li> 405 <li class="page_item page-item-146"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-services/">Siding Services</a></li> 406 <li class="page_item page-item-118"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-contractor/">Vinyl Siding Contractor</a></li> 407 <li class="page_item page-item-148"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-installation/">Vinyl Siding Installation</a></li> 408 <li class="page_item page-item-108"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-repair/">Vinyl Siding Repair</a></li> 409 <li class="page_item page-item-113"><a href="https://johnnycsroofing.com/siding-and-gutter-services/window-installation/">Window Installation</a></li> 410 <li class="page_item page-item-150"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-contractor/">Wood Siding Contractor</a></li> 411 <li class="page_item page-item-111"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-installation/">Wood Siding Installation</a></li> 412 <li class="page_item page-item-152"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-repair/">Wood Siding Repair</a></li> 413</ul> 414</li> 415<li class="page_item page-item-72 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/types-of-roofs/">Types of Roofs</a> 416<ul class='dropdown'> 417 <li class="page_item page-item-73"><a href="https://johnnycsroofing.com/types-of-roofs/epdm-roofing/">EPDM Roofing</a></li> 418 <li class="page_item page-item-74"><a href="https://johnnycsroofing.com/types-of-roofs/flat-roofing/">Flat Roofing</a></li> 419 <li class="page_item page-item-76"><a href="https://johnnycsroofing.com/types-of-roofs/metal-roofing/">Metal Roofing</a></li> 420 <li class="page_item page-item-77"><a href="https://johnnycsroofing.com/types-of-roofs/modified-bitumen-roofing/">Modified Bitumen Roofing</a></li> 421 <li class="page_item page-item-78"><a href="https://johnnycsroofing.com/types-of-roofs/shingle-roofing/">Shingle Roofing</a></li> 422</ul> 423</li> 424<li class="page_item page-item-87"><a href="https://johnnycsroofing.com/faq/">FAQ</a></li> 425<li class="page_item page-item-88"><a href="https://johnnycsroofing.com/gallery/">Gallery</a></li> 426<li class="page_item page-item-89"><a href="https://johnnycsroofing.com/contact-us/">Contact</a></li> 427</ul></div> 428</div></nav> 429 </div> 430 </div> 431 <div class="row header-bar"> 432 <div class="large-3 columns header-details"> 433 <div class="logo-wrapper"> 434 <a href="/" title="Johnny C's Roofing"><img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2026/03/logo.png" alt="Johnny C's Roofing Logo" width="200" height="195"></a> 435 </div> 436 </div> 437 <div class="large-7 columns navigation-wrapper strip-padding hide-for-medium-d
437own"> 438 <nav class="top-bar fading" data-options=" custom_back_text: true; back_text: Back;" data-topbar itemscope itemtype="http://www.schema.org/SiteNavigationElement"> 439 <ul class="title-area"> 440 <li class="name"></li> 441 <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li> 442 </ul> 443 <div class="top-bar-section section"> 444 <div class="menu"><ul> 445<li class="page_item page-item-59 current_page_item active"><a href="https://johnnycsroofing.com/home/" aria-current="page">Home</a></li> 446<li class="page_item page-item-60 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/about-us/">About</a> 447<ul class='dropdown'> 448 <li class="page_item page-item-507"><a href="https://johnnycsroofing.com/about-us/blog/">Blog</a></li> 449 <li class="page_item page-item-509"><a href="https://johnnycsroofing.com/about-us/reviews/">Testimonials</a></li> 450</ul> 451</li> 452<li class="page_item page-item-61 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/roofing-services/">Roofing Services</a> 453<ul class='dropdown'> 454 <li class="page_item page-item-62"><a href="https://johnnycsroofing.com/roofing-services/commercial-roofing/">Commercial Roofing</a></li> 455 <li class="page_item page-item-63"><a href="https://johnnycsroofing.com/roofing-services/emergency-roof-repair/">Emergency Roof Repair</a></li> 456 <li class="page_item page-item-64"><a href="https://johnnycsroofing.com/roofing-services/hail-and-storm-damage-roof-repair/">Hail and Storm Damage Roof Repair</a></li> 457 <li class="page_item page-item-65"><a href="https://johnnycsroofing.com/roofing-services/roof-inspections/">Roof Inspections</a></li> 458 <li class="page_item page-item-66"><a href="https://johnnycsroofing.com/roofing-services/roof-maintenance/">Roof Maintenance</a></li> 459 <li class="page_item page-item-67"><a href="https://johnnycsroofing.com/roofing-services/roof-repair/">Roof Repair</a></li> 460 <li class="page_item page-item-68"><a href="https://johnnycsroofing.com/roofing-services/roof-restoration/">Roof Restoration</a></li> 461 <li class="page_item page-item-69"><a href="https://johnnycsroofing.com/roofing-services/roofer/">Roofer</a></li> 462 <li class="page_item page-item-70"><a href="https://johnnycsroofing.com/roofing-services/roofing-company/">Roofing Company</a></li> 463 <li class="page_item page-item-71"><a href="https://johnnycsroofing.com/roofing-services/roofing-services/">Roofing Services</a></li> 464 <li class="page_item page-item-221"><a href="https://johnnycsroofing.com/roofing-services/service-areas/">Service Areas</a></li> 465</ul> 466</li> 467<li class="page_item page-item-103 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/siding-and-gutter-services/">Siding and Gutter Services</a> 468<ul class='dropdown'> 469 <li class="page_item page-item-154"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-contractor/">Aluminum Siding Contractor</a></li> 470 <li class="page_item page-item-120"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-installation/">Aluminum Siding Installation</a></li> 471 <li class="page_item page-item-156"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-repair/">Aluminum Siding Repair</a></li> 472 <li class="page_item page-item-122"><a href="https://johnnycsroofing.com/siding-and-gutter-services/downspout-installation/">Downspout Installation</a></li> 473 <li class="page_item page-item-134"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-cleaning/">Gutter Cleaning</a></li> 474 <li class="page_item page-item-136"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-guard-installation/">Gutter Guard Installation</a></li> 475 <li class="page_item page-item-125"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-installation/">Gutter Installation</a></li> 476 <li class="page_item page-item-138"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-repair/">Gutter Repair</a></li> 477 <li class="page_item page-item-128"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-replacement/">Gutter Replacement</a></li> 478 <li class="page_item page-item-140"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-services/">Gutter Services</a></li> 479 <li class="page_item page-item-130"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-company/">Siding Company</a></li> 480 <li class="page_item page-item-142"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-contractor/">Siding Contractor</a></li> 481 <li class="page_item page-item-132"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-installation/">Siding Installation</a></li> 482 <li class="page_item page-item-144"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-repair/">Siding Repair</a></li> 483 <li class="page_item page-item-116"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-replacement/">Siding Replacement</a></li> 484 <li class="page_item page-item-146"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-services/">Siding Services</a></li> 485 <li class="page_item page-item-118"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-contractor/">Vinyl Siding Contractor</a></li> 486 <li class="page_item page-item-148"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-installation/">Vinyl Siding Installation</a></li> 487 <li class="page_item page-item-108"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-repair/">Vinyl Siding Repair</a></li> 488 <li class="page_item page-item-113"><a href="https://johnnycsroofing.com/siding-and-gutter-services/window-installation/">Window Installation</a></li> 489 <li class="page_item page-item-150"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-contractor/">Wood Siding Contractor</a></li> 490 <li class="page_item page-item-111"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-installation/">Wood Siding Installation</a></li> 491 <li class="page_item page-item-152"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-repair/">Wood Siding Repair</a></li> 492</ul> 493</li> 494<li class="page_item page-item-72 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/types-of-roofs/">Types of Roofs</a> 495<ul class='dropdown'> 496 <li class="page_item page-item-73"><a href="https://johnnycsroofing.com/types-of-roofs/epdm-roofing/">EPDM Roofing</a></li> 497 <li class="page_item page-item-74"><a href="https://johnnycsroofing.com/types-of-roofs/flat-roofing/">Flat Roofing</a></li> 498 <li class="page_item page-item-76"><a href="https://johnnycsroofing.com/types-of-roofs/metal-roofing/">Metal Roofing</a></li> 499 <li class="page_item page-item-77"><a href="https://johnnycsroofing.com/types-of-roofs/modified-bitumen-roofing/">Modified Bitumen Roofing</a></li> 500 <li class="page_item page-item-78"><a href="https://johnnycsroofing.com/types-of-roofs/shingle-roofing/">Shingle Roofing</a></li> 501</ul> 502</li> 503<li class="page_item page-item-87"><a href="https://johnnycsroofing.com/faq/">FAQ</a></li> 504<li class="page_item page-item-88"><a href="https://johnnycsroofing.com/gallery/">Gallery</a></li> 505<li class="page_item page-item-89"><a href="https://johnnycsroofing.com/contact-us/">Contact</a></li> 506</ul></div> 507</div></nav> 508 </div> 509 <div class="large-2 columns header-cta text-right hide-for-medium-d
509own"> 510 <a class="header-cta-btn" href="tel:+14017271324">(401) 727-1324 </a> 511 </div> 512 </div> 513 <div class="row full"> 514 <div class="large-12 columns strip-padding slider-wrapper"> 515 <div class="slick-header-slider"> 516 517 <div> 518 <img src='https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/slider1.jpg' alt='Roofing Contractor' /> 519 </div> 520 <div> 521 <img src='https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/slider2.jpg' alt='Shingle Roofing' /> 522 </div> 523 <div> 524 <img src='https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/slider3.jpg' alt='Roofs and Gutters' /> 525 </div></div> 526<div class="slick-button-container"></div>
526<script> 527 jQuery(function($){ 528 // Prefer the specific instance by ID, fall back to class if needed 529 var $slider = $("#slick-0"); 530 if (!$slider.length) $slider = $(".slick-header-slider").first(); 531 if (!$slider.length) return; 532 533 var hasMobileImage = false; 534 var useStatic = hasMobileImage && window.matchMedia("(max-width: 1024px)").matches; 535 536 if (useStatic) { 537 // Replace the slider container with the static image 538 var $img = $("<img>", { 539 src: "", 540 alt: "" 541 }); 542 $slider.replaceWith($img); 543 return; // do NOT initialize slick 544 } 545 546 // Initialize slick as usual 547 $slider.slick({ 548 slide: 'div', 549 centerMode: false, 550 focusOnSelect: false, 551 552 accessibility: true, 553 pauseOnHover: false, 554 draggable: true, 555 touchMove: true, 556 infinite: true, 557 arrows: false, 558 useCSS: true, 559 swipe: true, 560 561 pauseOnDotsHover: false, 562 adaptiveHeight: false, 563 variableWidth: false, 564 swipeToSlide: false, 565 vertical: false, 566 autoplay: true, 567 dots: false, 568 fade: true, 569 rtl: false, 570 571 appendArrows: '.slick-button-container', 572 573 autoplaySpeed: 5000, 574 easing: 'swing', 575 speed: 1000, 576 slidesToShow: 1, 577 centerPadding: '0', 578 asNavFor: '' 579 }); 580 }); 581 </script>
581 582 583 <span class="scroll-arrow hide-for-medium-down"></span> 584 </div> 585 <div class="large-6 columns span-text hide-for-medium-down"> 586 <p>Book With <span>Johnny C's Roofing</span></p> 587 </div> 588 <div class="large-6 columns slide-text hide-for-medium-down"> 589 <div class="slick-text-slider"> 590<div><p class='caption'>Roofing Contractor</p></div><div><p class='caption'>Roofing Company</p></div><div><p class='caption'>Roofing Company</p></div></div> 591<div class="slick-button-container"></div>
591<script> 592 jQuery(function($){ 593 // Prefer the specific instance by ID, fall back to class if needed 594 var $slider = $("#slick-1"); 595 if (!$slider.length) $slider = $(".slick-text-slider").first(); 596 if (!$slider.length) return; 597 598 var hasMobileImage = false; 599 var useStatic = hasMobileImage && window.matchMedia("(max-width: 1024px)").matches; 600 601 if (useStatic) { 602 // Replace the slider container with the static image 603 var $img = $("<img>", { 604 src: "", 605 alt: "" 606 }); 607 $slider.replaceWith($img); 608 return; // do NOT initialize slick 609 } 610 611 // Initialize slick as usual 612 $slider.slick({ 613 slide: 'div', 614 centerMode: false, 615 focusOnSelect: false, 616 617 accessibility: true, 618 pauseOnHover: false, 619 draggable: true, 620 touchMove: true, 621 infinite: true, 622 arrows: false, 623 useCSS: true, 624 swipe: true, 625 626 pauseOnDotsHover: false, 627 adaptiveHeight: false, 628 variableWidth: false, 629 swipeToSlide: false, 630 vertical: false, 631 autoplay: true, 632 dots: false, 633 fade: true, 634 rtl: false, 635 636 appendArrows: '.slick-button-container', 637 638 autoplaySpeed: 5000, 639 easing: 'swing', 640 speed: 1000, 641 slidesToShow: 1, 642 centerPadding: '0', 643 asNavFor: '' 644 }); 645 }); 646 </script>
646 647 648 </div> 649 <div class="large-6 columns tag-text hide-for-medium-down"> 650 <p>Located in East Providence servicing East Providence, Narragansett, Newport and surrounding areas</p> 651 <div class="top-btn top-padding-xs"> 652 <a class="btn-slider" href="tel:+14017271324">Call Us </a> 653 <a href="/contact-us/" title="Contact us to Get Started Today" class=" btn-slider smaller-text">Contact Us</a> 654 </div> 655 </div> 656 </div> 657</header> 658<div class="mobile-sticky-cta"> 659 <a class="sticky-btn" href="tel:+14017271324">Call Us </a> 660 <a href="/contact-us/" class="sticky-btn alt" title="Send Us A Message">Message Us</a> 661 </div><div class="clearfix"></div><main > 662<article class="section-article" > 663 <div class="vertical-padding-xs side-buffer m-vpad-none"> 664 <div class="row vertical-padding-large m-vpad-none" data-equalizer > 665 <div class="large-7 columns content-right-buffer first-section" data-equalizer-watch > 666 <h1>Roofing Services</h1> 667 <p>Johnny C's Roofing is the leading local roofing company. We provide a complete range of services defined by quality, innovation, and expertise. With years of experience, weâve developed a strong reputation for our masterful craftsmanship and committed customer service, always going above and beyond to meet our clientsâ needs. For quality roofing from trusted professionals, we are the team for the job.</p> 668 <p>To schedule a no-obligation consultation, call us at (401) 727-1324 today.</p> 669 <div class="vertical-padding-small cta-btn-holder"> 670 <a class="cta-btn" href="tel:+14017271324">CALL NOW </a> 671 </div> 672 </div> 673 <div class="large-5 columns bg-holder strip-padding top-padding-small" data-equalizer-watch > 674 <div class="home-img1"> </div> 675 </div> 676 </div> 677 </div> 678 <div class="vertical-padding-xs side-buffer m-vpad-none home-bg"> 679 <div class="row vertical-padding-large inline-flex"> 680 <div class="large-9 columns"> 681 <h2>Industry Experts, Superior Roof Work</h2> 682 <p>Weâre more than roofers: Weâre masters of our craft. We combine a comprehensive understanding of our field with rigorous training, education, and experience. Our high level of expertise pays off in dividends for our clients. It allows us to deliver a superior standard of service, more efficient workmanship, and stellar results on every job. As a roofing company, we strive to develop smart solutions that save our customers time and money. We stick to our deadlines, and we consistently stay well under our clientsâ budgets while ensuring excellent quality control. Rest assured: When you choose us, you can take comfort knowing youâve chosen well. Youâve chosen the best in the business.</p> 683 <p><a href="https://external-app.gethearth.com/partners/johnny-cs-roofing?utm_campaign=57486&utm_content=darkblue&utm_medium=contractor-website&utm_source=contractor&utm_term=700x110" target="_blank"> 684 <img src="https://external-app.gethearth.com/contractor_images/johnny-cs-roofing/banner.jpg?color=darkblue&size_id=700x110"alt="Hearth 700x110"style="height:110px;width:700px" /> 685 </a></p> 686 </div> 687 <div class="large-3 columns text-center strip-padding"> 688 <div class="fb-page" data-href="https://www.facebook.com/JohnnyCsRoofing/" data-tabs="timeline" data-width="" data-height="" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><blockquote cite="https://www.facebook.com/JohnnyCsRoofing/" class="fb-xfbml-parse-ignore"><a href="https://www.facebook.com/JohnnyCsRoofing/">Johnny C's Roofing Company INC.</a></blockquote></div> 689 690 <div id="fb-root"></div> 691
691<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v23.0"></script>
691 692 </div> 693 </div> 694 </div> 695 <div class="vertical-padding-large side-buffer m-vpad-none"> 696 <div class="row" data-equalizer > 697 <div class="large-5 columns home-img2 mobile-bg-remove hide-for-medium-down" data-equalizer-watch > 698 </div> 699 <div class="large-7 columns content-left-buffer second-section" data-equalizer-watch > 700 <h2>A Complete Suite of Roofing Services</h2> 701 <p>We provide a complete suite of services for all your roofing needs. From new construction projects to old home restorations, we can do it all. No matter the size of the job, you can count on us to see it done right. We can help with:</p> 702 <ul class="icon-list"> 703 <li>Roof repairs</li> 704 <li>New roof construction</li> 705 <li>Roof replacements</li> 706 <li>Preventative maintenance</li> 707 <li>Roofing inspections</li> 708 <li>â¦and more</li> 709 </ul> 710 <p>We tailor our services according to each client using a thorough <strong>consultative process.</strong> As a roofing contractor, we take the time to get to know our clients. We take the time to learn about their needs, their wants, and their precise specifications. That way, we can provide a more personalized service experience based on their goals. Donât hesitate to get started with us by contacting us today.</p> 711 <a href="https://g.page/r/CRLkTRtTG831EBM/review" target="_blank" rel="noreferrer noopener" title="Google Review"><img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2026/01/leave-us-a-google-review-button.png" alt="Leave A Google Review"></a> 712 </div> 713 </div> 714 </div> 715 <div class="vertical-padding-large side-buffer home-img3 red-bg-section"> 716 <div class="row" data-equalizer > 717 <div class="large-9 columns content-right-buffer vertical-padding-xs red-bg-content" data-equalizer-watch > 718 <h2>Why Choose Johnny C's Roofingâs Roofing Services?</h2> 719 <p>We are a local business with a passion for our work and a passion for customer service. We strive to deliver high-value solutions that save you time, money, and stressâall while giving you the best quality roofing available. Choose us, and we promise you the following:</p> 720 <ul class="icon-list"> 721 <li>On-time service</li> 722 <li>Trained and qualified crew members</li> 723 <li>Fast turnarounds</li> 724 <li>Extended warranties</li> 725 <li>Money-saving solutions</li> 726 </ul> 727 <h2>Youâll Love Our Local Roofing ServicesâGuaranteed</h2> 728 <p>We know our roofing work is second to none. We know that no one can match the value of our services, the quality of our craftsmanship, and the skill of our staff. In fact, weâre so confident in ourselves, that we offer a <strong>complete customer satisfaction guarantee.</strong> Weâre not satisfied until weâve done the job 100% correct and the customer is 100% satisfied.</p> 729 <p>Here at our business, our clients always come first. We make your satisfaction our top priority, and weâll stop at nothing to achieve it. Thatâs our guarantee to you.</p> 730 </div> 731 <div class="large-3 columns home-img4 mobile-bg-remove" data-equalizer-watch > 732 </div> 733 </div> 734 </div> 735 <div class="vertical-padding-large side-buffer m-vpad-none"> 736 <div class="row"> 737 <div class="large-12 columns text-center"> 738 <div class="large-4 medium-6 columns"> 739 <img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/sg.png" alt="Satisfaction Guaranteed" loading="lazy" width="300" height="250"> 740 </div> 741 <div class="large-4 medium-6 columns"> 742 <img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/bf.png" alt="Budget Friendly" loading="lazy" width="300" height="250"> 743 </div> 744 <div class="large-4 medium-6 columns end"> 745 <img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/calp.png" alt="Certified and Licensed Professional" loading="lazy" width="300" height="250"> 746 </div> 747 </div> 748 </div> 749 </div> 750 <div class="vertical-padding-x-large home-img5 side-buffer cta-wrapper"> 751 <div class="row cta-row"> 752 <div class="large-6 columns cta-box"> 753 <h2>Johnny C's Roofing: <br>Your Top Choice for Quality Roofing</h2> 754 <h3>Get in Touch Today</h3> 755 <p>Professional, dependable, affordableâwhy wait? If you need quality work from a qualified roofer, we are the company to call. Weâve helped countless clients keep their property protected while saving time and money. We know we
755can do the same for you too.</p> 756 <div class="cta-btn-holder top-padding-xs"> 757 <a href="/contact-us/" title="Contact us to Get Started Today" class="cta-btn smaller-text">Contact us to get started today.</a> 758 </div> 759 </div> 760 </div> 761 </div> 762 </article> 763</main><div class="clearfix"></div> 764<footer class="footer-wrapper"> 765 <div class="content-wrapper side-buffer"> 766 <div class="row footer-inner vertical-padding-medium"> 767 <div class="large-3 columns footer-address"> 768 <h2>Contact Info</h2> 769 <p>East Providence, RI 02914-4013</p> 770 <p>Phone: (401) 727-1324</p> 771 <p>Email: [email protected]</p> 772 <div class="large-12 columns strip-padding footer-hours"> 773 <p><strong>Mon - Fri: 8:00AM - 5:00PM</strong></p> 774 <p><strong>Sat & Sun: By Appointment Only</strong></p> 775 <p><strong>Emergency Services Available</strong></p> 776 </div> 777 </div> 778 <div class="large-3 columns footer-payment text-center"> 779 <h2>Payment Methods</h2> 780 <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Visa.png' title='Visa' alt='Visa payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Mastercard.png' title='Mastercard' alt='Mastercard payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/American-Express.png' title='American Express' alt='American Express payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Discover.png' title='Discover' alt='Discover payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Cash.png' title='Cash' alt='Cash payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Check.png' title='Check' alt='Check payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Debit.png' title='Debit Card' alt='Debit Card payment icon'> 781 </div> 782 <div class="large-3 columns text-center strip-padding footer-social hide-if-no-social"> 783 <h2>Follow Us</h2> 784 785 <a class="lnm-social-icon " href="https://www.facebook.com/JohnnyCsRoofing/" rel="noreferrer noopener" itemprop="sameAs" target="blank" title="Facebook"><i class="fa fa-facebook"></i></a> 786 <a class="lnm-social-icon " href="https://www.google.com/maps?cid=17711842953272353810" rel="noreferrer noopener" itemprop="sameAs" target="blank" title="Google Maps"><i class="fa fa-map-marker"></i></a> 787 </div> 788 <div class="large-3 columns lnm-logo text-right"> 789 <img src="https://linknow.com/linknow_images/linknow-logo-white.png" alt="Website Hosted By LinkNow⢠Media" loading="lazy" width="200" height="75"/> 790 </div> 791 </div> 792 </div> 793</footer><div class="lnm-policies text-center lnm-policy-footer-links"><ul class="lnm-policy-useful-links"><li class="lnm-policy-list-item"><a href="https://johnnycsroofing.com/policy/privacy-policy/" class="lnm-policy-list-link">Privacy Policy</a></li></ul></div><style>.lnm-policies {background: white;}.lnm-policies li, .lnm-policies li.lnm-policy-list-item{display: inline-block;padding: 5px;}.lnm-policies a, .lnm-policies a.lnm-policy-list-link {color:#333333;}.lnm-policies ul.useful-links, .lnm-policies ul.lnm-policy-useful-links {color:#333333;}cmp-toolbar {display: inline-block !important;}@media (width <= 767px) {.lnm-policies { padding-bottom:100px;}}</style> 794 795<div class="slide-out-wrapper hide-for-medium-down" id="slide-out"> 796 <span class="form-toggle"><span class="toggle-holder"><i class="toggle-left"></i></span></span> 797 <div class="slide-out-content"> 798 <div class="slide-out-form"> 799 <span class="form-title">Contact us now to get a free estimate</span> 800 <form id="contactForm" class="contactForm" method="POST"> 801 <input type="hidden" name="submitContact"> 802 <div class="groupWrapper"> 803 <label for="fullName">Enter your full name:</label>
804 <input class="slideOutInput validate[required] shortField" type="text" name="fullName" id="fullName" title="Full Name"> 805 </div> 806 <div class="groupWrapper"> 807 <label for="phoneNumber">Enter your phone number:</label> 808 <input class="slideOutInput validate[required,custom[phone]]" type="text" name="phoneNumber" id="phoneNumber" title="Phone Number"> 809 </div> 810 <div class="groupWrapper"> 811 <label for="emailAddress">Enter your email address:</label> 812 <input class="slideOutInput validate[required,custom[emailAddress]]" type="text" name="emailAddress" id="emailAddress" title="Email Address"> 813 </div> 814 <div class="groupWrapper"> 815 <label for="emailMessage">Enter your message:</label> 816 <textarea class="validate[required]" type="text" name="emailMessage" id="emailMessage" title="Your Message"></textarea> 817 </div> 818 819 820 <div class="submitWrapper slideOut"> 821 <button type="submit" class="submit right" name="submitContact" id="submitContact">SEND</button> 822 </div> 823 <input type="hidden" name="akismet_check" value="1"><input type="hidden" name="lnm_recaptcha" value="1"><input type="hidden" name="g-recaptcha-response" value=""></form> 824 </div> 825 826 </div> 827 828 </div>
829<script type="speculationrules"> 830{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/sites/353/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/rfr5/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 831</script>
vendor: 1 bytes, line 831
831
832<script type="text/javascript">!function(){ var b=function(){ window.__AudioEyeSiteHash = "6ad3adfd9efe28c4de221c391e8a149b"; var a=document.createElement("script"); a.src="https://wsmcdn.audioeye.com/aem.js"; a.type="text/javascript"; a.setAttribute("async",""); document.getElementsByTagName("body")[0].appendChild(a)}; "complete"!==document.readyState?window.addEventListener?window.addEventListener("load",b):window.attachEvent&&window.attachEvent("onload",b):b()}(); </script>
832 833<style> 834.lnmreviewform { 835 width: 750px; 836 max-width: 100%; 837 margin: 0 auto; 838} 839.lnmreviewform #lnmreviewtext { 840 min-height: 150px; 841} 842.lnmcr-review-card { 843 margin: 45px auto; 844 padding: 45px 45px 65px 45px; 845 border: 1px solid #CCCCCC; 846 width: 100%; 847 max-width: 750px; 848} 849.lnmcr-review-card-title h3 { 850 margin: 0 auto; 851 852 padding: 0 0 10px 0; 853} 854.lnmcr-review-card-rating { 855 color:#ffcc00; 856 width: 100%; 857 max-width: 165px; 858 font-size: 28px; 859 display: inline-block; 860 float: left; 861} 862.lnmcr-review-card-author { 863 display: inline-block; 864 float: right; 865 padding: 0 25px 0 0; 866 867} 868.lnmcr-review-card-text { 869 margin: 20px 0; 870} 871.lnmcr-review-card-author span { 872 text-transform: capitalize; 873 display: block; 874 position: relative; 875 font-style: italic; 876 font-weight: bold; 877} 878 879 880.lnmcr-review-card-author span::before { 881 content: ""; 882 display: block; 883 width: 15px; 884 height: 1px; 885 background: #CCCCCC; 886 position: absolute; 887 top: 14px; 888 left: -25px; 889} 890 891.lnmcr-row { 892 padding-top: 45px; 893 padding-bottom: 45px; 894} 895.star-rating { 896 font-size: 40px; 897 padding: 0.25em 0.375em; 898 display: inline-flex; 899 flex-flow: row-reverse; 900 901 overflow: hidden; 902 border-radius: 0.75em; 903 background-color: white; 904} 905.star-rating input { 906 appearance:initial; 907 cursor: pointer; 908 position: relative; 909 padding: 0; 910 width: 1em; 911 height: 1em; 912 float: left; 913 text-align: center; 914 line-height: 1em; 915} 916.star-rating input::before, 917.star-rating input::after { 918 display: block; 919 top: 0; 920 bottom: 0; 921 left: 0; 922 right: 0; 923 position: absolute; 924} 925.star-rating input::before { 926 content: ""; 927 background-color: white; 928} 929.star-rating input::after { 930 content: "\2605"; 931 color: #CCCCCC; 932-webkit-transition: color 0.2s ease; 933-moz-transition: color 0.2s ease; 934-ms-transition: color 0.2s ease; 935-o-transition: color 0.2s ease; 936transition: color 0.2s ease; 937} 938.star-rating input:checked::after, 939.star-rating input:checked ~ input::after { 940 color: #ffcc00; 941} 942input.hasError, 943textarea.hasError { 944 border-color: red; 945} 946input.lnmcr-input-error { 947 border: 1px solid red !important; 948} 949input.errorType-charlength { 950 box-shadow: 10px 5px 5px red; 951} 952 953input.error { 954 border: 1px solid red !important; 955 /*box-shadow: 10px 5px 5px red;*/ 956} 957 958.hasError.errorType-charlength::after { 959 /*content: "x";*/ 960} 961.lnmreviewtextformError { 962 display: none !important; 963} 964 965#lnmreviewform .review-error { 966 border: 1px solid red; 967} 968span.success-message { 969 background: #4BB543; 970 color: white; 971 padding: 15px; 972} 973span.error-message { 974 background: #D32F2F; 975 color: white; 976 padding: 15px; 977} 978 979 980 981 982#review-response-container i.fa-solid.fa-spinner.fa-spin-pulse { 983 font-size: 28px; 984} 985 986.lnmcr-review-pagination a, 987.lnmcr-review-pagination span.current { 988 /* padding: 5px 10px; */ 989 background: none; 990 width: 30px; 991 height: 30px; 992 line-height: 26px; 993 margin: 0 2px 0 0; 994 border: 1px solid #CCCCCC; 995 display: inline-block; 996 font-size: 16px; 997} 998.lnmcr-review-pagination span.current { 999 background: #333; 1000 color: white; 1001} 1002.lnmcr-review-pagination a:hover { 1003 background: #333; 1004 color: white; 1005} 1006input.review-error, textarea.review-error { 1007 margin-bottom: 0; 1008} 1009.review-error-container { 1010 display: none; 1011 padding: 10px; 1012 border-left: 1px solid red; 1013 border-bottom: ; 1014 border-bottom: 1px solid red; 1015 border-right: 1px solid red; 1016 margin-bottom: 25px; 1017 color: white; 1018 font-weight: bold; 1019 background: red; 1020} 1021 1022@media only screen and (max-width: 650px) {.lnmcr-review-card {max-width: 100%;}} 1023</style>
vendor: 104 bytes, lines 1023-1025
1023 1024 1025<script id="lnm-recaptcha-enterprise-js" src="https://www.google.com/recaptcha/enterprise.js?render=
10256LflbUQsAAAAADQa-oHKDxYnfKpy0TfaniKv449Y
vendor: 12 bytes, line 1025
1025"></script>
1026<script id="lnm-recaptcha-enterprise-js-after"> 1027console.log('[LNM] recaptcha inline loaded'); 1028 1029(function(){ 1030 function ensureHidden(form){ 1031 var el = form.querySelector('input[name="g-recaptcha-response"]'); 1032 if(!el){ 1033 el = document.createElement('input'); 1034 el.type = 'hidden'; 1035 el.name = 'g-recaptcha-response'; 1036 form.appendChild(el); 1037 } 1038 return el; 1039 } 1040 1041document.addEventListener('click', function(e){ 1042 var el = e.target.closest('#contactForm #submitContact, #contactForm .submit, #requestForm #submitContact'); 1043 if(!el) return; 1044 1045 var form = el.closest('form'); 1046 if(!form) return; 1047 1048 // trigger a real submit event path (lets other listeners run) 1049 e.preventDefault(); 1050 1051 if (form.requestSubmit) { 1052 form.requestSubmit(); // preferred: dispatches submit event 1053 } else { 1054 // fallback for older browsers 1055 var evt = document.createEvent('Event'); 1056 evt.initEvent('submit', true, true); 1057 if (form.dispatchEvent(evt)) { 1058 form.submit(); 1059 } 1060 } 1061}, true); 1062 1063 1064 1065 document.addEventListener('submit', function(e){ 1066 var form = e.target; 1067 if(!form || form.nodeName !== 'FORM') return; 1068 1069console.log('[LNM] submit captured', form); 1070 1071 // Only forms you explicitly mark in the HTML. 1072 if(!form.querySelector('input[name="lnm_recaptcha"][value="1"]')) return; 1073 1074 // Prevent infinite loop: after we inject a token once, allow the submit. 1075 if(form.dataset && form.dataset.lnmRecaptchaDone === '1') return; 1076 1077 var hidden = ensureHidden(form); 1078 1079 // If we already have a token, let it submit. 1080 if(hidden && hidden.value) { 1081 if(form.dataset) form.dataset.lnmRecaptchaDone = '1'; 1082 return; 1083 } 1084 1085 // If grecaptcha isn't available, DO NOT block submission. 1086 // (Server-side enforce may still reject; but UX won't "freeze".) 1087 if(!window.grecaptcha || !grecaptcha.enterprise || !grecaptcha.enterprise.execute) { 1088 return; 1089 } 1090 1091 // From this point on, we are taking over submission. 1092 e.preventDefault(); 1093 1094 var done = false; 1095 1096 function finishSubmit(){ 1097 if(done) return; 1098 done = true; 1099 if(form.dataset) form.dataset.lnmRecaptchaDone = '1'; 1100 form.submit(); 1101 } 1102 1103 // Hard safety: never allow recaptcha to stall the UX. 1104 var timer = setTimeout(function(){ 1105 finishSubmit(); // fallback: submit even if token never arrives 1106 }, 6000); 1107 1108 try { 1109 grecaptcha.enterprise.ready(function(){ 1110 try { 1111 var p = grecaptcha.enterprise.execute('6LflbUQsAAAAADQa-oHKDxYnfKpy0TfaniKv449Y', {action: 'lnm_email_121901692'}); 1112 if(p && typeof p.then === 'function'){ 1113 p.then(function(token){ 1114 clearTimeout(timer); 1115 hidden.value = token || ''; 1116 finishSubmit(); 1117 }).catch(function(){ 1118 clearTimeout(timer); 1119 finishSubmit(); 1120 }); 1121 } else { 1122 clearTimeout(timer); 1123 finishSubmit(); 1124 } 1125 } catch(err){ 1126 clearTimeout(timer); 1127 finishSubmit(); 1128 } 1129 }); 1130 } catch(err){ 1131 clearTimeout(timer); 1132 finishSubmit(); 1133 } 1134 }, true); 1135})(); 1136//# sourceURL=lnm-recaptcha-enterprise-js-after 1137</script>
vendor: 1 bytes, line 1137
1137
1138<script id="cookiejs-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/cookie-js.min.js"></script>
vendor: 1 bytes, line 1138
1138
1139<script id="lnmscripts-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/lnm-scripts.min.js"></script>
vendor: 1 bytes, line 1139
1139
1140<script id="slickjs-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/slick/slick.js"></script>
vendor: 1 bytes, line 1140
1140
1141<script id="equalizer-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/js/foundation/foundation.equalizer.js"></script>
vendor: 1 bytes, line 1141
1141
1142<script id="formjs-js" src="https://johnnycsroofing.com/wp-content/plugins/linknowmedia-email/scripts/compiled.js"></script>
vendor: 1 bytes, line 1142
1142
1143<script id="formjs-js-after"> 1144(function () { 1145 function getForms() { 1146 return Array.prototype.slice.call(document.querySelectorAll('form.contactForm, form#contactForm')); 1147 } 1148 1149 function getKey(form) { 1150 var host = window.location.host || ''; 1151 var path = window.location.pathname || ''; 1152 var formId = form ? (form.id || 'contactForm') : 'contactForm'; 1153 return 'lnm_form_retention:' + host + ':' + path + ':' + formId; 1154 } 1155 1156 function trackedNames() { 1157 return ['fullName', 'phoneNumber', 'emailAddress', 'emailMessage']; 1158 } 1159 1160 function saveForm(form) { 1161 if (!form || !window.sessionStorage) return; 1162 1163 var data = {}; 1164 trackedNames().forEach(function (name) { 1165 var field = form.querySelector('[name="' + name + '"]'); 1166 if (field) { 1167 data[name] = field.value || ''; 1168 } 1169 }); 1170 1171 try { 1172 sessionStorage.setItem(getKey(form), JSON.stringify(data)); 1173 } catch (e) {} 1174 } 1175 1176 function restoreForm(form) { 1177 if (!form || !window.sessionStorage) return; 1178 1179 try { 1180 var raw = sessionStorage.getItem(getKey(form)); 1181 if (!raw) return; 1182 1183 var data = JSON.parse(raw); 1184 if (!data || typeof data !== 'object') return; 1185 1186 trackedNames().forEach(function (name) { 1187 var field = form.querySelector('[name="' + name + '"]'); 1188 if (!field) return; 1189 1190 if ((field.value || '') === '' && typeof data[name] !== 'undefined') { 1191 field.value = data[name]; 1192 } 1193 }); 1194 } catch (e) {} 1195 } 1196 1197 function clearForCurrentPage() { 1198 if (!window.sessionStorage) return; 1199
1200 getForms().forEach(function (form) { 1201 try { 1202 sessionStorage.removeItem(getKey(form)); 1203 } catch (e) {} 1204 }); 1205 1206 if (!getForms().length) { 1207 var host = window.location.host || ''; 1208 var path = window.location.pathname || ''; 1209 try { 1210 sessionStorage.removeItem('lnm_form_retention:' + host + ':' + path + ':contactForm'); 1211 } catch (e) {} 1212 } 1213 } 1214 1215 document.addEventListener('DOMContentLoaded', function () { 1216 var retentionMeta = document.getElementById('lnm-form-retention-meta'); 1217 var shouldRetain = retentionMeta && retentionMeta.getAttribute('data-retain-form') === '1'; 1218 1219 if (!shouldRetain && retentionMeta) { 1220 clearForCurrentPage(); 1221 } 1222 1223 getForms().forEach(function (form) { 1224 restoreForm(form); 1225 1226 trackedNames().forEach(function (name) { 1227 var field = form.querySelector('[name="' + name + '"]'); 1228 if (!field) return; 1229 1230 field.addEventListener('input', function () { 1231 saveForm(form); 1232 }); 1233 1234 field.addEventListener('change', function () { 1235 saveForm(form); 1236 }); 1237 }); 1238 1239 form.addEventListener('submit', function () { 1240 saveForm(form); 1241 }, true); 1242 }); 1243 }); 1244})(); 1245//# sourceURL=formjs-js-after 1246</script>
vendor: 1 bytes, line 1246
1246
1247<script> 1248if (window.matchMedia("(max-width: 1024px)").matches) { // Apply only for screens <= 1024px 1249 const observer = new MutationObserver(() => { 1250 const cmpToolbar = document.querySelector('cmp-toolbar'); 1251 if (cmpToolbar && cmpToolbar.shadowRoot) { 1252 const targetElement = cmpToolbar.shadowRoot.querySelector('#CMP_toolbar .text-primary-content'); 1253 if (targetElement) { 1254 // Apply styles 1255 targetElement.style.position = 'fixed'; 1256 targetElement.style.bottom = '135px'; 1257 targetElement.style.left = '8px'; 1258 targetElement.style.backgroundColor = '#333'; 1259 targetElement.style.color = '#fff'; 1260 // Disconnect the observer once the target element is styled 1261 observer.disconnect(); 1262 } 1263 } 1264 }); 1265 1266 // Start observing the DOM 1267 observer.observe(document.body, { childList: true, subtree: true }); 1268} 1269var src = $("#captchaImage").attr("src"); 1270var timestamp = new Date().getTime(); 1271 1272// If the URL already has a nocache parameter, replace its value. 1273if (src.indexOf("nocache=") !== -1) { 1274 src = src.replace(/(nocache=)\d+/, "$1" + timestamp); 1275} else { 1276 // If not, append the nocache parameter. 1277 src += (src.indexOf('?') === -1 ? '?' : '&') + "nocache=" + timestamp; 1278} 1279$("#captchaImage").attr("src", src); 1280 1281</script>
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.