Help
RSS
API
Feed
Maltego
Contact
Domain > mobilegadgetwebs.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2015-03-17
184.168.201.1
(
ClassC
)
2024-07-18
54.39.176.175
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyDate: Thu, 18 Jul 2024 13:06:37 GMTServer: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.33Location: https://mobilegadgetwebs.com/Content-Length: 237Content-Type: text/html; charsetiso-8859-1 !DOCTYPE HTML PUBLIC -//IETF//DTD HTML 2.0//EN>html>head>title>301 Moved Permanently/title>/head>body>h1>Moved Permanently/h1>p>The document has moved a hrefhttps://mobilegadgetwebs.com/>here/a>./p>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Thu, 18 Jul 2024 13:06:37 GMTServer: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.33X-Powered-By: PHP/7.4.33Cache-Control: no-transformExpires: Sat, 26 Jul 1997 05:00:00 GMTVary: User-Agent,Accept,Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/html; charsetUTF-8 !DOCTYPE html>html langen-us> head> meta charsetutf-8> meta http-equivX-UA-Compatible contentIEedge> meta nameviewport contentwidthdevice-width,minimum-scale1,initial-scale1> !-- pwa stuff (also used for AMP) - in header --> link relamphtml hrefhttps://mobilegadgetwebs.com/?&1>link relmanifest href/webmanifest/1695112613.28485.manifest.webmanifest>link relapple-touch-icon hrefhttps://core3.imgix.net/5f6bd73431206_512x512.png?autoformat,compress&fitcrop&w512&h512>meta nameapple-mobile-web-app-title contentMobile Gadget Webs>meta nameapple-mobile-web-app-capable contentyes> !-- SEO stuff --> title> Mobile-First Website Builder | White Label /title> meta namedescription contentInput your company description for services you will provide.> !-- canonical --> link relcanonical hrefhttps://mobilegadgetwebs.com/ /> !-- page specific SEO stuff --> !-- open graph stuff --> meta propertyog:title contentMobile-First Website Builder | White Label /> meta nametwitter:title contentMobile-First Website Builder | White Label /> meta propertyog:url contenthttps://mobilegadgetwebs.com/ /> meta nametwitter:url contenthttps://mobilegadgetwebs.com/ /> meta propertyog:description contentInput your company description for services you will provide. /> meta nametwitter:description contentInput your company description for services you will provide. /> meta propertyog:type contentwebsite> meta nametwitter:card contentsummary /> !-- favicon --> link relicon hrefhttps://core3.imgix.net/5c5ee6dc23bb8logo.png?autoformat,compress&fitmax& /> !-- ******** CSS ******** --> !-- optional CSS -->link relstylesheet href/framework/bootstrap/css/style.css?1716841974>!--link relstylesheet href/css//simple-line-icons/simple-line-icons.css>link relstylesheet href/css/typicons/typicons.css>--> !-- template css --> style> /* fonts import */@import url(https://fonts.googleapis.com/css?familyQuicksand:400,700&displayswap);/* body, html and modals */html, body, .modal-content, .bootstrap-datetimepicker-widget, footer { font-family: Quicksand, sans-serif; background: #151515; color: #fff;}.row.main_row { padding: 3em 0em;}/* general typography */.header_contents { background: linear-gradient(360deg, #151515 0%, #000 100%);}.header_contents h1 { /* header h1 */}.header_contents img { box-shadow: none !important;}h1, h2 { font-weight: bold;}h1 {}h2 {}img { border-radius: 1em; box-shadow: 0 20px 40px 0 rgba(0, 0, 0, 0.2);}.navbar-brand>img { border-radius: 0; box-shadow: none;}p, li, label {}p { border-radius: 10px; background-color: rgba(111, 23, 186, 0.2); box-shadow: 0 20px 40px 0 rgba(0, 0, 0, 0.2); opacity: 1; padding: 15px;}/* typography for desktop */@media (min-width: 768px) { .header_contents h1 { /* header h1 */ } header.height_desktop_fullscreen .header_contents h1 { /* h1 in fullscreen page headers */ } h1 { } h2 { } p, li, label { }}/* typography for mobile */@media (max-width: 768px) { .header_contents h1 { /* header h1 */ } header.height_mobile_fullscreen .header_contents h1 { /* h1 in fullscreen page headers */ } h1 { } h2 { } p, li, label { }}/* links */a, a:hover, a:active, a:focus { /* color, font-family, text-decoration, ... */ color: rgba(130, 0, 236);}a:hover, a:active, a:focus { /* hover/active/focus status */ text-decoration: underline;}/* buttons - also in header nav bar *//* NOTE! Buttons have a border so you need to specify also a border color or remove it */.btn, button, button:hover, .btn-primary:hover,button:active, .btn-primary:active,button:focus, .btn-primary:focus, .navbar-toggle,.navbar-toggle:hover { color: #fff; background: rgba(130, 0, 236, 0.85); border-radius: 0.55em; padding: 0.5em 1.5em; transition: all 0.3s linear;}@media (min-width: 768px) { .btn, button, button:hover, .btn-primary:hover, button:active, .btn-primary:active, button:focus, .btn-primary:focus, .navbar-toggle, .navbar-toggle:hover { font-size: 1.2em; }}button:hover, .btn-primary:hover,button:active, .btn-primary:active,button:focus, .btn-primary:focus, .navbar-toggle,.navbar-toggle:hover { /* hover/active status */ background: rgba(130, 0, 236, 1);}/* single button in a row on desktop */@media (min-width: 768px) { .col-sm-12 .btn-block { /* margin, padding, font-size, ... */ }}/* button in header (desktop + mobile) */.header_contents .btn, .header_contents button, .header_contents button:hover, .header_contents .btn-primary:hover,.header_contents button:active, .header_contents .btn-primary:active,.header_contents button:focus, .header_contents .btn-primary:focus { /* padding, font-size, ... */}.header_contents button:hover, .header_contents .btn-primary:hover,.header_contents button:active, .header_contents .btn-primary:active,.header_contents button:focus, .header_contents .btn-primary:focus { /* hover/active status */}/* button in header, in desktop */@media (min-width: 768px) { .header_contents .btn, .header_contents button, .header_contents button:hover, .header_contents .btn-primary:hover, .header_contents button:active, .header_contents .btn-primary:active, .header_contents button:focus, .header_contents .btn-primary:focus { /* padding, font-size, ... */ } .header_contents button:hover, .header_contents .btn-primary:hover, .header_contents button:active, .header_contents .btn-primary:active, .header_contents button:focus, .header_contents .btn-primary:focus { /* hover/active status */ }}/* navigation - main bar for desktop and mobile */#mainNav {}#mainNav, .navbar-default .navbar-brand { background: #000;}/* transparent navbar */#mainNav.navbar-transparent {}/* desktop navigation */@media (min-width: 768px) { /* navigation - main */ #mainNav, .navbar-default .navbar-brand { /* height, padding, ... */ } /* menu links */ .navbar-default .navbar-nav>li>a { background: transparent; color: #fff; border-radius: 0.5em; } /* menu links in transparent navbar */ .navbar-transparent .navbar-nav>li>a { } /* hover menu link */ .nav>li>a:focus, .nav>li>a:hover, .navbar-default .navbar-nav>li>a:focus, .navbar-default .navbar-nav>li>a:hover { background: rgba(130, 0, 236, 0.75); color: #fff; } /* active menu link */ .navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus, .navbar-default .navbar-nav>.active>a:hover { background: rgba(130, 0, 236, 0.95); color: #fff; } /* menu link that toggles dropdown menu */ .navbar-default .navbar-nav>li>a { } /* dropdown menus */ .navbar-nav>li>.dropdown-menu { background: #000; } /* links in dropdown */ .dropdown-menu>li>a { } /* hover links in dropdown */ .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover { } /* custom additional buttons */ .nav .btn-nav-customlink { /* padding, color, margin, ... */ }}/* mobile navigation */@media (max-width: 768px) { /* buttons: hamburger menu, login, shopping cart, ... */ /* NOTE! Buttons have a border so you need to specify also a border color or remove it */ .navbar-btn, .navbar-btn:hover, .navbar-btn:active, .navbar-btn:focus, .navbar-default .navbar-toggle, .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus, .navbar-default .navbar-toggle:active { /* background, color, border-color */ background: rgba(130, 0, 236, 0.95); border: none; } /* page title in mobile navigation bar */ .navbar-default .navbar-brand>span { /* display: none; */ } /* links in menu navigation dropdown */ ul.nav, .nav>li>a { /* color, decoration, background, ... */ background: #000; color: #fff; } .nav>li.divider { /* border-color needs to be the same as the color above */ }}/* above nav */#abovenav { /* background, ... */}#abovenav .container, #abovenav .container-fluid { /* padding, font-size, ... */}@media (min-width: 768px) { /* on desktops */ #abovenav { }}/* footer */footer .container-fluid { /* background, border-top, color, ... */ background: #000;}.widget_footer h1, .widget_footer h2 { zoom: .5;}/**** WIDGETS ****//* general background overlay for widgets with a background image and the dark overlay option set to on */.background_overlay { /* opacity, background (pattern), ... */}/* header overlay */header .background_overlay { /* opacity, background, ... */}/* rows */.row.main_row { /* margin-top, ... */}/* contentblock */.widget_contentblock { /* margins, padding, font-size, ... */}/* contentblock on desktop */@media (min-width: 768px) { .widget_contentblock { }}/* contentblock on mobile */@media (max-width: 768px) { .widget_contentblock { }}/* the map container, either in contentblocks or standalone */.container_map { /* margin, padding, border, ... */}/* thumbnails - widget container */.widget_thumbnails { /* margin, padding, ... */}/* thumbnails - single image */.widget_thumbnails .list_gallerygrid_container .list_gallerygrid_item_container .list_gallerygrid_item { /* border, border-radius, ... */}/* forms - input, textarea, select */form .form-control { /* border-radius, background, font, color, ... */}/* lists tabs on desktop */@media (min-width: 768px) { .list_container .tab-content { /* background, border, padding, ... */ }}/* lists - list item (the actual column) */.list_item { /* background */}/* inside the column */.list_item_contained { /* border, margin, background, ... */}/* list item on desktop */@media (min-width: 768px) { .list_item { }}/* list item on mobile */@media (max-width: 768px) { .list_item { }}/* item title in lists */.list_item .list_item_text h3 { /* color, font-size, font-weight, ... */}/* item abstract in lists */.list_item .list_item_text p { /* font-size, color, ... */}/* carousel - used in sliders */.carousel { /* border, width, height, margin, box-shadow, ... */}/* single slide of the carousel */.carousel .item { /* margin, padding, ... */}/* carousel on desktop */@media (min-width: 768px) { .carousel { /* border, width, height, margin, box-shadow, ... */ }}/* prices */.prices_price_container { /* main container */}.prices_price_container .prices_price { /* single price column */}/* text in columns *//* main container */.textincolumnscolumns_container {}/* column container - column container */.textincolumnscolumns_container .textincolumns_column_container {}/* actual column */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column {}/* image container */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_image {}/* image */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_image img {}/* icon */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_icon i {}/* title */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_title {}/* body */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_body {}/* testimonials */.testimonials_top_image, .testimonials_top_slider, .testimonials_top_title { /* hidden by default */}.testimonials_body { /* font-size, shadow, border, ... */}.testimonials_body:before { /* border color and thickness for arrow, position, ... */}.testimonials_body:after { /* background-color of arrow, position, ... */}.testimonials_bottom_image img { /* float, border-radius, height, margins, ... */}.testimonials_bottom_title { /* margins */}.testimonials_bottom_title h3 { /* font-size, margins, ... */}.testimonials_bottom_title h4 { /* font-size, margins, ... */} /style> !-- end template css -->link relpreconnect hrefhttps://fonts.googleapis.com/ crossorigin> !-- custom css from pickers --> style> h1 { font-family: !important; }h2, h3, h4 { font-family: !important; }body, .modal-content { font-family: !important; }#mainNav, .navbar-default .navbar-brand, .navbar-default .navbar-nav>li>a { font-family: !important; }body, .modal-content { background: # }body, .modal-content { color: # }a, a:hover, a:visited { color: # }.btn, .btn:visited, .btn:hover, .btn:focus, button, button:hover, button:visited, .btn-primary:visited, .btn-primary:hover, button:active, .btn-primary:active, button:focus, .btn-primary:focus, .navbar-toggle:hover, .btn-nav-customlink:hover { background: #424ced !important; }.btn, .btn:visited, .btn:hover, .btn:focus, button, button:hover, button:visited, .btn-primary:visited, .btn-primary:hover, button:active, .btn-primary:active, button:focus, .btn-primary:focus, .navbar-toggle:hover { color: # }#mainNav, .nav .dropdown, .nav .dropdown-menu, .nav .dropdown a, .nav .dropdown-menu a, ul.nav { background: #424ced !important; }#mainNav, .navbar, .navbar-default, .navbar a, .navbar-default a, .navbar-default .navbar-brand, .nav>li>a { color: #ffffff !important; }.navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus, .navbar-default .navbar-nav>.active>a:hover, .navbar-default .navbar-header .navbar-toggle.navbar-btn, .navbar-default .btn-nav-customlink { background: #b7b7bd !important; }.navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus, .navbar-default .navbar-nav>.active>a:hover, .navbar-default .navbar-header .navbar-toggle.navbar-btn, .navbar-default .btn-nav-customlink { color: #ffffff !important; }footer .container-fluid { background: #424ced !important; }footer .container-fluid { color: #ffffff !important; }footer .container-fluid a { color: rgb(255, 255, 255) !important; } /style> !-- end custom css -->!-- fonts -->style>@import url(https://fonts.googleapis.com/css?familyRoboto);/style> !-- custom css --> style> /* fonts import *//* @import url(https://fonts.googleapis.com/css?familyOpen+Sans); *//* body, html and modals */html, body, .modal-content, .bootstrap-datetimepicker-widget, footer .container-fluid { /* font-family, color, font-size, ... */}/* general typography */.header_contents h1 { /* header h1 */}h1 {}h2 {}p, li, label {}/* typography for desktop */@media (min-width: 768px) { .header_contents h1 { /* header h1 */ } header.height_desktop_fullscreen .header_contents h1 { /* h1 in fullscreen page headers */ } h1 { } h2 { } p, li, label { }}/* typography for mobile */@media (max-width: 768px) { .header_contents h1 { /* header h1 */ } header.height_mobile_fullscreen .header_contents h1 { /* h1 in fullscreen page headers */ } h1 { } h2 { } p, li, label { }}/* links - also in transparent nav */a, a:hover, a:active, a:focus, .navbar-transparent .navbar-nav>li>a, .navbar-transparent .navbar-nav>li>a:hover, .navbar-transparent .navbar-nav>li>a:focus { /* color, font-family, text-decoration, ... */}a:hover, a:active, a:focus, .navbar-transparent .navbar-nav>li>a:hover, .navbar-transparent .navbar-nav>li>a:focus { /* hover/active/focus status */}/* buttons - also in header nav bar *//* NOTE! Buttons have a border so you need to specify also a border color or remove it */.btn, button, button:hover, .btn-primary:hover,button:active, .btn-primary:active,button:focus, .btn-primary:focus, .navbar-toggle,.navbar-toggle:hover { /* background, color, border-color */}button:hover, .btn-primary:hover,button:active, .btn-primary:active,button:focus, .btn-primary:focus, .navbar-toggle,.navbar-toggle:hover { /* hover/active status */}/* single button in a row on desktop */@media (min-width: 768px) { .col-sm-12 .btn-block { /* margin, padding, font-size, ... */ }}/* button in header (desktop + mobile) */.header_contents .btn, .header_contents button, .header_contents button:hover, .header_contents .btn-primary:hover,.header_contents button:active, .header_contents .btn-primary:active,.header_contents button:focus, .header_contents .btn-primary:focus { /* padding, font-size, ... */}.header_contents button:hover, .header_contents .btn-primary:hover,.header_contents button:active, .header_contents .btn-primary:active,.header_contents button:focus, .header_contents .btn-primary:focus { /* hover/active status */}/* button in header, in desktop */@media (min-width: 768px) { .header_contents .btn, .header_contents button, .header_contents button:hover, .header_contents .btn-primary:hover, .header_contents button:active, .header_contents .btn-primary:active, .header_contents button:focus, .header_contents .btn-primary:focus { /* padding, font-size, ... */ } .header_contents button:hover, .header_contents .btn-primary:hover, .header_contents button:active, .header_contents .btn-primary:active, .header_contents button:focus, .header_contents .btn-primary:focus { /* hover/active status */ }}/* navigation - main bar for desktop and mobile */#mainNav {}/* transparent navbar */#mainNav.navbar-transparent {}/* desktop navigation */@media (min-width: 768px) { /* navigation - main */ #mainNav, .navbar-default .navbar-brand { /* height, padding, ... */ } /* menu links */ .navbar-default .navbar-nav>li>a { } /* menu links in transparent navbar */ .navbar-transparent .navbar-nav>li>a { } /* hover menu link */ .nav>li>a:focus, .nav>li>a:hover, .navbar-default .navbar-nav>li>a:focus, .navbar-default .navbar-nav>li>a:hover { } /* active menu link */ .navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus, .navbar-default .navbar-nav>.active>a:hover { } /* menu link that toggles dropdown menu */ .navbar-default .navbar-nav>li>a { } /* dropdown menus */ .navbar-nav>li>.dropdown-menu { } /* links in dropdown */ .dropdown-menu>li>a { } /* hover links in dropdown */ .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover { } /* custom additional buttons */ .nav .btn-nav-customlink { /* padding, color, margin, ... */ }}/* mobile navigation */@media (max-width: 768px) { /* buttons: hamburger menu, login, shopping cart, ... */ /* NOTE! Buttons have a border so you need to specify also a border color or remove it */ .navbar-btn, .navbar-btn:hover, .navbar-btn:active, .navbar-btn:focus, .navbar-default .navbar-toggle, .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus, .navbar-default .navbar-toggle:active { /* background, color, border-color */ } /* page title in mobile navigation bar */ .navbar-default .navbar-brand>span { /* display: none; */ } /* links in menu navigation dropdown */ ul.nav, .nav>li>a { /* color, decoration, background, ... */ } .nav>li.divider { /* border-color needs to be the same as the color above */ }}/* above nav */#abovenav { /* background, ... */}#abovenav .container, #abovenav .container-fluid { /* padding, font-size, ... */}@media (min-width: 768px) { /* on desktops */ #abovenav { }}/* footer */footer .container-fluid { /* background, border-top, color, ... */}footer .widget_container_footer { /* transform, ... */ transform: scale(0.9);}/**** WIDGETS ****//* general background overlay for widgets with a background image and the dark overlay option set to on */.background_overlay { /* opacity, background (pattern), ... */}/* header overlay */header .background_overlay { /* opacity, background, ... */}/* rows */.row.main_row { /* margin-top, ... */}.row.main_row.with-background .container { /* margin, ... */}@media (min-width: 768px) { /* rows for desktop */ .row.main_row { /* margin-top, ... */ } .row.main_row.with-background .container { /* margin, ... */ }}/* contentblock */.widget_contentblock { /* margins, padding, font-size, ... */}.widget_contentblock img, .carousel .item img, .contentblock_videoembed iframe, .modal-body .modal_image img { /* images, videos, carousels - border-radius, ... */}/* contentblock on desktop */@media (min-width: 768px) { .widget_contentblock { }}/* contentblock on mobile */@media (max-width: 768px) { .widget_contentblock { }}/* the map container, either in contentblocks or standalone */.container_map { /* margin, padding, border, ... */}/* thumbnails - widget container */.widget_thumbnails { /* margin, padding, ... */}/* thumbnails - single image */.widget_thumbnails .list_gallerygrid_container .list_gallerygrid_item_container .list_gallerygrid_item { /* border, border-radius, ... */}/* forms - input, textarea, select */form .form-control { /* border-radius, background, font, color, ... */}/* lists tabs on desktop */@media (min-width: 768px) { .list_container .tab-content { /* background, border, padding, ... */ }}/* lists - list item (the actual column) */.list_item { /* background */}/* inside the column */.list_item_contained { /* border, margin, background, ... */}/* list item on desktop */@media (min-width: 768px) { .list_item { }}/* list item on mobile */@media (max-width: 768px) { .list_item { }}/* item title in lists */.list_item .list_item_text h3 { /* color, font-size, font-weight, ... */}/* item abstract in lists */.list_item .list_item_text p { /* font-size, color, ... */}/* carousel - used in sliders */.carousel { /* border, width, height, margin, box-shadow, ... */}/* single slide of the carousel */.carousel .item { /* margin, padding, ... */}/* carousel on desktop */@media (min-width: 768px) { .carousel { /* border, width, height, margin, box-shadow, ... */ }}/* prices */.prices_price_container { /* main container */}.prices_price_container .prices_price { /* single price column */}/* text in columns *//* main container */.textincolumnscolumns_container {}/* column container - column container */.textincolumnscolumns_container .textincolumns_column_container {}/* actual column */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column {}.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column:hover { /* hover */}/* image container */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_image {}/* image */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_image img {}.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column:hover .textincolumns_image img {}/* icon */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_icon i {}/* title */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_title {}/* body */.textincolumnscolumns_container .textincolumns_column_container .textincolumns_column .textincolumns_body {}/* testimonials */.testimonials_top_image, .testimonials_top_slider, .testimonials_top_title { /* hidden by default */}.testimonials_body { /* font-size, shadow, border, ... */}.testimonials_body:before { /* border color and thickness for arrow, position, ... */}.testimonials_body:after { /* background-color of arrow, position, ... */}.testimonials_bottom_image img { /* float, border-radius, height, margins, ... */}.testimonials_bottom_title { /* margins */}.testimonials_bottom_title h3 { /* font-size, margins, ... */}.testimonials_bottom_title h4 { /* font-size, margins, ... */} /style> !-- end custom css --> !-- ******* end CSS ******* --> !-- global javascript variables --> script> var allMaps ; var _api_url \/\/mobilegadgetwebs.com\/index.php; /script> !-- ******* analytics and third-party JS ******* --> meta namegoogle-site-verification contentYdI7lLF6R89BlIaXGpSfK15z-W6VPB6QRpxZmX6SMR0 /> !-- ***** end analytics and third-party JS ***** --> /head> body class > div classmain_page_container page_408800 homepage with_header page-navbar-fixed-top> !-- used for detecting current boostrap-based media query --> span idmq-detector> span classvisible-xs>/span> span classvisible-sm>/span> span classvisible-md>/span> span classvisible-lg>/span> /span> !-- loader overlay and spinning icon shown when on mobile for .show_loader links --> div classloader_overlay style>div>i classfa fa-spinner fa-pulse fa-3x fa-fw>/i>/div>/div> !-- main body inclusion --> !-- alert message -->!-- login required for this page? -->!-- header & navigation -->nav idmainNav classnavbar navbar-default navbar-fixed-top navbar-transparent > !-- bar above header/nav --> div classcontainer> !-- MOBILE NAVBAR CONTAINER - Brand and toggle get grouped for better mobile display --> div classnavbar-header visible-xs> !-- back button - we can get it from a controller, for example from the _view controller --> !-- navbar branding - only mobile and only when no back button --> a classnavbar-brand show-loader aria-labelHome hrefhttps://mobilegadgetwebs.com/ stylemax-width: 59%;> span>Homepage/span> /a> !-- hamburger menu --> !-- mobile menus --> button typebutton aria-labelMenu classnavbar-toggle navbar-btn collapsed navbar-menu data-togglecollapse data-target#navbar-collapse-menus> i classfa fa-bars>/i> /button> !-- shopping cart button for mobile --> !-- user management button for mobile --> !-- search button for mobile --> !-- qrcode button for mobile --> !-- darkmode button for mobile --> !-- PWA manual push notifications button for mobile --> button typebutton aria-labelNotifications classnavbar-toggle navbar-btn collapsed navbar-show-pushnotifications navbar-show-pushnotifications-mobile href# onclickshowPushnotifications(); return false; title> span classnavbar-menu-alert-pushnotifications>/span> i classfa fa-envelope-o aria-hiddentrue>/i> /button> /div> !-- end navbar-header with mobile title and buttons --> !-- DESKTOP NAVBAR - branding, menus and buttons --> div classhidden-xs> !-- desktop navigation --> ul classnav navbar-nav navbar-nav-desktop> !-- homepage / root pages --> li aria-labelHome classpages active > a classshow-loader hrefhttps://mobilegadgetwebs.com/> Home /a> /li> !-- homepage / root pages --> li aria-labelOur Sites classpages > a classshow-loader hrefhttps://mobilegadgetwebs.com/mobile-first-websites> Our Sites /a> /li> !-- homepage / root pages --> li aria-labelIncluded classpages > a classshow-loader href/m/28485/p/408802> Included /a> /li> !-- homepage / root pages --> li aria-labelContact us classpages > a classshow-loader hrefhttps://mobilegadgetwebs.com/contact-us> Contact us /a> /li> !-- qrcode for desktop --> !-- shopping cart button for desktop --> !-- other header links --> !-- social links --> !-- darkmode --> !-- PWA manual push notifications button for mobile --> li> a typebutton classnavbar-show-pushnotifications navbar-show-pushnotifications-desktop href# onclickshowPushnotifications(); return false;> span classnavbar-menu-alert-pushnotifications>/span> i classfa fa-envelope-o aria-hiddentrue>/i> /a> /li> /ul> /div> !-- /.navbar-collapse --> /div> !-- /.container-fluid -->/nav>!-- toggle divs for mobile -->div classnavbar-toggle-mobile-divs visible-xs-block> !-- search --> !-- shopping cart --> !-- user menus --> div classcollapse idnavbar-collapse-menus> ul classnav> !-- mobile dropdown navigation --> li class active > a classshow-loader hrefhttps://mobilegadgetwebs.com/> Home /a> /li> !-- mobile dropdown navigation --> li class > a classshow-loader hrefhttps://mobilegadgetwebs.com/mobile-first-websites> Our Sites /a> /li> !-- mobile dropdown navigation --> li class > a classshow-loader href/m/28485/p/408802> Included /a> /li> !-- mobile dropdown navigation --> li class > a classshow-loader hrefhttps://mobilegadgetwebs.com/contact-us> Contact us /a> /li> !-- other header links --> !-- social links --> /ul> /div> /div>!-- end toggle divs for mobile -->!-- end navigation -->!-- top share button -->!-- end top share button -->!-- add to favorites icon -->!-- end add to favorites icon -->header classheight_desktop_auto height_mobile_auto header-navbar-fixed-top data-heightauto data-height-mobileauto idwidget_785577> div classheader_contents> !-- ***** this file is used to add a background to any widget or row ***** background styles (databackgroundstyle): 1: solid color (databackgroundbgcolor) 2: image or images (databackgroundimage_url) 3: particles (databackgroundparticles) 4: video (databackgroundvideo)-->div classbackground-container > !-- solid color --> div stylez-index: -1; height: 100%; width: 100%; position: absolute; left: 0; top: 0; background-color: #6d9eeb;>/div> !-- overlay --> /div> div classcontainer data-w_id785577 data-p_id408800> !-- section header --> div classrow widget_header no_image > div classcol-xs-12 col-sm-12 contentblock_content stylepadding: 0;> div classcontentblock_text col-sm-12 ?>> div classcontentblock_text_titles> h1 classremove_if_empty data-keyh1 data-widget785577 style text-align: center !important; font-size: 32px !important; font-family: Roboto !important; color: #ffffff !important; > MOBILE GADGET WEBS /h1> h2 classremove_if_empty data-keyh2 data-widget785577 style text-align: center !important; font-size: 24px !important; font-family: Roboto !important; color: #ffffff !important; > WORLDS ONLY TRUEBR>MOBILE-FIRST WEBSITES /h2> /div> !-- date or other fields --> p classcontentblock_otherfield field_date remove_if_empty update_node data-keydate data-widget785577>/p> p classcontentblock_otherfield field_author remove_if_empty update_node data-keyauthor data-widget785577>/p> div classp remove_if_empty data-keyp data-widget785577>p styletext-align: center;>span stylecolor: #ffffff; font-size: 24pt;>strong>972-652-0929/strong>/span>/p>p styletext-align: center;>img srchttps://core3.imgix.net/5ef5f3cf2afc9_GLOBE.png?autoformat,compress&fitmax& alt width300 height300 />/p>p styletext-align: center;>strong>span stylefont-size: 18pt;>Mobilizing The Strength of Your Brand... Everywhere/span>/strong>/p>/div> !-- ecommerce stuff --> !-- buttons --> !-- buttons --> div classcontentblock_buttons styletext-align: center; data-keylinks data-list_templatea href%%url%% target%%target%% classbtn btn-primary visible-xs-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block>%%anchor%%/a>> /div> !-- buttons -->/div>!-- ecommmerce additional stuff -->!-- additional content --> /div> /div> /div> /div>/header>div classclearfix>/div>!-- main body container -->div classmain_container container-fluid main_container-navbar_transparent> !-- sidebar ? --> !-- end sidebar --> !-- backlink desktop --> div styleposition: relative; idmain_row_1 classrow row-eq-height main_row main_row_odd main_row_first with-background with-background-image height_desktop_ height_mobile_> !-- ***** this file is used to add a background to any widget or row ***** background styles (databackgroundstyle): 1: solid color (databackgroundbgcolor) 2: image or images (databackgroundimage_url) 3: particles (databackgroundparticles) 4: video (databackgroundvideo)-->div classbackground-container > !-- solid color --> div stylez-index: -1; height: 100%; width: 100%; position: absolute; left: 0; top: 0; background-color: #4a86e8;>/div> !-- overlay --> /div> div classcontainer > !-- sections for main body widgets --> !-- widget: contentblock --> a namesection_anchor_785578>/a> div class widget_container widget_container_contentblock odd col-sm-12 idwidget_container_785578 data-w_id785578 data-p_id408800 data-row_number1 style > div class widget widget_contentblock online_update offline_local idwidget_785578 data-w_id785578 data-p_id408800 > section > !-- section header --> div classrow widget_header no_image > div classcol-xs-12 col-sm-12 contentblock_content stylepadding: 0;> div classcontentblock_text col-sm-12 ?>> div classcontentblock_text_titles> h1 classremove_if_empty data-keyh1 data-widget785578 style text-align: center !important; font-size: 32px !important; color: #ffffff !important; > Beautiful Websites for Mobile and Desktop. Without Compromise. /h1> h2 classremove_if_empty data-keyh2 data-widget785578 style text-align: center !important; font-size: 24px !important; color: #ffffff !important; > Viewable on all devices. /h2> /div> !-- date or other fields --> p classcontentblock_otherfield field_date remove_if_empty update_node data-keydate data-widget785578>/p> p classcontentblock_otherfield field_author remove_if_empty update_node data-keyauthor data-widget785578>/p> div classp remove_if_empty data-keyp data-widget785578>p>span stylecolor: #000000;>strong>span stylefont-size: 14pt;>span stylecolor: #ecf0f1;>Contact us today for a no-obligation sample of what we can do for your business. With mobile-first creation, your customers are never more than an arms reach away! /span>br />/span>/strong>/span>/p>/div> !-- ecommerce stuff --> !-- buttons --> !-- buttons --> div classcontentblock_buttons styletext-align: center; data-keylinks data-list_templatea href%%url%% target%%target%% classbtn btn-primary visible-xs-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block>%%anchor%%/a>> a hreftel:+1 9726520929 relnoopener target_blank classbtn btn-primary visible-xs-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block onclick; _event(custom, { category : buttons, action : Click, label : tel:+1 9726520929});> CALL US TO GET STARTED /a> a hrefmailto:Char@MobileGadgetWebs.com classbtn btn-primary visible-xs-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block onclick; _event(custom, { category : buttons, action : Click, label : mailto:Char@MobileGadgetWebs.com});> SEND AN EMAIL /a> a hrefsms:1+9723336128 classbtn btn-primary hidden-sm hidden-md hidden-lg visible-xs-block onclick; _event(custom, { category : buttons, action : Click, label : sms:1+9723336128});> SEND US A TEXT /a> /div> !-- buttons -->/div>!-- ecommmerce additional stuff -->!-- additional content --> /div> /div> !-- map --> !-- similar --> !-- related products --> !-- comments --> /section> /div> /div> !-- end widget: contentblock --> !-- end sections --> /div> !-- end row --> /div> div classclearfix>/div> div styleposition: relative; idmain_row_2 classrow row-eq-height main_row main_row_even main_row_last with-background with-background-image height_desktop_ height_mobile_> !-- ***** this file is used to add a background to any widget or row ***** background styles (databackgroundstyle): 1: solid color (databackgroundbgcolor) 2: image or images (databackgroundimage_url) 3: particles (databackgroundparticles) 4: video (databackgroundvideo)-->div classbackground-container > !-- image or slider --> div styleheight: 100%; width: 100%; position: absolute; left: 0; top: 0; background: url(https://core3.imgix.net/5f63ad71be0bd_bg-topYellow.png?autoformat,compress&fitmax&) 50% 50%; background-size: cover;>/div> !-- overlay --> /div> div classcontainer > !-- sections for main body widgets --> !-- widget: testimonials --> a namesection_anchor_785579>/a> div class widget_container widget_container_testimonials odd col-sm-12 nomargin idwidget_container_785579 data-w_id785579 data-p_id408800 data-row_number2 style > div class widget widget_testimonials online_update offline_local idwidget_785579 data-w_id785579 data-p_id408800 > !-- text in columns -->section > !-- section header --> div classrow widget_header no_image > div classcol-xs-12 col-sm-12 contentblock_content stylepadding: 0;> div classcontentblock_text col-sm-12 col-xs-12> div classcontentblock_text_titles> h1 classremove_if_empty data-keyh1 data-widget785579 style text-align: center !important; color: #ffffff !important; > CLIENT /h1> h2 classremove_if_empty data-keyh2 data-widget785579 style text-align: center !important; color: #ffffff !important; > TESTIMONIALS /h2> /div> !-- date or other fields --> !-- ecommerce stuff --> !-- buttons --> !-- buttons --> !-- buttons -->/div>!-- additional stuff -->!-- additional content --> /div> /div> div classrow row-eq-height testimonialscolumns_container> div classtestimonials_column_container col-xs-12 col-sm-6 style > div classtestimonials_column> div classtestimonials_top_image> img srchttps://core3.imgix.net/5f60c92014735_512x2.png?autoformat,compress&fitmax& classimg-responsive style altFace Forward Wylie id> !-- img srchttps://core3.imgix.net/5f60c92014735_512x2.png?autoformat,compress&fitmax& classimg-responsive altbutton> --> /div> div classtestimonials_top_title> h3 style text-align: center !important; color: #ffffff !important; > Face Forward Wylie /h3> h4 style text-align: center !important; color: #ffffff !important; > Cathy Dobbe /h4> /div> div classtestimonials_body> p>strong>I really love my redesigned website. When clients open my site with their phone they have an icon, they no longer have to look for me. With the added SMS feature, its unbeatable. No one else has these capabilities built in where I can send out a message to all my subscribers at once. These features make my site from Mobile Gadget Webs invaluable. br />/strong>/p>p>strong>It gets my highest recommendation and has bolstered my business to a new level./strong>/p> !-- buttons --> div classcontentblock_buttons styletext-align: center; data-keylinks data-list_templatea href%%url%% target%%target%% classbtn btn-primary visible-xs-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block>%%anchor%%/a>> /div> /div> div classtestimonials_bottom_image> img srchttps://core3.imgix.net/5f60c92014735_512x2.png?autoformat,compress&fitmax& classimg-responsive altbutton> /div> div classtestimonials_bottom_title> h3 style text-align: center !important; color: #ffffff !important; > Face Forward Wylie /h3> h4 style text-align: center !important; color: #ffffff !important; > Cathy Dobbe /h4> /div> /div> /div> div classtestimonials_column_container col-xs-12 col-sm-6 style > div classtestimonials_column> div classtestimonials_top_image> img srchttps://core3.imgix.net/608c321687567_logo-web.png?autoformat,compress&fitmax& classimg-responsive style altThe Mane Hair Salon id> !-- img srchttps://core3.imgix.net/608c321687567_logo-web.png?autoformat,compress&fitmax& classimg-responsive altbutton> --> /div> div classtestimonials_top_title> h3 style text-align: center !important; color: #ffffff !important; > The Mane Hair Salon /h3> h4 style text-align: center !important; color: #ffffff !important; > Cynthia Thibodeaux /h4> /div> div classtestimonials_body> p>strong>Mobile Gadget Webs has changed the way my customers reach me. They now have the icon app on their phone making it easy to reach my booking site and to ask questions. Its exciting to schedule messages for a specific date/time that go to everyone./strong>strong> The SMS really helps to increase bookings and I notice that they read text messages far more than the emails I used to send. /strong>/p> !-- buttons --> div classcontentblock_buttons styletext-align: center; data-keylinks data-list_templatea href%%url%% target%%target%% classbtn btn-primary visible-xs-block visible-sm-inline-block visible-md-inline-block visible-lg-inline-block>%%anchor%%/a>> /div> /div> div classtestimonials_bottom_image> img srchttps://core3.imgix.net/608c321687567_logo-web.png?autoformat,compress&fitmax& classimg-responsive altbutton> /div> div classtestimonials_bottom_title> h3 style text-align: center !important; color: #ffffff !important; > The Mane Hair Salon /h3> h4 style text-align: center !important; color: #ffffff !important; > Cynthia Thibodeaux /h4> /div> /div> /div> /div>/section>!-- text in columns --> /div> /div> !-- end widget: testimonials --> !-- end sections --> /div> !-- end row --> /div> div classclearfix>/div> !-- and if logged in -->/div>!-- end body_container -->div classclearfix>/div>!-- footer -->footer> div classcontainer-fluid> !-- footer widgets --> !-- footer share button --> !-- end footer share button --> !-- add to favorites icon footer --> !-- end add to favorites icon --> ul classlist-inline footer_menu> li class active > a hrefhttps://mobilegadgetwebs.com/>Home/a> /li> li class> a hrefhttps://mobilegadgetwebs.com/mobile-first-websites>Our Sites/a> /li> li class> a href/m/28485/p/408802>Included/a> /li> li class> a hrefhttps://mobilegadgetwebs.com/contact-us>Contact us/a> /li> /ul> div classclearfix>/div> p> MGW 2023/p> !-- privacy and tos --> div classclearfix>/div>div classrow footer_legal>div classcol-xs-12>a href?id28485&view1&tos1>ToS/a>/div>/div> /div>/footer>!-- cookie law (not in footer) -->!-- end footer -->!-- iconsbar ? -->!-- end iconsbar --> !-- modals --> div tabindex-1 classmodal animated slideInRight idmyModal roledialog> div classmodal-dialog> div classmodal-content> div classmodal-header> button classclose typebutton data-custom-dismissmodal>×/button> h3 classmodal-title>Heading/h3> /div> div classmodal-body> /div> div classmodal-footer> div idmodal-footer-navigation>/div> button classbtn btn-default idmyModalHideButton data-custom-dismissmodal>Close/button> /div> /div> /div> /div> !-- A2HS -->div classmodal-a2hs-backdrop>/div>div classmodal-a2hs ida2hs_modal tabindex-1 roledialog aria-labelledbymyModalLabel>div classmodal-a2hs-header>a href# onclicka2hs_closemodal(); return false; classbtn btn-default>Close/a>/div>div classmodal-a2hs-body modal-a2hs-iphone>p>To add this web app to your homescreen, click on the Share icon/p>p>img srchttps://core3.imgix.net/a2hs_ios13_shareicon.png?autoformat,compress&fitmax& classimg-responsive>/p>p>Then click on Add to Home/p>p>img srchttps://core3.imgix.net/a2hs_ios13.png?autoformat,compress&fitmax& classimg-responsive>/p>/div>div classmodal-a2hs-body modal-a2hs-ipad modal-a2hs-ipad-ipad>p>To add this web app to your homescreen, click on the Share icon/p>p>img srchttps://core3.imgix.net/a2hs_ios13_shareicon.png?autoformat,compress&fitmax& classimg-responsive>/p>p>Then click on Add to Home/p>p>img srchttps://core3.imgix.net/a2hs_ios13.png?autoformat,compress&fitmax& classimg-responsive>/p>/div>div classmodal-a2hs-body modal-a2hs-ipad modal-a2hs-ipad-safari>p>It looks like your browser doesnt natively support Add To Homescreen, or you have disabled it (or maybe you have already added this web app to your applications?)/p>p>In any case, please check your browser options and information, thanks!/p>/div>div classmodal-a2hs-body modal-a2hs-generic>p>It looks like your browser doesnt natively support Add To Homescreen, or you have disabled it (or maybe you have already added this web app to your applications?)/p>p>In any case, please check your browser options and information, thanks!/p>/div>/div>div classpwa_buttons>div idpush-subscription-button classpush_button onclickshowDisabledPushNotificationsAlert(); return false;>p>span classfa-stack>i classfa fa-paper-plane fa-stack-1x>/i>i classfa fa-ban fa-stack-2x text-danger>/i>/span> Push Notifications are disabled/p>a href# onclickpwa_dismiss(event, push, document.querySelector(#push-subscription-button)); return false; classbtn btn-xs btn-primary>hide/a>/div>div classa2hs_button>img srchttps://core3.imgix.net/5f6bd73431206_512x512.png?autoformat,compress&fitcrop&w512&h512>p>Mobile Gadget Webs/p>p classsmall>i classfa fa-plus-circle aria-hiddentrue>/i> Add to homescreen/p>a href# onclickpwa_dismiss(event, a2hs, document.querySelector(.a2hs_button)); return false; classbtn btn-xs btn-primary>hide/a>/div>!-- end A2HS -->/div> !-- ***** end analytics and third-party JS ***** --> /div> !-- JS before closing /body> --> !-- changed because on AWS it was giving problems --> script async onerrorbuildJsString(); srchttps://core3-javascript-cache.s3.us-east-1.amazonaws.com/scripts.m4k.co.28485.min.js>/script> script> function buildJsString() { var elemDiv document.createElement(div); elemDiv.style.cssText position:absolute;width:100%;height:100%;opacity:0.7;z-index:100000;background:#fff;top: 0; left: 0;; document.body.appendChild(elemDiv); fetch(/m/28485?save_js_string1).then(function (response) { // The API call was successful! window.location.reload(); }).catch(function (err) { // There was an error console.warn(Something went wrong., err); }); } /script> script>window.addEventListener(load, function() { if (location.protocol ! https:) { location.replace(`https:${location.href.substring(location.protocol.length)}`); } });/script> script> var _p_id 408800; var _p_navbar_transparent 0; var _remote_address 52.40.234.105; /script> script>if (location.protocol ! https:) { location.replace(`https:${location.href.substring(location.protocol.length)}`); }/script>script>if (serviceWorker in navigator) { window.addEventListener(load, function() { navigator.serviceWorker.register(/service-worker.js.php?v021&s_id28485&nocache0&nopush0).then(function(registration) { console.log(Registration successful, scope is:, registration.scope); }) .catch(function(error) { console.log(Service worker registration failed, error:, error); }); }); }/script>script>window.addEventListener(load, function() { updateOnlineStatus(); window.addEventListener(online, updateOnlineStatus); window.addEventListener(offline, updateOnlineStatus); }); function updateOnlineStatus(event) { var condition navigator.onLine ? online : offline; var condition_remove navigator.onLine ? offline : online; const body document.querySelector(body); body.classList.remove(condition_remove); body.classList.add(condition); } /script>script> const pushButton document.querySelector(#push-subscription-button); const pushButtonsManual document.querySelectorAll(.navbar-show-pushnotifications); const applicationServerKey BB0HgfEyEpsTV4s7LoeuConklxlKqMecl6M9UcLBuS_BAduW0NzUWYbDy2qE635WmYfzENH-q9tkrD9P3r3HcAY; document.addEventListener(DOMContentLoaded, () > { if (pwa_checkcookie(push)) { return; } if (!(PushManager in window)) { console.warn(Notifications are not supported by this browser); return; } if (!(showNotification in ServiceWorkerRegistration.prototype)) { console.warn(Notifications are not supported by this browser); return; } if (Notification.permission denied) { changePwaButtonState(pushButton, show); //console.warn(Notifications are denied by the user); return; } updateManualPushNotificationsBadge(); checkNotificationPermission(); window.setInterval(() > { updateManualPushNotificationsBadge(); }, 30000); }); function showDisabledPushNotificationsAlert() { pwa_setcookie(push_dismissed, true); alert(You have disabled push notifications, but you can re-enable them in your browsers settings. Thank you!); } function updateManualPushNotificationsBadge() { checkManualPushNotifications() .then((show) > { var badges document.querySelectorAll(.navbar-menu-alert-pushnotifications); if (show) { badges.forEach((badge) > { badge.className + show; }); } else { badges.forEach((badge) > { badge.className.replace(show, ); }); } }); } function checkManualPushNotifications() { var lastcheck pwa_getcookie(manual_push_lastcheck) || 0; var url ?s_id28485&check-manual-push-notifications1&lastcheck + lastcheck; return fetch(url) .then((response) > { return response.json(); }) .then((data) > { if (lastcheck > data) { return false; } else { return true; } }); } function showPushnotifications() { $(.navbar-show-pushnotifications).fadeTo(fast, 0.2, function() { var badges document.querySelectorAll(.navbar-menu-alert-pushnotifications); badges.forEach((badge) > { badge.className.replace(show, ); }); var lastcheck pwa_getcookie(manual_push_lastcheck) || 0; var url ?s_id28485&get-manual-push-notifications1&lastcheck + lastcheck; //console.log(url); $.getJSON(url, function(data) { // create modal body var body ; body + div class\push_notification_modal_container\>; data.forEach((item) > { var onclick ; if (item.click_target) { onclick onclick\window.open( + item.click_target + );\; } var div_class ; if (item.sent_time lastcheck) { div_class + read ; } body + div class\push_notification_modal_item + div_class + \ + onclick + >; //body + a href\#\; if (item.icon_url) { body + img src\ + item.icon_url + \>; } body + div class\body\>; if (item.sent_time) { body + div class\time\> + format_date_locale(item.sent_time) + /div>; } if (item.title) { body + h4> + item.title + /h4>; } if (item.body) { body + p> + item.body + /p>; } body + /div>; if (item.click_target) { body + a class\click_target\ href\ + item.click_target + \ target\_blank\>i classfa fa-external-link aria-hiddentrue>/i>/a>; } body + /div>; }); body + /div>; $(.navbar-show-pushnotifications).fadeTo(fast, 1); openModalWindow(Push Notifications, body); var time Math.floor(new Date().getTime() / 1000); pwa_setcookie(manual_push_lastcheck, time); }); }); } function push_subscribe() { pushButton.style.opacity 0.7; navigator.serviceWorker.ready .then(serviceWorkerRegistration > serviceWorkerRegistration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlBase64ToUint8Array(applicationServerKey), })) .then(subscription > { // Subscription was successful // create subscription on your server return push_sendSubscriptionToServer(subscription, POST); }) .then(subscription > subscription && changePwaButtonState(pushButton, hide)) // update your UI .catch(e > { if (Notification.permission denied) { // The user denied the notification permission which // means we failed to subscribe and the user will need // to manually change the notification permission to // subscribe to push messages console.warn(Notifications are denied by the user.); } else { // A problem occurred with the subscription; common reasons // include network errors or the user skipped the permission console.error(Impossible to subscribe to push notifications, e); changePwaButtonState(pushButton, hide); } }); } function push_unsubscribe() { // To unsubscribe from push messaging, you need to get the subscription object navigator.serviceWorker.ready .then(serviceWorkerRegistration > serviceWorkerRegistration.pushManager.getSubscription()) .then(subscription > { // Check that we have a subscription to unsubscribe if (!subscription) { // No subscription object, so set the state // to allow the user to subscribe to push changePwaButtonState(pushButton, show); return; } // We have a subscription, unsubscribe // Remove push subscription from server return push_sendSubscriptionToServer(subscription, DELETE); }) .then(subscription > subscription.unsubscribe()) .then(() > changePwaButtonState(pushButton, show)) .catch(e > { // We failed to unsubscribe, this can lead to // an unusual state, so it may be best to remove // the users data from your data store and // inform the user that you have done so console.error(Error when unsubscribing the user, e); changePwaButtonState(pushButton, show); }); } function push_updateSubscription() { navigator.serviceWorker.ready .then(serviceWorkerRegistration > serviceWorkerRegistration.pushManager.getSubscription()) .then(subscription > { changePwaButtonState(pushButton, show); if (!subscription) { // We arent subscribed to push, so set UI to allow the user to enable push return; } // Keep your server in sync with the latest endpoint return push_sendSubscriptionToServer(subscription, PUT); }) .then(subscription > subscription && changePwaButtonState(pushButton, hide)) .catch(e > { console.error(Error when updating the subscription, e); }); } /** * HELPER FUNCTIONS **/ // ... function urlBase64ToUint8Array(base64String) { const padding .repeat((4 - (base64String.length % 4)) % 4); const base64 (base64String + padding).replace(/\-/g, +).replace(/_/g, /); const rawData window.atob(base64); const outputArray new Uint8Array(rawData.length); for (let i 0; i rawData.length; ++i) { outputArrayi rawData.charCodeAt(i); } return outputArray; } // check permissions function checkNotificationPermission() { return new Promise((resolve, reject) > { if (Notification.permission denied) { changePwaButtonState(pushButton, show); return reject(new Error(Push messages are blocked.)); } if (Notification.permission granted) { return resolve(); } if (Notification.permission default) { return Notification.requestPermission().then(result > { if (result ! granted) { reject(new Error(Bad permission result)); } push_subscribe(); resolve(); }); } }); } // send subscription to server function push_sendSubscriptionToServer(subscription, method) { const key subscription.getKey(p256dh); const token subscription.getKey(auth); const contentEncoding (PushManager.supportedContentEncodings || aesgcm)0; var _body JSON.stringify({ endpoint: subscription.endpoint, publicKey: key ? btoa(String.fromCharCode.apply(null, new Uint8Array(key))) : null, authToken: token ? btoa(String.fromCharCode.apply(null, new Uint8Array(token))) : null, contentEncoding, user_id: null, email: null }); return fetch(?s_id28485&push-add-subscription1, { method, body: _body, }).then(() > subscription); } /script>!-- end web push -->script> let a2hs_deferredPrompt; let a2hs_done false; const a2hs_modal_backdrop document.querySelector(.modal-a2hs-backdrop); const a2hs_modal document.querySelector(.modal-a2hs); const a2hs_addBtn document.querySelector(.a2hs_button); var a2hs_already_installed false; window.addEventListener(load, () > { if (navigator.standalone || matchMedia((display-mode: standalone)).matches || pwa_checkcookie(a2hs)) { // nothing to do, app already launched standalone or alert dismissed } else { // lets try to install it with beforeinstallprompt (Chrome, Android, ...) if (onbeforeinstallprompt in window) { window.addEventListener(beforeinstallprompt, (e) > { a2hs(a2hs_addBtn, e, true); }); } else { window.setTimeout(() > { a2hs(a2hs_addBtn); }, 300); } } }); window.addEventListener(appinstalled, (evt) > { a2hs_already_installed true; }); var a2hs (a2hs_addBtn, e, beforeinstallprompt) > { if (a2hs_done) { return false; } a2hs_done true; // Update UI to notify the user they can add to home screen changePwaButtonState(a2hs_addBtn, show); if (beforeinstallprompt) { // native approach (Chrome, Android, ...) // Prevent Chrome 67 and earlier from automatically showing the prompt e.preventDefault(); // Stash the event so it can be triggered later. a2hs_deferredPrompt e; a2hs_addBtn.addEventListener(click, (e) > { // hide our user interface that shows our A2HS button changePwaButtonState(a2hs_addBtn, hide); // Show the prompt a2hs_deferredPrompt.prompt(); // Wait for the user to respond to the prompt a2hs_deferredPrompt.userChoice.then((choiceResult) > { if (choiceResult.outcome accepted) { console.log(User accepted the A2HS prompt); } else { console.log(User dismissed the A2HS prompt); } a2hs_deferredPrompt null; }); }); } else { // manual approach (iOS, Firefox, ...) changePwaButtonState(a2hs_addBtn, show); if (/(iPhone|iPod)/g.test(navigator.userAgent)) { $(#a2hs_modal).addClass(a2hs_modal_iphone); } else if (/(Safari)/g.test(navigator.userAgent) && ! /(Chrome)/g.test(navigator.userAgent)) { $(#a2hs_modal).addClass(a2hs_modal_ipad); } else { $(#a2hs_modal).addClass(a2hs_modal_generic); } a2hs_addBtn.addEventListener(click, (e) > { a2hs_modal_backdrop.className + a2hs_modal_show ; a2hs_modal.className + a2hs_modal_show ; changePwaButtonState(a2hs_addBtn, hide); }); } } var a2hs_closemodal () > { a2hs_modal_backdrop.className a2hs_modal_backdrop.className.replace(/\ba2hs_modal_show\b/, ); a2hs_modal.className a2hs_modal.className.replace(/\ba2hs_modal_show\b/, ); } /script>!-- end A2HS -->script> var pwa_getcookie (name) > { var value ; + document.cookie; var parts value.split(; + name + ); if (parts.length 2) return parts.pop().split(;).shift(); } var pwa_setcookie (name, value) > { document.cookie name + + value + ; expiresFri, 31 Dec 9999 23:59:59 GMT;; } var pwa_checkcookie (what) > { var pattern (?:(?:^|.*;\\s*) + what + _dismissed\\s*\\\s*(^;*).*$)|^.*$; var regexp new RegExp(pattern); var check document.cookie.replace(regexp, $1) true; return check; } var pwa_dismiss (e, what, button) > { e.stopPropagation(); changePwaButtonState(button, hide); var cookie_name what + _dismissed; pwa_setcookie(cookie_name, true); } // states / classes function changePwaButtonState(button, action) { if (action show) { button.className button.className.replace(/\bpwa_button_hide\b/, ).replace(/\bpwa_button_show\b/, ) + pwa_button_show; } else if (action hide) { button.className button.className.replace(/\bpwa_button_show\b/, ).replace(/\bpwa_button_hide\b/, ) + pwa_button_hide; setTimeout(() > { button.style.display none; }, 450); } } var pwa_buttons_div document.querySelector(.pwa_buttons); document.addEventListener(DOMContentLoaded, () > { if (/(iPhone|iPod)/g.test(navigator.userAgent)) { pwa_buttons_div.className + iphone ; } else if (/(Safari)/g.test(navigator.userAgent) && ! /(Chrome)/g.test(navigator.userAgent)) { pwa_buttons_div.className + ipad ; } else { } }); /script> !-- end JS before closing /body> --> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]