Newsletter - Version 6.9.8

Version Description

  • New color picker
  • Extended the IP field on stats table
  • Removed filter for temporary email services (can be added in the security page)
  • Added support to show the last regular newsletter (not private) adding to the home url ?na=view&id=last
  • Hero and image blocks now use high res images
Download this release

Release Info

Developer satollo
Plugin Icon 128x128 Newsletter
Version 6.9.8
Comparing to
See all releases

Code changes from version 6.9.7 to 6.9.8

admin.css CHANGED
@@ -1199,7 +1199,7 @@ span.wp-media-buttons-icon:before {
1199
  background-color: #E74C41;
1200
  padding: 2px 10px;
1201
  border-radius: 10px;
1202
- display: inline-block;
1203
  width: 75px;
1204
  text-align: center;
1205
  }
@@ -1211,7 +1211,7 @@ span.wp-media-buttons-icon:before {
1211
  background-color: #F1C40F;
1212
  padding: 2px 10px;
1213
  border-radius: 10px;
1214
- display: inline-block;
1215
  width: 75px;
1216
  text-align: center;
1217
  }
@@ -2464,4 +2464,16 @@ span.tnp-email-status-sent {
2464
  .tnp-control-all-languages-notice {
2465
  padding: 15px;
2466
  border: 1px dashed #999;
 
 
 
 
 
 
 
 
 
 
 
 
2467
  }
1199
  background-color: #E74C41;
1200
  padding: 2px 10px;
1201
  border-radius: 10px;
1202
+ display: inline-block;
1203
  width: 75px;
1204
  text-align: center;
1205
  }
1211
  background-color: #F1C40F;
1212
  padding: 2px 10px;
1213
  border-radius: 10px;
1214
+ display: inline-block;
1215
  width: 75px;
1216
  text-align: center;
1217
  }
2464
  .tnp-control-all-languages-notice {
2465
  padding: 15px;
2466
  border: 1px dashed #999;
2467
+ }
2468
+
2469
+ /* Spectru, color picker */
2470
+
2471
+ /* Down arrow */
2472
+ .sp-dd {
2473
+ display: none;
2474
+ }
2475
+
2476
+ .sp-replacer {
2477
+ width: 30px!important;
2478
+ height: 30px!important;
2479
  }
admin.js CHANGED
@@ -139,4 +139,16 @@ window.onload = function () {
139
 
140
  };
141
 
142
-
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
  };
141
 
142
+ /**
143
+ * Initialize the color pickers (is invoked on document load and on AJAX forms load in the composer.
144
+ * https://seballot.github.io/spectrum/
145
+ */
146
+ function tnp_controls_init() {
147
+ jQuery(".tnpf-color").spectrum({
148
+ type: 'color',
149
+ allowEmpty: true,
150
+ showAlpha: false,
151
+ showInput: true,
152
+ preferredFormat: 'hex'
153
+ });
154
+ }
admin.min.css CHANGED
@@ -1 +1 @@
1
- #tnp-wrap *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#tnp-wrap .iris-picker,#tnp-wrap .iris-picker *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#tnp-wrap *:before,#tnp-wrap *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}@media all and (max-width:1100px){.col-md-12{width:100%}.col-md-11{width:100%}.col-md-10{width:100%}.col-md-9{width:100%}.col-md-8{width:100%}.col-md-7{width:100%}.col-md-6{width:100%}.col-md-5{width:100%}.col-md-4{width:100%}.col-md-3{width:100%}.col-md-2{width:100%}.col-md-1{width:100%}}.tnp-row-padded{width:90%;margin:0 auto;display:flex;justify-content:space-between}.tnp-col-3-boxed{width:30%;border:1px solid #3c414c;padding:0 0 30px 0;border-radius:10px}.tnp-margin-top{margin-top:80px}#tnp-wrap,#tnp-header,#tnp-body p,#tnp-body td,#tnp-body td p,#tnp-body input,#tnp-body select,#tnp-body textarea{font-family:soleil,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#tnp-body h1,#tnp-body h2,#tnp-body h3,#tnp-body h4{font-family:soleil,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#tnp-promotion-bar{background-color:#ff5f65;color:ddd;padding:10px 0;text-align:center;font-size:16px}#tnp-promotion-bar a{color:#fff;font-weight:normal;text-decoration:none}#tnp-header{text-align:left;font-size:12px;color:#fff;font-family:soleil,sans-serif}#tnp-header input{font-size:12px}#tnp-header a{text-decoration:none;color:white;letter-spacing:.1em}#tnp-header a:hover{color:#fff}.error a,.error a:hover{color:#000!important}.updated a,.updated a:hover{color:#000!important}.tnp-error{border-left:5px solid #d00;background-color:#fff;padding:15px;margin:15px 0;font-size:1.2em;line-height:1.5em}.tnp-warning{border-left:5px solid #ffb900;background-color:#fff;padding:15px;margin:15px 0;font-size:1.2em;line-height:1.5em}.tnp-message{border-left:5px solid #46b450;background-color:#fff;padding:15px;margin:15px 0;font-size:1.2em;line-height:1.5em}#tnp-body h1,#tnp-body h2,#tnp-body h3,#tnp-body h4,#tnp-body p{color:#fff}#tnp-body a,#tnp-body a:active{color:#2980b9}#tnp-body a:hover{color:#3498db}#tnp-body .tnp-submit{margin-bottom:10px}#tnp-body .button,#tnp-body .button:visited,#tnp-body .button:hover,#tnp-body .button:active,#tnp-body .button:focus,#tnp-body .button-primary,#tnp-body .button-primary:visited,#tnp-body .button-primary:hover,#tnp-body .button-secondary,#tnp-body .button-secondary:visited,#tnp-body .button-secondary:hover{color:#fff;background-color:#3498db;text-shadow:none;width:auto}#tnp-body span.wp-media-buttons-icon:before{color:#fff}#tnp-body .tnp-button{color:#fff;background-color:#3498db;text-shadow:none}#tnp-body .button-primary.tnp-button-white,#tnp-body .tnp-button.tnp-button-white{color:#444!important;background-color:#fff!important;box-shadow:none!important;-webkit-box-shadow:none!important;width:auto}#tnp-body .form-table h1,#tnp-body .form-table h2,#tnp-body .form-table h4,#tnp-body .form-table h3{color:#444}#tnp-body tbody th,#tnp-body td,#tnp-body td p,#tnp-body td .button,#tnp-body td .button:visited,#tnp-body td .button:hover,#tnp-body td .button:active,#tnp-body td .button:focus{color:#444}#tnp-body td a,#tnp-body td a:visited{color:#27ae60}#tnp-body .form-table{background-color:#fff;border:1px solid #ecf0f1;margin-top:2em;border-spacing:4px;border-collapse:separate}#tnp-body .form-table th{text-align:right;font-weight:bold;max-width:200px;color:#000;background-color:#ecf0f1;vertical-align:middle}#tnp-body .form-table th small{font-weight:normal}#tnp-body .form-table textarea{width:100%}#tnp-body .form-table table{border-collapse:collapse}#tnp-body .form-table table td,.form-table table th{padding:5px;font-size:.9em;font-weight:normal;border:1px solid #eee}#tnp-body .form-table table thead th{text-align:left;font-weight:bold}#tnp-body .widefat{width:90%}#tnp-body .widefat th{text-align:left}#tnp-body .widefat thead{background-color:#3498db;font-family:soleil,sans-serif;color:#fff!important}#tnp-body .widefat thead tr th{color:#fff!important}#tnp-body .widefat td,.widefat th{vertical-align:middle}.tnp-newsletters-list tbody tr{height:70px}.widefat tr:nth-child(even){background-color:#f4faff}#tnp-body #tabs h1,#tnp-body #tabs h2,#tnp-body #tabs h3,#tnp-body #tabs h4,#tnp-body #tabs p,#tnp-body #tabs td,#tnp-body #tabs th,#tnp-body #tabs input,#tnp-body #tabs select,#tnp-body #tabs textarea,#tnp-body #tabs a{color:#444}#tnp-body #tabs .button,#tnp-body #tabs .button:visited,#tnp-body #tabs .button:hover,#tnp-body #tabs .button-primary,#tnp-body #tabs .button-primary:visited,#tnp-body #tabs .button-primary:hover,#tnp-body #tabs .button-secondary,#tnp-body #tabs .button-secondary:visited,#tnp-body #tabs .button-secondary:hover{color:#fff;width:auto}table.clicks td{border:1px solid #666;padding:2px;font-size:10px}table.clicks{border-collapse:collapse}.grid{border-collapse:collapse}.grid td,.grid th{padding:10px;border:1px solid #ddd;margin:0}.grid th{background-color:#aaa}.tnp-checkboxes label{display:block;float:left;width:220px;border:1px solid #ccc;background-color:#f4f4f4;margin-bottom:5px;padding:5px;white-space:nowrap;margin-right:5px}.tnp-buttons{padding:10px}.newsletter-checkbox-group,.nl-checkbox-group{float:left;margin-right:5px;border:1px solid #ccc;background-color:#f4f4f4;margin-bottom:5px;padding:5px;white-space:nowrap;overflow:hidden}.newsletter-checkboxes-item{float:left;margin-right:5px;border:1px solid #ddd;border-radius:3px;background-color:#f4f4f4;width:150px;margin-bottom:5px;padding:3px;white-space:nowrap;overflow:hidden}.newsletter-checkboxes-item input{vertical-align:text-bottom}.newsletter-checkboxes-item label{display:inline}.newsletter-preferences-item{float:left;margin-right:5px;border:1px solid #ccc;background-color:#f4f4f4;width:250px;margin-bottom:5px;padding:5px;white-space:nowrap;overflow:hidden}.newsletter-preferences-item label{display:inline}.form-table td .nl-checkbox-group label{display:inline}.tnp-notice{padding:15px;margin:10px 0;padding-right:70px;position:relative;border:1px solid #eee;background-color:#fff;color:#444;font-size:13px;border-left:5px solid #27ae60}.tnp-notice a{color:#0073aa;text-decoration:none;font-weight:bold}.tnp-notice a.tnp-dismiss{display:block;position:absolute;right:10px;top:13px;font-size:25px;text-decoration:none;color:#666}.tnp-notice input[type=email]{margin:10px 5px 5px;width:250px;border:0;box-shadow:none;background-color:#ecf0f1;padding:8px}.tnp-notice input[type=submit]{border:0;box-shadow:none;background-color:#27ae60;padding:8px;font-family:soleil,sans-serif;font-size:13px;color:#fff;cursor:pointer}.newsletter-message{background-color:#efe;border-color:#393;border-radius:5px;border-style:solid;border-width:3px;padding:.6em;margin-bottom:.6em}.newsletter-error-span{color:#f00;font-weight:bold}.newsletter-error{background-color:#fee;border-color:#933;border-radius:5px;border-style:solid;border-width:2px;padding:.6em;margin-bottom:.6em}.newsletter-error strong,.newsletter-message strong{font-weight:bold}#newsletter-warnings{background-color:#ffebe8;border-color:#C00;border-radius:3px;border-style:solid;border-width:1px;padding:.6em;margin-bottom:.6em}.newsletter-buttons{margin-top:1em;margin-bottom:1em}.tnp-paginator{margin-top:10px;margin-bottom:5px}.newsletter-option-grid th{text-align:right;width:auto;border:0;padding:3px;font-weight:normal;vertical-align:top;padding-right:15px}.newsletter-option-grid td{border:0;padding:3px;vertical-align:top}.newsletter-box{border:1px solid #ddd;padding:10px;background-color:#fafafa;margin-bottom:15px}.newsletter-box h3{margin-top:0}.newsletter-textarea-preview{border:1px solid #ddd}.tnp-tab-notice{background-color:#fff;border:1px solid #eee;border-left:3px solid gray;padding:10px;margin:10px 0;color:#444}.tnp-tab-warning{background-color:#fff;border:1px solid #eee;border-left:3px solid orange;padding:10px;margin:10px 0;color:#444}.tnp-tab-success{background-color:#fff;border:1px solid #eee;border-left:3px solid green;padding:10px;margin:10px 0;color:#444}.tnp-tab-error{background-color:#fff;border:1px solid #eee;border-left:3px solid red;padding:10px;margin:10px 0;color:#444}.tnp-tip{margin-top:5px}.tip-button{padding:0 5px;color:#fd5f65;text-transform:uppercase;letter-spacing:.2em;font-size:10px;border:1px red solid}.tip-content{font-weight:500;font-size:11px;color:#999}p.description{font-size:12px!important}.tnp-theme-preview{display:inline-block;text-align:center}.tnp-theme-preview p{font-family:soleil;font-size:13px;letter-spacing:.2em;color:#fff}.tnp-theme-preview img:hover{box-shadow:3px 3px 8px 2px #293848}.tnp-theme-preview img{border-radius:10px;height:190px;width:auto}.tnp-theme-preview .tnp-theme-composer{height:250px;width:auto}.tnp-theme-preview .tnp-theme-html{height:250px;width:auto}.tnp-header-logo{margin-left:10px}.wp-core-ui .button-primary{background-color:#2b2f3a;color:#fff;width:auto}#tnp-body{padding:10px;background-color:#28313c}.tnp-darkbg{background-color:#34495e!important}#tnp-body h3{margin-top:25px;clear:both;margin-bottom:10px}.tnp-body-lite{background-color:#f1f1f1!important}#tnp-heading{padding:10px;margin-bottom:10px;border-radius:5px}#tnp-heading a{color:#fff;border-bottom:1px solid #fff;text-decoration:none}#tnp-heading a:hover{color:#27ae60;border-bottom:1px solid #27ae60}#tnp-heading div p{color:#565656}#tnp-heading h2{color:#fff;font-family:soleil,sans-serif;letter-spacing:.1rem;font-size:1.1rem;line-height:1.8rem;text-transform:uppercase;vertical-align:middle;font-weight:700;padding:0;margin:0;margin-bottom:15px}#tnp-heading h3{color:#27ae60;font-family:soleil,sans-serif;letter-spacing:.1rem;font-size:.8rem;line-height:1.8rem;text-transform:uppercase;vertical-align:middle;font-weight:700;padding:0;margin:0}#tnp-heading p{margin:0;color:#ccc}#tnp-heading .notice p{margin:.5em 0;padding:2px}#tnp-heading .tnp-btn-h1{color:#fff;background-color:#3498db;border-radius:3px;padding:6px 11px;text-decoration:none;text-transform:capitalize;font-family:soleil,sans-serif;margin-left:10px;font-size:.75rem;font-weight:300;border:0}#tnp-heading .tnp-btn-h1:hover{color:#fff;background-color:#5dade2;-webkit-transition:background-color .25s linear;transition:background-color .25s linear;-webkit-font-smoothing:subpixel-antialiased;border:0;color:#fff}.metabox-holder{width:100%}.postbox{border:0}.postbox h3 a{float:right}#dashboard-widgets .postbox-container{width:33.333%}#tnp-body .postbox p{color:#000}#dashboard-widgets .postbox-container .postbox h3{font-family:soleil,sans-serif;letter-spacing:.05rem;background-color:#415b76;color:#fff;margin:0;padding:9px}#dashboard-widgets .postbox-container h3 a{color:white;text-decoration:none;margin-left:5px;padding:2px 8px;background-color:#26c281;border-radius:2px;font-weight:300;text-transform:capitalize;font-size:.8rem}#dashboard-widgets .postbox-container h3 a:hover{color:white;text-decoration:none;margin-left:5px;background-color:#2ecc71}.postbox-container i{margin-right:3px}#tnp-dash-newsletters tr td:last-of-type{width:80px;text-align:right}#tnp-dash-subscribers tr td:last-of-type{width:80px;text-align:right}#tnp-dash-subscribers tr td:first-of-type{width:250px;overflow:hidden}#tnp-dash-subscribers table{table-layout:fixed}#tnp-dash-documentation .inside div{margin-top:10px}#tnp-dash-documentation .inside a{text-decoration:none;color:#fff;display:block;font-family:soleil,sans-serif;padding:5px 10px}#tnp-footer{margin-top:10px;padding:20px 10px 10px 40px;background-color:#28313c;font-family:soleil,sans-serif}#tnp-footer div{width:33%;display:inline-block}#tnp-footer a{color:#fff;text-decoration:none}#tnp-footer a:hover{color:#bdc3c7}#tnp-footer input[type="submit"]{background-color:#2ecc71;border:0;padding:5px;color:#fff}#tnp-footer form{white-space:nowrap}#tnp-footer li{display:inline;margin-left:15px;padding:2px 5px;border-left:3px solid #2ecc71}#wpwrap{background-color:#222b36!important}#dashboard-widgets .button{border:0;background:0;box-shadow:none;color:#322c39}#dashboard-widgets .button:hover{background-color:#ecf0f1}.wp-core-ui .button-secondary,.wp-core-ui .button-primary{background-color:#3498db;border:0;box-shadow:none;color:#fff;font-family:soleil,sans-serif;margin:0 2px;width:auto}.wp-core-ui .button-secondary,.wp-core-ui .button,.wp-core-ui .button-primary{background-color:#3498db;box-shadow:none;color:#fff;font-family:soleil,sans-serif;margin:0 2px}.wp-core-ui .button-secondary:hover,.wp-core-ui .button:hover,.wp-core-ui .button-primary:hover{background-color:#5dade2;color:#fff;width:auto}span.wp-media-buttons-icon:before{color:#fff}.tnp-paginator [value="Go"]{background-color:#27ae60}.tnp-paginator [value="Go"]:hover{background-color:#2ecc71}.notice-dismiss{padding:3px}.tnp-paginator{color:#fff;font-family:soleil,sans-serif;margin:10px 0}.tnp-paginator .button-secondary{padding:5px;line-height:normal;height:auto;font-size:12px;height:25px;border:0;border-radius:3px;vertical-align:baseline}.tnp-paginator [value="Go"]{background-color:#27ae60!important}.tnp-paginator [value="Go"]:hover{background-color:#2ecc71!important}.tnp-paginator input{background-color:#2c3e50;border:0;border-radius:3px;color:#fff;padding:5px;line-height:normal;font-size:12px;height:25px}.tnp-subscribers-search{color:#fff;font-family:soleil,sans-serif;background-color:#2c3e50;padding:20px;border-radius:5px;margin-bottom:20px;display:inline-block}.tnp-subscribers-search select{margin-left:5px;padding:0;line-height:inherit}.tnp-video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.tnp-video-container iframe,.tnp-video-container object,.tnp-video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.bg-white{background-color:#FFF}.orange{background-color:#f39c12}.blue{background-color:#2980b9}.purple{background-color:#8e44ad}.notice a{color:#27ae60!important;text-decoration:underline!important}.tnp-chart{border:1px solid #eee;width:100%}.tnp-db-table{width:auto;background-color:#fff}.tnp-db-table thead{border-bottom:1px solid #eee}.tnp-db-table th{font-weight:bold}.tnp-db-table td,.tnp-db-table th{padding:3px;font-family:monospace;border:0}.tnp-main-status h3,.tnp-main-status h4{color:#fff}#tnp-status-table .tnp-ok{font-weight:bold;color:white;font-size:14px;background-color:#27ae60;padding:2px 10px;border-radius:10px;display:inline-block;width:75px;text-align:center}#tnp-status-table .tnp-ko{font-weight:bold;color:white;font-size:14px;background-color:#e74c41;padding:2px 10px;border-radius:10px;display:inline-block;width:75px;text-align:center}#tnp-status-table .tnp-maybe{font-weight:bold;color:white;font-size:14px;background-color:#f1c40f;padding:2px 10px;border-radius:10px;display:inline-block;width:75px;text-align:center}.tnp-main-status .tnp-log-files li{padding-left:15px}.tnp-main-status .tnp-log-files li,.tnp-main-status .tnp-log-files li a{color:#fff}.tnp-main-status .tnp-log-files .tnp-log-size{font-style:italic}table.widefat{border:0;box-shadow:none}#tnp-status-table tbody tr:nth-child(2n+1){background-color:#ecf0f1;border-radius:2px;margin:5px}#tnp-parameters-table tbody tr:nth-child(2n+1){background-color:#ecf0f1;border-radius:2px;margin:5px}#tnp-body .ui-widget{font-family:soleil,sans-serif}#tnp-body #tabs{background-color:transparent;border:0!important;padding:0;margin:0}#tnp-body #tabs .ui-widget-header{background:#28313c;border:0}#tnp-body #tabs .ui-tabs-panel{padding:15px!important;background-color:#fff}#tnp-body #tabs a.ui-tabs-anchor,#tnp-body #tabs a.ui-tabs-anchor:visited{color:#444}#tnp-body .ui-tabs .ui-tabs-nav{padding:0}#tnp-body .ui-tabs .ui-tabs-nav li a{font-size:14px}#tnp-body #tabs .ui-tabs{border-color:#28313c;background-color:#28313c;border:0}#tnp-body #tabs .ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0 0;background-color:#f2f2f2}#tnp-body #tabs .ui-tabs .ui-tabs-panel{padding:1em 0;background-color:#f2f2f2;margin:0;border:0}#tnp-body .ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{background:#fff!important;font-weight:normal;font-family:soleil,sans-serif}#tnp-body .ui-widget-content{background:#fff}#tnp-body .ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:0;background:#ecf0f1;font-family:soleil,sans-serif}.tnp-extension-premium-box,.tnp-extension-free-box,.tnp-integration-box{width:300px;height:220px;background-color:#222b36;text-align:center;margin:20px;float:left;position:relative}.tnp-extension-premium-box:hover,.tnp-extension-free-box:hover,.tnp-integration-box:hover{background-color:#232c35;box-shadow:1px 1px 15px #222b36}.tnp-extension-premium-box p,.tnp-extension-free-box p,.tnp-integration-box p{padding:5px 10px;color:#72777c;font-size:14px;margin-top:0}.tnp-extension-premium-box h3{font-family:soleil,sans-serif;padding:5px 8px!important;border-radius:3px;display:inline-block;font-size:16px;color:#fff;margin-bottom:0!important;margin-top:25px!important;font-weight:300;width:auto!important;border-bottom:none!important}.tnp-extension-free-box h3{font-family:soleil,sans-serif;padding:5px 8px!important;border-radius:3px;display:inline-block;font-size:16px;color:#fff;margin-bottom:0!important;margin-top:25px!important;font-weight:300;width:auto!important;border-bottom:none!important}.tnp-integration-box h3{font-family:soleil,sans-serif;padding:5px 8px!important;border-radius:3px;display:inline-block;font-size:16px;color:#fff;margin-bottom:0!important;margin-top:25px!important;font-weight:300;width:auto!important;border-bottom:none!important}.tnp-extension-premium-action{bottom:0;position:absolute;width:100%;padding:12px;font-family:soleil,sans-serif}.tnp-extension-free-action{bottom:0;position:absolute;width:100%;padding:12px;font-family:soleil,sans-serif}.tnp-integration-action{bottom:0;position:absolute;width:100%;padding:12px;font-family:soleil,sans-serif}.tnp-extension-premium-action span{color:#27ae60}.tnp-extension-free-action span{color:#27ae60}.tnp-integration-action span{color:#27ae60}.tnp-extension-activate{color:#1abc9c;padding:5px 8px;text-decoration:none;cursor:pointer}.tnp-extension-install{color:#2980b9;padding:5px 8px;text-decoration:none;cursor:pointer}.tnp-extension-buy{color:#f1c40f;padding:5px 8px;text-decoration:none;cursor:pointer}#tnp-body a.tnp-extension-details{color:#999;padding:5px 8px;text-decoration:none;cursor:pointer}.tnp-extension-free{color:#d35400;padding:5px 8px;text-decoration:none;cursor:pointer;position:relative}img.tnp-extensions-free-badge{position:absolute;display:block;right:0;top:0;width:70px}.tnp-extensions-image img{margin:25px 0 -10px}#tnp-subscribe-overlay{height:100vh;width:100vw;z-index:10000;display:none;background-image:url(images/modal-background.png);background-repeat:repeat;position:fixed;top:0;left:-20px}#tnp-subscribe-modal{width:600px;background-color:rgba(255,255,255,1);margin-right:auto;margin-left:auto;margin-top:100px;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,0.5);-moz-box-shadow:0 0 20px 0 rgba(0,0,0,0.5);box-shadow:0 0 20px 0 rgba(0,0,0,0.5);padding:25px;background-color:#1d2b38;text-align:center}#tnp-subscribe-modal img{width:30%}#tnp-subscribe-title{font-size:20px;margin-top:30px;margin-bottom:30px;line-height:30px;color:white;font-weight:200}#tnp-subscribe-email-wrapper{margin:20px}#tnp-subscribe-email-wrapper input{border:0;background-color:#223242;color:white}#tnp-subscribe-email{font-size:24px;box-sizing:border-box;width:100%;padding:10px;text-align:center}#tnp-subscribe-submit-wrapper{margin-bottom:20px}#tnp-subscribe-submit{font-size:24px;background-color:#219050;color:#fff;padding:10px 35px;border:0;font-size:17px;letter-spacing:2px}#tnp-subscribe-no-thanks{color:#666;margin-top:20px;margin-bottom:20px}#tnp-body div.tnp-emails-theme-options{background-color:#fff;padding:10px;margin-top:14px}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:0;background:#ecf0f1;font-family:soleil,sans-serif}.cd-slider-wrapper{position:relative;width:100%;height:90vh;overflow:hidden;margin:0 auto}.cd-slider-wrapper .cd-slider,.cd-slider-wrapper .cd-slider>li{height:100%;width:100%}.tnp-logo-big{width:300px}.tnp-row{display:table-row}.tnp-third{width:33%;float:left}.tnp-welcome-confirm-button{color:#fff;padding:10px 30px;background-color:#2ecc71;font-weight:700;font-size:15px;box-shadow:0 20px 38px rgba(0,0,0,0.16);text-decoration:none;display:inline-block;text-align:center;margin:20px auto 0}.tnp-welcome-confirm-button:hover{box-shadow:0 0 38px rgba(0,0,0,0.16);color:#fff}.tnp-welcome-confirm-button:visited{color:#fff;text-decoration:none}.tnp-welcome-link-button{color:#fff;padding:10px 30px;background-color:#3498db;font-weight:700;font-size:15px;box-shadow:0 20px 38px rgba(0,0,0,0.16);text-decoration:none}.tnp-welcome-link-button:hover{box-shadow:0 0 38px rgba(0,0,0,0.16);color:#fff}.tnp-welcome-link-button:visited{color:#fff;text-decoration:none}#tnp-welcome input[type="text"],#tnp-welcome input[type="email"]{max-width:90%}.tnp-welcome-next{background-color:#2ecc71;padding:10px 20px;color:white;text-decoration:none;font-weight:600;font-size:16px;margin:0 10px;box-shadow:0 10px 30px rgba(0,0,0,0.16);width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;display:flex;align-items:center}.tnp-welcome-next:hover{box-shadow:0 0 38px rgba(0,0,0,0.16);color:#fff}.tnp-welcome-next:visited{color:#fff;text-decoration:none}.tnp-welcome-prev{background-color:#3498db;padding:10px 20px;color:white;text-decoration:none;font-weight:600;font-size:16px;margin:0 0 0 10px;box-shadow:0 10px 30px rgba(0,0,0,0.16);width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;display:flex;align-items:center}.tnp-welcome-prev:hover{box-shadow:0 0 38px rgba(0,0,0,0.16);color:#fff}.tnp-welcome-prev:visited{color:#fff;text-decoration:none}.tnp-welcome-next svg{margin-left:10px}.tnp-welcome-prev svg{margin-right:10px}.cd-slider input{width:250px;height:40px;border:1px solid #6c7280;background:#454a56;color:white;color:white;padding:0 10px}.cd-slider>li{position:absolute;top:0;left:0;opacity:0;display:table;background-position:center center;background-repeat:no-repeat;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.cd-slider>li.visible{position:relative;z-index:2;opacity:1}.cd-slider>li:first-of-type{background-color:#2b313a}.cd-slider>li:nth-of-type(2){background-color:#2b313a}.cd-slider>li:nth-of-type(3){background-color:#2b313a}.cd-slider>li:nth-of-type(4){background-color:#2b313a}.cd-slider>li:first-of-type,.cd-slider>li:nth-of-type(2),.cd-slider>li:nth-of-type(3),.cd-slider>li:nth-of-type(4){background-size:cover}.cd-slider>li>div{display:table-cell;vertical-align:middle;text-align:center}.cd-slider>li h2,.cd-slider>li p{text-shadow:0 1px 3px rgba(0,0,0,0.1);line-height:1.2;margin:0 auto 14px;color:#fff;width:90%;max-width:320px}.cd-slider>li h2{font-size:40px}.cd-slider>li p{font-size:18px;line-height:26px;text-align:left;color:#b8c3c9;margin:40px auto}.cd-slider>li .cd-btn{display:inline-block;padding:1.2em 1.4em;margin-top:.8em;background-color:rgba(0,0,0,0.6);border-radius:.25em;font-size:1.3rem;font-weight:700;letter-spacing:1px;color:#fff;text-transform:uppercase;-webkit-transition:background-color .2s;-moz-transition:background-color .2s;transition:background-color .2s}.no-touch .cd-slider>li .cd-btn:hover{background-color:rgba(0,0,0,0.8)}@media only screen and (min-width:768px){.cd-slider>li h2,.cd-slider>li p{max-width:520px}.cd-slider>li h2{font-size:40px}.cd-slider>li p{font-size:18px;line-height:26px;text-align:left;color:#b8c3c9;margin:40px auto}}@media only screen and (min-width:1170px){.cd-slider>li h2,.cd-slider>li p{margin-bottom:20px}.cd-slider>li h2{font-size:40px}.cd-slider>li p{font-size:18px;line-height:26px;text-align:center;color:#b8c3c9;margin:30px auto}}.cd-slider-navigation{position:relative;bottom:110px;z-index:3;display:flex;justify-content:center}.cd-svg-cover{position:absolute;z-index:1;left:0;top:0;height:100%;width:100%;opacity:0}.cd-svg-cover path{fill:#ed6a6a}.cd-svg-cover.is-animating{z-index:4;opacity:1;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;transition:opacity .6s}.switch{position:relative;display:inline-block;width:60px;height:34px}.switch input{display:none}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:"";height:26px;width:26px;left:4px;bottom:4px;background-color:white;-webkit-transition:.4s;transition:.4s}input:checked+.slider{background-color:#2196f3}input:focus+.slider{box-shadow:0 0 1px #2196f3}input:checked+.slider:before{-webkit-transform:translateX(26px);-ms-transform:translateX(26px);transform:translateX(26px)}.slider.round{border-radius:34px}.slider.round:before{border-radius:50%}#tnp-body div.tnp-emails-theme-options table.form-table{margin:0}#tnp-body div.tnp-emails-theme-options h3{color:#000}.tnp-emails-edit #options-subject{font-size:16px;display:inline-block;margin:20px 0;width:auto;border-radius:4px;padding:5px 10px}.tnp-suggest-button{font-family:soleil,sans-serif;margin-left:8px;border-radius:3px;background-color:#2980b9;padding:10px 15px 8px;font-size:14px;color:#fff!important;text-decoration:none}.tnp-suggest-button:hover{background-color:#3f8dbf}.tnp-popup-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.8);z-index:10000}.tnp-popup{width:40vw;height:66vh;overflow:auto;margin:100px auto 0 auto;background-color:#181818;padding:20px;position:relative}.tnp-popup-close{display:block;position:absolute;top:5px;right:5px;background-color:#181818;color:#fff;font-size:40px;padding:10px;text-align:right;cursor:pointer}.tnp-subjects-header{font-size:16px;color:#fff;padding:0 70px 20px 20px;font-family:soleil,sans-serif;border-bottom:1px solid #282828}#tnp-edit-subjects-list{padding:0 70px 20px 20px}#tnp-edit-subjects-list a{padding:5px}#tnp-edit-subjects-list svg{margin:0 10px 0 0;vertical-align:middle}.tnp-subject-category{color:#565656;margin:25px 0 10px 0;font-size:12px;text-transform:uppercase;letter-spacing:.1em}#tnp-edit-emoji-list{font-size:28px}#tnp-edit-emoji-list a{display:inline-block;margin-right:5px;margin-bottom:5px}.tnp-list-conditions p{margin:0 10px}.tnp-lists .tnp-notes{margin:0;font-size:.9em}iframe.tnp-editor-preview-mobile{box-sizing:border-box;background-color:#fff;border:1px solid #bbb;box-shadow:1px 1px 10px #777;border-radius:10px;padding:5px;width:320px;height:500px;float:left}iframe.tnp-editor-preview-desktop{box-sizing:border-box;background-color:#fff;border:1px solid #bbb;border-radius:10px;box-shadow:1px 1px 10px #777;padding:15px;width:650px;margin-right:20px;height:500px;float:left}#tnp-license-control{border-left:5px solid #27ae60;display:inline-block;padding:15px 20px;margin-left:-10px;margin-top:15px;border-radius:2px;background-color:#fff}#tnp-license-control form{margin-bottom:10px;margin-top:10px}#tnp-license-control form input{padding-left:10px}#tnp-license-control a{border-bottom:0;color:#27ae60}#tnp-nl-status{width:100%;background:#fffafa;padding:15px 25px 15px 25px;border-left:10px solid #27ae60;border-radius:0 5px 5px 0}#tnp-nl-status p{font-size:17px}.tnp-nl-status-row{margin:10px 0}.tnp-nl-status-title{font-size:26px;line-height:32px;margin:5px 0 0 0;color:#3498db;font-weight:900;vertical-align:middle}.tnp-nl-status-title-value{font-size:13px;line-height:32px;margin:0 0 0 5px;color:#fff;background-color:#95a5a6;border-radius:4px;text-transform:uppercase;letter-spacing:1px;vertical-align:sub}.tnp-nl-status-schedule-targeting{font-size:15px;color:#34495e}.tnp-nl-status-schedule-value{font-size:15px;color:#34495e}.tnp-status-header #options-subject{width:calc(100% - 150px)}.tnp-one-third{width:40%;display:inline-block;vertical-align:top}.tnp-two-thirds{width:59%;display:inline-block;vertical-align:top}.tnp-progress{display:flex;height:1.5rem;overflow:hidden;font-size:.75rem;background-color:#c9cccf;border-radius:.25rem;margin:0;min-width:100px}.tnp-progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}.tnp-progress.sent .tnp-progress-bar{background-color:green}.tnp-progress-numbers{text-align:center;color:#666}.tnp-progress-date{color:#666;font-style:italic}span.tnp-email-status-new{background-color:#8e44ad;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}span.tnp-email-status-paused{background-color:#95a5a6;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}span.tnp-email-status-sending{background-color:#27ae60;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}span.tnp-email-status-scheduled{background-color:#e67e22;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}span.tnp-email-status-sent{background-color:#95a5a6;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}.tnp-themes-new{border-bottom:2px solid #243342;margin-bottom:30px;padding-bottom:30px}#tnp-schedule-button{background-color:#e67e22!important}#tnp-schedule-button:hover{background-color:#ec913f!important}.tnp-button-cancel{background-color:#e74c3c!important}.tnpc-preview{margin-top:10px}.tnpc-preview .fake-browser-ui iframe{width:700px}.tnpc-preview .fake-mobile-browser-ui iframe{width:320px}.fake-browser-ui{padding:30px 0 0;border-radius:3px;border-bottom:10px solid #ccc;background:#ddd;display:inline-block;position:relative;line-height:0;vertical-align:top;margin-left:20px}.fake-mobile-browser-ui{padding:30px 10px 37px;border-radius:10px;border-bottom:10px solid #ccc;background:#ddd;display:inline-block;position:relative;line-height:0;margin-left:30px}.fake-browser-ui .frame{display:block;height:25px;position:absolute;top:12px;left:8px}.fake-mobile-browser-ui .frame{display:block;height:25px;margin-top:10px}.fake-browser-ui span{height:12px;width:12px;border-radius:8px;background-color:#eee;border:1px solid #dadada;float:left;margin:0 0 0 4px}.fake-mobile-browser-ui span{height:50px;width:50px;border-radius:60px;background-color:#eee;border:2px solid #ccc;display:block;margin:auto}.fake-browser-ui .bt-1{background-color:#ed594a}.fake-browser-ui .bt-2{background-color:#fdd800}.fake-browser-ui .bt-3{background-color:#5ac05a}#tnp-promo{text-align:left;background-color:#222b36;margin:20px;border-radius:5px;padding:20px 40px}#tnp-promo .tnp-promo-how-to{width:50%;padding:5px 20px;margin-top:30px;margin-bottom:30px;border-left:2px solid #f1c40f}#tnp-promo .tnp-promo-how-to h3{color:#ecf0f1;margin:0;line-height:36px}#tnp-promo .tnp-promo-how-to p{color:#ecf0f1;margin:0;font-size:16px;line-height:26px}#tnp-promo .tnp-promo-buttons{margin:50px 0}#tnp-promo .tnp-promo-button{background:#27ae60;text-decoration:none;color:white;padding:15px 20px;font-size:15px;border-radius:2px}#tnp-promo .tnp-promo-button:hover{background:#2ecc71;color:white}#tnp-promo .tnp-promo-button i{margin-right:3px}#tnp-body td a.tnp-table-link,#tnp-body td a.tnp-table-link:visited{color:#444}#tnp-body td a.tnp-table-link:hover{color:#3498db}.text-left{text-align:left}.tab-min-height{min-height:500px}.tnp-control-all-languages-notice{padding:15px;border:1px dashed #999}
1
+ #tnp-wrap *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#tnp-wrap .iris-picker,#tnp-wrap .iris-picker *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#tnp-wrap *:before,#tnp-wrap *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}@media all and (max-width:1100px){.col-md-12{width:100%}.col-md-11{width:100%}.col-md-10{width:100%}.col-md-9{width:100%}.col-md-8{width:100%}.col-md-7{width:100%}.col-md-6{width:100%}.col-md-5{width:100%}.col-md-4{width:100%}.col-md-3{width:100%}.col-md-2{width:100%}.col-md-1{width:100%}}.tnp-row-padded{width:90%;margin:0 auto;display:flex;justify-content:space-between}.tnp-col-3-boxed{width:30%;border:1px solid #3c414c;padding:0 0 30px 0;border-radius:10px}.tnp-margin-top{margin-top:80px}#tnp-wrap,#tnp-header,#tnp-body p,#tnp-body td,#tnp-body td p,#tnp-body input,#tnp-body select,#tnp-body textarea{font-family:soleil,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#tnp-body h1,#tnp-body h2,#tnp-body h3,#tnp-body h4{font-family:soleil,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#tnp-promotion-bar{background-color:#ff5f65;color:ddd;padding:10px 0;text-align:center;font-size:16px}#tnp-promotion-bar a{color:#fff;font-weight:normal;text-decoration:none}#tnp-header{text-align:left;font-size:12px;color:#fff;font-family:soleil,sans-serif}#tnp-header input{font-size:12px}#tnp-header a{text-decoration:none;color:white;letter-spacing:.1em}#tnp-header a:hover{color:#fff}.error a,.error a:hover{color:#000!important}.updated a,.updated a:hover{color:#000!important}.tnp-error{border-left:5px solid #d00;background-color:#fff;padding:15px;margin:15px 0;font-size:1.2em;line-height:1.5em}.tnp-warning{border-left:5px solid #ffb900;background-color:#fff;padding:15px;margin:15px 0;font-size:1.2em;line-height:1.5em}.tnp-message{border-left:5px solid #46b450;background-color:#fff;padding:15px;margin:15px 0;font-size:1.2em;line-height:1.5em}#tnp-body h1,#tnp-body h2,#tnp-body h3,#tnp-body h4,#tnp-body p{color:#fff}#tnp-body a,#tnp-body a:active{color:#2980b9}#tnp-body a:hover{color:#3498db}#tnp-body .tnp-submit{margin-bottom:10px}#tnp-body .button,#tnp-body .button:visited,#tnp-body .button:hover,#tnp-body .button:active,#tnp-body .button:focus,#tnp-body .button-primary,#tnp-body .button-primary:visited,#tnp-body .button-primary:hover,#tnp-body .button-secondary,#tnp-body .button-secondary:visited,#tnp-body .button-secondary:hover{color:#fff;background-color:#3498db;text-shadow:none;width:auto}#tnp-body span.wp-media-buttons-icon:before{color:#fff}#tnp-body .tnp-button{color:#fff;background-color:#3498db;text-shadow:none}#tnp-body .button-primary.tnp-button-white,#tnp-body .tnp-button.tnp-button-white{color:#444!important;background-color:#fff!important;box-shadow:none!important;-webkit-box-shadow:none!important;width:auto}#tnp-body .form-table h1,#tnp-body .form-table h2,#tnp-body .form-table h4,#tnp-body .form-table h3{color:#444}#tnp-body tbody th,#tnp-body td,#tnp-body td p,#tnp-body td .button,#tnp-body td .button:visited,#tnp-body td .button:hover,#tnp-body td .button:active,#tnp-body td .button:focus{color:#444}#tnp-body td a,#tnp-body td a:visited{color:#27ae60}#tnp-body .form-table{background-color:#fff;border:1px solid #ecf0f1;margin-top:2em;border-spacing:4px;border-collapse:separate}#tnp-body .form-table th{text-align:right;font-weight:bold;max-width:200px;color:#000;background-color:#ecf0f1;vertical-align:middle}#tnp-body .form-table th small{font-weight:normal}#tnp-body .form-table textarea{width:100%}#tnp-body .form-table table{border-collapse:collapse}#tnp-body .form-table table td,.form-table table th{padding:5px;font-size:.9em;font-weight:normal;border:1px solid #eee}#tnp-body .form-table table thead th{text-align:left;font-weight:bold}#tnp-body .widefat{width:90%}#tnp-body .widefat th{text-align:left}#tnp-body .widefat thead{background-color:#3498db;font-family:soleil,sans-serif;color:#fff!important}#tnp-body .widefat thead tr th{color:#fff!important}#tnp-body .widefat td,.widefat th{vertical-align:middle}.tnp-newsletters-list tbody tr{height:70px}.widefat tr:nth-child(even){background-color:#f4faff}#tnp-body #tabs h1,#tnp-body #tabs h2,#tnp-body #tabs h3,#tnp-body #tabs h4,#tnp-body #tabs p,#tnp-body #tabs td,#tnp-body #tabs th,#tnp-body #tabs input,#tnp-body #tabs select,#tnp-body #tabs textarea,#tnp-body #tabs a{color:#444}#tnp-body #tabs .button,#tnp-body #tabs .button:visited,#tnp-body #tabs .button:hover,#tnp-body #tabs .button-primary,#tnp-body #tabs .button-primary:visited,#tnp-body #tabs .button-primary:hover,#tnp-body #tabs .button-secondary,#tnp-body #tabs .button-secondary:visited,#tnp-body #tabs .button-secondary:hover{color:#fff;width:auto}table.clicks td{border:1px solid #666;padding:2px;font-size:10px}table.clicks{border-collapse:collapse}.grid{border-collapse:collapse}.grid td,.grid th{padding:10px;border:1px solid #ddd;margin:0}.grid th{background-color:#aaa}.tnp-checkboxes label{display:block;float:left;width:220px;border:1px solid #ccc;background-color:#f4f4f4;margin-bottom:5px;padding:5px;white-space:nowrap;margin-right:5px}.tnp-buttons{padding:10px}.newsletter-checkbox-group,.nl-checkbox-group{float:left;margin-right:5px;border:1px solid #ccc;background-color:#f4f4f4;margin-bottom:5px;padding:5px;white-space:nowrap;overflow:hidden}.newsletter-checkboxes-item{float:left;margin-right:5px;border:1px solid #ddd;border-radius:3px;background-color:#f4f4f4;width:150px;margin-bottom:5px;padding:3px;white-space:nowrap;overflow:hidden}.newsletter-checkboxes-item input{vertical-align:text-bottom}.newsletter-checkboxes-item label{display:inline}.newsletter-preferences-item{float:left;margin-right:5px;border:1px solid #ccc;background-color:#f4f4f4;width:250px;margin-bottom:5px;padding:5px;white-space:nowrap;overflow:hidden}.newsletter-preferences-item label{display:inline}.form-table td .nl-checkbox-group label{display:inline}.tnp-notice{padding:15px;margin:10px 0;padding-right:70px;position:relative;border:1px solid #eee;background-color:#fff;color:#444;font-size:13px;border-left:5px solid #27ae60}.tnp-notice a{color:#0073aa;text-decoration:none;font-weight:bold}.tnp-notice a.tnp-dismiss{display:block;position:absolute;right:10px;top:13px;font-size:25px;text-decoration:none;color:#666}.tnp-notice input[type=email]{margin:10px 5px 5px;width:250px;border:0;box-shadow:none;background-color:#ecf0f1;padding:8px}.tnp-notice input[type=submit]{border:0;box-shadow:none;background-color:#27ae60;padding:8px;font-family:soleil,sans-serif;font-size:13px;color:#fff;cursor:pointer}.newsletter-message{background-color:#efe;border-color:#393;border-radius:5px;border-style:solid;border-width:3px;padding:.6em;margin-bottom:.6em}.newsletter-error-span{color:#f00;font-weight:bold}.newsletter-error{background-color:#fee;border-color:#933;border-radius:5px;border-style:solid;border-width:2px;padding:.6em;margin-bottom:.6em}.newsletter-error strong,.newsletter-message strong{font-weight:bold}#newsletter-warnings{background-color:#ffebe8;border-color:#C00;border-radius:3px;border-style:solid;border-width:1px;padding:.6em;margin-bottom:.6em}.newsletter-buttons{margin-top:1em;margin-bottom:1em}.tnp-paginator{margin-top:10px;margin-bottom:5px}.newsletter-option-grid th{text-align:right;width:auto;border:0;padding:3px;font-weight:normal;vertical-align:top;padding-right:15px}.newsletter-option-grid td{border:0;padding:3px;vertical-align:top}.newsletter-box{border:1px solid #ddd;padding:10px;background-color:#fafafa;margin-bottom:15px}.newsletter-box h3{margin-top:0}.newsletter-textarea-preview{border:1px solid #ddd}.tnp-tab-notice{background-color:#fff;border:1px solid #eee;border-left:3px solid gray;padding:10px;margin:10px 0;color:#444}.tnp-tab-warning{background-color:#fff;border:1px solid #eee;border-left:3px solid orange;padding:10px;margin:10px 0;color:#444}.tnp-tab-success{background-color:#fff;border:1px solid #eee;border-left:3px solid green;padding:10px;margin:10px 0;color:#444}.tnp-tab-error{background-color:#fff;border:1px solid #eee;border-left:3px solid red;padding:10px;margin:10px 0;color:#444}.tnp-tip{margin-top:5px}.tip-button{padding:0 5px;color:#fd5f65;text-transform:uppercase;letter-spacing:.2em;font-size:10px;border:1px red solid}.tip-content{font-weight:500;font-size:11px;color:#999}p.description{font-size:12px!important}.tnp-theme-preview{display:inline-block;text-align:center}.tnp-theme-preview p{font-family:soleil;font-size:13px;letter-spacing:.2em;color:#fff}.tnp-theme-preview img:hover{box-shadow:3px 3px 8px 2px #293848}.tnp-theme-preview img{border-radius:10px;height:190px;width:auto}.tnp-theme-preview .tnp-theme-composer{height:250px;width:auto}.tnp-theme-preview .tnp-theme-html{height:250px;width:auto}.tnp-header-logo{margin-left:10px}.wp-core-ui .button-primary{background-color:#2b2f3a;color:#fff;width:auto}#tnp-body{padding:10px;background-color:#28313c}.tnp-darkbg{background-color:#34495e!important}#tnp-body h3{margin-top:25px;clear:both;margin-bottom:10px}.tnp-body-lite{background-color:#f1f1f1!important}#tnp-heading{padding:10px;margin-bottom:10px;border-radius:5px}#tnp-heading a{color:#fff;border-bottom:1px solid #fff;text-decoration:none}#tnp-heading a:hover{color:#27ae60;border-bottom:1px solid #27ae60}#tnp-heading div p{color:#565656}#tnp-heading h2{color:#fff;font-family:soleil,sans-serif;letter-spacing:.1rem;font-size:1.1rem;line-height:1.8rem;text-transform:uppercase;vertical-align:middle;font-weight:700;padding:0;margin:0;margin-bottom:15px}#tnp-heading h3{color:#27ae60;font-family:soleil,sans-serif;letter-spacing:.1rem;font-size:.8rem;line-height:1.8rem;text-transform:uppercase;vertical-align:middle;font-weight:700;padding:0;margin:0}#tnp-heading p{margin:0;color:#ccc}#tnp-heading .notice p{margin:.5em 0;padding:2px}#tnp-heading .tnp-btn-h1{color:#fff;background-color:#3498db;border-radius:3px;padding:6px 11px;text-decoration:none;text-transform:capitalize;font-family:soleil,sans-serif;margin-left:10px;font-size:.75rem;font-weight:300;border:0}#tnp-heading .tnp-btn-h1:hover{color:#fff;background-color:#5dade2;-webkit-transition:background-color .25s linear;transition:background-color .25s linear;-webkit-font-smoothing:subpixel-antialiased;border:0;color:#fff}.metabox-holder{width:100%}.postbox{border:0}.postbox h3 a{float:right}#dashboard-widgets .postbox-container{width:33.333%}#tnp-body .postbox p{color:#000}#dashboard-widgets .postbox-container .postbox h3{font-family:soleil,sans-serif;letter-spacing:.05rem;background-color:#415b76;color:#fff;margin:0;padding:9px}#dashboard-widgets .postbox-container h3 a{color:white;text-decoration:none;margin-left:5px;padding:2px 8px;background-color:#26c281;border-radius:2px;font-weight:300;text-transform:capitalize;font-size:.8rem}#dashboard-widgets .postbox-container h3 a:hover{color:white;text-decoration:none;margin-left:5px;background-color:#2ecc71}.postbox-container i{margin-right:3px}#tnp-dash-newsletters tr td:last-of-type{width:80px;text-align:right}#tnp-dash-subscribers tr td:last-of-type{width:80px;text-align:right}#tnp-dash-subscribers tr td:first-of-type{width:250px;overflow:hidden}#tnp-dash-subscribers table{table-layout:fixed}#tnp-dash-documentation .inside div{margin-top:10px}#tnp-dash-documentation .inside a{text-decoration:none;color:#fff;display:block;font-family:soleil,sans-serif;padding:5px 10px}#tnp-footer{margin-top:10px;padding:20px 10px 10px 40px;background-color:#28313c;font-family:soleil,sans-serif}#tnp-footer div{width:33%;display:inline-block}#tnp-footer a{color:#fff;text-decoration:none}#tnp-footer a:hover{color:#bdc3c7}#tnp-footer input[type="submit"]{background-color:#2ecc71;border:0;padding:5px;color:#fff}#tnp-footer form{white-space:nowrap}#tnp-footer li{display:inline;margin-left:15px;padding:2px 5px;border-left:3px solid #2ecc71}#wpwrap{background-color:#222b36!important}#dashboard-widgets .button{border:0;background:0;box-shadow:none;color:#322c39}#dashboard-widgets .button:hover{background-color:#ecf0f1}.wp-core-ui .button-secondary,.wp-core-ui .button-primary{background-color:#3498db;border:0;box-shadow:none;color:#fff;font-family:soleil,sans-serif;margin:0 2px;width:auto}.wp-core-ui .button-secondary,.wp-core-ui .button,.wp-core-ui .button-primary{background-color:#3498db;box-shadow:none;color:#fff;font-family:soleil,sans-serif;margin:0 2px}.wp-core-ui .button-secondary:hover,.wp-core-ui .button:hover,.wp-core-ui .button-primary:hover{background-color:#5dade2;color:#fff;width:auto}span.wp-media-buttons-icon:before{color:#fff}.tnp-paginator [value="Go"]{background-color:#27ae60}.tnp-paginator [value="Go"]:hover{background-color:#2ecc71}.notice-dismiss{padding:3px}.tnp-paginator{color:#fff;font-family:soleil,sans-serif;margin:10px 0}.tnp-paginator .button-secondary{padding:5px;line-height:normal;height:auto;font-size:12px;height:25px;border:0;border-radius:3px;vertical-align:baseline}.tnp-paginator [value="Go"]{background-color:#27ae60!important}.tnp-paginator [value="Go"]:hover{background-color:#2ecc71!important}.tnp-paginator input{background-color:#2c3e50;border:0;border-radius:3px;color:#fff;padding:5px;line-height:normal;font-size:12px;height:25px}.tnp-subscribers-search{color:#fff;font-family:soleil,sans-serif;background-color:#2c3e50;padding:20px;border-radius:5px;margin-bottom:20px;display:inline-block}.tnp-subscribers-search select{margin-left:5px;padding:0;line-height:inherit}.tnp-video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.tnp-video-container iframe,.tnp-video-container object,.tnp-video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.bg-white{background-color:#FFF}.orange{background-color:#f39c12}.blue{background-color:#2980b9}.purple{background-color:#8e44ad}.notice a{color:#27ae60!important;text-decoration:underline!important}.tnp-chart{border:1px solid #eee;width:100%}.tnp-db-table{width:auto;background-color:#fff}.tnp-db-table thead{border-bottom:1px solid #eee}.tnp-db-table th{font-weight:bold}.tnp-db-table td,.tnp-db-table th{padding:3px;font-family:monospace;border:0}.tnp-main-status h3,.tnp-main-status h4{color:#fff}#tnp-status-table .tnp-ok{font-weight:bold;color:white;font-size:14px;background-color:#27ae60;padding:2px 10px;border-radius:10px;display:inline-block;width:75px;text-align:center}#tnp-status-table .tnp-ko{font-weight:bold;color:white;font-size:14px;background-color:#e74c41;padding:2px 10px;border-radius:10px;display:inline-block;width:75px;text-align:center}#tnp-status-table .tnp-maybe{font-weight:bold;color:white;font-size:14px;background-color:#f1c40f;padding:2px 10px;border-radius:10px;display:inline-block;width:75px;text-align:center}.tnp-main-status .tnp-log-files li{padding-left:15px}.tnp-main-status .tnp-log-files li,.tnp-main-status .tnp-log-files li a{color:#fff}.tnp-main-status .tnp-log-files .tnp-log-size{font-style:italic}table.widefat{border:0;box-shadow:none}#tnp-status-table tbody tr:nth-child(2n+1){background-color:#ecf0f1;border-radius:2px;margin:5px}#tnp-parameters-table tbody tr:nth-child(2n+1){background-color:#ecf0f1;border-radius:2px;margin:5px}#tnp-body .ui-widget{font-family:soleil,sans-serif}#tnp-body #tabs{background-color:transparent;border:0!important;padding:0;margin:0}#tnp-body #tabs .ui-widget-header{background:#28313c;border:0}#tnp-body #tabs .ui-tabs-panel{padding:15px!important;background-color:#fff}#tnp-body #tabs a.ui-tabs-anchor,#tnp-body #tabs a.ui-tabs-anchor:visited{color:#444}#tnp-body .ui-tabs .ui-tabs-nav{padding:0}#tnp-body .ui-tabs .ui-tabs-nav li a{font-size:14px}#tnp-body #tabs .ui-tabs{border-color:#28313c;background-color:#28313c;border:0}#tnp-body #tabs .ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0 0;background-color:#f2f2f2}#tnp-body #tabs .ui-tabs .ui-tabs-panel{padding:1em 0;background-color:#f2f2f2;margin:0;border:0}#tnp-body .ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{background:#fff!important;font-weight:normal;font-family:soleil,sans-serif}#tnp-body .ui-widget-content{background:#fff}#tnp-body .ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:0;background:#ecf0f1;font-family:soleil,sans-serif}.tnp-extension-premium-box,.tnp-extension-free-box,.tnp-integration-box{width:300px;height:220px;background-color:#222b36;text-align:center;margin:20px;float:left;position:relative}.tnp-extension-premium-box:hover,.tnp-extension-free-box:hover,.tnp-integration-box:hover{background-color:#232c35;box-shadow:1px 1px 15px #222b36}.tnp-extension-premium-box p,.tnp-extension-free-box p,.tnp-integration-box p{padding:5px 10px;color:#72777c;font-size:14px;margin-top:0}.tnp-extension-premium-box h3{font-family:soleil,sans-serif;padding:5px 8px!important;border-radius:3px;display:inline-block;font-size:16px;color:#fff;margin-bottom:0!important;margin-top:25px!important;font-weight:300;width:auto!important;border-bottom:none!important}.tnp-extension-free-box h3{font-family:soleil,sans-serif;padding:5px 8px!important;border-radius:3px;display:inline-block;font-size:16px;color:#fff;margin-bottom:0!important;margin-top:25px!important;font-weight:300;width:auto!important;border-bottom:none!important}.tnp-integration-box h3{font-family:soleil,sans-serif;padding:5px 8px!important;border-radius:3px;display:inline-block;font-size:16px;color:#fff;margin-bottom:0!important;margin-top:25px!important;font-weight:300;width:auto!important;border-bottom:none!important}.tnp-extension-premium-action{bottom:0;position:absolute;width:100%;padding:12px;font-family:soleil,sans-serif}.tnp-extension-free-action{bottom:0;position:absolute;width:100%;padding:12px;font-family:soleil,sans-serif}.tnp-integration-action{bottom:0;position:absolute;width:100%;padding:12px;font-family:soleil,sans-serif}.tnp-extension-premium-action span{color:#27ae60}.tnp-extension-free-action span{color:#27ae60}.tnp-integration-action span{color:#27ae60}.tnp-extension-activate{color:#1abc9c;padding:5px 8px;text-decoration:none;cursor:pointer}.tnp-extension-install{color:#2980b9;padding:5px 8px;text-decoration:none;cursor:pointer}.tnp-extension-buy{color:#f1c40f;padding:5px 8px;text-decoration:none;cursor:pointer}#tnp-body a.tnp-extension-details{color:#999;padding:5px 8px;text-decoration:none;cursor:pointer}.tnp-extension-free{color:#d35400;padding:5px 8px;text-decoration:none;cursor:pointer;position:relative}img.tnp-extensions-free-badge{position:absolute;display:block;right:0;top:0;width:70px}.tnp-extensions-image img{margin:25px 0 -10px}#tnp-subscribe-overlay{height:100vh;width:100vw;z-index:10000;display:none;background-image:url(images/modal-background.png);background-repeat:repeat;position:fixed;top:0;left:-20px}#tnp-subscribe-modal{width:600px;background-color:rgba(255,255,255,1);margin-right:auto;margin-left:auto;margin-top:100px;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,0.5);-moz-box-shadow:0 0 20px 0 rgba(0,0,0,0.5);box-shadow:0 0 20px 0 rgba(0,0,0,0.5);padding:25px;background-color:#1d2b38;text-align:center}#tnp-subscribe-modal img{width:30%}#tnp-subscribe-title{font-size:20px;margin-top:30px;margin-bottom:30px;line-height:30px;color:white;font-weight:200}#tnp-subscribe-email-wrapper{margin:20px}#tnp-subscribe-email-wrapper input{border:0;background-color:#223242;color:white}#tnp-subscribe-email{font-size:24px;box-sizing:border-box;width:100%;padding:10px;text-align:center}#tnp-subscribe-submit-wrapper{margin-bottom:20px}#tnp-subscribe-submit{font-size:24px;background-color:#219050;color:#fff;padding:10px 35px;border:0;font-size:17px;letter-spacing:2px}#tnp-subscribe-no-thanks{color:#666;margin-top:20px;margin-bottom:20px}#tnp-body div.tnp-emails-theme-options{background-color:#fff;padding:10px;margin-top:14px}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:0;background:#ecf0f1;font-family:soleil,sans-serif}.cd-slider-wrapper{position:relative;width:100%;height:90vh;overflow:hidden;margin:0 auto}.cd-slider-wrapper .cd-slider,.cd-slider-wrapper .cd-slider>li{height:100%;width:100%}.tnp-logo-big{width:300px}.tnp-row{display:table-row}.tnp-third{width:33%;float:left}.tnp-welcome-confirm-button{color:#fff;padding:10px 30px;background-color:#2ecc71;font-weight:700;font-size:15px;box-shadow:0 20px 38px rgba(0,0,0,0.16);text-decoration:none;display:inline-block;text-align:center;margin:20px auto 0}.tnp-welcome-confirm-button:hover{box-shadow:0 0 38px rgba(0,0,0,0.16);color:#fff}.tnp-welcome-confirm-button:visited{color:#fff;text-decoration:none}.tnp-welcome-link-button{color:#fff;padding:10px 30px;background-color:#3498db;font-weight:700;font-size:15px;box-shadow:0 20px 38px rgba(0,0,0,0.16);text-decoration:none}.tnp-welcome-link-button:hover{box-shadow:0 0 38px rgba(0,0,0,0.16);color:#fff}.tnp-welcome-link-button:visited{color:#fff;text-decoration:none}#tnp-welcome input[type="text"],#tnp-welcome input[type="email"]{max-width:90%}.tnp-welcome-next{background-color:#2ecc71;padding:10px 20px;color:white;text-decoration:none;font-weight:600;font-size:16px;margin:0 10px;box-shadow:0 10px 30px rgba(0,0,0,0.16);width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;display:flex;align-items:center}.tnp-welcome-next:hover{box-shadow:0 0 38px rgba(0,0,0,0.16);color:#fff}.tnp-welcome-next:visited{color:#fff;text-decoration:none}.tnp-welcome-prev{background-color:#3498db;padding:10px 20px;color:white;text-decoration:none;font-weight:600;font-size:16px;margin:0 0 0 10px;box-shadow:0 10px 30px rgba(0,0,0,0.16);width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;display:flex;align-items:center}.tnp-welcome-prev:hover{box-shadow:0 0 38px rgba(0,0,0,0.16);color:#fff}.tnp-welcome-prev:visited{color:#fff;text-decoration:none}.tnp-welcome-next svg{margin-left:10px}.tnp-welcome-prev svg{margin-right:10px}.cd-slider input{width:250px;height:40px;border:1px solid #6c7280;background:#454a56;color:white;color:white;padding:0 10px}.cd-slider>li{position:absolute;top:0;left:0;opacity:0;display:table;background-position:center center;background-repeat:no-repeat;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.cd-slider>li.visible{position:relative;z-index:2;opacity:1}.cd-slider>li:first-of-type{background-color:#2b313a}.cd-slider>li:nth-of-type(2){background-color:#2b313a}.cd-slider>li:nth-of-type(3){background-color:#2b313a}.cd-slider>li:nth-of-type(4){background-color:#2b313a}.cd-slider>li:first-of-type,.cd-slider>li:nth-of-type(2),.cd-slider>li:nth-of-type(3),.cd-slider>li:nth-of-type(4){background-size:cover}.cd-slider>li>div{display:table-cell;vertical-align:middle;text-align:center}.cd-slider>li h2,.cd-slider>li p{text-shadow:0 1px 3px rgba(0,0,0,0.1);line-height:1.2;margin:0 auto 14px;color:#fff;width:90%;max-width:320px}.cd-slider>li h2{font-size:40px}.cd-slider>li p{font-size:18px;line-height:26px;text-align:left;color:#b8c3c9;margin:40px auto}.cd-slider>li .cd-btn{display:inline-block;padding:1.2em 1.4em;margin-top:.8em;background-color:rgba(0,0,0,0.6);border-radius:.25em;font-size:1.3rem;font-weight:700;letter-spacing:1px;color:#fff;text-transform:uppercase;-webkit-transition:background-color .2s;-moz-transition:background-color .2s;transition:background-color .2s}.no-touch .cd-slider>li .cd-btn:hover{background-color:rgba(0,0,0,0.8)}@media only screen and (min-width:768px){.cd-slider>li h2,.cd-slider>li p{max-width:520px}.cd-slider>li h2{font-size:40px}.cd-slider>li p{font-size:18px;line-height:26px;text-align:left;color:#b8c3c9;margin:40px auto}}@media only screen and (min-width:1170px){.cd-slider>li h2,.cd-slider>li p{margin-bottom:20px}.cd-slider>li h2{font-size:40px}.cd-slider>li p{font-size:18px;line-height:26px;text-align:center;color:#b8c3c9;margin:30px auto}}.cd-slider-navigation{position:relative;bottom:110px;z-index:3;display:flex;justify-content:center}.cd-svg-cover{position:absolute;z-index:1;left:0;top:0;height:100%;width:100%;opacity:0}.cd-svg-cover path{fill:#ed6a6a}.cd-svg-cover.is-animating{z-index:4;opacity:1;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;transition:opacity .6s}.switch{position:relative;display:inline-block;width:60px;height:34px}.switch input{display:none}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:"";height:26px;width:26px;left:4px;bottom:4px;background-color:white;-webkit-transition:.4s;transition:.4s}input:checked+.slider{background-color:#2196f3}input:focus+.slider{box-shadow:0 0 1px #2196f3}input:checked+.slider:before{-webkit-transform:translateX(26px);-ms-transform:translateX(26px);transform:translateX(26px)}.slider.round{border-radius:34px}.slider.round:before{border-radius:50%}#tnp-body div.tnp-emails-theme-options table.form-table{margin:0}#tnp-body div.tnp-emails-theme-options h3{color:#000}.tnp-emails-edit #options-subject{font-size:16px;display:inline-block;margin:20px 0;width:auto;border-radius:4px;padding:5px 10px}.tnp-suggest-button{font-family:soleil,sans-serif;margin-left:8px;border-radius:3px;background-color:#2980b9;padding:10px 15px 8px;font-size:14px;color:#fff!important;text-decoration:none}.tnp-suggest-button:hover{background-color:#3f8dbf}.tnp-popup-overlay{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.8);z-index:10000}.tnp-popup{width:40vw;height:66vh;overflow:auto;margin:100px auto 0 auto;background-color:#181818;padding:20px;position:relative}.tnp-popup-close{display:block;position:absolute;top:5px;right:5px;background-color:#181818;color:#fff;font-size:40px;padding:10px;text-align:right;cursor:pointer}.tnp-subjects-header{font-size:16px;color:#fff;padding:0 70px 20px 20px;font-family:soleil,sans-serif;border-bottom:1px solid #282828}#tnp-edit-subjects-list{padding:0 70px 20px 20px}#tnp-edit-subjects-list a{padding:5px}#tnp-edit-subjects-list svg{margin:0 10px 0 0;vertical-align:middle}.tnp-subject-category{color:#565656;margin:25px 0 10px 0;font-size:12px;text-transform:uppercase;letter-spacing:.1em}#tnp-edit-emoji-list{font-size:28px}#tnp-edit-emoji-list a{display:inline-block;margin-right:5px;margin-bottom:5px}.tnp-list-conditions p{margin:0 10px}.tnp-lists .tnp-notes{margin:0;font-size:.9em}iframe.tnp-editor-preview-mobile{box-sizing:border-box;background-color:#fff;border:1px solid #bbb;box-shadow:1px 1px 10px #777;border-radius:10px;padding:5px;width:320px;height:500px;float:left}iframe.tnp-editor-preview-desktop{box-sizing:border-box;background-color:#fff;border:1px solid #bbb;border-radius:10px;box-shadow:1px 1px 10px #777;padding:15px;width:650px;margin-right:20px;height:500px;float:left}#tnp-license-control{border-left:5px solid #27ae60;display:inline-block;padding:15px 20px;margin-left:-10px;margin-top:15px;border-radius:2px;background-color:#fff}#tnp-license-control form{margin-bottom:10px;margin-top:10px}#tnp-license-control form input{padding-left:10px}#tnp-license-control a{border-bottom:0;color:#27ae60}#tnp-nl-status{width:100%;background:#fffafa;padding:15px 25px 15px 25px;border-left:10px solid #27ae60;border-radius:0 5px 5px 0}#tnp-nl-status p{font-size:17px}.tnp-nl-status-row{margin:10px 0}.tnp-nl-status-title{font-size:26px;line-height:32px;margin:5px 0 0 0;color:#3498db;font-weight:900;vertical-align:middle}.tnp-nl-status-title-value{font-size:13px;line-height:32px;margin:0 0 0 5px;color:#fff;background-color:#95a5a6;border-radius:4px;text-transform:uppercase;letter-spacing:1px;vertical-align:sub}.tnp-nl-status-schedule-targeting{font-size:15px;color:#34495e}.tnp-nl-status-schedule-value{font-size:15px;color:#34495e}.tnp-status-header #options-subject{width:calc(100% - 150px)}.tnp-one-third{width:40%;display:inline-block;vertical-align:top}.tnp-two-thirds{width:59%;display:inline-block;vertical-align:top}.tnp-progress{display:flex;height:1.5rem;overflow:hidden;font-size:.75rem;background-color:#c9cccf;border-radius:.25rem;margin:0;min-width:100px}.tnp-progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}.tnp-progress.sent .tnp-progress-bar{background-color:green}.tnp-progress-numbers{text-align:center;color:#666}.tnp-progress-date{color:#666;font-style:italic}span.tnp-email-status-new{background-color:#8e44ad;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}span.tnp-email-status-paused{background-color:#95a5a6;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}span.tnp-email-status-sending{background-color:#27ae60;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}span.tnp-email-status-scheduled{background-color:#e67e22;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}span.tnp-email-status-sent{background-color:#95a5a6;padding:2px 10px;border-radius:4px;color:#fff;white-space:nowrap}.tnp-themes-new{border-bottom:2px solid #243342;margin-bottom:30px;padding-bottom:30px}#tnp-schedule-button{background-color:#e67e22!important}#tnp-schedule-button:hover{background-color:#ec913f!important}.tnp-button-cancel{background-color:#e74c3c!important}.tnpc-preview{margin-top:10px}.tnpc-preview .fake-browser-ui iframe{width:700px}.tnpc-preview .fake-mobile-browser-ui iframe{width:320px}.fake-browser-ui{padding:30px 0 0;border-radius:3px;border-bottom:10px solid #ccc;background:#ddd;display:inline-block;position:relative;line-height:0;vertical-align:top;margin-left:20px}.fake-mobile-browser-ui{padding:30px 10px 37px;border-radius:10px;border-bottom:10px solid #ccc;background:#ddd;display:inline-block;position:relative;line-height:0;margin-left:30px}.fake-browser-ui .frame{display:block;height:25px;position:absolute;top:12px;left:8px}.fake-mobile-browser-ui .frame{display:block;height:25px;margin-top:10px}.fake-browser-ui span{height:12px;width:12px;border-radius:8px;background-color:#eee;border:1px solid #dadada;float:left;margin:0 0 0 4px}.fake-mobile-browser-ui span{height:50px;width:50px;border-radius:60px;background-color:#eee;border:2px solid #ccc;display:block;margin:auto}.fake-browser-ui .bt-1{background-color:#ed594a}.fake-browser-ui .bt-2{background-color:#fdd800}.fake-browser-ui .bt-3{background-color:#5ac05a}#tnp-promo{text-align:left;background-color:#222b36;margin:20px;border-radius:5px;padding:20px 40px}#tnp-promo .tnp-promo-how-to{width:50%;padding:5px 20px;margin-top:30px;margin-bottom:30px;border-left:2px solid #f1c40f}#tnp-promo .tnp-promo-how-to h3{color:#ecf0f1;margin:0;line-height:36px}#tnp-promo .tnp-promo-how-to p{color:#ecf0f1;margin:0;font-size:16px;line-height:26px}#tnp-promo .tnp-promo-buttons{margin:50px 0}#tnp-promo .tnp-promo-button{background:#27ae60;text-decoration:none;color:white;padding:15px 20px;font-size:15px;border-radius:2px}#tnp-promo .tnp-promo-button:hover{background:#2ecc71;color:white}#tnp-promo .tnp-promo-button i{margin-right:3px}#tnp-body td a.tnp-table-link,#tnp-body td a.tnp-table-link:visited{color:#444}#tnp-body td a.tnp-table-link:hover{color:#3498db}.text-left{text-align:left}.tab-min-height{min-height:500px}.tnp-control-all-languages-notice{padding:15px;border:1px dashed #999}.sp-dd{display:none}.sp-replacer{width:30px!important;height:30px!important}
admin.min.js CHANGED
@@ -2,4 +2,4 @@ jQuery.cookie=function(c,b,a){if("undefined"!=typeof b){a=a||{};null===b&&(b="",
2
  document.cookie.split(";"),d=0;d<a.length;d++)if(e=jQuery.trim(a[d]),e.substring(0,c.length+1)==c+"="){b=decodeURIComponent(e.substring(c.length+1));break}return b}};function tnp_toggle_schedule(){jQuery("#tnp-schedule-button").toggle();jQuery("#tnp-schedule").toggle()}function tnp_select_toggle(c,b){1==c.value?jQuery("#options-"+b).show():jQuery("#options-"+b).hide()}
3
  function tnp_date_onchange(c){var b=c.id.substring(0,c.id.lastIndexOf("_"));c=document.getElementById("options-"+b);let a=document.getElementById(b+"_year"),d=document.getElementById(b+"_month");b=document.getElementById(b+"_day");c.value=""===a.value||""===d.value||""===b.value?0:(new Date(a.value,d.value,b.value,12,0,0)).getTime()/1E3}
4
  window.onload=function(){jQuery(".tnp-counter-animation").each(function(){var c=jQuery(this),b=null;(function(a){return!isNaN(Number(a))&&-1!==Number(a).toString().indexOf(".")})(c.text())?b={parsed:parseFloat(c.text()),rounded:function(a){return a.toFixed(1)}}:(b={parsed:parseInt(c.text()),rounded:function(a){return Math.ceil(a)}},c.hasClass("percentage")&&c.css("min-width","60px"));jQuery({counter:0}).animate({counter:b.parsed},{duration:1E3,easing:"swing",step:function(){c.text(b.rounded(this.counter))}})});
5
- (function(){if(jQuery("#tnp-nl-status").length&&jQuery("#newsletter-form").length){var c=jQuery("#tnp-nl-status .tnp-nl-status-schedule-value");jQuery("#newsletter-form").change(function(b){1===jQuery(b.target).parents("#tabs-options").length&&c.text(tnp_translations.save_to_update_counter)})}})()};
2
  document.cookie.split(";"),d=0;d<a.length;d++)if(e=jQuery.trim(a[d]),e.substring(0,c.length+1)==c+"="){b=decodeURIComponent(e.substring(c.length+1));break}return b}};function tnp_toggle_schedule(){jQuery("#tnp-schedule-button").toggle();jQuery("#tnp-schedule").toggle()}function tnp_select_toggle(c,b){1==c.value?jQuery("#options-"+b).show():jQuery("#options-"+b).hide()}
3
  function tnp_date_onchange(c){var b=c.id.substring(0,c.id.lastIndexOf("_"));c=document.getElementById("options-"+b);let a=document.getElementById(b+"_year"),d=document.getElementById(b+"_month");b=document.getElementById(b+"_day");c.value=""===a.value||""===d.value||""===b.value?0:(new Date(a.value,d.value,b.value,12,0,0)).getTime()/1E3}
4
  window.onload=function(){jQuery(".tnp-counter-animation").each(function(){var c=jQuery(this),b=null;(function(a){return!isNaN(Number(a))&&-1!==Number(a).toString().indexOf(".")})(c.text())?b={parsed:parseFloat(c.text()),rounded:function(a){return a.toFixed(1)}}:(b={parsed:parseInt(c.text()),rounded:function(a){return Math.ceil(a)}},c.hasClass("percentage")&&c.css("min-width","60px"));jQuery({counter:0}).animate({counter:b.parsed},{duration:1E3,easing:"swing",step:function(){c.text(b.rounded(this.counter))}})});
5
+ (function(){if(jQuery("#tnp-nl-status").length&&jQuery("#newsletter-form").length){var c=jQuery("#tnp-nl-status .tnp-nl-status-schedule-value");jQuery("#newsletter-form").change(function(b){1===jQuery(b.target).parents("#tabs-options").length&&c.text(tnp_translations.save_to_update_counter)})}})()};function tnp_controls_init(){jQuery(".tnpf-color").spectrum({type:"color",allowEmpty:!0,showAlpha:!1,showInput:!0,preferredFormat:"hex"})};
css/fields.css CHANGED
@@ -53,7 +53,7 @@
53
  }
54
 
55
  .tnp-section {
56
-
57
  }
58
 
59
  .tnp-field.tnp-separator {
@@ -91,10 +91,10 @@
91
 
92
  /* Set of inlined field for font, size, color... */
93
  tnp-field.tnp-font {
94
-
95
  }
96
 
97
- .tnp-field input {
98
  width: 100%;
99
  }
100
 
@@ -140,13 +140,25 @@ tnp-field.tnp-font {
140
  width: auto;
141
  }
142
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  .tnp-field.tnp-categories {
144
-
145
  }
146
 
147
  /* The label for each category checkbox (should override the generic label appearance) */
148
  .tnp-field.tnp-categories label {
149
-
150
  }
151
 
152
  .tnp-description {
@@ -155,3 +167,8 @@ tnp-field.tnp-font {
155
  font-weight: normal;
156
  color: #999999;
157
  }
 
 
 
 
 
53
  }
54
 
55
  .tnp-section {
56
+
57
  }
58
 
59
  .tnp-field.tnp-separator {
91
 
92
  /* Set of inlined field for font, size, color... */
93
  tnp-field.tnp-font {
94
+
95
  }
96
 
97
+ .tnp-field:not(.tnp-colorpicker) input {
98
  width: 100%;
99
  }
100
 
140
  width: auto;
141
  }
142
 
143
+ .tnp-field.tnp-button .tnpf-font-family {
144
+ font-size: 13px;
145
+ }
146
+
147
+ .tnp-field.tnp-button .tnpf-font-size {
148
+ font-size: 13px;
149
+ }
150
+
151
+ .tnp-field.tnp-button .tnpf-font-weight {
152
+ font-size: 13px;
153
+ }
154
+
155
  .tnp-field.tnp-categories {
156
+
157
  }
158
 
159
  /* The label for each category checkbox (should override the generic label appearance) */
160
  .tnp-field.tnp-categories label {
161
+
162
  }
163
 
164
  .tnp-description {
167
  font-weight: normal;
168
  color: #999999;
169
  }
170
+
171
+ .tnpf-color {
172
+ width: 40px;
173
+ font-size: 12px;
174
+ }
css/fields.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .tnp-field-row{clear:both;margin-left:-10px;margin-right:-10px}.tnp-field-col-2{width:50%;box-sizing:border-box;padding:10px;float:left}.tnp-field-col-3{width:33%;box-sizing:border-box;padding:10px;float:left}.tnp-field-col-20{width:20%;box-sizing:border-box;padding:10px;float:left}.tnp-field-col-33{width:33%;box-sizing:border-box;padding:10px;float:left}.tnp-field-col-66{width:66%;box-sizing:border-box;padding:10px;float:left}.tnp-field-col-80{width:80%;box-sizing:border-box;padding:10px;float:left}.tnp-field.tnp-separator{border-top:1px solid #ddd;line-height:0}.tnp-field{display:block;width:100%;margin-bottom:10px}.tnp-field label.tnp-label,.tnp-field-row label.tnp-row-label{display:block;font-size:12px;font-weight:300;border-bottom:1px solid #fff;margin:25px 0 10px 0;font-family:soleil,sans-serif;font-weight:300;padding-bottom:5px;color:#868686}.tnp-field-row label.tnp-row-label{margin-left:10px}.tnp-field.tnp-checkbox label{display:inline}.tnp-field:not(.tnp-colorpicker) input{width:100%}.tnp-field input[type=number]{width:100px}.tnp-field.tnp-size input{width:60px;display:inline}.tnp-field .tnp-padding-fields{display:inline}.tnp-field .tnp-padding-fields input{width:40px;display:inline}.tnp-field select{width:auto!important;color:#34495e}.tnp-field input[type=url]{font-family:monospace}.tnp-field input[type=color]{width:40px;min-height:30px;vertical-align:middle}.tnp-field input[type=submit]{width:auto}.tnp-field input[type=checkbox]{width:auto}.tnp-field.tnp-button .tnpf-font-family{font-size:13px}.tnp-field.tnp-button .tnpf-font-size{font-size:13px}.tnp-field.tnp-button .tnpf-font-weight{font-size:13px}.tnp-description{margin-top:7px;font-style:italic;font-weight:normal;color:#999}.tnpf-color{width:40px;font-size:12px}
emails/blocks/hero/block-full.php CHANGED
@@ -1,27 +1,27 @@
1
  <style>
2
  /* Styles which will be removed and injected in the replacing the matching "inline-class" attribute */
3
  .title {
4
- font-size: <?php echo $title_font_size ?>px;
5
- color: <?php echo $title_font_color ?>;
6
  font-family: <?php echo $title_font_family ?>;
7
- font-weight: <?php echo $title_font_weight ?>;
8
  line-height: normal;
9
  margin: 0;
10
  }
11
  .text {
12
- padding: 20px 0 0 0;
13
- font-size: <?php echo $font_size ?>px;
14
- line-height: 150%;
15
- color: <?php echo $font_color ?>;
16
- font-family: <?php echo $font_family ?>;
17
  margin: 0;
18
  }
19
  .image {
20
- max-width: 100%!important;
21
  display: inline-block;
22
  border: 0px;
23
  margin: 0;
24
- }
25
  .image-a {
26
  display: block;
27
  }
@@ -33,9 +33,7 @@
33
  <?php if ($media) { ?>
34
  <tr>
35
  <td class="padding-copy tnpc-row-edit" align="center" style="text-align: center; line-height: 0; padding-bottom: 20px;">
36
- <a href="<?php echo $url ?>" target="_blank" rel="noopener nofollow" inline-class="image-a">
37
- <img src="<?php echo $media->url ?>" border="0" alt="<?php echo esc_attr($media->alt) ?>" width="<?php echo $media->width ?>" height="<?php echo $media->height ?>" inline-class="image">
38
- </a>
39
  </td>
40
  </tr>
41
  <?php } ?>
1
  <style>
2
  /* Styles which will be removed and injected in the replacing the matching "inline-class" attribute */
3
  .title {
4
+ font-size: <?php echo $title_font_size ?>px;
5
+ color: <?php echo $title_font_color ?>;
6
  font-family: <?php echo $title_font_family ?>;
7
+ font-weight: <?php echo $title_font_weight ?>;
8
  line-height: normal;
9
  margin: 0;
10
  }
11
  .text {
12
+ padding: 20px 0 0 0;
13
+ font-size: <?php echo $font_size ?>px;
14
+ line-height: 150%;
15
+ color: <?php echo $font_color ?>;
16
+ font-family: <?php echo $font_family ?>;
17
  margin: 0;
18
  }
19
  .image {
20
+ max-width: 100%!important;
21
  display: inline-block;
22
  border: 0px;
23
  margin: 0;
24
+ }
25
  .image-a {
26
  display: block;
27
  }
33
  <?php if ($media) { ?>
34
  <tr>
35
  <td class="padding-copy tnpc-row-edit" align="center" style="text-align: center; line-height: 0; padding-bottom: 20px;">
36
+ <?php echo TNP_Composer::image( $media, [ 'class' => 'image', 'link-class' => 'image-a' ] ); ?>
 
 
37
  </td>
38
  </tr>
39
  <?php } ?>
emails/blocks/hero/block-left.php CHANGED
@@ -1,29 +1,29 @@
1
  <style>
2
  /* Styles which will be removed and injected in the replacing the matching "inline-class" attribute */
3
  .title {
4
- font-size: <?php echo $title_font_size ?>px;
5
- color: <?php echo $title_font_color ?>;
6
- padding-top: 0;
7
  font-family: <?php echo $title_font_family ?>;
8
- font-weight: <?php echo $title_font_weight ?>;
9
  margin: 0;
10
  text-align: center;
11
  line-height: normal;
12
  }
13
  .text {
14
- padding: 20px 0 0 0;
15
- font-size: <?php echo $font_size ?>px;
16
- line-height: 150%;
17
- color: <?php echo $font_color ?>;
18
- font-family: <?php echo $font_family ?>;
19
- font-weight: <?php echo $font_weight ?>;
20
  margin: 0;
21
  text-align: center;
22
  }
23
  .image {
24
  max-width: 100%!important;
25
  display: block;
26
- }
27
  .image-a {
28
  display: block;
29
  }
@@ -37,11 +37,7 @@
37
  <table width="50%" align="left" class="hero-table" border="0" cellspacing="0" cellpadding="0">
38
  <tr>
39
  <td align="center" valign="top">
40
- <a href="<?php echo $url ?>" target="_blank" rel="noopener nofollow" inline-class="image-a">
41
- <?php if ($media) { ?>
42
- <img src="<?php echo $media->url ?>" border="0" alt="<?php echo esc_attr($media->alt) ?>" width="<?php echo $media->width ?>" height="<?php echo $media->height ?>" inline-class="image">
43
- <?php } ?>
44
- </a>
45
  </td>
46
  </tr>
47
  </table>
@@ -64,4 +60,4 @@
64
  </td>
65
  </tr>
66
 
67
- </table>
1
  <style>
2
  /* Styles which will be removed and injected in the replacing the matching "inline-class" attribute */
3
  .title {
4
+ font-size: <?php echo $title_font_size ?>px;
5
+ color: <?php echo $title_font_color ?>;
6
+ padding-top: 0;
7
  font-family: <?php echo $title_font_family ?>;
8
+ font-weight: <?php echo $title_font_weight ?>;
9
  margin: 0;
10
  text-align: center;
11
  line-height: normal;
12
  }
13
  .text {
14
+ padding: 20px 0 0 0;
15
+ font-size: <?php echo $font_size ?>px;
16
+ line-height: 150%;
17
+ color: <?php echo $font_color ?>;
18
+ font-family: <?php echo $font_family ?>;
19
+ font-weight: <?php echo $font_weight ?>;
20
  margin: 0;
21
  text-align: center;
22
  }
23
  .image {
24
  max-width: 100%!important;
25
  display: block;
26
+ }
27
  .image-a {
28
  display: block;
29
  }
37
  <table width="50%" align="left" class="hero-table" border="0" cellspacing="0" cellpadding="0">
38
  <tr>
39
  <td align="center" valign="top">
40
+ <?php echo TNP_Composer::image( $media, [ 'class' => 'image', 'link-class' => 'image-a' ] ); ?>
 
 
 
 
41
  </td>
42
  </tr>
43
  </table>
60
  </td>
61
  </tr>
62
 
63
+ </table>
emails/blocks/hero/block-right.php CHANGED
@@ -1,22 +1,22 @@
1
  <style>
2
  /* Styles which will be removed and injected in the replacing the matching "inline-class" attribute */
3
  .title {
4
- font-size: <?php echo $title_font_size ?>px;
5
- color: <?php echo $title_font_color ?>;
6
- padding-top: 0;
7
  font-family: <?php echo $title_font_family ?>;
8
- font-weight: <?php echo $title_font_weight ?>;
9
  line-height: normal;
10
  margin: 0;
11
  text-align: center;
12
  }
13
  .text {
14
- padding: 20px 0 0 0;
15
- font-size: <?php echo $font_size ?>px;
16
- line-height: 150%;
17
- color: <?php echo $font_color ?>;
18
- font-family: <?php echo $font_family ?>;
19
- font-weight: <?php echo $font_weight ?>;
20
  text-align: center;
21
  margin: 0;
22
  }
@@ -29,7 +29,7 @@
29
  }
30
  .button {
31
  padding-top: 15px;
32
- }
33
  </style>
34
 
35
  <!-- layout: right -->
@@ -39,14 +39,10 @@
39
  <table width="50%" align="right" class="hero-table" border="0" cellspacing="0" cellpadding="0">
40
  <tr>
41
  <td align="center" valign="top" dir="ltr">
42
- <a href="<?php echo $url ?>" target="_blank" rel="noopener nofollow" inline-class="image-a">
43
- <?php if ($media) { ?>
44
- <img src="<?php echo $media->url ?>" border="0" alt="<?php echo esc_attr($media->alt) ?>" width="<?php echo $media->width ?>" height="<?php echo $media->height ?>" inline-class="image">
45
- <?php } ?>
46
- </a>
47
  </td>
48
  </tr>
49
- </table>
50
 
51
  <table width="49%" align="left" class="hero-table hero-table-right" border="0" cellspacing="0" cellpadding="0">
52
  <tr>
@@ -66,4 +62,4 @@
66
  </tr>
67
  </table>
68
 
69
- </div>
1
  <style>
2
  /* Styles which will be removed and injected in the replacing the matching "inline-class" attribute */
3
  .title {
4
+ font-size: <?php echo $title_font_size ?>px;
5
+ color: <?php echo $title_font_color ?>;
6
+ padding-top: 0;
7
  font-family: <?php echo $title_font_family ?>;
8
+ font-weight: <?php echo $title_font_weight ?>;
9
  line-height: normal;
10
  margin: 0;
11
  text-align: center;
12
  }
13
  .text {
14
+ padding: 20px 0 0 0;
15
+ font-size: <?php echo $font_size ?>px;
16
+ line-height: 150%;
17
+ color: <?php echo $font_color ?>;
18
+ font-family: <?php echo $font_family ?>;
19
+ font-weight: <?php echo $font_weight ?>;
20
  text-align: center;
21
  margin: 0;
22
  }
29
  }
30
  .button {
31
  padding-top: 15px;
32
+ }
33
  </style>
34
 
35
  <!-- layout: right -->
39
  <table width="50%" align="right" class="hero-table" border="0" cellspacing="0" cellpadding="0">
40
  <tr>
41
  <td align="center" valign="top" dir="ltr">
42
+ <?php echo TNP_Composer::image( $media, [ 'class' => 'image', 'link-class' => 'image-a' ] ); ?>
 
 
 
 
43
  </td>
44
  </tr>
45
+ </table>
46
 
47
  <table width="49%" align="left" class="hero-table hero-table-right" border="0" cellspacing="0" cellpadding="0">
48
  <tr>
62
  </tr>
63
  </table>
64
 
65
+ </div>
emails/blocks/hero/block.php CHANGED
@@ -29,7 +29,6 @@ $defaults = array(
29
  'button_font_weight' => 'bold',
30
  'button_font_size' => 20,
31
  'button_background' => '#256F9C',
32
- 'layout' => 'full',
33
  'block_padding_top' => 30,
34
  'block_padding_bottom' => 30,
35
  'block_padding_left' => 15,
@@ -63,7 +62,6 @@ if ($layout == 'full') {
63
  } else {
64
  $options = array_merge(array('block_padding_left' => 15, 'block_padding_right' => 15), $options);
65
  }
66
- $url = $options['button_url'];
67
 
68
  $font_family = $options['font_family'];
69
  $font_size = $options['font_size'];
@@ -79,13 +77,13 @@ $layout = $options['layout'];
79
 
80
  if (!empty($options['image']['id'])) {
81
  if ($layout == 'full') {
82
- $media = tnp_resize($options['image']['id'], array(600, 0));
83
  if ($media) {
84
  $media->set_width(600 - $options['block_padding_left'] - $options['block_padding_right']);
85
  }
86
  } else {
87
-
88
- $media = tnp_resize($options['image']['id'], array(600, 0));
89
  if ($media) {
90
  $media->set_width(300 - $options['block_padding_left']);
91
  }
29
  'button_font_weight' => 'bold',
30
  'button_font_size' => 20,
31
  'button_background' => '#256F9C',
 
32
  'block_padding_top' => 30,
33
  'block_padding_bottom' => 30,
34
  'block_padding_left' => 15,
62
  } else {
63
  $options = array_merge(array('block_padding_left' => 15, 'block_padding_right' => 15), $options);
64
  }
 
65
 
66
  $font_family = $options['font_family'];
67
  $font_size = $options['font_size'];
77
 
78
  if (!empty($options['image']['id'])) {
79
  if ($layout == 'full') {
80
+ $media = tnp_resize_2x($options['image']['id'], array(600, 0));
81
  if ($media) {
82
  $media->set_width(600 - $options['block_padding_left'] - $options['block_padding_right']);
83
  }
84
  } else {
85
+
86
+ $media = tnp_resize_2x($options['image']['id'], array(300, 0));
87
  if ($media) {
88
  $media->set_width(300 - $options['block_padding_left']);
89
  }
emails/blocks/image/block.php CHANGED
@@ -30,12 +30,12 @@ if (empty($options['image']['id'])) {
30
  $media->width = 600;
31
  $media->height = 250;
32
  } else {
33
- $media->url = 'https://source.unsplash.com/600x250/daily';
34
  $media->width = 600;
35
  $media->height = 250;
36
  }
37
  } else {
38
- $media = tnp_resize($options['image']['id'], array(600, 0));
39
  // Should never happen but... it happens
40
  if (!$media) {
41
  echo 'The selected media file cannot be processed';
@@ -47,20 +47,18 @@ if (empty($options['image']['id'])) {
47
  if (!empty($options['width'])) {
48
  $media->set_width($options['width']);
49
  }
50
- $url = $options['url'];
 
51
  ?>
52
  <style>
53
- .image {
54
- max-width: 100%!important;
55
- height: auto!important;
56
  display: block;
57
  width: <?php echo $media->width ?>px;
58
  line-height: 0;
59
  margin: 0 auto;
60
  }
61
  </style>
62
- <?php if (!empty($url)) { ?>
63
- <a href="<?php echo $url ?>" target="_blank"><img src="<?php echo $media->url ?>" width="<?php echo $media->width ?>" height="<?php echo $media->height ?>" border="0" alt="<?php echo esc_attr($media->alt) ?>" inline-class="image"></a>
64
- <?php } else { ?>
65
- <img src="<?php echo $media->url ?>" border="0" alt="<?php echo esc_attr($media->alt) ?>" width="<?php echo $media->width ?>" height="<?php echo $media->height ?>" inline-class="image">
66
- <?php } ?>
30
  $media->width = 600;
31
  $media->height = 250;
32
  } else {
33
+ $media->url = 'https://source.unsplash.com/1200x500/daily';
34
  $media->width = 600;
35
  $media->height = 250;
36
  }
37
  } else {
38
+ $media = tnp_resize_2x($options['image']['id'], array(600, 0));
39
  // Should never happen but... it happens
40
  if (!$media) {
41
  echo 'The selected media file cannot be processed';
47
  if (!empty($options['width'])) {
48
  $media->set_width($options['width']);
49
  }
50
+ $media->link = $options['url'];
51
+ $image_class_name = 'image';
52
  ?>
53
  <style>
54
+ .<?php echo $image_class_name ?> {
55
+ max-width: 100% !important;
56
+ height: auto !important;
57
  display: block;
58
  width: <?php echo $media->width ?>px;
59
  line-height: 0;
60
  margin: 0 auto;
61
  }
62
  </style>
63
+
64
+ <?php echo TNP_Composer::image( $media, [ 'class' => $image_class_name ] ); ?>
 
 
 
emails/emails.php CHANGED
@@ -346,7 +346,8 @@ class NewsletterEmails extends NewsletterModule {
346
  'block_padding_bottom' => 0,
347
  'block_padding_right' => 0,
348
  'block_padding_left' => 0,
349
- 'block_background' => '#ffffff'
 
350
  );
351
 
352
  $options = array_merge($common_defaults, $options);
@@ -502,14 +503,26 @@ class NewsletterEmails extends NewsletterModule {
502
  return $editor_type;
503
  }
504
 
 
 
 
 
 
 
 
 
505
  function hook_newsletter_action($action, $user, $email) {
506
  global $wpdb;
507
 
508
  switch ($action) {
509
  case 'v':
510
  case 'view':
511
- $email = $this->get_email($_GET['id']);
512
-
 
 
 
 
513
  if (empty($email)) {
514
  header("HTTP/1.0 404 Not Found");
515
  die('Email not found');
346
  'block_padding_bottom' => 0,
347
  'block_padding_right' => 0,
348
  'block_padding_left' => 0,
349
+ 'block_background' => '#ffffff',
350
+ 'block_background_2' => ''
351
  );
352
 
353
  $options = array_merge($common_defaults, $options);
503
  return $editor_type;
504
  }
505
 
506
+ /**
507
+ *
508
+ * @global wpdb $wpdb
509
+ * @param type $action
510
+ * @param type $user
511
+ * @param type $email
512
+ * @return type
513
+ */
514
  function hook_newsletter_action($action, $user, $email) {
515
  global $wpdb;
516
 
517
  switch ($action) {
518
  case 'v':
519
  case 'view':
520
+ $id = $_GET['id'];
521
+ if ($id == 'last') {
522
+ $email = $wpdb->get_row("select * from " . NEWSLETTER_EMAILS_TABLE . " where private=0 and type='message' and status='sent' order by send_on desc limit 1");
523
+ } else {
524
+ $email = $this->get_email($_GET['id']);
525
+ }
526
  if (empty($email)) {
527
  header("HTTP/1.0 404 Not Found");
528
  die('Email not found');
emails/tnp-composer/_scripts/newsletter-builder-v2.js CHANGED
@@ -45,8 +45,6 @@ jQuery.fn.perform_block_edit = function () {
45
  jQuery("#tnpc-edit-block .bgcolor").val(target.css("background-color"));
46
  jQuery("#tnpc-edit-block .font").val(target.css("font-family"));
47
 
48
- jQuery('.bgcolor').wpColorPicker().iris('color', target.css("background-color"));
49
-
50
  // The row container which is a global variable and used later after the options save
51
  container = jQuery(this).closest("table");
52
 
@@ -66,6 +64,7 @@ jQuery.fn.perform_block_edit = function () {
66
  options: options
67
  }, function () {
68
  start_options = jQuery("#tnpc-block-options-form").serialize();
 
69
  });
70
 
71
  } else {
@@ -134,12 +133,21 @@ jQuery(function () {
134
  // subject management
135
  jQuery('#options-title').val(jQuery('#tnpc-form input[name="options[subject]"]').val());
136
 
137
- // Add event to update composer wrapper background color
 
 
 
 
138
  jQuery('#options-options_composer_background').on('change', function (e) {
139
- jQuery('#newsletter-builder-area-center-frame-content').css('background-color', e.target.value);
140
  });
141
 
142
- jQuery('#newsletter-builder-area-center-frame-content').css('background-color', jQuery('#options-options_composer_background').val());
 
 
 
 
 
143
 
144
  });
145
 
@@ -168,7 +176,7 @@ function start_composer() {
168
  '_wpnonce': tnp_nonce
169
  };
170
  jQuery.post(ajaxurl, data, function (response) {
171
-
172
  new_row = jQuery(response);
173
  // ui.item.before(new_row);
174
  // ui.item.remove();
@@ -261,7 +269,6 @@ function start_composer() {
261
  });
262
 
263
 
264
-
265
  });
266
 
267
  jQuery(".tnpc-row").add_delete();
45
  jQuery("#tnpc-edit-block .bgcolor").val(target.css("background-color"));
46
  jQuery("#tnpc-edit-block .font").val(target.css("font-family"));
47
 
 
 
48
  // The row container which is a global variable and used later after the options save
49
  container = jQuery(this).closest("table");
50
 
64
  options: options
65
  }, function () {
66
  start_options = jQuery("#tnpc-block-options-form").serialize();
67
+ tnp_controls_init();
68
  });
69
 
70
  } else {
133
  // subject management
134
  jQuery('#options-title').val(jQuery('#tnpc-form input[name="options[subject]"]').val());
135
 
136
+ // ======================== //
137
+ // == BACKGROUND COLOR == //
138
+ // ======================== //
139
+ _setBuilderAreaBackgroundColor(document.getElementById('options-options_composer_background').value);
140
+
141
  jQuery('#options-options_composer_background').on('change', function (e) {
142
+ _setBuilderAreaBackgroundColor(e.target.value);
143
  });
144
 
145
+ function _setBuilderAreaBackgroundColor(color) {
146
+ jQuery('#newsletter-builder-area-center-frame-content').css('background-color', color);
147
+ }
148
+ // ======================== //
149
+ // == BACKGROUND COLOR == //
150
+ // ======================== //
151
 
152
  });
153
 
176
  '_wpnonce': tnp_nonce
177
  };
178
  jQuery.post(ajaxurl, data, function (response) {
179
+
180
  new_row = jQuery(response);
181
  // ui.item.before(new_row);
182
  // ui.item.remove();
269
  });
270
 
271
 
 
272
  });
273
 
274
  jQuery(".tnpc-row").add_delete();
emails/tnp-composer/_scripts/newsletter-builder-v2.min.js CHANGED
@@ -1,10 +1,10 @@
1
  jQuery.fn.add_delete=function(){this.append('<div class="tnpc-row-delete" title="Delete"><img src="'+TNP_PLUGIN_URL+'/emails/tnp-composer/_assets/delete.png" width="32"></div>');this.find(".tnpc-row-delete").perform_delete()};jQuery.fn.perform_delete=function(){this.click(function(){jQuery("#tnpc-block-options").hide();jQuery(this).parent().remove();tnpc_mobile_preview()})};
2
  jQuery.fn.add_block_edit=function(){this.append('<div class="tnpc-row-edit-block" title="Edit"><img src="'+TNP_PLUGIN_URL+'/emails/tnp-composer/_assets/edit.png" width="32"></div>');this.find(".tnpc-row-edit-block").perform_block_edit()};jQuery.fn.add_block_clone=function(){this.append('<div class="tnpc-row-clone" title="Clone"><img src="'+TNP_PLUGIN_URL+'/emails/tnp-composer/_assets/copy.png" width="32"></div>');this.find(".tnpc-row-clone").perform_clone()};let start_options=null,container=null;
3
  jQuery.fn.perform_block_edit=function(){jQuery(".tnpc-row-edit-block").click(function(a){a.preventDefault()});this.click(function(a){a.preventDefault();target=jQuery(this).parent().find(".edit-block");jQuery("#tnpc-edit-block .bgcolor").val(target.css("background-color"));jQuery("#tnpc-edit-block .font").val(target.css("font-family"));jQuery(".bgcolor").wpColorPicker().iris("color",target.css("background-color"));container=jQuery(this).closest("table");container.hasClass("tnpc-row-block")?(jQuery("#tnpc-block-options").fadeIn(500),
4
- (a=container.find(".tnpc-block-content").attr("data-json"))||(a=target.attr("data-options")),jQuery("#tnpc-block-options-form").load(ajaxurl,{action:"tnpc_options",id:container.data("id"),context_type:tnp_context_type,options:a},function(){start_options=jQuery("#tnpc-block-options-form").serialize()})):alert("This is deprecated block version and cannot be edited. Please replace it with a new one.")})};
5
  jQuery.fn.perform_clone=function(){jQuery(".tnpc-row-clone").click(function(a){a.preventDefault()});this.click(function(a){a.preventDefault();jQuery("#tnpc-block-options").hide();a=jQuery(this).closest(".tnpc-row");let b=a.clone();b.find(".tnpc-row-delete").remove();b.find(".tnpc-row-edit-block").remove();b.find(".tnpc-row-clone").remove();b.add_delete();b.add_block_edit();b.add_block_clone();b.insertAfter(a);tnpc_mobile_preview()})};
6
- jQuery(function(){jQuery("body").addClass("folded");document.getElementById("defaultOpen").click();var a=jQuery('input[name="message"]').val();a||(a=jQuery('input[name="options[message]"]').val());a?(jQuery("#newsletter-builder-area-center-frame-content").html(a),start_composer()):tnpc_show_presets();jQuery("#options-title").val(jQuery('#tnpc-form input[name="options[subject]"]').val());jQuery("#options-options_composer_background").on("change",function(a){jQuery("#newsletter-builder-area-center-frame-content").css("background-color",
7
- a.target.value)});jQuery("#newsletter-builder-area-center-frame-content").css("background-color",jQuery("#options-options_composer_background").val())});
8
  function start_composer(){jQuery("#newsletter-builder-area-center-frame-content").sortable({revert:!1,placeholder:"placeholder",forcePlaceholderSize:!0,opacity:.6,tolerance:"pointer",helper:function(a){return jQuery(document.getElementById("sortable-helper")).clone()},update:function(a,b){"draggable-helper"==b.item.attr("id")?(loading_row=jQuery('<div style="text-align: center; padding: 20px; background-color: #d4d5d6; color: #52BE7F;"><i class="fa fa-cog fa-2x fa-spin" /></div>'),b.item.before(loading_row),
9
  b.item.remove(),a={action:"tnpc_render",b:b.item.data("id"),full:1,_wpnonce:tnp_nonce},jQuery.post(ajaxurl,a,function(a){new_row=jQuery(a);loading_row.before(new_row);loading_row.remove();new_row.add_delete();new_row.add_block_edit();new_row.add_block_clone();new_row.hasClass("tnpc-row-block")&&new_row.find(".tnpc-row-edit-block").click();tnpc_mobile_preview()}).fail(function(){alert("Block rendering failed.");loading_row.remove()})):tnpc_mobile_preview()}});jQuery(".newsletter-sidebar-buttons-content-tab").draggable({connectToSortable:"#newsletter-builder-area-center-frame-content",
10
  helper:function(a){var b=jQuery(document.getElementById("draggable-helper")).clone();b.attr("data-id",a.currentTarget.dataset.id);b.html(a.currentTarget.dataset.name);return b},revert:!1,start:function(){jQuery(".tnpc-row").length||jQuery("#newsletter-builder-area-center-frame-content").append('<div class="tnpc-drop-here">Drag&Drop blocks here!</div>')},stop:function(a,b){jQuery(".tnpc-drop-here").remove()}});jQuery("#tnpc-block-options-cancel").click(function(){jQuery(this).parent().parent().fadeOut(500);
1
  jQuery.fn.add_delete=function(){this.append('<div class="tnpc-row-delete" title="Delete"><img src="'+TNP_PLUGIN_URL+'/emails/tnp-composer/_assets/delete.png" width="32"></div>');this.find(".tnpc-row-delete").perform_delete()};jQuery.fn.perform_delete=function(){this.click(function(){jQuery("#tnpc-block-options").hide();jQuery(this).parent().remove();tnpc_mobile_preview()})};
2
  jQuery.fn.add_block_edit=function(){this.append('<div class="tnpc-row-edit-block" title="Edit"><img src="'+TNP_PLUGIN_URL+'/emails/tnp-composer/_assets/edit.png" width="32"></div>');this.find(".tnpc-row-edit-block").perform_block_edit()};jQuery.fn.add_block_clone=function(){this.append('<div class="tnpc-row-clone" title="Clone"><img src="'+TNP_PLUGIN_URL+'/emails/tnp-composer/_assets/copy.png" width="32"></div>');this.find(".tnpc-row-clone").perform_clone()};let start_options=null,container=null;
3
  jQuery.fn.perform_block_edit=function(){jQuery(".tnpc-row-edit-block").click(function(a){a.preventDefault()});this.click(function(a){a.preventDefault();target=jQuery(this).parent().find(".edit-block");jQuery("#tnpc-edit-block .bgcolor").val(target.css("background-color"));jQuery("#tnpc-edit-block .font").val(target.css("font-family"));jQuery(".bgcolor").wpColorPicker().iris("color",target.css("background-color"));container=jQuery(this).closest("table");container.hasClass("tnpc-row-block")?(jQuery("#tnpc-block-options").fadeIn(500),
4
+ (a=container.find(".tnpc-block-content").attr("data-json"))||(a=target.attr("data-options")),jQuery("#tnpc-block-options-form").load(ajaxurl,{action:"tnpc_options",id:container.data("id"),context_type:tnp_context_type,options:a},function(){start_options=jQuery("#tnpc-block-options-form").serialize();tnp_controls_init()})):alert("This is deprecated block version and cannot be edited. Please replace it with a new one.")})};
5
  jQuery.fn.perform_clone=function(){jQuery(".tnpc-row-clone").click(function(a){a.preventDefault()});this.click(function(a){a.preventDefault();jQuery("#tnpc-block-options").hide();a=jQuery(this).closest(".tnpc-row");let b=a.clone();b.find(".tnpc-row-delete").remove();b.find(".tnpc-row-edit-block").remove();b.find(".tnpc-row-clone").remove();b.add_delete();b.add_block_edit();b.add_block_clone();b.insertAfter(a);tnpc_mobile_preview()})};
6
+ jQuery(function(){function a(a){jQuery("#newsletter-builder-area-center-frame-content").css("background-color",a)}jQuery("body").addClass("folded");document.getElementById("defaultOpen").click();var b=jQuery('input[name="message"]').val();b||(b=jQuery('input[name="options[message]"]').val());b?(jQuery("#newsletter-builder-area-center-frame-content").html(b),start_composer()):tnpc_show_presets();jQuery("#options-title").val(jQuery('#tnpc-form input[name="options[subject]"]').val());a(document.getElementById("options-options_composer_background").value);
7
+ jQuery("#options-options_composer_background").on("change",function(b){a(b.target.value)})});
8
  function start_composer(){jQuery("#newsletter-builder-area-center-frame-content").sortable({revert:!1,placeholder:"placeholder",forcePlaceholderSize:!0,opacity:.6,tolerance:"pointer",helper:function(a){return jQuery(document.getElementById("sortable-helper")).clone()},update:function(a,b){"draggable-helper"==b.item.attr("id")?(loading_row=jQuery('<div style="text-align: center; padding: 20px; background-color: #d4d5d6; color: #52BE7F;"><i class="fa fa-cog fa-2x fa-spin" /></div>'),b.item.before(loading_row),
9
  b.item.remove(),a={action:"tnpc_render",b:b.item.data("id"),full:1,_wpnonce:tnp_nonce},jQuery.post(ajaxurl,a,function(a){new_row=jQuery(a);loading_row.before(new_row);loading_row.remove();new_row.add_delete();new_row.add_block_edit();new_row.add_block_clone();new_row.hasClass("tnpc-row-block")&&new_row.find(".tnpc-row-edit-block").click();tnpc_mobile_preview()}).fail(function(){alert("Block rendering failed.");loading_row.remove()})):tnpc_mobile_preview()}});jQuery(".newsletter-sidebar-buttons-content-tab").draggable({connectToSortable:"#newsletter-builder-area-center-frame-content",
10
  helper:function(a){var b=jQuery(document.getElementById("draggable-helper")).clone();b.attr("data-id",a.currentTarget.dataset.id);b.html(a.currentTarget.dataset.name);return b},revert:!1,start:function(){jQuery(".tnpc-row").length||jQuery("#newsletter-builder-area-center-frame-content").append('<div class="tnpc-drop-here">Drag&Drop blocks here!</div>')},stop:function(a,b){jQuery(".tnpc-drop-here").remove()}});jQuery("#tnpc-block-options-cancel").click(function(){jQuery(this).parent().parent().fadeOut(500);
emails/tnp-composer/_scripts/newsletter-builder.js CHANGED
@@ -45,7 +45,7 @@ jQuery.fn.perform_block_edit = function () {
45
  jQuery("#tnpc-edit-block .bgcolor").val(target.css("background-color"));
46
  jQuery("#tnpc-edit-block .font").val(target.css("font-family"));
47
 
48
- jQuery('.bgcolor').wpColorPicker().iris('color', target.css("background-color"));
49
 
50
  // The row container which is a global variable and used later after the options save
51
  container = jQuery(this).closest("table");
@@ -250,8 +250,8 @@ function start_composer() {
250
  }).fail(function () {
251
  alert("Block rendering failed");
252
  });
253
-
254
-
255
 
256
  });
257
 
45
  jQuery("#tnpc-edit-block .bgcolor").val(target.css("background-color"));
46
  jQuery("#tnpc-edit-block .font").val(target.css("font-family"));
47
 
48
+ //jQuery('.bgcolor').wpColorPicker().iris('color', target.css("background-color"));
49
 
50
  // The row container which is a global variable and used later after the options save
51
  container = jQuery(this).closest("table");
250
  }).fail(function () {
251
  alert("Block rendering failed");
252
  });
253
+
254
+
255
 
256
  });
257
 
emails/tnp-composer/css/newsletter.css CHANGED
@@ -91,6 +91,11 @@ img.aligncenter{display:block;margin:0 auto;}
91
  td[class="mobile-wrapper"]{
92
  padding: 10px 5% 15px 5% !important;
93
  }
 
 
 
 
 
94
 
95
  table[class="mobile-button-container"]{
96
  margin:0 auto;
91
  td[class="mobile-wrapper"]{
92
  padding: 10px 5% 15px 5% !important;
93
  }
94
+
95
+ td[class="responsive"]{
96
+ display: block;
97
+ width: 100% !important;
98
+ }
99
 
100
  table[class="mobile-button-container"]{
101
  margin:0 auto;
emails/tnp-composer/css/newsletter.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #outlook a{padding:0}.ReadMsgBody{width:100%}.ExternalClass{width:100%}.ExternalClass,.ExternalClass p,.ExternalClass span,.ExternalClass font,.ExternalClass td,.ExternalClass div{line-height:100%}body,table,td,a{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}table,td{mso-table-lspace:0;mso-table-rspace:0}img{-ms-interpolation-mode:bicubic}body{margin:0;padding:0;height:100%!important;margin:0;padding:0;width:100%!important}img{border:0;height:auto;line-height:100%;outline:0;text-decoration:none;max-width:100%!important}table{border-collapse:collapse!important}img.aligncenter{display:block;margin:0 auto}@media all and (max-width:525px){table[class="wrapper"]{width:100%!important}table[class="mobile-full-width"]{width:100%!important}img[class="mobile-full-width"]{width:100%!important;display:block}td[class="logo"]{text-align:left;padding:20px 0 20px 0!important}td[class="logo"] img{margin:0 auto!important}td[class="mobile-hide"]{display:none}img[class="mobile-hide"]{display:none!important}img[class="img-max"]{max-width:100%!important;height:auto!important}table[class="responsive-table"]{width:100%!important;max-width:100%!important}td[class="padding"]{padding:10px 5% 15px 5%!important}td[class="padding-copy"]{padding:10px 5% 10px 5%!important;text-align:center}td[class="padding-meta"]{padding:30px 5% 0 5%!important;text-align:center}td[class="no-pad"]{padding:0 0 20px 0!important}td[class="no-padding"]{padding:0!important}td[class="section-padding"]{padding:50px 15px 50px 15px!important}td[class="section-padding-bottom-image"]{padding:50px 15px 0 15px!important}td[class="mobile-wrapper"]{padding:10px 5% 15px 5%!important}td[class="responsive"]{display:block;width:100%!important}table[class="mobile-button-container"]{margin:0 auto;width:100%!important}a[class="mobile-button"]{width:80%!important;padding:15px!important;border:0!important;font-size:16px!important}}
emails/tnp-composer/index-v2.php CHANGED
@@ -91,7 +91,7 @@ $fields = new NewsletterFields($controls);
91
 
92
  <form id="tnpc-global-styles-form">
93
 
94
- <?php $fields->color( 'options_composer_background', __( 'Background color', 'newsletter' ), [ 'default' => '#f4f4f4' ] ) ?>
95
  <?php $fields->text( 'options_preheader', __( 'Snippet', 'newsletter' ), ['description'=>'Short content preview shown by Gmail']) ?>
96
 
97
  </form>
91
 
92
  <form id="tnpc-global-styles-form">
93
 
94
+ <?php $fields->color( 'options_composer_background', __( 'Background color', 'newsletter' ), [ 'default' => '#FFFFFF' ] ) ?>
95
  <?php $fields->text( 'options_preheader', __( 'Snippet', 'newsletter' ), ['description'=>'Short content preview shown by Gmail']) ?>
96
 
97
  </form>
includes/composer.php CHANGED
@@ -120,8 +120,8 @@ class TNP_Composer {
120
  * @return string
121
  */
122
  static function get_main_wrapper_open($email) {
123
- if (!isset($email->options['composer_background'])) {
124
- $bgcolor = '#ffffff';
125
  } else {
126
  $bgcolor = $email->options['composer_background'];
127
  }
@@ -272,7 +272,7 @@ class TNP_Composer {
272
 
273
  /**
274
  * Creates the HTML for a button extrating from the options, with the provided prefix, the button attributes:
275
- *
276
  * - [prefix]_url The button URL
277
  * - [prefix]_font_family
278
  * - [prefix]_font_size
@@ -280,9 +280,9 @@ class TNP_Composer {
280
  * - [prefix]_label
281
  * - [prefix]_font_color The label color
282
  * - [prefix]_background The button color
283
- *
284
  * TODO: Add radius and possiblt the alignment
285
- *
286
  * @param array $options
287
  * @param string $prefix
288
  * @return string
@@ -316,18 +316,47 @@ class TNP_Composer {
316
  * Generates an IMG tag, linked if the media has an URL.
317
  *
318
  * @param TNP_Media $media
 
319
  * @return string
320
  */
321
- static function image($media) {
322
- $b = '';
323
- if ($media->link) {
324
- $b .= '<a href="' . $media->link . '" target="_blank" style="text-decoration: none">';
325
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
 
327
- $b .= '<img src="' . $media->url . '" width="' . $media->width . '"'
328
- . ' height="' . $media->height . '"'
329
- . ' alt="' . esc_attr($media->alt) . '"'
330
- . ' border="0" style="max-width: 100%; height: auto;" class="image">';
 
 
 
 
 
 
 
331
 
332
  if ($media->link) {
333
  $b .= '</a>';
120
  * @return string
121
  */
122
  static function get_main_wrapper_open($email) {
123
+ if (!isset($email->options['composer_background']) || $email->options['composer_background'] == 'inherit') {
124
+ $bgcolor = '';
125
  } else {
126
  $bgcolor = $email->options['composer_background'];
127
  }
272
 
273
  /**
274
  * Creates the HTML for a button extrating from the options, with the provided prefix, the button attributes:
275
+ *
276
  * - [prefix]_url The button URL
277
  * - [prefix]_font_family
278
  * - [prefix]_font_size
280
  * - [prefix]_label
281
  * - [prefix]_font_color The label color
282
  * - [prefix]_background The button color
283
+ *
284
  * TODO: Add radius and possiblt the alignment
285
+ *
286
  * @param array $options
287
  * @param string $prefix
288
  * @return string
316
  * Generates an IMG tag, linked if the media has an URL.
317
  *
318
  * @param TNP_Media $media
319
+ * @param string $style
320
  * @return string
321
  */
322
+ static function image($media, $attr = []) {
323
+
324
+ $default_attrs = [
325
+ 'style' => 'max-width: 100%; height: auto;',
326
+ 'class' => null,
327
+ 'link-style' => 'text-decoration: none;',
328
+ 'link-class' => null,
329
+ ];
330
+
331
+ $attr = array_merge($default_attrs, $attr);
332
+
333
+ //Class and style attribute are mutually exclusive.
334
+ //Class take priority to style because classes will transform to inline style inside block rendering operation
335
+ if ( ! empty( $attr['class'] ) ) {
336
+ $styling = ' inline-class="' . $attr['class'] . '" ';
337
+ } else {
338
+ $styling = ' style="' . $attr['style'] . '" ';
339
+ }
340
+
341
+ //Class and style attribute are mutually exclusive.
342
+ //Class take priority to style because classes will transform to inline style inside block rendering operation
343
+ if ( ! empty( $attr['link-class'] ) ) {
344
+ $link_styling = ' inline-class="' . $attr['link-class'] . '" ';
345
+ } else {
346
+ $link_styling = ' style="' . $attr['link-style'] . '" ';
347
+ }
348
 
349
+ $b = '';
350
+ if ( $media->link ) {
351
+ $b .= '<a href="' . $media->link . '" target="_blank" rel="noopener nofollow" ' . $link_styling . '>';
352
+ }
353
+
354
+ if ( $media ) {
355
+ $b .= '<img src="' . $media->url . '" width="' . $media->width . '"'
356
+ . ' height="' . $media->height . '"'
357
+ . ' alt="' . esc_attr( $media->alt ) . '"'
358
+ . ' border="0" ' . $styling . '>';
359
+ }
360
 
361
  if ($media->link) {
362
  $b .= '</a>';
includes/controls.php CHANGED
@@ -447,7 +447,7 @@ class NewsletterControls {
447
  function yesno($name) {
448
  $value = isset($this->data[$name]) ? (int) $this->data[$name] : 0;
449
 
450
- echo '<select style="width: 60px" name="options[' . esc_attr($name) . ']">';
451
  echo '<option value="0"';
452
  if ($value == 0) {
453
  echo ' selected';
@@ -463,8 +463,9 @@ class NewsletterControls {
463
 
464
  function enabled($name = 'enabled', $attrs = []) {
465
  $value = isset($this->data[$name]) ? (int) $this->data[$name] : 0;
 
466
 
467
- echo '<select style="width: 100px" name="options[', esc_attr($name), ']" id="options-', esc_attr($name), '"';
468
  if (isset($attrs['bind_to'])) {
469
  echo ' onchange="tnp_select_toggle(this, \'', $attrs['bind_to'], '\')"';
470
  }
@@ -708,8 +709,8 @@ class NewsletterControls {
708
 
709
  function select_grouped($name, $groups) {
710
  $value = $this->get_value($name);
711
-
712
- echo '<select name="options[' . $name . ']">';
713
 
714
  foreach ($groups as $group) {
715
  echo '<optgroup label="' . esc_attr($group['']) . '">';
@@ -776,18 +777,20 @@ class NewsletterControls {
776
 
777
  function password($name, $size = 20, $placeholder = '') {
778
  $value = $this->get_value($name);
779
- echo '<input id="options-', esc_attr($name), '" placeholder="' . esc_attr($placeholder) . '" name="options[' . $name . ']" type="password" autocomplete="off" ';
 
780
  if (!empty($size)) {
781
- echo 'size="' . $size . '" ';
782
  }
783
  echo 'value="', esc_attr($value), '">';
784
  }
785
 
786
  function text($name, $size = 20, $placeholder = '') {
787
  $value = $this->get_value($name);
788
- echo '<input id="options-', esc_attr($name), '" placeholder="' . esc_attr($placeholder) . '" name="options[' . $name . ']" type="text" ';
 
789
  if (!empty($size)) {
790
- echo 'size="' . $size . '" ';
791
  }
792
  echo 'value="', esc_attr($value), '">';
793
  }
@@ -854,9 +857,7 @@ class NewsletterControls {
854
  }
855
 
856
  function button_back($url, $label = null) {
857
- echo '<a href="';
858
- echo esc_attr($url);
859
- echo '" class="button-primary"><i class="fas fa-chevron-left"></i>';
860
  if (is_null($label)) {
861
  echo '&nbsp;';
862
  _e('Back', 'newsletter');
@@ -978,25 +979,26 @@ class NewsletterControls {
978
 
979
  function textarea_fixed($name, $width = '100%', $height = '200') {
980
  $value = $this->get_value($name);
981
- echo '<textarea id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']" wrap="off" style="width:' . esc_attr($width) . ';height:' . esc_attr($height) . 'px">';
 
982
  echo esc_html($value);
983
  echo '</textarea>';
984
  }
985
 
986
  function textarea_preview($name, $width = '100%', $height = '200', $header = '', $footer = '', $switch_button = true) {
987
  $value = $this->get_value($name);
988
- //do_action('newsletter_controls_textarea_preview', $name);
989
  if ($switch_button) {
990
- echo '<input class="button-primary" type="button" onclick="newsletter_textarea_preview(\'options-' . esc_attr($name) . '\', \'\', \'\')" value="Switch editor/preview">';
991
  echo '<br><br>';
992
  }
993
  echo '<div style="box-sizing: border-box; position: relative; margin: 0; padding: 0; width:' . esc_attr($width) . '; height:' . esc_attr($height) . '">';
994
- echo '<textarea id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']" wrap="off" style="width:' . esc_attr($width) . ';height:' . esc_attr($height) . 'px">';
995
  echo esc_html($value);
996
  echo '</textarea>';
997
- echo '<div id="options-' . esc_attr($name) . '-preview" style="box-sizing: border-box; background-color: #eee; border: 1px solid #bbb; padding: 15px; width: auto; position: absolute; top: 20px; left: 20px; box-shadow: 0 0 20px #777; z-index: 10000; display: none">';
998
- echo '<iframe id="options-' . esc_attr($name) . '-iframe" class="tnp-editor-preview-desktop"></iframe>';
999
- echo '<iframe id="options-' . esc_attr($name) . '-iframe-phone" class="tnp-editor-preview-mobile"></iframe>';
1000
  echo '</div>';
1001
  echo '</div>';
1002
  }
@@ -1092,14 +1094,9 @@ class NewsletterControls {
1092
  }
1093
 
1094
  function color($name, $default = '') {
1095
-
1096
- $value = $this->get_value($name);
1097
- if (empty($value) && $default) $value = $default;
1098
-
1099
- //echo '<input id="options-', esc_attr($name), '" class="tnp-controls-color" name="options[' . $name . ']" type="text" value="';
1100
- echo '<input id="options-', esc_attr($name), '" name="options[' . $name . ']" type="color" value="';
1101
- echo esc_attr($value);
1102
- echo '">';
1103
  }
1104
 
1105
  /** Creates a set of checkbox named $name_[category id] (so they are posted with distinct names).
@@ -1407,6 +1404,8 @@ class NewsletterControls {
1407
  }
1408
  echo '<script type="text/javascript">
1409
  jQuery(document).ready(function(){
 
 
1410
 
1411
  jQuery("textarea.dynamic").focus(function() {
1412
  jQuery("textarea.dynamic").css("height", "50px");
@@ -1482,6 +1481,8 @@ class NewsletterControls {
1482
  var $state = jQuery("<span class=\"tnp-select2-option\"><img style=\"height: 20px!important; position: relative; top: 5px\" src=\"" + state.element.getAttribute("image") + "\"> " + state.text + "</span>");
1483
  return $state;
1484
  }
 
 
1485
  </script>
1486
  ';
1487
  echo '<input name="act" type="hidden" value=""/>';
@@ -1525,7 +1526,7 @@ class NewsletterControls {
1525
  * @param array $attrs
1526
  */
1527
  function css_font($name = 'font', $attrs = array()) {
1528
- $default = array('color' => true, 'weight' => true);
1529
  $attrs = array_merge($default, $attrs);
1530
  $this->css_font_family($name . '_family');
1531
  $this->css_font_size($name . '_size');
@@ -1540,7 +1541,7 @@ class NewsletterControls {
1540
  function css_font_size($name = 'font_size') {
1541
  $value = $this->get_value($name);
1542
 
1543
- echo '<select id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']">';
1544
  for ($i = 8; $i < 50; $i++) {
1545
  echo '<option value="' . $i . '"';
1546
  if ($value == $i) {
@@ -1556,7 +1557,7 @@ class NewsletterControls {
1556
 
1557
  $fonts = array('normal' => 'Normal', 'bold' => 'Bold');
1558
 
1559
- echo '<select id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']">';
1560
  foreach ($fonts as $key => $font) {
1561
  echo '<option value="', esc_attr($key), '"';
1562
  if ($value == $key) {
@@ -1580,7 +1581,7 @@ class NewsletterControls {
1580
  'Times New Roman, Times, serif'=>'Times New Roman',
1581
  'Verdana, Geneva, sans-serif'=>'Verdana, Geneva');
1582
 
1583
- echo '<select id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']">';
1584
  foreach ($fonts as $font=>$label) {
1585
  echo '<option value="', esc_attr($font), '"';
1586
  if ($value == $font) {
447
  function yesno($name) {
448
  $value = isset($this->data[$name]) ? (int) $this->data[$name] : 0;
449
 
450
+ echo '<select style="width: 60px" name="options[', esc_attr($name), ']">';
451
  echo '<option value="0"';
452
  if ($value == 0) {
453
  echo ' selected';
463
 
464
  function enabled($name = 'enabled', $attrs = []) {
465
  $value = isset($this->data[$name]) ? (int) $this->data[$name] : 0;
466
+ $name = esc_attr($name);
467
 
468
+ echo '<select style="width: 100px" name="options[', $name, ']" id="options-', $name, '"';
469
  if (isset($attrs['bind_to'])) {
470
  echo ' onchange="tnp_select_toggle(this, \'', $attrs['bind_to'], '\')"';
471
  }
709
 
710
  function select_grouped($name, $groups) {
711
  $value = $this->get_value($name);
712
+ $name = esc_attr($name);
713
+ echo '<select name="options[', $name, ']">';
714
 
715
  foreach ($groups as $group) {
716
  echo '<optgroup label="' . esc_attr($group['']) . '">';
777
 
778
  function password($name, $size = 20, $placeholder = '') {
779
  $value = $this->get_value($name);
780
+ $name = esc_attr($name);
781
+ echo '<input id="options-', $name, '" placeholder="' . esc_attr($placeholder) . '" name="options[', $name, ']" type="password" autocomplete="off" ';
782
  if (!empty($size)) {
783
+ echo 'size="', $size, '" ';
784
  }
785
  echo 'value="', esc_attr($value), '">';
786
  }
787
 
788
  function text($name, $size = 20, $placeholder = '') {
789
  $value = $this->get_value($name);
790
+ $name = esc_attr($name);
791
+ echo '<input id="options-', $name, '" placeholder="' . esc_attr($placeholder) . '" name="options[', $name, ']" type="text" ';
792
  if (!empty($size)) {
793
+ echo 'size="', esc_attr($size), '" ';
794
  }
795
  echo 'value="', esc_attr($value), '">';
796
  }
857
  }
858
 
859
  function button_back($url, $label = null) {
860
+ echo '<a href="', esc_attr($url), '" class="button-primary"><i class="fas fa-chevron-left"></i>';
 
 
861
  if (is_null($label)) {
862
  echo '&nbsp;';
863
  _e('Back', 'newsletter');
979
 
980
  function textarea_fixed($name, $width = '100%', $height = '200') {
981
  $value = $this->get_value($name);
982
+ $name = esc_attr($name);
983
+ echo '<textarea id="options-', $name, '" name="options[', $name, ']" wrap="off" style="width:', esc_attr($width), ';height:', esc_attr($height), 'px">';
984
  echo esc_html($value);
985
  echo '</textarea>';
986
  }
987
 
988
  function textarea_preview($name, $width = '100%', $height = '200', $header = '', $footer = '', $switch_button = true) {
989
  $value = $this->get_value($name);
990
+ $name = esc_attr($name);
991
  if ($switch_button) {
992
+ echo '<input class="button-primary" type="button" onclick="newsletter_textarea_preview(\'options-', $name, '\', \'\', \'\')" value="Switch editor/preview">';
993
  echo '<br><br>';
994
  }
995
  echo '<div style="box-sizing: border-box; position: relative; margin: 0; padding: 0; width:' . esc_attr($width) . '; height:' . esc_attr($height) . '">';
996
+ echo '<textarea id="options-', $name, '" name="options[', $name, ']" wrap="off" style="width:' . esc_attr($width) . ';height:' . esc_attr($height) . 'px">';
997
  echo esc_html($value);
998
  echo '</textarea>';
999
+ echo '<div id="options-', $name, '-preview" style="box-sizing: border-box; background-color: #eee; border: 1px solid #bbb; padding: 15px; width: auto; position: absolute; top: 20px; left: 20px; box-shadow: 0 0 20px #777; z-index: 10000; display: none">';
1000
+ echo '<iframe id="options-', $name, '-iframe" class="tnp-editor-preview-desktop"></iframe>';
1001
+ echo '<iframe id="options-', $name, '-iframe-phone" class="tnp-editor-preview-mobile"></iframe>';
1002
  echo '</div>';
1003
  echo '</div>';
1004
  }
1094
  }
1095
 
1096
  function color($name, $default = '') {
1097
+ $value = esc_attr($this->get_value($name, $default));
1098
+ $name = esc_attr($name);
1099
+ echo '<input class="tnpf-color" id="options-', $name, '" name="options[', $name, ']" type="text" value="', $value, '">';
 
 
 
 
 
1100
  }
1101
 
1102
  /** Creates a set of checkbox named $name_[category id] (so they are posted with distinct names).
1404
  }
1405
  echo '<script type="text/javascript">
1406
  jQuery(document).ready(function(){
1407
+
1408
+ tnp_controls_init();
1409
 
1410
  jQuery("textarea.dynamic").focus(function() {
1411
  jQuery("textarea.dynamic").css("height", "50px");
1481
  var $state = jQuery("<span class=\"tnp-select2-option\"><img style=\"height: 20px!important; position: relative; top: 5px\" src=\"" + state.element.getAttribute("image") + "\"> " + state.text + "</span>");
1482
  return $state;
1483
  }
1484
+
1485
+
1486
  </script>
1487
  ';
1488
  echo '<input name="act" type="hidden" value=""/>';
1526
  * @param array $attrs
1527
  */
1528
  function css_font($name = 'font', $attrs = array()) {
1529
+ $default = ['color' => true, 'weight' => true];
1530
  $attrs = array_merge($default, $attrs);
1531
  $this->css_font_family($name . '_family');
1532
  $this->css_font_size($name . '_size');
1541
  function css_font_size($name = 'font_size') {
1542
  $value = $this->get_value($name);
1543
 
1544
+ echo '<select class="tnpf-font-size" id="options-', esc_attr($name), '" name="options[', esc_attr($name), ']">';
1545
  for ($i = 8; $i < 50; $i++) {
1546
  echo '<option value="' . $i . '"';
1547
  if ($value == $i) {
1557
 
1558
  $fonts = array('normal' => 'Normal', 'bold' => 'Bold');
1559
 
1560
+ echo '<select class="tnpf-font-weight" id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']">';
1561
  foreach ($fonts as $key => $font) {
1562
  echo '<option value="', esc_attr($key), '"';
1563
  if ($value == $key) {
1581
  'Times New Roman, Times, serif'=>'Times New Roman',
1582
  'Verdana, Geneva, sans-serif'=>'Verdana, Geneva');
1583
 
1584
+ echo '<select class="tnpf-font-family" id="options-', esc_attr($name), '" name="options[', esc_attr($name), ']">';
1585
  foreach ($fonts as $font=>$label) {
1586
  echo '<option value="', esc_attr($font), '"';
1587
  if ($value == $font) {
includes/fields.php CHANGED
@@ -4,6 +4,7 @@ class NewsletterFields {
4
 
5
  static $field_open = '<div>';
6
  static $field_close = '</div>';
 
7
  var $controls;
8
 
9
  public function __construct(NewsletterControls $controls) {
@@ -19,14 +20,17 @@ class NewsletterFields {
19
  }
20
 
21
  public function _label($text, $for = '') {
22
- if (empty($text))
23
  return;
 
24
  echo '<label class="tnp-label">', $text, '</label>';
25
  }
26
 
27
  public function _description($attrs) {
28
- if (empty($attrs['description']))
29
  return;
 
 
30
  echo '<div class="tnp-description">', $attrs['description'], '</div>';
31
  }
32
 
@@ -34,14 +38,35 @@ class NewsletterFields {
34
  return 'options-' . esc_attr($name);
35
  }
36
 
 
 
 
 
 
 
 
 
 
 
37
  public function _merge_base_attrs($attrs) {
38
- return array_merge(array('description' => '', 'label' => '', 'help_url' => ''), $attrs);
39
  }
40
 
41
- public function _merge_attrs($attrs, $defaults = array()) {
42
- return array_merge(array('description' => '', 'label' => '', 'help_url' => ''), $defaults, $attrs);
 
 
 
 
 
 
43
  }
44
 
 
 
 
 
 
45
  public function section($title = '') {
46
  echo '<h3 class="tnp-section">', $title, '</h3>';
47
  }
@@ -50,24 +75,29 @@ class NewsletterFields {
50
  echo '<div class="tnp-field tnp-separator"></div>';
51
  }
52
 
53
- public function checkbox($name, $label = '', $attrs = array()) {
54
  $attrs = $this->_merge_base_attrs($attrs);
55
- $attrs = array_merge(array('description' => '', 'label' => ''), $attrs);
56
  $this->_open('tnp-checkbox');
57
  $this->controls->checkbox($name, $label);
58
  $this->_description($attrs);
59
  $this->_close();
60
  }
61
 
62
- /** General Input field with default type = text */
63
- public function input($name, $label = '', $attrs = array()) {
64
- $attrs = $this->_merge_base_attrs($attrs);
65
- $attrs = array_merge(array('description' => '', 'placeholder' => '', 'size' => 0, 'label_after' => '', 'type' => 'text'), $attrs);
 
 
 
 
 
 
66
  $this->_open();
67
  $this->_label($label);
68
  $value = $this->controls->get_value($name);
69
 
70
- echo '<input id="', $this->_id($name), '" placeholder="', esc_attr($attrs['placeholder']), '" name="options[', $name, ']" type="', $attrs['type'], '"';
71
 
72
  if (!empty($attrs['size'])) {
73
  echo ' style="width: ', $attrs['size'], 'px"';
@@ -83,26 +113,37 @@ class NewsletterFields {
83
 
84
  echo ' value="', esc_attr($value), '">';
85
 
86
- if (!empty($attrs['label_after']))
87
  echo $attrs['label_after'];
88
- //$this->controls->text($name, $attrs['size'], $attrs['placeholder']);
 
89
  $this->_description($attrs);
90
  $this->_close();
91
  }
92
 
93
- public function text($name, $label = '', $attrs = array()) {
94
- $attrs = array_merge(array('type' => 'text'), $attrs);
95
  $this->input($name, $label, $attrs);
96
  }
97
 
98
- public function number($name, $label = '', $attrs = array()) {
99
- $attrs = array_merge(array('type' => 'number'), $attrs);
100
  $this->input($name, $label, $attrs);
101
  }
102
 
103
- public function multitext($name, $label = '', $count = 10, $attrs = array()) {
104
- $attrs = $this->_merge_base_attrs($attrs);
105
- $attrs = array_merge(array('description' => '', 'placeholder' => '', 'size' => 0, 'label_after' => ''), $attrs);
 
 
 
 
 
 
 
 
 
 
106
  $this->_open();
107
  $this->_label($label);
108
 
@@ -114,14 +155,14 @@ class NewsletterFields {
114
  }
115
  echo ' value="', esc_attr($value), '">';
116
  }
117
- if (!empty($attrs['label_after']))
118
  echo $attrs['label_after'];
119
- //$this->controls->text($name, $attrs['size'], $attrs['placeholder']);
120
  $this->_description($attrs);
121
  $this->_close();
122
  }
123
 
124
- public function textarea($name, $label = '', $attrs = array()) {
125
  $attrs = $this->_merge_attrs($attrs);
126
  $this->_open();
127
  $this->_label($label);
@@ -130,20 +171,23 @@ class NewsletterFields {
130
  $this->_close();
131
  }
132
 
133
- public function wp_editor($name, $label = '', $attrs = array()) {
134
  global $wp_version;
135
 
136
  $attrs = $this->_merge_attrs($attrs);
137
  $this->_open();
138
  $this->_label($label);
139
  $value = $this->controls->get_value($name);
 
 
 
140
  if (is_array($value)) {
141
  $value = implode("\n", $value);
142
  }
143
  if (version_compare($wp_version, '4.8', '<')) {
144
  echo '<p><strong>Rich editor available only with WP 4.8+</strong></p>';
145
  }
146
- echo '<textarea id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']" style="width: 100%;height:250px">';
147
  echo esc_html($value);
148
  echo '</textarea>';
149
 
@@ -155,28 +199,30 @@ class NewsletterFields {
155
  $this->_close();
156
  }
157
 
158
- public function select($name, $label = '', $options = array(), $attrs = array()) {
159
  $attrs = $this->_merge_attrs($attrs, ['reload' => false, 'after-rendering' => '']);
160
  $this->_open();
161
  $this->_label($label);
162
  $value = $this->controls->get_value($name);
163
 
164
- echo '<select id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']"';
165
  if ($attrs['reload']) {
166
  echo ' onchange="tnpc_reload_options(event)"';
167
  }
168
  if (!empty($attrs['after-rendering'])) {
169
- echo ' data-after-rendering="' . $attrs['after-rendering'] . '"';
170
  }
171
  echo '>';
172
  if (!empty($first)) {
173
- echo '<option value="">' . esc_html($first) . '</option>';
174
  }
 
175
  foreach ($options as $key => $label) {
176
- echo '<option value="' . esc_attr($key) . '"';
177
- if ($value == $key)
178
  echo ' selected';
179
- echo '>' . esc_html($label) . '</option>';
 
180
  }
181
  echo '</select>';
182
 
@@ -185,7 +231,7 @@ class NewsletterFields {
185
  $this->_close();
186
  }
187
 
188
- public function yesno($name, $label = '', $attrs = array()) {
189
  $attrs = $this->_merge_attrs($attrs);
190
  $this->_open();
191
  $this->_label($label);
@@ -194,7 +240,7 @@ class NewsletterFields {
194
  $this->_close();
195
  }
196
 
197
- public function select_number($name, $label = '', $min, $max, $attrs = array()) {
198
  $attrs = $this->_merge_attrs($attrs);
199
  $this->_open();
200
  $this->_label($label);
@@ -204,51 +250,48 @@ class NewsletterFields {
204
  }
205
 
206
  /** General field to collect a dimension */
207
- public function size($name, $label = '', $attrs = array()) {
208
- $attrs = $this->_merge_base_attrs($attrs);
209
- $attrs = array_merge(array('description' => '', 'placeholder' => '', 'size' => 0, 'label_after' => 'px'), $attrs);
210
  $this->_open('tnp-size');
211
  $this->_label($label);
212
  $value = $this->controls->get_value($name);
213
- echo '<input id="', $this->_id($name), '" placeholder="', esc_attr($attrs['placeholder']), '" name="options[' . $name . ']" type="text"';
214
  if (!empty($attrs['size'])) {
215
  echo ' style="width: ', $attrs['size'], 'px"';
216
  }
217
  echo ' value="', esc_attr($value), '">', $attrs['label_after'];
218
- //$this->controls->text($name, $attrs['size'], $attrs['placeholder']);
219
  $this->_description($attrs);
220
  $this->_close();
221
  }
222
 
223
- /** Collects a color in RGB format (#RRGGBB) with a picker. */
224
- public function color($name, $label, $attrs = array()) {
225
- $attrs = array_merge(array('description' => '', 'placeholder' => '', 'default' => '#000000'), $attrs);
226
  $this->_open('tnp-color');
227
  $this->_label($label);
228
- $this->controls->color($name, $attrs['default']);
229
  $this->_description($attrs);
230
  $this->_close();
231
  }
232
 
233
  /** Configuration for a simple button with label and color */
234
- public function button($name, $label = '', $attrs = array()) {
235
- $attrs = $this->_merge_attrs($attrs, array('placeholder' => 'Label...', 'url_placeholder' => 'https://...', 'url' => true, 'weight' => true));
236
- $this->_open('tnp-cta');
237
  $this->_label($label);
238
  $value = $this->controls->get_value($name . '_label');
 
239
  echo '<div class="tnp-field-row">';
240
  echo '<div class="tnp-field-col-2">';
241
- echo '<input id="', $this->_id($name), '" placeholder="', esc_attr($attrs['placeholder']), '" name="options[' . $name . '_label]" type="text"';
242
  echo ' style="width: 100%"';
243
  echo ' value="', esc_attr($value), '">';
244
  echo '</div>';
245
 
246
  if ($attrs['url']) {
247
- echo '<div class="tnp-field-col-2">';
248
  $value = $this->controls->get_value($name . '_url');
249
- echo '<input id="', $this->_id($name . '_url'), '" placeholder="', esc_attr($attrs['url_placeholder']), '" name="options[' . $name . '_url]" type="url"';
250
- echo ' style="width: 100%"';
251
- echo ' value="', esc_attr($value), '">';
252
  echo '</div>';
253
  }
254
  echo '<div style="clear: both"></div>';
@@ -258,7 +301,7 @@ class NewsletterFields {
258
  $this->_close();
259
  }
260
 
261
- public function url($name, $label = '', $attrs = array()) {
262
  $attrs = array_merge(array('description' => '', 'placeholder' => 'https://...'), $attrs);
263
  $this->_open();
264
  $this->_label($label);
@@ -267,31 +310,40 @@ class NewsletterFields {
267
  $this->_close();
268
  }
269
 
270
- public function post_type($name = 'post_type', $label = '', $attrs = array()) {
 
 
 
 
 
 
 
271
 
272
- $post_types = get_post_types(array('public' => true), 'objects', 'and');
273
 
274
- $attrs = array_merge(array('description' => ''), $attrs);
275
  $this->_open();
276
  $this->_label($label);
277
 
278
- $options = array('post' => 'Standard post');
279
  foreach ($post_types as $post_type) {
280
- if ($post_type->name == 'post' || $post_type->name == 'page' || $post_type->name == 'attachment')
281
  continue;
 
282
  $options[$post_type->name] = $post_type->labels->name;
283
  }
284
  $value = $this->controls->get_value($name);
285
 
286
- echo '<select id="options-' . esc_attr($name) . '" name="options[' . esc_attr($name) . ']" onchange="tnpc_reload_options(event); return false;">';
287
  if (!empty($first)) {
288
  echo '<option value="">' . esc_html($first) . '</option>';
289
  }
 
290
  foreach ($options as $key => $label) {
291
  echo '<option value="' . esc_attr($key) . '"';
292
  if ($value == $key)
293
  echo ' selected';
294
- echo '>' . esc_html($label) . '</option>';
295
  }
296
  echo '</select>';
297
 
@@ -299,7 +351,7 @@ class NewsletterFields {
299
  $this->_close();
300
  }
301
 
302
- function posts($name, $label, $count = 20, $args = array()) {
303
  $args = array_merge(array('filters' => array(
304
  'posts_per_page' => 5,
305
  'offset' => 0,
@@ -334,7 +386,7 @@ class NewsletterFields {
334
  $this->select($name, $label, $options);
335
  }
336
 
337
- function lists($name, $label, $attrs = array()) {
338
  $attrs = $this->_merge_attrs($attrs);
339
  $this->_open();
340
  $this->_label($label);
@@ -346,13 +398,13 @@ class NewsletterFields {
346
 
347
  /**
348
  * Media selector using the WP media library (for images and files.
349
- * The field to use it the {$name}_id which contains the media id.
350
- *
351
  * @param type $name
352
  * @param type $label
353
  * @param type $attrs
354
  */
355
- public function media($name, $label = '', $attrs = array()) {
356
  $attrs = $this->_merge_attrs($attrs, array('alt' => false));
357
  $this->_open();
358
  $this->_label($label);
@@ -364,7 +416,7 @@ class NewsletterFields {
364
  $this->_close();
365
  }
366
 
367
- public function categories($name = 'categories', $label = '', $attrs = array()) {
368
  if (empty($label))
369
  $label = __('Categories', 'newsletter');
370
  $attrs = $this->_merge_attrs($attrs);
@@ -382,7 +434,7 @@ class NewsletterFields {
382
  * @param type $label
383
  * @param type $attrs
384
  */
385
- public function terms($taxonomy, $label = '', $attrs = array()) {
386
  if (isset($attrs['name'])) {
387
  $name = $attrs['name'];
388
  } else {
@@ -415,11 +467,20 @@ class NewsletterFields {
415
  $this->_close();
416
  }
417
 
418
- public function language($name = 'language', $label = '', $attrs = array()) {
419
- if (!Newsletter::instance()->is_multilanguage())
 
 
 
 
 
 
 
420
  return;
421
- if (empty($label))
 
422
  $label = __('Language', 'newsletter');
 
423
  $attrs = $this->_merge_attrs($attrs);
424
  $this->_open('tnp-language');
425
  $this->_label($label);
@@ -432,11 +493,13 @@ class NewsletterFields {
432
  * Collects font details for a text: family, color, size and weight to be used
433
  * directly on CSS rules. Size is a pure number.
434
  *
 
 
435
  * @param type $name
436
  * @param type $label
437
  * @param type $attrs
438
  */
439
- public function font($name = 'font', $label = 'Font', $attrs = array()) {
440
  $attrs = $this->_merge_base_attrs($attrs);
441
  $attrs = array_merge(array('hide_family' => false, 'hide_color' => false, 'hide_size' => false), $attrs);
442
 
@@ -450,14 +513,14 @@ class NewsletterFields {
450
  /**
451
  * Collects fout number values representing the padding of a box. The values can
452
  * be found as {$name}_top, {$name}_bottom, {$name}_left, {$name}_right.
453
- *
454
  * @param type $name
455
  * @param type $label
456
  * @param type $attrs
457
  */
458
- public function padding($name = 'block_padding', $label = 'Padding', $attrs = array()) {
459
  $attrs = $this->_merge_base_attrs($attrs);
460
- $attrs = array_merge(array('padding_top' => 0, 'padding_left' => 0, 'padding_right' => 0, 'padding_bottom' => 0), $attrs);
461
  $field_only = !empty($attrs['field_only']);
462
 
463
  if (!$field_only) {
@@ -505,12 +568,12 @@ class NewsletterFields {
505
  $this->_label('Padding and background');
506
  $this->controls->color('block_background');
507
 
508
- echo '&nbsp;&rarr;&nbsp;';
509
- $this->controls->checkbox('block_background_gradient');
510
- $this->controls->color('block_background_2');
511
 
512
  echo '&nbsp;&nbsp;&nbsp;';
513
- $this->padding('block_padding', '', $attrs = array('field_only' => true));
514
  echo '<div class="tnp-description">Gradients are displayed only by few clients</div>';
515
  $this->_close();
516
  }
4
 
5
  static $field_open = '<div>';
6
  static $field_close = '</div>';
7
+ /* @var NewsletterControls */
8
  var $controls;
9
 
10
  public function __construct(NewsletterControls $controls) {
20
  }
21
 
22
  public function _label($text, $for = '') {
23
+ if (empty($text)) {
24
  return;
25
+ }
26
  echo '<label class="tnp-label">', $text, '</label>';
27
  }
28
 
29
  public function _description($attrs) {
30
+ if (empty($attrs['description'])) {
31
  return;
32
+ }
33
+ // Do not escape, HTML allowed
34
  echo '<div class="tnp-description">', $attrs['description'], '</div>';
35
  }
36
 
38
  return 'options-' . esc_attr($name);
39
  }
40
 
41
+ public function _name($name) {
42
+ return 'options[' . esc_attr($name) . ']';
43
+ }
44
+
45
+ /**
46
+ * Adds some empty basic atributes to avoid the isset() checking.
47
+ *
48
+ * @param array $attrs
49
+ * @return array
50
+ */
51
  public function _merge_base_attrs($attrs) {
52
+ return array_merge(['description' => '', 'label' => '', 'help_url' => ''], $attrs);
53
  }
54
 
55
+ /** Adds some basic attributes and the provided default ones.
56
+ *
57
+ * @param array $attrs
58
+ * @param array $defaults
59
+ * @return array
60
+ */
61
+ public function _merge_attrs($attrs, $defaults = []) {
62
+ return array_merge(['description' => '', 'label' => '', 'help_url' => ''], $defaults, $attrs);
63
  }
64
 
65
+ /**
66
+ * A form section title.
67
+ *
68
+ * @param string $title
69
+ */
70
  public function section($title = '') {
71
  echo '<h3 class="tnp-section">', $title, '</h3>';
72
  }
75
  echo '<div class="tnp-field tnp-separator"></div>';
76
  }
77
 
78
+ public function checkbox($name, $label = '', $attrs = []) {
79
  $attrs = $this->_merge_base_attrs($attrs);
 
80
  $this->_open('tnp-checkbox');
81
  $this->controls->checkbox($name, $label);
82
  $this->_description($attrs);
83
  $this->_close();
84
  }
85
 
86
+ /** General Input field with default type = text
87
+ *
88
+ * Attributes:
89
+ * - label_after (default: none): small text ti be displayed after the text field
90
+ * - min (default: none): minimum number of characters
91
+ * - max (default: none): maximum number of characters
92
+ * - size (default: none): size in pixels
93
+ */
94
+ public function input($name, $label = '', $attrs = []) {
95
+ $attrs = $this->_merge_attrs($attrs, ['placeholder' => '', 'size' => 0, 'label_after' => '', 'type' => 'text']);
96
  $this->_open();
97
  $this->_label($label);
98
  $value = $this->controls->get_value($name);
99
 
100
+ echo '<input id="', $this->_id($name), '" placeholder="', esc_attr($attrs['placeholder']), '" name="', $this->_name($name), '" type="', esc_attr($attrs['type']), '"';
101
 
102
  if (!empty($attrs['size'])) {
103
  echo ' style="width: ', $attrs['size'], 'px"';
113
 
114
  echo ' value="', esc_attr($value), '">';
115
 
116
+ if (!empty($attrs['label_after'])) {
117
  echo $attrs['label_after'];
118
+ }
119
+
120
  $this->_description($attrs);
121
  $this->_close();
122
  }
123
 
124
+ public function text($name, $label = '', $attrs = []) {
125
+ $attrs['type'] = 'text';
126
  $this->input($name, $label, $attrs);
127
  }
128
 
129
+ public function number($name, $label = '', $attrs = []) {
130
+ $attrs = array_merge(['type' => 'number'], $attrs);
131
  $this->input($name, $label, $attrs);
132
  }
133
 
134
+ /**
135
+ * A set of text fields, named $name_1, $name_2, ...
136
+ *
137
+ * Attributes:
138
+ * - label_after: a label to show after the field column
139
+ *
140
+ * @param type $name
141
+ * @param type $label
142
+ * @param type $count
143
+ * @param type $attrs
144
+ */
145
+ public function multitext($name, $label = '', $count = 10, $attrs = []) {
146
+ $attrs = $this->_merge_attrs($attrs, ['description' => '', 'placeholder' => '', 'size' => 0, 'label_after' => '']);
147
  $this->_open();
148
  $this->_label($label);
149
 
155
  }
156
  echo ' value="', esc_attr($value), '">';
157
  }
158
+ if (!empty($attrs['label_after'])) {
159
  echo $attrs['label_after'];
160
+ }
161
  $this->_description($attrs);
162
  $this->_close();
163
  }
164
 
165
+ public function textarea($name, $label = '', $attrs = []) {
166
  $attrs = $this->_merge_attrs($attrs);
167
  $this->_open();
168
  $this->_label($label);
171
  $this->_close();
172
  }
173
 
174
+ public function wp_editor($name, $label = '', $attrs = []) {
175
  global $wp_version;
176
 
177
  $attrs = $this->_merge_attrs($attrs);
178
  $this->_open();
179
  $this->_label($label);
180
  $value = $this->controls->get_value($name);
181
+ $name = esc_attr($name);
182
+
183
+ // Uhm...
184
  if (is_array($value)) {
185
  $value = implode("\n", $value);
186
  }
187
  if (version_compare($wp_version, '4.8', '<')) {
188
  echo '<p><strong>Rich editor available only with WP 4.8+</strong></p>';
189
  }
190
+ echo '<textarea class="tnpf-wp-editor" id="options-', $name, '" name="options[', $name, ']" style="width: 100%;height:250px">';
191
  echo esc_html($value);
192
  echo '</textarea>';
193
 
199
  $this->_close();
200
  }
201
 
202
+ public function select($name, $label = '', $options = [], $attrs = []) {
203
  $attrs = $this->_merge_attrs($attrs, ['reload' => false, 'after-rendering' => '']);
204
  $this->_open();
205
  $this->_label($label);
206
  $value = $this->controls->get_value($name);
207
 
208
+ echo '<select id="', $this->_id($name), '" name="', $this->_name($name), '"';
209
  if ($attrs['reload']) {
210
  echo ' onchange="tnpc_reload_options(event)"';
211
  }
212
  if (!empty($attrs['after-rendering'])) {
213
+ echo ' data-after-rendering="', $attrs['after-rendering'], '"';
214
  }
215
  echo '>';
216
  if (!empty($first)) {
217
+ echo '<option value="">', esc_html($first), '</option>';
218
  }
219
+ $label = esc_html($label);
220
  foreach ($options as $key => $label) {
221
+ echo '<option value="', esc_attr($key), '"';
222
+ if ($value == $key) {
223
  echo ' selected';
224
+ }
225
+ echo '>', $label, '</option>';
226
  }
227
  echo '</select>';
228
 
231
  $this->_close();
232
  }
233
 
234
+ public function yesno($name, $label = '', $attrs = []) {
235
  $attrs = $this->_merge_attrs($attrs);
236
  $this->_open();
237
  $this->_label($label);
240
  $this->_close();
241
  }
242
 
243
+ public function select_number($name, $label = '', $min, $max, $attrs = []) {
244
  $attrs = $this->_merge_attrs($attrs);
245
  $this->_open();
246
  $this->_label($label);
250
  }
251
 
252
  /** General field to collect a dimension */
253
+ public function size($name, $label = '', $attrs = []) {
254
+ $attrs = $this->_merge_attrs($attrs, [array('description' => '', 'placeholder' => '', 'size' => 0, 'label_after' => 'px')]);
 
255
  $this->_open('tnp-size');
256
  $this->_label($label);
257
  $value = $this->controls->get_value($name);
258
+ echo '<input id="', $this->_id($name), '" placeholder="', esc_attr($attrs['placeholder']), '" name="', $this->_name($name), '" type="text"';
259
  if (!empty($attrs['size'])) {
260
  echo ' style="width: ', $attrs['size'], 'px"';
261
  }
262
  echo ' value="', esc_attr($value), '">', $attrs['label_after'];
 
263
  $this->_description($attrs);
264
  $this->_close();
265
  }
266
 
267
+ /** Collects a color in HEX format with a picker. */
268
+ public function color($name, $label, $attrs = []) {
 
269
  $this->_open('tnp-color');
270
  $this->_label($label);
271
+ $this->controls->color($name);
272
  $this->_description($attrs);
273
  $this->_close();
274
  }
275
 
276
  /** Configuration for a simple button with label and color */
277
+ public function button($name, $label = '', $attrs = []) {
278
+ $attrs = $this->_merge_attrs($attrs, ['placeholder' => 'Label...', 'url_placeholder' => 'https://...', 'url' => true, 'weight' => true]);
279
+ $this->_open('tnp-button');
280
  $this->_label($label);
281
  $value = $this->controls->get_value($name . '_label');
282
+ $name_esc = esc_attr($name);
283
  echo '<div class="tnp-field-row">';
284
  echo '<div class="tnp-field-col-2">';
285
+ echo '<input id="', $this->_id($name), '" placeholder="', esc_attr($attrs['placeholder']), '" name="', $name_esc, '_label]" type="text"';
286
  echo ' style="width: 100%"';
287
  echo ' value="', esc_attr($value), '">';
288
  echo '</div>';
289
 
290
  if ($attrs['url']) {
 
291
  $value = $this->controls->get_value($name . '_url');
292
+ echo '<div class="tnp-field-col-2">';
293
+ echo '<input id="', $this->_id($name . '_url'), '" placeholder="', esc_attr($attrs['url_placeholder']), '" name="options[',
294
+ $name_esc, '_url]" type="url" style="width: 100%" value="', esc_attr($value), '">';
295
  echo '</div>';
296
  }
297
  echo '<div style="clear: both"></div>';
301
  $this->_close();
302
  }
303
 
304
+ public function url($name, $label = '', $attrs = []) {
305
  $attrs = array_merge(array('description' => '', 'placeholder' => 'https://...'), $attrs);
306
  $this->_open();
307
  $this->_label($label);
310
  $this->_close();
311
  }
312
 
313
+ /**
314
+ * Provides a list of custom post types.
315
+ *
316
+ * @param string $name
317
+ * @param string $label
318
+ * @param array $attrs
319
+ */
320
+ public function post_type($name = 'post_type', $label = '', $attrs = []) {
321
 
322
+ $post_types = get_post_types(['public' => true], 'objects', 'and');
323
 
324
+ $attrs = array_merge(['description' => ''], $attrs);
325
  $this->_open();
326
  $this->_label($label);
327
 
328
+ $options = ['post' => 'Standard post'];
329
  foreach ($post_types as $post_type) {
330
+ if ($post_type->name == 'post' || $post_type->name == 'page' || $post_type->name == 'attachment') {
331
  continue;
332
+ }
333
  $options[$post_type->name] = $post_type->labels->name;
334
  }
335
  $value = $this->controls->get_value($name);
336
 
337
+ echo '<select id="', $this->_id($name), '" name="options[' . esc_attr($name) . ']" onchange="tnpc_reload_options(event); return false;">';
338
  if (!empty($first)) {
339
  echo '<option value="">' . esc_html($first) . '</option>';
340
  }
341
+ $label = esc_html($label);
342
  foreach ($options as $key => $label) {
343
  echo '<option value="' . esc_attr($key) . '"';
344
  if ($value == $key)
345
  echo ' selected';
346
+ echo '>', $label, '</option>';
347
  }
348
  echo '</select>';
349
 
351
  $this->_close();
352
  }
353
 
354
+ function posts($name, $label, $count = 20, $args = []) {
355
  $args = array_merge(array('filters' => array(
356
  'posts_per_page' => 5,
357
  'offset' => 0,
386
  $this->select($name, $label, $options);
387
  }
388
 
389
+ function lists($name, $label, $attrs = []) {
390
  $attrs = $this->_merge_attrs($attrs);
391
  $this->_open();
392
  $this->_label($label);
398
 
399
  /**
400
  * Media selector using the WP media library (for images and files.
401
+ * The field to use it the {$name}_id which contains the media id.
402
+ *
403
  * @param type $name
404
  * @param type $label
405
  * @param type $attrs
406
  */
407
+ public function media($name, $label = '', $attrs = []) {
408
  $attrs = $this->_merge_attrs($attrs, array('alt' => false));
409
  $this->_open();
410
  $this->_label($label);
416
  $this->_close();
417
  }
418
 
419
+ public function categories($name = 'categories', $label = '', $attrs = []) {
420
  if (empty($label))
421
  $label = __('Categories', 'newsletter');
422
  $attrs = $this->_merge_attrs($attrs);
434
  * @param type $label
435
  * @param type $attrs
436
  */
437
+ public function terms($taxonomy, $label = '', $attrs = []) {
438
  if (isset($attrs['name'])) {
439
  $name = $attrs['name'];
440
  } else {
467
  $this->_close();
468
  }
469
 
470
+ /**
471
+ * Shows a language selector only if the blog is multilanguage.
472
+ *
473
+ * @param string $name
474
+ * @param string $label
475
+ * @param array $attrs
476
+ */
477
+ public function language($name = 'language', $label = '', $attrs = []) {
478
+ if (!Newsletter::instance()->is_multilanguage()) {
479
  return;
480
+ }
481
+ if (empty($label)) {
482
  $label = __('Language', 'newsletter');
483
+ }
484
  $attrs = $this->_merge_attrs($attrs);
485
  $this->_open('tnp-language');
486
  $this->_label($label);
493
  * Collects font details for a text: family, color, size and weight to be used
494
  * directly on CSS rules. Size is a pure number.
495
  *
496
+ * Attributes:
497
+ *
498
  * @param type $name
499
  * @param type $label
500
  * @param type $attrs
501
  */
502
+ public function font($name = 'font', $label = 'Font', $attrs = []) {
503
  $attrs = $this->_merge_base_attrs($attrs);
504
  $attrs = array_merge(array('hide_family' => false, 'hide_color' => false, 'hide_size' => false), $attrs);
505
 
513
  /**
514
  * Collects fout number values representing the padding of a box. The values can
515
  * be found as {$name}_top, {$name}_bottom, {$name}_left, {$name}_right.
516
+ *
517
  * @param type $name
518
  * @param type $label
519
  * @param type $attrs
520
  */
521
+ public function padding($name = 'block_padding', $label = 'Padding', $attrs = []) {
522
  $attrs = $this->_merge_base_attrs($attrs);
523
+ $attrs = array_merge(['padding_top' => 0, 'padding_left' => 0, 'padding_right' => 0, 'padding_bottom' => 0], $attrs);
524
  $field_only = !empty($attrs['field_only']);
525
 
526
  if (!$field_only) {
568
  $this->_label('Padding and background');
569
  $this->controls->color('block_background');
570
 
571
+ echo '&nbsp;&rarr;&nbsp;';
572
+ $this->controls->checkbox('block_background_gradient');
573
+ $this->controls->color('block_background_2');
574
 
575
  echo '&nbsp;&nbsp;&nbsp;';
576
+ $this->padding('block_padding', '', ['field_only' => true]);
577
  echo '<div class="tnp-description">Gradients are displayed only by few clients</div>';
578
  $this->_close();
579
  }
includes/helper.php CHANGED
@@ -200,15 +200,15 @@ function tnp_resize($media_id, $size) {
200
  if (empty($relative_file)) {
201
  return null;
202
  }
203
-
204
  $uploads = wp_upload_dir();
205
-
206
  // Based on _wp_relative_upload_path() function for blog which store the
207
  // full patch of media files
208
  if (0 === strpos($relative_file, $uploads['basedir'])) {
209
  $relative_file = str_replace($uploads['basedir'], '', $relative_file);
210
  $relative_file = ltrim($relative_file, '/');
211
- }
212
 
213
  $width = $size[0];
214
  $height = $size[1];
@@ -218,7 +218,7 @@ function tnp_resize($media_id, $size) {
218
  }
219
 
220
  $absolute_file = $uploads['basedir'] . '/' . $relative_file;
221
-
222
  if (substr($relative_file, -4) === '.gif') {
223
  $editor = wp_get_image_editor($absolute_file);
224
  $new_size = $editor->get_size();
@@ -231,7 +231,7 @@ function tnp_resize($media_id, $size) {
231
  $media->url = $uploads['baseurl'] . '/' . $relative_file;
232
  return $media;
233
  }
234
-
235
  // Relative and absolute name of the thumbnail.
236
  $pathinfo = pathinfo($relative_file);
237
  $relative_thumb = $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '-' . $width . 'x' . $height . ($crop ? '-c' : '') . '.' . $pathinfo['extension'];
@@ -290,6 +290,17 @@ function tnp_resize($media_id, $size) {
290
  return $media;
291
  }
292
 
 
 
 
 
 
 
 
 
 
 
 
293
  /**
294
  * Get media for "posts" composer block
295
  *
200
  if (empty($relative_file)) {
201
  return null;
202
  }
203
+
204
  $uploads = wp_upload_dir();
205
+
206
  // Based on _wp_relative_upload_path() function for blog which store the
207
  // full patch of media files
208
  if (0 === strpos($relative_file, $uploads['basedir'])) {
209
  $relative_file = str_replace($uploads['basedir'], '', $relative_file);
210
  $relative_file = ltrim($relative_file, '/');
211
+ }
212
 
213
  $width = $size[0];
214
  $height = $size[1];
218
  }
219
 
220
  $absolute_file = $uploads['basedir'] . '/' . $relative_file;
221
+
222
  if (substr($relative_file, -4) === '.gif') {
223
  $editor = wp_get_image_editor($absolute_file);
224
  $new_size = $editor->get_size();
231
  $media->url = $uploads['baseurl'] . '/' . $relative_file;
232
  return $media;
233
  }
234
+
235
  // Relative and absolute name of the thumbnail.
236
  $pathinfo = pathinfo($relative_file);
237
  $relative_thumb = $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '-' . $width . 'x' . $height . ($crop ? '-c' : '') . '.' . $pathinfo['extension'];
290
  return $media;
291
  }
292
 
293
+ function tnp_resize_2x($media_id, $size) {
294
+ $size[0] = $size[0] * 2;
295
+ $size[1] = $size[1] * 2;
296
+ $media = tnp_resize($media_id, $size);
297
+ $media->set_width( $size[0] / 2 );
298
+ return $media;
299
+ }
300
+
301
+ //TODO creare funzione che quando fa il resize fa anche il resize
302
+ // al doppio della risoluzione e salva url del file in TNP_Media->url2x o urls ??
303
+
304
  /**
305
  * Get media for "posts" composer block
306
  *
includes/module.php CHANGED
@@ -363,7 +363,7 @@ class NewsletterModule {
363
  */
364
  var $themes;
365
  var $components;
366
-
367
  static $current_language = '';
368
 
369
  function __construct($module, $version, $module_id = null, $components = array()) {
@@ -701,17 +701,6 @@ class NewsletterModule {
701
  if (!is_email($email)) {
702
  return false;
703
  }
704
-
705
- // TODO: To be moved on the subscription module and make configurable
706
- if (strpos($email, 'mailinator.com') !== false) {
707
- return false;
708
- }
709
- if (strpos($email, 'guerrillamailblock.com') !== false) {
710
- return false;
711
- }
712
- if (strpos($email, 'emailtemporanea.net') !== false) {
713
- return false;
714
- }
715
  return true;
716
  }
717
 
@@ -1580,8 +1569,8 @@ class NewsletterModule {
1580
  $class = trim($rules[1][$i]);
1581
  $value = trim($rules[2][$i]);
1582
  $value = preg_replace('|\s+|', ' ', $value);
1583
- $content = str_replace('class="' . $class . '"', 'class="' . $class . '" style="' . $value . '"', $content);
1584
- $content = str_replace('inline-class="' . $class . '"', 'style="' . $value . '"', $content);
1585
  }
1586
  }
1587
 
@@ -1921,7 +1910,7 @@ class NewsletterModule {
1921
  $text = str_replace('{blog_description}', get_option('blogdescription'), $text);
1922
 
1923
  $text = $this->replace_date($text);
1924
-
1925
  if ($user) {
1926
  //$this->logger->debug('Replace with user ' . $user->id);
1927
  $nk = $this->get_user_key($user);
@@ -2251,7 +2240,7 @@ class NewsletterModule {
2251
  $text = str_replace("\n", "\r\n", $text);
2252
  return $text;
2253
  }
2254
-
2255
  function set_current_language($language) {
2256
  self::$current_language = $language;
2257
  }
@@ -2269,7 +2258,7 @@ class NewsletterModule {
2269
  if ($user && $user->language) {
2270
  return $user->language;
2271
  }
2272
-
2273
  if (!empty(self::$current_language)) {
2274
  return self::$current_language;
2275
  }
363
  */
364
  var $themes;
365
  var $components;
366
+
367
  static $current_language = '';
368
 
369
  function __construct($module, $version, $module_id = null, $components = array()) {
701
  if (!is_email($email)) {
702
  return false;
703
  }
 
 
 
 
 
 
 
 
 
 
 
704
  return true;
705
  }
706
 
1569
  $class = trim($rules[1][$i]);
1570
  $value = trim($rules[2][$i]);
1571
  $value = preg_replace('|\s+|', ' ', $value);
1572
+ $content = str_replace(' class="' . $class . '"', ' class="' . $class . '" style="' . $value . '"', $content);
1573
+ $content = str_replace(' inline-class="' . $class . '"', ' style="' . $value . '"', $content);
1574
  }
1575
  }
1576
 
1910
  $text = str_replace('{blog_description}', get_option('blogdescription'), $text);
1911
 
1912
  $text = $this->replace_date($text);
1913
+
1914
  if ($user) {
1915
  //$this->logger->debug('Replace with user ' . $user->id);
1916
  $nk = $this->get_user_key($user);
2240
  $text = str_replace("\n", "\r\n", $text);
2241
  return $text;
2242
  }
2243
+
2244
  function set_current_language($language) {
2245
  self::$current_language = $language;
2246
  }
2258
  if ($user && $user->language) {
2259
  return $user->language;
2260
  }
2261
+
2262
  if (!empty(self::$current_language)) {
2263
  return self::$current_language;
2264
  }
main/extensions.php CHANGED
@@ -74,6 +74,7 @@ if ($controls->is_action('activate')) {
74
  <?php if (is_array($extensions)) { ?>
75
 
76
  <!-- Extensions -->
 
77
  <?php foreach ($extensions AS $e) { ?>
78
 
79
  <?php if ($e->type == "extension" || $e->type == "premium") { ?>
@@ -90,6 +91,7 @@ if ($controls->is_action('activate')) {
90
  <?php } ?>
91
 
92
  <!-- Integrations -->
 
93
  <?php foreach ($extensions AS $e) { ?>
94
 
95
  <?php if ($e->type == "integration") { ?>
@@ -108,6 +110,7 @@ if ($controls->is_action('activate')) {
108
  <?php } ?>
109
 
110
  <!-- Delivery -->
 
111
  <?php foreach ($extensions AS $e) { ?>
112
 
113
  <?php if ($e->type == "delivery") { ?>
74
  <?php if (is_array($extensions)) { ?>
75
 
76
  <!-- Extensions -->
77
+ <h3 class="tnp-section-title">Additional professional features</h3>
78
  <?php foreach ($extensions AS $e) { ?>
79
 
80
  <?php if ($e->type == "extension" || $e->type == "premium") { ?>
91
  <?php } ?>
92
 
93
  <!-- Integrations -->
94
+ <h3 class="tnp-section-title">Integrations with 3rd party plugins</h3>
95
  <?php foreach ($extensions AS $e) { ?>
96
 
97
  <?php if ($e->type == "integration") { ?>
110
  <?php } ?>
111
 
112
  <!-- Delivery -->
113
+ <h3 class="tnp-section-title">Integrations with reliable mail delivery services</h3>
114
  <?php foreach ($extensions AS $e) { ?>
115
 
116
  <?php if ($e->type == "delivery") { ?>
plugin.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: Newsletter
5
  Plugin URI: https://www.thenewsletterplugin.com/plugins/newsletter
6
  Description: Newsletter is a cool plugin to create your own subscriber list, to send newsletters, to build your business. <strong>Before update give a look to <a href="https://www.thenewsletterplugin.com/category/release">this page</a> to know what's changed.</strong>
7
- Version: 6.9.7
8
  Author: Stefano Lissa & The Newsletter Team
9
  Author URI: https://www.thenewsletterplugin.com
10
  Disclaimer: Use at your own risk. No warranty expressed or implied is provided.
@@ -35,7 +35,7 @@ if (version_compare(phpversion(), '5.6', '<')) {
35
  return;
36
  }
37
 
38
- define('NEWSLETTER_VERSION', '6.9.7');
39
 
40
  global $newsletter, $wpdb;
41
 
@@ -512,6 +512,7 @@ class Newsletter extends NewsletterModule {
512
  $newsletter_url = plugins_url('newsletter');
513
  wp_enqueue_script('jquery-ui-tabs');
514
  wp_enqueue_script('jquery-ui-tooltip');
 
515
  wp_enqueue_media();
516
 
517
  wp_enqueue_style('tnp-admin-font', 'https://use.typekit.net/jlj2wjy.css');
@@ -521,14 +522,14 @@ class Newsletter extends NewsletterModule {
521
  wp_enqueue_style('tnp-admin-fields', $newsletter_url . '/css/fields.css', [], NEWSLETTER_VERSION);
522
  wp_enqueue_style('tnp-admin-widgets', $newsletter_url . '/css/widgets.css', [], NEWSLETTER_VERSION);
523
  wp_enqueue_style('tnp-admin', $newsletter_url . '/admin.css',
524
- array(
525
  'tnp-admin-font',
526
  'tnp-admin-fontawesome',
527
  'tnp-admin-jquery-ui',
528
  'tnp-admin-dropdown',
529
  'tnp-admin-fields',
530
  'tnp-admin-widgets'
531
- ), NEWSLETTER_VERSION);
532
 
533
  wp_enqueue_script('tnp-admin', $newsletter_url . '/admin.js', ['jquery'], NEWSLETTER_VERSION);
534
 
@@ -537,16 +538,16 @@ class Newsletter extends NewsletterModule {
537
  );
538
  wp_localize_script('tnp-admin', 'tnp_translations', $translations_array);
539
 
540
- wp_enqueue_style('wp-color-picker');
541
- wp_enqueue_script('wp-color-picker');
 
 
 
542
 
543
- wp_enqueue_style('tnp-select2', $newsletter_url . '/vendor/select2/select2.css');
544
- wp_enqueue_script('tnp-select2', $newsletter_url . '/vendor/select2/select2.min.js');
545
- wp_enqueue_script('tnp-jquery-vmap', $newsletter_url . '/vendor/jqvmap/jquery.vmap.min.js', array('jquery'));
546
- wp_enqueue_script('tnp-jquery-vmap-world', $newsletter_url . '/vendor/jqvmap/jquery.vmap.world.js', array('tnp-jquery-vmap'));
547
- wp_enqueue_style('tnp-jquery-vmap', $newsletter_url . '/vendor/jqvmap/jqvmap.min.css');
548
 
549
- wp_register_script('tnp-chart', $newsletter_url . '/vendor/chartjs/Chart.min.js', array('jquery'));
 
550
  }
551
 
552
  function shortcode_newsletter_replace($attrs, $content) {
@@ -958,14 +959,16 @@ class Newsletter extends NewsletterModule {
958
  }
959
 
960
  /**
961
- *
962
  * @param TNP_Mailer_Message $message
963
  * @return type
964
  */
965
  function deliver($message) {
966
  $mailer = $this->get_mailer();
967
- if (empty($message->from)) $message->from = $this->options['sender_email'];
968
- if (empty($message->from_name)) $mailer->from_name = $this->options['sender_name'];
 
 
969
  return $mailer->send($message);
970
  }
971
 
@@ -999,7 +1002,7 @@ class Newsletter extends NewsletterModule {
999
  $mailer_message->body = $this->clean_eol($message['html']);
1000
  }
1001
  }
1002
-
1003
  $this->logger->debug($mailer_message);
1004
 
1005
  $mailer = $this->get_mailer();
@@ -1254,7 +1257,7 @@ class Newsletter extends NewsletterModule {
1254
  $newsletter_page_url = apply_filters('wpml_permalink', $newsletter_page_url, $language, true);
1255
  }
1256
  if (function_exists('pll_get_post')) {
1257
- $translated_page = get_permalink( pll_get_post( $page->ID, $language ) );
1258
  if ($translated_page) {
1259
  $newsletter_page_url = $translated_page;
1260
  }
4
  Plugin Name: Newsletter
5
  Plugin URI: https://www.thenewsletterplugin.com/plugins/newsletter
6
  Description: Newsletter is a cool plugin to create your own subscriber list, to send newsletters, to build your business. <strong>Before update give a look to <a href="https://www.thenewsletterplugin.com/category/release">this page</a> to know what's changed.</strong>
7
+ Version: 6.9.8
8
  Author: Stefano Lissa & The Newsletter Team
9
  Author URI: https://www.thenewsletterplugin.com
10
  Disclaimer: Use at your own risk. No warranty expressed or implied is provided.
35
  return;
36
  }
37
 
38
+ define('NEWSLETTER_VERSION', '6.9.8');
39
 
40
  global $newsletter, $wpdb;
41
 
512
  $newsletter_url = plugins_url('newsletter');
513
  wp_enqueue_script('jquery-ui-tabs');
514
  wp_enqueue_script('jquery-ui-tooltip');
515
+ wp_enqueue_script('jquery-ui-draggable');
516
  wp_enqueue_media();
517
 
518
  wp_enqueue_style('tnp-admin-font', 'https://use.typekit.net/jlj2wjy.css');
522
  wp_enqueue_style('tnp-admin-fields', $newsletter_url . '/css/fields.css', [], NEWSLETTER_VERSION);
523
  wp_enqueue_style('tnp-admin-widgets', $newsletter_url . '/css/widgets.css', [], NEWSLETTER_VERSION);
524
  wp_enqueue_style('tnp-admin', $newsletter_url . '/admin.css',
525
+ [
526
  'tnp-admin-font',
527
  'tnp-admin-fontawesome',
528
  'tnp-admin-jquery-ui',
529
  'tnp-admin-dropdown',
530
  'tnp-admin-fields',
531
  'tnp-admin-widgets'
532
+ ], NEWSLETTER_VERSION);
533
 
534
  wp_enqueue_script('tnp-admin', $newsletter_url . '/admin.js', ['jquery'], NEWSLETTER_VERSION);
535
 
538
  );
539
  wp_localize_script('tnp-admin', 'tnp_translations', $translations_array);
540
 
541
+ wp_enqueue_style('tnp-select2', $newsletter_url . '/vendor/select2/select2.css', [], NEWSLETTER_VERSION);
542
+ wp_enqueue_script('tnp-select2', $newsletter_url . '/vendor/select2/select2.min.js', [], NEWSLETTER_VERSION);
543
+ wp_enqueue_script('tnp-jquery-vmap', $newsletter_url . '/vendor/jqvmap/jquery.vmap.min.js', ['jquery'], NEWSLETTER_VERSION);
544
+ wp_enqueue_script('tnp-jquery-vmap-world', $newsletter_url . '/vendor/jqvmap/jquery.vmap.world.js', ['tnp-jquery-vmap'], NEWSLETTER_VERSION);
545
+ wp_enqueue_style('tnp-jquery-vmap', $newsletter_url . '/vendor/jqvmap/jqvmap.min.css', [], NEWSLETTER_VERSION);
546
 
547
+ wp_register_script('tnp-chart', $newsletter_url . '/vendor/chartjs/Chart.min.js', ['jquery'], NEWSLETTER_VERSION);
 
 
 
 
548
 
549
+ wp_enqueue_script('tnp-color-picker', $newsletter_url . '/vendor/spectrum/spectrum.min.js', ['jquery']);
550
+ wp_enqueue_style('tnp-color-picker', $newsletter_url . '/vendor/spectrum/spectrum.min.css', [], NEWSLETTER_VERSION);
551
  }
552
 
553
  function shortcode_newsletter_replace($attrs, $content) {
959
  }
960
 
961
  /**
962
+ *
963
  * @param TNP_Mailer_Message $message
964
  * @return type
965
  */
966
  function deliver($message) {
967
  $mailer = $this->get_mailer();
968
+ if (empty($message->from))
969
+ $message->from = $this->options['sender_email'];
970
+ if (empty($message->from_name))
971
+ $mailer->from_name = $this->options['sender_name'];
972
  return $mailer->send($message);
973
  }
974
 
1002
  $mailer_message->body = $this->clean_eol($message['html']);
1003
  }
1004
  }
1005
+
1006
  $this->logger->debug($mailer_message);
1007
 
1008
  $mailer = $this->get_mailer();
1257
  $newsletter_page_url = apply_filters('wpml_permalink', $newsletter_page_url, $language, true);
1258
  }
1259
  if (function_exists('pll_get_post')) {
1260
+ $translated_page = get_permalink(pll_get_post($page->ID, $language));
1261
  if ($translated_page) {
1262
  $newsletter_page_url = $translated_page;
1263
  }
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Tags: email, email marketing, newsletter, newsletter subscribers, welcome email, signup forms, contact, lead generation, popup, marketing automation
3
  Requires at least: 3.4.0
4
  Tested up to: 5.5.3
5
- Stable tag: 6.9.7
6
  Requires PHP: 5.6
7
  Contributors: satollo,webagile,michael-travan
8
  License: GPLv2 or later
@@ -55,6 +55,9 @@ Improve The Newsletter Plugin with these free addons:
55
  * [Newsletter REST API](https://www.thenewsletterplugin.com/documentation/developers/newsletter-api-2/) - adds a tier of REST api to integrate with the Newsletter core services
56
  * [BuddyPress integration](https://wordpress.org/plugins/newsletter-buddypress/) - subscription opt-in inside BuddyPress signup form
57
  * [Sendinblue integration](https://www.thenewsletterplugin.com/documentation/addons/delivery-addons/sendinblue-extension/) - deliver your newsletters with Sendinblue
 
 
 
58
 
59
 
60
  (*easily add them from our [Addons panel](https://www.thenewsletterplugin.com/documentation/install-extensions)*)
@@ -117,6 +120,14 @@ Thank you, The Newsletter Team
117
 
118
  == Changelog ==
119
 
 
 
 
 
 
 
 
 
120
  = 6.9.7 =
121
 
122
  * Fixed country filter
2
  Tags: email, email marketing, newsletter, newsletter subscribers, welcome email, signup forms, contact, lead generation, popup, marketing automation
3
  Requires at least: 3.4.0
4
  Tested up to: 5.5.3
5
+ Stable tag: 6.9.8
6
  Requires PHP: 5.6
7
  Contributors: satollo,webagile,michael-travan
8
  License: GPLv2 or later
55
  * [Newsletter REST API](https://www.thenewsletterplugin.com/documentation/developers/newsletter-api-2/) - adds a tier of REST api to integrate with the Newsletter core services
56
  * [BuddyPress integration](https://wordpress.org/plugins/newsletter-buddypress/) - subscription opt-in inside BuddyPress signup form
57
  * [Sendinblue integration](https://www.thenewsletterplugin.com/documentation/addons/delivery-addons/sendinblue-extension/) - deliver your newsletters with Sendinblue
58
+ * [RSS Composer Block](https://wordpress.org/plugins/newsletter-rss-block/) - (3rd party) a composer block which builds its content form an RSS feed
59
+ * [Popup Maker Integration](https://wordpress.org/plugins/newsletter-popupmaker/) - (3rd party) integration of Newsletter forms with Popup Maker plugin
60
+
61
 
62
 
63
  (*easily add them from our [Addons panel](https://www.thenewsletterplugin.com/documentation/install-extensions)*)
120
 
121
  == Changelog ==
122
 
123
+ = 6.9.8 =
124
+
125
+ * New color picker
126
+ * Extended the IP field on stats table
127
+ * Removed filter for temporary email services (can be added in the security page)
128
+ * Added support to show the last regular newsletter (not private) adding to the home url ?na=view&id=last
129
+ * Hero and image blocks now use high res images
130
+
131
  = 6.9.7 =
132
 
133
  * Fixed country filter
statistics/statistics.php CHANGED
@@ -21,7 +21,7 @@ class NewsletterStatistics extends NewsletterModule {
21
  }
22
 
23
  function __construct() {
24
- parent::__construct('statistics', '1.2.7');
25
  add_action('wp_loaded', array($this, 'hook_wp_loaded'));
26
  }
27
 
@@ -158,7 +158,7 @@ class NewsletterStatistics extends NewsletterModule {
158
  `url` varchar(255) NOT NULL DEFAULT '',
159
  `user_id` int(11) NOT NULL DEFAULT '0',
160
  `email_id` varchar(10) NOT NULL DEFAULT '0',
161
- `ip` varchar(20) NOT NULL DEFAULT '',
162
  PRIMARY KEY (`id`),
163
  KEY `email_id` (`email_id`),
164
  KEY `user_id` (`user_id`)
21
  }
22
 
23
  function __construct() {
24
+ parent::__construct('statistics', '1.2.8');
25
  add_action('wp_loaded', array($this, 'hook_wp_loaded'));
26
  }
27
 
158
  `url` varchar(255) NOT NULL DEFAULT '',
159
  `user_id` int(11) NOT NULL DEFAULT '0',
160
  `email_id` varchar(10) NOT NULL DEFAULT '0',
161
+ `ip` varchar(100) NOT NULL DEFAULT '',
162
  PRIMARY KEY (`id`),
163
  KEY `email_id` (`email_id`),
164
  KEY `user_id` (`user_id`)
users/edit.php CHANGED
@@ -284,6 +284,7 @@ function percentValue($value, $total) {
284
  <table class="widefat" style="width: auto">
285
  <thead>
286
  <tr>
 
287
  <th>Date</th>
288
  <th>Source</th>
289
  <th>IP</th>
@@ -298,6 +299,7 @@ function percentValue($value, $total) {
298
  $data = $data['new'];
299
  ?>
300
  <tr>
 
301
  <td><?php echo $controls->print_date($log->created) ?></td>
302
  <td><?php echo esc_html($log->source) ?></td>
303
  <td><?php echo esc_html($log->ip) ?></td>
284
  <table class="widefat" style="width: auto">
285
  <thead>
286
  <tr>
287
+ <th>ID</th>
288
  <th>Date</th>
289
  <th>Source</th>
290
  <th>IP</th>
299
  $data = $data['new'];
300
  ?>
301
  <tr>
302
+ <td><?php echo $log->id ?></td>
303
  <td><?php echo $controls->print_date($log->created) ?></td>
304
  <td><?php echo esc_html($log->source) ?></td>
305
  <td><?php echo esc_html($log->ip) ?></td>
vendor/spectrum/spectrum.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .sp-container{position:absolute;top:0;left:0;display:inline-block;z-index:9999994;overflow:hidden}.sp-original-input-container{position:relative}.sp-original-input-container input+.sp-add-on{position:absolute;left:0;top:0;bottom:0;border-top:none!important;border-bottom:none!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}input.spectrum.with-add-on{padding-left:45px}.sp-original-input-container input+.sp-add-on .sp-colorize{height:100%;width:100%;border-radius:inherit}backgrou .sp-colorize-container{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20px!important}.sp-hue{position:absolute;top:0;right:0;bottom:0;width:12px;height:100%;left:initial!important}.sp-clear-enabled .sp-hue{top:15%;height:85%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:28px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-3px;cursor:pointer;height:16px;border-radius:50%;width:16px;margin-right:5px;left:-2px;right:0;background:#f9f9f9;box-shadow:0 0 2px 0 #3a3a3a}.sp-alpha{display:none;position:absolute;bottom:-18px;right:0;left:0;height:10px}.sp-alpha-inner{border-radius:4px}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:3px;right:0;bottom:0;cursor:pointer;left:initial;height:12px;width:12px}.sp-alpha,.sp-alpha-handle,.sp-clear,.sp-container,.sp-container button,.sp-container.sp-dragging .sp-input,.sp-dragger,.sp-preview,.sp-replacer,.sp-slider{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-input-disabled .sp-input-container{display:none}.sp-container.sp-buttons-disabled .sp-button-container{display:none}.sp-container.sp-palette-buttons-disabled .sp-palette-button-container{display:none}.sp-palette-only .sp-picker-container{display:none}.sp-palette-disabled .sp-palette-container{display:none}.sp-initial-disabled .sp-initial{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#fff),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0))}.sp-val{border-radius:4px;background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0))}.sp-hue{background:-moz-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-ms-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-o-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(.17,#ff0),color-stop(.33,#0f0),color-stop(.5,#0ff),color-stop(.67,#00f),color-stop(.83,#f0f),to(red));background:-webkit-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.sp-1{height:17%}.sp-2{height:16%}.sp-3{height:17%}.sp-4{height:17%}.sp-5{height:16%}.sp-6{height:17%}.sp-hidden{display:none!important}.sp-cf:after,.sp-cf:before{content:"";display:table}.sp-cf:after{clear:both}@media (max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:10px;width:10px;border:1px solid #fff;cursor:pointer;position:absolute;top:0;left:0;margin-left:3px;margin-top:3px;box-shadow:0 0 2px 1px rgba(0,0,0,.2)}.sp-slider{position:absolute;top:0;cursor:pointer;height:16px;border-radius:50%;width:16px;left:-2px;background:#f9f9f9;box-shadow:0 0 2px 0 #3a3a3a;margin-top:8px}.sp-container{border-radius:0;background-color:#fff;padding:0;border-radius:4px;color:#000;box-shadow:0 0 0 1px rgba(99,114,130,.16),0 8px 16px rgba(27,39,51,.08)}.sp-clear,.sp-color,.sp-container,.sp-container button,.sp-container input,.sp-hue{font-size:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:10px}.sp-clear,.sp-color,.sp-hue,.sp-sat,.sp-val{border-radius:3px}.sp-input-container{margin-top:-5px;margin-bottom:10px}.sp-button-container.sp-cf,.sp-initial.sp-thumb.sp-cf,.sp-input-container.sp-cf{height:25px}.sp-palette-row-initial>span:first-child{cursor:pointer}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{padding:0 5px!important;margin:0;width:100%;box-shadow:none!important;height:100%!important;background:0 0;color:#3a3a3a;border-radius:2px!important;border:1px solid #e0e0e0!important;text-align:center;font-family:monospace;font-size:inherit!important}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-palette-container,.sp-picker-container{float:left;position:relative;padding:10px;padding-bottom:300px;margin-bottom:-290px}.sp-picker-container{width:200px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;width:24px;height:15px;margin:3px;cursor:pointer;border:solid 2px transparent}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .spe-thumb-el.sp-thumb-active{border-radius:0 5px 5px 0}.sp-initial .spe-thumb-el{border-radius:5px 0 0 5px}.sp-initial .sp-clear-display{background-position:center}.sp-button-container{float:right}.sp-palette-button-container{margin-top:10px}.sp-replacer{position:relative;overflow:hidden;cursor:pointer;display:inline-block;border-radius:3px;border:1px solid #ccc;color:#666;transition:color .3s,border-color .3s;vertical-align:middle;width:3rem;height:1.5rem}.sp-replacer.sp-active,.sp-replacer:hover{border:1px solid #666;color:#000}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{position:absolute;font-size:10px;right:0;top:0;bottom:0;padding:0 2px;line-height:1.6rem;background-color:#fff}.sp-preview{position:relative;width:100%;height:100%;float:left;z-index:0}.sp-preview-inner{transition:background-color .2s}.sp-preview-inner.sp-clear-display{width:1rem;margin-left:.3rem}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:3px;border:none;border-radius:3px}.sp-container{padding-bottom:0}.sp-container button{border-radius:3px;border:none;background:0 0;line-height:1;padding:0 8px;height:25px;text-transform:capitalize;text-align:center;vertical-align:middle;cursor:pointer;color:#606c72;font-weight:700}.sp-container button.sp-choose{background-color:#3cab3b;color:#fff;margin-left:5px}.sp-container button:hover{opacity:.8}.sp-container button.sp-palette-toggle{width:100%;background-color:#f3f3f3;margin:0}.sp-palette span.sp-thumb-active,.sp-palette span:hover{border-color:#000}.sp-alpha,.sp-preview,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-alpha-inner,.sp-preview-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{border-radius:3px;background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAABe0lEQVQokYXSsUtcQRTF4d8Jj+VhHSxkEQuLsEUKK0nhTBFTmLSSUhBCMCAWsmgIwWrBLk0akfwLCaSQKBJmtrIIISwpRFKIhViETScphGMzysMtvOVwvpm5d0bGNCuGWAOPgYdl6S8wSDn9b+bUhDHEKWAdeAFMANg+l/TV9ofcz6cjMIbYBvaBMds7QCqZ58CmpBNgPuV0DvAAIMyFGugWtJr7eTv38xEwkPRPErY7QDeG2LqFkjrAgu0dSd/KDVqSNmxvAZ8lfbS9AHRuYemnLWkv5XRVBrQMbAI/gTXgEzAJtJuwBVS2L2OIle03QA/4Lmkl5XQBXEqqbFcAVYFDYChpFngiqWf7l6TXKaezMt2Zkhk24THwG+jZriX9AFZvUAyxLbRke2D75O5zPAO+ADXwEtizjaRHwDvbTyUtppwOmicCHAJvbXcl9YA1SQDjtseA97YPRz7ATcUQp2y/kjRdevsjaTfldNrMjcDGBjXA3T96L7yvrgFzP69+0Ao/HAAAAABJRU5ErkJggg==)}
vendor/spectrum/spectrum.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports&&"object"==typeof module?module.exports=e(require("jquery")):e(jQuery)}(function(De,qe){"use strict";var e,Ie={beforeShow:a,move:a,change:a,show:a,hide:a,color:!1,flat:!1,type:"",showInput:!1,allowEmpty:!0,showButtons:!0,clickoutFiresChange:!0,showInitial:!1,showPalette:!0,showPaletteOnly:!1,hideAfterPaletteSelect:!1,togglePaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:8,locale:"en",cancelText:"cancel",chooseText:"choose",togglePaletteMoreText:"more",togglePaletteLessText:"less",clearText:"Clear Color Selection",noColorSelectedText:"No Color Selected",preferredFormat:"name",className:"",containerClassName:"",replacerClassName:"",showAlpha:!0,theme:"sp-light",palette:[["#000000","#444444","#5b5b5b","#999999","#bcbcbc","#eeeeee","#f3f6f4","#ffffff"],["#f44336","#744700","#ce7e00","#8fce00","#2986cc","#16537e","#6a329f","#c90076"],["#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d0e0e3","#cfe2f3","#d9d2e9","#ead1dc"],["#ea9999","#f9cb9c","#ffe599","#b6d7a8","#a2c4c9","#9fc5e8","#b4a7d6","#d5a6bd"],["#e06666","#f6b26b","#ffd966","#93c47d","#76a5af","#6fa8dc","#8e7cc3","#c27ba0"],["#cc0000","#e69138","#f1c232","#6aa84f","#45818e","#3d85c6","#674ea7","#a64d79"],["#990000","#b45f06","#bf9000","#38761d","#134f5c","#0b5394","#351c75","#741b47"],["#660000","#783f04","#7f6000","#274e13","#0c343d","#073763","#20124d","#4c1130"]],selectionPalette:[],disabled:!1,offset:null},Ve=[],We=!!/msie/i.exec(window.navigator.userAgent),Be=((e=document.createElement("div").style).cssText="background-color:rgba(0,0,0,.5)",t(e.backgroundColor,"rgba")||t(e.backgroundColor,"hsla")),Ke=["<div class='sp-replacer'>","<div class='sp-preview'><div class='sp-preview-inner'></div></div>","<div class='sp-dd'>&#9660;</div>","</div>"].join(""),$e=function(){var e="";if(We)for(var t=1;t<=6;t++)e+="<div class='sp-"+t+"'></div>";return["<div class='sp-container sp-hidden'>","<div class='sp-palette-container'>","<div class='sp-palette sp-thumb sp-cf'></div>","<div class='sp-palette-button-container sp-cf'>","<button type='button' class='sp-palette-toggle'></button>","</div>","</div>","<div class='sp-picker-container'>","<div class='sp-top sp-cf'>","<div class='sp-fill'></div>","<div class='sp-top-inner'>","<div class='sp-color'>","<div class='sp-sat'>","<div class='sp-val'>","<div class='sp-dragger'></div>","</div>","</div>","</div>","<div class='sp-clear sp-clear-display'>","</div>","<div class='sp-hue'>","<div class='sp-slider'></div>",e,"</div>","</div>","<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>","</div>","<div class='sp-input-container sp-cf'>","<input class='sp-input' type='text' spellcheck='false' />","</div>","<div class='sp-initial sp-thumb sp-cf'></div>","<div class='sp-button-container sp-cf'>","<button class='sp-cancel' href='#'></button>","<button type='button' class='sp-choose'></button>","</div>","</div>","</div>"].join("")}();function t(e,t){return!!~(""+e).indexOf(t)}function Xe(e,t,a,o){for(var r=[],n=0;n<e.length;n++){var s=e[n];if(s){var i=tinycolor(s),l=i.toHsl().l<.5?"sp-thumb-el sp-thumb-dark":"sp-thumb-el sp-thumb-light";l+=tinycolor.equals(t,s)?" sp-thumb-active":"";var c=i.toString(o.preferredFormat||"rgb"),u=Be?"background-color:"+i.toRgbString():"filter:"+i.toFilter();r.push('<span title="'+c+'" data-color="'+i.toRgbString()+'" class="'+l+'"><span class="sp-thumb-inner" style="'+u+';" /></span>')}else r.push('<span class="sp-thumb-el sp-clear-display" ><span class="sp-clear-palette-only" style="background-color: transparent;" /></span>')}return"<div class='sp-cf "+a+"'>"+r.join("")+"</div>"}function n(e,t){var a,o,r,n,h=function(e,t){e.locale=e.locale||window.navigator.language,e.locale&&(e.locale=e.locale.split("-")[0].toLowerCase()),"en"!=e.locale&&De.spectrum.localization[e.locale]&&(e=De.extend({},De.spectrum.localization[e.locale],e));var a=De.extend({},Ie,e);return a.callbacks={move:Ge(a.move,t),change:Ge(a.change,t),show:Ge(a.show,t),hide:Ge(a.hide,t),beforeShow:Ge(a.beforeShow,t)},a}(t,e),s=h.type,d="flat"==s,i=h.showSelectionPalette,l=h.localStorageKey,c=h.theme,u=h.callbacks,f=(a=Qe,function(){var e=this,t=arguments;r&&clearTimeout(n),!r&&n||(n=setTimeout(function(){n=null,a.apply(e,t)},o))}),p=!(o=10),g=!1,b=0,m=0,v=0,x=0,y=0,T=0,w=0,_=0,k=0,P=0,C=1,S=[],M=[],z={},j=h.selectionPalette.slice(0),A=h.maxSelectionSize,R="sp-dragging",F=!1,H=null,L=e.ownerDocument,O=(L.body,De(e)),Q=!1,E=De($e,L).addClass(c),N=E.find(".sp-picker-container"),D=E.find(".sp-color"),q=E.find(".sp-dragger"),I=E.find(".sp-hue"),V=E.find(".sp-slider"),W=E.find(".sp-alpha-inner"),B=E.find(".sp-alpha"),K=E.find(".sp-alpha-handle"),$=E.find(".sp-input"),X=E.find(".sp-palette"),Y=E.find(".sp-initial"),G=E.find(".sp-cancel"),U=E.find(".sp-clear"),J=E.find(".sp-choose"),Z=E.find(".sp-palette-toggle"),ee=O.is("input"),te=(ee&&"color"===O.attr("type")&&Je(),ee&&"color"==s),ae=te?De(Ke).addClass(c).addClass(h.className).addClass(h.replacerClassName):De([]),oe=te?ae:O,re=ae.find(".sp-preview-inner"),ne=h.color||ee&&O.val(),se=!1,ie=h.preferredFormat,le=!h.showButtons||h.clickoutFiresChange,ce=!ne,ue=h.allowEmpty,fe=null,he=null,de=null,pe=null,ge=O.attr("id");if(ge!==qe&&0<ge.length){var be=De('label[for="'+ge+'"]');be.length&&be.on("click",function(e){return e.preventDefault(),O.spectrum("show"),!1})}function me(){if(h.showPaletteOnly&&(h.showPalette=!0),Z.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),h.palette){S=h.palette.slice(0),M=De.isArray(S[0])?S:[S],z={};for(var e=0;e<M.length;e++)for(var t=0;t<M[e].length;t++){var a=tinycolor(M[e][t]).toRgbString();z[a]=!0}h.showPaletteOnly&&!h.color&&(ne=""===S[0][0]?S[0][0]:Object.keys(z)[0])}E.toggleClass("sp-flat",d),E.toggleClass("sp-input-disabled",!h.showInput),E.toggleClass("sp-alpha-enabled",h.showAlpha),E.toggleClass("sp-clear-enabled",ue),E.toggleClass("sp-buttons-disabled",!h.showButtons),E.toggleClass("sp-palette-buttons-disabled",!h.togglePaletteOnly),E.toggleClass("sp-palette-disabled",!h.showPalette),E.toggleClass("sp-palette-only",h.showPaletteOnly),E.toggleClass("sp-initial-disabled",!h.showInitial),E.addClass(h.className).addClass(h.containerClassName),Qe()}function ve(){if(l){try{var e=window.localStorage,t=e[l].split(",#");1<t.length&&(delete e[l],De.each(t,function(e,t){xe(t)}))}catch(e){}try{j=window.localStorage[l].split(";")}catch(e){}}}function xe(e){if(i){var t=tinycolor(e).toRgbString();if(!z[t]&&-1===De.inArray(t,j))for(j.push(t);j.length>A;)j.shift();if(l)try{window.localStorage[l]=j.join(";")}catch(e){}}}function ye(){var a=Re(),e=De.map(M,function(e,t){return Xe(e,a,"sp-palette-row sp-palette-row-"+t,h)});ve(),j&&e.push(Xe(function(){var e=[];if(h.showPalette)for(var t=0;t<j.length;t++){var a=tinycolor(j[t]).toRgbString();z[a]||e.push(j[t])}return e.reverse().slice(0,h.maxSelectionSize)}(),a,"sp-palette-row sp-palette-row-selection",h)),X.html(e.join(""))}function Te(){if(h.showInitial){var e=se,t=Re();Y.html(Xe([e,t],t,"sp-palette-row-initial",h))}}function we(){(m<=0||b<=0||x<=0)&&Qe(),g=!0,E.addClass(R),H=null,O.trigger("dragstart.spectrum",[Re()])}function _e(){g=!1,E.removeClass(R),O.trigger("dragstop.spectrum",[Re()])}function ke(e){if(F)F=!1;else if(null!==e&&""!==e||!ue){var t=tinycolor(e);t.isValid()?(Ae(t),Fe(),Oe()):$.addClass("sp-validation-error")}else Ae(null),Fe(),Oe()}function Pe(){(p?ze:Ce)()}function Ce(){var e=De.Event("beforeShow.spectrum");p?Qe():(O.trigger(e,[Re()]),!1===u.beforeShow(Re())||e.isDefaultPrevented()||(function(){for(var e=0;e<Ve.length;e++)Ve[e]&&Ve[e].hide()}(),p=!0,De(L).on("keydown.spectrum",Se),De(L).on("click.spectrum",Me),De(window).on("resize.spectrum",f),ae.addClass("sp-active"),E.removeClass("sp-hidden"),Qe(),He(),se=Re(),Te(),u.show(se),O.trigger("show.spectrum",[se])))}function Se(e){27===e.keyCode&&ze()}function Me(e){2!=e.button&&(g||(le?Oe(!0):je(),ze()))}function ze(){p&&!d&&(p=!1,De(L).off("keydown.spectrum",Se),De(L).off("click.spectrum",Me),De(window).off("resize.spectrum",f),ae.removeClass("sp-active"),E.addClass("sp-hidden"),u.hide(Re()),O.trigger("hide.spectrum",[Re()]))}function je(){Ae(se,!0),Oe(!0)}function Ae(e,t){var a,o;tinycolor.equals(e,Re())?He():(e&&e!==qe||!ue?(ce=!1,o=(a=tinycolor(e)).toHsv(),_=o.h%360/360,k=o.s,P=o.v,C=o.a):ce=!0,He(),a&&a.isValid()&&!t&&(ie=h.preferredFormat||a.getFormat()))}function Re(e){return e=e||{},ue&&ce?null:tinycolor.fromRatio({h:_,s:k,v:P,a:Math.round(1e3*C)/1e3},{format:e.format||ie})}function Fe(){He(),u.move(Re()),O.trigger("move.spectrum",[Re()])}function He(){$.removeClass("sp-validation-error"),Le();var e=tinycolor.fromRatio({h:_,s:1,v:1});D.css("background-color",e.toHexString());var t=ie;C<1&&(0!==C||"name"!==t)&&("hex"!==t&&"hex3"!==t&&"hex6"!==t&&"name"!==t||(t="rgb"));var a=Re({format:t}),o="";if(re.removeClass("sp-clear-display"),re.css("background-color","transparent"),!a&&ue)re.addClass("sp-clear-display");else{var r=a.toHexString(),n=a.toRgbString();if(Be||1===a.alpha?re.css("background-color",n):(re.css("background-color","transparent"),re.css("filter",a.toFilter())),h.showAlpha){var s=a.toRgb();s.a=0;var i=tinycolor(s).toRgbString(),l="linear-gradient(left, "+i+", "+r+")";We?W.css("filter",tinycolor(i).toFilter({gradientType:1},r)):(W.css("background","-webkit-"+l),W.css("background","-moz-"+l),W.css("background","-ms-"+l),W.css("background","linear-gradient(to right, "+i+", "+r+")"))}o=a.toString(t)}if(h.showInput&&$.val(o),O.val(o),"text"==h.type||"component"==h.type){var c=a;if(c&&he){var u=c.isLight()||c.getAlpha()<.4?"black":"white";he.css("background-color",c.toRgbString()).css("color",u)}else he.css("background-color",pe).css("color",de)}h.showPalette&&ye(),Te()}function Le(){var e=k,t=P;if(ue&&ce)K.hide(),V.hide(),q.hide();else{K.show(),V.show(),q.show();var a=e*b,o=m-t*m;a=Math.max(-v,Math.min(b-v,a-v)),o=Math.max(-v,Math.min(m-v,o-v)),q.css({top:o+"px",left:a+"px"});var r=C*y;K.css({left:r-T/2+"px"});var n=_*x;V.css({top:n-w+"px"})}}function Oe(e){var t=Re(),a=!tinycolor.equals(t,se);t&&(t.toString(ie),xe(t)),e&&a&&(u.change(t),F=!0,O.trigger("change",[t]))}function Qe(){var e,t,a,o,r,n,s,i,l,c,u,f;p&&(b=D.width(),m=D.height(),v=q.height(),I.width(),x=I.height(),w=V.height(),y=B.width(),T=K.width(),d||(E.css("position","absolute"),h.offset?E.offset(h.offset):E.offset((t=oe,a=(e=E).outerWidth(),o=e.outerHeight(),r=t.outerHeight(),n=e[0].ownerDocument,s=n.documentElement,i=s.clientWidth+De(n).scrollLeft(),l=s.clientHeight+De(n).scrollTop(),c=t.offset(),u=c.left,f=c.top,f+=r,u-=Math.min(u,i<u+a&&a<i?Math.abs(u+a-i):0),{top:f-=Math.min(f,l<f+o&&o<l?Math.abs(+(o+r)):0),bottom:c.bottom,left:u,right:c.right,width:c.width,height:c.height}))),Le(),h.showPalette&&ye(),O.trigger("reflow.spectrum"))}function Ee(){ze(),Q=!0,O.attr("disabled",!0),oe.addClass("sp-disabled")}!function(){if(We&&E.find("*:not(input)").attr("unselectable","on"),me(),fe=De('<span class="sp-original-input-container"></span>'),["margin"].forEach(function(e){fe.css(e,O.css(e))}),"block"==O.css("display")&&fe.css("display","flex"),te)O.after(ae).hide();else if("text"==s)fe.addClass("sp-colorize-container"),O.addClass("spectrum sp-colorize").wrap(fe);else if("component"==s){O.addClass("spectrum").wrap(fe);var e=De(["<div class='sp-colorize-container sp-add-on'>","<div class='sp-colorize'></div> ","</div>"].join(""));e.width(O.outerHeight()+"px").css("border-radius",O.css("border-radius")).css("border",O.css("border")),O.addClass("with-add-on").before(e)}if(he=O.parent().find(".sp-colorize"),de=he.css("color"),pe=he.css("background-color"),ue||U.hide(),d)O.after(E).hide();else{var t="parent"===h.appendTo?O.parent():De(h.appendTo);1!==t.length&&(t=De("body")),t.append(E)}function a(e){return e.data&&e.data.ignore?(Ae(De(e.target).closest(".sp-thumb-el").data("color")),Fe()):(Ae(De(e.target).closest(".sp-thumb-el").data("color")),Fe(),h.hideAfterPaletteSelect?(Oe(!0),ze()):Oe()),!1}ve(),oe.on("click.spectrum touchstart.spectrum",function(e){Q||Pe(),e.stopPropagation(),De(e.target).is("input")||e.preventDefault()}),!O.is(":disabled")&&!0!==h.disabled||Ee(),E.click(Ye),[$,O].forEach(function(t){t.change(function(){ke(t.val())}),t.on("paste",function(){setTimeout(function(){ke(t.val())},1)}),t.keydown(function(e){13==e.keyCode&&(ke(De(t).val()),t==O&&ze())})}),G.text(h.cancelText),G.on("click.spectrum",function(e){e.stopPropagation(),e.preventDefault(),je(),ze()}),U.attr("title",h.clearText),U.on("click.spectrum",function(e){e.stopPropagation(),e.preventDefault(),ce=!0,Fe(),d&&Oe(!0)}),J.text(h.chooseText),J.on("click.spectrum",function(e){e.stopPropagation(),e.preventDefault(),We&&$.is(":focus")&&$.trigger("change"),$.hasClass("sp-validation-error")||(Oe(!0),ze())}),Z.text(h.showPaletteOnly?h.togglePaletteMoreText:h.togglePaletteLessText),Z.on("click.spectrum",function(e){e.stopPropagation(),e.preventDefault(),h.showPaletteOnly=!h.showPaletteOnly,h.showPaletteOnly||d||E.css("left","-="+(N.outerWidth(!0)+5)),me()}),Ue(B,function(e,t,a){C=e/y,ce=!1,a.shiftKey&&(C=Math.round(10*C)/10),Fe()},we,_e),Ue(I,function(e,t){_=parseFloat(t/x),ce=!1,h.showAlpha||(C=1),Fe()},we,_e),Ue(D,function(e,t,a){if(a.shiftKey){if(!H){var o=k*b,r=m-P*m,n=Math.abs(e-o)>Math.abs(t-r);H=n?"x":"y"}}else H=null;var s=!H||"y"===H;H&&"x"!==H||(k=parseFloat(e/b)),s&&(P=parseFloat((m-t)/m)),ce=!1,h.showAlpha||(C=1),Fe()},we,_e),ne?(Ae(ne),He(),ie=tinycolor(ne).format||h.preferredFormat,xe(ne)):(""===ne&&Ae(ne),He()),d&&Ce();var o=We?"mousedown.spectrum":"click.spectrum touchstart.spectrum";X.on(o,".sp-thumb-el",a),Y.on(o,".sp-thumb-el:nth-child(1)",{ignore:!0},a)}();var Ne={show:Ce,hide:ze,toggle:Pe,reflow:Qe,option:function(e,t){return e===qe?De.extend({},h):t===qe?h[e]:(h[e]=t,"preferredFormat"===e&&(ie=h.preferredFormat),void me())},enable:function(){Q=!1,O.attr("disabled",!1),oe.removeClass("sp-disabled")},disable:Ee,offset:function(e){h.offset=e,Qe()},set:function(e){Ae(e),Oe()},get:Re,destroy:function(){O.show().removeClass("spectrum with-add-on sp-colorize"),oe.off("click.spectrum touchstart.spectrum"),E.remove(),ae.remove(),he&&he.css("background-color",pe).css("color",de);var e=O.closest(".sp-original-input-container");0<e.length&&e.after(O).remove(),Ve[Ne.id]=null},container:E};return Ne.id=Ve.push(Ne)-1,Ne}function a(){}function Ye(e){e.stopPropagation()}function Ge(e,t){var a=Array.prototype.slice,o=a.call(arguments,2);return function(){return e.apply(t,o.concat(a.call(arguments)))}}function Ue(s,i,t,e){i=i||function(){},t=t||function(){},e=e||function(){};var l=document,c=!1,u={},f=0,h=0,d="ontouchstart"in window,a={};function p(e){e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.returnValue=!1}function o(e){if(c){if(We&&l.documentMode<9&&!e.button)return g();var t=e.originalEvent&&e.originalEvent.touches&&e.originalEvent.touches[0],a=t&&t.pageX||e.pageX,o=t&&t.pageY||e.pageY,r=Math.max(0,Math.min(a-u.left,h)),n=Math.max(0,Math.min(o-u.top,f));d&&p(e),i.apply(s,[r,n,e])}}function g(){c&&(De(l).off(a),De(l.body).removeClass("sp-dragging"),setTimeout(function(){e.apply(s,arguments)},0)),c=!1}a.selectstart=p,a.dragstart=p,a["touchmove mousemove"]=o,a["touchend mouseup"]=g,De(s).on("touchstart mousedown",function(e){(e.which?3==e.which:2==e.button)||c||!1!==t.apply(s,arguments)&&(c=!0,f=De(s).height(),h=De(s).width(),u=De(s).offset(),De(l).on(a),De(l.body).addClass("sp-dragging"),o(e),p(e))})}function Je(){return De.fn.spectrum.inputTypeColorSupport()}var s="spectrum.id";De.fn.spectrum=function(a,e){if("string"!=typeof a)return this.spectrum("destroy").each(function(){var e=De.extend({},De(this).data(),a);De(this).is("input")?e.flat||"flat"==e.type?e.type="flat":"color"==De(this).attr("type")?e.type="color":e.type=e.type||"component":e.type="noInput";var t=n(this,e);De(this).data(s,t.id)});var o=this,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=Ve[De(this).data(s)];if(e){var t=e[a];if(!t)throw new Error("Spectrum: no such method: '"+a+"'");"get"==a?o=e.get():"container"==a?o=e.container:"option"==a?o=e.option.apply(e,r):"destroy"==a?(e.destroy(),De(this).removeData(s)):t.apply(e,r)}}),o},De.fn.spectrum.load=!0,De.fn.spectrum.loadOpts={},De.fn.spectrum.draggable=Ue,De.fn.spectrum.defaults=Ie,De.fn.spectrum.inputTypeColorSupport=function e(){if(void 0===e._cachedResult){var t=De("<input type='color'/>")[0];e._cachedResult="color"===t.type&&""!==t.value}return e._cachedResult},De.spectrum={},De.spectrum.localization={},De.spectrum.palettes={},De.fn.spectrum.processNativeColorInputs=function(){var e=De("input[type=color]");e.length&&!Je()&&e.spectrum({preferredFormat:"hex6"})},function(){var n=/^[\s,#]+/,s=/\s+$/,o=0,c=Math,i=c.round,u=c.min,f=c.max,e=c.random,h=function(e,t){if(t=t||{},(e=e||"")instanceof h)return e;if(!(this instanceof h))return new h(e,t);var a=function(e){var t={r:0,g:0,b:0},a=1,o=!1,r=!1;"string"==typeof e&&(e=function(e){e=e.replace(n,"").replace(s,"").toLowerCase();var t,a=!1;if(C[e])e=C[e],a=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=Q.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=Q.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=Q.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=Q.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=Q.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=Q.hsva.exec(e))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=Q.hex8.exec(e))return{a:function(e){return A(e)/255}(t[1]),r:A(t[2]),g:A(t[3]),b:A(t[4]),format:a?"name":"hex8"};if(t=Q.hex6.exec(e))return{r:A(t[1]),g:A(t[2]),b:A(t[3]),format:a?"name":"hex"};if(t=Q.hex3.exec(e))return{r:A(t[1]+""+t[1]),g:A(t[2]+""+t[2]),b:A(t[3]+""+t[3]),format:a?"name":"hex"};return!1}(e));"object"==typeof e&&(e.hasOwnProperty("r")&&e.hasOwnProperty("g")&&e.hasOwnProperty("b")?(t=function(e,t,a){return{r:255*z(e,255),g:255*z(t,255),b:255*z(a,255)}}(e.r,e.g,e.b),o=!0,r="%"===String(e.r).substr(-1)?"prgb":"rgb"):e.hasOwnProperty("h")&&e.hasOwnProperty("s")&&e.hasOwnProperty("v")?(e.s=F(e.s),e.v=F(e.v),t=function(e,t,a){e=6*z(e,360),t=z(t,100),a=z(a,100);var o=c.floor(e),r=e-o,n=a*(1-t),s=a*(1-r*t),i=a*(1-(1-r)*t),l=o%6;return{r:255*[a,s,n,n,i,a][l],g:255*[i,a,a,s,n,n][l],b:255*[n,n,i,a,a,s][l]}}(e.h,e.s,e.v),o=!0,r="hsv"):e.hasOwnProperty("h")&&e.hasOwnProperty("s")&&e.hasOwnProperty("l")&&(e.s=F(e.s),e.l=F(e.l),t=function(e,t,a){var o,r,n;function s(e,t,a){return a<0&&(a+=1),1<a&&--a,a<1/6?e+6*(t-e)*a:a<.5?t:a<2/3?e+(t-e)*(2/3-a)*6:e}if(e=z(e,360),t=z(t,100),a=z(a,100),0===t)o=r=n=a;else{var i=a<.5?a*(1+t):a+t-a*t,l=2*a-i;o=s(l,i,e+1/3),r=s(l,i,e),n=s(l,i,e-1/3)}return{r:255*o,g:255*r,b:255*n}}(e.h,e.s,e.l),o=!0,r="hsl"),e.hasOwnProperty("a")&&(a=e.a));return a=M(a),{ok:o,format:e.format||r,r:u(255,f(t.r,0)),g:u(255,f(t.g,0)),b:u(255,f(t.b,0)),a:a}}(e);this._originalInput=e,this._r=a.r,this._g=a.g,this._b=a.b,this._a=a.a,this._roundA=i(1e3*this._a)/1e3,this._format=t.format||a.format,this._gradientType=t.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=a.ok,this._tc_id=o++};function r(e,t,a){e=z(e,255),t=z(t,255),a=z(a,255);var o,r,n=f(e,t,a),s=u(e,t,a),i=(n+s)/2;if(n==s)o=r=0;else{var l=n-s;switch(r=.5<i?l/(2-n-s):l/(n+s),n){case e:o=(t-a)/l+(t<a?6:0);break;case t:o=(a-e)/l+2;break;case a:o=(e-t)/l+4}o/=6}return{h:o,s:r,l:i}}function l(e,t,a){e=z(e,255),t=z(t,255),a=z(a,255);var o,r,n=f(e,t,a),s=u(e,t,a),i=n,l=n-s;if(r=0===n?0:l/n,n==s)o=0;else{switch(n){case e:o=(t-a)/l+(t<a?6:0);break;case t:o=(a-e)/l+2;break;case a:o=(e-t)/l+4}o/=6}return{h:o,s:r,v:i}}function t(e,t,a,o){var r=[R(i(e).toString(16)),R(i(t).toString(16)),R(i(a).toString(16))];return o&&r[0].charAt(0)==r[0].charAt(1)&&r[1].charAt(0)==r[1].charAt(1)&&r[2].charAt(0)==r[2].charAt(1)?r[0].charAt(0)+r[1].charAt(0)+r[2].charAt(0):r.join("")}function d(e,t,a,o){var r;return[R((r=o,Math.round(255*parseFloat(r)).toString(16))),R(i(e).toString(16)),R(i(t).toString(16)),R(i(a).toString(16))].join("")}function a(e,t){t=0===t?0:t||10;var a=h(e).toHsl();return a.s-=t/100,a.s=j(a.s),h(a)}function p(e,t){t=0===t?0:t||10;var a=h(e).toHsl();return a.s+=t/100,a.s=j(a.s),h(a)}function g(e){return h(e).desaturate(100)}function b(e,t){t=0===t?0:t||10;var a=h(e).toHsl();return a.l+=t/100,a.l=j(a.l),h(a)}function m(e,t){t=0===t?0:t||10;var a=h(e).toRgb();return a.r=f(0,u(255,a.r-i(-t/100*255))),a.g=f(0,u(255,a.g-i(-t/100*255))),a.b=f(0,u(255,a.b-i(-t/100*255))),h(a)}function v(e,t){t=0===t?0:t||10;var a=h(e).toHsl();return a.l-=t/100,a.l=j(a.l),h(a)}function x(e,t){var a=h(e).toHsl(),o=(i(a.h)+t)%360;return a.h=o<0?360+o:o,h(a)}function y(e){var t=h(e).toHsl();return t.h=(t.h+180)%360,h(t)}function T(e){var t=h(e).toHsl(),a=t.h;return[h(e),h({h:(a+120)%360,s:t.s,l:t.l}),h({h:(a+240)%360,s:t.s,l:t.l})]}function w(e){var t=h(e).toHsl(),a=t.h;return[h(e),h({h:(a+90)%360,s:t.s,l:t.l}),h({h:(a+180)%360,s:t.s,l:t.l}),h({h:(a+270)%360,s:t.s,l:t.l})]}function _(e){var t=h(e).toHsl(),a=t.h;return[h(e),h({h:(a+72)%360,s:t.s,l:t.l}),h({h:(a+216)%360,s:t.s,l:t.l})]}function k(e,t,a){t=t||6,a=a||30;var o=h(e).toHsl(),r=360/a,n=[h(e)];for(o.h=(o.h-(r*t>>1)+720)%360;--t;)o.h=(o.h+r)%360,n.push(h(o));return n}function P(e,t){t=t||6;for(var a=h(e).toHsv(),o=a.h,r=a.s,n=a.v,s=[],i=1/t;t--;)s.push(h({h:o,s:r,v:n})),n=(n+i)%1;return s}h.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},setAlpha:function(e){return this._a=M(e),this._roundA=i(1e3*this._a)/1e3,this},toHsv:function(){var e=l(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=l(this._r,this._g,this._b),t=i(360*e.h),a=i(100*e.s),o=i(100*e.v);return 1==this._a?"hsv("+t+", "+a+"%, "+o+"%)":"hsva("+t+", "+a+"%, "+o+"%, "+this._roundA+")"},toHsl:function(){var e=r(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=r(this._r,this._g,this._b),t=i(360*e.h),a=i(100*e.s),o=i(100*e.l);return 1==this._a?"hsl("+t+", "+a+"%, "+o+"%)":"hsla("+t+", "+a+"%, "+o+"%, "+this._roundA+")"},toHex:function(e){return t(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(){return d(this._r,this._g,this._b,this._a)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+i(this._r)+", "+i(this._g)+", "+i(this._b)+")":"rgba("+i(this._r)+", "+i(this._g)+", "+i(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:i(100*z(this._r,255))+"%",g:i(100*z(this._g,255))+"%",b:i(100*z(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+i(100*z(this._r,255))+"%, "+i(100*z(this._g,255))+"%, "+i(100*z(this._b,255))+"%)":"rgba("+i(100*z(this._r,255))+"%, "+i(100*z(this._g,255))+"%, "+i(100*z(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(S[t(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+d(this._r,this._g,this._b,this._a),a=t,o=this._gradientType?"GradientType = 1, ":"";e&&(a=h(e).toHex8String());return"progid:DXImageTransform.Microsoft.gradient("+o+"startColorstr="+t+",endColorstr="+a+")"},toString:function(e){var t=!!e;e=e||this._format;var a=!1,o=this._a<1&&0<=this._a;return t||!o||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"name"!==e?("rgb"===e&&(a=this.toRgbString()),"prgb"===e&&(a=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(a=this.toHexString()),"hex3"===e&&(a=this.toHexString(!0)),"hex8"===e&&(a=this.toHex8String()),"name"===e&&(a=this.toName()),"hsl"===e&&(a=this.toHslString()),"hsv"===e&&(a=this.toHsvString()),a||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},_applyModification:function(e,t){var a=e.apply(null,[this].concat([].slice.call(t)));return this._r=a._r,this._g=a._g,this._b=a._b,this.setAlpha(a._a),this},lighten:function(){return this._applyModification(b,arguments)},brighten:function(){return this._applyModification(m,arguments)},darken:function(){return this._applyModification(v,arguments)},desaturate:function(){return this._applyModification(a,arguments)},saturate:function(){return this._applyModification(p,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(x,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(k,arguments)},complement:function(){return this._applyCombination(y,arguments)},monochromatic:function(){return this._applyCombination(P,arguments)},splitcomplement:function(){return this._applyCombination(_,arguments)},triad:function(){return this._applyCombination(T,arguments)},tetrad:function(){return this._applyCombination(w,arguments)}},h.fromRatio=function(e,t){if("object"==typeof e){var a={};for(var o in e)e.hasOwnProperty(o)&&(a[o]="a"===o?e[o]:F(e[o]));e=a}return h(e,t)},h.equals=function(e,t){return!(!e||!t)&&h(e).toRgbString()==h(t).toRgbString()},h.random=function(){return h.fromRatio({r:e(),g:e(),b:e()})},h.mix=function(e,t,a){a=0===a?0:a||50;var o,r=h(e).toRgb(),n=h(t).toRgb(),s=a/100,i=2*s-1,l=n.a-r.a,c=1-(o=((o=i*l==-1?i:(i+l)/(1+i*l))+1)/2),u={r:n.r*o+r.r*c,g:n.g*o+r.g*c,b:n.b*o+r.b*c,a:n.a*s+r.a*(1-s)};return h(u)},h.readability=function(e,t){var a=h(e),o=h(t),r=a.toRgb(),n=o.toRgb(),s=a.getBrightness(),i=o.getBrightness(),l=Math.max(r.r,n.r)-Math.min(r.r,n.r)+Math.max(r.g,n.g)-Math.min(r.g,n.g)+Math.max(r.b,n.b)-Math.min(r.b,n.b);return{brightness:Math.abs(s-i),color:l}},h.isReadable=function(e,t){var a=h.readability(e,t);return 125<a.brightness&&500<a.color},h.mostReadable=function(e,t){for(var a=null,o=0,r=!1,n=0;n<t.length;n++){var s=h.readability(e,t[n]),i=125<s.brightness&&500<s.color,l=s.brightness/125*3+s.color/500;(i&&!r||i&&r&&o<l||!i&&!r&&o<l)&&(r=i,o=l,a=h(t[n]))}return a};var C=h.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},S=h.hexNames=function(e){var t={};for(var a in e)e.hasOwnProperty(a)&&(t[e[a]]=a);return t}(C);function M(e){return e=parseFloat(e),(isNaN(e)||e<0||1<e)&&(e=1),e}function z(e,t){var a;"string"==typeof(a=e)&&-1!=a.indexOf(".")&&1===parseFloat(a)&&(e="100%");var o,r="string"==typeof(o=e)&&-1!=o.indexOf("%");return e=u(t,f(0,parseFloat(e))),r&&(e=parseInt(e*t,10)/100),c.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function j(e){return u(1,f(0,e))}function A(e){return parseInt(e,16)}function R(e){return 1==e.length?"0"+e:""+e}function F(e){return e<=1&&(e=100*e+"%"),e}var H,L,O,Q=(L="[\\s|\\(]+("+(H="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+H+")[,|\\s]+("+H+")\\s*\\)?",O="[\\s|\\(]+("+H+")[,|\\s]+("+H+")[,|\\s]+("+H+")[,|\\s]+("+H+")\\s*\\)?",{rgb:new RegExp("rgb"+L),rgba:new RegExp("rgba"+O),hsl:new RegExp("hsl"+L),hsla:new RegExp("hsla"+O),hsv:new RegExp("hsv"+L),hsva:new RegExp("hsva"+O),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});window.tinycolor=h}(),De(function(){De.fn.spectrum.load&&De.fn.spectrum.processNativeColorInputs()})}),jQuery.spectrum.localization.ar={cancelText:"إلغاء",chooseText:"إختار",clearText:"إرجاع الألوان على ما كانت",noColorSelectedText:"لم تختار أي لون",togglePaletteMoreText:"أكثر",togglePaletteLessText:"أقل"},jQuery.spectrum.localization.ca={cancelText:"Cancel·lar",chooseText:"Escollir",clearText:"Esborrar color seleccionat",noColorSelectedText:"Cap color seleccionat",togglePaletteMoreText:"Més",togglePaletteLessText:"Menys"},jQuery.spectrum.localization.cs={cancelText:"zrušit",chooseText:"vybrat",clearText:"Resetovat výměr barev",noColorSelectedText:"Žádná barva nebyla vybrána",togglePaletteMoreText:"více",togglePaletteLessText:"méně"},jQuery.spectrum.localization.de={cancelText:"Abbrechen",chooseText:"Wählen",clearText:"Farbauswahl zurücksetzen",noColorSelectedText:"Keine Farbe ausgewählt",togglePaletteMoreText:"Mehr",togglePaletteLessText:"Weniger"},jQuery.spectrum.localization.dk={cancelText:"annuller",chooseText:"Vælg"},jQuery.spectrum.localization.es={cancelText:"Cancelar",chooseText:"Elegir",clearText:"Borrar color seleccionado",noColorSelectedText:"Ningún color seleccionado",togglePaletteMoreText:"Más",togglePaletteLessText:"Menos"},jQuery.spectrum.localization.et={cancelText:"Katkesta",chooseText:"Vali",clearText:"Tühista värvivalik",noColorSelectedText:"Ühtki värvi pole valitud",togglePaletteMoreText:"Rohkem",togglePaletteLessText:"Vähem"},jQuery.spectrum.localization.fa={cancelText:"لغو",chooseText:"انتخاب",clearText:"تنظیم مجدد رنگ",noColorSelectedText:"هیچ رنگی انتخاب نشده است!",togglePaletteMoreText:"بیشتر",togglePaletteLessText:"کمتر"},jQuery.spectrum.localization.fi={cancelText:"Kumoa",chooseText:"Valitse"},jQuery.spectrum.localization.fr={cancelText:"Annuler",chooseText:"Valider",clearText:"Effacer couleur sélectionnée",noColorSelectedText:"Aucune couleur sélectionnée",togglePaletteMoreText:"Plus",togglePaletteLessText:"Moins"},jQuery.spectrum.localization.gr={cancelText:"Ακύρωση",chooseText:"Επιλογή",clearText:"Καθαρισμός επιλεγμένου χρώματος",noColorSelectedText:"Δεν έχει επιλεχθεί κάποιο χρώμα",togglePaletteMoreText:"Περισσότερα",togglePaletteLessText:"Λιγότερα"},jQuery.spectrum.localization.he={cancelText:"בטל בחירה",chooseText:"בחר צבע",clearText:"אפס בחירה",noColorSelectedText:"לא נבחר צבע",togglePaletteMoreText:"עוד צבעים",togglePaletteLessText:"פחות צבעים"},jQuery.spectrum.localization.hr={cancelText:"Odustani",chooseText:"Odaberi",clearText:"Poništi odabir",noColorSelectedText:"Niti jedna boja nije odabrana",togglePaletteMoreText:"Više",togglePaletteLessText:"Manje"},jQuery.spectrum.localization.hu={cancelText:"Mégsem",chooseText:"Mentés",clearText:"A színválasztás visszaállítása",noColorSelectedText:"Nincs szín kijelölve",togglePaletteMoreText:"Több",togglePaletteLessText:"Kevesebb"},jQuery.spectrum.localization.id={cancelText:"Batal",chooseText:"Pilih",clearText:"Hapus Pilihan Warna",noColorSelectedText:"Warna Tidak Dipilih",togglePaletteMoreText:"tambah",togglePaletteLessText:"kurangi"},jQuery.spectrum.localization.it={cancelText:"annulla",chooseText:"scegli",clearText:"Annulla selezione colore",noColorSelectedText:"Nessun colore selezionato"},jQuery.spectrum.localization.ja={cancelText:"中止",chooseText:"選択"},jQuery.spectrum.localization.ko={cancelText:"취소",chooseText:"선택",clearText:"선택 초기화",noColorSelectedText:"선택된 색상 없음",togglePaletteMoreText:"더보기",togglePaletteLessText:"줄이기"},jQuery.spectrum.localization.lt={cancelText:"Atšaukti",chooseText:"Pasirinkti",clearText:"Išvalyti pasirinkimą",noColorSelectedText:"Spalva nepasirinkta",togglePaletteMoreText:"Daugiau",togglePaletteLessText:"Mažiau"},jQuery.spectrum.localization["nb-no"]={cancelText:"Avbryte",chooseText:"Velg",clearText:"Tilbakestill",noColorSelectedText:"Farge er ikke valgt",togglePaletteMoreText:"Mer",togglePaletteLessText:"Mindre"},jQuery.spectrum.localization["nl-nl"]={cancelText:"Annuleer",chooseText:"Kies",clearText:"Wis kleur selectie",togglePaletteMoreText:"Meer",togglePaletteLessText:"Minder"},jQuery.spectrum.localization.pl={cancelText:"Anuluj",chooseText:"Wybierz",clearText:"Usuń wybór koloru",noColorSelectedText:"Nie wybrano koloru",togglePaletteMoreText:"Więcej",togglePaletteLessText:"Mniej"},jQuery.spectrum.localization["pt-br"]={cancelText:"Cancelar",chooseText:"Escolher",clearText:"Limpar cor selecionada",noColorSelectedText:"Nenhuma cor selecionada",togglePaletteMoreText:"Mais",togglePaletteLessText:"Menos"},jQuery.spectrum.localization["pt-pt"]={cancelText:"Cancelar",chooseText:"Escolher",clearText:"Limpar cor seleccionada",noColorSelectedText:"Nenhuma cor seleccionada",togglePaletteMoreText:"Mais",togglePaletteLessText:"Menos"},jQuery.spectrum.localization.ru={cancelText:"Отмена",chooseText:"Выбрать",clearText:"Сбросить",noColorSelectedText:"Цвет не выбран",togglePaletteMoreText:"Ещё",togglePaletteLessText:"Скрыть"},jQuery.spectrum.localization.sv={cancelText:"Avbryt",chooseText:"Välj"},jQuery.spectrum.localization.tr={cancelText:"iptal",chooseText:"tamam"},jQuery.spectrum.localization["zh-cn"]={cancelText:"取消",chooseText:"选择",clearText:"清除",togglePaletteMoreText:"更多选项",togglePaletteLessText:"隐藏",noColorSelectedText:"尚未选择任何颜色"},jQuery.spectrum.localization["zh-tw"]={cancelText:"取消",chooseText:"選擇",clearText:"清除",togglePaletteMoreText:"更多選項",togglePaletteLessText:"隱藏",noColorSelectedText:"尚未選擇任何顏色"};