From b45c3ff5e8747e4a2bb8bd40e91f58270860efa8 Mon Sep 17 00:00:00 2001 From: Thibault Richy Date: Mon, 18 Mar 2019 08:58:41 +0100 Subject: [PATCH] Fin Stat + Export PDF --- .gitignore | 2 + app/Http/Controllers/ExportController.php | 116 +++++++ .../Controllers/StatistiqueController.php | 43 +-- app/Traits/CouponTrait.php | 26 +- app/Traits/GraphTrait.php | 78 +++++ composer.json | 2 + composer.lock | 310 +++++++++++++++++- config/app.php | 4 +- public/css/app.css | 254 ++++++++------ public/export/.gitkeep | 0 public/js/app.js | 2 +- public/test.php | 3 - resources/js/app.js | 4 +- resources/sass/partials/content.scss | 46 ++- resources/sass/partials/fancy.scss | 166 +++++----- resources/sass/partials/reset.scss | 8 + resources/views/export/index.blade.php | 69 ++++ resources/views/export/template.blade.php | 47 +++ resources/views/layouts/menu.blade.php | 1 + resources/views/stats/detail.blade.php | 49 ++- routes/web.php | 4 + 21 files changed, 1003 insertions(+), 231 deletions(-) create mode 100644 app/Http/Controllers/ExportController.php create mode 100644 app/Traits/GraphTrait.php create mode 100644 public/export/.gitkeep delete mode 100644 public/test.php create mode 100644 resources/views/export/index.blade.php create mode 100644 resources/views/export/template.blade.php diff --git a/.gitignore b/.gitignore index 8281fda..484420b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ !/public/landings/.gitkeep /public/generation/* !/public/generation/.gitkeep +/public/export/* +!/public/export/.gitkeep /public/coupons/* !/public/coupons/.gitkeep /public/images/logos/* diff --git a/app/Http/Controllers/ExportController.php b/app/Http/Controllers/ExportController.php new file mode 100644 index 0000000..77ff89f --- /dev/null +++ b/app/Http/Controllers/ExportController.php @@ -0,0 +1,116 @@ + 2958008200723])->first(); + $campid = 101; + $startdate = '27-02-2019'; + $enddate = '11-03-2019'; + + $labels = $this->getLabelsForStats($startdate, $enddate); + + $dataCoupon = $this->getDataForCoupon($labels, $campid, $coupon); + + + $sites = Site::all(); + $startdate = new DateTime("first day of last month"); + $startdate = $startdate->format('Y-m-d'); + $enddate = date('Y-m-d'); + // $pdf = App::make('dompdf.wrapper'); + + // $myData = new Data(); + // $myData->addPoints($dataCoupon,"My Serie 1"); + // $myData->addPoints($labels,"My Serie 2"); + // $myData->setAxisName(0,"Coupons"); + // $myData->setAbscissa("My Serie 2"); + + // $myPicture = new Image(700,230,$myData); + // $myPicture->setGraphArea(60,40,670,190); + // $myPicture->setFontProperties(array("FontSize"=>6)); + // $myPicture->drawScale(array("DrawSubTicks"=>TRUE, 'LabelRotation'=>25)); + // $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); + // $myPicture->drawSplineChart(); + // $LabelSettings = array("NoTitle"=>TRUE); + // $myPicture->writeLabel("My Serie 1",0, $LabelSettings); + // $myPicture->Render('charts/test.png'); + + // $pdf->loadHTML('

Test

'); + // return $pdf->download(); + return view('export.index')->with(['sites'=> $sites, 'startdate' => $startdate, 'enddate' => $enddate]); + } + + //------ AJAX Export + public function export_coupons(Request $request){ + $ids = $request->input('ids'); + $startdate = date('Y-m-d', strtotime($request->input('startdate'))); + $enddate = date('Y-m-d', strtotime($request->input('enddate'))); + $coupons = Coupon::find($ids); + + $labels = $this->getLabelsForStats($startdate, $enddate); + + + + foreach ($coupons as $coupon) { + $cpName = str_replace(' ', '', $coupon->coupon_name); + $now = strtotime(now()); + $full_path = 'export/'.$cpName.'_'.$now.'.pdf'; + $dataCoupon = $this->getDataForCouponAllCamp($labels, $coupon); + $coupon->couponQuantity = $this->getFullQuantity($coupon); + $coupon->couponFullPrinted = $this->getUsedQuantity($coupon); + $coupon->couponPrinted = $this->getUsedQuantityOnPeriod($coupon, $startdate, $enddate); + + $pdf = App::make('dompdf.wrapper'); + + $myData = new Data(); + + $myData->addPoints($dataCoupon,"My Serie 1"); + $myData->addPoints($labels,"My Serie 2"); + $myData->setAxisName(0,"Coupons Diffusés"); + $myData->setAbscissa("My Serie 2"); + $myData->setSerieTicks("My Serie 2",2); + $serieSettings = array("R"=>229,"G"=>11,"B"=>11); + $myData->setPalette("My Serie 1",$serieSettings); + $myPicture = new Image(700,230,$myData); + $myPicture->setGraphArea(60,40,670,190); + $myPicture->setFontProperties(array("FontSize"=>10)); + $myPicture->drawScale(array("DrawSubTicks"=>TRUE, 'LabelSkip'=>1, 'LabelRotation'=>25, "Mode" => SCALE_MODE_START0, "CycleBackground"=>TRUE,"GridR"=>102,"GridG"=>102,"GridB"=>102)); + $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10)); + $myPicture->drawLineChart(array("DisplayColor"=>DISPLAY_AUTO)); + $LabelSettings = array("NoTitle"=>TRUE); + $myPicture->Render('export/temp.png'); + + $view = view('export.template')->with(['src' => 'export/temp.png', 'coupon' => $coupon, 'startdate' => $startdate, 'enddate' => $enddate])->render(); + + //var_dump($view); + + $pdf->loadHTML($view); + $pdf->save($full_path); + } + + return json_encode($full_path); + } +} diff --git a/app/Http/Controllers/StatistiqueController.php b/app/Http/Controllers/StatistiqueController.php index df7b541..826e773 100644 --- a/app/Http/Controllers/StatistiqueController.php +++ b/app/Http/Controllers/StatistiqueController.php @@ -7,11 +7,12 @@ use App\Campagne; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Traits\CouponTrait; -use DateTime; +use App\Traits\GraphTrait; class StatistiqueController extends Controller { use CouponTrait; + use GraphTrait; /** * Display a listing of the resource. * @@ -91,51 +92,21 @@ class StatistiqueController extends Controller $startdate = $request->startdate; $enddate = $request->enddate; - $datetime1 = new DateTime($request->startdate); - $datetime2 = new DateTime($request->enddate); - $interval = $datetime1->diff($datetime2); - $days = $interval->format('%a'); - // ---- Labels des graphiques - $labels = []; - for ($i=0; $i <= $days ; $i++) { - $date = date('d/m/Y', strtotime("+".$i." days", strtotime($startdate))); - array_push($labels, $date); - } - //array_reverse($labels); + // ---- Labels pour la période + $labels = $this->getLabelsForStats($startdate, $enddate); // ---- Data pour le graphique global - $dataGlobal = []; - $test = []; - foreach ($labels as $label) { - $date = date('Y-m-d', strtotime(str_replace('/', '-', $label))); - $stat = Statistique::where(['stat_campId' => $campid])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted'); - $test[] = $date; - if(isset($stat)){ - $dataGlobal[] = $stat; - } else { - $dataGlobal[] = 0; - } - } - + $dataGlobal = $this->getDataForCamp($labels, $campid); + // ---- Data pour le graphique par coupons $campagne = Campagne::where(['camp_id' => $campid])->first(); $coupons = $campagne->coupons; $dataSpec = []; foreach ($coupons as $coupon) { - $dataCoupon = []; - foreach ($labels as $label) { - $date = date('Y-m-d', strtotime(str_replace('/', '-', $label))); - $stat = Statistique::where(['stat_campId' => $campid, 'stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->first(); - if(isset($stat->stat_couponPrinted)){ - $dataCoupon[] = $stat->stat_couponPrinted; - } else { - $dataCoupon[] = 0; - } - } + $dataCoupon = $this->getDataForCoupon($labels, $campid, $coupon); $dataSpec[$coupon->coupon_code] = $dataCoupon; } - $data = array('labels' => $labels, 'dataGlobal' => $dataGlobal, 'dataSpec' => $dataSpec); return json_encode($data); diff --git a/app/Traits/CouponTrait.php b/app/Traits/CouponTrait.php index de30243..47e74cc 100644 --- a/app/Traits/CouponTrait.php +++ b/app/Traits/CouponTrait.php @@ -7,8 +7,9 @@ use App\Coupon; use App\Contact; use App\Calendrier; use App\Mur; +use App\Statistique; use App\Panier; - +use DateTime; trait CouponTrait { @@ -247,4 +248,27 @@ trait CouponTrait { } return $countPrinted; } + + public function getUsedQuantityOnPeriod(Coupon $coupon, $startdate, $enddate) { + $countPrinted = 0; + $startdate = date('Y-m-d H:i:s', strtotime($startdate)); + $enddate = date('Y-m-d H:i:s', strtotime($enddate)); + $campagnes = $coupon->campagnes()->get(); + foreach ($campagnes as $campagne) { + if($campagne->camp_type == 0 || $campagne->camp_type == 2) { // Murs + $murs = Mur::where(['mur_campid' => $campagne->camp_id, 'mur_couponId' => $coupon->coupon_id])->whereBetween('mur_createdate', [$startdate, $enddate])->get(); + $countPrinted = $countPrinted + count($murs); + } else { // Paniers + $paniers = Panier::where(['panier_campId' => $campagne->camp_id])->where(function($query) use ($startdate, $enddate){ + $query->whereBetween('panier_createdate', [$startdate, $enddate]) + ->orWhereBetween('panier_updatedate', [$startdate, $enddate]); + })->get(); + foreach ($paniers as $key => $panier) { + $panierContentCount = $panier->panierContents->sum('panier_content_printed'); + $countPrinted = $countPrinted + $panierContentCount; + } + } + } + return $countPrinted; + } } \ No newline at end of file diff --git a/app/Traits/GraphTrait.php b/app/Traits/GraphTrait.php new file mode 100644 index 0000000..2c38f6b --- /dev/null +++ b/app/Traits/GraphTrait.php @@ -0,0 +1,78 @@ +diff($datetime2); + $days = $interval->format('%a'); + + // ---- Labels des graphiques + $labels = []; + for ($i=0; $i <= $days ; $i++) { + $date = date('d/m/Y', strtotime("+".$i." days", strtotime($startdate))); + array_push($labels, $date); + } + + return $labels; + } + + // ---- Data for global graph + public function getDataForCamp($labels, $campid){ + $dataGlobal = []; + foreach ($labels as $label) { + $date = date('Y-m-d', strtotime(str_replace('/', '-', $label))); + $stat = Statistique::where(['stat_campId' => $campid])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted'); + if(isset($stat)){ + $dataGlobal[] = $stat; + } else { + $dataGlobal[] = 0; + } + } + return $dataGlobal; + } + + // ---- Data for one coupon on one camp + public function getDataForCoupon($labels, $campid, $coupon){ + $dataCoupon = []; + foreach ($labels as $label) { + $date = date('Y-m-d', strtotime(str_replace('/', '-', $label))); + $stat = Statistique::where(['stat_campId' => $campid, 'stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->first(); + if(isset($stat->stat_couponPrinted)){ + $dataCoupon[] = $stat->stat_couponPrinted; + } else { + $dataCoupon[] = 0; + } + } + return $dataCoupon; + } + + // ---- Data for one coupon all camp + public function getDataForCouponAllCamp($labels, $coupon) { + $dataCoupon = []; + foreach ($labels as $label) { + $date = date('Y-m-d', strtotime(str_replace('/', '-', $label))); + $stat = Statistique::where(['stat_couponId' => $coupon->coupon_id])->whereDate('created_at', '=', $date)->sum('stat_couponPrinted'); + if(isset($stat)){ + $dataCoupon[] = $stat; + } else { + $dataCoupon[] = 0; + } + } + return $dataCoupon; + } +} \ No newline at end of file diff --git a/composer.json b/composer.json index 5772a56..27085e3 100644 --- a/composer.json +++ b/composer.json @@ -6,12 +6,14 @@ "type": "project", "require": { "php": "^7.1.3", + "barryvdh/laravel-dompdf": "^0.8.4", "doctrine/dbal": "^2.8", "fideloper/proxy": "^4.0", "laravel/framework": "5.7.*", "laravel/tinker": "^1.0", "laravelcollective/html": "^5.4.0", "picqer/php-barcode-generator": "^0.3.0", + "szymach/c-pchart": "^3.0", "uxweb/sweet-alert": "^2.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 8a73eef..fcf6cf2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,64 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "5472aedecf7d5401ffe3f89f46979fa2", + "content-hash": "24e88d3c29349a8c1dded281fc337313", "packages": [ + { + "name": "barryvdh/laravel-dompdf", + "version": "v0.8.4", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-dompdf.git", + "reference": "3fd817065e1c820b1ddace8b2bf65ca45088df4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/3fd817065e1c820b1ddace8b2bf65ca45088df4f", + "reference": "3fd817065e1c820b1ddace8b2bf65ca45088df4f", + "shasum": "" + }, + "require": { + "dompdf/dompdf": "^0.8", + "illuminate/support": "5.5.x|5.6.x|5.7.x|5.8.x", + "php": ">=7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.8-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ], + "aliases": { + "PDF": "Barryvdh\\DomPDF\\Facade" + } + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\DomPDF\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "A DOMPDF Wrapper for Laravel", + "keywords": [ + "dompdf", + "laravel", + "pdf" + ], + "time": "2019-02-26T18:07:43+00:00" + }, { "name": "dnoegel/php-xdg-base-dir", "version": "0.1", @@ -388,6 +444,72 @@ ], "time": "2014-09-09T13:34:57+00:00" }, + { + "name": "dompdf/dompdf", + "version": "v0.8.3", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "75f13c700009be21a1965dc2c5b68a8708c22ba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/75f13c700009be21a1965dc2c5b68a8708c22ba2", + "reference": "75f13c700009be21a1965dc2c5b68a8708c22ba2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "0.5.*", + "phenx/php-svg-lib": "0.3.*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.5|^6.5", + "squizlabs/php_codesniffer": "2.*" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.7-dev" + } + }, + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + }, + { + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "time": "2018-12-14T02:40:31+00:00" + }, { "name": "dragonmantank/cron-expression", "version": "v2.2.0", @@ -1266,6 +1388,83 @@ ], "time": "2018-07-02T15:55:56+00:00" }, + { + "name": "phenx/php-font-lib", + "version": "0.5.1", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "760148820110a1ae0936e5cc35851e25a938bc97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/760148820110a1ae0936e5cc35851e25a938bc97", + "reference": "760148820110a1ae0936e5cc35851e25a938bc97", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "time": "2017-09-13T16:14:37+00:00" + }, + { + "name": "phenx/php-svg-lib", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/ccc46ef6340d4b8a4a68047e68d8501ea961442c", + "reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c", + "shasum": "" + }, + "require": { + "sabberworm/php-css-parser": "8.1.*" + }, + "require-dev": { + "phpunit/phpunit": "~5.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Svg\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "time": "2018-06-03T10:10:03+00:00" + }, { "name": "picqer/php-barcode-generator", "version": "v0.3", @@ -1635,6 +1834,50 @@ ], "time": "2018-07-19T23:38:55+00:00" }, + { + "name": "sabberworm/php-css-parser", + "version": "8.1.0", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "850cbbcbe7fbb155387a151ea562897a67e242ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/850cbbcbe7fbb155387a151ea562897a67e242ef", + "reference": "850cbbcbe7fbb155387a151ea562897a67e242ef", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "library", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "time": "2016-07-19T19:14:21+00:00" + }, { "name": "swiftmailer/swiftmailer", "version": "v6.1.3", @@ -2566,6 +2809,71 @@ ], "time": "2018-08-02T09:24:26+00:00" }, + { + "name": "szymach/c-pchart", + "version": "v3.0.7", + "source": { + "type": "git", + "url": "https://github.com/szymach/c-pchart.git", + "reference": "cff756ac9cb87671b4833c5935c1c7bd12947db0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/szymach/c-pchart/zipball/cff756ac9cb87671b4833c5935c1c7bd12947db0", + "reference": "cff756ac9cb87671b4833c5935c1c7bd12947db0", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "php": ">=5.4" + }, + "require-dev": { + "codeception/codeception": "^2.4", + "phpunit/phpunit": "^4.8|^7.1", + "squizlabs/php_codesniffer": "^2.8|^3.3" + }, + "type": "project", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev", + "2.0": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "CpChart\\": "src/" + }, + "files": [ + "constants.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-only" + ], + "authors": [ + { + "name": "Jean-Damien Pogolotti", + "homepage": "http://www.pchart.net", + "role": "Creator of the original pChart library" + }, + { + "name": "Piotr Szymaszek", + "homepage": "https://github.com/szymach", + "role": "Developer of the CpChart wrapper package" + } + ], + "description": "Port of \"pChart\" library into PHP 5+", + "homepage": "https://github.com/szymach/c-pchart", + "keywords": [ + "CpChart", + "c-pChart", + "charts", + "pchart", + "statistics" + ], + "time": "2018-11-22T11:28:00+00:00" + }, { "name": "tijsverkoyen/css-to-inline-styles", "version": "2.2.1", diff --git a/config/app.php b/config/app.php index 332b434..c6b1e65 100644 --- a/config/app.php +++ b/config/app.php @@ -161,7 +161,7 @@ return [ // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, - + Barryvdh\DomPDF\ServiceProvider::class, ], /* @@ -213,7 +213,7 @@ return [ 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, 'Debugbar' => Barryvdh\Debugbar\Facade::class, - + 'PDF' => Barryvdh\DomPDF\Facade::class, ], ]; diff --git a/public/css/app.css b/public/css/app.css index 62764b5..63dcf6a 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -172,6 +172,13 @@ h5 i { margin-right: 10px; } +h5 { + font-family: 'Nunito-ExtraLight', sans-serif; + font-size: 1em; + color: #de9700; + margin: 20px 0 10px 0; +} + p { font-family: 'Nunito-ExtraLight', sans-serif; color: #adb5bd; @@ -6933,9 +6940,17 @@ main section .statistiquesContent .couponStats .couponStatsDetail h4 { color: #adb5bd; font-weight: bold; background-color: #212121; +} + +main section .statistiquesContent .couponStats .couponStatsDetail h4 span { cursor: pointer; } +main section .statistiquesContent .couponStats .couponStatsDetail h4 span:first-child { + width: 95%; + display: block; +} + main section .statistiquesContent .couponStats .couponStatsDetail h4 .couponLegend { position: absolute; display: inline-block; @@ -6944,6 +6959,17 @@ main section .statistiquesContent .couponStats .couponStatsDetail h4 .couponLege width: 20px; height: 20px; border-radius: 50%; + overflow: hidden; +} + +main section .statistiquesContent .couponStats .couponStatsDetail h4 .couponLegend .line { + width: 35px; + height: 20px; + border-bottom: 3px solid red; + -webkit-transform: translateY(-20px) translateX(5px) rotate(27deg); + position: absolute; + top: 9px; + left: -10px; } main section .statistiquesContent .couponStats .couponStatsDetail .content { @@ -6985,108 +7011,48 @@ main section .statistiquesContent .graphStats h3 { margin: 30px 0 20px 0; } +main section .statistiquesContent .graphStats h3 i { + float: right; + margin-left: 10px; + cursor: pointer; +} + +main section .selector-export { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +main section .selector-export h4 { + margin: 0; + margin-right: 20px; +} + +main section .selector-export input { + min-width: 150px; +} + +main section .selector-export input#startdate { + margin-right: 20px; +} + +main section .export-btn { + text-align: right; + margin-top: 20px; +} + #coupons-list { background-color: #2d2d2d; padding: 20px; min-width: 550px; } -#coupons-list .inputGroup { - background-color: #393939; - display: block; - margin: 2px 0; - position: relative; -} - -#coupons-list .inputGroup.notPublished { - background-color: rgba(223, 0, 0, 0.3); -} - -#coupons-list .inputGroup label { - padding: 8px 30px; - width: 100%; - display: block; - text-align: left; - color: #adb5bd; - cursor: pointer; - position: relative; - z-index: 2; - -webkit-transition: color 200ms ease-in; - transition: color 200ms ease-in; - overflow: hidden; - -webkit-box-sizing: border-box; - box-sizing: border-box; - font-family: 'Nunito-Regular', sans-serif; -} - -#coupons-list .inputGroup label:before { - width: 10px; - height: 10px; - border-radius: 50%; - content: ''; - background-color: #212121; - position: absolute; - left: 50%; - top: 50%; - -webkit-transform: translate(-50%, -50%) scale3d(1, 1, 1); - transform: translate(-50%, -50%) scale3d(1, 1, 1); - -webkit-transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); - transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); - opacity: 0; - z-index: -1; -} - -#coupons-list .inputGroup label:after { - width: 20px; - height: 20px; - content: ''; - border: 1px solid #de9700; - background-color: #393939; - background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E "); - background-repeat: no-repeat; - background-position: -3px -1px; - z-index: 2; - position: absolute; - right: 30px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - cursor: pointer; - -webkit-transition: all 200ms ease-in; - transition: all 200ms ease-in; -} - -#coupons-list .inputGroup input:checked ~ label { - color: #fff; -} - -#coupons-list .inputGroup input:checked ~ label:before { - -webkit-transform: translate(-50%, -50%) scale3d(130, 130, 1); - transform: translate(-50%, -50%) scale3d(130, 130, 1); - opacity: 1; -} - -#coupons-list .inputGroup input:checked ~ label:after { - background-color: #de9700; - border-color: #de9700; -} - -#coupons-list .inputGroup input { - width: 32px; - height: 32px; - -webkit-box-ordinal-group: 2; - -ms-flex-order: 1; - order: 1; - z-index: 2; - position: absolute; - right: 30px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - cursor: pointer; - visibility: hidden; -} - #coupons-list input[type=submit] { padding: 5px 10px; background-color: #de9700; @@ -7197,3 +7163,99 @@ main section .statistiquesContent .graphStats h3 { cursor: pointer; margin-right: 15px; } + +.inputGroup { + background-color: #393939; + display: block; + margin: 2px 0; + position: relative; +} + +.inputGroup.notPublished { + background-color: rgba(223, 0, 0, 0.3); +} + +.inputGroup label { + padding: 8px 30px; + width: 100%; + display: block; + text-align: left; + color: #adb5bd; + cursor: pointer; + position: relative; + z-index: 2; + -webkit-transition: color 200ms ease-in; + transition: color 200ms ease-in; + overflow: hidden; + -webkit-box-sizing: border-box; + box-sizing: border-box; + font-family: 'Nunito-Regular', sans-serif; +} + +.inputGroup label:before { + width: 10px; + height: 10px; + border-radius: 50%; + content: ''; + background-color: #212121; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%) scale3d(1, 1, 1); + transform: translate(-50%, -50%) scale3d(1, 1, 1); + -webkit-transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); + transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + z-index: -1; +} + +.inputGroup label:after { + width: 20px; + height: 20px; + content: ''; + border: 1px solid #de9700; + background-color: #393939; + background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E "); + background-repeat: no-repeat; + background-position: -3px -1px; + z-index: 2; + position: absolute; + right: 30px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + -webkit-transition: all 200ms ease-in; + transition: all 200ms ease-in; +} + +.inputGroup input:checked ~ label { + color: #fff; +} + +.inputGroup input:checked ~ label:before { + -webkit-transform: translate(-50%, -50%) scale3d(130, 130, 1); + transform: translate(-50%, -50%) scale3d(130, 130, 1); + opacity: 1; +} + +.inputGroup input:checked ~ label:after { + background-color: #de9700; + border-color: #de9700; +} + +.inputGroup input { + width: 32px; + height: 32px; + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + z-index: 2; + position: absolute; + right: 30px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + visibility: hidden; +} diff --git a/public/export/.gitkeep b/public/export/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/public/js/app.js b/public/js/app.js index 2095059..a096d3f 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -76,7 +76,7 @@ module.exports = __webpack_require__(3); /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/**\r\n * First we will load all of this project's JavaScript dependencies which\r\n * includes Vue and other libraries. It is a great starting point when\r\n * building robust, powerful web applications using Vue and Laravel.\r\n */\n\n/*\r\nrequire('./bootstrap');\r\n\r\nwindow.Vue = require('vue');\r\n\r\n/**\r\n * Next, we will create a fresh Vue application instance and attach it to\r\n * the page. Then, you may begin adding components to this application\r\n * or customize the JavaScript scaffolding to fit your unique needs.\r\n */\n\n/*\r\nVue.component('example-component', require('./components/ExampleComponent.vue'));\r\n\r\nconst app = new Vue({\r\n el: '#app'\r\n});\r\n*/\n\n\n\ntry {\n window.$ = window.jQuery = __webpack_require__(2);\n} catch (e) {}\n\nvar changeIcon = $('.marque');\nvar dropDownMarque = $('.marque-select');\n\n// FancyBox Communes\n// Confirmation \n$.fancyConfirm = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '
' + '

' + opts.title + '

' + '

' + opts.message + '

' + '

' + '' + opts.noButton + '' + '' + '

' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '
' + '
' + '
' + '
' + '
' + '
',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n\n opts.callback(value);\n }\n }\n });\n};\n\n// Informations\n$.fancyInfo = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '
' + '

' + opts.title + '

' + '

' + opts.message + '

' + '

' + '' + opts.noButton + '' + '' + '

' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '
' + '
' + '
' + '
' + '
' + '
',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n opts.callback(value);\n }\n }\n });\n};\n\nchangeIcon.on('click', function () {\n if (dropDownMarque.css('display') == \"none\") {\n dropDownMarque.slideDown('fast');\n } else {\n dropDownMarque.slideUp('fast');\n }\n});\n\nvar deleteIcons = document.querySelectorAll('.delete-icon');\n\nvar confirmDelete = function confirmDelete(e) {\n e.preventDefault();\n var url = e.target.parentElement.href;\n var form = document.querySelector('#delete-hidden');\n\n $.fancyConfirm({\n title: \" Suppression\",\n message: \"Êtes-vous sûr de vouloir effacer cet élément ?\",\n okButton: 'Supprimer',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n form.action = url;\n form.submit();\n }\n }\n });\n};\n\ndeleteIcons.forEach(function (el) {\n el.addEventListener('click', confirmDelete);\n});\n\n$('.burger').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '0');\n $(this).css('display', 'none');\n $('.close').css('display', 'block');\n});\n\n$('.close').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '-75px');\n $(this).css('display', 'none');\n $('.burger').css('display', 'block');\n});\n\n$(window).resize(function () {\n if (window.matchMedia(\"(min-width: 768px)\").matches) {\n $('.burger').css('display', 'none');\n $('.close').css('display', 'none');\n $('nav').css('left', '0');\n } else {\n $('nav').css('left', '-75px');\n $('.burger').css('display', 'block');\n $('.close').css('display', 'none');\n }\n});\n\n$('#camp_type').on('change', function (event) {\n if ($(this).val() == 1 || $(this).val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n } else {\n $('.limitPrinting').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitquantity').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n } else {\n $('.enablelimitquantity').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitperiod').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n } else {\n $('.enablelimitperiod').css('opacity', '0');\n }\n});\n\n$('#coupon_norme').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.gs1code').css('opacity', '1');\n } else {\n $('.gs1code').css('opacity', '0');\n }\n});\n\n$(document).ready(function () {\n if ($('#camp_type').val() == 1 || $('#camp_type').val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n }\n if ($('#coupon_enablelimitquantity').is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n }\n if ($('#coupon_enablelimitperiod').is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n }\n if ($('#coupon_norme').is(':checked')) {\n $('.gs1code').css('opacity', '1');\n }\n});\n\n$('.addcalendar').on('click', function (event) {\n event.preventDefault();\n $('.calendar').append('
');\n});\n\n$('.calendar').on('click', '.removecalendar', function (event) {\n $(this).parent('.form-field-calendar').remove();\n});\n\n$('.add-mouvement-btn').on('click', function (event) {\n event.preventDefault();\n var element = $(this).parent().parent();\n var mouvementDate = element.find('#add-mouvement-date').val();\n var mouvementNbre = element.find('#add-mouvement-nbre').val();\n var html = \"\";\n html += \"\" + mouvementDate.split('-').reverse().join('/') + \"\";\n html += \"\" + mouvementNbre + \"\";\n html += \"\";\n $('.add-mouvement').before(html);\n});\n\n$('.contactWidgets').on('click', '.copy-url', function (event) {\n var animElement = $(this).parent().parent().find('.link-copied');\n var $tempElement = $(\"\");\n $(\"body\").append($tempElement);\n $tempElement.val($(this).text()).select();\n document.execCommand(\"Copy\");\n $tempElement.remove();\n animElement.animate({ opacity: 1 }, 200, function () {\n setTimeout(function () {\n animElement.animate({ opacity: 0 }, 1000);\n }, 500);\n });\n});\n\n// ---- DASHBOARD BUTTONS\n\n$('.campDetail .fa-angle-down').on('click', function (event) {\n var cpDiv = $(this).parent().parent().parent().find('.coupons');\n if (cpDiv.css('display') == 'none') {\n cpDiv.slideDown(500);\n } else {\n cpDiv.slideUp(500);\n }\n});\n\n$('.open-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideUp(500);\n });\n});\n\n// ---- ALERTE sur Campagne\n\n$('.couponDetail').each(function () {\n if ($(this).attr('data-printable') == 0) {\n console.log();\n $(this).parent().parent().parent().parent().find('.fa-exclamation-triangle').show();\n }\n});\n\n$('body').on('click', '.couponStats h4', function (event) {\n event.preventDefault();\n var contentDiv = $(this).parent().find('.content');\n\n if (contentDiv.css('display') == 'none') {\n contentDiv.slideDown();\n } else {\n contentDiv.slideUp();\n }\n});\n\n$('.open-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideUp(500);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYXBwLmpzPzE3NTkiXSwibmFtZXMiOlsid2luZG93IiwiJCIsImpRdWVyeSIsInJlcXVpcmUiLCJlIiwiY2hhbmdlSWNvbiIsImRyb3BEb3duTWFycXVlIiwiZmFuY3lDb25maXJtIiwib3B0cyIsImV4dGVuZCIsInRpdGxlIiwibWVzc2FnZSIsIm9rQnV0dG9uIiwibm9CdXR0b24iLCJjYWxsYmFjayIsIm5vb3AiLCJmYW5jeWJveCIsIm9wZW4iLCJ0eXBlIiwic3JjIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJhbmltYXRpb25FZmZlY3QiLCJtb2RhbCIsImJhc2VUcGwiLCJhZnRlckNsb3NlIiwiaW5zdGFuY2UiLCJjdXJyZW50IiwiYnV0dG9uIiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsInZhbHVlIiwiZGF0YSIsImZhbmN5SW5mbyIsIm9uIiwiY3NzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImRlbGV0ZUljb25zIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY29uZmlybURlbGV0ZSIsInByZXZlbnREZWZhdWx0IiwidXJsIiwicGFyZW50RWxlbWVudCIsImhyZWYiLCJmb3JtIiwicXVlcnlTZWxlY3RvciIsImFjdGlvbiIsInN1Ym1pdCIsImZvckVhY2giLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXJlbnQiLCJyZXNpemUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImV2ZW50IiwidmFsIiwiaXMiLCJyZWFkeSIsImFwcGVuZCIsInJlbW92ZSIsImVsZW1lbnQiLCJtb3V2ZW1lbnREYXRlIiwiZmluZCIsIm1vdXZlbWVudE5icmUiLCJodG1sIiwic3BsaXQiLCJyZXZlcnNlIiwiam9pbiIsImJlZm9yZSIsImFuaW1FbGVtZW50IiwiJHRlbXBFbGVtZW50IiwidGV4dCIsInNlbGVjdCIsImV4ZWNDb21tYW5kIiwiYW5pbWF0ZSIsIm9wYWNpdHkiLCJzZXRUaW1lb3V0IiwiY3BEaXYi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eEMsTUFBRSx1QkFBRixFQUEyQitFLElBQTNCLENBQWdDLFlBQVU7QUFDdEMvRSxVQUFFLElBQUYsRUFBUWtDLFNBQVIsQ0FBa0IsR0FBbEI7QUFDSCxLQUZEO0FBR0gsQ0FMRDs7QUFPQWxDLEVBQUUsa0JBQUYsRUFBc0JnQyxFQUF0QixDQUF5QixPQUF6QixFQUFrQyxVQUFTdUIsS0FBVCxFQUFlO0FBQzdDQSxVQUFNZixjQUFOO0FBQ0F4QyxNQUFFLHVCQUFGLEVBQTJCK0UsSUFBM0IsQ0FBZ0MsWUFBVTtBQUN0Qy9FLFVBQUUsSUFBRixFQUFRbUMsT0FBUixDQUFnQixHQUFoQjtBQUNILEtBRkQ7QUFHSCxDQUxEIiwiZmlsZSI6IjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRmlyc3Qgd2Ugd2lsbCBsb2FkIGFsbCBvZiB0aGlzIHByb2plY3QncyBKYXZhU2NyaXB0IGRlcGVuZGVuY2llcyB3aGljaFxyXG4gKiBpbmNsdWRlcyBWdWUgYW5kIG90aGVyIGxpYnJhcmllcy4gSXQgaXMgYSBncmVhdCBzdGFydGluZyBwb2ludCB3aGVuXHJcbiAqIGJ1aWxkaW5nIHJvYnVzdCwgcG93ZXJmdWwgd2ViIGFwcGxpY2F0aW9ucyB1c2luZyBWdWUgYW5kIExhcmF2ZWwuXHJcbiAqL1xyXG5cclxuLypcclxucmVxdWlyZSgnLi9ib290c3RyYXAnKTtcclxuXHJcbndpbmRvdy5WdWUgPSByZXF1aXJlKCd2dWUnKTtcclxuXHJcbi8qKlxyXG4gKiBOZXh0LCB3ZSB3aWxsIGNyZWF0ZSBhIGZyZXNoIFZ1ZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSBhbmQgYXR0YWNoIGl0IHRvXHJcbiAqIHRoZSBwYWdlLiBUaGVuLCB5b3UgbWF5IGJlZ2luIGFkZGluZyBjb21wb25lbnRzIHRvIHRoaXMgYXBwbGljYXRpb25cclxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cclxuICovXHJcblxyXG4vKlxyXG5WdWUuY29tcG9uZW50KCdleGFtcGxlLWNvbXBvbmVudCcsIHJlcXVpcmUoJy4vY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZScpKTtcclxuXHJcbmNvbnN0IGFwcCA9IG5ldyBWdWUoe1xyXG4gICAgZWw6ICcjYXBwJ1xyXG59KTtcclxuKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnRyeSB7XHJcbiAgICB3aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKVxyXG59IGNhdGNoIChlKSB7fVxyXG5cclxuY29uc3QgY2hhbmdlSWNvbiA9ICQoJy5tYXJxdWUnKVxyXG5jb25zdCBkcm9wRG93bk1hcnF1ZSA9ICQoJy5tYXJxdWUtc2VsZWN0JylcclxuXHJcbi8vIEZhbmN5Qm94IENvbW11bmVzXHJcbi8vIENvbmZpcm1hdGlvbiBcclxuJC5mYW5jeUNvbmZpcm0gPSBmdW5jdGlvbiggb3B0cyApIHtcclxuICAgIG9wdHMgID0gJC5leHRlbmQoIHRydWUsIHtcclxuICAgICAgdGl0bGUgICAgIDogJ0FyZSB5b3Ugc3VyZT8nLFxyXG4gICAgICBtZXNzYWdlICAgOiAnJyxcclxuICAgICAgb2tCdXR0b24gIDogJ09LJyxcclxuICAgICAgbm9CdXR0b24gIDogJ0NhbmNlbCcsXHJcbiAgICAgIGNhbGxiYWNrICA6ICQubm9vcFxyXG4gICAgfSwgb3B0cyB8fCB7fSApO1xyXG4gIFxyXG4gICAgJC5mYW5jeWJveC5vcGVuKHtcclxuICAgICAgdHlwZSA6ICdodG1sJyxcclxuICAgICAgc3JjICA6XHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiZmMtY29udGVudFwiPicgK1xyXG4gICAgICAnPGgzPicgKyBvcHRzLnRpdGxlICAgKyAnPC9oMz4nICtcclxuICAgICAgJzxwPicgICsgb3B0cy5tZXNzYWdlICsgJzwvcD4nICtcclxuICAgICAgJzxwIGNsYXNzPVwidHJpZ2h0XCI+JyArXHJcbiAgICAgICc8YSBkYXRhLXZhbHVlPVwiMFwiIGRhdGEtZmFuY3lib3gtY2xvc2U+JyArIG9wdHMubm9CdXR0b24gKyAnPC9hPicgK1xyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICBcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4vLyBJbmZvcm1hdGlvbnNcclxuICAkLmZhbmN5SW5mbyA9IGZ1bmN0aW9uKCBvcHRzICkge1xyXG4gICAgb3B0cyAgPSAkLmV4dGVuZCggdHJ1ZSwge1xyXG4gICAgICB0aXRsZSAgICAgOiAnQXJlIHlvdSBzdXJlPycsXHJcbiAgICAgIG1lc3NhZ2UgICA6ICcnLFxyXG4gICAgICBva0J1dHRvbiAgOiAnT0snLFxyXG4gICAgICBub0J1dHRvbiAgOiAnQ2FuY2VsJyxcclxuICAgICAgY2FsbGJhY2sgIDogJC5ub29wXHJcbiAgICB9LCBvcHRzIHx8IHt9ICk7XHJcbiAgXHJcbiAgICAkLmZhbmN5Ym94Lm9wZW4oe1xyXG4gICAgICB0eXBlIDogJ2h0bWwnLFxyXG4gICAgICBzcmMgIDpcclxuICAgICAgJzxkaXYgY2xhc3M9XCJmYy1jb250ZW50XCI+JyArXHJcbiAgICAgICc8aDMgY2xhc3M9XCJpbmZvXCI+JyArIG9wdHMudGl0bGUgICArICc8L2gzPicgK1xyXG4gICAgICAnPHA+JyAgKyBvcHRzLm1lc3NhZ2UgKyAnPC9wPicgK1xyXG4gICAgICAnPHAgY2xhc3M9XCJ0cmlnaHRcIj4nICtcclxuICAgICAgJzxhIGRhdGEtdmFsdWU9XCIwXCIgZGF0YS1mYW5jeWJveC1jbG9zZT4nICsgb3B0cy5ub0J1dHRvbiArICc8L2E+JyArIFxyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuY2hhbmdlSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XHJcbiAgICBpZihkcm9wRG93bk1hcnF1ZS5jc3MoJ2Rpc3BsYXknKSA9PSBcIm5vbmVcIil7XHJcbiAgICAgICAgZHJvcERvd25NYXJxdWUuc2xpZGVEb3duKCdmYXN0Jyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRyb3BEb3duTWFycXVlLnNsaWRlVXAoJ2Zhc3QnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBkZWxldGVJY29ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZWxldGUtaWNvbicpXHJcblxyXG5sZXQgY29uZmlybURlbGV0ZSA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIGxldCB1cmwgPSBlLnRhcmdldC5wYXJlbnRFbGVtZW50LmhyZWZcclxuICAgIGxldCBmb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RlbGV0ZS1oaWRkZW4nKVxyXG5cclxuICAgICQuZmFuY3lDb25maXJtKHtcclxuICAgICAgICB0aXRsZSAgICAgOiBcIjxpIGNsYXNzPSdmYXMgZmEtdGltZXMtY2lyY2xlJz48L2k+IFN1cHByZXNzaW9uXCIsXHJcbiAgICAgICAgbWVzc2FnZSAgIDogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBlZmZhY2VyIGNldCDDqWzDqW1lbnQgP1wiLFxyXG4gICAgICAgIG9rQnV0dG9uICA6ICdTdXBwcmltZXInLFxyXG4gICAgICAgIG5vQnV0dG9uICA6ICdBbm51bGVyJyxcclxuICAgICAgICBjYWxsYmFjayAgOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3JtLmFjdGlvbiA9IHVybFxyXG4gICAgICAgICAgICBmb3JtLnN1Ym1pdCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxufVxyXG5cclxuZGVsZXRlSWNvbnMuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29uZmlybURlbGV0ZSlcclxufSlcclxuXHJcblxyXG4kKCcuYnVyZ2VyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICQodGhpcykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdibG9jaycpO1xyXG59KVxyXG5cclxuJCgnLmNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJy03NXB4Jyk7XHJcbiAgICAkKHRoaXMpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbn0pXHJcblxyXG4kKCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiA3NjhweClcIikubWF0Y2hlcykge1xyXG4gICAgICAgICQoJy5idXJnZXInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgICAgJCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkKCduYXYnKS5jc3MoJ2xlZnQnLCAnLTc1cHgnKTtcclxuICAgICAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgJCgnLmNsb3NlJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgfVxyXG59KTtcclxuXHJcbiQoJyNjYW1wX3R5cGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS52YWwoKSA9PSAxIHx8ICQodGhpcykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkKCcubGltaXRQcmludGluZycpLmNzcygnb3BhY2l0eScsICcwJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5Jykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cXVhbnRpdHknKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzAnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG4kKCcjY291cG9uX25vcm1lJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5nczFjb2RlJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XHJcbiAgICBpZigkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMSB8fCAkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG4gICAgaWYoJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5JykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fbm9ybWUnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuJCgnLmFkZGNhbGVuZGFyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jYWxlbmRhcicpLmFwcGVuZCgnPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtY2FsZW5kYXJcIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwic3RhcnRkYXRlW11cIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwiZW5kZGF0ZVtdXCI+PGkgY2xhc3M9XCJmYXMgZmEtbWludXMtc3F1YXJlIHJlbW92ZWNhbGVuZGFyXCI+PC9pPjwvZGl2PicpO1xyXG59KTtcclxuXHJcbiQoJy5jYWxlbmRhcicpLm9uKCdjbGljaycsICcucmVtb3ZlY2FsZW5kYXInLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnLmZvcm0tZmllbGQtY2FsZW5kYXInKS5yZW1vdmUoKTtcclxufSlcclxuXHJcbiQoJy5hZGQtbW91dmVtZW50LWJ0bicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgZWxlbWVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICB2YXIgbW91dmVtZW50RGF0ZSA9IGVsZW1lbnQuZmluZCgnI2FkZC1tb3V2ZW1lbnQtZGF0ZScpLnZhbCgpO1xyXG4gICAgdmFyIG1vdXZlbWVudE5icmUgPSBlbGVtZW50LmZpbmQoJyNhZGQtbW91dmVtZW50LW5icmUnKS52YWwoKTtcclxuICAgIHZhciBodG1sID0gXCI8dHI+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPlwiK21vdXZlbWVudERhdGUuc3BsaXQoJy0nKS5yZXZlcnNlKCkuam9pbignLycpK1wiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nbW91dmVtZW50RGF0ZVtdJyB2YWx1ZT0nXCIrbW91dmVtZW50RGF0ZStcIic+PC90aD5cIjtcclxuICAgIGh0bWwgKz0gXCI8dGg+XCIrbW91dmVtZW50TmJyZStcIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J21vdXZlbWVudE5icmVbXScgdmFsdWU9J1wiK21vdXZlbWVudE5icmUrXCInPjwvdGg+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPjwvdGg+PC90cj5cIjtcclxuICAgICQoJy5hZGQtbW91dmVtZW50JykuYmVmb3JlKGh0bWwpO1xyXG59KVxyXG5cclxuXHJcbiQoJy5jb250YWN0V2lkZ2V0cycpLm9uKCdjbGljaycsICcuY29weS11cmwnLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgYW5pbUVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5saW5rLWNvcGllZCcpO1xyXG4gICAgdmFyICR0ZW1wRWxlbWVudCA9ICQoXCI8aW5wdXQ+XCIpO1xyXG4gICAgJChcImJvZHlcIikuYXBwZW5kKCR0ZW1wRWxlbWVudCk7XHJcbiAgICAkdGVtcEVsZW1lbnQudmFsKCQodGhpcykudGV4dCgpKS5zZWxlY3QoKTtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiQ29weVwiKTtcclxuICAgICR0ZW1wRWxlbWVudC5yZW1vdmUoKTtcclxuICAgIGFuaW1FbGVtZW50LmFuaW1hdGUoe29wYWNpdHk6IDF9LCAyMDAsIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhbmltRWxlbWVudC5hbmltYXRlKHtvcGFjaXR5OiAwfSwgMTAwMCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG5cclxuLy8gLS0tLSBEQVNIQk9BUkQgQlVUVE9OU1xyXG5cclxuJCgnLmNhbXBEZXRhaWwgLmZhLWFuZ2xlLWRvd24nKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgY3BEaXYgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5jb3Vwb25zJyk7XHJcbiAgICBpZihjcERpdi5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpe1xyXG4gICAgICAgIGNwRGl2LnNsaWRlRG93big1MDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjcERpdi5zbGlkZVVwKDUwMCk7XHJcbiAgICB9XHJcbn0pXHJcblxyXG4kKCcub3Blbi1hbGwnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgJCgnLmNvdXBvbnMnKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCh0aGlzKS5zbGlkZURvd24oNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4kKCcuY2xvc2UtYWxsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25zJykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICQodGhpcykuc2xpZGVVcCg1MDApO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC0tLS0gQUxFUlRFIHN1ciBDYW1wYWduZVxyXG5cclxuJCgnLmNvdXBvbkRldGFpbCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgIGlmKCQodGhpcykuYXR0cignZGF0YS1wcmludGFibGUnKSA9PSAwKXtcclxuICAgICAgICBjb25zb2xlLmxvZygpO1xyXG4gICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuZmluZCgnLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJykuc2hvdygpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuXHJcbiQoJ2JvZHknKS5vbignY2xpY2snLCAnLmNvdXBvblN0YXRzIGg0JywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHZhciBjb250ZW50RGl2ID0gJCh0aGlzKS5wYXJlbnQoKS5maW5kKCcuY29udGVudCcpXHJcblxyXG4gICAgaWYoY29udGVudERpdi5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpe1xyXG4gICAgICAgIGNvbnRlbnREaXYuc2xpZGVEb3duKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRlbnREaXYuc2xpZGVVcCgpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuJCgnLm9wZW4tYWxsLXN0YXRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25TdGF0cyAuY29udGVudCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICAkKHRoaXMpLnNsaWRlRG93big1MDApO1xyXG4gICAgfSlcclxufSlcclxuXHJcbiQoJy5jbG9zZS1hbGwtc3RhdHMnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgJCgnLmNvdXBvblN0YXRzIC5jb250ZW50JykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICQodGhpcykuc2xpZGVVcCg1MDApO1xyXG4gICAgfSlcclxufSlcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9yZXNvdXJjZXMvanMvYXBwLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1\n"); +eval("/**\r\n * First we will load all of this project's JavaScript dependencies which\r\n * includes Vue and other libraries. It is a great starting point when\r\n * building robust, powerful web applications using Vue and Laravel.\r\n */\n\n/*\r\nrequire('./bootstrap');\r\n\r\nwindow.Vue = require('vue');\r\n\r\n/**\r\n * Next, we will create a fresh Vue application instance and attach it to\r\n * the page. Then, you may begin adding components to this application\r\n * or customize the JavaScript scaffolding to fit your unique needs.\r\n */\n\n/*\r\nVue.component('example-component', require('./components/ExampleComponent.vue'));\r\n\r\nconst app = new Vue({\r\n el: '#app'\r\n});\r\n*/\n\n\n\ntry {\n window.$ = window.jQuery = __webpack_require__(2);\n} catch (e) {}\n\nvar changeIcon = $('.marque');\nvar dropDownMarque = $('.marque-select');\n\n// FancyBox Communes\n// Confirmation \n$.fancyConfirm = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '
' + '

' + opts.title + '

' + '

' + opts.message + '

' + '

' + '' + opts.noButton + '' + '' + '

' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '
' + '
' + '
' + '
' + '
' + '
',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n\n opts.callback(value);\n }\n }\n });\n};\n\n// Informations\n$.fancyInfo = function (opts) {\n opts = $.extend(true, {\n title: 'Are you sure?',\n message: '',\n okButton: 'OK',\n noButton: 'Cancel',\n callback: $.noop\n }, opts || {});\n\n $.fancybox.open({\n type: 'html',\n src: '
' + '

' + opts.title + '

' + '

' + opts.message + '

' + '

' + '' + opts.noButton + '' + '' + '

' + '
',\n opts: {\n animationDuration: 350,\n animationEffect: 'material',\n modal: true,\n baseTpl: '
' + '
' + '
' + '
' + '
' + '
',\n afterClose: function afterClose(instance, current, e) {\n var button = e ? e.target || e.currentTarget : null;\n var value = button ? $(button).data('value') : 0;\n opts.callback(value);\n }\n }\n });\n};\n\nchangeIcon.on('click', function () {\n if (dropDownMarque.css('display') == \"none\") {\n dropDownMarque.slideDown('fast');\n } else {\n dropDownMarque.slideUp('fast');\n }\n});\n\nvar deleteIcons = document.querySelectorAll('.delete-icon');\n\nvar confirmDelete = function confirmDelete(e) {\n e.preventDefault();\n var url = e.target.parentElement.href;\n var form = document.querySelector('#delete-hidden');\n\n $.fancyConfirm({\n title: \" Suppression\",\n message: \"Êtes-vous sûr de vouloir effacer cet élément ?\",\n okButton: 'Supprimer',\n noButton: 'Annuler',\n callback: function callback(value) {\n if (value) {\n form.action = url;\n form.submit();\n }\n }\n });\n};\n\ndeleteIcons.forEach(function (el) {\n el.addEventListener('click', confirmDelete);\n});\n\n$('.burger').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '0');\n $(this).css('display', 'none');\n $('.close').css('display', 'block');\n});\n\n$('.close').on('click', function (e) {\n e.preventDefault();\n $(this).parent('nav').css('left', '-75px');\n $(this).css('display', 'none');\n $('.burger').css('display', 'block');\n});\n\n$(window).resize(function () {\n if (window.matchMedia(\"(min-width: 768px)\").matches) {\n $('.burger').css('display', 'none');\n $('.close').css('display', 'none');\n $('nav').css('left', '0');\n } else {\n $('nav').css('left', '-75px');\n $('.burger').css('display', 'block');\n $('.close').css('display', 'none');\n }\n});\n\n$('#camp_type').on('change', function (event) {\n if ($(this).val() == 1 || $(this).val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n } else {\n $('.limitPrinting').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitquantity').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n } else {\n $('.enablelimitquantity').css('opacity', '0');\n }\n});\n\n$('#coupon_enablelimitperiod').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n } else {\n $('.enablelimitperiod').css('opacity', '0');\n }\n});\n\n$('#coupon_norme').on('change', function (event) {\n if ($(this).is(':checked')) {\n $('.gs1code').css('opacity', '1');\n } else {\n $('.gs1code').css('opacity', '0');\n }\n});\n\n$(document).ready(function () {\n if ($('#camp_type').val() == 1 || $('#camp_type').val() == 3) {\n $('.limitPrinting').css('opacity', '1');\n }\n if ($('#coupon_enablelimitquantity').is(':checked')) {\n $('.enablelimitquantity').css('opacity', '1');\n }\n if ($('#coupon_enablelimitperiod').is(':checked')) {\n $('.enablelimitperiod').css('opacity', '1');\n }\n if ($('#coupon_norme').is(':checked')) {\n $('.gs1code').css('opacity', '1');\n }\n});\n\n$('.addcalendar').on('click', function (event) {\n event.preventDefault();\n $('.calendar').append('
');\n});\n\n$('.calendar').on('click', '.removecalendar', function (event) {\n $(this).parent('.form-field-calendar').remove();\n});\n\n$('.add-mouvement-btn').on('click', function (event) {\n event.preventDefault();\n var element = $(this).parent().parent();\n var mouvementDate = element.find('#add-mouvement-date').val();\n var mouvementNbre = element.find('#add-mouvement-nbre').val();\n var html = \"\";\n html += \"\" + mouvementDate.split('-').reverse().join('/') + \"\";\n html += \"\" + mouvementNbre + \"\";\n html += \"\";\n $('.add-mouvement').before(html);\n});\n\n$('.contactWidgets').on('click', '.copy-url', function (event) {\n var animElement = $(this).parent().parent().find('.link-copied');\n var $tempElement = $(\"\");\n $(\"body\").append($tempElement);\n $tempElement.val($(this).text()).select();\n document.execCommand(\"Copy\");\n $tempElement.remove();\n animElement.animate({ opacity: 1 }, 200, function () {\n setTimeout(function () {\n animElement.animate({ opacity: 0 }, 1000);\n }, 500);\n });\n});\n\n// ---- DASHBOARD BUTTONS\n\n$('.campDetail .fa-angle-down').on('click', function (event) {\n var cpDiv = $(this).parent().parent().parent().find('.coupons');\n if (cpDiv.css('display') == 'none') {\n cpDiv.slideDown(500);\n } else {\n cpDiv.slideUp(500);\n }\n});\n\n$('.open-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all').on('click', function (event) {\n event.preventDefault();\n $('.coupons').each(function () {\n $(this).slideUp(500);\n });\n});\n\n// ---- ALERTE sur Campagne\n\n$('.couponDetail').each(function () {\n if ($(this).attr('data-printable') == 0) {\n console.log();\n $(this).parent().parent().parent().parent().find('.fa-exclamation-triangle').show();\n }\n});\n\n$('body').on('click', '.expand', function (event) {\n event.preventDefault();\n var contentDiv = $(this).parent().parent().find('.content');\n\n if (contentDiv.css('display') == 'none') {\n contentDiv.slideDown();\n } else {\n contentDiv.slideUp();\n }\n});\n\n$('.open-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideDown(500);\n });\n});\n\n$('.close-all-stats').on('click', function (event) {\n event.preventDefault();\n $('.couponStats .content').each(function () {\n $(this).slideUp(500);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYXBwLmpzPzE3NTkiXSwibmFtZXMiOlsid2luZG93IiwiJCIsImpRdWVyeSIsInJlcXVpcmUiLCJlIiwiY2hhbmdlSWNvbiIsImRyb3BEb3duTWFycXVlIiwiZmFuY3lDb25maXJtIiwib3B0cyIsImV4dGVuZCIsInRpdGxlIiwibWVzc2FnZSIsIm9rQnV0dG9uIiwibm9CdXR0b24iLCJjYWxsYmFjayIsIm5vb3AiLCJmYW5jeWJveCIsIm9wZW4iLCJ0eXBlIiwic3JjIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJhbmltYXRpb25FZmZlY3QiLCJtb2RhbCIsImJhc2VUcGwiLCJhZnRlckNsb3NlIiwiaW5zdGFuY2UiLCJjdXJyZW50IiwiYnV0dG9uIiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsInZhbHVlIiwiZGF0YSIsImZhbmN5SW5mbyIsIm9uIiwiY3NzIiwic2xpZGVEb3duIiwic2xpZGVVcCIsImRlbGV0ZUljb25zIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY29uZmlybURlbGV0ZSIsInByZXZlbnREZWZhdWx0IiwidXJsIiwicGFyZW50RWxlbWVudCIsImhyZWYiLCJmb3JtIiwicXVlcnlTZWxlY3RvciIsImFjdGlvbiIsInN1Ym1pdCIsImZvckVhY2giLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXJlbnQiLCJyZXNpemUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImV2ZW50IiwidmFsIiwiaXMiLCJyZWFkeSIsImFwcGVuZCIsInJlbW92ZSIsImVsZW1lbnQiLCJtb3V2ZW1lbnREYXRlIiwiZmluZCIsIm1vdXZlbWVudE5icmUiLCJodG1sIiwic3BsaXQiLCJyZXZlcnNlIiwiam9pbiIsImJlZm9yZSIsImFuaW1FbGVtZW50IiwiJHRlbXBFbGVtZW50IiwidGV4dCIsInNlbGVjdCIsImV4ZWNDb21tYW5kIiwiYW5pbWF0ZSIsIm9wYWNpdHkiLCJzZXRUaW1lb3V0IiwiY3BEaXYi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TWYsY0FBTjtBQUNBeEMsTUFBRSx1QkFBRixFQUEyQitFLElBQTNCLENBQWdDLFlBQVU7QUFDdEMvRSxVQUFFLElBQUYsRUFBUWtDLFNBQVIsQ0FBa0IsR0FBbEI7QUFDSCxLQUZEO0FBR0gsQ0FMRDs7QUFPQWxDLEVBQUUsa0JBQUYsRUFBc0JnQyxFQUF0QixDQUF5QixPQUF6QixFQUFrQyxVQUFTdUIsS0FBVCxFQUFlO0FBQzdDQSxVQUFNZixjQUFOO0FBQ0F4QyxNQUFFLHVCQUFGLEVBQTJCK0UsSUFBM0IsQ0FBZ0MsWUFBVTtBQUN0Qy9FLFVBQUUsSUFBRixFQUFRbUMsT0FBUixDQUFnQixHQUFoQjtBQUNILEtBRkQ7QUFHSCxDQUxEIiwiZmlsZSI6IjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRmlyc3Qgd2Ugd2lsbCBsb2FkIGFsbCBvZiB0aGlzIHByb2plY3QncyBKYXZhU2NyaXB0IGRlcGVuZGVuY2llcyB3aGljaFxyXG4gKiBpbmNsdWRlcyBWdWUgYW5kIG90aGVyIGxpYnJhcmllcy4gSXQgaXMgYSBncmVhdCBzdGFydGluZyBwb2ludCB3aGVuXHJcbiAqIGJ1aWxkaW5nIHJvYnVzdCwgcG93ZXJmdWwgd2ViIGFwcGxpY2F0aW9ucyB1c2luZyBWdWUgYW5kIExhcmF2ZWwuXHJcbiAqL1xyXG5cclxuLypcclxucmVxdWlyZSgnLi9ib290c3RyYXAnKTtcclxuXHJcbndpbmRvdy5WdWUgPSByZXF1aXJlKCd2dWUnKTtcclxuXHJcbi8qKlxyXG4gKiBOZXh0LCB3ZSB3aWxsIGNyZWF0ZSBhIGZyZXNoIFZ1ZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSBhbmQgYXR0YWNoIGl0IHRvXHJcbiAqIHRoZSBwYWdlLiBUaGVuLCB5b3UgbWF5IGJlZ2luIGFkZGluZyBjb21wb25lbnRzIHRvIHRoaXMgYXBwbGljYXRpb25cclxuICogb3IgY3VzdG9taXplIHRoZSBKYXZhU2NyaXB0IHNjYWZmb2xkaW5nIHRvIGZpdCB5b3VyIHVuaXF1ZSBuZWVkcy5cclxuICovXHJcblxyXG4vKlxyXG5WdWUuY29tcG9uZW50KCdleGFtcGxlLWNvbXBvbmVudCcsIHJlcXVpcmUoJy4vY29tcG9uZW50cy9FeGFtcGxlQ29tcG9uZW50LnZ1ZScpKTtcclxuXHJcbmNvbnN0IGFwcCA9IG5ldyBWdWUoe1xyXG4gICAgZWw6ICcjYXBwJ1xyXG59KTtcclxuKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbnRyeSB7XHJcbiAgICB3aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKVxyXG59IGNhdGNoIChlKSB7fVxyXG5cclxuY29uc3QgY2hhbmdlSWNvbiA9ICQoJy5tYXJxdWUnKVxyXG5jb25zdCBkcm9wRG93bk1hcnF1ZSA9ICQoJy5tYXJxdWUtc2VsZWN0JylcclxuXHJcbi8vIEZhbmN5Qm94IENvbW11bmVzXHJcbi8vIENvbmZpcm1hdGlvbiBcclxuJC5mYW5jeUNvbmZpcm0gPSBmdW5jdGlvbiggb3B0cyApIHtcclxuICAgIG9wdHMgID0gJC5leHRlbmQoIHRydWUsIHtcclxuICAgICAgdGl0bGUgICAgIDogJ0FyZSB5b3Ugc3VyZT8nLFxyXG4gICAgICBtZXNzYWdlICAgOiAnJyxcclxuICAgICAgb2tCdXR0b24gIDogJ09LJyxcclxuICAgICAgbm9CdXR0b24gIDogJ0NhbmNlbCcsXHJcbiAgICAgIGNhbGxiYWNrICA6ICQubm9vcFxyXG4gICAgfSwgb3B0cyB8fCB7fSApO1xyXG4gIFxyXG4gICAgJC5mYW5jeWJveC5vcGVuKHtcclxuICAgICAgdHlwZSA6ICdodG1sJyxcclxuICAgICAgc3JjICA6XHJcbiAgICAgICc8ZGl2IGNsYXNzPVwiZmMtY29udGVudFwiPicgK1xyXG4gICAgICAnPGgzPicgKyBvcHRzLnRpdGxlICAgKyAnPC9oMz4nICtcclxuICAgICAgJzxwPicgICsgb3B0cy5tZXNzYWdlICsgJzwvcD4nICtcclxuICAgICAgJzxwIGNsYXNzPVwidHJpZ2h0XCI+JyArXHJcbiAgICAgICc8YSBkYXRhLXZhbHVlPVwiMFwiIGRhdGEtZmFuY3lib3gtY2xvc2U+JyArIG9wdHMubm9CdXR0b24gKyAnPC9hPicgK1xyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICBcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4vLyBJbmZvcm1hdGlvbnNcclxuICAkLmZhbmN5SW5mbyA9IGZ1bmN0aW9uKCBvcHRzICkge1xyXG4gICAgb3B0cyAgPSAkLmV4dGVuZCggdHJ1ZSwge1xyXG4gICAgICB0aXRsZSAgICAgOiAnQXJlIHlvdSBzdXJlPycsXHJcbiAgICAgIG1lc3NhZ2UgICA6ICcnLFxyXG4gICAgICBva0J1dHRvbiAgOiAnT0snLFxyXG4gICAgICBub0J1dHRvbiAgOiAnQ2FuY2VsJyxcclxuICAgICAgY2FsbGJhY2sgIDogJC5ub29wXHJcbiAgICB9LCBvcHRzIHx8IHt9ICk7XHJcbiAgXHJcbiAgICAkLmZhbmN5Ym94Lm9wZW4oe1xyXG4gICAgICB0eXBlIDogJ2h0bWwnLFxyXG4gICAgICBzcmMgIDpcclxuICAgICAgJzxkaXYgY2xhc3M9XCJmYy1jb250ZW50XCI+JyArXHJcbiAgICAgICc8aDMgY2xhc3M9XCJpbmZvXCI+JyArIG9wdHMudGl0bGUgICArICc8L2gzPicgK1xyXG4gICAgICAnPHA+JyAgKyBvcHRzLm1lc3NhZ2UgKyAnPC9wPicgK1xyXG4gICAgICAnPHAgY2xhc3M9XCJ0cmlnaHRcIj4nICtcclxuICAgICAgJzxhIGRhdGEtdmFsdWU9XCIwXCIgZGF0YS1mYW5jeWJveC1jbG9zZT4nICsgb3B0cy5ub0J1dHRvbiArICc8L2E+JyArIFxyXG4gICAgICAnPGJ1dHRvbiBkYXRhLXZhbHVlPVwiMVwiIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJidG5cIj4nICsgb3B0cy5va0J1dHRvbiArICc8L2J1dHRvbj4nICtcclxuICAgICAgJzwvcD4nICtcclxuICAgICAgJzwvZGl2PicsXHJcbiAgICAgIG9wdHMgOiB7XHJcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb24gOiAzNTAsXHJcbiAgICAgICAgYW5pbWF0aW9uRWZmZWN0ICAgOiAnbWF0ZXJpYWwnLFxyXG4gICAgICAgIG1vZGFsIDogdHJ1ZSxcclxuICAgICAgICBiYXNlVHBsIDpcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWNvbnRhaW5lciBmYy1jb250YWluZXJcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwiZmFuY3lib3gtYmdcIj48L2Rpdj4nICtcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImZhbmN5Ym94LWlubmVyXCI+JyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJmYW5jeWJveC1zdGFnZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICBhZnRlckNsb3NlIDogZnVuY3Rpb24oIGluc3RhbmNlLCBjdXJyZW50LCBlICkge1xyXG4gICAgICAgICAgdmFyIGJ1dHRvbiA9IGUgPyBlLnRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQgOiBudWxsO1xyXG4gICAgICAgICAgdmFyIHZhbHVlICA9IGJ1dHRvbiA/ICQoYnV0dG9uKS5kYXRhKCd2YWx1ZScpIDogMDtcclxuICAgICAgICAgIG9wdHMuY2FsbGJhY2soIHZhbHVlICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuY2hhbmdlSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XHJcbiAgICBpZihkcm9wRG93bk1hcnF1ZS5jc3MoJ2Rpc3BsYXknKSA9PSBcIm5vbmVcIil7XHJcbiAgICAgICAgZHJvcERvd25NYXJxdWUuc2xpZGVEb3duKCdmYXN0Jyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRyb3BEb3duTWFycXVlLnNsaWRlVXAoJ2Zhc3QnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBkZWxldGVJY29ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZWxldGUtaWNvbicpXHJcblxyXG5sZXQgY29uZmlybURlbGV0ZSA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIGxldCB1cmwgPSBlLnRhcmdldC5wYXJlbnRFbGVtZW50LmhyZWZcclxuICAgIGxldCBmb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RlbGV0ZS1oaWRkZW4nKVxyXG5cclxuICAgICQuZmFuY3lDb25maXJtKHtcclxuICAgICAgICB0aXRsZSAgICAgOiBcIjxpIGNsYXNzPSdmYXMgZmEtdGltZXMtY2lyY2xlJz48L2k+IFN1cHByZXNzaW9uXCIsXHJcbiAgICAgICAgbWVzc2FnZSAgIDogXCLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBlZmZhY2VyIGNldCDDqWzDqW1lbnQgP1wiLFxyXG4gICAgICAgIG9rQnV0dG9uICA6ICdTdXBwcmltZXInLFxyXG4gICAgICAgIG5vQnV0dG9uICA6ICdBbm51bGVyJyxcclxuICAgICAgICBjYWxsYmFjayAgOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3JtLmFjdGlvbiA9IHVybFxyXG4gICAgICAgICAgICBmb3JtLnN1Ym1pdCgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxufVxyXG5cclxuZGVsZXRlSWNvbnMuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29uZmlybURlbGV0ZSlcclxufSlcclxuXHJcblxyXG4kKCcuYnVyZ2VyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICQodGhpcykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdibG9jaycpO1xyXG59KVxyXG5cclxuJCgnLmNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnbmF2JykuY3NzKCdsZWZ0JywgJy03NXB4Jyk7XHJcbiAgICAkKHRoaXMpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbn0pXHJcblxyXG4kKCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiA3NjhweClcIikubWF0Y2hlcykge1xyXG4gICAgICAgICQoJy5idXJnZXInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgICQoJy5jbG9zZScpLmNzcygnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgICAgJCgnbmF2JykuY3NzKCdsZWZ0JywgJzAnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkKCduYXYnKS5jc3MoJ2xlZnQnLCAnLTc1cHgnKTtcclxuICAgICAgICAkKCcuYnVyZ2VyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgJCgnLmNsb3NlJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgfVxyXG59KTtcclxuXHJcbiQoJyNjYW1wX3R5cGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS52YWwoKSA9PSAxIHx8ICQodGhpcykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkKCcubGltaXRQcmludGluZycpLmNzcygnb3BhY2l0eScsICcwJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5Jykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cXVhbnRpdHknKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzAnKTtcclxuICAgIH1cclxufSk7XHJcblxyXG4kKCcjY291cG9uX25vcm1lJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5nczFjb2RlJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XHJcbiAgICBpZigkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMSB8fCAkKCcjY2FtcF90eXBlJykudmFsKCkgPT0gMyl7XHJcbiAgICAgICAgJCgnLmxpbWl0UHJpbnRpbmcnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG4gICAgaWYoJCgnI2NvdXBvbl9lbmFibGVsaW1pdHF1YW50aXR5JykuaXMoJzpjaGVja2VkJykpe1xyXG4gICAgICAgICQoJy5lbmFibGVsaW1pdHF1YW50aXR5JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fZW5hYmxlbGltaXRwZXJpb2QnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmVuYWJsZWxpbWl0cGVyaW9kJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcclxuICAgIH1cclxuICAgIGlmKCQoJyNjb3Vwb25fbm9ybWUnKS5pcygnOmNoZWNrZWQnKSl7XHJcbiAgICAgICAgJCgnLmdzMWNvZGUnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuJCgnLmFkZGNhbGVuZGFyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jYWxlbmRhcicpLmFwcGVuZCgnPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtY2FsZW5kYXJcIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwic3RhcnRkYXRlW11cIj48aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwiZW5kZGF0ZVtdXCI+PGkgY2xhc3M9XCJmYXMgZmEtbWludXMtc3F1YXJlIHJlbW92ZWNhbGVuZGFyXCI+PC9pPjwvZGl2PicpO1xyXG59KTtcclxuXHJcbiQoJy5jYWxlbmRhcicpLm9uKCdjbGljaycsICcucmVtb3ZlY2FsZW5kYXInLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICAkKHRoaXMpLnBhcmVudCgnLmZvcm0tZmllbGQtY2FsZW5kYXInKS5yZW1vdmUoKTtcclxufSlcclxuXHJcbiQoJy5hZGQtbW91dmVtZW50LWJ0bicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgZWxlbWVudCA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCk7XHJcbiAgICB2YXIgbW91dmVtZW50RGF0ZSA9IGVsZW1lbnQuZmluZCgnI2FkZC1tb3V2ZW1lbnQtZGF0ZScpLnZhbCgpO1xyXG4gICAgdmFyIG1vdXZlbWVudE5icmUgPSBlbGVtZW50LmZpbmQoJyNhZGQtbW91dmVtZW50LW5icmUnKS52YWwoKTtcclxuICAgIHZhciBodG1sID0gXCI8dHI+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPlwiK21vdXZlbWVudERhdGUuc3BsaXQoJy0nKS5yZXZlcnNlKCkuam9pbignLycpK1wiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nbW91dmVtZW50RGF0ZVtdJyB2YWx1ZT0nXCIrbW91dmVtZW50RGF0ZStcIic+PC90aD5cIjtcclxuICAgIGh0bWwgKz0gXCI8dGg+XCIrbW91dmVtZW50TmJyZStcIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J21vdXZlbWVudE5icmVbXScgdmFsdWU9J1wiK21vdXZlbWVudE5icmUrXCInPjwvdGg+XCI7XHJcbiAgICBodG1sICs9IFwiPHRoPjwvdGg+PC90cj5cIjtcclxuICAgICQoJy5hZGQtbW91dmVtZW50JykuYmVmb3JlKGh0bWwpO1xyXG59KVxyXG5cclxuXHJcbiQoJy5jb250YWN0V2lkZ2V0cycpLm9uKCdjbGljaycsICcuY29weS11cmwnLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgYW5pbUVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5saW5rLWNvcGllZCcpO1xyXG4gICAgdmFyICR0ZW1wRWxlbWVudCA9ICQoXCI8aW5wdXQ+XCIpO1xyXG4gICAgJChcImJvZHlcIikuYXBwZW5kKCR0ZW1wRWxlbWVudCk7XHJcbiAgICAkdGVtcEVsZW1lbnQudmFsKCQodGhpcykudGV4dCgpKS5zZWxlY3QoKTtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiQ29weVwiKTtcclxuICAgICR0ZW1wRWxlbWVudC5yZW1vdmUoKTtcclxuICAgIGFuaW1FbGVtZW50LmFuaW1hdGUoe29wYWNpdHk6IDF9LCAyMDAsIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhbmltRWxlbWVudC5hbmltYXRlKHtvcGFjaXR5OiAwfSwgMTAwMCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG5cclxuLy8gLS0tLSBEQVNIQk9BUkQgQlVUVE9OU1xyXG5cclxuJCgnLmNhbXBEZXRhaWwgLmZhLWFuZ2xlLWRvd24nKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICB2YXIgY3BEaXYgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJy5jb3Vwb25zJyk7XHJcbiAgICBpZihjcERpdi5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpe1xyXG4gICAgICAgIGNwRGl2LnNsaWRlRG93big1MDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjcERpdi5zbGlkZVVwKDUwMCk7XHJcbiAgICB9XHJcbn0pXHJcblxyXG4kKCcub3Blbi1hbGwnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgJCgnLmNvdXBvbnMnKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCh0aGlzKS5zbGlkZURvd24oNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4kKCcuY2xvc2UtYWxsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25zJykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICQodGhpcykuc2xpZGVVcCg1MDApO1xyXG4gICAgfSlcclxufSlcclxuXHJcbi8vIC0tLS0gQUxFUlRFIHN1ciBDYW1wYWduZVxyXG5cclxuJCgnLmNvdXBvbkRldGFpbCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgIGlmKCQodGhpcykuYXR0cignZGF0YS1wcmludGFibGUnKSA9PSAwKXtcclxuICAgICAgICBjb25zb2xlLmxvZygpO1xyXG4gICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkuZmluZCgnLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJykuc2hvdygpO1xyXG4gICAgfVxyXG59KVxyXG5cclxuXHJcbiQoJ2JvZHknKS5vbignY2xpY2snLCAnLmV4cGFuZCcsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB2YXIgY29udGVudERpdiA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCkuZmluZCgnLmNvbnRlbnQnKVxyXG5cclxuICAgIGlmKGNvbnRlbnREaXYuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKXtcclxuICAgICAgICBjb250ZW50RGl2LnNsaWRlRG93bigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb250ZW50RGl2LnNsaWRlVXAoKTtcclxuICAgIH1cclxufSlcclxuXHJcbiQoJy5vcGVuLWFsbC1zdGF0cycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAkKCcuY291cG9uU3RhdHMgLmNvbnRlbnQnKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgJCh0aGlzKS5zbGlkZURvd24oNTAwKTtcclxuICAgIH0pXHJcbn0pXHJcblxyXG4kKCcuY2xvc2UtYWxsLXN0YXRzJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICQoJy5jb3Vwb25TdGF0cyAuY29udGVudCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICAkKHRoaXMpLnNsaWRlVXAoNTAwKTtcclxuICAgIH0pXHJcbn0pXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVzb3VyY2VzL2pzL2FwcC5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n"); /***/ }), /* 2 */ diff --git a/public/test.php b/public/test.php deleted file mode 100644 index cf60860..0000000 --- a/public/test.php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/resources/js/app.js b/resources/js/app.js index 9f2aef0..fa3e437 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -296,9 +296,9 @@ $('.couponDetail').each(function(){ }) -$('body').on('click', '.couponStats h4', function(event){ +$('body').on('click', '.expand', function(event){ event.preventDefault(); - var contentDiv = $(this).parent().find('.content') + var contentDiv = $(this).parent().parent().find('.content') if(contentDiv.css('display') == 'none'){ contentDiv.slideDown(); diff --git a/resources/sass/partials/content.scss b/resources/sass/partials/content.scss index 4c7186f..ea9b373 100644 --- a/resources/sass/partials/content.scss +++ b/resources/sass/partials/content.scss @@ -658,7 +658,13 @@ table { color:$lightgrey; font-weight:bold; background-color:$darkgrey; - cursor:pointer; + span { + cursor:pointer; + &:first-child { + width: 95%; + display: block; + } + } .couponLegend { position:absolute; display:inline-block; @@ -667,6 +673,19 @@ table { width:20px; height:20px; border-radius:50%; + overflow:hidden; + .line { + width: 35px; + height: 20px; + border-bottom: 3px solid red; + -webkit-transform: + translateY(-20px) + translateX(5px) + rotate(27deg); + position: absolute; + top: 9px; + left: -10px; + } } } .content { @@ -696,6 +715,31 @@ table { width:55%; h3 { margin:30px 0 20px 0; + i { + float:right; + margin-left:10px; + cursor: pointer; + } } } +} + +.selector-export { + display:flex; + justify-content:flex-end; + align-items:center; + h4 { + margin:0; + margin-right:20px; + } + input { + min-width: 150px; + &#startdate { + margin-right:20px; + } + } +} +.export-btn { + text-align:right; + margin-top:20px; } \ No newline at end of file diff --git a/resources/sass/partials/fancy.scss b/resources/sass/partials/fancy.scss index 57b4a41..ead5e8d 100644 --- a/resources/sass/partials/fancy.scss +++ b/resources/sass/partials/fancy.scss @@ -3,89 +3,7 @@ padding:20px; min-width:550px; - .inputGroup { - background-color: $grey3; - display: block; - margin: 2px 0; - position: relative; - &.notPublished { - background-color:rgba(223, 0, 0, 0.3); - } - label { - padding: 8px 30px; - width: 100%; - display: block; - text-align: left; - color: $lightgrey; - cursor: pointer; - position: relative; - z-index: 2; - transition: color 200ms ease-in; - overflow: hidden; - box-sizing: border-box; - font-family: 'Nunito-Regular', sans-serif; - &:before { - width: 10px; - height: 10px; - border-radius: 50%; - content: ''; - background-color: $darkgrey; - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%) scale3d(1, 1, 1); - transition: all 300ms cubic-bezier(0.4, 0.0, 0.2, 1); - opacity: 0; - z-index: -1; - } - &:after { - width: 20px; - height: 20px; - content: ''; - border: 1px solid $orange; - background-color: $grey3; - background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E "); - background-repeat: no-repeat; - background-position: -3px -1px; - //border-radius: 50%; - z-index: 2; - position: absolute; - right: 30px; - top: 50%; - transform: translateY(-50%); - cursor: pointer; - transition: all 200ms ease-in; - } - } - - input:checked ~ label { - color: #fff; - - &:before { - transform: translate(-50%, -50%) scale3d(130, 130, 1); - opacity: 1; - } - - &:after { - background-color: $orange; - border-color: $orange; - } - } - - input { - width: 32px; - height: 32px; - order: 1; - z-index: 2; - position: absolute; - right: 30px; - top: 50%; - transform: translateY(-50%); - cursor: pointer; - visibility: hidden; - } - } input[type=submit] { padding:5px 10px; background-color: $orange; @@ -186,4 +104,88 @@ cursor:pointer; margin-right:15px; } +} + +.inputGroup { + background-color: $grey3; + display: block; + margin: 2px 0; + position: relative; + &.notPublished { + background-color:rgba(223, 0, 0, 0.3); + } + label { + padding: 8px 30px; + width: 100%; + display: block; + text-align: left; + color: $lightgrey; + cursor: pointer; + position: relative; + z-index: 2; + transition: color 200ms ease-in; + overflow: hidden; + box-sizing: border-box; + font-family: 'Nunito-Regular', sans-serif; + &:before { + width: 10px; + height: 10px; + border-radius: 50%; + content: ''; + background-color: $darkgrey; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) scale3d(1, 1, 1); + transition: all 300ms cubic-bezier(0.4, 0.0, 0.2, 1); + opacity: 0; + z-index: -1; + } + + &:after { + width: 20px; + height: 20px; + content: ''; + border: 1px solid $orange; + background-color: $grey3; + background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.414 11L4 12.414l5.414 5.414L20.828 6.414 19.414 5l-10 10z' fill='%23393939' fill-rule='nonzero'/%3E%3C/svg%3E "); + background-repeat: no-repeat; + background-position: -3px -1px; + //border-radius: 50%; + z-index: 2; + position: absolute; + right: 30px; + top: 50%; + transform: translateY(-50%); + cursor: pointer; + transition: all 200ms ease-in; + } + } + + input:checked ~ label { + color: #fff; + + &:before { + transform: translate(-50%, -50%) scale3d(130, 130, 1); + opacity: 1; + } + + &:after { + background-color: $orange; + border-color: $orange; + } + } + + input { + width: 32px; + height: 32px; + order: 1; + z-index: 2; + position: absolute; + right: 30px; + top: 50%; + transform: translateY(-50%); + cursor: pointer; + visibility: hidden; + } } \ No newline at end of file diff --git a/resources/sass/partials/reset.scss b/resources/sass/partials/reset.scss index 02c4568..2aa5e8b 100644 --- a/resources/sass/partials/reset.scss +++ b/resources/sass/partials/reset.scss @@ -126,6 +126,14 @@ h5 { } } +h5 { + font-family: 'Nunito-ExtraLight', sans-serif; + font-size:1em; + //font-weight:bold; + color:$orange; + margin: 20px 0 10px 0; +} + p { font-family: 'Nunito-ExtraLight', sans-serif; color:$lightgrey; diff --git a/resources/views/export/index.blade.php b/resources/views/export/index.blade.php new file mode 100644 index 0000000..4e9e0d9 --- /dev/null +++ b/resources/views/export/index.blade.php @@ -0,0 +1,69 @@ +@extends('layouts.main') + +@section('content') +

Export des données coupons

+
+

Période :

+ + + + Exporter les données +
+@foreach ($sites as $site) + +

{{ $site->site_nom }} ({{ $site->site_id }})

+ @if (isset($site->coupons) && $site->coupons->count()>0) + @foreach ($site->coupons as $coupon) +
+ + +
+ @endforeach + @endif + +@endforeach +
+ Exporter les données + +
+ +@endsection + +@section('scripts') + +@endsection \ No newline at end of file diff --git a/resources/views/export/template.blade.php b/resources/views/export/template.blade.php new file mode 100644 index 0000000..86ba669 --- /dev/null +++ b/resources/views/export/template.blade.php @@ -0,0 +1,47 @@ + + + + + + + + + +
+

MesBR.eu

+

{{ $coupon->coupon_name }}

+

Diffusions du {{ date('d/m/Y', strtotime($startdate)) }} au {{ date('d/m/Y', strtotime($enddate)) }}

+ +

Détail du coupon

+ + + + + + + + + + + + + + + @if($coupon->coupon_maxdatediffusion != null) + + @else + + @endif + @if($coupon->coupon_maxdatediffusion != null) + + @else + + @endif + +
NomCodeQuantité totaleQté totale diffuséeDate de début de diffusionDate de fin de diffusion
{{ $coupon->coupon_name }}{{ $coupon->coupon_code }}{{ $coupon->couponQuantity }}{{ $coupon->couponFullPrinted }}{{ date('d/m/Y', strtotime($coupon->coupon_mindatediffusion)) }}n/c{{ date('d/m/Y', strtotime($coupon->coupon_maxdatediffusion)) }}n/c
+

Graphique de diffusion sur la période du {{ date('d/m/Y', strtotime($startdate)) }} au {{ date('d/m/Y', strtotime($enddate)) }}

+

Nombre de coupons diffusés : {{ $coupon->couponPrinted }}

+ +
+ + diff --git a/resources/views/layouts/menu.blade.php b/resources/views/layouts/menu.blade.php index 9773bc2..ebe0389 100644 --- a/resources/views/layouts/menu.blade.php +++ b/resources/views/layouts/menu.blade.php @@ -10,6 +10,7 @@ @endif @if(Auth::user()->roles == "superadmin") Maintenance + Exportation @endif Déconnexion diff --git a/resources/views/stats/detail.blade.php b/resources/views/stats/detail.blade.php index 93c2c12..c083a99 100644 --- a/resources/views/stats/detail.blade.php +++ b/resources/views/stats/detail.blade.php @@ -74,7 +74,7 @@ @foreach ($campagne->coupons as $coupon)
-

{{ $coupon->coupon_name }}

+

{{ $coupon->coupon_name }}

@@ -111,7 +111,7 @@ @endforeach
-

Consommation par coupons

+

Consommation par coupons

@@ -120,6 +120,7 @@ @section('scripts')