Add project files.
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<base href="/" />
|
||||
<link rel="stylesheet" href="@Assets["app.css"]" />
|
||||
<link rel="stylesheet" href="@Assets["style.css"]" />
|
||||
<HeadOutlet @rendermode="InteractiveServer"/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<Routes @rendermode="InteractiveServer"/>
|
||||
<script src="_framework/blazor.web.js"></script>
|
||||
<link rel="stylesheet" href="https://blazor.cdn.telerik.com/blazor/6.2.0/kendo-theme-bootstrap/swatches/bootstrap-urban.css" />
|
||||
<script src="https://blazor.cdn.telerik.com/blazor/6.2.0/telerik-blazor.min.js" defer></script>
|
||||
|
||||
<!-- Font Imports -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- Core Style -->
|
||||
<link rel="stylesheet" href="style.css">
|
||||
|
||||
<!-- Font Icons -->
|
||||
<link rel="stylesheet" href="css/font-icons.css">
|
||||
|
||||
<!-- Plugins/Components CSS -->
|
||||
<link rel="stylesheet" href="css/swiper.css">
|
||||
<link rel="stylesheet" href="include/rs-plugin/css/settings.css" media="screen">
|
||||
<link rel="stylesheet" href="include/rs-plugin/css/layers.css">
|
||||
<link rel="stylesheet" href="include/rs-plugin/css/navigation.css">
|
||||
|
||||
<!-- Niche Demos -->
|
||||
<link rel="stylesheet" href="demos/crowdfunding/crowdfunding.css">
|
||||
|
||||
<!-- Custom CSS -->
|
||||
<link rel="stylesheet" href="css/custom.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- JavaScripts
|
||||
============================================= -->
|
||||
<script src="js/plugins.min.js"></script>
|
||||
<script src="js/functions.js"></script>
|
||||
<script src="js/functions.bundle.js"></script>
|
||||
|
||||
<!-- Parallax Script
|
||||
============================================= -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/skrollr/0.6.30/skrollr.min.js"></script>
|
||||
<script>!SEMICOLON.Mobile.any() && skrollr.init({forceHeight: false});</script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,11 @@
|
|||
namespace TireTargets.Components.CSharp
|
||||
{
|
||||
public class Credentials
|
||||
{
|
||||
public static string GoogleClientId = "656434530552-03u6d8t2lpf1phuq6qkq0getfh9d7di9.apps.googleusercontent.com";
|
||||
public static string GoogleClientSecret = "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";
|
||||
|
||||
public static string FacebookAppId = "791426466201326";
|
||||
public static string FacebookClientSecret = "13ae28aac6727b898ba712eb78ab0f24";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,277 @@
|
|||
using Microsoft.Data.SqlClient;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Data;
|
||||
using System.Threading.Tasks;
|
||||
using Telerik.Windows.Documents.Fixed.Model.Editing.Lists;
|
||||
using Telerik.Windows.Documents.Fixed.Model.Navigation;
|
||||
using XAct;
|
||||
|
||||
namespace TireTargets.Components.CSharp
|
||||
{
|
||||
|
||||
public class DatabaseDriver : IDisposable
|
||||
{
|
||||
private bool disposedValue;
|
||||
|
||||
private ConcurrentBag<System.Threading.Tasks.Task> _tasks = new ConcurrentBag<System.Threading.Tasks.Task>();
|
||||
private bool isExiting = false;
|
||||
|
||||
private static string _connectionString = "Server=BigMac; Database=TireTargets; Integrated Security=SSPI;MultipleActiveResultSets=True;TrustServerCertificate=True;";
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (!disposedValue)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
isExiting = true;
|
||||
Task.WaitAll(_tasks.ToArray());
|
||||
}
|
||||
disposedValue = true;
|
||||
}
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(disposing: true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public static async Task<bool> SignIn(string platform, string id, string fname, string email)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var cn = new SqlConnection(_connectionString))
|
||||
{
|
||||
await cn.OpenAsync();
|
||||
await using var queryCmd = new SqlCommand(String.Format("SELECT COUNT(UniqID) FROM [dbo].[User] WHERE {0}ID = '{1}'", platform, id), cn);
|
||||
await using var rd = await queryCmd.ExecuteReaderAsync();
|
||||
|
||||
// Get number of occurences of this ID/Platform combo
|
||||
int count = -1;
|
||||
while (await rd.ReadAsync())
|
||||
{
|
||||
count = rd.GetInt32(0);
|
||||
}
|
||||
|
||||
if (count > 0) // If the account already exists, read from the DB for session info
|
||||
{
|
||||
|
||||
}
|
||||
else // Otherwise, we need to create a new account
|
||||
{
|
||||
await using var insertCmd = new SqlCommand(String.Format("INSERT INTO [dbo].[User] ({0}ID, {0}Name, {0}Email) VALUES (@id, @fname, @email)", platform), cn);
|
||||
|
||||
insertCmd.Parameters.AddWithValue("@id", id);
|
||||
insertCmd.Parameters.AddWithValue("@fname", fname);
|
||||
insertCmd.Parameters.AddWithValue("@email", email);
|
||||
|
||||
insertCmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
cn.Close();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static async Task<List<Location>> GetLocationInfoForUser(string id, string platform)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var cn = new SqlConnection(_connectionString))
|
||||
{
|
||||
await cn.OpenAsync();
|
||||
|
||||
|
||||
// Confirm that user has a valid location ID set
|
||||
string locQueryString = "";
|
||||
if (platform == "Google")
|
||||
locQueryString = String.Format("SELECT [LocationID] FROM [dbo].[User] WHERE [GoogleID] = '{0}'", id.Replace("'","''"));
|
||||
else if (platform == "FB")
|
||||
locQueryString = String.Format("SELECT [LocationID] FROM [dbo].[User] WHERE [FBID] = '{0}'", id.Replace("'", "''"));
|
||||
|
||||
|
||||
await using var locQuery = new SqlCommand(locQueryString, cn);
|
||||
await using var locRd = await locQuery.ExecuteReaderAsync();
|
||||
|
||||
// Extract loc id
|
||||
int locationId = -1;
|
||||
while (await locRd.ReadAsync())
|
||||
{
|
||||
locationId = locRd.GetInt32(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Check if user's LocID is a RootID
|
||||
string rootString = String.Format("SELECT COUNT(*) FROM [dbo].[Location] WHERE RootID = {0}", ("" + locationId).Replace("'","''"));
|
||||
SqlCommand cmd = new SqlCommand(rootString, cn);
|
||||
Int32 val = (Int32)cmd.ExecuteScalar();
|
||||
|
||||
string locInfoString = "";
|
||||
if (val > 1)
|
||||
{
|
||||
locInfoString = String.Format("SELECT * FROM [dbo].[Location] WHERE RootID = {0}", ("" + locationId).Replace("'", "''"));
|
||||
}
|
||||
else // Nothing matches
|
||||
{
|
||||
locInfoString = String.Format("SELECT * FROM [dbo].[Location] WHERE LocationID = {0}", ("" + locationId).Replace("'", "''"));
|
||||
}
|
||||
|
||||
// Find the location in Location table
|
||||
await using var queryCmd = new SqlCommand(locInfoString, cn);
|
||||
await using var rd = await queryCmd.ExecuteReaderAsync();
|
||||
|
||||
// Extract loc id
|
||||
List<Location> locations = new List<Location>();
|
||||
while (await rd.ReadAsync())
|
||||
{
|
||||
var locID = rd.GetInt32(0);
|
||||
var rootID = rd.GetInt32(1);
|
||||
var locName = rd.GetString(2);
|
||||
var lastSelected = rd.GetDateTime(3);
|
||||
var needSelection = rd.GetInt32(4);
|
||||
var selectionJson = rd.GetString(5);
|
||||
var enabled = rd.GetInt32(6);
|
||||
|
||||
Location current = new Location(locID, rootID, locName, lastSelected, needSelection, selectionJson, enabled);
|
||||
locations.Add(current);
|
||||
}
|
||||
|
||||
|
||||
cn.Close();
|
||||
return locations;
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
return new List<Location>();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static async Task<(DateTime, DateTime)> GetSelectionTimes()
|
||||
{
|
||||
using (var cn = new SqlConnection(_connectionString))
|
||||
{
|
||||
await cn.OpenAsync();
|
||||
await using var cmd = new SqlCommand("SELECT * FROM [cfg].[Selection]", cn);
|
||||
await using var rd = await cmd.ExecuteReaderAsync();
|
||||
|
||||
(DateTime, DateTime) selectionTime = (default, default);
|
||||
while (await rd.ReadAsync())
|
||||
{
|
||||
selectionTime.Item1 = rd.GetDateTime(0);
|
||||
selectionTime.Item2 = rd.GetDateTime(1);
|
||||
}
|
||||
|
||||
return selectionTime;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static async Task<List<(int,bool)>> DoesLocationNeedSelection()
|
||||
{
|
||||
// Determine if offers need to be selected
|
||||
var locInfo = await GetLocationInfoForUser(Layout.MainLayout.Session["id"], Layout.MainLayout.Session["login_method"]);
|
||||
var selectionTime = await GetSelectionTimes();
|
||||
|
||||
List<(int, bool)> results = new List<(int, bool)> ();
|
||||
foreach (Location current in locInfo)
|
||||
{
|
||||
// Location NeedSelection is effectively an override, forcing them to re-select for the flagged location(s)
|
||||
if (current.NeedSelection == 1 || (current.LastSelected < selectionTime.Item1 && DateTime.Now < selectionTime.Item2))
|
||||
{
|
||||
results.Add((current.LocationID, true));
|
||||
}
|
||||
else
|
||||
{
|
||||
results.Add((current.LocationID, false));
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static async Task<bool> DoesUserHaveLocation(string id, string platform)
|
||||
{
|
||||
using (var cn = new SqlConnection(_connectionString))
|
||||
{
|
||||
await cn.OpenAsync();
|
||||
|
||||
string queryString = "";
|
||||
if (platform == "Google")
|
||||
queryString = String.Format("SELECT [LocationID] FROM [dbo].[User] WHERE [GoogleID] = '{0}'", id.Replace("'", "''"));
|
||||
else if (platform == "FB")
|
||||
queryString = String.Format("SELECT [LocationID] FROM [dbo].[User] WHERE [FBID] = '{0}'", id.Replace("'", "''"));
|
||||
|
||||
await using var cmd = new SqlCommand(queryString, cn);
|
||||
await using var rd = await cmd.ExecuteReaderAsync();
|
||||
|
||||
while (await rd.ReadAsync())
|
||||
{
|
||||
if (rd.IsDBNull(0) || rd.GetInt32(0) == -1)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static async Task<bool> UpdateSelection(Dictionary<int, string> locSelections)
|
||||
{
|
||||
using (var cn = new SqlConnection(_connectionString))
|
||||
{
|
||||
await cn.OpenAsync();
|
||||
|
||||
foreach (var current in locSelections)
|
||||
{
|
||||
var query = String.Format("UPDATE [dbo].[Location] SET [SelectionJson] = '{0}', [LastSelected] = GETDATE() WHERE LocationID = {1}", current.Value, current.Key);
|
||||
await using var cmd = new SqlCommand(query, cn);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class Location
|
||||
{
|
||||
public Location(int locID, int rootID, string locName, DateTime lastSelect, int needSelection, string selectionJson, int enabled)
|
||||
{
|
||||
LocationID = locID;
|
||||
RootID = rootID;
|
||||
LocationName = locName;
|
||||
LastSelected = lastSelect;
|
||||
NeedSelection = needSelection;
|
||||
SelectionJson = selectionJson;
|
||||
Enabled = enabled;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int LocationID { get; set; }
|
||||
public int RootID { get; set; }
|
||||
public string LocationName { get; set; }
|
||||
public DateTime LastSelected { get; set; }
|
||||
public int NeedSelection { get; set; }
|
||||
public string SelectionJson { get; set; }
|
||||
public int Enabled { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
using TireTargets.Components.Layout;
|
||||
|
||||
namespace TireTargets.Components.CSharp
|
||||
{
|
||||
public class WebInfo
|
||||
{
|
||||
public static string BaseUrl = MainLayout.isDev ? "https://localhost:7219" : "INSERT REAL ADDRESS HERE";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,194 @@
|
|||
@inherits LayoutComponentBase
|
||||
|
||||
@inject NavigationManager _navigationManager
|
||||
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge">
|
||||
</head>
|
||||
|
||||
<TelerikRootComponent>
|
||||
|
||||
<!-- Login/Register Modal -->
|
||||
<div class="modal-register mfp-hide" id="modal-register">
|
||||
<div class="card mx-auto" style="max-width: 400px;">
|
||||
<div class="card-header py-3 bg-transparent text-center">
|
||||
<h3 class="mb-0 fw-normal">Please Sign In:</h3>
|
||||
|
||||
<div class="container">
|
||||
<div class="row justify-content-center align-items-center">
|
||||
<div class="col-12 text-center justify-content-center align-items-center">
|
||||
|
||||
@if (MainLayout.Session.Count == 0)
|
||||
{
|
||||
<!-- Google Sign In-->
|
||||
<script src="https://accounts.google.com/gsi/client" async></script>
|
||||
<script>
|
||||
function decodeJwtResponse(token) {
|
||||
var base64Url = token.split(".")[1];
|
||||
var base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
|
||||
var jsonPayload = decodeURIComponent(
|
||||
atob(base64)
|
||||
.split("")
|
||||
.map(function (c) {
|
||||
return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
})
|
||||
.join("")
|
||||
);
|
||||
|
||||
return JSON.parse(jsonPayload);
|
||||
}
|
||||
|
||||
var saved_response;
|
||||
function onClickHandler(response) {
|
||||
const responsePayload = decodeJwtResponse(response.credential);
|
||||
saved_response = responsePayload;
|
||||
|
||||
/*
|
||||
console.log("ID: " + responsePayload.sub);
|
||||
console.log('Full Name: ' + responsePayload.name);
|
||||
console.log('Given Name: ' + responsePayload.given_name);
|
||||
console.log('Family Name: ' + responsePayload.family_name);
|
||||
console.log("Image URL: " + responsePayload.picture);
|
||||
console.log("Email: " + responsePayload.email); */
|
||||
|
||||
var url = new URL("https://localhost:7219/AuthGoogle/id=" + responsePayload.sub + "&fname=" + responsePayload.name + "&email=" + responsePayload.email);
|
||||
window.location.href = url;
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="g_id_onload"
|
||||
data-client_id="166700556504-8t29okj2dp63ak7navmauj3200uns3ci.apps.googleusercontent.com"
|
||||
data-auto_prompt="false"
|
||||
data-callback="onClickHandler">
|
||||
</div>
|
||||
<div class="g_id_signin"
|
||||
data-type="standard"
|
||||
data-size="large"
|
||||
data-theme="outline"
|
||||
data-text="sign_in_with"
|
||||
data-shape="rectangular"
|
||||
data-logo_alignment="left">
|
||||
</div>
|
||||
<!-- Facebook Sign In -->
|
||||
|
||||
<script>
|
||||
let clicked = false;
|
||||
|
||||
function statusChangeCallback(response) { // Called with the results from FB.getLoginStatus().
|
||||
if (response.status === 'connected') { // Logged into your webpage and Facebook.
|
||||
loginFB();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function checkLoginState() { // Called when a person is finished with the Login Button.
|
||||
FB.getLoginStatus(function (response) { // See the onlogin handler
|
||||
statusChangeCallback(response);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
window.fbAsyncInit = function () {
|
||||
FB.init({
|
||||
status: false,
|
||||
appId: '1293246192236822',
|
||||
cookie: false, // Enable cookies to allow the server to access the session.
|
||||
xfbml: true, // Parse social plugins on this webpage.
|
||||
version: 'v23.0' // Use this Graph API version for this call.
|
||||
});
|
||||
}
|
||||
|
||||
function clickButton() {
|
||||
clicked = true;
|
||||
console.log('Click!');
|
||||
}
|
||||
|
||||
function loginFB() { // Testing Graph API after login. See statusChangeCallback() for when this call is made.
|
||||
console.log('Welcome! Fetching your information.... ');
|
||||
FB.api('/me', function (response) {
|
||||
console.log('Successful login for: ' + response.name);
|
||||
if (clicked) {
|
||||
var url = new URL("https://localhost:7219/AuthFacebook/id=" + response.id + "&fname=" + response.name + "&email=" + response.email);
|
||||
window.location.href = url;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* LIST OF FIELDS RETURNED:
|
||||
name = response.name
|
||||
id = response.id
|
||||
email = response.email
|
||||
|
||||
*/
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<br />
|
||||
<!-- The JS SDK Login Button -->
|
||||
<fb:login-button class="text-center" scope="public_profile,email" onclick="clickButton();" onlogin="checkLoginState();">
|
||||
</fb:login-button>
|
||||
|
||||
<!-- Load the JS SDK asynchronously -->
|
||||
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js"></script>
|
||||
}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Header
|
||||
============================================= -->
|
||||
<header id="header" class="transparent-header" data-sticky-shrink="false">
|
||||
<div id="header-wrap" class="border-default">
|
||||
<div class="container">
|
||||
<div class="header-row">
|
||||
|
||||
<!-- Logo
|
||||
============================================= -->
|
||||
<div id="logo">
|
||||
<a href="/">
|
||||
<img class="logo-default" srcset="demos/ecommerce/images/logo.png, demos/ecommerce/images/logo@2x.png 2x" src="demos/ecommerce/images/logo@2x.png" alt="TireTargets Logo">
|
||||
</a>
|
||||
</div><!-- #logo end -->
|
||||
|
||||
<div class="header-misc">
|
||||
@if(MainLayout.Session.Count != 0)
|
||||
{
|
||||
<a href="/logout" data-lightbox="inline" class="button button-small fw-semibold button-border button-rounded ls-0 fw-medium text-transform-none">Sign Out</a>
|
||||
}
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Primary Navigation
|
||||
============================================= -->
|
||||
<nav class="primary-menu">
|
||||
@if(MainLayout.Session.Count == 0)
|
||||
{
|
||||
<a href="#modal-register" onclick="clickButton(); return true;" data-lightbox="inline" class="button button-large fw-semibold button-border button-rounded ls-0 text-transform-none">Sign In</a>
|
||||
|
||||
<br>
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
</nav><!-- #primary-menu end -->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="header-wrap-clone"></div>
|
||||
</header><!-- #header end -->
|
||||
|
||||
@Body
|
||||
</TelerikRootComponent>
|
|
@ -0,0 +1,27 @@
|
|||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace TireTargets.Components.Layout
|
||||
{
|
||||
public partial class MainLayout
|
||||
{
|
||||
public static readonly bool isDev = true;
|
||||
|
||||
public static Dictionary<string, string> Session = new Dictionary<string, string>();
|
||||
public static bool isSignedIn = false;
|
||||
private static bool isModalVisible = false;
|
||||
|
||||
public static void SignOut()
|
||||
{
|
||||
Session = new Dictionary<string, string>();
|
||||
isSignedIn = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void ToggleModal()
|
||||
{
|
||||
isModalVisible = !isModalVisible;
|
||||
Console.WriteLine("Modal is now " + isModalVisible);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
#blazor-error-ui {
|
||||
color-scheme: light only;
|
||||
background: lightyellow;
|
||||
bottom: 0;
|
||||
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
|
||||
box-sizing: border-box;
|
||||
display: none;
|
||||
left: 0;
|
||||
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
#blazor-error-ui .dismiss {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: 0.75rem;
|
||||
top: 0.5rem;
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
@page "/AuthFacebook/id={id}&fname={fname}&email={email}"
|
||||
@inject NavigationManager _navigationManager
|
||||
|
||||
<h3>AuthFB</h3>
|
||||
<h1>@valid</h1>
|
||||
|
||||
|
||||
@code {
|
||||
[Parameter] public string? id { get; set; }
|
||||
[Parameter] public string? fname { get; set; }
|
||||
[Parameter] public string? email { get; set; }
|
||||
public string valid = "FALSE";
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
id = id ?? "NULL";
|
||||
fname = fname ?? "NULL";
|
||||
email = email ?? "NULL";
|
||||
|
||||
if (id != "NULL" && fname != "NULL" && email != "NULL")
|
||||
{
|
||||
valid = "TRUE\n" + id + " " + fname + " " + email;
|
||||
|
||||
Components.Layout.MainLayout.Session = new Dictionary<string, string>();
|
||||
Components.Layout.MainLayout.Session.Add("login_method", "FB");
|
||||
Components.Layout.MainLayout.Session.Add("id", id);
|
||||
Components.Layout.MainLayout.Session.Add("fname", fname);
|
||||
Components.Layout.MainLayout.Session.Add("email", email);
|
||||
|
||||
// Database call to add if it doesn't exist, or load LOCID if it does
|
||||
await Components.CSharp.DatabaseDriver.SignIn("FB", id, fname, email);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// This is literally just to stop Blazor from blowing up due to running the above code twice.
|
||||
// Blazor lifecycle quirks are going to cause generational damage to my liver.
|
||||
}
|
||||
await Task.Delay(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Runs after OnInit, so we just use this to redirect since we know session will be configured by now
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
_navigationManager.NavigateTo("/Portal", true);
|
||||
Console.WriteLine("Redirected to Portal");
|
||||
await Task.Delay(0);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
@page "/AuthGoogle/id={id}&fname={fname}&email={email}"
|
||||
@inject NavigationManager _navigationManager
|
||||
|
||||
<h3>AuthGoogle</h3>
|
||||
<h1>@valid</h1>
|
||||
|
||||
|
||||
@code {
|
||||
[Parameter] public string? id { get; set; }
|
||||
[Parameter] public string? fname { get; set; }
|
||||
[Parameter] public string? email { get; set; }
|
||||
public string valid = "FALSE";
|
||||
|
||||
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
id = id ?? "NULL";
|
||||
fname = fname ?? "NULL";
|
||||
email = email ?? "NULL";
|
||||
|
||||
if (id != "NULL" && fname != "NULL" && email != "NULL")
|
||||
{
|
||||
valid = "TRUE\n" + id + " " + fname + " " + email;
|
||||
|
||||
Components.Layout.MainLayout.Session = new Dictionary<string, string>();
|
||||
Components.Layout.MainLayout.Session.Add("login_method", "Google");
|
||||
Components.Layout.MainLayout.Session.Add("id", id);
|
||||
Components.Layout.MainLayout.Session.Add("fname", fname);
|
||||
Components.Layout.MainLayout.Session.Add("email", email);
|
||||
|
||||
// Database call to add if it doesn't exist, or load LOCID if it does
|
||||
await Components.CSharp.DatabaseDriver.SignIn("Google", id, fname, email);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// This is literally just to stop Blazor from blowing up due to running the above code twice.
|
||||
// Blazor lifecycle quirks are going to cause generational damage to my liver.
|
||||
}
|
||||
await Task.Delay(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Runs after OnInit, so we just use this to redirect since we know session will be configured by now
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
_navigationManager.NavigateTo("/Portal", true);
|
||||
Console.WriteLine("Redirected to Portal");
|
||||
await Task.Delay(0);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
@page "/Error"
|
||||
@using System.Diagnostics
|
||||
|
||||
<PageTitle>Error</PageTitle>
|
||||
|
||||
<h1 class="text-danger">Error.</h1>
|
||||
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||
|
||||
@if (ShowRequestId)
|
||||
{
|
||||
<p>
|
||||
<strong>Request ID:</strong> <code>@RequestId</code>
|
||||
</p>
|
||||
}
|
||||
|
||||
<h3>Development Mode</h3>
|
||||
<p>
|
||||
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||
</p>
|
||||
<p>
|
||||
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||
It can result in displaying sensitive information from exceptions to end users.
|
||||
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||
and restarting the app.
|
||||
</p>
|
||||
|
||||
@code{
|
||||
[CascadingParameter]
|
||||
private HttpContext? HttpContext { get; set; }
|
||||
|
||||
private string? RequestId { get; set; }
|
||||
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||
|
||||
protected override void OnInitialized() =>
|
||||
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
|
||||
}
|
|
@ -0,0 +1,178 @@
|
|||
@page "/"
|
||||
@inject NavigationManager navigationManager
|
||||
|
||||
|
||||
<head>
|
||||
<!-- Document Title
|
||||
============================================= -->
|
||||
<title>Home | TireTargets</title>
|
||||
</head>
|
||||
|
||||
<body class="stretched">
|
||||
|
||||
<!-- Document Wrapper
|
||||
============================================= -->
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Slider
|
||||
============================================= -->
|
||||
<section id="slider" class="slider-element min-vh-100 include-header" style="background: url('demos/crowdfunding/images/hero.svg') no-repeat center bottom / cover;">
|
||||
<div class="slider-inner">
|
||||
|
||||
<div class="vertical-middle">
|
||||
<div class="container py-5">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-md-8">
|
||||
<div class="slider-title">
|
||||
<h1 class="fw-semibold">Great Offers Start Here</h1>
|
||||
<p class="text-muted">With TireTargets, you can quickly and easily spread the word about great tire offers at your business!</p>
|
||||
</div>
|
||||
<a href="#modal-register" data-lightbox="inline" class="button button-large fw-semibold button-rounded ls-0 text-transform-none ms-0">Start A Campaign</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<img src="demos/crowdfunding/images/hero-img.svg" alt="Parallax Image" class="slider-img parallax" data-start="margin-top: 0px;" data-400="margin-top: 50px;">
|
||||
|
||||
</div>
|
||||
</section><!-- #Slider End -->
|
||||
<!-- Content
|
||||
============================================= -->
|
||||
<section id="content">
|
||||
<div class="content-wrap p-0">
|
||||
|
||||
<div class="section bg-transparent mb-0 pb-0 border-0">
|
||||
<div class="container bg-color-light border-0 rounded-3 p-4 p-md-5">
|
||||
<div class="row justify-content-between align-items-center mb-4">
|
||||
<div class="col-lg-7 col-sm-7">
|
||||
<div class="heading-block border-bottom-0 mb-3">
|
||||
<h2>How It Works</h2>
|
||||
</div>
|
||||
<p class="text-muted mb-0">We are TireTargets know how busy the industry gets, so our goal is to make it as quick and easy as possible to get your deals up and running!</p>
|
||||
</div>
|
||||
<div class="col-lg-3 col-sm-5 mt-4 mt-sm-0">
|
||||
<div class="bg-white text-center px-5 py-3 border">
|
||||
<div class="counter counter-large color fw-bold"><span data-from="0" data-to="650" data-refresh-interval="10" data-speed="1500"></span>%</div>
|
||||
<div class="line my-2"></div>
|
||||
<h5 class="fw-normal mb-1">Average Return on Investment</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div class="row justify-content-around">
|
||||
<div class="col-lg-3 col-md-4 mt-5">
|
||||
<div class="feature-text">
|
||||
<div class="fbox-text color">1.</div>
|
||||
<h3>Register Your Account.</h3>
|
||||
</div>
|
||||
<p>Securely sign in with one of our supported systems and get connected with your business</p>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-4 mt-5">
|
||||
<div class="feature-text">
|
||||
<div class="fbox-text color">2.</div>
|
||||
<h3>Choose your Offers.</h3>
|
||||
</div>
|
||||
<p>Choose from a list of Tire and Service deals to offer to your customers.</p>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-4 mt-5">
|
||||
<div class="feature-text">
|
||||
<div class="fbox-text color">3.</div>
|
||||
<h3>Send them out!</h3>
|
||||
</div>
|
||||
<p>TireTargets will send out your selections to all of your customers.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section border-0 bg-transparent mb-1">
|
||||
<div class="container">
|
||||
|
||||
|
||||
<div class="row justify-content-center mb-5">
|
||||
<div class="col-lg-7 text-center">
|
||||
<div class="heading-block">
|
||||
<h3 class="text-transform-none mb-3 fw-semibold ls-0">Still Not Convinced?</h3>
|
||||
<span class="text-black-50">Here's how we can energize your business:</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-8">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-sm-6">
|
||||
<img src="assets/mobile.png" alt="mobile">
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<h3>Targeted SMS Campaigns Designed to Move Inventory.</h3>
|
||||
<p class="mb-2">Our campaigns help break through to those tricky customers and get them through your door.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row align-items-center mt-5">
|
||||
<div class="col-sm-6 mb-4 mb-sm-0">
|
||||
<h3>Decades of Experience</h3>
|
||||
<p class="mb-2">Our team has decades of experience in helping shops like yours deliver excellence through precise marketing.</p>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<img src="assets/experience.png" alt="experience">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row align-items-center mt-5">
|
||||
<div class="col-sm-6">
|
||||
<img src="assets/growth.png" alt="growth">
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<h3>Historically High Return on Investment</h3>
|
||||
<p class="mb-2">Our campaigns have historically maintained a staggeringly high RoI, generating a significant amount of revenue per campaign.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<br />
|
||||
<div class="col-lg-4 col-sm-6 mb-4">
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Row 2 -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section><!-- #content end -->
|
||||
<!-- Footer
|
||||
============================================= -->
|
||||
<footer id="footer" class="dark" style="background-color: #373D52">
|
||||
<div class="container">
|
||||
|
||||
<!-- Footer Widgets
|
||||
============================================= -->
|
||||
<div class="footer-widgets-wrap pb-4">
|
||||
<p class="fw-light text-white-50 mt-4">
|
||||
</p>
|
||||
|
||||
</div><!-- .footer-widgets-wrap end -->
|
||||
</div>
|
||||
|
||||
<!-- Copyrights
|
||||
============================================= -->
|
||||
<div id="copyrights">
|
||||
<div class="container">
|
||||
|
||||
<div class="row justify-content-between align-items-center">
|
||||
<div class="col-md-6">
|
||||
Copyrights © 2025 All Rights Reserved by TireTargets.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><!-- #copyrights end -->
|
||||
</footer><!-- #footer end -->
|
||||
|
||||
</div><!-- #wrapper end -->
|
||||
<!-- Go To Top
|
||||
============================================= -->
|
||||
<div id="gotoTop" class="bi-arrow-up"></div>
|
||||
|
||||
|
||||
</body>
|
|
@ -0,0 +1,64 @@
|
|||
using Telerik.Blazor.Components;
|
||||
|
||||
namespace TireTargets.Components.Pages
|
||||
{
|
||||
|
||||
public partial class Home
|
||||
{
|
||||
private List<(string, string)> availableTireOffers = new List<(string, string)>();
|
||||
private List<(string, string)> availableServiceOffers = new List<(string, string)>();
|
||||
private List<CarouselModel> TireOffers { get; set; } = new List<CarouselModel>();
|
||||
private List<CarouselModel> ServiceOffers { get; set; } = new List<CarouselModel>();
|
||||
public int PageIndex = 1;
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
if (availableTireOffers.Count == 0)
|
||||
{
|
||||
// TODO: switch to read from server instead of local dir
|
||||
string[] files = Directory.GetFiles(@"wwwroot\assets\TestTireDir");
|
||||
foreach (var file in files)
|
||||
{
|
||||
availableTireOffers.Add((file.Substring(8), file.Substring(8)));
|
||||
}
|
||||
|
||||
files = Directory.GetFiles(@"wwwroot\assets\TestServiceDir");
|
||||
foreach (var file in files)
|
||||
{
|
||||
availableServiceOffers.Add((file.Substring(8), file.Substring(8)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Add the fetched offers to the Carousel
|
||||
foreach ((string, string) current in availableTireOffers)
|
||||
{
|
||||
TireOffers.Add(new CarouselModel(current.Item2));
|
||||
}
|
||||
foreach ((string, string) current in availableServiceOffers)
|
||||
{
|
||||
ServiceOffers.Add(new CarouselModel(current.Item2));
|
||||
}
|
||||
|
||||
//Console.WriteLine(String.Join(", ", TireOffers.);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task PageChangeHandler(int newPage)
|
||||
{
|
||||
PageIndex = newPage;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class CarouselModel
|
||||
{
|
||||
public CarouselModel(string filePath)
|
||||
{
|
||||
ImageID = filePath;
|
||||
}
|
||||
public string ImageID { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
@page "/logout"
|
||||
|
||||
<h3>Logout</h3>
|
||||
@inject NavigationManager _navigationManager
|
||||
|
||||
@code {
|
||||
protected override Task OnInitializedAsync()
|
||||
{
|
||||
Components.Layout.MainLayout.SignOut();
|
||||
_navigationManager.NavigateTo("/", true);
|
||||
return base.OnInitializedAsync();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
@page "/portal"
|
||||
|
||||
<head>
|
||||
<!-- Document Title
|
||||
============================================= -->
|
||||
<title>Portal | TireTargets</title>
|
||||
|
||||
</head>
|
||||
|
||||
@if(!userHasLocation)
|
||||
{
|
||||
<div class="alert alert-warning" role="alert">
|
||||
Welcome! To link your business with your account, please contact us at <a href="mailto:support@keymotive.net">support@keymotive.net</a>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if(needSelection)
|
||||
{
|
||||
<div class="alert alert-success" role="alert">
|
||||
Your offers are ready for selection! <a href="/selection">Click here to select your offerings!</a>
|
||||
</div>
|
||||
}
|
||||
else if (userHasLocation && !needSelection)
|
||||
{
|
||||
<div class="alert alert-primary" role="alert">
|
||||
Your offers are all ready to go. If you wish to make revisions, <a href="/selection">click here to adjust your offerings!</a>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 text-center mt-5">
|
||||
<h3 style="text-align: center">Hello, @Components.Layout.MainLayout.Session["fname"].Split(" ")[0]! The portal is under construction. Come back later!</h3>
|
||||
<img style="text-align: center;width:800px;height:600px" src="assets/construction.png" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,31 @@
|
|||
|
||||
using TireTargets.Components.CSharp;
|
||||
|
||||
namespace TireTargets.Components.Pages
|
||||
{
|
||||
public partial class Portal
|
||||
{
|
||||
public string locText = "";
|
||||
private bool needSelection = false;
|
||||
private bool userHasLocation = false;
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
userHasLocation = await DatabaseDriver.DoesUserHaveLocation(Layout.MainLayout.Session["id"], Layout.MainLayout.Session["login_method"]);
|
||||
|
||||
if (userHasLocation)
|
||||
{
|
||||
var needSelectionAll = await DatabaseDriver.DoesLocationNeedSelection();
|
||||
foreach (var current in needSelectionAll)
|
||||
{
|
||||
if (current.Item2)
|
||||
{
|
||||
needSelection = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await base.OnInitializedAsync();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,138 @@
|
|||
@page "/selection"
|
||||
|
||||
@inject NavigationManager navigationManager
|
||||
<head>
|
||||
<!-- Document Title
|
||||
============================================= -->
|
||||
<title>Selection | TireTargets</title>
|
||||
|
||||
</head>
|
||||
@if(!ShowWizard)
|
||||
{
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 text-center mt-5">
|
||||
<h4>Here are the locations associated with your account:</h4>
|
||||
<div style="width:800px; margin:0 auto;">
|
||||
<ul class="list-group list-group-horizontal-md">
|
||||
<li class="list-group-item row w-25" style="text-align:center"><strong>ID</strong></li>
|
||||
<li class="list-group-item row w-25" style="text-align:center"><strong>Location Name</strong></li>
|
||||
<li class="list-group-item row w-25" style="text-align:center"><strong>Needs Selection</strong></li>
|
||||
</ul>
|
||||
@foreach (var current in locInfo)
|
||||
{
|
||||
<ul class="list-group list-group-horizontal-md">
|
||||
<li class="list-group-item row w-25" style="text-align:center">@current.LocationID</li>
|
||||
<li class="list-group-item row w-25" style="text-align:center">@current.LocationName</li>
|
||||
<li class="list-group-item row w-25" style="text-align:center">@DoesLocIDNeedSelection(current.LocationID)</li>
|
||||
<li class="list-group-item row" style="text-align:center"><input type="checkbox" @onchange="@((ChangeEventArgs c) => SelectLocation(current.LocationID))"></input></li>
|
||||
</ul>
|
||||
}
|
||||
|
||||
<TelerikButton OnClick="@ConfirmSelection">Modify Selected Locations</TelerikButton>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
}
|
||||
else if(ShowWizard && !WizardComplete)
|
||||
{
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<TelerikWizard OnFinish="@OnFinishHandler" Width="1440px" Height="900px">
|
||||
<WizardSteps>
|
||||
@*
|
||||
Step 1 - Select Tire Offers
|
||||
*@
|
||||
<WizardStep Label="Tire Offers" Icon="@SvgIcon.Car">
|
||||
<Content>
|
||||
<h1>Please select your Tire Offer(s):</h1>
|
||||
<TelerikButtonGroup SelectionMode="@ButtonGroupSelectionMode.Multiple">
|
||||
<!-- Programatically add each valid offer to the list-->
|
||||
@{
|
||||
@for (int index = 0; index < availableTireOffers.Count; index++)
|
||||
{
|
||||
int temp = index;
|
||||
<ButtonGroupToggleButton @bind-Selected="@selectedTireOffers[temp]"><img src=@availableTireOffers[temp].Item2 /></ButtonGroupToggleButton>
|
||||
<p style="width:35px"></p>
|
||||
@if (temp > 0 && temp % 2 == 0)
|
||||
{
|
||||
<br />
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</TelerikButtonGroup>
|
||||
</Content>
|
||||
|
||||
</WizardStep>
|
||||
|
||||
@*
|
||||
Step 2 - Select Service Offers
|
||||
*@
|
||||
<WizardStep Label="Service Offers" Icon="@SvgIcon.GaugeRadial">
|
||||
<Content>
|
||||
<h1>Please select your Service Offer(s):</h1>
|
||||
<TelerikButtonGroup SelectionMode="@ButtonGroupSelectionMode.Multiple">
|
||||
<!-- Programatically add each valid offer to the list-->
|
||||
@{
|
||||
@for (int index = 0; index < availableServiceOffers.Count; index++)
|
||||
{
|
||||
int temp = index;
|
||||
<ButtonGroupToggleButton @bind-Selected="@selectedServiceOffers[temp]"><img src=@availableServiceOffers[temp].Item2 /></ButtonGroupToggleButton>
|
||||
<p style="width:35px"></p>
|
||||
@if (temp > 0 && temp % 2 == 0)
|
||||
{
|
||||
<br />
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</TelerikButtonGroup>
|
||||
</Content>
|
||||
</WizardStep>
|
||||
|
||||
@*
|
||||
Step 3 - Confirm Order
|
||||
*@
|
||||
<WizardStep Label="Confirmation" Icon="@SvgIcon.TrackChangesAcceptAll">
|
||||
<Content>
|
||||
<h1>Here are your selected offers: </h1>
|
||||
@{
|
||||
@for (int index = 0; index < selectedTireOffers.Count; index++)
|
||||
{
|
||||
int temp = index;
|
||||
@if (selectedTireOffers[index])
|
||||
{
|
||||
<img src="@availableTireOffers[temp].Item2" />
|
||||
<br />
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
<br />
|
||||
@for (int index = 0; index < selectedServiceOffers.Count; index++)
|
||||
{
|
||||
int temp = index;
|
||||
@if (selectedServiceOffers[index])
|
||||
{
|
||||
<img src="@availableServiceOffers[temp].Item2" />
|
||||
<br />
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</Content>
|
||||
</WizardStep>
|
||||
</WizardSteps>
|
||||
|
||||
</TelerikWizard>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
}
|
|
@ -0,0 +1,207 @@
|
|||
using Microsoft.AspNetCore.Components;
|
||||
using Newtonsoft.Json;
|
||||
using Telerik.Blazor;
|
||||
using Telerik.Blazor.Components;
|
||||
using TireTargets.Components.CSharp;
|
||||
using TireTargets.Components.Layout;
|
||||
|
||||
namespace TireTargets.Components.Pages
|
||||
{
|
||||
public partial class Selection
|
||||
{
|
||||
/*
|
||||
*
|
||||
* Code relating to the location selection
|
||||
*
|
||||
*/
|
||||
private List<DatabaseDriver.Location> locInfo = new List<DatabaseDriver.Location>();
|
||||
private List<(int, bool)> locSelections = new List<(int, bool)> ();
|
||||
private Dictionary<int, bool> locationState = new Dictionary<int, bool> ();
|
||||
private bool dummy = false;
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await FetchAvailableOffers();
|
||||
locInfo = await DatabaseDriver.GetLocationInfoForUser(MainLayout.Session["id"], MainLayout.Session["login_method"]);
|
||||
locSelections = await DatabaseDriver.DoesLocationNeedSelection();
|
||||
|
||||
foreach (var location in locInfo)
|
||||
{
|
||||
locationState.Add(location.LocationID, false);
|
||||
}
|
||||
|
||||
await base.OnInitializedAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private bool DoesLocIDNeedSelection(int id)
|
||||
{
|
||||
foreach ((int, bool) value in locSelections)
|
||||
{
|
||||
if (value.Item1 == id)
|
||||
return value.Item2;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void ConfirmSelection()
|
||||
{
|
||||
//PrintLocStates();
|
||||
ShowWizard = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void PrintLocStates()
|
||||
{
|
||||
foreach(var current in locationState)
|
||||
{
|
||||
Console.WriteLine("" + current.Key + " | " + current.Value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void SelectLocation(int locID)
|
||||
{
|
||||
Console.WriteLine("Toggled value for " + locID);
|
||||
locationState[locID] = !locationState[locID];
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
*
|
||||
* Wizard portion
|
||||
*
|
||||
*
|
||||
*/
|
||||
private bool ShowWizard = false;
|
||||
private bool WizardComplete = false;
|
||||
|
||||
[CascadingParameter]
|
||||
private DialogFactory Dialog { get; set; }
|
||||
|
||||
// Tire offer variables
|
||||
private List<(string, string)> availableTireOffers = new List<(string, string)>();
|
||||
private List<bool> selectedTireOffers = new List<bool>();
|
||||
|
||||
// Service offer variables
|
||||
private List<(string, string)> availableServiceOffers = new List<(string, string)>();
|
||||
private List<bool> selectedServiceOffers = new List<bool>();
|
||||
|
||||
private async Task FetchAvailableOffers()
|
||||
{
|
||||
if (availableTireOffers.Count == 0)
|
||||
{
|
||||
// TODO: switch to read from server instead of local dir
|
||||
string[] files = Directory.GetFiles(@"wwwroot\assets\TestTireDir");
|
||||
foreach (var file in files)
|
||||
{
|
||||
availableTireOffers.Add((file.Substring(8), file.Substring(8)));
|
||||
selectedTireOffers.Add(false);
|
||||
}
|
||||
|
||||
files = Directory.GetFiles(@"wwwroot\assets\TestServiceDir");
|
||||
foreach (var file in files)
|
||||
{
|
||||
availableServiceOffers.Add((file.Substring(8), file.Substring(8)));
|
||||
selectedServiceOffers.Add(false);
|
||||
}
|
||||
await Task.Delay(5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<string> GetSelectionJson(int locID)
|
||||
{
|
||||
// Add tire offer information to JSON
|
||||
SelectionObject sel = new SelectionObject();
|
||||
for (int index = 0; index < selectedTireOffers.Count; index++)
|
||||
{
|
||||
if (selectedTireOffers[index])
|
||||
{
|
||||
sel.tireOffers.Add(availableTireOffers[index].Item2, availableTireOffers[index].Item2.Split("_")[0]);
|
||||
}
|
||||
}
|
||||
|
||||
for (int index = 0; index < selectedServiceOffers.Count; index++)
|
||||
{
|
||||
if (selectedServiceOffers[index])
|
||||
{
|
||||
sel.serviceOffers.Add(availableServiceOffers[index].Item2, availableServiceOffers[index].Item2.Split("_")[0]);
|
||||
}
|
||||
}
|
||||
sel.lastUpdated = DateTime.Now;
|
||||
await Task.Delay(5);
|
||||
|
||||
return JsonConvert.SerializeObject(sel, Newtonsoft.Json.Formatting.Indented);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private async Task OnFinishHandler()
|
||||
{
|
||||
// Update database for selected location(s)
|
||||
Dictionary<int, string> locSelections = new Dictionary<int, string>();
|
||||
foreach (DatabaseDriver.Location item in locInfo)
|
||||
{
|
||||
if (locationState[item.LocationID])
|
||||
{
|
||||
var json = await GetSelectionJson(item.LocationID);
|
||||
locSelections.Add(item.LocationID, json);
|
||||
}
|
||||
}
|
||||
|
||||
await DatabaseDriver.UpdateSelection(locSelections);
|
||||
await SendEmailNotice(locSelections);
|
||||
navigationManager.NavigateTo("/portal", true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private async Task SendEmailNotice(Dictionary<int, string> locSelections)
|
||||
{
|
||||
using (var em = new kmCommonLibsCore.Emails())
|
||||
{
|
||||
em.Subject = "TireTargets Offers Updated";
|
||||
em.AddAddress(kmCommonLibsCore.enuAddressType.From, "support@keymotive.us", "TireTargets");
|
||||
em.AddAddress(kmCommonLibsCore.enuAddressType.To, "joshdeck@keymotive.net", "TireTargets Support");
|
||||
|
||||
string locationInfoJson = "";
|
||||
foreach (var current in locSelections)
|
||||
{
|
||||
locationInfoJson += "Location ID: " + current.Key + "<br /><pre><code>" + current.Value + "</pre></code><br /><br /><br />";
|
||||
}
|
||||
em.HtmlBody = "<b>A customer has modified their selections:</b><br /><br />" + locationInfoJson;
|
||||
|
||||
try
|
||||
{
|
||||
em.Send();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
await Console.Out.WriteLineAsync("ERROR: " + e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private class SelectionObject
|
||||
{
|
||||
public SelectionObject()
|
||||
{
|
||||
tireOffers = new Dictionary<string, string>();
|
||||
serviceOffers = new Dictionary<string, string>();
|
||||
}
|
||||
public Dictionary<string, string> tireOffers;
|
||||
public Dictionary<string, string> serviceOffers;
|
||||
public DateTime lastUpdated;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
<Router AppAssembly="typeof(Program).Assembly">
|
||||
<Found Context="routeData">
|
||||
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
|
||||
<FocusOnNavigate RouteData="routeData" Selector="h1" />
|
||||
</Found>
|
||||
</Router>
|
|
@ -0,0 +1,13 @@
|
|||
@using System.Net.Http
|
||||
@using System.Net.Http.Json
|
||||
@using Microsoft.AspNetCore.Components.Forms
|
||||
@using Microsoft.AspNetCore.Components.Routing
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using static Microsoft.AspNetCore.Components.Web.RenderMode
|
||||
@using Microsoft.AspNetCore.Components.Web.Virtualization
|
||||
@using Microsoft.JSInterop
|
||||
@using TireTargets
|
||||
@using TireTargets.Components
|
||||
@using Telerik.Blazor
|
||||
@using Telerik.Blazor.Components
|
||||
@using Telerik.SvgIcons
|
|
@ -0,0 +1,40 @@
|
|||
using TireTargets.Components;
|
||||
|
||||
namespace TireTargets
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddRazorComponents()
|
||||
.AddInteractiveServerComponents();
|
||||
|
||||
builder.Services.AddTelerikBlazor();
|
||||
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseExceptionHandler("/Error");
|
||||
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
|
||||
app.UseAntiforgery();
|
||||
|
||||
app.MapStaticAssets();
|
||||
app.MapRazorComponents<App>()
|
||||
.DisableAntiforgery()
|
||||
.AddInteractiveServerRenderMode();
|
||||
|
||||
app.Run();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "http://localhost:5146",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"https": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:7219;http://localhost:5146",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="wwwroot\include\instagram\cache\" />
|
||||
<Folder Include="wwwroot\include\twitter\cache\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="kmCommonLibsCore" Version="2.0.0.136" />
|
||||
<PackageReference Include="Telerik.UI.for.Blazor" Version="9.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.13.35931.197
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TireTargets", "TireTargets.csproj", "{2EBA5828-9E26-4F4B-9E4F-81DCA1D92CA0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{2EBA5828-9E26-4F4B-9E4F-81DCA1D92CA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2EBA5828-9E26-4F4B-9E4F-81DCA1D92CA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2EBA5828-9E26-4F4B-9E4F-81DCA1D92CA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2EBA5828-9E26-4F4B-9E4F-81DCA1D92CA0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {2F3D2352-C4F9-4A13-8C9B-D602B76935AA}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
h1:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.valid.modified:not([type=checkbox]) {
|
||||
outline: 1px solid #26b050;
|
||||
}
|
||||
|
||||
.invalid {
|
||||
outline: 1px solid #e50000;
|
||||
}
|
||||
|
||||
.validation-message {
|
||||
color: #e50000;
|
||||
}
|
||||
|
||||
.blazor-error-boundary {
|
||||
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
|
||||
padding: 1rem 1rem 1rem 3.7rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.blazor-error-boundary::after {
|
||||
content: "An error has occurred."
|
||||
}
|
||||
|
||||
.darker-border-checkbox.form-check-input {
|
||||
border-color: #929292;
|
||||
}
|
||||
|
||||
.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
|
||||
color: var(--bs-secondary-color);
|
||||
text-align: end;
|
||||
}
|
||||
|
||||
.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
|
||||
text-align: start;
|
||||
}
|
After Width: | Height: | Size: 954 KiB |
After Width: | Height: | Size: 489 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 112 KiB |
After Width: | Height: | Size: 116 KiB |
After Width: | Height: | Size: 114 KiB |
|
@ -0,0 +1,518 @@
|
|||
.fc-calendar-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.fc-calendar {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-head {
|
||||
background: #ccc;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-body {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
height: -moz-calc(100% - 30px);
|
||||
height: -webkit-calc(100% - 30px);
|
||||
height: calc(100% - 30px);
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row {
|
||||
width: 100%;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.fc-four-rows .fc-row {
|
||||
height: 25%;
|
||||
}
|
||||
|
||||
.fc-five-rows .fc-row {
|
||||
height: 20%;
|
||||
}
|
||||
|
||||
.fc-six-rows .fc-row {
|
||||
height: 16.66%;
|
||||
height: -moz-calc(100%/6);
|
||||
height: -webkit-calc(100%/6);
|
||||
height: calc(100%/6);
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div,
|
||||
.fc-calendar .fc-head > div {
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
width: 14.28%; /* 100% / 7 */
|
||||
width: -moz-calc(100%/7);
|
||||
width: -webkit-calc(100%/7);
|
||||
width: calc(100%/7);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* IE 9 is rounding up the calc it seems */
|
||||
.ie9 .fc-calendar .fc-row > div,
|
||||
.ie9 .fc-calendar .fc-head > div {
|
||||
width: 14.2%;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div {
|
||||
border-right: 1px solid #ddd;
|
||||
padding: 4px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-head > div {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > span.fc-date {
|
||||
width: 30px;
|
||||
height: 20px;
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
font-weight: 700;
|
||||
color: #ddd;
|
||||
text-shadow: 0 -1px 0 rgba(255,255,255,0.8);
|
||||
bottom: 5px;
|
||||
right: 5px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-starttime,
|
||||
.fc-calendar .fc-endtime {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > span.fc-weekday {
|
||||
padding-left: 5px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div.fc-today {
|
||||
background: #fff4c3;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div.fc-out {
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div:last-child,
|
||||
.fc-calendar .fc-head > div:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* Custom Events Calendar
|
||||
-----------------------------------------------------------------*/
|
||||
|
||||
.events-calendar {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.fc-calendar-container {
|
||||
height: auto;
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.events-calendar-header {
|
||||
height: 50px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.events-calendar-header h2,
|
||||
.events-calendar-header h3 {
|
||||
float: left;
|
||||
text-shadow: none;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.events-calendar-header h2 {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.events-calendar-header h2 a,
|
||||
.events-calendar-header h2 span {
|
||||
font-size: 18px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.events-calendar-header h3 {
|
||||
width: 40%;
|
||||
color: #666;
|
||||
font-size: 20px;
|
||||
text-align: right;
|
||||
padding-top: 7px;
|
||||
padding-right: 130px;
|
||||
}
|
||||
|
||||
.events-calendar-header h3 span { color: #666; }
|
||||
|
||||
.events-calendar-header nav {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 5px;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.events-calendar-header nav span {
|
||||
float: left;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
position: relative;
|
||||
color: transparent;
|
||||
cursor: pointer;
|
||||
background: #444;
|
||||
margin: 0 1px;
|
||||
font-size: 14px;
|
||||
border-radius: 0 3px 3px 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.events-calendar-header nav span:first-child {
|
||||
border-radius: 3px 0 0 3px;
|
||||
}
|
||||
|
||||
.events-calendar-header nav span:hover {
|
||||
background: #222;
|
||||
}
|
||||
|
||||
.events-calendar-header span i {
|
||||
color: #FFF;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.events-calendar-header nav span:last-child {
|
||||
margin-left: 20px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.fc-calendar {
|
||||
background: #F5F5F5;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
margin-top: 10px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-head {
|
||||
background: #444;
|
||||
color: rgba(255,255,255,0.9);
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,0.2);
|
||||
border-radius: 5px 5px 0 0;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-head > div {
|
||||
font-weight: 300;
|
||||
text-transform: uppercase;
|
||||
font-size: 14px;
|
||||
letter-spacing: 2px;
|
||||
text-shadow: 0 1px 1px rgba(0,0,0,0.4);
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > span.fc-date {
|
||||
position: absolute;
|
||||
color: #333;
|
||||
text-shadow: none;
|
||||
font-size: 28px;
|
||||
font-weight: 300;
|
||||
bottom: auto;
|
||||
right: auto;
|
||||
top: 10px;
|
||||
left: 8px;
|
||||
text-align: left;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-body {
|
||||
border: none;
|
||||
height: 568px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row {
|
||||
box-shadow: inset 0 -1px 0 #E5E5E5;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row:last-child {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row:first-child > div:first-child {
|
||||
border-radius: 5px 0 0 0;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row:first-child > div:last-child {
|
||||
border-radius: 0 5px 0 0;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row:last-child > div:first-child {
|
||||
border-radius: 0 0 0 5px;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row:last-child > div:last-child {
|
||||
border-radius: 0 0 5px 0;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div {
|
||||
box-shadow: -1px 0 0 #E5E5E5;
|
||||
border: none;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div:first-child{
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div.fc-today {
|
||||
background: #1E73BE;
|
||||
box-shadow: inset 0 0 100px rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div.fc-today > span.fc-date {
|
||||
color: #FFF;
|
||||
text-shadow: 1px 1px 1px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div.fc-today:after {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 0.2;
|
||||
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255, 255, 255, 0.15)), to(rgba(0, 0, 0, 0.25))), -webkit-gradient(linear, left top, right bottom, color-stop(0, rgba(255, 255, 255, 0)), color-stop(0.5, rgba(255, 255, 255, .15)), color-stop(0.501, rgba(255, 255, 255, 0)), color-stop(1, rgba(255, 255, 255, 0)));
|
||||
background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.25)), -moz-linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
|
||||
background: -o-linear-gradient(top, rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.25)), -o-llinear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
|
||||
background: -ms-linear-gradient(top, rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.25)), -ms-linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
|
||||
background: linear-gradient(top, rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.25)), linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > div {
|
||||
margin-top: 35px;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > div a,
|
||||
.fc-calendar .fc-row > div > div span {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
color: #FFF;
|
||||
text-shadow: 1px 1px 1px rgba(0,0,0,0.1);
|
||||
font-size: 12px;
|
||||
display: inline-block;
|
||||
padding: 3px 5px;
|
||||
border-radius: 2px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 100%;
|
||||
margin-bottom: 1px;
|
||||
background: #1E73BE;
|
||||
-webkit-transition: background-color .3s ease-in-out;
|
||||
-moz-transition: background-color .3s ease-in-out;
|
||||
-ms-transition: background-color .3s ease-in-out;
|
||||
-o-transition: background-color .3s ease-in-out;
|
||||
transition: background-color .3s ease-in-out;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > div a:hover { background: #444 !important; }
|
||||
|
||||
.fc-calendar .fc-row > div.fc-today > div a,
|
||||
.fc-calendar .fc-row > div.fc-today > div span {
|
||||
color: #FFF;
|
||||
background: rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
.dark .events-calendar-header h2,
|
||||
.dark .events-calendar-header h3 {
|
||||
text-shadow: 1px 1px 0 rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.dark .events-calendar-header h2 { color: #FFF; }
|
||||
|
||||
.dark .events-calendar-header h2 a,
|
||||
.dark .events-calendar-header h2 span { color: rgba(255,255,255,0.3); }
|
||||
|
||||
.dark .events-calendar-header h2 a { color: rgba(255,255,255,0.5); }
|
||||
|
||||
.dark .events-calendar-header h2 a:hover { color: rgba(255,255,255,0.9); }
|
||||
|
||||
.dark .events-calendar-header h3 {
|
||||
color: #CCC;
|
||||
color: rgba(255,255,255,0.6);
|
||||
}
|
||||
|
||||
.dark .events-calendar-header h3 span { color: #CCC; }
|
||||
|
||||
.dark .events-calendar-header nav span {
|
||||
background: rgba(255,255,255,0.3);
|
||||
box-shadow: inset 0 1px rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
.dark .events-calendar-header nav span:hover { background: rgba(255,255,255,0.5); }
|
||||
|
||||
.dark .events-calendar-header span i { color: #FFF; }
|
||||
|
||||
.dark .fc-calendar { background: rgba(255,255,255,0.1); }
|
||||
|
||||
.dark .fc-calendar .fc-head {
|
||||
background: rgba(255,255,255,0.2);
|
||||
color: rgba(255,255,255,0.9);
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
.dark .fc-calendar .fc-head > div { text-shadow: 0 1px 1px rgba(0,0,0,0.4); }
|
||||
|
||||
.dark .fc-calendar .fc-row > div > span.fc-date {
|
||||
color: rgba(255,255,255,0.9);
|
||||
text-shadow: 0 1px 1px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.dark .fc-calendar .fc-row { box-shadow: inset 0 -1px 0 rgba(255,255,255,0.10); }
|
||||
|
||||
.dark .fc-calendar .fc-row > div { box-shadow: -1px 0 0 rgba(255, 255, 255, 0.10); }
|
||||
|
||||
.dark .fc-calendar .fc-row > div.fc-today {
|
||||
background: transparent;
|
||||
box-shadow: inset 0 0 100px rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
.dark .fc-calendar .fc-row > div > div a,
|
||||
.dark .fc-calendar .fc-row > div > div span {
|
||||
color: rgba(255,255,255,0.7);
|
||||
text-shadow: 1px 1px 1px rgba(0,0,0,0.1);
|
||||
background: rgba(255,255,255,0.1);
|
||||
}
|
||||
|
||||
.dark .fc-calendar .fc-row > div > div a:hover { background: rgba(255,255,255,0.3) !important; }
|
||||
|
||||
|
||||
@media screen and (max-width: 991px) {
|
||||
|
||||
.events-calendar-header,
|
||||
.events-calendar-header nav,
|
||||
.events-calendar,
|
||||
.fc-calendar-container,
|
||||
.fc-calendar,
|
||||
.fc-calendar .fc-head,
|
||||
.fc-calendar .fc-row > div > span.fc-date {
|
||||
position: relative;
|
||||
top: auto;
|
||||
left: auto;
|
||||
bottom: auto;
|
||||
right: auto;
|
||||
height: auto;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-body { height: auto; }
|
||||
|
||||
.fc-calendar { margin: 20px 0; }
|
||||
|
||||
.events-calendar-header h2,
|
||||
.events-calendar-header h3 {
|
||||
float: none;
|
||||
width: auto;
|
||||
text-align: left;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row,
|
||||
.ie9 .fc-calendar .fc-row > div,
|
||||
.fc-calendar .fc-row > div {
|
||||
height: auto;
|
||||
width: 100%;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div {
|
||||
float: none;
|
||||
min-height: 50px;
|
||||
box-shadow: inset 0 -1px #E5E5E5 !important;
|
||||
border-radius: 0px !important;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div:first-child { box-shadow: inset 0 -1px #E5E5E5 !important; }
|
||||
|
||||
.fc-calendar .fc-row > div:empty{
|
||||
min-height: 0;
|
||||
height: 0;
|
||||
box-shadow: none !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-head {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > div {
|
||||
margin-top: 0px;
|
||||
padding-left: 10px;
|
||||
max-width: 68%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div.fc-today {
|
||||
background: #1E73BE;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div.fc-today:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > span.fc-date {
|
||||
width: 30px;
|
||||
display: inline-block;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.fc-calendar .fc-row > div > span.fc-weekday {
|
||||
display: inline-block;
|
||||
width: 40px;
|
||||
color: #999;
|
||||
font-size: 10px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
|
||||
.dark .fc-calendar .fc-row > div { box-shadow: inset 0 -1px rgba(255,255,255,0.2) !important; }
|
||||
|
||||
.dark .fc-calendar .fc-row > div.fc-today { background: rgba(255, 255, 255, 0.2); }
|
||||
|
||||
.dark .fc-calendar .fc-row > div > span.fc-weekday,
|
||||
.fc-calendar .fc-row > div.fc-today > span.fc-weekday {
|
||||
color: #fff;
|
||||
color: rgba(255,255,255,0.7);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
/*!
|
||||
* bootstrap-star-rating v4.1.0
|
||||
* http://plugins.krajee.com/star-rating
|
||||
*
|
||||
* Author: Kartik Visweswaran
|
||||
* Copyright: 2013 - 2021, Kartik Visweswaran, Krajee.com
|
||||
*
|
||||
* Licensed under the BSD 3-Clause
|
||||
* https://github.com/kartik-v/bootstrap-star-rating/blob/master/LICENSE.md
|
||||
*/
|
||||
.rating-loading{width:25px;height:25px;font-size:0;color:#fff;background:top left no-repeat;border:none}.rating-container .rating-stars{position:relative;cursor:pointer;vertical-align:middle;display:inline-block;overflow:hidden;white-space:nowrap}.rating-container .rating-stars:focus{outline:dotted 1px}.rating-input{display:absolute;cursor:pointer;width:100%;height:1px;bottom:0;left:0;font-size:1px;border:none;background:0 0;opacity:0;padding:0;margin:0}.caption-badge,.rating-container .caption .label{line-height:1;text-align:center;border-radius:.25rem}.rating-container.is-display-only .rating-stars{cursor:default}.rating-disabled .rating-stars{cursor:not-allowed}.rating-container .star{display:inline-block;margin:0 2px;text-align:center}.rating-container .empty-stars{color:#aaa}.rating-container .filled-stars{position:absolute;left:0;top:0;margin:auto;color:#fde16d;white-space:nowrap;overflow:hidden;-webkit-text-stroke:1px #777;text-shadow:1px 1px #999}.rating-rtl{float:right}.rating-animate .filled-stars{transition:width .25s ease}.rating-rtl .filled-stars{left:auto;right:0;transition:none;-webkit-transform:matrix(-1,0,0,1,0,0);transform:matrix(-1,0,0,1,0,0)}.rating-rtl.is-star .filled-stars{right:.06em}.rating-rtl.is-heart .empty-stars{margin-right:.07em}.rating-container .clear-rating{color:#aaa;cursor:not-allowed;display:inline-block;vertical-align:middle;font-size:60%;padding-right:5px}.clear-rating-active{cursor:pointer!important}.clear-rating-active:hover{color:#843534}.rating-container .caption .label{display:inline-block;padding:.25em .4em;vertical-align:baseline}.rating-container .caption{color:#999;display:inline-block;vertical-align:middle;line-height:1;margin-left:5px;margin-right:0}.rating-rtl .caption{margin-right:5px;margin-left:0}@media print{.rating-container .clear-rating{display:none}}.rating-xl{font-size:48px}.rating-lg{font-size:40px}.rating-md{font-size:32px}.rating-sm{font-size:24px}.rating-xs{font-size:16px}.rating-xl .caption{font-size:20px}.rating-lg .caption{font-size:18px}.rating-md .caption{font-size:16px}.rating-sm .caption{font-size:14px}.rating-xs .caption{font-size:12px}.caption-badge{font-family:Arial,Helvetica,sans-serif;display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;color:#fff;white-space:nowrap;vertical-align:baseline}.caption-secondary{background-color:#6c757d}.caption-danger{background-color:#dc3545}.caption-warning{background-color:#ffc107;color:#212529}.caption-info{background-color:#0dcaf0;color:#212529}.caption-primary{background-color:#0d6efd}.caption-success{background-color:#198754}
|
|
@ -0,0 +1,520 @@
|
|||
/* ========================================================================
|
||||
* bootstrap-switch - v3.3.2
|
||||
* ====================================================================== */
|
||||
|
||||
.bootstrap-switch {
|
||||
display: inline-block;
|
||||
direction: ltr;
|
||||
cursor: pointer;
|
||||
border-radius: 2px;
|
||||
border: 1px solid;
|
||||
border-color: #CCC;
|
||||
position: relative;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
line-height: 8px;
|
||||
z-index: 0;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
vertical-align: middle;
|
||||
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-container {
|
||||
display: inline-block;
|
||||
top: 0;
|
||||
border-radius: 2px;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch .bootstrap-switch-label {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
display: inline-block !important;
|
||||
height: 100%;
|
||||
padding: 6px 12px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off {
|
||||
text-align: center;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.bootstrap-switch .bootstrap-switch-handle-on i,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off i {
|
||||
position: relative;
|
||||
font-size: 16px;
|
||||
left: -1px;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {
|
||||
color: #fff;
|
||||
background: #337ab7;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {
|
||||
color: #fff;
|
||||
background: #5bc0de;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {
|
||||
color: #fff;
|
||||
background: #5cb85c;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {
|
||||
background: #f0ad4e;
|
||||
color: #fff;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {
|
||||
color: #fff;
|
||||
background: #d9534f;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {
|
||||
color: #000;
|
||||
background: #eeeeee;
|
||||
}
|
||||
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-themecolor,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-themecolor {
|
||||
color: #FFF;
|
||||
background: #1ABC9C;
|
||||
background: var(--themecolor);
|
||||
}
|
||||
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-black,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-black {
|
||||
color: #FFF;
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-white,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-white {
|
||||
color: #000;
|
||||
background: #F5F5F5;
|
||||
}
|
||||
|
||||
.bootstrap-switch .bootstrap-switch-label {
|
||||
text-align: center;
|
||||
margin-top: -1px;
|
||||
margin-bottom: -1px;
|
||||
z-index: 100;
|
||||
color: #333333;
|
||||
background: #ffffff;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on {
|
||||
border-bottom-left-radius: 1px;
|
||||
border-top-left-radius: 1px;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-off {
|
||||
border-bottom-right-radius: 1px;
|
||||
border-top-right-radius: 1px;
|
||||
}
|
||||
.bootstrap-switch input[type='radio'],
|
||||
.bootstrap-switch input[type='checkbox'] {
|
||||
position: absolute !important;
|
||||
top: 0;
|
||||
left: 0;
|
||||
margin: 0;
|
||||
z-index: -1;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {
|
||||
padding: 1px 5px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {
|
||||
padding: 5px 10px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {
|
||||
padding: 6px 16px;
|
||||
font-size: 18px;
|
||||
line-height: 1.3333333;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-disabled,
|
||||
.bootstrap-switch.bootstrap-switch-readonly,
|
||||
.bootstrap-switch.bootstrap-switch-indeterminate { cursor: default !important; }
|
||||
.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,
|
||||
.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,
|
||||
.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {
|
||||
opacity: 0.5;
|
||||
filter: alpha(opacity=50);
|
||||
cursor: default !important;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {
|
||||
-webkit-transition: margin-left 0.2s ease;
|
||||
-o-transition: margin-left 0.2s ease;
|
||||
transition: margin-left 0.2s ease;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-right-radius: 1px;
|
||||
border-top-right-radius: 1px;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {
|
||||
border-bottom-right-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-left-radius: 1px;
|
||||
border-top-left-radius: 1px;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-focused {
|
||||
outline: 0;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,
|
||||
.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label {
|
||||
border-bottom-right-radius: 1px;
|
||||
border-top-right-radius: 1px;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,
|
||||
.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label {
|
||||
border-bottom-left-radius: 1px;
|
||||
border-top-left-radius: 1px;
|
||||
}
|
||||
|
||||
.bootstrap-switch-label:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 10px;
|
||||
height: 3px;
|
||||
margin-top: -2px;
|
||||
margin-left: -5px;
|
||||
display: inline-block;
|
||||
border-top: 1px solid #DDD;
|
||||
border-bottom: 1px solid #DDD;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* --------------------------------------------------------------
|
||||
SWITCH
|
||||
-------------------------------------------------------------- */
|
||||
.switch-toggle {
|
||||
position: absolute;
|
||||
margin-left: -9999px;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.switch-toggle + label {
|
||||
display: block;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------
|
||||
SWITCH 1 - ROUND
|
||||
----------------------------------------------------------------- */
|
||||
input.switch-toggle-round + label {
|
||||
padding: 2px;
|
||||
width: 60px;
|
||||
height: 30px;
|
||||
background-color: #DDD;
|
||||
-webkit-border-radius: 15px;
|
||||
-o-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
input.switch-toggle-round + label:before,
|
||||
input.switch-toggle-round + label:after {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 1px;
|
||||
left: 1px;
|
||||
bottom: 1px;
|
||||
content: "";
|
||||
}
|
||||
|
||||
input.switch-toggle-round + label:before {
|
||||
right: 1px;
|
||||
background-color: #F1F1F1;
|
||||
-webkit-border-radius: 15px;
|
||||
-o-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
-webkit-transition: background 0.4s;
|
||||
-moz-transition: background 0.4s;
|
||||
-o-transition: background 0.4s;
|
||||
transition: background 0.4s;
|
||||
}
|
||||
|
||||
input.switch-toggle-round + label:after {
|
||||
width: 28px;
|
||||
background-color: #FFF;
|
||||
-webkit-border-radius: 100%;
|
||||
-o-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
|
||||
-moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
|
||||
-webkit-transition: margin 0.4s;
|
||||
-moz-transition: margin 0.4s;
|
||||
-o-transition: margin 0.4s;
|
||||
transition: margin 0.4s;
|
||||
}
|
||||
|
||||
input.switch-toggle-round:checked + label:before {
|
||||
background-color: #1ABC9C;
|
||||
background-color: var(--themecolor);
|
||||
}
|
||||
input.switch-toggle-round:checked + label:after { margin-left: 30px; }
|
||||
|
||||
/* --------------------------------------------------------------
|
||||
SWITCH 1 - ROUND- MINI
|
||||
----------------------------------------------------------------- */
|
||||
input.switch-rounded-mini.switch-toggle-round + label {
|
||||
padding: 1px;
|
||||
width: 32px;
|
||||
height: 16px;
|
||||
-webkit-border-radius: 8px;
|
||||
-o-border-radius: 8px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
input.switch-rounded-mini.switch-toggle-round + label:before {
|
||||
-webkit-border-radius: 8px;
|
||||
-o-border-radius: 8px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
input.switch-rounded-mini.switch-toggle-round + label:after { width: 15px; }
|
||||
input.switch-rounded-mini.switch-toggle-round:checked + label:after { margin-left: 15px; }
|
||||
|
||||
/* --------------------------------------------------------------
|
||||
SWITCH 1 - ROUND- LARGE
|
||||
----------------------------------------------------------------- */
|
||||
input.switch-rounded-large.switch-toggle-round + label {
|
||||
width: 90px;
|
||||
height: 45px;
|
||||
-webkit-border-radius: 45px;
|
||||
-o-border-radius: 45px;
|
||||
border-radius: 45px;
|
||||
}
|
||||
|
||||
input.switch-rounded-large.switch-toggle-round + label:before {
|
||||
-webkit-border-radius: 45px;
|
||||
-o-border-radius: 45px;
|
||||
border-radius: 45px;
|
||||
}
|
||||
|
||||
input.switch-rounded-large.switch-toggle-round + label:after { width: 43px; }
|
||||
input.switch-rounded-large.switch-toggle-round:checked + label:after { margin-left: 45px; }
|
||||
|
||||
|
||||
/* --------------------------------------------------------------
|
||||
SWITCH 1 - ROUND- XLARGE
|
||||
----------------------------------------------------------------- */
|
||||
input.switch-rounded-xlarge.switch-toggle-round + label {
|
||||
width: 120px;
|
||||
height: 60px;
|
||||
-webkit-border-radius: 60px;
|
||||
-o-border-radius: 60px;
|
||||
border-radius: 60px;
|
||||
}
|
||||
|
||||
input.switch-rounded-xlarge.switch-toggle-round + label:before {
|
||||
-webkit-border-radius: 60px;
|
||||
-o-border-radius: 60px;
|
||||
border-radius: 60px;
|
||||
}
|
||||
|
||||
input.switch-rounded-xlarge.switch-toggle-round + label:after { width: 58px; }
|
||||
input.switch-rounded-xlarge.switch-toggle-round:checked + label:after { margin-left: 60px; }
|
||||
|
||||
|
||||
/* -----------------------------------------------------------
|
||||
SWITCH 2 - ROUND FLAT
|
||||
-------------------------------------------------------------- */
|
||||
input.switch-toggle-flat + label {
|
||||
padding: 2px;
|
||||
width: 60px;
|
||||
height: 30px;
|
||||
background-color: #DDD;
|
||||
-webkit-border-radius: 30px;
|
||||
-moz-border-radius: 30px;
|
||||
-ms-border-radius: 30px;
|
||||
-o-border-radius: 30px;
|
||||
border-radius: 30px;
|
||||
-webkit-transition: background 0.4s;
|
||||
-moz-transition: background 0.4s;
|
||||
-o-transition: background 0.4s;
|
||||
transition: background 0.4s;
|
||||
}
|
||||
|
||||
input.switch-toggle-flat + label:before,
|
||||
input.switch-toggle-flat + label:after {
|
||||
display: block;
|
||||
position: absolute;
|
||||
content: "";
|
||||
}
|
||||
|
||||
input.switch-toggle-flat + label:before {
|
||||
top: 2px;
|
||||
left: 2px;
|
||||
bottom: 2px;
|
||||
right: 2px;
|
||||
background-color: #FFF;
|
||||
-webkit-border-radius: 30px;
|
||||
-moz-border-radius: 30px;
|
||||
-ms-border-radius: 30px;
|
||||
-o-border-radius: 30px;
|
||||
border-radius: 30px;
|
||||
-webkit-transition: background 0.4s;
|
||||
-moz-transition: background 0.4s;
|
||||
-o-transition: background 0.4s;
|
||||
transition: background 0.4s;
|
||||
}
|
||||
|
||||
input.switch-toggle-flat + label:after {
|
||||
top: 4px;
|
||||
left: 4px;
|
||||
bottom: 4px;
|
||||
width: 22px;
|
||||
background-color: #DDD;
|
||||
-webkit-border-radius: 22px;
|
||||
-moz-border-radius: 22px;
|
||||
-ms-border-radius: 22px;
|
||||
-o-border-radius: 22px;
|
||||
border-radius: 22px;
|
||||
-webkit-transition: margin 0.4s, background 0.4s;
|
||||
-moz-transition: margin 0.4s, background 0.4s;
|
||||
-o-transition: margin 0.4s, background 0.4s;
|
||||
transition: margin 0.4s, background 0.4s;
|
||||
}
|
||||
|
||||
input.switch-toggle-flat:checked + label {
|
||||
background-color: #1ABC9C;
|
||||
background-color: var(--themecolor);
|
||||
}
|
||||
|
||||
input.switch-toggle-flat:checked + label:after {
|
||||
margin-left: 30px;
|
||||
background-color: #1ABC9C;
|
||||
background-color: var(--themecolor);
|
||||
}
|
||||
|
||||
|
||||
/* -----------------------------------------------------------
|
||||
SWITCH 2 - FLAT - MINI
|
||||
-------------------------------------------------------------- */
|
||||
input.switch-flat-mini.switch-toggle-flat + label {
|
||||
padding: 1px;
|
||||
width: 32px;
|
||||
height: 16px;
|
||||
-webkit-border-radius: 16px;
|
||||
-o-border-radius: 16px;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
input.switch-flat-mini.switch-toggle-flat + label:before {
|
||||
top: 1px;
|
||||
left: 1px;
|
||||
bottom: 1px;
|
||||
right: 1px;
|
||||
-webkit-border-radius: 16px;
|
||||
-o-border-radius: 16px;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
input.switch-flat-mini.switch-toggle-flat + label:after {
|
||||
top: 2px;
|
||||
left: 2px;
|
||||
bottom: 2px;
|
||||
width: 12px;
|
||||
-webkit-border-radius: 12px;
|
||||
-o-border-radius: 12px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
input.switch-flat-mini.switch-toggle-flat:checked + label:after { margin-left: 16px; }
|
||||
|
||||
|
||||
/* -----------------------------------------------------------
|
||||
SWITCH 2 - FLAT - LARGE
|
||||
-------------------------------------------------------------- */
|
||||
input.switch-flat-large.switch-toggle-flat + label {
|
||||
width: 90px;
|
||||
height: 45px;
|
||||
-webkit-border-radius: 45px;
|
||||
-o-border-radius: 45px;
|
||||
border-radius: 45px;
|
||||
}
|
||||
|
||||
input.switch-flat-large.switch-toggle-flat + label:before {
|
||||
-webkit-border-radius: 45px;
|
||||
-o-border-radius: 45px;
|
||||
border-radius: 45px;
|
||||
}
|
||||
|
||||
input.switch-flat-large.switch-toggle-flat + label:after {
|
||||
width: 37px;
|
||||
-webkit-border-radius: 37px;
|
||||
-o-border-radius: 37px;
|
||||
border-radius: 37px;
|
||||
}
|
||||
|
||||
input.switch-flat-large.switch-toggle-flat:checked + label:after { margin-left: 45px; }
|
||||
|
||||
|
||||
|
||||
/* -----------------------------------------------------------
|
||||
SWITCH 2 - FLAT - XLARGE
|
||||
-------------------------------------------------------------- */
|
||||
input.switch-flat-xlarge.switch-toggle-flat + label {
|
||||
padding: 2px;
|
||||
width: 120px;
|
||||
height: 60px;
|
||||
-webkit-border-radius: 60px;
|
||||
-o-border-radius: 60px;
|
||||
border-radius: 60px;
|
||||
}
|
||||
|
||||
input.switch-flat-xlarge.switch-toggle-flat + label:before {
|
||||
-webkit-border-radius: 60px;
|
||||
-o-border-radius: 60px;
|
||||
border-radius: 60px;
|
||||
}
|
||||
input.switch-flat-xlarge.switch-toggle-flat + label:after {
|
||||
width: 52px;
|
||||
-webkit-border-radius: 52px;
|
||||
-o-border-radius: 52px;
|
||||
border-radius: 52px;
|
||||
}
|
||||
|
||||
input.switch-flat-xlarge.switch-toggle-flat:checked + label:after { margin-left: 60px; }
|
||||
|
|
@ -0,0 +1,184 @@
|
|||
/**
|
||||
* bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.
|
||||
*
|
||||
* @version v3.4 for Bootstrap 4.x
|
||||
* @homepage https://bttstrp.github.io/bootstrap-switch
|
||||
* @author Mattia Larentis <mattia@larentis.eu> (http://larentis.eu)
|
||||
* & djibe
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
.bootstrap-switch {
|
||||
display: inline-block;
|
||||
direction: ltr;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #ccc;
|
||||
position: relative;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
line-height: 8px;
|
||||
z-index: 0;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
vertical-align: middle;
|
||||
-webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-container {
|
||||
display: inline-block;
|
||||
top: 0;
|
||||
border-radius: 4px;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch .bootstrap-switch-label {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
padding: 6px 12px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off {
|
||||
text-align: center;
|
||||
z-index: 1;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {
|
||||
background: #007bff;
|
||||
color: #fff;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {
|
||||
background: #eee;
|
||||
color: rgba(0, 0, 0, 0.87);
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-secondary,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-secondary {
|
||||
background: #6c757d;
|
||||
color: #fff;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {
|
||||
background: #17a2b8;
|
||||
color: #fff;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {
|
||||
background: #28a745;
|
||||
color: #fff;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {
|
||||
background: #ffc107;
|
||||
color: #fff;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {
|
||||
background: #dc3545;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-themecolor,
|
||||
.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-themecolor {
|
||||
color: #FFF;
|
||||
background: var(--cnvs-themecolor);
|
||||
border-color: transparent !important;
|
||||
outline: 0 !important;
|
||||
-webkit-box-shadow: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-label {
|
||||
text-align: center;
|
||||
margin-top: -1px;
|
||||
margin-bottom: -1px;
|
||||
z-index: 100;
|
||||
color: #333;
|
||||
background: #fff;
|
||||
padding: 8px 12px;
|
||||
}
|
||||
.bootstrap-switch span::before {
|
||||
content: "\200b";
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-on {
|
||||
border-bottom-left-radius: 3px;
|
||||
border-top-left-radius: 3px;
|
||||
}
|
||||
.bootstrap-switch .bootstrap-switch-handle-off {
|
||||
border-bottom-right-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
.bootstrap-switch input[type='radio'],
|
||||
.bootstrap-switch input[type='checkbox'] {
|
||||
position: absolute !important;
|
||||
top: 0;
|
||||
left: 0;
|
||||
margin: 0;
|
||||
z-index: -1;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
visibility: hidden;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {
|
||||
padding: 1px 5px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {
|
||||
padding: 5px 10px;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,
|
||||
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,
|
||||
.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {
|
||||
padding: 6px 16px;
|
||||
font-size: 18px;
|
||||
line-height: 1.3333333;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-disabled, .bootstrap-switch.bootstrap-switch-readonly, .bootstrap-switch.bootstrap-switch-indeterminate {
|
||||
cursor: default !important;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on, .bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on, .bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on, .bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off, .bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off, .bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off, .bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label, .bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label, .bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {
|
||||
opacity: 0.5;
|
||||
filter: alpha(opacity=50);
|
||||
cursor: default !important;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {
|
||||
-webkit-transition: margin-left 0.5s;
|
||||
transition: margin-left 0.5s;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {
|
||||
border-radius: 3px 0 0 3px;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-focused {
|
||||
border-color: #66afe9;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label, .bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label {
|
||||
border-bottom-right-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label, .bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label {
|
||||
border-bottom-left-radius: 3px;
|
||||
border-top-left-radius: 3px;
|
||||
}
|
|
@ -0,0 +1,341 @@
|
|||
|
||||
/* ========================================================================
|
||||
Dark - timepicker.css
|
||||
======================================================================== */
|
||||
.dark .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before { border-bottom: 7px solid #444; }
|
||||
.dark .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after { border-bottom-color: #222; }
|
||||
.dark .bootstrap-datetimepicker-widget.dropdown-menu.top:before { border-top-color: #DDD; }
|
||||
.dark .bootstrap-datetimepicker-widget.dropdown-menu.top:after { border-top-color: #222; }
|
||||
.dark .bootstrap-datetimepicker-widget table th.disabled,
|
||||
.dark .bootstrap-datetimepicker-widget table th.disabled:hover { color: #AAA; }
|
||||
.dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover { background: #444; }
|
||||
.dark .bootstrap-datetimepicker-widget table td.cw { color: #AAA; }
|
||||
.dark .bootstrap-datetimepicker-widget table td.day:hover,
|
||||
.dark .bootstrap-datetimepicker-widget table td.hour:hover,
|
||||
.dark .bootstrap-datetimepicker-widget table td.minute:hover,
|
||||
.dark .bootstrap-datetimepicker-widget table td.second:hover { background: #444; }
|
||||
.dark .bootstrap-datetimepicker-widget table td.old,
|
||||
.dark .bootstrap-datetimepicker-widget table td.new { color: #AAA; }
|
||||
.dark .bootstrap-datetimepicker-widget table td.active,
|
||||
.dark .bootstrap-datetimepicker-widget table td.active:hover { color: #222; }
|
||||
.dark .bootstrap-datetimepicker-widget table td.active.today:before { border-bottom-color: #222; }
|
||||
.dark .bootstrap-datetimepicker-widget table td.disabled,
|
||||
.dark .bootstrap-datetimepicker-widget table td.disabled:hover { color: #AAA; }
|
||||
.dark .bootstrap-datetimepicker-widget table td span:hover { background: #444; }
|
||||
.dark .bootstrap-datetimepicker-widget table td span.active { color: #222; }
|
||||
.dark .bootstrap-datetimepicker-widget table td span.old { color: #AAA; }
|
||||
.dark .bootstrap-datetimepicker-widget table td span.disabled,
|
||||
.dark .bootstrap-datetimepicker-widget table td span.disabled:hover { color: #AAA; }
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================================
|
||||
select-boxes.css
|
||||
======================================================================== */
|
||||
.dark .select2-dropdown {
|
||||
background-color: #333;
|
||||
border-color: #555;
|
||||
}
|
||||
.dark .select2-close-mask { background-color: #333; }
|
||||
|
||||
.dark .select2-container--default .select2-selection--single {
|
||||
background-color: #333;
|
||||
border-color: #555;
|
||||
}
|
||||
.dark .select2-container--default .select2-selection--single .select2-selection__rendered { color: #EEE; }
|
||||
.dark .select2-container--default .select2-selection--single .select2-selection__placeholder { color: #999; }
|
||||
|
||||
.dark .select2-container--default .select2-selection--multiple {
|
||||
background-color: #333;
|
||||
border-color: #555;
|
||||
}
|
||||
.dark .select2-container--default .select2-selection--multiple .select2-selection__placeholder { color: #999; }
|
||||
.dark .select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: #444;
|
||||
border-color: #555;
|
||||
}
|
||||
.dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { color: #999; }
|
||||
.dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { color: #EEE; }
|
||||
|
||||
.dark .select2-container--default.select2-container--disabled .select2-selection--multiple { background-color: #444; }
|
||||
|
||||
.dark .select2-container--default .select2-search--dropdown .select2-search__field {
|
||||
border-color: #555;
|
||||
background-color: #555;
|
||||
color: #EEE;
|
||||
}
|
||||
|
||||
.dark .select2-container--default .select2-results__option[aria-disabled=true] { color: #999; }
|
||||
|
||||
.dark .select2-container--default .select2-results__option[aria-selected=true] { background-color: #444; }
|
||||
|
||||
.dark .select2-container--default .select2-results__option--highlighted[aria-selected] {
|
||||
background-color: #5897fb;
|
||||
color: #EEE; }
|
||||
|
||||
.dark .select2-container--classic .select2-selection--single {
|
||||
background-color: #444;
|
||||
border-color: #555;
|
||||
background-image: -webkit-linear-gradient(top, white 50%, #444 100%);
|
||||
background-image: -o-linear-gradient(top, white 50%, #444 100%);
|
||||
background-image: linear-gradient(to bottom, white 50%, #444 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#44444444', endColorstr='#44EEEEEE', GradientType=0);
|
||||
}
|
||||
.dark .select2-container--classic .select2-selection--single:focus { border: 1px solid #5897fb; }
|
||||
.dark .select2-container--classic .select2-selection--single .select2-selection__rendered { color: #444; }
|
||||
.dark .select2-container--classic .select2-selection--single .select2-selection__placeholder { color: #999; }
|
||||
.dark .select2-container--classic .select2-selection--single .select2-selection__arrow {
|
||||
background-color: #444;
|
||||
border-left-color: #555;
|
||||
background-image: -webkit-linear-gradient(top, #444 50%, #444 100%);
|
||||
background-image: -o-linear-gradient(top, #444 50%, #444 100%);
|
||||
background-image: linear-gradient(to bottom, #444 50%, #444 100%);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#44EEEEEE', endColorstr='#44CCCCCC', GradientType=0);
|
||||
}
|
||||
|
||||
.dark .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { border-right-color: #555; }
|
||||
|
||||
.dark .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
|
||||
background-image: -webkit-linear-gradient(top, white 0%, #444 50%);
|
||||
background-image: -o-linear-gradient(top, white 0%, #444 50%);
|
||||
background-image: linear-gradient(to bottom, white 0%, #444 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#44444444', endColorstr='#44EEEEEE', GradientType=0);
|
||||
}
|
||||
|
||||
.dark .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
|
||||
background-image: -webkit-linear-gradient(top, #444 50%, white 100%);
|
||||
background-image: -o-linear-gradient(top, #444 50%, white 100%);
|
||||
background-image: linear-gradient(to bottom, #444 50%, white 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#44EEEEEE', endColorstr='#444', GradientType=0);
|
||||
}
|
||||
|
||||
.dark .select2-container--classic .select2-selection--multiple {
|
||||
background-color: #333;
|
||||
border-color: #555;
|
||||
}
|
||||
|
||||
.dark .select2-container--classic .select2-selection--multiple:focus { border-color: #5897fb; }
|
||||
.dark .select2-container--classic .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: #444;
|
||||
border-color: #555;
|
||||
}
|
||||
.dark .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { color: #EEE; }
|
||||
|
||||
.dark .select2-container--classic .select2-search--dropdown .select2-search__field { border-color: #555; }
|
||||
|
||||
.dark .select2-container--classic .select2-dropdown { background-color: #333;}
|
||||
|
||||
.dark .select2-container--classic .select2-results__option[aria-disabled=true] { color: #444; }
|
||||
|
||||
.dark .select2-container--classic .select2-results__option--highlighted[aria-selected] { color: #333; }
|
||||
|
||||
.dark .select2-container--default.select2-container--disabled .select2-selection--single { background-color: rgba(255,255,255,0.1); }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================================
|
||||
radio-checkbox.css
|
||||
======================================================================== */
|
||||
|
||||
.dark .checkbox-style-1-label:before,
|
||||
.dark .radio-style-1-label:before,
|
||||
.dark .checkbox-style-2-label:before,
|
||||
.dark .radio-style-2-label:before,
|
||||
.dark .checkbox-style-3-label:before,
|
||||
.dark .radio-style-3-label:before {
|
||||
background: #333;
|
||||
border-color: #444;
|
||||
}
|
||||
|
||||
.dark .radio-style:checked + .radio-style-1-label:before { background: #CCC; }
|
||||
|
||||
/* Checkbox-small + Radio-small */
|
||||
.dark .checkbox-style-1-label.checkbox-small:before,
|
||||
.dark .radio-style-1-label.radio-small:before,
|
||||
.dark .checkbox-style-2-label.checkbox-small:before,
|
||||
.dark .radio-style-2-label.radio-small:before,
|
||||
.dark .checkbox-style-3-label.checkbox-small:before,
|
||||
.dark .radio-style-3-label.radio-small:before { border-color: #444; }
|
||||
|
||||
/* Style-2 */
|
||||
.dark .checkbox-style:checked + .checkbox-style-2-label:before { box-shadow: inset 0px 0px 0px 4px #000; }
|
||||
|
||||
.dark .radio-style:checked + .radio-style-2-label:before {
|
||||
background: #CCC;
|
||||
box-shadow: inset 0px 0px 0px 4px #333;
|
||||
}
|
||||
|
||||
.dark .checkbox-style:checked + .checkbox-style-2-label.checkbox-small:before { box-shadow: inset 0px 0px 0px 2px #000; }
|
||||
.dark .radio-style:checked + .radio-style-2-label.radio-small:before { box-shadow: inset 0px 0px 0px 2px #000; }
|
||||
|
||||
/* style-3 */
|
||||
.dark .checkbox-style:checked + .checkbox-style-3-label:before,
|
||||
.dark .radio-style:checked + .radio-style-3-label:before { color: #222; }
|
||||
.dark .radio-style:checked + .radio-style-3-label:before {
|
||||
color: #CCC;
|
||||
border-color: #CCC;
|
||||
}
|
||||
|
||||
/* style-3 - Small */
|
||||
.dark .checkbox-style + .checkbox-style-3-label.checkbox-small:before,
|
||||
.dark .radio-style + .radio-style-3-label.radio-small:before { border-color: #555; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================================
|
||||
ion.rangeslider.css
|
||||
======================================================================== */
|
||||
.dark .irs-bar-edge,
|
||||
.dark .irs-line-mid,
|
||||
.dark .irs-line-left,
|
||||
.dark .irs-line-right { background-color: #444; }
|
||||
|
||||
|
||||
|
||||
|
||||
/*========================================================================
|
||||
daterangepicker.css
|
||||
======================================================================== */
|
||||
.dark .daterangepicker { background: #222; }
|
||||
|
||||
.dark .daterangepicker.opensleft:before {
|
||||
border-bottom-color: #444;
|
||||
border-bottom-color: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.dark .daterangepicker.opensleft:after {
|
||||
border-bottom-color: #555;
|
||||
border-left-color: transparent;
|
||||
}
|
||||
|
||||
.dark .daterangepicker.openscenter:before {
|
||||
border-bottom-color: #444;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.dark .daterangepicker.openscenter:after {
|
||||
border-bottom-color: #222;
|
||||
border-left-color: transparent;
|
||||
}
|
||||
|
||||
.dark .daterangepicker.opensright:before {
|
||||
border-bottom-color: #444;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.dark .daterangepicker.opensright:after {
|
||||
border-bottom-color: #222;
|
||||
border-left-color: transparent;
|
||||
}
|
||||
|
||||
.dark .daterangepicker.dropup:before{ border-top-color: #444; }
|
||||
|
||||
.dark .daterangepicker.dropup:after{ border-top-color: #222; }
|
||||
|
||||
.dark .daterangepicker .calendar-table {
|
||||
border-color: #444;
|
||||
background: #222;
|
||||
}
|
||||
|
||||
.dark .daterangepicker td.off, .dark .daterangepicker td.off.in-range, .dark .daterangepicker td.off.start-date, .dark .daterangepicker td.off.end-date {
|
||||
color: #999;
|
||||
background: #222;
|
||||
}
|
||||
|
||||
.dark .daterangepicker td.disabled, .dark .daterangepicker option.disabled { color: #999; }
|
||||
|
||||
.dark .daterangepicker td.available:hover, .dark .daterangepicker th.available:hover { background: #555; }
|
||||
|
||||
.dark .daterangepicker td.in-range {
|
||||
background: #444;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.dark .daterangepicker td.active, .dark .daterangepicker td.active:hover {
|
||||
background-color: #357ebd;
|
||||
border-color: #3071a9;
|
||||
color: #EEE;
|
||||
}
|
||||
|
||||
.dark .daterangepicker td.week, .dark .daterangepicker th.week { color: #444; }
|
||||
|
||||
.dark .reportrange { border-color: #444 !important; }
|
||||
|
||||
/* Text Input Above Each Calendar */
|
||||
.dark .daterangepicker .input-mini {
|
||||
border-color: #444;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.dark .daterangepicker .input-mini.active { border-color: #357ebd; }
|
||||
|
||||
.dark .daterangepicker .calendar-time select.disabled { color: #444; }
|
||||
|
||||
.daterangepicker .daterangepicker_input i { color: #333; }
|
||||
|
||||
/* Predefined Ranges */
|
||||
.dark .daterangepicker .ranges li {
|
||||
background: #333;
|
||||
border-color: #333;
|
||||
color: #EEE;
|
||||
}
|
||||
|
||||
.dark .daterangepicker .ranges li.active, .dark .daterangepicker .ranges li:hover {
|
||||
background: #08c;
|
||||
border-color: #08c;
|
||||
color: #EEE;
|
||||
}
|
||||
|
||||
.dark .input-daterange .input-group-addon {
|
||||
background-color: #222;
|
||||
border-color: #111;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================================
|
||||
* bs-switches.css
|
||||
* ====================================================================== */
|
||||
|
||||
.dark .bootstrap-switch { border-color: #444; }
|
||||
|
||||
.dark .bootstrap-switch .bootstrap-switch-label {
|
||||
color: #EEE;
|
||||
background: #222;
|
||||
}
|
||||
|
||||
.dark .bootstrap-switch-label:after {
|
||||
border-top-color: #444;
|
||||
border-bottom-color: #444;
|
||||
}
|
||||
|
||||
/* Switches
|
||||
-------------------------------------------------------------- */
|
||||
.dark input.switch-toggle-round + label { background-color: #444; }
|
||||
|
||||
.dark input.switch-toggle-round + label:before,
|
||||
.dark input.switch-toggle-flat + label:before { background-color: #222; }
|
||||
|
||||
.dark input.switch-toggle-flat + label,
|
||||
.dark input.switch-toggle-flat + label:after { background-color: #AAA; }
|
||||
|
||||
.dark input.switch-toggle-round + label:after {
|
||||
background-color: #AAA;
|
||||
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.8);
|
||||
-moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.8);
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
|
|
@ -0,0 +1,410 @@
|
|||
.daterangepicker {
|
||||
position: absolute;
|
||||
color: inherit;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #ddd;
|
||||
width: 278px;
|
||||
max-width: none;
|
||||
padding: 0;
|
||||
margin-top: 7px;
|
||||
top: 100px;
|
||||
left: 20px;
|
||||
z-index: 3001;
|
||||
display: none;
|
||||
font-family: arial;
|
||||
font-size: 15px;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
.daterangepicker:before, .daterangepicker:after {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
content: '';
|
||||
}
|
||||
|
||||
.daterangepicker:before {
|
||||
top: -7px;
|
||||
border-right: 7px solid transparent;
|
||||
border-left: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
}
|
||||
|
||||
.daterangepicker:after {
|
||||
top: -6px;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #fff;
|
||||
border-left: 6px solid transparent;
|
||||
}
|
||||
|
||||
.daterangepicker.opensleft:before {
|
||||
right: 9px;
|
||||
}
|
||||
|
||||
.daterangepicker.opensleft:after {
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.daterangepicker.openscenter:before {
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: 0;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.daterangepicker.openscenter:after {
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: 0;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.daterangepicker.opensright:before {
|
||||
left: 9px;
|
||||
}
|
||||
|
||||
.daterangepicker.opensright:after {
|
||||
left: 10px;
|
||||
}
|
||||
|
||||
.daterangepicker.drop-up {
|
||||
margin-top: -7px;
|
||||
}
|
||||
|
||||
.daterangepicker.drop-up:before {
|
||||
top: initial;
|
||||
bottom: -7px;
|
||||
border-bottom: initial;
|
||||
border-top: 7px solid #ccc;
|
||||
}
|
||||
|
||||
.daterangepicker.drop-up:after {
|
||||
top: initial;
|
||||
bottom: -6px;
|
||||
border-bottom: initial;
|
||||
border-top: 6px solid #fff;
|
||||
}
|
||||
|
||||
.daterangepicker.single .daterangepicker .ranges, .daterangepicker.single .drp-calendar {
|
||||
float: none;
|
||||
}
|
||||
|
||||
.daterangepicker.single .drp-selected {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.daterangepicker.show-calendar .drp-calendar {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.daterangepicker.show-calendar .drp-buttons {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.daterangepicker.auto-apply .drp-buttons {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar {
|
||||
display: none;
|
||||
max-width: 270px;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.left {
|
||||
padding: 8px 0 8px 8px;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.right {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.single .calendar-table {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-table .next span, .daterangepicker .calendar-table .prev span {
|
||||
color: #fff;
|
||||
border: solid black;
|
||||
border-width: 0 2px 2px 0;
|
||||
border-radius: 0;
|
||||
display: inline-block;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-table .next span {
|
||||
transform: rotate(-45deg);
|
||||
-webkit-transform: rotate(-45deg);
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-table .prev span {
|
||||
transform: rotate(135deg);
|
||||
-webkit-transform: rotate(135deg);
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-table th, .daterangepicker .calendar-table td {
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
min-width: 32px;
|
||||
width: 32px;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
font-size: 12px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid transparent;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-table {
|
||||
border: 1px solid #fff;
|
||||
border-radius: 4px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-table table {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.daterangepicker td.available:hover, .daterangepicker th.available:hover {
|
||||
background-color: #eee;
|
||||
border-color: transparent;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.daterangepicker td.week, .daterangepicker th.week {
|
||||
font-size: 80%;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {
|
||||
background-color: #fff;
|
||||
border-color: transparent;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.daterangepicker td.in-range {
|
||||
background-color: #ebf4f8;
|
||||
border-color: transparent;
|
||||
color: #000;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.daterangepicker td.start-date {
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
|
||||
.daterangepicker td.end-date {
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
|
||||
.daterangepicker td.start-date.end-date {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.daterangepicker td.active, .daterangepicker td.active:hover {
|
||||
background-color: #357ebd;
|
||||
border-color: transparent;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.daterangepicker th.month {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.daterangepicker td.disabled, .daterangepicker option.disabled {
|
||||
color: #999;
|
||||
cursor: not-allowed;
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
.daterangepicker select.monthselect, .daterangepicker select.yearselect {
|
||||
font-size: 12px;
|
||||
padding: 1px;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.daterangepicker select.monthselect {
|
||||
margin-right: 2%;
|
||||
width: 56%;
|
||||
}
|
||||
|
||||
.daterangepicker select.yearselect {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {
|
||||
width: 50px;
|
||||
margin: 0 auto;
|
||||
background: #eee;
|
||||
border: 1px solid #eee;
|
||||
padding: 2px;
|
||||
outline: 0;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-time {
|
||||
text-align: center;
|
||||
margin: 4px auto 0 auto;
|
||||
line-height: 30px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.daterangepicker .calendar-time select.disabled {
|
||||
color: #ccc;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-buttons {
|
||||
clear: both;
|
||||
text-align: right;
|
||||
padding: 8px;
|
||||
border-top: 1px solid #ddd;
|
||||
display: none;
|
||||
line-height: 12px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-selected {
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-buttons .btn {
|
||||
margin-left: 8px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.daterangepicker.show-ranges.single.rtl .drp-calendar.left {
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.daterangepicker.show-ranges.single.ltr .drp-calendar.left {
|
||||
border-left: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.daterangepicker.show-ranges.rtl .drp-calendar.right {
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.daterangepicker.show-ranges.ltr .drp-calendar.left {
|
||||
border-left: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges {
|
||||
float: none;
|
||||
text-align: left;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.daterangepicker.show-calendar .ranges {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges ul {
|
||||
list-style: none;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges li {
|
||||
font-size: 12px;
|
||||
padding: 8px 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges li:hover {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges li.active {
|
||||
background-color: #08c;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Larger Screen Styling */
|
||||
@media (min-width: 564px) {
|
||||
.daterangepicker {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges ul {
|
||||
width: 140px;
|
||||
}
|
||||
|
||||
.daterangepicker.single .ranges ul {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.daterangepicker.single .drp-calendar.left {
|
||||
clear: none;
|
||||
}
|
||||
|
||||
.daterangepicker.single .ranges, .daterangepicker.single .drp-calendar {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.daterangepicker {
|
||||
direction: ltr;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.left {
|
||||
clear: left;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.left .calendar-table {
|
||||
border-right: none;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.right {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.right .calendar-table {
|
||||
border-left: none;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.left .calendar-table {
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges, .daterangepicker .drp-calendar {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 730px) {
|
||||
.daterangepicker .ranges {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.daterangepicker .ranges {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.daterangepicker.rtl .ranges {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.daterangepicker .drp-calendar.left {
|
||||
clear: none !important;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,269 @@
|
|||
/* Ion.RangeSlider
|
||||
// css version 2.0.3
|
||||
// © 2013-2014 Denis Ineshin | IonDen.com
|
||||
// ===================================================================================================================*/
|
||||
|
||||
/* =====================================================================================================================
|
||||
// RangeSlider */
|
||||
|
||||
.irs {
|
||||
position: relative; display: block;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.irs-line {
|
||||
position: relative; display: block;
|
||||
overflow: hidden;
|
||||
outline: none !important;
|
||||
}
|
||||
.irs-line-left, .irs-line-mid, .irs-line-right {
|
||||
position: absolute; display: block;
|
||||
top: 0;
|
||||
}
|
||||
.irs-line-left {
|
||||
left: 0; width: 11%;
|
||||
}
|
||||
.irs-line-mid {
|
||||
left: 9%; width: 82%;
|
||||
}
|
||||
.irs-line-right {
|
||||
right: 0; width: 11%;
|
||||
}
|
||||
|
||||
.irs-bar {
|
||||
position: absolute; display: block;
|
||||
left: 0; width: 0;
|
||||
}
|
||||
.irs-bar-edge {
|
||||
position: absolute; display: block;
|
||||
top: 0; left: 0;
|
||||
}
|
||||
|
||||
.irs-shadow {
|
||||
position: absolute; display: none;
|
||||
left: 0; width: 0;
|
||||
}
|
||||
|
||||
.irs-slider {
|
||||
position: absolute; display: block;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
}
|
||||
.irs-slider.single {
|
||||
|
||||
}
|
||||
.irs-slider.from {
|
||||
|
||||
}
|
||||
.irs-slider.to {
|
||||
|
||||
}
|
||||
.irs-slider.type_last {
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.irs-min {
|
||||
position: absolute; display: block;
|
||||
left: 0;
|
||||
cursor: default;
|
||||
}
|
||||
.irs-max {
|
||||
position: absolute; display: block;
|
||||
right: 0;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.irs-from, .irs-to, .irs-single {
|
||||
position: absolute; display: block;
|
||||
top: 0; left: 0;
|
||||
cursor: default;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.irs-grid {
|
||||
position: absolute; display: none;
|
||||
bottom: 0; left: 0;
|
||||
width: 100%; height: 20px;
|
||||
}
|
||||
.irs-with-grid .irs-grid {
|
||||
display: block;
|
||||
}
|
||||
.irs-grid-pol {
|
||||
position: absolute;
|
||||
top: 0; left: 0;
|
||||
width: 1px; height: 8px;
|
||||
background: #000;
|
||||
}
|
||||
.irs-grid-pol.small {
|
||||
height: 4px;
|
||||
}
|
||||
.irs-grid-text {
|
||||
position: absolute;
|
||||
bottom: 0; left: 0;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
font-size: 9px; line-height: 9px;
|
||||
padding: 0 3px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.irs-disable-mask {
|
||||
position: absolute; display: block;
|
||||
top: 0; left: -1%;
|
||||
width: 102%; height: 100%;
|
||||
cursor: default;
|
||||
background: rgba(0,0,0,0.0);
|
||||
z-index: 2;
|
||||
}
|
||||
.lt-ie9 .irs-disable-mask {
|
||||
background: #000;
|
||||
filter: alpha(opacity=0);
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.irs-disabled {
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
|
||||
.irs-hidden-input {
|
||||
position: absolute !important;
|
||||
display: block !important;
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
width: 0 !important;
|
||||
height: 0 !important;
|
||||
font-size: 0 !important;
|
||||
line-height: 0 !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
outline: none !important;
|
||||
z-index: -9999 !important;
|
||||
background: none !important;
|
||||
border-style: solid !important;
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
|
||||
/* Ion.RangeSlider, Nice Skin
|
||||
// css version 2.0.3
|
||||
// © Denis Ineshin, 2014 https://github.com/IonDen
|
||||
// ===================================================================================================================*/
|
||||
|
||||
/* =====================================================================================================================
|
||||
// Skin details */
|
||||
|
||||
.irs-slider {
|
||||
background: url(rangeslider/sprite-skin-nice.png) repeat-x;
|
||||
}
|
||||
|
||||
.irs-bar-edge,
|
||||
.irs-line-mid,
|
||||
.irs-line-left,
|
||||
.irs-line-right {
|
||||
background-color: #EEE;
|
||||
border-radius: 100px;
|
||||
}
|
||||
|
||||
.irs {
|
||||
height: 40px;
|
||||
}
|
||||
.irs-with-grid {
|
||||
height: 60px;
|
||||
}
|
||||
.irs-line {
|
||||
height: 8px; top: 25px;
|
||||
}
|
||||
.irs-line-left {
|
||||
height: 8px;
|
||||
background-position: 0 -30px;
|
||||
}
|
||||
.irs-line-mid {
|
||||
height: 8px;
|
||||
background-position: 0 0;
|
||||
}
|
||||
.irs-line-right {
|
||||
height: 8px;
|
||||
background-position: 100% -30px;
|
||||
}
|
||||
|
||||
.irs-bar {
|
||||
height: 8px;
|
||||
top: 25px;
|
||||
background-color: #1ABC9C;
|
||||
background-color: var(--themecolor);
|
||||
border-radius: 100px
|
||||
}
|
||||
.irs-bar-edge {
|
||||
top: 25px;
|
||||
height: 8px;
|
||||
width: 11px;
|
||||
background-position: 0 -90px;
|
||||
}
|
||||
|
||||
.irs-shadow {
|
||||
height: 8px;
|
||||
top: 25px;
|
||||
background: rgba(0,0,0,0.9);
|
||||
opacity: 0.15;
|
||||
}
|
||||
.lt-ie9 .irs-shadow {
|
||||
filter: alpha(opacity=15);
|
||||
}
|
||||
|
||||
.irs-slider {
|
||||
width: 22px; height: 22px;
|
||||
top: 17px;
|
||||
background-position: 0 -120px;
|
||||
}
|
||||
|
||||
.irs-min, .irs-max {
|
||||
color: #999;
|
||||
font-size: 11px;
|
||||
line-height: 1.333;
|
||||
text-shadow: none;
|
||||
top: -8px;
|
||||
padding: 3px;
|
||||
background: rgba(0,0,0,0.05);
|
||||
-moz-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.irs-from, .irs-to, .irs-single {
|
||||
color: #FFF;
|
||||
top: -8px;
|
||||
font-size: 11px;
|
||||
line-height: 1.333;
|
||||
text-shadow: none;
|
||||
padding: 3px;
|
||||
background: #1ABC9C;
|
||||
background: var(--themecolor);
|
||||
-moz-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.irs-from:after, .irs-single:after, .irs-to:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
display: block;
|
||||
bottom: -6px;
|
||||
left: 50%;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-left: -3px;
|
||||
overflow: hidden;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #1ABC9C;
|
||||
border-top-color: var(--themecolor);
|
||||
}
|
||||
|
||||
.lt-ie9 .irs-from, .lt-ie9 .irs-to, .lt-ie9 .irs-single { background: #DDD; }
|
||||
|
||||
.irs-grid-pol { background: #AAA; }
|
||||
.irs-grid-text { color: #AAA }
|
||||
|
||||
.irs-disabled { }
|
|
@ -0,0 +1,691 @@
|
|||
@charset "UTF-8";
|
||||
/**
|
||||
Ion.RangeSlider, 2.3.1
|
||||
© Denis Ineshin, 2010 - 2019, IonDen.com
|
||||
Build date: 2019-12-19 16:51:02
|
||||
*/
|
||||
.irs {
|
||||
--cnvs-range-slider-top: 25px;
|
||||
--cnvs-range-slider-bottom: 16px;
|
||||
--cnvs-range-slider-line_height: 12px;
|
||||
--cnvs-range-slider-handle_width: 16px;
|
||||
--cnvs-range-slider-handle_height: 18px;
|
||||
--cnvs-range-slider-custom_radius: 4px;
|
||||
--cnvs-range-slider-line_color: var(--cnvs-contrast-200);
|
||||
--cnvs-range-slider-bar_color: var(--cnvs-themecolor);
|
||||
--cnvs-range-slider-handle_color_1: var(--cnvs-range-slider-bar_color);
|
||||
--cnvs-range-slider-handle_color_2: var(--cnvs-contrast-500);
|
||||
--cnvs-range-slider-minmax_text_color: var(--cnvs-contrast-600);
|
||||
--cnvs-range-slider-minmax_bg_color: var(--cnvs-range-slider-line_color);
|
||||
--cnvs-range-slider-label_color_1: var(--cnvs-range-slider-bar_color);
|
||||
--cnvs-range-slider-label_color_2: white;
|
||||
--cnvs-range-slider-grid_color_1: var(--cnvs-range-slider-line_color);
|
||||
--cnvs-range-slider-grid_color_2: var(--cnvs-range-slider-minmax_text_color);
|
||||
position: relative;
|
||||
display: block;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
font-size: 12px;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
.irs-line {
|
||||
position: relative;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
outline: none !important;
|
||||
}
|
||||
.irs-bar {
|
||||
position: absolute;
|
||||
display: block;
|
||||
left: 0;
|
||||
width: 0;
|
||||
}
|
||||
.irs-shadow {
|
||||
position: absolute;
|
||||
display: none;
|
||||
left: 0;
|
||||
width: 0;
|
||||
}
|
||||
.irs-handle {
|
||||
position: absolute;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
cursor: default;
|
||||
z-index: 1;
|
||||
}
|
||||
.irs-handle.type_last {
|
||||
z-index: 2;
|
||||
}
|
||||
.irs-min, .irs-max {
|
||||
position: absolute;
|
||||
display: block;
|
||||
cursor: default;
|
||||
}
|
||||
.irs-min {
|
||||
left: 0;
|
||||
}
|
||||
.irs-max {
|
||||
right: 0;
|
||||
}
|
||||
.irs-from, .irs-to, .irs-single {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: default;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.irs-grid {
|
||||
position: absolute;
|
||||
display: none;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
}
|
||||
.irs-with-grid .irs-grid {
|
||||
display: block;
|
||||
}
|
||||
.irs-grid-pol {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 1px;
|
||||
height: 8px;
|
||||
background: #000;
|
||||
}
|
||||
.irs-grid-pol.small {
|
||||
height: 4px;
|
||||
}
|
||||
.irs-grid-text {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
font-size: 9px;
|
||||
line-height: 9px;
|
||||
padding: 0 3px;
|
||||
color: #000;
|
||||
}
|
||||
.irs-disable-mask {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 0;
|
||||
left: -1%;
|
||||
width: 102%;
|
||||
height: 100%;
|
||||
cursor: default;
|
||||
background: rgba(0, 0, 0, 0);
|
||||
z-index: 2;
|
||||
}
|
||||
.lt-ie9 .irs-disable-mask {
|
||||
background: #000;
|
||||
filter: alpha(opacity=0);
|
||||
cursor: not-allowed;
|
||||
}
|
||||
.irs-disabled {
|
||||
opacity: 0.4;
|
||||
}
|
||||
.irs-hidden-input {
|
||||
position: absolute !important;
|
||||
display: block !important;
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
width: 0 !important;
|
||||
height: 0 !important;
|
||||
font-size: 0 !important;
|
||||
line-height: 0 !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
overflow: hidden;
|
||||
outline: none !important;
|
||||
z-index: -9999 !important;
|
||||
background: none !important;
|
||||
border-style: solid !important;
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
.irs--flat {
|
||||
height: 40px;
|
||||
}
|
||||
.irs--flat.irs-with-grid {
|
||||
height: 60px;
|
||||
}
|
||||
.irs--flat .irs-line {
|
||||
top: var(--cnvs-range-slider-top);
|
||||
height: var(--cnvs-range-slider-line_height);
|
||||
background-color: var(--cnvs-range-slider-line_color);
|
||||
border-radius: var(--cnvs-range-slider-custom_radius);
|
||||
}
|
||||
.irs--flat .irs-bar {
|
||||
top: var(--cnvs-range-slider-top);
|
||||
height: var(--cnvs-range-slider-line_height);
|
||||
background-color: var(--cnvs-range-slider-bar_color);
|
||||
}
|
||||
.irs--flat .irs-bar--single {
|
||||
border-radius: var(--cnvs-range-slider-custom_radius) 0 0 var(--cnvs-range-slider-custom_radius);
|
||||
}
|
||||
.irs--flat .irs-shadow {
|
||||
height: 1px;
|
||||
bottom: var(--cnvs-range-slider-bottom);
|
||||
background-color: var(--cnvs-range-slider-line_color);
|
||||
}
|
||||
.irs--flat .irs-handle {
|
||||
top: 22px;
|
||||
width: var(--cnvs-range-slider-handle_width);
|
||||
height: var(--cnvs-range-slider-handle_height);
|
||||
background-color: transparent;
|
||||
}
|
||||
.irs--flat .irs-handle > i:first-child {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
width: 2px;
|
||||
height: 100%;
|
||||
margin-left: -1px;
|
||||
background-color: var(--cnvs-range-slider-handle_color_1);
|
||||
}
|
||||
.irs--flat .irs-handle.state_hover > i:first-child, .irs--flat .irs-handle:hover > i:first-child {
|
||||
background-color: var(--cnvs-range-slider-handle_color_2);
|
||||
}
|
||||
.irs--flat .irs-min,
|
||||
.irs--flat .irs-max {
|
||||
top: 0;
|
||||
padding: 1px 3px;
|
||||
color: var(--cnvs-range-slider-minmax_text_color);
|
||||
font-size: 10px;
|
||||
line-height: 1.333;
|
||||
text-shadow: none;
|
||||
background-color: var(--cnvs-range-slider-minmax_bg_color);
|
||||
border-radius: var(--cnvs-range-slider-custom_radius);
|
||||
}
|
||||
.irs--flat .irs-from,
|
||||
.irs--flat .irs-to,
|
||||
.irs--flat .irs-single {
|
||||
color: var(--cnvs-range-slider-label_color_2);
|
||||
font-size: 10px;
|
||||
line-height: 1.333;
|
||||
text-shadow: none;
|
||||
padding: 1px 5px;
|
||||
background-color: var(--cnvs-range-slider-label_color_1);
|
||||
border-radius: var(--cnvs-range-slider-custom_radius);
|
||||
}
|
||||
.irs--flat .irs-from:before,
|
||||
.irs--flat .irs-to:before,
|
||||
.irs--flat .irs-single:before {
|
||||
position: absolute;
|
||||
display: block;
|
||||
content: "";
|
||||
bottom: -6px;
|
||||
left: 50%;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-left: -3px;
|
||||
overflow: hidden;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: var(--cnvs-range-slider-label_color_1);
|
||||
}
|
||||
.irs--flat .irs-grid-pol {
|
||||
background-color: var(--cnvs-range-slider-grid_color_1);
|
||||
}
|
||||
.irs--flat .irs-grid-text {
|
||||
color: var(--cnvs-range-slider-grid_color_2);
|
||||
}
|
||||
.irs--big {
|
||||
height: 55px;
|
||||
}
|
||||
.irs--big.irs-with-grid {
|
||||
height: 70px;
|
||||
}
|
||||
.irs--big .irs-line {
|
||||
top: 33px;
|
||||
height: 12px;
|
||||
background-color: white;
|
||||
background: linear-gradient(to bottom, #ddd -50%, white 150%);
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 12px;
|
||||
}
|
||||
.irs--big .irs-bar {
|
||||
top: 33px;
|
||||
height: 12px;
|
||||
background-color: #92bce0;
|
||||
border: 1px solid #428bca;
|
||||
background: linear-gradient(to bottom, #ffffff 0%, #428bca 30%, #b9d4ec 100%);
|
||||
box-shadow: inset 0 0 1px 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
.irs--big .irs-bar--single {
|
||||
border-radius: 12px 0 0 12px;
|
||||
}
|
||||
.irs--big .irs-shadow {
|
||||
height: 1px;
|
||||
bottom: 16px;
|
||||
background-color: rgba(66, 139, 202, 0.5);
|
||||
}
|
||||
.irs--big .irs-handle {
|
||||
top: 25px;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border: 1px solid rgba(0, 0, 0, 0.3);
|
||||
background-color: #cbcfd5;
|
||||
background: linear-gradient(to bottom, white 0%, #B4B9BE 30%, white 100%);
|
||||
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2), inset 0 0 3px 1px white;
|
||||
border-radius: 30px;
|
||||
}
|
||||
.irs--big .irs-handle.state_hover,
|
||||
.irs--big .irs-handle:hover {
|
||||
border-color: rgba(0, 0, 0, 0.45);
|
||||
background-color: #939ba7;
|
||||
background: linear-gradient(to bottom, white 0%, #919BA5 30%, white 100%);
|
||||
}
|
||||
.irs--big .irs-min,
|
||||
.irs--big .irs-max {
|
||||
top: 0;
|
||||
padding: 1px 5px;
|
||||
color: white;
|
||||
text-shadow: none;
|
||||
background-color: #9f9f9f;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.irs--big .irs-from,
|
||||
.irs--big .irs-to,
|
||||
.irs--big .irs-single {
|
||||
color: white;
|
||||
text-shadow: none;
|
||||
padding: 1px 5px;
|
||||
background-color: #428bca;
|
||||
background: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
|
||||
border-radius: 3px;
|
||||
}
|
||||
.irs--big .irs-grid-pol {
|
||||
background-color: #428bca;
|
||||
}
|
||||
.irs--big .irs-grid-text {
|
||||
color: #428bca;
|
||||
}
|
||||
.irs--modern {
|
||||
height: 55px;
|
||||
}
|
||||
.irs--modern.irs-with-grid {
|
||||
height: 55px;
|
||||
}
|
||||
.irs--modern .irs-line {
|
||||
top: 25px;
|
||||
height: 5px;
|
||||
background-color: #d1d6e0;
|
||||
background: linear-gradient(to bottom, #e0e4ea 0%, #d1d6e0 100%);
|
||||
border: 1px solid #a3adc1;
|
||||
border-bottom-width: 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.irs--modern .irs-bar {
|
||||
top: 25px;
|
||||
height: 5px;
|
||||
background: #20b426;
|
||||
background: linear-gradient(to bottom, #20b426 0%, #18891d 100%);
|
||||
}
|
||||
.irs--modern .irs-bar--single {
|
||||
border-radius: 5px 0 0 5px;
|
||||
}
|
||||
.irs--modern .irs-shadow {
|
||||
height: 1px;
|
||||
bottom: 21px;
|
||||
background-color: rgba(209, 214, 224, 0.5);
|
||||
}
|
||||
.irs--modern .irs-handle {
|
||||
top: 37px;
|
||||
width: 12px;
|
||||
height: 13px;
|
||||
border: 1px solid #a3adc1;
|
||||
border-top-width: 0;
|
||||
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 0 0 3px 3px;
|
||||
}
|
||||
.irs--modern .irs-handle > i:nth-child(1) {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: -4px;
|
||||
left: 1px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
border: 1px solid #a3adc1;
|
||||
background: white;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.irs--modern .irs-handle > i:nth-child(2) {
|
||||
position: absolute;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 10px;
|
||||
height: 12px;
|
||||
background: #e9e6e6;
|
||||
background: linear-gradient(to bottom, white 0%, #e9e6e6 100%);
|
||||
border-radius: 0 0 3px 3px;
|
||||
}
|
||||
.irs--modern .irs-handle > i:nth-child(3) {
|
||||
position: absolute;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
top: 3px;
|
||||
left: 3px;
|
||||
width: 4px;
|
||||
height: 5px;
|
||||
border-left: 1px solid #a3adc1;
|
||||
border-right: 1px solid #a3adc1;
|
||||
}
|
||||
.irs--modern .irs-handle.state_hover,
|
||||
.irs--modern .irs-handle:hover {
|
||||
border-color: #7685a2;
|
||||
background: #c3c7cd;
|
||||
background: linear-gradient(to bottom, #ffffff 0%, #919ba5 30%, #ffffff 100%);
|
||||
}
|
||||
.irs--modern .irs-handle.state_hover > i:nth-child(1),
|
||||
.irs--modern .irs-handle:hover > i:nth-child(1) {
|
||||
border-color: #7685a2;
|
||||
}
|
||||
.irs--modern .irs-handle.state_hover > i:nth-child(3),
|
||||
.irs--modern .irs-handle:hover > i:nth-child(3) {
|
||||
border-color: #48536a;
|
||||
}
|
||||
.irs--modern .irs-min,
|
||||
.irs--modern .irs-max {
|
||||
top: 0;
|
||||
font-size: 10px;
|
||||
line-height: 1.333;
|
||||
text-shadow: none;
|
||||
padding: 1px 5px;
|
||||
color: white;
|
||||
background-color: #d1d6e0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.irs--modern .irs-from,
|
||||
.irs--modern .irs-to,
|
||||
.irs--modern .irs-single {
|
||||
font-size: 10px;
|
||||
line-height: 1.333;
|
||||
text-shadow: none;
|
||||
padding: 1px 5px;
|
||||
background-color: #20b426;
|
||||
color: white;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.irs--modern .irs-from:before,
|
||||
.irs--modern .irs-to:before,
|
||||
.irs--modern .irs-single:before {
|
||||
position: absolute;
|
||||
display: block;
|
||||
content: "";
|
||||
bottom: -6px;
|
||||
left: 50%;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-left: -3px;
|
||||
overflow: hidden;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #20b426;
|
||||
}
|
||||
.irs--modern .irs-grid {
|
||||
height: 25px;
|
||||
}
|
||||
.irs--modern .irs-grid-pol {
|
||||
background-color: #dedede;
|
||||
}
|
||||
.irs--modern .irs-grid-text {
|
||||
color: silver;
|
||||
font-size: 13px;
|
||||
}
|
||||
.irs--sharp {
|
||||
height: 50px;
|
||||
font-size: 12px;
|
||||
line-height: 1;
|
||||
}
|
||||
.irs--sharp.irs-with-grid {
|
||||
height: 57px;
|
||||
}
|
||||
.irs--sharp .irs-line {
|
||||
top: 30px;
|
||||
height: 2px;
|
||||
background-color: black;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.irs--sharp .irs-bar {
|
||||
top: 30px;
|
||||
height: 2px;
|
||||
background-color: #ee22fa;
|
||||
}
|
||||
.irs--sharp .irs-bar--single {
|
||||
border-radius: 2px 0 0 2px;
|
||||
}
|
||||
.irs--sharp .irs-shadow {
|
||||
height: 1px;
|
||||
bottom: 21px;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.irs--sharp .irs-handle {
|
||||
top: 25px;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
background-color: #a804b2;
|
||||
}
|
||||
.irs--sharp .irs-handle > i:first-child {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border: 5px solid transparent;
|
||||
border-top-color: #a804b2;
|
||||
}
|
||||
.irs--sharp .irs-handle.state_hover,
|
||||
.irs--sharp .irs-handle:hover {
|
||||
background-color: black;
|
||||
}
|
||||
.irs--sharp .irs-handle.state_hover > i:first-child,
|
||||
.irs--sharp .irs-handle:hover > i:first-child {
|
||||
border-top-color: black;
|
||||
}
|
||||
.irs--sharp .irs-min,
|
||||
.irs--sharp .irs-max {
|
||||
color: white;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
top: 0;
|
||||
padding: 3px 4px;
|
||||
opacity: 0.4;
|
||||
background-color: #a804b2;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.irs--sharp .irs-from,
|
||||
.irs--sharp .irs-to,
|
||||
.irs--sharp .irs-single {
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
text-shadow: none;
|
||||
padding: 3px 4px;
|
||||
background-color: #a804b2;
|
||||
color: white;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.irs--sharp .irs-from:before,
|
||||
.irs--sharp .irs-to:before,
|
||||
.irs--sharp .irs-single:before {
|
||||
position: absolute;
|
||||
display: block;
|
||||
content: "";
|
||||
bottom: -6px;
|
||||
left: 50%;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-left: -3px;
|
||||
overflow: hidden;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #a804b2;
|
||||
}
|
||||
.irs--sharp .irs-grid {
|
||||
height: 25px;
|
||||
}
|
||||
.irs--sharp .irs-grid-pol {
|
||||
background-color: #dedede;
|
||||
}
|
||||
.irs--sharp .irs-grid-text {
|
||||
color: silver;
|
||||
font-size: 13px;
|
||||
}
|
||||
.irs--round {
|
||||
height: 50px;
|
||||
}
|
||||
.irs--round.irs-with-grid {
|
||||
height: 65px;
|
||||
}
|
||||
.irs--round .irs-line {
|
||||
top: 36px;
|
||||
height: 4px;
|
||||
background-color: var(--cnvs-range-slider-bar_color);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.irs--round .irs-bar {
|
||||
top: 36px;
|
||||
height: 4px;
|
||||
background-color: var(--cnvs-range-slider-bar_color);
|
||||
}
|
||||
.irs--round .irs-bar--single {
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
.irs--round .irs-shadow {
|
||||
height: 4px;
|
||||
bottom: 21px;
|
||||
background-color: rgba(222, 228, 236, 0.5);
|
||||
}
|
||||
.irs--round .irs-handle {
|
||||
top: 26px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border: 4px solid var(--cnvs-range-slider-bar_color);
|
||||
background-color: white;
|
||||
border-radius: 24px;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 255, 0.3);
|
||||
}
|
||||
.irs--round .irs-handle.state_hover,
|
||||
.irs--round .irs-handle:hover {
|
||||
background-color: #f0f6ff;
|
||||
}
|
||||
.irs--round .irs-min,
|
||||
.irs--round .irs-max {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
top: 0;
|
||||
padding: 3px 5px;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.irs--round .irs-from,
|
||||
.irs--round .irs-to,
|
||||
.irs--round .irs-single {
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
text-shadow: none;
|
||||
padding: 3px 5px;
|
||||
background-color: var(--cnvs-range-slider-bar_color);
|
||||
color: white;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.irs--round .irs-from:before,
|
||||
.irs--round .irs-to:before,
|
||||
.irs--round .irs-single:before {
|
||||
position: absolute;
|
||||
display: block;
|
||||
content: "";
|
||||
bottom: -6px;
|
||||
left: 50%;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-left: -3px;
|
||||
overflow: hidden;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: var(--cnvs-range-slider-bar_color);
|
||||
}
|
||||
.irs--round .irs-grid {
|
||||
height: 25px;
|
||||
}
|
||||
.irs--round .irs-grid-pol {
|
||||
background-color: #dedede;
|
||||
}
|
||||
.irs--round .irs-grid-text {
|
||||
color: silver;
|
||||
font-size: 13px;
|
||||
}
|
||||
.irs--square {
|
||||
height: 50px;
|
||||
}
|
||||
.irs--square.irs-with-grid {
|
||||
height: 60px;
|
||||
}
|
||||
.irs--square .irs-line {
|
||||
top: 31px;
|
||||
height: 4px;
|
||||
background-color: #dedede;
|
||||
}
|
||||
.irs--square .irs-bar {
|
||||
top: 31px;
|
||||
height: 4px;
|
||||
background-color: black;
|
||||
}
|
||||
.irs--square .irs-shadow {
|
||||
height: 2px;
|
||||
bottom: 21px;
|
||||
background-color: #dedede;
|
||||
}
|
||||
.irs--square .irs-handle {
|
||||
top: 25px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border: 3px solid black;
|
||||
background-color: white;
|
||||
-webkit-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.irs--square .irs-handle.state_hover,
|
||||
.irs--square .irs-handle:hover {
|
||||
background-color: #f0f6ff;
|
||||
}
|
||||
.irs--square .irs-min,
|
||||
.irs--square .irs-max {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
top: 0;
|
||||
padding: 3px 5px;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.irs--square .irs-from,
|
||||
.irs--square .irs-to,
|
||||
.irs--square .irs-single {
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
text-shadow: none;
|
||||
padding: 3px 5px;
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
.irs--square .irs-grid {
|
||||
height: 25px;
|
||||
}
|
||||
.irs--square .irs-grid-pol {
|
||||
background-color: #dedede;
|
||||
}
|
||||
.irs--square .irs-grid-text {
|
||||
color: silver;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=ion.rangeslider.css.map */
|
|
@ -0,0 +1 @@
|
|||
code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}
|
|
@ -0,0 +1,99 @@
|
|||
/* Style-1 + Style-2 */
|
||||
.checkbox-style,
|
||||
.radio-style {
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.checkbox-style, .radio-style,
|
||||
.checkbox-style-1-label, .radio-style-1-label,
|
||||
.checkbox-style-2-label, .radio-style-2-label,
|
||||
.checkbox-style-3-label, .radio-style-3-label {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.checkbox-style-1-label, .radio-style-1-label,
|
||||
.checkbox-style-2-label, .radio-style-2-label,
|
||||
.checkbox-style-3-label, .radio-style-3-label { position: relative; }
|
||||
|
||||
.checkbox-style-1-label:before, .radio-style-1-label:before,
|
||||
.checkbox-style-2-label:before, .radio-style-2-label:before,
|
||||
.checkbox-style-3-label:before, .radio-style-3-label:before {
|
||||
content: '';
|
||||
background: #FFF;
|
||||
border: 2px solid #DDD;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
padding: 4px;
|
||||
margin-right: 10px;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.radio-style-1-label:before,
|
||||
.radio-style-2-label:before,
|
||||
.radio-style-3-label:before { border-radius: 50%; }
|
||||
|
||||
.checkbox-style:checked + .checkbox-style-1-label:before {
|
||||
background: #1ABC9C;
|
||||
background: var(--themecolor);
|
||||
}
|
||||
.radio-style:checked + .radio-style-1-label:before { background: #CCC; }
|
||||
|
||||
/* Checkbox-small + Radio-small */
|
||||
.checkbox-style-1-label.checkbox-small:before,
|
||||
.radio-style-1-label.radio-small:before,
|
||||
.checkbox-style-2-label.checkbox-small:before,
|
||||
.radio-style-2-label.radio-small:before,
|
||||
.checkbox-style-3-label.checkbox-small:before,
|
||||
.radio-style-3-label.radio-small:before {
|
||||
border: 2px solid #DDD;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 0 8px 1px 0;
|
||||
}
|
||||
|
||||
/* Style-2 */
|
||||
.checkbox-style:checked + .checkbox-style-2-label:before {
|
||||
background: #1ABC9C;
|
||||
background: var(--themecolor);
|
||||
box-shadow: inset 0px 0px 0px 4px #fff;
|
||||
}
|
||||
|
||||
.radio-style:checked + .radio-style-2-label:before {
|
||||
background: #ccc;
|
||||
box-shadow: inset 0px 0px 0px 4px #fff;
|
||||
}
|
||||
|
||||
.checkbox-style:checked + .checkbox-style-2-label.checkbox-small:before { box-shadow: inset 0px 0px 0px 2px #fff; }
|
||||
.radio-style:checked + .radio-style-2-label.radio-small:before { box-shadow: inset 0px 0px 0px 2px #fff; }
|
||||
|
||||
/* style-3 */
|
||||
.checkbox-style:checked + .checkbox-style-3-label:before,
|
||||
.radio-style:checked + .radio-style-3-label:before {
|
||||
content: "\e116";
|
||||
font-family: 'lined-icons';
|
||||
background: #1ABC9C;
|
||||
background: var(--themecolor);
|
||||
color: #FFF;
|
||||
}
|
||||
.radio-style:checked + .radio-style-3-label:before {
|
||||
color: #BBB;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* style-3 - Small */
|
||||
.checkbox-style + .checkbox-style-3-label.checkbox-small:before,
|
||||
.radio-style + .radio-style-3-label.radio-small:before {
|
||||
border: 1px solid #BBB;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 0 8px 1px 0;
|
||||
font-size: 7px;
|
||||
line-height: .8;
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
/* Style-1 + Style-2 */
|
||||
.checkbox-style,
|
||||
.radio-style {
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.checkbox-style, .radio-style,
|
||||
.checkbox-style-1-label, .radio-style-1-label,
|
||||
.checkbox-style-2-label, .radio-style-2-label,
|
||||
.checkbox-style-3-label, .radio-style-3-label {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.checkbox-style-1-label, .radio-style-1-label,
|
||||
.checkbox-style-2-label, .radio-style-2-label,
|
||||
.checkbox-style-3-label, .radio-style-3-label { position: relative; }
|
||||
|
||||
.checkbox-style-1-label:before, .radio-style-1-label:before,
|
||||
.checkbox-style-2-label:before, .radio-style-2-label:before,
|
||||
.checkbox-style-3-label:before, .radio-style-3-label:before {
|
||||
content: '';
|
||||
background: #FFF;
|
||||
border: 2px solid #DDD;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-right: 10px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.radio-style-1-label:before,
|
||||
.radio-style-2-label:before,
|
||||
.radio-style-3-label:before { border-radius: 50%; }
|
||||
|
||||
.checkbox-style:checked + .checkbox-style-1-label:before { background: var(--cnvs-themecolor); }
|
||||
.radio-style:checked + .radio-style-1-label:before { background: #CCC; }
|
||||
|
||||
/* Checkbox-small + Radio-small */
|
||||
.checkbox-style-1-label.checkbox-small:before,
|
||||
.radio-style-1-label.radio-small:before,
|
||||
.checkbox-style-2-label.checkbox-small:before,
|
||||
.radio-style-2-label.radio-small:before,
|
||||
.checkbox-style-3-label.checkbox-small:before,
|
||||
.radio-style-3-label.radio-small:before {
|
||||
border: 2px solid #DDD;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 0 8px 1px 0;
|
||||
}
|
||||
|
||||
/* Style-2 */
|
||||
.checkbox-style:checked + .checkbox-style-2-label:before {
|
||||
background: var(--cnvs-themecolor);
|
||||
box-shadow: inset 0px 0px 0px 4px #fff;
|
||||
}
|
||||
|
||||
.radio-style:checked + .radio-style-2-label:before {
|
||||
background: #ccc;
|
||||
box-shadow: inset 0px 0px 0px 4px #fff;
|
||||
}
|
||||
|
||||
.checkbox-style:checked + .checkbox-style-2-label.checkbox-small:before { box-shadow: inset 0px 0px 0px 2px #fff; }
|
||||
.radio-style:checked + .radio-style-2-label.radio-small:before { box-shadow: inset 0px 0px 0px 2px #fff; }
|
||||
|
||||
/* style-3 */
|
||||
.checkbox-style:checked + .checkbox-style-3-label:before,
|
||||
.radio-style:checked + .radio-style-3-label:before {
|
||||
content: "\F633";
|
||||
font-family: "bootstrap-icons";
|
||||
background: var(--cnvs-themecolor);
|
||||
color: #FFF;
|
||||
}
|
||||
.radio-style:checked + .radio-style-3-label:before {
|
||||
color: #BBB;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* style-3 - Small */
|
||||
.checkbox-style + .checkbox-style-3-label.checkbox-small:before,
|
||||
.radio-style + .radio-style-3-label.radio-small:before {
|
||||
border: 1px solid #BBB;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 0 8px 1px 0;
|
||||
font-size: 7px;
|
||||
line-height: .8;
|
||||
}
|
After Width: | Height: | Size: 694 B |
|
@ -0,0 +1,7 @@
|
|||
/* ----------------------------------------------------------------
|
||||
Custom CSS
|
||||
|
||||
Add all your Custom Styled CSS here for New Styles or
|
||||
Overwriting Default Theme Styles for Better Handling Updates
|
||||
-----------------------------------------------------------------*/
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
@import url("icons/font-awesome.css"); /* Ref: https://fontawesome.com/search?o=r&m=free */
|
||||
@import url("icons/bootstrap-icons.css"); /* Ref: https://icons.getbootstrap.com/#icons */
|
||||
@import url("icons/unicons.css"); /* Ref: https://iconscout.com/unicons/explore/line */
|
||||
|
||||
[class*="fa-"],
|
||||
[class*=" fa-"],
|
||||
[class*="bi-"],
|
||||
[class*=" bi-"],
|
||||
[class*="uil-"],
|
||||
[class*=" uil-"] {
|
||||
display: inline-block;
|
||||
line-height: inherit;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
[class*="fa-"]::before,
|
||||
[class*=" fa-"]::before,
|
||||
[class*="bi-"]::before,
|
||||
[class*=" bi-"]::before,
|
||||
[class*="uil-"]::before,
|
||||
[class*=" uil-"]::before {
|
||||
display: inline-flex;
|
||||
align-self: center;
|
||||
justify-self: center;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.icon-lg {
|
||||
font-size: 1.3333333333333333em;
|
||||
line-height: 0.75em;
|
||||
vertical-align: -15%;
|
||||
}
|
||||
.icon-2x {
|
||||
font-size: 2em;
|
||||
}
|
||||
.icon-3x {
|
||||
font-size: 3em;
|
||||
}
|
||||
.icon-4x {
|
||||
font-size: 4em;
|
||||
}
|
||||
.icon-5x {
|
||||
font-size: 5em;
|
||||
}
|
||||
.icon-fw {
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.icon-border {
|
||||
padding: 0.2em 0.25em 0.15em;
|
||||
border: solid 0.08em #eeeeee;
|
||||
border-radius: 0.1em;
|
||||
}
|
||||
.icon.pull-left {
|
||||
margin-right: 0.3em;
|
||||
}
|
||||
.icon.pull-right {
|
||||
margin-left: 0.3em;
|
||||
}
|
||||
.icon-spin {
|
||||
-webkit-animation: spin 2s infinite linear;
|
||||
-moz-animation: spin 2s infinite linear;
|
||||
-o-animation: spin 2s infinite linear;
|
||||
animation: spin 2s infinite linear;
|
||||
}
|
||||
@-moz-keyframes spin {
|
||||
0% {
|
||||
-moz-transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-moz-transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@-o-keyframes spin {
|
||||
0% {
|
||||
-o-transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-o-transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@-ms-keyframes spin {
|
||||
0% {
|
||||
-ms-transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-ms-transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@keyframes spin {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
.icon-rotate-90 {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
|
||||
-webkit-transform: rotate(90deg);
|
||||
-moz-transform: rotate(90deg);
|
||||
-ms-transform: rotate(90deg);
|
||||
-o-transform: rotate(90deg);
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
.icon-rotate-180 {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
|
||||
-webkit-transform: rotate(180deg);
|
||||
-moz-transform: rotate(180deg);
|
||||
-ms-transform: rotate(180deg);
|
||||
-o-transform: rotate(180deg);
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
.icon-rotate-270 {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
|
||||
-webkit-transform: rotate(270deg);
|
||||
-moz-transform: rotate(270deg);
|
||||
-ms-transform: rotate(270deg);
|
||||
-o-transform: rotate(270deg);
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
.icon-flip-horizontal {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
|
||||
-webkit-transform: scale(-1, 1);
|
||||
-moz-transform: scale(-1, 1);
|
||||
-ms-transform: scale(-1, 1);
|
||||
-o-transform: scale(-1, 1);
|
||||
transform: scale(-1, 1);
|
||||
}
|
||||
.icon-flip-vertical {
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
|
||||
-webkit-transform: scale(1, -1);
|
||||
-moz-transform: scale(1, -1);
|
||||
-ms-transform: scale(1, -1);
|
||||
-o-transform: scale(1, -1);
|
||||
transform: scale(1, -1);
|
||||
}
|
||||
.icon-stacked {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
line-height: 2em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.icon-stacked-1x,
|
||||
.icon-stacked-2x {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
.rtl .icon-stacked-1x,
|
||||
.rtl .icon-stacked-2x {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
.icon-stacked-1x {
|
||||
line-height: inherit;
|
||||
}
|
||||
.icon-stacked-2x {
|
||||
font-size: 2em;
|
||||
}
|
||||
.icon-inverse {
|
||||
color: #ffffff;
|
||||
}
|