diff --git a/.gitignore b/.gitignore index 423e159e..10288524 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ /vendor/ /credentials.json -/releases /node_modules /build lib/vendor/redux-framework diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 226286f7..00000000 --- a/Gruntfile.js +++ /dev/null @@ -1,233 +0,0 @@ -module.exports = function (grunt) { - // Project configuration. - grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - shell: { - composer: { - command: 'composer install --no-dev --no-scripts --prefer-dist' - }, - git_checkout: { - command: 'git checkout-index -a -f --prefix=build/' - }, - clean_build_dependencies: { - command: 'rm -R build/lib/vendor/redux-framework/*.json build/lib/vendor/redux-framework/*.lock build/lib/vendor/redux-framework/sample build/lib/vendor/redux-framework/redux-templates' - }, - copy_redux: { - command: 'cp -R lib/vendor/redux-framework build/lib/vendor/redux-framework' - } - }, - clean: { - pre_build: [ - 'vendor/', - 'build/' - ], - post_build: [ - 'build/' - ], - pre_compress: [ - 'build/releases' - ] - }, - run: { - tool: { - cmd: 'composer' - } - }, - copyto: { - vendor: { - files: [ - { - src: ['vendor/**'], dest: 'build/', - expand: true - } - ] - } - }, - search: { - credentials: { - files: { - src: ["**/credentials.json"] - }, - options: { - failOnMatch: true - } - } - }, - compress: { - main: { - options: { - mode: 'zip', - archive: 'releases/<%= pkg.name %>-<%= pkg.version %>.zip' - }, - expand: true, - cwd: 'build/', - src: [ - '**/*', - '!build/*' - ] - } - }, - gitadd: { - add_zip: { - options: { - force: true - }, - files: { - src: ['releases/<%= pkg.name %>-<%= pkg.version %>.zip'] - } - } - }, - gittag: { - addtag: { - options: { - tag: 'release/<%= pkg.version %>', - message: 'Version <%= pkg.version %>' - } - } - }, - gitcommit: { - commit: { - options: { - message: 'Prepared release <%= pkg.version %>.', - noVerify: true, - noStatus: false, - allowEmpty: true - }, - files: { - src: ['package.json', 'wp-mail-logging.php', 'composer.json', 'composer.lock'] - } - } - }, - gitpush: { - push: { - options: { - tags: true, - remote: 'origin', - branch: 'test-release' - } - } - }, - replace: { - core_file: { - src: ['wp-mail-logging.php'], - overwrite: true, - replacements: [ - { - from: /Version:\s*(.*)/, - to: "Version: <%= pkg.version %>" - } - ] - }, - readme: { - src: ['readme.txt'], - overwrite: true, - replacements: [ - { - from: /Stable tag:\s*(.*)/, - to: "Stable tag: <%= pkg.version %>" - } - ] - } - }, - // 'github-release': { - // options: { - // repository: 'kgjerstad/wp-mail-logging', // Path to repository - // auth: grunt.file.readJSON('credentials.json'), - // release: { - // tag_name: 'release/<%= pkg.version %>', - // name: 'v<%= pkg.version %>', - // body: 'Description of the release', - // draft: true, - // prerelease: true - // } - // }, - // files: { - // src: ['releases/<%= pkg.name %>-<%= pkg.version %>.zip'] - // } - // }, - less: { - compile: { - options: { - paths: ['css'] - }, - files: { - 'css/modal.css': 'css/modal.less' - } - } - }, - makepot: { - target: { - options: { - domainPath: '/languages/', // Where to save the POT file. - exclude: ['build/.*,lib/.*'], - mainFile: 'wp-mail-logging.php', // Main project file. - potFilename: 'wp-mail-logging.pot', // Name of the POT file. - type: 'wp-plugin', // or `wp-theme` - updateTimestamp: true, // Whether the POT-Creation-Date should be updated without other changes. - processPot: function (pot, options) { - pot.headers['language'] = 'en_GB'; - var translation, // Exclude meta data from pot. - excluded_meta = [ - 'Plugin Name of the plugin/theme', - 'Plugin URI of the plugin/theme', - 'Author of the plugin/theme', - 'Author URI of the plugin/theme' - ]; - for (translation in pot.translations['']) { - if ('undefined' !== typeof pot.translations[''][translation].comments.extracted) { - if (excluded_meta.indexOf(pot.translations[''][translation].comments.extracted) >= 0) { - console.log('Excluded meta: ' + pot.translations[''][translation].comments.extracted); - delete pot.translations[''][translation]; - } - } - } - return pot; - } - } - } - }, - dirs: { - lang: 'languages', - }, - potomo: { - dist: { - options: { - poDel: false - }, - files: [{ - expand: true, - cwd: '<%= dirs.lang %>', - src: ['*.po'], - dest: '<%= dirs.lang %>', - ext: '.mo', - nonull: true - }] - } - } - }); - - //load modules - grunt.loadNpmTasks('grunt-search'); - grunt.loadNpmTasks('grunt-copy-to'); - grunt.loadNpmTasks('grunt-contrib-compress'); - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-git'); - grunt.loadNpmTasks('grunt-text-replace'); - grunt.loadNpmTasks('grunt-shell'); - grunt.loadNpmTasks('grunt-github-releaser'); - grunt.loadNpmTasks('grunt-contrib-less'); - grunt.loadNpmTasks('grunt-wp-i18n'); - grunt.loadNpmTasks('grunt-potomo'); - - //release tasks - grunt.registerTask('assert-valid-copy', ['search:credentials']); - grunt.registerTask('copy', ['shell:git_checkout']); - grunt.registerTask('clean_pre_build', ['clean:pre_build']); - grunt.registerTask('version_number', ['replace:core_file', 'replace:readme']); - grunt.registerTask('pre_vcs', ['shell:composer', 'version_number', 'copy', 'copyto:vendor', 'shell:copy_redux','shell:clean_build_dependencies', 'compress']); - grunt.registerTask('do_git', [/*'gitadd',*/ 'gitcommit', 'gittag', 'gitpush']); - - grunt.registerTask('just_build', ['clean_pre_build', 'shell:composer', 'makepot', 'potomo', 'copy', 'copyto:vendor', 'shell:copy_redux','shell:clean_build_dependencies', 'assert-valid-copy', 'compress']); - grunt.registerTask('release', ['clean_pre_build', 'pre_vcs', 'do_git', 'github-release', 'clean:post_build']); - grunt.registerTask('compilecss', ['less']); -}; diff --git a/assets/banner-772x250.jpg b/assets/banner-772x250.jpg deleted file mode 100644 index e729a638..00000000 Binary files a/assets/banner-772x250.jpg and /dev/null differ diff --git a/css/.gitignore b/assets/css/.gitignore similarity index 100% rename from css/.gitignore rename to assets/css/.gitignore diff --git a/assets/css/_colors.scss b/assets/css/_colors.scss new file mode 100644 index 00000000..3091a3df --- /dev/null +++ b/assets/css/_colors.scss @@ -0,0 +1,14 @@ +// Color styles + +$primary-text: #1D2327; +$secondary-text: #646970; +$description-text: #3C434A; +$orange: #E27730; +$orange-dark: #cb5836; +$positive: #38a17e; +$negative: #D63638; +$field-border: #8b8f93; +$field-text: #2C3338; +$label-text: #1E2327; +$link: #2171B1; +$link-hover: #135e96; diff --git a/assets/css/_general.scss b/assets/css/_general.scss new file mode 100644 index 00000000..9b8fbc5b --- /dev/null +++ b/assets/css/_general.scss @@ -0,0 +1,15 @@ +// Core admin style overrides. +#wpcontent { + padding-left: 0 !important; + position: relative; + + @include media("<=phone") { + padding-top: 46px; + } +} + +#wpbody { + @include media("<=phone") { + padding-top: 0; + } +} diff --git a/assets/css/_include-media.scss b/assets/css/_include-media.scss new file mode 100644 index 00000000..4e948694 --- /dev/null +++ b/assets/css/_include-media.scss @@ -0,0 +1,567 @@ +@charset "UTF-8"; + +// _ _ _ _ _ +// (_) | | | | | (_) +// _ _ __ ___| |_ _ __| | ___ _ __ ___ ___ __| |_ __ _ +// | | '_ \ / __| | | | |/ _` |/ _ \ | '_ ` _ \ / _ \/ _` | |/ _` | +// | | | | | (__| | |_| | (_| | __/ | | | | | | __/ (_| | | (_| | +// |_|_| |_|\___|_|\__,_|\__,_|\___| |_| |_| |_|\___|\__,_|_|\__,_| +// +// Simple, elegant and maintainable media queries in Sass +// v1.4.9 +// +// http://include-media.com +// +// Authors: Eduardo Boucas (@eduardoboucas) +// Hugo Giraudel (@hugogiraudel) +// +// This project is licensed under the terms of the MIT license + + +//// +/// include-media library public configuration +/// @author Eduardo Boucas +/// @access public +//// + + +/// +/// Creates a list of global breakpoints +/// +/// @example scss - Creates a single breakpoint with the label `phone` +/// $breakpoints: ('phone': 320px); +/// +$breakpoints: ( + 'phone': 320px, + 'tablet': 768px, + 'desktop': 1024px +) !default; + + +/// +/// Creates a list of static expressions or media types +/// +/// @example scss - Creates a single media type (screen) +/// $media-expressions: ('screen': 'screen'); +/// +/// @example scss - Creates a static expression with logical disjunction (OR operator) +/// $media-expressions: ( +/// 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)' +/// ); +/// +$media-expressions: ( + 'screen': 'screen', + 'print': 'print', + 'handheld': 'handheld', + 'landscape': '(orientation: landscape)', + 'portrait': '(orientation: portrait)', + 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx)', + 'retina3x': '(-webkit-min-device-pixel-ratio: 3), (min-resolution: 350dpi), (min-resolution: 3dppx)' +) !default; + + +/// +/// Defines a number to be added or subtracted from each unit when declaring breakpoints with exclusive intervals +/// +/// @example scss - Interval for pixels is defined as `1` by default +/// @include media('>128px') {} +/// +/// /* Generates: */ +/// @media (min-width: 129px) {} +/// +/// @example scss - Interval for ems is defined as `0.01` by default +/// @include media('>20em') {} +/// +/// /* Generates: */ +/// @media (min-width: 20.01em) {} +/// +/// @example scss - Interval for rems is defined as `0.1` by default, to be used with `font-size: 62.5%;` +/// @include media('>2.0rem') {} +/// +/// /* Generates: */ +/// @media (min-width: 2.1rem) {} +/// +$unit-intervals: ( + 'px': 1, + 'em': 0.01, + 'rem': 0.1, + '': 0 +) !default; + +/// +/// Defines whether support for media queries is available, useful for creating separate stylesheets +/// for browsers that don't support media queries. +/// +/// @example scss - Disables support for media queries +/// $im-media-support: false; +/// @include media('>=tablet') { +/// .foo { +/// color: tomato; +/// } +/// } +/// +/// /* Generates: */ +/// .foo { +/// color: tomato; +/// } +/// +$im-media-support: true !default; + +/// +/// Selects which breakpoint to emulate when support for media queries is disabled. Media queries that start at or +/// intercept the breakpoint will be displayed, any others will be ignored. +/// +/// @example scss - This media query will show because it intercepts the static breakpoint +/// $im-media-support: false; +/// $im-no-media-breakpoint: 'desktop'; +/// @include media('>=tablet') { +/// .foo { +/// color: tomato; +/// } +/// } +/// +/// /* Generates: */ +/// .foo { +/// color: tomato; +/// } +/// +/// @example scss - This media query will NOT show because it does not intercept the desktop breakpoint +/// $im-media-support: false; +/// $im-no-media-breakpoint: 'tablet'; +/// @include media('>=desktop') { +/// .foo { +/// color: tomato; +/// } +/// } +/// +/// /* No output */ +/// +$im-no-media-breakpoint: 'desktop' !default; + +/// +/// Selects which media expressions are allowed in an expression for it to be used when media queries +/// are not supported. +/// +/// @example scss - This media query will show because it intercepts the static breakpoint and contains only accepted media expressions +/// $im-media-support: false; +/// $im-no-media-breakpoint: 'desktop'; +/// $im-no-media-expressions: ('screen'); +/// @include media('>=tablet', 'screen') { +/// .foo { +/// color: tomato; +/// } +/// } +/// +/// /* Generates: */ +/// .foo { +/// color: tomato; +/// } +/// +/// @example scss - This media query will NOT show because it intercepts the static breakpoint but contains a media expression that is not accepted +/// $im-media-support: false; +/// $im-no-media-breakpoint: 'desktop'; +/// $im-no-media-expressions: ('screen'); +/// @include media('>=tablet', 'retina2x') { +/// .foo { +/// color: tomato; +/// } +/// } +/// +/// /* No output */ +/// +$im-no-media-expressions: ('screen', 'portrait', 'landscape') !default; + +//// +/// Cross-engine logging engine +/// @author Hugo Giraudel +/// @access private +//// + + +/// +/// Log a message either with `@error` if supported +/// else with `@warn`, using `feature-exists('at-error')` +/// to detect support. +/// +/// @param {String} $message - Message to log +/// +@function im-log($message) { + @if feature-exists('at-error') { + @error $message; + } @else { + @warn $message; + $_: noop(); + } + + @return $message; +} + + +/// +/// Wrapper mixin for the log function so it can be used with a more friendly +/// API than `@if im-log('..') {}` or `$_: im-log('..')`. Basically, use the function +/// within functions because it is not possible to include a mixin in a function +/// and use the mixin everywhere else because it's much more elegant. +/// +/// @param {String} $message - Message to log +/// +@mixin log($message) { + @if im-log($message) {} +} + + +/// +/// Function with no `@return` called next to `@warn` in Sass 3.3 +/// to trigger a compiling error and stop the process. +/// +@function noop() {} + +/// +/// Determines whether a list of conditions is intercepted by the static breakpoint. +/// +/// @param {Arglist} $conditions - Media query conditions +/// +/// @return {Boolean} - Returns true if the conditions are intercepted by the static breakpoint +/// +@function im-intercepts-static-breakpoint($conditions...) { + $no-media-breakpoint-value: map-get($breakpoints, $im-no-media-breakpoint); + + @if not $no-media-breakpoint-value { + @if im-log('`#{$im-no-media-breakpoint}` is not a valid breakpoint.') {} + } + + @each $condition in $conditions { + @if not map-has-key($media-expressions, $condition) { + $operator: get-expression-operator($condition); + $prefix: get-expression-prefix($operator); + $value: get-expression-value($condition, $operator); + + @if ($prefix == 'max' and $value <= $no-media-breakpoint-value) or + ($prefix == 'min' and $value > $no-media-breakpoint-value) { + @return false; + } + } @else if not index($im-no-media-expressions, $condition) { + @return false; + } + } + + @return true; +} + +//// +/// Parsing engine +/// @author Hugo Giraudel +/// @access private +//// + + +/// +/// Get operator of an expression +/// +/// @param {String} $expression - Expression to extract operator from +/// +/// @return {String} - Any of `>=`, `>`, `<=`, `<`, `≥`, `≤` +/// +@function get-expression-operator($expression) { + @each $operator in ('>=', '>', '<=', '<', '≥', '≤') { + @if str-index($expression, $operator) { + @return $operator; + } + } + + // It is not possible to include a mixin inside a function, so we have to + // rely on the `im-log(..)` function rather than the `log(..)` mixin. Because + // functions cannot be called anywhere in Sass, we need to hack the call in + // a dummy variable, such as `$_`. If anybody ever raise a scoping issue with + // Sass 3.3, change this line in `@if im-log(..) {}` instead. + $_: im-log('No operator found in `#{$expression}`.'); +} + + +/// +/// Get dimension of an expression, based on a found operator +/// +/// @param {String} $expression - Expression to extract dimension from +/// @param {String} $operator - Operator from `$expression` +/// +/// @return {String} - `width` or `height` (or potentially anything else) +/// +@function get-expression-dimension($expression, $operator) { + $operator-index: str-index($expression, $operator); + $parsed-dimension: str-slice($expression, 0, $operator-index - 1); + $dimension: 'width'; + + @if str-length($parsed-dimension) > 0 { + $dimension: $parsed-dimension; + } + + @return $dimension; +} + + +/// +/// Get dimension prefix based on an operator +/// +/// @param {String} $operator - Operator +/// +/// @return {String} - `min` or `max` +/// +@function get-expression-prefix($operator) { + @return if(index(('<', '<=', '≤'), $operator), 'max', 'min'); +} + + +/// +/// Get value of an expression, based on a found operator +/// +/// @param {String} $expression - Expression to extract value from +/// @param {String} $operator - Operator from `$expression` +/// +/// @return {Number} - A numeric value +/// +@function get-expression-value($expression, $operator) { + $operator-index: str-index($expression, $operator); + $value: str-slice($expression, $operator-index + str-length($operator)); + + @if map-has-key($breakpoints, $value) { + $value: map-get($breakpoints, $value); + } @else { + $value: to-number($value); + } + + $interval: map-get($unit-intervals, unit($value)); + + @if not $interval { + // It is not possible to include a mixin inside a function, so we have to + // rely on the `im-log(..)` function rather than the `log(..)` mixin. Because + // functions cannot be called anywhere in Sass, we need to hack the call in + // a dummy variable, such as `$_`. If anybody ever raise a scoping issue with + // Sass 3.3, change this line in `@if im-log(..) {}` instead. + $_: im-log('Unknown unit `#{unit($value)}`.'); + } + + @if $operator == '>' { + $value: $value + $interval; + } @else if $operator == '<' { + $value: $value - $interval; + } + + @return $value; +} + + +/// +/// Parse an expression to return a valid media-query expression +/// +/// @param {String} $expression - Expression to parse +/// +/// @return {String} - Valid media query +/// +@function parse-expression($expression) { + // If it is part of $media-expressions, it has no operator + // then there is no need to go any further, just return the value + @if map-has-key($media-expressions, $expression) { + @return map-get($media-expressions, $expression); + } + + $operator: get-expression-operator($expression); + $dimension: get-expression-dimension($expression, $operator); + $prefix: get-expression-prefix($operator); + $value: get-expression-value($expression, $operator); + + @return '(#{$prefix}-#{$dimension}: #{$value})'; +} + +/// +/// Slice `$list` between `$start` and `$end` indexes +/// +/// @access private +/// +/// @param {List} $list - List to slice +/// @param {Number} $start [1] - Start index +/// @param {Number} $end [length($list)] - End index +/// +/// @return {List} Sliced list +/// +@function slice($list, $start: 1, $end: length($list)) { + @if length($list) < 1 or $start > $end { + @return (); + } + + $result: (); + + @for $i from $start through $end { + $result: append($result, nth($list, $i)); + } + + @return $result; +} + +//// +/// String to number converter +/// @author Hugo Giraudel +/// @access private +//// + + +/// +/// Casts a string into a number +/// +/// @param {String | Number} $value - Value to be parsed +/// +/// @return {Number} +/// +@function to-number($value) { + @if type-of($value) == 'number' { + @return $value; + } @else if type-of($value) != 'string' { + $_: im-log('Value for `to-number` should be a number or a string.'); + } + + $first-character: str-slice($value, 1, 1); + $result: 0; + $digits: 0; + $minus: ($first-character == '-'); + $numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9); + + // Remove +/- sign if present at first character + @if ($first-character == '+' or $first-character == '-') { + $value: str-slice($value, 2); + } + + @for $i from 1 through str-length($value) { + $character: str-slice($value, $i, $i); + + @if not (index(map-keys($numbers), $character) or $character == '.') { + @return to-length(if($minus, -$result, $result), str-slice($value, $i)) + } + + @if $character == '.' { + $digits: 1; + } @else if $digits == 0 { + $result: $result * 10 + map-get($numbers, $character); + } @else { + $digits: $digits * 10; + $result: $result + map-get($numbers, $character) / $digits; + } + } + + @return if($minus, -$result, $result); +} + + +/// +/// Add `$unit` to `$value` +/// +/// @param {Number} $value - Value to add unit to +/// @param {String} $unit - String representation of the unit +/// +/// @return {Number} - `$value` expressed in `$unit` +/// +@function to-length($value, $unit) { + $units: ('px': 1px, 'cm': 1cm, 'mm': 1mm, '%': 1%, 'ch': 1ch, 'pc': 1pc, 'in': 1in, 'em': 1em, 'rem': 1rem, 'pt': 1pt, 'ex': 1ex, 'vw': 1vw, 'vh': 1vh, 'vmin': 1vmin, 'vmax': 1vmax); + + @if not index(map-keys($units), $unit) { + $_: im-log('Invalid unit `#{$unit}`.'); + } + + @return $value * map-get($units, $unit); +} + +/// +/// This mixin aims at redefining the configuration just for the scope of +/// the call. It is helpful when having a component needing an extended +/// configuration such as custom breakpoints (referred to as tweakpoints) +/// for instance. +/// +/// @author Hugo Giraudel +/// +/// @param {Map} $tweakpoints [()] - Map of tweakpoints to be merged with `$breakpoints` +/// @param {Map} $tweak-media-expressions [()] - Map of tweaked media expressions to be merged with `$media-expression` +/// +/// @example scss - Extend the global breakpoints with a tweakpoint +/// @include media-context(('custom': 678px)) { +/// .foo { +/// @include media('>phone', '<=custom') { +/// // ... +/// } +/// } +/// } +/// +/// @example scss - Extend the global media expressions with a custom one +/// @include media-context($tweak-media-expressions: ('all': 'all')) { +/// .foo { +/// @include media('all', '>phone') { +/// // ... +/// } +/// } +/// } +/// +/// @example scss - Extend both configuration maps +/// @include media-context(('custom': 678px), ('all': 'all')) { +/// .foo { +/// @include media('all', '>phone', '<=custom') { +/// // ... +/// } +/// } +/// } +/// +@mixin media-context($tweakpoints: (), $tweak-media-expressions: ()) { + // Save global configuration + $global-breakpoints: $breakpoints; + $global-media-expressions: $media-expressions; + + // Update global configuration + $breakpoints: map-merge($breakpoints, $tweakpoints) !global; + $media-expressions: map-merge($media-expressions, $tweak-media-expressions) !global; + + @content; + + // Restore global configuration + $breakpoints: $global-breakpoints !global; + $media-expressions: $global-media-expressions !global; +} + +//// +/// include-media public exposed API +/// @author Eduardo Boucas +/// @access public +//// + + +/// +/// Generates a media query based on a list of conditions +/// +/// @param {Arglist} $conditions - Media query conditions +/// +/// @example scss - With a single set breakpoint +/// @include media('>phone') { } +/// +/// @example scss - With two set breakpoints +/// @include media('>phone', '<=tablet') { } +/// +/// @example scss - With custom values +/// @include media('>=358px', '<850px') { } +/// +/// @example scss - With set breakpoints with custom values +/// @include media('>desktop', '<=1350px') { } +/// +/// @example scss - With a static expression +/// @include media('retina2x') { } +/// +/// @example scss - Mixing everything +/// @include media('>=350px', ' 0) { + @media #{unquote(parse-expression(nth($conditions, 1)))} { + // Recursive call + @include media(slice($conditions, 2)...) { + @content; + } + } + } +} diff --git a/assets/css/_variables.scss b/assets/css/_variables.scss new file mode 100644 index 00000000..9d92598f --- /dev/null +++ b/assets/css/_variables.scss @@ -0,0 +1,9 @@ +$breakpoints: ( + 'xs-phone': 320px, + 'phone': 600px, + 'ipad': 768px, + 'tablet': 782px, + 'desktop': 960px +); + +$medium-weight: 600; diff --git a/assets/css/modal.css b/assets/css/modal.css new file mode 100644 index 00000000..36732eab --- /dev/null +++ b/assets/css/modal.css @@ -0,0 +1,176 @@ +#wp-mail-logging-modal-wrap { + display: none; +} +#wp-mail-logging-modal-backdrop { + background: none repeat scroll 0 0 #3c434a; + bottom: 0; + left: 0; + min-height: 360px; + opacity: 0.75; + position: fixed; + right: 0; + top: 0; + z-index: 159900; +} +#wp-mail-logging-modal-content { + background: none repeat scroll 0 0 #fff; + border-radius: 6px; + font-size: 14px; + margin: 40px auto 0; + max-width: 688px; + max-height: 761px; +} +#wp-mail-logging-modal-content-wrap { + bottom: 30px; + left: 30px; + position: fixed; + right: 30px; + top: 30px; + z-index: 300010; +} +#wp-mail-logging-modal-content-header { + align-items: center; + background-color: #F0F0F1; + border-radius: 6px 6px 0px 0px; + color: #1E2327; + display: flex; + font-size: 20px; + font-weight: 600; + justify-content: space-between; + padding: 20px 30px; +} +#wp-mail-logging-modal-content-header-format-switch { + border-bottom: 1px solid #DCDCDE; + margin: 20px 0 30px 0; +} +#wp-mail-logging-modal-content-header-format-switch ul { + margin: 0; + padding-bottom: 13.5px; +} +#wp-mail-logging-modal-content-header-format-switch ul li { + padding: 0 10px; + display: inline; + text-transform: uppercase; +} +#wp-mail-logging-modal-content-header-format-switch ul li:first-of-type { + padding-left: 0; +} +#wp-mail-logging-modal-content-header-format-switch ul li:last-of-type { + padding-right: 0; +} +#wp-mail-logging-modal-content-header-close { + color: #C2C2C2; + text-decoration: none; +} +#wp-mail-logging-modal-content-header-close:hover { + color: #72777C; +} +#wp-mail-logging-modal-content-body { + padding: 0 30px 30px; + overflow: auto; + max-height: 701px; +} +#wp-mail-logging-modal-content-body-content { + position: relative; +} +#wp-mail-logging-modal-content-body .info { + border-left: 4px solid #ffba00; + display: block; + background: #FFF9E9; + -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); + margin: 5px 5px 2px; + padding: 1px 12px; +} +#wp-mail-logging-modal-content-body .title { + font-weight: bold; + display: block; +} +#wp-mail-logging-modal-content .notice.wp-mail-logging-html-error-notice { + background: #F0F6FC; + border: none; + border-radius: 3px; + color: #646970; + margin: 10px 0 0; + padding: 10px; +} +#wp-mail-logging-modal-content .notice.wp-mail-logging-html-error-notice p { + margin: 0; +} + +#wp-mail-logging-modal-content-body-table { + border: 1px solid #DCDCDE; + border-radius: 6px; +} + +.wp-mail-logging-modal-row { + border-bottom: 1px solid #DCDCDE; + padding: 10px 14px; +} +.wp-mail-logging-modal-row:last-of-type { + border-bottom: 0; +} +.wp-mail-logging-modal-row-label, .wp-mail-logging-modal-row-label-message { + color: #3C434A; + display: block; + float: left; + font-weight: 600; + width: 160px; +} +.wp-mail-logging-modal-row-label-message { + float: none; + padding-bottom: 10px; +} +.wp-mail-logging-modal-row-value { + color: #50575E; + font-weight: 400; + display: block; + margin-left: 160px; +} +.wp-mail-logging-modal-row-value-error { + color: #D63637; + font-size: 13px; +} +.wp-mail-logging-modal-row-value-message { + margin-left: 0; + max-height: 370px; + overflow-x: scroll; +} +.wp-mail-logging-modal-row-error-value { + color: #D63637; +} + +.wp-mail-logging-modal-clear::before, .wp-mail-logging-modal-clear::after { + content: " "; + display: table; +} +.wp-mail-logging-modal-clear::after { + clear: both; +} + +.wp-mail-logging-modal-format { + color: #787C82; + text-decoration: none; +} +.wp-mail-logging-modal-format:focus { + color: inherit; + box-shadow: none; + outline: none; +} +.wp-mail-logging-modal-format.wp-mail-logging-active-format, .wp-mail-logging-modal-format:hover, .wp-mail-logging-modal-format:focus { + border-bottom: 4px solid #a7aaad; + color: #2C3338; + padding-bottom: 10.5px; +} +.wp-mail-logging-modal-format.wp-mail-logging-active-format { + border-color: #E77C5C; +} +.wp-mail-logging-modal-format.wp-mail-logging-active-format:focus, .wp-mail-logging-modal-format.wp-mail-logging-active-format:active { + border-color: #E77C5C; +} + +.wp-mail-logging-modal-row-value-attachments a { + font-size: 18px; + text-decoration: none; +} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vZGFsLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JJO0VBQ0k7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBbkJXO0VBb0JYO0VBQ0E7RUFDQTtFQUNBOztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0ksUUEvQkk7RUFnQ0osTUFoQ0k7RUFpQ0o7RUFDQSxPQWxDSTtFQW1DSixLQW5DSTtFQW9DSjs7QUFHSjtFQUNJO0VBQ0Esa0JBbkRBO0VBb0RBO0VBQ0EsT0FsREM7RUFtREQ7RUFDQTtFQUNBLGFBNUNJO0VBNkNKO0VBQ0E7O0FBRUE7RUFDSTtFQUNBOztBQUVBO0VBQ0k7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7RUFDQTs7QUFFQTtFQUNJOztBQUdKO0VBQ0k7O0FBTWhCO0VBQ0k7RUFDQTs7QUFFQTtFQUNJOztBQUtaO0VBQ0k7RUFDQTtFQUNBOztBQUVBO0VBQ0k7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7O0FBS1I7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTs7O0FBTWhCO0VBQ0k7RUFDQTs7O0FBS0E7RUFDSTtFQUNBOztBQUVBO0VBQ0k7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQSxhQTlJSTtFQStJSjs7QUFHSjtFQUNJO0VBQ0E7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7O0FBSVI7RUFDSTs7O0FBT1I7RUFDSTtFQUNBOztBQUdKO0VBQ0k7OztBQUlSO0VBQ0k7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFHSjtFQUVJOztBQUVBO0VBQ0k7OztBQUtaO0VBQ0k7RUFDQSIsImZpbGUiOiJhc3NldHMvY3NzL21vZGFsLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiRoZWFkZXItYmc6ICNGMEYwRjE7XG4kaGVhZGVyLWJvdHRvbS1ib3JkZXI6ICNjY2M7XG5cbiRmb250LWNvbG9yOiAjMUUyMzI3O1xuXG4kYmFja2Ryb3AtYmc6ICMzYzQzNGE7XG4kYmFja2Ryb3Atb3BhY2l0eTogMC43NTtcblxuJGNvbnRlbnQtYmc6ICNmZmY7XG5cbiRtb2RhbC1wYWRkaW5nOiAzMHB4O1xuXG4kbWVkaXVtLXdlaWdodDogNjAwO1xuXG4jd3AtbWFpbC1sb2dnaW5nLW1vZGFsIHtcblxuICAgICYtd3JhcCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgJi1iYWNrZHJvcCB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmUgcmVwZWF0IHNjcm9sbCAwIDAgJGJhY2tkcm9wLWJnO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDM2MHB4O1xuICAgICAgICBvcGFjaXR5OiAkYmFja2Ryb3Atb3BhY2l0eTtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICB6LWluZGV4OiAxNTk5MDA7XG4gICAgfVxuXG4gICAgJi1jb250ZW50IHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZSByZXBlYXQgc2Nyb2xsIDAgMCAkY29udGVudC1iZztcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIG1hcmdpbjogNDBweCBhdXRvIDA7XG4gICAgICAgIG1heC13aWR0aDogNjg4cHg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDc2MXB4O1xuXG4gICAgICAgICYtd3JhcCB7XG4gICAgICAgICAgICBib3R0b206ICRtb2RhbC1wYWRkaW5nO1xuICAgICAgICAgICAgbGVmdDogJG1vZGFsLXBhZGRpbmc7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICByaWdodDogJG1vZGFsLXBhZGRpbmc7XG4gICAgICAgICAgICB0b3A6ICRtb2RhbC1wYWRkaW5nO1xuICAgICAgICAgICAgei1pbmRleDogMzAwMDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1oZWFkZXIge1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmc7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHggNnB4IDBweCAwcHg7XG4gICAgICAgICAgICBjb2xvcjogJGZvbnQtY29sb3I7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgICAgcGFkZGluZzogMjBweCAzMHB4O1xuXG4gICAgICAgICAgICAmLWZvcm1hdC1zd2l0Y2gge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRENEQ0RFO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMjBweCAwIDMwcHggMDtcblxuICAgICAgICAgICAgICAgIHVsIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTMuNXB4O1xuXG4gICAgICAgICAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAmOmxhc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi1jbG9zZSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNDMkMyQzI7XG4gICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjNzI3NzdDO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtYm9keSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDMwcHggMzBweDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICAgICAgbWF4LWhlaWdodDogNzAxcHg7XG5cbiAgICAgICAgICAgICYtY29udGVudCB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmIC5pbmZvIHtcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICNmZmJhMDA7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0ZGRjlFOTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCAwIHJnYmEoIDAsIDAsIDAsIDAuMSApO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCAwIHJnYmEoIDAsIDAsIDAsIDAuMSApO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogNXB4IDVweCAycHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMXB4IDEycHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgLnRpdGxlIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgLm5vdGljZS53cC1tYWlsLWxvZ2dpbmctaHRtbC1lcnJvci1ub3RpY2Uge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI0YwRjZGQztcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICAgIGNvbG9yOiAjNjQ2OTcwO1xuICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDAgMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG5cbiAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuI3dwLW1haWwtbG9nZ2luZy1tb2RhbC1jb250ZW50LWJvZHktdGFibGUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNEQ0RDREU7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuXG4ud3AtbWFpbC1sb2dnaW5nLW1vZGFsIHtcblxuICAgICYtcm93IHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNEQ0RDREU7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMTRweDtcblxuICAgICAgICAmOmxhc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1sYWJlbCwgJi1sYWJlbC1tZXNzYWdlIHtcbiAgICAgICAgICAgIGNvbG9yOiAjM0M0MzRBO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAkbWVkaXVtLXdlaWdodDtcbiAgICAgICAgICAgIHdpZHRoOiAxNjBweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYtbGFiZWwtbWVzc2FnZSB7XG4gICAgICAgICAgICBmbG9hdDogbm9uZTtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi12YWx1ZSB7XG4gICAgICAgICAgICBjb2xvcjogIzUwNTc1RTtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxNjBweDtcblxuICAgICAgICAgICAgJi1lcnJvciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNENjM2Mzc7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLW1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDM3MHB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtZXJyb3ItdmFsdWUge1xuICAgICAgICAgICAgY29sb3I6ICNENjM2Mzc7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi53cC1tYWlsLWxvZ2dpbmctbW9kYWwtY2xlYXIge1xuXG4gICAgJjo6YmVmb3JlLCAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cbn1cblxuLndwLW1haWwtbG9nZ2luZy1tb2RhbC1mb3JtYXQge1xuICAgIGNvbG9yOiAjNzg3QzgyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICB9XG5cbiAgICAmLndwLW1haWwtbG9nZ2luZy1hY3RpdmUtZm9ybWF0LCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICNhN2FhYWQ7XG4gICAgICAgIGNvbG9yOiAjMkMzMzM4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAuNXB4O1xuICAgIH1cblxuICAgICYud3AtbWFpbC1sb2dnaW5nLWFjdGl2ZS1mb3JtYXQge1xuXG4gICAgICAgIGJvcmRlci1jb2xvcjogI0U3N0M1QztcblxuICAgICAgICAmOmZvY3VzLCAmOmFjdGl2ZSB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICNFNzdDNUM7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi53cC1tYWlsLWxvZ2dpbmctbW9kYWwtcm93LXZhbHVlLWF0dGFjaG1lbnRzIGEge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4iXX0= */ diff --git a/assets/css/modal.css.map b/assets/css/modal.css.map new file mode 100644 index 00000000..999dd9f5 --- /dev/null +++ b/assets/css/modal.css.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "file": "modal.css", + "sources": [ + "modal.scss" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/assets/css/modal.min.css b/assets/css/modal.min.css new file mode 100644 index 00000000..44355c5e --- /dev/null +++ b/assets/css/modal.min.css @@ -0,0 +1 @@ +#wp-mail-logging-modal-wrap{display:none}#wp-mail-logging-modal-backdrop{background:none repeat scroll 0 0 #3c434a;bottom:0;left:0;min-height:360px;opacity:.75;position:fixed;right:0;top:0;z-index:159900}#wp-mail-logging-modal-content{background:none repeat scroll 0 0 #fff;border-radius:6px;font-size:14px;margin:40px auto 0;max-width:688px;max-height:761px}#wp-mail-logging-modal-content-wrap{bottom:30px;left:30px;position:fixed;right:30px;top:30px;z-index:300010}#wp-mail-logging-modal-content-header{align-items:center;background-color:#f0f0f1;border-radius:6px 6px 0px 0px;color:#1e2327;display:flex;font-size:20px;font-weight:600;justify-content:space-between;padding:20px 30px}#wp-mail-logging-modal-content-header-format-switch{border-bottom:1px solid #dcdcde;margin:20px 0 30px 0}#wp-mail-logging-modal-content-header-format-switch ul{margin:0;padding-bottom:13.5px}#wp-mail-logging-modal-content-header-format-switch ul li{padding:0 10px;display:inline;text-transform:uppercase}#wp-mail-logging-modal-content-header-format-switch ul li:first-of-type{padding-left:0}#wp-mail-logging-modal-content-header-format-switch ul li:last-of-type{padding-right:0}#wp-mail-logging-modal-content-header-close{color:#c2c2c2;text-decoration:none}#wp-mail-logging-modal-content-header-close:hover{color:#72777c}#wp-mail-logging-modal-content-body{padding:0 30px 30px;overflow:auto;max-height:701px}#wp-mail-logging-modal-content-body-content{position:relative}#wp-mail-logging-modal-content-body .info{border-left:4px solid #ffba00;display:block;background:#fff9e9;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 5px 2px;padding:1px 12px}#wp-mail-logging-modal-content-body .title{font-weight:bold;display:block}#wp-mail-logging-modal-content .notice.wp-mail-logging-html-error-notice{background:#f0f6fc;border:none;border-radius:3px;color:#646970;margin:10px 0 0;padding:10px}#wp-mail-logging-modal-content .notice.wp-mail-logging-html-error-notice p{margin:0}#wp-mail-logging-modal-content-body-table{border:1px solid #dcdcde;border-radius:6px}.wp-mail-logging-modal-row{border-bottom:1px solid #dcdcde;padding:10px 14px}.wp-mail-logging-modal-row:last-of-type{border-bottom:0}.wp-mail-logging-modal-row-label,.wp-mail-logging-modal-row-label-message{color:#3c434a;display:block;float:left;font-weight:600;width:160px}.wp-mail-logging-modal-row-label-message{float:none;padding-bottom:10px}.wp-mail-logging-modal-row-value{color:#50575e;font-weight:400;display:block;margin-left:160px}.wp-mail-logging-modal-row-value-error{color:#d63637;font-size:13px}.wp-mail-logging-modal-row-value-message{margin-left:0;max-height:370px;overflow-x:scroll}.wp-mail-logging-modal-row-error-value{color:#d63637}.wp-mail-logging-modal-clear::before,.wp-mail-logging-modal-clear::after{content:" ";display:table}.wp-mail-logging-modal-clear::after{clear:both}.wp-mail-logging-modal-format{color:#787c82;text-decoration:none}.wp-mail-logging-modal-format:focus{color:inherit;box-shadow:none;outline:none}.wp-mail-logging-modal-format.wp-mail-logging-active-format,.wp-mail-logging-modal-format:hover,.wp-mail-logging-modal-format:focus{border-bottom:4px solid #a7aaad;color:#2c3338;padding-bottom:10.5px}.wp-mail-logging-modal-format.wp-mail-logging-active-format{border-color:#e77c5c}.wp-mail-logging-modal-format.wp-mail-logging-active-format:focus,.wp-mail-logging-modal-format.wp-mail-logging-active-format:active{border-color:#e77c5c}.wp-mail-logging-modal-row-value-attachments a{font-size:18px;text-decoration:none} \ No newline at end of file diff --git a/assets/css/modal.scss b/assets/css/modal.scss new file mode 100644 index 00000000..040192d6 --- /dev/null +++ b/assets/css/modal.scss @@ -0,0 +1,229 @@ +$header-bg: #F0F0F1; +$header-bottom-border: #ccc; + +$font-color: #1E2327; + +$backdrop-bg: #3c434a; +$backdrop-opacity: 0.75; + +$content-bg: #fff; + +$modal-padding: 30px; + +$medium-weight: 600; + +#wp-mail-logging-modal { + + &-wrap { + display: none; + } + + &-backdrop { + background: none repeat scroll 0 0 $backdrop-bg; + bottom: 0; + left: 0; + min-height: 360px; + opacity: $backdrop-opacity; + position: fixed; + right: 0; + top: 0; + z-index: 159900; + } + + &-content { + background: none repeat scroll 0 0 $content-bg; + border-radius: 6px; + font-size: 14px; + margin: 40px auto 0; + max-width: 688px; + max-height: 761px; + + &-wrap { + bottom: $modal-padding; + left: $modal-padding; + position: fixed; + right: $modal-padding; + top: $modal-padding; + z-index: 300010; + } + + &-header { + align-items: center; + background-color: $header-bg; + border-radius: 6px 6px 0px 0px; + color: $font-color; + display: flex; + font-size: 20px; + font-weight: $medium-weight; + justify-content: space-between; + padding: 20px 30px; + + &-format-switch { + border-bottom: 1px solid #DCDCDE; + margin: 20px 0 30px 0; + + ul { + margin: 0; + padding-bottom: 13.5px; + + li { + padding: 0 10px; + display: inline; + text-transform: uppercase; + + &:first-of-type { + padding-left: 0; + } + + &:last-of-type { + padding-right: 0; + } + } + } + } + + &-close { + color: #C2C2C2; + text-decoration: none; + + &:hover { + color: #72777C; + } + } + } + + &-body { + padding: 0 30px 30px; + overflow: auto; + max-height: 701px; + + &-content { + position: relative; + } + + & .info { + border-left: 4px solid #ffba00; + display: block; + background: #FFF9E9; + -webkit-box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); + box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); + margin: 5px 5px 2px; + padding: 1px 12px; + } + + & .title { + font-weight: bold; + display: block; + } + + } + + .notice.wp-mail-logging-html-error-notice { + background: #F0F6FC; + border: none; + border-radius: 3px; + color: #646970; + margin: 10px 0 0; + padding: 10px; + + p { + margin: 0; + } + } + } +} + +#wp-mail-logging-modal-content-body-table { + border: 1px solid #DCDCDE; + border-radius: 6px; +} + +.wp-mail-logging-modal { + + &-row { + border-bottom: 1px solid #DCDCDE; + padding: 10px 14px; + + &:last-of-type { + border-bottom: 0; + } + + &-label, &-label-message { + color: #3C434A; + display: block; + float: left; + font-weight: $medium-weight; + width: 160px; + } + + &-label-message { + float: none; + padding-bottom: 10px; + } + + &-value { + color: #50575E; + font-weight: 400; + display: block; + margin-left: 160px; + + &-error { + color: #D63637; + font-size: 13px; + } + + &-message { + margin-left: 0; + max-height: 370px; + overflow-x: scroll; + } + } + + &-error-value { + color: #D63637; + } + } +} + +.wp-mail-logging-modal-clear { + + &::before, &::after { + content: " "; + display: table; + } + + &::after { + clear: both; + } +} + +.wp-mail-logging-modal-format { + color: #787C82; + text-decoration: none; + + &:focus { + color: inherit; + box-shadow: none; + outline: none; + } + + &.wp-mail-logging-active-format, &:hover, &:focus { + border-bottom: 4px solid #a7aaad; + color: #2C3338; + padding-bottom: 10.5px; + } + + &.wp-mail-logging-active-format { + + border-color: #E77C5C; + + &:focus, &:active { + border-color: #E77C5C; + } + } +} + +.wp-mail-logging-modal-row-value-attachments a { + font-size: 18px; + text-decoration: none; +} diff --git a/assets/css/wp-mail-logging-admin.css b/assets/css/wp-mail-logging-admin.css new file mode 100644 index 00000000..fbaa1e88 --- /dev/null +++ b/assets/css/wp-mail-logging-admin.css @@ -0,0 +1,962 @@ +#wpcontent { + padding-left: 0 !important; + position: relative; +} +@media (max-width: 600px) { + #wpcontent { + padding-top: 46px; + } +} + +@media (max-width: 600px) { + #wpbody { + padding-top: 0; + } +} + +#wp-mail-logging { + color: #3C434A; + margin: 0; +} +#wp-mail-logging .subsubsub a.current { + font-weight: 600; +} +#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-setting-tab-row-log-rotation-limit-amout-keep, #wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-setting-tab-row-log-rotation-delete-time-days { + padding-top: 0; +} +#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-settings-bottom { + align-items: center; + border-top: 1px solid #e4e4e4; + display: flex; + justify-content: space-between; + margin-top: 15px; + padding-top: 30px; +} +#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-settings-reset-link { + background: none; + border: none; + color: #2271B1; + cursor: pointer; + font-size: 14px; + font-weight: 400; + line-height: 35px; + margin: 0; + outline: 0; + text-decoration: underline; +} +#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-settings-reset-link:hover { + color: #135e96; +} +#wp-mail-logging .wp-mail-logging-hide { + display: none; +} +#wp-mail-logging .wp-mail-logging-page-content { + padding: 0 20px; +} +#wp-mail-logging .wp-mail-logging-page-content *, +#wp-mail-logging .wp-mail-logging-page-content *::before, +#wp-mail-logging .wp-mail-logging-page-content *::after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +#wp-mail-logging .wp-mail-logging-page-content #wp-mail-logging-setting-row-heading-general-settings { + padding-top: 10px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row { + border-bottom: 1px solid #e4e4e4; + padding: 15px 0 30px 0; + font-size: 14px; + line-height: 1.3; +} +@media (max-width: 781px) { + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row { + padding: 20px 0; + } +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.inactive { + display: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row .wp-mail-logging-setting-mid-row-sep { + background: #e4e4e4; + height: 1px; + border: 0; + margin: 15px 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading { + padding: 30px 0 20px 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading.no-desc h2, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading.no-desc h4 { + margin: 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading .wp-mail-logging-setting-field { + margin: 0; + max-width: 1005px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading .desc { + font-style: normal; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-input input { + max-width: 80px; + padding: 8px 12px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox input[type=checkbox] { + float: left; + margin: 1px 0 0 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox input[type=checkbox] + label { + margin: 0 0 0 8px; + vertical-align: baseline; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox .desc { + margin: 0 0 0 30px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox input[type=checkbox] + label + .desc { + margin: 8px 0 0 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-text .wp-mail-logging-setting-label, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-password .wp-mail-logging-setting-label, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-number .wp-mail-logging-setting-label, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-email .wp-mail-logging-setting-label { + padding-top: 8px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-select .wp-mail-logging-setting-label { + padding-top: 8px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-radio .wp-mail-logging-setting-field input[type=radio] { + margin: -3px 10px 0 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-radio .wp-mail-logging-setting-field label { + margin-right: 30px; + display: inline-block; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-no-border { + border-bottom: none; + padding-bottom: 15px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-no-padding { + padding: 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field label { + vertical-align: middle; + display: inline-block; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox] { + position: absolute; + top: auto; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); + width: 1px; + height: 1px; + white-space: nowrap; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked + .wp-mail-logging-setting-toggle-switch { + background-color: #38a17e; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked + .wp-mail-logging-setting-toggle-switch:before { + -webkit-transform: translateX(16px); + -ms-transform: translateX(16px); + transform: translateX(16px); +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled:checked:hover + .wp-mail-logging-setting-toggle-switch, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled:not(:checked):hover + .wp-mail-logging-setting-toggle-switch { + box-shadow: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled:not(:checked):hover + .wp-mail-logging-setting-toggle-switch { + background-color: #ddd; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled + .wp-mail-logging-setting-toggle-switch { + background-color: #ddd; + cursor: default; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled:checked + .wp-mail-logging-setting-toggle-switch { + background-color: #84d4ba; + cursor: default; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked + .wp-mail-logging-setting-toggle-switch + .wp-mail-logging-setting-toggle-checked-label { + display: inline-block; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked + .wp-mail-logging-setting-toggle-switch + .wp-mail-logging-setting-toggle-checked-label + .wp-mail-logging-setting-toggle-unchecked-label { + display: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled + .wp-mail-logging-setting-toggle-switch + .wp-mail-logging-setting-toggle-checked-label, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled + .wp-mail-logging-setting-toggle-switch + .wp-mail-logging-setting-toggle-unchecked-label { + color: #aaaaaa; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked:hover + .wp-mail-logging-setting-toggle-switch, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked:focus + .wp-mail-logging-setting-toggle-switch { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #2e876a; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:not(:checked):hover + .wp-mail-logging-setting-toggle-switch, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:not(:checked):focus + .wp-mail-logging-setting-toggle-switch { + background-color: #8c8f94; + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #999; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-unchecked-label, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-checked-label { + text-transform: uppercase; + font-weight: 600; + color: #646970; + font-size: 12px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-checked-label { + display: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-switch { + position: relative; + cursor: pointer; + background-color: #c3c4c7; + border-radius: 15px; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + vertical-align: middle; + display: inline-block; + margin: -1px 5px 0 0; + width: 36px; + height: 20px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-switch:before { + position: absolute; + content: ""; + height: 16px; + width: 16px; + left: 2px; + top: 2px; + background-color: #fff; + border-radius: 50%; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert { + padding-top: 20px; + padding-bottom: 25px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-row { + border: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .section-heading { + margin-bottom: 25px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .section-heading h3 { + margin-bottom: 10px; + font-weight: 600; + font-size: 18px; + line-height: 22px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .section-heading .notice { + margin-top: 20px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .section-heading .notice p { + margin: 6.5px 0; + font-size: 13px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-row { + padding: 0 !important; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-row + .wp-mail-logging-setting-row { + margin-top: 20px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-checked-label, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-unchecked-label { + text-transform: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-label label { + font-weight: 600; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h2, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h4 { + color: #1D2327; + font-size: 18px; + font-weight: 600; + line-height: 22px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h2 { + margin-top: 0; + margin-bottom: 10px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h3 { + color: #1D2327; + font-size: 24px; + font-weight: 600; + margin: 0 0 20px 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h5 { + color: #1D2327; + font-size: 16px; + font-weight: 600; + margin: 0 0 20px 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row p { + margin: 12px 0 0; + font-size: 14px; + line-height: 20px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row p.desc { + margin: 10px 0 0; + color: #646970; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row p.desc + .desc { + font-style: normal; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row ul { + margin: 8px 0 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row ul.list li { + margin-left: 20px; + list-style-type: disc; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list th { + padding: 5px 5px 5px 0; + text-align: left; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.email { + padding-right: 2em; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.status { + width: 100px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a { + border-bottom: 1px solid; + display: inline-block; + margin-right: 5px; + text-decoration: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=delete], #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=error] { + color: #D63638; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=delete]:hover, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=delete]:active, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=delete]:focus, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=error]:hover, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=error]:active, #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=error]:focus { + color: #8a1c1d; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text], +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email], +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number], +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password], +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select { + background-color: #fff; + border: 1px solid #8b8f93; + border-radius: 4px; + box-shadow: none; + color: #2C3338; + display: inline-block; + vertical-align: middle; + padding: 7px 12px; + margin: 0 10px 0 0; + width: 400px; + min-height: 35px; + line-height: 1.3; +} +@media (max-width: 959px) { + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text], + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email], + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number], + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password], + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select { + width: 300px; + } +} +@media (max-width: 599px) { + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text], + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email], + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number], + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password], + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select { + width: 100%; + max-width: unset; + margin-right: 0; + } + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text] ~ button, + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email] ~ button, + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number] ~ button, + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password] ~ button, + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select ~ button { + margin-top: 8px; + } +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text][readonly], +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email][readonly], +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number][readonly], +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password][readonly], +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select[readonly] { + background-color: #f9f9f9; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text].small-text, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email].small-text, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number].small-text, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password].small-text, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select.small-text { + width: 75px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text]:focus, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email]:focus, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number]:focus, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password]:focus, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select:focus { + border: 1px solid #016AAB; + box-shadow: 0 0 0 1px #016AAB; + outline: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text]:disabled, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email]:disabled, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number]:disabled, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password]:disabled, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select:disabled { + opacity: 0.6; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=checkbox]:focus, +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=radio]:focus { + border: 1px solid #016AAB; + box-shadow: 0 0 0 1px #016AAB; + outline: none; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number] { + width: 80px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select { + background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iNyIgdmlld0JveD0iMCAwIDEzIDciIGZpbGw9IiM4ZDhmOTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xMyAwLjk5ODI4MUMxMyAwLjkwMjA2MiAxMi45NTE5IDAuNzkzODE0IDEyLjg3OTcgMC43MjE2NDlMMTIuMjc4NCAwLjEyMDI3NEMxMi4yMDYyIDAuMDQ4MTA5OCAxMi4wOTggMCAxMi4wMDE3IDBDMTEuOTA1NSAwIDExLjc5NzMgMC4wNDgxMDk4IDExLjcyNTEgMC4xMjAyNzRMNi45OTgzIDQuODQ3MDhMMi4yNzE1IDAuMTIwMjc0QzIuMTk5MzMgMC4wNDgxMDk4IDIuMDkxMDggMCAxLjk5NDg2IDBDMS44ODY2MiAwIDEuNzkwNCAwLjA0ODEwOTggMS43MTgyMyAwLjEyMDI3NEwxLjExNjg2IDAuNzIxNjQ5QzEuMDQ0NjkgMC43OTM4MTQgMC45OTY1ODIgMC45MDIwNjIgMC45OTY1ODIgMC45OTgyODFDMC45OTY1ODIgMS4wOTQ1IDEuMDQ0NjkgMS4yMDI3NSAxLjExNjg2IDEuMjc0OTFMNi43MjE2NyA2Ljg3OTcyQzYuNzkzODMgNi45NTE4OSA2LjkwMjA4IDcgNi45OTgzIDdDNy4wOTQ1MiA3IDcuMjAyNzcgNi45NTE4OSA3LjI3NDkzIDYuODc5NzJMMTIuODc5NyAxLjI3NDkxQzEyLjk1MTkgMS4yMDI3NSAxMyAxLjA5NDUgMTMgMC45OTgyODFaIiBmaWxsPSIjOGQ4Zjk1Ii8+Cjwvc3ZnPgo="); + background-position: right 12px center; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-label { + display: block; + float: left; + width: 205px; + padding: 0 20px 0 0; +} +@media (max-width: 781px) { + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-label { + float: none; + width: 100%; + padding-bottom: 15px; + } +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-label label { + color: #1E2327; + display: block; + font-weight: 600; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field { + display: block; + margin: 0 0 0 205px; + max-width: 800px; +} +@media (max-width: 781px) { + #wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field { + margin: 0; + } +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field hr { + margin: 20px 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field .wp-mail-logging-setting-field-row { + display: flex; + flex-wrap: wrap; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field .wp-mail-logging-setting-field-row > .wp-mail-smtp-btn { + margin-right: 10px; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-submit { + margin: 0; + padding: 25px 0; +} +#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-submit .help-text { + margin-left: 10px; + vertical-align: middle; +} +#wp-mail-logging .wp-mail-logging-page-content .notice-inline { + background: #fff; + border-left: 4px solid #fff; + box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); + margin: 5px 0 15px; + padding: 1px 12px; +} +#wp-mail-logging .wp-mail-logging-page-content .notice-inline.notice-success { + border-left-color: #38a17e; +} +#wp-mail-logging .wp-mail-logging-page-content .notice-inline.notice-warning { + border-left-color: #ffb900; +} +#wp-mail-logging .wp-mail-logging-page-content .notice-inline.notice-error { + border-left-color: #D63638; +} +#wp-mail-logging .wp-mail-logging-page-content .notice-inline.notice-info { + border-left-color: #00a0d2; +} +#wp-mail-logging .wp-mail-logging-page-content .notice p, +#wp-mail-logging .wp-mail-logging-page-content .notice-inline p { + margin: 0.5em 0; + padding: 2px; +} +#wp-mail-logging .wp-mail-logging-page-content pre { + white-space: pre-line; +} +#wp-mail-logging .wp-mail-logging-page-content.active { + display: block; +} +#wp-mail-logging .wp-mail-logging-setting-toggle { + vertical-align: middle; + display: inline-block; +} +#wp-mail-logging .wp-mail-logging-setting-toggle__switch { + position: relative; + cursor: pointer; + background-color: #ccc; + border-radius: 15px; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + vertical-align: middle; + display: inline-block; + margin: -1px 0 0 0; + width: 36px; + height: 20px; +} +#wp-mail-logging .wp-mail-logging-setting-toggle__switch:before { + position: absolute; + content: ""; + height: 16px; + width: 16px; + left: 2px; + top: 2px; + background-color: #fff; + border-radius: 50%; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox] { + position: absolute; + top: auto; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); + width: 1px; + height: 1px; + white-space: nowrap; +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:checked + .wp-mail-logging-setting-toggle__switch { + background-color: #38a17e; +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:checked + .wp-mail-logging-setting-toggle__switch:before { + -webkit-transform: translateX(16px); + -ms-transform: translateX(16px); + transform: translateX(16px); +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:checked:hover + .wp-mail-logging-setting-toggle__switch, #wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:checked:focus + .wp-mail-logging-setting-toggle__switch { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #00a32a; +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:not(:checked):hover + .wp-mail-logging-setting-toggle__switch, #wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:not(:checked):focus + .wp-mail-logging-setting-toggle__switch { + background-color: #999; + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #999; +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled:checked:hover + .wp-mail-logging-setting-toggle__switch, #wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled:not(:checked):hover + .wp-mail-logging-setting-toggle__switch { + box-shadow: none; +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled:not(:checked):hover + .wp-mail-logging-setting-toggle__switch { + background-color: #ddd; +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled + .wp-mail-logging-setting-toggle__switch { + background-color: #ddd; + cursor: default; +} +#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled:checked + .wp-mail-logging-setting-toggle__switch { + background-color: #24ff5c; + cursor: default; +} +#wp-mail-logging #email-list table.emails { + border-radius: 4px; +} +#wp-mail-logging #email-list table.emails th, #wp-mail-logging #email-list table.emails td { + vertical-align: middle; +} +#wp-mail-logging #email-list table.emails .column-cb, +#wp-mail-logging #email-list table.emails .check-column { + padding: 0; + text-align: center; + vertical-align: middle; +} +@media (max-width: 600px) { + #wp-mail-logging #email-list table.emails .column-cb, + #wp-mail-logging #email-list table.emails .check-column { + padding: 10px 0 0 3px; + } +} +#wp-mail-logging #email-list table.emails th#timestamp, #wp-mail-logging #email-list table.emails th#actions, #wp-mail-logging #email-list table.emails td.column-timestamp, #wp-mail-logging #email-list table.emails td.column-actions { + width: 200px; + max-width: 200px; +} +#wp-mail-logging #email-list table.emails td.column-actions { + text-align: right; + vertical-align: middle; +} +#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column { + align-items: center; + display: flex; + justify-content: flex-end; +} +#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column .wp-mail-logging-action-item { + align-items: center; + display: flex; + background-color: #FFFFFF; + border: 1px solid #CCD0D4; + border-radius: 5px; + color: #8C8F94; + line-height: 0; + margin: 0 4px; + padding: 5px; +} +#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column .wp-mail-logging-action-item img { + width: 16px; + height: 16px; +} +#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column .wp-mail-logging-action-item:hover, #wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column .wp-mail-logging-action-item:focus { + border-color: #3c434a; + color: #3c434a; + cursor: pointer; +} +@media (max-width: 600px) { + #wp-mail-logging #email-list p.search-box { + width: inherit; + } +} + +#wp-mail-logging-page-header-temp { + margin: 0; + position: absolute; + top: -1px; + left: 20px; + right: 0; + z-index: 99; +} + +#wp-mail-logging-page-header { + background-color: #FFF; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + margin-bottom: 20px; +} +#wp-mail-logging-page-header .wp-mail-logging-page-title { + align-items: center; + display: flex; + font-size: 14px; + padding: 4px 20px 0; +} +@media (max-width: 600px) { + #wp-mail-logging-page-header .wp-mail-logging-page-title { + display: block; + padding-top: 20px; + } +} +#wp-mail-logging-page-header .wp-mail-logging-page-title .wp-mail-logging-logo-image { + align-items: center; + justify-content: center; +} +#wp-mail-logging-page-header .wp-mail-logging-page-title .wp-mail-logging-logo-sep { + margin: 0 15px; +} +@media (max-width: 600px) { + #wp-mail-logging-page-header .wp-mail-logging-page-title .wp-mail-logging-logo-sep { + display: none; + } +} +#wp-mail-logging-page-header .wp-mail-logging-page-title a.tab { + border-bottom: 4px solid #fff; + box-shadow: none; + color: #787C82; + display: inline-block; + font-weight: 600; + margin-right: 30px; + padding: 20px 0 18px 0; + text-decoration: none; +} +#wp-mail-logging-page-header .wp-mail-logging-page-title a.tab.active { + border-color: #E77C5C; + color: #2C3338; +} +#wp-mail-logging-page-header .wp-mail-logging-page-title a.tab.active:hover { + border-color: #E77C5C; +} +#wp-mail-logging-page-header .wp-mail-logging-page-title a.tab:hover { + border-color: #a7aaad; +} +#wp-mail-logging-page-header .wp-mail-logging-page-title a.action { + color: #fff; + font-weight: 600; + margin: 14px 0 14px 10px; + line-height: 28px; + min-height: 30px; + vertical-align: top; +} +@media (max-width: 600px) { + #wp-mail-logging-page-header .wp-mail-logging-page-title a.action { + margin-left: 0; + } +} +#wp-mail-logging-page-header .wp-mail-logging-page-title .page-title { + background-color: #fff; + display: inline-block; + font-size: 23px; + margin: 0; + padding: 20px 20px 20px 0; +} + +.wp-mail-logging-btn { + border: 0; + border-radius: 4px; + cursor: pointer; + display: inline-block; + margin: 0; + text-decoration: none; + text-align: center; + vertical-align: middle; + white-space: nowrap; + text-shadow: none; + box-shadow: none; + outline: none; +} +.wp-mail-logging-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} +.wp-mail-logging-btn.wp-mail-logging-btn-lg { + font-size: 16px; + font-weight: 600; + padding: 12px 16px; +} +.wp-mail-logging-btn.wp-mail-logging-btn-orange { + background-color: #E77C5C; + color: #fff; +} +.wp-mail-logging-btn.wp-mail-logging-btn-orange:hover, .wp-mail-logging-btn.wp-mail-logging-btn-orange:active, .wp-mail-logging-btn.wp-mail-logging-btn-orange:focus { + background-color: #cb5836; + border: 0; + color: #FFFFFF; +} +.wp-mail-logging-btn.wp-mail-logging-btn-orange:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #cb5836; +} + +.wp-mail-logging-admin-page { + /* Lightbox library global styles. */ +} +.wp-mail-logging-admin-page .lity { + z-index: 999999999; + padding: 20px; +} +.wp-mail-logging-admin-page .lity-close { + margin: 10px; +} +.wp-mail-logging-admin-page .lity-content { + max-width: 80vw; + max-height: 80vh; +} +.wp-mail-logging-admin-page .lity-content img { + max-height: 80vh !important; + max-width: 80vw !important; +} + +@media (max-width: 782px) { + .wp-mail-logging-admin-page p.search-box { + width: 80%; + } +} +.wp-mail-logging-admin-page #wpfooter p { + color: #50575E; + font-weight: 400; +} +.wp-mail-logging-admin-page #wpfooter p strong { + font-weight: 600; +} + +.wp-mail-logging-clearfix:after, .wp-mail-logging-clearfix:before { + content: " "; + display: table; +} +.wp-mail-logging-clearfix:after { + clear: both; +} + +.wp-mail-logging-product-education { + background-color: #FFFFFF; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + border-radius: 6px; + color: #50575E; + font-size: 14px; + font-weight: 400; + margin-top: 20px; + position: relative; +} +.wp-mail-logging-product-education ul { + color: #646970; +} +.wp-mail-logging-product-education-dismiss { + position: absolute; + right: 15px; + top: 15px; +} +.wp-mail-logging-product-education-dismiss button { + background: none; + border: none; + color: #a7aaad; + cursor: pointer; + margin: 0; + padding: 0; +} +.wp-mail-logging-product-education-dismiss button:focus, .wp-mail-logging-product-education-dismiss button:hover { + color: #d63638; +} +.wp-mail-logging-product-education-dismiss button .dashicons, .wp-mail-logging-product-education-dismiss button .dashicons-before::before { + width: 16px; + height: 16px; + font-size: 16px; +} +.wp-mail-logging-product-education-content { + padding: 20px; +} +.wp-mail-logging-product-education-content strong { + font-weight: 600; +} +.wp-mail-logging-product-education-content a.wp-mail-logging-education-btn { + border-radius: 3px; + color: #FFFFFF; + display: inline-block; + font-size: 14px; + padding: 7px 10px; + text-decoration: none; +} +.wp-mail-logging-product-education-content a.wp-mail-logging-education-btn:hover { + color: #FFFFFF; +} +.wp-mail-logging-product-education-content p { + color: #646970; + font-size: 14px; + margin: 10px 0; +} +.wp-mail-logging-product-education-content p a { + color: #E77C5C; +} +.wp-mail-logging-product-education-content p a:hover, .wp-mail-logging-product-education-content p a:focus { + color: #cb5836; +} +.wp-mail-logging-product-education h3 { + color: #3C434A; + font-size: 18px; + font-weight: 600; + margin-bottom: 10px; + margin-top: 0; +} + +#wp-mail-logging-product-education-email-logs-top { + border-radius: 7px; + margin-bottom: 20px; + margin-top: 0; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content { + padding: 15px; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content h2 { + color: #222222; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content p { + color: #646970; + line-height: 18px; + margin: 5px 0; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content div p:last-child { + margin-top: 0; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content a.wp-mail-logging-education-btn { + border-width: 0; + font-size: 13px; + line-height: 16px; + margin-top: 7px; +} + +#wp-mail-logging-product-education-email-logs-bottom { + background: #FFFFFF url("../images/plane-bg.png") no-repeat right bottom; + background-size: 401px 119px; + /* @2x Images (Pixel Ratio of 1.25+) */ +} +@media only screen and (-o-min-device-pixel-ratio: 5/4), only screen and (-webkit-min-device-pixel-ratio: 1.25), only screen and (min-device-pixel-ratio: 1.25), only screen and (min-resolution: 1.25dppx) { + #wp-mail-logging-product-education-email-logs-bottom { + background-image: url("../images/plane-bg@2x.png"); + } +} +@media (max-width: 782px) { + #wp-mail-logging-product-education-email-logs-bottom { + margin-top: 100px; + margin-right: 20px; + position: absolute; + } +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row { + display: flex; + flex-wrap: wrap; + gap: 25px; + margin: 20px 0; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image { + display: flex; + flex-direction: column; + max-width: 370px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a { + border: 5px solid #DCDCDE; + border-radius: 4px; + box-sizing: border-box; + margin-bottom: 10px; + position: relative; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a:hover::after { + opacity: 1; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a::after { + background: rgba(68, 68, 68, 0.15) url("../images/zoom.svg") no-repeat center; + background-size: 50px; + content: ""; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + transition: all 0.3s; + width: 100%; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image img { + display: block; + height: auto; + width: 100%; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image span { + color: #3C434A; + font-size: 16px; + font-weight: 600; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul { + font-size: 13px; + line-height: 20px; + margin-bottom: 0; + margin-top: 10px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul li { + background: transparent url("../images/arrow-right-plain-icon.svg") no-repeat left 3px; + background-size: 12px; + padding-left: 18px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul li::before { + left: 0; + position: absolute; + top: -1px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn { + background: #E77C5C; + border-color: #E77C5C; + border-radius: 4px; + border-width: 0; + font-weight: 600; + line-height: 16px; + padding: 12px 16px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:hover, #wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:focus { + background-color: #cb5836; + border-color: #cb5836; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #cb5836; +} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9nZW5lcmFsLnNjc3MiLCJfaW5jbHVkZS1tZWRpYS5zY3NzIiwid3AtbWFpbC1sb2dnaW5nLWFkbWluLnNjc3MiLCJfY29sb3JzLnNjc3MiLCJfdmFyaWFibGVzLnNjc3MiLCJ3cC1tYWlsLWxvZ2dpbmctcHJvZHVjdC1lZHVjYXRpb24uc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTtFQUNJO0VBQ0E7O0FDNGlCSDtFRDlpQkQ7SUFLUTs7OztBQ3lpQlA7RURyaUJEO0lBRVE7Ozs7QUVQUjtFQUNJLE9DRmU7RURHZjs7QUFJSTtFQUNJLGFFSkk7O0FGVVI7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0k7O0FBS1o7RUFDSTs7QUFHSjtFQUNJOztBQUVBO0FBQUE7QUFBQTtFQUdJO0VBQ0E7RUFDQTs7QUFHSjtFQUNJOztBQUlKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7O0FEc2VYO0VDMWVPO0lBT1E7OztBQUdKO0VBQ0k7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7QUFJSjtFQUNJOztBQUdJO0FBQUE7RUFFSTs7QUFJUjtFQUNJO0VBQ0E7O0FBR0o7RUFDSTs7QUFNSjtFQUNJO0VBQ0E7O0FBT0o7RUFDSTtFQUNBOztBQUdKO0VBQ0k7RUFDQTs7QUFHSjtFQUNJOztBQUdKO0VBQ0k7O0FBVUo7RUFDSTs7QUFPSjtFQUNJOztBQVNBO0VBQ0k7O0FBR0o7RUFDSTtFQUNBOztBQU1aO0VBQ0k7RUFDQTs7QUFHSjtFQUNJOztBQVFJO0VBQ0k7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0ksa0JDdk1qQjs7QUR5TWlCO0VBQ0k7RUFDQTtFQUNBOztBQUtKO0VBRUk7O0FBR0o7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7O0FBR0o7RUFDSTtFQUNBOztB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QUNBO0VBQ0E7O0FBRUE7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJOztBQUdKO0VBQ0k7RUFDQTtFQUNBOztBQUtaO0VBQ0k7O0FBRUE7RUFDSSxhRHZDSTs7QUMyQ0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTs7QUFLWjtFQUNJO0VBQ0E7RUFDQTs7QUFFQTtFQUNJOztBQUVBO0VBQ0k7O0FBTWhCO0VBQ0k7RUFDQTtFQUNBLGFEM0VRO0VDNEVSO0VBQ0E7OztBQUlSO0VBQ0k7RUFDQTtFQUNBOztBQUVBO0VBQ0k7O0FBRUE7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFLQTtFQUNJOztBQUlSO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7OztBQUtaO0VBQ0k7RUFDQTtBQUVBOztBQUNBO0VBTEo7SUFVUTs7O0FKMGFQO0VJcGJEO0lBY1E7SUFDQTtJQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0k7RUFDQTtFQUNBOztBQUVBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJOztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSVI7RUFDSTtFQUNBO0VBQ0E7O0FBR0o7RUFDSTtFQUNBO0VBQ0EsYURuTEE7O0FDc0xKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTtFQUNBO0VBQ0E7O0FBT3BCO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQSxhRGhOUTtFQ2lOUjtFQUNBOztBQUVBO0VBQ0k7RUFDQTs7QUFHSjtFQUNJIiwiZmlsZSI6ImFzc2V0cy9jc3Mvd3AtbWFpbC1sb2dnaW5nLWFkbWluLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcmUgYWRtaW4gc3R5bGUgb3ZlcnJpZGVzLlxuI3dwY29udGVudCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgQGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDQ2cHg7XG4gICAgfVxufVxuXG4jd3Bib2R5IHtcbiAgICBAaW5jbHVkZSBtZWRpYShcIjw9cGhvbmVcIikge1xuICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICB9XG59XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG5cbi8vICAgICBfICAgICAgICAgICAgXyAgICAgICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gX1xuLy8gICAgKF8pICAgICAgICAgIHwgfCAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IChfKVxuLy8gICAgIF8gXyBfXyAgIF9fX3wgfF8gICBfICBfX3wgfCBfX18gICBfIF9fIF9fXyAgIF9fXyAgX198IHxfICBfXyBfXG4vLyAgICB8IHwgJ18gXFwgLyBfX3wgfCB8IHwgfC8gX2AgfC8gXyBcXCB8ICdfIGAgXyBcXCAvIF8gXFwvIF9gIHwgfC8gX2AgfFxuLy8gICAgfCB8IHwgfCB8IChfX3wgfCB8X3wgfCAoX3wgfCAgX18vIHwgfCB8IHwgfCB8ICBfXy8gKF98IHwgfCAoX3wgfFxuLy8gICAgfF98X3wgfF98XFxfX198X3xcXF9fLF98XFxfXyxffFxcX19ffCB8X3wgfF98IHxffFxcX19ffFxcX18sX3xffFxcX18sX3xcbi8vXG4vLyAgICAgIFNpbXBsZSwgZWxlZ2FudCBhbmQgbWFpbnRhaW5hYmxlIG1lZGlhIHF1ZXJpZXMgaW4gU2Fzc1xuLy8gICAgICAgICAgICAgICAgICAgICAgICB2MS40Ljlcbi8vXG4vLyAgICAgICAgICAgICAgICBodHRwOi8vaW5jbHVkZS1tZWRpYS5jb21cbi8vXG4vLyAgICAgICAgIEF1dGhvcnM6IEVkdWFyZG8gQm91Y2FzIChAZWR1YXJkb2JvdWNhcylcbi8vICAgICAgICAgICAgICAgICAgSHVnbyBHaXJhdWRlbCAoQGh1Z29naXJhdWRlbClcbi8vXG4vLyAgICAgIFRoaXMgcHJvamVjdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlXG5cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgbGlicmFyeSBwdWJsaWMgY29uZmlndXJhdGlvblxuLy8vIEBhdXRob3IgRWR1YXJkbyBCb3VjYXNcbi8vLyBAYWNjZXNzIHB1YmxpY1xuLy8vL1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIGdsb2JhbCBicmVha3BvaW50c1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgYnJlYWtwb2ludCB3aXRoIHRoZSBsYWJlbCBgcGhvbmVgXG4vLy8gICRicmVha3BvaW50czogKCdwaG9uZSc6IDMyMHB4KTtcbi8vL1xuJGJyZWFrcG9pbnRzOiAoXG4gICdwaG9uZSc6IDMyMHB4LFxuICAndGFibGV0JzogNzY4cHgsXG4gICdkZXNrdG9wJzogMTAyNHB4XG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIENyZWF0ZXMgYSBsaXN0IG9mIHN0YXRpYyBleHByZXNzaW9ucyBvciBtZWRpYSB0eXBlc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzaW5nbGUgbWVkaWEgdHlwZSAoc2NyZWVuKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJzogJ3NjcmVlbicpO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIENyZWF0ZXMgYSBzdGF0aWMgZXhwcmVzc2lvbiB3aXRoIGxvZ2ljYWwgZGlzanVuY3Rpb24gKE9SIG9wZXJhdG9yKVxuLy8vICAkbWVkaWEtZXhwcmVzc2lvbnM6IChcbi8vLyAgICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSdcbi8vLyAgKTtcbi8vL1xuJG1lZGlhLWV4cHJlc3Npb25zOiAoXG4gICdzY3JlZW4nOiAnc2NyZWVuJyxcbiAgJ3ByaW50JzogJ3ByaW50JyxcbiAgJ2hhbmRoZWxkJzogJ2hhbmRoZWxkJyxcbiAgJ2xhbmRzY2FwZSc6ICcob3JpZW50YXRpb246IGxhbmRzY2FwZSknLFxuICAncG9ydHJhaXQnOiAnKG9yaWVudGF0aW9uOiBwb3J0cmFpdCknLFxuICAncmV0aW5hMngnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCknLFxuICAncmV0aW5hM3gnOiAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMyksIChtaW4tcmVzb2x1dGlvbjogMzUwZHBpKSwgKG1pbi1yZXNvbHV0aW9uOiAzZHBweCknXG4pICFkZWZhdWx0O1xuXG5cbi8vL1xuLy8vIERlZmluZXMgYSBudW1iZXIgdG8gYmUgYWRkZWQgb3Igc3VidHJhY3RlZCBmcm9tIGVhY2ggdW5pdCB3aGVuIGRlY2xhcmluZyBicmVha3BvaW50cyB3aXRoIGV4Y2x1c2l2ZSBpbnRlcnZhbHNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcGl4ZWxzIGlzIGRlZmluZWQgYXMgYDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4xMjhweCcpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMTI5cHgpIHt9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gSW50ZXJ2YWwgZm9yIGVtcyBpcyBkZWZpbmVkIGFzIGAwLjAxYCBieSBkZWZhdWx0XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+MjBlbScpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMjAuMDFlbSkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgcmVtcyBpcyBkZWZpbmVkIGFzIGAwLjFgIGJ5IGRlZmF1bHQsIHRvIGJlIHVzZWQgd2l0aCBgZm9udC1zaXplOiA2Mi41JTtgXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+Mi4wcmVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyLjFyZW0pIHt9XG4vLy9cbiR1bml0LWludGVydmFsczogKFxuICAncHgnOiAxLFxuICAnZW0nOiAwLjAxLFxuICAncmVtJzogMC4xLFxuICAnJzogMFxuKSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gRGVmaW5lcyB3aGV0aGVyIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgYXZhaWxhYmxlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIHNlcGFyYXRlIHN0eWxlc2hlZXRzXG4vLy8gZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBtZWRpYSBxdWVyaWVzLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIERpc2FibGVzIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4kaW0tbWVkaWEtc3VwcG9ydDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBicmVha3BvaW50IHRvIGVtdWxhdGUgd2hlbiBzdXBwb3J0IGZvciBtZWRpYSBxdWVyaWVzIGlzIGRpc2FibGVkLiBNZWRpYSBxdWVyaWVzIHRoYXQgc3RhcnQgYXQgb3Jcbi8vLyBpbnRlcmNlcHQgdGhlIGJyZWFrcG9pbnQgd2lsbCBiZSBkaXNwbGF5ZWQsIGFueSBvdGhlcnMgd2lsbCBiZSBpZ25vcmVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgLmZvbyB7XG4vLy8gICAgY29sb3I6IHRvbWF0bztcbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGRvZXMgbm90IGludGVyY2VwdCB0aGUgZGVza3RvcCBicmVha3BvaW50XG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICd0YWJsZXQnO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj1kZXNrdG9wJykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBObyBvdXRwdXQgKi9cbi8vL1xuJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJyAhZGVmYXVsdDtcblxuLy8vXG4vLy8gU2VsZWN0cyB3aGljaCBtZWRpYSBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiBhbiBleHByZXNzaW9uIGZvciBpdCB0byBiZSB1c2VkIHdoZW4gbWVkaWEgcXVlcmllc1xuLy8vIGFyZSBub3Qgc3VwcG9ydGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnQgYW5kIGNvbnRhaW5zIG9ubHkgYWNjZXB0ZWQgbWVkaWEgZXhwcmVzc2lvbnNcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdzY3JlZW4nKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgTk9UIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBidXQgY29udGFpbnMgYSBtZWRpYSBleHByZXNzaW9uIHRoYXQgaXMgbm90IGFjY2VwdGVkXG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJztcbi8vLyAgJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbicpO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnLCAncmV0aW5hMngnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJywgJ3BvcnRyYWl0JywgJ2xhbmRzY2FwZScpICFkZWZhdWx0O1xuXG4vLy8vXG4vLy8gQ3Jvc3MtZW5naW5lIGxvZ2dpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gTG9nIGEgbWVzc2FnZSBlaXRoZXIgd2l0aCBgQGVycm9yYCBpZiBzdXBwb3J0ZWRcbi8vLyBlbHNlIHdpdGggYEB3YXJuYCwgdXNpbmcgYGZlYXR1cmUtZXhpc3RzKCdhdC1lcnJvcicpYFxuLy8vIHRvIGRldGVjdCBzdXBwb3J0LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQGZ1bmN0aW9uIGltLWxvZygkbWVzc2FnZSkge1xuICBAaWYgZmVhdHVyZS1leGlzdHMoJ2F0LWVycm9yJykge1xuXHRAZXJyb3IgJG1lc3NhZ2U7XG4gIH0gQGVsc2Uge1xuXHRAd2FybiAkbWVzc2FnZTtcblx0JF86IG5vb3AoKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1lc3NhZ2U7XG59XG5cblxuLy8vXG4vLy8gV3JhcHBlciBtaXhpbiBmb3IgdGhlIGxvZyBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIGEgbW9yZSBmcmllbmRseVxuLy8vIEFQSSB0aGFuIGBAaWYgaW0tbG9nKCcuLicpIHt9YCBvciBgJF86IGltLWxvZygnLi4nKWAuIEJhc2ljYWxseSwgdXNlIHRoZSBmdW5jdGlvblxuLy8vIHdpdGhpbiBmdW5jdGlvbnMgYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluIGEgZnVuY3Rpb25cbi8vLyBhbmQgdXNlIHRoZSBtaXhpbiBldmVyeXdoZXJlIGVsc2UgYmVjYXVzZSBpdCdzIG11Y2ggbW9yZSBlbGVnYW50LlxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRtZXNzYWdlIC0gTWVzc2FnZSB0byBsb2dcbi8vL1xuQG1peGluIGxvZygkbWVzc2FnZSkge1xuICBAaWYgaW0tbG9nKCRtZXNzYWdlKSB7fVxufVxuXG5cbi8vL1xuLy8vIEZ1bmN0aW9uIHdpdGggbm8gYEByZXR1cm5gIGNhbGxlZCBuZXh0IHRvIGBAd2FybmAgaW4gU2FzcyAzLjNcbi8vLyB0byB0cmlnZ2VyIGEgY29tcGlsaW5nIGVycm9yIGFuZCBzdG9wIHRoZSBwcm9jZXNzLlxuLy8vXG5AZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8vL1xuLy8vIERldGVybWluZXMgd2hldGhlciBhIGxpc3Qgb2YgY29uZGl0aW9ucyBpcyBpbnRlcmNlcHRlZCBieSB0aGUgc3RhdGljIGJyZWFrcG9pbnQuXG4vLy9cbi8vLyBAcGFyYW0ge0FyZ2xpc3R9ICAgJGNvbmRpdGlvbnMgIC0gTWVkaWEgcXVlcnkgY29uZGl0aW9uc1xuLy8vXG4vLy8gQHJldHVybiB7Qm9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIGludGVyY2VwdGVkIGJ5IHRoZSBzdGF0aWMgYnJlYWtwb2ludFxuLy8vXG5AZnVuY3Rpb24gaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikge1xuICAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRpbS1uby1tZWRpYS1icmVha3BvaW50KTtcblxuICBAaWYgbm90ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlIHtcblx0QGlmIGltLWxvZygnYCN7JGltLW5vLW1lZGlhLWJyZWFrcG9pbnR9YCBpcyBub3QgYSB2YWxpZCBicmVha3BvaW50LicpIHt9XG4gIH1cblxuICBAZWFjaCAkY29uZGl0aW9uIGluICRjb25kaXRpb25zIHtcblx0QGlmIG5vdCBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRjb25kaXRpb24pIHtcblx0ICAkb3BlcmF0b3I6IGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRjb25kaXRpb24pO1xuXHQgICRwcmVmaXg6IGdldC1leHByZXNzaW9uLXByZWZpeCgkb3BlcmF0b3IpO1xuXHQgICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGNvbmRpdGlvbiwgJG9wZXJhdG9yKTtcblxuXHQgIEBpZiAoJHByZWZpeCA9PSAnbWF4JyBhbmQgJHZhbHVlIDw9ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSBvclxuXHRcdCAgKCRwcmVmaXggPT0gJ21pbicgYW5kICR2YWx1ZSA+ICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlKSB7XG5cdFx0QHJldHVybiBmYWxzZTtcblx0ICB9XG5cdH0gQGVsc2UgaWYgbm90IGluZGV4KCRpbS1uby1tZWRpYS1leHByZXNzaW9ucywgJGNvbmRpdGlvbikge1xuXHQgIEByZXR1cm4gZmFsc2U7XG5cdH1cbiAgfVxuXG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuLy8vL1xuLy8vIFBhcnNpbmcgZW5naW5lXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gR2V0IG9wZXJhdG9yIG9mIGFuIGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCBvcGVyYXRvciBmcm9tXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gQW55IG9mIGA+PWAsIGA+YCwgYDw9YCwgYDxgLCBg4omlYCwgYOKJpGBcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKSB7XG4gIEBlYWNoICRvcGVyYXRvciBpbiAoJz49JywgJz4nLCAnPD0nLCAnPCcsICfiiaUnLCAn4omkJykge1xuXHRAaWYgc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcblx0ICBAcmV0dXJuICRvcGVyYXRvcjtcblx0fVxuICB9XG5cbiAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuICAvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuICAvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cbiAgLy8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcbiAgLy8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuICAkXzogaW0tbG9nKCdObyBvcGVyYXRvciBmb3VuZCBpbiBgI3skZXhwcmVzc2lvbn1gLicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IGRpbWVuc2lvbiBmcm9tXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yIGZyb20gYCRleHByZXNzaW9uYFxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGB3aWR0aGAgb3IgYGhlaWdodGAgKG9yIHBvdGVudGlhbGx5IGFueXRoaW5nIGVsc2UpXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1kaW1lbnNpb24oJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAkb3BlcmF0b3ItaW5kZXg6IHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHBhcnNlZC1kaW1lbnNpb246IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgMCwgJG9wZXJhdG9yLWluZGV4IC0gMSk7XG4gICRkaW1lbnNpb246ICd3aWR0aCc7XG5cbiAgQGlmIHN0ci1sZW5ndGgoJHBhcnNlZC1kaW1lbnNpb24pID4gMCB7XG5cdCRkaW1lbnNpb246ICRwYXJzZWQtZGltZW5zaW9uO1xuICB9XG5cbiAgQHJldHVybiAkZGltZW5zaW9uO1xufVxuXG5cbi8vL1xuLy8vIEdldCBkaW1lbnNpb24gcHJlZml4IGJhc2VkIG9uIGFuIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3Jcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBgbWluYCBvciBgbWF4YFxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcikge1xuICBAcmV0dXJuIGlmKGluZGV4KCgnPCcsICc8PScsICfiiaQnKSwgJG9wZXJhdG9yKSwgJ21heCcsICdtaW4nKTtcbn1cblxuXG4vLy9cbi8vLyBHZXQgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiwgYmFzZWQgb24gYSBmb3VuZCBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IHZhbHVlIGZyb21cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3IgZnJvbSBgJGV4cHJlc3Npb25gXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gQSBudW1lcmljIHZhbHVlXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKSB7XG4gICRvcGVyYXRvci1pbmRleDogc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkdmFsdWU6IHN0ci1zbGljZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yLWluZGV4ICsgc3RyLWxlbmd0aCgkb3BlcmF0b3IpKTtcblxuICBAaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCAkdmFsdWUpIHtcblx0JHZhbHVlOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJHZhbHVlKTtcbiAgfSBAZWxzZSB7XG5cdCR2YWx1ZTogdG8tbnVtYmVyKCR2YWx1ZSk7XG4gIH1cblxuICAkaW50ZXJ2YWw6IG1hcC1nZXQoJHVuaXQtaW50ZXJ2YWxzLCB1bml0KCR2YWx1ZSkpO1xuXG4gIEBpZiBub3QgJGludGVydmFsIHtcblx0Ly8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbnNpZGUgYSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0b1xuXHQvLyByZWx5IG9uIHRoZSBgaW0tbG9nKC4uKWAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIGBsb2coLi4pYCBtaXhpbi4gQmVjYXVzZVxuXHQvLyBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBTYXNzLCB3ZSBuZWVkIHRvIGhhY2sgdGhlIGNhbGwgaW5cblx0Ly8gYSBkdW1teSB2YXJpYWJsZSwgc3VjaCBhcyBgJF9gLiBJZiBhbnlib2R5IGV2ZXIgcmFpc2UgYSBzY29waW5nIGlzc3VlIHdpdGhcblx0Ly8gU2FzcyAzLjMsIGNoYW5nZSB0aGlzIGxpbmUgaW4gYEBpZiBpbS1sb2coLi4pIHt9YCBpbnN0ZWFkLlxuXHQkXzogaW0tbG9nKCdVbmtub3duIHVuaXQgYCN7dW5pdCgkdmFsdWUpfWAuJyk7XG4gIH1cblxuICBAaWYgJG9wZXJhdG9yID09ICc+JyB7XG5cdCR2YWx1ZTogJHZhbHVlICsgJGludGVydmFsO1xuICB9IEBlbHNlIGlmICRvcGVyYXRvciA9PSAnPCcge1xuXHQkdmFsdWU6ICR2YWx1ZSAtICRpbnRlcnZhbDtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlO1xufVxuXG5cbi8vL1xuLy8vIFBhcnNlIGFuIGV4cHJlc3Npb24gdG8gcmV0dXJuIGEgdmFsaWQgbWVkaWEtcXVlcnkgZXhwcmVzc2lvblxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBwYXJzZVxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIFZhbGlkIG1lZGlhIHF1ZXJ5XG4vLy9cbkBmdW5jdGlvbiBwYXJzZS1leHByZXNzaW9uKCRleHByZXNzaW9uKSB7XG4gIC8vIElmIGl0IGlzIHBhcnQgb2YgJG1lZGlhLWV4cHJlc3Npb25zLCBpdCBoYXMgbm8gb3BlcmF0b3JcbiAgLy8gdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGdvIGFueSBmdXJ0aGVyLCBqdXN0IHJldHVybiB0aGUgdmFsdWVcbiAgQGlmIG1hcC1oYXMta2V5KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pIHtcblx0QHJldHVybiBtYXAtZ2V0KCRtZWRpYS1leHByZXNzaW9ucywgJGV4cHJlc3Npb24pO1xuICB9XG5cbiAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkZXhwcmVzc2lvbik7XG4gICRkaW1lbnNpb246IGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG4gICR2YWx1ZTogZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG5cbiAgQHJldHVybiAnKCN7JHByZWZpeH0tI3skZGltZW5zaW9ufTogI3skdmFsdWV9KSc7XG59XG5cbi8vL1xuLy8vIFNsaWNlIGAkbGlzdGAgYmV0d2VlbiBgJHN0YXJ0YCBhbmQgYCRlbmRgIGluZGV4ZXNcbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtMaXN0fSAkbGlzdCAtIExpc3QgdG8gc2xpY2Vcbi8vLyBAcGFyYW0ge051bWJlcn0gJHN0YXJ0IFsxXSAtIFN0YXJ0IGluZGV4XG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRlbmQgW2xlbmd0aCgkbGlzdCldIC0gRW5kIGluZGV4XG4vLy9cbi8vLyBAcmV0dXJuIHtMaXN0fSBTbGljZWQgbGlzdFxuLy8vXG5AZnVuY3Rpb24gc2xpY2UoJGxpc3QsICRzdGFydDogMSwgJGVuZDogbGVuZ3RoKCRsaXN0KSkge1xuICBAaWYgbGVuZ3RoKCRsaXN0KSA8IDEgb3IgJHN0YXJ0ID4gJGVuZCB7XG5cdEByZXR1cm4gKCk7XG4gIH1cblxuICAkcmVzdWx0OiAoKTtcblxuICBAZm9yICRpIGZyb20gJHN0YXJ0IHRocm91Z2ggJGVuZCB7XG5cdCRyZXN1bHQ6IGFwcGVuZCgkcmVzdWx0LCBudGgoJGxpc3QsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vLy9cbi8vLyBTdHJpbmcgdG8gbnVtYmVyIGNvbnZlcnRlclxuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vL1xuXG5cbi8vL1xuLy8vIENhc3RzIGEgc3RyaW5nIGludG8gYSBudW1iZXJcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBiZSBwYXJzZWRcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn1cbi8vL1xuQGZ1bmN0aW9uIHRvLW51bWJlcigkdmFsdWUpIHtcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG5cdEByZXR1cm4gJHZhbHVlO1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSAhPSAnc3RyaW5nJyB7XG5cdCRfOiBpbS1sb2coJ1ZhbHVlIGZvciBgdG8tbnVtYmVyYCBzaG91bGQgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gIH1cblxuICAkZmlyc3QtY2hhcmFjdGVyOiBzdHItc2xpY2UoJHZhbHVlLCAxLCAxKTtcbiAgJHJlc3VsdDogMDtcbiAgJGRpZ2l0czogMDtcbiAgJG1pbnVzOiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpO1xuICAkbnVtYmVyczogKCcwJzogMCwgJzEnOiAxLCAnMic6IDIsICczJzogMywgJzQnOiA0LCAnNSc6IDUsICc2JzogNiwgJzcnOiA3LCAnOCc6IDgsICc5JzogOSk7XG5cbiAgLy8gUmVtb3ZlICsvLSBzaWduIGlmIHByZXNlbnQgYXQgZmlyc3QgY2hhcmFjdGVyXG4gIEBpZiAoJGZpcnN0LWNoYXJhY3RlciA9PSAnKycgb3IgJGZpcnN0LWNoYXJhY3RlciA9PSAnLScpIHtcblx0JHZhbHVlOiBzdHItc2xpY2UoJHZhbHVlLCAyKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggc3RyLWxlbmd0aCgkdmFsdWUpIHtcblx0JGNoYXJhY3Rlcjogc3RyLXNsaWNlKCR2YWx1ZSwgJGksICRpKTtcblxuXHRAaWYgbm90IChpbmRleChtYXAta2V5cygkbnVtYmVycyksICRjaGFyYWN0ZXIpIG9yICRjaGFyYWN0ZXIgPT0gJy4nKSB7XG5cdCAgQHJldHVybiB0by1sZW5ndGgoaWYoJG1pbnVzLCAtJHJlc3VsdCwgJHJlc3VsdCksIHN0ci1zbGljZSgkdmFsdWUsICRpKSlcblx0fVxuXG5cdEBpZiAkY2hhcmFjdGVyID09ICcuJyB7XG5cdCAgJGRpZ2l0czogMTtcblx0fSBAZWxzZSBpZiAkZGlnaXRzID09IDAge1xuXHQgICRyZXN1bHQ6ICRyZXN1bHQgKiAxMCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpO1xuXHR9IEBlbHNlIHtcblx0ICAkZGlnaXRzOiAkZGlnaXRzICogMTA7XG5cdCAgJHJlc3VsdDogJHJlc3VsdCArIG1hcC1nZXQoJG51bWJlcnMsICRjaGFyYWN0ZXIpIC8gJGRpZ2l0cztcblx0fVxuICB9XG5cbiAgQHJldHVybiBpZigkbWludXMsIC0kcmVzdWx0LCAkcmVzdWx0KTtcbn1cblxuXG4vLy9cbi8vLyBBZGQgYCR1bml0YCB0byBgJHZhbHVlYFxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGFkZCB1bml0IHRvXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICR1bml0IC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IC0gYCR2YWx1ZWAgZXhwcmVzc2VkIGluIGAkdW5pdGBcbi8vL1xuQGZ1bmN0aW9uIHRvLWxlbmd0aCgkdmFsdWUsICR1bml0KSB7XG4gICR1bml0czogKCdweCc6IDFweCwgJ2NtJzogMWNtLCAnbW0nOiAxbW0sICclJzogMSUsICdjaCc6IDFjaCwgJ3BjJzogMXBjLCAnaW4nOiAxaW4sICdlbSc6IDFlbSwgJ3JlbSc6IDFyZW0sICdwdCc6IDFwdCwgJ2V4JzogMWV4LCAndncnOiAxdncsICd2aCc6IDF2aCwgJ3ZtaW4nOiAxdm1pbiwgJ3ZtYXgnOiAxdm1heCk7XG5cbiAgQGlmIG5vdCBpbmRleChtYXAta2V5cygkdW5pdHMpLCAkdW5pdCkge1xuXHQkXzogaW0tbG9nKCdJbnZhbGlkIHVuaXQgYCN7JHVuaXR9YC4nKTtcbiAgfVxuXG4gIEByZXR1cm4gJHZhbHVlICogbWFwLWdldCgkdW5pdHMsICR1bml0KTtcbn1cblxuLy8vXG4vLy8gVGhpcyBtaXhpbiBhaW1zIGF0IHJlZGVmaW5pbmcgdGhlIGNvbmZpZ3VyYXRpb24ganVzdCBmb3IgdGhlIHNjb3BlIG9mXG4vLy8gdGhlIGNhbGwuIEl0IGlzIGhlbHBmdWwgd2hlbiBoYXZpbmcgYSBjb21wb25lbnQgbmVlZGluZyBhbiBleHRlbmRlZFxuLy8vIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBjdXN0b20gYnJlYWtwb2ludHMgKHJlZmVycmVkIHRvIGFzIHR3ZWFrcG9pbnRzKVxuLy8vIGZvciBpbnN0YW5jZS5cbi8vL1xuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vha3BvaW50cyBbKCldIC0gTWFwIG9mIHR3ZWFrcG9pbnRzIHRvIGJlIG1lcmdlZCB3aXRoIGAkYnJlYWtwb2ludHNgXG4vLy8gQHBhcmFtIHtNYXB9ICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucyBbKCldIC0gTWFwIG9mIHR3ZWFrZWQgbWVkaWEgZXhwcmVzc2lvbnMgdG8gYmUgbWVyZ2VkIHdpdGggYCRtZWRpYS1leHByZXNzaW9uYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCB0aGUgZ2xvYmFsIGJyZWFrcG9pbnRzIHdpdGggYSB0d2Vha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhLWNvbnRleHQoKCdjdXN0b20nOiA2NzhweCkpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgbWVkaWEgZXhwcmVzc2lvbnMgd2l0aCBhIGN1c3RvbSBvbmVcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgnYWxsJzogJ2FsbCcpKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBAaW5jbHVkZSBtZWRpYSgnYWxsJywgJz5waG9uZScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgYm90aCBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSwgKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJywgJzw9Y3VzdG9tJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG5AbWl4aW4gbWVkaWEtY29udGV4dCgkdHdlYWtwb2ludHM6ICgpLCAkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnM6ICgpKSB7XG4gIC8vIFNhdmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGdsb2JhbC1icmVha3BvaW50czogJGJyZWFrcG9pbnRzO1xuICAkZ2xvYmFsLW1lZGlhLWV4cHJlc3Npb25zOiAkbWVkaWEtZXhwcmVzc2lvbnM7XG5cbiAgLy8gVXBkYXRlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogbWFwLW1lcmdlKCRicmVha3BvaW50cywgJHR3ZWFrcG9pbnRzKSAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6IG1hcC1tZXJnZSgkbWVkaWEtZXhwcmVzc2lvbnMsICR0d2Vhay1tZWRpYS1leHByZXNzaW9ucykgIWdsb2JhbDtcblxuICBAY29udGVudDtcblxuICAvLyBSZXN0b3JlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRicmVha3BvaW50czogJGdsb2JhbC1icmVha3BvaW50cyAhZ2xvYmFsO1xuICAkbWVkaWEtZXhwcmVzc2lvbnM6ICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnMgIWdsb2JhbDtcbn1cblxuLy8vL1xuLy8vIGluY2x1ZGUtbWVkaWEgcHVibGljIGV4cG9zZWQgQVBJXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gR2VuZXJhdGVzIGEgbWVkaWEgcXVlcnkgYmFzZWQgb24gYSBsaXN0IG9mIGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHNpbmdsZSBzZXQgYnJlYWtwb2ludFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPnBob25lJykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCB0d28gc2V0IGJyZWFrcG9pbnRzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnLCAnPD10YWJsZXQnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49MzU4cHgnLCAnPDg1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBzZXQgYnJlYWtwb2ludHMgd2l0aCBjdXN0b20gdmFsdWVzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+ZGVza3RvcCcsICc8PTEzNTBweCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggYSBzdGF0aWMgZXhwcmVzc2lvblxuLy8vICBAaW5jbHVkZSBtZWRpYSgncmV0aW5hMngnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBNaXhpbmcgZXZlcnl0aGluZ1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNTBweCcsICc8dGFibGV0JywgJ3JldGluYTN4JykgeyB9XG4vLy9cbkBtaXhpbiBtZWRpYSgkY29uZGl0aW9ucy4uLikge1xuICBAaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID09IDApIG9yXG5cdCAgKG5vdCAkaW0tbWVkaWEtc3VwcG9ydCBhbmQgaW0taW50ZXJjZXB0cy1zdGF0aWMtYnJlYWtwb2ludCgkY29uZGl0aW9ucy4uLikpIHtcblx0QGNvbnRlbnQ7XG4gIH0gQGVsc2UgaWYgKCRpbS1tZWRpYS1zdXBwb3J0IGFuZCBsZW5ndGgoJGNvbmRpdGlvbnMpID4gMCkge1xuXHRAbWVkaWEgI3t1bnF1b3RlKHBhcnNlLWV4cHJlc3Npb24obnRoKCRjb25kaXRpb25zLCAxKSkpfSB7XG5cdCAgLy8gUmVjdXJzaXZlIGNhbGxcblx0ICBAaW5jbHVkZSBtZWRpYShzbGljZSgkY29uZGl0aW9ucywgMikuLi4pIHtcblx0XHRAY29udGVudDtcblx0ICB9XG5cdH1cbiAgfVxufVxuIiwiQGltcG9ydCBcImluY2x1ZGUtbWVkaWFcIjtcbkBpbXBvcnQgXCJjb2xvcnNcIjtcbkBpbXBvcnQgXCJ2YXJpYWJsZXNcIjtcbkBpbXBvcnQgXCJnZW5lcmFsXCI7XG5cbiN3cC1tYWlsLWxvZ2dpbmcge1xuICAgIGNvbG9yOiAkZGVzY3JpcHRpb24tdGV4dDtcbiAgICBtYXJnaW46IDA7XG5cbiAgICAuc3Vic3Vic3ViIHtcblxuICAgICAgICBhLmN1cnJlbnQge1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI3dwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRhYi1mb3JtIHtcblxuICAgICAgICAjd3AtbWFpbC1sb2dnaW5nLXNldHRpbmctdGFiLXJvdy1sb2ctcm90YXRpb24tbGltaXQtYW1vdXQta2VlcCwgI3dwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRhYi1yb3ctbG9nLXJvdGF0aW9uLWRlbGV0ZS10aW1lLWRheXMge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAjd3AtbWFpbC1sb2dnaW5nLXNldHRpbmdzLWJvdHRvbSB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNGU0ZTQ7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMTVweDtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAzMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgI3dwLW1haWwtbG9nZ2luZy1zZXR0aW5ncy1yZXNldC1saW5rIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBjb2xvcjogIzIyNzFCMTtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMzVweDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcblxuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMxMzVlOTY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAud3AtbWFpbC1sb2dnaW5nLWhpZGUge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC53cC1tYWlsLWxvZ2dpbmctcGFnZS1jb250ZW50IHtcbiAgICAgICAgcGFkZGluZzogMCAyMHB4O1xuXG4gICAgICAgICosXG4gICAgICAgICo6OmJlZm9yZSxcbiAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgfVxuXG4gICAgICAgICN3cC1tYWlsLWxvZ2dpbmctc2V0dGluZy1yb3ctaGVhZGluZy1nZW5lcmFsLXNldHRpbmdzIHtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dGluZyByb3dzLCBlZyBmaWVsZCByb3cuXG4gICAgICAgIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy1yb3cge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNGU0ZTQ7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDAgMzBweCAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMztcblxuICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEoXCI8dGFibGV0XCIpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYuaW5hY3RpdmUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy1taWQtcm93LXNlcCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2U0ZTRlNDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAxNXB4IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNlY3Rpb24gaGVhZGluZy5cbiAgICAgICAgICAgICYuc2VjdGlvbi1oZWFkaW5nIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAzMHB4IDAgMjBweCAwO1xuXG4gICAgICAgICAgICAgICAgJi5uby1kZXNjIHtcbiAgICAgICAgICAgICAgICAgICAgaDIsXG4gICAgICAgICAgICAgICAgICAgIGg0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy1maWVsZCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDA1cHg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmRlc2Mge1xuICAgICAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbnB1dCBzZXR0aW5ncyBmaWVsZC5cbiAgICAgICAgICAgICYud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctcm93LWlucHV0IHtcbiAgICAgICAgICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogODBweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVja2JveCBzZXR0aW5ncyBmaWVsZC5cbiAgICAgICAgICAgICYud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctcm93LWNoZWNrYm94IHtcblxuICAgICAgICAgICAgICAgIGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMXB4IDAgMCAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAwIDhweDtcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5kZXNjIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIDAgMCAzMHB4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWwgKyAuZGVzYyB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogOHB4IDAgMCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVGV4dCBiYXNlZCBzZXR0aW5ncyBmaWVsZC5cbiAgICAgICAgICAgICYud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctcm93LXRleHQsXG4gICAgICAgICAgICAmLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXJvdy1wYXNzd29yZCxcbiAgICAgICAgICAgICYud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctcm93LW51bWJlcixcbiAgICAgICAgICAgICYud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctcm93LWVtYWlsIHtcblxuICAgICAgICAgICAgICAgIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiA4cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZWxlY3Qgc2V0dGluZ3MgZmllbGQuXG4gICAgICAgICAgICAmLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXJvdy1zZWxlY3Qge1xuXG4gICAgICAgICAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLWxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy10b3A6IDhweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJhZGlvIHNldHRpbmdzIGZpZWxkLlxuICAgICAgICAgICAgJi53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy1yb3ctcmFkaW8ge1xuXG4gICAgICAgICAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLWZpZWxkIHtcblxuICAgICAgICAgICAgICAgICAgICBpbnB1dFt0eXBlPXJhZGlvXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IC0zcHggMTBweCAwIDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy1yb3ctbm8tYm9yZGVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXJvdy1uby1wYWRkaW5nIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSYWRpbyBzZXR0aW5ncyBmaWVsZC5cbiAgICAgICAgICAgICYud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctcm93LWNoZWNrYm94LXRvZ2dsZSB7XG5cbiAgICAgICAgICAgICAgICAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctZmllbGQge1xuXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGF1dG87XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcDogcmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDFweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgJjpjaGVja2VkICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS1zd2l0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwb3NpdGl2ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTZweCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTZweCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICY6ZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6Y2hlY2tlZDpob3ZlciArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGUtc3dpdGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6bm90KDpjaGVja2VkKTpob3ZlciArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGUtc3dpdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmOm5vdCg6Y2hlY2tlZCk6aG92ZXIgKyAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctdG9nZ2xlLXN3aXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGUtc3dpdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6Y2hlY2tlZCArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGUtc3dpdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkcG9zaXRpdmUsIDI1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgJjpjaGVja2VkICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS1zd2l0Y2ggKyAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctdG9nZ2xlLWNoZWNrZWQtbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgJjpjaGVja2VkICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS1zd2l0Y2ggKyAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctdG9nZ2xlLWNoZWNrZWQtbGFiZWwgKyAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctdG9nZ2xlLXVuY2hlY2tlZC1sYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgJjpkaXNhYmxlZCArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGUtc3dpdGNoICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS1jaGVja2VkLWxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJjpkaXNhYmxlZCArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGUtc3dpdGNoICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS11bmNoZWNrZWQtbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBsaWdodGVuKCM0NDQsIDQwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgJjpjaGVja2VkOmhvdmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgJjpjaGVja2VkOmZvY3VzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS1zd2l0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgM3B4ICMyZTg3NmE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAmOm5vdCg6Y2hlY2tlZCk6aG92ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAmOm5vdCg6Y2hlY2tlZCk6Zm9jdXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKyAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctdG9nZ2xlLXN3aXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM4YzhmOTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZmZmLCAwIDAgMCAzcHggIzk5OTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctdG9nZ2xlLXVuY2hlY2tlZC1sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS1jaGVja2VkLWxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogJG1lZGl1bS13ZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJHNlY29uZGFyeS10ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS1jaGVja2VkLWxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctdG9nZ2xlLXN3aXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzNjNGM3O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAtbW96LXRyYW5zaXRpb246ICAgIGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLW1zLXRyYW5zaXRpb246ICAgICBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICAgICAgICAgYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAtMXB4IDVweCAwIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzZweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbW96LXRyYW5zaXRpb246ICAgIGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tcy10cmFuc2l0aW9uOiAgICAgYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogICAgICAgICBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy1yb3ctYWxlcnQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyNXB4O1xuXG4gICAgICAgICAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXJvdyB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAuc2VjdGlvbi1oZWFkaW5nIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDtcblxuICAgICAgICAgICAgICAgICAgICBoMyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAubm90aWNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNi41cHggMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctcm93IHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICAgICAgICAgICYgKyAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctcm93IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctZmllbGQge1xuXG4gICAgICAgICAgICAgICAgICAgIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGUtY2hlY2tlZC1sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZS11bmNoZWNrZWQtbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogJG1lZGl1bS13ZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdlbmVyYWwgZWxlbWVudHMuXG4gICAgICAgICAgICBoMiwgaDQge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeS10ZXh0O1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogJG1lZGl1bS13ZWlnaHQ7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGgyIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGgzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHByaW1hcnktdGV4dDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGg1IHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHByaW1hcnktdGV4dDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMTJweCAwIDA7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuXG4gICAgICAgICAgICAgICAgJi5kZXNjIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDAgMDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRzZWNvbmRhcnktdGV4dDtcblxuICAgICAgICAgICAgICAgICAgICAmICsgLmRlc2Mge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiA4cHggMCAwO1xuXG4gICAgICAgICAgICAgICAgJi5saXN0IHtcbiAgICAgICAgICAgICAgICAgICAgbGkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlIHtcbiAgICAgICAgICAgICAgICAmLmFjdGlvbnMtbGlzdCB7XG4gICAgICAgICAgICAgICAgICAgIHRkLCB0aCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA1cHggNXB4IDVweCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICYuZW1haWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICYuc3RhdHVzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAmLmFjdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmW2NsYXNzKj1kZWxldGVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmW2NsYXNzKj1lcnJvcl0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRuZWdhdGl2ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciwgJjphY3RpdmUsICY6Zm9jdXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXJrZW4oICRuZWdhdGl2ZSwgMjAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGb3JtIGVsZW1lbnRzLlxuICAgICAgICAgICAgaW5wdXRbdHlwZT10ZXh0XSxcbiAgICAgICAgICAgIGlucHV0W3R5cGU9ZW1haWxdLFxuICAgICAgICAgICAgaW5wdXRbdHlwZT1udW1iZXJdLFxuICAgICAgICAgICAgaW5wdXRbdHlwZT1wYXNzd29yZF0sXG4gICAgICAgICAgICBzZWxlY3Qge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGZpZWxkLWJvcmRlcjtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGZpZWxkLXRleHQ7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogN3B4IDEycHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIDEwcHggMCAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAzNXB4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBtZWRpYShcIjxkZXNrdG9wXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDMwMHB4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIG1lZGlhKFwiPHBob25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogdW5zZXQ7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcblxuICAgICAgICAgICAgICAgICAgICAmIH4gYnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICZbcmVhZG9ubHldIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLnNtYWxsLXRleHQge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNzVweDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAxNkFBQjtcbiAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICMwMTZBQUI7XG4gICAgICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0W3R5cGU9Y2hlY2tib3hdLFxuICAgICAgICAgICAgaW5wdXRbdHlwZT1yYWRpb10ge1xuICAgICAgICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDE2QUFCO1xuICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzAxNkFBQjtcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0W3R5cGU9bnVtYmVyXSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGVjdCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRNaUlHaGxhV2RvZEQwaU55SWdkbWxsZDBKdmVEMGlNQ0F3SURFeklEY2lJR1pwYkd3OUlpTTRaRGhtT1RVaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0NqeHdZWFJvSUdROUlrMHhNeUF3TGprNU9ESTRNVU14TXlBd0xqa3dNakEyTWlBeE1pNDVOVEU1SURBdU56a3pPREUwSURFeUxqZzNPVGNnTUM0M01qRTJORGxNTVRJdU1qYzROQ0F3TGpFeU1ESTNORU14TWk0eU1EWXlJREF1TURRNE1UQTVPQ0F4TWk0d09UZ2dNQ0F4TWk0d01ERTNJREJETVRFdU9UQTFOU0F3SURFeExqYzVOek1nTUM0d05EZ3hNRGs0SURFeExqY3lOVEVnTUM0eE1qQXlOelJNTmk0NU9UZ3pJRFF1T0RRM01EaE1NaTR5TnpFMUlEQXVNVEl3TWpjMFF6SXVNVGs1TXpNZ01DNHdORGd4TURrNElESXVNRGt4TURnZ01DQXhMams1TkRnMklEQkRNUzQ0T0RZMk1pQXdJREV1Tnprd05DQXdMakEwT0RFd09UZ2dNUzQzTVRneU15QXdMakV5TURJM05Fd3hMakV4TmpnMklEQXVOekl4TmpRNVF6RXVNRFEwTmprZ01DNDNPVE00TVRRZ01DNDVPVFkxT0RJZ01DNDVNREl3TmpJZ01DNDVPVFkxT0RJZ01DNDVPVGd5T0RGRE1DNDVPVFkxT0RJZ01TNHdPVFExSURFdU1EUTBOamtnTVM0eU1ESTNOU0F4TGpFeE5qZzJJREV1TWpjME9URk1OaTQzTWpFMk55QTJMamczT1RjeVF6WXVOemt6T0RNZ05pNDVOVEU0T1NBMkxqa3dNakE0SURjZ05pNDVPVGd6SURkRE55NHdPVFExTWlBM0lEY3VNakF5TnpjZ05pNDVOVEU0T1NBM0xqSTNORGt6SURZdU9EYzVOekpNTVRJdU9EYzVOeUF4TGpJM05Ea3hRekV5TGprMU1Ua2dNUzR5TURJM05TQXhNeUF4TGpBNU5EVWdNVE1nTUM0NU9UZ3lPREZhSWlCbWFXeHNQU0lqT0dRNFpqazFJaTgrQ2p3dmMzWm5QZ289XCIpO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IDEycHggY2VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUm93IGxhYmVsIChsZWZ0KS5cbiAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLWxhYmVsIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgICB3aWR0aDogMjA1cHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDIwcHggMCAwO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBtZWRpYShcIjx0YWJsZXRcIikge1xuICAgICAgICAgICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRsYWJlbC10ZXh0O1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAkbWVkaXVtLXdlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJvdyBmaWVsZCAocmlnaHQpLlxuICAgICAgICAud3AtbWFpbC1sb2dnaW5nLXNldHRpbmctZmllbGQge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBtYXJnaW46IDAgMCAwIDIwNXB4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiA4MDBweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEoXCI8dGFibGV0XCIpIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDIwcHggMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLWZpZWxkLXJvdyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAgICAgICAgICAgICAmID4gLndwLW1haWwtc210cC1idG4ge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLndwLW1haWwtbG9nZ2luZy1zdWJtaXQge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMjVweCAwO1xuXG4gICAgICAgICAgICAuaGVscC10ZXh0IHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLm5vdGljZS1pbmxpbmUge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgI2ZmZjtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCAwIHJnYmEoIDAsIDAsIDAsIDAuMSApO1xuICAgICAgICAgICAgbWFyZ2luOiA1cHggMCAxNXB4O1xuICAgICAgICAgICAgcGFkZGluZzogMXB4IDEycHg7XG5cbiAgICAgICAgICAgICYubm90aWNlLXN1Y2Nlc3Mge1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkcG9zaXRpdmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubm90aWNlLXdhcm5pbmcge1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZiOTAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm5vdGljZS1lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRuZWdhdGl2ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5ub3RpY2UtaW5mbyB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGEwZDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubm90aWNlIHAsXG4gICAgICAgIC5ub3RpY2UtaW5saW5lIHAge1xuICAgICAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgcHJlIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZSB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICAgICAgICAmX19zd2l0Y2gge1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NjYztcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7XG4gICAgICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgICAgICAgICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIG1hcmdpbjogLTFweCAwIDAgMDtcbiAgICAgICAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuXG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICAgICAgICAgIGxlZnQ6IDJweDtcbiAgICAgICAgICAgICAgICB0b3A6IDJweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgICAgICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgICAgICAgICAgICAgLW1zLXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXRbdHlwZT1jaGVja2JveF0ge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiBhdXRvO1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIGNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtcbiAgICAgICAgICAgIHdpZHRoOiAxcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICAgICAgICY6Y2hlY2tlZCArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGVfX3N3aXRjaCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBvc2l0aXZlO1xuXG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcbiAgICAgICAgICAgICAgICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDE2cHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJjpjaGVja2VkOmhvdmVyLFxuICAgICAgICAgICAgJjpjaGVja2VkOmZvY3VzIHtcbiAgICAgICAgICAgICAgICAmICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZV9fc3dpdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNmZmYsIDAgMCAwIDNweCAjMDBhMzJhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJjpub3QoOmNoZWNrZWQpOmhvdmVyLFxuICAgICAgICAgICAgJjpub3QoOmNoZWNrZWQpOmZvY3VzIHtcbiAgICAgICAgICAgICAgICAmICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZV9fc3dpdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcbiAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNmZmYsIDAgMCAwIDNweCAjOTk5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgJjpjaGVja2VkOmhvdmVyICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZV9fc3dpdGNoLFxuICAgICAgICAgICAgICAgICY6bm90KDpjaGVja2VkKTpob3ZlciArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGVfX3N3aXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJjpub3QoOmNoZWNrZWQpOmhvdmVyICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZV9fc3dpdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmICsgLndwLW1haWwtbG9nZ2luZy1zZXR0aW5nLXRvZ2dsZV9fc3dpdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICY6Y2hlY2tlZCArIC53cC1tYWlsLWxvZ2dpbmctc2V0dGluZy10b2dnbGVfX3N3aXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oIzAwYTMyYSwgMjUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW1haWwgTG9ncy5cbiAgICAjZW1haWwtbGlzdCB7XG5cbiAgICAgICAgdGFibGUuZW1haWxzIHtcblxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gICAgICAgICAgICB0aCwgdGQge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb2x1bW4tY2IsXG4gICAgICAgICAgICAuY2hlY2stY29sdW1uIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTBweCAwIDAgM3B4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGgjdGltZXN0YW1wLCB0aCNhY3Rpb25zLCB0ZC5jb2x1bW4tdGltZXN0YW1wLCB0ZC5jb2x1bW4tYWN0aW9ucyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDIwMHB4O1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMjAwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRkLmNvbHVtbi1hY3Rpb25zIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgICAgICAgICAgICAgLndwLW1haWwtbG9nZ2luZy1hY3Rpb24tY29sdW1uIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcblxuICAgICAgICAgICAgICAgICAgICAud3AtbWFpbC1sb2dnaW5nLWFjdGlvbi1pdGVtIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNDQ0QwRDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzhDOEY5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIDRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzNjNDM0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzNjNDM0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwLnNlYXJjaC1ib3gge1xuICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogaW5oZXJpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuI3dwLW1haWwtbG9nZ2luZy1wYWdlLWhlYWRlci10ZW1wIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLTFweDtcbiAgICBsZWZ0OiAyMHB4O1xuICAgIHJpZ2h0OiAwO1xuICAgIHotaW5kZXg6IDk5O1xufVxuXG4jd3AtbWFpbC1sb2dnaW5nLXBhZ2UtaGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG5cbiAgICAud3AtbWFpbC1sb2dnaW5nLXBhZ2UtdGl0bGUge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIHBhZGRpbmc6IDRweCAyMHB4IDA7XG5cbiAgICAgICAgQGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDIwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAud3AtbWFpbC1sb2dnaW5nLWxvZ28taW1hZ2Uge1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLndwLW1haWwtbG9nZ2luZy1sb2dvLXNlcCB7XG4gICAgICAgICAgICBtYXJnaW46IDAgMTVweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYS50YWIge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICNmZmY7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgY29sb3I6ICM3ODdDODI7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBmb250LXdlaWdodDogJG1lZGl1bS13ZWlnaHQ7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDAgMThweCAwO1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjRTc3QzVDO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMkMzMzM4O1xuXG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI0U3N0M1QztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2E3YWFhZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGEuYWN0aW9uIHtcbiAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgIG1hcmdpbjogMTRweCAwIDE0cHggMTBweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgICAgICAgbWluLWhlaWdodDogMzBweDtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIG1lZGlhKFwiPD1waG9uZVwiKSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAucGFnZS10aXRsZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgZm9udC1zaXplOiAyM3B4O1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMjBweCAyMHB4IDIwcHggMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQnV0dG9ucy5cbi53cC1tYWlsLWxvZ2dpbmctYnRuIHtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luOiAwO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRleHQtc2hhZG93OiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuXG4gICAgJi53cC1tYWlsLWxvZ2dpbmctYnRuLWxnIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogJG1lZGl1bS13ZWlnaHQ7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICB9XG5cbiAgICAmLndwLW1haWwtbG9nZ2luZy1idG4tb3JhbmdlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U3N0M1QztcbiAgICAgICAgY29sb3I6ICNmZmY7XG5cbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjphY3RpdmUsXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYW5nZS1kYXJrO1xuICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgY29sb3I6ICNGRkZGRkY7XG4gICAgICAgIH1cblxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZmZmLCAwIDAgMCAzcHggJG9yYW5nZS1kYXJrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBMaWdodGJveC5cbi53cC1tYWlsLWxvZ2dpbmctYWRtaW4tcGFnZSB7XG5cbiAgICAvKiBMaWdodGJveCBsaWJyYXJ5IGdsb2JhbCBzdHlsZXMuICovXG4gICAgLmxpdHkge1xuICAgICAgICB6LWluZGV4OiA5OTk5OTk5OTk7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgfVxuXG4gICAgLmxpdHktY2xvc2Uge1xuICAgICAgICBtYXJnaW46IDEwcHg7XG4gICAgfVxuXG4gICAgLmxpdHktY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogODB2dztcbiAgICAgICAgbWF4LWhlaWdodDogODB2aDtcblxuICAgICAgICBpbWcge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogODB2aCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiA4MHZ3ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi53cC1tYWlsLWxvZ2dpbmctYWRtaW4tcGFnZSB7XG5cblx0cC5zZWFyY2gtYm94IHtcblx0XHRAaW5jbHVkZSBtZWRpYShcIjw9dGFibGV0XCIpIHtcblx0XHRcdHdpZHRoOiA4MCU7XG5cdFx0fVxuXHR9XG5cbiAgICAjd3Bmb290ZXIgcCB7XG4gICAgICAgIGNvbG9yOiAjNTA1NzVFO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuXG4gICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogJG1lZGl1bS13ZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFV0aWxpdHkuXG4ud3AtbWFpbC1sb2dnaW5nLWNsZWFyZml4IHtcblxuICAgICY6YWZ0ZXIsICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIH1cblxuICAgICY6YWZ0ZXIge1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICB9XG59XG5cbkBpbXBvcnQgXCJ3cC1tYWlsLWxvZ2dpbmctcHJvZHVjdC1lZHVjYXRpb25cIjtcbiIsIi8vIENvbG9yIHN0eWxlc1xuXG4kcHJpbWFyeS10ZXh0OiAjMUQyMzI3O1xuJHNlY29uZGFyeS10ZXh0OiAjNjQ2OTcwO1xuJGRlc2NyaXB0aW9uLXRleHQ6ICMzQzQzNEE7XG4kb3JhbmdlOiAjRTI3NzMwO1xuJG9yYW5nZS1kYXJrOiAjY2I1ODM2O1xuJHBvc2l0aXZlOiAjMzhhMTdlO1xuJG5lZ2F0aXZlOiAjRDYzNjM4O1xuJGZpZWxkLWJvcmRlcjogIzhiOGY5MztcbiRmaWVsZC10ZXh0OiAjMkMzMzM4O1xuJGxhYmVsLXRleHQ6ICMxRTIzMjc7XG4kbGluazogIzIxNzFCMTtcbiRsaW5rLWhvdmVyOiAjMTM1ZTk2O1xuIiwiJGJyZWFrcG9pbnRzOiAoXG4gICAgJ3hzLXBob25lJzogMzIwcHgsXG4gICAgJ3Bob25lJzogNjAwcHgsXG4gICAgJ2lwYWQnOiA3NjhweCxcbiAgICAndGFibGV0JzogNzgycHgsXG4gICAgJ2Rlc2t0b3AnOiA5NjBweFxuKTtcblxuJG1lZGl1bS13ZWlnaHQ6IDYwMDtcbiIsIkBpbXBvcnQgXCJpbmNsdWRlLW1lZGlhXCI7XG5AaW1wb3J0IFwidmFyaWFibGVzXCI7XG5cbi8vIFByb2R1Y3QgRWR1Y2F0aW9uLlxuLndwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcbiAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgY29sb3I6ICM1MDU3NUU7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICB1bCB7XG4gICAgICAgIGNvbG9yOiAjNjQ2OTcwO1xuICAgIH1cblxuICAgICYtZGlzbWlzcyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICAgIHRvcDogMTVweDtcblxuICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGNvbG9yOiAjYTdhYWFkO1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICAgICAgJjpmb2N1cywgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNkNjM2Mzg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5kYXNoaWNvbnMsIC5kYXNoaWNvbnMtYmVmb3JlOjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNvbnRlbnQge1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuXG4gICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogJG1lZGl1bS13ZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBhIHtcbiAgICAgICAgICAgICYud3AtbWFpbC1sb2dnaW5nLWVkdWNhdGlvbi1idG4ge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDdweCAxMHB4O1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICAgIGNvbG9yOiAjNjQ2OTcwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7XG5cbiAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjRTc3QzVDO1xuXG4gICAgICAgICAgICAgICAgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjY2I1ODM2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGgzIHtcbiAgICAgICAgY29sb3I6ICMzQzQzNEE7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbn1cblxuI3dwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbi1lbWFpbC1sb2dzLXRvcCB7XG4gICAgYm9yZGVyLXJhZGl1czogN3B4O1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgbWFyZ2luLXRvcDogMDtcblxuICAgIC53cC1tYWlsLWxvZ2dpbmctcHJvZHVjdC1lZHVjYXRpb24tY29udGVudCB7XG4gICAgICAgIHBhZGRpbmc6IDE1cHg7XG5cbiAgICAgICAgaDIge1xuICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICAgIGNvbG9yOiAjNjQ2OTcwO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXJnaW46IDVweCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZGl2IHtcblxuICAgICAgICAgICAgcDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYS53cC1tYWlsLWxvZ2dpbmctZWR1Y2F0aW9uLWJ0biB7XG4gICAgICAgICAgICBib3JkZXItd2lkdGg6IDA7XG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDdweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuI3dwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbi1lbWFpbC1sb2dzLWJvdHRvbSB7XG4gICAgYmFja2dyb3VuZDogI0ZGRkZGRiB1cmwoXCIuLi9pbWFnZXMvcGxhbmUtYmcucG5nXCIpIG5vLXJlcGVhdCByaWdodCBib3R0b207XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MDFweCAxMTlweDtcblxuICAgIC8qIEAyeCBJbWFnZXMgKFBpeGVsIFJhdGlvIG9mIDEuMjUrKSAqL1xuICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDUvNCksXG4gICAgICAgICAgIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjI1KSxcbiAgICAgICAgICAgb25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjI1KSxcbiAgICAgICAgICAgb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMS4yNWRwcHgpIHtcblxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWFnZXMvcGxhbmUtYmdAMngucG5nXCIpO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMDBweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgLndwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbi1pbWFnZXMtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDI1cHg7XG4gICAgICAgIG1hcmdpbjogMjBweCAwO1xuXG4gICAgICAgICYtaW1hZ2Uge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDM3MHB4O1xuXG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDVweCBzb2xpZCAjRENEQ0RFO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2OCwgNjgsIDY4LCAuMTUpIHVybCgnLi4vaW1hZ2VzL3pvb20uc3ZnJykgbm8tcmVwZWF0IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiA1MHB4O1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgLjNzO1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzNDNDM0QTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcblxuICAgICAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKCcuLi9pbWFnZXMvYXJyb3ctcmlnaHQtcGxhaW4taWNvbi5zdmcnKSBuby1yZXBlYXQgbGVmdCAzcHg7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxOHB4O1xuXG4gICAgICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAtMXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLndwLW1haWwtbG9nZ2luZy1lZHVjYXRpb24tYnRuIHtcbiAgICAgICAgYmFja2dyb3VuZDogI0U3N0M1QztcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjRTc3QzVDO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGJvcmRlci13aWR0aDogMDtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuXG4gICAgICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NiNTgzNjtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2NiNTgzNjtcbiAgICAgICAgfVxuXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNmZmYsIDAgMCAwIDNweCAjY2I1ODM2O1xuICAgICAgICB9XG4gICAgfVxufVxuIl19 */ diff --git a/assets/css/wp-mail-logging-admin.css.map b/assets/css/wp-mail-logging-admin.css.map new file mode 100644 index 00000000..a69b4309 --- /dev/null +++ b/assets/css/wp-mail-logging-admin.css.map @@ -0,0 +1,14 @@ +{ + "version": 3, + "file": "wp-mail-logging-admin.css", + "sources": [ + "wp-mail-logging-admin.scss", + "_include-media.scss", + "_colors.scss", + "_variables.scss", + "_general.scss", + "wp-mail-logging-product-education.scss" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/assets/css/wp-mail-logging-admin.min.css b/assets/css/wp-mail-logging-admin.min.css new file mode 100644 index 00000000..58e9e340 --- /dev/null +++ b/assets/css/wp-mail-logging-admin.min.css @@ -0,0 +1 @@ +#wpcontent{padding-left:0 !important;position:relative}@media(max-width: 600px){#wpcontent{padding-top:46px}}@media(max-width: 600px){#wpbody{padding-top:0}}#wp-mail-logging{color:#3c434a;margin:0}#wp-mail-logging .subsubsub a.current{font-weight:600}#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-setting-tab-row-log-rotation-limit-amout-keep,#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-setting-tab-row-log-rotation-delete-time-days{padding-top:0}#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-settings-bottom{align-items:center;border-top:1px solid #e4e4e4;display:flex;justify-content:space-between;margin-top:15px;padding-top:30px}#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-settings-reset-link{background:none;border:none;color:#2271b1;cursor:pointer;font-size:14px;font-weight:400;line-height:35px;margin:0;outline:0;text-decoration:underline}#wp-mail-logging #wp-mail-logging-setting-tab-form #wp-mail-logging-settings-reset-link:hover{color:#135e96}#wp-mail-logging .wp-mail-logging-hide{display:none}#wp-mail-logging .wp-mail-logging-page-content{padding:0 20px}#wp-mail-logging .wp-mail-logging-page-content *,#wp-mail-logging .wp-mail-logging-page-content *::before,#wp-mail-logging .wp-mail-logging-page-content *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wp-mail-logging .wp-mail-logging-page-content #wp-mail-logging-setting-row-heading-general-settings{padding-top:10px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row{border-bottom:1px solid #e4e4e4;padding:15px 0 30px 0;font-size:14px;line-height:1.3}@media(max-width: 781px){#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row{padding:20px 0}}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.inactive{display:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row .wp-mail-logging-setting-mid-row-sep{background:#e4e4e4;height:1px;border:0;margin:15px 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading{padding:30px 0 20px 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading.no-desc h2,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading.no-desc h4{margin:0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading .wp-mail-logging-setting-field{margin:0;max-width:1005px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.section-heading .desc{font-style:normal}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-input input{max-width:80px;padding:8px 12px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox input[type=checkbox]{float:left;margin:1px 0 0 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox input[type=checkbox]+label{margin:0 0 0 8px;vertical-align:baseline}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox .desc{margin:0 0 0 30px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox input[type=checkbox]+label+.desc{margin:8px 0 0 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-text .wp-mail-logging-setting-label,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-password .wp-mail-logging-setting-label,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-number .wp-mail-logging-setting-label,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-email .wp-mail-logging-setting-label{padding-top:8px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-select .wp-mail-logging-setting-label{padding-top:8px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-radio .wp-mail-logging-setting-field input[type=radio]{margin:-3px 10px 0 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-radio .wp-mail-logging-setting-field label{margin-right:30px;display:inline-block}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-no-border{border-bottom:none;padding-bottom:15px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-no-padding{padding:0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field label{vertical-align:middle;display:inline-block}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]{position:absolute;top:auto;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;white-space:nowrap}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked+.wp-mail-logging-setting-toggle-switch{background-color:#38a17e}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked+.wp-mail-logging-setting-toggle-switch:before{-webkit-transform:translateX(16px);-ms-transform:translateX(16px);transform:translateX(16px)}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled:checked:hover+.wp-mail-logging-setting-toggle-switch,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled:not(:checked):hover+.wp-mail-logging-setting-toggle-switch{box-shadow:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled:not(:checked):hover+.wp-mail-logging-setting-toggle-switch{background-color:#ddd}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled+.wp-mail-logging-setting-toggle-switch{background-color:#ddd;cursor:default}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled:checked+.wp-mail-logging-setting-toggle-switch{background-color:#84d4ba;cursor:default}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked+.wp-mail-logging-setting-toggle-switch+.wp-mail-logging-setting-toggle-checked-label{display:inline-block}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked+.wp-mail-logging-setting-toggle-switch+.wp-mail-logging-setting-toggle-checked-label+.wp-mail-logging-setting-toggle-unchecked-label{display:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled+.wp-mail-logging-setting-toggle-switch+.wp-mail-logging-setting-toggle-checked-label,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:disabled+.wp-mail-logging-setting-toggle-switch+.wp-mail-logging-setting-toggle-unchecked-label{color:#aaa}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked:hover+.wp-mail-logging-setting-toggle-switch,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:checked:focus+.wp-mail-logging-setting-toggle-switch{box-shadow:0 0 0 1px #fff,0 0 0 3px #2e876a}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:not(:checked):hover+.wp-mail-logging-setting-toggle-switch,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field input[type=checkbox]:not(:checked):focus+.wp-mail-logging-setting-toggle-switch{background-color:#8c8f94;box-shadow:0 0 0 1px #fff,0 0 0 3px #999}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-unchecked-label,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-checked-label{text-transform:uppercase;font-weight:600;color:#646970;font-size:12px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-checked-label{display:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-switch{position:relative;cursor:pointer;background-color:#c3c4c7;border-radius:15px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out;vertical-align:middle;display:inline-block;margin:-1px 5px 0 0;width:36px;height:20px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-checkbox-toggle .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-switch:before{position:absolute;content:"";height:16px;width:16px;left:2px;top:2px;background-color:#fff;border-radius:50%;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert{padding-top:20px;padding-bottom:25px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-row{border:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .section-heading{margin-bottom:25px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .section-heading h3{margin-bottom:10px;font-weight:600;font-size:18px;line-height:22px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .section-heading .notice{margin-top:20px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .section-heading .notice p{margin:6.5px 0;font-size:13px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-row{padding:0 !important}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-row+.wp-mail-logging-setting-row{margin-top:20px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-checked-label,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-field .wp-mail-logging-setting-toggle-unchecked-label{text-transform:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row.wp-mail-logging-setting-row-alert .wp-mail-logging-setting-label label{font-weight:600}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h2,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h4{color:#1d2327;font-size:18px;font-weight:600;line-height:22px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h2{margin-top:0;margin-bottom:10px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h3{color:#1d2327;font-size:24px;font-weight:600;margin:0 0 20px 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row h5{color:#1d2327;font-size:16px;font-weight:600;margin:0 0 20px 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row p{margin:12px 0 0;font-size:14px;line-height:20px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row p.desc{margin:10px 0 0;color:#646970}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row p.desc+.desc{font-style:normal}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row ul{margin:8px 0 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row ul.list li{margin-left:20px;list-style-type:disc}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list th{padding:5px 5px 5px 0;text-align:left}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.email{padding-right:2em}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.status{width:100px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a{border-bottom:1px solid;display:inline-block;margin-right:5px;text-decoration:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=delete],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=error]{color:#d63638}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=delete]:hover,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=delete]:active,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=delete]:focus,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=error]:hover,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=error]:active,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row table.actions-list td.actions a[class*=error]:focus{color:#8a1c1d}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select{background-color:#fff;border:1px solid #8b8f93;border-radius:4px;box-shadow:none;color:#2c3338;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px;line-height:1.3}@media(max-width: 959px){#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select{width:300px}}@media(max-width: 599px){#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select{width:100%;max-width:unset;margin-right:0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text]~button,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email]~button,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number]~button,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password]~button,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select~button{margin-top:8px}}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text][readonly],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email][readonly],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number][readonly],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password][readonly],#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select[readonly]{background-color:#f9f9f9}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text].small-text,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email].small-text,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number].small-text,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password].small-text,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select.small-text{width:75px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text]:focus,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email]:focus,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number]:focus,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password]:focus,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select:focus{border:1px solid #016aab;box-shadow:0 0 0 1px #016aab;outline:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=text]:disabled,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=email]:disabled,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number]:disabled,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=password]:disabled,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select:disabled{opacity:.6}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=checkbox]:focus,#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=radio]:focus{border:1px solid #016aab;box-shadow:0 0 0 1px #016aab;outline:none}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row input[type=number]{width:80px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-row select{background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iNyIgdmlld0JveD0iMCAwIDEzIDciIGZpbGw9IiM4ZDhmOTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xMyAwLjk5ODI4MUMxMyAwLjkwMjA2MiAxMi45NTE5IDAuNzkzODE0IDEyLjg3OTcgMC43MjE2NDlMMTIuMjc4NCAwLjEyMDI3NEMxMi4yMDYyIDAuMDQ4MTA5OCAxMi4wOTggMCAxMi4wMDE3IDBDMTEuOTA1NSAwIDExLjc5NzMgMC4wNDgxMDk4IDExLjcyNTEgMC4xMjAyNzRMNi45OTgzIDQuODQ3MDhMMi4yNzE1IDAuMTIwMjc0QzIuMTk5MzMgMC4wNDgxMDk4IDIuMDkxMDggMCAxLjk5NDg2IDBDMS44ODY2MiAwIDEuNzkwNCAwLjA0ODEwOTggMS43MTgyMyAwLjEyMDI3NEwxLjExNjg2IDAuNzIxNjQ5QzEuMDQ0NjkgMC43OTM4MTQgMC45OTY1ODIgMC45MDIwNjIgMC45OTY1ODIgMC45OTgyODFDMC45OTY1ODIgMS4wOTQ1IDEuMDQ0NjkgMS4yMDI3NSAxLjExNjg2IDEuMjc0OTFMNi43MjE2NyA2Ljg3OTcyQzYuNzkzODMgNi45NTE4OSA2LjkwMjA4IDcgNi45OTgzIDdDNy4wOTQ1MiA3IDcuMjAyNzcgNi45NTE4OSA3LjI3NDkzIDYuODc5NzJMMTIuODc5NyAxLjI3NDkxQzEyLjk1MTkgMS4yMDI3NSAxMyAxLjA5NDUgMTMgMC45OTgyODFaIiBmaWxsPSIjOGQ4Zjk1Ii8+Cjwvc3ZnPgo=");background-position:right 12px center}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-label{display:block;float:left;width:205px;padding:0 20px 0 0}@media(max-width: 781px){#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-label{float:none;width:100%;padding-bottom:15px}}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-label label{color:#1e2327;display:block;font-weight:600}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field{display:block;margin:0 0 0 205px;max-width:800px}@media(max-width: 781px){#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field{margin:0}}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field hr{margin:20px 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field .wp-mail-logging-setting-field-row{display:flex;flex-wrap:wrap}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-setting-field .wp-mail-logging-setting-field-row>.wp-mail-smtp-btn{margin-right:10px}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-submit{margin:0;padding:25px 0}#wp-mail-logging .wp-mail-logging-page-content .wp-mail-logging-submit .help-text{margin-left:10px;vertical-align:middle}#wp-mail-logging .wp-mail-logging-page-content .notice-inline{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px}#wp-mail-logging .wp-mail-logging-page-content .notice-inline.notice-success{border-left-color:#38a17e}#wp-mail-logging .wp-mail-logging-page-content .notice-inline.notice-warning{border-left-color:#ffb900}#wp-mail-logging .wp-mail-logging-page-content .notice-inline.notice-error{border-left-color:#d63638}#wp-mail-logging .wp-mail-logging-page-content .notice-inline.notice-info{border-left-color:#00a0d2}#wp-mail-logging .wp-mail-logging-page-content .notice p,#wp-mail-logging .wp-mail-logging-page-content .notice-inline p{margin:.5em 0;padding:2px}#wp-mail-logging .wp-mail-logging-page-content pre{white-space:pre-line}#wp-mail-logging .wp-mail-logging-page-content.active{display:block}#wp-mail-logging .wp-mail-logging-setting-toggle{vertical-align:middle;display:inline-block}#wp-mail-logging .wp-mail-logging-setting-toggle__switch{position:relative;cursor:pointer;background-color:#ccc;border-radius:15px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out;vertical-align:middle;display:inline-block;margin:-1px 0 0 0;width:36px;height:20px}#wp-mail-logging .wp-mail-logging-setting-toggle__switch:before{position:absolute;content:"";height:16px;width:16px;left:2px;top:2px;background-color:#fff;border-radius:50%;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;transition:all .2s ease-in-out}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]{position:absolute;top:auto;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;white-space:nowrap}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:checked+.wp-mail-logging-setting-toggle__switch{background-color:#38a17e}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:checked+.wp-mail-logging-setting-toggle__switch:before{-webkit-transform:translateX(16px);-ms-transform:translateX(16px);transform:translateX(16px)}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:checked:hover+.wp-mail-logging-setting-toggle__switch,#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:checked:focus+.wp-mail-logging-setting-toggle__switch{box-shadow:0 0 0 1px #fff,0 0 0 3px #00a32a}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:not(:checked):hover+.wp-mail-logging-setting-toggle__switch,#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:not(:checked):focus+.wp-mail-logging-setting-toggle__switch{background-color:#999;box-shadow:0 0 0 1px #fff,0 0 0 3px #999}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled:checked:hover+.wp-mail-logging-setting-toggle__switch,#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled:not(:checked):hover+.wp-mail-logging-setting-toggle__switch{box-shadow:none}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled:not(:checked):hover+.wp-mail-logging-setting-toggle__switch{background-color:#ddd}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled+.wp-mail-logging-setting-toggle__switch{background-color:#ddd;cursor:default}#wp-mail-logging .wp-mail-logging-setting-toggle input[type=checkbox]:disabled:checked+.wp-mail-logging-setting-toggle__switch{background-color:#24ff5c;cursor:default}#wp-mail-logging #email-list table.emails{border-radius:4px}#wp-mail-logging #email-list table.emails th,#wp-mail-logging #email-list table.emails td{vertical-align:middle}#wp-mail-logging #email-list table.emails .column-cb,#wp-mail-logging #email-list table.emails .check-column{padding:0;text-align:center;vertical-align:middle}@media(max-width: 600px){#wp-mail-logging #email-list table.emails .column-cb,#wp-mail-logging #email-list table.emails .check-column{padding:10px 0 0 3px}}#wp-mail-logging #email-list table.emails th#timestamp,#wp-mail-logging #email-list table.emails th#actions,#wp-mail-logging #email-list table.emails td.column-timestamp,#wp-mail-logging #email-list table.emails td.column-actions{width:200px;max-width:200px}#wp-mail-logging #email-list table.emails td.column-actions{text-align:right;vertical-align:middle}#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column{align-items:center;display:flex;justify-content:flex-end}#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column .wp-mail-logging-action-item{align-items:center;display:flex;background-color:#fff;border:1px solid #ccd0d4;border-radius:5px;color:#8c8f94;line-height:0;margin:0 4px;padding:5px}#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column .wp-mail-logging-action-item img{width:16px;height:16px}#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column .wp-mail-logging-action-item:hover,#wp-mail-logging #email-list table.emails td.column-actions .wp-mail-logging-action-column .wp-mail-logging-action-item:focus{border-color:#3c434a;color:#3c434a;cursor:pointer}@media(max-width: 600px){#wp-mail-logging #email-list p.search-box{width:inherit}}#wp-mail-logging-page-header-temp{margin:0;position:absolute;top:-1px;left:20px;right:0;z-index:99}#wp-mail-logging-page-header{background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.05);margin-bottom:20px}#wp-mail-logging-page-header .wp-mail-logging-page-title{align-items:center;display:flex;font-size:14px;padding:4px 20px 0}@media(max-width: 600px){#wp-mail-logging-page-header .wp-mail-logging-page-title{display:block;padding-top:20px}}#wp-mail-logging-page-header .wp-mail-logging-page-title .wp-mail-logging-logo-image{align-items:center;justify-content:center}#wp-mail-logging-page-header .wp-mail-logging-page-title .wp-mail-logging-logo-sep{margin:0 15px}@media(max-width: 600px){#wp-mail-logging-page-header .wp-mail-logging-page-title .wp-mail-logging-logo-sep{display:none}}#wp-mail-logging-page-header .wp-mail-logging-page-title a.tab{border-bottom:4px solid #fff;box-shadow:none;color:#787c82;display:inline-block;font-weight:600;margin-right:30px;padding:20px 0 18px 0;text-decoration:none}#wp-mail-logging-page-header .wp-mail-logging-page-title a.tab.active{border-color:#e77c5c;color:#2c3338}#wp-mail-logging-page-header .wp-mail-logging-page-title a.tab.active:hover{border-color:#e77c5c}#wp-mail-logging-page-header .wp-mail-logging-page-title a.tab:hover{border-color:#a7aaad}#wp-mail-logging-page-header .wp-mail-logging-page-title a.action{color:#fff;font-weight:600;margin:14px 0 14px 10px;line-height:28px;min-height:30px;vertical-align:top}@media(max-width: 600px){#wp-mail-logging-page-header .wp-mail-logging-page-title a.action{margin-left:0}}#wp-mail-logging-page-header .wp-mail-logging-page-title .page-title{background-color:#fff;display:inline-block;font-size:23px;margin:0;padding:20px 20px 20px 0}.wp-mail-logging-btn{border:0;border-radius:4px;cursor:pointer;display:inline-block;margin:0;text-decoration:none;text-align:center;vertical-align:middle;white-space:nowrap;text-shadow:none;box-shadow:none;outline:none}.wp-mail-logging-btn:disabled{opacity:.5;cursor:not-allowed}.wp-mail-logging-btn.wp-mail-logging-btn-lg{font-size:16px;font-weight:600;padding:12px 16px}.wp-mail-logging-btn.wp-mail-logging-btn-orange{background-color:#e77c5c;color:#fff}.wp-mail-logging-btn.wp-mail-logging-btn-orange:hover,.wp-mail-logging-btn.wp-mail-logging-btn-orange:active,.wp-mail-logging-btn.wp-mail-logging-btn-orange:focus{background-color:#cb5836;border:0;color:#fff}.wp-mail-logging-btn.wp-mail-logging-btn-orange:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #cb5836}.wp-mail-logging-admin-page .lity{z-index:999999999;padding:20px}.wp-mail-logging-admin-page .lity-close{margin:10px}.wp-mail-logging-admin-page .lity-content{max-width:80vw;max-height:80vh}.wp-mail-logging-admin-page .lity-content img{max-height:80vh !important;max-width:80vw !important}@media(max-width: 782px){.wp-mail-logging-admin-page p.search-box{width:80%}}.wp-mail-logging-admin-page #wpfooter p{color:#50575e;font-weight:400}.wp-mail-logging-admin-page #wpfooter p strong{font-weight:600}.wp-mail-logging-clearfix:after,.wp-mail-logging-clearfix:before{content:" ";display:table}.wp-mail-logging-clearfix:after{clear:both}.wp-mail-logging-product-education{background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.05);border-radius:6px;color:#50575e;font-size:14px;font-weight:400;margin-top:20px;position:relative}.wp-mail-logging-product-education ul{color:#646970}.wp-mail-logging-product-education-dismiss{position:absolute;right:15px;top:15px}.wp-mail-logging-product-education-dismiss button{background:none;border:none;color:#a7aaad;cursor:pointer;margin:0;padding:0}.wp-mail-logging-product-education-dismiss button:focus,.wp-mail-logging-product-education-dismiss button:hover{color:#d63638}.wp-mail-logging-product-education-dismiss button .dashicons,.wp-mail-logging-product-education-dismiss button .dashicons-before::before{width:16px;height:16px;font-size:16px}.wp-mail-logging-product-education-content{padding:20px}.wp-mail-logging-product-education-content strong{font-weight:600}.wp-mail-logging-product-education-content a.wp-mail-logging-education-btn{border-radius:3px;color:#fff;display:inline-block;font-size:14px;padding:7px 10px;text-decoration:none}.wp-mail-logging-product-education-content a.wp-mail-logging-education-btn:hover{color:#fff}.wp-mail-logging-product-education-content p{color:#646970;font-size:14px;margin:10px 0}.wp-mail-logging-product-education-content p a{color:#e77c5c}.wp-mail-logging-product-education-content p a:hover,.wp-mail-logging-product-education-content p a:focus{color:#cb5836}.wp-mail-logging-product-education h3{color:#3c434a;font-size:18px;font-weight:600;margin-bottom:10px;margin-top:0}#wp-mail-logging-product-education-email-logs-top{border-radius:7px;margin-bottom:20px;margin-top:0}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content{padding:15px}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content h2{color:#222}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content p{color:#646970;line-height:18px;margin:5px 0}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content div p:last-child{margin-top:0}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content a.wp-mail-logging-education-btn{border-width:0;font-size:13px;line-height:16px;margin-top:7px}#wp-mail-logging-product-education-email-logs-bottom{background:#fff url("../images/plane-bg.png") no-repeat right bottom;background-size:401px 119px}@media only screen and (-o-min-device-pixel-ratio: 5/4),only screen and (-webkit-min-device-pixel-ratio: 1.25),only screen and (min-device-pixel-ratio: 1.25),only screen and (min-resolution: 1.25dppx){#wp-mail-logging-product-education-email-logs-bottom{background-image:url("../images/plane-bg@2x.png")}}@media(max-width: 782px){#wp-mail-logging-product-education-email-logs-bottom{margin-top:100px;margin-right:20px;position:absolute}}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row{display:flex;flex-wrap:wrap;gap:25px;margin:20px 0}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image{display:flex;flex-direction:column;max-width:370px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a{border:5px solid #dcdcde;border-radius:4px;box-sizing:border-box;margin-bottom:10px;position:relative}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a:hover::after{opacity:1}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a::after{background:rgba(68,68,68,.15) url("../images/zoom.svg") no-repeat center;background-size:50px;content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:all .3s;width:100%}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image img{display:block;height:auto;width:100%}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image span{color:#3c434a;font-size:16px;font-weight:600}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul{font-size:13px;line-height:20px;margin-bottom:0;margin-top:10px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul li{background:rgba(0,0,0,0) url("../images/arrow-right-plain-icon.svg") no-repeat left 3px;background-size:12px;padding-left:18px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul li::before{left:0;position:absolute;top:-1px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn{background:#e77c5c;border-color:#e77c5c;border-radius:4px;border-width:0;font-weight:600;line-height:16px;padding:12px 16px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:hover,#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:focus{background-color:#cb5836;border-color:#cb5836}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #cb5836} \ No newline at end of file diff --git a/assets/css/wp-mail-logging-admin.scss b/assets/css/wp-mail-logging-admin.scss new file mode 100644 index 00000000..63e2e6ed --- /dev/null +++ b/assets/css/wp-mail-logging-admin.scss @@ -0,0 +1,961 @@ +@import "include-media"; +@import "colors"; +@import "variables"; +@import "general"; + +#wp-mail-logging { + color: $description-text; + margin: 0; + + .subsubsub { + + a.current { + font-weight: $medium-weight; + } + } + + #wp-mail-logging-setting-tab-form { + + #wp-mail-logging-setting-tab-row-log-rotation-limit-amout-keep, #wp-mail-logging-setting-tab-row-log-rotation-delete-time-days { + padding-top: 0; + } + + #wp-mail-logging-settings-bottom { + align-items: center; + border-top: 1px solid #e4e4e4; + display: flex; + justify-content: space-between; + margin-top: 15px; + padding-top: 30px; + } + + #wp-mail-logging-settings-reset-link { + background: none; + border: none; + color: #2271B1; + cursor: pointer; + font-size: 14px; + font-weight: 400; + line-height: 35px; + margin: 0; + outline: 0; + text-decoration: underline; + + &:hover { + color: #135e96; + } + } + } + + .wp-mail-logging-hide { + display: none; + } + + .wp-mail-logging-page-content { + padding: 0 20px; + + *, + *::before, + *::after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + #wp-mail-logging-setting-row-heading-general-settings { + padding-top: 10px; + } + + // Setting rows, eg field row. + .wp-mail-logging-setting-row { + border-bottom: 1px solid #e4e4e4; + padding: 15px 0 30px 0; + font-size: 14px; + line-height: 1.3; + + @include media(" .wp-mail-smtp-btn { + margin-right: 10px; + } + } + } + + .wp-mail-logging-submit { + margin: 0; + padding: 25px 0; + + .help-text { + margin-left: 10px; + vertical-align: middle; + } + } + + .notice-inline { + background: #fff; + border-left: 4px solid #fff; + box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); + margin: 5px 0 15px; + padding: 1px 12px; + + &.notice-success { + border-left-color: $positive; + } + + &.notice-warning { + border-left-color: #ffb900; + } + + &.notice-error { + border-left-color: $negative; + } + + &.notice-info { + border-left-color: #00a0d2; + } + } + + .notice p, + .notice-inline p { + margin: 0.5em 0; + padding: 2px; + } + + pre { + white-space: pre-line; + } + + &.active { + display: block; + } + } + + .wp-mail-logging-setting-toggle { + vertical-align: middle; + display: inline-block; + + &__switch { + position: relative; + cursor: pointer; + background-color: #ccc; + border-radius: 15px; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + vertical-align: middle; + display: inline-block; + margin: -1px 0 0 0; + width: 36px; + height: 20px; + + &:before { + position: absolute; + content: ""; + height: 16px; + width: 16px; + left: 2px; + top: 2px; + background-color: #fff; + border-radius: 50%; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + } + } + + input[type=checkbox] { + position: absolute; + top: auto; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); + width: 1px; + height: 1px; + white-space: nowrap; + + &:checked + .wp-mail-logging-setting-toggle__switch { + background-color: $positive; + + &:before { + -webkit-transform: translateX(16px); + -ms-transform: translateX(16px); + transform: translateX(16px); + } + } + + &:checked:hover, + &:checked:focus { + & + .wp-mail-logging-setting-toggle__switch { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #00a32a; + } + } + + &:not(:checked):hover, + &:not(:checked):focus { + & + .wp-mail-logging-setting-toggle__switch { + background-color: #999; + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #999; + } + } + + &:disabled { + &:checked:hover + .wp-mail-logging-setting-toggle__switch, + &:not(:checked):hover + .wp-mail-logging-setting-toggle__switch { + box-shadow: none; + } + + &:not(:checked):hover + .wp-mail-logging-setting-toggle__switch { + background-color: #ddd; + } + + & + .wp-mail-logging-setting-toggle__switch { + background-color: #ddd; + cursor: default; + } + + &:checked + .wp-mail-logging-setting-toggle__switch { + background-color: lighten(#00a32a, 25); + cursor: default; + } + } + } + } + + // Email Logs. + #email-list { + + table.emails { + + border-radius: 4px; + + th, td { + vertical-align: middle; + } + + .column-cb, + .check-column { + padding: 0; + text-align: center; + vertical-align: middle; + + @include media("<=phone") { + padding: 10px 0 0 3px; + } + } + + th#timestamp, th#actions, td.column-timestamp, td.column-actions { + width: 200px; + max-width: 200px; + } + + td.column-actions { + text-align: right; + vertical-align: middle; + + .wp-mail-logging-action-column { + align-items: center; + display: flex; + justify-content: flex-end; + + .wp-mail-logging-action-item { + align-items: center; + display: flex; + background-color: #FFFFFF; + border: 1px solid #CCD0D4; + border-radius: 5px; + color: #8C8F94; + line-height: 0; + margin: 0 4px; + padding: 5px; + + img { + width: 16px; + height: 16px; + } + + &:hover, &:focus { + border-color: #3c434a; + color: #3c434a; + cursor: pointer; + } + } + } + } + } + + p.search-box { + @include media("<=phone") { + width: inherit; + } + } + } +} + +#wp-mail-logging-page-header-temp { + margin: 0; + position: absolute; + top: -1px; + left: 20px; + right: 0; + z-index: 99; +} + +#wp-mail-logging-page-header { + background-color: #FFF; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + margin-bottom: 20px; + + .wp-mail-logging-page-title { + align-items: center; + display: flex; + font-size: 14px; + padding: 4px 20px 0; + + @include media("<=phone") { + display: block; + padding-top: 20px; + } + + .wp-mail-logging-logo-image { + align-items: center; + justify-content: center; + } + + .wp-mail-logging-logo-sep { + margin: 0 15px; + + @include media("<=phone") { + display: none; + } + } + + a.tab { + border-bottom: 4px solid #fff; + box-shadow: none; + color: #787C82; + display: inline-block; + font-weight: $medium-weight; + margin-right: 30px; + padding: 20px 0 18px 0; + text-decoration: none; + + &.active { + border-color: #E77C5C; + color: #2C3338; + + &:hover { + border-color: #E77C5C; + } + } + + &:hover { + border-color: #a7aaad; + } + } + + a.action { + color: #fff; + font-weight: 600; + margin: 14px 0 14px 10px; + line-height: 28px; + min-height: 30px; + vertical-align: top; + + @include media("<=phone") { + margin-left: 0; + } + } + + .page-title { + background-color: #fff; + display: inline-block; + font-size: 23px; + margin: 0; + padding: 20px 20px 20px 0; + } + } +} + +// Buttons. +.wp-mail-logging-btn { + border: 0; + border-radius: 4px; + cursor: pointer; + display: inline-block; + margin: 0; + text-decoration: none; + text-align: center; + vertical-align: middle; + white-space: nowrap; + text-shadow: none; + box-shadow: none; + outline: none; + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + &.wp-mail-logging-btn-lg { + font-size: 16px; + font-weight: $medium-weight; + padding: 12px 16px; + } + + &.wp-mail-logging-btn-orange { + background-color: #E77C5C; + color: #fff; + + &:hover, + &:active, + &:focus { + background-color: $orange-dark; + border: 0; + color: #FFFFFF; + } + + &:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px $orange-dark; + } + } +} + +// Lightbox. +.wp-mail-logging-admin-page { + + /* Lightbox library global styles. */ + .lity { + z-index: 999999999; + padding: 20px; + } + + .lity-close { + margin: 10px; + } + + .lity-content { + max-width: 80vw; + max-height: 80vh; + + img { + max-height: 80vh !important; + max-width: 80vw !important; + } + } +} + +.wp-mail-logging-admin-page { + + p.search-box { + @include media("<=tablet") { + width: 80%; + } + } + + #wpfooter p { + color: #50575E; + font-weight: 400; + + strong { + font-weight: $medium-weight; + } + } +} + +// Utility. +.wp-mail-logging-clearfix { + + &:after, &:before { + content: " "; + display: table; + } + + &:after { + clear: both; + } +} + +@import "wp-mail-logging-product-education"; diff --git a/assets/css/wp-mail-logging-product-education.css b/assets/css/wp-mail-logging-product-education.css new file mode 100644 index 00000000..518792bf --- /dev/null +++ b/assets/css/wp-mail-logging-product-education.css @@ -0,0 +1,189 @@ +.wp-mail-logging-product-education { + background-color: #FFFFFF; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + border-radius: 6px; + color: #50575E; + font-size: 14px; + font-weight: 400; + margin-top: 20px; + position: relative; +} +.wp-mail-logging-product-education ul { + color: #646970; +} +.wp-mail-logging-product-education-dismiss { + position: absolute; + right: 15px; + top: 15px; +} +.wp-mail-logging-product-education-dismiss button { + background: none; + border: none; + color: #a7aaad; + cursor: pointer; + margin: 0; + padding: 0; +} +.wp-mail-logging-product-education-dismiss button:focus, .wp-mail-logging-product-education-dismiss button:hover { + color: #d63638; +} +.wp-mail-logging-product-education-dismiss button .dashicons, .wp-mail-logging-product-education-dismiss button .dashicons-before::before { + width: 16px; + height: 16px; + font-size: 16px; +} +.wp-mail-logging-product-education-content { + padding: 20px; +} +.wp-mail-logging-product-education-content strong { + font-weight: 600; +} +.wp-mail-logging-product-education-content a.wp-mail-logging-education-btn { + border-radius: 3px; + color: #FFFFFF; + display: inline-block; + font-size: 14px; + padding: 7px 10px; + text-decoration: none; +} +.wp-mail-logging-product-education-content a.wp-mail-logging-education-btn:hover { + color: #FFFFFF; +} +.wp-mail-logging-product-education-content p { + color: #646970; + font-size: 14px; + margin: 10px 0; +} +.wp-mail-logging-product-education-content p a { + color: #E77C5C; +} +.wp-mail-logging-product-education-content p a:hover, .wp-mail-logging-product-education-content p a:focus { + color: #cb5836; +} +.wp-mail-logging-product-education h3 { + color: #3C434A; + font-size: 18px; + font-weight: 600; + margin-bottom: 10px; + margin-top: 0; +} + +#wp-mail-logging-product-education-email-logs-top { + border-radius: 7px; + margin-bottom: 20px; + margin-top: 0; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content { + padding: 15px; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content h2 { + color: #222222; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content p { + color: #646970; + line-height: 18px; + margin: 5px 0; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content div p:last-child { + margin-top: 0; +} +#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content a.wp-mail-logging-education-btn { + border-width: 0; + font-size: 13px; + line-height: 16px; + margin-top: 7px; +} + +#wp-mail-logging-product-education-email-logs-bottom { + background: #FFFFFF url("../images/plane-bg.png") no-repeat right bottom; + background-size: 401px 119px; + /* @2x Images (Pixel Ratio of 1.25+) */ +} +@media only screen and (-o-min-device-pixel-ratio: 5/4), only screen and (-webkit-min-device-pixel-ratio: 1.25), only screen and (min-device-pixel-ratio: 1.25), only screen and (min-resolution: 1.25dppx) { + #wp-mail-logging-product-education-email-logs-bottom { + background-image: url("../images/plane-bg@2x.png"); + } +} +@media (max-width: 782px) { + #wp-mail-logging-product-education-email-logs-bottom { + margin-top: 100px; + margin-right: 20px; + position: absolute; + } +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row { + display: flex; + flex-wrap: wrap; + gap: 25px; + margin: 20px 0; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image { + display: flex; + flex-direction: column; + max-width: 370px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a { + border: 5px solid #DCDCDE; + border-radius: 4px; + box-sizing: border-box; + margin-bottom: 10px; + position: relative; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a:hover::after { + opacity: 1; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a::after { + background: rgba(68, 68, 68, 0.15) url("../images/zoom.svg") no-repeat center; + background-size: 50px; + content: ""; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + transition: all 0.3s; + width: 100%; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image img { + display: block; + height: auto; + width: 100%; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image span { + color: #3C434A; + font-size: 16px; + font-weight: 600; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul { + font-size: 13px; + line-height: 20px; + margin-bottom: 0; + margin-top: 10px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul li { + background: transparent url("../images/arrow-right-plain-icon.svg") no-repeat left 3px; + background-size: 12px; + padding-left: 18px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul li::before { + left: 0; + position: absolute; + top: -1px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn { + background: #E77C5C; + border-color: #E77C5C; + border-radius: 4px; + border-width: 0; + font-weight: 600; + line-height: 16px; + padding: 12px 16px; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:hover, #wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:focus { + background-color: #cb5836; + border-color: #cb5836; +} +#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #cb5836; +} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbi5zY3NzIiwiX3ZhcmlhYmxlcy5zY3NzIiwiX2luY2x1ZGUtbWVkaWEuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJOztBQUdKO0VBQ0k7RUFDQTtFQUNBOztBQUtaO0VBQ0k7O0FBRUE7RUFDSSxhQ3ZDSTs7QUQyQ0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTs7QUFLWjtFQUNJO0VBQ0E7RUFDQTs7QUFFQTtFQUNJOztBQUVBO0VBQ0k7O0FBTWhCO0VBQ0k7RUFDQTtFQUNBLGFDM0VRO0VENEVSO0VBQ0E7OztBQUlSO0VBQ0k7RUFDQTtFQUNBOztBQUVBO0VBQ0k7O0FBRUE7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFLQTtFQUNJOztBQUlSO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7OztBQUtaO0VBQ0k7RUFDQTtBQUVBOztBQUNBO0VBTEo7SUFVUTs7O0FFMGFQO0VGcGJEO0lBY1E7SUFDQTtJQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0k7RUFDQTtFQUNBOztBQUVBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJOztBQUdKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSVI7RUFDSTtFQUNBO0VBQ0E7O0FBR0o7RUFDSTtFQUNBO0VBQ0EsYUNuTEE7O0FEc0xKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTtFQUNBO0VBQ0E7O0FBT3BCO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQSxhQ2hOUTtFRGlOUjtFQUNBOztBQUVBO0VBQ0k7RUFDQTs7QUFHSjtFQUNJIiwiZmlsZSI6ImFzc2V0cy9jc3Mvd3AtbWFpbC1sb2dnaW5nLXByb2R1Y3QtZWR1Y2F0aW9uLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJpbmNsdWRlLW1lZGlhXCI7XG5AaW1wb3J0IFwidmFyaWFibGVzXCI7XG5cbi8vIFByb2R1Y3QgRWR1Y2F0aW9uLlxuLndwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcbiAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgY29sb3I6ICM1MDU3NUU7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICB1bCB7XG4gICAgICAgIGNvbG9yOiAjNjQ2OTcwO1xuICAgIH1cblxuICAgICYtZGlzbWlzcyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICAgIHRvcDogMTVweDtcblxuICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGNvbG9yOiAjYTdhYWFkO1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICAgICAgJjpmb2N1cywgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNkNjM2Mzg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5kYXNoaWNvbnMsIC5kYXNoaWNvbnMtYmVmb3JlOjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLWNvbnRlbnQge1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuXG4gICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogJG1lZGl1bS13ZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBhIHtcbiAgICAgICAgICAgICYud3AtbWFpbC1sb2dnaW5nLWVkdWNhdGlvbi1idG4ge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDdweCAxMHB4O1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0ZGRkZGRjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICAgIGNvbG9yOiAjNjQ2OTcwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7XG5cbiAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjRTc3QzVDO1xuXG4gICAgICAgICAgICAgICAgJjpob3ZlciwgJjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjY2I1ODM2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGgzIHtcbiAgICAgICAgY29sb3I6ICMzQzQzNEE7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbn1cblxuI3dwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbi1lbWFpbC1sb2dzLXRvcCB7XG4gICAgYm9yZGVyLXJhZGl1czogN3B4O1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgbWFyZ2luLXRvcDogMDtcblxuICAgIC53cC1tYWlsLWxvZ2dpbmctcHJvZHVjdC1lZHVjYXRpb24tY29udGVudCB7XG4gICAgICAgIHBhZGRpbmc6IDE1cHg7XG5cbiAgICAgICAgaDIge1xuICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICAgIGNvbG9yOiAjNjQ2OTcwO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgICBtYXJnaW46IDVweCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZGl2IHtcblxuICAgICAgICAgICAgcDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYS53cC1tYWlsLWxvZ2dpbmctZWR1Y2F0aW9uLWJ0biB7XG4gICAgICAgICAgICBib3JkZXItd2lkdGg6IDA7XG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDdweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuI3dwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbi1lbWFpbC1sb2dzLWJvdHRvbSB7XG4gICAgYmFja2dyb3VuZDogI0ZGRkZGRiB1cmwoXCIuLi9pbWFnZXMvcGxhbmUtYmcucG5nXCIpIG5vLXJlcGVhdCByaWdodCBib3R0b207XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MDFweCAxMTlweDtcblxuICAgIC8qIEAyeCBJbWFnZXMgKFBpeGVsIFJhdGlvIG9mIDEuMjUrKSAqL1xuICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDUvNCksXG4gICAgICAgICAgIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjI1KSxcbiAgICAgICAgICAgb25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjI1KSxcbiAgICAgICAgICAgb25seSBzY3JlZW4gYW5kIChtaW4tcmVzb2x1dGlvbjogMS4yNWRwcHgpIHtcblxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWFnZXMvcGxhbmUtYmdAMngucG5nXCIpO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIG1lZGlhKFwiPD10YWJsZXRcIikge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMDBweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgLndwLW1haWwtbG9nZ2luZy1wcm9kdWN0LWVkdWNhdGlvbi1pbWFnZXMtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDI1cHg7XG4gICAgICAgIG1hcmdpbjogMjBweCAwO1xuXG4gICAgICAgICYtaW1hZ2Uge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDM3MHB4O1xuXG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDVweCBzb2xpZCAjRENEQ0RFO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2OCwgNjgsIDY4LCAuMTUpIHVybCgnLi4vaW1hZ2VzL3pvb20uc3ZnJykgbm8tcmVwZWF0IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiA1MHB4O1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgLjNzO1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzNDNDM0QTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcblxuICAgICAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKCcuLi9pbWFnZXMvYXJyb3ctcmlnaHQtcGxhaW4taWNvbi5zdmcnKSBuby1yZXBlYXQgbGVmdCAzcHg7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxOHB4O1xuXG4gICAgICAgICAgICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAtMXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLndwLW1haWwtbG9nZ2luZy1lZHVjYXRpb24tYnRuIHtcbiAgICAgICAgYmFja2dyb3VuZDogI0U3N0M1QztcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjRTc3QzVDO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGJvcmRlci13aWR0aDogMDtcbiAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuXG4gICAgICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NiNTgzNjtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2NiNTgzNjtcbiAgICAgICAgfVxuXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNmZmYsIDAgMCAwIDNweCAjY2I1ODM2O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiJGJyZWFrcG9pbnRzOiAoXG4gICAgJ3hzLXBob25lJzogMzIwcHgsXG4gICAgJ3Bob25lJzogNjAwcHgsXG4gICAgJ2lwYWQnOiA3NjhweCxcbiAgICAndGFibGV0JzogNzgycHgsXG4gICAgJ2Rlc2t0b3AnOiA5NjBweFxuKTtcblxuJG1lZGl1bS13ZWlnaHQ6IDYwMDtcbiIsIkBjaGFyc2V0IFwiVVRGLThcIjtcblxuLy8gICAgIF8gICAgICAgICAgICBfICAgICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgXyBfXG4vLyAgICAoXykgICAgICAgICAgfCB8ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF8pXG4vLyAgICAgXyBfIF9fICAgX19ffCB8XyAgIF8gIF9ffCB8IF9fXyAgIF8gX18gX19fICAgX19fICBfX3wgfF8gIF9fIF9cbi8vICAgIHwgfCAnXyBcXCAvIF9ffCB8IHwgfCB8LyBfYCB8LyBfIFxcIHwgJ18gYCBfIFxcIC8gXyBcXC8gX2AgfCB8LyBfYCB8XG4vLyAgICB8IHwgfCB8IHwgKF9ffCB8IHxffCB8IChffCB8ICBfXy8gfCB8IHwgfCB8IHwgIF9fLyAoX3wgfCB8IChffCB8XG4vLyAgICB8X3xffCB8X3xcXF9fX3xffFxcX18sX3xcXF9fLF98XFxfX198IHxffCB8X3wgfF98XFxfX198XFxfXyxffF98XFxfXyxffFxuLy9cbi8vICAgICAgU2ltcGxlLCBlbGVnYW50IGFuZCBtYWludGFpbmFibGUgbWVkaWEgcXVlcmllcyBpbiBTYXNzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgIHYxLjQuOVxuLy9cbi8vICAgICAgICAgICAgICAgIGh0dHA6Ly9pbmNsdWRlLW1lZGlhLmNvbVxuLy9cbi8vICAgICAgICAgQXV0aG9yczogRWR1YXJkbyBCb3VjYXMgKEBlZHVhcmRvYm91Y2FzKVxuLy8gICAgICAgICAgICAgICAgICBIdWdvIEdpcmF1ZGVsIChAaHVnb2dpcmF1ZGVsKVxuLy9cbi8vICAgICAgVGhpcyBwcm9qZWN0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2VcblxuXG4vLy8vXG4vLy8gaW5jbHVkZS1tZWRpYSBsaWJyYXJ5IHB1YmxpYyBjb25maWd1cmF0aW9uXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gQ3JlYXRlcyBhIGxpc3Qgb2YgZ2xvYmFsIGJyZWFrcG9pbnRzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHNpbmdsZSBicmVha3BvaW50IHdpdGggdGhlIGxhYmVsIGBwaG9uZWBcbi8vLyAgJGJyZWFrcG9pbnRzOiAoJ3Bob25lJzogMzIwcHgpO1xuLy8vXG4kYnJlYWtwb2ludHM6IChcbiAgJ3Bob25lJzogMzIwcHgsXG4gICd0YWJsZXQnOiA3NjhweCxcbiAgJ2Rlc2t0b3AnOiAxMDI0cHhcbikgIWRlZmF1bHQ7XG5cblxuLy8vXG4vLy8gQ3JlYXRlcyBhIGxpc3Qgb2Ygc3RhdGljIGV4cHJlc3Npb25zIG9yIG1lZGlhIHR5cGVzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHNpbmdsZSBtZWRpYSB0eXBlIChzY3JlZW4pXG4vLy8gICRtZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nOiAnc2NyZWVuJyk7XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHN0YXRpYyBleHByZXNzaW9uIHdpdGggbG9naWNhbCBkaXNqdW5jdGlvbiAoT1Igb3BlcmF0b3IpXG4vLy8gICRtZWRpYS1leHByZXNzaW9uczogKFxuLy8vICAgICdyZXRpbmEyeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpJ1xuLy8vICApO1xuLy8vXG4kbWVkaWEtZXhwcmVzc2lvbnM6IChcbiAgJ3NjcmVlbic6ICdzY3JlZW4nLFxuICAncHJpbnQnOiAncHJpbnQnLFxuICAnaGFuZGhlbGQnOiAnaGFuZGhlbGQnLFxuICAnbGFuZHNjYXBlJzogJyhvcmllbnRhdGlvbjogbGFuZHNjYXBlKScsXG4gICdwb3J0cmFpdCc6ICcob3JpZW50YXRpb246IHBvcnRyYWl0KScsXG4gICdyZXRpbmEyeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLCAobWluLXJlc29sdXRpb246IDJkcHB4KScsXG4gICdyZXRpbmEzeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAzKSwgKG1pbi1yZXNvbHV0aW9uOiAzNTBkcGkpLCAobWluLXJlc29sdXRpb246IDNkcHB4KSdcbikgIWRlZmF1bHQ7XG5cblxuLy8vXG4vLy8gRGVmaW5lcyBhIG51bWJlciB0byBiZSBhZGRlZCBvciBzdWJ0cmFjdGVkIGZyb20gZWFjaCB1bml0IHdoZW4gZGVjbGFyaW5nIGJyZWFrcG9pbnRzIHdpdGggZXhjbHVzaXZlIGludGVydmFsc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEludGVydmFsIGZvciBwaXhlbHMgaXMgZGVmaW5lZCBhcyBgMWAgYnkgZGVmYXVsdFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPjEyOHB4Jykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAxMjlweCkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgZW1zIGlzIGRlZmluZWQgYXMgYDAuMDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4yMGVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyMC4wMWVtKSB7fVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEludGVydmFsIGZvciByZW1zIGlzIGRlZmluZWQgYXMgYDAuMWAgYnkgZGVmYXVsdCwgdG8gYmUgdXNlZCB3aXRoIGBmb250LXNpemU6IDYyLjUlO2Bcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4yLjByZW0nKSB7fVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgQG1lZGlhIChtaW4td2lkdGg6IDIuMXJlbSkge31cbi8vL1xuJHVuaXQtaW50ZXJ2YWxzOiAoXG4gICdweCc6IDEsXG4gICdlbSc6IDAuMDEsXG4gICdyZW0nOiAwLjEsXG4gICcnOiAwXG4pICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBEZWZpbmVzIHdoZXRoZXIgc3VwcG9ydCBmb3IgbWVkaWEgcXVlcmllcyBpcyBhdmFpbGFibGUsIHVzZWZ1bCBmb3IgY3JlYXRpbmcgc2VwYXJhdGUgc3R5bGVzaGVldHNcbi8vLyBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IG1lZGlhIHF1ZXJpZXMuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRGlzYWJsZXMgc3VwcG9ydCBmb3IgbWVkaWEgcXVlcmllc1xuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICAuZm9vIHtcbi8vLyAgICBjb2xvcjogdG9tYXRvO1xuLy8vICB9XG4vLy9cbiRpbS1tZWRpYS1zdXBwb3J0OiB0cnVlICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBTZWxlY3RzIHdoaWNoIGJyZWFrcG9pbnQgdG8gZW11bGF0ZSB3aGVuIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgZGlzYWJsZWQuIE1lZGlhIHF1ZXJpZXMgdGhhdCBzdGFydCBhdCBvclxuLy8vIGludGVyY2VwdCB0aGUgYnJlYWtwb2ludCB3aWxsIGJlIGRpc3BsYXllZCwgYW55IG90aGVycyB3aWxsIGJlIGlnbm9yZWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludFxuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gICRpbS1uby1tZWRpYS1icmVha3BvaW50OiAnZGVza3RvcCc7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICAuZm9vIHtcbi8vLyAgICBjb2xvcjogdG9tYXRvO1xuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIE5PVCBzaG93IGJlY2F1c2UgaXQgZG9lcyBub3QgaW50ZXJjZXB0IHRoZSBkZXNrdG9wIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ3RhYmxldCc7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PWRlc2t0b3AnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBTZWxlY3RzIHdoaWNoIG1lZGlhIGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkIGluIGFuIGV4cHJlc3Npb24gZm9yIGl0IHRvIGJlIHVzZWQgd2hlbiBtZWRpYSBxdWVyaWVzXG4vLy8gYXJlIG5vdCBzdXBwb3J0ZWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBhbmQgY29udGFpbnMgb25seSBhY2NlcHRlZCBtZWRpYSBleHByZXNzaW9uc1xuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gICRpbS1uby1tZWRpYS1icmVha3BvaW50OiAnZGVza3RvcCc7XG4vLy8gICRpbS1uby1tZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nKTtcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49dGFibGV0JywgJ3NjcmVlbicpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgIC5mb28ge1xuLy8vICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGludGVyY2VwdHMgdGhlIHN0YXRpYyBicmVha3BvaW50IGJ1dCBjb250YWlucyBhIG1lZGlhIGV4cHJlc3Npb24gdGhhdCBpcyBub3QgYWNjZXB0ZWRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdyZXRpbmEyeCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogTm8gb3V0cHV0ICovXG4vLy9cbiRpbS1uby1tZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nLCAncG9ydHJhaXQnLCAnbGFuZHNjYXBlJykgIWRlZmF1bHQ7XG5cbi8vLy9cbi8vLyBDcm9zcy1lbmdpbmUgbG9nZ2luZyBlbmdpbmVcbi8vLyBAYXV0aG9yIEh1Z28gR2lyYXVkZWxcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLy9cblxuXG4vLy9cbi8vLyBMb2cgYSBtZXNzYWdlIGVpdGhlciB3aXRoIGBAZXJyb3JgIGlmIHN1cHBvcnRlZFxuLy8vIGVsc2Ugd2l0aCBgQHdhcm5gLCB1c2luZyBgZmVhdHVyZS1leGlzdHMoJ2F0LWVycm9yJylgXG4vLy8gdG8gZGV0ZWN0IHN1cHBvcnQuXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxvZ1xuLy8vXG5AZnVuY3Rpb24gaW0tbG9nKCRtZXNzYWdlKSB7XG4gIEBpZiBmZWF0dXJlLWV4aXN0cygnYXQtZXJyb3InKSB7XG5cdEBlcnJvciAkbWVzc2FnZTtcbiAgfSBAZWxzZSB7XG5cdEB3YXJuICRtZXNzYWdlO1xuXHQkXzogbm9vcCgpO1xuICB9XG5cbiAgQHJldHVybiAkbWVzc2FnZTtcbn1cblxuXG4vLy9cbi8vLyBXcmFwcGVyIG1peGluIGZvciB0aGUgbG9nIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGggYSBtb3JlIGZyaWVuZGx5XG4vLy8gQVBJIHRoYW4gYEBpZiBpbS1sb2coJy4uJykge31gIG9yIGAkXzogaW0tbG9nKCcuLicpYC4gQmFzaWNhbGx5LCB1c2UgdGhlIGZ1bmN0aW9uXG4vLy8gd2l0aGluIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNsdWRlIGEgbWl4aW4gaW4gYSBmdW5jdGlvblxuLy8vIGFuZCB1c2UgdGhlIG1peGluIGV2ZXJ5d2hlcmUgZWxzZSBiZWNhdXNlIGl0J3MgbXVjaCBtb3JlIGVsZWdhbnQuXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxvZ1xuLy8vXG5AbWl4aW4gbG9nKCRtZXNzYWdlKSB7XG4gIEBpZiBpbS1sb2coJG1lc3NhZ2UpIHt9XG59XG5cblxuLy8vXG4vLy8gRnVuY3Rpb24gd2l0aCBubyBgQHJldHVybmAgY2FsbGVkIG5leHQgdG8gYEB3YXJuYCBpbiBTYXNzIDMuM1xuLy8vIHRvIHRyaWdnZXIgYSBjb21waWxpbmcgZXJyb3IgYW5kIHN0b3AgdGhlIHByb2Nlc3MuXG4vLy9cbkBmdW5jdGlvbiBub29wKCkge31cblxuLy8vXG4vLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbGlzdCBvZiBjb25kaXRpb25zIGlzIGludGVyY2VwdGVkIGJ5IHRoZSBzdGF0aWMgYnJlYWtwb2ludC5cbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAcmV0dXJuIHtCb29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uZGl0aW9ucyBhcmUgaW50ZXJjZXB0ZWQgYnkgdGhlIHN0YXRpYyBicmVha3BvaW50XG4vLy9cbkBmdW5jdGlvbiBpbS1pbnRlcmNlcHRzLXN0YXRpYy1icmVha3BvaW50KCRjb25kaXRpb25zLi4uKSB7XG4gICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQpO1xuXG4gIEBpZiBub3QgJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUge1xuXHRAaWYgaW0tbG9nKCdgI3skaW0tbm8tbWVkaWEtYnJlYWtwb2ludH1gIGlzIG5vdCBhIHZhbGlkIGJyZWFrcG9pbnQuJykge31cbiAgfVxuXG4gIEBlYWNoICRjb25kaXRpb24gaW4gJGNvbmRpdGlvbnMge1xuXHRAaWYgbm90IG1hcC1oYXMta2V5KCRtZWRpYS1leHByZXNzaW9ucywgJGNvbmRpdGlvbikge1xuXHQgICRvcGVyYXRvcjogZ2V0LWV4cHJlc3Npb24tb3BlcmF0b3IoJGNvbmRpdGlvbik7XG5cdCAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG5cdCAgJHZhbHVlOiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkY29uZGl0aW9uLCAkb3BlcmF0b3IpO1xuXG5cdCAgQGlmICgkcHJlZml4ID09ICdtYXgnIGFuZCAkdmFsdWUgPD0gJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUpIG9yXG5cdFx0ICAoJHByZWZpeCA9PSAnbWluJyBhbmQgJHZhbHVlID4gJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUpIHtcblx0XHRAcmV0dXJuIGZhbHNlO1xuXHQgIH1cblx0fSBAZWxzZSBpZiBub3QgaW5kZXgoJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zLCAkY29uZGl0aW9uKSB7XG5cdCAgQHJldHVybiBmYWxzZTtcblx0fVxuICB9XG5cbiAgQHJldHVybiB0cnVlO1xufVxuXG4vLy8vXG4vLy8gUGFyc2luZyBlbmdpbmVcbi8vLyBAYXV0aG9yIEh1Z28gR2lyYXVkZWxcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLy9cblxuXG4vLy9cbi8vLyBHZXQgb3BlcmF0b3Igb2YgYW4gZXhwcmVzc2lvblxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IG9wZXJhdG9yIGZyb21cbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBBbnkgb2YgYD49YCwgYD5gLCBgPD1gLCBgPGAsIGDiiaVgLCBg4omkYFxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tb3BlcmF0b3IoJGV4cHJlc3Npb24pIHtcbiAgQGVhY2ggJG9wZXJhdG9yIGluICgnPj0nLCAnPicsICc8PScsICc8JywgJ+KJpScsICfiiaQnKSB7XG5cdEBpZiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuXHQgIEByZXR1cm4gJG9wZXJhdG9yO1xuXHR9XG4gIH1cblxuICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluc2lkZSBhIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvXG4gIC8vIHJlbHkgb24gdGhlIGBpbS1sb2coLi4pYCBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgYGxvZyguLilgIG1peGluLiBCZWNhdXNlXG4gIC8vIGZ1bmN0aW9ucyBjYW5ub3QgYmUgY2FsbGVkIGFueXdoZXJlIGluIFNhc3MsIHdlIG5lZWQgdG8gaGFjayB0aGUgY2FsbCBpblxuICAvLyBhIGR1bW15IHZhcmlhYmxlLCBzdWNoIGFzIGAkX2AuIElmIGFueWJvZHkgZXZlciByYWlzZSBhIHNjb3BpbmcgaXNzdWUgd2l0aFxuICAvLyBTYXNzIDMuMywgY2hhbmdlIHRoaXMgbGluZSBpbiBgQGlmIGltLWxvZyguLikge31gIGluc3RlYWQuXG4gICRfOiBpbS1sb2coJ05vIG9wZXJhdG9yIGZvdW5kIGluIGAjeyRleHByZXNzaW9ufWAuJyk7XG59XG5cblxuLy8vXG4vLy8gR2V0IGRpbWVuc2lvbiBvZiBhbiBleHByZXNzaW9uLCBiYXNlZCBvbiBhIGZvdW5kIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIGV4dHJhY3QgZGltZW5zaW9uIGZyb21cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3IgZnJvbSBgJGV4cHJlc3Npb25gXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gYHdpZHRoYCBvciBgaGVpZ2h0YCAob3IgcG90ZW50aWFsbHkgYW55dGhpbmcgZWxzZSlcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKSB7XG4gICRvcGVyYXRvci1pbmRleDogc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkcGFyc2VkLWRpbWVuc2lvbjogc3RyLXNsaWNlKCRleHByZXNzaW9uLCAwLCAkb3BlcmF0b3ItaW5kZXggLSAxKTtcbiAgJGRpbWVuc2lvbjogJ3dpZHRoJztcblxuICBAaWYgc3RyLWxlbmd0aCgkcGFyc2VkLWRpbWVuc2lvbikgPiAwIHtcblx0JGRpbWVuc2lvbjogJHBhcnNlZC1kaW1lbnNpb247XG4gIH1cblxuICBAcmV0dXJuICRkaW1lbnNpb247XG59XG5cblxuLy8vXG4vLy8gR2V0IGRpbWVuc2lvbiBwcmVmaXggYmFzZWQgb24gYW4gb3BlcmF0b3Jcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvclxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGBtaW5gIG9yIGBtYXhgXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1wcmVmaXgoJG9wZXJhdG9yKSB7XG4gIEByZXR1cm4gaWYoaW5kZXgoKCc8JywgJzw9JywgJ+KJpCcpLCAkb3BlcmF0b3IpLCAnbWF4JywgJ21pbicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCB2YWx1ZSBvZiBhbiBleHByZXNzaW9uLCBiYXNlZCBvbiBhIGZvdW5kIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIGV4dHJhY3QgdmFsdWUgZnJvbVxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvciBmcm9tIGAkZXhwcmVzc2lvbmBcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn0gLSBBIG51bWVyaWMgdmFsdWVcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLXZhbHVlKCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcbiAgJG9wZXJhdG9yLWluZGV4OiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG4gICR2YWx1ZTogc3RyLXNsaWNlKCRleHByZXNzaW9uLCAkb3BlcmF0b3ItaW5kZXggKyBzdHItbGVuZ3RoKCRvcGVyYXRvcikpO1xuXG4gIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICR2YWx1ZSkge1xuXHQkdmFsdWU6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkdmFsdWUpO1xuICB9IEBlbHNlIHtcblx0JHZhbHVlOiB0by1udW1iZXIoJHZhbHVlKTtcbiAgfVxuXG4gICRpbnRlcnZhbDogbWFwLWdldCgkdW5pdC1pbnRlcnZhbHMsIHVuaXQoJHZhbHVlKSk7XG5cbiAgQGlmIG5vdCAkaW50ZXJ2YWwge1xuXHQvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluc2lkZSBhIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvXG5cdC8vIHJlbHkgb24gdGhlIGBpbS1sb2coLi4pYCBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgYGxvZyguLilgIG1peGluLiBCZWNhdXNlXG5cdC8vIGZ1bmN0aW9ucyBjYW5ub3QgYmUgY2FsbGVkIGFueXdoZXJlIGluIFNhc3MsIHdlIG5lZWQgdG8gaGFjayB0aGUgY2FsbCBpblxuXHQvLyBhIGR1bW15IHZhcmlhYmxlLCBzdWNoIGFzIGAkX2AuIElmIGFueWJvZHkgZXZlciByYWlzZSBhIHNjb3BpbmcgaXNzdWUgd2l0aFxuXHQvLyBTYXNzIDMuMywgY2hhbmdlIHRoaXMgbGluZSBpbiBgQGlmIGltLWxvZyguLikge31gIGluc3RlYWQuXG5cdCRfOiBpbS1sb2coJ1Vua25vd24gdW5pdCBgI3t1bml0KCR2YWx1ZSl9YC4nKTtcbiAgfVxuXG4gIEBpZiAkb3BlcmF0b3IgPT0gJz4nIHtcblx0JHZhbHVlOiAkdmFsdWUgKyAkaW50ZXJ2YWw7XG4gIH0gQGVsc2UgaWYgJG9wZXJhdG9yID09ICc8JyB7XG5cdCR2YWx1ZTogJHZhbHVlIC0gJGludGVydmFsO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cblxuLy8vXG4vLy8gUGFyc2UgYW4gZXhwcmVzc2lvbiB0byByZXR1cm4gYSB2YWxpZCBtZWRpYS1xdWVyeSBleHByZXNzaW9uXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIHBhcnNlXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gVmFsaWQgbWVkaWEgcXVlcnlcbi8vL1xuQGZ1bmN0aW9uIHBhcnNlLWV4cHJlc3Npb24oJGV4cHJlc3Npb24pIHtcbiAgLy8gSWYgaXQgaXMgcGFydCBvZiAkbWVkaWEtZXhwcmVzc2lvbnMsIGl0IGhhcyBubyBvcGVyYXRvclxuICAvLyB0aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ28gYW55IGZ1cnRoZXIsIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICBAaWYgbWFwLWhhcy1rZXkoJG1lZGlhLWV4cHJlc3Npb25zLCAkZXhwcmVzc2lvbikge1xuXHRAcmV0dXJuIG1hcC1nZXQoJG1lZGlhLWV4cHJlc3Npb25zLCAkZXhwcmVzc2lvbik7XG4gIH1cblxuICAkb3BlcmF0b3I6IGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKTtcbiAgJGRpbWVuc2lvbjogZ2V0LWV4cHJlc3Npb24tZGltZW5zaW9uKCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkcHJlZml4OiBnZXQtZXhwcmVzc2lvbi1wcmVmaXgoJG9wZXJhdG9yKTtcbiAgJHZhbHVlOiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcblxuICBAcmV0dXJuICcoI3skcHJlZml4fS0jeyRkaW1lbnNpb259OiAjeyR2YWx1ZX0pJztcbn1cblxuLy8vXG4vLy8gU2xpY2UgYCRsaXN0YCBiZXR3ZWVuIGAkc3RhcnRgIGFuZCBgJGVuZGAgaW5kZXhlc1xuLy8vXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge0xpc3R9ICRsaXN0IC0gTGlzdCB0byBzbGljZVxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkc3RhcnQgWzFdIC0gU3RhcnQgaW5kZXhcbi8vLyBAcGFyYW0ge051bWJlcn0gJGVuZCBbbGVuZ3RoKCRsaXN0KV0gLSBFbmQgaW5kZXhcbi8vL1xuLy8vIEByZXR1cm4ge0xpc3R9IFNsaWNlZCBsaXN0XG4vLy9cbkBmdW5jdGlvbiBzbGljZSgkbGlzdCwgJHN0YXJ0OiAxLCAkZW5kOiBsZW5ndGgoJGxpc3QpKSB7XG4gIEBpZiBsZW5ndGgoJGxpc3QpIDwgMSBvciAkc3RhcnQgPiAkZW5kIHtcblx0QHJldHVybiAoKTtcbiAgfVxuXG4gICRyZXN1bHQ6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAkc3RhcnQgdGhyb3VnaCAkZW5kIHtcblx0JHJlc3VsdDogYXBwZW5kKCRyZXN1bHQsIG50aCgkbGlzdCwgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8vL1xuLy8vIFN0cmluZyB0byBudW1iZXIgY29udmVydGVyXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gQ2FzdHMgYSBzdHJpbmcgaW50byBhIG51bWJlclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGJlIHBhcnNlZFxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfVxuLy8vXG5AZnVuY3Rpb24gdG8tbnVtYmVyKCR2YWx1ZSkge1xuICBAaWYgdHlwZS1vZigkdmFsdWUpID09ICdudW1iZXInIHtcblx0QHJldHVybiAkdmFsdWU7XG4gIH0gQGVsc2UgaWYgdHlwZS1vZigkdmFsdWUpICE9ICdzdHJpbmcnIHtcblx0JF86IGltLWxvZygnVmFsdWUgZm9yIGB0by1udW1iZXJgIHNob3VsZCBiZSBhIG51bWJlciBvciBhIHN0cmluZy4nKTtcbiAgfVxuXG4gICRmaXJzdC1jaGFyYWN0ZXI6IHN0ci1zbGljZSgkdmFsdWUsIDEsIDEpO1xuICAkcmVzdWx0OiAwO1xuICAkZGlnaXRzOiAwO1xuICAkbWludXM6ICgkZmlyc3QtY2hhcmFjdGVyID09ICctJyk7XG4gICRudW1iZXJzOiAoJzAnOiAwLCAnMSc6IDEsICcyJzogMiwgJzMnOiAzLCAnNCc6IDQsICc1JzogNSwgJzYnOiA2LCAnNyc6IDcsICc4JzogOCwgJzknOiA5KTtcblxuICAvLyBSZW1vdmUgKy8tIHNpZ24gaWYgcHJlc2VudCBhdCBmaXJzdCBjaGFyYWN0ZXJcbiAgQGlmICgkZmlyc3QtY2hhcmFjdGVyID09ICcrJyBvciAkZmlyc3QtY2hhcmFjdGVyID09ICctJykge1xuXHQkdmFsdWU6IHN0ci1zbGljZSgkdmFsdWUsIDIpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBzdHItbGVuZ3RoKCR2YWx1ZSkge1xuXHQkY2hhcmFjdGVyOiBzdHItc2xpY2UoJHZhbHVlLCAkaSwgJGkpO1xuXG5cdEBpZiBub3QgKGluZGV4KG1hcC1rZXlzKCRudW1iZXJzKSwgJGNoYXJhY3Rlcikgb3IgJGNoYXJhY3RlciA9PSAnLicpIHtcblx0ICBAcmV0dXJuIHRvLWxlbmd0aChpZigkbWludXMsIC0kcmVzdWx0LCAkcmVzdWx0KSwgc3RyLXNsaWNlKCR2YWx1ZSwgJGkpKVxuXHR9XG5cblx0QGlmICRjaGFyYWN0ZXIgPT0gJy4nIHtcblx0ICAkZGlnaXRzOiAxO1xuXHR9IEBlbHNlIGlmICRkaWdpdHMgPT0gMCB7XG5cdCAgJHJlc3VsdDogJHJlc3VsdCAqIDEwICsgbWFwLWdldCgkbnVtYmVycywgJGNoYXJhY3Rlcik7XG5cdH0gQGVsc2Uge1xuXHQgICRkaWdpdHM6ICRkaWdpdHMgKiAxMDtcblx0ICAkcmVzdWx0OiAkcmVzdWx0ICsgbWFwLWdldCgkbnVtYmVycywgJGNoYXJhY3RlcikgLyAkZGlnaXRzO1xuXHR9XG4gIH1cblxuICBAcmV0dXJuIGlmKCRtaW51cywgLSRyZXN1bHQsICRyZXN1bHQpO1xufVxuXG5cbi8vL1xuLy8vIEFkZCBgJHVuaXRgIHRvIGAkdmFsdWVgXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHZhbHVlIC0gVmFsdWUgdG8gYWRkIHVuaXQgdG9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHVuaXQgLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXRcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn0gLSBgJHZhbHVlYCBleHByZXNzZWQgaW4gYCR1bml0YFxuLy8vXG5AZnVuY3Rpb24gdG8tbGVuZ3RoKCR2YWx1ZSwgJHVuaXQpIHtcbiAgJHVuaXRzOiAoJ3B4JzogMXB4LCAnY20nOiAxY20sICdtbSc6IDFtbSwgJyUnOiAxJSwgJ2NoJzogMWNoLCAncGMnOiAxcGMsICdpbic6IDFpbiwgJ2VtJzogMWVtLCAncmVtJzogMXJlbSwgJ3B0JzogMXB0LCAnZXgnOiAxZXgsICd2dyc6IDF2dywgJ3ZoJzogMXZoLCAndm1pbic6IDF2bWluLCAndm1heCc6IDF2bWF4KTtcblxuICBAaWYgbm90IGluZGV4KG1hcC1rZXlzKCR1bml0cyksICR1bml0KSB7XG5cdCRfOiBpbS1sb2coJ0ludmFsaWQgdW5pdCBgI3skdW5pdH1gLicpO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWUgKiBtYXAtZ2V0KCR1bml0cywgJHVuaXQpO1xufVxuXG4vLy9cbi8vLyBUaGlzIG1peGluIGFpbXMgYXQgcmVkZWZpbmluZyB0aGUgY29uZmlndXJhdGlvbiBqdXN0IGZvciB0aGUgc2NvcGUgb2Zcbi8vLyB0aGUgY2FsbC4gSXQgaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBhIGNvbXBvbmVudCBuZWVkaW5nIGFuIGV4dGVuZGVkXG4vLy8gY29uZmlndXJhdGlvbiBzdWNoIGFzIGN1c3RvbSBicmVha3BvaW50cyAocmVmZXJyZWQgdG8gYXMgdHdlYWtwb2ludHMpXG4vLy8gZm9yIGluc3RhbmNlLlxuLy8vXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJHR3ZWFrcG9pbnRzIFsoKV0gLSBNYXAgb2YgdHdlYWtwb2ludHMgdG8gYmUgbWVyZ2VkIHdpdGggYCRicmVha3BvaW50c2Bcbi8vLyBAcGFyYW0ge01hcH0gJHR3ZWFrLW1lZGlhLWV4cHJlc3Npb25zIFsoKV0gLSBNYXAgb2YgdHdlYWtlZCBtZWRpYSBleHByZXNzaW9ucyB0byBiZSBtZXJnZWQgd2l0aCBgJG1lZGlhLWV4cHJlc3Npb25gXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgYnJlYWtwb2ludHMgd2l0aCBhIHR3ZWFrcG9pbnRcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSkge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgQGluY2x1ZGUgbWVkaWEoJz5waG9uZScsICc8PWN1c3RvbScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgdGhlIGdsb2JhbCBtZWRpYSBleHByZXNzaW9ucyB3aXRoIGEgY3VzdG9tIG9uZVxuLy8vICBAaW5jbHVkZSBtZWRpYS1jb250ZXh0KCR0d2Vhay1tZWRpYS1leHByZXNzaW9uczogKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCBib3RoIGNvbmZpZ3VyYXRpb24gbWFwc1xuLy8vICBAaW5jbHVkZSBtZWRpYS1jb250ZXh0KCgnY3VzdG9tJzogNjc4cHgpLCAoJ2FsbCc6ICdhbGwnKSkge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgQGluY2x1ZGUgbWVkaWEoJ2FsbCcsICc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbkBtaXhpbiBtZWRpYS1jb250ZXh0KCR0d2Vha3BvaW50czogKCksICR0d2Vhay1tZWRpYS1leHByZXNzaW9uczogKCkpIHtcbiAgLy8gU2F2ZSBnbG9iYWwgY29uZmlndXJhdGlvblxuICAkZ2xvYmFsLWJyZWFrcG9pbnRzOiAkYnJlYWtwb2ludHM7XG4gICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnM6ICRtZWRpYS1leHByZXNzaW9ucztcblxuICAvLyBVcGRhdGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGJyZWFrcG9pbnRzOiBtYXAtbWVyZ2UoJGJyZWFrcG9pbnRzLCAkdHdlYWtwb2ludHMpICFnbG9iYWw7XG4gICRtZWRpYS1leHByZXNzaW9uczogbWFwLW1lcmdlKCRtZWRpYS1leHByZXNzaW9ucywgJHR3ZWFrLW1lZGlhLWV4cHJlc3Npb25zKSAhZ2xvYmFsO1xuXG4gIEBjb250ZW50O1xuXG4gIC8vIFJlc3RvcmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGJyZWFrcG9pbnRzOiAkZ2xvYmFsLWJyZWFrcG9pbnRzICFnbG9iYWw7XG4gICRtZWRpYS1leHByZXNzaW9uczogJGdsb2JhbC1tZWRpYS1leHByZXNzaW9ucyAhZ2xvYmFsO1xufVxuXG4vLy8vXG4vLy8gaW5jbHVkZS1tZWRpYSBwdWJsaWMgZXhwb3NlZCBBUElcbi8vLyBAYXV0aG9yIEVkdWFyZG8gQm91Y2FzXG4vLy8gQGFjY2VzcyBwdWJsaWNcbi8vLy9cblxuXG4vLy9cbi8vLyBHZW5lcmF0ZXMgYSBtZWRpYSBxdWVyeSBiYXNlZCBvbiBhIGxpc3Qgb2YgY29uZGl0aW9uc1xuLy8vXG4vLy8gQHBhcmFtIHtBcmdsaXN0fSAgICRjb25kaXRpb25zICAtIE1lZGlhIHF1ZXJ5IGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGEgc2luZ2xlIHNldCBicmVha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIHR3byBzZXQgYnJlYWtwb2ludHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz5waG9uZScsICc8PXRhYmxldCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggY3VzdG9tIHZhbHVlc1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNThweCcsICc8ODUwcHgnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIHNldCBicmVha3BvaW50cyB3aXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz5kZXNrdG9wJywgJzw9MTM1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHN0YXRpYyBleHByZXNzaW9uXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCdyZXRpbmEyeCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIE1peGluZyBldmVyeXRoaW5nXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PTM1MHB4JywgJzx0YWJsZXQnLCAncmV0aW5hM3gnKSB7IH1cbi8vL1xuQG1peGluIG1lZGlhKCRjb25kaXRpb25zLi4uKSB7XG4gIEBpZiAoJGltLW1lZGlhLXN1cHBvcnQgYW5kIGxlbmd0aCgkY29uZGl0aW9ucykgPT0gMCkgb3Jcblx0ICAobm90ICRpbS1tZWRpYS1zdXBwb3J0IGFuZCBpbS1pbnRlcmNlcHRzLXN0YXRpYy1icmVha3BvaW50KCRjb25kaXRpb25zLi4uKSkge1xuXHRAY29udGVudDtcbiAgfSBAZWxzZSBpZiAoJGltLW1lZGlhLXN1cHBvcnQgYW5kIGxlbmd0aCgkY29uZGl0aW9ucykgPiAwKSB7XG5cdEBtZWRpYSAje3VucXVvdGUocGFyc2UtZXhwcmVzc2lvbihudGgoJGNvbmRpdGlvbnMsIDEpKSl9IHtcblx0ICAvLyBSZWN1cnNpdmUgY2FsbFxuXHQgIEBpbmNsdWRlIG1lZGlhKHNsaWNlKCRjb25kaXRpb25zLCAyKS4uLikge1xuXHRcdEBjb250ZW50O1xuXHQgIH1cblx0fVxuICB9XG59XG4iXX0= */ diff --git a/assets/css/wp-mail-logging-product-education.min.css b/assets/css/wp-mail-logging-product-education.min.css new file mode 100644 index 00000000..1861a671 --- /dev/null +++ b/assets/css/wp-mail-logging-product-education.min.css @@ -0,0 +1 @@ +.wp-mail-logging-product-education{background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.05);border-radius:6px;color:#50575e;font-size:14px;font-weight:400;margin-top:20px;position:relative}.wp-mail-logging-product-education ul{color:#646970}.wp-mail-logging-product-education-dismiss{position:absolute;right:15px;top:15px}.wp-mail-logging-product-education-dismiss button{background:none;border:none;color:#a7aaad;cursor:pointer;margin:0;padding:0}.wp-mail-logging-product-education-dismiss button:focus,.wp-mail-logging-product-education-dismiss button:hover{color:#d63638}.wp-mail-logging-product-education-dismiss button .dashicons,.wp-mail-logging-product-education-dismiss button .dashicons-before::before{width:16px;height:16px;font-size:16px}.wp-mail-logging-product-education-content{padding:20px}.wp-mail-logging-product-education-content strong{font-weight:600}.wp-mail-logging-product-education-content a.wp-mail-logging-education-btn{border-radius:3px;color:#fff;display:inline-block;font-size:14px;padding:7px 10px;text-decoration:none}.wp-mail-logging-product-education-content a.wp-mail-logging-education-btn:hover{color:#fff}.wp-mail-logging-product-education-content p{color:#646970;font-size:14px;margin:10px 0}.wp-mail-logging-product-education-content p a{color:#e77c5c}.wp-mail-logging-product-education-content p a:hover,.wp-mail-logging-product-education-content p a:focus{color:#cb5836}.wp-mail-logging-product-education h3{color:#3c434a;font-size:18px;font-weight:600;margin-bottom:10px;margin-top:0}#wp-mail-logging-product-education-email-logs-top{border-radius:7px;margin-bottom:20px;margin-top:0}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content{padding:15px}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content h2{color:#222}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content p{color:#646970;line-height:18px;margin:5px 0}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content div p:last-child{margin-top:0}#wp-mail-logging-product-education-email-logs-top .wp-mail-logging-product-education-content a.wp-mail-logging-education-btn{border-width:0;font-size:13px;line-height:16px;margin-top:7px}#wp-mail-logging-product-education-email-logs-bottom{background:#fff url("../images/plane-bg.png") no-repeat right bottom;background-size:401px 119px}@media only screen and (-o-min-device-pixel-ratio: 5/4),only screen and (-webkit-min-device-pixel-ratio: 1.25),only screen and (min-device-pixel-ratio: 1.25),only screen and (min-resolution: 1.25dppx){#wp-mail-logging-product-education-email-logs-bottom{background-image:url("../images/plane-bg@2x.png")}}@media(max-width: 782px){#wp-mail-logging-product-education-email-logs-bottom{margin-top:100px;margin-right:20px;position:absolute}}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row{display:flex;flex-wrap:wrap;gap:25px;margin:20px 0}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image{display:flex;flex-direction:column;max-width:370px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a{border:5px solid #dcdcde;border-radius:4px;box-sizing:border-box;margin-bottom:10px;position:relative}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a:hover::after{opacity:1}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image a::after{background:rgba(68,68,68,.15) url("../images/zoom.svg") no-repeat center;background-size:50px;content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:all .3s;width:100%}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image img{display:block;height:auto;width:100%}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image span{color:#3c434a;font-size:16px;font-weight:600}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul{font-size:13px;line-height:20px;margin-bottom:0;margin-top:10px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul li{background:rgba(0,0,0,0) url("../images/arrow-right-plain-icon.svg") no-repeat left 3px;background-size:12px;padding-left:18px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-product-education-images-row-image ul li::before{left:0;position:absolute;top:-1px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn{background:#e77c5c;border-color:#e77c5c;border-radius:4px;border-width:0;font-weight:600;line-height:16px;padding:12px 16px}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:hover,#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:focus{background-color:#cb5836;border-color:#cb5836}#wp-mail-logging-product-education-email-logs-bottom .wp-mail-logging-education-btn:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #cb5836} \ No newline at end of file diff --git a/assets/css/wp-mail-logging-product-education.scss b/assets/css/wp-mail-logging-product-education.scss new file mode 100644 index 00000000..46260221 --- /dev/null +++ b/assets/css/wp-mail-logging-product-education.scss @@ -0,0 +1,230 @@ +@import "include-media"; +@import "variables"; + +// Product Education. +.wp-mail-logging-product-education { + background-color: #FFFFFF; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + border-radius: 6px; + color: #50575E; + font-size: 14px; + font-weight: 400; + margin-top: 20px; + position: relative; + + ul { + color: #646970; + } + + &-dismiss { + position: absolute; + right: 15px; + top: 15px; + + button { + background: none; + border: none; + color: #a7aaad; + cursor: pointer; + margin: 0; + padding: 0; + + &:focus, &:hover { + color: #d63638; + } + + .dashicons, .dashicons-before::before { + width: 16px; + height: 16px; + font-size: 16px; + } + } + } + + &-content { + padding: 20px; + + strong { + font-weight: $medium-weight; + } + + a { + &.wp-mail-logging-education-btn { + border-radius: 3px; + color: #FFFFFF; + display: inline-block; + font-size: 14px; + padding: 7px 10px; + text-decoration: none; + + &:hover { + color: #FFFFFF; + } + } + } + + p { + color: #646970; + font-size: 14px; + margin: 10px 0; + + a { + color: #E77C5C; + + &:hover, &:focus { + color: #cb5836; + } + } + } + } + + h3 { + color: #3C434A; + font-size: 18px; + font-weight: $medium-weight; + margin-bottom: 10px; + margin-top: 0; + } +} + +#wp-mail-logging-product-education-email-logs-top { + border-radius: 7px; + margin-bottom: 20px; + margin-top: 0; + + .wp-mail-logging-product-education-content { + padding: 15px; + + h2 { + color: #222222; + } + + p { + color: #646970; + line-height: 18px; + margin: 5px 0; + } + + div { + + p:last-child { + margin-top: 0; + } + } + + a.wp-mail-logging-education-btn { + border-width: 0; + font-size: 13px; + line-height: 16px; + margin-top: 7px; + } + } +} + +#wp-mail-logging-product-education-email-logs-bottom { + background: #FFFFFF url("../images/plane-bg.png") no-repeat right bottom; + background-size: 401px 119px; + + /* @2x Images (Pixel Ratio of 1.25+) */ + @media only screen and (-o-min-device-pixel-ratio: 5/4), + only screen and (-webkit-min-device-pixel-ratio: 1.25), + only screen and (min-device-pixel-ratio: 1.25), + only screen and (min-resolution: 1.25dppx) { + + background-image: url("../images/plane-bg@2x.png"); + } + + @include media("<=tablet") { + margin-top: 100px; + margin-right: 20px; + position: absolute; + } + + .wp-mail-logging-product-education-images-row { + display: flex; + flex-wrap: wrap; + gap: 25px; + margin: 20px 0; + + &-image { + display: flex; + flex-direction: column; + max-width: 370px; + + a { + border: 5px solid #DCDCDE; + border-radius: 4px; + box-sizing: border-box; + margin-bottom: 10px; + position: relative; + + &:hover::after { + opacity: 1; + } + + &::after { + background: rgba(68, 68, 68, .15) url('../images/zoom.svg') no-repeat center; + background-size: 50px; + content: ""; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + transition: all .3s; + width: 100%; + } + } + + img { + display: block; + height: auto; + width: 100%; + } + + span { + color: #3C434A; + font-size: 16px; + font-weight: $medium-weight; + } + + ul { + font-size: 13px; + line-height: 20px; + margin-bottom: 0; + margin-top: 10px; + + li { + background: transparent url('../images/arrow-right-plain-icon.svg') no-repeat left 3px; + background-size: 12px; + padding-left: 18px; + + &::before { + left: 0; + position: absolute; + top: -1px; + } + } + } + } + } + + .wp-mail-logging-education-btn { + background: #E77C5C; + border-color: #E77C5C; + border-radius: 4px; + border-width: 0; + font-weight: $medium-weight; + line-height: 16px; + padding: 12px 16px; + + &:hover, &:focus { + background-color: #cb5836; + border-color: #cb5836; + } + + &:focus { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #cb5836; + } + } +} diff --git a/assets/css/wp-mail-logging-smtp.css b/assets/css/wp-mail-logging-smtp.css new file mode 100644 index 00000000..755a8c29 --- /dev/null +++ b/assets/css/wp-mail-logging-smtp.css @@ -0,0 +1,263 @@ +#wpcontent { + padding-left: 0 !important; + position: relative; +} +@media (max-width: 600px) { + #wpcontent { + padding-top: 46px; + } +} + +@media (max-width: 600px) { + #wpbody { + padding-top: 0; + } +} + +#wp-mail-logging-admin-smtp { + color: #50575E; + margin: 0 auto; + max-width: 700px; +} +@media (max-width: 600px) { + #wp-mail-logging-admin-smtp { + width: auto; + } +} +#wp-mail-logging-admin-smtp h1, #wp-mail-logging-admin-smtp h2 { + color: #1E2327; + font-weight: 600; +} +#wp-mail-logging-admin-smtp *, #wp-mail-logging-admin-smtp *::before, #wp-mail-logging-admin-smtp *::after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +#wp-mail-logging-admin-smtp section { + clear: both; + margin: 50px 0; + text-align: left; +} +#wp-mail-logging-admin-smtp p { + font-size: 15px; +} +#wp-mail-logging-admin-smtp .top { + text-align: center; +} +#wp-mail-logging-admin-smtp .top img { + margin-bottom: 30px; +} +#wp-mail-logging-admin-smtp .top h1 { + font-size: 26px; + margin-bottom: 0; + padding: 0; +} +#wp-mail-logging-admin-smtp .top p { + font-size: 17px; + margin-top: 10px; +} +#wp-mail-logging-admin-smtp .top .updated { + display: none; +} +#wp-mail-logging-admin-smtp .screenshot > * { + vertical-align: middle; +} +#wp-mail-logging-admin-smtp .screenshot .cont { + background-color: #ffffff; + border-radius: 3px; + box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + display: inline-block; + padding: 5px; + position: relative; + width: 315px; +} +@media (max-width: 600px) { + #wp-mail-logging-admin-smtp .screenshot .cont { + width: auto; + } +} +#wp-mail-logging-admin-smtp .screenshot .cont img { + max-width: 100%; + display: block; +} +#wp-mail-logging-admin-smtp .screenshot .cont .hover { + background-color: rgba(0, 0, 0, 0.15); + background-image: url("../images/smtp/zoom.svg"); + background-repeat: no-repeat; + background-position: center; + background-size: 50px; + border: 5px solid #ffffff; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + transition: all 0.3s; + width: 100%; +} +#wp-mail-logging-admin-smtp .screenshot .cont:hover .hover { + opacity: 1; + transition: all 0.3s; +} +#wp-mail-logging-admin-smtp .screenshot ul { + display: inline-block; + list-style-type: none; + margin: 0 0 0 30px; + max-width: calc(100% - 350px); +} +@media (max-width: 600px) { + #wp-mail-logging-admin-smtp .screenshot ul { + margin: 20px 0 0 15px; + max-width: 100%; + } +} +#wp-mail-logging-admin-smtp .screenshot li { + background-image: url("../images/arrow-right.svg"); + background-position: left 3px; + background-repeat: no-repeat; + background-size: 14px; + font-size: 15px; + margin: 16px 0; + padding: 0 0 0 24px; +} +#wp-mail-logging-admin-smtp .step { + background-color: #F9F9F9; + border: 1px solid #E5E5E5; + border-radius: 4px; + box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05); + margin: 0 0 25px 0; +} +#wp-mail-logging-admin-smtp .step > * { + vertical-align: middle; +} +#wp-mail-logging-admin-smtp .step .num { + display: inline-block; + position: relative; + width: 100px; + height: 50px; + text-align: center; +} +#wp-mail-logging-admin-smtp .step .loader { + animation: load8 1.1s infinite linear; + -webkit-animation: load8 1.1s infinite linear; + background-color: transparent; + border-top: 4px solid #969696; + border-right: 4px solid #969696; + border-bottom: 4px solid #969696; + border-left: 4px solid #404040; + margin: -54px auto 0; + opacity: 1; + position: relative; + text-indent: -9999em; + transform: translateZ(0); + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transition: all 0.3s; +} +#wp-mail-logging-admin-smtp .step .loader, #wp-mail-logging-admin-smtp .step .loader:after { + border-radius: 50%; + display: block; + width: 50px; + height: 50px; +} +#wp-mail-logging-admin-smtp .step div { + border-radius: 0 4px 4px 0; + display: inline-block; + width: calc(100% - 104px); + background-color: #ffffff; + padding: 30px; +} +#wp-mail-logging-admin-smtp .step h2 { + font-size: 24px; + line-height: 22px; + margin-top: 0; + margin-bottom: 15px; +} +@media (max-width: 600px) { + #wp-mail-logging-admin-smtp .step h2 { + line-height: 28px; + } +} +#wp-mail-logging-admin-smtp .step p { + font-size: 16px; +} +#wp-mail-logging-admin-smtp .step .error { + color: #b97474; + font-size: 14px; + margin-bottom: 0; +} +#wp-mail-logging-admin-smtp .step .link { + text-decoration: none; +} +#wp-mail-logging-admin-smtp .step .button { + box-shadow: none; + font-size: 15px; + font-weight: 600; + height: auto; + line-height: 13px; + min-width: 200px; + padding: 12px; + text-align: center; + transition: all 0.3s; +} +#wp-mail-logging-admin-smtp .step .button.grey { + background: #F6F6F6; + border: 1px solid #dddddd; + color: #9FA5AA; + text-shadow: none; +} +#wp-mail-logging-admin-smtp .step .button.disabled { + cursor: default; +} +#wp-mail-logging-admin-smtp .step .hidden { + opacity: 0; + transition: all 0.3s; +} +#wp-mail-logging-admin-smtp .grey { + opacity: 0.5; +} + +@media (max-width: 767px) { + #wpforms-admin-smtp { + width: auto; + margin: 0 20px; + } + #wpforms-admin-smtp .screenshot .cont { + box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + width: auto; + } + #wpforms-admin-smtp .screenshot ul { + margin: 20px 0 0 15px; + max-width: 100%; + } + #wpforms-admin-smtp .button { + white-space: normal; + } +} +@-webkit-keyframes load8 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes load8 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9nZW5lcmFsLnNjc3MiLCJfaW5jbHVkZS1tZWRpYS5zY3NzIiwid3AtbWFpbC1sb2dnaW5nLXNtdHAuc2NzcyIsIl92YXJpYWJsZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTtFQUNJO0VBQ0E7O0FDNGlCSDtFRDlpQkQ7SUFLUTs7OztBQ3lpQlA7RURyaUJEO0lBRVE7Ozs7QUVOUjtFQUNJO0VBQ0E7RUFDQTs7QURzaUJIO0VDemlCRDtJQU1ROzs7QUFHSjtFQUNJO0VBQ0EsYUNUUTs7QURZWjtFQUNJO0VBQ0E7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFHSjtFQUNJOztBQUdKO0VBQ0k7O0FBRUE7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7O0FBR0o7RUFDSTs7QUFNSjtFQUNJOztBQUlKO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBRG9lWDtFQzdlTztJQVlROzs7QUFHSjtFQUNJO0VBQ0E7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHSjtFQUNJO0VBQ0E7O0FBSVI7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7QUQrYlg7RUNuY087SUFPUTtJQUNBOzs7QUFJUjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUlSO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7QUFJUjtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7QURrWFg7RUN0WE87SUFPUTs7O0FBSVI7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFHSjtFQUNJOztBQUdKO0VBQ0k7RUFDQTtFQUNBLGFDN01JO0VEOE1KO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNJO0VBQ0E7RUFDQTtFQUNBOztBQUdKO0VBQ0k7O0FBSVI7RUFDSTtFQUNBOztBQUlSO0VBQ0k7OztBQUlSO0VBRUk7SUFFSTtJQUNBOztFQUlJO0lBQ0k7SUFDQTtJQUNBO0lBQ0E7O0VBR0o7SUFDSTtJQUNBOztFQUlSO0lBQ0k7OztBQUtaO0VBRUk7SUFDSTtJQUNBOztFQUdKO0lBQ0k7SUFDQTs7O0FBSVI7RUFFSTtJQUNJO0lBQ0E7O0VBR0o7SUFDSTtJQUNBIiwiZmlsZSI6ImFzc2V0cy9jc3Mvd3AtbWFpbC1sb2dnaW5nLXNtdHAuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29yZSBhZG1pbiBzdHlsZSBvdmVycmlkZXMuXG4jd3Bjb250ZW50IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBAaW5jbHVkZSBtZWRpYShcIjw9cGhvbmVcIikge1xuICAgICAgICBwYWRkaW5nLXRvcDogNDZweDtcbiAgICB9XG59XG5cbiN3cGJvZHkge1xuICAgIEBpbmNsdWRlIG1lZGlhKFwiPD1waG9uZVwiKSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIH1cbn1cbiIsIkBjaGFyc2V0IFwiVVRGLThcIjtcblxuLy8gICAgIF8gICAgICAgICAgICBfICAgICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgXyBfXG4vLyAgICAoXykgICAgICAgICAgfCB8ICAgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF8pXG4vLyAgICAgXyBfIF9fICAgX19ffCB8XyAgIF8gIF9ffCB8IF9fXyAgIF8gX18gX19fICAgX19fICBfX3wgfF8gIF9fIF9cbi8vICAgIHwgfCAnXyBcXCAvIF9ffCB8IHwgfCB8LyBfYCB8LyBfIFxcIHwgJ18gYCBfIFxcIC8gXyBcXC8gX2AgfCB8LyBfYCB8XG4vLyAgICB8IHwgfCB8IHwgKF9ffCB8IHxffCB8IChffCB8ICBfXy8gfCB8IHwgfCB8IHwgIF9fLyAoX3wgfCB8IChffCB8XG4vLyAgICB8X3xffCB8X3xcXF9fX3xffFxcX18sX3xcXF9fLF98XFxfX198IHxffCB8X3wgfF98XFxfX198XFxfXyxffF98XFxfXyxffFxuLy9cbi8vICAgICAgU2ltcGxlLCBlbGVnYW50IGFuZCBtYWludGFpbmFibGUgbWVkaWEgcXVlcmllcyBpbiBTYXNzXG4vLyAgICAgICAgICAgICAgICAgICAgICAgIHYxLjQuOVxuLy9cbi8vICAgICAgICAgICAgICAgIGh0dHA6Ly9pbmNsdWRlLW1lZGlhLmNvbVxuLy9cbi8vICAgICAgICAgQXV0aG9yczogRWR1YXJkbyBCb3VjYXMgKEBlZHVhcmRvYm91Y2FzKVxuLy8gICAgICAgICAgICAgICAgICBIdWdvIEdpcmF1ZGVsIChAaHVnb2dpcmF1ZGVsKVxuLy9cbi8vICAgICAgVGhpcyBwcm9qZWN0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2VcblxuXG4vLy8vXG4vLy8gaW5jbHVkZS1tZWRpYSBsaWJyYXJ5IHB1YmxpYyBjb25maWd1cmF0aW9uXG4vLy8gQGF1dGhvciBFZHVhcmRvIEJvdWNhc1xuLy8vIEBhY2Nlc3MgcHVibGljXG4vLy8vXG5cblxuLy8vXG4vLy8gQ3JlYXRlcyBhIGxpc3Qgb2YgZ2xvYmFsIGJyZWFrcG9pbnRzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHNpbmdsZSBicmVha3BvaW50IHdpdGggdGhlIGxhYmVsIGBwaG9uZWBcbi8vLyAgJGJyZWFrcG9pbnRzOiAoJ3Bob25lJzogMzIwcHgpO1xuLy8vXG4kYnJlYWtwb2ludHM6IChcbiAgJ3Bob25lJzogMzIwcHgsXG4gICd0YWJsZXQnOiA3NjhweCxcbiAgJ2Rlc2t0b3AnOiAxMDI0cHhcbikgIWRlZmF1bHQ7XG5cblxuLy8vXG4vLy8gQ3JlYXRlcyBhIGxpc3Qgb2Ygc3RhdGljIGV4cHJlc3Npb25zIG9yIG1lZGlhIHR5cGVzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHNpbmdsZSBtZWRpYSB0eXBlIChzY3JlZW4pXG4vLy8gICRtZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nOiAnc2NyZWVuJyk7XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gQ3JlYXRlcyBhIHN0YXRpYyBleHByZXNzaW9uIHdpdGggbG9naWNhbCBkaXNqdW5jdGlvbiAoT1Igb3BlcmF0b3IpXG4vLy8gICRtZWRpYS1leHByZXNzaW9uczogKFxuLy8vICAgICdyZXRpbmEyeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpJ1xuLy8vICApO1xuLy8vXG4kbWVkaWEtZXhwcmVzc2lvbnM6IChcbiAgJ3NjcmVlbic6ICdzY3JlZW4nLFxuICAncHJpbnQnOiAncHJpbnQnLFxuICAnaGFuZGhlbGQnOiAnaGFuZGhlbGQnLFxuICAnbGFuZHNjYXBlJzogJyhvcmllbnRhdGlvbjogbGFuZHNjYXBlKScsXG4gICdwb3J0cmFpdCc6ICcob3JpZW50YXRpb246IHBvcnRyYWl0KScsXG4gICdyZXRpbmEyeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLCAobWluLXJlc29sdXRpb246IDJkcHB4KScsXG4gICdyZXRpbmEzeCc6ICcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAzKSwgKG1pbi1yZXNvbHV0aW9uOiAzNTBkcGkpLCAobWluLXJlc29sdXRpb246IDNkcHB4KSdcbikgIWRlZmF1bHQ7XG5cblxuLy8vXG4vLy8gRGVmaW5lcyBhIG51bWJlciB0byBiZSBhZGRlZCBvciBzdWJ0cmFjdGVkIGZyb20gZWFjaCB1bml0IHdoZW4gZGVjbGFyaW5nIGJyZWFrcG9pbnRzIHdpdGggZXhjbHVzaXZlIGludGVydmFsc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEludGVydmFsIGZvciBwaXhlbHMgaXMgZGVmaW5lZCBhcyBgMWAgYnkgZGVmYXVsdFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPjEyOHB4Jykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAxMjlweCkge31cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBJbnRlcnZhbCBmb3IgZW1zIGlzIGRlZmluZWQgYXMgYDAuMDFgIGJ5IGRlZmF1bHRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4yMGVtJykge31cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIEBtZWRpYSAobWluLXdpZHRoOiAyMC4wMWVtKSB7fVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEludGVydmFsIGZvciByZW1zIGlzIGRlZmluZWQgYXMgYDAuMWAgYnkgZGVmYXVsdCwgdG8gYmUgdXNlZCB3aXRoIGBmb250LXNpemU6IDYyLjUlO2Bcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz4yLjByZW0nKSB7fVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgQG1lZGlhIChtaW4td2lkdGg6IDIuMXJlbSkge31cbi8vL1xuJHVuaXQtaW50ZXJ2YWxzOiAoXG4gICdweCc6IDEsXG4gICdlbSc6IDAuMDEsXG4gICdyZW0nOiAwLjEsXG4gICcnOiAwXG4pICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBEZWZpbmVzIHdoZXRoZXIgc3VwcG9ydCBmb3IgbWVkaWEgcXVlcmllcyBpcyBhdmFpbGFibGUsIHVzZWZ1bCBmb3IgY3JlYXRpbmcgc2VwYXJhdGUgc3R5bGVzaGVldHNcbi8vLyBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IG1lZGlhIHF1ZXJpZXMuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRGlzYWJsZXMgc3VwcG9ydCBmb3IgbWVkaWEgcXVlcmllc1xuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICAuZm9vIHtcbi8vLyAgICBjb2xvcjogdG9tYXRvO1xuLy8vICB9XG4vLy9cbiRpbS1tZWRpYS1zdXBwb3J0OiB0cnVlICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBTZWxlY3RzIHdoaWNoIGJyZWFrcG9pbnQgdG8gZW11bGF0ZSB3aGVuIHN1cHBvcnQgZm9yIG1lZGlhIHF1ZXJpZXMgaXMgZGlzYWJsZWQuIE1lZGlhIHF1ZXJpZXMgdGhhdCBzdGFydCBhdCBvclxuLy8vIGludGVyY2VwdCB0aGUgYnJlYWtwb2ludCB3aWxsIGJlIGRpc3BsYXllZCwgYW55IG90aGVycyB3aWxsIGJlIGlnbm9yZWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludFxuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gICRpbS1uby1tZWRpYS1icmVha3BvaW50OiAnZGVza3RvcCc7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICAuZm9vIHtcbi8vLyAgICBjb2xvcjogdG9tYXRvO1xuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIE5PVCBzaG93IGJlY2F1c2UgaXQgZG9lcyBub3QgaW50ZXJjZXB0IHRoZSBkZXNrdG9wIGJyZWFrcG9pbnRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ3RhYmxldCc7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PWRlc2t0b3AnKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gIC8qIE5vIG91dHB1dCAqL1xuLy8vXG4kaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnICFkZWZhdWx0O1xuXG4vLy9cbi8vLyBTZWxlY3RzIHdoaWNoIG1lZGlhIGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkIGluIGFuIGV4cHJlc3Npb24gZm9yIGl0IHRvIGJlIHVzZWQgd2hlbiBtZWRpYSBxdWVyaWVzXG4vLy8gYXJlIG5vdCBzdXBwb3J0ZWQuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIHNob3cgYmVjYXVzZSBpdCBpbnRlcmNlcHRzIHRoZSBzdGF0aWMgYnJlYWtwb2ludCBhbmQgY29udGFpbnMgb25seSBhY2NlcHRlZCBtZWRpYSBleHByZXNzaW9uc1xuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gICRpbS1uby1tZWRpYS1icmVha3BvaW50OiAnZGVza3RvcCc7XG4vLy8gICRpbS1uby1tZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nKTtcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49dGFibGV0JywgJ3NjcmVlbicpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgIC5mb28ge1xuLy8vICAgICBjb2xvcjogdG9tYXRvO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFRoaXMgbWVkaWEgcXVlcnkgd2lsbCBOT1Qgc2hvdyBiZWNhdXNlIGl0IGludGVyY2VwdHMgdGhlIHN0YXRpYyBicmVha3BvaW50IGJ1dCBjb250YWlucyBhIG1lZGlhIGV4cHJlc3Npb24gdGhhdCBpcyBub3QgYWNjZXB0ZWRcbi8vLyAgJGltLW1lZGlhLXN1cHBvcnQ6IGZhbHNlO1xuLy8vICAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludDogJ2Rlc2t0b3AnO1xuLy8vICAkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnM6ICgnc2NyZWVuJyk7XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PXRhYmxldCcsICdyZXRpbmEyeCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogTm8gb3V0cHV0ICovXG4vLy9cbiRpbS1uby1tZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nLCAncG9ydHJhaXQnLCAnbGFuZHNjYXBlJykgIWRlZmF1bHQ7XG5cbi8vLy9cbi8vLyBDcm9zcy1lbmdpbmUgbG9nZ2luZyBlbmdpbmVcbi8vLyBAYXV0aG9yIEh1Z28gR2lyYXVkZWxcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLy9cblxuXG4vLy9cbi8vLyBMb2cgYSBtZXNzYWdlIGVpdGhlciB3aXRoIGBAZXJyb3JgIGlmIHN1cHBvcnRlZFxuLy8vIGVsc2Ugd2l0aCBgQHdhcm5gLCB1c2luZyBgZmVhdHVyZS1leGlzdHMoJ2F0LWVycm9yJylgXG4vLy8gdG8gZGV0ZWN0IHN1cHBvcnQuXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxvZ1xuLy8vXG5AZnVuY3Rpb24gaW0tbG9nKCRtZXNzYWdlKSB7XG4gIEBpZiBmZWF0dXJlLWV4aXN0cygnYXQtZXJyb3InKSB7XG5cdEBlcnJvciAkbWVzc2FnZTtcbiAgfSBAZWxzZSB7XG5cdEB3YXJuICRtZXNzYWdlO1xuXHQkXzogbm9vcCgpO1xuICB9XG5cbiAgQHJldHVybiAkbWVzc2FnZTtcbn1cblxuXG4vLy9cbi8vLyBXcmFwcGVyIG1peGluIGZvciB0aGUgbG9nIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGggYSBtb3JlIGZyaWVuZGx5XG4vLy8gQVBJIHRoYW4gYEBpZiBpbS1sb2coJy4uJykge31gIG9yIGAkXzogaW0tbG9nKCcuLicpYC4gQmFzaWNhbGx5LCB1c2UgdGhlIGZ1bmN0aW9uXG4vLy8gd2l0aGluIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNsdWRlIGEgbWl4aW4gaW4gYSBmdW5jdGlvblxuLy8vIGFuZCB1c2UgdGhlIG1peGluIGV2ZXJ5d2hlcmUgZWxzZSBiZWNhdXNlIGl0J3MgbXVjaCBtb3JlIGVsZWdhbnQuXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxvZ1xuLy8vXG5AbWl4aW4gbG9nKCRtZXNzYWdlKSB7XG4gIEBpZiBpbS1sb2coJG1lc3NhZ2UpIHt9XG59XG5cblxuLy8vXG4vLy8gRnVuY3Rpb24gd2l0aCBubyBgQHJldHVybmAgY2FsbGVkIG5leHQgdG8gYEB3YXJuYCBpbiBTYXNzIDMuM1xuLy8vIHRvIHRyaWdnZXIgYSBjb21waWxpbmcgZXJyb3IgYW5kIHN0b3AgdGhlIHByb2Nlc3MuXG4vLy9cbkBmdW5jdGlvbiBub29wKCkge31cblxuLy8vXG4vLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbGlzdCBvZiBjb25kaXRpb25zIGlzIGludGVyY2VwdGVkIGJ5IHRoZSBzdGF0aWMgYnJlYWtwb2ludC5cbi8vL1xuLy8vIEBwYXJhbSB7QXJnbGlzdH0gICAkY29uZGl0aW9ucyAgLSBNZWRpYSBxdWVyeSBjb25kaXRpb25zXG4vLy9cbi8vLyBAcmV0dXJuIHtCb29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uZGl0aW9ucyBhcmUgaW50ZXJjZXB0ZWQgYnkgdGhlIHN0YXRpYyBicmVha3BvaW50XG4vLy9cbkBmdW5jdGlvbiBpbS1pbnRlcmNlcHRzLXN0YXRpYy1icmVha3BvaW50KCRjb25kaXRpb25zLi4uKSB7XG4gICRuby1tZWRpYS1icmVha3BvaW50LXZhbHVlOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQpO1xuXG4gIEBpZiBub3QgJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUge1xuXHRAaWYgaW0tbG9nKCdgI3skaW0tbm8tbWVkaWEtYnJlYWtwb2ludH1gIGlzIG5vdCBhIHZhbGlkIGJyZWFrcG9pbnQuJykge31cbiAgfVxuXG4gIEBlYWNoICRjb25kaXRpb24gaW4gJGNvbmRpdGlvbnMge1xuXHRAaWYgbm90IG1hcC1oYXMta2V5KCRtZWRpYS1leHByZXNzaW9ucywgJGNvbmRpdGlvbikge1xuXHQgICRvcGVyYXRvcjogZ2V0LWV4cHJlc3Npb24tb3BlcmF0b3IoJGNvbmRpdGlvbik7XG5cdCAgJHByZWZpeDogZ2V0LWV4cHJlc3Npb24tcHJlZml4KCRvcGVyYXRvcik7XG5cdCAgJHZhbHVlOiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkY29uZGl0aW9uLCAkb3BlcmF0b3IpO1xuXG5cdCAgQGlmICgkcHJlZml4ID09ICdtYXgnIGFuZCAkdmFsdWUgPD0gJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUpIG9yXG5cdFx0ICAoJHByZWZpeCA9PSAnbWluJyBhbmQgJHZhbHVlID4gJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWUpIHtcblx0XHRAcmV0dXJuIGZhbHNlO1xuXHQgIH1cblx0fSBAZWxzZSBpZiBub3QgaW5kZXgoJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zLCAkY29uZGl0aW9uKSB7XG5cdCAgQHJldHVybiBmYWxzZTtcblx0fVxuICB9XG5cbiAgQHJldHVybiB0cnVlO1xufVxuXG4vLy8vXG4vLy8gUGFyc2luZyBlbmdpbmVcbi8vLyBAYXV0aG9yIEh1Z28gR2lyYXVkZWxcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLy9cblxuXG4vLy9cbi8vLyBHZXQgb3BlcmF0b3Igb2YgYW4gZXhwcmVzc2lvblxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRleHByZXNzaW9uIC0gRXhwcmVzc2lvbiB0byBleHRyYWN0IG9wZXJhdG9yIGZyb21cbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBBbnkgb2YgYD49YCwgYD5gLCBgPD1gLCBgPGAsIGDiiaVgLCBg4omkYFxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tb3BlcmF0b3IoJGV4cHJlc3Npb24pIHtcbiAgQGVhY2ggJG9wZXJhdG9yIGluICgnPj0nLCAnPicsICc8PScsICc8JywgJ+KJpScsICfiiaQnKSB7XG5cdEBpZiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuXHQgIEByZXR1cm4gJG9wZXJhdG9yO1xuXHR9XG4gIH1cblxuICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluc2lkZSBhIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvXG4gIC8vIHJlbHkgb24gdGhlIGBpbS1sb2coLi4pYCBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgYGxvZyguLilgIG1peGluLiBCZWNhdXNlXG4gIC8vIGZ1bmN0aW9ucyBjYW5ub3QgYmUgY2FsbGVkIGFueXdoZXJlIGluIFNhc3MsIHdlIG5lZWQgdG8gaGFjayB0aGUgY2FsbCBpblxuICAvLyBhIGR1bW15IHZhcmlhYmxlLCBzdWNoIGFzIGAkX2AuIElmIGFueWJvZHkgZXZlciByYWlzZSBhIHNjb3BpbmcgaXNzdWUgd2l0aFxuICAvLyBTYXNzIDMuMywgY2hhbmdlIHRoaXMgbGluZSBpbiBgQGlmIGltLWxvZyguLikge31gIGluc3RlYWQuXG4gICRfOiBpbS1sb2coJ05vIG9wZXJhdG9yIGZvdW5kIGluIGAjeyRleHByZXNzaW9ufWAuJyk7XG59XG5cblxuLy8vXG4vLy8gR2V0IGRpbWVuc2lvbiBvZiBhbiBleHByZXNzaW9uLCBiYXNlZCBvbiBhIGZvdW5kIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIGV4dHJhY3QgZGltZW5zaW9uIGZyb21cbi8vLyBAcGFyYW0ge1N0cmluZ30gJG9wZXJhdG9yIC0gT3BlcmF0b3IgZnJvbSBgJGV4cHJlc3Npb25gXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gYHdpZHRoYCBvciBgaGVpZ2h0YCAob3IgcG90ZW50aWFsbHkgYW55dGhpbmcgZWxzZSlcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLWRpbWVuc2lvbigkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKSB7XG4gICRvcGVyYXRvci1pbmRleDogc3RyLWluZGV4KCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkcGFyc2VkLWRpbWVuc2lvbjogc3RyLXNsaWNlKCRleHByZXNzaW9uLCAwLCAkb3BlcmF0b3ItaW5kZXggLSAxKTtcbiAgJGRpbWVuc2lvbjogJ3dpZHRoJztcblxuICBAaWYgc3RyLWxlbmd0aCgkcGFyc2VkLWRpbWVuc2lvbikgPiAwIHtcblx0JGRpbWVuc2lvbjogJHBhcnNlZC1kaW1lbnNpb247XG4gIH1cblxuICBAcmV0dXJuICRkaW1lbnNpb247XG59XG5cblxuLy8vXG4vLy8gR2V0IGRpbWVuc2lvbiBwcmVmaXggYmFzZWQgb24gYW4gb3BlcmF0b3Jcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvclxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIGBtaW5gIG9yIGBtYXhgXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1wcmVmaXgoJG9wZXJhdG9yKSB7XG4gIEByZXR1cm4gaWYoaW5kZXgoKCc8JywgJzw9JywgJ+KJpCcpLCAkb3BlcmF0b3IpLCAnbWF4JywgJ21pbicpO1xufVxuXG5cbi8vL1xuLy8vIEdldCB2YWx1ZSBvZiBhbiBleHByZXNzaW9uLCBiYXNlZCBvbiBhIGZvdW5kIG9wZXJhdG9yXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIGV4dHJhY3QgdmFsdWUgZnJvbVxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvciBmcm9tIGAkZXhwcmVzc2lvbmBcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn0gLSBBIG51bWVyaWMgdmFsdWVcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLXZhbHVlKCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcbiAgJG9wZXJhdG9yLWluZGV4OiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG4gICR2YWx1ZTogc3RyLXNsaWNlKCRleHByZXNzaW9uLCAkb3BlcmF0b3ItaW5kZXggKyBzdHItbGVuZ3RoKCRvcGVyYXRvcikpO1xuXG4gIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICR2YWx1ZSkge1xuXHQkdmFsdWU6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkdmFsdWUpO1xuICB9IEBlbHNlIHtcblx0JHZhbHVlOiB0by1udW1iZXIoJHZhbHVlKTtcbiAgfVxuXG4gICRpbnRlcnZhbDogbWFwLWdldCgkdW5pdC1pbnRlcnZhbHMsIHVuaXQoJHZhbHVlKSk7XG5cbiAgQGlmIG5vdCAkaW50ZXJ2YWwge1xuXHQvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIG1peGluIGluc2lkZSBhIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvXG5cdC8vIHJlbHkgb24gdGhlIGBpbS1sb2coLi4pYCBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgYGxvZyguLilgIG1peGluLiBCZWNhdXNlXG5cdC8vIGZ1bmN0aW9ucyBjYW5ub3QgYmUgY2FsbGVkIGFueXdoZXJlIGluIFNhc3MsIHdlIG5lZWQgdG8gaGFjayB0aGUgY2FsbCBpblxuXHQvLyBhIGR1bW15IHZhcmlhYmxlLCBzdWNoIGFzIGAkX2AuIElmIGFueWJvZHkgZXZlciByYWlzZSBhIHNjb3BpbmcgaXNzdWUgd2l0aFxuXHQvLyBTYXNzIDMuMywgY2hhbmdlIHRoaXMgbGluZSBpbiBgQGlmIGltLWxvZyguLikge31gIGluc3RlYWQuXG5cdCRfOiBpbS1sb2coJ1Vua25vd24gdW5pdCBgI3t1bml0KCR2YWx1ZSl9YC4nKTtcbiAgfVxuXG4gIEBpZiAkb3BlcmF0b3IgPT0gJz4nIHtcblx0JHZhbHVlOiAkdmFsdWUgKyAkaW50ZXJ2YWw7XG4gIH0gQGVsc2UgaWYgJG9wZXJhdG9yID09ICc8JyB7XG5cdCR2YWx1ZTogJHZhbHVlIC0gJGludGVydmFsO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cblxuLy8vXG4vLy8gUGFyc2UgYW4gZXhwcmVzc2lvbiB0byByZXR1cm4gYSB2YWxpZCBtZWRpYS1xdWVyeSBleHByZXNzaW9uXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIHBhcnNlXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gVmFsaWQgbWVkaWEgcXVlcnlcbi8vL1xuQGZ1bmN0aW9uIHBhcnNlLWV4cHJlc3Npb24oJGV4cHJlc3Npb24pIHtcbiAgLy8gSWYgaXQgaXMgcGFydCBvZiAkbWVkaWEtZXhwcmVzc2lvbnMsIGl0IGhhcyBubyBvcGVyYXRvclxuICAvLyB0aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8gZ28gYW55IGZ1cnRoZXIsIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICBAaWYgbWFwLWhhcy1rZXkoJG1lZGlhLWV4cHJlc3Npb25zLCAkZXhwcmVzc2lvbikge1xuXHRAcmV0dXJuIG1hcC1nZXQoJG1lZGlhLWV4cHJlc3Npb25zLCAkZXhwcmVzc2lvbik7XG4gIH1cblxuICAkb3BlcmF0b3I6IGdldC1leHByZXNzaW9uLW9wZXJhdG9yKCRleHByZXNzaW9uKTtcbiAgJGRpbWVuc2lvbjogZ2V0LWV4cHJlc3Npb24tZGltZW5zaW9uKCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuICAkcHJlZml4OiBnZXQtZXhwcmVzc2lvbi1wcmVmaXgoJG9wZXJhdG9yKTtcbiAgJHZhbHVlOiBnZXQtZXhwcmVzc2lvbi12YWx1ZSgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcblxuICBAcmV0dXJuICcoI3skcHJlZml4fS0jeyRkaW1lbnNpb259OiAjeyR2YWx1ZX0pJztcbn1cblxuLy8vXG4vLy8gU2xpY2UgYCRsaXN0YCBiZXR3ZWVuIGAkc3RhcnRgIGFuZCBgJGVuZGAgaW5kZXhlc1xuLy8vXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge0xpc3R9ICRsaXN0IC0gTGlzdCB0byBzbGljZVxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkc3RhcnQgWzFdIC0gU3RhcnQgaW5kZXhcbi8vLyBAcGFyYW0ge051bWJlcn0gJGVuZCBbbGVuZ3RoKCRsaXN0KV0gLSBFbmQgaW5kZXhcbi8vL1xuLy8vIEByZXR1cm4ge0xpc3R9IFNsaWNlZCBsaXN0XG4vLy9cbkBmdW5jdGlvbiBzbGljZSgkbGlzdCwgJHN0YXJ0OiAxLCAkZW5kOiBsZW5ndGgoJGxpc3QpKSB7XG4gIEBpZiBsZW5ndGgoJGxpc3QpIDwgMSBvciAkc3RhcnQgPiAkZW5kIHtcblx0QHJldHVybiAoKTtcbiAgfVxuXG4gICRyZXN1bHQ6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAkc3RhcnQgdGhyb3VnaCAkZW5kIHtcblx0JHJlc3VsdDogYXBwZW5kKCRyZXN1bHQsIG50aCgkbGlzdCwgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8vL1xuLy8vIFN0cmluZyB0byBudW1iZXIgY29udmVydGVyXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy8vXG5cblxuLy8vXG4vLy8gQ2FzdHMgYSBzdHJpbmcgaW50byBhIG51bWJlclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICR2YWx1ZSAtIFZhbHVlIHRvIGJlIHBhcnNlZFxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfVxuLy8vXG5AZnVuY3Rpb24gdG8tbnVtYmVyKCR2YWx1ZSkge1xuICBAaWYgdHlwZS1vZigkdmFsdWUpID09ICdudW1iZXInIHtcblx0QHJldHVybiAkdmFsdWU7XG4gIH0gQGVsc2UgaWYgdHlwZS1vZigkdmFsdWUpICE9ICdzdHJpbmcnIHtcblx0JF86IGltLWxvZygnVmFsdWUgZm9yIGB0by1udW1iZXJgIHNob3VsZCBiZSBhIG51bWJlciBvciBhIHN0cmluZy4nKTtcbiAgfVxuXG4gICRmaXJzdC1jaGFyYWN0ZXI6IHN0ci1zbGljZSgkdmFsdWUsIDEsIDEpO1xuICAkcmVzdWx0OiAwO1xuICAkZGlnaXRzOiAwO1xuICAkbWludXM6ICgkZmlyc3QtY2hhcmFjdGVyID09ICctJyk7XG4gICRudW1iZXJzOiAoJzAnOiAwLCAnMSc6IDEsICcyJzogMiwgJzMnOiAzLCAnNCc6IDQsICc1JzogNSwgJzYnOiA2LCAnNyc6IDcsICc4JzogOCwgJzknOiA5KTtcblxuICAvLyBSZW1vdmUgKy8tIHNpZ24gaWYgcHJlc2VudCBhdCBmaXJzdCBjaGFyYWN0ZXJcbiAgQGlmICgkZmlyc3QtY2hhcmFjdGVyID09ICcrJyBvciAkZmlyc3QtY2hhcmFjdGVyID09ICctJykge1xuXHQkdmFsdWU6IHN0ci1zbGljZSgkdmFsdWUsIDIpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBzdHItbGVuZ3RoKCR2YWx1ZSkge1xuXHQkY2hhcmFjdGVyOiBzdHItc2xpY2UoJHZhbHVlLCAkaSwgJGkpO1xuXG5cdEBpZiBub3QgKGluZGV4KG1hcC1rZXlzKCRudW1iZXJzKSwgJGNoYXJhY3Rlcikgb3IgJGNoYXJhY3RlciA9PSAnLicpIHtcblx0ICBAcmV0dXJuIHRvLWxlbmd0aChpZigkbWludXMsIC0kcmVzdWx0LCAkcmVzdWx0KSwgc3RyLXNsaWNlKCR2YWx1ZSwgJGkpKVxuXHR9XG5cblx0QGlmICRjaGFyYWN0ZXIgPT0gJy4nIHtcblx0ICAkZGlnaXRzOiAxO1xuXHR9IEBlbHNlIGlmICRkaWdpdHMgPT0gMCB7XG5cdCAgJHJlc3VsdDogJHJlc3VsdCAqIDEwICsgbWFwLWdldCgkbnVtYmVycywgJGNoYXJhY3Rlcik7XG5cdH0gQGVsc2Uge1xuXHQgICRkaWdpdHM6ICRkaWdpdHMgKiAxMDtcblx0ICAkcmVzdWx0OiAkcmVzdWx0ICsgbWFwLWdldCgkbnVtYmVycywgJGNoYXJhY3RlcikgLyAkZGlnaXRzO1xuXHR9XG4gIH1cblxuICBAcmV0dXJuIGlmKCRtaW51cywgLSRyZXN1bHQsICRyZXN1bHQpO1xufVxuXG5cbi8vL1xuLy8vIEFkZCBgJHVuaXRgIHRvIGAkdmFsdWVgXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHZhbHVlIC0gVmFsdWUgdG8gYWRkIHVuaXQgdG9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHVuaXQgLSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXRcbi8vL1xuLy8vIEByZXR1cm4ge051bWJlcn0gLSBgJHZhbHVlYCBleHByZXNzZWQgaW4gYCR1bml0YFxuLy8vXG5AZnVuY3Rpb24gdG8tbGVuZ3RoKCR2YWx1ZSwgJHVuaXQpIHtcbiAgJHVuaXRzOiAoJ3B4JzogMXB4LCAnY20nOiAxY20sICdtbSc6IDFtbSwgJyUnOiAxJSwgJ2NoJzogMWNoLCAncGMnOiAxcGMsICdpbic6IDFpbiwgJ2VtJzogMWVtLCAncmVtJzogMXJlbSwgJ3B0JzogMXB0LCAnZXgnOiAxZXgsICd2dyc6IDF2dywgJ3ZoJzogMXZoLCAndm1pbic6IDF2bWluLCAndm1heCc6IDF2bWF4KTtcblxuICBAaWYgbm90IGluZGV4KG1hcC1rZXlzKCR1bml0cyksICR1bml0KSB7XG5cdCRfOiBpbS1sb2coJ0ludmFsaWQgdW5pdCBgI3skdW5pdH1gLicpO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWUgKiBtYXAtZ2V0KCR1bml0cywgJHVuaXQpO1xufVxuXG4vLy9cbi8vLyBUaGlzIG1peGluIGFpbXMgYXQgcmVkZWZpbmluZyB0aGUgY29uZmlndXJhdGlvbiBqdXN0IGZvciB0aGUgc2NvcGUgb2Zcbi8vLyB0aGUgY2FsbC4gSXQgaXMgaGVscGZ1bCB3aGVuIGhhdmluZyBhIGNvbXBvbmVudCBuZWVkaW5nIGFuIGV4dGVuZGVkXG4vLy8gY29uZmlndXJhdGlvbiBzdWNoIGFzIGN1c3RvbSBicmVha3BvaW50cyAocmVmZXJyZWQgdG8gYXMgdHdlYWtwb2ludHMpXG4vLy8gZm9yIGluc3RhbmNlLlxuLy8vXG4vLy8gQGF1dGhvciBIdWdvIEdpcmF1ZGVsXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJHR3ZWFrcG9pbnRzIFsoKV0gLSBNYXAgb2YgdHdlYWtwb2ludHMgdG8gYmUgbWVyZ2VkIHdpdGggYCRicmVha3BvaW50c2Bcbi8vLyBAcGFyYW0ge01hcH0gJHR3ZWFrLW1lZGlhLWV4cHJlc3Npb25zIFsoKV0gLSBNYXAgb2YgdHdlYWtlZCBtZWRpYSBleHByZXNzaW9ucyB0byBiZSBtZXJnZWQgd2l0aCBgJG1lZGlhLWV4cHJlc3Npb25gXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIHRoZSBnbG9iYWwgYnJlYWtwb2ludHMgd2l0aCBhIHR3ZWFrcG9pbnRcbi8vLyAgQGluY2x1ZGUgbWVkaWEtY29udGV4dCgoJ2N1c3RvbSc6IDY3OHB4KSkge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgQGluY2x1ZGUgbWVkaWEoJz5waG9uZScsICc8PWN1c3RvbScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgdGhlIGdsb2JhbCBtZWRpYSBleHByZXNzaW9ucyB3aXRoIGEgY3VzdG9tIG9uZVxuLy8vICBAaW5jbHVkZSBtZWRpYS1jb250ZXh0KCR0d2Vhay1tZWRpYS1leHByZXNzaW9uczogKCdhbGwnOiAnYWxsJykpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIEBpbmNsdWRlIG1lZGlhKCdhbGwnLCAnPnBob25lJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCBib3RoIGNvbmZpZ3VyYXRpb24gbWFwc1xuLy8vICBAaW5jbHVkZSBtZWRpYS1jb250ZXh0KCgnY3VzdG9tJzogNjc4cHgpLCAoJ2FsbCc6ICdhbGwnKSkge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgQGluY2x1ZGUgbWVkaWEoJ2FsbCcsICc+cGhvbmUnLCAnPD1jdXN0b20nKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbkBtaXhpbiBtZWRpYS1jb250ZXh0KCR0d2Vha3BvaW50czogKCksICR0d2Vhay1tZWRpYS1leHByZXNzaW9uczogKCkpIHtcbiAgLy8gU2F2ZSBnbG9iYWwgY29uZmlndXJhdGlvblxuICAkZ2xvYmFsLWJyZWFrcG9pbnRzOiAkYnJlYWtwb2ludHM7XG4gICRnbG9iYWwtbWVkaWEtZXhwcmVzc2lvbnM6ICRtZWRpYS1leHByZXNzaW9ucztcblxuICAvLyBVcGRhdGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGJyZWFrcG9pbnRzOiBtYXAtbWVyZ2UoJGJyZWFrcG9pbnRzLCAkdHdlYWtwb2ludHMpICFnbG9iYWw7XG4gICRtZWRpYS1leHByZXNzaW9uczogbWFwLW1lcmdlKCRtZWRpYS1leHByZXNzaW9ucywgJHR3ZWFrLW1lZGlhLWV4cHJlc3Npb25zKSAhZ2xvYmFsO1xuXG4gIEBjb250ZW50O1xuXG4gIC8vIFJlc3RvcmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgJGJyZWFrcG9pbnRzOiAkZ2xvYmFsLWJyZWFrcG9pbnRzICFnbG9iYWw7XG4gICRtZWRpYS1leHByZXNzaW9uczogJGdsb2JhbC1tZWRpYS1leHByZXNzaW9ucyAhZ2xvYmFsO1xufVxuXG4vLy8vXG4vLy8gaW5jbHVkZS1tZWRpYSBwdWJsaWMgZXhwb3NlZCBBUElcbi8vLyBAYXV0aG9yIEVkdWFyZG8gQm91Y2FzXG4vLy8gQGFjY2VzcyBwdWJsaWNcbi8vLy9cblxuXG4vLy9cbi8vLyBHZW5lcmF0ZXMgYSBtZWRpYSBxdWVyeSBiYXNlZCBvbiBhIGxpc3Qgb2YgY29uZGl0aW9uc1xuLy8vXG4vLy8gQHBhcmFtIHtBcmdsaXN0fSAgICRjb25kaXRpb25zICAtIE1lZGlhIHF1ZXJ5IGNvbmRpdGlvbnNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGEgc2luZ2xlIHNldCBicmVha3BvaW50XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+cGhvbmUnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIHR3byBzZXQgYnJlYWtwb2ludHNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz5waG9uZScsICc8PXRhYmxldCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggY3VzdG9tIHZhbHVlc1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj0zNThweCcsICc8ODUwcHgnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIHNldCBicmVha3BvaW50cyB3aXRoIGN1c3RvbSB2YWx1ZXNcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz5kZXNrdG9wJywgJzw9MTM1MHB4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBhIHN0YXRpYyBleHByZXNzaW9uXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCdyZXRpbmEyeCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIE1peGluZyBldmVyeXRoaW5nXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PTM1MHB4JywgJzx0YWJsZXQnLCAncmV0aW5hM3gnKSB7IH1cbi8vL1xuQG1peGluIG1lZGlhKCRjb25kaXRpb25zLi4uKSB7XG4gIEBpZiAoJGltLW1lZGlhLXN1cHBvcnQgYW5kIGxlbmd0aCgkY29uZGl0aW9ucykgPT0gMCkgb3Jcblx0ICAobm90ICRpbS1tZWRpYS1zdXBwb3J0IGFuZCBpbS1pbnRlcmNlcHRzLXN0YXRpYy1icmVha3BvaW50KCRjb25kaXRpb25zLi4uKSkge1xuXHRAY29udGVudDtcbiAgfSBAZWxzZSBpZiAoJGltLW1lZGlhLXN1cHBvcnQgYW5kIGxlbmd0aCgkY29uZGl0aW9ucykgPiAwKSB7XG5cdEBtZWRpYSAje3VucXVvdGUocGFyc2UtZXhwcmVzc2lvbihudGgoJGNvbmRpdGlvbnMsIDEpKSl9IHtcblx0ICAvLyBSZWN1cnNpdmUgY2FsbFxuXHQgIEBpbmNsdWRlIG1lZGlhKHNsaWNlKCRjb25kaXRpb25zLCAyKS4uLikge1xuXHRcdEBjb250ZW50O1xuXHQgIH1cblx0fVxuICB9XG59XG4iLCIvLyBTTVRQIC0gP3BhZ2U9d3BtbF9wbHVnaW5fbG9nJnRhYj1zbXRwXG5cbkBpbXBvcnQgXCJpbmNsdWRlLW1lZGlhXCI7XG5AaW1wb3J0IFwidmFyaWFibGVzXCI7XG5AaW1wb3J0IFwiZ2VuZXJhbFwiO1xuXG4jd3AtbWFpbC1sb2dnaW5nLWFkbWluLXNtdHAge1xuICAgIGNvbG9yOiAjNTA1NzVFO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIG1heC13aWR0aDogNzAwcHg7XG5cbiAgICBAaW5jbHVkZSBtZWRpYShcIjw9cGhvbmVcIikge1xuICAgICAgICB3aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICBoMSwgaDIge1xuICAgICAgICBjb2xvcjogIzFFMjMyNztcbiAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgIH1cblxuICAgICosICo6OmJlZm9yZSwgKjo6YWZ0ZXIge1xuICAgICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG5cbiAgICBzZWN0aW9uIHtcbiAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgIG1hcmdpbjogNTBweCAwO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cblxuICAgIHAge1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgfVxuXG4gICAgLnRvcCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgICBpbWcge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnVwZGF0ZWQge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zY3JlZW5zaG90IHtcblxuICAgICAgICAmID4gKiB7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICB9XG5cblxuICAgICAgICAuY29udCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDBweCAycHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMnB4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHdpZHRoOiAzMTVweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5ob3ZlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwwLjE1KTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltYWdlcy9zbXRwL3pvb20uc3ZnJyk7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiA1MHB4O1xuICAgICAgICAgICAgICAgIGJvcmRlcjogNXB4IHNvbGlkICNmZmZmZmY7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOmhvdmVyIC5ob3ZlciB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHVsIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgICAgIG1hcmdpbjogMCAwIDAgMzBweDtcbiAgICAgICAgICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMzUwcHgpO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBtZWRpYShcIjw9cGhvbmVcIikge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMjBweCAwIDAgMTVweDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsaSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltYWdlcy9hcnJvdy1yaWdodC5zdmcnKTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgM3B4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgIG1hcmdpbjogMTZweCAwO1xuICAgICAgICAgICAgcGFkZGluZzogMCAwIDAgMjRweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zdGVwIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGOTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0U1RTVFNTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDVweCAwcHggcmdiYSgwLDAsMCwwLjA1KTtcbiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAwcHggcmdiYSgwLDAsMCwwLjA1KTtcbiAgICAgICAgLW1vei1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAwcHggcmdiYSgwLDAsMCwwLjA1KTtcbiAgICAgICAgbWFyZ2luOiAwIDAgMjVweCAwO1xuXG4gICAgICAgICYgPiAqIHtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIH1cblxuICAgICAgICAubnVtIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5sb2FkZXIge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiBsb2FkOCAxLjFzIGluZmluaXRlIGxpbmVhcjtcbiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBsb2FkOCAxLjFzIGluZmluaXRlIGxpbmVhcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICM5Njk2OTY7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCAjOTY5Njk2O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICM5Njk2OTY7XG4gICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICM0MDQwNDA7XG4gICAgICAgICAgICBtYXJnaW46IC01NHB4IGF1dG8gMDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB0ZXh0LWluZGVudDogLTk5OTllbTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICAgICAgICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAuM3M7XG5cbiAgICAgICAgICAgICYsICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICB3aWR0aDogNTBweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkaXYge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMTA0cHgpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgICAgIHBhZGRpbmc6IDMwcHg7XG4gICAgICAgIH1cblxuICAgICAgICBoMiB7XG4gICAgICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBtZWRpYShcIjw9cGhvbmVcIikge1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZXJyb3Ige1xuICAgICAgICAgICAgY29sb3I6ICNiOTc0NzQ7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmxpbmsge1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJ1dHRvbiB7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6ICRtZWRpdW0td2VpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEzcHg7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAuM3M7XG5cbiAgICAgICAgICAgICYuZ3JleSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y2RjZGNjtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkZGRkO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjOUZBNUFBO1xuICAgICAgICAgICAgICAgIHRleHQtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuaGlkZGVuIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgLjNzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmdyZXkge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcblxuICAgICN3cGZvcm1zLWFkbWluLXNtdHAge1xuXG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBtYXJnaW46IDAgMjBweDtcblxuICAgICAgICAuc2NyZWVuc2hvdCB7XG5cbiAgICAgICAgICAgIC5jb250IHtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgICAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDBweCAycHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDJweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDIwcHggMCAwIDE1cHg7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJ1dHRvbiB7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZDgge1xuXG4gICAgMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICB9XG5cbiAgICAxMDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyBsb2FkOCB7XG5cbiAgICAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgfVxufVxuIiwiJGJyZWFrcG9pbnRzOiAoXG4gICAgJ3hzLXBob25lJzogMzIwcHgsXG4gICAgJ3Bob25lJzogNjAwcHgsXG4gICAgJ2lwYWQnOiA3NjhweCxcbiAgICAndGFibGV0JzogNzgycHgsXG4gICAgJ2Rlc2t0b3AnOiA5NjBweFxuKTtcblxuJG1lZGl1bS13ZWlnaHQ6IDYwMDtcbiJdfQ== */ diff --git a/assets/css/wp-mail-logging-smtp.css.map b/assets/css/wp-mail-logging-smtp.css.map new file mode 100644 index 00000000..a799f420 --- /dev/null +++ b/assets/css/wp-mail-logging-smtp.css.map @@ -0,0 +1,12 @@ +{ + "version": 3, + "file": "wp-mail-logging-smtp.css", + "sources": [ + "wp-mail-logging-smtp.scss", + "_include-media.scss", + "_variables.scss", + "_general.scss" + ], + "names": [], + "mappings": "AGCA,AAAA,UAAU,CAAC;EACP,YAAY,EAAE,YAAY;EAC1B,QAAQ,EAAE,QAAQ,GAKrB;EFuiBA,MAAM,EAAE,SAAS,EAAE,KAAK;IE9iBzB,AAAA,UAAU,CAAC;MAKH,WAAW,EAAE,IAAI,GAExB;;AFuiBA,MAAM,EAAE,SAAS,EAAE,KAAK;EEriBzB,AAAA,OAAO,CAAC;IAEA,WAAW,EAAE,CAAC,GAErB;;AHRD,AAAA,2BAA2B,CAAC;EACxB,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,MAAM;EACd,SAAS,EAAE,KAAK,GAyOnB;EC6TA,MAAM,EAAE,SAAS,EAAE,KAAK;IDziBzB,AAAA,2BAA2B,CAAC;MAMpB,KAAK,EAAE,IAAI,GAsOlB;EA5OD,AASI,2BATuB,CASvB,EAAE,EATN,2BAA2B,CASnB,EAAE,CAAC;IACH,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,GAAG,GACnB;EAZL,AAcI,2BAduB,CAcvB,CAAC,EAdL,2BAA2B,CAcpB,CAAC,AAAA,QAAQ,EAdhB,2BAA2B,CAcT,CAAC,AAAA,OAAO,CAAC;IACnB,kBAAkB,EAAE,UAAU;IAC9B,eAAe,EAAE,UAAU;IAC3B,UAAU,EAAE,UAAU,GACzB;EAlBL,AAoBI,2BApBuB,CAoBvB,OAAO,CAAC;IACJ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,IAAI,GACnB;EAxBL,AA0BI,2BA1BuB,CA0BvB,CAAC,CAAC;IACE,SAAS,EAAE,IAAI,GAClB;EA5BL,AA8BI,2BA9BuB,CA8BvB,IAAI,CAAC;IACD,UAAU,EAAE,MAAM,GAoBrB;IAnDL,AAiCQ,2BAjCmB,CA8BvB,IAAI,CAGA,GAAG,CAAC;MACA,aAAa,EAAE,IAAI,GACtB;IAnCT,AAqCQ,2BArCmB,CA8BvB,IAAI,CAOA,EAAE,CAAC;MACC,SAAS,EAAE,IAAI;MACf,aAAa,EAAE,CAAC;MAChB,OAAO,EAAE,CAAC,GACb;IAzCT,AA2CQ,2BA3CmB,CA8BvB,IAAI,CAaA,CAAC,CAAC;MACE,SAAS,EAAE,IAAI;MACf,UAAU,EAAE,IAAI,GACnB;IA9CT,AAgDQ,2BAhDmB,CA8BvB,IAAI,CAkBA,QAAQ,CAAC;MACL,OAAO,EAAE,IAAI,GAChB;EAlDT,AAuDQ,2BAvDmB,CAqDvB,WAAW,GAEH,CAAC,CAAC;IACF,cAAc,EAAE,MAAM,GACzB;EAzDT,AA4DQ,2BA5DmB,CAqDvB,WAAW,CAOP,KAAK,CAAC;IACF,gBAAgB,EAAE,OAAO;IACzB,aAAa,EAAE,GAAG;IAClB,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB;IAC/C,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB;IACpD,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB;IACvD,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,KAAK,GA+Bf;ICqcR,MAAM,EAAE,SAAS,EAAE,KAAK;MDziBzB,AA4DQ,2BA5DmB,CAqDvB,WAAW,CAOP,KAAK,CAAC;QAYE,KAAK,EAAE,IAAI,GA4BlB;IApGT,AA2EY,2BA3Ee,CAqDvB,WAAW,CAOP,KAAK,CAeD,GAAG,CAAC;MACA,SAAS,EAAE,IAAI;MACf,OAAO,EAAE,KAAK,GACjB;IA9Eb,AAgFY,2BAhFe,CAqDvB,WAAW,CAOP,KAAK,CAoBD,MAAM,CAAC;MACH,gBAAgB,EAAE,mBAAgB;MAClC,gBAAgB,EAAE,yBAAyB;MAC3C,iBAAiB,EAAE,SAAS;MAC5B,mBAAmB,EAAE,MAAM;MAC3B,eAAe,EAAE,IAAI;MACrB,MAAM,EAAE,iBAAiB;MACzB,MAAM,EAAE,IAAI;MACZ,IAAI,EAAE,CAAC;MACP,OAAO,EAAE,CAAC;MACV,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,CAAC;MACN,UAAU,EAAE,QAAQ;MACpB,KAAK,EAAE,IAAI,GACd;IA9Fb,AAgGY,2BAhGe,CAqDvB,WAAW,CAOP,KAAK,AAoCA,MAAM,CAAC,MAAM,CAAC;MACX,OAAO,EAAE,CAAC;MACV,UAAU,EAAE,QAAQ,GACvB;EAnGb,AAsGQ,2BAtGmB,CAqDvB,WAAW,CAiDP,EAAE,CAAC;IACC,OAAO,EAAE,YAAY;IACrB,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,UAAU;IAClB,SAAS,EAAE,kBAAkB,GAMhC;ICybR,MAAM,EAAE,SAAS,EAAE,KAAK;MDziBzB,AAsGQ,2BAtGmB,CAqDvB,WAAW,CAiDP,EAAE,CAAC;QAOK,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,IAAI,GAEtB;EAhHT,AAkHQ,2BAlHmB,CAqDvB,WAAW,CA6DP,EAAE,CAAC;IACC,gBAAgB,EAAE,gCAAgC;IAClD,mBAAmB,EAAE,QAAQ;IAC7B,iBAAiB,EAAE,SAAS;IAC5B,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,UAAU,GACtB;EA1HT,AA6HI,2BA7HuB,CA6HvB,KAAK,CAAC;IACF,gBAAgB,EAAE,OAAO;IACzB,MAAM,EAAE,iBAAiB;IACzB,aAAa,EAAE,GAAG;IAClB,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAgB;IAC5C,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAgB;IACpD,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAgB;IACjD,MAAM,EAAE,UAAU,GAmGrB;IAvOL,AAsIQ,2BAtImB,CA6HvB,KAAK,GASG,CAAC,CAAC;MACF,cAAc,EAAE,MAAM,GACzB;IAxIT,AA0IQ,2BA1ImB,CA6HvB,KAAK,CAaD,IAAI,CAAC;MACD,OAAO,EAAE,YAAY;MACrB,QAAQ,EAAE,QAAQ;MAClB,KAAK,EAAE,KAAK;MACZ,MAAM,EAAE,IAAI;MACZ,UAAU,EAAE,MAAM,GACrB;IAhJT,AAkJQ,2BAlJmB,CA6HvB,KAAK,CAqBD,OAAO,CAAC;MACJ,SAAS,EAAE,0BAA0B;MACrC,iBAAiB,EAAE,0BAA0B;MAC7C,gBAAgB,EAAE,WAAW;MAC7B,UAAU,EAAE,iBAAiB;MAC7B,YAAY,EAAE,iBAAiB;MAC/B,aAAa,EAAE,iBAAiB;MAChC,WAAW,EAAE,iBAAiB;MAC9B,MAAM,EAAE,YAAY;MACpB,OAAO,EAAE,CAAC;MACV,QAAQ,EAAE,QAAQ;MAClB,WAAW,EAAE,OAAO;MACpB,SAAS,EAAE,aAAa;MACxB,iBAAiB,EAAE,aAAa;MAChC,aAAa,EAAE,aAAa;MAC5B,UAAU,EAAE,OAAO,GAQtB;MAzKT,AAmKY,2BAnKe,CA6HvB,KAAK,CAqBD,OAAO,EAlJf,2BAA2B,CA6HvB,KAAK,CAqBD,OAAO,AAiBC,MAAM,CAAC;QACP,aAAa,EAAE,GAAG;QAClB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI,GACf;IAxKb,AA2KQ,2BA3KmB,CA6HvB,KAAK,CA8CD,GAAG,CAAC;MACA,aAAa,EAAE,WAAW;MAC1B,OAAO,EAAE,YAAY;MACrB,KAAK,EAAE,kBAAkB;MACzB,gBAAgB,EAAE,OAAO;MACzB,OAAO,EAAE,IAAI,GAChB;IAjLT,AAmLQ,2BAnLmB,CA6HvB,KAAK,CAsDD,EAAE,CAAC;MACC,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,IAAI;MACjB,UAAU,EAAE,CAAC;MACb,aAAa,EAAE,IAAI,GAKtB;MC6WR,MAAM,EAAE,SAAS,EAAE,KAAK;QDziBzB,AAmLQ,2BAnLmB,CA6HvB,KAAK,CAsDD,EAAE,CAAC;UAOK,WAAW,EAAE,IAAI,GAExB;IA5LT,AA8LQ,2BA9LmB,CA6HvB,KAAK,CAiED,CAAC,CAAC;MACE,SAAS,EAAE,IAAI,GAClB;IAhMT,AAkMQ,2BAlMmB,CA6HvB,KAAK,CAqED,MAAM,CAAC;MACH,KAAK,EAAE,OAAO;MACd,SAAS,EAAE,IAAI;MACf,aAAa,EAAE,CAAC,GACnB;IAtMT,AAwMQ,2BAxMmB,CA6HvB,KAAK,CA2ED,KAAK,CAAC;MACF,eAAe,EAAE,IAAI,GACxB;IA1MT,AA4MQ,2BA5MmB,CA6HvB,KAAK,CA+ED,OAAO,CAAC;MACJ,UAAU,EAAE,IAAI;MAChB,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,GAAG;MAChB,MAAM,EAAE,IAAI;MACZ,WAAW,EAAE,IAAI;MACjB,SAAS,EAAE,KAAK;MAChB,OAAO,EAAE,IAAI;MACb,UAAU,EAAE,MAAM;MAClB,UAAU,EAAE,OAAO,GAYtB;MAjOT,AAuNY,2BAvNe,CA6HvB,KAAK,CA+ED,OAAO,AAWF,KAAK,CAAC;QACH,UAAU,EAAE,OAAO;QACnB,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,IAAI,GACpB;MA5Nb,AA8NY,2BA9Ne,CA6HvB,KAAK,CA+ED,OAAO,AAkBF,SAAS,CAAC;QACP,MAAM,EAAE,OAAO,GAClB;IAhOb,AAmOQ,2BAnOmB,CA6HvB,KAAK,CAsGD,OAAO,CAAC;MACJ,OAAO,EAAE,CAAC;MACV,UAAU,EAAE,OAAO,GACtB;EAtOT,AAyOI,2BAzOuB,CAyOvB,KAAK,CAAC;IACF,OAAO,EAAE,GAAG,GACf;;AAGL,MAAM,EAAE,SAAS,EAAE,KAAK;EAEpB,AAAA,mBAAmB,CAAC;IAEhB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM,GAoBjB;IAvBD,AAOQ,mBAPW,CAKf,WAAW,CAEP,KAAK,CAAC;MACF,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB;MAC/C,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB;MACpD,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB;MACvD,KAAK,EAAE,IAAI,GACd;IAZT,AAcQ,mBAdW,CAKf,WAAW,CASP,EAAE,CAAC;MACC,MAAM,EAAE,aAAa;MACrB,SAAS,EAAE,IAAI,GAClB;IAjBT,AAoBI,mBApBe,CAoBf,OAAO,CAAC;MACJ,WAAW,EAAE,MAAM,GACtB;;AAIT,kBAAkB,CAAlB,KAAkB;EAEd,EAAE;IACE,iBAAiB,EAAE,YAAY;IAC/B,SAAS,EAAE,YAAY;EAG3B,IAAI;IACA,iBAAiB,EAAE,cAAc;IACjC,SAAS,EAAE,cAAc;;AAIjC,UAAU,CAAV,KAAU;EAEN,EAAE;IACE,iBAAiB,EAAE,YAAY;IAC/B,SAAS,EAAE,YAAY;EAG3B,IAAI;IACA,iBAAiB,EAAE,cAAc;IACjC,SAAS,EAAE,cAAc" +} \ No newline at end of file diff --git a/assets/css/wp-mail-logging-smtp.min.css b/assets/css/wp-mail-logging-smtp.min.css new file mode 100644 index 00000000..1bbbe388 --- /dev/null +++ b/assets/css/wp-mail-logging-smtp.min.css @@ -0,0 +1 @@ +#wpcontent{padding-left:0 !important;position:relative}@media(max-width: 600px){#wpcontent{padding-top:46px}}@media(max-width: 600px){#wpbody{padding-top:0}}#wp-mail-logging-admin-smtp{color:#50575e;margin:0 auto;max-width:700px}@media(max-width: 600px){#wp-mail-logging-admin-smtp{width:auto}}#wp-mail-logging-admin-smtp h1,#wp-mail-logging-admin-smtp h2{color:#1e2327;font-weight:600}#wp-mail-logging-admin-smtp *,#wp-mail-logging-admin-smtp *::before,#wp-mail-logging-admin-smtp *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wp-mail-logging-admin-smtp section{clear:both;margin:50px 0;text-align:left}#wp-mail-logging-admin-smtp p{font-size:15px}#wp-mail-logging-admin-smtp .top{text-align:center}#wp-mail-logging-admin-smtp .top img{margin-bottom:30px}#wp-mail-logging-admin-smtp .top h1{font-size:26px;margin-bottom:0;padding:0}#wp-mail-logging-admin-smtp .top p{font-size:17px;margin-top:10px}#wp-mail-logging-admin-smtp .top .updated{display:none}#wp-mail-logging-admin-smtp .screenshot>*{vertical-align:middle}#wp-mail-logging-admin-smtp .screenshot .cont{background-color:#fff;border-radius:3px;box-shadow:0px 2px 4px 0px rgba(0,0,0,.05);-moz-box-shadow:0px 2px 4px 0px rgba(0,0,0,.05);-webkit-box-shadow:0px 2px 4px 0px rgba(0,0,0,.05);display:inline-block;padding:5px;position:relative;width:315px}@media(max-width: 600px){#wp-mail-logging-admin-smtp .screenshot .cont{width:auto}}#wp-mail-logging-admin-smtp .screenshot .cont img{max-width:100%;display:block}#wp-mail-logging-admin-smtp .screenshot .cont .hover{background-color:rgba(0,0,0,.15);background-image:url("../images/smtp/zoom.svg");background-repeat:no-repeat;background-position:center;background-size:50px;border:5px solid #fff;height:100%;left:0;opacity:0;position:absolute;top:0;transition:all .3s;width:100%}#wp-mail-logging-admin-smtp .screenshot .cont:hover .hover{opacity:1;transition:all .3s}#wp-mail-logging-admin-smtp .screenshot ul{display:inline-block;list-style-type:none;margin:0 0 0 30px;max-width:calc(100% - 350px)}@media(max-width: 600px){#wp-mail-logging-admin-smtp .screenshot ul{margin:20px 0 0 15px;max-width:100%}}#wp-mail-logging-admin-smtp .screenshot li{background-image:url("../images/arrow-right.svg");background-position:left 3px;background-repeat:no-repeat;background-size:14px;font-size:15px;margin:16px 0;padding:0 0 0 24px}#wp-mail-logging-admin-smtp .step{background-color:#f9f9f9;border:1px solid #e5e5e5;border-radius:4px;box-shadow:0px 2px 5px 0px rgba(0,0,0,.05);-webkit-box-shadow:0px 2px 5px 0px rgba(0,0,0,.05);-moz-box-shadow:0px 2px 5px 0px rgba(0,0,0,.05);margin:0 0 25px 0}#wp-mail-logging-admin-smtp .step>*{vertical-align:middle}#wp-mail-logging-admin-smtp .step .num{display:inline-block;position:relative;width:100px;height:50px;text-align:center}#wp-mail-logging-admin-smtp .step .loader{animation:load8 1.1s infinite linear;-webkit-animation:load8 1.1s infinite linear;background-color:rgba(0,0,0,0);border-top:4px solid #969696;border-right:4px solid #969696;border-bottom:4px solid #969696;border-left:4px solid #404040;margin:-54px auto 0;opacity:1;position:relative;text-indent:-9999em;transform:translateZ(0);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transition:all .3s}#wp-mail-logging-admin-smtp .step .loader,#wp-mail-logging-admin-smtp .step .loader:after{border-radius:50%;display:block;width:50px;height:50px}#wp-mail-logging-admin-smtp .step div{border-radius:0 4px 4px 0;display:inline-block;width:calc(100% - 104px);background-color:#fff;padding:30px}#wp-mail-logging-admin-smtp .step h2{font-size:24px;line-height:22px;margin-top:0;margin-bottom:15px}@media(max-width: 600px){#wp-mail-logging-admin-smtp .step h2{line-height:28px}}#wp-mail-logging-admin-smtp .step p{font-size:16px}#wp-mail-logging-admin-smtp .step .error{color:#b97474;font-size:14px;margin-bottom:0}#wp-mail-logging-admin-smtp .step .link{text-decoration:none}#wp-mail-logging-admin-smtp .step .button{box-shadow:none;font-size:15px;font-weight:600;height:auto;line-height:13px;min-width:200px;padding:12px;text-align:center;transition:all .3s}#wp-mail-logging-admin-smtp .step .button.grey{background:#f6f6f6;border:1px solid #ddd;color:#9fa5aa;text-shadow:none}#wp-mail-logging-admin-smtp .step .button.disabled{cursor:default}#wp-mail-logging-admin-smtp .step .hidden{opacity:0;transition:all .3s}#wp-mail-logging-admin-smtp .grey{opacity:.5}@media(max-width: 767px){#wpforms-admin-smtp{width:auto;margin:0 20px}#wpforms-admin-smtp .screenshot .cont{box-shadow:0px 2px 4px 0px rgba(0,0,0,.05);-moz-box-shadow:0px 2px 4px 0px rgba(0,0,0,.05);-webkit-box-shadow:0px 2px 4px 0px rgba(0,0,0,.05);width:auto}#wpforms-admin-smtp .screenshot ul{margin:20px 0 0 15px;max-width:100%}#wpforms-admin-smtp .button{white-space:normal}}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} \ No newline at end of file diff --git a/assets/css/wp-mail-logging-smtp.scss b/assets/css/wp-mail-logging-smtp.scss new file mode 100644 index 00000000..e4c60201 --- /dev/null +++ b/assets/css/wp-mail-logging-smtp.scss @@ -0,0 +1,297 @@ +// SMTP - ?page=wpml_plugin_log&tab=smtp + +@import "include-media"; +@import "variables"; +@import "general"; + +#wp-mail-logging-admin-smtp { + color: #50575E; + margin: 0 auto; + max-width: 700px; + + @include media("<=phone") { + width: auto; + } + + h1, h2 { + color: #1E2327; + font-weight: $medium-weight; + } + + *, *::before, *::after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + section { + clear: both; + margin: 50px 0; + text-align: left; + } + + p { + font-size: 15px; + } + + .top { + text-align: center; + + img { + margin-bottom: 30px; + } + + h1 { + font-size: 26px; + margin-bottom: 0; + padding: 0; + } + + p { + font-size: 17px; + margin-top: 10px; + } + + .updated { + display: none; + } + } + + .screenshot { + + & > * { + vertical-align: middle; + } + + + .cont { + background-color: #ffffff; + border-radius: 3px; + box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + display: inline-block; + padding: 5px; + position: relative; + width: 315px; + + @include media("<=phone") { + width: auto; + } + + img { + max-width: 100%; + display: block; + } + + .hover { + background-color: rgba(0,0,0,0.15); + background-image: url('../images/smtp/zoom.svg'); + background-repeat: no-repeat; + background-position: center; + background-size: 50px; + border: 5px solid #ffffff; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + transition: all 0.3s; + width: 100%; + } + + &:hover .hover { + opacity: 1; + transition: all 0.3s; + } + } + + ul { + display: inline-block; + list-style-type: none; + margin: 0 0 0 30px; + max-width: calc(100% - 350px); + + @include media("<=phone") { + margin: 20px 0 0 15px; + max-width: 100%; + } + } + + li { + background-image: url('../images/arrow-right.svg'); + background-position: left 3px; + background-repeat: no-repeat; + background-size: 14px; + font-size: 15px; + margin: 16px 0; + padding: 0 0 0 24px; + } + } + + .step { + background-color: #F9F9F9; + border: 1px solid #E5E5E5; + border-radius: 4px; + box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.05); + -webkit-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.05); + -moz-box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.05); + margin: 0 0 25px 0; + + & > * { + vertical-align: middle; + } + + .num { + display: inline-block; + position: relative; + width: 100px; + height: 50px; + text-align: center; + } + + .loader { + animation: load8 1.1s infinite linear; + -webkit-animation: load8 1.1s infinite linear; + background-color: transparent; + border-top: 4px solid #969696; + border-right: 4px solid #969696; + border-bottom: 4px solid #969696; + border-left: 4px solid #404040; + margin: -54px auto 0; + opacity: 1; + position: relative; + text-indent: -9999em; + transform: translateZ(0); + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transition: all .3s; + + &, &:after { + border-radius: 50%; + display: block; + width: 50px; + height: 50px; + } + } + + div { + border-radius: 0 4px 4px 0; + display: inline-block; + width: calc(100% - 104px); + background-color: #ffffff; + padding: 30px; + } + + h2 { + font-size: 24px; + line-height: 22px; + margin-top: 0; + margin-bottom: 15px; + + @include media("<=phone") { + line-height: 28px; + } + } + + p { + font-size: 16px; + } + + .error { + color: #b97474; + font-size: 14px; + margin-bottom: 0; + } + + .link { + text-decoration: none; + } + + .button { + box-shadow: none; + font-size: 15px; + font-weight: $medium-weight; + height: auto; + line-height: 13px; + min-width: 200px; + padding: 12px; + text-align: center; + transition: all .3s; + + &.grey { + background: #F6F6F6; + border: 1px solid #dddddd; + color: #9FA5AA; + text-shadow: none; + } + + &.disabled { + cursor: default; + } + } + + .hidden { + opacity: 0; + transition: all .3s; + } + } + + .grey { + opacity: 0.5; + } +} + +@media (max-width: 767px) { + + #wpforms-admin-smtp { + + width: auto; + margin: 0 20px; + + .screenshot { + + .cont { + box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.05); + width: auto; + } + + ul { + margin: 20px 0 0 15px; + max-width: 100%; + } + } + + .button { + white-space: normal; + } + } +} + +@-webkit-keyframes load8 { + + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes load8 { + + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} diff --git a/assets/icon-128x128.jpg b/assets/icon-128x128.jpg deleted file mode 100644 index f12602af..00000000 Binary files a/assets/icon-128x128.jpg and /dev/null differ diff --git a/assets/icon-256x256.jpg b/assets/icon-256x256.jpg deleted file mode 100644 index 40a9c134..00000000 Binary files a/assets/icon-256x256.jpg and /dev/null differ diff --git a/images/.gitignore b/assets/images/.gitignore similarity index 100% rename from images/.gitignore rename to assets/images/.gitignore diff --git a/assets/images/arrow-right-plain-icon.svg b/assets/images/arrow-right-plain-icon.svg new file mode 100644 index 00000000..13c00c28 --- /dev/null +++ b/assets/images/arrow-right-plain-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/arrow-right.svg b/assets/images/arrow-right.svg new file mode 100644 index 00000000..22c60517 --- /dev/null +++ b/assets/images/arrow-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/icon_resend.svg b/assets/images/icon_resend.svg new file mode 100644 index 00000000..07204cf0 --- /dev/null +++ b/assets/images/icon_resend.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/icon_trash.svg b/assets/images/icon_trash.svg new file mode 100644 index 00000000..af7d6784 --- /dev/null +++ b/assets/images/icon_trash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/icon_view.svg b/assets/images/icon_view.svg new file mode 100644 index 00000000..0505447a --- /dev/null +++ b/assets/images/icon_view.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/logo.png b/assets/images/logo.png new file mode 100644 index 00000000..ae3a6f1d Binary files /dev/null and b/assets/images/logo.png differ diff --git a/assets/images/logo@2x.png b/assets/images/logo@2x.png new file mode 100644 index 00000000..e687bf1b Binary files /dev/null and b/assets/images/logo@2x.png differ diff --git a/assets/images/plane-bg.png b/assets/images/plane-bg.png new file mode 100644 index 00000000..f4265239 Binary files /dev/null and b/assets/images/plane-bg.png differ diff --git a/assets/images/plane-bg@2x.png b/assets/images/plane-bg@2x.png new file mode 100644 index 00000000..ae8c5091 Binary files /dev/null and b/assets/images/plane-bg@2x.png differ diff --git a/assets/images/plus-icon.svg b/assets/images/plus-icon.svg new file mode 100644 index 00000000..1e3ba4c5 --- /dev/null +++ b/assets/images/plus-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/prod-edu/archive-thumbnail.png b/assets/images/prod-edu/archive-thumbnail.png new file mode 100644 index 00000000..504ae340 Binary files /dev/null and b/assets/images/prod-edu/archive-thumbnail.png differ diff --git a/assets/images/prod-edu/archive.png b/assets/images/prod-edu/archive.png new file mode 100644 index 00000000..383a7d2a Binary files /dev/null and b/assets/images/prod-edu/archive.png differ diff --git a/assets/images/prod-edu/reports-thumbnail.png b/assets/images/prod-edu/reports-thumbnail.png new file mode 100644 index 00000000..04f23dd0 Binary files /dev/null and b/assets/images/prod-edu/reports-thumbnail.png differ diff --git a/assets/images/prod-edu/reports.png b/assets/images/prod-edu/reports.png new file mode 100644 index 00000000..84c53418 Binary files /dev/null and b/assets/images/prod-edu/reports.png differ diff --git a/assets/images/prod-edu/single-thumbnail.png b/assets/images/prod-edu/single-thumbnail.png new file mode 100644 index 00000000..9c5bec21 Binary files /dev/null and b/assets/images/prod-edu/single-thumbnail.png differ diff --git a/assets/images/prod-edu/single.png b/assets/images/prod-edu/single.png new file mode 100644 index 00000000..4775f967 Binary files /dev/null and b/assets/images/prod-edu/single.png differ diff --git a/assets/images/sep.png b/assets/images/sep.png new file mode 100644 index 00000000..6bdf3ea7 Binary files /dev/null and b/assets/images/sep.png differ diff --git a/assets/images/smtp/screenshot-full.png b/assets/images/smtp/screenshot-full.png new file mode 100644 index 00000000..9b3f2c2f Binary files /dev/null and b/assets/images/smtp/screenshot-full.png differ diff --git a/assets/images/smtp/screenshot-tnail.png b/assets/images/smtp/screenshot-tnail.png new file mode 100644 index 00000000..116755f3 Binary files /dev/null and b/assets/images/smtp/screenshot-tnail.png differ diff --git a/assets/images/smtp/step-1.svg b/assets/images/smtp/step-1.svg new file mode 100644 index 00000000..5d7d8349 --- /dev/null +++ b/assets/images/smtp/step-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/smtp/step-2.svg b/assets/images/smtp/step-2.svg new file mode 100644 index 00000000..a085ec3b --- /dev/null +++ b/assets/images/smtp/step-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/smtp/step-complete.svg b/assets/images/smtp/step-complete.svg new file mode 100644 index 00000000..4f2ac9d4 --- /dev/null +++ b/assets/images/smtp/step-complete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/smtp/wpmailsmtp-logo.png b/assets/images/smtp/wpmailsmtp-logo.png new file mode 100644 index 00000000..1ee7877d Binary files /dev/null and b/assets/images/smtp/wpmailsmtp-logo.png differ diff --git a/assets/images/smtp/wpmailsmtp-logo@2x.png b/assets/images/smtp/wpmailsmtp-logo@2x.png new file mode 100644 index 00000000..350da04e Binary files /dev/null and b/assets/images/smtp/wpmailsmtp-logo@2x.png differ diff --git a/assets/images/smtp/zoom.svg b/assets/images/smtp/zoom.svg new file mode 100644 index 00000000..ea451726 --- /dev/null +++ b/assets/images/smtp/zoom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/zoom.svg b/assets/images/zoom.svg new file mode 100644 index 00000000..611e4d15 --- /dev/null +++ b/assets/images/zoom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/js/.gitignore b/assets/js/.gitignore similarity index 100% rename from js/.gitignore rename to assets/js/.gitignore diff --git a/assets/js/modal.js b/assets/js/modal.js new file mode 100644 index 00000000..0e0fd96b --- /dev/null +++ b/assets/js/modal.js @@ -0,0 +1,184 @@ +/* global wp_mail_logging_admin_logs */ + +jQuery(function ($) { + + var wpml = {}; + + wpml.modal = { + self : this, + id : undefined, + selectedFormat: undefined, + init: function () { + // Initially load the preferred format. + var $selected = $( '.wp-mail-logging-active-format' ); + var initialFormat = wpml_modal_ajax.default_format; + + if ( $selected.length > 0 && $selected.data( 'format' ) ) { + initialFormat = $selected.data( 'format' ); + } + + wpml.modal.setSelectedFormat( initialFormat ); + + wpml.modal.bindActions(); + }, + bindActions: function() { + // Change format action. + $( document ).on( 'click', '.wp-mail-logging-modal-format', function( e ) { + e.preventDefault(); + + var format = $( this ).data( 'format' ); + + if ( ! format ) { + return; + } + + wpml.modal.setSelectedFormat( format ); + }); + + $( document ).on( 'click', '.wp-mail-logging-html-error-notice > .notice-dismiss', function( e ) { + e.preventDefault(); + + $noticeElem = $( this ).parent( '.wp-mail-logging-html-error-notice' ); + + if ( $noticeElem.length <= 0 ) { + return; + } + + $noticeElem.fadeTo( 100, 0, function() { + $noticeElem.slideUp( 100, function() { + $noticeElem.remove(); + }); + }); + } ); + }, + clear: function () { + $('#wp-mail-logging-modal-content-body-content').html(''); + }, + set: function( $value ) { + $( '.wp-mail-logging-modal-format' ).removeClass( 'wp-mail-logging-active-format' ); + $( `#wp-mail-logging-modal-format-${ wpml.modal.selectedFormat }` ).addClass( 'wp-mail-logging-active-format' ); + + $('#wp-mail-logging-modal-content-body-content').html( $value ); + }, + show: function () { + // Work around to fix the education banner not fading immediately due to position being relative. + $( '#wp-mail-logging-product-education-email-logs-bottom' ).css( 'z-index', -1 ); + + $('#wp-mail-logging-modal-wrap').fadeIn(); + }, + hide: function () { + $('#wp-mail-logging-modal-wrap').fadeOut( 400, function() { + $( '#wp-mail-logging-product-education-email-logs-bottom' ).css( 'z-index', '' ); + } ); + }, + setSelectedFormat: function( newFormat ) { + wpml.modal.selectedFormat = newFormat; + jQuery.ajax({ + type: 'POST', + url: ajaxurl, + data: { + 'action': wpml_modal_ajax.action, + '_ajax_nonce': wpml_modal_ajax.nonce, + 'id': wpml.modal.id, + 'format': wpml.modal.selectedFormat + }, + success: wpml.modal.ajaxResponse, + error: wpml.modal.ajaxError + }); + }, + ajaxResponse: function( response_data, textStatus, XMLHttpRequest ) { + if (response_data.success) { + wpml.modal.set(response_data.data); + } else { + wpml.modal.set("Error (" + response_data.data.code + "): '" + response_data.data.message + "'"); + } + }, + ajaxError: function (XMLHttpRequest, textStatus, errorThrown) { + wpml.modal.set(errorThrown); + } + }; + + var utils = { + /** + * Update query string in URL. + * + * @since 1.11.0 + */ + updateQueryString: function( key, value, url ) { + + var re = new RegExp( '([?&])' + key + '=.*?(&|#|$)(.*)', 'gi' ), + hash; + + if ( re.test( url ) ) { + if ( typeof value !== 'undefined' && value !== null ) + return url.replace( re, '$1' + key + '=' + value + '$2$3' ); + else { + hash = url.split( '#' ); + url = hash[0].replace( re, '$1$3' ).replace( /(&|\?)$/, '' ); + if ( typeof hash[1] !== 'undefined' && hash[1] !== null ) + url += '#' + hash[1]; + return url; + } + } else { + if ( typeof value !== 'undefined' && value !== null ) { + var separator = url.indexOf( '?' ) !== -1 ? '&' : '?'; + hash = url.split( '#' ); + url = hash[0] + separator + key + '=' + value; + if ( typeof hash[1] !== 'undefined' && hash[1] !== null ) + url += '#' + hash[1]; + return url; + } + else + return url; + } + } + }; + + $( '.wp-mail-logging-action-item' ).click( function ( e ) { + e.preventDefault(); + + if ( typeof wp_mail_logging_admin_logs === 'undefined' || + typeof wp_mail_logging_admin_logs.single_log_action_nonce === 'undefined' || + typeof wp_mail_logging_admin_logs.single_log_action_key === 'undefined' || + typeof wp_mail_logging_admin_logs.admin_email_logs_url === 'undefined' + ) { + return; + } + + var $this = $( this ), + $parent = $this.parent( '.wp-mail-logging-action-column' ); + + if ( $parent.length <= 0 ) { + return; + } + + var mailId = $parent.data( 'mail-id' ), + action = $this.data( 'action' ); + + if ( ! mailId || ! action ) { + return; + } + + if ( action === 'resend' || action === 'delete' ) { + + var redirectUrl = utils.updateQueryString( 'action', action, wp_mail_logging_admin_logs.admin_email_logs_url ); + redirectUrl = utils.updateQueryString( 'email_log_id', mailId, redirectUrl ); + redirectUrl = utils.updateQueryString( wp_mail_logging_admin_logs.single_log_action_key, wp_mail_logging_admin_logs.single_log_action_nonce, redirectUrl ); + + window.location.href = redirectUrl; + return; + } + + wpml.modal.id = mailId; + wpml.modal.init(); + wpml.modal.show(); + }); + + $( '.wp-mail-logging-modal-close' ).click( function ( e ) { + e.preventDefault(); + wpml.modal.hide(); + }); + $(document).keyup(function(e) { + if (e.keyCode === 27) wpml.modal.hide(); + }); +}); diff --git a/assets/js/modal.min.js b/assets/js/modal.min.js new file mode 100644 index 00000000..3c45a4d1 --- /dev/null +++ b/assets/js/modal.min.js @@ -0,0 +1 @@ +jQuery(function(l){var i={};i.modal={self:this,id:void 0,selectedFormat:void 0,init:function(){var o=l(".wp-mail-logging-active-format"),a=wpml_modal_ajax.default_format;0 .notice-dismiss",function(o){o.preventDefault(),($noticeElem=l(this).parent(".wp-mail-logging-html-error-notice")).length<=0||$noticeElem.fadeTo(100,0,function(){$noticeElem.slideUp(100,function(){$noticeElem.remove()})})})},clear:function(){l("#wp-mail-logging-modal-content-body-content").html("")},set:function(o){l(".wp-mail-logging-modal-format").removeClass("wp-mail-logging-active-format"),l("#wp-mail-logging-modal-format-"+i.modal.selectedFormat).addClass("wp-mail-logging-active-format"),l("#wp-mail-logging-modal-content-body-content").html(o)},show:function(){l("#wp-mail-logging-product-education-email-logs-bottom").css("z-index",-1),l("#wp-mail-logging-modal-wrap").fadeIn()},hide:function(){l("#wp-mail-logging-modal-wrap").fadeOut(400,function(){l("#wp-mail-logging-product-education-email-logs-bottom").css("z-index","")})},setSelectedFormat:function(o){i.modal.selectedFormat=o,jQuery.ajax({type:"POST",url:ajaxurl,data:{action:wpml_modal_ajax.action,_ajax_nonce:wpml_modal_ajax.nonce,id:i.modal.id,format:i.modal.selectedFormat},success:i.modal.ajaxResponse,error:i.modal.ajaxError})},ajaxResponse:function(o,a,l){o.success?i.modal.set(o.data):i.modal.set("Error ("+o.data.code+"): '"+o.data.message+"'")},ajaxError:function(o,a,l){i.modal.set(l)}};var n=function(o,a,l){var i,n=new RegExp("([?&])"+o+"=.*?(&|#|$)(.*)","gi");return n.test(l)?null!=a?l.replace(n,"$1"+o+"="+a+"$2$3"):(l=(i=l.split("#"))[0].replace(n,"$1$3").replace(/(&|\?)$/,""),void 0!==i[1]&&null!==i[1]&&(l+="#"+i[1]),l):(null!=a&&(n=-1!==l.indexOf("?")?"&":"?",l=(i=l.split("#"))[0]+n+o+"="+a,void 0!==i[1])&&null!==i[1]&&(l+="#"+i[1]),l)};l(".wp-mail-logging-action-item").click(function(o){var a;o.preventDefault(),"undefined"==typeof wp_mail_logging_admin_logs||void 0===wp_mail_logging_admin_logs.single_log_action_nonce||void 0===wp_mail_logging_admin_logs.single_log_action_key||void 0===wp_mail_logging_admin_logs.admin_email_logs_url||(a=(o=l(this)).parent(".wp-mail-logging-action-column")).length<=0||(a=a.data("mail-id"),o=o.data("action"),a&&o&&("resend"===o||"delete"===o?(o=n("action",o,wp_mail_logging_admin_logs.admin_email_logs_url),o=n("email_log_id",a,o),o=n(wp_mail_logging_admin_logs.single_log_action_key,wp_mail_logging_admin_logs.single_log_action_nonce,o),window.location.href=o):(i.modal.id=a,i.modal.init(),i.modal.show())))}),l(".wp-mail-logging-modal-close").click(function(o){o.preventDefault(),i.modal.hide()}),l(document).keyup(function(o){27===o.keyCode&&i.modal.hide()})}); \ No newline at end of file diff --git a/assets/js/wp-mail-logging-admin-logs.js b/assets/js/wp-mail-logging-admin-logs.js new file mode 100644 index 00000000..0ce09ec3 --- /dev/null +++ b/assets/js/wp-mail-logging-admin-logs.js @@ -0,0 +1,99 @@ +/* global wp_mail_logging_admin_logs */ + +'use strict'; + +var WPMailLogging = window.WPMailLogging || {}; +WPMailLogging.Admin = WPMailLogging.Admin || {}; + +WPMailLogging.Admin.Logs = WPMailLogging.Admin.Logs || ( function( document, window, $ ) { + + var app = { + /** + * Start the engine. DOM is not ready yet, use only to init something. + * + * @since 1.11.0 + */ + init: function() { + + $( app.ready ); + }, + + /** + * DOM is fully loaded. + * + * @since 1.11.0 + */ + ready: function() { + + // If there are screen options we have to move them. + $( '#screen-meta-links, #screen-meta' ).prependTo( '#wp-mail-logging-page-header-temp' ).show(); + + app.bindActions(); + }, + + /** + * Bind all actions/events. + * + * @since 1.11.0 + */ + bindActions: function() { + + $( document ).on( 'click', '.wp-mail-logging-product-education-dismiss', app.productEducationDismiss ); + }, + + /** + * Event triggered when product education is dismissed. + * + * @since 1.11.0 + * + * @param {Event} e Event object. + */ + productEducationDismiss: function( e ) { + + e.preventDefault(); + + // Find the parent container. + var $parent = $( this ).parents( '.wp-mail-logging-product-education' ).first(); + + if ( $parent.length <= 0 ) { + return; + } + + var dataProductEducationID = $parent.data( 'productEducationId' ); + var dataNonce = $parent.data( 'nonce' ); + + if ( ! dataProductEducationID || ! dataNonce ) { + return; + } + + // Submit AJAX. + $.post( + wp_mail_logging_admin_logs.ajaxurl, + { + action: 'wp_mail_logging_product_education_dismiss', + nonce: dataNonce, + productEducationID: dataProductEducationID + }, + function( response ) { + + if ( ! response.success ) { + alert( response.data ); + return; + } + + $parent.fadeTo( 100, 0, function() { + $parent.slideUp( 100, function() { + $parent.remove(); + }); + }); + } + ); + } + }; + + // Expose to public. + return app; + +} ( document, window, jQuery ) ); + +WPMailLogging.Admin.Logs.init(); diff --git a/assets/js/wp-mail-logging-admin-logs.min.js b/assets/js/wp-mail-logging-admin-logs.min.js new file mode 100644 index 00000000..95ee73da --- /dev/null +++ b/assets/js/wp-mail-logging-admin-logs.min.js @@ -0,0 +1 @@ +"use strict";var WPMailLogging=window.WPMailLogging||{};WPMailLogging.Admin=WPMailLogging.Admin||{},WPMailLogging.Admin.Logs=WPMailLogging.Admin.Logs||function(i,t){var n={init:function(){t(n.ready)},ready:function(){t("#screen-meta-links, #screen-meta").prependTo("#wp-mail-logging-page-header-temp").show(),n.bindActions()},bindActions:function(){t(i).on("click",".wp-mail-logging-product-education-dismiss",n.productEducationDismiss)},productEducationDismiss:function(i){i.preventDefault();var n,o=t(this).parents(".wp-mail-logging-product-education").first();o.length<=0||(i=o.data("productEducationId"),n=o.data("nonce"),i&&n&&t.post(wp_mail_logging_admin_logs.ajaxurl,{action:"wp_mail_logging_product_education_dismiss",nonce:n,productEducationID:i},function(i){i.success?o.fadeTo(100,0,function(){o.slideUp(100,function(){o.remove()})}):alert(i.data)}))}};return n}(document,(window,jQuery)),WPMailLogging.Admin.Logs.init(); \ No newline at end of file diff --git a/assets/js/wp-mail-logging-admin-settings.js b/assets/js/wp-mail-logging-admin-settings.js new file mode 100644 index 00000000..678abc45 --- /dev/null +++ b/assets/js/wp-mail-logging-admin-settings.js @@ -0,0 +1,58 @@ +'use strict'; + +var WPMailLogging = window.WPMailLogging || {}; +WPMailLogging.Admin = WPMailLogging.Admin || {}; + +WPMailLogging.Admin.Settings = WPMailLogging.Admin.Settings || ( function( document, window, $ ) { + + var app = { + /** + * Start the engine. DOM is not ready yet, use only to init something. + * + * @since 1.11.0 + */ + init: function() { + + $( app.ready ); + }, + + /** + * DOM is fully loaded. + * + * @since 1.11.0 + */ + ready: function() { + + app.bindActions(); + }, + + /** + * Bind all actions/events. + * + * @since 1.11.0 + */ + bindActions: function() { + + $( document ).on( 'click', '.wp-mail-logging-settings-toggle', function () { + const $this = $( this ); + const togglesId = $this.data( 'toggles-id' ); + const $togglesIdDOM = $( `#wp-mail-logging-setting-tab-row-${ togglesId }` ); + + if ( ! togglesId || $togglesIdDOM.length <= 0 ) { + return; + } + + if ( $this.is( ':checked') ) { + $togglesIdDOM.show(); + } else { + $togglesIdDOM.hide(); + } + } ); + } + }; + + // Expose to public. + return app; +}( document, window, jQuery ) ); + +WPMailLogging.Admin.Settings.init(); diff --git a/assets/js/wp-mail-logging-admin-settings.min.js b/assets/js/wp-mail-logging-admin-settings.min.js new file mode 100644 index 00000000..e2aefdbf --- /dev/null +++ b/assets/js/wp-mail-logging-admin-settings.min.js @@ -0,0 +1 @@ +"use strict";var WPMailLogging=window.WPMailLogging||{};WPMailLogging.Admin=WPMailLogging.Admin||{},WPMailLogging.Admin.Settings=WPMailLogging.Admin.Settings||function(i,t){var n={init:function(){t(n.ready)},ready:function(){n.bindActions()},bindActions:function(){t(i).on("click",".wp-mail-logging-settings-toggle",function(){var i=t(this),n=i.data("toggles-id"),g=t("#wp-mail-logging-setting-tab-row-"+n);!n||g.length<=0||(i.is(":checked")?g.show():g.hide())})}};return n}(document,(window,jQuery)),WPMailLogging.Admin.Settings.init(); \ No newline at end of file diff --git a/assets/js/wp-mail-logging-admin-smtp.js b/assets/js/wp-mail-logging-admin-smtp.js new file mode 100644 index 00000000..e34bed0b --- /dev/null +++ b/assets/js/wp-mail-logging-admin-smtp.js @@ -0,0 +1,251 @@ +/* global wp_mail_logging_admin_smtp */ + +'use strict'; + +var WPMailLogging = window.WPMailLogging || {}; +WPMailLogging.Admin = WPMailLogging.Admin || {}; + +WPMailLogging.Admin.SMTP = WPMailLogging.Admin.SMTP || ( function( document, window, $ ) { + + /** + * Elements. + * + * @since 1.11.0 + * + * @type {object} + */ + var el = {}; + + /** + * Public functions and properties. + * + * @since 1.11.0 + * + * @type {object} + */ + var app = { + + /** + * Start the engine. DOM is not ready yet, use only to init something. + * + * @since 1.11.0 + */ + init: function() { + + $( app.ready ); + }, + + /** + * DOM is fully loaded. + * + * @since 1.11.0 + */ + ready: function() { + + app.initVars(); + app.bindActions(); + }, + + /** + * Init variables. + * + * @since 1.11.0 + */ + initVars: function() { + + el = { + $stepInstall: $( 'section.step-install' ), + $stepInstallNum: $( 'section.step-install .num img' ), + $stepSetup: $( 'section.step-setup' ), + $stepSetupNum: $( 'section.step-setup .num img' ), + }; + }, + + /** + * Bind all actions/events. + * + * @since 1.11.0 + */ + bindActions: function() { + + // Step 'Install' button click. + el.$stepInstall.on( 'click', 'button', app.stepInstallClick ); + + // Step 'Setup' button click. + el.$stepSetup.on( 'click', 'button', app.gotoURL ); + }, + + /** + * Step 'Install' button click. + * + * @since 1.11.0 + */ + stepInstallClick: function() { + + var $btn = $( this ), + action = $btn.attr( 'data-action' ), + plugin = $btn.attr( 'data-plugin' ), + ajaxAction = ''; + + if ( $btn.hasClass( 'disabled' ) ) { + return; + } + + switch ( action ) { + case 'activate': + ajaxAction = 'wp_mail_logging_activate_smtp'; + $btn.text( wp_mail_logging_admin_smtp.activating ); + break; + + case 'install': + ajaxAction = 'wp_mail_logging_install_smtp'; + $btn.text( wp_mail_logging_admin_smtp.installing ); + break; + + case 'goto-url': + window.location.href = $btn.attr( 'data-url' ); + return; + + default: + return; + } + + $btn.addClass( 'disabled' ); + app.showSpinner( el.$stepInstallNum ); + + var data = { + action: ajaxAction, + nonce : wp_mail_logging_admin_smtp.nonce, + plugin: plugin + }; + + $.post( wp_mail_logging_admin_smtp.ajaxurl, data ) + .done( function( res ) { + app.stepInstallDone( res, $btn, action ); + } ) + .always( function() { + app.hideSpinner( el.$stepInstallNum ); + } + ); + }, + + /** + * Display spinner. + * + * @since 1.11.0 + * + * @param {jQuery} $el Section number image jQuery object. + */ + showSpinner: function( $el ) { + + $el.siblings( '.loader' ).removeClass( 'hidden' ); + }, + + /** + * Done part of the 'Install' step. + * + * @since 1.11.0 + * + * @param {object} res Result of $.post() query. + * @param {jQuery} $btn Button. + * @param {string} action Action (for more info look at the app.stepInstallClick() function). + */ + stepInstallDone: function( res, $btn, action ) { + + var success = 'install' === action ? res.success && res.data.is_activated : res.success; + + if ( success ) { + el.$stepInstallNum.attr( 'src', el.$stepInstallNum.attr( 'src' ).replace( 'step-1.', 'step-complete.' ) ); + $btn.addClass( 'grey' ).removeClass( 'button-primary' ).text( wp_mail_logging_admin_smtp.activated ); + app.stepInstallPluginStatus(); + + return; + } + + var activationFail = ( 'install' === action && res.success && ! res.data.is_activated ) || 'activate' === action, + url = ! activationFail ? wp_mail_logging_admin_smtp.manual_install_url : wp_mail_logging_admin_smtp.manual_activate_url, + msg = ! activationFail ? wp_mail_logging_admin_smtp.error_could_not_install : wp_mail_logging_admin_smtp.error_could_not_activate, + btn = ! activationFail ? wp_mail_logging_admin_smtp.download_now : wp_mail_logging_admin_smtp.plugins_page; + + $btn.removeClass( 'grey disabled' ).text( btn ).attr( 'data-action', 'goto-url' ).attr( 'data-url', url ); + $btn.after( '

' + msg + '

' ); + }, + + /** + * Callback for step 'Install' completion. + * + * @since 1.11.0 + */ + stepInstallPluginStatus: function() { + + $.post( + wp_mail_logging_admin_smtp.ajaxurl, + { + action: 'wp_mail_logging_smtp_page_check_plugin_status', + nonce : wp_mail_logging_admin_smtp.nonce + } + ).done( app.stepInstallPluginStatusDone ); + }, + + /** + * Done part of the callback for step 'Install' completion. + * + * @since 1.11.0 + * + * @param {object} res Result of $.post() query. + */ + stepInstallPluginStatusDone: function( res ) { + + if ( ! res.success ) { + return; + } + + el.$stepSetup.removeClass( 'grey' ); + el.$stepSetupBtn = el.$stepSetup.find( 'button' ); + el.$stepSetupBtn.removeClass( 'grey disabled' ).addClass( 'button-primary' ); + + if ( res.data.setup_status > 0 ) { + el.$stepSetupNum.attr( 'src', el.$stepSetupNum.attr( 'src' ).replace( 'step-2.svg', 'step-complete.svg' ) ); + el.$stepSetupBtn.attr( 'data-url', wp_mail_logging_admin_smtp.smtp_settings_url ).text( wp_mail_logging_admin_smtp.smtp_settings ); + + return; + } + + el.$stepSetupBtn.attr( 'data-url', wp_mail_logging_admin_smtp.smtp_wizard_url ).text( wp_mail_logging_admin_smtp.smtp_wizard ); + }, + + /** + * Hide spinner. + * + * @since 1.11.0 + * + * @param {jQuery} $el Section number image jQuery object. + */ + hideSpinner: function( $el ) { + + $el.siblings( '.loader' ).addClass( 'hidden' ); + }, + + /** + * Go to URL by click on the button. + * + * @since 1.5.7 + */ + gotoURL: function() { + + var $btn = $( this ); + + if ( $btn.hasClass( 'disabled' ) ) { + return; + } + + window.location.href = $btn.attr( 'data-url' ); + }, + }; + + // Expose to the public. + return app; + +} ( document, window, jQuery ) ); + +WPMailLogging.Admin.SMTP.init(); diff --git a/assets/js/wp-mail-logging-admin-smtp.min.js b/assets/js/wp-mail-logging-admin-smtp.min.js new file mode 100644 index 00000000..82679920 --- /dev/null +++ b/assets/js/wp-mail-logging-admin-smtp.min.js @@ -0,0 +1 @@ +"use strict";var WPMailLogging=window.WPMailLogging||{};WPMailLogging.Admin=WPMailLogging.Admin||{},WPMailLogging.Admin.SMTP=WPMailLogging.Admin.SMTP||function(s,l){var e={},p={init:function(){l(p.ready)},ready:function(){p.initVars(),p.bindActions()},initVars:function(){e={$stepInstall:l("section.step-install"),$stepInstallNum:l("section.step-install .num img"),$stepSetup:l("section.step-setup"),$stepSetupNum:l("section.step-setup .num img")}},bindActions:function(){e.$stepInstall.on("click","button",p.stepInstallClick),e.$stepSetup.on("click","button",p.gotoURL)},stepInstallClick:function(){var a=l(this),n=a.attr("data-action"),t=a.attr("data-plugin"),i="";if(!a.hasClass("disabled")){switch(n){case"activate":i="wp_mail_logging_activate_smtp",a.text(wp_mail_logging_admin_smtp.activating);break;case"install":i="wp_mail_logging_install_smtp",a.text(wp_mail_logging_admin_smtp.installing);break;case"goto-url":return void(s.location.href=a.attr("data-url"));default:return}a.addClass("disabled"),p.showSpinner(e.$stepInstallNum);t={action:i,nonce:wp_mail_logging_admin_smtp.nonce,plugin:t};l.post(wp_mail_logging_admin_smtp.ajaxurl,t).done(function(t){p.stepInstallDone(t,a,n)}).always(function(){p.hideSpinner(e.$stepInstallNum)})}},showSpinner:function(t){t.siblings(".loader").removeClass("hidden")},stepInstallDone:function(t,a,n){var i;("install"===n?t.success&&t.data.is_activated:t.success)?(e.$stepInstallNum.attr("src",e.$stepInstallNum.attr("src").replace("step-1.","step-complete.")),a.addClass("grey").removeClass("button-primary").text(wp_mail_logging_admin_smtp.activated),p.stepInstallPluginStatus()):(n=(t="install"===n&&t.success&&!t.data.is_activated||"activate"===n)?wp_mail_logging_admin_smtp.manual_activate_url:wp_mail_logging_admin_smtp.manual_install_url,i=t?wp_mail_logging_admin_smtp.error_could_not_activate:wp_mail_logging_admin_smtp.error_could_not_install,t=t?wp_mail_logging_admin_smtp.plugins_page:wp_mail_logging_admin_smtp.download_now,a.removeClass("grey disabled").text(t).attr("data-action","goto-url").attr("data-url",n),a.after('

'+i+"

"))},stepInstallPluginStatus:function(){l.post(wp_mail_logging_admin_smtp.ajaxurl,{action:"wp_mail_logging_smtp_page_check_plugin_status",nonce:wp_mail_logging_admin_smtp.nonce}).done(p.stepInstallPluginStatusDone)},stepInstallPluginStatusDone:function(t){t.success&&(e.$stepSetup.removeClass("grey"),e.$stepSetupBtn=e.$stepSetup.find("button"),e.$stepSetupBtn.removeClass("grey disabled").addClass("button-primary"),0\n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2023-03-15T10:11:05+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.6.0\n" +"X-Domain: wp-mail-logging\n" + +#. Plugin Name of the plugin +#: src/WPML_OptionsManager.php:360 +#: src/WPML_OptionsManager.php:397 +#: src/WPML_OptionsManager.php:398 +msgid "WP Mail Logging" +msgstr "" + +#. Plugin URI of the plugin +msgid "https://wordpress.org/plugins/wp-mail-logging/" +msgstr "" + +#. Description of the plugin +msgid "Logs each email sent by WordPress." +msgstr "" + +#. Author of the plugin +msgid "WP Mail Logging Team" +msgstr "" + +#. Author URI of the plugin +msgid "https://github.com/awesomemotive/wp-mail-logging" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:242 +msgid "To solve email delivery issues, install WP Mail SMTP (free) - trusted by over 3,000,00 sites!" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:243 +msgid "Use the one-click install and setup wizard to fix your emails in minutes." +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:248 +msgid "Heads up! WP Mail Logging has detected a problem sending emails." +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:252 +#: src/inc/Admin/SMTPTab.php:532 +msgid "Install WP Mail SMTP" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:305 +#: src/inc/Admin/EmailLogsTab.php:405 +msgid "Email Logs" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:307 +msgid "See delivery status" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:308 +msgid "Resend emails" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:309 +msgid "View original email content" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:314 +msgid "Individual Log" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:316 +msgid "Review technical details" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:317 +msgid "Track open and click data" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:318 +msgid "Download sent attachments" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:323 +msgid "Email Reports" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:325 +msgid "Generate deliverability charts" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:326 +msgid "Review open & click statistics" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:327 +msgid "Get weekly email summary" +msgstr "" + +#. translators: 1: URL to WP Mail SMTP pricing page 2: URL to WP Forms pricing page +#: src/inc/Admin/EmailLogsTab.php:339 +msgid "Want more from your email logs? WP Mail SMTP Pro offers advanced email logging, failed email alerts, backup connections, email reports, email tracking, and much more!" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:353 +msgid "We know you'll love the powerful features in WP Mail SMTP. It's used by over 3,000,000 websites." +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:385 +msgid "Take Your Email Logs to the Next level" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:389 +msgid "Get WP Mail SMTP Pro" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:453 +#: src/Renderer/Format/BaseRenderer.php:44 +msgid "Message" +msgstr "" + +#: src/inc/Admin/EmailLogsTab.php:498 +msgid "Search" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:137 +#: src/inc/Admin/SettingsTab.php:154 +msgid "Settings saved!" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:202 +msgid "General Settings" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:203 +msgid "Change your WP Mail Logging settings." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:209 +msgid "Select the minimum role required to view submission data." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:211 +msgid "Can See Submission data" +msgstr "" + +#. translators: %s: Date time in WP format. +#: src/inc/Admin/SettingsTab.php:220 +msgid "Use format from WordPress settings (%s)" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:229 +msgid "WP Date Time Format" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:238 +msgid "Select your preferred display format." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:240 +msgid "Default Format for Message" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:254 +msgid "Display the IP of the host WordPress is running on. This is useful when running WP Mail Logging on multiple servers at the same time." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:256 +msgid "Display Host" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:265 +msgid "Display the attachments in Email Logs table." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:267 +msgid "Display Attachments" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:276 +msgid "Disabling this will condense navigation and move WP Mail Log under the WordPress Tools menu." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:278 +msgid "Top Level Menu" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:287 +msgid "Delete all WP Mail Logging data on deactivation." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:289 +msgid "Cleanup" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:297 +msgid "Log Rotation" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:298 +msgid "Save space by deleting logs regularly." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:303 +msgid "Set up an automated cleanup routine that is triggered when a certain amount of logs have been saved." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:305 +msgid "Cleanup by Amount" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:314 +msgid "Delete email logs after this amount has been reached." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:324 +msgid "Set up an automated cleanup routine that is triggered after a certain amount of time has passed." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:326 +msgid "Cleanup by Time" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:335 +msgid "Delete email logs after this many days." +msgstr "" + +#: src/inc/Admin/SettingsTab.php:346 +msgid "Save Settings" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:349 +msgid "Reset to Default" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:434 +msgid "On" +msgstr "" + +#: src/inc/Admin/SettingsTab.php:435 +msgid "Off" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:102 +#: src/inc/Admin/SMTPTab.php:201 +msgid "There was an error while performing your request." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:108 +msgid "Could not install the plugin. Please download and install it manually." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:163 +msgid "Plugin installed." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:176 +msgid "Plugin installed & activated." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:197 +msgid "Plugin activation is disabled for you on this site." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:209 +msgid "Plugin activated." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:212 +msgid "Could not activate the plugin. Please activate it on the Plugins page." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:230 +msgid "You do not have permission." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:239 +msgid "Plugin unavailable." +msgstr "" + +#. translators: %s - Lite plugin download URL. +#: src/inc/Admin/SMTPTab.php:307 +msgid "Could not install the plugin automatically. Please download it and install it manually." +msgstr "" + +#. translators: %s - Lite plugin download URL. +#: src/inc/Admin/SMTPTab.php:319 +msgid "Could not activate the plugin. Please activate it on the Plugins page." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:335 +msgid "Activating..." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:336 +msgid "Installing..." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:337 +#: src/inc/Admin/SMTPTab.php:550 +msgid "WP Mail SMTP Installed & Activated" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:338 +msgid "Download Now" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:339 +msgid "Go to Plugins page" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:345 +#: src/inc/Admin/SMTPTab.php:720 +msgid "Open Setup Wizard" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:346 +#: src/inc/Admin/SMTPTab.php:729 +msgid "Go to SMTP settings" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:377 +#: src/inc/Admin/SMTPTab.php:405 +#: src/inc/Admin/SMTPTab.php:538 +msgid "WP Mail SMTP" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:406 +msgid "Making Email Deliverability Easy for WordPress" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:407 +msgid "WP Mail SMTP fixes deliverability problems with your WordPress emails and form notifications. It's built by the same folks behind WPForms." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:436 +msgid "WP Mail SMTP screenshot" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:438 +msgid "Improves email deliverability in WordPress." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:439 +msgid "Used by 3+ million websites." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:440 +msgid "Free mailers: SendLayer, SMTP.com, Sendinblue, Google / Gmail, Mailgun, Postmark, SendGrid." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:441 +msgid "Pro mailers: Amazon SES, Microsoft 365 / Outlook.com, Zoho Mail." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:504 +msgid "Step 1" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:521 +msgid "Install and Activate WP Mail SMTP" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:522 +msgid "Install WP Mail SMTP from the WordPress.org plugin repository." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:540 +msgid "WP Mail SMTP on WordPress.org" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:550 +msgid "Activate WP Mail SMTP" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:695 +msgid "Step 2" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:696 +msgid "Set Up WP Mail SMTP" +msgstr "" + +#: src/inc/Admin/SMTPTab.php:697 +msgid "Select and configure your mailer." +msgstr "" + +#: src/inc/Admin/SMTPTab.php:724 +msgid "Start Setup" +msgstr "" + +#: src/Model/Email_Log_Collection.php:414 +msgid "All" +msgstr "" + +#: src/Model/Email_Log_Collection.php:415 +msgid "Successful" +msgstr "" + +#: src/Model/Email_Log_Collection.php:416 +msgid "Failed" +msgstr "" + +#. translators: %s filename of the attachment that doesn't exist. +#: src/Renderer/Column/AttachmentsColumn.php:50 +#: src/Renderer/Column/AttachmentsColumn.php:81 +msgid "Attachment %s is not present" +msgstr "" + +#: src/Renderer/Format/BaseRenderer.php:39 +#: src/Renderer/WPML_ColumnManager.php:33 +msgid "Time" +msgstr "" + +#: src/Renderer/Format/BaseRenderer.php:40 +#: src/Renderer/WPML_ColumnManager.php:35 +msgid "Receiver" +msgstr "" + +#: src/Renderer/Format/BaseRenderer.php:41 +#: src/Renderer/WPML_ColumnManager.php:36 +msgid "Subject" +msgstr "" + +#: src/Renderer/Format/BaseRenderer.php:42 +#: src/Renderer/WPML_ColumnManager.php:38 +msgid "Error" +msgstr "" + +#: src/Renderer/Format/BaseRenderer.php:43 +msgid "Headers" +msgstr "" + +#: src/Renderer/Format/BaseRenderer.php:45 +#: src/Renderer/WPML_ColumnManager.php:37 +msgid "Attachments" +msgstr "" + +#: src/Renderer/Format/BaseRenderer.php:51 +#: src/Renderer/WPML_ColumnManager.php:34 +msgid "Host" +msgstr "" + +#. translators: %s - Link to the SMTP page. +#: src/Renderer/Format/BaseRenderer.php:169 +msgid "This email failed to send. Install WP Mail SMTP to solve your deliverability issues." +msgstr "" + +#: src/Renderer/Format/BaseRenderer.php:181 +#: src/WPML_Email_Log_List.php:759 +msgid "Dismiss this notice." +msgstr "" + +#: src/Renderer/WPML_ColumnManager.php:32 +msgid "ID" +msgstr "" + +#: src/WPML_Email_Log_List.php:207 +msgid "Unable to delete email log." +msgid_plural "Unable to delete email logs." +msgstr[0] "" +msgstr[1] "" + +#: src/WPML_Email_Log_List.php:217 +msgid "Email log was successfully deleted." +msgstr "" + +#. translators: %d: Number of email logs that was successfully deleted. +#: src/WPML_Email_Log_List.php:221 +msgid "%d email log was successfully deleted." +msgid_plural "%d email logs were successfully deleted!" +msgstr[0] "" +msgstr[1] "" + +#: src/WPML_Email_Log_List.php:240 +msgid "One of the emails failed to be deleted." +msgid_plural "Some emails failed to be deleted." +msgstr[0] "" +msgstr[1] "" + +#: src/WPML_Email_Log_List.php:251 +msgid "Unable to add email to the sending queue." +msgid_plural "Unable to add emails to the sending queue." +msgstr[0] "" +msgstr[1] "" + +#: src/WPML_Email_Log_List.php:261 +msgid "Email was added to the sending queue." +msgstr "" + +#. translators: %d: Number of email logs that was added to the sending queue. +#: src/WPML_Email_Log_List.php:265 +msgid "%d email was added to the sending queue." +msgid_plural "%d emails were added to the sending queue." +msgstr[0] "" +msgstr[1] "" + +#: src/WPML_Email_Log_List.php:278 +msgid "One email failed to be added to the sending queue." +msgid_plural "Some emails failed to be added to the sending queue." +msgstr[0] "" +msgstr[1] "" + +#: src/WPML_Email_Log_List.php:330 +msgid "No email found." +msgstr "" + +#: src/WPML_Email_Log_List.php:519 +msgid "Invalid request!" +msgstr "" + +#: src/WPML_OptionsManager.php:359 +msgid "WP Mail Log" +msgstr "" + +#: src/WPML_OptionsManager.php:374 +msgid "Entries per page" +msgstr "" + +#: src/WPML_OptionsManager.php:406 +#: src/WPML_OptionsManager.php:407 +#: src/WPML_Plugin.php:248 +msgid "Email Log" +msgstr "" + +#: src/WPML_OptionsManager.php:413 +#: src/WPML_OptionsManager.php:414 +#: src/WPML_Plugin.php:252 +msgid "Settings" +msgstr "" + +#: src/WPML_OptionsManager.php:421 +#: src/WPML_OptionsManager.php:422 +#: src/WPML_Plugin.php:256 +msgid "SMTP" +msgstr "" + +#: src/WPML_OptionsManager.php:505 +#: src/WPML_OptionsManager.php:534 +msgid "You do not have sufficient permissions to access this page." +msgstr "" + +#: src/WPML_OptionsManager.php:574 +msgid "true" +msgstr "" + +#: src/WPML_OptionsManager.php:576 +msgid "false" +msgstr "" + +#: src/WPML_OptionsManager.php:579 +msgid "Administrator" +msgstr "" + +#: src/WPML_OptionsManager.php:581 +msgid "Editor" +msgstr "" + +#: src/WPML_OptionsManager.php:583 +msgid "Author" +msgstr "" + +#: src/WPML_OptionsManager.php:585 +msgid "Contributor" +msgstr "" + +#: src/WPML_OptionsManager.php:587 +msgid "Subscriber" +msgstr "" + +#: src/WPML_OptionsManager.php:589 +msgid "Anyone" +msgstr "" + +#. translators: $1$s - WP Mail Logging plugin name; $2$s - WP.org review link; $3$s - WP.org review link. +#: src/WPML_Plugin.php:375 +msgid "Please rate %1$s ★★★★★ on WordPress.org to help us spread the word." +msgstr "" + +#: src/WPML_PrivacyController.php:43 +msgid "When you use this site several actions (e.g. commenting) trigger the dispatch of emails. They contain information about you associated with your email address. Which data are part of these emails depends on the action performed. These emails are stored and accessible to the site management as log." +msgstr "" + +#. translators: %d Mail Log ID that was not removed. +#: src/WPML_PrivacyController.php:138 +msgid "A mail with the id %d was unable to be removed at this time." +msgstr "" + +#: src/WPML_ProductEducation.php:70 +msgid "Request invalid." +msgstr "" + +#: src/WPML_UserFeedback.php:90 +msgid "Are you enjoying WP Mail Logging?" +msgstr "" + +#: src/WPML_UserFeedback.php:93 +msgid "Yes" +msgstr "" + +#: src/WPML_UserFeedback.php:95 +msgid "Not Really" +msgstr "" + +#: src/WPML_UserFeedback.php:99 +msgid "We're sorry to hear you aren't enjoying WP Mail Logging. We would love a chance to improve. Could you take a minute and let us know what we can do better?" +msgstr "" + +#: src/WPML_UserFeedback.php:104 +msgid "Give Feedback" +msgstr "" + +#: src/WPML_UserFeedback.php:109 +msgid "No thanks" +msgstr "" + +#: src/WPML_UserFeedback.php:114 +msgid "That’s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?" +msgstr "" + +#: src/WPML_UserFeedback.php:115 +msgid "~ WP Mail Logging team" +msgstr "" + +#: src/WPML_UserFeedback.php:120 +msgid "OK, you deserve it" +msgstr "" + +#: src/WPML_UserFeedback.php:123 +msgid "Nope, maybe later" +msgstr "" + +#: src/WPML_UserFeedback.php:125 +msgid "I already did" +msgstr "" + +#: wp-mail-logging.php:32 +msgid "Error: plugin \"WP Mail Logging\" requires a newer version of PHP to be running." +msgstr "" + +#: wp-mail-logging.php:33 +msgid "Minimal version of PHP required: " +msgstr "" + +#: wp-mail-logging.php:34 +msgid "Your server's PHP version: " +msgstr "" diff --git a/assets/screenshot-1.png b/assets/screenshot-1.png deleted file mode 100644 index c4d424b6..00000000 Binary files a/assets/screenshot-1.png and /dev/null differ diff --git a/assets/screenshot-2.png b/assets/screenshot-2.png deleted file mode 100644 index 889831f7..00000000 Binary files a/assets/screenshot-2.png and /dev/null differ diff --git a/assets/screenshot-3.png b/assets/screenshot-3.png deleted file mode 100644 index e7f09a07..00000000 Binary files a/assets/screenshot-3.png and /dev/null differ diff --git a/assets/wporg/banner-772x250.jpg b/assets/wporg/banner-772x250.jpg new file mode 100644 index 00000000..25e506a3 Binary files /dev/null and b/assets/wporg/banner-772x250.jpg differ diff --git a/assets/wporg/icon-128x128.jpg b/assets/wporg/icon-128x128.jpg new file mode 100644 index 00000000..48849afb Binary files /dev/null and b/assets/wporg/icon-128x128.jpg differ diff --git a/assets/wporg/icon-256x256.jpg b/assets/wporg/icon-256x256.jpg new file mode 100644 index 00000000..7d5bb001 Binary files /dev/null and b/assets/wporg/icon-256x256.jpg differ diff --git a/assets/wporg/icon-44x44.png b/assets/wporg/icon-44x44.png new file mode 100644 index 00000000..878244de Binary files /dev/null and b/assets/wporg/icon-44x44.png differ diff --git a/assets/wporg/screenshot-1.png b/assets/wporg/screenshot-1.png new file mode 100644 index 00000000..4e7244b8 Binary files /dev/null and b/assets/wporg/screenshot-1.png differ diff --git a/assets/wporg/screenshot-2.png b/assets/wporg/screenshot-2.png new file mode 100644 index 00000000..84d40904 Binary files /dev/null and b/assets/wporg/screenshot-2.png differ diff --git a/assets/wporg/screenshot-3.png b/assets/wporg/screenshot-3.png new file mode 100644 index 00000000..de19d1f0 Binary files /dev/null and b/assets/wporg/screenshot-3.png differ diff --git a/assets/wporg/screenshot-4.png b/assets/wporg/screenshot-4.png new file mode 100644 index 00000000..1e814119 Binary files /dev/null and b/assets/wporg/screenshot-4.png differ diff --git a/bin/release.sh b/bin/release.sh deleted file mode 100755 index a6be431c..00000000 --- a/bin/release.sh +++ /dev/null @@ -1,171 +0,0 @@ -#! /bin/bash -# See https://github.com/GaryJones/wordpress-plugin-git-flow-svn-deploy for instructions and credits. - -echo -echo "WordPress Plugin Git-Flow SVN Deploy v1.0.0-dev2" -echo -echo "Step 1. Let's collect some information first." -echo -echo "Default values are in brackets - just hit enter to accept them." -echo - -# Get some user input -# Can't use the -i flag for read, since that doesn't work for bash 3 -#printf "1a) WordPress Repo Plugin Slug e.g. my-awesome-plugin: " -#read -e PLUGINSLUG -#echo - -# Set up some default values. Feel free to change these in your own script -CURRENTDIR=`pwd` -PLUGINSLUG="wp-mail-logging" -default_svnpath="/tmp/$PLUGINSLUG-release" -default_svnurl="http://plugins.svn.wordpress.org/$PLUGINSLUG" -default_svnuser="wysija" -default_plugindir="$CURRENTDIR/../../$PLUGINSLUG" -default_mainfile="$PLUGINSLUG.php" -default_releases_path="$default_plugindir/releases" - -SVNPATH=$default_svnpath # Populate with default if empty -SVNURL=$default_svnurl # Populate with default if empty -SVNUSER=$default_svnuser # Populate with default if empty -PLUGINDIR=$default_plugindir # Populate with default if empty -MAINFILE=$default_mainfile # Populate with default if empty -RELEASESPATH=$default_releases_path - -echo "Release data:" -echo -echo "Slug: $PLUGINSLUG" -echo "Temp checkout path: $SVNPATH" -echo "Remote SVN repo: $SVNURL" -echo "SVN username: $SVNUSER" -echo "Plugin directory: $PLUGINDIR" -echo "Main file: $MAINFILE" -echo "Releases path: $RELEASESPATH" -echo - -printf "OK to proceed (y|n)? " -read -e input -PROCEED="${input:-y}" -echo - -# Allow user cancellation -if [ "$PROCEED" != "y" ]; then echo "Aborting..."; exit 1; fi - -# git config -GITPATH="$PLUGINDIR/" # this file should be in the base of your git repository - -# Let's begin... -echo ".........................................." -echo -echo "Preparing to deploy WordPress plugin" -echo -echo ".........................................." -echo - -# Check version in readme.txt is the same as plugin file after translating both to unix line breaks to work around grep's failure to identify mac line breaks -NEWVERSION1=`grep "^Stable tag:" $GITPATH/readme.txt | awk -F' ' '{print $NF}' | tr -d '\r'` -echo "readme.txt version: $NEWVERSION1" -NEWVERSION2=`grep "Version:" $GITPATH/$MAINFILE | awk -F' ' '{print $NF}' | tr -d '\r'` -echo "$MAINFILE version: $NEWVERSION2" - -if [ "$NEWVERSION1" != "$NEWVERSION2" ]; then echo "Version in readme.txt & $MAINFILE don't match. Exiting...."; exit 1; fi - -echo "Versions match in readme.txt and $MAINFILE. Let's proceed..." - -# GaryJ: Ignore check for git tag, as git flow release finish creates this. -#if git show-ref --tags --quiet --verify -- "refs/tags/$NEWVERSION1" -# then -# echo "Version $NEWVERSION1 already exists as git tag. Exiting...."; -# exit 1; -# else -# echo "Git version does not exist. Let's proceed..." -#fi - -echo "Changing to $GITPATH" -cd $GITPATH -# GaryJ: Commit message variable not needed . Hard coded for SVN trunk commit for consistency. -echo -e "Enter a commit message for this new version: \c" -read COMMITMSG -# GaryJ: git flow release finish already covers this commit. -git commit -am "$COMMITMSG" - -# GaryJ: git flow release finish already covers this tag creation. -echo "Tagging new version in git" -git tag -a "release/$NEWVERSION1" -m "Tagging version $NEWVERSION1" - -echo "Pushing git master to origin, with tags" -git push origin master -git push origin master --tags - -echo -echo "Creating local copy of SVN repo trunk ..." -svn checkout $SVNURL $SVNPATH --depth immediates -svn update --quiet $SVNPATH/trunk --set-depth infinity - -echo "Ignoring GitHub specific files" -svn propset svn:ignore "README.md -CONTRIBUTING.md -README.md -phpunit.xml -Thumbs.db -.travis.yml -.git -.gitignore -tests -bin -composer.json -composer.lock" "$SVNPATH/trunk/" - -# Release the built zip -echo "Extracting the build zip" -unzip "$RELEASESPATH/$PLUGINSLUG-$NEWVERSION1.zip" -d "$SVNPATH/trunk/" - -# Support for the /assets folder on the .org repo. -echo "Moving assets" -# Make the directory if it doesn't already exist -mkdir -p $SVNPATH/assets/ -mv $SVNPATH/trunk/assets/* $SVNPATH/assets/ -svn add --force $SVNPATH/assets/ -svn delete --force $SVNPATH/trunk/assets - -printf "OK to proceed? This will actually release $PLUGINSLUG $NEWVERSION1 (y|n)? " -read -e input -PROCEED="${input:-y}" -echo - -# Allow user cancellation -if [ "$PROCEED" != "y" ]; then echo "Aborting..."; exit 1; fi - -echo "Changing directory to SVN and committing to trunk" -cd $SVNPATH/trunk/ -# Delete all files that should not now be added. -svn status | grep -v "^.[ \t]*\..*" | grep "^\!" | awk '{print $2}' | xargs svn del -# Add all new files that are not set to be ignored -svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2}' | xargs svn add -svn commit --username=$SVNUSER -m "Preparing for $NEWVERSION1 release" - -echo "Updating WordPress plugin repo assets and committing" -cd $SVNPATH/assets/ -# Delete all new files that are not set to be ignored -svn status | grep -v "^.[ \t]*\..*" | grep "^\!" | awk '{print $2}' | xargs svn del -# Add all new files that are not set to be ignored -svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2}' | xargs svn add -svn update --accept mine-full $SVNPATH/assets/* -svn commit --username=$SVNUSER -m "Updating assets" - -echo "Creating new SVN tag and committing it" -cd $SVNPATH -svn update --quiet $SVNPATH/tags/$NEWVERSION1 -svn copy --quiet trunk/ tags/$NEWVERSION1/ -# Remove assets and trunk directories from tag directory -svn delete --force --quiet $SVNPATH/tags/$NEWVERSION1/assets -svn delete --force --quiet $SVNPATH/tags/$NEWVERSION1/trunk -cd $SVNPATH/tags/$NEWVERSION1 -svn commit --username=$SVNUSER -m "Tagging version $NEWVERSION1" - -echo "Removing temporary directory $SVNPATH" -cd $SVNPATH -cd .. -rm -fr $SVNPATH/ - -echo "*** FIN ***" diff --git a/composer.json b/composer.json index aef4915a..4957cb6f 100644 --- a/composer.json +++ b/composer.json @@ -1,12 +1,11 @@ { - "name": "kgjerstad/wp-mail-logging", + "name": "awesomemotive/wp-mail-logging", "description": "WordPress plugin that logs each email sent by WordPress.", "type": "wordpress-plugin", "keywords": ["mail", "email", "log", "logging", "debug", "list", "store", "collect", "view"], - "homepage": "https://github.com/kgjerstad/wp-mail-logging", + "homepage": "https://github.com/awesomemotive/wp-mail-logging", "require": { - "php": ">=7.1", - "redux-framework/redux-framework": "4.3.9" + "php": ">=7.1" }, "require-dev": { "bocharsky-bw/arrayzy": "v0.1.1", @@ -22,20 +21,23 @@ } ], "support": { - "issues": "https://github.com/kgjerstad/wp-mail-logging/issues", - "source": "https://github.com/kgjerstad/wp-mail-logging/releases" + "issues": "https://github.com/awesomemotive/wp-mail-logging/issues", + "source": "https://github.com/awesomemotive/wp-mail-logging/releases" }, - "extra": { - "installer-paths": { - "lib/vendor/redux-framework": ["redux-framework/redux-framework"] - } - }, "minimum-stability": "dev", "autoload": { "psr-4": { "No3x\\WPML\\Tests\\": "tests/phpunit/tests", - "No3x\\WPML\\Tests\\Helper\\": "tests/helper" + "No3x\\WPML\\Tests\\Helper\\": "tests/helper", + "No3x\\WPML\\Admin\\": "src/inc/Admin", + "No3x\\WPML\\Helpers\\": "src/inc/Helpers" } + }, + "scripts": { + "build": [ + "npm run gulp composer:delete_vendor", + "composer install --no-dev --no-plugins -o" + ] } } diff --git a/composer.lock b/composer.lock index 33882e5c..4bbbfa42 100644 --- a/composer.lock +++ b/composer.lock @@ -4,211 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "258ef739e98a451e94c1edc1a102a055", - "packages": [ - { - "name": "composer/installers", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/composer/installers.git", - "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/d20a64ed3c94748397ff5973488761b22f6d3f19", - "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0" - }, - "replace": { - "roundcube/plugin-installer": "*", - "shama/baton": "*" - }, - "require-dev": { - "composer/composer": "1.6.* || ^2.0", - "composer/semver": "^1 || ^3", - "phpstan/phpstan": "^0.12.55", - "phpstan/phpstan-phpunit": "^0.12.16", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.3" - }, - "type": "composer-plugin", - "extra": { - "class": "Composer\\Installers\\Plugin", - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Installers\\": "src/Composer/Installers" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kyle Robinson Young", - "email": "kyle@dontkry.com", - "homepage": "https://github.com/shama" - } - ], - "description": "A multi-framework Composer library installer", - "homepage": "https://composer.github.io/installers/", - "keywords": [ - "Craft", - "Dolibarr", - "Eliasis", - "Hurad", - "ImageCMS", - "Kanboard", - "Lan Management System", - "MODX Evo", - "MantisBT", - "Mautic", - "Maya", - "OXID", - "Plentymarkets", - "Porto", - "RadPHP", - "SMF", - "Starbug", - "Thelia", - "Whmcs", - "WolfCMS", - "agl", - "aimeos", - "annotatecms", - "attogram", - "bitrix", - "cakephp", - "chef", - "cockpit", - "codeigniter", - "concrete5", - "croogo", - "dokuwiki", - "drupal", - "eZ Platform", - "elgg", - "expressionengine", - "fuelphp", - "grav", - "installer", - "itop", - "joomla", - "known", - "kohana", - "laravel", - "lavalite", - "lithium", - "magento", - "majima", - "mako", - "mediawiki", - "miaoxing", - "modulework", - "modx", - "moodle", - "osclass", - "pantheon", - "phpbb", - "piwik", - "ppi", - "processwire", - "puppet", - "pxcms", - "reindex", - "roundcube", - "shopware", - "silverstripe", - "sydes", - "sylius", - "symfony", - "tastyigniter", - "typo3", - "wordpress", - "yawik", - "zend", - "zikula" - ], - "support": { - "issues": "https://github.com/composer/installers/issues", - "source": "https://github.com/composer/installers/tree/v1.12.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-09-13T08:19:44+00:00" - }, - { - "name": "redux-framework/redux-framework", - "version": "4.3.9", - "source": { - "type": "git", - "url": "https://github.com/reduxframework/redux-framework.git", - "reference": "e98f1a7f286081b41eca70d6561b567bc39933ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reduxframework/redux-framework/zipball/e98f1a7f286081b41eca70d6561b567bc39933ac", - "reference": "e98f1a7f286081b41eca70d6561b567bc39933ac", - "shasum": "" - }, - "require": { - "composer/installers": "~1.0", - "php": ">=7.1.0" - }, - "type": "wordpress-plugin", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-3.0-or-later" - ], - "authors": [ - { - "name": "Redux.io", - "email": "support@redux.io", - "homepage": "http://redux.io", - "role": "Support" - } - ], - "description": "Build better and beautiful sites in WordPress, faster.", - "homepage": "http://redux.io", - "keywords": [ - "Settings", - "customizer", - "framework", - "options", - "plugin", - "redux", - "wordpress" - ], - "support": { - "docs": "https://devs.redux.io", - "forum": "https://wordpress.org/support/plugin/redux-framework/", - "issues": "https://github.com/reduxframework/redux-framework/issues", - "source": "https://github.com/reduxframework/redux-framework/tree/4.3.9", - "website": "https://redux.io/" - }, - "time": "2022-01-26T19:18:04+00:00" - } - ], + "content-hash": "5a73e58647a5e1c2dc0029182351476e", + "packages": [], "packages-dev": [ { "name": "bocharsky-bw/arrayzy", @@ -258,10 +55,6 @@ "utility", "wrapper" ], - "support": { - "issues": "https://github.com/bocharsky-bw/Arrayzy/issues", - "source": "https://github.com/bocharsky-bw/Arrayzy/tree/master" - }, "time": "2015-07-12T19:31:25+00:00" }, { @@ -298,11 +91,11 @@ } }, "autoload": { - "classmap": [ - "hamcrest" - ], "files": [ "hamcrest/Hamcrest.php" + ], + "classmap": [ + "hamcrest" ] }, "notification-url": "https://packagist.org/downloads/", @@ -313,10 +106,6 @@ "keywords": [ "test" ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/1.2" - }, "time": "2018-02-19T09:04:07+00:00" }, { @@ -382,10 +171,6 @@ "test double", "testing" ], - "support": { - "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/0.9" - }, "time": "2019-05-13T15:59:04+00:00" } ], @@ -398,5 +183,5 @@ "php": ">=7.1" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "1.1.0" } diff --git a/css/modal.css b/css/modal.css deleted file mode 100644 index 78d0439f..00000000 --- a/css/modal.css +++ /dev/null @@ -1,107 +0,0 @@ -#wp-mail-logging-modal-wrap { - display: none; -} -#wp-mail-logging-modal-backdrop { - background: none repeat scroll 0 0 #000; - bottom: 0; - left: 0; - min-height: 360px; - opacity: 0.7; - position: fixed; - right: 0; - top: 0; - z-index: 159900; -} -#wp-mail-logging-modal-content { - background: none repeat scroll 0 0 #fff; - bottom: 0; - left: 0; - margin: auto; - max-width: 650px; - min-height: 300px; - padding: 15px; - position: absolute; - right: 0; - top: 0; -} -#wp-mail-logging-modal-content-wrap { - bottom: 30px; - left: 30px; - position: fixed; - right: 30px; - top: 30px; - z-index: 300010; -} -#wp-mail-logging-modal-content-header { - background-color: #eee; - border-bottom: 1px solid #ccc; - left: 0; - padding: 15px 10px 15px 10px; - position: absolute; - right: 0; - top: 0; - font-size: 26px; -} -#wp-mail-logging-modal-content-header-close { - height: 30px; - position: absolute; - right: 10px; - text-decoration: none; - top: 35%; - width: 30px; - z-index: 1000; -} -#wp-mail-logging-modal-content-header-icon { - float: left; - font-size: 30px; - width: 30px; - height: 30px; -} -#wp-mail-logging-modal-content-header-title { - float: left; - line-height: 30px; - padding-left: 5px; -} -#wp-mail-logging-modal-content-header-format-switch { - float: right; - line-height: 30px; - padding-right: 45px; -} -#wp-mail-logging-modal-content-body { - bottom: 40px; - left: 0; - position: absolute; - overflow: auto; - right: 0; - top: 60px; -} -#wp-mail-logging-modal-content-body-content { - position: relative; - padding: 15px; -} -#wp-mail-logging-modal-content-body .info { - border-left: 4px solid #ffba00; - display: block; - background: #FFF9E9; - -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1); - margin: 5px 5px 2px; - padding: 1px 12px; -} -#wp-mail-logging-modal-content-body .title { - font-weight: bold; - display: block; -} -#wp-mail-logging-modal-content-footer { - background-color: #eee; - border-top: 1px solid #ccc; - bottom: 0; - left: 0; - padding: 15px 10px 15px 10px; - position: absolute; - right: 0; - text-align: right; -} -#wp-mail-logging-modal-content-footer .wp-mail-logging-modal-close { - margin-bottom: 0; -} diff --git a/css/modal.less b/css/modal.less deleted file mode 100644 index 0bd1bc86..00000000 --- a/css/modal.less +++ /dev/null @@ -1,150 +0,0 @@ -@header-bg: #eee; -@header-bottom-border: #ccc; -@header-bottom-padding: 15px; -@header-top-padding: 15px; -@header-side-padding: 10px; - -@footer-bottom-height: 10px; -@footer-bottom-padding: 15px; -@footer-top-padding: 15px; -@footer-side-padding: 10px; - -@backdrop-bg: #000; -@backdrop-opacity: 0.7; - -@content-bg: #fff; - -@body-content-padding: 15px; - -@modal-padding: 30px; -@icon-size: 30px; - -#wp-mail-logging-modal { - - &-wrap { - display: none; - } - - &-backdrop { - background: none repeat scroll 0 0 @backdrop-bg; - bottom: 0; - left: 0; - min-height: 360px; - opacity: @backdrop-opacity; - position: fixed; - right: 0; - top: 0; - z-index: 159900; - } - - &-content { - background: none repeat scroll 0 0 @content-bg; - bottom: 0; - left: 0; - margin: auto; - max-width: 650px; - min-height: 300px; - padding: 15px; - position: absolute; - right: 0; - top: 0; - - &-wrap { - bottom: @modal-padding; - left: @modal-padding; - position: fixed; - right: @modal-padding; - top: @modal-padding; - z-index: 300010; - } - - &-header { - background-color: @header-bg; - border-bottom: 1px solid @header-bottom-border; - left: 0; - padding: @header-top-padding @header-side-padding @header-bottom-padding @header-side-padding; - position: absolute; - right: 0; - top: 0; - font-size: 26px; - - &-close { - height: 30px; - position: absolute; - right: 10px; - text-decoration: none; - top: 35%; - width: 30px; - z-index: 1000; - } - - &-icon { - float: left; - font-size: @icon-size; - width: @icon-size; - height: @icon-size; - } - - &-title { - float: left; - line-height: @icon-size; - padding-left: 5px; - } - - &-format-switch { - float: right; - line-height: @icon-size; - padding-right: 45px; - } - } - - &-body { - bottom: @footer-top-padding + @footer-bottom-padding + @footer-bottom-height; - left: 0; - position: absolute; - overflow: auto; - right: 0; - top: @icon-size + @header-top-padding + @header-bottom-padding; - - &-content { - position: relative; - padding: @body-content-padding; - } - - & .info { - border-left: 4px solid #ffba00; - display: block; - background: #FFF9E9; - -webkit-box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); - box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 ); - margin: 5px 5px 2px; - padding: 1px 12px; - } - - & .title { - font-weight: bold; - display: block; - } - - } - - &-footer { - background-color: @header-bg; - border-top: 1px solid @header-bottom-border; - bottom: 0; - left: 0; - padding: @footer-top-padding @footer-side-padding @footer-bottom-padding @footer-side-padding; - position: absolute; - right: 0; - text-align: right; - - .wp-mail-logging-modal-close { - - margin-bottom: 0; - - } - - } - - } -} diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 00000000..ef657abf --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,206 @@ +/** + * Load plugins. + */ +var gulp = require('gulp'), + cached = require('gulp-cached'), + clean = require('gulp-clean'), + debug = require('gulp-debug'), + exec = require('child_process').exec, + imagemin = require('gulp-imagemin'), + packageJSON = require('./package.json'), + rename = require('gulp-rename'), + replace = require('gulp-replace'), + sass = require('gulp-sass')(require('sass')), + sourcemaps = require('gulp-sourcemaps'), + uglify = require('gulp-uglify'), + zip = require('gulp-zip'); + +var plugin = { + name: 'WP Mail Logging', + slug: 'wp-mail-logging', + files: [ + '**', + 'autoload.php', + 'readme.txt', + // Exclude all the files/dirs below. Note the double negate (when ! is used inside the exclusion) - we may actually need some things. + '!**/*.map', + '!assets/**/*.scss', + 'assets/**/*.css', + 'assets/**/*.min.css', + '!assets/wporg', + '!assets/wporg/**', + '!bin/**', + '!**/node_modules/**', + '!**/node_modules', + '!**/tests', + '!**/tests/**', + '!**/build/**', + '!**/build', + '!**/*.md', + '!**/*.sh', + '!**/*.rst', + '!**/*.xml', + '!**/*.yml', + '!**/*.dist', + '!**/*.json', + '!**/*.lock', + '!**/gulpfile.js', + '!**/AUTHORS' + ], + scss: [ + 'assets/css/**/*.scss' + ], + js: [ + 'assets/js/*.js', + '!assets/js/*.min.js' + ], + images: [ + 'assets/images/**/*', + 'assets/wporg/**/*' + ], + files_replace_ver: [ + "**/*.php", + "**/*.js", + "!**/*.min.js", + "!gulpfile.js", + "!lib/**", + "!build/**", + "!node_modules/**", + "!vendor/**" + ] +}; + +/** + * Compile SCSS to CSS, compress. + */ +gulp.task('css', function () { + return gulp.src(plugin.scss) + // UnMinified file. + .pipe(cached('processCSS')) + .pipe(sourcemaps.init()) + .pipe(sass({outputStyle: 'expanded'}).on('error', sass.logError)) + .pipe(rename(function (path) { + path.dirname = '/assets/css'; + path.extname = '.css'; + })) + .pipe(sourcemaps.write()) + .pipe(gulp.dest('./')) + // Minified file. + .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError)) + .pipe(rename(function (path) { + path.dirname = '/assets/css'; + path.extname = '.min.css'; + })) + .pipe(gulp.dest('./')) + .pipe(debug({title: '[css]'})); +}); + +/** + * Compress js. + */ +gulp.task('js', function () { + return gulp.src(plugin.js) + .pipe(cached('processJS')) + .pipe(uglify()).on('error', console.log) + .pipe(rename(function (path) { + path.dirname = '/assets/js'; + path.basename += '.min'; + })) + .pipe(gulp.dest('.')) + .pipe(debug({title: '[js]'})); +}); + +/** + * Optimize image files. + */ +gulp.task('img', function () { + return gulp.src(plugin.images) + .pipe(imagemin()) + .pipe(gulp.dest(function (file) { + return file.base; + })) + .pipe(debug({title: '[img]'})); +}); + +/** + * Generate .pot files. + */ +gulp.task('pot', function (cb) { + exec( + 'wp i18n make-pot ./ ./assets/languages/wp-mail-logging.pot --slug="wp-mail-logging" --domain="wp-mail-logging" --package-name="WP Mail Logging" --file-comment="" --exclude="build,node_modules,vendor"', + function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + cb(err); + } + ); +}); + +/** + * Replace plugin version with one from package.json in the main plugin file. + */ +gulp.task('replace_plugin_file_ver', function () { + return gulp.src(['wp-mail-logging.php']) + .pipe( + // File header. + replace( + /Version:\s*(.*)/, + 'Version: ' + packageJSON.version + ) + ) + .pipe(gulp.dest('./')); +}); + +/** + * Replace plugin version with one from package.json in @since comments in plugin PHP and JS files. + */ +gulp.task('replace_since_ver', function () { + return gulp.src(plugin.files_replace_ver) + .pipe( + replace( + /@since {VERSION}/g, + '@since ' + packageJSON.version + ) + ) + .pipe( + replace( + /@deprecated {VERSION}/g, + '@deprecated ' + packageJSON.version + ) + ) + .pipe(gulp.dest('./')); +}); + +gulp.task('replace_ver', gulp.series('replace_plugin_file_ver', 'replace_since_ver')); + +/** + * Install composer dependencies. + */ +gulp.task('composer', function (cb) { + exec('composer build', function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + cb(err); + }); +}); + +gulp.task('composer:delete_vendor', function () { + return gulp.src(['vendor'], {allowEmpty: true, read: false}) + .pipe(clean()); +}); + +/** + * Generate a .zip file. + */ +gulp.task('zip', function () { + // Modifying 'base' to include plugin directory in a zip. + return gulp.src(plugin.files, {base: '.'}) + .pipe(rename(function (file) { + file.dirname = plugin.slug + '/' + file.dirname; + })) + .pipe(zip(plugin.slug + '-' + packageJSON.version + '.zip')) + .pipe(gulp.dest('./build')) + .pipe(debug({title: '[zip]'})); +}); + +gulp.task('build', gulp.series(gulp.parallel('css', 'js', 'img'), 'replace_ver', 'pot', 'composer', 'zip')); diff --git a/js/modal.js b/js/modal.js deleted file mode 100644 index 1f1b76e8..00000000 --- a/js/modal.js +++ /dev/null @@ -1,67 +0,0 @@ -jQuery(function ($) { - - var wpml = {}; - - wpml.modal = { - self : this, - id : undefined, - selectedFormat: undefined, - init: function () { - var selected = $('#wp-mail-logging-modal-content-header-format-switch').find('.checked'); - var selectedFormat = $(selected).children("input").attr('id'); - wpml.modal.setSelectedFormat(selectedFormat); - $('#wp-mail-logging-modal-content-header-format-switch input').on('ifChecked', function( event ) { - wpml.modal.setSelectedFormat( $(this).attr('id') ); - }); - }, - clear: function () { - $('#wp-mail-logging-modal-content-body-content').html(''); - }, - set: function ($value) { - $('#wp-mail-logging-modal-content-body-content').html($value); - }, - show: function () { - $('#wp-mail-logging-modal-wrap').fadeIn(); - }, - hide: function () { - $('#wp-mail-logging-modal-wrap').fadeOut(); - }, - setSelectedFormat: function( newFormat ) { - wpml.modal.selectedFormat = newFormat; - jQuery.ajax({ - type: 'POST', - url: ajaxurl, - data: { - 'action': wpml_modal_ajax.action, - '_ajax_nonce': wpml_modal_ajax.nonce, - 'id': wpml.modal.id, - 'format': wpml.modal.selectedFormat - }, - success: wpml.modal.ajaxResponse, - error: wpml.modal.ajaxError - }); - }, - ajaxResponse: function( response_data, textStatus, XMLHttpRequest ) { - if (response_data.success) { - wpml.modal.set(response_data.data); - } else { - wpml.modal.set("Error (" + response_data.data.code + "): '" + response_data.data.message + "'"); - } - }, - ajaxError: function (XMLHttpRequest, textStatus, errorThrown) { - wpml.modal.set(errorThrown); - } - }; - - $('.wp-mail-logging-view-message').click(function () { - wpml.modal.id = $(this).data('mail-id'); - wpml.modal.init(); - wpml.modal.show(); - }); - $('.wp-mail-logging-modal-close').click(function () { - wpml.modal.hide(); - }); - $(document).keyup(function(e) { - if (e.keyCode === 27) wpml.modal.hide(); - }); -}); diff --git a/languages/wp-mail-logging.pot b/languages/wp-mail-logging.pot deleted file mode 100644 index bce09795..00000000 --- a/languages/wp-mail-logging.pot +++ /dev/null @@ -1,386 +0,0 @@ -# Copyright (C) 2022 SendLayer -# This file is distributed under the GPLv3. -msgid "" -msgstr "" -"Project-Id-Version: WP Mail Logging 1.10.5\n" -"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-mail-logging\n" -"POT-Creation-Date: 2022-12-21 09:00:41+00:00\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2022-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"X-Generator: grunt-wp-i18n 0.5.4\n" -"Language: en_GB\n" - -#: src/Renderer/Column/AttachmentsColumn.php:49 -#: src/Renderer/Column/AttachmentsColumn.php:80 -msgid "Attachment %s is not present" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:31 -msgid "ID" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:32 -#: src/inc/redux/WPML_Redux_Framework_config.php:196 -msgid "Time" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:33 -msgid "Host" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:34 -msgid "Receiver" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:35 -msgid "Subject" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:36 src/WPML_OptionsManager.php:497 -msgid "Message" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:37 -msgid "Headers" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:38 -msgid "Attachments" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:39 -msgid "Error" -msgstr "" - -#: src/Renderer/WPML_ColumnManager.php:40 -msgid "Plugin Version" -msgstr "" - -#: src/Renderer/WPML_MailRenderer.php:65 -msgid "Fallback to raw format because html is not convertible to json." -msgstr "" - -#: src/WPML_Email_Log_List.php:63 -msgid "No email found." -msgstr "" - -#: src/WPML_LifeCycle.php:207 src/WPML_OptionsManager.php:445 -msgid "Settings" -msgstr "" - -#: src/WPML_OptionsManager.php:329 src/WPML_OptionsManager.php:330 -msgid "WP Mail Log" -msgstr "" - -#: src/WPML_OptionsManager.php:340 src/WPML_OptionsManager.php:341 -#: src/WPML_OptionsManager.php:361 -msgid "About" -msgstr "" - -#: src/WPML_OptionsManager.php:350 -msgid "Entries per page" -msgstr "" - -#: src/WPML_OptionsManager.php:416 src/WPML_OptionsManager.php:472 -msgid "You do not have sufficient permissions to access this page." -msgstr "" - -#: src/WPML_OptionsManager.php:427 -msgid "Log" -msgstr "" - -#: src/WPML_OptionsManager.php:441 -msgid "Email log" -msgstr "" - -#: src/WPML_OptionsManager.php:514 -msgid "Close" -msgstr "" - -#: src/WPML_OptionsManager.php:528 -msgid "Search" -msgstr "" - -#: src/WPML_OptionsManager.php:552 -msgid "true" -msgstr "" - -#: src/WPML_OptionsManager.php:554 -msgid "false" -msgstr "" - -#: src/WPML_OptionsManager.php:557 -msgid "Administrator" -msgstr "" - -#: src/WPML_OptionsManager.php:559 -msgid "Editor" -msgstr "" - -#: src/WPML_OptionsManager.php:561 -msgid "Author" -msgstr "" - -#: src/WPML_OptionsManager.php:563 -msgid "Contributor" -msgstr "" - -#: src/WPML_OptionsManager.php:565 -msgid "Subscriber" -msgstr "" - -#: src/WPML_OptionsManager.php:567 -msgid "Anyone" -msgstr "" - -#: src/WPML_PrivacyController.php:43 -msgid "" -"When you use this site several actions (e.g. commenting) trigger the " -"dispatch of emails. They contain information about you associated with your " -"email address. Which data are part of these emails depends on the action " -"performed. These emails are stored and accessible to the site management as " -"log." -msgstr "" - -#: src/WPML_PrivacyController.php:101 -msgid "Mails" -msgstr "" - -#: src/WPML_PrivacyController.php:137 -msgid "A mail with the id %d was unable to be removed at this time." -msgstr "" - -#: src/WPML_UserFeedback.php:90 -msgid "Are you enjoying WP Mail Logging?" -msgstr "" - -#: src/WPML_UserFeedback.php:93 -msgid "Yes" -msgstr "" - -#: src/WPML_UserFeedback.php:95 -msgid "Not Really" -msgstr "" - -#: src/WPML_UserFeedback.php:99 -msgid "" -"We're sorry to hear you aren't enjoying WP Mail Logging. We would love a " -"chance to improve. Could you take a minute and let us know what we can do " -"better?" -msgstr "" - -#: src/WPML_UserFeedback.php:104 -msgid "Give Feedback" -msgstr "" - -#: src/WPML_UserFeedback.php:109 -msgid "No thanks" -msgstr "" - -#: src/WPML_UserFeedback.php:114 -msgid "" -"That’s awesome! Could you please do me a BIG favor and give it a 5-star " -"rating on WordPress to help us spread the word and boost our motivation?" -msgstr "" - -#: src/WPML_UserFeedback.php:115 -msgid "~ WP Mail Logging team" -msgstr "" - -#: src/WPML_UserFeedback.php:120 -msgid "OK, you deserve it" -msgstr "" - -#: src/WPML_UserFeedback.php:123 -msgid "Nope, maybe later" -msgstr "" - -#: src/WPML_UserFeedback.php:125 -msgid "I already did" -msgstr "" - -#: src/inc/class-wp-list-table.php:191 -msgid "No items found." -msgstr "" - -#: src/inc/class-wp-list-table.php:315 -msgid "Bulk Actions" -msgstr "" - -#: src/inc/class-wp-list-table.php:325 -msgid "Apply" -msgstr "" - -#: src/inc/class-wp-list-table.php:409 -msgid "Show all dates" -msgstr "" - -#: src/inc/class-wp-list-table.php:422 -#. translators: 1: month name, 2: 4-digit year -msgid "%1$s %2$d" -msgstr "" - -#: src/inc/class-wp-list-table.php:438 -msgid "List View" -msgstr "" - -#: src/inc/class-wp-list-table.php:439 -msgid "Excerpt View" -msgstr "" - -#: src/inc/class-wp-list-table.php:465 -msgid "%s pending" -msgstr "" - -#: src/inc/class-wp-list-table.php:533 src/inc/class-wp-list-table.php:948 -msgid "1 item" -msgid_plural "%s items" -msgstr[0] "" -msgstr[1] "" - -#: src/inc/class-wp-list-table.php:551 -msgid "Go to the first page" -msgstr "" - -#: src/inc/class-wp-list-table.php:558 -msgid "Go to the previous page" -msgstr "" - -#: src/inc/class-wp-list-table.php:567 -msgid "Current page" -msgstr "" - -#: src/inc/class-wp-list-table.php:577 -msgid "Go to the next page" -msgstr "" - -#: src/inc/class-wp-list-table.php:584 -msgid "Go to the last page" -msgstr "" - -#: src/inc/class-wp-list-table.php:720 -msgid "Select All" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:97 -msgid "General Settings" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:106 -msgid "Cleanup" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:107 -msgid "Delete all data on deactivation? (emails and settings)?" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:117 -msgid "Can See Submission data" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:118 -msgid "Select the minimum role." -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:123 -msgid "WordPress Date Time Format" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:124 -msgid "Use format from WordPress settings (%s)" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:126 -#: src/inc/redux/WPML_Redux_Framework_config.php:151 -#: src/inc/redux/WPML_Redux_Framework_config.php:167 -#: src/inc/redux/WPML_Redux_Framework_config.php:189 -msgid "Enabled" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:127 -#: src/inc/redux/WPML_Redux_Framework_config.php:152 -#: src/inc/redux/WPML_Redux_Framework_config.php:168 -#: src/inc/redux/WPML_Redux_Framework_config.php:190 -msgid "Disabled" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:138 -msgid "Default Format for Message" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:139 -msgid "Select your preferred display format." -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:144 -msgid "Display Host" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:145 -msgid "Display host column in list." -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:157 -msgid "Log Rotation" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:158 -msgid "Save space by deleting logs regularly." -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:164 -msgid "Cleanup by Amount" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:165 -#: src/inc/redux/WPML_Redux_Framework_config.php:187 -msgid "Setup a automated cleanup routine!" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:174 -msgid "Amount" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:175 -#: src/inc/redux/WPML_Redux_Framework_config.php:197 -msgid "When should mails are deleted?" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:176 -msgid "Cleanup when the stored mails exceed..." -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:186 -msgid "Cleanup by Time" -msgstr "" - -#: src/inc/redux/WPML_Redux_Framework_config.php:198 -msgid "Delete mails older than days..." -msgstr "" - -#: wp-mail-logging.php:47 -msgid "" -"Error: plugin \"WP Mail Logging\" requires a newer version of PHP to be " -"running." -msgstr "" - -#: wp-mail-logging.php:48 -msgid "Minimal version of PHP required: " -msgstr "" - -#: wp-mail-logging.php:49 -msgid "Your server's PHP version: " -msgstr "" - -#. Description of the plugin/theme -msgid "Logs each email sent by WordPress." -msgstr "" - -#: src/inc/class-wp-list-table.php:573 -msgctxt "paging" -msgid "%1$s of %2$s" -msgstr "" \ No newline at end of file diff --git a/lib/font-awesome/css/font-awesome.min.css b/lib/font-awesome/css/font-awesome.min.css deleted file mode 100644 index 3d920fc8..00000000 --- a/lib/font-awesome/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.1.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"} \ No newline at end of file diff --git a/lib/font-awesome/fonts/FontAwesome.otf b/lib/font-awesome/fonts/FontAwesome.otf deleted file mode 100644 index 3461e3fc..00000000 Binary files a/lib/font-awesome/fonts/FontAwesome.otf and /dev/null differ diff --git a/lib/font-awesome/fonts/fontawesome-webfont.eot b/lib/font-awesome/fonts/fontawesome-webfont.eot deleted file mode 100644 index 6cfd5660..00000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/lib/font-awesome/fonts/fontawesome-webfont.svg b/lib/font-awesome/fonts/fontawesome-webfont.svg deleted file mode 100644 index a9f84695..00000000 --- a/lib/font-awesome/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,504 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/lib/font-awesome/fonts/fontawesome-webfont.ttf b/lib/font-awesome/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 5cd6cff6..00000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/lib/font-awesome/fonts/fontawesome-webfont.woff b/lib/font-awesome/fonts/fontawesome-webfont.woff deleted file mode 100644 index 9eaecb37..00000000 Binary files a/lib/font-awesome/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/lib/icheck/icheck.min.js b/lib/icheck/icheck.min.js deleted file mode 100644 index 7cdb17e0..00000000 --- a/lib/icheck/icheck.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! iCheck v1.0.2 by Damir Sultanov, http://git.io/arlzeA, MIT Licensed */ -(function(f){function A(a,b,d){var c=a[0],g=/er/.test(d)?_indeterminate:/bl/.test(d)?n:k,e=d==_update?{checked:c[k],disabled:c[n],indeterminate:"true"==a.attr(_indeterminate)||"false"==a.attr(_determinate)}:c[g];if(/^(ch|di|in)/.test(d)&&!e)x(a,g);else if(/^(un|en|de)/.test(d)&&e)q(a,g);else if(d==_update)for(var f in e)e[f]?x(a,f,!0):q(a,f,!0);else if(!b||"toggle"==d){if(!b)a[_callback]("ifClicked");e?c[_type]!==r&&q(a,g):x(a,g)}}function x(a,b,d){var c=a[0],g=a.parent(),e=b==k,u=b==_indeterminate, -v=b==n,s=u?_determinate:e?y:"enabled",F=l(a,s+t(c[_type])),B=l(a,b+t(c[_type]));if(!0!==c[b]){if(!d&&b==k&&c[_type]==r&&c.name){var w=a.closest("form"),p='input[name="'+c.name+'"]',p=w.length?w.find(p):f(p);p.each(function(){this!==c&&f(this).data(m)&&q(f(this),b)})}u?(c[b]=!0,c[k]&&q(a,k,"force")):(d||(c[b]=!0),e&&c[_indeterminate]&&q(a,_indeterminate,!1));D(a,e,b,d)}c[n]&&l(a,_cursor,!0)&&g.find("."+C).css(_cursor,"default");g[_add](B||l(a,b)||"");g.attr("role")&&!u&&g.attr("aria-"+(v?n:k),"true"); -g[_remove](F||l(a,s)||"")}function q(a,b,d){var c=a[0],g=a.parent(),e=b==k,f=b==_indeterminate,m=b==n,s=f?_determinate:e?y:"enabled",q=l(a,s+t(c[_type])),r=l(a,b+t(c[_type]));if(!1!==c[b]){if(f||!d||"force"==d)c[b]=!1;D(a,e,s,d)}!c[n]&&l(a,_cursor,!0)&&g.find("."+C).css(_cursor,"pointer");g[_remove](r||l(a,b)||"");g.attr("role")&&!f&&g.attr("aria-"+(m?n:k),"false");g[_add](q||l(a,s)||"")}function E(a,b){if(a.data(m)){a.parent().html(a.attr("style",a.data(m).s||""));if(b)a[_callback](b);a.off(".i").unwrap(); -f(_label+'[for="'+a[0].id+'"]').add(a.closest(_label)).off(".i")}}function l(a,b,f){if(a.data(m))return a.data(m).o[b+(f?"":"Class")]}function t(a){return a.charAt(0).toUpperCase()+a.slice(1)}function D(a,b,f,c){if(!c){if(b)a[_callback]("ifToggled");a[_callback]("ifChanged")[_callback]("if"+t(f))}}var m="iCheck",C=m+"-helper",r="radio",k="checked",y="un"+k,n="disabled";_determinate="determinate";_indeterminate="in"+_determinate;_update="update";_type="type";_click="click";_touch="touchbegin.i touchend.i"; -_add="addClass";_remove="removeClass";_callback="trigger";_label="label";_cursor="cursor";_mobile=/ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);f.fn[m]=function(a,b){var d='input[type="checkbox"], input[type="'+r+'"]',c=f(),g=function(a){a.each(function(){var a=f(this);c=a.is(d)?c.add(a):c.add(a.find(d))})};if(/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(a))return a=a.toLowerCase(),g(this),c.each(function(){var c= -f(this);"destroy"==a?E(c,"ifDestroyed"):A(c,!0,a);f.isFunction(b)&&b()});if("object"!=typeof a&&a)return this;var e=f.extend({checkedClass:k,disabledClass:n,indeterminateClass:_indeterminate,labelHover:!0},a),l=e.handle,v=e.hoverClass||"hover",s=e.focusClass||"focus",t=e.activeClass||"active",B=!!e.labelHover,w=e.labelHoverClass||"hover",p=(""+e.increaseArea).replace("%","")|0;if("checkbox"==l||l==r)d='input[type="'+l+'"]';-50>p&&(p=-50);g(this);return c.each(function(){var a=f(this);E(a);var c=this, -b=c.id,g=-p+"%",d=100+2*p+"%",d={position:"absolute",top:g,left:g,display:"block",width:d,height:d,margin:0,padding:0,background:"#fff",border:0,opacity:0},g=_mobile?{position:"absolute",visibility:"hidden"}:p?d:{position:"absolute",opacity:0},l="checkbox"==c[_type]?e.checkboxClass||"icheckbox":e.radioClass||"i"+r,z=f(_label+'[for="'+b+'"]').add(a.closest(_label)),u=!!e.aria,y=m+"-"+Math.random().toString(36).substr(2,6),h='
")[_callback]("ifCreated").parent().append(e.insert);d=f('').css(d).appendTo(h);a.data(m,{o:e,s:a.attr("style")}).css(g);e.inheritClass&&h[_add](c.className||"");e.inheritID&&b&&h.attr("id",m+"-"+b);"static"==h.css("position")&&h.css("position","relative");A(a,!0,_update);if(z.length)z.on(_click+".i mouseover.i mouseout.i "+_touch,function(b){var d=b[_type],e=f(this);if(!c[n]){if(d==_click){if(f(b.target).is("a"))return; -A(a,!1,!0)}else B&&(/ut|nd/.test(d)?(h[_remove](v),e[_remove](w)):(h[_add](v),e[_add](w)));if(_mobile)b.stopPropagation();else return!1}});a.on(_click+".i focus.i blur.i keyup.i keydown.i keypress.i",function(b){var d=b[_type];b=b.keyCode;if(d==_click)return!1;if("keydown"==d&&32==b)return c[_type]==r&&c[k]||(c[k]?q(a,k):x(a,k)),!1;if("keyup"==d&&c[_type]==r)!c[k]&&x(a,k);else if(/us|ur/.test(d))h["blur"==d?_remove:_add](s)});d.on(_click+" mousedown mouseup mouseover mouseout "+_touch,function(b){var d= -b[_type],e=/wn|up/.test(d)?t:v;if(!c[n]){if(d==_click)A(a,!1,!0);else{if(/wn|er|in/.test(d))h[_add](e);else h[_remove](e+" "+t);if(z.length&&B&&e==v)z[/ut|nd/.test(d)?_remove:_add](w)}if(_mobile)b.stopPropagation();else return!1}})})}})(window.jQuery||window.Zepto); diff --git a/lib/icheck/square/blue.css b/lib/icheck/square/blue.css deleted file mode 100644 index f8db2ab6..00000000 --- a/lib/icheck/square/blue.css +++ /dev/null @@ -1,59 +0,0 @@ -/* iCheck plugin Square skin, blue ------------------------------------ */ -.icheckbox_square-blue, -.iradio_square-blue { - display: inline-block; - *display: inline; - vertical-align: middle; - margin: 0; - padding: 0; - width: 22px; - height: 22px; - background: url(blue.png) no-repeat; - border: none; - cursor: pointer; -} - -.icheckbox_square-blue { - background-position: 0 0; -} - .icheckbox_square-blue.hover { - background-position: -24px 0; - } - .icheckbox_square-blue.checked { - background-position: -48px 0; - } - .icheckbox_square-blue.disabled { - background-position: -72px 0; - cursor: default; - } - .icheckbox_square-blue.checked.disabled { - background-position: -96px 0; - } - -.iradio_square-blue { - background-position: -120px 0; -} - .iradio_square-blue.hover { - background-position: -144px 0; - } - .iradio_square-blue.checked { - background-position: -168px 0; - } - .iradio_square-blue.disabled { - background-position: -192px 0; - cursor: default; - } - .iradio_square-blue.checked.disabled { - background-position: -216px 0; - } - -/* HiDPI support */ -@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { - .icheckbox_square-blue, - .iradio_square-blue { - background-image: url(blue@2x.png); - -webkit-background-size: 240px 24px; - background-size: 240px 24px; - } -} \ No newline at end of file diff --git a/lib/icheck/square/blue.png b/lib/icheck/square/blue.png deleted file mode 100644 index a3e040fc..00000000 Binary files a/lib/icheck/square/blue.png and /dev/null differ diff --git a/lib/icheck/square/blue@2x.png b/lib/icheck/square/blue@2x.png deleted file mode 100644 index 8fdea12f..00000000 Binary files a/lib/icheck/square/blue@2x.png and /dev/null differ diff --git a/lib/lity/lity.min.css b/lib/lity/lity.min.css new file mode 100644 index 00000000..7af7409a --- /dev/null +++ b/lib/lity/lity.min.css @@ -0,0 +1,3 @@ +/*! Lity - v2.4.1 - 2020-04-26 +* http://sorgalla.com/lity/ +* Copyright (c) 2015-2020 Jan Sorgalla; Licensed MIT */.lity{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;white-space:nowrap;background:#0b0b0b;background:rgba(0,0,0,0.9);outline:none !important;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease}.lity.lity-opened{opacity:1}.lity.lity-closed{opacity:0}.lity *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lity-wrap{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;outline:none !important}.lity-wrap:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-0.25em}.lity-loader{z-index:9991;color:#fff;position:absolute;top:50%;margin-top:-0.8em;width:100%;text-align:center;font-size:14px;font-family:Arial,Helvetica,sans-serif;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease}.lity-loading .lity-loader{opacity:1}.lity-container{z-index:9992;position:relative;text-align:left;vertical-align:middle;display:inline-block;white-space:normal;max-width:100%;max-height:100%;outline:none !important}.lity-content{z-index:9993;width:100%;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;-o-transition:-o-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease, -webkit-transform .3s ease, -o-transform .3s ease}.lity-loading .lity-content,.lity-closed .lity-content{-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.lity-content:after{content:'';position:absolute;left:0;top:0;bottom:0;display:block;right:0;width:auto;height:auto;z-index:-1;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6)}.lity-close{z-index:9994;width:35px;height:35px;position:fixed;right:0;top:0;-webkit-appearance:none;cursor:pointer;text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;line-height:35px;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:none;outline:none;-webkit-box-shadow:none;box-shadow:none}.lity-close::-moz-focus-inner{border:0;padding:0}.lity-close:hover,.lity-close:focus,.lity-close:active,.lity-close:visited{text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;line-height:35px;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:none;outline:none;-webkit-box-shadow:none;box-shadow:none}.lity-close:active{top:1px}.lity-image img{max-width:100%;display:block;line-height:0;border:0}.lity-iframe .lity-container,.lity-youtube .lity-container,.lity-vimeo .lity-container,.lity-facebookvideo .lity-container,.lity-googlemaps .lity-container{width:100%;max-width:964px}.lity-iframe-container{width:100%;height:0;padding-top:56.25%;overflow:auto;pointer-events:auto;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-overflow-scrolling:touch}.lity-iframe-container iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}.lity-hide{display:none} diff --git a/lib/lity/lity.min.js b/lib/lity/lity.min.js new file mode 100644 index 00000000..702ddae9 --- /dev/null +++ b/lib/lity/lity.min.js @@ -0,0 +1,5 @@ +/*! Lity - v2.4.1 - 2020-04-26 +* http://sorgalla.com/lity/ +* Copyright (c) 2015-2020 Jan Sorgalla; Licensed MIT */ + +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof module&&"object"==typeof module.exports?module.exports=b(a,require("jquery")):a.lity=b(a,a.jQuery||a.Zepto)}("undefined"!=typeof window?window:this,function(a,b){"use strict";function c(a){var b=B();return N&&a.length?(a.one(N,b.resolve),setTimeout(b.resolve,500)):b.resolve(),b.promise()}function d(a,c,d){if(1===arguments.length)return b.extend({},a);if("string"==typeof c){if(void 0===d)return void 0===a[c]?null:a[c];a[c]=d}else b.extend(a,c);return this}function e(a){for(var b,c=decodeURI(a.split("#")[0]).split("&"),d={},e=0,f=c.length;e-1?"&":"?")+b.param(c)}function g(a,b){var c=a.indexOf("#");return-1===c?b:(c>0&&(a=a.substr(c)),b+a)}function h(a){return b('').append(a)}function i(a,c){var d=c.opener()&&c.opener().data("lity-desc")||"Image with no description",e=b(''+d+''),f=B(),g=function(){f.reject(h("Failed loading image"))};return e.on("load",function(){if(0===this.naturalWidth)return g();f.resolve(e)}).on("error",g),f.promise()}function j(a,c){var d,e,f;try{d=b(a)}catch(a){return!1}return!!d.length&&(e=b(''),f=d.hasClass("lity-hide"),c.element().one("lity:remove",function(){e.before(d).remove(),f&&!d.closest(".lity-content").length&&d.addClass("lity-hide")}),d.removeClass("lity-hide").after(e))}function k(a){var c=J.exec(a);return!!c&&o(g(a,f("https://www.youtube"+(c[2]||"")+".com/embed/"+c[4],b.extend({autoplay:1},e(c[5]||"")))))}function l(a){var c=K.exec(a);return!!c&&o(g(a,f("https://player.vimeo.com/video/"+c[3],b.extend({autoplay:1},e(c[4]||"")))))}function m(a){var c=M.exec(a);return!!c&&(0!==a.indexOf("http")&&(a="https:"+a),o(g(a,f("https://www.facebook.com/plugins/video.php?href="+a,b.extend({autoplay:1},e(c[4]||""))))))}function n(a){var b=L.exec(a);return!!b&&o(g(a,f("https://www.google."+b[3]+"/maps?"+b[6],{output:b[6].indexOf("layer=c")>0?"svembed":"embed"})))}function o(a){return'
+ +
+ +
+ +
+

+ This email failed to send. Install WP Mail SMTP to solve your deliverability issues.', 'wp-mail-logging' ), + [ + 'a' => [ + 'href' => [], + ], + 'strong' => [], + ] + ), + esc_url( SMTPTab::get_url() ) + ); + ?> +

+ +
+ +
+ renderRawOrHtmlModal( $item, $item['message'] ); + } } diff --git a/src/Renderer/Format/IMailRenderer.php b/src/Renderer/Format/IMailRenderer.php index 0629400c..acec63d5 100644 --- a/src/Renderer/Format/IMailRenderer.php +++ b/src/Renderer/Format/IMailRenderer.php @@ -10,4 +10,6 @@ interface IMailRenderer { * @throws \Exception */ function render($item); + + function renderModal( $item ); } diff --git a/src/Renderer/Format/JSONRenderer.php b/src/Renderer/Format/JSONRenderer.php index 125b4980..5f4d0546 100644 --- a/src/Renderer/Format/JSONRenderer.php +++ b/src/Renderer/Format/JSONRenderer.php @@ -23,4 +23,11 @@ function render($item) { return $json; } + + public function renderModal( $item ) { + + $item['message'] = htmlentities( htmlspecialchars_decode( $item['message'] ) ); + + return "
" . json_encode( $item, JSON_PRETTY_PRINT ) . "
"; + } } diff --git a/src/Renderer/Format/RawRenderer.php b/src/Renderer/Format/RawRenderer.php index cd1c5dd6..5f0f6c9f 100644 --- a/src/Renderer/Format/RawRenderer.php +++ b/src/Renderer/Format/RawRenderer.php @@ -20,4 +20,8 @@ function renderColumn($item, $column_name) { return $column_renderer->render($item, $column_format); } + + public function renderModal( $item ) { + return $this->renderRawOrHtmlModal( $item, esc_html( $item['message'] ) ); + } } diff --git a/src/Renderer/WPML_ColumnManager.php b/src/Renderer/WPML_ColumnManager.php index fdc517a0..d27b3d44 100644 --- a/src/Renderer/WPML_ColumnManager.php +++ b/src/Renderer/WPML_ColumnManager.php @@ -2,6 +2,7 @@ namespace No3x\WPML\Renderer; +use No3x\WPML\Renderer\Column\ActionsColumn; use No3x\WPML\Renderer\Column\AttachmentsColumn; use No3x\WPML\Renderer\Column\ErrorColumn; use No3x\WPML\Renderer\Column\GenericColumn; @@ -28,16 +29,13 @@ class WPML_ColumnManager { */ public function __construct() { $this->columns = [ - self::COLUMN_MAIL_ID => __( 'ID', 'wp-mail-logging' ), - self::COLUMN_TIMESTAMP => __( 'Time', 'wp-mail-logging' ), - self::COLUMN_HOST => __( 'Host', 'wp-mail-logging' ), - self::COLUMN_RECEIVER => __( 'Receiver', 'wp-mail-logging' ), - self::COLUMN_SUBJECT => __( 'Subject', 'wp-mail-logging' ), - self::COLUMN_MESSAGE => __( 'Message', 'wp-mail-logging' ), - self::COLUMN_HEADERS => __( 'Headers', 'wp-mail-logging' ), - self::COLUMN_ATTACHMENTS => __( 'Attachments', 'wp-mail-logging' ), - self::COLUMN_ERROR => __( 'Error', 'wp-mail-logging' ), - self::COLUMN_PLUGIN_VERSION => __( 'Plugin Version', 'wp-mail-logging' ), + self::COLUMN_MAIL_ID => __( 'ID', 'wp-mail-logging' ), + self::COLUMN_TIMESTAMP => __( 'Time', 'wp-mail-logging' ), + self::COLUMN_HOST => __( 'Host', 'wp-mail-logging' ), + self::COLUMN_RECEIVER => __( 'Receiver', 'wp-mail-logging' ), + self::COLUMN_SUBJECT => __( 'Subject', 'wp-mail-logging' ), + self::COLUMN_ATTACHMENTS => __( 'Attachments', 'wp-mail-logging' ), + self::COLUMN_ERROR => __( 'Error', 'wp-mail-logging' ), ]; } diff --git a/src/Renderer/WPML_MailRenderer.php b/src/Renderer/WPML_MailRenderer.php index 8adea030..acc63f14 100644 --- a/src/Renderer/WPML_MailRenderer.php +++ b/src/Renderer/WPML_MailRenderer.php @@ -25,7 +25,7 @@ class WPML_MailRenderer { */ public function __construct(IMailService $mailService) { $this->mailService = $mailService; - $this->supported_formats = [self::FORMAT_RAW, self::FORMAT_HTML, self::FORMAT_JSON]; + $this->supported_formats = [self::FORMAT_HTML, self::FORMAT_RAW, self::FORMAT_JSON]; } /** @@ -57,16 +57,8 @@ protected function renderMail($mail, $format) { switch ($format) { case self::FORMAT_HTML: case self::FORMAT_RAW: - $mailAppend .= $this->render_mail($mail->to_array(), $format); - break; case self::FORMAT_JSON: - if ($this->isHtmlMail($mail)) { - // Fallback to raw in case it is a html mail - $mailAppend .= sprintf("%s", __("Fallback to raw format because html is not convertible to json.", 'wp-mail-logging')); - $mailAppend .= $this->render_mail($mail->to_array(), self::FORMAT_RAW); - } else { - $mailAppend .= "
" . json_encode($this->render_mail($mail->to_array(), self::FORMAT_JSON), JSON_PRETTY_PRINT) . "
"; - } + $mailAppend .= $this->render_mail($mail->to_array(), $format); break; default: throw new Exception("Unknown format."); @@ -93,7 +85,7 @@ private function isHtmlMail($mail) { */ function render_mail( $item, $format ) { $renderer = MailRendererFactory::factory($format); - return $renderer->render($item); + return $renderer->renderModal( $item ); } public function getSupportedFormats() { diff --git a/src/Renderer/WPML_MailRenderer_AJAX_Handler.php b/src/Renderer/WPML_MailRenderer_AJAX_Handler.php index a01d6d20..ef2be3bb 100644 --- a/src/Renderer/WPML_MailRenderer_AJAX_Handler.php +++ b/src/Renderer/WPML_MailRenderer_AJAX_Handler.php @@ -2,6 +2,7 @@ namespace No3x\WPML\Renderer; +use No3x\WPML\Admin\SettingsTab; use No3x\WPML\IHooks; use No3x\WPML\WPML_Utils; @@ -74,8 +75,9 @@ function addActionsAndFilters() { */ public function get_ajax_data() { return [ - 'action' => self::ACTION, - 'nonce' => wp_create_nonce(self::NONCE) + 'action' => self::ACTION, + 'default_format' => 'html', + 'nonce' => wp_create_nonce(self::NONCE) ]; } @@ -85,7 +87,17 @@ public function get_ajax_data() { public function handle() { $this->checkNonce(); - $id = $this->checkAndGetId(); + + $settings = SettingsTab::get_settings( SettingsTab::DEFAULT_SETTINGS ); + + if ( ! current_user_can( $settings['can-see-submission-data'] ) ) { + wp_send_json_error( [ + 'code' => self::ERROR_OTHER_CODE, + 'message' => 'Invalid request!' + ] ); + } + + $id = $this->checkAndGetId(); $format = $this->checkAndGetFormat(); try { diff --git a/src/WPML_Attachment.php b/src/WPML_Attachment.php index 6ee447b0..3dafced9 100644 --- a/src/WPML_Attachment.php +++ b/src/WPML_Attachment.php @@ -125,12 +125,12 @@ public static function fromRelPath($relPath) { private function determine_mime_icon_class( $file_path ) { $defaultIconClass = 'file'; - if($this->gone) { + if ( $this->gone ) { return $defaultIconClass; } - $supported = array( - 'archive' => array( + $supported = [ + 'archive' => [ 'application/zip', 'application/x-rar-compressed', 'application/x-rar', @@ -138,25 +138,31 @@ private function determine_mime_icon_class( $file_path ) { 'application/x-msdownload', 'application/x-msdownload', 'application/vnd.ms-cab-compressed', - ), + ], 'audio', - 'code' => array( + 'code' => [ 'text/x-c', - 'text/x-c++', - ), - 'excel' => array( 'application/vnd.ms-excel' - ), - 'image', 'text', 'movie', - 'pdf' => array( - 'application/pdf', - ), - 'photo', 'picture', - 'powerpoint' => array( + 'text/x-c++' + ], + 'excel' => [ 'application/vnd.ms-excel' ], + 'image', + 'text', + 'movie', + 'pdf' => [ + 'application/pdf' + ], + 'photo', + 'picture', + 'powerpoint' => [ 'application/vnd.ms-powerpoint' - ), 'sound', 'video', 'word' => array( + ], + 'sound', + 'video', + 'word' => [ 'application/msword' - ), 'zip' - ); + ], + 'zip', + ]; if( !function_exists('mime_content_type') ) { return $defaultIconClass; diff --git a/src/WPML_Email_Log_List.php b/src/WPML_Email_Log_List.php index 17ecbe20..93db802e 100644 --- a/src/WPML_Email_Log_List.php +++ b/src/WPML_Email_Log_List.php @@ -2,6 +2,8 @@ namespace No3x\WPML; +use No3x\WPML\Admin\SettingsTab; +use No3x\WPML\Model\Email_Log_Collection; use No3x\WPML\Model\WPML_Mail as Mail; use No3x\WPML\Renderer\Column\ColumnFormat; use No3x\WPML\Renderer\Column\SanitizedColumnDecorator; @@ -30,6 +32,51 @@ class WPML_Email_Log_List extends \WP_List_Table implements IHooks { /** @var WPML_ColumnManager $columnManager */ private $columnManager; + /** + * Allowed actions. + * + * @since 1.11.0 + * + * @var string[] + */ + const ALLOWED_ACTIONS = [ 'delete', 'resend' ]; + + /** + * Nonce action for single log action. + * + * @since 1.11.0 + * + * @var string + */ + const SINGLE_LOG_ACTION_NONCE = 'wp-mail-logging-single-log-action-nonce'; + + /** + * Current status of mails displayed. + * + * @since 1.11.0 + * + * @var mixed + */ + private $current_status = null; + + /** + * Number of email logs by different statuses. + * + * @since 1.11.0 + * + * @var array + */ + private $statuses_counts = []; + + /** + * Container for the notices. + * + * @since 1.11.0 + * + * @var array + */ + private $notices = []; + /** * Initializes the List Table * @since 1.0 @@ -42,18 +89,238 @@ function __construct( $emailResender ) { function addActionsAndFilters() { add_action( 'admin_init', array( $this, 'init') ); + add_action( 'current_screen', [ $this, 'process' ] ); + add_filter( 'wp_mail_logging_admin_logs_localize_strings', [ $this, 'add_localize_strings' ] ); } function init() { global $status, $page, $hook_suffix; parent::__construct( array( - 'singular' => 'email', // singular name of the listed records - 'plural' => 'emails', // plural name of the listed records - 'ajax' => false, // does this table support ajax? + 'singular' => 'email', // singular name of the listed records + 'plural' => 'emails',// plural name of the listed records + 'ajax' => false, // does this table support ajax? ) ); } + /** + * Process user actions. + * + * @since 1.11.0 + * + * @param \WP_Screen $current_screen Current \WP_Screen object. + * + * @return void + */ + public function process( $current_screen ) { + + global $wp_logging_list_page; + + if ( $current_screen->id !== $wp_logging_list_page ) { + return; + } + + $this->process_action(); + $this->add_notices(); + + add_filter( 'removable_query_args', [ $this, 'removable_query_args' ] ); + } + + /** + * Process action the admin initiated. + * + * @since 1.11.0 + * + * @return void + */ + public function process_action() { + + $current_action = $this->current_action(); + + if ( empty( $current_action ) || ! in_array( $current_action, self::ALLOWED_ACTIONS ) ) { + return; + } + + $settings = SettingsTab::get_settings( SettingsTab::DEFAULT_SETTINGS ); + + if ( ! current_user_can( $settings['can-see-submission-data'] ) ) { + return; + } + + $results = 0; + + if ( ! empty( $_GET[ self::SINGLE_LOG_ACTION_NONCE ] ) && check_admin_referer( self::SINGLE_LOG_ACTION_NONCE, self::SINGLE_LOG_ACTION_NONCE ) && ! empty( $_GET['email_log_id'] ) ) { + + // Number of logs we tried to perform action. + $attempt_action_logs = 1; + $process_single_action = $this->process_single_log_action( absint( $_GET['email_log_id'] ), $current_action ); + + if ( $process_single_action ) { + $results = 1; + } + } else { + $process_bulk_action = $this->process_bulk_action( true ); + $results = ! empty( $process_bulk_action['success'] ) ? $process_bulk_action['success'] : 0; + $attempt_action_logs = ! empty( $process_bulk_action['attempt'] ) ? $process_bulk_action['attempt'] : 0; + } + + // Action redirect args. + $action_redirect = [ + 'delete' => 'deleted', + 'resend' => 'resent' + ]; + + wp_safe_redirect( + add_query_arg( + [ + $action_redirect[ $current_action ] => absint( $results ), + 'attempt_log_count' => absint( $attempt_action_logs ), + ], + remove_query_arg( [ 'action', 'action2', '_wpnonce', 'email_log_id', 'paged', '_wp_http_referer', 'wp-mail-logging-single-log-action-nonce' ] ) + ) + ); + exit; + } + + /** + * Add notices for performed action. + * + * @since 1.11.0 + * + * @return void + */ + public function add_notices() { + + $deleted = filter_input( INPUT_GET, 'deleted', FILTER_VALIDATE_INT ); + $resent = filter_input( INPUT_GET, 'resent', FILTER_VALIDATE_INT ); + $attempt_log_count = filter_input( INPUT_GET, 'attempt_log_count', FILTER_VALIDATE_INT ); + + // If nothing was attempted to performed. + if ( empty( $attempt_log_count ) ) { + return; + } + + if ( ! is_null( $deleted ) ) { + + if ( $deleted === 0 ) { + $this->add_notice( + _n( 'Unable to delete email log.', 'Unable to delete email logs.', $attempt_log_count, 'wp-mail-logging' ), + 'error' + ); + + return; + } + + if ( $deleted === $attempt_log_count ) { + + if ( $deleted === 1 ) { + $notice_message = __( 'Email log was successfully deleted.', 'wp-mail-logging' ); + } else { + $notice_message = sprintf( + /* translators: %d: Number of email logs that was successfully deleted. */ + _n( + '%d email log was successfully deleted.', + '%d email logs were successfully deleted!', + $deleted, + 'wp-mail-logging' + ), + $deleted + ); + } + + $this->add_notice( + $notice_message, + 'success' + ); + + return; + } + + $this->add_notice( + _n( 'One of the emails failed to be deleted.', 'Some emails failed to be deleted.', $attempt_log_count - $deleted, 'wp-mail-logging' ), + 'warning' + ); + + return; + } + + if ( ! is_null( $resent ) ) { + + if ( $resent === 0 ) { + $this->add_notice( + _n( 'Unable to add email to the sending queue.', 'Unable to add emails to the sending queue.', $attempt_log_count, 'wp-mail-logging' ), + 'error' + ); + + return; + } + + if ( $resent === $attempt_log_count ) { + + if ( $resent === 1 ) { + $notice_message = __( 'Email was added to the sending queue.', 'wp-mail-logging' ); + } else { + $notice_message = sprintf( + /* translators: %d: Number of email logs that was added to the sending queue. */ + _n( '%d email was added to the sending queue.', '%d emails were added to the sending queue.', $resent, 'wp-mail-logging' ), + $resent + ); + } + + $this->add_notice( + $notice_message + ); + + return; + } + + $this->add_notice( + _n( 'One email failed to be added to the sending queue.', 'Some emails failed to be added to the sending queue.', $attempt_log_count - $resent, 'wp-mail-logging' ), + 'warning' + ); + } + + } + + /** + * Remove certain arguments from a query string that WordPress should always hide for users. + * + * @since 1.11.0 + * + * @param array $removable_query_args An array of parameters to remove from the URL. + * + * @return array Extended/filtered array of parameters to remove from the URL. + */ + public function removable_query_args( $removable_query_args ) { + + $removable_query_args[] = 'deleted'; + $removable_query_args[] = 'resent'; + $removable_query_args[] = 'attempt_log_count'; + $removable_query_args[] = 'email'; + $removable_query_args[] = 'wpml-list_table_nonce'; + + return $removable_query_args; + } + + /** + * Add the single log action nonce and the current page URL in + * the localized strings. + * + * @since 1.11.0 + * + * @param array $data Data to be localized for JS usage. + * + * @return array + */ + public function add_localize_strings( $data ) { + + $data[ 'single_log_action_nonce' ] = wp_create_nonce( self::SINGLE_LOG_ACTION_NONCE ); + $data[ 'single_log_action_key' ] = self::SINGLE_LOG_ACTION_NONCE; + $data[ 'admin_email_logs_url' ] = $this->get_page_base_url(); + + return $data; + } + /** * Is displayed if no item is available to render * @since 1.0 @@ -64,26 +331,84 @@ function no_items() { return; } + public function get_views() { + $views = []; + + // Get base url. + $email_log_page_url = $this->get_page_base_url(); + + foreach ( Email_Log_Collection::get_statuses() as $status => $label ) { + $views[ $status ] = sprintf( + '%3$s (%4$d)', + esc_url( add_query_arg( 'status', $status, $email_log_page_url ) ), + $this->get_current_status() == $status ? 'class="current"' : '', + esc_html( $label ), + absint( $this->statuses_counts[ $status ] ) + ); + } + + return $views; + } + + /** + * Get the base URL of the WP Mail Logging page. + * + * @since 1.11.0 + * + * @return string + */ + private function get_page_base_url() { + + return add_query_arg( 'page', 'wpml_plugin_log', WPML_Utils::get_admin_page_url() ); + } + /** * Defines the available columns. + * * @since 1.0 + * @since 1.11.0 Handle attachments column. + * * @see WP_List_Table::get_columns() */ function get_columns() { - $columns = array_merge(['cb' => ''], $this->columnManager->getColumns()); + $settings = SettingsTab::get_settings([]); + $columns = array_merge(['cb' => ''], $this->columnManager->getColumns(), $this->get_actions_column() ); - /* @var $instance WPML_Plugin */ - $instance = WPML_Init::getInstance()->getService( 'plugin' ); + if ( empty( $settings['display-host'] ) ) { + unset( $columns['host'] ); + } - $switch = $instance->getSetting('display-host', false ); - if( false == $switch ) { - unset($columns['host']); + if ( empty( $settings['display-attachments'] ) ) { + unset( $columns['attachments'] ); } return $columns; } + /** + * Column to display in mobile. + * + * @since 1.11.0 + * + * @inerhitDoc + */ + protected function get_primary_column_name() { + + return WPML_ColumnManager::COLUMN_TIMESTAMP; + } + + /** + * The actions column. + * + * @since 1.11.0 + * + * @return string[] + */ + private function get_actions_column() { + return [ 'actions' => '' ]; + } + /** * Define which columns are hidden * @since 1.0 @@ -102,7 +427,14 @@ function get_hidden_columns() { * @return string sanitized orderby parameter */ private function sanitize_orderby() { - return WPML_Utils::sanitize_expected_value( ( !empty( $_GET['orderby'] ) ) ? $_GET['orderby'] : null, $this->get_sortable_columns(), 'mail_id'); + + $allowed = array_keys( $this->get_sortable_columns() ); + + return WPML_Utils::sanitize_expected_value( + ( ! empty( $_GET['orderby'] ) ) ? $_GET['orderby'] : null, + $allowed, + 'mail_id' + ); } /** @@ -120,41 +452,192 @@ private function sanitize_order() { * @see WP_List_Table::prepare_items() */ function prepare_items( $search = false ) { - $orderby = $this->sanitize_orderby(); - $order = $this->sanitize_order(); $columns = $this->get_columns(); $hidden = $this->get_hidden_columns(); $sortable = $this->get_sortable_columns(); $this->_column_headers = array( $columns, $hidden, $sortable ); - $this->process_bulk_action(); - $per_page = $this->get_items_per_page( 'per_page', 25 ); - $current_page = $this->get_pagenum(); - $offset = ( $current_page - 1 ) * $per_page; - $total_items = Mail::query() - ->search( $search ) - ->find( true ); + $log_collection = new Email_Log_Collection( Mail::get_table(), Mail::get_searchable_fields() ); + $this->statuses_counts = $log_collection->get_statuses_count(); - $mails = Mail::query() + $this->items = $log_collection->status( $this->get_current_status() ) ->search( $search ) - ->sort_by( $orderby ) - ->order( $order ) + ->sort_by( $this->sanitize_orderby() ) + ->order( $this->sanitize_order() ) ->limit( $per_page ) - ->offset( $offset ) - ->find(); + ->offset( ( $this->get_pagenum() - 1 ) * $per_page ) + ->find_list(); - foreach ( $mails as $mail ) { - /* @var $mail Mail */ - $this->items[] = $mail->to_array(); + $this->set_pagination_args( [ + 'total_items' => $log_collection->count()->find_list(), // The total number of items. + 'per_page' => $per_page, // Number of items per page. + ] ); + } + + /** + * Process action for a single log. + * + * @since 1.11.0 + * + * @param int $email_log_id Email Log ID in context. + * @param string $action Action to perform. + * + * @return bool + */ + private function process_single_log_action( $email_log_id, $action ) { + + if ( empty( $email_log_id ) ) { + return false; } - $this->set_pagination_args( array( - 'total_items' => $total_items, // The total number of items. - 'per_page' => $per_page, // Number of items per page. - ) ); + $perform_action = $this->perform_action( $email_log_id, $action ); + + if ( is_wp_error( $perform_action ) || ! $perform_action ) { + return false; + } + + return true; + } + + /** + * Perform an action to an email log. + * + * @since 1.11.0 + * + * @param int $email_log_id Email Log ID in context. + * @param string $action Action to perform to a mail. + * + * @return bool|\WP_Error Returns WP_Error when provided `$action` is invalid. + * Otherwise returns a `bool` of whether the Mail is found or not. + */ + private function perform_action( $email_log_id, $action ) { + + if ( ! in_array( $action, [ 'delete', 'resend' ], true ) ) { + return new \WP_Error( 'wp-mail-logging-invalid-action', __( 'Invalid request!', 'wp-mail-logging' ) ); + } + + $mail = Mail::find_one( $email_log_id ); + + if ( $mail === false ) { + return false; + } + + switch ( $action ) { + case 'delete': + return $mail->delete(); + + case 'resend': + $this->resend_email( $mail ); + break; + + default: + return false; + } + + return true; + } + + /** + * Processes bulk actions. + * + * @since 1.0 + * @since 1.11.0 Add first argument which is a bool whether to return a value or not. + * + * @param bool $return_info Whether to return a value or not. Default `false`. + * + * @return void|array + */ + function process_bulk_action( $return_info = false ) { + + if ( false === $this->current_action() ) { + return; + } + + if ( + ! check_admin_referer( WPML_Email_Log_List::NONCE_LIST_TABLE, WPML_Email_Log_List::NONCE_LIST_TABLE . '_nonce' ) + || ! in_array( $this->current_action(), [ 'delete', 'resend' ], true ) + ) { + return; + } + + // Holds the number of Mail attempted to perform action with. + $attempted_action_counter = 0; + + // Holds the number of successful actions performed. + $successful_action_counter = 0; + + $current_action = $this->current_action(); + + // Loop through each of the item. + foreach ( $_REQUEST[ $this->_args['singular'] ] as $item_id ) { + + $attempted_action_counter++; + + $perform_action = $this->perform_action( $item_id, $current_action ); + + if ( is_wp_error( $perform_action ) ) { + continue; + } + + if ( $perform_action ) { + $successful_action_counter++; + } + } + + // For backward compatibility. + if ( ! $return_info ) { + return; + } + + return [ + 'success' => $successful_action_counter, + 'attempt' => $attempted_action_counter, + ]; + } + + /** + * Add notice to notices container. + * + * @since 1.11.0 + * + * @param string $message Notice message. + * @param string $type Notice type. Default 'info'. + * + * @return void + */ + private function add_notice( $message, $type = 'info' ) { + + $this->notices[] = [ + 'type' => $type, + 'message' => $message, + ]; + } + + /** + * Get the current status of email logs to display. + * + * @since 1.11.0 + * + * @return mixed + */ + private function get_current_status() { + + if ( ! is_null( $this->current_status ) ) { + return $this->current_status; + } + + // Get the current status. + $current_status = filter_input( INPUT_GET, 'status', FILTER_SANITIZE_NUMBER_INT ); + if ( empty( $current_status ) || ! array_key_exists( $current_status, Email_Log_Collection::get_statuses() ) ) { + $current_status = Email_Log_Collection::STATUS_ALL; + } + + $this->current_status = $current_status; + + return $this->current_status; } /** @@ -165,20 +648,45 @@ function prepare_items( $search = false ) { * @return string The cell content */ function column_default( $item, $column_name ) { + + if ( $column_name === 'actions' ) { + return $this->display_actions_icons( $item['mail_id'] ); + } + return ( new SanitizedColumnDecorator($this->columnManager->getColumnRenderer($column_name)))->render($item, ColumnFormat::FULL); } - /** - * Renders the message column. - * @since 1.3 - * @param array $item The current item. + * Display the action icons in the column. + * + * @since 1.11.0 + * + * @param int $email_log_id Email Log ID. + * * @return string */ - function column_message( $item ) { - $content = $item['mail_id']; - $message = 'View'; - return $message; + private function display_actions_icons( $email_log_id ) { + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + + return '
+ + + +
'; } /** @@ -189,42 +697,11 @@ function column_message( $item ) { function get_bulk_actions() { $actions = array( 'delete' => 'Delete', - 'resend' => 'Resend' + 'resend' => 'Resend' ); return $actions; } - /** - * Processes bulk actions. - * @since 1.0 - */ - function process_bulk_action() { - if ( false === $this->current_action() ) { - return; - } - - if ( check_admin_referer( WPML_Email_Log_List::NONCE_LIST_TABLE, WPML_Email_Log_List::NONCE_LIST_TABLE . '_nonce' ) ) { - $name = $this->_args['singular']; - - // Detect when a bulk action is being triggered. - if ( 'delete' === $this->current_action() ) { - foreach ( $_REQUEST[$name] as $item_id ) { - $mail = Mail::find_one( $item_id ); - if ( false !== $mail ) { - $mail->delete(); - } - } - } else if ( 'resend' == $this->current_action() ) { - foreach ( $_REQUEST[$name] as $item_id ) { - $mail = Mail::find_one( $item_id ); - if ( false !== $mail ) { - $this->resend_email( $mail ); - } - } - } - } - } - /** * Send logged email via wp_mail * @param Mail $mail the email object to resend @@ -255,13 +732,34 @@ function column_cb($item) { function get_sortable_columns() { return array( // Description: column_name => array( 'display_name', true[asc] | false[desc] ). - 'mail_id' => array( 'mail_id', false ), - 'timestamp' => array( 'timestamp', true ), - 'host' => array( 'host', true ), - 'receiver' => array( 'receiver', true ), - 'subject' => array( 'subject', true ), - 'headers' => array( 'headers', true ), + 'mail_id' => array( 'mail_id', false ), + 'timestamp' => array( 'timestamp', true ), + 'host' => array( 'host', true ), + 'receiver' => array( 'receiver', true ), + 'subject' => array( 'subject', true ), + 'headers' => array( 'headers', true ), 'plugin_version'=> array( 'plugin_version', true ), ); } + + /** + * Display the notices. + * + * @since 1.11.0 + * + * @return void + */ + public function display_notices() { + + foreach( $this->notices as $notice ) { + ?> +
+

+ +
+ getPath(); }, $attachments); - $headers = explode( "\\n", str_replace( "\\r\\n", "\\n", $mail->get_headers() ) ); + $clean_headers = str_replace( + [ + "\\r\\n", + "\r\n", + ",\n", + ",\\n" + ], + "\n", + $mail->get_headers() + ); + + $headers = explode( "\n", $clean_headers ); $headers = array_map(function ($header) { return rtrim($header, ","); }, $headers); diff --git a/src/WPML_Init.php b/src/WPML_Init.php index b4203a08..c713ae9e 100644 --- a/src/WPML_Init.php +++ b/src/WPML_Init.php @@ -24,7 +24,6 @@ use No3x\WPML\Model\DefaultMailService; use No3x\WPML\Renderer\WPML_MailRenderer; use No3x\WPML\Renderer\WPML_MailRenderer_AJAX_Handler; -use No3x\WPML\Settings\WPML_Redux_Framework_config; // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) exit; @@ -107,9 +106,6 @@ public function init( $file ) { $this->container['emailDispatcher'] = function () { return new WPML_Email_Dispatcher(); }; - $this->container['redux'] = function ($c) { - return new WPML_Redux_Framework_config( $c['plugin-meta'] ); - }; $this->container['logRotation'] = function ($c) { return new WPML_LogRotation( $c['plugin-meta'] ); }; @@ -125,6 +121,8 @@ public function init( $file ) { $this->container['userFeedback'] = function ($c) { return new WPML_UserFeedback(); }; + $this->container['productEducation'] = new WPML_ProductEducation(); + $this->container->addActionsAndFilters(); add_filter( 'wpml_get_di_container', function() { diff --git a/src/WPML_LifeCycle.php b/src/WPML_LifeCycle.php index 4610b7e9..a9927bea 100644 --- a/src/WPML_LifeCycle.php +++ b/src/WPML_LifeCycle.php @@ -50,23 +50,10 @@ public function uninstall() { $this->unInstallDatabaseTables(); $this->deleteSavedOptions(); $this->deleteVersionOption(); - } - } - - /** - * Perform any version-upgrade activities prior to activation (e.g. database changes) - * @return void - */ - public function upgrade() { - $this->disableReduxFunctionality(); - } - /** - * See: http://plugin.michael-simpson.com/?page_id=105 - * @return void - */ - public function activate() { - $this->disableReduxFunctionality(); + $this->deleteSavedSettings(); + $this->deleteSavedProductEducationOptions(); + } } /** @@ -204,19 +191,10 @@ public function getAjaxUrl($actionName) { public function registerPluginActionLinks( $actions, $plugin_file ) { if ($this->getMainPluginFileName() == basename($plugin_file)) { - $settings = array('settings' => '' . __( 'Settings', 'General' ) . '' ); - $actions = array_merge($settings, $actions); + $admin_url = add_query_arg( 'tab', 'settings', WPML_Utils::get_admin_page_url() ); + $settings = array('settings' => '' . __( 'Settings', 'General' ) . '' ); + $actions = array_merge($settings, $actions); } return $actions; } - - // Disable unnecessary Redux Framework functionality - public function disableReduxFunctionality() { - // Disable the default Redux and Extendify Gutenberg block library - update_option( 'use_redux_templates', '' ); - update_option( 'use_extendify_templates', '' ); - - // Disable the Redux activation banner - update_option( 'redux-framework_tracking_notice', 'hide' ); - } } diff --git a/src/WPML_LogRotation.php b/src/WPML_LogRotation.php index 624007ea..a4862b29 100644 --- a/src/WPML_LogRotation.php +++ b/src/WPML_LogRotation.php @@ -3,6 +3,8 @@ namespace No3x\WPML; // Exit if accessed directly. +use No3x\WPML\Admin\SettingsTab; + if ( ! defined( 'ABSPATH' ) ) exit; /** @@ -35,7 +37,7 @@ public function addActionsAndFilters() { * @since 1.6.0 */ public function init() { - global $wpml_settings; + $wpml_settings = SettingsTab::get_settings(); // if plugin is installed the first time settings are not initialized properly so quit early. if( !isset($wpml_settings) || !array_key_exists('log-rotation-limit-amout', $wpml_settings) ) { @@ -74,7 +76,7 @@ function unschedule() { static function limitNumberOfMailsByAmount() { global $wpdb; - $wpml_settings = get_option( 'wpml_settings', [] ); + $wpml_settings = SettingsTab::get_settings(); if( empty( $wpml_settings ) ) { return; diff --git a/src/WPML_OptionsManager.php b/src/WPML_OptionsManager.php index 0d6bc587..49fee8f6 100644 --- a/src/WPML_OptionsManager.php +++ b/src/WPML_OptionsManager.php @@ -22,6 +22,7 @@ namespace No3x\WPML; // Exit if accessed directly. +use No3x\WPML\Admin\SettingsTab; use No3x\WPML\Renderer\WPML_MailRenderer_AJAX_Handler; if ( ! defined( 'ABSPATH' ) ) exit; @@ -43,6 +44,10 @@ class WPML_OptionsManager { public function getSetting($settingName, $default = null) { global $wpml_settings; + if ( is_null( $wpml_settings ) ) { + $wpml_settings = SettingsTab::get_settings(); + } + $retVal = null; if (is_array($wpml_settings) && array_key_exists($settingName, $wpml_settings)) { $retVal = $wpml_settings[$settingName]; @@ -124,6 +129,30 @@ protected function deleteSavedOptions() { } } + /** + * Delete the saved settings. + * + * @since 1.11.0 + * + * @return void + */ + protected function deleteSavedSettings() { + + delete_option( SettingsTab::OPTIONS_NAME ); + } + + /** + * Delete Product Education related saved option.. + * + * @since 1.11.0 + * + * @return void + */ + protected function deleteSavedProductEducationOptions() { + + delete_option( WPML_ProductEducation::OPTION_KEY ); + } + /** * Cleanup: remove version option * @since 1.6.0 @@ -316,32 +345,27 @@ public function canUserDoRoleOption($optionName) { */ public function createSettingsMenu() { - global $wp_version; global $wp_logging_list_page; - $pluginIcon = ''; - if ( $wp_version >= 3.8 ) $pluginIcon = 'dashicons-email-alt'; - $pluginNameSlug = $this->getPluginSlug(); + $menu_slug = $pluginNameSlug . '_log'; + $capability = $this->getSetting( 'can-see-submission-data', 'manage_options' ); - //create submenu in the tools menu item - $wp_logging_list_page = add_submenu_page( 'tools.php', __( 'WP Mail Log', 'wp-mail-logging' ), - __( 'WP Mail Log', 'wp-mail-logging' ), - $capability, - $pluginNameSlug . '_log', - array( &$this, 'LogMenu' ) - ); + if ( ! empty( $this->getSetting( 'top-level-menu', '1' ) ) ) { + $this->setup_top_level_menu( $capability, $menu_slug ); + } else { + // create submenu in the tools menu item + $wp_logging_list_page = add_submenu_page( 'tools.php', __( 'WP Mail Log', 'wp-mail-logging' ), + __( 'WP Mail Logging', 'wp-mail-logging' ), + $capability, + $menu_slug, + [ $this, 'LogMenu' ] + ); + } // Add Action to load assets when page is loaded - add_action( 'load-' . $wp_logging_list_page, array( $this, 'load_assets' ) ); - - add_submenu_page($pluginNameSlug . '_log', - __('About', 'wp-mail-logging'), - __('About', 'wp-mail-logging'), - $capability, - $pluginNameSlug . '_about', - array(&$this, 'LogSubMenuAbout') ); + add_action( 'load-' . $wp_logging_list_page, [ $this, 'load_assets' ] ); add_action( 'load-' . $wp_logging_list_page, function() { add_screen_option( @@ -355,49 +379,115 @@ public function createSettingsMenu() { }); } + /** + * Setup the menu in the top level. + * + * @since 1.11.0 + * + * @param string $capability Capability to be able to access the pages in the menu. + * @param string $menu_slug Menu slug. + * + * @return void + */ + private function setup_top_level_menu( $capability, $menu_slug ) { + + global $wp_logging_list_page; + + $wp_logging_list_page = add_menu_page( + __( 'WP Mail Logging', 'wp-mail-logging' ), + __( 'WP Mail Logging', 'wp-mail-logging' ), + $capability, + $menu_slug, + [ $this, 'LogMenu' ], + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE4IDkuMjI1ODFDMTggNC44Mzg3MSAxNC40NTE2IDIgMTAgMkM1LjU0ODM5IDIgMiA1LjU4MDY1IDIgMTBDMiAxNC40NTE2IDUuNTQ4MzkgMTggMTAgMThDMTEuNjc3NCAxOCAxMy4zNTQ4IDE3LjQ1MTYgMTQuNzQxOSAxNi40NTE2QzE0LjkwMzIgMTYuMzIyNiAxNC45MzU1IDE2LjA2NDUgMTQuODA2NSAxNS45MDMyTDE0LjI5MDMgMTUuMjkwM0MxNC4xNjEzIDE1LjEyOSAxMy45MzU1IDE1LjEyOSAxMy43NzQyIDE1LjIyNThDMTIuNjc3NCAxNi4wMzIzIDExLjM1NDggMTYuNDUxNiAxMCAxNi40NTE2QzYuNDE5MzUgMTYuNDUxNiAzLjU0ODM5IDEzLjU4MDYgMy41NDgzOSAxMEMzLjU0ODM5IDYuNDUxNjEgNi40MTkzNSAzLjU0ODM5IDEwIDMuNTQ4MzlDMTMuNTE2MSAzLjU0ODM5IDE2LjQ1MTYgNS42Nzc0MiAxNi40NTE2IDkuMjI1ODFDMTYuNDUxNiAxMS4yOTAzIDE1LjA2NDUgMTIuNDE5NCAxMy43NDE5IDEyLjQxOTRDMTMuMTI5IDEyLjQxOTQgMTMuMDk2OCAxMiAxMy4yMjU4IDExLjM4NzFMMTQuMTYxMyA2LjYxMjlDMTQuMTkzNSA2LjM1NDg0IDE0IDYuMTI5MDMgMTMuNzc0MiA2LjEyOTAzSDEyLjUxNjFDMTIuMzIyNiA2LjE2MTI5IDEyLjE2MTMgNi4yOTAzMiAxMi4xMjkgNi40NTE2MUMxMi4wOTY4IDYuNjQ1MTYgMTIuMDY0NSA2Ljc0MTk0IDEyLjA2NDUgNi45MDMyM0MxMS42Nzc0IDYuMjkwMzIgMTAuOTAzMiA1LjkwMzIzIDkuOTY3NzQgNS45MDMyM0M3LjY0NTE2IDUuOTAzMjMgNS42MTI5IDcuOTM1NDggNS42MTI5IDEwLjgzODdDNS42MTI5IDEyLjgwNjUgNi42NDUxNiAxNC4xMjkgOC42MTI5IDE0LjEyOUM5LjU0ODM5IDE0LjEyOSAxMC41ODA2IDEzLjU4MDYgMTEuMTYxMyAxMi43NzQyQzExLjMyMjYgMTMuNzc0MiAxMi4wOTY4IDE0IDEzLjA5NjggMTRDMTYuMjkwMyAxNCAxOCAxMS45MzU1IDE4IDkuMjI1ODFaTTkuMTYxMjkgMTIuMzg3MUM4LjIyNTgxIDEyLjM4NzEgNy42Nzc0MiAxMS43NDE5IDcuNjc3NDIgMTAuNzA5N0M3LjY3NzQyIDguODM4NzEgOC45Njc3NCA3LjY3NzQyIDEwLjA5NjggNy42Nzc0MkMxMS4wNjQ1IDcuNjc3NDIgMTEuNTQ4NCA4LjM4NzEgMTEuNTQ4NCA5LjM1NDg0QzExLjU0ODQgMTAuODcxIDEwLjQ4MzkgMTIuMzg3MSA5LjE2MTI5IDEyLjM4NzFaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K' + ); + + add_submenu_page( $menu_slug, + __( 'Email Log', 'wp-mail-logging' ), + __( 'Email Log', 'wp-mail-logging' ), + $capability, + $menu_slug + ); + + add_submenu_page( $menu_slug, + __( 'Settings', 'wp-mail-logging' ), + __( 'Settings', 'wp-mail-logging' ), + $capability, + $menu_slug . '&tab=settings', + '__return_null' + ); + + add_submenu_page( $menu_slug, + __( 'SMTP', 'wp-mail-logging' ), + __( 'SMTP', 'wp-mail-logging' ), + $capability, + $menu_slug . '&tab=smtp', + '__return_null' + ); + + // Fix submenu highlighting depending on the selected tab. + add_filter( 'submenu_file', function( $submenu_file, $parent_file ) use ( $menu_slug ) { + + if ( $parent_file !== $menu_slug ) { + return $submenu_file; + } + + $tab = filter_input( INPUT_GET, 'tab' ); + + if ( ! empty( $tab ) ) { + return $menu_slug . '&tab=' . esc_html( $tab ); + } + + return $submenu_file; + }, 10, 2 ); + } + + /** + * Show About page. + * + * @since 1.11.0 + * + * @deprecated 1.11.0 + * + * @return string + */ public function LogSubMenuAbout() { - ?> -
-

getPluginDisplayName(); echo ' '; _e('About', 'wp-mail-logging'); ?>

-

Why use?

-

Sometimes you may ask yourself if a mail was actually sent by WordPress - with - With getPluginDisplayName(); ?>, you can:

-
    -
  • View a complete list of sent mails.
  • -
  • Search for mails.
  • -
  • Count on regular updates, enhancements, and troubleshooting.
  • -
  • DevOP: IP of server sent the mail
  • -
  • Developer: Boost your development performance by keeping track of sent mails from your WordPress site.
  • -
  • Developer: Use Filters that are provided to extend the columns.
  • -
-

Contributors

-

This plugin is open source and some people helped to make it better:

-
    -
  • tripflex
  • -
  • André Groenewald (Icon before version 1.8.0, icon after this version slightly modified)
  • -
-

Donate

-

Please consider to make a donation if you like the plugin. I spent a lot of time for support, enhancements and updates in general.

- Donate -
- id != $wp_logging_list_page ) return; + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + $plugin_meta = WPML_Init::getInstance()->getService( 'plugin-meta' ); + + if ( empty( $plugin_meta['version'] ) ) { + return; + } + // Enqueue styles and scripts if we're on the list page - wp_enqueue_style( 'wp-mail-logging-modal', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/../css/modal.css', array(), $this->getVersion() ); - wp_enqueue_script('wp-mail-logging-modal', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/../js/modal.js', array( 'jquery' ), $this->getVersion(), true); + $min = ''; + + if ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) { + $min = '.min'; + } + + wp_enqueue_style( + 'wp-mail-logging-admin', + $assets_url . "/css/wp-mail-logging-admin{$min}.css", + [], + $plugin_meta['version'] + ); + + wp_enqueue_style( 'wp-mail-logging-modal', $assets_url . "/css/modal{$min}.css", [], $plugin_meta['version'] ); + wp_enqueue_script('wp-mail-logging-modal', $assets_url . "/js/modal{$min}.js", [ 'jquery' ], $plugin_meta['version'], true); wp_localize_script('wp-mail-logging-modal', 'wpml_modal_ajax', $this->mailRendererAJAXHandler->get_ajax_data()); - wp_enqueue_style( 'wp-mail-logging-icons', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/../lib/font-awesome/css/font-awesome.min.css', array(), '4.1.0' ); - wp_enqueue_script( 'icheck', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/../lib/icheck/icheck.min.js', array(), '1.0.2' ); - wp_enqueue_style( 'icheck-square', untrailingslashit( plugin_dir_url( __FILE__ ) ) . '/../lib/icheck/square/blue.css', array(), '1.0.2' ); } /** @@ -410,7 +500,6 @@ function save_screen_options( $status, $option, $value ) { } public function LogMenu() { - global $wp_version, $wpml_settings; if ( !current_user_can( $this->getSetting( 'can-see-submission-data', 'manage_options' ) ) ) { wp_die(__('You do not have sufficient permissions to access this page.', 'wp-mail-logging')); @@ -421,102 +510,34 @@ public function LogMenu() { } $tab = isset( $_GET['tab'] ) ? $_GET['tab'] : null; - ?> -
-

getPluginDisplayName(); echo ' '; _e('Log', 'wp-mail-logging'); ?>

- - - getService( 'redux' ); - $framework = $redux->ReduxFramework; - - $enqueue = new \Redux_Enqueue ( $framework ); - $enqueue->init(); - - $panel = new \Redux_Panel ( $framework ); - $panel->init(); - break; - default: - $this->_LogMenu(); - break; - } - ?> +
+
+ +
getSetting( 'can-see-submission-data', 'manage_options' ) ) ) { - wp_die( __( 'You do not have sufficient permissions to access this page.', 'wp-mail-logging' ) ); - } - - if ( ! class_exists( 'Email_Log_List_Table' ) ) { - require_once( plugin_dir_path( __FILE__ ) . 'WPML_Email_Log_List.php' ); - } + } - ?> + public function _LogMenu() { -
-
-
-
-
- - = 3.8 ): ?> -
- - X - -
- = 3.8 ): ?> -
- -
- -
-
- supportedMailRendererFormats as $key => $format ) { - $checked = checked($format, $this->getSetting('preferred-mail-format'), false); - echo ' ' . esc_html( $format ) . ' '; - } - ?> -
-
-
-
- -
-
- -
-
-
+ if ( ! current_user_can( $this->getSetting( 'can-see-submission-data', 'manage_options' ) ) ) { + wp_die( __( 'You do not have sufficient permissions to access this page.', 'wp-mail-logging' ) ); + } + if ( ! class_exists( 'Email_Log_List_Table' ) ) { + require_once( plugin_dir_path( __FILE__ ) . 'WPML_Email_Log_List.php' ); + } + ?>
getService('emailLogList'); $emailLogList->prepare_items( $search ); $emailLogList->search_box( __( 'Search' ), 's' ); + $emailLogList->views(); $emailLogList->display(); ?>
diff --git a/src/WPML_Plugin.php b/src/WPML_Plugin.php index 23dfaf34..433ed5c7 100644 --- a/src/WPML_Plugin.php +++ b/src/WPML_Plugin.php @@ -2,6 +2,9 @@ namespace No3x\WPML; +use No3x\WPML\Admin\EmailLogsTab; +use No3x\WPML\Admin\SettingsTab; +use No3x\WPML\Admin\SMTPTab; use No3x\WPML\Model\WPML_Mail as Mail; use No3x\WPML\Renderer\WPML_MailRenderer_AJAX_Handler; @@ -149,6 +152,13 @@ public function upgrade() { } public function addActionsAndFilters() { + + EmailLogsTab::get_instance()->hooks(); + SettingsTab::get_instance()->hooks(); + SMTPTab::get_instance()->hooks(); + + add_action( 'current_screen', [ $this, 'create_screens' ], 90 ); + // Add options administration page // http://plugin.michael-simpson.com/?page_id=47 add_action( 'admin_menu', array(&$this, 'createSettingsMenu'), 9 ); @@ -183,6 +193,121 @@ public function addActionsAndFilters() { // Register AJAX hooks // http://plugin.michael-simpson.com/?page_id=41 + + // Admin footer text. + add_filter( 'admin_footer_text', [ $this, 'admin_footer' ], 1, 2 ); + + add_filter( 'in_admin_header', [ $this, 'admin_header' ] ); + } + + /** + * Header for WP Mail Logging admin pages. + * + * @since 1.11.0 + * + * @return void + * + * @throws \Exception + */ + public function admin_header() { + + global $wp_logging_list_page; + + $current_screen = get_current_screen(); + + if ( $current_screen->id !== $wp_logging_list_page ) { + return; + } + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + $tab = isset( $_GET['tab'] ) ? $_GET['tab'] : null; + ?> +
+
+
+
+ ', + esc_url( $assets_url . '/images/logo.png' ), + esc_url( $assets_url . '/images/logo@2x.png' ), + esc_html__( 'WP Mail Logging logo') + ) + ?> +
+ +
+ +
+ + '', + 'label' => __( 'Email Log', 'wp-mail-logging' ), + ], + [ + 'slug' => 'settings', + 'label' => __( 'Settings', 'wp-mail-logging' ), + ], + [ + 'slug' => 'smtp', + 'label' => __( 'SMTP', 'wp-mail-logging' ), + ], + ]; + + foreach ( $menu_tabs as $menu_tab ) { + ?> + + + + +
+
+ id !== $wp_logging_list_page ) { + return; + } + + $tab = filter_input( INPUT_GET, 'tab' ); + + switch ( $tab ) { + case 'settings': + $tabObj = SettingsTab::get_instance(); + break; + case 'smtp': + $tabObj = SMTPTab::get_instance(); + break; + default: + $tabObj = EmailLogsTab::get_instance(); + break; + } + + if ( is_null( $tabObj ) ) { + return; + } + + $tabObj->screen_hooks(); } /** @@ -224,4 +349,62 @@ public function log_email( $mailArray ) { public static function getClass() { return __CLASS__; } + + /** + * When user is on a WP Mail Logging related admin page, display footer text + * that graciously asks them to rate us. + * + * @since 1.11.0 + * + * @param string $text Footer text. + * + * @return string + */ + public function admin_footer( $text ) { + + global $current_screen, $wp_logging_list_page; + + if ( empty( $current_screen->id ) || $current_screen->id !== $wp_logging_list_page ) { + return $text; + } + + $url = 'https://wordpress.org/support/plugin/wp-mail-logging/reviews/?filter=5#new-post'; + + return sprintf( + wp_kses( /* translators: $1$s - WP Mail Logging plugin name; $2$s - WP.org review link; $3$s - WP.org review link. */ + __( 'Please rate %1$s ★★★★★ on WordPress.org to help us spread the word.', 'wp-mail-logging' ), + [ + 'a' => [ + 'href' => [], + 'target' => [], + 'rel' => [], + ], + ] + ), + 'WP Mail Logging', + $url, + $url + ); + } + + /** + * Plugin activation hook. + * + * @since 1.11.0 + * + * @return void + */ + public function activate() {} + + /** + * Get the assets URL. + * + * @since 1.11.0 + * + * @return string + */ + public function get_assets_url() { + + return untrailingslashit( WP_MAIL_LOGGING_PLUGIN_URL ) . '/assets'; + } } diff --git a/src/WPML_PrivacyController.php b/src/WPML_PrivacyController.php index 9256d6c4..26a77687 100644 --- a/src/WPML_PrivacyController.php +++ b/src/WPML_PrivacyController.php @@ -134,6 +134,7 @@ function erase( $email_address, $page = 1 ) { if($mail->delete()) { $items_removed = true; } else { + /* translators: %d Mail Log ID that was not removed. */ $messages[] = sprintf( __( 'A mail with the id %d was unable to be removed at this time.', 'wp-mail-logging'), $mail->get_mail_id()); $items_retained = true; } diff --git a/src/WPML_ProductEducation.php b/src/WPML_ProductEducation.php new file mode 100644 index 00000000..8e788079 --- /dev/null +++ b/src/WPML_ProductEducation.php @@ -0,0 +1,191 @@ +hooks(); + } + + /** + * WP-related hooks. + * + * @since 1.11.0 + * + * @return void + */ + private function hooks() { + + add_action( 'wp_ajax_wp_mail_logging_product_education_dismiss', [ $this, 'product_education_dismiss' ] ); + } + + /** + * AJAX function for product education dismiss. + * + * @since 1.11.0 + * + * @return void + */ + public function product_education_dismiss() { + + check_ajax_referer( self::DISMISS_NONCE_ACTION, 'nonce' ); + + if ( empty( $_POST['productEducationID'] ) ) { + + wp_send_json_error( + esc_html__( 'Request invalid.', 'wp-mail-logging' ) + ); + } + + $this->update_dismissed_option( htmlspecialchars( $_POST['productEducationID'] ) ); + + wp_send_json_success(); + } + + /** + * Include the `$id` to the dismissed product education option. + * + * @since 1.11.0 + * + * @param string $id ID of the product education banner dismissed. + * + * @return bool Whether or not the option was updated. + */ + private function update_dismissed_option( $id ) { + + $option = $this->get_option(); + + $dismissed = empty( $option['dismissed'] ) ? [] : $option['dismissed']; + $dismissed[ $id ] = true; + + $option['dismissed'] = $dismissed; + + return update_option( self::OPTION_KEY, $option, false ); + } + + /** + * Get saved option. + * + * @since 1.11.0 + * + * @return array + */ + public function get_option() { + + if ( ! is_null( $this->option ) ) { + return $this->option; + } + + return get_option( self::OPTION_KEY, [] ); + } + + /** + * Returns whether a banner was previously dismissed or not. + * + * @since 1.11.0 + * + * @param string $id Product Education banner ID. + * + * @return bool + */ + public function is_banner_dismissed( $id ) { + + $option = $this->get_option(); + + if ( empty( $option['dismissed'] ) || ! array_key_exists( $id, $option['dismissed'] ) ) { + return false; + } + + return true; + } + + /** + * Create product education banner. + * + * @since 1.11.0 + * + * @param string $id Unique ID for the product education banner. + * @param string $title Title of the product education banner. + * @param string $content Education banner content. + * @param string[] $button { + * Optional. An array of arguments for the button. If not provided, the product + * education banner won't display a button. + * + * @type string $url URL of the button. + * @type string $label Label of the button. + * } + * + * @return void + */ + public static function create_banner( $id, $title, $content, $button = [] ) { + ?> +
+ +
+ + + + + +

+ + + + + + + + +
+
+ $class, + 'message' => $message, + 'is_dismissible' => $is_dismissible, + ]; + } + + /** + * Display all admin notices. + * + * @since 1.11.0 + * + * @return void + */ + public static function display_admin_notices() { + + foreach ( self::$admin_notices as $notice ) { + $dismissible = $notice['is_dismissible'] ? 'is-dismissible' : ''; + ?> +
+

+ +

+
+ '; + } + + /** + * Get the appropriate Dashicon class for a given icon class. + * + * @since 1.11.0 + * + * @param string $iconClass Icon class. + * + * @return string + */ + private static function get_dashicon_icon_class( $iconClass ) { + + $supported = [ + 'archive' => 'media-archive', + 'audio' => 'media-audio', + 'code' => 'media-code', + 'excel' => 'media-spreadsheet', + 'image' => 'format-image', + 'movie' => 'media-video', + 'pdf' => 'pdf', + 'photo' => 'format-image', + 'picture' => 'format-image', + 'sound' => 'media-audio', + 'video' => 'media-video', + 'zip' => 'media-archive', + ]; + + if ( ! array_key_exists( $iconClass, $supported ) ) { + // Default Dashicon. + return 'media-document'; + } + + return $supported[ $iconClass ]; + } + /** * Determines appropriate fa icon for a given icon class + * * @since 1.9.0 + * @deprecated 1.11.0 Removed Font Awesome library and moved to Dashicons. Use `WPML_Utils::determine_dashicon_icon()`. + * @see WPML_Utils::determine_dashicon_icon() + * * @param string $iconClass icon class. + * * @return string returns fa icon. */ public static function determine_fa_icon( $iconClass ) { + return ''; } /** - * Find appropriate fa icon from file path + * Find appropriate Dashicon icon from file path + * * @since 1.9.0 + * @since 1.11.0 Use Dashicons instead of Font Awesome for the icons. + * * @param WPML_Attachment $attachment attachment. + * * @return string */ public static function generate_attachment_icon( $attachment ) { - return self::determine_fa_icon( $attachment->getIconClass() ); + + return self::determine_dashicon_icon( $attachment->getIconClass() ); + } + + /** + * Get UTM URL. + * + * @since 1.11.0 + * + * @param string $url Base url. + * @param array|string $utm Array of UTM params, or if string provided - utm_content URL parameter. + * + * @return string + */ + public static function get_utm_url( $url, $utm ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh + + // Defaults. + $source = 'WordPress'; + $medium = 'plugin'; + $campaign = 'wp-mail-logging-plugin'; + $content = 'general'; + + if ( is_array( $utm ) ) { + if ( isset( $utm['source'] ) ) { + $source = $utm['source']; + } + if ( isset( $utm['medium'] ) ) { + $medium = $utm['medium']; + } + if ( isset( $utm['campaign'] ) ) { + $campaign = $utm['campaign']; + } + if ( isset( $utm['content'] ) ) { + $content = $utm['content']; + } + } elseif ( is_string( $utm ) ) { + $content = $utm; + } + + $query_args = [ + 'utm_source' => esc_attr( rawurlencode( $source ) ), + 'utm_medium' => esc_attr( rawurlencode( $medium ) ), + 'utm_campaign' => esc_attr( rawurlencode( $campaign ) ), + ]; + + if ( ! empty( $content ) ) { + $query_args['utm_content'] = esc_attr( rawurlencode( $content ) ); + } + + return add_query_arg( $query_args, $url ); + } + + /** + * Get the admin page base URL. + * + * @since 1.11.0 + * + * @return string + */ + public static function get_admin_page_url() { + + $settings = SettingsTab::get_settings(); + + if ( isset( $settings['top-level-menu'] ) && $settings['top-level-menu'] === '0' ) { + $admin_base = admin_url( 'tools.php' ); + } else { + $admin_base = admin_url( 'admin.php' ); + } + + return add_query_arg( 'page', self::ADMIN_PAGE_SLUG, $admin_base ); } } diff --git a/src/inc/Admin/EmailLogsTab.php b/src/inc/Admin/EmailLogsTab.php new file mode 100644 index 00000000..a7b5afe8 --- /dev/null +++ b/src/inc/Admin/EmailLogsTab.php @@ -0,0 +1,527 @@ +get_message(); + exit; + } + + /** + * Only add hooks here that are invoked after `current_screen` action hook. + * + * @since 1.11.0 + * + * @return void + */ + public function screen_hooks() { + + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); + add_action( 'wp_mail_logging_email_logs_tab_display_before', [ $this, 'product_education_email_failure' ] ); + add_action( 'wp_mail_logging_email_logs_tab_display_after', [ $this, 'product_education_wp_mail_smtp' ] ); + add_filter( 'admin_body_class', [ $this, 'add_admin_body_class' ] ); + add_action( 'wp_mail_logging_admin_tab_content', [ $this, 'display_tab_content' ] ); + } + + /** + * Enqueue scripts in Email Logs tab. + * + * @since 1.11.0 + * + * @return void + * + * @throws \Exception + */ + public function enqueue_scripts() { + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + $plugin_meta = WPML_Init::getInstance()->getService( 'plugin-meta' ); + + if ( empty( $plugin_meta['version'] ) ) { + return; + } + + $min = ''; + + if ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) { + $min = '.min'; + } + + wp_enqueue_script( + 'wp-mail-logging-admin-logs', + $assets_url . "/js/wp-mail-logging-admin-logs{$min}.js", + [ 'jquery' ], + $plugin_meta['version'] + ); + + /** + * Filters the strings to be localized and used in JS. + * + * @param string $data Data to be localized. + * + * @since 1.11.0 + */ + $filtered_localized_strings = apply_filters( + 'wp_mail_logging_admin_logs_localize_strings', + [ + 'ajaxurl' => admin_url( 'admin-ajax.php' ), + ] + ); + + wp_localize_script( + 'wp-mail-logging-admin-logs', + 'wp_mail_logging_admin_logs', + $filtered_localized_strings + ); + + // Enqueue Lity. + wp_enqueue_script( + 'wp-mail-logging-admin-lity', + $plugin_meta['uri'] . "lib/lity/lity.min.js", + [], + '2.4.1', + true + ); + + wp_enqueue_style( + 'wp-mail-logging-admin-lity', + $plugin_meta['uri'] . "lib/lity/lity.min.css", + [], + '2.4.1' + ); + } + + /** + * Display product education for email failures. + * + * Only display this product education if the current page has email logs with errors. + * + * @since 1.11.0 + * + * @return void + */ + public function product_education_email_failure() { + + if ( empty( $this->get_current_logs_with_errors() ) ) { + return; + } + + /** @var WPML_ProductEducation $productEducation */ + $productEducation = WPML_Init::getInstance()->getService( 'productEducation' ); + + if ( $productEducation->is_banner_dismissed( self::BANNER_TOP_ID ) ) { + return; + } + + $content = '
'; + $content .= '

' . esc_html__( "To solve email delivery issues, install WP Mail SMTP (free) - trusted by over 3,000,00 sites!", 'wp-mail-logging' ) . '

'; + $content .= '

' . esc_html__( "Use the one-click install and setup wizard to fix your emails in minutes.", 'wp-mail-logging' ) . '

'; + $content .= '
'; + + WPML_ProductEducation::create_banner( + self::BANNER_TOP_ID, + esc_html__( 'Heads up! WP Mail Logging has detected a problem sending emails.', 'wp-mail-logging' ), + $content, + [ + 'url' => SMTPTab::get_url(), + 'label' => esc_html__( 'Install WP Mail SMTP', 'wp-mail-logging' ), + ] + ); + } + + /** + * Returns an array containing the current logs in the page with errors. + * + * @since 1.11.0 + * + * @return array + */ + private function get_current_logs_with_errors() { + + if ( ! is_null( $this->current_logs_with_errors ) ) { + return $this->current_logs_with_errors; + } + + if ( ! $this->emailLogList->has_items() ) { + $this->current_logs_with_errors = []; + return []; + } + + $this->current_logs_with_errors = array_filter( $this->emailLogList->items, function( $log ) { + return ! empty( $log['error'] ); + } ); + + return $this->current_logs_with_errors; + } + + /** + * Display product education about WP Mail SMTP if there's no logs with errors in the page. + * + * @since 1.11.0 + * + * @return void + */ + public function product_education_wp_mail_smtp() { + + /** @var WPML_ProductEducation $productEducation */ + $productEducation = WPML_Init::getInstance()->getService( 'productEducation' ); + + if ( $productEducation->is_banner_dismissed( self::BANNER_BOTTOM_ID ) ) { + return; + } + + if ( ! empty( $this->get_current_logs_with_errors() ) && ! $productEducation->is_banner_dismissed( self::BANNER_TOP_ID ) ) { + return; + } + + $features = [ + [ + 'filename' => 'archive', + 'label' => __( 'Email Logs', 'wp-mail-logging' ), + 'list' => [ + __( 'See delivery status', 'wp-mail-logging' ), + __( 'Resend emails', 'wp-mail-logging' ), + __( 'View original email content', 'wp-mail-logging' ), + ], + ], + [ + 'filename' => 'single', + 'label' => __( 'Individual Log', 'wp-mail-logging' ), + 'list' => [ + __( 'Review technical details', 'wp-mail-logging' ), + __( 'Track open and click data', 'wp-mail-logging' ), + __( 'Download sent attachments', 'wp-mail-logging' ), + ], + ], + [ + 'filename' => 'reports', + 'label' => __( 'Email Reports', 'wp-mail-logging' ), + 'list' => [ + __( 'Generate deliverability charts', 'wp-mail-logging' ), + __( 'Review open & click statistics', 'wp-mail-logging' ), + __( 'Get weekly email summary', 'wp-mail-logging' ), + ], + ], + ]; + + ob_start(); + ?> +

+ WP Mail SMTP Pro offers advanced email logging, failed email alerts, backup connections, email reports, email tracking, and much more!', 'wp-mail-logging' ), + esc_url( WPML_Utils::get_utm_url( 'https://wpmailsmtp.com/', 'general' ) ) + ), + [ + 'a' => [ + 'target' => [], + 'href' => [], + ], + 'strong' => [], + ] + ) + ?> +

+

+ +

+ +
+ + getService( 'plugin' )->get_assets_url(); + foreach ( $features as $feature ) { + ?> +
+ " data-lity data-lity-desc=""> + " alt=""> + + + +
    + %s', esc_html( $list ) ); + } + ?> +
+
+ +
+ WPML_Utils::get_utm_url( 'https://wpmailsmtp.com/pricing/', 'Get WP Mail SMTP Pro' ), + 'label' => __( 'Get WP Mail SMTP Pro', 'wp-mail-logging' ), + 'target' => '_blank', + ] + ); + } + + /** + * Display the Email Logs tab content. + * + * @since 1.11.0 + * + * @return void + */ + public function display_tab_content() { + + // Admin notices display after the first heading tag. + echo '

' . esc_html__( 'Email Logs', 'wp-mail-logging' ) . '

'; + + $this->emailLogList = WPML_Init::getInstance()->getService('emailLogList'); + $search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : false; + $this->emailLogList->prepare_items( $search ); + + /** + * Fires before displaying the email logs content. + * + * @since 1.11.0 + * + * @param WPML_Email_Log_List $emailLogList Email Log List object. + */ + do_action( 'wp_mail_logging_email_logs_tab_display_before', $this->emailLogList ); + + $this->emailLogList->display_notices(); + + $this->single_log_modal(); + $this->display_table(); + + /** + * Fires after displaying the email logs content. + * + * @since 1.11.0 + * + * @param WPML_Email_Log_List $emailLogList Email Log List object. + */ + do_action( 'wp_mail_logging_email_logs_tab_display_after', $this->emailLogList ); + } + + /** + * Modal template for showing single log details. + * + * @since 1.11.0 + * + * @return void + */ + private function single_log_modal() { + + global $wp_version; + ?> +
+
+
+
+ +
+
+
    + getService('supported-mail-renderer-formats') as $key => $format ) { + $active_class = WPML_Init::getInstance()->getService( 'plugin' )->getSetting( 'preferred-mail-format' ) === $format ? 'wp-mail-logging-active-format' : ''; + ?> +
  • + +
+
+
+
+
+
+
+ +
+ + emailLogList->search_box( __( 'Search', 'wp-mail-logging' ), 's' ); + $this->emailLogList->views(); + $this->emailLogList->display(); + ?> +
+ id !== $wp_logging_list_page ) { + return $classes; + } + + return $classes . ' wp-mail-logging-admin-page'; + } +} diff --git a/src/inc/Admin/SMTPTab.php b/src/inc/Admin/SMTPTab.php new file mode 100644 index 00000000..ae083253 --- /dev/null +++ b/src/inc/Admin/SMTPTab.php @@ -0,0 +1,752 @@ + 'wp-mail-smtp/wp_mail_smtp.php', + 'lite_wporg_url' => 'https://wordpress.org/plugins/wp-mail-smtp/', + 'lite_download_url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip', + 'pro_plugin' => 'wp-mail-smtp-pro/wp_mail_smtp.php', + 'smtp_settings_url' => 'admin.php?page=wp-mail-smtp', + 'smtp_wizard_url' => 'admin.php?page=wp-mail-smtp-setup-wizard', + ]; + + /** + * Runtime data used for generating page HTML. + * + * @since 1.11.0 + * + * @var array + */ + private $output_data = []; + + /** + * Only instance of this object. + * + * @since 1.11.0 + * + * @var EmailLogsTab + */ + private static $instance = null; + + /** + * Get the only instance of this object. + * + * @since 1.11.0 + * + * @return EmailLogsTab + */ + public static function get_instance() { + + if ( is_null( self::$instance ) ) { + self::$instance = new self; + } + + return self::$instance; + } + + /** + * Constructor + * + * @since 1.11.0 + */ + private function __construct() { + } + + /** + * Hooks that are fired earlier. + * + * @since 1.11.0 + * + * @return void + */ + public function hooks() { + + add_action( 'wp_ajax_wp_mail_logging_install_smtp', [ $this, 'ajax_install_wp_mail_smtp_plugin' ] ); + add_action( 'wp_ajax_wp_mail_logging_activate_smtp', [ $this, 'ajax_activate_wp_mail_smtp_plugin' ] ); + add_action( 'wp_ajax_wp_mail_logging_smtp_page_check_plugin_status', [ $this, 'ajax_check_plugin_status' ] ); + } + + /** + * AJAX operation to install and activate WP Mail SMTP plugin. + * + * @since 1.11.0 + * + * @return void + */ + public function ajax_install_wp_mail_smtp_plugin() { + + check_ajax_referer( self::NONCE_ACTION, 'nonce' ); + + $generic_error = __( 'There was an error while performing your request.', 'wp-mail-logging' ); + + if ( ! $this->can_install_plugin() ) { + wp_send_json_error( esc_html( $generic_error ) ); + } + + $error = esc_html__( 'Could not install the plugin. Please download and install it manually.', 'wp-mail-logging' ); + $url = esc_url_raw( self::get_url() ); + + ob_start(); + + $creds = request_filesystem_credentials( + $url, + '', + false, + false, + null + ); + + // Hide the filesystem credentials form. + ob_end_clean(); + + if ( $creds === false || ! WP_Filesystem( $creds ) ) { + wp_send_json_error( $error ); + } + + /* + * We do not need any extra credentials if we have gotten this far, so let's install the plugin. + */ + require_once WP_MAIL_LOGGING_PLUGIN_DIR . 'src/inc/class-install-skin.php'; + + // Do not allow WordPress to search/download translations, as this will break JS output. + remove_action( 'upgrader_process_complete', [ 'Language_Pack_Upgrader', 'async_upgrade' ], 20 ); + + // Create the plugin upgrader with our custom skin. + $installer = new PluginSilentUpgrader( new \WP_Mail_Logging_Install_Skin() ); + + // Error check. + if ( ! method_exists( $installer, 'install' ) ) { + wp_send_json_error( $error ); + } + + $installer->install( $this->config['lite_download_url'] ); + + // Flush the cache and return the newly installed plugin basename. + wp_cache_flush(); + + if ( empty( $installer->plugin_info() ) ) { + wp_send_json_error( $error ); + } + + add_option( 'wp_mail_smtp_source', 'wp-mail-logging' ); + + $result = [ + 'msg' => $generic_error, + 'is_activated' => false, + 'basename' => $installer->plugin_info(), + ]; + + if ( ! current_user_can( 'activate_plugins' ) ) { + + $result['msg'] = esc_html__( 'Plugin installed.', 'wp-mail-logging' ); + + wp_send_json_success( $result ); + } + + // Activate the plugin silently. + $activated = activate_plugin( $installer->plugin_info() ); + + if ( ! is_wp_error( $activated ) ) { + + update_option( 'wp_mail_smtp_activation_prevent_redirect', true ); + + $result['is_activated'] = true; + $result['msg'] = esc_html__( 'Plugin installed & activated.', 'wp-mail-logging' ); + + wp_send_json_success( $result ); + } + + // Fallback error just in case. + wp_send_json_error( $result ); + } + + /** + * AJAX operation to activate WP Mail SMTP plugin. + * + * @since 1.11.0 + * + * @return void + */ + public function ajax_activate_wp_mail_smtp_plugin() { + + check_ajax_referer( self::NONCE_ACTION, 'nonce' ); + + if ( ! current_user_can( 'activate_plugins' ) ) { + wp_send_json_error( esc_html__( 'Plugin activation is disabled for you on this site.', 'wp-mail-logging' ) ); + } + + if ( empty( $_POST['plugin'] ) ) { + wp_send_json_error( esc_html__( 'There was an error while performing your request.', 'wp-mail-logging' ) ); + } + + $activate = activate_plugins( sanitize_text_field( wp_unslash( $_POST['plugin'] ) ) ); + + if ( ! is_wp_error( $activate ) ) { + update_option( 'wp_mail_smtp_activation_prevent_redirect', true ); + add_option( 'wp_mail_smtp_source', 'wp-mail-logging' ); + wp_send_json_success( esc_html__( 'Plugin activated.', 'wp-mail-logging' ) ); + } + + wp_send_json_error( esc_html__( 'Could not activate the plugin. Please activate it on the Plugins page.', 'wp-mail-logging' ) ); + } + + /** + * AJAX operation to check plugin setup status. + * + * Used to properly init step 'Setup' section after completing step 'Install'. + * + * @since 1.11.0 + */ + public function ajax_check_plugin_status() { + + if ( ! check_ajax_referer( self::NONCE_ACTION, 'nonce', false ) || + ! current_user_can( 'activate_plugins' ) + ) { + + wp_send_json_error( + [ + 'error' => esc_html__( 'You do not have permission.', 'wp-mail-logging' ), + ] + ); + } + + if ( ! $this->is_smtp_activated() ) { + + wp_send_json_error( + [ + 'error' => esc_html__( 'Plugin unavailable.', 'wp-mail-logging' ), + ] + ); + } + + $result = [ + 'setup_status' => (int) $this->is_smtp_configured(), + ]; + + // Prevent redirect to the WP Mail SMTP Setup Wizard on the fresh installs. + // We need this workaround since WP Mail SMTP doesn't check whether the mailer is already configured when redirecting to the Setup Wizard on the first run. + if ( $result['setup_status'] > 0 ) { + update_option( 'wp_mail_smtp_activation_prevent_redirect', true ); + } + + wp_send_json_success( $result ); + } + + /** + * Only add hooks here that are invoked after `current_screen` action hook. + * + * @since 1.11.0 + * + * @return void + */ + public function screen_hooks() { + + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); + add_action( 'wp_mail_logging_admin_tab_content', [ $this, 'display_tab_content' ] ); + add_filter( 'screen_options_show_screen', '__return_false' ); + } + + /** + * Enqueue scripts in SMTP tab. + * + * @since 1.11.0 + * + * @return void + * + * @throws \Exception + */ + public function enqueue_scripts() { + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + $plugin_meta = WPML_Init::getInstance()->getService( 'plugin-meta' ); + + $min = ''; + + if ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) { + $min = '.min'; + } + + wp_enqueue_style( + 'wp-mail-logging-admin-smtp', + $assets_url . "/css/wp-mail-logging-smtp{$min}.css", + [], + $plugin_meta['version'] + ); + + wp_enqueue_script( + 'wp-mail-logging-admin-smtp', + $assets_url . "/js/wp-mail-logging-admin-smtp{$min}.js", + [ 'jquery' ], + $plugin_meta['version'] + ); + + $error_could_not_install = sprintf( + wp_kses( /* translators: %s - Lite plugin download URL. */ + __( 'Could not install the plugin automatically. Please download it and install it manually.', 'wp-mail-logging' ), + [ + 'a' => [ + 'href' => true, + ], + ] + ), + esc_url( $this->config['lite_download_url'] ) + ); + + $error_could_not_activate = sprintf( + wp_kses( /* translators: %s - Lite plugin download URL. */ + __( 'Could not activate the plugin. Please activate it on the Plugins page.', 'wp-mail-logging' ), + [ + 'a' => [ + 'href' => true, + ], + ] + ), + esc_url( admin_url( 'plugins.php' ) ) + ); + + wp_localize_script( + 'wp-mail-logging-admin-smtp', + 'wp_mail_logging_admin_smtp', + [ + 'ajaxurl' => admin_url( 'admin-ajax.php' ), + 'nonce' => wp_create_nonce( self::NONCE_ACTION ), + 'activating' => esc_html__( 'Activating...', 'wp-mail-logging' ), + 'installing' => esc_html__( 'Installing...', 'wp-mail-logging' ), + 'activated' => esc_html__( 'WP Mail SMTP Installed & Activated', 'wp-mail-logging' ), + 'download_now' => esc_html__( 'Download Now', 'wp-mail-logging' ), + 'plugins_page' => esc_html__( 'Go to Plugins page', 'wp-mail-logging' ), + 'error_could_not_install' => $error_could_not_install, + 'error_could_not_activate' => $error_could_not_activate, + 'manual_install_url' => $this->config['lite_download_url'], + 'manual_activate_url' => admin_url( 'plugins.php' ), + 'smtp_wizard_url' => esc_url( $this->config['smtp_wizard_url'] ), + 'smtp_wizard' => esc_html__( 'Open Setup Wizard', 'wp-mail-logging' ), + 'smtp_settings' => esc_html__( 'Go to SMTP settings', 'wp-mail-logging' ), + 'smtp_settings_url' => esc_url( $this->config['smtp_settings_url'] ), + ] + ); + + // Enqueue Lity. + wp_enqueue_script( + 'wp-mail-logging-admin-lity', + $plugin_meta['uri'] . "lib/lity/lity.min.js", + [], + '2.4.1', + true + ); + + wp_enqueue_style( + 'wp-mail-logging-admin-lity', + $plugin_meta['uri'] . "lib/lity/lity.min.css", + [], + '2.4.1' + ); + } + + /** + * Display the SMTP tab content. + * + * @since 1.11.0 + * + * @return void + */ + public function display_tab_content() { + // Admin notices display after the first heading tag. + echo '

' . esc_html__( 'WP Mail SMTP', 'wp-mail-logging' ) . '

'; + + echo '
'; + $this->output_section_heading(); + $this->output_section_screenshot(); + $this->output_section_step_install(); + $this->output_section_step_setup(); + echo '
'; + } + + /** + * Generate and output heading section HTML. + * + * @since 1.11.0 + */ + private function output_section_heading() { + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + + // Heading section. + printf( + '
+ %3$s +

%4$s

+

%5$s

+
', + esc_url( $assets_url . '/images/smtp/wpmailsmtp-logo.png' ), + esc_url( $assets_url . '/images/smtp/wpmailsmtp-logo@2x.png' ), + esc_attr__( 'WP Mail SMTP', 'wp-mail-logging' ), + esc_html__( 'Making Email Deliverability Easy for WordPress', 'wp-mail-logging' ), + esc_html__( 'WP Mail SMTP fixes deliverability problems with your WordPress emails and form notifications. It\'s built by the same folks behind WPForms.', 'wp-mail-logging' ) + ); + } + + /** + * Generate and output screenshot section HTML. + * + * @since 1.11.0 + */ + private function output_section_screenshot() { + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + $plugin_meta = WPML_Init::getInstance()->getService( 'plugin-meta' ); + + // Screenshot section. + printf( + '
+
+ %2$s + +
+
    +
  • %4$s
  • +
  • %5$s
  • +
  • %6$s
  • +
  • %7$s
  • +
+
', + esc_url( $assets_url . '/images/smtp/screenshot-tnail.png?ver=' . $plugin_meta['version'] ), + esc_attr__( 'WP Mail SMTP screenshot', 'wp-mail-logging' ), + esc_url( $assets_url . '/images/smtp/screenshot-full.png?ver=' . $plugin_meta['version'] ), + esc_html__( 'Improves email deliverability in WordPress.', 'wp-mail-logging' ), + esc_html__( 'Used by 3+ million websites.', 'wp-mail-logging' ), + esc_html__( 'Free mailers: SendLayer, SMTP.com, Sendinblue, Google / Gmail, Mailgun, Postmark, SendGrid.', 'wp-mail-logging' ), + esc_html__( 'Pro mailers: Amazon SES, Microsoft 365 / Outlook.com, Zoho Mail.', 'wp-mail-logging' ) + ); + } + + /** + * Generate and output step 'Install' section HTML. + * + * @since 1.11.0 + */ + private function output_section_step_install() { + + $step = $this->get_data_step_install(); + + if ( empty( $step ) ) { + return; + } + + $button_format = ''; + $button_allowed_html = [ + 'button' => [ + 'class' => true, + 'data-plugin' => true, + 'data-action' => true, + ], + ]; + + if ( + ! $this->output_data['plugin_installed'] && + ! $this->output_data['pro_plugin_installed'] && + ! $this->can_install_plugin() + ) { + $button_format = '%2$s '; + $button_allowed_html = [ + 'a' => [ + 'class' => true, + 'href' => true, + 'target' => true, + 'rel' => true, + ], + 'span' => [ + 'class' => true, + 'aria-hidden' => true, + ], + ]; + } + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + + $button = sprintf( $button_format, esc_attr( $step['plugin'] ), esc_html( $step['button_text'] ), esc_attr( $step['button_class'] ), esc_attr( $step['button_action'] ) ); + + printf( + '
+ +
+

%3$s

+

%4$s

+ %5$s +
+
', + esc_url( $assets_url . '/images/smtp/' . $step['icon'] ), + esc_attr__( 'Step 1', 'wp-mail-logging' ), + esc_html( $step['heading'] ), + esc_html( $step['description'] ), + wp_kses( $button, $button_allowed_html ) + ); + } + + /** + * Step 'Install' data. + * + * @since 1.11.0 + * + * @return array Step data. + */ + private function get_data_step_install() { + + $step = []; + $step['heading'] = esc_html__( 'Install and Activate WP Mail SMTP', 'wp-mail-logging' ); + $step['description'] = esc_html__( 'Install WP Mail SMTP from the WordPress.org plugin repository.', 'wp-mail-logging' ); + + $this->output_data['all_plugins'] = get_plugins(); + $this->output_data['plugin_installed'] = array_key_exists( $this->config['lite_plugin'], $this->output_data['all_plugins'] ); + $this->output_data['pro_plugin_installed'] = array_key_exists( $this->config['pro_plugin'], $this->output_data['all_plugins'] ); + $this->output_data['plugin_activated'] = false; + $this->output_data['plugin_setup'] = false; + + if ( ! $this->output_data['plugin_installed'] && ! $this->output_data['pro_plugin_installed'] ) { + $step['icon'] = 'step-1.svg'; + $step['button_text'] = esc_html__( 'Install WP Mail SMTP', 'wp-mail-logging' ); + $step['button_class'] = 'button-primary'; + $step['button_action'] = 'install'; + $step['plugin'] = ''; + + if ( ! $this->can_install_plugin() ) { + $step['heading'] = esc_html__( 'WP Mail SMTP', 'wp-mail-logging' ); + $step['description'] = ''; + $step['button_text'] = esc_html__( 'WP Mail SMTP on WordPress.org', 'wp-mail-logging' ); + $step['plugin'] = $this->config['lite_wporg_url']; + } + + return $step; + } + + $this->output_data['plugin_activated'] = $this->is_smtp_activated(); + $this->output_data['plugin_setup'] = $this->is_smtp_configured(); + $step['icon'] = $this->output_data['plugin_activated'] ? 'step-complete.svg' : 'step-1.svg'; + $step['button_text'] = $this->output_data['plugin_activated'] ? esc_html__( 'WP Mail SMTP Installed & Activated', 'wp-mail-logging' ) : esc_html__( 'Activate WP Mail SMTP', 'wp-mail-logging' ); + $step['button_class'] = $this->output_data['plugin_activated'] ? 'grey disabled' : 'button-primary'; + $step['button_action'] = $this->output_data['plugin_activated'] ? '' : 'activate'; + $step['plugin'] = $this->output_data['pro_plugin_installed'] ? $this->config['pro_plugin'] : $this->config['lite_plugin']; + + return $step; + } + + /** + * Determine if plugin installation is allowed. + * + * @since 1.11.0 + * + * @return bool + */ + private function can_install_plugin() { + + if ( ! current_user_can( 'install_plugins' ) || ! wp_is_file_mod_allowed( 'wp_mail_logging_can_install_plugin' ) ) { + return false; + } + + return true; + } + + /** + * Whether WP Mail SMTP plugin active or not. + * + * @since 1.11.0 + * + * @return bool True if SMTP plugin is active. + */ + private function is_smtp_activated() { + + return function_exists( 'wp_mail_smtp' ) && ( is_plugin_active( $this->config['lite_plugin'] ) || is_plugin_active( $this->config['pro_plugin'] ) ); + } + + /** + * Whether WP Mail SMTP plugin configured or not. + * + * @since 1.11.0 + * + * @return bool True if some mailer is selected and configured properly. + */ + private function is_smtp_configured() { + + if ( ! $this->is_smtp_activated() ) { + return false; + } + + $phpmailer = $this->get_phpmailer(); + $mailer = \WPMailSMTP\Options::init()->get( 'mail', 'mailer' ); + + return ! empty( $mailer ) && + $mailer !== 'mail' && + wp_mail_smtp()->get_providers()->get_mailer( $mailer, $phpmailer )->is_mailer_complete(); + } + + /** + * Get $phpmailer instance. + * + * @since 1.11.0 + * + * @return \PHPMailer|\PHPMailer\PHPMailer\PHPMailer Instance of PHPMailer. + */ + private function get_phpmailer() { + + if ( version_compare( get_bloginfo( 'version' ), '5.5-alpha', '<' ) ) { + $phpmailer = $this->get_phpmailer_v5(); + } else { + $phpmailer = $this->get_phpmailer_v6(); + } + + return $phpmailer; + } + + /** + * Get $phpmailer v5 instance. + * + * @since 1.11.0 + * + * @return \PHPMailer Instance of PHPMailer. + */ + private function get_phpmailer_v5() { + + global $phpmailer; + + if ( ! ( $phpmailer instanceof \PHPMailer ) ) { + require_once ABSPATH . WPINC . '/class-phpmailer.php'; + require_once ABSPATH . WPINC . '/class-smtp.php'; + $phpmailer = new \PHPMailer( true ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + } + + return $phpmailer; + } + + /** + * Get $phpmailer v6 instance. + * + * @since 1.11.0 + * + * @return \PHPMailer\PHPMailer\PHPMailer Instance of PHPMailer. + */ + private function get_phpmailer_v6() { + + global $phpmailer; + + if ( ! ( $phpmailer instanceof \PHPMailer\PHPMailer\PHPMailer ) ) { + require_once ABSPATH . WPINC . '/PHPMailer/PHPMailer.php'; + require_once ABSPATH . WPINC . '/PHPMailer/SMTP.php'; + require_once ABSPATH . WPINC . '/PHPMailer/Exception.php'; + $phpmailer = new \PHPMailer\PHPMailer\PHPMailer( true ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + } + + return $phpmailer; + } + + /** + * Generate and output step 'Setup' section HTML. + * + * @since 1.11.0 + */ + private function output_section_step_setup() { + + $step = $this->get_data_step_setup(); + + if ( empty( $step ) ) { + return; + } + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + + printf( + '
+ +
+

%4$s

+

%5$s

+ +
+
', + esc_attr( $step['section_class'] ), + esc_url( $assets_url . '/images/smtp/' . $step['icon'] ), + esc_attr__( 'Step 2', 'wp-mail-logging' ), + esc_html__( 'Set Up WP Mail SMTP', 'wp-mail-logging' ), + esc_html__( 'Select and configure your mailer.', 'wp-mail-logging' ), + esc_attr( $step['button_class'] ), + esc_url( admin_url( $this->config['smtp_wizard_url'] ) ), + esc_html( $step['button_text'] ) + ); + } + + /** + * Step 'Setup' data. + * + * @since 1.11.0 + * + * @return array Step data. + */ + protected function get_data_step_setup() { + + $step = [ + 'icon' => 'step-2.svg', + ]; + + if ( $this->output_data['plugin_activated'] ) { + $step['section_class'] = ''; + $step['button_class'] = 'button-primary'; + $step['button_text'] = esc_html__( 'Open Setup Wizard', 'wp-mail-logging' ); + } else { + $step['section_class'] = 'grey'; + $step['button_class'] = 'grey disabled'; + $step['button_text'] = esc_html__( 'Start Setup', 'wp-mail-logging' ); + } + + if ( $this->output_data['plugin_setup'] ) { + $step['icon'] = 'step-complete.svg'; + $step['button_text'] = esc_html__( 'Go to SMTP settings', 'wp-mail-logging' ); + } + + return $step; + } + + /** + * Return the SMTP tab url. + * + * @since 1.11.0 + * + * @return string + */ + public static function get_url() { + + return add_query_arg( + [ + 'page' => 'wpml_plugin_log', + 'tab' => 'smtp', + ], + admin_url( 'admin.php' ) + ); + } +} diff --git a/src/inc/Admin/SettingsTab.php b/src/inc/Admin/SettingsTab.php new file mode 100644 index 00000000..f0428d05 --- /dev/null +++ b/src/inc/Admin/SettingsTab.php @@ -0,0 +1,523 @@ + '0', + 'can-see-submission-data' => 'manage_options', + 'datetimeformat-use-wordpress' => '0', + 'preferred-mail-format' => 'html', + 'display-host' => '0', + 'display-attachments' => '0', + 'log-rotation-limit-amout' => '0', + 'log-rotation-limit-amout-keep' => '75', + 'log-rotation-delete-time' => '0', + 'log-rotation-delete-time-days' => '30', + 'top-level-menu' => '1', + ]; + + /** + * Only instance of this object. + * + * @since 1.11.0 + * + * @var SettingsTab + */ + private static $instance = null; + + /** + * Nonce action in saving the settings. + * + * @since 1.11.0 + * + * @var string + */ + const SAVE_SETTINGS_NONCE_ACTION = 'wp-mail-logging-admin-save-settings'; + + /** + * Option name of the settings. + * + * @since 1.11.0 + * + * @var string + */ + const OPTIONS_NAME = 'wpml_settings'; + + /** + * Constructor + * + * @since 1.11.0 + */ + private function __construct() { + } + + /** + * Get the only instance of this object. + * + * @since 1.11.0 + * + * @return SettingsTab + */ + public static function get_instance() { + + if ( is_null( self::$instance ) ) { + self::$instance = new self; + } + + return self::$instance; + } + + /** + * Hooks that are fired earlier. + * + * @since 1.11.0 + * + * @return void + */ + public function hooks() { + + // Perform save early in `admin_menu` action so it'll know where to put the settings in the admin menu. + add_action( 'admin_menu', [ $this, 'save_settings'], 5 ); + } + + /** + * Only add hooks here that are invoked after `current_screen` action hook. + * + * @since 1.11.0 + * + * @return void + */ + public function screen_hooks() { + + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); + add_action( 'admin_notices', [ 'No3x\WPML\WPML_Utils', 'display_admin_notices' ] ); + add_action( 'wp_mail_logging_admin_tab_content', [ $this, 'display_tab_content' ] ); + add_filter( 'screen_options_show_screen', '__return_false' ); + } + + /** + * Save settings from $_POST. + * + * @since 1.11.0 + * + * @return void + */ + public function save_settings() { + + // Check if we need to save data. + $data = filter_input( INPUT_POST, 'wp-mail-logging-setting', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY ); + + if ( empty( $data ) || empty( $_POST[ self::SAVE_SETTINGS_NONCE_ACTION ] ) || ! wp_verify_nonce( $_POST[ self::SAVE_SETTINGS_NONCE_ACTION ], self::SAVE_SETTINGS_NONCE_ACTION ) ) { + return; + } + + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + + $default = self::DEFAULT_SETTINGS; + + // Use the default if we need to reset. + if ( ! empty( $_POST['wp-mail-logging-setting-reset'] ) ) { + + if ( update_option( self::OPTIONS_NAME, self::DEFAULT_SETTINGS ) ) { + WPML_Utils::add_admin_notice( esc_html__( 'Settings saved!', 'wp-mail-logging' ), WPML_Utils::ADMIN_NOTICE_SUCCESS, true ); + } + + return; + } + + $save_data = wp_parse_args( $data, $default ); + + if ( empty( $data['top-level-menu'] ) ) { + $save_data['top-level-menu'] = '0'; + } + + // Sanitize the data. + $save_data['log-rotation-limit-amout-keep'] = absint( $save_data['log-rotation-limit-amout-keep'] ); + $save_data['log-rotation-delete-time-days'] = absint( $save_data['log-rotation-delete-time-days'] ); + + if ( update_option( self::OPTIONS_NAME, $save_data ) ) { + WPML_Utils::add_admin_notice( esc_html__( 'Settings saved!', 'wp-mail-logging' ), WPML_Utils::ADMIN_NOTICE_SUCCESS, true ); + } + } + + /** + * Enqueue settings tab scripts. + * + * @since 1.11.0 + * + * @return void + * + * @throws Exception + */ + public function enqueue_scripts() { + + $assets_url = WPML_Init::getInstance()->getService( 'plugin' )->get_assets_url(); + $plugin_meta = WPML_Init::getInstance()->getService( 'plugin-meta' ); + + if ( empty( $plugin_meta['version'] ) ) { + return; + } + + wp_enqueue_script( + 'wp-mail-logging-admin-settings', + $assets_url . '/js/wp-mail-logging-admin-settings.js', + [ 'jquery' ], + $plugin_meta['version'] + ); + } + + /** + * Display Settings form. + * + * @since 1.11.0 + * + * @return void + */ + public function display_tab_content() { + + $saved_settings = self::get_settings( self::DEFAULT_SETTINGS ); + ?> +
+ + + create_group_field_header( + 'general-settings', + __( 'General Settings', 'wp-mail-logging' ), + __( 'Change your WP Mail Logging settings.', 'wp-mail-logging' ) + ); + + $this->create_field( + [ + 'bordered' => false, + 'desc' => __( 'Select the minimum role required to view submission data.', 'wp-mail-logging' ), + 'id' => 'can-see-submission-data', + 'label' => __( 'Can See Submission data', 'wp-mail-logging' ), + 'options' => $this->get_capabilities(), + 'type' => 'select', + 'value' => $saved_settings['can-see-submission-data'], + ] + ); + + $datetime_format_field_desc = sprintf( + /* translators: %s: Date time in WP format. */ + __( 'Use format from WordPress settings (%s)', 'wp-mail-logging' ), + date_i18n( $this->get_wp_date_time_format() ) + ); + + $this->create_field( + [ + 'bordered' => false, + 'desc' => $datetime_format_field_desc, + 'id' => 'datetimeformat-use-wordpress', + 'label' => __( 'WP Date Time Format', 'wp-mail-logging' ), + 'type' => 'checkbox-toggle', + 'value' => $saved_settings['datetimeformat-use-wordpress'], + ] + ); + + $this->create_field( + [ + 'bordered' => false, + 'desc' => __( 'Select your preferred display format.', 'wp-mail-logging' ), + 'id' => 'preferred-mail-format', + 'label' => __( 'Default Format for Message', 'wp-mail-logging' ), + 'options' => [ + 'html' => 'HTML', + 'raw' => 'Raw', + 'json' => 'JSON', + ], + 'type' => 'select', + 'value' => $saved_settings['preferred-mail-format'], + ] + ); + + $this->create_field( + [ + 'bordered' => false, + 'desc' => __( 'Display the IP of the host WordPress is running on. This is useful when running WP Mail Logging on multiple servers at the same time.', 'wp-mail-logging' ), + 'id' => 'display-host', + 'label' => __( 'Display Host', 'wp-mail-logging' ), + 'type' => 'checkbox-toggle', + 'value' => $saved_settings['display-host'], + ] + ); + + $this->create_field( + [ + 'bordered' => false, + 'desc' => __( 'Display the attachments in Email Logs table.', 'wp-mail-logging' ), + 'id' => 'display-attachments', + 'label' => __( 'Display Attachments', 'wp-mail-logging' ), + 'type' => 'checkbox-toggle', + 'value' => empty( $saved_settings['display-attachments'] ) ? '0' : '1', + ] + ); + + $this->create_field( + [ + 'bordered' => false, + 'desc' => __( 'Disabling this will condense navigation and move WP Mail Log under the WordPress Tools menu.', 'wp-mail-logging' ), + 'id' => 'top-level-menu', + 'label' => __( 'Top Level Menu', 'wp-mail-logging' ), + 'type' => 'checkbox-toggle', + 'value' => ! isset( $saved_settings['top-level-menu'] ) ? '1' : $saved_settings['top-level-menu'], + ] + ); + + $this->create_field( + [ + 'bordered' => true, + 'desc' => __( 'Delete all WP Mail Logging data on deactivation.', 'wp-mail-logging' ), + 'id' => 'delete-on-deactivation', + 'label' => __( 'Cleanup', 'wp-mail-logging' ), + 'type' => 'checkbox-toggle', + 'value' => $saved_settings['delete-on-deactivation'], + ] + ); + + $this->create_group_field_header( + 'log-rotation', + __( 'Log Rotation', 'wp-mail-logging' ), + __( 'Save space by deleting logs regularly.', 'wp-mail-logging' ) + ); + + $this->create_field( + [ + 'desc' => __( 'Set up an automated cleanup routine that is triggered when a certain amount of logs have been saved.', 'wp-mail-logging' ), + 'id' => 'log-rotation-limit-amout', + 'label' => __( 'Cleanup by Amount', 'wp-mail-logging' ), + 'type' => 'checkbox-toggle', + 'toggles_id' => 'log-rotation-limit-amout-keep', + 'value' => $saved_settings['log-rotation-limit-amout'], + ] + ); + + $this->create_field( + [ + 'desc' => __( 'Delete email logs after this amount has been reached.', 'wp-mail-logging' ), + 'id' => 'log-rotation-limit-amout-keep', + 'type' => 'number', + 'initial_hidden' => empty( $saved_settings['log-rotation-limit-amout'] ), // Hide if the toggle above is "Off". + 'value' => $saved_settings['log-rotation-limit-amout-keep'], + ] + ); + + $this->create_field( + [ + 'desc' => __( 'Set up an automated cleanup routine that is triggered after a certain amount of time has passed.', 'wp-mail-logging' ), + 'id' => 'log-rotation-delete-time', + 'label' => __( 'Cleanup by Time', 'wp-mail-logging' ), + 'type' => 'checkbox-toggle', + 'toggles_id' => 'log-rotation-delete-time-days', + 'value' => $saved_settings['log-rotation-delete-time'], + ] + ); + + $this->create_field( + [ + 'desc' => __( 'Delete email logs after this many days.', 'wp-mail-logging' ), + 'id' => 'log-rotation-delete-time-days', + 'type' => 'number', + 'initial_hidden' => empty( $saved_settings['log-rotation-delete-time'] ), // Hide if the toggle above is "Off"., + 'value' => $saved_settings['log-rotation-delete-time-days'], + ] + ); + ?> + +
+
+ +
+
+ +
+
+ +

+

+
+ +
+
+

+
+ +

+ +

+
+ '', + 'label' => '', + 'desc' => '', + 'toggle_label' => [ + 'checked' => __( 'On', 'wp-mail-logging' ), + 'unchecked' => __( 'Off', 'wp-mail-logging' ), + ], + 'bordered' => false, + 'options' => [], + 'type' => 'checkbox-toggle', + 'initial_hidden' => false, + 'toggles_id' => '', // ID of the field this field toggles. + 'value' => '', // Value of the field. + ]; + + $args = wp_parse_args( $args, $defaults ); + $no_border_style = $args['bordered'] ? '' : 'wp-mail-logging-setting-row-no-border'; + $initial_hidden_style = $args['initial_hidden'] ? 'wp-mail-logging-hide' : ''; + ?> +
+ +
+ +
+ + +
+ +

+ +

+
+
+ roles as $role ) { + foreach ( $role['capabilities'] as $key => $val ) { + $capabilities[ $key ] = ucwords( str_replace( '_', ' ', $key ) ); + } + } + + return $capabilities; + } +} diff --git a/src/inc/Helpers/PluginSilentUpgrader.php b/src/inc/Helpers/PluginSilentUpgrader.php new file mode 100644 index 00000000..5cfad0ea --- /dev/null +++ b/src/inc/Helpers/PluginSilentUpgrader.php @@ -0,0 +1,614 @@ + '', // Please always pass this. + 'destination' => '', // And this + 'clear_destination' => false, + 'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please + 'clear_working' => true, + 'is_multi' => false, + 'hook_extra' => [], // Pass any extra $hook_extra args here, this will be passed to any hooked filters. + ]; + + $options = wp_parse_args( $options, $defaults ); + + /** + * Filter the package options before running an update. + * + * See also {@see 'upgrader_process_complete'}. + * + * @since 4.3.0 + * + * @param array $options { + * Options used by the upgrader. + * + * @type string $package Package for update. + * @type string $destination Update location. + * @type bool $clear_destination Clear the destination resource. + * @type bool $clear_working Clear the working resource. + * @type bool $abort_if_destination_exists Abort if the Destination directory exists. + * @type bool $is_multi Whether the upgrader is running multiple times. + * @type array $hook_extra { + * Extra hook arguments. + * + * @type string $action Type of action. Default 'update'. + * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'. + * @type bool $bulk Whether the update process is a bulk update. Default true. + * @type string $plugin Path to the plugin file relative to the plugins directory. + * @type string $theme The stylesheet or template name of the theme. + * @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme', + * or 'core'. + * @type object $language_update The language pack update offer. + * } + * } + */ + $options = apply_filters( 'upgrader_package_options', $options ); + + if ( ! $options['is_multi'] ) { // call $this->header separately if running multiple times + $this->skin->header(); + } + + // Connect to the Filesystem first. + $res = $this->fs_connect( [ WP_CONTENT_DIR, $options['destination'] ] ); + // Mainly for non-connected filesystem. + if ( ! $res ) { + if ( ! $options['is_multi'] ) { + $this->skin->footer(); + } + return false; + } + + $this->skin->before(); + + if ( is_wp_error( $res ) ) { + $this->skin->error( $res ); + $this->skin->after(); + if ( ! $options['is_multi'] ) { + $this->skin->footer(); + } + return $res; + } + + /* + * Download the package (Note, This just returns the filename + * of the file if the package is a local file) + */ + $download = $this->download_package( $options['package'], true ); + + // Allow for signature soft-fail. + // WARNING: This may be removed in the future. + if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) { + + // Don't output the 'no signature could be found' failure message for now. + if ( (string) $download->get_error_code() !== 'signature_verification_no_signature' || WP_DEBUG ) { + // Outout the failure error as a normal feedback, and not as an error: + //$this->skin->feedback( $download->get_error_message() ); + + // Report this failure back to WordPress.org for debugging purposes. + wp_version_check( + [ + 'signature_failure_code' => $download->get_error_code(), + 'signature_failure_data' => $download->get_error_data(), + ] + ); + } + + // Pretend this error didn't happen. + $download = $download->get_error_data( 'softfail-filename' ); + } + + if ( is_wp_error( $download ) ) { + $this->skin->error( $download ); + $this->skin->after(); + if ( ! $options['is_multi'] ) { + $this->skin->footer(); + } + return $download; + } + + $delete_package = ( (string) $download !== (string) $options['package'] ); // Do not delete a "local" file. + + // Unzips the file into a temporary directory. + $working_dir = $this->unpack_package( $download, $delete_package ); + if ( is_wp_error( $working_dir ) ) { + $this->skin->error( $working_dir ); + $this->skin->after(); + if ( ! $options['is_multi'] ) { + $this->skin->footer(); + } + return $working_dir; + } + + // With the given options, this installs it to the destination directory. + $result = $this->install_package( + [ + 'source' => $working_dir, + 'destination' => $options['destination'], + 'clear_destination' => $options['clear_destination'], + 'abort_if_destination_exists' => $options['abort_if_destination_exists'], + 'clear_working' => $options['clear_working'], + 'hook_extra' => $options['hook_extra'], + ] + ); + + $this->skin->set_result( $result ); + if ( is_wp_error( $result ) ) { + $this->skin->error( $result ); + } + + $this->skin->after(); + + if ( ! $options['is_multi'] ) { + + /** + * Fire when the upgrader process is complete. + * + * See also {@see 'upgrader_package_options'}. + * + * @since 3.6.0 + * @since 3.7.0 Added to WP_Upgrader::run(). + * @since 4.6.0 `$translations` was added as a possible argument to `$hook_extra`. + * + * @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a + * Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or + * Language_Pack_Upgrader instance. + * @param array $hook_extra { + * Array of bulk item update data. + * + * @type string $action Type of action. Default 'update'. + * @type string $type Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'. + * @type bool $bulk Whether the update process is a bulk update. Default true. + * @type array $plugins Array of the basename paths of the plugins' main files. + * @type array $themes The theme slugs. + * @type array $translations { + * Array of translations update data. + * + * @type string $language The locale the translation is for. + * @type string $type Type of translation. Accepts 'plugin', 'theme', or 'core'. + * @type string $slug Text domain the translation is for. The slug of a theme/plugin or + * 'default' for core translations. + * @type string $version The version of a theme, plugin, or core. + * } + * } + */ + do_action( 'upgrader_process_complete', $this, $options['hook_extra'] ); + + $this->skin->footer(); + } + + return $result; + } + + /** + * Toggle maintenance mode for the site. + * + * Create/delete the maintenance file to enable/disable maintenance mode. + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem Subclass + * + * @param bool $enable True to enable maintenance mode, false to disable. + */ + public function maintenance_mode( $enable = false ) { + global $wp_filesystem; + $file = $wp_filesystem->abspath() . '.maintenance'; + if ( $enable ) { + // Create maintenance file to signal that we are upgrading + $maintenance_string = ''; + $wp_filesystem->delete( $file ); + $wp_filesystem->put_contents( $file, $maintenance_string, FS_CHMOD_FILE ); + } elseif ( ! $enable && $wp_filesystem->exists( $file ) ) { + $wp_filesystem->delete( $file ); + } + } + + /** + * Download a package. + * + * @since 2.8.0 + * @since 5.5.0 Added the `$hook_extra` parameter. + * + * @param string $package The URI of the package. If this is the full path to an + * existing local file, it will be returned untouched. + * @param bool $check_signatures Whether to validate file signatures. Default false. + * @param array $hook_extra Extra arguments to pass to the filter hooks. Default empty array. + * @return string|WP_Error The full path to the downloaded package file, or a WP_Error object. + */ + public function download_package( $package, $check_signatures = false, $hook_extra = [] ) { + + /** + * Filters whether to return the package. + * + * @since 3.7.0 + * @since 5.5.0 Added the `$hook_extra` parameter. + * + * @param bool $reply Whether to bail without returning the package. + * Default false. + * @param string $package The package file name. + * @param WP_Upgrader $this The WP_Upgrader instance. + * @param array $hook_extra Extra arguments passed to hooked filters. + */ + $reply = apply_filters( 'upgrader_pre_download', false, $package, $this, $hook_extra ); + if ( false !== $reply ) { + return $reply; + } + + if ( ! preg_match( '!^(http|https|ftp)://!i', $package ) && file_exists( $package ) ) { // Local file or remote? + return $package; // Must be a local file. + } + + if ( empty( $package ) ) { + return new WP_Error( 'no_package', $this->strings['no_package'] ); + } + + $download_file = download_url( $package, 300, $check_signatures ); + + if ( is_wp_error( $download_file ) && ! $download_file->get_error_data( 'softfail-filename' ) ) { + return new WP_Error( 'download_failed', $this->strings['download_failed'], $download_file->get_error_message() ); + } + + return $download_file; + } + + /** + * Unpack a compressed package file. + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. + * + * @param string $package Full path to the package file. + * @param bool $delete_package Optional. Whether to delete the package file after attempting + * to unpack it. Default true. + * @return string|WP_Error The path to the unpacked contents, or a WP_Error on failure. + */ + public function unpack_package( $package, $delete_package = true ) { + global $wp_filesystem; + + //$this->skin->feedback( 'unpack_package' ); + + $upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/'; + + //Clean up contents of upgrade directory beforehand. + $upgrade_files = $wp_filesystem->dirlist( $upgrade_folder ); + if ( ! empty( $upgrade_files ) ) { + foreach ( $upgrade_files as $file ) { + $wp_filesystem->delete( $upgrade_folder . $file['name'], true ); + } + } + + // We need a working directory - Strip off any .tmp or .zip suffixes + $working_dir = $upgrade_folder . basename( basename( $package, '.tmp' ), '.zip' ); + + // Clean up working directory + if ( $wp_filesystem->is_dir( $working_dir ) ) { + $wp_filesystem->delete( $working_dir, true ); + } + + // Unzip package to working directory + $result = unzip_file( $package, $working_dir ); + + // Once extracted, delete the package if required. + if ( $delete_package ) { + unlink( $package ); + } + + if ( is_wp_error( $result ) ) { + $wp_filesystem->delete( $working_dir, true ); + if ( $result->get_error_code() === 'incompatible_archive' ) { + return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], $result->get_error_data() ); + } + + return $result; + } + + return $working_dir; + } + + /** + * Install a package. + * + * Copies the contents of a package form a source directory, and installs them in + * a destination directory. Optionally removes the source. It can also optionally + * clear out the destination folder if it already exists. + * + * @since 2.8.0 + * + * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. + * @global array $wp_theme_directories + * + * @param array|string $args { + * Optional. Array or string of arguments for installing a package. Default empty array. + * + * @type string $source Required path to the package source. Default empty. + * @type string $destination Required path to a folder to install the package in. + * Default empty. + * @type bool $clear_destination Whether to delete any files already in the destination + * folder. Default false. + * @type bool $clear_working Whether to delete the files form the working directory + * after copying to the destination. Default false. + * @type bool $abort_if_destination_exists Whether to abort the installation if + * the destination folder already exists. Default true. + * @type array $hook_extra Extra arguments to pass to the filter hooks called by + * WP_Upgrader::install_package(). Default empty array. + * } + * + * @return array|WP_Error The result (also stored in `WP_Upgrader::$result`), or a WP_Error on failure. + */ + public function install_package( $args = [] ) { + + global $wp_filesystem, $wp_theme_directories; + + $defaults = [ + 'source' => '', // Please always pass this + 'destination' => '', // and this + 'clear_destination' => false, + 'clear_working' => false, + 'abort_if_destination_exists' => true, + 'hook_extra' => [], + ]; + + $args = wp_parse_args( $args, $defaults ); + + // These were previously extract()'d. + $source = $args['source']; + $destination = $args['destination']; + $clear_destination = $args['clear_destination']; + + $this->set_time_limit( 300 ); + + if ( empty( $source ) || empty( $destination ) ) { + return new WP_Error( 'bad_request', $this->strings['bad_request'] ); + } + + /** + * Filter the install response before the installation has started. + * + * Returning a truthy value, or one that could be evaluated as a WP_Error + * will effectively short-circuit the installation, returning that value + * instead. + * + * @since 2.8.0 + * + * @param bool|WP_Error $response Response. + * @param array $hook_extra Extra arguments passed to hooked filters. + */ + $res = apply_filters( 'upgrader_pre_install', true, $args['hook_extra'] ); + + if ( is_wp_error( $res ) ) { + return $res; + } + + // Retain the Original source and destinations. + $remote_source = $args['source']; + $local_destination = $destination; + + $source_files = array_keys( $wp_filesystem->dirlist( $remote_source ) ); + $remote_destination = $wp_filesystem->find_folder( $local_destination ); + $count_source_files = count( $source_files ); + + // Locate which directory to copy to the new folder, This is based on the actual folder holding the files. + if ( $count_source_files === 1 && $wp_filesystem->is_dir( trailingslashit( $args['source'] ) . $source_files[0] . '/' ) ) { // Only one folder? Then we want its contents. + $source = trailingslashit( $args['source'] ) . trailingslashit( $source_files[0] ); + } elseif ( $count_source_files === 0 ) { + return new WP_Error( 'incompatible_archive_empty', $this->strings['incompatible_archive'], $this->strings['no_files'] ); // There are no files? + } else { // It's only a single file, the upgrader will use the folder name of this file as the destination folder. Folder name is based on zip filename. + $source = trailingslashit( $args['source'] ); + } + + /** + * Filter the source file location for the upgrade package. + * + * @since 2.8.0 + * @since 4.4.0 The $hook_extra parameter became available. + * + * @param string $source File source location. + * @param string $remote_source Remote file source location. + * @param WP_Upgrader $this WP_Upgrader instance. + * @param array $hook_extra Extra arguments passed to hooked filters. + */ + $source = apply_filters( 'upgrader_source_selection', $source, $remote_source, $this, $args['hook_extra'] ); + + if ( is_wp_error( $source ) ) { + return $source; + } + + // Has the source location changed? If so, we need a new source_files list. + if ( $source !== $remote_source ) { + $source_files = array_keys( $wp_filesystem->dirlist( $source ) ); + } + + /* + * Protection against deleting files in any important base directories. + * Theme_Upgrader & Plugin_Upgrader also trigger this, as they pass the + * destination directory (WP_PLUGIN_DIR / wp-content/themes) intending + * to copy the directory into the directory, whilst they pass the source + * as the actual files to copy. + */ + $protected_directories = [ ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR, WP_CONTENT_DIR . '/themes' ]; + + if ( is_array( $wp_theme_directories ) ) { + $protected_directories = array_merge( $protected_directories, $wp_theme_directories ); + } + + if ( in_array( $destination, $protected_directories ) ) { + $remote_destination = trailingslashit( $remote_destination ) . trailingslashit( basename( $source ) ); + $destination = trailingslashit( $destination ) . trailingslashit( basename( $source ) ); + } + + if ( $clear_destination ) { + // We're going to clear the destination if there's something there. + $removed = $this->clear_destination( $remote_destination ); + + /** + * Filter whether the upgrader cleared the destination. + * + * @since 2.8.0 + * + * @param mixed $removed Whether the destination was cleared. true on success, WP_Error on failure. + * @param string $local_destination The local package destination. + * @param string $remote_destination The remote package destination. + * @param array $hook_extra Extra arguments passed to hooked filters. + */ + $removed = apply_filters( 'upgrader_clear_destination', $removed, $local_destination, $remote_destination, $args['hook_extra'] ); + + if ( is_wp_error( $removed ) ) { + return $removed; + } + } elseif ( $args['abort_if_destination_exists'] && $wp_filesystem->exists( $remote_destination ) ) { + // If we're not clearing the destination folder and something exists there already, Bail. + // But first check to see if there are actually any files in the folder. + $_files = $wp_filesystem->dirlist( $remote_destination ); + + if ( ! empty( $_files ) ) { + $wp_filesystem->delete( $remote_source, true ); // Clear out the source files. + + return new WP_Error( 'folder_exists', $this->strings['folder_exists'], $remote_destination ); + } + } + + // Create destination if needed. + if ( ! $wp_filesystem->exists( $remote_destination ) ) { + if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) { + return new WP_Error( 'mkdir_failed_destination', $this->strings['mkdir_failed'], $remote_destination ); + } + } + + // Copy new version of item into place. + $result = copy_dir( $source, $remote_destination ); + + if ( is_wp_error( $result ) ) { + if ( $args['clear_working'] ) { + $wp_filesystem->delete( $remote_source, true ); + } + + return $result; + } + + // Clear the Working folder? + if ( $args['clear_working'] ) { + $wp_filesystem->delete( $remote_source, true ); + } + + $destination_name = basename( str_replace( $local_destination, '', $destination ) ); + + if ( $destination_name === '.' ) { + $destination_name = ''; + } + + $this->result = compact( 'source', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination' ); + + /** + * Filter the installation response after the installation has finished. + * + * @since 2.8.0 + * + * @param bool $response Installation response. + * @param array $hook_extra Extra arguments passed to hooked filters. + * @param array $result Installation result data. + */ + $res = apply_filters( 'upgrader_post_install', true, $args['hook_extra'], $this->result ); + + if ( is_wp_error( $res ) ) { + $this->result = $res; + + return $res; + } + + // Bombard the calling function will all the info which we've just used. + return $this->result; + } + + /** + * Install a plugin package. + * + * @since 1.6.3 + * + * @param string $package The full local path or URI of the package. + * @param array $args Optional. Other arguments for installing a plugin package. Default empty array. + * + * @return bool|\WP_Error True if the installation was successful, false or a WP_Error otherwise. + */ + public function install( $package, $args = [] ) { + + $result = parent::install( $package, $args ); + if ( true === $result ) { + do_action( 'wp_mail_logging_plugin_installed', $package ); + } + + return $result; + } + + /** + * Wrapper for set_time_limit to see if it is enabled. + * + * @since 1.11.0 + * + * @param int $limit Time limit. + */ + private function set_time_limit( $limit = 0 ) { + + if ( function_exists( 'set_time_limit' ) && false === strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) { // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.safe_modeDeprecatedRemoved + @set_time_limit( $limit ); // @codingStandardsIgnoreLine + } + } +} diff --git a/src/inc/Helpers/PluginSilentUpgraderSkin.php b/src/inc/Helpers/PluginSilentUpgraderSkin.php new file mode 100644 index 00000000..7eca4c7f --- /dev/null +++ b/src/inc/Helpers/PluginSilentUpgraderSkin.php @@ -0,0 +1,54 @@ +plugin_meta = $plugin_meta; - - if ( ! class_exists( 'ReduxFramework' ) ) { - return; - } - - // This is needed. Bah WordPress bugs. ;) - if ( true == \Redux_Helpers::isTheme( __FILE__ ) ) { - $this->initSettings(); - } else { - add_action( 'plugins_loaded', array( $this, 'initSettings' ), 10 ); - } - - } - - public function initSettings() { - - // Just for demo purposes. Not needed per say. - $this->theme = wp_get_theme(); - - // Set the default arguments - $this->setArguments(); - - // Set a few help tabs so you can see how it's done - // $this->setHelpTabs(); - - // Create the sections and fields - $this->setSections(); - - if ( ! isset( $this->args['opt_name'] ) ) { // No errors please - return; - } - - // If Redux is running as a plugin, this will remove the demo notice and links - //add_action( 'redux/loaded', array( $this, 'remove_demo' ) ); - - // Function to test the compiler hook and demo CSS output. - // Above 10 is a priority, but 2 in necessary to include the dynamically generated CSS to be sent to the function. - //add_filter('redux/options/'.$this->args['opt_name'].'/compiler', array( $this, 'compiler_action' ), 10, 3); - - // Change the arguments after they've been declared, but before the panel is created - //add_filter('redux/options/'.$this->args['opt_name'].'/args', array( $this, 'change_arguments' ) ); - - // Change the default value of a field after it's been set, but before it's been useds - //add_filter('redux/options/'.$this->args['opt_name'].'/defaults', array( $this,'change_defaults' ) ); - - // Dynamically add a section. Can be also used to modify sections/fields - //add_filter('redux/options/' . $this->args['opt_name'] . '/sections', array($this, 'dynamic_section')); - - $this->ReduxFramework = new \ReduxFramework( $this->sections, $this->args ); - - // Disable the Redux demo - if ( method_exists( "Redux", "disable_demo" ) ) { - \Redux::disable_demo(); - } - } - - // Remove the demo link and the notice of integrated demo from the redux-framework plugin - function remove_demo() { - - // Used to hide the demo mode link from the plugin page. Only used when Redux is a plugin. - if ( class_exists( 'ReduxFrameworkPlugin' ) ) { - remove_filter( 'plugin_row_meta', array( - ReduxFrameworkPlugin::instance(), - 'plugin_metalinks' - ), null, 2 ); - - // Used to hide the activation notice informing users of the demo panel. Only used when Redux is a plugin. - remove_action( 'admin_notices', array( ReduxFrameworkPlugin::instance(), 'admin_notices' ) ); - } - } - - public function setSections() { - - // ACTUAL DECLARATION OF SECTIONS - $this->sections[] = array( - 'title' => __('General Settings', 'wp-mail-logging'), - 'desc' => __('', 'wp-mail-logging'), - 'icon' => 'el-icon-cogs', - // 'submenu' => false, // Setting submenu to false on a given section will hide it from the WordPress sidebar menu! - 'fields' => array( - - array( - 'id' => 'delete-on-deactivation', - 'type' => 'switch', - 'title' => __('Cleanup', 'wp-mail-logging' ), - 'subtitle' => __('Delete all data on deactivation? (emails and settings)?', 'wp-mail-logging'), - 'default' => 0, - 'on' => __(__('Enabled', 'wp-mail-logging' ), 'wp-mail-logging' ), - 'off' => __(__('Disabled', 'wp-mail-logging' ), 'wp-mail-logging' ), - ), - array( - 'id' => 'can-see-submission-data', - 'type' => 'select', - 'data' => 'capabilities', - 'default' => 'manage_options', - 'title' => __('Can See Submission data', 'wp-mail-logging'), - 'subtitle' => __('Select the minimum role.', 'wp-mail-logging'), - ), - array( - 'id' => 'datetimeformat-use-wordpress', - 'type' => 'switch', - 'title' => __('WordPress Date Time Format', 'wp-mail-logging' ), - 'subtitle' => sprintf( __( "Use format from WordPress settings (%s)", 'wp-mail-logging' ), date_i18n( $this->wordpress_default_format(), current_time( 'timestamp' ) ) ), - 'default' => 0, - 'on' => __('Enabled', 'wp-mail-logging' ), - 'off' => __('Disabled', 'wp-mail-logging' ), - ), - array( - 'id' => 'preferred-mail-format', - 'type' => 'select', - 'options' => array( - 'html' => 'html', - 'raw' => 'raw', - 'json' => 'json' - ), - 'default' => 'html', - 'title' => __('Default Format for Message', 'wp-mail-logging'), - 'subtitle' => __('Select your preferred display format.', 'wp-mail-logging'), - ), - array( - 'id' => 'display-host', - 'type' => 'switch', - 'title' => __('Display Host', 'wp-mail-logging' ), - 'subtitle' => __('Display host column in list.', 'wp-mail-logging'), - 'hint' => array( - 'title' => 'Host', - 'content' => 'Display the IP of the host WordPress is running on. This is useful when running it on multiple servers at the same time.', - ), - 'default' => 0, - 'on' => __('Enabled', 'wp-mail-logging' ), - 'off' => __('Disabled', 'wp-mail-logging' ), - ), - array( - 'id' => 'section-log-rotation-start', - 'type' => 'section', - 'title' => __('Log Rotation', 'wp-mail-logging' ), - 'subtitle' => __('Save space by deleting logs regularly.', 'wp-mail-logging'), - 'indent' => true, // Indent all options below until the next 'section' option is set. - ), - array( - 'id' => 'log-rotation-limit-amout', - 'type' => 'switch', - 'title' => __('Cleanup by Amount', 'wp-mail-logging' ), - 'subtitle' => __('Setup a automated cleanup routine!', 'wp-mail-logging'), - 'default' => 0, - 'on' => __('Enabled', 'wp-mail-logging' ), - 'off' => __('Disabled', 'wp-mail-logging' ), - ), - array( - 'id' => 'log-rotation-limit-amout-keep', - 'type' => 'slider', - 'required' => array('log-rotation-limit-amout', '=', '1'), - 'title' => __('Amount', 'wp-mail-logging' ), - 'subtitle' => __('When should mails are deleted?', 'wp-mail-logging'), - 'desc' => __('Cleanup when the stored mails exceed...', 'wp-mail-logging'), - 'default' => 75, - 'min' => 25, - 'step' => 50, - 'max' => 3000, - 'display_value' => 'text' - ), - array( - 'id' => 'log-rotation-delete-time', - 'type' => 'switch', - 'title' => __('Cleanup by Time', 'wp-mail-logging' ), - 'subtitle' => __('Setup a automated cleanup routine!', 'wp-mail-logging'), - 'default' => 0, - 'on' => __('Enabled', 'wp-mail-logging' ), - 'off' => __('Disabled', 'wp-mail-logging' ), - ), - array( - 'id' => 'log-rotation-delete-time-days', - 'type' => 'slider', - 'required' => array('log-rotation-delete-time', '=', '1'), - 'title' => __('Time', 'wp-mail-logging' ), - 'subtitle' => __('When should mails are deleted?', 'wp-mail-logging'), - 'desc' => __('Delete mails older than days...', 'wp-mail-logging'), - 'default' => 30, - 'min' => 1, - 'step' => 7, - 'max' => 400, - 'display_value' => 'text' - ), - array( - 'id' => 'section-log-rotation-end', - 'type' => 'section', - 'indent' => false // Indent all options below until the next 'section' option is set. - ), - ), - ); - } - - public function wordpress_default_format() - { - $date_format = get_option( 'date_format' ); - $time_format = get_option( 'time_format' ); - $date_format = empty( $date_format ) ? 'F j, Y' : $date_format; - $time_format = empty( $time_format ) ? 'g:i a' : $time_format; - return "{$date_format} {$time_format}"; - } - - /** - * All the possible arguments for Redux. - * For full documentation on arguments, please refer to: https://github.com/ReduxFramework/ReduxFramework/wiki/Arguments - * */ - public function setArguments() { - - $theme = wp_get_theme(); // For use with some settings. Not necessary. - - $this->args = array( - // TYPICAL -> Change these values as you need/desire - 'opt_name' => 'wpml_settings', - // This is where your data is stored in the database and also becomes your global variable name. - 'display_name' => 'WP Mail Logging Settings', - // Name that appears at the top of your panel - 'display_version' => $this->plugin_meta['version_installed'], - // Version that appears at the top of your panel - 'menu_type' => 'hidden', - //Specify if the admin menu should appear or not. Options: menu or submenu (Under appearance only) - 'allow_sub_menu' => false, - // Show the sections below the admin menu item or not - //'menu_title' => 'Settings', - //'page_title' => $this->plugin_meta['display_name'], - // You will need to generate a Google API key to use this feature. - // Please visit: https://developers.google.com/fonts/docs/developer_api#Auth - 'google_api_key' => '', - // Set it you want google fonts to update weekly. A google_api_key value is required. - 'google_update_weekly' => false, - // Must be defined to add google fonts to the typography module - 'async_typography' => true, - // Use a asynchronous font on the front end or font string - //'disable_google_fonts_link' => true, // Disable this in case you want to create your own google fonts loader - 'admin_bar' => false, - // Show the panel pages on the admin bar - 'admin_bar_icon' => 'dashicons-portfolio', - // Choose an icon for the admin bar menu - 'admin_bar_priority' => 50, - // Choose an priority for the admin bar menu - 'global_variable' => '', - // Set a different name for your global variable other than the opt_name - 'dev_mode' => false, - // Show the time the page took to load, etc - 'update_notice' => true, - // If dev_mode is enabled, will notify developer of updated versions available in the GitHub Repo - 'customizer' => false, - // Enable basic customizer support - //'open_expanded' => true, // Allow you to start the panel in an expanded way initially. - //'disable_save_warn' => true, // Disable the save warning when a user changes a field - - // OPTIONAL -> Give you extra features - 'page_priority' => null, - // Order where the menu appears in the admin area. If there is any conflict, something will not show. Warning. - 'page_parent' => 'wpml_plugin_log', - // For a full list of options, visit: http://codex.wordpress.org/Function_Reference/add_submenu_page#Parameters - 'page_permissions' => 'manage_options', - // Permissions needed to access the options panel. - 'menu_icon' => '', - // Specify a custom URL to an icon - 'last_tab' => '', - // Force your panel to always open to a specific tab (by id) - 'page_icon' => 'icon-themes', - // Icon displayed in the admin panel next to your menu_title - 'page_slug' => 'wpml_plugin_settings', - // Page slug used to denote the panel - 'save_defaults' => true, - // On load save the defaults to DB before user clicks save or not - 'default_show' => false, - // If true, shows the default value next to each field that is not the default value. - 'default_mark' => '*', - // What to print by the field's title if the value shown is default. Suggested: * - 'show_import_export' => true, - // Shows the Import/Export panel when not used as a field. - - // CAREFUL -> These options are for advanced use only - 'transient_time' => 60 * MINUTE_IN_SECONDS, - 'output' => true, - // Global shut-off for dynamic CSS output by the framework. Will also disable google fonts output - 'output_tag' => true, - // Allows dynamic CSS to be generated for customizer and google fonts, but stops the dynamic CSS from going to the head - // 'footer_credit' => '', // Disable the footer credit of Redux. Please leave if you can help it. - - // FUTURE -> Not in use yet, but reserved or partially implemented. Use at your own risk. - 'database' => '', - // possible: options, theme_mods, theme_mods_expanded, transient. Not fully functional, warning! - 'system_info' => false, - // REMOVE - - // HINTS - 'hints' => array( - 'icon' => 'el el-question-sign', - 'icon_position' => 'right', - 'icon_color' => 'lightgray', - 'icon_size' => 'normal', - 'tip_style' => array( - 'color' => 'light', - 'shadow' => true, - 'rounded' => false, - 'style' => 'bootstrap', - ), - 'tip_position' => array( - 'my' => 'top left', - 'at' => 'bottom right', - ), - 'tip_effect' => array( - 'show' => array( - 'effect' => 'slide', - 'duration' => '500', - 'event' => 'mouseover', - ), - 'hide' => array( - 'effect' => 'slide', - 'duration' => '500', - 'event' => 'click mouseleave', - ), - ), - ) - ); - - // SOCIAL ICONS -> Setup custom links in the footer for quick links in your panel footer icons. - $this->args['share_icons'][] = array( - 'url' => 'https://github.com/awesomemotive/wp-mail-logging/', - 'title' => 'Visit us on GitHub', - 'icon' => 'el-icon-github' - //'img' => '', // You can use icon OR img. IMG needs to be a full URL. - ); - $this->args['share_icons'][] = array( - 'url' => $this->plugin_meta['wp_uri'], - 'title' => 'Visit us on WordPress', - 'icon' => 'el-icon-wordpress' - ); - - // Add content before the form. - // $this->args['intro_text'] = __( '

This text is displayed above the options panel. It isn\'t required, but more info is always better! The intro_text field accepts all HTML.

', 'redux-framework-demo' ); - - // Add content after the form. - // $this->args['footer_text'] = __( '

This text is displayed below the options panel. It isn\'t required, but more info is always better! The footer_text field accepts all HTML.

', 'redux-framework-demo' ); - } - } - - global $reduxConfig; -} else { - echo "The class named Redux_Framework_sample_config has already been called. Developers, you need to prefix this class with your company name or you'll run into problems!"; -} diff --git a/src/inc/redux/admin-init.php b/src/inc/redux/admin-init.php deleted file mode 100644 index db87140f..00000000 --- a/src/inc/redux/admin-init.php +++ /dev/null @@ -1,11 +0,0 @@ -register(); // Add our namespace and the folder it maps to - require_once __DIR__ . '/src/inc/redux/admin-init.php'; $loader->addNamespace('No3x\\WPML\\', __DIR__ . '/src' ); - $loader->addNamespace('No3x\\WPML\\Settings\\', __DIR__ . '/src/inc/redux'); $loader->addNamespace('No3x\\WPML\\ORM\\', __DIR__ . '/lib/vendor/brandonwamboldt/wp-orm/src'); $loader->addNamespace('No3x\\WPML\\Pimple\\', __DIR__ . '/lib/vendor/pimple/pimple/src'); if( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {