mirror of
https://git.juggalol.com/agatha/stockbot-buyvm.git
synced 2024-11-16 20:56:40 +00:00
Initial skeleton commit
This commit is contained in:
commit
44362f32ab
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
.idea/
|
||||||
|
venv/
|
||||||
|
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
2
README.md
Normal file
2
README.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# stockbot-buyvm
|
||||||
|
Send alerts when [BuyVM](https://buyvm.net) has KVM slices in stock.
|
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
958
tests/data/stock.html
Normal file
958
tests/data/stock.html
Normal file
@ -0,0 +1,958 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en"><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
|
<title>Shopping Cart - FranTech</title>
|
||||||
|
|
||||||
|
<link href="stock_files/theme.css" rel="stylesheet">
|
||||||
|
<link href="stock_files/theme-custom.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
|
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||||
|
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="stock_files/twk-main.js" charset="UTF-8" crossorigin="*"></script><script src="stock_files/twk-vendor.js" charset="UTF-8" crossorigin="*"></script><script src="stock_files/twk-chunk-vendors.js" charset="UTF-8" crossorigin="*"></script><script src="stock_files/twk-chunk-common.js" charset="UTF-8" crossorigin="*"></script><script src="stock_files/twk-runtime.js" charset="UTF-8" crossorigin="*"></script><script src="stock_files/twk-app.js" charset="UTF-8" crossorigin="*"></script><script type="text/javascript" async="" src="stock_files/s.js"></script><script async="" src="stock_files/default.js" charset="UTF-8" crossorigin="*"></script><script type="text/javascript">
|
||||||
|
var csrfToken = 'a15ccdee288f9ed308b7b01f0a6e3a97796b33ab',
|
||||||
|
markdownGuide = 'Markdown Guide',
|
||||||
|
locale = 'en',
|
||||||
|
saved = 'saved',
|
||||||
|
saving = 'autosaving',
|
||||||
|
whmcsBaseUrl = "",
|
||||||
|
requiredText = 'Required',
|
||||||
|
recaptchaSiteKey = "";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script src="stock_files/scripts.min.js"></script>
|
||||||
|
<script src="stock_files/core.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Dynamic Template Compatibility -->
|
||||||
|
<!-- Please update your theme to include or have a comment on the following to negate dynamic inclusion -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="stock_files/fontawesome-all.min.css">
|
||||||
|
|
||||||
|
<script charset="utf-8" src="stock_files/twk-chunk-2c776523.js"></script><script charset="utf-8" src="stock_files/twk-chunk-9294da6c.js"></script><script charset="utf-8" src="stock_files/twk-chunk-2d0b383d.js"></script><script charset="utf-8" src="stock_files/twk-chunk-48f3b594.js"></script><script charset="utf-8" src="stock_files/twk-chunk-4fe9d5dd.js"></script><script charset="utf-8" src="stock_files/twk-chunk-2d0b9454.js"></script><script charset="utf-8" src="stock_files/twk-chunk-24d8db78.js"></script><style type="text/css">#sc0tacu2pqrg1701482451366 {outline:none !important;
|
||||||
|
visibility:visible !important;
|
||||||
|
resize:none !important;
|
||||||
|
box-shadow:none !important;
|
||||||
|
overflow:visible !important;
|
||||||
|
background:none !important;
|
||||||
|
opacity:1 !important;
|
||||||
|
filter:alpha(opacity=100) !important;
|
||||||
|
-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity 1}) !important;
|
||||||
|
-mz-opacity:1 !important;
|
||||||
|
-khtml-opacity:1 !important;
|
||||||
|
top:auto !important;
|
||||||
|
right:0px !important;
|
||||||
|
bottom:0px !important;
|
||||||
|
left:auto !important;
|
||||||
|
position:fixed !important;
|
||||||
|
border:0 !important;
|
||||||
|
min-height:0px !important;
|
||||||
|
min-width:0px !important;
|
||||||
|
max-height:none !important;
|
||||||
|
max-width:none !important;
|
||||||
|
padding:0px !important;
|
||||||
|
margin:0px !important;
|
||||||
|
-moz-transition-property:none !important;
|
||||||
|
-webkit-transition-property:none !important;
|
||||||
|
-o-transition-property:none !important;
|
||||||
|
transition-property:none !important;
|
||||||
|
transform:none !important;
|
||||||
|
-webkit-transform:none !important;
|
||||||
|
-ms-transform:none !important;
|
||||||
|
width:auto !important;
|
||||||
|
height:auto !important;
|
||||||
|
display:none !important;
|
||||||
|
z-index:2000000000 !important;
|
||||||
|
background-color:transparent !important;
|
||||||
|
cursor:none !important;
|
||||||
|
float:none !important;
|
||||||
|
border-radius:unset !important;
|
||||||
|
pointer-events:auto !important;
|
||||||
|
clip:auto !important;
|
||||||
|
color-scheme:light !important;}#sc0tacu2pqrg1701482451366.widget-hidden {display: none !important;}#sc0tacu2pqrg1701482451366.widget-visible {display: block !important;}
|
||||||
|
@media print{
|
||||||
|
#sc0tacu2pqrg1701482451366.widget-visible {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
}</style><script src="stock_files/emojione.min.js" type="text/javascript" async="" defer="defer"></script><script src="stock_files/emojione.min.js" type="text/javascript" async="" defer="defer"></script><style type="text/css">@keyframes tawkMaxOpen{0%{opacity:0;transform:translate(0, 30px);;}to{opacity:1;transform:translate(0, 0px);}}@-moz-keyframes tawkMaxOpen{0%{opacity:0;transform:translate(0, 30px);;}to{opacity:1;transform:translate(0, 0px);}}@-webkit-keyframes tawkMaxOpen{0%{opacity:0;transform:translate(0, 30px);;}to{opacity:1;transform:translate(0, 0px);}}#vettgh8d7gpg1701482451388.open{animation : tawkMaxOpen .25s ease!important;}@keyframes tawkMaxClose{from{opacity: 1;transform:translate(0, 0px);;}to{opacity: 0;transform:translate(0, 30px);;}}@-moz-keyframes tawkMaxClose{from{opacity: 1;transform:translate(0, 0px);;}to{opacity: 0;transform:translate(0, 30px);;}}@-webkit-keyframes tawkMaxClose{from{opacity: 1;transform:translate(0, 0px);;}to{opacity: 0;transform:translate(0, 30px);;}}#vettgh8d7gpg1701482451388.closed{animation: tawkMaxClose .25s ease!important}</style></head>
|
||||||
|
<body class="lagom lagom-not-portal lagom-layout-condensed lagom-layout-banner page-products" data-phone-cc-input="1">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="app-nav app-nav-condensed hidden-print">
|
||||||
|
<section id="header">
|
||||||
|
<div class="container">
|
||||||
|
<button type="button" class="navbar-toggle">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a href="https://my.frantech.ca/index.php" class="logo"><img src="stock_files/logo.png" title="FranTech" alt="FranTech"></a>
|
||||||
|
|
||||||
|
<ul class="top-nav">
|
||||||
|
<li>
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=view">
|
||||||
|
<i class="lm lm-basket"></i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li menuitemname="Account" class="dropdown account " id="Secondary_Navbar-Account">
|
||||||
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
|
<i class="fas fa-ticket lm lm-user"></i> <span class="item-text">My Account</span>
|
||||||
|
|
||||||
|
<b class="ls ls-caret"></b>
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-right">
|
||||||
|
<li menuitemname="Login" class=" " id="Secondary_Navbar-Account-Login">
|
||||||
|
<a href="https://my.frantech.ca/clientarea.php">
|
||||||
|
Login
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Register" class=" " id="Secondary_Navbar-Account-Register">
|
||||||
|
<a href="https://my.frantech.ca/register.php">
|
||||||
|
Register
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Divider" class="nav-divider " id="Secondary_Navbar-Account-Divider">
|
||||||
|
<a href="">
|
||||||
|
-----
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Forgot Password?" class=" " id="Secondary_Navbar-Account-Forgot_Password?">
|
||||||
|
<a href="https://my.frantech.ca/index.php?rp=/password/reset/begin">
|
||||||
|
Forgot Password?
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="main-menu">
|
||||||
|
<nav id="nav" class="navbar navbar-default navbar-main no-lang" role="navigation">
|
||||||
|
<div class="container">
|
||||||
|
<!-- Brand and toggle get grouped for better mobile display -->
|
||||||
|
<div class="navbar-header">
|
||||||
|
Menu
|
||||||
|
</div>
|
||||||
|
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||||
|
<div class="navbar-collapse" id="primary-nav">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
|
||||||
|
<li menuitemname="Home" class=" home-item " id="Primary_Navbar-Home">
|
||||||
|
<a href="https://my.frantech.ca/index.php">
|
||||||
|
<i class="fas fa-ticket lm lm-home"></i> <span>Home</span>
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Store" class="dropdown " id="Primary_Navbar-Store">
|
||||||
|
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||||
|
<i class="fas fa-ticket lm lm-basket"></i> <span>Store</span>
|
||||||
|
|
||||||
|
<b class="ls ls-caret"></b>
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu ">
|
||||||
|
<li menuitemname="Browse Products Services" class=" " id="Primary_Navbar-Store-Browse_Products_Services">
|
||||||
|
<a href="https://my.frantech.ca/cart.php">
|
||||||
|
Browse All
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Shop Divider 1" class="nav-divider " id="Primary_Navbar-Store-Shop_Divider_1">
|
||||||
|
<a href="">
|
||||||
|
-----
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Las Vegas - AMD RYZEN KVM" class=" " id="Primary_Navbar-Store-Las_Vegas_-_AMD_RYZEN_KVM">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=37">
|
||||||
|
Las Vegas - AMD RYZEN KVM
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="New York - AMD RYZEN KVM" class=" " id="Primary_Navbar-Store-New_York_-_AMD_RYZEN_KVM">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=38">
|
||||||
|
New York - AMD RYZEN KVM
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Miami - AMD RYZEN KVM" class=" " id="Primary_Navbar-Store-Miami_-_AMD_RYZEN_KVM">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=48">
|
||||||
|
Miami - AMD RYZEN KVM
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Luxembourg - AMD RYZEN KVM" class=" " id="Primary_Navbar-Store-Luxembourg_-_AMD_RYZEN_KVM">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=39">
|
||||||
|
Luxembourg - AMD RYZEN KVM
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Las Vegas - Block Storage Slabs" class=" " id="Primary_Navbar-Store-Las_Vegas_-_Block_Storage_Slabs">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=42">
|
||||||
|
Las Vegas - Block Storage Slabs
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="New York - Block Storage Slabs" class=" " id="Primary_Navbar-Store-New_York_-_Block_Storage_Slabs">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=45">
|
||||||
|
New York - Block Storage Slabs
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Miami - Block Storage Slabs" class=" " id="Primary_Navbar-Store-Miami_-_Block_Storage_Slabs">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=49">
|
||||||
|
Miami - Block Storage Slabs
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Luxembourg - Block Storage Slabs" class=" " id="Primary_Navbar-Store-Luxembourg_-_Block_Storage_Slabs">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=46">
|
||||||
|
Luxembourg - Block Storage Slabs
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Luxembourg - Webhosting" class=" " id="Primary_Navbar-Store-Luxembourg_-_Webhosting">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=33">
|
||||||
|
Luxembourg - Webhosting
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Luxembourg - Reseller Webhosting" class=" " id="Primary_Navbar-Store-Luxembourg_-_Reseller_Webhosting">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=34">
|
||||||
|
Luxembourg - Reseller Webhosting
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Las Vegas - Webhosting" class=" " id="Primary_Navbar-Store-Las_Vegas_-_Webhosting">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=17">
|
||||||
|
Las Vegas - Webhosting
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Las Vegas - Reseller Webhosting" class=" " id="Primary_Navbar-Store-Las_Vegas_-_Reseller_Webhosting">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=27">
|
||||||
|
Las Vegas - Reseller Webhosting
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Addon Licenses" class=" " id="Primary_Navbar-Store-Addon_Licenses">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=40">
|
||||||
|
Addon Licenses
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Free Software Licenses" class=" " id="Primary_Navbar-Store-Free_Software_Licenses">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=43">
|
||||||
|
Free Software Licenses
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Offloaded SQL" class=" " id="Primary_Navbar-Store-Offloaded_SQL">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=19">
|
||||||
|
Offloaded SQL
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Networking" class=" " id="Primary_Navbar-Store-Networking">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?gid=44">
|
||||||
|
Networking
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Stallion" class=" " id="Primary_Navbar-Stallion">
|
||||||
|
<a href="https://manage.buyvm.net/">
|
||||||
|
<span>Stallion</span>
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Knowledgebase" class=" " id="Primary_Navbar-Knowledgebase">
|
||||||
|
<a href="https://my.frantech.ca/index.php?rp=/knowledgebase">
|
||||||
|
<i class="fas fa-ticket ls ls-document-info"></i> <span>Knowledgebase</span>
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Affiliates" class=" " id="Primary_Navbar-Affiliates">
|
||||||
|
<a href="https://my.frantech.ca/affiliates.php">
|
||||||
|
<i class="fas fa-ticket lm lm-bar-graph"></i> <span>Affiliates</span>
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li menuitemname="Contact Us" class=" " id="Primary_Navbar-Contact_Us">
|
||||||
|
<a href="https://my.frantech.ca/contact.php">
|
||||||
|
<i class="fas fa-ticket lm lm-envelope"></i> <span>Contact Us</span>
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="navbar-nav navbar-right">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=view" class="btn btn-link btn-icon"><i class="lm lm-basket"></i></a> <a href="https://my.frantech.ca/register.php" class="btn btn-default btn-outline">Register</a> <a href="https://my.frantech.ca/login.php" class="btn btn-primary">Login</a>
|
||||||
|
</div>
|
||||||
|
</div><!-- /.navbar-collapse -->
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="app-header main-header header-lined ">
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<h1>
|
||||||
|
Las Vegas - AMD RYZEN KVM
|
||||||
|
</h1>
|
||||||
|
<h4 style="color: #ffffff;">Powered by Ryzen 3900X CPUs and NVME Storage!</h4>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="app-main">
|
||||||
|
<div class="main-body ">
|
||||||
|
<div class="container">
|
||||||
|
<div class="main-grid row">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="stock_files/order.min.js"></script>
|
||||||
|
|
||||||
|
<div class="col-md-3 pull-md-left main-sidebar sidebar hidden-xs hidden-sm">
|
||||||
|
<div menuitemname="Categories" class="panel panel-sidebar">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">
|
||||||
|
<i class="fas fa-shopping-cart"></i>
|
||||||
|
|
||||||
|
Categories
|
||||||
|
|
||||||
|
|
||||||
|
<i class="fa fa-chevron-up panel-minimise pull-right"></i>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="list-group">
|
||||||
|
<a menuitemname="Las Vegas - AMD RYZEN KVM" href="https://my.frantech.ca/cart.php?gid=37" class="list-group-item active" id="Secondary_Sidebar-Categories-Las_Vegas_-_AMD_RYZEN_KVM">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Las Vegas - AMD RYZEN KVM
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="New York - AMD RYZEN KVM" href="https://my.frantech.ca/cart.php?gid=38" class="list-group-item" id="Secondary_Sidebar-Categories-New_York_-_AMD_RYZEN_KVM">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
New York - AMD RYZEN KVM
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Miami - AMD RYZEN KVM" href="https://my.frantech.ca/cart.php?gid=48" class="list-group-item" id="Secondary_Sidebar-Categories-Miami_-_AMD_RYZEN_KVM">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Miami - AMD RYZEN KVM
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Luxembourg - AMD RYZEN KVM" href="https://my.frantech.ca/cart.php?gid=39" class="list-group-item" id="Secondary_Sidebar-Categories-Luxembourg_-_AMD_RYZEN_KVM">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Luxembourg - AMD RYZEN KVM
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Las Vegas - Block Storage Slabs" href="https://my.frantech.ca/cart.php?gid=42" class="list-group-item" id="Secondary_Sidebar-Categories-Las_Vegas_-_Block_Storage_Slabs">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Las Vegas - Block Storage Slabs
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="New York - Block Storage Slabs" href="https://my.frantech.ca/cart.php?gid=45" class="list-group-item" id="Secondary_Sidebar-Categories-New_York_-_Block_Storage_Slabs">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
New York - Block Storage Slabs
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Miami - Block Storage Slabs" href="https://my.frantech.ca/cart.php?gid=49" class="list-group-item" id="Secondary_Sidebar-Categories-Miami_-_Block_Storage_Slabs">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Miami - Block Storage Slabs
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Luxembourg - Block Storage Slabs" href="https://my.frantech.ca/cart.php?gid=46" class="list-group-item" id="Secondary_Sidebar-Categories-Luxembourg_-_Block_Storage_Slabs">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Luxembourg - Block Storage Slabs
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Luxembourg - Webhosting" href="https://my.frantech.ca/cart.php?gid=33" class="list-group-item" id="Secondary_Sidebar-Categories-Luxembourg_-_Webhosting">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Luxembourg - Webhosting
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Luxembourg - Reseller Webhosting" href="https://my.frantech.ca/cart.php?gid=34" class="list-group-item" id="Secondary_Sidebar-Categories-Luxembourg_-_Reseller_Webhosting">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Luxembourg - Reseller Webhosting
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Las Vegas - Webhosting" href="https://my.frantech.ca/cart.php?gid=17" class="list-group-item" id="Secondary_Sidebar-Categories-Las_Vegas_-_Webhosting">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Las Vegas - Webhosting
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Las Vegas - Reseller Webhosting" href="https://my.frantech.ca/cart.php?gid=27" class="list-group-item" id="Secondary_Sidebar-Categories-Las_Vegas_-_Reseller_Webhosting">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Las Vegas - Reseller Webhosting
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Addon Licenses" href="https://my.frantech.ca/cart.php?gid=40" class="list-group-item" id="Secondary_Sidebar-Categories-Addon_Licenses">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Addon Licenses
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Free Software Licenses" href="https://my.frantech.ca/cart.php?gid=43" class="list-group-item" id="Secondary_Sidebar-Categories-Free_Software_Licenses">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Free Software Licenses
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Offloaded SQL" href="https://my.frantech.ca/cart.php?gid=19" class="list-group-item" id="Secondary_Sidebar-Categories-Offloaded_SQL">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Offloaded SQL
|
||||||
|
|
||||||
|
</a>
|
||||||
|
<a menuitemname="Networking" href="https://my.frantech.ca/cart.php?gid=44" class="list-group-item" id="Secondary_Sidebar-Categories-Networking">
|
||||||
|
<i class="ls ls-box"></i>
|
||||||
|
|
||||||
|
Networking
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div menuitemname="Actions" class="panel panel-sidebar">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">
|
||||||
|
<i class="fas fa-plus"></i>
|
||||||
|
|
||||||
|
Actions
|
||||||
|
|
||||||
|
|
||||||
|
<i class="fa fa-chevron-up panel-minimise pull-right"></i>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="list-group">
|
||||||
|
<a menuitemname="View Cart" href="https://my.frantech.ca/cart.php?a=view" class="list-group-item" id="Secondary_Sidebar-Actions-View_Cart">
|
||||||
|
<i class="fas fa-ticket ls ls-basket"></i>
|
||||||
|
|
||||||
|
View Cart
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="main-content col-md-9 pull-md-right">
|
||||||
|
<div class="categories-collapsed visible-xs visible-sm clearfix">
|
||||||
|
|
||||||
|
<div class="pull-left form-inline">
|
||||||
|
<div class="dropdown">
|
||||||
|
<a href="#" data-toggle="dropdown" class="btn btn-default">Las Vegas - AMD RYZEN KVM<i class="ls ls-caret"></i></a>
|
||||||
|
<ul class="dropdown-menu ps">
|
||||||
|
<li class="dropdown-title h6">Categories</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Las Vegas - AMD RYZEN KVM" href="https://my.frantech.ca/cart.php?gid=37" class=" active" id="Secondary_Sidebar-Categories-Las_Vegas_-_AMD_RYZEN_KVM">
|
||||||
|
Las Vegas - AMD RYZEN KVM
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="New York - AMD RYZEN KVM" href="https://my.frantech.ca/cart.php?gid=38" class="" id="Secondary_Sidebar-Categories-New_York_-_AMD_RYZEN_KVM">
|
||||||
|
New York - AMD RYZEN KVM
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Miami - AMD RYZEN KVM" href="https://my.frantech.ca/cart.php?gid=48" class="" id="Secondary_Sidebar-Categories-Miami_-_AMD_RYZEN_KVM">
|
||||||
|
Miami - AMD RYZEN KVM
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Luxembourg - AMD RYZEN KVM" href="https://my.frantech.ca/cart.php?gid=39" class="" id="Secondary_Sidebar-Categories-Luxembourg_-_AMD_RYZEN_KVM">
|
||||||
|
Luxembourg - AMD RYZEN KVM
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Las Vegas - Block Storage Slabs" href="https://my.frantech.ca/cart.php?gid=42" class="" id="Secondary_Sidebar-Categories-Las_Vegas_-_Block_Storage_Slabs">
|
||||||
|
Las Vegas - Block Storage Slabs
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="New York - Block Storage Slabs" href="https://my.frantech.ca/cart.php?gid=45" class="" id="Secondary_Sidebar-Categories-New_York_-_Block_Storage_Slabs">
|
||||||
|
New York - Block Storage Slabs
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Miami - Block Storage Slabs" href="https://my.frantech.ca/cart.php?gid=49" class="" id="Secondary_Sidebar-Categories-Miami_-_Block_Storage_Slabs">
|
||||||
|
Miami - Block Storage Slabs
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Luxembourg - Block Storage Slabs" href="https://my.frantech.ca/cart.php?gid=46" class="" id="Secondary_Sidebar-Categories-Luxembourg_-_Block_Storage_Slabs">
|
||||||
|
Luxembourg - Block Storage Slabs
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Luxembourg - Webhosting" href="https://my.frantech.ca/cart.php?gid=33" class="" id="Secondary_Sidebar-Categories-Luxembourg_-_Webhosting">
|
||||||
|
Luxembourg - Webhosting
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Luxembourg - Reseller Webhosting" href="https://my.frantech.ca/cart.php?gid=34" class="" id="Secondary_Sidebar-Categories-Luxembourg_-_Reseller_Webhosting">
|
||||||
|
Luxembourg - Reseller Webhosting
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Las Vegas - Webhosting" href="https://my.frantech.ca/cart.php?gid=17" class="" id="Secondary_Sidebar-Categories-Las_Vegas_-_Webhosting">
|
||||||
|
Las Vegas - Webhosting
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Las Vegas - Reseller Webhosting" href="https://my.frantech.ca/cart.php?gid=27" class="" id="Secondary_Sidebar-Categories-Las_Vegas_-_Reseller_Webhosting">
|
||||||
|
Las Vegas - Reseller Webhosting
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Addon Licenses" href="https://my.frantech.ca/cart.php?gid=40" class="" id="Secondary_Sidebar-Categories-Addon_Licenses">
|
||||||
|
Addon Licenses
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Free Software Licenses" href="https://my.frantech.ca/cart.php?gid=43" class="" id="Secondary_Sidebar-Categories-Free_Software_Licenses">
|
||||||
|
Free Software Licenses
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Offloaded SQL" href="https://my.frantech.ca/cart.php?gid=19" class="" id="Secondary_Sidebar-Categories-Offloaded_SQL">
|
||||||
|
Offloaded SQL
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="Networking" href="https://my.frantech.ca/cart.php?gid=44" class="" id="Secondary_Sidebar-Categories-Networking">
|
||||||
|
Networking
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="dropdown-title h6">Actions</li>
|
||||||
|
<li>
|
||||||
|
<a menuitemname="View Cart" href="https://my.frantech.ca/cart.php?a=view" class="" id="Secondary_Sidebar-Actions-View_Cart">
|
||||||
|
View Cart
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="ps__rail-x" style="left: 0px; bottom: 0px;"><div class="ps__thumb-x" tabindex="0" style="left: 0px; width: 0px;"></div></div><div class="ps__rail-y" style="top: 0px; right: 0px;"><div class="ps__thumb-y" tabindex="0" style="top: 0px; height: 0px;"></div></div></ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="products" id="products">
|
||||||
|
<div class="row row-eq-height row-eq-height-sm">
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product1">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 1GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>3.50 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>1GB</b> DDR4 RAM</li><li><b>1 CPU Core</b> @ 3.9Ghz+</li><li><b>20GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1411" class="btn btn-lg btn-primary" id="product1-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
-1 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product2">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 2GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>7.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>2GB</b> DDR4 RAM</li><li><b>1 CPU Core</b> @ 3.9Ghz+</li><li><b>40GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1402" class="btn btn-lg btn-primary" id="product2-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
0 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product3">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 4GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>15.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>4GB</b> DDR4 RAM</li><li><b>1 CPU Core</b> @ 3.9Ghz+</li><li><b>80GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1403" class="btn btn-lg btn-primary" id="product3-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
0 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product4">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 8GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>30.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>8GB</b> DDR4 RAM</li><li><b>2 CPU Core</b> @ 3.9Ghz+</li><li><b>160GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1404" class="btn btn-lg btn-primary" id="product4-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
-1 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product5">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 12GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>45.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>12GB</b> DDR4 RAM</li><li><b>3 CPU Core</b> @ 3.9Ghz+</li><li><b>240GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1405" class="btn btn-lg btn-primary" id="product5-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
0 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product6">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 16GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>60.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>16GB</b> DDR4 RAM</li><li><b>4 CPU Core</b> @ 3.9Ghz+</li><li><b>320GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1406" class="btn btn-lg btn-primary" id="product6-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
0 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product7">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 20GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>75.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>20GB</b> DDR4 RAM</li><li><b>5 CPU Core</b> @ 3.9Ghz+</li><li><b>400GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1407" class="btn btn-lg btn-primary" id="product7-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
0 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product8">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 24GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>90.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>24GB</b> DDR4 RAM</li><li><b>6 CPU Core</b> @ 3.9Ghz+</li><li><b>480GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1408" class="btn btn-lg btn-primary" id="product8-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
0 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product9">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 28GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>105.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>28GB</b> DDR4 RAM</li><li><b>7 CPU Core</b> @ 3.9Ghz+</li><li><b>560GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1409" class="btn btn-lg btn-primary" id="product9-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
0 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 col-sm-6">
|
||||||
|
|
||||||
|
<div class="package " id="product10">
|
||||||
|
<h3 class="package-name">LV RYZEN KVM 32GB</h3>
|
||||||
|
<div class="package-price">
|
||||||
|
<div class="package-starting-from ">Starting from</div>
|
||||||
|
<div class="price"><span class="price-prefix">$</span>120.00 USD<span class="price-cycle">/mo</span></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="package-content">
|
||||||
|
<p></p><ul class="package-features"><li><b>32GB</b> DDR4 RAM</li><li><b>8 CPU Core</b> @ 3.9Ghz+</li><li><b>640GB</b> NVME Storage</li><li><b>1 IPv4 + /48 IPv6</b></li><li><b>1000Mbit</b> Unmetered BW</li><li><b>DDOS Protection</b> Available</li><li><b>BGP Sessions</b> Available</li></ul><br>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="package-footer">
|
||||||
|
<a href="https://my.frantech.ca/cart.php?a=add&pid=1410" class="btn btn-lg btn-primary" id="product10-order-button">
|
||||||
|
Order Now
|
||||||
|
</a>
|
||||||
|
<div class="package-qty">
|
||||||
|
0 Available
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main-footer hidden-print">
|
||||||
|
<div class="container">
|
||||||
|
<div class="footer-content">
|
||||||
|
<p>Copyright © 2023 FranTech. All Rights Reserved.</p>
|
||||||
|
</div>
|
||||||
|
<a href="#" class="back-to-top btn btn-sm btn-icon"><i class="lm lm-go-top"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal system-modal fade" id="modalAjax" tabindex="-1" role="dialog" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="lm lm-close"></i></button>
|
||||||
|
<h3 class="modal-title"></h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="loader">
|
||||||
|
|
||||||
|
<div class="spinner ">
|
||||||
|
<div class="rect1"></div>
|
||||||
|
<div class="rect2"></div>
|
||||||
|
<div class="rect3"></div>
|
||||||
|
<div class="rect4"></div>
|
||||||
|
<div class="rect5"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-primary modal-submit">
|
||||||
|
Submit
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
|
Cancel
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<form action="#" id="frmGeneratePassword" class="form-horizontal">
|
||||||
|
<div class="modal fade" id="modalGeneratePassword">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="lm lm-close"></i></button>
|
||||||
|
<h3 class="modal-title">
|
||||||
|
Generate Password
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="alert alert-danger hidden" id="generatePwLengthError">
|
||||||
|
Please enter a number between 8 and 64 for the password length
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="generatePwLength" class="col-sm-4 control-label">Password Length</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input type="number" min="8" value="12" step="1" class="form-control input-inline input-inline-100" id="inputGeneratePasswordLength">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="generatePwOutput" class="col-sm-4 control-label">Generated Password</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input type="text" class="form-control" id="inputGeneratePasswordOutput">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-8 col-sm-offset-4">
|
||||||
|
<button type="submit" class="btn btn-default btn-sm">
|
||||||
|
<i class="fa fa-plus fa-fw"></i>
|
||||||
|
Generate new password
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-default btn-sm copy-to-clipboard" data-clipboard-target="#inputGeneratePasswordOutput">
|
||||||
|
<img src="stock_files/clippy.svg" alt="Copy to clipboard" width="15">
|
||||||
|
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="btnGeneratePasswordInsert" data-clipboard-target="#inputGeneratePasswordOutput">
|
||||||
|
Copy to clipboard & Insert
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript" src="stock_files/Untitled.es"></script>
|
||||||
|
<a id="livechat" href="#" class="btn btn-primary btn-large">CHAT WITH SALES <i class="fas fa-comment icon-white" style="padding-left: 10px;"></i> </a>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
<!--Start of Tawk.to Script-->
|
||||||
|
|
||||||
|
var $_Tawk_API = {};
|
||||||
|
$_Tawk_LoadStart = new Date();
|
||||||
|
|
||||||
|
(function(){
|
||||||
|
|
||||||
|
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
|
||||||
|
s1.async=true;
|
||||||
|
s1.src='https://embed.tawk.to/55735a7ffffb3e77234863ee/default';
|
||||||
|
s1.charset='UTF-8';
|
||||||
|
s1.setAttribute('crossorigin','*');
|
||||||
|
s0.parentNode.insertBefore(s1,s0);
|
||||||
|
})();
|
||||||
|
|
||||||
|
$('#livechat').click(function() {
|
||||||
|
|
||||||
|
$_Tawk.toggle();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
<!--End of Tawk.to Script-->
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
(function(){
|
||||||
|
|
||||||
|
function s() {
|
||||||
|
var e = document.createElement('script');
|
||||||
|
e.type = 'text/javascript';
|
||||||
|
e.async = true;
|
||||||
|
e.src = ('https:' === document.location.protocol ? 'https://' : 'http://') + 'cdn.fraudlabspro.com/s.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0];
|
||||||
|
s.parentNode.insertBefore(e, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
(window.attachEvent) ? window.attachEvent('onload', s) : window.addEventListener('load', s, false);
|
||||||
|
})();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="overlay"></div>
|
||||||
|
<script src="stock_files/lagom-app.min.js"></script>
|
||||||
|
<script src="stock_files/whmcs-custom.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<iframe name="__privateStripeMetricsController8650" frameborder="0" allowtransparency="true" scrolling="no" role="presentation" src="stock_files/m-outer-27c67c0d52761104439bb051c7856ab1.html" aria-hidden="true" tabindex="-1" style="border: medium !important; margin: 0px !important; padding: 0px !important; width: 1px !important; min-width: 100% !important; overflow: hidden !important; display: block !important; visibility: hidden !important; position: fixed !important; height: 1px !important; pointer-events: none !important; user-select: none !important;"></iframe><script async="" charset="UTF-8" src="stock_files/en.js"></script><div id="sc0tacu2pqrg1701482451366" class="widget-hidden"><iframe src="stock_files/a_003.html" frameborder="0" scrolling="no" width="64px" height="60px" style="outline:none !important; visibility:visible !important; resize:none !important; box-shadow:none !important; overflow:visible !important; background:none !important; opacity:1 !important; filter:alpha(opacity=100) !important; -ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity 1}) !important; -mz-opacity:1 !important; -khtml-opacity:1 !important; top:auto !important; right:20px !important; bottom:20px !important; left:auto !important; position:fixed !important; border:0 !important; min-height:60px !important; min-width:64px !important; max-height:60px !important; max-width:64px !important; padding:0 !important; margin:0 !important; -moz-transition-property:none !important; -webkit-transition-property:none !important; -o-transition-property:none !important; transition-property:none !important; transform:none !important; -webkit-transform:none !important; -ms-transform:none !important; width:64px !important; height:60px !important; display:block !important; z-index:1000001 !important; background-color:transparent !important; cursor:none !important; float:none !important; border-radius:unset !important; pointer-events:auto !important; clip:auto !important; color-scheme:light !important;" id="mrfnokt40nq81701482451379" class="" title="chat widget"></iframe><iframe src="stock_files/a_003.html" frameborder="0" scrolling="no" width="320px" height="400px" style="outline:none !important; visibility:visible !important; resize:none !important; box-shadow:none !important; overflow:visible !important; background:none !important; opacity:1 !important; filter:alpha(opacity=100) !important; -ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity 1}) !important; -mz-opacity:1 !important; -khtml-opacity:1 !important; top:auto !important; right:10px !important; bottom:90px !important; left:auto !important; position:fixed !important; border:0 !important; min-height:400px !important; min-width:320px !important; max-height:400px !important; max-width:320px !important; padding:0 !important; margin:0 !important; -moz-transition-property:none !important; -webkit-transition-property:none !important; -o-transition-property:none !important; transition-property:none !important; transform:none !important; -webkit-transform:none !important; -ms-transform:none !important; width:320px !important; height:400px !important; display:none !important; z-index:auto !important; background-color:transparent !important; cursor:none !important; float:none !important; border-radius:5px !important; pointer-events:auto !important; clip:auto !important; color-scheme:light !important;" id="vettgh8d7gpg1701482451388" class="" title="chat widget"></iframe><iframe src="stock_files/a_003.html" frameborder="0" scrolling="no" width="360px" height="55px" style="outline:none !important; visibility:visible !important; resize:none !important; box-shadow:none !important; overflow:visible !important; background:none !important; opacity:1 !important; filter:alpha(opacity=100) !important; -ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity 1}) !important; -mz-opacity:1 !important; -khtml-opacity:1 !important; top:auto !important; right:20px !important; bottom:100px; left:auto !important; position:fixed !important; border:0 !important; min-height:55px !important; min-width:360px !important; max-height:55px !important; max-width:360px !important; padding:0 !important; margin:0 !important; -moz-transition-property:none !important; -webkit-transition-property:none !important; -o-transition-property:none !important; transition-property:none !important; transform:none !important; -webkit-transform:none !important; -ms-transform:none !important; width:360px !important; height:55px !important; display:none !important; z-index:auto !important; background-color:transparent !important; cursor:none !important; float:none !important; border-radius:unset !important; pointer-events:auto !important; clip:auto !important; color-scheme:light !important;" id="enf30lemd01c1701482451386" class="" title="chat widget"></iframe><div id="chat-bubble"></div></div></body></html>
|
2
tests/data/stock_files/Untitled.es
Normal file
2
tests/data/stock_files/Untitled.es
Normal file
File diff suppressed because one or more lines are too long
16
tests/data/stock_files/a.html
Normal file
16
tests/data/stock_files/a.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<html lang="en"><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><link href="https://fonts.googleapis.com/css?family=Lato:100,100i,300,300i,400,400i,700,700i,900,900i&subset=latin-ext"><link href="a_data/min-widget.css" rel="stylesheet"><style>:root {
|
||||||
|
--tawk-header-background-color: #065a9e !important;
|
||||||
|
--tawk-header-background-color-alpha: #065a9e50 !important;
|
||||||
|
--tawk-header-text-color: #ffffff !important;
|
||||||
|
--tawk-header-override-padding-top: 1rem !important;
|
||||||
|
--tawk-footer-override-padding-bottom: 0 !important;
|
||||||
|
}.tawk-visitor-chat-bubble {
|
||||||
|
background : #e5e5e5 !important;
|
||||||
|
color : #333333 !important;
|
||||||
|
}.tawk-agent-chat-bubble {
|
||||||
|
background : #039746 !important;
|
||||||
|
color : #ffffff !important;
|
||||||
|
}.tawk-agent-chat-bubble-dots {
|
||||||
|
background : #039746 !important;
|
||||||
|
}</style></head><body class="font-lato"><div style="width: 100%; height: 100%;"><div class="tawk-min-container" style=""><!----><button type="button" class="tawk-custom-color tawk-custom-border-color tawk-button tawk-button-circle tawk-button-large" tabindex="0" style="bottom: 0px; left: 0px; position: absolute; z-index: 1000; border: 0px;"><div isroundwidget="true"><!----><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" height="32px" width="32px" role="img" alt="Chat icon" class="tawk-min-chat-icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M400 26.2c-193.3 0-350 156.7-350 350 0 136.2 77.9 254.3 191.5 312.1 15.4 8.1 31.4 15.1 48.1 20.8l-16.5 63.5c-2 7.8 5.4 14.7 13 12.1l229.8-77.6c14.6-5.3 28.8-11.6 42.4-18.7C672 630.6 750 512.5 750 376.2c0-193.3-156.7-350-350-350zm211.1 510.7c-10.8 26.5-41.9 77.2-121.5 77.2-79.9 0-110.9-51-121.6-77.4-2.8-6.8 5-13.4 13.8-11.8 76.2 13.7 147.7 13 215.3.3 8.9-1.8 16.8 4.8 14 11.7z"></path></svg></div></div></button></div></div></body></html>
|
16
tests/data/stock_files/a_002.html
Normal file
16
tests/data/stock_files/a_002.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<html lang="en"><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><link href="https://fonts.googleapis.com/css?family=Lato:100,100i,300,300i,400,400i,700,700i,900,900i&subset=latin-ext"><link href="a_data_002/max-widget.css" rel="stylesheet"><style>:root {
|
||||||
|
--tawk-header-background-color: #065a9e !important;
|
||||||
|
--tawk-header-background-color-alpha: #065a9e50 !important;
|
||||||
|
--tawk-header-text-color: #ffffff !important;
|
||||||
|
--tawk-header-override-padding-top: 1rem !important;
|
||||||
|
--tawk-footer-override-padding-bottom: 0 !important;
|
||||||
|
}.tawk-visitor-chat-bubble {
|
||||||
|
background : #e5e5e5 !important;
|
||||||
|
color : #333333 !important;
|
||||||
|
}.tawk-agent-chat-bubble {
|
||||||
|
background : #039746 !important;
|
||||||
|
color : #ffffff !important;
|
||||||
|
}.tawk-agent-chat-bubble-dots {
|
||||||
|
background : #039746 !important;
|
||||||
|
}</style></head><body class="font-lato"><div style="width: 100%; height: 100%;"><div><!----></div></div></body></html>
|
16
tests/data/stock_files/a_003.html
Normal file
16
tests/data/stock_files/a_003.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<html lang="en"><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><link href="https://fonts.googleapis.com/css?family=Lato:100,100i,300,300i,400,400i,700,700i,900,900i&subset=latin-ext"><link href="a_data_003/message-preview.css" rel="stylesheet"><style>:root {
|
||||||
|
--tawk-header-background-color: #065a9e !important;
|
||||||
|
--tawk-header-background-color-alpha: #065a9e50 !important;
|
||||||
|
--tawk-header-text-color: #ffffff !important;
|
||||||
|
--tawk-header-override-padding-top: 1rem !important;
|
||||||
|
--tawk-footer-override-padding-bottom: 0 !important;
|
||||||
|
}.tawk-visitor-chat-bubble {
|
||||||
|
background : #e5e5e5 !important;
|
||||||
|
color : #333333 !important;
|
||||||
|
}.tawk-agent-chat-bubble {
|
||||||
|
background : #039746 !important;
|
||||||
|
color : #ffffff !important;
|
||||||
|
}.tawk-agent-chat-bubble-dots {
|
||||||
|
background : #039746 !important;
|
||||||
|
}</style></head><body class="font-lato"><div style="width: 100%; height: 100%;"><div class="tawk-flex" style="width: 100%; height: 100%; justify-content: flex-end;"><div id="tawk-message-preview" class="tawk-flex tawk-message-preview tawk-fadeIn tawk-flex-bottom" style="width: 360px; justify-content: flex-end;"><div id="tawk-message-preview-content" class="tawk-message-preview-content"><!----><!----><div><div id="tawk-chat-message-container" role="button" tabindex="0" class="tawk-chat-message-container" style="max-height: 752px;"><span></span><!----></div><div style="display: none;"><div id="tawk-chatinput-container" class="tawk-card tawk-card-xsmall tawk-chatinput-container tawk-box-shadow-xsmall"><!----><div class="tawk-chatinput"><div class="tawk-chatinput-emojis"><div class="tawk-emoji-picker" style="display: none;"><div class="tawk-emoji-loading"></div></div></div><div class="tawk-chatinput-fileupload" style="display: none;"><ul class="tawk-chatinput-fileupload-list tawk-flex tawk-flex-wrap"><!----></ul><input type="file" multiple="multiple"></div><div class="tawk-chatinput-wrap tawk-flex tawk-flex-wrap"><textarea placeholder="" class="tawk-chatinput-editor" style="height: 16px;"></textarea><div class="tawk-chatinput-action-buttons"><div role="button" type="button" title="Rate this chat" aria-label="Rate this chat" data-text="Rate this chat" class="tawk-chatinput-button tawk-tooltip tawk-tooltip"><div class="tawk-chatinput-ratings tawk-flex tawk-flex-middle"><button title="Rate this conversation with -1" role="button" tabindex="0" class="tawk-chatinput-rate tawk-chatinput-ratings-thumbs-down tawk-margin-xsmall-right tawk-margin-auto-left"><i class="tawk-icon tawk-icon-thumbs-down"></i></button><button title="Rate this conversation with +1" role="button" tabindex="0" class="tawk-chatinput-rate tawk-chatinput-ratings-thumbs-up tawk-margin-xsmall-right"><i class="tawk-icon tawk-icon-thumbs-up"></i></button></div><i role="button" tabindex="0" class="tawk-icon tawk-icon-thumbs-up tawk-chatinput-rating"></i><span class="tawk-tooltip-hover bottom">Rate this chat<span class="tawk-tooltip-arrow"></span></span></div><button role="button" type="button" title="Upload File" aria-title="Upload File" aria-hidden="true" aria-haspopup="menu" aria-expanded="false" data-text="Upload File" class="tawk-chatinput-button tawk-tooltip tawk-tooltip"><i class="tawk-icon tawk-icon-attach-file"></i><span class="tawk-tooltip-hover bottom">Upload File<span class="tawk-tooltip-arrow"></span></span></button><button role="button" type="button" title="Insert emoji" aria-label="Insert emoji" aria-hidden="true" aria-haspopup="true" data-text="Insert emoji" class="tawk-chatinput-button tawk-tooltip tawk-tooltip"><i class="tawk-icon tawk-icon-emoji"></i><span class="tawk-tooltip-hover bottom">Insert emoji<span class="tawk-tooltip-arrow"></span></span></button></div><!----></div></div></div></div></div></div></div></div></div></body></html>
|
1
tests/data/stock_files/a_data/min-widget.css
Normal file
1
tests/data/stock_files/a_data/min-widget.css
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/a_data_002/max-widget.css
Normal file
1
tests/data/stock_files/a_data_002/max-widget.css
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/a_data_003/message-preview.css
Normal file
1
tests/data/stock_files/a_data_003/message-preview.css
Normal file
File diff suppressed because one or more lines are too long
3
tests/data/stock_files/clippy.svg
Normal file
3
tests/data/stock_files/clippy.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg height="1024" width="896" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M128 768h256v64H128v-64z m320-384H128v64h320v-64z m128 192V448L384 640l192 192V704h320V576H576z m-288-64H128v64h160v-64zM128 704h160v-64H128v64z m576 64h64v128c-1 18-7 33-19 45s-27 18-45 19H64c-35 0-64-29-64-64V192c0-35 29-64 64-64h192C256 57 313 0 384 0s128 57 128 128h192c35 0 64 29 64 64v320h-64V320H64v576h640V768zM128 256h512c0-35-29-64-64-64h-64c-35 0-64-29-64-64s-29-64-64-64-64 29-64 64-29 64-64 64h-64c-35 0-64 29-64 64z" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 519 B |
3
tests/data/stock_files/core.min.js
vendored
Normal file
3
tests/data/stock_files/core.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
70
tests/data/stock_files/default.js
Normal file
70
tests/data/stock_files/default.js
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
(function(global){
|
||||||
|
global.$_Tawk_AccountKey='55735a7ffffb3e77234863ee';
|
||||||
|
global.$_Tawk_WidgetId='default';
|
||||||
|
global.$_Tawk_Unstable=false;
|
||||||
|
global.$_Tawk = global.$_Tawk || {};
|
||||||
|
(function (w){
|
||||||
|
function l() {
|
||||||
|
if (window.$_Tawk.init !== undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.$_Tawk.init = true;
|
||||||
|
|
||||||
|
var files = [
|
||||||
|
'https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-main.js',
|
||||||
|
'https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-vendor.js',
|
||||||
|
'https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-chunk-vendors.js',
|
||||||
|
'https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-chunk-common.js',
|
||||||
|
'https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-runtime.js',
|
||||||
|
'https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-app.js'
|
||||||
|
];
|
||||||
|
|
||||||
|
if (typeof Promise === 'undefined') {
|
||||||
|
files.unshift('https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-promise-polyfill.js');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof Symbol === 'undefined' || typeof Symbol.iterator === 'undefined') {
|
||||||
|
files.unshift('https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-iterator-polyfill.js');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof Object.entries === 'undefined') {
|
||||||
|
files.unshift('https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-entries-polyfill.js');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.crypto) {
|
||||||
|
window.crypto = window.msCrypto;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof Event !== 'function') {
|
||||||
|
files.unshift('https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-event-polyfill.js');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Object.values) {
|
||||||
|
files.unshift('https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-object-values-polyfill.js');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof Array.prototype.find === 'undefined') {
|
||||||
|
files.unshift('https://embed.tawk.to/_s/v4/app/6549ac0173e/js/twk-arr-find-polyfill.js');
|
||||||
|
}
|
||||||
|
|
||||||
|
var s0=document.getElementsByTagName('script')[0];
|
||||||
|
|
||||||
|
for (var i = 0; i < files.length; i++) {
|
||||||
|
var s1 = document.createElement('script');
|
||||||
|
s1.src= files[i];
|
||||||
|
s1.charset='UTF-8';
|
||||||
|
s1.setAttribute('crossorigin','*');
|
||||||
|
s0.parentNode.insertBefore(s1,s0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (document.readyState === 'complete') {
|
||||||
|
l();
|
||||||
|
} else if (w.attachEvent) {
|
||||||
|
w.attachEvent('onload', l);
|
||||||
|
} else {
|
||||||
|
w.addEventListener('load', l, false);
|
||||||
|
}
|
||||||
|
})(window);
|
||||||
|
|
||||||
|
})(window);
|
10
tests/data/stock_files/emojione.min.js
vendored
Normal file
10
tests/data/stock_files/emojione.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
363
tests/data/stock_files/en.js
Normal file
363
tests/data/stock_files/en.js
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
(function(global){var Language = {};
|
||||||
|
|
||||||
|
Language.pluralFormFunction = function (n) {
|
||||||
|
if (n === 1) {
|
||||||
|
return 'one';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'other';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Language.form = {};
|
||||||
|
|
||||||
|
Language.form.SaveButton = { message : 'Save' };
|
||||||
|
Language.form.SubmitButton = { message : 'Submit' };
|
||||||
|
Language.form.StartChatButton = { message : 'Start Chat' };
|
||||||
|
Language.form.CancelButton = { message : 'Cancel' };
|
||||||
|
Language.form.CloseButton = { message : 'Close' };
|
||||||
|
Language.form.SendButton = { message : 'Send' };
|
||||||
|
Language.form.EmailPlaceholder = { message : 'Email Address' };
|
||||||
|
Language.form.QuestionPlaceholder = { message : 'your query..' };
|
||||||
|
Language.form.DepartmentsPlaceholder = { message : 'select department..' };
|
||||||
|
Language.form.MessagePlaceholder = { message : 'your message..' };
|
||||||
|
Language.form.NameErrorMessage = { message : 'Name must be provided.' };
|
||||||
|
Language.form.EmailErrorMessage = { message : 'Invalid email address.' };
|
||||||
|
Language.form.DepartmentsErrorMessage = { message : 'Department is required.' };
|
||||||
|
Language.form.NameFormMessage = { message : 'Please change your name so we can recognize you the next time.' };
|
||||||
|
Language.form.EmailTranscriptFormMessage = { message : 'Please fill out the form below to have this conversation sent to your email address.' };
|
||||||
|
Language.form.PreChatFormMessage = { message : 'Please fill out the form below to start chatting with the next available agent.' };
|
||||||
|
Language.form.OfflineFormMessage = { message : 'Please fill out the form below and we will get back to you as soon as possible.' };
|
||||||
|
Language.form.PreChatFormMessageProfile = { message : 'Please fill out the form below to start chatting with me.' };
|
||||||
|
Language.form.OfflineMessageSent = { message : 'Your message was sent successfully!' };
|
||||||
|
Language.form.OfflineMessageNotSent = { message : 'Your message was not delivered, please retry' };
|
||||||
|
Language.form.EndChatTitle = { message : 'Are you sure you want to end this chat?' };
|
||||||
|
Language.form.RequiredErrorMessage = { message : 'This field is required' };
|
||||||
|
Language.form.PhoneErrorMessage = { message : 'Invalid phone number' };
|
||||||
|
Language.form.errorSaving = { message : 'Unable to save. Please try again' };
|
||||||
|
Language.form.visitButton = { message : 'Visit tawk.to' };
|
||||||
|
Language.form.SubmittingProcess = { message : 'Submitting' };
|
||||||
|
Language.form.EmailTranscriptTo = { message : 'Email transcript to' };
|
||||||
|
Language.form.EmailTranscriptSuccess = { message : 'Sent email transcript request.' };
|
||||||
|
Language.form.name = { message : 'Name' };
|
||||||
|
Language.form.email = { message : 'Email' };
|
||||||
|
Language.form.department = { message : 'Department' };
|
||||||
|
Language.form.message = { message : 'Message' };
|
||||||
|
Language.form.any = { message : 'Any' };
|
||||||
|
Language.form.SubmittedFrom = { message : 'Submitted From' };
|
||||||
|
Language.form.sendAgain = { message : 'Send Again' };
|
||||||
|
Language.form.EndChatMessage = { message : 'Thank you for chatting with us. Feel free to start a new chat session or enter your email and send a transcript of this conversation to your inbox.'};
|
||||||
|
Language.form.TranscriptMessage = { message : 'Feel free to enter your email and send a transcript of this conversation to your inbox.'};
|
||||||
|
Language.form.chatEnded = { message : 'Your chat has ended' };
|
||||||
|
Language.form.SendMessage = { message : 'Send message'};
|
||||||
|
Language.form.EndChatMessage2 = { message : 'Thank you for chatting with us. Feel free to start a new chat session.'};
|
||||||
|
|
||||||
|
|
||||||
|
Language.rollover = {};
|
||||||
|
|
||||||
|
Language.rollover.popOut = { message : 'Pop out' };
|
||||||
|
Language.rollover.minimize = { message : 'Minimize' };
|
||||||
|
Language.rollover.resize = { message : 'Resize' };
|
||||||
|
Language.rollover.resendMessage = { message : 'Resend message' };
|
||||||
|
Language.rollover.emailTranscriptOption = { message : 'Email Transcript' };
|
||||||
|
Language.rollover.positiveRating = { message : 'Rate this conversation with +1' };
|
||||||
|
Language.rollover.negativeRating = { message : 'Rate this conversation with -1' };
|
||||||
|
Language.rollover.maximize = { message : 'Maximize' };
|
||||||
|
Language.rollover.end = { message : 'End Chat' };
|
||||||
|
Language.rollover.uploadFile = { message : 'Upload File' };
|
||||||
|
Language.rollover.videoCall = { message : 'Video Call' };
|
||||||
|
Language.rollover.voiceCall = { message : 'Voice Call' };
|
||||||
|
Language.rollover.screenShare = { message : 'Screen Share' };
|
||||||
|
Language.rollover.chatMenu = { message : 'Menu'};
|
||||||
|
Language.rollover.knowledgeBase = { message : 'knowledge Base' };
|
||||||
|
Language.rollover.rateChat = { message : 'Rate this chat' };
|
||||||
|
Language.rollover.back = { message : 'Back' };
|
||||||
|
|
||||||
|
Language.overlay = {};
|
||||||
|
|
||||||
|
Language.overlay.inactive = { message : 'Click here to reinitiate the chat' };
|
||||||
|
Language.overlay.maintenance = { message : 'Chat is in maintenance' };
|
||||||
|
Language.overlay.cookiesOff = { message : 'You can\'t use this chat because your browser\'s cookie functionality is turned off. Please turn it on and refresh your browser.' };
|
||||||
|
Language.overlay.tawkContent = { message : 'This widget is powered by tawk.to - a free messaging application that lets you monitor and engage with the visitors on your website.' };
|
||||||
|
|
||||||
|
Language.chat = {};
|
||||||
|
|
||||||
|
Language.chat.remove_rate = { message : 'You removed your rating for this conversation' };
|
||||||
|
Language.chat.hideButton = { message : 'Hide Chat' };
|
||||||
|
Language.chat.send_mail = { message : 'Send Mail' };
|
||||||
|
Language.chat.defaultName = { message : 'You (change name)' };
|
||||||
|
Language.chat.notificationTitle = { message : 'notification' };
|
||||||
|
Language.chat.departmentIsOffline = { message : 'Department #strongStart #departmentName #strongEnd is currently offline. You might be served by another department.', vars : ['departmentName', 'strongStart', 'strongEnd'] };
|
||||||
|
Language.chat.departmentIsAway = { message : 'Department #strongStart #departmentName #strongEnd is currently away.', vars : ['departmentName', 'strongStart', 'strongEnd'] };
|
||||||
|
Language.chat.mobileName = { message : 'You' };
|
||||||
|
Language.chat.chatEnded = { message : 'Your chat has ended' };
|
||||||
|
Language.chat.newChat = { message : 'Start New Chat' };
|
||||||
|
Language.chat.newMessages = { message : 'New messages' };
|
||||||
|
Language.chat.say_something = { message : "Write a reply.." };
|
||||||
|
Language.chat.downloadFile = { message : 'Download File' };
|
||||||
|
Language.chat.download = { message : 'Download' };
|
||||||
|
Language.chat.limit50 = { message : 'The maximum file size is 50MB, please upload a smaller file.' };
|
||||||
|
Language.chat.limit2 = { message : 'The maximum file size is 2MB for mobile browsers, please upload a smaller file.' };
|
||||||
|
Language.chat.generalUploadError = { message : '"#fileName", please try again.', vars : ['fileName'] };
|
||||||
|
Language.chat.generalUploadErrorLabel = { message : 'Unable to upload file'};
|
||||||
|
Language.chat.retry = { message : 'Retry.' };
|
||||||
|
Language.chat.tryAgain = { message : 'Try again.' };
|
||||||
|
Language.chat.dragDropText = { message : 'Drop files here to upload' };
|
||||||
|
Language.chat.pasted_image_title = { message : 'Pasted image at #dateTime', vars : ['dateTime'] };
|
||||||
|
Language.chat.chat_qm = { message : 'Chat?' };
|
||||||
|
Language.chat.we_are_live = { message : 'We are live and ready to chat with you now. Say something to start a live chat.' };
|
||||||
|
Language.chat.profile_prechat_text = { message : 'Please fill out the form below to start chatting with me.' };
|
||||||
|
Language.chat.incoming_call_message = {"message" : "Incoming call from #name", vars : ["name"]};
|
||||||
|
Language.chat.accept_call = {"message" : "Accept"};
|
||||||
|
Language.chat.decline_call = {"message" : "Decline"};
|
||||||
|
Language.chat.video_call_error = {"message" : "Video call is not available."};
|
||||||
|
Language.chat.voice_call_error = {"message" : "Voice call is not available."};
|
||||||
|
Language.chat.screen_share_error = {"message" : "Screen share is not available."};
|
||||||
|
Language.chat.message_too_long = {"message" : "Message cannot exceed 5000 characters"};
|
||||||
|
Language.chat.message_not_delivered = {"message" : "Message not delivered, click here to resend."};
|
||||||
|
Language.chat.visitor_ringing = {"message" : "Calling..."};
|
||||||
|
Language.chat.agent_ringing = {"message" : "Incoming Call"};
|
||||||
|
Language.chat.ongoing_call = {"message" : "Ongoing Call"};
|
||||||
|
Language.chat.completed_call = {"message" : "Call ended"};
|
||||||
|
Language.chat.missed_agent = {"message" : "Your call was missed"};
|
||||||
|
Language.chat.missed_visitor = {"message" : "You missed a call"};
|
||||||
|
Language.chat.missed_visitor_messagePreview = {"message" : "You missed a call from"};
|
||||||
|
Language.chat.rejected_call = {"message" : "You rejected this call"};
|
||||||
|
Language.chat.call_end_details = {"message" : "Started at #startedOn and lasted #duration", "vars" : ["startedOn", "duration"]};
|
||||||
|
Language.chat.call_started_on = {"message" : "Started at #startedOn", "vars" : ["startedOn"]};
|
||||||
|
Language.chat.error_title = {"message" : "Error"};
|
||||||
|
Language.chat.call_error_load = {"message" : "Unable to load call details."};
|
||||||
|
Language.chat.insert_emoji = {"message" : "Insert emoji"};
|
||||||
|
Language.chat.uploading = {"message" : "Uploading..."};
|
||||||
|
Language.chat.failed = {"message" : "Failed"};
|
||||||
|
Language.chat.resend = {"message" : "Resend"};
|
||||||
|
Language.chat.justNow = {"message" : "just now"};
|
||||||
|
Language.chat.past = {"message" : "#time ago", "vars" : ["time"]};
|
||||||
|
Language.chat.Warning = {"message" : "Warning"};
|
||||||
|
Language.chat.chat_text = {message : 'Chat'};
|
||||||
|
Language.chat.emoji_error_load = {message : 'Unable to load emojis'};
|
||||||
|
Language.chat.new_conversation = {
|
||||||
|
message : 'New Conversation'
|
||||||
|
};
|
||||||
|
Language.chat.unanswered = { message : 'Unanswered'};
|
||||||
|
Language.chat.all_conversations = { message : 'See all conversations' };
|
||||||
|
Language.chat.sent_file = { message : 'Sent a file' };
|
||||||
|
Language.chat.sent_form = { message : 'Sent a form' };
|
||||||
|
Language.chat.sent_suggested_message = { message : 'Sent a suggested message' };
|
||||||
|
Language.chat.active = { message : 'Active' };
|
||||||
|
Language.chat.today_time = {
|
||||||
|
vars: ["time"],
|
||||||
|
"message" : "Today, #time"
|
||||||
|
};
|
||||||
|
Language.chat.agent_profile_image = { "message" : "Agent profile image" };
|
||||||
|
Language.chat.chat_icon = { "message" : "Chat icon" };
|
||||||
|
Language.chat.close_icon = { "message" : "Close icon" };
|
||||||
|
Language.chat.goToLatest = { "message" : "Go to latest" };
|
||||||
|
Language.chat.conversation_ended_on = { "message" : "Conversation ended on"};
|
||||||
|
Language.chat.return_to_live_chat = { "message" : "Return to live chat" };
|
||||||
|
|
||||||
|
Language.status = {};
|
||||||
|
|
||||||
|
Language.status.online = { message : 'Online' };
|
||||||
|
Language.status.away = { message : 'Away' };
|
||||||
|
Language.status.offline = { message : 'Offline' };
|
||||||
|
|
||||||
|
Language.months = {};
|
||||||
|
|
||||||
|
Language.months['0'] = { message : 'January' };
|
||||||
|
Language.months['1'] = { message : 'February' };
|
||||||
|
Language.months['2'] = { message : 'March' };
|
||||||
|
Language.months['3'] = { message : 'April' };
|
||||||
|
Language.months['4'] = { message : 'May' };
|
||||||
|
Language.months['5'] = { message : 'June' };
|
||||||
|
Language.months['6'] = { message : 'July' };
|
||||||
|
Language.months['7'] = { message : 'August' };
|
||||||
|
Language.months['8'] = { message : 'September' };
|
||||||
|
Language.months['9'] = { message : 'October' };
|
||||||
|
Language.months['10'] = { message : 'November' };
|
||||||
|
Language.months['11'] = { message : 'December' };
|
||||||
|
|
||||||
|
Language.days = {};
|
||||||
|
|
||||||
|
Language.days['0'] = { message : 'Sunday' };
|
||||||
|
Language.days['1'] = { message : 'Monday' };
|
||||||
|
Language.days['2'] = { message : 'Tuesday' };
|
||||||
|
Language.days['3'] = { message : 'Wednesday' };
|
||||||
|
Language.days['4'] = { message : 'Thursday' };
|
||||||
|
Language.days['5'] = { message : 'Friday' };
|
||||||
|
Language.days['6'] = { message : 'Saturday' };
|
||||||
|
|
||||||
|
Language.menu = {};
|
||||||
|
|
||||||
|
Language.menu.change_name = { message : 'Change Name' };
|
||||||
|
Language.menu.sound_on = { message : 'Sound On' };
|
||||||
|
Language.menu.sound_off = { message : 'Sound Off' };
|
||||||
|
Language.menu.email_transcript = { message : 'Email transcript' };
|
||||||
|
Language.menu.popout_widget = { message : 'Pop out widget' };
|
||||||
|
Language.menu.end_chat_session = { message : 'End this chat session' };
|
||||||
|
Language.menu.add_chat_to_your_website = { message : 'Add Chat to your website' };
|
||||||
|
|
||||||
|
Language.notifications = {};
|
||||||
|
|
||||||
|
Language.notifications.maximum_file_upload_warning = {
|
||||||
|
message : 'Sorry, file transfer is limited to #limitFileNumber files at a time. Please try the following file(s) again :',
|
||||||
|
vars : ["limitFileNumber"]
|
||||||
|
};
|
||||||
|
Language.notifications.maximum_size_upload_warning = {
|
||||||
|
message : 'Sorry, file transfer is limited to #limitFileSize per file. Please compress the following file(s) and try again.',
|
||||||
|
vars : ["limitFileSize"]
|
||||||
|
};
|
||||||
|
Language.notifications.retry = { message : 'Retry' };
|
||||||
|
Language.notifications.dismiss_alert = { message : 'Dismiss Alert' };
|
||||||
|
Language.notifications.reconnecting = { message : 'Reconnecting' };
|
||||||
|
|
||||||
|
Language.kb = {};
|
||||||
|
|
||||||
|
Language.kb.help_center = {
|
||||||
|
message : 'Help Center'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.show_all_results = {
|
||||||
|
message : 'Show all results (#num)',
|
||||||
|
vars : ['num']
|
||||||
|
};
|
||||||
|
Language.kb.recent_searches = {
|
||||||
|
message : 'Recent Searches'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.search_placeholder = {
|
||||||
|
message : 'Search for answers'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.search_fail_title = {
|
||||||
|
message : 'No search results'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.search_fail_description = {
|
||||||
|
message : 'Please, try again'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.search_results = {
|
||||||
|
message : 'Search Results'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.article_rating = {
|
||||||
|
message : 'Was this article helpful?'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.article_rating_count = {
|
||||||
|
message : '#totalLikes out of #totalVotes liked this article',
|
||||||
|
vars : ['totalLikes', 'totalVotes']
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.view_full = {
|
||||||
|
message : 'View in full'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.submit_search = {
|
||||||
|
message : 'Submit Search'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.clear_search = {
|
||||||
|
message : 'Clear Search'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.positive_rating = {
|
||||||
|
message : 'Positive'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.negative_rating = {
|
||||||
|
message : 'Negative'
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.kb.upvote_rating_button = { message : 'Yes' };
|
||||||
|
Language.kb.downvote_rating_button = { message : 'No' };
|
||||||
|
|
||||||
|
Language.kb.author_profile_image = { "message" : "Author profile image" };
|
||||||
|
Language.kb.article_image = { "message" : "Article image" };
|
||||||
|
|
||||||
|
Language.routes = {};
|
||||||
|
Language.routes.conversations = { message : 'Conversations'};
|
||||||
|
Language.routes.all_agents = { message : 'All Agents'};
|
||||||
|
Language.routes.load_more = { message : 'Load More'};
|
||||||
|
|
||||||
|
Language.home = {};
|
||||||
|
|
||||||
|
Language.home.heading_main = {
|
||||||
|
"message" : "Hi there \uD83D\uDC4B"
|
||||||
|
};
|
||||||
|
Language.home.banner_image = { "message" : "Banner image" };
|
||||||
|
Language.home.logo_image = { "message" : "Logo image" };
|
||||||
|
|
||||||
|
Language.home.heading_sub = {
|
||||||
|
"message" : "Need help? Search our help center for answers or start a conversation:"
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.home.kb_search = {
|
||||||
|
"message" : "Search for answers"
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.home.chat_button = {
|
||||||
|
"message" : "New Conversation"
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.home.chat_input = {
|
||||||
|
"message" : "Type here and press enter.."
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.bubble = {};
|
||||||
|
|
||||||
|
Language.bubble.attention_grabber = { message : 'Chat attention grabber' };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Language.chat = Language.chat || {};
|
||||||
|
Language.chat.messageQueuedText = {
|
||||||
|
vars : ["strongStart", "strongEnd"],
|
||||||
|
pluralVars : ["t"],
|
||||||
|
message : {
|
||||||
|
"one" : "Estimated wait time is #strongStart #t minute #strongEnd",
|
||||||
|
"other" : "Estimated wait time is #strongStart #t minutes #strongEnd"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Language.chat.newMessage = {
|
||||||
|
vars : [],
|
||||||
|
pluralVars : ["num"],
|
||||||
|
message : {
|
||||||
|
"one" : "#num new message",
|
||||||
|
"other" : "#num new messages"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.chat.seconds = {
|
||||||
|
vars : [],
|
||||||
|
pluralVars : ["num"],
|
||||||
|
message : {
|
||||||
|
"one" : "#num second",
|
||||||
|
"other" : "#num seconds"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.chat.minutes = {
|
||||||
|
vars : [],
|
||||||
|
pluralVars : ["num"],
|
||||||
|
message : {
|
||||||
|
"one" : "#num minute",
|
||||||
|
"other" : "#num minutes"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Language.chat.hours = {
|
||||||
|
vars : [],
|
||||||
|
pluralVars : ["num"],
|
||||||
|
message : {
|
||||||
|
"one" : "#num hour",
|
||||||
|
"other" : "#num hours"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
global.$_Tawk.language = Language;})(window);
|
5
tests/data/stock_files/fontawesome-all.min.css
vendored
Normal file
5
tests/data/stock_files/fontawesome-all.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
29
tests/data/stock_files/lagom-app.min.js
vendored
Normal file
29
tests/data/stock_files/lagom-app.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
tests/data/stock_files/logo.png
Normal file
BIN
tests/data/stock_files/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.0 KiB |
@ -0,0 +1,3 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta charset="utf-8"><script defer="defer" src="m-outer-27c67c0d52761104439bb051c7856ab1_data/m-outer-6576085ca35ee42f2f484cda6763e4aa.js"></script></head><body><iframe src="m-outer-27c67c0d52761104439bb051c7856ab1_data/inner.html"></iframe></body></html>
|
@ -0,0 +1,3 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta charset="utf-8"><title>StripeM-Inner</title></head><body><script>!function(){var e=document.createElement("script");e.defer=!0,e.src="out-4.5.43.js",e.onload=function(){var e;window.StripeM&&(e=window.location.hash,/ping=false/.test(e)||(e=(e=e.match(/version=(4|6)/))?e[1]:"4",window.StripeM.p({t:!0,v:e})),e=function(e){if(window.opener||window.parent||window)try{var i=((t=JSON.parse(e.data)).message||t).action,t=t.message?t.message.payload:t;switch(i){case"ping":window.StripeM.p({t:!0,o:{muid:t.muid,sid:t.sid,referrer:t.referrer,url:t.url,title:t.title,v2:t.v2},v:t.version||"4"});break;case"track":if(!t.source||!t.data)return;window.StripeM.b({muid:t.muid,sid:t.sid,url:t.url,source:t.source,data:t.data},t.version||"4")}}catch(e){}},window.addEventListener?window.addEventListener("message",e,!1):window.attachEvent("onMessage",e))},document.body.appendChild(e)}()</script><script defer="defer" src="inner_data/out-4.5.43.js"></script></body></html>
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,2 @@
|
|||||||
|
!function(){"use strict";var e="https://m.stripe.network",n=window.location.hash,t=/preview=true/.test(n)?"inner-preview.html":"inner.html",o=document.createElement("iframe");o.src="".concat(e,"/").concat(t).concat(n);var i=function(n){if(n.origin===e){var t=window.opener||window.parent||window;if(!t)return;t.postMessage(n.data,"*")}else o.contentWindow.postMessage(n.data,"*")};window.addEventListener?window.addEventListener("message",i,!1):window.attachEvent("onMessage",i),document.body&&document.body.appendChild(o)}();
|
||||||
|
//# sourceMappingURL=https://js.stripe.com/v3/sourcemaps/m-outer-5bd239b1997856dd843736e18c51b163.js.map
|
2
tests/data/stock_files/order.min.js
vendored
Normal file
2
tests/data/stock_files/order.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/s.js
Normal file
1
tests/data/stock_files/s.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
function _0x2d6b(_0x538ea5,_0x240c1a){var _0x57b6b2=_0x57b6();return _0x2d6b=function(_0x2d6b76,_0x4db4b1){_0x2d6b76=_0x2d6b76-0xed;var _0x35164b=_0x57b6b2[_0x2d6b76];return _0x35164b;},_0x2d6b(_0x538ea5,_0x240c1a);}(function(_0x7d8839,_0x1adf8e){var _0x105684=_0x2d6b,_0x335fe9=_0x7d8839();while(!![]){try{var _0x25eddd=-parseInt(_0x105684(0xff))/0x1*(-parseInt(_0x105684(0xed))/0x2)+-parseInt(_0x105684(0x10e))/0x3+parseInt(_0x105684(0xef))/0x4+parseInt(_0x105684(0x105))/0x5*(parseInt(_0x105684(0x108))/0x6)+-parseInt(_0x105684(0x10f))/0x7+-parseInt(_0x105684(0x10b))/0x8+-parseInt(_0x105684(0x10d))/0x9*(parseInt(_0x105684(0x114))/0xa);if(_0x25eddd===_0x1adf8e)break;else _0x335fe9['push'](_0x335fe9['shift']());}catch(_0x48ced6){_0x335fe9['push'](_0x335fe9['shift']());}}}(_0x57b6,0x225dc));var FraudLabsProAgent=FraudLabsProAgent||(function(){var _0xb66229=_0x2d6b;if(!_0x1b653f())return;var _0x1ef183=_0x1e7406(_0xb66229(0xf4));if(!_0x1ef183){var _0x19516a=new XMLHttpRequest();_0x19516a[_0xb66229(0x102)](_0xb66229(0xf1),_0xb66229(0x112),!![]),_0x19516a[_0xb66229(0xf7)]('Content-type',_0xb66229(0xfe)),_0x19516a['onreadystatechange']=function(){var _0x3eed40=_0xb66229;if(_0x19516a[_0x3eed40(0xf0)]==0x4&&_0x19516a['status']==0xc8){var _0x1f943f=JSON[_0x3eed40(0x110)](_0x19516a[_0x3eed40(0xf6)]),_0x2c39c8=_0x1f943f[_0x3eed40(0x100)]['SendMessageResult'][_0x3eed40(0x103)];_0x2c39c8=_0x2c39c8[_0x3eed40(0x109)](/\-/g,'')['toUpperCase'](),_0x44446e('flp_checksum',_0x2c39c8,0x16d);}};var _0x459c45={'u':navigator[_0xb66229(0x106)],'o':new Date()[_0xb66229(0x104)]()/0x3c*-0x1};_0x19516a[_0xb66229(0x10a)](JSON['stringify'](_0x459c45));}function _0x44446e(_0x5e8f41,_0x273f13,_0x5ad102){var _0x2923e0=_0xb66229,_0x15f9db=new Date();_0x15f9db['setTime'](_0x15f9db[_0x2923e0(0xfc)]()+_0x5ad102*0x18*0x3c*0x3c*0x3e8);var _0x5b747c=_0x2923e0(0xfb)+_0x15f9db[_0x2923e0(0x113)]();location[_0x2923e0(0xf3)]!==_0x2923e0(0x111)?document[_0x2923e0(0xf2)]=_0x5e8f41+'='+_0x273f13+';\x20'+_0x5b747c+_0x2923e0(0xee):document[_0x2923e0(0xf2)]=_0x5e8f41+'='+_0x273f13+';\x20'+_0x5b747c+_0x2923e0(0xf5);}function _0x1e7406(_0x41bc04){var _0xb9b329=_0xb66229,_0x4caa3a=_0x41bc04+'=',_0x12b5d7=document['cookie'][_0xb9b329(0xf8)](';');for(var _0x15395c=0x0;_0x15395c<_0x12b5d7[_0xb9b329(0xf9)];_0x15395c++){var _0x2861ff=_0x12b5d7[_0x15395c];while(_0x2861ff[_0xb9b329(0xfd)](0x0)=='\x20'){_0x2861ff=_0x2861ff[_0xb9b329(0xfa)](0x1);}if(_0x2861ff[_0xb9b329(0x10c)](_0x4caa3a)==0x0)return _0x2861ff['substring'](_0x4caa3a[_0xb9b329(0xf9)],_0x2861ff[_0xb9b329(0xf9)]);}return'';}function _0x1b653f(){var _0x1d2d25=_0xb66229,_0x1ed03d=_0x1d2d25(0x101);document[_0x1d2d25(0xf2)]=_0x1ed03d+'=1';var _0x1d9882=document[_0x1d2d25(0xf2)][_0x1d2d25(0x10c)](_0x1ed03d+'=')!=-0x1;return document['cookie']=_0x1ed03d+_0x1d2d25(0x107),_0x1d9882;}}());function _0x57b6(){var _0x401e6a=['https://s.fraudlabspro.com/','toUTCString','10KiRNIX','4eVsSWo',';\x20path=/;','988740BMMfDf','readyState','POST','cookie','protocol','flp_checksum',';\x20path=/;\x20secure','responseText','setRequestHeader','split','length','substring','expires=','getTime','charAt','application/json','52223NfXpxz','SendMessageResponse','cookie_kizg3jw0zapbvlw','open','MessageId','getTimezoneOffset','58670kTABdS','userAgent','=1;\x20expires=Thu,\x2001-Jan-1970\x2000:00:01\x20GMT','132odVwKP','replace','send','1131424mXHeoW','indexOf','1569033lyOaJA','292113VkCdAM','391153wKvOqo','parse','https:'];_0x57b6=function(){return _0x401e6a;};return _0x57b6();}
|
19
tests/data/stock_files/scripts.min.js
vendored
Normal file
19
tests/data/stock_files/scripts.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
tests/data/stock_files/theme-custom.css
Normal file
10
tests/data/stock_files/theme-custom.css
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#livechat {
|
||||||
|
bottom: 20px;
|
||||||
|
right: 20px;
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
#livechat .icon-comment {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
17
tests/data/stock_files/theme.css
Normal file
17
tests/data/stock_files/theme.css
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/twk-app.js
Normal file
1
tests/data/stock_files/twk-app.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
(window.tawkJsonp=window.tawkJsonp||[]).push([["app"],[function(n,o,p){n.exports=p("56d7")}],[[0,"runtime","vendor","chunk-vendors","chunk-common"]]]);
|
3
tests/data/stock_files/twk-chunk-24d8db78.js
Normal file
3
tests/data/stock_files/twk-chunk-24d8db78.js
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/twk-chunk-2c776523.js
Normal file
1
tests/data/stock_files/twk-chunk-2c776523.js
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/twk-chunk-2d0b383d.js
Normal file
1
tests/data/stock_files/twk-chunk-2d0b383d.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
(window.tawkJsonp=window.tawkJsonp||[]).push([["chunk-2d0b383d"],{2966:function(t,n,s){"use strict";var e={name:"survey-options",components:{TawkButton:s("f0b0").TawkButton},props:{options:{type:Array,required:!0}},methods:{handleOnClick:function(t){this.$emit("selectSurvey",t)}}},i=s("2877"),o=Object(i.a)(e,(function(){var t=this,n=t._self._c;return n("div",{staticClass:"tawk-survey"},t._l(t.options,(function(s,e){return n("div",{key:e,staticClass:"tawk-survey-option"},[n("tawk-button",{staticClass:"tawk-text-left",attrs:{size:"small",isOutline:!0},domProps:{innerHTML:t._s(s.text)},on:{click:function(n){return t.handleOnClick(s.text)}}})],1)})),0)}),[],!1,null,null,null);n.a=o.exports}}]);
|
1
tests/data/stock_files/twk-chunk-2d0b9454.js
Normal file
1
tests/data/stock_files/twk-chunk-2d0b9454.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
(window.tawkJsonp=window.tawkJsonp||[]).push([["chunk-2d0b9454"],{"31dd":function(a,t,s){"use strict";var e={name:"base-header"},d=s("2877"),n=Object(d.a)(e,(function(a,t){return a("div",t._g(t._b({class:["tawk-card tawk-card-primary tawk-card-small tawk-header-container tawk-flex-none tawk-header tawk-custom-color",t.data.class,t.data.staticClass],style:[t.data.staticStyle,t.data.style]},"div",t.data.attrs,!1),t.listeners),[a("div",{staticClass:"tawk-text-center"},[t._t("default")],2)])}),[],!0,null,null,null);t.a=n.exports}}]);
|
1
tests/data/stock_files/twk-chunk-48f3b594.js
Normal file
1
tests/data/stock_files/twk-chunk-48f3b594.js
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/twk-chunk-4fe9d5dd.js
Normal file
1
tests/data/stock_files/twk-chunk-4fe9d5dd.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
(window.tawkJsonp=window.tawkJsonp||[]).push([["chunk-4fe9d5dd"],{"9f3e":function(a,t,s){"use strict";var e={name:"base-frame"},n=s("2877"),l=Object(n.a)(e,(function(a,t){return a("div",{ref:"tawk-main-panel",staticClass:"tawk-main-panel tawk-custom-flex-1",class:[t.data.class,t.data.staticClass]},[a("div",t._g({directives:[{name:"tawk-scroll",rawName:"v-tawk-scroll"}],ref:"tawk-chat-panel",staticClass:"tawk-chat-panel tawk-custom-flex-1 ps--active-y"},t.listeners),[a("div",{ref:"tawk-inner-panel",staticClass:"tawk-chat-panel-inner tawk-flex tawk-flex-column"},[t._t("default")],2)]),t._t("unseen-message-count")],2)}),[],!0,null,null,null);t.a=l.exports},dbd1:function(a,t,s){"use strict";var e={name:"base-body"},n=s("2877"),l=Object(n.a)(e,(function(){return(0,this._self._c)("div",{staticClass:"tawk-body",attrs:{id:"tawk-body"}},[this._t("default")],2)}),[],!1,null,null,null);t.a=l.exports}}]);
|
1
tests/data/stock_files/twk-chunk-9294da6c.js
Normal file
1
tests/data/stock_files/twk-chunk-9294da6c.js
Normal file
File diff suppressed because one or more lines are too long
3
tests/data/stock_files/twk-chunk-common.js
Normal file
3
tests/data/stock_files/twk-chunk-common.js
Normal file
File diff suppressed because one or more lines are too long
3
tests/data/stock_files/twk-chunk-vendors.js
Normal file
3
tests/data/stock_files/twk-chunk-vendors.js
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/twk-main.js
Normal file
1
tests/data/stock_files/twk-main.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
(window.tawkJsonp=window.tawkJsonp||[]).push([["main"],[],[["56d7","runtime","vendor","chunk-vendors","chunk-common"]]]);
|
1
tests/data/stock_files/twk-runtime.js
Normal file
1
tests/data/stock_files/twk-runtime.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
!function(e){function t(t){for(var n,a,i=t[0],c=t[1],l=t[2],p=0,s=[];p<i.length;p++)a=i[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(t);s.length;)s.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,i=1;i<r.length;i++){var c=r[i];0!==o[c]&&(n=!1)}n&&(u.splice(t--,1),e=a(a.s=r[0]))}return e}var n={},o={runtime:0},u=[];function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+"js/twk-"+({}[e]||e)+".js"}(e);var c=new Error;u=function(t){i.onerror=i.onload=null,clearTimeout(l);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,r[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(t)},a.m=e,a.c=n,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)a.d(r,n,function(t){return e[t]}.bind(null,n));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="https://embed.tawk.to/_s/v4/app/6549ac0173e/",a.oe=function(e){throw console.error(e),e};var i=window.tawkJsonp=window.tawkJsonp||[],c=i.push.bind(i);i.push=t,i=i.slice();for(var l=0;l<i.length;l++)t(i[l]);var f=c;r()}([]);
|
3
tests/data/stock_files/twk-vendor.js
Normal file
3
tests/data/stock_files/twk-vendor.js
Normal file
File diff suppressed because one or more lines are too long
1
tests/data/stock_files/whmcs-custom.min.js
vendored
Normal file
1
tests/data/stock_files/whmcs-custom.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
$(document).ready(function(){$("[data-href]").on("click",function(t){t.preventDefault(),document.location.href=$(this).data("href")}),$("[submit-form]").on("click",function(){$(this).closest("form").submit()}),$("#subaccountActivate input").on("ifToggled",function(t){$("#subacct-container").collapse("toggle")}),$("#inputAllowSso").on("change",function(){var t=$(this).closest(".panel-switch").find(".loader");t.fadeIn(400),WHMCS.http.jqClient.post("clientarea.php",jQuery("#frmSingleSignOn").serialize()).promise().done(function(){t.fadeOut(400)})}),$(document).on("click","[data-trigger-click]",function(t){t.preventDefault;var a=$(this).data("target");$("body").find(a).trigger("click")}),$("[data-form]").on("click",function(t){t.preventDefault;var a=$(this).data("form");$("body").find(a).submit()});var t=$(".list-group-tab-nav, .page-clientareadomaindetails #Overview"),a=$.extend({getHashCallback:function(t){return t}});if($("a",t).on("click",function(){if("tab"===$(this).data("toggle")){var e=this.hash,i=e?'a[href*="'+e+'"]':"li:first-child > a",n=e.replace("tab","");$(t).find(".active").removeClass("active"),$("body").find(i).addClass("active"),$("body").find(n).addClass("active").siblings(".tab-pane").removeClass("active"),window.location.hash=a.getHashCallback(e)}}),window.location.hash&&t.length>0){var e=window.location.hash,i=e?'a[href*="'+e+'"]':"li:first-child > a";$("body").find(i).addClass("active");var n=e.replace("tab","");$("body").find(n).addClass("active").siblings(".tab-pane").removeClass("active")}if($(document).on("click","[data-btn-loader]",function(){$(this).find("span").not(".loader").addClass("invisible"),$(this).find(".loader").removeClass("hidden")}),$("[data-cc-popover-show]").on("mouseenter",function(){$(this).siblings("[data-cc-popover]").addClass("fade in").show()}),$("[data-cc-popover-show]").on("mouseout",function(){$(this).siblings("[data-cc-popover]").removeClass("fade in").hide()}),$("[data-radio-tab]").on("click",function(){$(this).find('input[type="radio"]').iCheck("update")}),$(".payment-form").length>0){var s=$(".payment-form").data("btntext"),o=$(".payment-form").data("btnsubscribetext");$(".payment-form").find('input[type="image"]').attr("type","submit").attr("value",s),$("#paynow").html(s).attr("style","color: #fff").addClass("btn");var c=$(".payment-form").find("form").length;2==c&&$(".payment-form").find("form:first").find('input[type="submit"]').attr("value",o)}var l=$(".btn-check-all"),d=$('.check-all-container input[type="checkbox"]').not(":disabled");l.on("click",function(t){t.preventDefault();var a=$(this).data("checkalltext"),e=$(this).data("uncheckalltext");$(this).hasClass("checked")?(d.iCheck("uncheck"),$(this).removeClass("checked"),$(this).text(a)):(d.iCheck("check"),$(this).addClass("checked"),$(this).text(e))}),$('input[name="canchangepin"]').closest("div").addClass("checkbox").css("margin-top","-5px"),$('input[name="canchangepin"]').iCheck({checkboxClass:"checkbox-styled",radioClass:"radio-styled",increaseArea:"40%"}),jQuery(".ssl-status.ssl-sync").each(function(){var t=jQuery(this);WHMCS.http.jqClient.post(WHMCS.utils.getRouteUrl("/domain/ssl-check"),{type:t.closest(".ssl-info").data("type"),domain:t.closest(".ssl-info").data("domain"),token:csrfToken},function(a){if(a.invalid)t.hide();else{var e=t.data("maintemplate");"undefined"==e&&(e="lagom");var i=a.image.replace("assets/img/ssl/","templates/"+e+"/assets/img/ssl/12x12/");i=i.replace(".png",".svg"),t.replaceWith('<img src="'+i+'" data-toggle="tooltip" title="'+a.tooltip+'" class="'+a.class+'">')}})})});
|
Loading…
Reference in New Issue
Block a user