add version 0.1.3.3
complete create activity after shiftplan ( ready for test ) , add roles and permission in get profile usermaster
parent
79ab136ac3
commit
8a32e23e03
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"ConnectionStrings": {
|
||||
"Postgres": "Host=pg-0;port=5432;Username=postgres;Password=ub0J7sFFThkSBmkc0TzSKsCfheRnQpyu;Database=brizcodb"
|
||||
"Postgres": "Host=pg-0;port=5432;Username=postgres;Password=ub0J7sFFThkSBmkc0TzSKsCfheRnQpyu;Database=BrizcoDB"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
}
|
||||
},
|
||||
"SiteSettings": {
|
||||
"BaseUrl": "http://192.168.88.12:32769",
|
||||
"BaseUrl": "http://localhost:32769",
|
||||
"KaveNegarApiKey": "3735494B4143727A794346457461576A2B4B6668414973424E333561505A694B",
|
||||
"UserSetting": {
|
||||
"Username": "root",
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
<DockerComposeProjectPath>..\docker-compose.dcproj</DockerComposeProjectPath>
|
||||
<AssemblyVersion>0.1.3.2</AssemblyVersion>
|
||||
<FileVersion>0.1.3.2</FileVersion>
|
||||
<AssemblyVersion>0.1.3.3</AssemblyVersion>
|
||||
<FileVersion>0.1.3.3</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
namespace Brizco.Api.Controllers;
|
||||
|
||||
public class ActivityController : ICarterModule
|
||||
{
|
||||
public void AddRoutes(IEndpointRouteBuilder app)
|
||||
{
|
||||
|
||||
var group = app.NewVersionedApi("Activity")
|
||||
.MapGroup($"api/activity")
|
||||
.RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser());
|
||||
|
||||
group.MapGet("", GetAllAsync)
|
||||
.WithDisplayName("GetActivities")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapGet("{id:guid}", GetAsync)
|
||||
.WithDisplayName("GetActivity")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
//group.MapPost("", Post)
|
||||
// .AllowAnonymous()
|
||||
// .HasApiVersion(1.0);
|
||||
|
||||
//group.MapPut("", Put)
|
||||
// .HasApiVersion(1.0);
|
||||
|
||||
//group.MapDelete("{id:guid}", Delete)
|
||||
// .HasApiVersion(1.0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// GET:Get All Entity
|
||||
public async Task<IResult> GetAllAsync([FromQuery] int page, ISender sender, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await sender.Send(new GetActivitiesQuery(page), cancellationToken));
|
||||
|
||||
// GET:Get An Entity By Id
|
||||
public async Task<IResult> GetAsync(Guid id, ISender sender, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await sender.Send(new GetActivityQuery(id), cancellationToken));
|
||||
|
||||
//// POST:Create Entity
|
||||
//public async Task<IResult> Post([FromQuery]Guid shiftPlanId,IActivityService activityService, CancellationToken cancellationToken)
|
||||
// => TypedResults.Ok(await activityService.CreateActivitiesByShiftPlan(shiftPlanId,cancellationToken));
|
||||
|
||||
//// PUT:Update Entity
|
||||
//public async Task<IResult> Put([FromBody] UpdateActivityCommand ent, ISender mediator, CancellationToken cancellationToken)
|
||||
// => TypedResults.Ok(await mediator.Send(ent, cancellationToken));
|
||||
|
||||
//// DELETE:Delete Entity
|
||||
//public async Task<IResult> Delete(Guid id, ISender mediator, CancellationToken cancellationToken)
|
||||
// => TypedResults.Ok(await mediator.Send(new DeleteActivityCommand(id), cancellationToken));
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
using Brizco.Api.Views.Home;
|
||||
|
||||
namespace Brizco.Api.Controllers;
|
||||
|
||||
[Route("")]
|
||||
[AllowAnonymous]
|
||||
public class HomeController : Controller
|
||||
{
|
||||
[HttpGet]
|
||||
public IActionResult Index()
|
||||
{
|
||||
return View("Index", new IndexModel());
|
||||
}
|
||||
}
|
|
@ -28,6 +28,7 @@ public class ShiftPlanController : ICarterModule
|
|||
|
||||
}
|
||||
|
||||
|
||||
// GET:Get All Entity
|
||||
public async Task<IResult> GetAllAsync([FromQuery] int page, ISender sender, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await sender.Send(new GetShiftPlansQuery(page), cancellationToken));
|
||||
|
@ -37,8 +38,8 @@ public class ShiftPlanController : ICarterModule
|
|||
=> TypedResults.Ok(await sender.Send(new GetShiftPlanQuery(id),cancellationToken));
|
||||
|
||||
// POST:Create Entity
|
||||
public async Task<IResult> Post([FromBody] CreateShiftPlanCommand ent, ISender mediator, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await mediator.Send(ent, cancellationToken));
|
||||
public async Task<IResult> Post([FromBody] CreateShiftPlanCommand ent, IShiftPlanService shiftPlanService, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await shiftPlanService.CreateAsync(ent, cancellationToken));
|
||||
|
||||
// PUT:Update Entity
|
||||
public async Task<IResult> Put([FromBody] UpdateShiftPlanCommand ent, ISender mediator, CancellationToken cancellationToken)
|
||||
|
|
|
@ -23,10 +23,6 @@ public class UserController : ICarterModule
|
|||
.WithDisplayName("GetUserProfile")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapGet("/profile/role", GetUserProfileAsync)
|
||||
.WithDisplayName("GetUserProfileRoles")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapPost("", Post)
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ builder.Services.AddValidatorsFromAssembly(typeof(RepositoryConfig).Assembly, in
|
|||
builder.Services.AddCustomMvc();
|
||||
builder.Services.AddCustomAuthorization();
|
||||
builder.Services.AddJwtCustomAuthentication(siteSetting.JwtSettings);
|
||||
builder.Services.AddMvcCore().AddRazorPages().AddRazorViewEngine().AddViews();
|
||||
builder.Services.AddCustomIdentity();
|
||||
builder.Services.AddCustomDbContext(configuration);
|
||||
builder.Services.AddCarter();
|
||||
|
@ -96,10 +97,11 @@ var app = builder.Build();
|
|||
// Configure the HTTP request pipeline.
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseCustomSwagger(siteSetting.BaseUrl);
|
||||
//app.UseCustomSwagger(siteSetting.BaseUrl);
|
||||
//app.UseSwagger();
|
||||
//app.UseSwaggerUI();
|
||||
}
|
||||
app.UseCustomSwagger(siteSetting.BaseUrl);
|
||||
|
||||
app.UseAuthorization();
|
||||
app.UseAuthentication();
|
||||
|
|
|
@ -0,0 +1,275 @@
|
|||
@model Brizco.Api.Views.Home.IndexModel
|
||||
@{
|
||||
}
|
||||
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||
|
||||
<title>iGarson API</title>
|
||||
<meta content="" name="description">
|
||||
<meta content="" name="keywords">
|
||||
|
||||
<!-- Favicons -->
|
||||
<link href="assets/img/favicon.png" rel="icon">
|
||||
<link href="assets/img/apple-touch-icon.png" rel="apple-touch-icon">
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Jost:300,300i,400,400i,500,500i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
|
||||
<link rel="preconnect" href="//fdn.fontcdn.ir">
|
||||
<link rel="preconnect" href="//v1.fontapi.ir">
|
||||
<link href="https://v1.fontapi.ir/css/Shabnam" rel="stylesheet">
|
||||
<!-- Vendor CSS Files -->
|
||||
|
||||
<link href="assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
|
||||
<link href="assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Template Main CSS File -->
|
||||
<link href="assets/css/style.css" rel="stylesheet">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- ======= Header ======= -->
|
||||
<header id="header" class="fixed-top ">
|
||||
<div class="container d-flex align-items-center">
|
||||
|
||||
<h1 class="logo me-auto"><a href="index.html">BrizCo API</a></h1>
|
||||
<!-- Uncomment below if you prefer to use an image logo -->
|
||||
<!-- <a href="index.html" class="logo me-auto"><img src="assets/img/logo.png" alt="" class="img-fluid"></a>-->
|
||||
|
||||
<nav id="navbar" class="navbar">
|
||||
<ul>
|
||||
<li><a class="nav-link scrollto active" href="#hero">Home</a></li>
|
||||
<li><a class="nav-link scrollto" href="#why-us">Features</a></li>
|
||||
<li><a class="nav-link scrollto" href="#skills">Framworks</a></li>
|
||||
<li><a class="getstarted scrollto" target="_blank" href="/swagger/index.html">Go To Swagger</a></li>
|
||||
</ul>
|
||||
<i class="bi bi-list mobile-nav-toggle"></i>
|
||||
</nav><!-- .navbar -->
|
||||
|
||||
</div>
|
||||
</header><!-- End Header -->
|
||||
<!-- ======= Hero Section ======= -->
|
||||
<section id="hero" dir="ltr" class="d-flex min-vh-100 flex-column justify-content-center">
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 d-flex flex-column justify-content-center pt-4 pt-lg-0 order-2 order-lg-1" data-aos="fade-up" data-aos-delay="200">
|
||||
<h1>New API for use </h1>
|
||||
<h2 style="font-family: SF Pro Display, sans-serif; text-align: justify ;">
|
||||
This API is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.
|
||||
</h2>
|
||||
<h2 style="font-family: SF Pro Display, sans-serif; text-align: justify ;">
|
||||
Version : @Model?.Version
|
||||
</h2>
|
||||
<div class="d-flex justify-content-center justify-content-lg-start">
|
||||
<a href="/swagger/index.html" target="_blank" class="btn-get-started scrollto"><i class="bi bi-chevron-right" style="font-family: SF Pro Display, sans-serif; margin-right:10px ;"></i><span>Go to Swagger</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 order-1 order-lg-2 hero-img" data-aos="zoom-in" data-aos-delay="200">
|
||||
<img src="assets/img/hero-img.png" class="img-fluid animated" alt="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section><!-- End Hero -->
|
||||
|
||||
<main id="main">
|
||||
<!-- ======= Why Us Section ======= -->
|
||||
<section id="why-us" class="why-us section-bg d-flex min-vh-100 flex-column justify-content-center">
|
||||
<div class="container-fluid" data-aos="fade-up">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-7 d-flex flex-column justify-content-center align-items-stretch order-2 order-lg-1">
|
||||
|
||||
<div class="content">
|
||||
<h3>Features of using this API</h3>
|
||||
<p>
|
||||
We have brought you lots of different features in this API for you
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="accordion-list">
|
||||
<ul>
|
||||
<li>
|
||||
<a data-bs-toggle="collapse" class="collapse" data-bs-target="#accordion-list-1"><span>01</span> Use JSON <i class="bx bx-chevron-down icon-show"></i><i class="bx bx-chevron-up icon-close"></i></a>
|
||||
<div id="accordion-list-1" class="collapse show" data-bs-parent=".accordion-list">
|
||||
<p>
|
||||
All responses and data convert to JSON , and you get json compresed response in all request
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a data-bs-toggle="collapse" data-bs-target="#accordion-list-2" class="collapsed"><span>02</span> User Authentication <i class="bx bx-chevron-down icon-show"></i><i class="bx bx-chevron-up icon-close"></i></a>
|
||||
<div id="accordion-list-2" class="collapse" data-bs-parent=".accordion-list">
|
||||
<p>
|
||||
The authentication of API is based on USERNAME & PASSWORD , in this case you user your test user for testing API and methods
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a data-bs-toggle="collapse" data-bs-target="#accordion-list-3" class="collapsed"><span>03</span> Api Versionening <i class="bx bx-chevron-down icon-show"></i><i class="bx bx-chevron-up icon-close"></i></a>
|
||||
<div id="accordion-list-3" class="collapse" data-bs-parent=".accordion-list">
|
||||
<p>
|
||||
We create several version of APIs and update it , so you can use all version of APIs , old one and new one . you have to be care about use versions
|
||||
</p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-5 align-items-stretch order-1 order-lg-2 img" style='background-image: url("assets/img/features.svg");' data-aos="zoom-in" data-aos-delay="150"> </div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End Why Us Section -->
|
||||
<!-- ======= Cta Section ======= -->
|
||||
<section id="cta" class="cta ">
|
||||
<div class="container" data-aos="zoom-in">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-9 text-center text-lg-start">
|
||||
<h3>SWAGGER</h3>
|
||||
<p>Swagger is one of the best API document generator , You can use swagger to read API document and test API , for using swagger you need to login and use you username and password</p>
|
||||
</div>
|
||||
<div class="col-lg-3 cta-btn-container text-center">
|
||||
<a class="cta-btn align-middle" target="_blank" href="/swagger/index.html">Go to swagger</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End Cta Section -->
|
||||
<!-- ======= Skills Section ======= -->
|
||||
<section id="skills" class="skills d-flex min-vh-100 flex-column justify-content-center">
|
||||
<div class="container" data-aos="fade-up">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 d-flex align-items-center" data-aos="fade-right" data-aos-delay="100">
|
||||
<img src="assets/img/skills.png" class="img-fluid" alt="">
|
||||
</div>
|
||||
<div class="col-lg-6 pt-4 pt-lg-0 content" data-aos="fade-left" data-aos-delay="100">
|
||||
<h3>Framworks that we used in this project</h3>
|
||||
<p class="fst-italic">
|
||||
We use several frameworks to develope our projects , is this project we use hight teck and most popular frameworks and programming languages
|
||||
</p>
|
||||
|
||||
<div class="skills-content">
|
||||
|
||||
<div class="progress">
|
||||
<span class="skill">.NET <i class="val">100%</i></span>
|
||||
<div class="progress-bar-wrap">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="progress">
|
||||
<span class="skill">MicroServices <i class="val">100%</i></span>
|
||||
<div class="progress-bar-wrap">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="progress">
|
||||
<span class="skill">Briz-Architecture <i class="val">100%</i></span>
|
||||
<div class="progress-bar-wrap">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="progress">
|
||||
<span class="skill">DDD <i class="val">90%</i></span>
|
||||
<div class="progress-bar-wrap">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="progress">
|
||||
<span class="skill">MediatR <i class="val">90%</i></span>
|
||||
<div class="progress-bar-wrap">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="progress">
|
||||
<span class="skill">Redis <i class="val">90%</i></span>
|
||||
<div class="progress-bar-wrap">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="70" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section><!-- End Skills Section -->
|
||||
|
||||
|
||||
</main><!-- End #main -->
|
||||
<!-- ======= Footer ======= -->
|
||||
<footer id="footer">
|
||||
|
||||
<div class="footer-top">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-9 content align-items-center justify-content-center">
|
||||
<h1 class="display-1">BrizCo API</h1>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-3 col-md-6 footer-links">
|
||||
<h4>Our Social Networks</h4>
|
||||
<p>Cras fermentum odio eu feugiat lide par naso tierra videa magna derita valies</p>
|
||||
<div class="social-links mt-3">
|
||||
<a href="#" class="twitter"><i class="bx bxl-twitter"></i></a>
|
||||
<a href="#" class="facebook"><i class="bx bxl-facebook"></i></a>
|
||||
<a href="#" class="instagram"><i class="bx bxl-instagram"></i></a>
|
||||
<a href="#" class="google-plus"><i class="bx bxl-skype"></i></a>
|
||||
<a href="#" class="linkedin"><i class="bx bxl-linkedin"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container footer-bottom clearfix">
|
||||
<div class="copyright">
|
||||
© Copyright <strong><span>BrizCo</span></strong>. All Rights Reserved
|
||||
</div>
|
||||
<div class="credits">
|
||||
<!-- All the links in the footer should remain intact. -->
|
||||
<!-- You can delete the links only if you purchased the pro version. -->
|
||||
<!-- Licensing information: https://bootstrapmade.com/license/ -->
|
||||
<!-- Purchase the pro version with working PHP/AJAX contact form: https://bootstrapmade.com/arsha-free-bootstrap-html-template-corporate/ -->
|
||||
Designed by <a href="https://mr-mohande3.ir/" style="color:white;">Amir Hossein Khademi (MR.MOHANDE3)</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End Footer -->
|
||||
|
||||
<div id="preloader"></div>
|
||||
<a href="#" class="back-to-top d-flex align-items-center justify-content-center"><i class="bi bi-arrow-up-short"></i></a>
|
||||
|
||||
<!-- Vendor JS Files -->
|
||||
<script src="assets/vendor/aos/aos.js"></script>
|
||||
<script src="assets/vendor/glightbox/js/glightbox.min.js"></script>
|
||||
<script src="assets/vendor/waypoints/noframework.waypoints.js"></script>
|
||||
|
||||
<script src="assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<!-- Template Main JS File -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
|
||||
namespace Brizco.Api.Views.Home;
|
||||
|
||||
public class IndexModel : PageModel
|
||||
{
|
||||
public IndexModel()
|
||||
{
|
||||
|
||||
}
|
||||
public string Version = typeof(Program).Assembly.GetName().Version.ToString();
|
||||
public void OnGet()
|
||||
{
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -1,939 +0,0 @@
|
|||
.glightbox-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 999999 !important;
|
||||
overflow: hidden;
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-moz-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
text-size-adjust: 100%;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.glightbox-container.inactive {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.glightbox-container .gcontainer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 9999;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.glightbox-container .gslider {
|
||||
-webkit-transition: -webkit-transform 0.4s ease;
|
||||
transition: -webkit-transform 0.4s ease;
|
||||
transition: transform 0.4s ease;
|
||||
transition: transform 0.4s ease, -webkit-transform 0.4s ease;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
display: -webkit-box !important;
|
||||
display: -ms-flexbox !important;
|
||||
display: flex !important;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.glightbox-container .gslide {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.glightbox-container .gslide.current {
|
||||
opacity: 1;
|
||||
z-index: 99999;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.glightbox-container .gslide.prev {
|
||||
opacity: 1;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.glightbox-container .gslide-inner-content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.glightbox-container .ginner-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.glightbox-container .ginner-container.gvideo-container {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.glightbox-container .ginner-container.desc-bottom,
|
||||
.glightbox-container .ginner-container.desc-top {
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.glightbox-container .ginner-container.desc-left,
|
||||
.glightbox-container .ginner-container.desc-right {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
.gslide iframe,
|
||||
.gslide video {
|
||||
outline: none !important;
|
||||
border: none;
|
||||
min-height: 165px;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
-ms-touch-action: auto;
|
||||
touch-action: auto;
|
||||
}
|
||||
|
||||
.gslide:not(.current) {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.gslide-image {
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.gslide-image img {
|
||||
max-height: 100vh;
|
||||
display: block;
|
||||
padding: 0;
|
||||
float: none;
|
||||
outline: none;
|
||||
border: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
max-width: 100vw;
|
||||
width: auto;
|
||||
height: auto;
|
||||
-o-object-fit: cover;
|
||||
object-fit: cover;
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
margin: auto;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.desc-top .gslide-image img,
|
||||
.desc-bottom .gslide-image img {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.desc-left .gslide-image img,
|
||||
.desc-right .gslide-image img {
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.gslide-image img.zoomable {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.gslide-image img.dragging {
|
||||
cursor: -webkit-grabbing !important;
|
||||
cursor: grabbing !important;
|
||||
-webkit-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.gslide-video {
|
||||
position: relative;
|
||||
max-width: 100vh;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.gslide-video .plyr__poster-enabled.plyr--loading .plyr__poster {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.gslide-video .gvideo-wrapper {
|
||||
width: 100%;
|
||||
/* max-width: 160vmin; */
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.gslide-video::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(255, 0, 0, 0.34);
|
||||
display: none;
|
||||
}
|
||||
|
||||
.gslide-video.playing::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.gslide-video.fullscreen {
|
||||
max-width: 100% !important;
|
||||
min-width: 100%;
|
||||
height: 75vh;
|
||||
}
|
||||
|
||||
.gslide-video.fullscreen video {
|
||||
max-width: 100% !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.gslide-inline {
|
||||
background: #fff;
|
||||
text-align: left;
|
||||
max-height: calc(100vh - 40px);
|
||||
overflow: auto;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.gslide-inline .ginlined-content {
|
||||
padding: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.gslide-inline .dragging {
|
||||
cursor: -webkit-grabbing !important;
|
||||
cursor: grabbing !important;
|
||||
-webkit-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.ginlined-content {
|
||||
overflow: auto;
|
||||
display: block !important;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.gslide-external {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
background: #fff;
|
||||
padding: 0;
|
||||
overflow: auto;
|
||||
max-height: 75vh;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.gslide-media {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.zoomed .gslide-media {
|
||||
-webkit-box-shadow: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.desc-top .gslide-media,
|
||||
.desc-bottom .gslide-media {
|
||||
margin: 0 auto;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.gslide-description {
|
||||
position: relative;
|
||||
-webkit-box-flex: 1;
|
||||
-ms-flex: 1 0 100%;
|
||||
flex: 1 0 100%;
|
||||
}
|
||||
|
||||
.gslide-description.description-left,
|
||||
.gslide-description.description-right {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.gslide-description.description-bottom,
|
||||
.gslide-description.description-top {
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.gslide-description p {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.gslide-description p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.zoomed .gslide-description {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.glightbox-button-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Description for mobiles
|
||||
* something like facebook does the description
|
||||
* for the photos
|
||||
*/
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-description {
|
||||
height: auto !important;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
padding: 19px 11px;
|
||||
max-width: 100vw !important;
|
||||
-webkit-box-ordinal-group: 3 !important;
|
||||
-ms-flex-order: 2 !important;
|
||||
order: 2 !important;
|
||||
max-height: 78vh;
|
||||
overflow: auto !important;
|
||||
background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.75)));
|
||||
background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.75) 100%);
|
||||
-webkit-transition: opacity 0.3s linear;
|
||||
transition: opacity 0.3s linear;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-title {
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-desc {
|
||||
color: #a1a1a1;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-desc a {
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-desc * {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.glightbox-mobile .glightbox-container .gslide-desc .desc-more {
|
||||
color: #fff;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.gdesc-open .gslide-media {
|
||||
-webkit-transition: opacity 0.5s ease;
|
||||
transition: opacity 0.5s ease;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.gdesc-open .gdesc-inner {
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.gdesc-closed .gslide-media {
|
||||
-webkit-transition: opacity 0.5s ease;
|
||||
transition: opacity 0.5s ease;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.greset {
|
||||
-webkit-transition: all 0.3s ease;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.gabsolute {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.grelative {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.glightbox-desc {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.glightbox-open {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.gloader {
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
-webkit-animation: lightboxLoader 0.8s infinite linear;
|
||||
animation: lightboxLoader 0.8s infinite linear;
|
||||
border: 2px solid #fff;
|
||||
border-right-color: transparent;
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
display: block;
|
||||
z-index: 9999;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
top: 47%;
|
||||
}
|
||||
|
||||
.goverlay {
|
||||
width: 100%;
|
||||
height: calc(100vh + 1px);
|
||||
position: fixed;
|
||||
top: -1px;
|
||||
left: 0;
|
||||
background: #000;
|
||||
will-change: opacity;
|
||||
}
|
||||
|
||||
.glightbox-mobile .goverlay {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.gprev,
|
||||
.gnext,
|
||||
.gclose {
|
||||
z-index: 99999;
|
||||
cursor: pointer;
|
||||
width: 26px;
|
||||
height: 44px;
|
||||
border: none;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.gprev svg,
|
||||
.gnext svg,
|
||||
.gclose svg {
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: auto;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.gprev.disabled,
|
||||
.gnext.disabled,
|
||||
.gclose.disabled {
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
.gprev .garrow,
|
||||
.gnext .garrow,
|
||||
.gclose .garrow {
|
||||
stroke: #fff;
|
||||
}
|
||||
|
||||
.gbtn.focused {
|
||||
outline: 2px solid #0f3d81;
|
||||
}
|
||||
|
||||
iframe.wait-autoplay {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.glightbox-closing .gnext,
|
||||
.glightbox-closing .gprev,
|
||||
.glightbox-closing .gclose {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
|
||||
/*Skin */
|
||||
|
||||
.glightbox-clean .gslide-description {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.glightbox-clean .gdesc-inner {
|
||||
padding: 22px 20px;
|
||||
}
|
||||
|
||||
.glightbox-clean .gslide-title {
|
||||
font-size: 1em;
|
||||
font-weight: normal;
|
||||
font-family: arial;
|
||||
color: #000;
|
||||
margin-bottom: 19px;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
.glightbox-clean .gslide-desc {
|
||||
font-size: 0.86em;
|
||||
margin-bottom: 0;
|
||||
font-family: arial;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
.glightbox-clean .gslide-video {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.glightbox-clean .gprev,
|
||||
.glightbox-clean .gnext,
|
||||
.glightbox-clean .gclose {
|
||||
background-color: rgba(0, 0, 0, 0.75);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.glightbox-clean .gprev path,
|
||||
.glightbox-clean .gnext path,
|
||||
.glightbox-clean .gclose path {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.glightbox-clean .gprev {
|
||||
position: absolute;
|
||||
top: -100%;
|
||||
left: 30px;
|
||||
width: 40px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.glightbox-clean .gnext {
|
||||
position: absolute;
|
||||
top: -100%;
|
||||
right: 30px;
|
||||
width: 40px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.glightbox-clean .gclose {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
top: 15px;
|
||||
right: 10px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.glightbox-clean .gclose svg {
|
||||
width: 18px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.glightbox-clean .gclose:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
/*CSS Animations*/
|
||||
|
||||
.gfadeIn {
|
||||
-webkit-animation: gfadeIn 0.5s ease;
|
||||
animation: gfadeIn 0.5s ease;
|
||||
}
|
||||
|
||||
.gfadeOut {
|
||||
-webkit-animation: gfadeOut 0.5s ease;
|
||||
animation: gfadeOut 0.5s ease;
|
||||
}
|
||||
|
||||
.gslideOutLeft {
|
||||
-webkit-animation: gslideOutLeft 0.3s ease;
|
||||
animation: gslideOutLeft 0.3s ease;
|
||||
}
|
||||
|
||||
.gslideInLeft {
|
||||
-webkit-animation: gslideInLeft 0.3s ease;
|
||||
animation: gslideInLeft 0.3s ease;
|
||||
}
|
||||
|
||||
.gslideOutRight {
|
||||
-webkit-animation: gslideOutRight 0.3s ease;
|
||||
animation: gslideOutRight 0.3s ease;
|
||||
}
|
||||
|
||||
.gslideInRight {
|
||||
-webkit-animation: gslideInRight 0.3s ease;
|
||||
animation: gslideInRight 0.3s ease;
|
||||
}
|
||||
|
||||
.gzoomIn {
|
||||
-webkit-animation: gzoomIn 0.5s ease;
|
||||
animation: gzoomIn 0.5s ease;
|
||||
}
|
||||
|
||||
.gzoomOut {
|
||||
-webkit-animation: gzoomOut 0.5s ease;
|
||||
animation: gzoomOut 0.5s ease;
|
||||
}
|
||||
|
||||
@-webkit-keyframes lightboxLoader {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes lightboxLoader {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gfadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gfadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gfadeOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gfadeOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gslideInLeft {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: translate3d(-60%, 0, 0);
|
||||
transform: translate3d(-60%, 0, 0);
|
||||
}
|
||||
to {
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gslideInLeft {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: translate3d(-60%, 0, 0);
|
||||
transform: translate3d(-60%, 0, 0);
|
||||
}
|
||||
to {
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gslideOutLeft {
|
||||
from {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(-60%, 0, 0);
|
||||
transform: translate3d(-60%, 0, 0);
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gslideOutLeft {
|
||||
from {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(-60%, 0, 0);
|
||||
transform: translate3d(-60%, 0, 0);
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gslideInRight {
|
||||
from {
|
||||
opacity: 0;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(60%, 0, 0);
|
||||
transform: translate3d(60%, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gslideInRight {
|
||||
from {
|
||||
opacity: 0;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(60%, 0, 0);
|
||||
transform: translate3d(60%, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gslideOutRight {
|
||||
from {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(60%, 0, 0);
|
||||
transform: translate3d(60%, 0, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gslideOutRight {
|
||||
from {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate3d(60%, 0, 0);
|
||||
transform: translate3d(60%, 0, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gzoomIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gzoomIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes gzoomOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
50% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes gzoomOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
}
|
||||
50% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 769px) {
|
||||
.glightbox-container .ginner-container {
|
||||
width: auto;
|
||||
height: auto;
|
||||
-webkit-box-orient: horizontal;
|
||||
-webkit-box-direction: normal;
|
||||
-ms-flex-direction: row;
|
||||
flex-direction: row;
|
||||
}
|
||||
.glightbox-container .ginner-container.desc-top .gslide-description {
|
||||
-webkit-box-ordinal-group: 1;
|
||||
-ms-flex-order: 0;
|
||||
order: 0;
|
||||
}
|
||||
.glightbox-container .ginner-container.desc-top .gslide-image,
|
||||
.glightbox-container .ginner-container.desc-top .gslide-image img {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-ms-flex-order: 1;
|
||||
order: 1;
|
||||
}
|
||||
.glightbox-container .ginner-container.desc-left .gslide-description {
|
||||
-webkit-box-ordinal-group: 1;
|
||||
-ms-flex-order: 0;
|
||||
order: 0;
|
||||
}
|
||||
.glightbox-container .ginner-container.desc-left .gslide-image {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-ms-flex-order: 1;
|
||||
order: 1;
|
||||
}
|
||||
.gslide-image img {
|
||||
max-height: 97vh;
|
||||
max-width: 100%;
|
||||
}
|
||||
.gslide-image img.zoomable {
|
||||
cursor: -webkit-zoom-in;
|
||||
cursor: zoom-in;
|
||||
}
|
||||
.zoomed .gslide-image img.zoomable {
|
||||
cursor: -webkit-grab;
|
||||
cursor: grab;
|
||||
}
|
||||
.gslide-inline {
|
||||
max-height: 95vh;
|
||||
}
|
||||
.gslide-external {
|
||||
max-height: 100vh;
|
||||
}
|
||||
.gslide-description.description-left,
|
||||
.gslide-description.description-right {
|
||||
max-width: 275px;
|
||||
}
|
||||
.glightbox-open {
|
||||
height: auto;
|
||||
}
|
||||
.goverlay {
|
||||
background: rgba(0, 0, 0, 0.92);
|
||||
}
|
||||
.glightbox-clean .gslide-media {
|
||||
-webkit-box-shadow: 1px 2px 9px 0px rgba(0, 0, 0, 0.65);
|
||||
box-shadow: 1px 2px 9px 0px rgba(0, 0, 0, 0.65);
|
||||
}
|
||||
.glightbox-clean .description-left .gdesc-inner,
|
||||
.glightbox-clean .description-right .gdesc-inner {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.glightbox-clean .gprev,
|
||||
.glightbox-clean .gnext,
|
||||
.glightbox-clean .gclose {
|
||||
background-color: rgba(0, 0, 0, 0.32);
|
||||
}
|
||||
.glightbox-clean .gprev:hover,
|
||||
.glightbox-clean .gnext:hover,
|
||||
.glightbox-clean .gclose:hover {
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
.glightbox-clean .gprev {
|
||||
top: 45%;
|
||||
}
|
||||
.glightbox-clean .gnext {
|
||||
top: 45%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.glightbox-clean .gclose {
|
||||
opacity: 0.7;
|
||||
right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-height: 420px) {
|
||||
.goverlay {
|
||||
background: #000;
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -1,81 +0,0 @@
|
|||
/**
|
||||
* PHP Email Form Validation - v3.5
|
||||
* URL: https://bootstrapmade.com/php-email-form/
|
||||
* Author: BootstrapMade.com
|
||||
*/
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
let forms = document.querySelectorAll('.php-email-form');
|
||||
|
||||
forms.forEach( function(e) {
|
||||
e.addEventListener('submit', function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
let thisForm = this;
|
||||
|
||||
let action = thisForm.getAttribute('action');
|
||||
let recaptcha = thisForm.getAttribute('data-recaptcha-site-key');
|
||||
|
||||
if( ! action ) {
|
||||
displayError(thisForm, 'The form action property is not set!')
|
||||
return;
|
||||
}
|
||||
thisForm.querySelector('.loading').classList.add('d-block');
|
||||
thisForm.querySelector('.error-message').classList.remove('d-block');
|
||||
thisForm.querySelector('.sent-message').classList.remove('d-block');
|
||||
|
||||
let formData = new FormData( thisForm );
|
||||
|
||||
if ( recaptcha ) {
|
||||
if(typeof grecaptcha !== "undefined" ) {
|
||||
grecaptcha.ready(function() {
|
||||
try {
|
||||
grecaptcha.execute(recaptcha, {action: 'php_email_form_submit'})
|
||||
.then(token => {
|
||||
formData.set('recaptcha-response', token);
|
||||
php_email_form_submit(thisForm, action, formData);
|
||||
})
|
||||
} catch(error) {
|
||||
displayError(thisForm, error)
|
||||
}
|
||||
});
|
||||
} else {
|
||||
displayError(thisForm, 'The reCaptcha javascript API url is not loaded!')
|
||||
}
|
||||
} else {
|
||||
php_email_form_submit(thisForm, action, formData);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function php_email_form_submit(thisForm, action, formData) {
|
||||
fetch(action, {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
headers: {'X-Requested-With': 'XMLHttpRequest'}
|
||||
})
|
||||
.then(response => {
|
||||
return response.text();
|
||||
})
|
||||
.then(data => {
|
||||
thisForm.querySelector('.loading').classList.remove('d-block');
|
||||
if (data.trim() == 'OK') {
|
||||
thisForm.querySelector('.sent-message').classList.add('d-block');
|
||||
thisForm.reset();
|
||||
} else {
|
||||
throw new Error(data ? data : 'Form submission failed and no error message returned from: ' + action);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
displayError(thisForm, error);
|
||||
});
|
||||
}
|
||||
|
||||
function displayError(thisForm, error) {
|
||||
thisForm.querySelector('.loading').classList.remove('d-block');
|
||||
thisForm.querySelector('.error-message').innerHTML = error;
|
||||
thisForm.querySelector('.error-message').classList.add('d-block');
|
||||
}
|
||||
|
||||
})();
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 1.1 MiB |
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 877 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -43,8 +43,8 @@ namespace Brizco.Common.Models.Api
|
|||
public string refresh_token { get; set; } = string.Empty;
|
||||
public string token_type { get; set; } = string.Empty;
|
||||
public int expires_in { get; set; }
|
||||
public TUser User { get; set; }
|
||||
|
||||
public TUser User { get; set; }
|
||||
public string BearerToken => $"Bearer {access_token}";
|
||||
public List<string> Permissions { get; set; }
|
||||
}
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
|
||||
public interface IActivityService : IScopedDependency
|
||||
{
|
||||
Task CreateActivitiesByShiftPlan(Guid shiftPlanId, CancellationToken cancellationToken);
|
||||
Task<bool> CreateActivitiesByShiftPlan(Guid shiftPlanId, CancellationToken cancellationToken);
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
namespace Brizco.Core.EntityServices.Abstracts;
|
||||
|
||||
public interface IShiftPlanService
|
||||
public interface IShiftPlanService : IScopedDependency
|
||||
{
|
||||
Task ChangeShiftPlanTaskStatusAsync(Guid shiftPlanId,bool isChangeToShift , bool isDisable);
|
||||
Task<bool> CreateAsync(CreateShiftPlanCommand createShiftPlanCommand,CancellationToken cancellationToken);
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
public interface IUserService : IScopedDependency
|
||||
{
|
||||
Task<ApplicationUserSDto> GetUserProfileAsync(CancellationToken cancellationToken);
|
||||
Task<ProfileResponseDto> GetUserProfileAsync(CancellationToken cancellationToken);
|
||||
Task<List<ComplexUserRoleSDto>> GetUserRolesAsync(CancellationToken cancellationToken);
|
||||
Task<List<ComplexUserSDto>> GetUsersAsync(int page = 0, CancellationToken cancellationToken = default);
|
||||
Task<ApplicationUserSDto> GetUserAsync(Guid userId);
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
using Brizco.Domain.CommandQueries.Queries;
|
||||
using Brizco.Domain.Entities.Shift;
|
||||
using Brizco.Domain.Entities.Task;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Brizco.Core.EntityServices;
|
||||
|
||||
|
@ -13,19 +15,60 @@ public class ActivityService : IActivityService
|
|||
_mediator = mediator;
|
||||
_repositoryWrapper = repositoryWrapper;
|
||||
}
|
||||
public async System.Threading.Tasks.Task CreateActivitiesByShiftPlan(Guid shiftPlanId,CancellationToken cancellationToken)
|
||||
public async Task<bool> CreateActivitiesByShiftPlan(Guid shiftPlanId,CancellationToken cancellationToken)
|
||||
{
|
||||
var shiftPlan = await _mediator.Send(new GetShiftPlanQuery(shiftPlanId), cancellationToken);
|
||||
var tasks = _repositoryWrapper.SetRepository<Brizco.Domain.Entities.Task.Task>()
|
||||
if (shiftPlan.Id == Guid.Empty)
|
||||
return false;
|
||||
var tasks = await _repositoryWrapper.SetRepository<Brizco.Domain.Entities.Task.Task>()
|
||||
.ExecuteCommand(
|
||||
$@"SELECT t.Id, t.Type, t.Title t.Description t.IsDisposable t.SetFor t.HasDisposed t.ScheduleType t.Amount t.AmountType
|
||||
FROM Task t
|
||||
INNER JOIN TaskShifts t1 ON t.Id = t1.TaskId
|
||||
INNER JOIN TaskDays t2 ON t.Id = t1.TaskId
|
||||
INNER JOIN TaskRoutines t3 ON t.Id = t1.TaskId
|
||||
WHERE {shiftPlan.ShiftId} = t1.ShiftId
|
||||
AND {shiftPlan.PlanFor.DayOfWeek} = t2.DayOfWeek
|
||||
AND ON {shiftPlan.RoutineId} = t3.RoutineId ");
|
||||
$@"SELECT t.""Id"", t.""Amount"", t.""AmountType"", t.""ComplexId"",
|
||||
t.""CreatedAt"", t.""CreatedBy"", t.""Description"", t.""Discriminator"", t.""HasDisposed"", t.""IsDisposable"", t.""IsRemoved"", t.""ModifiedAt"",
|
||||
t.""ModifiedBy"", t.""RemovedAt"", t.""RemovedBy"", t.""ScheduleType"", t.""SetFor"", t.""Title"", t.""Type"", t.""DoneAt"", t.""IsDone"",
|
||||
t.""PerformanceDescription"", t.""ShiftId"", t.""Status"", t.""UserId""
|
||||
FROM public.""Tasks"" t
|
||||
INNER JOIN public.""TaskShifts"" t1 ON t.""Id"" = t1.""TaskId""
|
||||
INNER JOIN public.""TaskDays"" t2 ON t.""Id"" = t1.""TaskId""
|
||||
INNER JOIN public.""TaskRoutines"" t3 ON t.""Id"" = t1.""TaskId""
|
||||
AND {shiftPlan.ShiftId} = t1.""ShiftId""
|
||||
AND {shiftPlan.RoutineId} = t3.""RoutineId""
|
||||
AND {shiftPlan.PlanFor.DayOfWeek} = t2.""DayOfWeek""
|
||||
GROUP BY t.""Id""").ToListAsync(cancellationToken);
|
||||
|
||||
var shiftPlanPositions = await _repositoryWrapper.SetRepository<ShiftPlanUser>()
|
||||
.TableNoTracking
|
||||
.Where(spu => spu.ShiftPlanId == shiftPlan.Id)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
foreach (var task in tasks)
|
||||
{
|
||||
var taskPositions = await _repositoryWrapper.SetRepository<TaskPosition>()
|
||||
.TableNoTracking
|
||||
.Where(tp => tp.TaskId == task.Id)
|
||||
.ToListAsync(cancellationToken);
|
||||
foreach (var taskPosition in taskPositions)
|
||||
{
|
||||
var fundedUser = shiftPlanPositions.FirstOrDefault(spu => spu.PositionId == taskPosition.PositionId);
|
||||
if (fundedUser != null)
|
||||
{
|
||||
var activity = Activity.Create(ActivityStatus.Created,
|
||||
DateTime.MinValue,
|
||||
string.Empty,
|
||||
task.Title,
|
||||
task.Description,
|
||||
task.Type,
|
||||
task.IsDisposable,
|
||||
task.SetFor,
|
||||
task.HasDisposed,
|
||||
task.Amount,
|
||||
task.AmountType,
|
||||
task.ComplexId,
|
||||
task.ScheduleType);
|
||||
activity.SetUser(fundedUser.UserId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -5,14 +5,23 @@ namespace Brizco.Core.EntityServices;
|
|||
public class ShiftPlanService : IShiftPlanService
|
||||
{
|
||||
private readonly ISender _sender;
|
||||
private readonly IActivityService _activityService;
|
||||
|
||||
public ShiftPlanService(ISender sender)
|
||||
public ShiftPlanService(ISender sender,IActivityService activityService)
|
||||
{
|
||||
_sender = sender;
|
||||
_activityService = activityService;
|
||||
}
|
||||
public async Task ChangeShiftPlanTaskStatusAsync(Guid shiftPlanId, bool isChangeToShift, bool isDisable)
|
||||
{
|
||||
var shiftPlan = await _sender.Send(new GetShiftPlanQuery(shiftPlanId));
|
||||
|
||||
}
|
||||
|
||||
public async Task<bool> CreateAsync(CreateShiftPlanCommand createShiftPlanCommand, CancellationToken cancellationToken)
|
||||
{
|
||||
var shiftPlan = await _sender.Send(createShiftPlanCommand, cancellationToken);
|
||||
_activityService.CreateActivitiesByShiftPlan(shiftPlan.Id, cancellationToken);
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ using System.Threading;
|
|||
using Brizco.Domain.CommandQueries.Queries;
|
||||
using Brizco.Domain.Mappers;
|
||||
using Mapster;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Brizco.Core.EntityServices;
|
||||
|
||||
|
@ -28,33 +29,35 @@ public class UserService : IUserService
|
|||
}
|
||||
|
||||
|
||||
public async Task<ApplicationUserSDto> GetUserProfileAsync(CancellationToken cancellationToken)
|
||||
public async Task<ProfileResponseDto> GetUserProfileAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
if (!Guid.TryParse(_currentUserService.UserId, out var userId))
|
||||
throw new AppException("Wrong Token", ApiResultStatusCode.UnAuthorized);
|
||||
var user = await _userManager.FindByIdAsync(userId.ToString());
|
||||
if (user == null)
|
||||
throw new AppException("User NotFound", ApiResultStatusCode.NotFound);
|
||||
var response = user.AdaptToSDto();
|
||||
|
||||
var response = new ProfileResponseDto();
|
||||
|
||||
var userSDto = user.AdaptToSDto();
|
||||
|
||||
var complexUsers = await GetUserRolesAsync(cancellationToken);
|
||||
response.User = userSDto;
|
||||
if (user.SelectedComplexUserRoleId != Guid.Empty)
|
||||
{
|
||||
var complexUserRole = await _repositoryWrapper.SetRepository<ComplexUserRole>()
|
||||
.TableNoTracking
|
||||
.Where(c => c.Id == user.SelectedComplexUserRoleId)
|
||||
.Select(ComplexUserRoleMapper.ProjectToSDto)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
var complexUserRole = complexUsers.FirstOrDefault(cu => cu.Id == user.SelectedComplexUserRoleId);
|
||||
|
||||
var complexUser = await _repositoryWrapper.SetRepository<ComplexUser>()
|
||||
.TableNoTracking
|
||||
.Where(c => c.Id == complexUserRole!.ComplexUserId)
|
||||
.Select(ComplexUserMapper.ProjectToSDto)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
|
||||
response.SelectedComplexName = complexUser!.ComplexName;
|
||||
response.SelectedRoleName = complexUserRole!.RoleName;
|
||||
userSDto.SelectedComplexName = complexUserRole!.ComplexName;
|
||||
userSDto.SelectedRoleName = complexUserRole!.RoleName;
|
||||
var role = await _roleManager.FindByNameAsync(complexUserRole.RoleName);
|
||||
if (role != null)
|
||||
{
|
||||
var roleClaims = await _roleManager.GetClaimsAsync(role);
|
||||
response.Permissions = roleClaims.Where(c => c.Type == "Permission").Select(c => c.Value).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
response.Roles = complexUsers;
|
||||
return response;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
using Brizco.Common.Models.Api;
|
||||
|
||||
namespace Brizco.Domain.Dtos.ResponseDto;
|
||||
|
||||
public class ProfileResponseDto
|
||||
{
|
||||
public List<ComplexUserRoleSDto> Roles { get; set; } = new();
|
||||
public ApplicationUserSDto? User { get; set; }
|
||||
public List<string> Permissions { get; set; } = new();
|
||||
}
|
|
@ -128,6 +128,11 @@ public partial class Activity
|
|||
scheduleType);
|
||||
}
|
||||
|
||||
public void SetUser(Guid userId)
|
||||
{
|
||||
this.UserId = userId;
|
||||
}
|
||||
|
||||
public void DoneActivity()
|
||||
{
|
||||
DoneAt = DateTime.UtcNow;
|
||||
|
|
|
@ -69,7 +69,9 @@ namespace Brizco.Domain.Mappers
|
|||
{
|
||||
return p9 == null ? null : new ShiftPlan()
|
||||
{
|
||||
PlanFor = p9.PlanFor,
|
||||
ShiftId = p9.ShiftId,
|
||||
RoutineId = p9.RoutineId,
|
||||
Users = funcMain1(p9.Users),
|
||||
Id = p9.Id
|
||||
};
|
||||
|
@ -82,7 +84,9 @@ namespace Brizco.Domain.Mappers
|
|||
}
|
||||
ShiftPlan result = p12 ?? new ShiftPlan();
|
||||
|
||||
result.PlanFor = p11.PlanFor;
|
||||
result.ShiftId = p11.ShiftId;
|
||||
result.RoutineId = p11.RoutineId;
|
||||
result.Users = funcMain2(p11.Users, result.Users);
|
||||
result.Id = p11.Id;
|
||||
return result;
|
||||
|
@ -90,7 +94,9 @@ namespace Brizco.Domain.Mappers
|
|||
}
|
||||
public static Expression<Func<ShiftPlanLDto, ShiftPlan>> ProjectLDtoToShiftPlan => p15 => new ShiftPlan()
|
||||
{
|
||||
PlanFor = p15.PlanFor,
|
||||
ShiftId = p15.ShiftId,
|
||||
RoutineId = p15.RoutineId,
|
||||
Users = p15.Users.Select<ShiftPlanUserSDto, ShiftPlanUser>(p16 => new ShiftPlanUser()
|
||||
{
|
||||
ShiftPlanId = p16.ShiftPlanId,
|
||||
|
@ -104,6 +110,8 @@ namespace Brizco.Domain.Mappers
|
|||
{
|
||||
return p17 == null ? null : new ShiftPlanLDto()
|
||||
{
|
||||
PlanFor = p17.PlanFor,
|
||||
RoutineId = p17.RoutineId,
|
||||
ShiftId = p17.ShiftId,
|
||||
Users = funcMain3(p17.Users),
|
||||
Id = p17.Id
|
||||
|
@ -117,6 +125,8 @@ namespace Brizco.Domain.Mappers
|
|||
}
|
||||
ShiftPlanLDto result = p20 ?? new ShiftPlanLDto();
|
||||
|
||||
result.PlanFor = p19.PlanFor;
|
||||
result.RoutineId = p19.RoutineId;
|
||||
result.ShiftId = p19.ShiftId;
|
||||
result.Users = funcMain4(p19.Users, result.Users);
|
||||
result.Id = p19.Id;
|
||||
|
@ -125,6 +135,8 @@ namespace Brizco.Domain.Mappers
|
|||
}
|
||||
public static Expression<Func<ShiftPlan, ShiftPlanLDto>> ProjectToLDto => p23 => new ShiftPlanLDto()
|
||||
{
|
||||
PlanFor = p23.PlanFor,
|
||||
RoutineId = p23.RoutineId,
|
||||
ShiftId = p23.ShiftId,
|
||||
Users = p23.Users.Select<ShiftPlanUser, ShiftPlanUserSDto>(p24 => new ShiftPlanUserSDto()
|
||||
{
|
||||
|
|
|
@ -17,8 +17,13 @@ public class GetActivitiesQueryHandler : IRequestHandler<GetActivitiesQuery, Lis
|
|||
if (!Guid.TryParse(_currentUserService.ComplexId, out Guid complexId))
|
||||
throw new AppException("ComplexId is wrong", ApiResultStatusCode.NotFound);
|
||||
|
||||
if(_currentUserService.UserId==null)
|
||||
throw new AppException("UserId is null", ApiResultStatusCode.NotFound);
|
||||
if (!Guid.TryParse(_currentUserService.UserId, out Guid userId))
|
||||
throw new AppException("UserId is wrong", ApiResultStatusCode.NotFound);
|
||||
|
||||
var tasks = await _repositoryWrapper.SetRepository<Domain.Entities.Task.Activity>().TableNoTracking
|
||||
.Where(a=>a.ComplexId==complexId)
|
||||
.Where(a=>a.UserId == userId)
|
||||
.OrderByDescending(s => s.CreatedAt)
|
||||
.Skip(request.Page * 15).Take(15)
|
||||
.Select(ActivityMapper.ProjectToSDto)
|
||||
|
|
Loading…
Reference in New Issue